<?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>34511</bug_id>
          
          <creation_ts>2010-02-02 18:56:41 -0800</creation_ts>
          <short_desc>refactor run-chromium-webkit-tests, make work for webkit mac platform</short_desc>
          <delta_ts>2010-02-05 17:10:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>evan</cc>
    
    <cc>ojan</cc>
    
    <cc>pam</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>187234</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-02 18:56:41 -0800</bug_when>
    <thetext>This is a tracking bug to follow the work being done to genericize run-chromium-webkit-tests and make it work with the base Mac platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187242</commentid>
    <comment_count>1</comment_count>
      <attachid>47989</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-02 20:12:02 -0800</bug_when>
    <thetext>Created attachment 47989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187243</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-02 20:14:39 -0800</bug_when>
    <thetext>Hmm. Okay, 290KB is a pretty big patch. I&apos;ll see if I can split this up into more reasonable chunks tomorrow.

Note that this does work as-is, and we get a 3.5x speedup over run-webkit-tests on my Mac Pro; the tests complete in just over 2 minutes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187276</commentid>
    <comment_count>3</comment_count>
      <attachid>47989</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-02-02 23:02:59 -0800</bug_when>
    <thetext>Comment on attachment 47989
Patch

I think changing the name from platform to port is confusing.  I think of Chromium as a single WebKit port, but you&apos;re talking about the difference between Chromium platforms.

Also, it&apos;s impossible to tell from this diff what is a copy from an existing file and what is a new implementation.  I skipped a lot of stuff because it kind of felt like a copy.

&gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/driver_test.py b/WebKitTools/Scripts/webkitpy/layout_tests/driver_test.py
&gt; +import os
&gt; +import port
&gt; +import optparse

Nit: alphabetize imports

&gt; +def run_tests(port, options, tests):
&gt; +    image_path = &apos;foo.png&apos;

image_path appears unused.

&gt; +    driver = port.start_driver(&apos;foo.png&apos;, None)

What is foo.png?

&gt; +    for t in tests:
&gt; +        uri = port.filename_to_uri(os.path.join(port.layout_tests_dir(), t))
&gt; +        print &quot;uri: &quot; + uri
&gt; +        (crash, timeout, checksum, output, err) = \

Nit: no () on the left side of the equals.

&gt; +if __name__ == &apos;__main__&apos;:
&gt; +    optparser = optparse.OptionParser()
&gt; +    optparser.add_option(&apos;-p&apos;, &apos;--port&apos;, action=&apos;store&apos;, default=&apos;mac&apos;)

Please add help text for all the flags.  Also, can you use type=choice to limit the possible values for port and target?

&gt; +    optparser.add_option(&apos;-t&apos;, &apos;--target&apos;, action=&apos;store&apos;, default=&apos;Release&apos;)
&gt; +    optparser.add_option(&apos;&apos;, &apos;--timeout&apos;, action=&apos;store&apos;, default=&apos;2000&apos;)

type=int?  Help sound mention that timeout is in ms.




&gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py
&gt; +        if hasattr(self._port, &apos;path_from_base&apos;):

Why would _port not have this attribute?  Can we force a common interface for each Port?  E.g., a method that returns the directories needed here.


&gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py
&gt; +    def __init__(self, port, tests, expectations, platform, is_debug_mode,
&gt; +                  is_lint_mode, tests_are_present=True):

Nit: Seems we lost the docstring.  Would be nice to document the args.

&gt; @@ -320,27 +309,13 @@ class TestExpectationsFile:
&gt;          &quot;&quot;&quot;Returns an object that can be iterated over. Allows for not caring
&gt;          about whether we&apos;re iterating over a file or a new-line separated
&gt;          string.&quot;&quot;&quot;

Nit: This should probably be a generator function.

&gt; +        # Strip final entry if it&apos;s empty to avoid added in an extra
&gt; +        # newline.
&gt; +        if iterable[len(iterable) - 1] == &quot;\n&quot;:
&gt; +            return iterable[:len(iterable) - 1]

Nit: 
if iterable[-1] == &quot;\n&quot;
    return iterable[:-1]

&gt; @@ -398,6 +373,9 @@ class TestExpectationsFile:
&gt; +        # TODO(dpranke) - update this

Nit: WebKit seems to use FIXME instead of TODO.

&gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py
&gt; +        (crash, timeout, actual_checksum, output, error) =  \

Nit: No ()s.

&gt; @@ -454,32 +403,23 @@ class TestShellThread(threading.Thread):
&gt; +        (crash, timeout, actual_checksum, output, error) = \

Nit: No ()s

&gt; +        end = time.time()
&gt; +
&gt; +        stats = process_output(self._port, test_info, self._test_types,
&gt; +                               self._test_args, self._options.target,
&gt; +                               self._options.results_directory, crash,
&gt; +                               timeout, end - start, actual_checksum,
&gt; +                               output, error)

Nit: Having so many args seems like a recipe for hard to maintain code.  Maybe we can refactor into some objects in a separate change.

&gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/apache_http_server.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/apache_http_server.py
&gt; +class LayoutTestApacheHttpd(http_server_base.HttpServerBase):
&gt; +
&gt; +    def __init__(self, port_obj, output_dir):

Everywhere else you call this &quot;port&quot; rather than &quot;port_obj&quot;.  Would be nice to be consistent.

Would also be nice if this file had a way to start/stop the server from the command line like the other http server implementations.

&gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py
&gt; +class Driver:

Nit: Should the file docstring make mention of the Driver class?

&gt; +    def __init__(self, png_path, options, port_object):

Nit: Would be nice to be consistent between port_object and port.  Also, all the other classes seem to take port as the first arg and this class takes it as the last arg.

&gt; +    def run_test(uri, timeout, checksum):

Nit: Should the first arg be self?  Probably doesn&apos;t matter since it&apos;s overridden by implementations.

&gt; +        Returns a tuple of the following:
&gt; +            crash - a boolean indicating whether the driver crashed on the test
&gt; +            timeout - a boolean indicating whehter the test timed out
&gt; +            checksum - a string containing the checksum of the image, if
&gt; +                present
&gt; +            output - any text output
&gt; +            error - any unexpected or additional (or error) text output

This is the type of thing that would be nice to make a full fledged class out of rather than returning a 5-tuple.

&gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py
&gt; +    def setup_test_run(self):
&gt; +        # Delete the disk cache if any to ensure a clean test run.

Is this necessary these days?  I thought we used the in memory cache (otherwise running multiple test shells would corrupt the cache).

&gt; +    def start_helper(self):
&gt; +        self._helper = None
&gt; +        return
&gt; +        helper_path = self._path_to_helper()

Can we delete this unreached code?

&gt; +    def stop_helper(self):
&gt; +        pass
&gt; +        if self._helper:

This code too.

&gt; +        return self._path_from_base(&apos;webkit&apos;, &apos;data&apos;, &apos;layout_tests&apos;,
&gt; +                                   &apos;platform&apos;, platform, &apos;LayoutTests&apos;)

Nit: indention seems off by one.

&gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/http_server.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/http_server.py
&gt; +++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/http_server.py

Should this file be named to reflect that it&apos;s just for lighttpd?  Alternately, can we do without until we bring up Chromium Win?

&gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/websocket_server.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/websocket_server.py
&gt; +def remove_log_files(folder, starts_with):

I think I saw this method in a different file.  Would be nice to share.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187577</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-03 18:05:01 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 47989 [details])
&gt; I think changing the name from platform to port is confusing.  I think of
&gt; Chromium as a single WebKit port, but you&apos;re talking about the difference
&gt; between Chromium platforms.

I agree that it is confusing. Ideally I would have used just &apos;platform&apos;, but that&apos;s a builtin module in python. I felt that &apos;platform_utils&apos; was also not a great name and I thought that port was better.

Also the name is used to refer to truly different ports, like &apos;chromium&apos; vs &apos;mac&apos; vs &apos;gtk&apos;.

&gt; 
&gt; Also, it&apos;s impossible to tell from this diff what is a copy from an existing
&gt; file and what is a new implementation.  I skipped a lot of stuff because it
&gt; kind of felt like a copy.
&gt; 

Yeah, a lot of it is a copy, and there doesn&apos;t seem to be a good way to indicate that using git; plus even where it was a copy a lot of it got re-arranged.

&gt; &gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/driver_test.py b/WebKitTools/Scripts/webkitpy/layout_tests/driver_test.py
&gt; &gt; +import os
&gt; &gt; +import port
&gt; &gt; +import optparse
&gt; 
&gt; Nit: alphabetize imports
&gt; 

Done.

&gt; &gt; +def run_tests(port, options, tests):
&gt; &gt; +    image_path = &apos;foo.png&apos;
&gt; 
&gt; image_path appears unused.
&gt; 
&gt; &gt; +    driver = port.start_driver(&apos;foo.png&apos;, None)
&gt; 
&gt; What is foo.png?
&gt;

Clarified the two. It was supposed to be start_driver(image_path). Added a comment to indicate that it&apos;s the path to write the image capture result to.
 
&gt; &gt; +    for t in tests:
&gt; &gt; +        uri = port.filename_to_uri(os.path.join(port.layout_tests_dir(), t))
&gt; &gt; +        print &quot;uri: &quot; + uri
&gt; &gt; +        (crash, timeout, checksum, output, err) = \
&gt; 
&gt; Nit: no () on the left side of the equals.
&gt; 

Done.

&gt; &gt; +if __name__ == &apos;__main__&apos;:
&gt; &gt; +    optparser = optparse.OptionParser()
&gt; &gt; +    optparser.add_option(&apos;-p&apos;, &apos;--port&apos;, action=&apos;store&apos;, default=&apos;mac&apos;)
&gt; 
&gt; Please add help text for all the flags.  Also, can you use type=choice to limit
&gt; the possible values for port and target?
&gt; 
&gt; &gt; +    optparser.add_option(&apos;-t&apos;, &apos;--target&apos;, action=&apos;store&apos;, default=&apos;Release&apos;)
&gt; &gt; +    optparser.add_option(&apos;&apos;, &apos;--timeout&apos;, action=&apos;store&apos;, default=&apos;2000&apos;)
&gt; 
&gt; type=int?  Help sound mention that timeout is in ms.
&gt; 

Done

&gt; 
&gt; &gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py
&gt; &gt; +        if hasattr(self._port, &apos;path_from_base&apos;):
&gt; 
&gt; Why would _port not have this attribute?  Can we force a common interface for
&gt; each Port?  E.g., a method that returns the directories needed here.
&gt;

_port_from_base() is actually only defined in the Chromium implementations and points to the top of the Chromium source tree; it isn&apos;t meaningful in the WebKit mac port (or other ports).

I will add more descriptive hooks to the Port interface for determining rev info.
 
&gt; 
&gt; &gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_expectations.py
&gt; &gt; +    def __init__(self, port, tests, expectations, platform, is_debug_mode,
&gt; &gt; +                  is_lint_mode, tests_are_present=True):
&gt; 
&gt; Nit: Seems we lost the docstring.  Would be nice to document the args.
&gt; 

Done.

&gt; &gt; @@ -320,27 +309,13 @@ class TestExpectationsFile:
&gt; &gt;          &quot;&quot;&quot;Returns an object that can be iterated over. Allows for not caring
&gt; &gt;          about whether we&apos;re iterating over a file or a new-line separated
&gt; &gt;          string.&quot;&quot;&quot;
&gt; 
&gt; Nit: This should probably be a generator function.
&gt; 

You&apos;re probably right, but I&apos;ll leave it for now.

&gt; &gt; +        # Strip final entry if it&apos;s empty to avoid added in an extra
&gt; &gt; +        # newline.
&gt; &gt; +        if iterable[len(iterable) - 1] == &quot;\n&quot;:
&gt; &gt; +            return iterable[:len(iterable) - 1]
&gt; 
&gt; Nit: 
&gt; if iterable[-1] == &quot;\n&quot;
&gt;     return iterable[:-1]
&gt; 

Done

&gt; &gt; @@ -398,6 +373,9 @@ class TestExpectationsFile:
&gt; &gt; +        # TODO(dpranke) - update this
&gt; 
&gt; Nit: WebKit seems to use FIXME instead of TODO.
&gt; 

Done

&gt; &gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py
&gt; &gt; +        (crash, timeout, actual_checksum, output, error) =  \
&gt; 
&gt; Nit: No ()s.
&gt; 
&gt; &gt; @@ -454,32 +403,23 @@ class TestShellThread(threading.Thread):
&gt; &gt; +        (crash, timeout, actual_checksum, output, error) = \
&gt; 
&gt; Nit: No ()s
&gt; 
&gt; &gt; +        end = time.time()
&gt; &gt; +
&gt; &gt; +        stats = process_output(self._port, test_info, self._test_types,
&gt; &gt; +                               self._test_args, self._options.target,
&gt; &gt; +                               self._options.results_directory, crash,
&gt; &gt; +                               timeout, end - start, actual_checksum,
&gt; &gt; +                               output, error)
&gt; 
&gt; Nit: Having so many args seems like a recipe for hard to maintain code.  Maybe
&gt; we can refactor into some objects in a separate change.
&gt; 

Agree completely.

&gt; &gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/apache_http_server.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/apache_http_server.py
&gt; &gt; +class LayoutTestApacheHttpd(http_server_base.HttpServerBase):
&gt; &gt; +
&gt; &gt; +    def __init__(self, port_obj, output_dir):
&gt; 
&gt; Everywhere else you call this &quot;port&quot; rather than &quot;port_obj&quot;.  Would be nice to
&gt; be consistent.
&gt;

Unfortunately, the server files also use &quot;port&quot; to indicate the port to run the server on (e.g., 8000). I didn&apos;t want to use &quot;port_obj&quot; everywhere, but changing
the socket port here was awkward.
 
&gt; Would also be nice if this file had a way to start/stop the server from the
&gt; command line like the other http server implementations.
&gt;

Yeah. I&apos;ll add that later.
 
&gt; &gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py
&gt; &gt; +class Driver:
&gt; 
&gt; Nit: Should the file docstring make mention of the Driver class?
&gt; 

done

&gt; &gt; +    def __init__(self, png_path, options, port_object):
&gt; 
&gt; Nit: Would be nice to be consistent between port_object and port.  Also, all
&gt; the other classes seem to take port as the first arg and this class takes it as
&gt; the last arg.
&gt;

done. Not sure why I used port_object here, or flipped the order.
 
&gt; &gt; +    def run_test(uri, timeout, checksum):
&gt; 
&gt; Nit: Should the first arg be self?  Probably doesn&apos;t matter since it&apos;s
&gt; overridden by implementations.
&gt;

Yes. Good catch.
 
&gt; &gt; +        Returns a tuple of the following:
&gt; &gt; +            crash - a boolean indicating whether the driver crashed on the test
&gt; &gt; +            timeout - a boolean indicating whehter the test timed out
&gt; &gt; +            checksum - a string containing the checksum of the image, if
&gt; &gt; +                present
&gt; &gt; +            output - any text output
&gt; &gt; +            error - any unexpected or additional (or error) text output
&gt; 
&gt; This is the type of thing that would be nice to make a full fledged class out
&gt; of rather than returning a 5-tuple.
&gt; 

Yeah. See above in test_shell_thread.

&gt; &gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py
&gt; &gt; +    def setup_test_run(self):
&gt; &gt; +        # Delete the disk cache if any to ensure a clean test run.
&gt; 
&gt; Is this necessary these days?  I thought we used the in memory cache (otherwise
&gt; running multiple test shells would corrupt the cache).

I actually don&apos;t know; this was copied over from the existing code.

&gt; 
&gt; &gt; +    def start_helper(self):
&gt; &gt; +        self._helper = None
&gt; &gt; +        return
&gt; &gt; +        helper_path = self._path_to_helper()
&gt; 
&gt; Can we delete this unreached code?
&gt; 
&gt; &gt; +    def stop_helper(self):
&gt; &gt; +        pass
&gt; &gt; +        if self._helper:
&gt; 
&gt; This code too.
&gt; 

Fixed. This was broken.

&gt; &gt; +        return self._path_from_base(&apos;webkit&apos;, &apos;data&apos;, &apos;layout_tests&apos;,
&gt; &gt; +                                   &apos;platform&apos;, platform, &apos;LayoutTests&apos;)
&gt; 
&gt; Nit: indention seems off by one.
&gt; 

Fixed.

&gt; &gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/http_server.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/http_server.py
&gt; &gt; +++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/http_server.py
&gt; 
&gt; Should this file be named to reflect that it&apos;s just for lighttpd?  Alternately,
&gt; can we do without until we bring up Chromium Win?
&gt;

Probably, but I&quot;ll leave it for this CL. Chromium Win is already working.
 
&gt; &gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/websocket_server.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/websocket_server.py
&gt; &gt; +def remove_log_files(folder, starts_with):
&gt; 
&gt; I think I saw this method in a different file.  Would be nice to share.

Done - made a common method in http_server_base.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187624</commentid>
    <comment_count>5</comment_count>
      <attachid>48098</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-03 21:28:05 -0800</bug_when>
    <thetext>Created attachment 48098
full patch revised w/ feedback from reviewers

attaching revised full patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187629</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-03 21:44:05 -0800</bug_when>
    <thetext>The renames make it hard to see what&apos;s going on here.  rs=me on making any renames first w/o changing functionality and then we could review a patch which actually changes/adds functionality.

rs=me on doing the Chromium -&gt; Google Inc changes in the licenses as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187651</commentid>
    <comment_count>7</comment_count>
      <attachid>48106</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-03 23:58:56 -0800</bug_when>
    <thetext>Created attachment 48106
patch 1 of 4 - rename files to the new dir structure

This was checked in as r54327 (&quot;rubber-stamped&quot; per eric seidel&apos;s instructions)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187652</commentid>
    <comment_count>8</comment_count>
      <attachid>48107</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-04 00:00:08 -0800</bug_when>
    <thetext>Created attachment 48107
uploading patch 2 of 4 - this just fix a string in the copyright text for the files.

this was committed as r54328 (&quot;rubber-stamped&quot; per instructions from eric seidel)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187656</commentid>
    <comment_count>9</comment_count>
      <attachid>48109</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-04 00:07:19 -0800</bug_when>
    <thetext>Created attachment 48109
patch 3 of 4 - refactor the port package into an object-oriented style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187658</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-04 00:10:28 -0800</bug_when>
    <thetext>Okay, this latest patch shows the substantive changes involved in the refactoring. Please review.

(There will be one more patch that adds in the WebKit mac port plus some test code).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187832</commentid>
    <comment_count>11</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2010-02-04 09:36:42 -0800</bug_when>
    <thetext>I glanced at the patch and I still see copyright tweaks -- did you forget to merge in your other committed changes before making the diff?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187867</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-04 11:04:06 -0800</bug_when>
    <thetext>3 of 4 seems to include copyright text changes too.  Did you upload the right patch?  The bots also don&apos;t think that 3 of 4 applies to trunk...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187906</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-04 13:13:01 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; 3 of 4 seems to include copyright text changes too.  Did you upload the right
&gt; patch?  The bots also don&apos;t think that 3 of 4 applies to trunk...

The copyright diffs to the first two files were files that were missed in patch 2. There was one more copyright diff in chromium_win.py; I&apos;m not sure what happened there.

Apart from that, it was the right patch, but I created it using svn diff and posting it by hand. I&apos;ll re-upload it using webkit-patch and hopefully that&apos;ll be happier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187909</commentid>
    <comment_count>14</comment_count>
      <attachid>48161</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-04 13:16:18 -0800</bug_when>
    <thetext>Created attachment 48161
resubmitted patch 3 of 4; not sure why the bots didn&apos;t like the last one</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188082</commentid>
    <comment_count>15</comment_count>
      <attachid>48161</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-02-04 23:02:26 -0800</bug_when>
    <thetext>Comment on attachment 48161
resubmitted patch 3 of 4; not sure why the bots didn&apos;t like the last one

This diff is much easier to read.  Thanks.

LGTM.

&gt; Index: WebKitTools/Scripts/webkitpy/layout_tests/run_chromium_webkit_tests.py
&gt; -    def __init__(self, options, meter):
&gt; +    def __init__(self, options, meter, port):

Nit: Can we pass in port as the first arg here?

&gt; -        return (test_args, shell_args)
&gt; +        return (test_args, png_path, shell_args)

Nit: You don&apos;t need parens around this.

&gt; Index: WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py
&gt; +        (crash, timeout, actual_checksum, output, error) =  \
&gt; +            driver.run_test(test_info.uri.strip(), test_info.timeout,
&gt; +                            test_info.image_hash)

Nit: You don&apos;t need the parens on the left side of this assignment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188208</commentid>
    <comment_count>16</comment_count>
      <attachid>48161</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-05 10:00:53 -0800</bug_when>
    <thetext>Comment on attachment 48161
resubmitted patch 3 of 4; not sure why the bots didn&apos;t like the last one

Seems a bit strange that the port has a path_from_chromium_base method.

Maybe instead we should use a &quot;add_repository_paths&quot; method.  or maybe a &quot;repostiory_paths&quot; method which returns a list that we loop over.

 57             port: reference to platform-specific interface
Seems like you mean something like &quot;a webkit port, e.g. Chromium Mac, or Apple Windows&quot;

This will probably become clear to me later:
 60             platform: test platform name to use for parsing expectations
but I thought that &quot;port&quot; encompassed platform?

I&apos;m not clear what this means:
 391         # FIXME(dpranke) - update this

Generally # FIXME in webkit don&apos;t have a speicifc person assigned, they&apos;re supposed to be detailed enough to be generally actionable.

I&apos;m not sure this is accurate:
 58       port: port-specific hooks

This is starting to get to the point where we might wnat to return a real class object. :)
152         (crash, timeout, actual_checksum, output, error) =  \
 153             driver.run_test(test_info.uri.strip(), test_info.timeout,
 154                             test_info.image_hash)

I have to catch a shuttle, but I&apos;ll read more on the shuttle and we can talk about this in person this afternoon.

Looks good so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188337</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-05 15:21:18 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 48161 [details])
&gt; This diff is much easier to read.  Thanks.
&gt; 
&gt; LGTM.
&gt; 
&gt; &gt; Index: WebKitTools/Scripts/webkitpy/layout_tests/run_chromium_webkit_tests.py
&gt; &gt; -    def __init__(self, options, meter):
&gt; &gt; +    def __init__(self, options, meter, port):
&gt; 
&gt; Nit: Can we pass in port as the first arg here?
&gt; 

Done.

&gt; &gt; -        return (test_args, shell_args)
&gt; &gt; +        return (test_args, png_path, shell_args)
&gt; 
&gt; Nit: You don&apos;t need parens around this.
&gt;

Done. I actually find it a bit easier to follow when we return multiple arguments to wrap them in parens, but maybe that&apos;s just me.
 
&gt; &gt; Index: WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_shell_thread.py
&gt; &gt; +        (crash, timeout, actual_checksum, output, error) =  \
&gt; &gt; +            driver.run_test(test_info.uri.strip(), test_info.timeout,
&gt; &gt; +                            test_info.image_hash)
&gt; 
&gt; Nit: You don&apos;t need the parens on the left side of this assignment.

Done. ibid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188346</commentid>
    <comment_count>18</comment_count>
      <attachid>48161</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-05 15:46:40 -0800</bug_when>
    <thetext>Comment on attachment 48161
resubmitted patch 3 of 4; not sure why the bots didn&apos;t like the last one

expected_baselines could have just always returned a list, and the callers that only care about the first, could have only looked at the first?  But perhaps all_baselines is a performance optimization.  Either way, not something we need to change before landing this patch. :)

We should probably hold the ports as contants somewhere, but again, doesn&apos;t matter for this patch:
 210         if relative_path.startswith(LAYOUTTEST_HTTP_DIR):
 211             # http/tests/ run off port 8000 and ssl/ off 8443
 212             relative_path = relative_path[len(LAYOUTTEST_HTTP_DIR):]
 213             port = 8000
 214         elif relative_path.startswith(LAYOUTTEST_WEBSOCKET_DIR):
 215             # websocket/tests/ run off port 8880 and 9323
 216             # Note: the root is /, not websocket/tests/
 217             port = 8880

Interesting.  Will this re-raise e?:
 251         except OSError, e:
 252             if e.errno != errno.EEXIST:
 253                 raise

Looks functional, and better than what we have.

It&apos;s hard to give an in-depth review of a change this large.  But I&apos;m willing to rubber-stamp this for sure!

I looked at every line.  I&apos;m just not sure that my little brain could actually hold it all in at once. :)

Thanks for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188349</commentid>
    <comment_count>19</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-05 15:54:31 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 48161 [details])
&gt; Seems a bit strange that the port has a path_from_chromium_base method.
&gt; 
&gt; Maybe instead we should use a &quot;add_repository_paths&quot; method.  or maybe a
&gt; &quot;repostiory_paths&quot; method which returns a list that we loop over.
&gt;

Yeah, it&apos;s a bit unclear what the best way to handle this is. I&apos;ll talk to Ojan about what he&apos;d like to do here.
 
&gt;  57             port: reference to platform-specific interface
&gt; Seems like you mean something like &quot;a webkit port, e.g. Chromium Mac, or Apple
&gt; Windows&quot;

Clarified a bit in the comments. 

&gt; 
&gt; This will probably become clear to me later:
&gt;  60             platform: test platform name to use for parsing expectations
&gt; but I thought that &quot;port&quot; encompassed platform?
&gt; 
&gt; I&apos;m not clear what this means:
&gt;  391         # FIXME(dpranke) - update this
&gt; 
&gt; Generally # FIXME in webkit don&apos;t have a speicifc person assigned, they&apos;re
&gt; supposed to be detailed enough to be generally actionable.
&gt; 
&gt; I&apos;m not sure this is accurate:
&gt;  58       port: port-specific hooks
&gt; 
&gt; This is starting to get to the point where we might wnat to return a real class
&gt; object. :)
&gt; 152         (crash, timeout, actual_checksum, output, error) =  \
&gt;  153             driver.run_test(test_info.uri.strip(), test_info.timeout,
&gt;  154                             test_info.image_hash)
&gt; 
&gt; I have to catch a shuttle, but I&apos;ll read more on the shuttle and we can talk
&gt; about this in person this afternoon.
&gt; 
&gt; Looks good so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188350</commentid>
    <comment_count>20</comment_count>
      <attachid>48271</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-05 15:54:41 -0800</bug_when>
    <thetext>Created attachment 48271
patch 3 of 4 - revised w/ feedback from tony and eric</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188351</commentid>
    <comment_count>21</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-05 15:55:08 -0800</bug_when>
    <thetext>uploaded patch w/ mods per tony and eric&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188352</commentid>
    <comment_count>22</comment_count>
      <attachid>48271</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-05 15:55:38 -0800</bug_when>
    <thetext>Comment on attachment 48271
patch 3 of 4 - revised w/ feedback from tony and eric

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188356</commentid>
    <comment_count>23</comment_count>
      <attachid>48273</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-05 16:06:17 -0800</bug_when>
    <thetext>Created attachment 48273
patch 4 of 4 - add WebKit Mac implementation, test implementation, and a simple test driver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188360</commentid>
    <comment_count>24</comment_count>
      <attachid>48273</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-05 16:29:32 -0800</bug_when>
    <thetext>Comment on attachment 48273
patch 4 of 4 - add WebKit Mac implementation, test implementation, and a simple test driver

It&apos;s slightly confusing to me what driver_test.py is for.  You explained in person that it&apos;s a testing tool used to short-cut all the 5000 lines of python you normally would go through to call into the basic driver code.

Seems it&apos;s only useful as an intermediate step towards unit tests.  We might want to add a FIXME to the file to suggest that it shoudl be replaced by real unit tests some day.

I think that we probably would have called &quot;TestPort&quot; &quot;MockPort&quot; (not to be confused with MachPort! :p)  But is also OK as is and can be re-worked more later.


Why &quot;is None&quot; here?
 50         if port_name is None:
is that better than just &quot;not port_name&quot;?
I&apos;m not sure what &quot;port.version()&quot; is actually going to use for &quot;port&quot; or how it would compile?
 51             port_name = &apos;mac&apos; + port.version()

Seems we&apos;ll want different ports for the different versions eventually?
4     def baseline_search_path(self):
 55         dirs = []
 56         if self._name == &apos;mac-tiger&apos;:
 57             dirs.append(self._webkit_baseline_path(self._name))
 58         if self._name in (&apos;mac-tiger&apos;, &apos;mac-leopard&apos;):
 59             dirs.append(self._webkit_baseline_path(&apos;mac-leopard&apos;))
 60         if self._name in (&apos;mac-tiger&apos;, &apos;mac-leopard&apos;, &apos;mac-snowleopard&apos;):
 61             dirs.append(self._webkit_baseline_path(&apos;mac-snowleopard&apos;))
 62         dirs.append(self._webkit_baseline_path(&apos;mac&apos;))
 63         return dirs

Not sure.

I think we should consider making this an optional override method (i.e. don&apos;t bother to raise NotImplemented()):
76     def setup_test_run(self):
 77         # This port doesn&apos;t require any specific configuration.
 78         pass
 
We have user.open_webpage for this:
 82         webbrowser.open(uri, new=1)

Again, we should probably make these non-required in the base class:
88     def start_helper(self):
 89         # This port doesn&apos;t use a helper process.
 90         pass
 91 
 92     def stop_helper(self):
 93         # This port doesn&apos;t use a helper process.
 94         pass

I think the skipped-list translator shoudl be a separate class.  But that also could be done in a later change:
 101     def test_expectations(self):

Again, the default port shoudl just pass here:
     def _path_to_helper(self):
 210         return None

There is a special class for parsing editor variables, which probably would work right for this:
63             # This split() isn&apos;t really what we want -- it incorrectly will
 264             # split quoted strings within the wrapper argument -- but in
 265             # practice it shouldn&apos;t come up and the --help output warns
 266             # about it anyway.
 267             cmd += self._options.wrapper.split()

Seems we&apos;ll want to share more code with other ports over time.  SEems to be some copy/paste here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188362</commentid>
    <comment_count>25</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-05 16:40:26 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 48273 [details])
&gt; It&apos;s slightly confusing to me what driver_test.py is for.  You explained in
&gt; person that it&apos;s a testing tool used to short-cut all the 5000 lines of python
&gt; you normally would go through to call into the basic driver code.
&gt; 
&gt; Seems it&apos;s only useful as an intermediate step towards unit tests.  We might
&gt; want to add a FIXME to the file to suggest that it shoudl be replaced by real
&gt; unit tests some day.
&gt; 

Agreed.

&gt; I think that we probably would have called &quot;TestPort&quot; &quot;MockPort&quot; (not to be
&gt; confused with MachPort! :p)  But is also OK as is and can be re-worked more
&gt; later.
&gt; 

Perhaps. They&apos;re not technically Mock units and so I didn&apos;t want to confusing things overly.

&gt; 
&gt; Why &quot;is None&quot; here?
&gt;  50         if port_name is None:
&gt; is that better than just &quot;not port_name&quot;?

I think it&apos;s more idiomatic, but I could be wrong.

&gt; I&apos;m not sure what &quot;port.version()&quot; is actually going to use for &quot;port&quot; or how
&gt; it would compile?
&gt;  51             port_name = &apos;mac&apos; + port.version()
&gt;

That&apos;s a bug. Fixed.
 
&gt; Seems we&apos;ll want different ports for the different versions eventually?
&gt; 4     def baseline_search_path(self):
&gt;  55         dirs = []
&gt;  56         if self._name == &apos;mac-tiger&apos;:
&gt;  57             dirs.append(self._webkit_baseline_path(self._name))
&gt;  58         if self._name in (&apos;mac-tiger&apos;, &apos;mac-leopard&apos;):
&gt;  59             dirs.append(self._webkit_baseline_path(&apos;mac-leopard&apos;))
&gt;  60         if self._name in (&apos;mac-tiger&apos;, &apos;mac-leopard&apos;, &apos;mac-snowleopard&apos;):
&gt;  61             dirs.append(self._webkit_baseline_path(&apos;mac-snowleopard&apos;))
&gt;  62         dirs.append(self._webkit_baseline_path(&apos;mac&apos;))
&gt;  63         return dirs
&gt; 
&gt; Not sure.
&gt;


There&apos;s not enough variance to justify multiple files or classes for different versions (IMO).

 
&gt; I think we should consider making this an optional override method (i.e. don&apos;t
&gt; bother to raise NotImplemented()):
&gt; 76     def setup_test_run(self):
&gt;  77         # This port doesn&apos;t require any specific configuration.
&gt;  78         pass
&gt;

I kind of like it this way because it explicitly makes the implementor look at something and indicate what the right thing to do is. But, I could be convinced otherwise.
 
&gt; We have user.open_webpage for this:
&gt;  82         webbrowser.open(uri, new=1)
&gt; 

Okay.

&gt; Again, we should probably make these non-required in the base class:
&gt; 88     def start_helper(self):
&gt;  89         # This port doesn&apos;t use a helper process.
&gt;  90         pass
&gt;  91 
&gt;  92     def stop_helper(self):
&gt;  93         # This port doesn&apos;t use a helper process.
&gt;  94         pass
&gt; 
&gt; I think the skipped-list translator shoudl be a separate class.  But that also
&gt; could be done in a later change:
&gt;  101     def test_expectations(self):
&gt; 
&gt; Again, the default port shoudl just pass here:
&gt;      def _path_to_helper(self):
&gt;  210         return None
&gt; 
&gt; There is a special class for parsing editor variables, which probably would
&gt; work right for this:
&gt; 63             # This split() isn&apos;t really what we want -- it incorrectly will
&gt;  264             # split quoted strings within the wrapper argument -- but in
&gt;  265             # practice it shouldn&apos;t come up and the --help output warns
&gt;  266             # about it anyway.
&gt;  267             cmd += self._options.wrapper.split()
&gt;

Perhaps a better option would be to allow port-specific command line arguments, so that we don&apos;t need to try and cram them into a single --wrapper argument.
 
&gt; Seems we&apos;ll want to share more code with other ports over time.  SEems to be
&gt; some copy/paste here.

Yeah, especially in the interrupt handling. I think we probably want to rework that code completely since the way the driver handles ctrl-C is clunky at best (there&apos;s a bug filed somewhere about this).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188363</commentid>
    <comment_count>26</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-05 16:41:42 -0800</bug_when>
    <thetext>Committed r54452: &lt;http://trac.webkit.org/changeset/54452&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188367</commentid>
    <comment_count>27</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-05 17:10:39 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 48161 [details])
&gt; expected_baselines could have just always returned a list, and the callers that
&gt; only care about the first, could have only looked at the first?  But perhaps
&gt; all_baselines is a performance optimization.  Either way, not something we need
&gt; to change before landing this patch. :)
&gt; 

all_baselines is used by the scripts that crawl the baseline dirs looking for duplicate expectations. There is no indication that one baseline dir is more important than the others. I suppose we could restructure it as the most important one being first. It might actually be better to split this into two different files.

&gt; We should probably hold the ports as contants somewhere, but again, doesn&apos;t
&gt; matter for this patch:
&gt;  210         if relative_path.startswith(LAYOUTTEST_HTTP_DIR):
&gt;  211             # http/tests/ run off port 8000 and ssl/ off 8443
&gt;  212             relative_path = relative_path[len(LAYOUTTEST_HTTP_DIR):]
&gt;  213             port = 8000
&gt;  214         elif relative_path.startswith(LAYOUTTEST_WEBSOCKET_DIR):
&gt;  215             # websocket/tests/ run off port 8880 and 9323
&gt;  216             # Note: the root is /, not websocket/tests/
&gt;  217             port = 8880
&gt; 

Agreed. There&apos;s a lot of overlap between the three server implementations that can probably be cleaned up.

&gt; Interesting.  Will this re-raise e?:
&gt;  251         except OSError, e:
&gt;  252             if e.errno != errno.EEXIST:
&gt;  253                 raise
&gt; 

Yes. raise by itself will re-raise the exception (if it exists; if not, you get a different exception being thrown).

&gt; Looks functional, and better than what we have.
&gt; 
&gt; It&apos;s hard to give an in-depth review of a change this large.  But I&apos;m willing
&gt; to rubber-stamp this for sure!
&gt; 
&gt; I looked at every line.  I&apos;m just not sure that my little brain could actually
&gt; hold it all in at once. :)
&gt; 
&gt; Thanks for the patch!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47989</attachid>
            <date>2010-02-02 20:12:02 -0800</date>
            <delta_ts>2010-02-03 21:28:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34511-20100202201201.patch</filename>
            <type>text/plain</type>
            <size>297135</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBmNzEyNDhjLi42YjVkYTY2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODcgQEAKKzIwMTAtMDIt
MDIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM0NTExCisKKyAgICAgICAgUmVmYWN0b3IgcnVuLWNocm9taXVtLXdl
YmtpdC10ZXN0cyBhbmQgaW1wbGVtZW50IHRoZSBXZWJLaXQgbWFjIHBvcnQuCisKKyAgICAgICAg
V2UgcmVwbGFjZSB0aGUgJ3BsYXRmb3JtX3V0aWxzKicgbW9kdWxlcyB3aXRoIGEgbmV3ICdwb3J0
JyBwYWNrYWdlCisgICAgICAgIHRoYXQgaXMgb2JqZWN0LW9yaWVudGVkLiBUaGlzIGFsbG93cyB1
cyB0byBwcm9wZXJseSBzdXBwb3J0IG11bHRpcGxlCisgICAgICAgIHBvcnRzIGluIGEgc2luZ2xl
IHByb2Nlc3MsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgdGhpbmdzIGxpa2UgdGhlCisgICAgICAgIHJl
YmFzZWxpbmluZyB0b29sLiBJdCBhbHNvIG1ha2VzIGNvZGUtc2hhcmluZyBhIGxvdCBjbGVhcmVy
IGFuZCBlYXNpZXIuCisgICAgICAgIFRoZSBwYXRoX3V0aWxzLnB5IGZ1bmN0aW9uYWxpdHkgaXMg
YWxzbyByb2xsZWQgaW50byB0aGUgcG9ydCBwYWNrYWdlLAorICAgICAgICBhbmQgdGhlIGh0dHBf
c2VydmVyIGFuZCB3ZWJzb2NrZXRfc2VydmVyIGNvZGUgaXMgbW92ZWQgZnJvbQorICAgICAgICBs
YXlvdXRfcGFja2FnZS8gdG8gcG9ydC8sIHNpbmNlIGl0J3Mgbm90IHZlcnkgc3BlY2lmaWMgdG8g
dGhlIGFjdHVhbAorICAgICAgICB0ZXN0IGRyaXZlciBjb2RlLgorCisgICAgICAgIFRoZSBuZXcg
cG9ydCBwYWNrYWdlIGludGVyZmFjZSAodGhlIFBvcnQgY2xhc3MpIGNvbnRhaW5zIGFsbCBvZgor
ICAgICAgICB0aGUgZW50cnkgcG9pbnRzIG5lZWRlZCB0byBoaWRlIGRpcmVjdG9yeSBsb2NhdGlv
bnMsIGNvbnZlcnQgcGF0aHMKKyAgICAgICAgdG8gVVJMcywgc3Bhd24gcHJvY2Vzc2VzIGFuZCBy
dW4gdGVzdHMsIGFuZCBob2xkIHBsYXRmb3JtLXNwZWNpZmljCisgICAgICAgIGNvbmZpZ3VyYXRp
b24gaW5mby4KKworICAgICAgICBUaGUgbm9uLXBsYXRmb3JtLXNwZWNpZmljIGZpbGVzIGhhdmUg
YmVlbiB1cGRhdGVkIHRvIHVzZSB0aGUgcG9ydAorICAgICAgICBpbnRlcmZhY2UgYnV0IGFyZSBv
dGhlcndpc2UgbGFyZ2VseSB1bmNoYW5nZWQuCisKKyAgICAgICAgQ2F2ZWF0czoKKyAgICAgICAg
LSB0aGUgcmViYXNlbGluaW5nIHRvb2wgaXMgY29tcGxldGVseSBicm9rZW4KKyAgICAgICAgLSB0
aGUgd2luZG93cyBhbmQgbGludXggY2hyb21pdW0gcG9ydHMgYXJlIHVudGVzdGVkCisKKyAgICAg
ICAgU28gd2UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBsYW5kIHRoaXMgdmVyc2lvbiwgYnV0IEkg
YW0gcG9zdGluZyBpdAorICAgICAgICBmb3IgcmV2aWV3LiBEZXBlbmRpbmcgb24gdGhlIHNpemUg
b2YgdGhlIHBhdGNoLCBJIG1heSBuZWVkIHRvIHNwbGl0CisgICAgICAgIHRoaXMgaW50byBtdWx0
aXBsZSBDTHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVzdHM6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZHJpdmVyX3Rlc3QucHk6
IENvcGllZCBmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWNocm9taXVtLXdlYmtpdC10ZXN0
cy4KKyAgICAgICAgICAtIGEgbmV3IHRlc3QgZHJpdmVyIGZvciBhY3R1YWxseSBpbnZva2luZyBE
dW1wUmVuZGVyVHJlZQorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAgICAgICAg
IC0gdXBkYXRlZCB0byBjYWxsIHRoZSBuZXcgcG9ydHMgaW50ZXJmYWNlCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dl
bmVyYXRvci5weToKKyAgICAgICAgICAtIHVwZGF0ZWQgdG8gY2FsbCB0aGUgbmV3IHBvcnRzIGlu
dGVyZmFjZQorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5OgorICAgICAgICAgIC0gdXBkYXRlZCB0byBjYWxs
IHRoZSBuZXcgcG9ydHMgaW50ZXJmYWNlLiBBbHNvIG1vdmVkIFBMQVRGT1JNUworICAgICAgICAg
ICAgaW50byB0aGUgcG9ydHMgaW50ZXJmYWNlLCBhbmQgbW9kaWZpZWQgdGhlIGNvZGUgdG8gb25s
eSBhY2NlcHQKKyAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zIHN0cmluZ3MgKHRoZSBhY3Qg
b2YgcmVhZGluZyB0aGUgZXhwZWN0YXRpb25zCisgICAgICAgICAgICBpcyBub3cgaW4gcG9ydC50
ZXN0X2V4cGVjdGF0aW9ucygpKQorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3BhdGhfdXRpbHMucHk6IFJlbW92ZWQuCisgICAgICAgICAgLSBy
b2xsZWQgaW50byB0aGUgUG9ydCBjbGFzc2VzCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbGludXgucHk6IFJlbW92
ZWQuCisgICAgICAgICAgLSBvYnNvbGV0ZWQKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19tYWMucHk6IFJlbW92ZWQu
CisgICAgICAgICAgLSBvYnNvbGV0ZWQKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc193aW4ucHk6IFJlbW92ZWQuCisg
ICAgICAgICAgLSBvYnNvbGV0ZWQKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5OgorICAgICAgICAgIC0gdXBkYXRlZCB0
byBjYWxsIHRoZSBuZXcgcG9ydHMgaW50ZXJmYWNlCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHk6CisgICAg
ICAgICAgLSB1cGRhdGVkIHRvIGNhbGwgdGhlIG5ldyBwb3J0cyBpbnRlcmZhY2UsIGFuZCByZXdv
cmtlZCB0byBoaWRlCisgICAgICAgICAgICBob3cgd2UgYWN0dWFsbHkgZ2V0IHRoZSBvdXRwdXQg
ZnJvbSBEdW1wUmVuZGVyVHJlZS9UZXN0U2hlbGwuCisgICAgICAgICAgICBUaGUgYWN0dWFsIHRl
c3QgZXhlY3V0aW9uIG5vdyBvY2N1cnMgaW4gcG9ydC9Ecml2ZXIucnVuX3Rlc3QoKQorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvX19pbml0X18ucHk6IFJlbmFt
ZWQgZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9wbGF0Zm9ybV91dGlscy5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weTogUmVuYW1lZCBmcm9tIFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2FwYWNo
ZV9odHRwX3NlcnZlci5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Jhc2UucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbGludXgucHk6IEFkZGVkLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
X3dpbi5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9odHRwX3NlcnZlci5weTogUmVuYW1lZCBmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyLnB5LgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5w
eTogUmVuYW1lZCBmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyX2Jhc2UucHkuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwZDIucGVtOiBSZW5hbWVkIGZyb20gV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cGQy
LnBlbS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2xpZ2h0
dHBkLmNvbmY6IFJlbmFtZWQgZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9saWdodHRwZC5jb25mLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHk6IEFkZGVkLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weTog
UmVuYW1lZCBmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAg
ICAtIHVwZGF0ZWQgdG8gY2FsbCB0aGUgbmV3IHBvcnRzIGludGVyZmFjZQorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvZnV6enlfaW1hZ2VfZGlmZi5w
eToKKyAgICAgICAgICAtIHVwZGF0ZWQgdG8gY2FsbCB0aGUgbmV3IHBvcnRzIGludGVyZmFjZQor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2Vf
ZGlmZi5weToKKyAgICAgICAgICAtIHVwZGF0ZWQgdG8gY2FsbCB0aGUgbmV3IHBvcnRzIGludGVy
ZmFjZQorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMv
dGVzdF90eXBlX2Jhc2UucHk6CisgICAgICAgICAgLSB1cGRhdGVkIHRvIGNhbGwgdGhlIG5ldyBw
b3J0cyBpbnRlcmZhY2UKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90
ZXN0X3R5cGVzL3RleHRfZGlmZi5weToKKyAgICAgICAgICAtIHVwZGF0ZWQgdG8gY2FsbCB0aGUg
bmV3IHBvcnRzIGludGVyZmFjZQorCiAyMDEwLTAyLTAxICBDaHJpcyBKZXJkb25layAgPGNqZXJk
b25la0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNoaW5pY2hpcm8gSGFtYWpp
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tY2hyb21pdW0td2Via2l0LXRl
c3RzIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tY2hyb21pdW0td2Via2l0LXRlc3RzCmluZGV4
IDg3MTI4MzYuLmM1ZjYwZmUgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWNo
cm9taXVtLXdlYmtpdC10ZXN0cworKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi1jaHJvbWl1
bS13ZWJraXQtdGVzdHMKQEAgLTMzLDYgKzMzLDcgQEAgaW1wb3J0IHN5cwogCiBzeXMucGF0aC5h
cHBlbmQob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFy
Z3ZbMF0pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmtpdHB5IiwgImxheW91
dF90ZXN0cyIpKQorc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5h
bWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpKQogaW1wb3J0IHJ1bl9jaHJvbWl1bV93
ZWJraXRfdGVzdHMKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RyaXZlcl90ZXN0LnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZHJpdmVyX3Rlc3QucHkK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjMyOTVlZQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RyaXZlcl90
ZXN0LnB5CkBAIC0wLDAgKzEsNjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICog
TmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKworaW1wb3J0IG9zCitpbXBvcnQgcG9ydAoraW1wb3J0IG9wdHBhcnNlCisKKworZGVmIHJ1
bl90ZXN0cyhwb3J0LCBvcHRpb25zLCB0ZXN0cyk6CisgICAgaW1hZ2VfcGF0aCA9ICdmb28ucG5n
JworICAgIGRyaXZlciA9IHBvcnQuc3RhcnRfZHJpdmVyKCdmb28ucG5nJywgTm9uZSkKKyAgICBm
b3IgdCBpbiB0ZXN0czoKKyAgICAgICAgdXJpID0gcG9ydC5maWxlbmFtZV90b191cmkob3MucGF0
aC5qb2luKHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCB0KSkKKyAgICAgICAgcHJpbnQgInVyaTog
IiArIHVyaQorICAgICAgICAoY3Jhc2gsIHRpbWVvdXQsIGNoZWNrc3VtLCBvdXRwdXQsIGVycikg
PSBcCisgICAgICAgICAgICBkcml2ZXIucnVuX3Rlc3QodXJpLCBpbnQob3B0aW9ucy50aW1lb3V0
KSwgTm9uZSkKKyAgICAgICAgcHJpbnQgImNyYXNoOiAgICAgICAgICIgKyBzdHIoY3Jhc2gpCisg
ICAgICAgIHByaW50ICJ0aW1lb3V0OiAgICAgICAiICsgc3RyKHRpbWVvdXQpCisgICAgICAgIHBy
aW50ICJjaGVja3N1bTogICAgICAiICsgc3RyKGNoZWNrc3VtKQorICAgICAgICBwcmludCAnc3Rk
b3V0OiAiIiInCisgICAgICAgIHByaW50ICcnLmpvaW4ob3V0cHV0KQorICAgICAgICBwcmludCAn
IiIiJworICAgICAgICBwcmludCAnc3RkZXJyOiAiIiInCisgICAgICAgIHByaW50ICcnLmpvaW4o
ZXJyKQorICAgICAgICBwcmludCAnIiIiJworICAgICAgICBwcmludAorCisKK2lmIF9fbmFtZV9f
ID09ICdfX21haW5fXyc6CisgICAgb3B0cGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkK
KyAgICBvcHRwYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1wb3J0JywgYWN0aW9uPSdzdG9yZScs
IGRlZmF1bHQ9J21hYycpCisgICAgb3B0cGFyc2VyLmFkZF9vcHRpb24oJy10JywgJy0tdGFyZ2V0
JywgYWN0aW9uPSdzdG9yZScsIGRlZmF1bHQ9J1JlbGVhc2UnKQorICAgIG9wdHBhcnNlci5hZGRf
b3B0aW9uKCcnLCAnLS10aW1lb3V0JywgYWN0aW9uPSdzdG9yZScsIGRlZmF1bHQ9JzIwMDAnKQor
ICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCcnLCAnLS13cmFwcGVyJywgYWN0aW9uPSdzdG9yZScp
CisgICAgb3B0cGFyc2VyLmFkZF9vcHRpb24oIiIsICItLW5vLXBpeGVsLXRlc3RzIiwgYWN0aW9u
PSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImRpc2FibGUgcGl4ZWwtdG8tcGl4ZWwgUE5H
IGNvbXBhcmlzb25zIikKKyAgICBvcHRpb25zLCBhcmdzID0gb3B0cGFyc2VyLnBhcnNlX2FyZ3Mo
KQorICAgIHAgPSBwb3J0LmdldChvcHRpb25zLnBvcnQsIG9wdGlvbnMpCisgICAgcnVuX3Rlc3Rz
KHAsIG9wdGlvbnMsIGFyZ3MpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9h
cGFjaGVfaHR0cF9zZXJ2ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZjIw
NjUuLjAwMDAwMDAKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvYXBhY2hlX2h0dHBfc2VydmVyLnB5CisrKyAvZGV2L251bGwKQEAg
LTEsMjI5ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIw
MTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAq
IE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0j
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0iIiJBIGNsYXNzIHRvIHN0YXJ0L3N0b3AgdGhlIGFwYWNoZSBodHRwIHNlcnZlciB1c2Vk
IGJ5IGxheW91dCB0ZXN0cy4iIiIKLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcHRwYXJzZQot
aW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi0KLWlt
cG9ydCBodHRwX3NlcnZlcl9iYXNlCi1pbXBvcnQgcGF0aF91dGlscwotaW1wb3J0IHBsYXRmb3Jt
X3V0aWxzCi0KLQotY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVyX2Jhc2Uu
SHR0cFNlcnZlckJhc2UpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dF9kaXIpOgot
ICAgICAgICAiIiJBcmdzOgotICAgICAgICAgIG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRo
IHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgZGlyZWN0b3J5Ci0gICAgICAgICIiIgotICAgICAg
ICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgotICAgICAgICBzZWxmLl9odHRwZF9wcm9j
ID0gTm9uZQotICAgICAgICBwYXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KG91dHB1dF9k
aXIpCi0KLSAgICAgICAgc2VsZi5tYXBwaW5ncyA9IFt7J3BvcnQnOiA4MDAwfSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4MDgwfSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICB7J3BvcnQnOiA4MDgxfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQz
LCAnc3NsY2VydCc6IFRydWV9XQotCi0gICAgICAgICMgVGhlIHVwc3RyZWFtIC5jb25mIGZpbGUg
YXNzdW1lZCB0aGUgZXhpc3RlbmNlIG9mIC90bXAvV2ViS2l0IGZvcgotICAgICAgICAjIHBsYWNp
bmcgYXBhY2hlIGZpbGVzIGxpa2UgdGhlIGxvY2sgZmlsZSB0aGVyZS4KLSAgICAgICAgc2VsZi5f
cnVudGltZV9wYXRoID0gb3MucGF0aC5qb2luKCIvdG1wIiwgIldlYktpdCIpCi0gICAgICAgIHBh
dGhfdXRpbHMubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5fcnVudGltZV9wYXRoKQotCi0gICAg
ICAgICMgVGhlIFBJRCByZXR1cm5lZCB3aGVuIEFwYWNoZSBpcyBzdGFydGVkIGdvZXMgYXdheSAo
ZHVlIHRvIGRyb3BwaW5nCi0gICAgICAgICMgcHJpdmlsZWdlcz8pLiBUaGUgcHJvcGVyIGNvbnRy
b2xsaW5nIFBJRCBpcyB3cml0dGVuIHRvIGEgZmlsZSBpbiB0aGUKLSAgICAgICAgIyBhcGFjaGUg
cnVudGltZSBkaXJlY3RvcnkuCi0gICAgICAgIHNlbGYuX3BpZF9maWxlID0gb3MucGF0aC5qb2lu
KHNlbGYuX3J1bnRpbWVfcGF0aCwgJ2h0dHBkLnBpZCcpCi0KLSAgICAgICAgdGVzdF9kaXIgPSBw
YXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLAotICAgICAg
ICAgICAgJ0xheW91dFRlc3RzJykKLSAgICAgICAganNfdGVzdF9yZXNvdXJjZXNfZGlyID0gc2Vs
Zi5fY3lnd2luX3NhZmVfam9pbih0ZXN0X2RpciwgImZhc3QiLCAianMiLAotICAgICAgICAgICAg
InJlc291cmNlcyIpCi0gICAgICAgIG1pbWVfdHlwZXNfcGF0aCA9IHNlbGYuX2N5Z3dpbl9zYWZl
X2pvaW4odGVzdF9kaXIsICJodHRwIiwgImNvbmYiLAotICAgICAgICAgICAgIm1pbWUudHlwZXMi
KQotICAgICAgICBjZXJ0X2ZpbGUgPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2luKHRlc3RfZGlyLCAi
aHR0cCIsICJjb25mIiwKLSAgICAgICAgICAgICJ3ZWJraXQtaHR0cGQucGVtIikKLSAgICAgICAg
YWNjZXNzX2xvZyA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4ob3V0cHV0X2RpciwgImFjY2Vzc19s
b2cudHh0IikKLSAgICAgICAgZXJyb3JfbG9nID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbihvdXRw
dXRfZGlyLCAiZXJyb3JfbG9nLnR4dCIpCi0gICAgICAgIGRvY3VtZW50X3Jvb3QgPSBzZWxmLl9j
eWd3aW5fc2FmZV9qb2luKHRlc3RfZGlyLCAiaHR0cCIsICJ0ZXN0cyIpCi0KLSAgICAgICAgZXhl
Y3V0YWJsZSA9IHBsYXRmb3JtX3V0aWxzLmFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKQotICAgICAg
ICBpZiBzZWxmLl9pc19jeWd3aW4oKToKLSAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBzZWxmLl9n
ZXRfY3lnd2luX3BhdGgoZXhlY3V0YWJsZSkKLQotICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwK
LSAgICAgICAgICAgICctZicsIHNlbGYuX2dldF9hcGFjaGVfY29uZmlnX2ZpbGVfcGF0aCh0ZXN0
X2Rpciwgb3V0cHV0X2RpciksCi0gICAgICAgICAgICAnLUMnLCAiXCdEb2N1bWVudFJvb3QgJXNc
JyIgJSBkb2N1bWVudF9yb290LAotICAgICAgICAgICAgJy1jJywgIlwnQWxpYXMgL2pzLXRlc3Qt
cmVzb3VyY2VzICVzXCciICUganNfdGVzdF9yZXNvdXJjZXNfZGlyLAotICAgICAgICAgICAgJy1D
JywgIlwnTGlzdGVuICVzXCciICUgIjEyNy4wLjAuMTo4MDAwIiwKLSAgICAgICAgICAgICctQycs
ICJcJ0xpc3RlbiAlc1wnIiAlICIxMjcuMC4wLjE6ODA4MSIsCi0gICAgICAgICAgICAnLWMnLCAi
XCdUeXBlc0NvbmZpZyBcIiVzXCJcJyIgJSBtaW1lX3R5cGVzX3BhdGgsCi0gICAgICAgICAgICAn
LWMnLCAiXCdDdXN0b21Mb2cgXCIlc1wiIGNvbW1vblwnIiAlIGFjY2Vzc19sb2csCi0gICAgICAg
ICAgICAnLWMnLCAiXCdFcnJvckxvZyBcIiVzXCJcJyIgJSBlcnJvcl9sb2csCi0gICAgICAgICAg
ICAnLUMnLCAiXCdVc2VyIFwiJXNcIlwnIiAlIG9zLmVudmlyb24uZ2V0KCJVU0VSTkFNRSIsCi0g
ICAgICAgICAgICAgICAgb3MuZW52aXJvbi5nZXQoIlVTRVIiLCAiIikpXQotCi0gICAgICAgIGlm
IHNlbGYuX2lzX2N5Z3dpbigpOgotICAgICAgICAgICAgY3lnYmluID0gcGF0aF91dGlscy5wYXRo
X2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2JpbicpCi0gICAgICAgICAgICAj
IE5vdCBlbnRpcmVseSBzdXJlIHdoeSwgYnV0IGZyb20gY3lnd2luIHdlIG5lZWQgdG8gcnVuIHRo
ZQotICAgICAgICAgICAgIyBodHRwZCBjb21tYW5kIHRocm91Z2ggYmFzaC4KLSAgICAgICAgICAg
IHNlbGYuX3N0YXJ0X2NtZCA9IFsKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oY3lnYmlu
LCAnYmFzaC5leGUnKSwKLSAgICAgICAgICAgICAgICAnLWMnLAotICAgICAgICAgICAgICAgICdQ
QVRIPSVzICVzJyAlIChzZWxmLl9nZXRfY3lnd2luX3BhdGgoY3lnYmluKSwgIiAiLmpvaW4oY21k
KSksCi0gICAgICAgICAgICAgIF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgVE9ETyhv
amFuKTogV2hlbiB3ZSBnZXQgY3lnd2luIHVzaW5nIEFwYWNoZSAyLCB1c2Ugc2V0IHRoZQotICAg
ICAgICAgICAgIyBjZXJ0IGZpbGUgZm9yIGN5Z3dpbiBhcyB3ZWxsLgotICAgICAgICAgICAgY21k
LmV4dGVuZChbJy1jJywgIlwnU1NMQ2VydGlmaWNhdGVGaWxlICVzXCciICUgY2VydF9maWxlXSkK
LSAgICAgICAgICAgICMgSm9pbiB0aGUgc3RyaW5nIGhlcmUgc28gdGhhdCBDeWd3aW4vV2luZG93
cyBhbmQgTWFjL0xpbnV4Ci0gICAgICAgICAgICAjIGNhbiB1c2UgdGhlIHNhbWUgY29kZS4gT3Ro
ZXJ3aXNlLCB3ZSBjb3VsZCByZW1vdmUgdGhlIHNpbmdsZQotICAgICAgICAgICAgIyBxdW90ZXMg
YWJvdmUgYW5kIGtlZXAgY21kIGFzIGEgc2VxdWVuY2UuCi0gICAgICAgICAgICBzZWxmLl9zdGFy
dF9jbWQgPSAiICIuam9pbihjbWQpCi0KLSAgICBkZWYgX2lzX2N5Z3dpbihzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHN5cy5wbGF0Zm9ybSBpbiAoIndpbjMyIiwgImN5Z3dpbiIpCi0KLSAgICBkZWYg
X2N5Z3dpbl9zYWZlX2pvaW4oc2VsZiwgKnBhcnRzKToKLSAgICAgICAgIiIiUmV0dXJucyBhIHBs
YXRmb3JtIGFwcHJvcHJpYXRlIHBhdGguIiIiCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4o
KnBhcnRzKQotICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKLSAgICAgICAgICAgIHJldHVy
biBzZWxmLl9nZXRfY3lnd2luX3BhdGgocGF0aCkKLSAgICAgICAgcmV0dXJuIHBhdGgKLQotICAg
IGRlZiBfZ2V0X2N5Z3dpbl9wYXRoKHNlbGYsIHBhdGgpOgotICAgICAgICAiIiJDb252ZXJ0IGEg
V2luZG93cyBwYXRoIHRvIGEgY3lnd2luIHBhdGguCi0KLSAgICAgICAgVGhlIGN5Z3BhdGggdXRp
bGl0eSBpbnNpc3RzIG9uIGNvbnZlcnRpbmcgcGF0aHMgdGhhdCBpdCB0aGlua3MgYXJlCi0gICAg
ICAgIEN5Z3dpbiByb290IHBhdGhzIHRvIHdoYXQgaXQgdGhpbmtzIHRoZSBjb3JyZWN0IHJvb3Rz
IGFyZS4gIFNvIHBhdGhzCi0gICAgICAgIHN1Y2ggYXMgIkM6XGJcc2xhdmVcd2Via2l0LXJlbGVh
c2VcYnVpbGRcdGhpcmRfcGFydHlcY3lnd2luXGJpbiIKLSAgICAgICAgYXJlIGNvbnZlcnRlZCB0
byBwbGFpbiAiL3Vzci9iaW4iLiAgVG8gYXZvaWQgdGhpcywgd2UKLSAgICAgICAgZG8gdGhlIGNv
bnZlcnNpb24gbWFudWFsbHkuCi0KLSAgICAgICAgVGhlIHBhdGggaXMgZXhwZWN0ZWQgdG8gYmUg
YW4gYWJzb2x1dGUgcGF0aCwgb24gYW55IGRyaXZlLgotICAgICAgICAiIiIKLSAgICAgICAgZHJp
dmVfcmVnZXhwID0gcmUuY29tcGlsZShyJyhbYS16XSk6Wy9cXF0nLCByZS5JR05PUkVDQVNFKQot
Ci0gICAgICAgIGRlZiBsb3dlcl9kcml2ZShtYXRjaG9iaik6Ci0gICAgICAgICAgICByZXR1cm4g
Jy9jeWdkcml2ZS8lcy8nICUgbWF0Y2hvYmouZ3JvdXAoMSkubG93ZXIoKQotICAgICAgICBwYXRo
ID0gZHJpdmVfcmVnZXhwLnN1Yihsb3dlcl9kcml2ZSwgcGF0aCkKLSAgICAgICAgcmV0dXJuIHBh
dGgucmVwbGFjZSgnXFwnLCAnLycpCi0KLSAgICBkZWYgX2dldF9hcGFjaGVfY29uZmlnX2ZpbGVf
cGF0aChzZWxmLCB0ZXN0X2Rpciwgb3V0cHV0X2Rpcik6Ci0gICAgICAgICIiIlJldHVybnMgdGhl
IHBhdGggdG8gdGhlIGFwYWNoZSBjb25maWcgZmlsZSB0byB1c2UuCi0gICAgICAgIEFyZ3M6Ci0g
ICAgICAgICAgdGVzdF9kaXI6IGFic29sdXRlIHBhdGggdG8gdGhlIExheW91dFRlc3RzIGRpcmVj
dG9yeS4KLSAgICAgICAgICBvdXRwdXRfZGlyOiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQg
dGVzdCByZXN1bHRzIGRpcmVjdG9yeS4KLSAgICAgICAgIiIiCi0gICAgICAgIGh0dHBkX2NvbmZp
ZyA9IHBsYXRmb3JtX3V0aWxzLmFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCkKLSAgICAgICAgaHR0
cGRfY29uZmlnX2NvcHkgPSBvcy5wYXRoLmpvaW4ob3V0cHV0X2RpciwgImh0dHBkLmNvbmYiKQot
ICAgICAgICBodHRwZF9jb25mID0gb3BlbihodHRwZF9jb25maWcpLnJlYWQoKQotICAgICAgICBp
ZiBzZWxmLl9pc19jeWd3aW4oKToKLSAgICAgICAgICAgICMgVGhpcyBpcyBhIGdyb3NzIGhhY2ss
IGJ1dCBpdCBsZXRzIHVzIHVzZSB0aGUgdXBzdHJlYW0gLmNvbmYgZmlsZQotICAgICAgICAgICAg
IyBhbmQgb3VyIGNoZWNrZWQgaW4gY3lnd2luLiBUaGlzIHRlbGxzIHRoZSBzZXJ2ZXIgdGhlIHJv
b3QKLSAgICAgICAgICAgICMgZGlyZWN0b3J5IHRvIGxvb2sgaW4gZm9yIC5zbyBtb2R1bGVzLiBJ
dCB3aWxsIHVzZSB0aGlzIHBhdGgKLSAgICAgICAgICAgICMgcGx1cyB0aGUgcmVsYXRpdmUgcGF0
aHMgdG8gdGhlIC5zbyBmaWxlcyBsaXN0ZWQgaW4gdGhlIC5jb25mCi0gICAgICAgICAgICAjIGZp
bGUuIFdlIGhhdmUgYXBhY2hlL2N5Z3dpbiBjaGVja2VkIGludG8gb3VyIHRyZWUgc28KLSAgICAg
ICAgICAgICMgcGVvcGxlIGRvbid0IGhhdmUgdG8gaW5zdGFsbCBpdCBpbnRvIHRoZWlyIGN5Z3dp
bi4KLSAgICAgICAgICAgIGN5Z3VzciA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJk
X3BhcnR5JywgJ2N5Z3dpbicsICd1c3InKQotICAgICAgICAgICAgaHR0cGRfY29uZiA9IGh0dHBk
X2NvbmYucmVwbGFjZSgnU2VydmVyUm9vdCAiL3VzciInLAotICAgICAgICAgICAgICAgICdTZXJ2
ZXJSb290ICIlcyInICUgc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGN5Z3VzcikpCi0KLSAgICAgICAg
IyBUT0RPKG9qYW4pOiBJbnN0ZWFkIG9mIHdyaXRpbmcgYW4gZXh0cmEgZmlsZSwgY2hlY2tpbiBh
IGNvbmYgZmlsZQotICAgICAgICAjIHVwc3RyZWFtLiBPciwgZXZlbiBiZXR0ZXIsIHVwc3RyZWFt
L2RlbGV0ZSBhbGwgb3VyIGNocm9tZSBodHRwCi0gICAgICAgICMgdGVzdHMgc28gd2UgZG9uJ3Qg
bmVlZCB0aGlzIHNwZWNpYWwtY2FzZWQgRG9jdW1lbnRSb290IGFuZCB0aGVuCi0gICAgICAgICMg
anVzdCB1c2UgdGhlIHVwc3RyZWFtCi0gICAgICAgICMgY29uZiBmaWxlLgotICAgICAgICBjaHJv
bWVfZG9jdW1lbnRfcm9vdCA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICdk
YXRhJywKLSAgICAgICAgICAgICdsYXlvdXRfdGVzdHMnKQotICAgICAgICBpZiBzZWxmLl9pc19j
eWd3aW4oKToKLSAgICAgICAgICAgIGNocm9tZV9kb2N1bWVudF9yb290ID0gc2VsZi5fZ2V0X2N5
Z3dpbl9wYXRoKGNocm9tZV9kb2N1bWVudF9yb290KQotICAgICAgICBodHRwZF9jb25mID0gKGh0
dHBkX2NvbmYgKwotICAgICAgICAgICAgc2VsZi5fZ2V0X3ZpcnR1YWxfaG9zdF9jb25maWcoY2hy
b21lX2RvY3VtZW50X3Jvb3QsIDgwODEpKQotCi0gICAgICAgIGYgPSBvcGVuKGh0dHBkX2NvbmZp
Z19jb3B5LCAnd2InKQotICAgICAgICBmLndyaXRlKGh0dHBkX2NvbmYpCi0gICAgICAgIGYuY2xv
c2UoKQotCi0gICAgICAgIGlmIHNlbGYuX2lzX2N5Z3dpbigpOgotICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX2dldF9jeWd3aW5fcGF0aChodHRwZF9jb25maWdfY29weSkKLSAgICAgICAgcmV0dXJu
IGh0dHBkX2NvbmZpZ19jb3B5Ci0KLSAgICBkZWYgX2dldF92aXJ0dWFsX2hvc3RfY29uZmlnKHNl
bGYsIGRvY3VtZW50X3Jvb3QsIHBvcnQsIHNzbD1GYWxzZSk6Ci0gICAgICAgICIiIlJldHVybnMg
YSA8VmlydHVhbEhvc3Q+IGRpcmVjdGl2ZSBibG9jayBmb3IgYW4gaHR0cGQuY29uZiBmaWxlLgot
ICAgICAgICBJdCB3aWxsIGxpc3RlbiB0byAxMjcuMC4wLjEgb24gZWFjaCBvZiB0aGUgZ2l2ZW4g
cG9ydC4KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oKCc8VmlydHVhbEhv
c3QgMTI3LjAuMC4xOiVzPicgJSBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAnRG9j
dW1lbnRSb290ICVzJyAlIGRvY3VtZW50X3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHNzbCBhbmQgJ1NTTEVuZ2luZSBPbicgb3IgJycsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICc8L1ZpcnR1YWxIb3N0PicsICcnKSkKLQotICAgIGRlZiBfc3RhcnRfaHR0cGRfcHJvY2Vzcyhz
ZWxmKToKLSAgICAgICAgIiIiU3RhcnRzIHRoZSBodHRwZCBwcm9jZXNzIGFuZCByZXR1cm5zIHdo
ZXRoZXIgdGhlcmUgd2VyZSBlcnJvcnMuIiIiCi0gICAgICAgICMgVXNlIHNoZWxsPVRydWUgYmVj
YXVzZSB3ZSBqb2luIHRoZSBhcmd1bWVudHMgaW50byBhIHN0cmluZyBmb3IKLSAgICAgICAgIyB0
aGUgc2FrZSBvZiBXaW5kb3cvQ3lnd2luIGFuZCBpdCBuZWVkcyBxdW90aW5nIHRoYXQgYnJlYWtz
Ci0gICAgICAgICMgc2hlbGw9RmFsc2UuCi0gICAgICAgIHNlbGYuX2h0dHBkX3Byb2MgPSBzdWJw
cm9jZXNzLlBvcGVuKHNlbGYuX3N0YXJ0X2NtZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgIHNo
ZWxsPVRydWUpCi0gICAgICAgIGVyciA9IHNlbGYuX2h0dHBkX3Byb2Muc3RkZXJyLnJlYWQoKQot
ICAgICAgICBpZiBsZW4oZXJyKToKLSAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoZXJyKQotICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgc3Rh
cnQoc2VsZik6Ci0gICAgICAgICIiIlN0YXJ0cyB0aGUgYXBhY2hlIGh0dHAgc2VydmVyLiIiIgot
ICAgICAgICAjIFN0b3AgYW55IGN1cnJlbnRseSBydW5uaW5nIHNlcnZlcnMuCi0gICAgICAgIHNl
bGYuc3RvcCgpCi0KLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RhcnRpbmcgYXBhY2hlIGh0dHAg
c2VydmVyIikKLSAgICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndhaXRfZm9yX2FjdGlvbihz
ZWxmLl9zdGFydF9odHRwZF9wcm9jZXNzKQotICAgICAgICBpZiBzZXJ2ZXJfc3RhcnRlZDoKLSAg
ICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIkFwYWNoZSBzdGFydGVkLiBUZXN0aW5nIHBvcnRzIikK
LSAgICAgICAgICAgIHNlcnZlcl9zdGFydGVkID0gc2VsZi53YWl0X2Zvcl9hY3Rpb24oCi0gICAg
ICAgICAgICAgICAgc2VsZi5pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMpCi0KLSAgICAg
ICAgaWYgc2VydmVyX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTZXJ2ZXIg
c3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2Ug
RXhjZXB0aW9uKCdGYWlsZWQgdG8gc3RhcnQgaHR0cCBzZXJ2ZXInKQotCi0gICAgZGVmIHN0b3Ao
c2VsZik6Ci0gICAgICAgICIiIlN0b3BzIHRoZSBhcGFjaGUgaHR0cCBzZXJ2ZXIuIiIiCi0gICAg
ICAgIGxvZ2dpbmcuZGVidWcoIlNodXR0aW5nIGRvd24gYW55IHJ1bm5pbmcgaHR0cCBzZXJ2ZXJz
IikKLSAgICAgICAgaHR0cGRfcGlkID0gTm9uZQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhz
ZWxmLl9waWRfZmlsZSk6Ci0gICAgICAgICAgICBodHRwZF9waWQgPSBpbnQob3BlbihzZWxmLl9w
aWRfZmlsZSkucmVhZGxpbmUoKSkKLSAgICAgICAgcGF0aF91dGlscy5zaHV0X2Rvd25faHR0cF9z
ZXJ2ZXIoaHR0cGRfcGlkKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXIucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZl
ci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZGZjYjQ0Zi4uMDAwMDAwMAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9odHRwX3NlcnZlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi0jIS91c3Iv
YmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
IyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBu
YW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiQSBjbGFzcyB0byBoZWxw
IHN0YXJ0L3N0b3AgdGhlIGxpZ2h0dHBkIHNlcnZlciB1c2VkIGJ5IGxheW91dCB0ZXN0cy4iIiIK
LQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgb3MKLWltcG9ydCBz
aHV0aWwKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGVtcGZpbGUKLWlt
cG9ydCB0aW1lCi1pbXBvcnQgdXJsbGliCi0KLWltcG9ydCBodHRwX3NlcnZlcl9iYXNlCi1pbXBv
cnQgcGF0aF91dGlscwotCi1jbGFzcyBIdHRwZE5vdFN0YXJ0ZWQoRXhjZXB0aW9uKTogcGFzcwot
Ci1kZWYgcmVtb3ZlX2xvZ19maWxlcyhmb2xkZXIsIHN0YXJ0c193aXRoKToKLSAgICBmaWxlcyA9
IG9zLmxpc3RkaXIoZm9sZGVyKQotICAgIGZvciBmaWxlIGluIGZpbGVzOgotICAgICAgICBpZiBm
aWxlLnN0YXJ0c3dpdGgoc3RhcnRzX3dpdGgpOgotICAgICAgICAgICAgZnVsbF9wYXRoID0gb3Mu
cGF0aC5qb2luKGZvbGRlciwgZmlsZSkKLSAgICAgICAgICAgIG9zLnJlbW92ZShmdWxsX3BhdGgp
Ci0KLQotY2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6Ci0g
ICAgIyBXZWJraXQgdGVzdHMKLSAgICB0cnk6Ci0gICAgICAgIF93ZWJraXRfdGVzdHMgPSBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMnLCAn
aHR0cCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICd0ZXN0cycpCi0gICAgICAgIF9qc190ZXN0X3Jlc291cmNlID0gcGF0aF91dGlscy5wYXRoX2Zy
b21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMYXlvdXRUZXN0cycsICdmYXN0JywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqcycs
ICdyZXNvdXJjZXMnKQotICAgIGV4Y2VwdCBwYXRoX3V0aWxzLlBhdGhOb3RGb3VuZDoKLSAgICAg
ICAgX3dlYmtpdF90ZXN0cyA9IE5vbmUKLSAgICAgICAgX2pzX3Rlc3RfcmVzb3VyY2UgPSBOb25l
Ci0KLSAgICAjIFBhdGggd2hlcmUgd2UgY2FuIGFjY2VzcyBhbGwgb2YgdGhlIHRlc3RzCi0gICAg
X2FsbF90ZXN0cyA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICdkYXRhJywg
J2xheW91dF90ZXN0cycpCi0gICAgIyBTZWxmIGdlbmVyYXRlZCBjZXJ0aWZpY2F0ZSBmb3IgU1NM
IHNlcnZlciAoZm9yIGNsaWVudCBjZXJ0IGdldAotICAgICMgPGJhc2UtcGF0aD5cY2hyb21lXHRl
c3RcZGF0YVxzc2xcY2VydHNccm9vdF9jYV9jZXJ0LmNydCkKLSAgICBfcGVtX2ZpbGUgPSBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKAotICAgICAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5h
YnNwYXRoKF9fZmlsZV9fKSksICdodHRwZDIucGVtJykKLSAgICAjIE9uZSBtYXBwaW5nIHdoZXJl
IHdlIGNhbiBnZXQgdG8gZXZlcnl0aGluZwotICAgIFZJUlRVQUxDT05GSUcgPSBbeydwb3J0Jzog
ODA4MSwgJ2RvY3Jvb3QnOiBfYWxsX3Rlc3RzfV0KLQotICAgIGlmIF93ZWJraXRfdGVzdHM6Ci0g
ICAgICAgIFZJUlRVQUxDT05GSUcuZXh0ZW5kKAotICAgICAgICAgICMgVGhyZWUgbWFwcGluZ3Mg
KG9uZSB3aXRoIFNTTCBlbmFibGVkKSBmb3IgTGF5b3V0VGVzdHMgaHR0cCB0ZXN0cwotICAgICAg
ICAgIFt7J3BvcnQnOiA4MDAwLCAnZG9jcm9vdCc6IF93ZWJraXRfdGVzdHN9LAotICAgICAgICAg
ICB7J3BvcnQnOiA4MDgwLCAnZG9jcm9vdCc6IF93ZWJraXRfdGVzdHN9LAotICAgICAgICAgICB7
J3BvcnQnOiA4NDQzLCAnZG9jcm9vdCc6IF93ZWJraXRfdGVzdHMsICdzc2xjZXJ0JzogX3BlbV9m
aWxlfV0pCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0X2RpciwgYmFja2dyb3VuZD1G
YWxzZSwgcG9ydD1Ob25lLAotICAgICAgICAgICAgICAgICByb290PU5vbmUsIHJlZ2lzdGVyX2N5
Z3dpbj1Ob25lLCBydW5fYmFja2dyb3VuZD1Ob25lKToKLSAgICAgICAgIiIiQXJnczoKLSAgICAg
ICAgICBvdXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVz
dWx0IGRpcmVjdG9yeQotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91
dHB1dF9kaXIKLSAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fcG9y
dCA9IHBvcnQKLSAgICAgICAgc2VsZi5fcm9vdCA9IHJvb3QKLSAgICAgICAgc2VsZi5fcmVnaXN0
ZXJfY3lnd2luID0gcmVnaXN0ZXJfY3lnd2luCi0gICAgICAgIHNlbGYuX3J1bl9iYWNrZ3JvdW5k
ID0gcnVuX2JhY2tncm91bmQKLSAgICAgICAgaWYgc2VsZi5fcG9ydDoKLSAgICAgICAgICAgIHNl
bGYuX3BvcnQgPSBpbnQoc2VsZi5fcG9ydCkKLQotICAgIGRlZiBpc19ydW5uaW5nKHNlbGYpOgot
ICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2VzcyAhPSBOb25lCi0KLSAgICBkZWYgc3RhcnQoc2Vs
Zik6Ci0gICAgICAgIGlmIHNlbGYuaXNfcnVubmluZygpOgotICAgICAgICAgICAgcmFpc2UgJ0xp
Z2h0dHBkIGFscmVhZHkgcnVubmluZycKLQotICAgICAgICBiYXNlX2NvbmZfZmlsZSA9IHBhdGhf
dXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywKLSAgICAgICAgICAgICdXZWJLaXRU
b29scycsICdTY3JpcHRzJywgJ3dlYmtpdHB5JywgJ2xheW91dF90ZXN0cycsCi0gICAgICAgICAg
ICAnbGF5b3V0X3BhY2thZ2UnLCAnbGlnaHR0cGQuY29uZicpCi0gICAgICAgIG91dF9jb25mX2Zp
bGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgJ2xpZ2h0dHBkLmNvbmYnKQotICAg
ICAgICB0aW1lX3N0ciA9IHRpbWUuc3RyZnRpbWUoIiVkJWIlWS0lSCVNJVMiKQotICAgICAgICBh
Y2Nlc3NfZmlsZV9uYW1lID0gImFjY2Vzcy5sb2ctIiArIHRpbWVfc3RyICsgIi50eHQiCi0gICAg
ICAgIGFjY2Vzc19sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgYWNjZXNzX2Zp
bGVfbmFtZSkKLSAgICAgICAgbG9nX2ZpbGVfbmFtZSA9ICJlcnJvci5sb2ctIiArIHRpbWVfc3Ry
ICsgIi50eHQiCi0gICAgICAgIGVycm9yX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRf
ZGlyLCBsb2dfZmlsZV9uYW1lKQotCi0gICAgICAgICMgUmVtb3ZlIG9sZCBsb2cgZmlsZXMuIFdl
IG9ubHkgbmVlZCB0byBrZWVwIHRoZSBsYXN0IG9uZXMuCi0gICAgICAgIHJlbW92ZV9sb2dfZmls
ZXMoc2VsZi5fb3V0cHV0X2RpciwgImFjY2Vzcy5sb2ctIikKLSAgICAgICAgcmVtb3ZlX2xvZ19m
aWxlcyhzZWxmLl9vdXRwdXRfZGlyLCAiZXJyb3IubG9nLSIpCi0KLSAgICAgICAgIyBXcml0ZSBv
dXQgdGhlIGNvbmZpZwotICAgICAgICBmID0gZmlsZShiYXNlX2NvbmZfZmlsZSwgJ3JiJykKLSAg
ICAgICAgYmFzZV9jb25mID0gZi5yZWFkKCkKLSAgICAgICAgZi5jbG9zZSgpCi0KLSAgICAgICAg
ZiA9IGZpbGUob3V0X2NvbmZfZmlsZSwgJ3diJykKLSAgICAgICAgZi53cml0ZShiYXNlX2NvbmYp
Ci0KLSAgICAgICAgIyBXcml0ZSBvdXQgb3VyIGNnaSBoYW5kbGVycy4gIFJ1biBwZXJsIHRocm91
Z2ggZW52IHNvIHRoYXQgaXQKLSAgICAgICAgIyBwcm9jZXNzZXMgdGhlICMhIGxpbmUgYW5kIHJ1
bnMgcGVybCB3aXRoIHRoZSBwcm9wZXIgY29tbWFuZAotICAgICAgICAjIGxpbmUgYXJndW1lbnRz
LiBFbXVsYXRlIGFwYWNoZSdzIG1vZF9hc2lzIHdpdGggYSBjYXQgY2dpIGhhbmRsZXIuCi0gICAg
ICAgIGYud3JpdGUoKCdjZ2kuYXNzaWduID0gKCAiLmNnaSIgID0+ICIvdXNyL2Jpbi9lbnYiLFxu
JwotICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIi5wbCIgICA9PiAiL3Vzci9iaW4v
ZW52IixcbicKLSAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICIuYXNpcyIgPT4gIi9i
aW4vY2F0IixcbicKLSAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICIucGhwIiAgPT4g
IiVzIiApXG5cbicpICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRo
X3V0aWxzLmxpZ2h0dHBkX3BocF9wYXRoKCkpCi0KLSAgICAgICAgIyBTZXR1cCBsb2cgZmlsZXMK
LSAgICAgICAgZi53cml0ZSgoJ3NlcnZlci5lcnJvcmxvZyA9ICIlcyJcbicKLSAgICAgICAgICAg
ICAgICAgJ2FjY2Vzc2xvZy5maWxlbmFtZSA9ICIlcyJcblxuJykgJSAoZXJyb3JfbG9nLCBhY2Nl
c3NfbG9nKSkKLQotICAgICAgICAjIFNldHVwIHVwbG9hZCBmb2xkZXJzLiBVcGxvYWQgZm9sZGVy
IGlzIHRvIGhvbGQgdGVtcG9yYXJ5IHVwbG9hZCBmaWxlcwotICAgICAgICAjIGFuZCBhbHNvIFBP
U1QgZGF0YS4gVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQgWEhSIGxheW91dCB0ZXN0cyB0aGF0Ci0g
ICAgICAgICMgZG9lcyBQT1NULgotICAgICAgICBmLndyaXRlKCgnc2VydmVyLnVwbG9hZC1kaXJz
ID0gKCAiJXMiIClcblxuJykgJSAoc2VsZi5fb3V0cHV0X2RpcikpCi0KLSAgICAgICAgIyBTZXR1
cCBhIGxpbmsgdG8gd2hlcmUgdGhlIGpzIHRlc3QgdGVtcGxhdGVzIGFyZSBzdG9yZWQKLSAgICAg
ICAgZi53cml0ZSgoJ2FsaWFzLnVybCA9ICggIi9qcy10ZXN0LXJlc291cmNlcyIgPT4gIiVzIiAp
XG5cbicpICUKLSAgICAgICAgICAgICAgICAgICAgKHNlbGYuX2pzX3Rlc3RfcmVzb3VyY2UpKQot
Ci0gICAgICAgICMgZHVtcCBvdXQgb2YgdmlydHVhbCBob3N0IGNvbmZpZyBhdCB0aGUgYm90dG9t
LgotICAgICAgICBpZiBzZWxmLl9yb290OgotICAgICAgICAgICAgaWYgc2VsZi5fcG9ydDoKLSAg
ICAgICAgICAgICAgICAjIEhhdmUgYm90aCBwb3J0IGFuZCByb290IGRpci4KLSAgICAgICAgICAg
ICAgICBtYXBwaW5ncyA9IFt7J3BvcnQnOiBzZWxmLl9wb3J0LCAnZG9jcm9vdCc6IHNlbGYuX3Jv
b3R9XQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIEhhdmUgb25seSBhIHJv
b3QgZGlyIC0gc2V0IHRoZSBwb3J0cyBhcyBmb3IgTGF5b3V0VGVzdHMuCi0gICAgICAgICAgICAg
ICAgIyBUaGlzIGlzIHVzZWQgaW4gdWlfdGVzdHMgdG8gcnVuIGh0dHAgdGVzdHMgYWdhaW5zdCBh
IGJyb3dzZXIuCi0KLSAgICAgICAgICAgICAgICAjIGRlZmF1bHQgc2V0IG9mIHBvcnRzIGFzIGZv
ciBMYXlvdXRUZXN0cyBidXQgd2l0aCBhCi0gICAgICAgICAgICAgICAgIyBzcGVjaWZpZWQgcm9v
dC4KLSAgICAgICAgICAgICAgICBtYXBwaW5ncyA9IFt7J3BvcnQnOiA4MDAwLCAnZG9jcm9vdCc6
IHNlbGYuX3Jvb3R9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9ydCc6IDgwODAs
ICdkb2Nyb290Jzogc2VsZi5fcm9vdH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeydw
b3J0JzogODQ0MywgJ2RvY3Jvb3QnOiBzZWxmLl9yb290LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnc3NsY2VydCc6IExpZ2h0dHBkLl9wZW1fZmlsZX1dCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBtYXBwaW5ncyA9IHNlbGYuVklSVFVBTENPTkZJRwotICAgICAgICBmb3IgbWFw
cGluZyBpbiBtYXBwaW5nczoKLSAgICAgICAgICAgIHNzbF9zZXR1cCA9ICcnCi0gICAgICAgICAg
ICBpZiAnc3NsY2VydCcgaW4gbWFwcGluZzoKLSAgICAgICAgICAgICAgICBzc2xfc2V0dXAgPSAo
JyAgc3NsLmVuZ2luZSA9ICJlbmFibGUiXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcgIHNzbC5wZW1maWxlID0gIiVzIlxuJyAlIG1hcHBpbmdbJ3NzbGNlcnQnXSkKLQotICAgICAg
ICAgICAgZi53cml0ZSgoJyRTRVJWRVJbInNvY2tldCJdID09ICIxMjcuMC4wLjE6JWQiIHtcbicK
LSAgICAgICAgICAgICAgICAgICAgICcgIHNlcnZlci5kb2N1bWVudC1yb290ID0gIiVzIlxuJyAr
Ci0gICAgICAgICAgICAgICAgICAgICBzc2xfc2V0dXAgKwotICAgICAgICAgICAgICAgICAgICAg
J31cblxuJykgJSAobWFwcGluZ1sncG9ydCddLCBtYXBwaW5nWydkb2Nyb290J10pKQotICAgICAg
ICBmLmNsb3NlKCkKLQotICAgICAgICBleGVjdXRhYmxlID0gcGF0aF91dGlscy5saWdodHRwZF9l
eGVjdXRhYmxlX3BhdGgoKQotICAgICAgICBtb2R1bGVfcGF0aCA9IHBhdGhfdXRpbHMubGlnaHR0
cGRfbW9kdWxlX3BhdGgoKQotICAgICAgICBzdGFydF9jbWQgPSBbZXhlY3V0YWJsZSwKLSAgICAg
ICAgICAgICAgICAgICAgICMgTmV3bHkgd3JpdHRlbiBjb25maWcgZmlsZQotICAgICAgICAgICAg
ICAgICAgICAgJy1mJywgcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZShzZWxmLl9vdXRwdXRfZGly
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
bGlnaHR0cGQuY29uZicpLAotICAgICAgICAgICAgICAgICAgICAgIyBXaGVyZSBpdCBjYW4gZmlu
ZCBpdHMgbW9kdWxlIGR5bmFtaWMgbGlicmFyaWVzCi0gICAgICAgICAgICAgICAgICAgICAnLW0n
LCBtb2R1bGVfcGF0aF0KLQotICAgICAgICBpZiBub3Qgc2VsZi5fcnVuX2JhY2tncm91bmQ6Ci0g
ICAgICAgICAgICBzdGFydF9jbWQuYXBwZW5kKCMgRG9uJ3QgYmFja2dyb3VuZAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnLUQnKQotCi0gICAgICAgICMgQ29weSBsaWJsaWdodGNvbXAu
ZHlsaWIgdG8gL3RtcC9saWdodHRwZC9saWIgdG8gd29yayBhcm91bmQgdGhlCi0gICAgICAgICMg
YnVnIHRoYXQgbW9kX2FsaWFzLnNvIGxvYWRzIGl0IGZyb20gdGhlIGhhcmQgY29kZWQgcGF0aC4K
LSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgdG1wX21v
ZHVsZV9wYXRoID0gJy90bXAvbGlnaHR0cGQvbGliJwotICAgICAgICAgICAgaWYgbm90IG9zLnBh
dGguZXhpc3RzKHRtcF9tb2R1bGVfcGF0aCk6Ci0gICAgICAgICAgICAgICAgb3MubWFrZWRpcnMo
dG1wX21vZHVsZV9wYXRoKQotICAgICAgICAgICAgbGliX2ZpbGUgPSAnbGlibGlnaHRjb21wLmR5
bGliJwotICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihtb2R1bGVfcGF0
aCwgbGliX2ZpbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbih0
bXBfbW9kdWxlX3BhdGgsIGxpYl9maWxlKSkKLQotICAgICAgICAjIFB1dCB0aGUgY3lnd2luIGRp
cmVjdG9yeSBmaXJzdCBpbiB0aGUgcGF0aCB0byBmaW5kIGN5Z3dpbjEuZGxsCi0gICAgICAgIGVu
diA9IG9zLmVudmlyb24KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnY3lnd2luJywgJ3dp
bjMyJyk6Ci0gICAgICAgICAgICBlbnZbJ1BBVEgnXSA9ICclczslcycgJSAoCi0gICAgICAgICAg
ICAgICAgcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywg
J2JpbicpLAotICAgICAgICAgICAgICAgIGVudlsnUEFUSCddKQotCi0gICAgICAgIGlmIHN5cy5w
bGF0Zm9ybSA9PSAnd2luMzInIGFuZCBzZWxmLl9yZWdpc3Rlcl9jeWd3aW46Ci0gICAgICAgICAg
ICBzZXR1cF9tb3VudCA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5Jywg
J2N5Z3dpbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3NldHVwX21vdW50LmJhdCcpCi0gICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKHNl
dHVwX21vdW50KS53YWl0KCkKLQotICAgICAgICBsb2dnaW5nLmRlYnVnKCdTdGFydGluZyBodHRw
IHNlcnZlcicpCi0gICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHN0YXJ0
X2NtZCwgZW52PWVudikKLQotICAgICAgICAjIFdhaXQgZm9yIHNlcnZlciB0byBzdGFydC4KLSAg
ICAgICAgc2VsZi5tYXBwaW5ncyA9IG1hcHBpbmdzCi0gICAgICAgIHNlcnZlcl9zdGFydGVkID0g
c2VsZi53YWl0X2Zvcl9hY3Rpb24oCi0gICAgICAgICAgICBzZWxmLmlzX3NlcnZlcl9ydW5uaW5n
X29uX2FsbF9wb3J0cykKLQotICAgICAgICAjIE91ciBwcm9jZXNzIHRlcm1pbmF0ZWQgYWxyZWFk
eQotICAgICAgICBpZiBub3Qgc2VydmVyX3N0YXJ0ZWQgb3Igc2VsZi5fcHJvY2Vzcy5yZXR1cm5j
b2RlICE9IE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBnb29nbGUuaHR0cGRfdXRpbHMuSHR0cGRO
b3RTdGFydGVkKCdGYWlsZWQgdG8gc3RhcnQgaHR0cGQuJykKLQotICAgICAgICBsb2dnaW5nLmRl
YnVnKCJTZXJ2ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQiKQotCi0gICAgIyBUT0RPKGRlYW5tKTog
RmluZCBhIG5pY2VyIHdheSB0byBzaHV0ZG93biBjbGVhbmx5LiAgT3VyIGxvZyBmaWxlcyBhcmUK
LSAgICAjIHByb2JhYmx5IG5vdCBiZWluZyBmbHVzaGVkLCBldGMuLi4gd2h5IGRvZXNuJ3Qgb3Vy
IHB5dGhvbiBoYXZlIG9zLmtpbGwgPwotCi0gICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2Up
OgotICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBzZWxmLmlzX3J1bm5pbmcoKToKLSAgICAg
ICAgICAgIHJldHVybgotCi0gICAgICAgIGh0dHBkX3BpZCA9IE5vbmUKLSAgICAgICAgaWYgc2Vs
Zi5fcHJvY2VzczoKLSAgICAgICAgICAgIGh0dHBkX3BpZCA9IHNlbGYuX3Byb2Nlc3MucGlkCi0g
ICAgICAgIHBhdGhfdXRpbHMuc2h1dF9kb3duX2h0dHBfc2VydmVyKGh0dHBkX3BpZCkKLQotICAg
ICAgICBpZiBzZWxmLl9wcm9jZXNzOgotICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy53YWl0KCkK
LSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCi0KLWlmICdfX21haW5fXycgPT0gX19u
YW1lX186Ci0gICAgIyBQcm92aWRlIHNvbWUgY29tbWFuZCBsaW5lIHBhcmFtcyBmb3Igc3RhcnRp
bmcvc3RvcHBpbmcgdGhlIGh0dHAgc2VydmVyCi0gICAgIyBtYW51YWxseS4gQWxzbyB1c2VkIGlu
IHVpX3Rlc3RzIHRvIHJ1biBodHRwIGxheW91dCB0ZXN0cyBpbiBhIGJyb3dzZXIuCi0gICAgb3B0
aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCi0gICAgb3B0aW9uX3BhcnNlci5h
ZGRfb3B0aW9uKCctaycsICctLXNlcnZlcicsCi0gICAgICAgIGhlbHA9J1NlcnZlciBhY3Rpb24g
KHN0YXJ0fHN0b3ApJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcG9y
dCcsCi0gICAgICAgIGhlbHA9J1BvcnQgdG8gbGlzdGVuIG9uIChvdmVycmlkZXMgbGF5b3V0IHRl
c3QgcG9ydHMpJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1yJywgJy0tcm9vdCcs
Ci0gICAgICAgIGhlbHA9J0Fic29sdXRlIHBhdGggdG8gRG9jdW1lbnRSb290IChvdmVycmlkZXMg
bGF5b3V0IHRlc3Qgcm9vdHMpJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tcmVn
aXN0ZXJfY3lnd2luJywgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgZGVzdD0icmVnaXN0
ZXJfY3lnd2luIiwgaGVscD0nUmVnaXN0ZXIgQ3lnd2luIHBhdGhzIChvbiBXaW4gdHJ5IGJvdHMp
JykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tcnVuX2JhY2tncm91bmQnLCBhY3Rp
b249InN0b3JlX3RydWUiLAotICAgICAgICBkZXN0PSJydW5fYmFja2dyb3VuZCIsCi0gICAgICAg
IGhlbHA9J1J1biBvbiBiYWNrZ3JvdW5kIChmb3IgcnVubmluZyBhcyBVSSB0ZXN0KScpCi0gICAg
b3B0aW9ucywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncygpCi0KLSAgICBpZiBub3Qg
b3B0aW9ucy5zZXJ2ZXI6Ci0gICAgICAgIHByaW50ICgnVXNhZ2U6ICVzIC0tc2VydmVyIHtzdGFy
dHxzdG9wfSBbLS1yb290PXJvb3RfZGlyXScKLSAgICAgICAgICAgICAgICcgWy0tcG9ydD1wb3J0
X251bWJlcl0nICUgc3lzLmFyZ3ZbMF0pCi0gICAgZWxzZToKLSAgICAgICAgaWYgKG9wdGlvbnMu
cm9vdCBpcyBOb25lKSBhbmQgKG9wdGlvbnMucG9ydCBpcyBub3QgTm9uZSk6Ci0gICAgICAgICAg
ICAjIHNwZWNpZnlpbmcgcm9vdCBidXQgbm90IHBvcnQgbWVhbnMgd2Ugd2FudCBodHRwZCBvbiBk
ZWZhdWx0Ci0gICAgICAgICAgICAjIHNldCBvZiBwb3J0cyB0aGF0IExheW91dFRlc3QgdXNlLCBi
dXQgcG9pbnRpbmcgdG8gYSBkaWZmZXJlbnQKLSAgICAgICAgICAgICMgc291cmNlIG9mIHRlc3Rz
LiBTcGVjaWZ5aW5nIHBvcnQgYnV0IG5vIHJvb3QgZG9lcyBub3Qgc2VlbQotICAgICAgICAgICAg
IyBtZWFuaW5nZnVsLgotICAgICAgICAgICAgcmFpc2UgJ1NwZWNpZnlpbmcgcG9ydCByZXF1aXJl
cyBhbHNvIGEgcm9vdC4nCi0gICAgICAgIGh0dHBkID0gTGlnaHR0cGQodGVtcGZpbGUuZ2V0dGVt
cGRpcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ9b3B0aW9ucy5wb3J0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgIHJvb3Q9b3B0aW9ucy5yb290LAotICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyX2N5Z3dpbj1vcHRpb25zLnJlZ2lzdGVyX2N5Z3dpbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBydW5fYmFja2dyb3VuZD1vcHRpb25zLnJ1bl9iYWNrZ3JvdW5k
KQotICAgICAgICBpZiAnc3RhcnQnID09IG9wdGlvbnMuc2VydmVyOgotICAgICAgICAgICAgaHR0
cGQuc3RhcnQoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaHR0cGQuc3RvcChmb3JjZT1U
cnVlKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXJfYmFzZS5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyX2Jhc2Uu
cHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MjA0ODYuLjAwMDAwMDAKLS0tIGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
aHR0cF9zZXJ2ZXJfYmFzZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLSMhL3Vz
ci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIENocm9taXVt
IG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJCYXNlIGNsYXNzIHdp
dGggY29tbW9uIHJvdXRpbmVzIGJldHdlZW4gdGhlIEFwYWNoZSBhbmQgTGlnaHR0cGQgc2VydmVy
cy4iIiIKLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCB0aW1lCi1pbXBvcnQgdXJsbGliCi0KLQot
Y2xhc3MgSHR0cFNlcnZlckJhc2Uob2JqZWN0KToKLQotICAgIGRlZiB3YWl0X2Zvcl9hY3Rpb24o
c2VsZiwgYWN0aW9uKToKLSAgICAgICAgIiIiUmVwZWF0IHRoZSBhY3Rpb24gZm9yIDIwIHNlY29u
ZHMgb3IgdW50aWwgaXQgc3VjY2VlZHMuIFJldHVybnMKLSAgICAgICAgd2hldGhlciBpdCBzdWNj
ZWVkZWQuIiIiCi0gICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICB3aGls
ZSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUgPCAyMDoKLSAgICAgICAgICAgIGlmIGFjdGlvbigp
OgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDEp
Ci0KLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgaXNfc2VydmVyX3J1bm5pbmdfb25f
YWxsX3BvcnRzKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHNlcnZlciBp
cyBydW5uaW5nIG9uIGFsbCB0aGUgZGVzaXJlZCBwb3J0cy4iIiIKLSAgICAgICAgZm9yIG1hcHBp
bmcgaW4gc2VsZi5tYXBwaW5nczoKLSAgICAgICAgICAgIGlmICdzc2xjZXJ0JyBpbiBtYXBwaW5n
OgotICAgICAgICAgICAgICAgIGh0dHBfc3VmZml4ID0gJ3MnCi0gICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgIGh0dHBfc3VmZml4ID0gJycKLQotICAgICAgICAgICAgdXJsID0gJ2h0
dHAlczovLzEyNy4wLjAuMTolZC8nICUgKGh0dHBfc3VmZml4LCBtYXBwaW5nWydwb3J0J10pCi0K
LSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVybGxpYi51cmxv
cGVuKHVybCkKLSAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTZXJ2ZXIgcnVubmluZyBh
dCAlcyIgJSB1cmwpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICAg
ICBsb2dnaW5nLmRlYnVnKCJTZXJ2ZXIgTk9UIHJ1bm5pbmcgYXQgJXMiICUgdXJsKQotICAgICAg
ICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIHJldHVybiBUcnVlCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9odHRwZDIucGVtIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvaHR0cGQyLnBlbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjM0OWI3OC4uMDAwMDAwMAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwZDIucGVtCisrKyAvZGV2L251bGwKQEAgLTEsNDEg
KzAsMCBAQAotLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUlFWkRDQ0FreWdBd0lCQWdJ
QkFUQU5CZ2txaGtpRzl3MEJBUVVGQURCZ01SQXdEZ1lEVlFRREV3ZFVaWE4wCi1JRU5CTVFzd0NR
WURWUVFHRXdKVlV6RVRNQkVHQTFVRUNCTUtRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCeE1OCi1U
VzkxYm5SaGFXNGdWbWxsZHpFU01CQUdBMVVFQ2hNSlEyVnlkQ0JVWlhOME1CNFhEVEE0TURjeU9E
SXlNekl5Ci1PRm9YRFRFek1EY3lOekl5TXpJeU9Gb3dTakVMTUFrR0ExVUVCaE1DVlZNeEV6QVJC
Z05WQkFnVENrTmhiR2xtCi1iM0p1YVdFeEVqQVFCZ05WQkFvVENVTmxjblFnVkdWemRERVNNQkFH
QTFVRUF4TUpNVEkzTGpBdU1DNHhNSUdmCi1NQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFL
QmdRRFFqMnRQV1BVZ2J1STRIMy8zZG50dHFWYm5kd1UzCi0zQmRSQ2Q2N0RGTTQ0R1Jyc2pEU0g0
YlkvRWJGeVg5RDUyZC9peTZaYUFtRGVQY0N6NWsvZmdQM0RNdWp5a1lHCi1xZ05pVjJ5d3hUbE1q
N05sTjJDN1NSdDY4ZlFNWnI1aUk3cnlwZHh1YVp0OWxTTUQzRU5CZmZZdHVMVHlaZDlhCi0zSlBK
ZTFUYUlhYjVHd0lEQVFBQm80SENNSUcvTUFrR0ExVWRFd1FDTUFBd0hRWURWUjBPQkJZRUZDWUxC
djVLCi14NXNMTlZscExoNUZ3VHdoZERsN01JR1NCZ05WSFNNRWdZb3dnWWVBRkYzT2Y1bmoxQmxC
TVUvR3o3RWw5VnF2Ci00NWN4b1dTa1lqQmdNUkF3RGdZRFZRUURFd2RVWlhOMElFTkJNUXN3Q1FZ
RFZRUUdFd0pWVXpFVE1CRUdBMVVFCi1DQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTlRX
OTFiblJoYVc0Z1ZtbGxkekVTTUJBR0ExVUVDaE1KCi1RMlZ5ZENCVVpYTjBnZ2tBMUZHVDFEL2Uy
VTR3RFFZSktvWklodmNOQVFFRkJRQURnZ0lCQUV0a1ZtTE9iVWdrCi1iMmNJQTJTK1FEdGlmcTFV
Z1ZmQmJ5dHZSMmxGbW5BRE9SNTVtbzBnSFFHM0hIcXE0ZzAzNExtb1ZYREhoVWs4Ci1HYjZhRml2
NFF1Ym1WaExYY1VlbFRSWHdpTnZHemtXN3BDNkpycTEwNWhkUGp6WE1LVGNtaUxhb3BtNUZxZmM3
Ci1oajVDbjFTanNwYzhwZGVRanJiZU1kdmNhN0tsRnJHUDhZa3dDVTJ4T09YOVBpTjlHMDk2NkJX
Zmpuci9mWlpwCi0rT1FWdVVGSGRpQVp3dGhFTXVEcEFBWEhxWVhJc2VybWdkT3BnSmFBNTNjZjhO
cUJWMlFHaHRGZ3RzSkNSb2l1Ci03REtxaHlSV0JHeXoxOVZJSDJiN3krNnF2UVZ4dUhrMTlrS1JN
MG5mdHcveU5jSm5tN2d0dHRlc3BNVVBzT01hCi1hMlNEMUcwaG0wVE5ENnZ4YUJoZ1IzY1ZxcGwv
cUlwQWRGaTAwVG03aFR5WUU3STQzelBXMDN0Ky9EcEN0M1VtCi1FTVJac1E5MGNvNXErYmN4L3ZR
N1lBdHdVaDMwdU1iMHdwaWJleUN3RHA4Y3FObVNpUmtFdWMvRmpUWWVzNXQ4Ci01Z1IvL1dYMWww
K3Fqcmp1c085Tm1vTG5xMllrNlVjaW9YK3orcTZaL2R1ZEdmcWhMZmVXRDJRMExXWUEyNDJDCi1k
N2ttNVkzS0F0MVBKZFZzb2YvYWlWaFZkZGRZL09JRUtUUlFoV0VkRGJvc3kyZWgxNkJDS1hUMkZG
dmhORGcxCi1BWUZ2bjZJOG5qOUlsZE1KaUljM0RkaGFjRUFFelJNZVJnUGR6QWExZ3JpS1VHa254
c3lUeVJpaThydTBXUzZ3Ci1EQ05ybERPVlhkellHRVpvb0JJNzZCRFZZMFcwYWtqVgotLS0tLS1F
TkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQotTUlJ
Q1hRSUJBQUtCZ1FEUWoydFBXUFVnYnVJNEgzLzNkbnR0cVZibmR3VTMzQmRSQ2Q2N0RGTTQ0R1Jy
c2pEUwotSDRiWS9FYkZ5WDlENTJkL2l5NlphQW1EZVBjQ3o1ay9mZ1AzRE11anlrWUdxZ05pVjJ5
d3hUbE1qN05sTjJDNwotU1J0NjhmUU1acjVpSTdyeXBkeHVhWnQ5bFNNRDNFTkJmZll0dUxUeVpk
OWEzSlBKZTFUYUlhYjVHd0lEQVFBQgotQW9HQU5IWHU4ejJZSXpsaEUrYndoR204TUdCcEtMM3Fo
UnVLamVyaXFNQTM2dFdlek93OGxZNHltRUFVK1VsdgotQnNDZGF4cXlkUW9UWW91NTdtNFR5VUhF
Y3hxOXBxM0gwekIwcUw3MDlEZEhpL3Q0emJWOVhJb0F6QzV2MC9oRwotOStDYTI5VHdDMDJGQ3cr
cUxrTnJ0d0Nwd09jUW1jK2JQeHF2RnUxaU1pYWhVUkVDUVFEMkkvSGkyNDEzQ01aegotVEJqbDhm
TWlWTzlHaEEySjBzYzhRaStZY2dKYWthTEQ5eGNiYWlMa1R6UFpEbEEzODlDMWI2SWErcG9BcjRZ
QQotVmUwRkZieHBBa0VBMk9vYmF5eUhFL1F0UEVxb3k2TkxSNTdqaXJtVkJObVNXV2Q0bEF5TDVV
SUhJWVZ0dEpaZwotOENMdmJ6YVUvaURHd1Ird0tzTTY2NHJLUEhFbXRseW80d0pCQU1lU3FZTzVa
T0NKR3U5TldqckhqTTNmZEFzRwotOHpzMnpoaUx5YStmY1UwaUhJa3NCVzVUQm10NzFKdy93TWM5
UjVKMUswa1l2Rm1sOTg2NTNPNXNpMUVDUUJDawotUlY0L21FMXJtbHpaellGeUVjQjQ3RFFrY001
aWN0dnhHRXNqZTBnbmZLeVJ0QXo2ekkwZjRRYkRSVU1KK0xXdwotWEsrck1zWUhhK1NmT2IwYjlz
a0NRUUNMZGVvbnNJcEZEdi9VditmbEhJU3kwV0ErQUZrTFhyUmtCS2g2Ry9PRAotZE1IYU5ldmtK
Z1VucGNlVkVua3JkZW5wNUNjRW9GVEkxN3BkK25CZ0RtL0IKLS0tLS0tRU5EIFJTQSBQUklWQVRF
IEtFWS0tLS0tCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CmluZGV4IGI3YjI2ZTkuLjhhYjI0ZjEg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
bGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC0yOSw5ICsyOSw5IEBACiAKIGltcG9ydCBs
b2dnaW5nCiBpbXBvcnQgb3MKK2ltcG9ydCBzaW1wbGVqc29uCiAKIGZyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IGpzb25fcmVzdWx0c19nZW5lcmF0b3IKLWZyb20gbGF5b3V0X3BhY2thZ2UgaW1w
b3J0IHBhdGhfdXRpbHMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRp
b25zCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiAKQEAgLTQ1LDcg
KzQ1LDcgQEAgY2xhc3MgSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0b3IoanNvbl9yZXN1bHRzX2dl
bmVyYXRvci5KU09OUmVzdWx0c0dlbmVyYXRvcik6CiAgICAgV09OVEZJWCA9ICJ3b250Zml4Q291
bnRzIgogICAgIERFRkVSUkVEID0gImRlZmVycmVkQ291bnRzIgogCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0LCBidWlsZGVyX25hbWUsIGJ1aWxkX25hbWUsIGJ1aWxkX251bWJl
ciwKICAgICAgICAgcmVzdWx0c19maWxlX2Jhc2VfcGF0aCwgYnVpbGRlcl9iYXNlX3VybCwKICAg
ICAgICAgdGVzdF90aW1pbmdzLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCBhbGxfdGVz
dHMpOgogICAgICAgICAiIiJNb2RpZmllcyB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIEdyYWJzIGl0
IG9mZiB0aGUgYXJjaGl2ZSBkaXJlY3RvcnkKQEAgLTU2LDcgKzU2LDcgQEAgY2xhc3MgSlNPTkxh
eW91dFJlc3VsdHNHZW5lcmF0b3IoanNvbl9yZXN1bHRzX2dlbmVyYXRvci5KU09OUmVzdWx0c0dl
bmVyYXRvcik6CiAgICAgICAgICAgICAgIHJlc3VsdHMuCiAgICAgICAgICAgKHNlZSB0aGUgY29t
bWVudCBvZiBKU09OUmVzdWx0c0dlbmVyYXRvci5fX2luaXRfXyBmb3Igb3RoZXIgQXJncykKICAg
ICAgICAgIiIiCi0KKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fYnVp
bGRlcl9uYW1lID0gYnVpbGRlcl9uYW1lCiAgICAgICAgIHNlbGYuX2J1aWxkX25hbWUgPSBidWls
ZF9uYW1lCiAgICAgICAgIHNlbGYuX2J1aWxkX251bWJlciA9IGJ1aWxkX251bWJlcgpAQCAtMTUz
LDcgKzE1Myw3IEBAIGNsYXNzIEpTT05MYXlvdXRSZXN1bHRzR2VuZXJhdG9yKGpzb25fcmVzdWx0
c19nZW5lcmF0b3IuSlNPTlJlc3VsdHNHZW5lcmF0b3IpOgogICAgICAgICAgICAgdGVzdCwgdGVz
dF9uYW1lLCB0ZXN0cykKIAogICAgICAgICAjIFJlbW92ZSB0ZXN0cyB0aGF0IGRvbid0IGV4aXN0
IGFueW1vcmUuCi0gICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihwYXRoX3V0aWxzLmxh
eW91dF90ZXN0c19kaXIoKSwgdGVzdF9uYW1lKQorICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRo
LmpvaW4oc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3RfbmFtZSkKICAgICAgICAg
ZnVsbF9wYXRoID0gb3MucGF0aC5ub3JtcGF0aChmdWxsX3BhdGgpCiAgICAgICAgIGlmIG5vdCBv
cy5wYXRoLmV4aXN0cyhmdWxsX3BhdGgpOgogICAgICAgICAgICAgZGVsIHRlc3RzW3Rlc3RfbmFt
ZV0KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNf
Z2VuZXJhdG9yLnB5CmluZGV4IDU5NmUxZTQuLmU3MWU2MzEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVz
dWx0c19nZW5lcmF0b3IucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpAQCAtMjks
MTkgKzI5LDE1IEBACiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKK2ltcG9ydCBzaW1wbGVq
c29uCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCB1
cmxsaWIyCiBpbXBvcnQgeG1sLmRvbS5taW5pZG9tCiAKLWZyb20gbGF5b3V0X3BhY2thZ2UgaW1w
b3J0IHBhdGhfdXRpbHMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRp
b25zCiAKLXN5cy5wYXRoLmFwcGVuZChwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9w
YXJ0eScsICdXZWJLaXQnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdXZWJLaXRUb29scycpKSAKLWltcG9ydCBzaW1wbGVqc29uCi0KIAogY2xhc3MgSlNPTlJl
c3VsdHNHZW5lcmF0b3Iob2JqZWN0KToKIApAQCAtODAsNyArNzYsNyBAQCBjbGFzcyBKU09OUmVz
dWx0c0dlbmVyYXRvcihvYmplY3QpOgogCiAgICAgUkVTVUxUU19GSUxFTkFNRSA9ICJyZXN1bHRz
Lmpzb24iCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1l
LCBidWlsZF9udW1iZXIsCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGJ1aWxkZXJfbmFt
ZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAogICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9w
YXRoLCBidWlsZGVyX2Jhc2VfdXJsLAogICAgICAgICB0ZXN0X3RpbWluZ3MsIGZhaWx1cmVzLCBw
YXNzZWRfdGVzdHMsIHNraXBwZWRfdGVzdHMsIGFsbF90ZXN0cyk6CiAgICAgICAgICIiIk1vZGlm
aWVzIHRoZSByZXN1bHRzLmpzb24gZmlsZS4gR3JhYnMgaXQgb2ZmIHRoZSBhcmNoaXZlIGRpcmVj
dG9yeQpAQCAtMTAwLDYgKzk2LDcgQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0
KToKICAgICAgICAgICBhbGxfdGVzdHM6IExpc3Qgb2YgYWxsIHRoZSB0ZXN0cyB0aGF0IHdlcmUg
cnVuLiAgVGhpcyBzaG91bGQgbm90CiAgICAgICAgICAgICAgIGluY2x1ZGUgc2tpcHBlZCB0ZXN0
cy4KICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYu
X2J1aWxkZXJfbmFtZSA9IGJ1aWxkZXJfbmFtZQogICAgICAgICBzZWxmLl9idWlsZF9uYW1lID0g
YnVpbGRfbmFtZQogICAgICAgICBzZWxmLl9idWlsZF9udW1iZXIgPSBidWlsZF9udW1iZXIKQEAg
LTEyMiwyMiArMTE5LDI0IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKG9iamVjdCk6CiAg
ICAgICAgICAgICByZXN1bHRzX2ZpbGUud3JpdGUoanNvbikKICAgICAgICAgICAgIHJlc3VsdHNf
ZmlsZS5jbG9zZSgpCiAKLSAgICBkZWYgX2dldF9zdm5fcmV2aXNpb24oc2VsZiwgaW5fZGlyZWN0
b3J5PU5vbmUpOgorICAgIGRlZiBfZ2V0X3N2bl9yZXZpc2lvbihzZWxmLCBpbl9kaXJlY3Rvcnkp
OgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdm4gcmV2aXNpb24gZm9yIHRoZSBnaXZlbiBkaXJl
Y3RvcnkuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICBpbl9kaXJlY3Rvcnk6IFRoZSBkaXJl
Y3Rvcnkgd2hlcmUgc3ZuIGlzIHRvIGJlIHJ1bi4KICAgICAgICAgIiIiCi0gICAgICAgIG91dHB1
dCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzdm4iLCAiaW5mbyIsICItLXhtbCJdLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1pbl9kaXJlY3RvcnksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2hlbGw9KHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5j
b21tdW5pY2F0ZSgpWzBdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRvbSA9IHhtbC5kb20u
bWluaWRvbS5wYXJzZVN0cmluZyhvdXRwdXQpCi0gICAgICAgICAgICByZXR1cm4gZG9tLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCdlbnRyeScpWzBdLmdldEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAg
ICAncmV2aXNpb24nKQotICAgICAgICBleGNlcHQgeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJv
cjoKLSAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5w
YXRoLmpvaW4oaW5fZGlyZWN0b3J5LCAnLnN2bicpKToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1
YnByb2Nlc3MuUG9wZW4oWyJzdm4iLCAiaW5mbyIsICItLXhtbCJdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjd2Q9aW5fZGlyZWN0b3J5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD0oc3lzLnBsYXRmb3JtID09ICd3aW4zMicpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5Q
SVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
ZG9tID0geG1sLmRvbS5taW5pZG9tLnBhcnNlU3RyaW5nKG91dHB1dCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdlbnRyeScpWzBdLmdldEF0dHJpYnV0
ZSgKKyAgICAgICAgICAgICAgICAgICAgJ3JldmlzaW9uJykKKyAgICAgICAgICAgIGV4Y2VwdCB4
bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgor
ICAgICAgICByZXR1cm4gIiIKIAogICAgIGRlZiBfZ2V0X2FyY2hpdmVkX2pzb25fcmVzdWx0cyhz
ZWxmKToKICAgICAgICAgIiIiUmVhZHMgb2xkIHJlc3VsdHMgSlNPTiBmaWxlIGlmIGl0IGV4aXN0
cy4KQEAgLTMwNSwxNiArMzA0LDE3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKG9iamVj
dCk6CiAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3Jf
YnVpbGRlciwKICAgICAgICAgICAgIHNlbGYuX2J1aWxkX251bWJlciwgc2VsZi5CVUlMRF9OVU1C
RVJTKQogCi0gICAgICAgIHBhdGhfdG9fd2Via2l0ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdXZWJDb3JlJykKLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0
ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAotICAgICAgICAgICAgc2VsZi5f
Z2V0X3N2bl9yZXZpc2lvbihwYXRoX3RvX3dlYmtpdCksCi0gICAgICAgICAgICBzZWxmLldFQktJ
VF9TVk4pCi0KLSAgICAgICAgcGF0aF90b19jaHJvbWVfYmFzZSA9IHBhdGhfdXRpbHMucGF0aF9m
cm9tX2Jhc2UoKQotICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3Vs
dHNfZm9yX2J1aWxkZXIsCi0gICAgICAgICAgICBzZWxmLl9nZXRfc3ZuX3JldmlzaW9uKHBhdGhf
dG9fY2hyb21lX2Jhc2UpLAotICAgICAgICAgICAgc2VsZi5DSFJPTUVfU1ZOKQorICAgICAgICBp
ZiBoYXNhdHRyKHNlbGYuX3BvcnQsICdwYXRoX2Zyb21fYmFzZScpOgorICAgICAgICAgICAgcGF0
aF90b193ZWJraXQgPSBzZWxmLl9wb3J0LnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdX
ZWJLaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ1dlYkNvcmUnKQorICAgICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdf
bGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgICAgIHNlbGYuX2dldF9zdm5f
cmV2aXNpb24ocGF0aF90b193ZWJraXQpLAorICAgICAgICAgICAgICAgIHNlbGYuV0VCS0lUX1NW
TikKKworICAgICAgICAgICAgcGF0aF90b19jaHJvbWVfYmFzZSA9IHNlbGYuX3BvcnQucGF0aF9m
cm9tX2Jhc2UoKQorICAgICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChy
ZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgICAgIHNlbGYuX2dldF9zdm5fcmV2aXNp
b24ocGF0aF90b19jaHJvbWVfYmFzZSksCisgICAgICAgICAgICAgICAgc2VsZi5DSFJPTUVfU1ZO
KQogCiAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3Jf
YnVpbGRlciwKICAgICAgICAgICAgIGludCh0aW1lLnRpbWUoKSksCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9saWdo
dHRwZC5jb25mIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbGlnaHR0cGQuY29uZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDMxNTBkZC4uMDAwMDAwMAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9saWdodHRwZC5jb25mCisrKyAvZGV2L251bGwKQEAgLTEs
ODkgKzAsMCBAQAotc2VydmVyLnRhZyAgICAgICAgICAgICAgICAgID0gIkxpZ2h0VFBELzEuNC4x
OSAoV2luMzIpIgotc2VydmVyLm1vZHVsZXMgICAgICAgICAgICAgID0gKCAibW9kX2FjY2Vzc2xv
ZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfYWxpYXMiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2NnaSIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJtb2RfcmV3cml0ZSIgKQotCi0jIGRlZmF1bHQgZG9jdW1lbnQgcm9vdCBy
ZXF1aXJlZAotc2VydmVyLmRvY3VtZW50LXJvb3QgPSAiLiIKLQotIyBmaWxlcyB0byBjaGVjayBm
b3IgaWYgLi4uLyBpcyByZXF1ZXN0ZWQKLWluZGV4LWZpbGUubmFtZXMgICAgICAgICAgICA9ICgg
ImluZGV4LnBocCIsICJpbmRleC5wbCIsICJpbmRleC5jZ2kiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaW5kZXguaHRtbCIsICJpbmRleC5odG0iLCAiZGVmYXVsdC5odG0iICkK
LSMgbWltZXR5cGUgbWFwcGluZwotbWltZXR5cGUuYXNzaWduICAgICAgICAgICAgID0gKAotICAi
LmdpZiIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvZ2lmIiwKLSAgIi5qcGciICAgICAgICAgID0+
ICAgICAgImltYWdlL2pwZWciLAotICAiLmpwZWciICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBl
ZyIsCi0gICIucG5nIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9wbmciLAotICAiLnN2ZyIgICAg
ICAgICAgPT4gICAgICAiaW1hZ2Uvc3ZnK3htbCIsCi0gICIuY3NzIiAgICAgICAgICA9PiAgICAg
ICJ0ZXh0L2NzcyIsCi0gICIuaHRtbCIgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAotICAi
Lmh0bSIgICAgICAgICAgPT4gICAgICAidGV4dC9odG1sIiwKLSAgIi54aHRtbCIgICAgICAgID0+
ICAgICAgImFwcGxpY2F0aW9uL3hodG1sK3htbCIsCi0gICIuanMiICAgICAgICAgICA9PiAgICAg
ICJ0ZXh0L2phdmFzY3JpcHQiLAotICAiLmxvZyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFp
biIsCi0gICIuY29uZiIgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKLSAgIi50ZXh0IiAg
ICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAotICAiLnR4dCIgICAgICAgICAgPT4gICAgICAi
dGV4dC9wbGFpbiIsCi0gICIuZHRkIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCi0gICIu
eG1sIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCi0gICIubWFuaWZlc3QiICAgICA9PiAg
ICAgICJ0ZXh0L2NhY2hlLW1hbmlmZXN0IiwKLSApCi0KLSMgVXNlIHRoZSAiQ29udGVudC1UeXBl
IiBleHRlbmRlZCBhdHRyaWJ1dGUgdG8gb2J0YWluIG1pbWUgdHlwZSBpZiBwb3NzaWJsZQotbWlt
ZXR5cGUudXNlLXhhdHRyICAgICAgICAgID0gImVuYWJsZSIKLQotIyMKLSMgd2hpY2ggZXh0ZW5z
aW9ucyBzaG91bGQgbm90IGJlIGhhbmRsZSB2aWEgc3RhdGljLWZpbGUgdHJhbnNmZXIKLSMKLSMg
LnBocCwgLnBsLCAuZmNnaSBhcmUgbW9zdCBvZnRlbiBoYW5kbGVkIGJ5IG1vZF9mYXN0Y2dpIG9y
IG1vZF9jZ2kKLXN0YXRpYy1maWxlLmV4Y2x1ZGUtZXh0ZW5zaW9ucyA9ICggIi5waHAiLCAiLnBs
IiwgIi5jZ2kiICkKLQotc2VydmVyLmJpbmQgPSAibG9jYWxob3N0Igotc2VydmVyLnBvcnQgPSA4
MDAxCi0KLSMjIHZpcnR1YWwgZGlyZWN0b3J5IGxpc3RpbmdzCi1kaXItbGlzdGluZy5hY3RpdmF0
ZSAgICAgICAgPSAiZW5hYmxlIgotI2Rpci1saXN0aW5nLmVuY29kaW5nICAgICAgID0gImlzby04
ODU5LTIiCi0jZGlyLWxpc3RpbmcuZXh0ZXJuYWwtY3NzICAgPSAic3R5bGUvb2xkc3R5bGUuY3Nz
IgotCi0jIyBlbmFibGUgZGVidWdnaW5nCi0jZGVidWcubG9nLXJlcXVlc3QtaGVhZGVyICAgPSAi
ZW5hYmxlIgotI2RlYnVnLmxvZy1yZXNwb25zZS1oZWFkZXIgID0gImVuYWJsZSIKLSNkZWJ1Zy5s
b2ctcmVxdWVzdC1oYW5kbGluZyA9ICJlbmFibGUiCi0jZGVidWcubG9nLWZpbGUtbm90LWZvdW5k
ICAgPSAiZW5hYmxlIgotCi0jIyMjIFNTTCBlbmdpbmUKLSNzc2wuZW5naW5lICAgICAgICAgICAg
ICAgICA9ICJlbmFibGUiCi0jc3NsLnBlbWZpbGUgICAgICAgICAgICAgICAgPSAic2VydmVyLnBl
bSIKLQotIyBSZXdyaXRlIHJ1bGUgZm9yIHV0Zi04IHBhdGggdGVzdCAoTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy91cmkvdXRmOC1wYXRoLmh0bWwpCi0jIFNlZSB0aGUgYXBhY2hlIHJld3JpdGUgcnVs
ZSBhdCBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3VyaS9pbnRlcmNlcHQvLmh0YWNjZXNzCi0jIFJl
d3JpdGUgcnVsZSBmb3IgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9jeXJpbGxpYy11
cmkuaHRtbC4KLSMgU2VlIHRoZSBhcGFjaGUgcmV3cml0ZSBydWxlIGF0Ci0jIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvYXBwY2FjaGUvcmVzb3VyY2VzL2ludGVyY2VwdC8uaHRhY2Nlc3MKLXVybC5y
ZXdyaXRlLW9uY2UgPSAoCi0gICJeL3VyaS9pbnRlcmNlcHQvKC4qKSIgPT4gIi91cmkvcmVzb3Vy
Y2VzL3ByaW50LXVyaS5waHAiLAotICAiXi9hcHBjYWNoZS9yZXNvdXJjZXMvaW50ZXJjZXB0Lygu
KikiID0+ICIvYXBwY2FjaGUvcmVzb3VyY2VzL3ByaW50LXVyaS5waHAiCi0pCi0KLSMgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNwb25zZS1lbmNvZGluZy5odG1sIHVz
ZXMgYW4gaHRhY2Nlc3MKLSMgdG8gb3ZlcnJpZGUgY2hhcnNldCBmb3IgcmVwbHkyLnR4dCwgcmVw
bHkyLnhtbCwgYW5kIHJlcGx5NC50eHQuCi0kSFRUUFsidXJsIl0gPX4gIl4veG1saHR0cHJlcXVl
c3QvcmVzb3VyY2VzL3JlcGx5Mi4odHh0fHhtbCkiIHsKLSAgbWltZXR5cGUuYXNzaWduID0gKAot
ICAgICIudHh0IiA9PiAidGV4dC9wbGFpbjsgY2hhcnNldD13aW5kb3dzLTEyNTEiLAotICAgICIu
eG1sIiA9PiAidGV4dC94bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUxIgotICApCi19Ci0kSFRUUFsi
dXJsIl0gPX4gIl4veG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlcGx5NC50eHQiIHsKLSAgbWlt
ZXR5cGUuYXNzaWduID0gKCAiLnR4dCIgPT4gInRleHQvcGxhaW47IGNoYXJzZXQ9a29pOC1yIiAp
Ci19Ci0KLSMgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS93cm9uZy1jb250ZW50LXR5
cGUuaHRtbCB1c2VzIGFuIGh0YWNjZXNzCi0jIHRvIG92ZXJyaWRlIG1pbWUgdHlwZSBmb3Igd3Jv
bmctY29udGVudC10eXBlLm1hbmlmZXN0LgotJEhUVFBbInVybCJdID1+ICJeL2FwcGNhY2hlL3Jl
c291cmNlcy93cm9uZy1jb250ZW50LXR5cGUubWFuaWZlc3QiIHsKLSAgbWltZXR5cGUuYXNzaWdu
ID0gKCAiLm1hbmlmZXN0IiA9PiAidGV4dC9wbGFpbiIgKQotfQotCi0jIEF1dG9nZW5lcmF0ZWQg
dGVzdC1zcGVjaWZpYyBjb25maWcgZm9sbG93cy4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BhdGhfdXRpbHMucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9wYXRoX3V0aWxzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmQwNjJiLi4w
MDAwMDAwCi0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3BhdGhfdXRpbHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzOTUgKzAsMCBA
QAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21p
dW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUg
Q2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlRoaXMg
cGFja2FnZSBjb250YWlucyB1dGlsaXR5IG1ldGhvZHMgZm9yIG1hbmlwdWxhdGluZyBwYXRocyBh
bmQKLWZpbGVuYW1lcyBmb3IgdGVzdCByZXN1bHRzIGFuZCBiYXNlbGluZXMuIEl0IGFsc28gY29u
dGFpbnMgd3JhcHBlcnMKLW9mIGEgZmV3IHJvdXRpbmVzIGluIHBsYXRmb3JtX3V0aWxzLnB5IHNv
IHRoYXQgcGxhdGZvcm1fdXRpbHMucHkgY2FuCi1iZSBjb25zaWRlcmVkIGEgJ3Byb3RlY3RlZCcg
cGFja2FnZSAtIGkuZS4sIHRoaXMgZmlsZSBzaG91bGQgYmUKLXRoZSBvbmx5IGZpbGUgdGhhdCBl
dmVyIGluY2x1ZGVzIHBsYXRmb3JtX3V0aWxzLiBUaGlzIGxlYWRzIHRvCi11cyBpbmNsdWRpbmcg
YSBmZXcgdGhpbmdzIHRoYXQgZG9uJ3QgcmVhbGx5IGhhdmUgYW55dGhpbmcgdG8gZG8KLSB3aXRo
IHBhdGhzLCB1bmZvcnR1bmF0ZWx5LiIiIgotCi1pbXBvcnQgZXJybm8KLWltcG9ydCBvcwotaW1w
b3J0IHN0YXQKLWltcG9ydCBzeXMKLQotaW1wb3J0IHBsYXRmb3JtX3V0aWxzCi1pbXBvcnQgcGxh
dGZvcm1fdXRpbHNfd2luCi1pbXBvcnQgcGxhdGZvcm1fdXRpbHNfbWFjCi1pbXBvcnQgcGxhdGZv
cm1fdXRpbHNfbGludXgKLQotIyBDYWNoZSBzb21lIHZhbHVlcyBzbyB3ZSBkb24ndCBoYXZlIHRv
IHJlY2FsY3VsYXRlIHRoZW0uIF9iYXNlZGlyIGlzCi0jIHVzZWQgYnkgUGF0aEZyb21CYXNlKCkg
YW5kIGNhY2hlcyB0aGUgZnVsbCAobmF0aXZlKSBwYXRoIHRvIHRoZSB0b3AKLSMgb2YgdGhlIHNv
dXJjZSB0cmVlICgvc3JjKS4gX2Jhc2VsaW5lX3NlYXJjaF9wYXRoIGlzIHVzZWQgYnkKLSMgRXhw
ZWN0ZWRCYXNlbGluZXMoKSBhbmQgY2FjaGVzIHRoZSBsaXN0IG9mIG5hdGl2ZSBwYXRocyB0byBz
ZWFyY2gKLSMgZm9yIGJhc2VsaW5lIHJlc3VsdHMuCi1fYmFzZWRpciA9IE5vbmUKLV9iYXNlbGlu
ZV9zZWFyY2hfcGF0aCA9IE5vbmUKLQotCi1jbGFzcyBQYXRoTm90Rm91bmQoRXhjZXB0aW9uKToK
LSAgICBwYXNzCi0KLQotZGVmIGxheW91dF90ZXN0c19kaXIoKToKLSAgICAiIiJSZXR1cm5zIHRo
ZSBmdWxseS1xdWFsaWZpZWQgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGlu
cHV0Ci0gICAgZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBsYXlvdXQgdGVzdC4iIiIKLSAgICByZXR1
cm4gcGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdMYXlvdXRUZXN0cycp
Ci0KLQotZGVmIGNocm9taXVtX2Jhc2VsaW5lX3BhdGgocGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIi
UmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBleHBlY3Rl
ZAotICAgIGJhc2VsaW5lIHJlc3VsdHMgZnJvbSBjaHJvbWl1bSBwb3J0cy4gSWYgfHBsYXRmb3Jt
fCBpcyBOb25lLCB0aGUKLSAgICBjdXJyZW50bHkgZXhlY3V0aW5nIHBsYXRmb3JtIGlzIHVzZWQu
Ci0KLSAgICBOb3RlOiBhbHRob3VnaCBkaXJlY3RseSByZWZlcmVuY2luZyBpbmRpdmlkdWFsIHBs
YXRmb3JtX3V0aWxzXyogZmlsZXMgaXMKLSAgICB1c3VhbGx5IGRpc2NvdXJhZ2VkLCB3ZSBhbGxv
dyBpdCBoZXJlIHNvIHRoYXQgdGhlIHJlYmFzZWxpbmluZyB0b29sIGNhbgotICAgIHB1bGwgYmFz
ZWxpbmVzIGZvciBwbGF0Zm9ybXMgb3RoZXIgdGhhbiB0aGUgaG9zdCBwbGF0Zm9ybS4iIiIKLQot
ICAgICMgTm9ybWFsaXplIHRoZSBwbGF0Zm9ybSBzdHJpbmcuCi0gICAgcGxhdGZvcm0gPSBwbGF0
Zm9ybV9uYW1lKHBsYXRmb3JtKQotICAgIGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVt
LW1hYycpOgotICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfbWFjLmJhc2VsaW5lX3BhdGgo
cGxhdGZvcm0pCi0gICAgZWxpZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdjaHJvbWl1bS13aW4nKToK
LSAgICAgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzX3dpbi5iYXNlbGluZV9wYXRoKHBsYXRmb3Jt
KQotICAgIGVsaWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21pdW0tbGludXgnKToKLSAgICAg
ICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzX2xpbnV4LmJhc2VsaW5lX3BhdGgocGxhdGZvcm0pCi0K
LSAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMuYmFzZWxpbmVfcGF0aCgpCi0KLQotZGVmIHdlYmtp
dF9iYXNlbGluZV9wYXRoKHBsYXRmb3JtKToKLSAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGgg
dG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGV4cGVjdGVkCi0gICAgYmFzZWxpbmUgcmVzdWx0
cyBmcm9tIFdlYktpdCBwb3J0cy4iIiIKLSAgICByZXR1cm4gcGF0aF9mcm9tX2Jhc2UoJ3RoaXJk
X3BhcnR5JywgJ1dlYktpdCcsICdMYXlvdXRUZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICdwbGF0Zm9ybScsIHBsYXRmb3JtKQotCi0KLWRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChw
bGF0Zm9ybT1Ob25lKToKLSAgICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRv
IHNlYXJjaCBmb3IgYmFzZWxpbmVzL3Jlc3VsdHMgZm9yIGEKLSAgICBnaXZlbiBwbGF0Zm9ybSwg
aW4gb3JkZXIgb2YgcHJlZmVyZW5jZS4gUGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YK
LSAgICB0aGUgc291cmNlIHRyZWUuIElmIHBhcmFtZXRlciBwbGF0Zm9ybSBpcyBOb25lLCByZXR1
cm5zIHRoZSBsaXN0IGZvciB0aGUKLSAgICBjdXJyZW50IHBsYXRmb3JtIHRoYXQgdGhlIHNjcmlw
dCBpcyBydW5uaW5nIG9uLgotCi0gICAgTm90ZTogYWx0aG91Z2ggZGlyZWN0bHkgcmVmZXJlbmNp
bmcgaW5kaXZpZHVhbCBwbGF0Zm9ybV91dGlsc18qIGZpbGVzIGlzCi0gICAgdXN1YWxseSBkaXNj
b3VyYWdlZCwgd2UgYWxsb3cgaXQgaGVyZSBzbyB0aGF0IHRoZSByZWJhc2VsaW5pbmcgdG9vbCBj
YW4KLSAgICBwdWxsIGJhc2VsaW5lcyBmb3IgcGxhdGZvcm1zIG90aGVyIHRoYW4gdGhlIGhvc3Qg
cGxhdGZvcm0uIiIiCi0KLSAgICAjIE5vcm1hbGl6ZSB0aGUgcGxhdGZvcm0gbmFtZS4KLSAgICBw
bGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUocGxhdGZvcm0pCi0gICAgaWYgcGxhdGZvcm0uc3RhcnRz
d2l0aCgnY2hyb21pdW0tbWFjJyk6Ci0gICAgICAgIHJldHVybiBwbGF0Zm9ybV91dGlsc19tYWMu
YmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm0pCi0gICAgZWxpZiBwbGF0Zm9ybS5zdGFydHN3
aXRoKCdjaHJvbWl1bS13aW4nKToKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzX3dpbi5i
YXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybSkKLSAgICBlbGlmIHBsYXRmb3JtLnN0YXJ0c3dp
dGgoJ2Nocm9taXVtLWxpbnV4Jyk6Ci0gICAgICAgIHJldHVybiBwbGF0Zm9ybV91dGlsc19saW51
eC5iYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybSkKLSAgICByZXR1cm4gcGxhdGZvcm1fdXRp
bHMuYmFzZWxpbmVfc2VhcmNoX3BhdGgoKQotCi0KLWRlZiBleHBlY3RlZF9iYXNlbGluZXMoZmls
ZW5hbWUsIHN1ZmZpeCwgcGxhdGZvcm09Tm9uZSwgYWxsX2Jhc2VsaW5lcz1GYWxzZSk6Ci0gICAg
IiIiR2l2ZW4gYSB0ZXN0IG5hbWUsIGZpbmRzIHdoZXJlIHRoZSBiYXNlbGluZSByZXN1bHRzIGFy
ZSBsb2NhdGVkLgotCi0gICAgQXJnczoKLSAgICAgICBmaWxlbmFtZTogYWJzb2x1dGUgZmlsZW5h
bWUgdG8gdGVzdCBmaWxlCi0gICAgICAgc3VmZml4OiBmaWxlIHN1ZmZpeCBvZiB0aGUgZXhwZWN0
ZWQgcmVzdWx0cywgaW5jbHVkaW5nIGRvdDsgZS5nLiAnLnR4dCcKLSAgICAgICAgICAgb3IgJy5w
bmcnLiAgVGhpcyBzaG91bGQgbm90IGJlIE5vbmUsIGJ1dCBtYXkgYmUgYW4gZW1wdHkgc3RyaW5n
LgotICAgICAgIHBsYXRmb3JtOiBsYXlvdXQgdGVzdCBwbGF0Zm9ybTogJ3dpbicsICdsaW51eCcg
b3IgJ21hYycuIERlZmF1bHRzIHRvCi0gICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IHBsYXRm
b3JtLgotICAgICAgIGFsbF9iYXNlbGluZXM6IElmIFRydWUsIHJldHVybiBhbiBvcmRlcmVkIGxp
c3Qgb2YgYWxsIGJhc2VsaW5lIHBhdGhzCi0gICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBn
aXZlbiBwbGF0Zm9ybS4gSWYgRmFsc2UsIHJldHVybiBvbmx5IHRoZSBmaXJzdAotICAgICAgICAg
ICAgICAgICAgICAgIG9uZS4KLSAgICBSZXR1cm5zCi0gICAgICAgYSBsaXN0IG9mICggcGxhdGZv
cm1fZGlyLCByZXN1bHRzX2ZpbGVuYW1lICksIHdoZXJlCi0gICAgICAgICBwbGF0Zm9ybV9kaXIg
LSBhYnMgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSByZXN1bHRzIHRyZWUgKG9yIHRlc3QgdHJlZSkK
LSAgICAgICAgIHJlc3VsdHNfZmlsZW5hbWUgLSByZWxhdGl2ZSBwYXRoIGZyb20gdG9wIG9mIHRy
ZWUgdG8gdGhlIHJlc3VsdHMgZmlsZQotICAgICAgICAgICAob3MucGF0aC5qb2luIG9mIHRoZSB0
d28gZ2l2ZXMgeW91IHRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUsCi0gICAgICAgICAgICB1bmxl
c3MgTm9uZSB3YXMgcmV0dXJuZWQuKQotICAgICAgUmV0dXJuIHZhbHVlcyB3aWxsIGJlIGluIHRo
ZSBmb3JtYXQgYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtCi0gICAgICAoZS5n
LiwgIlxcIiBmb3IgcGF0aCBzZXBhcmF0b3JzIG9uIFdpbmRvd3MpLiBJZiB0aGUgcmVzdWx0cyBm
aWxlIGlzIG5vdAotICAgICAgZm91bmQsIHRoZW4gTm9uZSB3aWxsIGJlIHJldHVybmVkIGZvciB0
aGUgZGlyZWN0b3J5LCBidXQgdGhlIGV4cGVjdGVkCi0gICAgICByZWxhdGl2ZSBwYXRobmFtZSB3
aWxsIHN0aWxsIGJlIHJldHVybmVkLgotICAgICIiIgotICAgIGdsb2JhbCBfYmFzZWxpbmVfc2Vh
cmNoX3BhdGgKLSAgICBnbG9iYWwgX3NlYXJjaF9wYXRoX3BsYXRmb3JtCi0gICAgdGVzdG5hbWUg
PSBvcy5wYXRoLnNwbGl0ZXh0KHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKVswXQot
Ci0gICAgYmFzZWxpbmVfZmlsZW5hbWUgPSB0ZXN0bmFtZSArICctZXhwZWN0ZWQnICsgc3VmZml4
Ci0KLSAgICBpZiAoX2Jhc2VsaW5lX3NlYXJjaF9wYXRoIGlzIE5vbmUpIG9yIChfc2VhcmNoX3Bh
dGhfcGxhdGZvcm0gIT0gcGxhdGZvcm0pOgotICAgICAgICBfYmFzZWxpbmVfc2VhcmNoX3BhdGgg
PSBiYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybSkKLSAgICAgICAgX3NlYXJjaF9wYXRoX3Bs
YXRmb3JtID0gcGxhdGZvcm0KLQotICAgIGJhc2VsaW5lcyA9IFtdCi0gICAgZm9yIHBsYXRmb3Jt
X2RpciBpbiBfYmFzZWxpbmVfc2VhcmNoX3BhdGg6Ci0gICAgICAgIGlmIG9zLnBhdGguZXhpc3Rz
KG9zLnBhdGguam9pbihwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSk6Ci0gICAgICAg
ICAgICBiYXNlbGluZXMuYXBwZW5kKChwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSkK
LQotICAgICAgICBpZiBub3QgYWxsX2Jhc2VsaW5lcyBhbmQgYmFzZWxpbmVzOgotICAgICAgICAg
ICAgcmV0dXJuIGJhc2VsaW5lcwotCi0gICAgIyBJZiBpdCB3YXNuJ3QgZm91bmQgaW4gYSBwbGF0
Zm9ybSBkaXJlY3RvcnksIHJldHVybiB0aGUgZXhwZWN0ZWQgcmVzdWx0Ci0gICAgIyBpbiB0aGUg
dGVzdCBkaXJlY3RvcnksIGV2ZW4gaWYgbm8gc3VjaCBmaWxlIGFjdHVhbGx5IGV4aXN0cy4KLSAg
ICBwbGF0Zm9ybV9kaXIgPSBsYXlvdXRfdGVzdHNfZGlyKCkKLSAgICBpZiBvcy5wYXRoLmV4aXN0
cyhvcy5wYXRoLmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpOgotICAgICAg
ICBiYXNlbGluZXMuYXBwZW5kKChwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSkKLQot
ICAgIGlmIGJhc2VsaW5lczoKLSAgICAgICAgcmV0dXJuIGJhc2VsaW5lcwotCi0gICAgcmV0dXJu
IFsoTm9uZSwgYmFzZWxpbmVfZmlsZW5hbWUpXQotCi0KLWRlZiBleHBlY3RlZF9maWxlbmFtZShm
aWxlbmFtZSwgc3VmZml4KToKLSAgICAiIiJHaXZlbiBhIHRlc3QgbmFtZSwgcmV0dXJucyBhbiBh
YnNvbHV0ZSBwYXRoIHRvIGl0cyBleHBlY3RlZCByZXN1bHRzLgotCi0gICAgSWYgbm8gZXhwZWN0
ZWQgcmVzdWx0cyBhcmUgZm91bmQgaW4gYW55IG9mIHRoZSBzZWFyY2hlZCBkaXJlY3Rvcmllcywg
dGhlCi0gICAgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSB0ZXN0IGl0c2VsZiBpcyBsb2NhdGVkIHdp
bGwgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm4KLSAgICB2YWx1ZSBpcyBpbiB0aGUgZm9ybWF0IGFw
cHJvcHJpYXRlIGZvciB0aGUgcGxhdGZvcm0gKGUuZy4sICJcXCIgZm9yCi0gICAgcGF0aCBzZXBh
cmF0b3JzIG9uIHdpbmRvd3MpLgotCi0gICAgQXJnczoKLSAgICAgICBmaWxlbmFtZTogYWJzb2x1
dGUgZmlsZW5hbWUgdG8gdGVzdCBmaWxlCi0gICAgICAgc3VmZml4OiBmaWxlIHN1ZmZpeCBvZiB0
aGUgZXhwZWN0ZWQgcmVzdWx0cywgaW5jbHVkaW5nIGRvdDsgZS5nLiAnLnR4dCcKLSAgICAgICAg
ICAgb3IgJy5wbmcnLiAgVGhpcyBzaG91bGQgbm90IGJlIE5vbmUsIGJ1dCBtYXkgYmUgYW4gZW1w
dHkgc3RyaW5nLgotICAgICAgIHBsYXRmb3JtOiB0aGUgbW9zdC1zcGVjaWZpYyBkaXJlY3Rvcnkg
bmFtZSB0byB1c2UgdG8gYnVpbGQgdGhlCi0gICAgICAgICAgIHNlYXJjaCBsaXN0IG9mIGRpcmVj
dG9yaWVzLCBlLmcuLCAnY2hyb21pdW0td2luJywgb3IKLSAgICAgICAgICAgJ2Nocm9taXVtLW1h
Yy1sZW9wYXJkJyAod2UgZm9sbG93IHRoZSBXZWJLaXQgZm9ybWF0KQotICAgICIiIgotICAgIHBs
YXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUgPSBleHBlY3RlZF9iYXNlbGluZXMoZmlsZW5h
bWUsIHN1ZmZpeClbMF0KLSAgICBpZiBwbGF0Zm9ybV9kaXI6Ci0gICAgICAgIHJldHVybiBvcy5w
YXRoLmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkKLSAgICByZXR1cm4gb3Mu
cGF0aC5qb2luKGxheW91dF90ZXN0c19kaXIoKSwgYmFzZWxpbmVfZmlsZW5hbWUpCi0KLQotZGVm
IHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpOgotICAgICIiIlByb3ZpZGUgdGhlIGZp
bGVuYW1lIG9mIHRoZSB0ZXN0IHJlbGF0aXZlIHRvIHRoZSBsYXlvdXQgdGVzdHMKLSAgICBkaXJl
Y3RvcnkgYXMgYSB1bml4IHN0eWxlIHBhdGggKGEvYi9jKS4iIiIKLSAgICByZXR1cm4gX3dpbl9w
YXRoX3RvX3VuaXgoZmlsZW5hbWVbbGVuKGxheW91dF90ZXN0c19kaXIoKSkgKyAxOl0pCi0KLQot
ZGVmIF93aW5fcGF0aF90b191bml4KHBhdGgpOgotICAgICIiIkNvbnZlcnQgYSB3aW5kb3dzIHBh
dGggdG8gdXNlIHVuaXgtc3R5bGUgcGF0aCBzZXBhcmF0b3JzIChhL2IvYykuIiIiCi0gICAgcmV0
dXJuIHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCi0KLSMKLSMgUm91dGluZXMgdGhhdCBhcmUgYXJn
dWFibHkgcGxhdGZvcm0tc3BlY2lmaWMgYnV0IGhhdmUgYmVlbiBtYWRlCi0jIGdlbmVyaWMgZm9y
IG5vdyAodGhleSB1c2VkIHRvIGJlIGluIHBsYXRmb3JtX3V0aWxzXyopCi0jCi0KLQotZGVmIGZp
bGVuYW1lX3RvX3VyaShmdWxsX3BhdGgpOgotICAgICIiIkNvbnZlcnQgYSB0ZXN0IGZpbGUgdG8g
YSBVUkkuIiIiCi0gICAgTEFZT1VUVEVTVF9IVFRQX0RJUiA9ICJodHRwL3Rlc3RzLyIKLSAgICBM
QVlPVVRURVNUX1dFQlNPQ0tFVF9ESVIgPSAid2Vic29ja2V0L3Rlc3RzLyIKLQotICAgIHJlbGF0
aXZlX3BhdGggPSBfd2luX3BhdGhfdG9fdW5peChyZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZ1bGxf
cGF0aCkpCi0gICAgcG9ydCA9IE5vbmUKLSAgICB1c2Vfc3NsID0gRmFsc2UKLQotICAgIGlmIHJl
bGF0aXZlX3BhdGguc3RhcnRzd2l0aChMQVlPVVRURVNUX0hUVFBfRElSKToKLSAgICAgICAgIyBo
dHRwL3Rlc3RzLyBydW4gb2ZmIHBvcnQgODAwMCBhbmQgc3NsLyBvZmYgODQ0MwotICAgICAgICBy
ZWxhdGl2ZV9wYXRoID0gcmVsYXRpdmVfcGF0aFtsZW4oTEFZT1VUVEVTVF9IVFRQX0RJUik6XQot
ICAgICAgICBwb3J0ID0gODAwMAotICAgIGVsaWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKExB
WU9VVFRFU1RfV0VCU09DS0VUX0RJUik6Ci0gICAgICAgICMgd2Vic29ja2V0L3Rlc3RzLyBydW4g
b2ZmIHBvcnQgODg4MCBhbmQgOTMyMwotICAgICAgICAjIE5vdGU6IHRoZSByb290IGlzIC8sIG5v
dCB3ZWJzb2NrZXQvdGVzdHMvCi0gICAgICAgIHBvcnQgPSA4ODgwCi0KLSAgICAjIE1ha2UgaHR0
cC90ZXN0cy9sb2NhbCBydW4gYXMgbG9jYWwgZmlsZXMuIFRoaXMgaXMgdG8gbWltaWMgdGhlCi0g
ICAgIyBsb2dpYyBpbiBydW4td2Via2l0LXRlc3RzLgotICAgICMgVE9ETyhqaWFubGkpOiBDb25z
aWRlciBleHRlbmRpbmcgdGhpcyB0byAibWVkaWEvIi4KLSAgICBpZiBwb3J0IGFuZCBub3QgcmVs
YXRpdmVfcGF0aC5zdGFydHN3aXRoKCJsb2NhbC8iKToKLSAgICAgICAgaWYgcmVsYXRpdmVfcGF0
aC5zdGFydHN3aXRoKCJzc2wvIik6Ci0gICAgICAgICAgICBwb3J0ICs9IDQ0MwotICAgICAgICAg
ICAgcHJvdG9jb2wgPSAiaHR0cHMiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcm90b2Nv
bCA9ICJodHRwIgotICAgICAgICByZXR1cm4gIiVzOi8vMTI3LjAuMC4xOiV1LyVzIiAlIChwcm90
b2NvbCwgcG9ydCwgcmVsYXRpdmVfcGF0aCkKLQotICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5
Z3dpbicsICd3aW4zMicpOgotICAgICAgICByZXR1cm4gImZpbGU6Ly8vIiArIGdldF9hYnNvbHV0
ZV9wYXRoKGZ1bGxfcGF0aCkKLSAgICByZXR1cm4gImZpbGU6Ly8iICsgZ2V0X2Fic29sdXRlX3Bh
dGgoZnVsbF9wYXRoKQotCi0KLWRlZiBnZXRfYWJzb2x1dGVfcGF0aChwYXRoKToKLSAgICAiIiJS
ZXR1cm5zIGFuIGFic29sdXRlIFVOSVggcGF0aC4iIiIKLSAgICByZXR1cm4gX3dpbl9wYXRoX3Rv
X3VuaXgob3MucGF0aC5hYnNwYXRoKHBhdGgpKQotCi0KLWRlZiBtYXliZV9tYWtlX2RpcmVjdG9y
eSgqcGF0aCk6Ci0gICAgIiIiQ3JlYXRlcyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpZiBpdCBk
b2Vzbid0IGFscmVhZHkgZXhpc3QuIiIiCi0gICAgdHJ5OgotICAgICAgICBvcy5tYWtlZGlycyhv
cy5wYXRoLmpvaW4oKnBhdGgpKQotICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICBpZiBl
LmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgIHJhaXNlCi0KLQotZGVmIHBhdGhf
ZnJvbV9iYXNlKCpjb21wcyk6Ci0gICAgIiIiUmV0dXJucyBhbiBhYnNvbHV0ZSBmaWxlbmFtZSBm
cm9tIGEgc2V0IG9mIGNvbXBvbmVudHMgc3BlY2lmaWVkCi0gICAgcmVsYXRpdmUgdG8gdGhlIHRv
cCBvZiB0aGUgc291cmNlIHRyZWUuIElmIHRoZSBwYXRoIGRvZXMgbm90IGV4aXN0LAotICAgIHRo
ZSBleGNlcHRpb24gUGF0aE5vdEZvdW5kIGlzIHJhaXNlZC4iIiIKLSAgICBnbG9iYWwgX2Jhc2Vk
aXIKLSAgICBpZiBfYmFzZWRpciA9PSBOb25lOgotICAgICAgICAjIFdlIGNvbXB1dGUgdGhlIHRv
cCBvZiB0aGUgc291cmNlIHRyZWUgYnkgZmluZGluZyB0aGUgYWJzb2x1dGUKLSAgICAgICAgIyBw
YXRoIG9mIHRoaXMgc291cmNlIGZpbGUsIGFuZCB0aGVuIGNsaW1iaW5nIHVwIHRocmVlIGRpcmVj
dG9yaWVzCi0gICAgICAgICMgYXMgZ2l2ZW4gaW4gc3VicGF0aC4gSWYgd2UgbW92ZSB0aGlzIGZp
bGUsIHN1YnBhdGggbmVlZHMgdG8gYmUKLSAgICAgICAgIyB1cGRhdGVkLgotICAgICAgICBwYXRo
ID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKQotICAgICAgICBzdWJwYXRoID0gb3MucGF0aC5q
b2luKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnKQotICAgICAgICBfYmFzZWRpciA9IHBhdGhbOnBh
dGguaW5kZXgoc3VicGF0aCldCi0gICAgcGF0aCA9IG9zLnBhdGguam9pbihfYmFzZWRpciwgKmNv
bXBzKQotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICAgICAgcmFpc2UgUGF0
aE5vdEZvdW5kKCdjb3VsZCBub3QgZmluZCAlcycgJSAocGF0aCkpCi0gICAgcmV0dXJuIHBhdGgK
LQotCi1kZWYgcmVtb3ZlX2RpcmVjdG9yeSgqcGF0aCk6Ci0gICAgIiIiUmVjdXJzaXZlbHkgcmVt
b3ZlcyBhIGRpcmVjdG9yeSwgZXZlbiBpZiBpdCdzIG1hcmtlZCByZWFkLW9ubHkuCi0KLSAgICBS
ZW1vdmUgdGhlIGRpcmVjdG9yeSBsb2NhdGVkIGF0ICpwYXRoLCBpZiBpdCBleGlzdHMuCi0KLSAg
ICBzaHV0aWwucm10cmVlKCkgZG9lc24ndCB3b3JrIG9uIFdpbmRvd3MgaWYgYW55IG9mIHRoZSBm
aWxlcyBvciBkaXJlY3RvcmllcwotICAgIGFyZSByZWFkLW9ubHksIHdoaWNoIHN2biByZXBvc2l0
b3JpZXMgYW5kIHNvbWUgLnN2biBmaWxlcyBhcmUuICBXZSBuZWVkIHRvCi0gICAgYmUgYWJsZSB0
byBmb3JjZSB0aGUgZmlsZXMgdG8gYmUgd3JpdGFibGUgKGkuZS4sIGRlbGV0YWJsZSkgYXMgd2Ug
dHJhdmVyc2UKLSAgICB0aGUgdHJlZS4KLQotICAgIEV2ZW4gd2l0aCBhbGwgdGhpcywgV2luZG93
cyBzdGlsbCBzb21ldGltZXMgZmFpbHMgdG8gZGVsZXRlIGEgZmlsZSwgY2l0aW5nCi0gICAgYSBw
ZXJtaXNzaW9uIGVycm9yIChtYXliZSBzb21ldGhpbmcgdG8gZG8gd2l0aCBhbnRpdmlydXMgc2Nh
bnMgb3IgZGlzawotICAgIGluZGV4aW5nKS4gIFRoZSBiZXN0IHN1Z2dlc3Rpb24gYW55IG9mIHRo
ZSB1c2VyIGZvcnVtcyBoYWQgd2FzIHRvIHdhaXQgYQotICAgIGJpdCBhbmQgdHJ5IGFnYWluLCBz
byB3ZSBkbyB0aGF0IHRvby4gIEl0J3MgaGFuZC13YXZpbmcsIGJ1dCBzb21ldGltZXMgaXQKLSAg
ICB3b3Jrcy4gOi8KLSAgICAiIiIKLSAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oKnBhdGgp
Ci0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVfcGF0aCk6Ci0gICAgICAgIHJldHVybgot
Ci0gICAgd2luMzIgPSBGYWxzZQotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAg
ICAgICB3aW4zMiA9IFRydWUKLSAgICAgICAgIyBTb21lIHBlb3BsZSBkb24ndCBoYXZlIHRoZSBB
UElzIGluc3RhbGxlZC4gSW4gdGhhdCBjYXNlIHdlJ2xsIGRvCi0gICAgICAgICMgd2l0aG91dC4K
LSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2luMzJhcGkgPSBfX2ltcG9ydF9fKCd3aW4zMmFw
aScpCi0gICAgICAgICAgICB3aW4zMmNvbiA9IF9faW1wb3J0X18oJ3dpbjMyY29uJykKLSAgICAg
ICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgd2luMzIgPSBGYWxzZQotCi0gICAg
ICAgIGRlZiByZW1vdmVfd2l0aF9yZXRyeShybWZ1bmMsIHBhdGgpOgotICAgICAgICAgICAgb3Mu
Y2htb2QocGF0aCwgc3RhdC5TX0lXUklURSkKLSAgICAgICAgICAgIGlmIHdpbjMyOgotICAgICAg
ICAgICAgICAgIHdpbjMyYXBpLlNldEZpbGVBdHRyaWJ1dGVzKHBhdGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luMzJjb24uRklMRV9BVFRSSUJVVEVfTk9S
TUFMKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiBybWZ1bmMocGF0
aCkKLSAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yLCBlOgotICAgICAgICAgICAg
ICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFDQ0VTOgotICAgICAgICAgICAgICAgICAgICByYWlz
ZQotICAgICAgICAgICAgICAgIHByaW50ICdGYWlsZWQgdG8gZGVsZXRlICVzOiB0cnlpbmcgYWdh
aW4nICUgcmVwcihwYXRoKQotICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQotICAgICAg
ICAgICAgICAgIHJldHVybiBybWZ1bmMocGF0aCkKLSAgICBlbHNlOgotCi0gICAgICAgIGRlZiBy
ZW1vdmVfd2l0aF9yZXRyeShybWZ1bmMsIHBhdGgpOgotICAgICAgICAgICAgaWYgb3MucGF0aC5p
c2xpbmsocGF0aCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9zLnJlbW92ZShwYXRoKQotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gcm1mdW5jKHBhdGgpCi0KLSAg
ICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhmaWxlX3BhdGgsIHRvcGRvd249RmFs
c2UpOgotICAgICAgICAjIEZvciBQT1NJWDogIG1ha2luZyB0aGUgZGlyZWN0b3J5IHdyaXRhYmxl
IGd1YXJhbnRlZXMgcmVtb3ZhYmlsaXR5LgotICAgICAgICAjIFdpbmRvd3Mgd2lsbCBpZ25vcmUg
dGhlIG5vbi1yZWFkLW9ubHkgYml0cyBpbiB0aGUgY2htb2QgdmFsdWUuCi0gICAgICAgIG9zLmNo
bW9kKHJvb3QsIDA3NzApCi0gICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAg
cmVtb3ZlX3dpdGhfcmV0cnkob3MucmVtb3ZlLCBvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCi0g
ICAgICAgIGZvciBuYW1lIGluIGRpcnM6Ci0gICAgICAgICAgICByZW1vdmVfd2l0aF9yZXRyeShv
cy5ybWRpciwgb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQotCi0gICAgcmVtb3ZlX3dpdGhfcmV0
cnkob3Mucm1kaXIsIGZpbGVfcGF0aCkKLQotIwotIyBXcmFwcGVycyBhcm91bmQgcGxhdGZvcm1f
dXRpbHMKLSMKLQotCi1kZWYgcGxhdGZvcm1fbmFtZShwbGF0Zm9ybT1Ob25lKToKLSAgICAiIiJS
ZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBjaHJvbWl1bSBwbGF0Zm9ybSBuYW1lIGZvciB8cGxhdGZv
cm18LiBJZgotICAgICAgIHxwbGF0Zm9ybXwgaXMgTm9uZSwgcmV0dXJucyB0aGUgbmFtZSBvZiB0
aGUgY2hyb21pdW0gcGxhdGZvcm0gb24gdGhlCi0gICAgICAgY3VycmVudGx5IHJ1bm5pbmcgc3lz
dGVtLiBJZiB8cGxhdGZvcm18IGlzIG9mIHRoZSBmb3JtICdjaHJvbWl1bS0qJywKLSAgICAgICBp
dCBpcyByZXR1cm5lZCB1bmNoYW5nZWQsIG90aGVyd2lzZSAnY2hyb21pdW0tJyBpcyBwcmVwZW5k
ZWQuIiIiCi0gICAgaWYgcGxhdGZvcm0gPT0gTm9uZToKLSAgICAgICAgcmV0dXJuIHBsYXRmb3Jt
X3V0aWxzLnBsYXRmb3JtX25hbWUoKQotICAgIGlmIG5vdCBwbGF0Zm9ybS5zdGFydHN3aXRoKCdj
aHJvbWl1bS0nKToKLSAgICAgICAgcGxhdGZvcm0gPSAiY2hyb21pdW0tIiArIHBsYXRmb3JtCi0g
ICAgcmV0dXJuIHBsYXRmb3JtCi0KLQotZGVmIHBsYXRmb3JtX3ZlcnNpb24oKToKLSAgICByZXR1
cm4gcGxhdGZvcm1fdXRpbHMucGxhdGZvcm1fdmVyc2lvbigpCi0KLQotZGVmIGxpZ2h0dHBkX2V4
ZWN1dGFibGVfcGF0aCgpOgotICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5saWdodHRwZF9leGVj
dXRhYmxlX3BhdGgoKQotCi0KLWRlZiBsaWdodHRwZF9tb2R1bGVfcGF0aCgpOgotICAgIHJldHVy
biBwbGF0Zm9ybV91dGlscy5saWdodHRwZF9tb2R1bGVfcGF0aCgpCi0KLQotZGVmIGxpZ2h0dHBk
X3BocF9wYXRoKCk6Ci0gICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLmxpZ2h0dHBkX3BocF9wYXRo
KCkKLQotCi1kZWYgd2RpZmZfcGF0aCgpOgotICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy53ZGlm
Zl9wYXRoKCkKLQotCi1kZWYgdGVzdF9zaGVsbF9wYXRoKHRhcmdldCk6Ci0gICAgcmV0dXJuIHBs
YXRmb3JtX3V0aWxzLnRlc3Rfc2hlbGxfcGF0aCh0YXJnZXQpCi0KLQotZGVmIGltYWdlX2RpZmZf
cGF0aCh0YXJnZXQpOgotICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5pbWFnZV9kaWZmX3BhdGgo
dGFyZ2V0KQotCi0KLWRlZiBsYXlvdXRfdGVzdF9oZWxwZXJfcGF0aCh0YXJnZXQpOgotICAgIHJl
dHVybiBwbGF0Zm9ybV91dGlscy5sYXlvdXRfdGVzdF9oZWxwZXJfcGF0aCh0YXJnZXQpCi0KLQot
ZGVmIGZ1enp5X21hdGNoX3BhdGgoKToKLSAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMuZnV6enlf
bWF0Y2hfcGF0aCgpCi0KLQotZGVmIHNodXRfZG93bl9odHRwX3NlcnZlcihzZXJ2ZXJfcGlkKToK
LSAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMuc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9w
aWQpCi0KLQotZGVmIGtpbGxfYWxsX3Rlc3Rfc2hlbGxzKCk6Ci0gICAgcGxhdGZvcm1fdXRpbHMu
a2lsbF9hbGxfdGVzdF9zaGVsbHMoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHMucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9w
bGF0Zm9ybV91dGlscy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDllN2I0Yi4u
MDAwMDAwMAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlscy5weQorKysgL2Rldi9udWxsCkBAIC0xLDUwICsw
LDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIENo
cm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0j
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIg
dGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJQ
bGF0Zm9ybS1zcGVjaWZpYyB1dGlsaXRpZXMgYW5kIHBzZXVkby1jb25zdGFudHMKLQotQW55IGZ1
bmN0aW9ucyB3aG9zZSBpbXBsZW1lbnRhdGlvbnMgb3IgdmFsdWVzIGRpZmZlciBmcm9tIG9uZSBw
bGF0Zm9ybSB0bwotYW5vdGhlciBzaG91bGQgYmUgZGVmaW5lZCBpbiB0aGVpciByZXNwZWN0aXZl
IHBsYXRmb3JtX3V0aWxzXzxwbGF0Zm9ybT4ucHkKLW1vZHVsZXMuIFRoZSBhcHByb3ByaWF0ZSBv
bmUgb2YgdGhvc2Ugd2lsbCBiZSBpbXBvcnRlZCBpbnRvIHRoaXMgbW9kdWxlIHRvCi1wcm92aWRl
IGNhbGxlcnMgd2l0aCBhIGNvbW1vbiwgcGxhdGZvcm0taW5kZXBlbmRlbnQgaW50ZXJmYWNlLgot
Ci1UaGlzIGZpbGUgc2hvdWxkIG9ubHkgZXZlciBiZSBpbXBvcnRlZCBieSBsYXlvdXRfcGFja2Fn
ZS5wYXRoX3V0aWxzLgotIiIiCi0KLWltcG9ydCBzeXMKLQotIyBXZSBtYXkgbm90IHN1cHBvcnQg
dGhlIHZlcnNpb24gb2YgUHl0aG9uIHRoYXQgYSB1c2VyIGhhcyBpbnN0YWxsZWQgKEN5Z3dpbgot
IyBlc3BlY2lhbGx5IGhhcyBoYWQgcHJvYmxlbXMpLCBidXQgd2UnbGwgYWxsb3cgdGhlIHBsYXRm
b3JtIHV0aWxzIHRvIGJlCi0jIGluY2x1ZGVkIGluIGFueSBjYXNlIHNvIHdlIGRvbid0IGdldCBh
biBpbXBvcnQgZXJyb3IuCi1pZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToK
LSAgICBmcm9tIHBsYXRmb3JtX3V0aWxzX3dpbiBpbXBvcnQgKgotZWxpZiBzeXMucGxhdGZvcm0g
PT0gJ2Rhcndpbic6Ci0gICAgZnJvbSBwbGF0Zm9ybV91dGlsc19tYWMgaW1wb3J0ICoKLWVsaWYg
c3lzLnBsYXRmb3JtIGluICgnbGludXgnLCAnbGludXgyJywgJ2ZyZWVic2Q3JywgJ29wZW5ic2Q0
Jyk6Ci0gICAgZnJvbSBwbGF0Zm9ybV91dGlsc19saW51eCBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
cGxhdGZvcm1fdXRpbHNfbGludXgucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19saW51eC5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdiMjdjNy4uMDAwMDAwMAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91
dGlsc19saW51eC5weQorKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi0jIS91c3IvYmlu
L2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBt
ZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0j
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1l
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiVGhpcyBpcyB0aGUgTGludXgg
aW1wbGVtZW50YXRpb24gb2YgdGhlIGxheW91dF9wYWNrYWdlLnBsYXRmb3JtX3V0aWxzCi0gICBw
YWNrYWdlLiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBwYWNrYWdl
LiIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBzaWduYWwKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBv
cnQgc3lzCi1pbXBvcnQgbG9nZ2luZwotCi1pbXBvcnQgcGF0aF91dGlscwotaW1wb3J0IHBsYXRm
b3JtX3V0aWxzX3dpbgotCi0KLWRlZiBwbGF0Zm9ybV9uYW1lKCk6Ci0gICAgIiIiUmV0dXJucyB0
aGUgbmFtZSBvZiB0aGUgcGxhdGZvcm0gd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgb24uIiIiCi0g
ICAgcmV0dXJuICdjaHJvbWl1bS1saW51eCcgKyBwbGF0Zm9ybV92ZXJzaW9uKCkKLQotCi1kZWYg
cGxhdGZvcm1fdmVyc2lvbigpOgotICAgICIiIlJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5nIGZv
ciB0aGUgcGxhdGZvcm0sIGUuZy4gJy12aXN0YScgb3IKLSAgICAnLXNub3dsZW9wYXJkJy4gSWYg
dGhlIHBsYXRmb3JtIGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4KLSAgICBtaW5vciB2ZXJz
aW9ucywgaXQgcmV0dXJucyAnJy4iIiIKLSAgICByZXR1cm4gJycKLQotCi1kZWYgZ2V0X251bV9j
b3JlcygpOgotICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBjb3JlcyBvbiB0aGUgbWFjaGlu
ZS4gRm9yIGh5cGVydGhyZWFkZWQgbWFjaGluZXMsCi0gICAgdGhpcyB3aWxsIGJlIGRvdWJsZSB0
aGUgbnVtYmVyIG9mIGFjdHVhbCBwcm9jZXNzb3JzLiIiIgotICAgIG51bV9jb3JlcyA9IG9zLnN5
c2NvbmYoIlNDX05QUk9DRVNTT1JTX09OTE4iKQotICAgIGlmIGlzaW5zdGFuY2UobnVtX2NvcmVz
LCBpbnQpIGFuZCBudW1fY29yZXMgPiAwOgotICAgICAgICByZXR1cm4gbnVtX2NvcmVzCi0gICAg
cmV0dXJuIDEKLQotCi1kZWYgYmFzZWxpbmVfcGF0aChwbGF0Zm9ybT1Ob25lKToKLSAgICAiIiJS
ZXR1cm5zIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlIGZv
ciB0aGUKLSAgICBiYXNlbGluZXMgZm9yIHRoZSBzcGVjaWZpZWQgcGxhdGZvcm0gdmVyc2lvbi4g
SWYgfHBsYXRmb3JtfCBpcyBOb25lLAotICAgIHRoZW4gdGhlIHZlcnNpb24gY3VycmVudGx5IGlu
IHVzZSBpcyB1c2VkLiIiIgotICAgIGlmIHBsYXRmb3JtIGlzIE5vbmU6Ci0gICAgICAgIHBsYXRm
b3JtID0gcGxhdGZvcm1fbmFtZSgpCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jh
c2UoJ3dlYmtpdCcsICdkYXRhJywgJ2xheW91dF90ZXN0cycsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJywgcGxhdGZvcm0sICdMYXlvdXRUZXN0cycpCi0K
LQotZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtPU5vbmUpOgotICAgICIiIlJldHVy
bnMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBiYXNlbGluZXMvcmVzdWx0
cywgaW4KLSAgICBvcmRlciBvZiBwcmVmZXJlbmNlLiBQYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhl
IHRvcCBvZiB0aGUgc291cmNlIHRyZWUuIiIiCi0gICAgcmV0dXJuIFtiYXNlbGluZV9wYXRoKHBs
YXRmb3JtKSwKLSAgICAgICAgICAgIHBsYXRmb3JtX3V0aWxzX3dpbi5iYXNlbGluZV9wYXRoKCdj
aHJvbWl1bS13aW4nKSwKLSAgICAgICAgICAgIHBhdGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3Bh
dGgoJ3dpbicpLAotICAgICAgICAgICAgcGF0aF91dGlscy53ZWJraXRfYmFzZWxpbmVfcGF0aCgn
bWFjJyldCi0KLQotZGVmIGFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5z
IHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBhY2hlIiIiCi0gICAgcGF0aCA9IG9zLnBh
dGguam9pbigiL3VzciIsICJzYmluIiwgImFwYWNoZTIiKQotICAgIGlmIG9zLnBhdGguZXhpc3Rz
KHBhdGgpOgotICAgICAgICByZXR1cm4gcGF0aAotICAgIHByaW50ICJVbmFibGUgdG8gZmluZSBB
cGFjaGUgZXhlY3V0YWJsZSAlcyIgJSBwYXRoCi0gICAgX21pc3NpbmdfYXBhY2hlKCkKLQotCi1k
ZWYgYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRv
IEFwYWNoZSBjb25maWcgZmlsZSIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9i
YXNlKCJ0aGlyZF9wYXJ0eSIsICJXZWJLaXQiLCAiTGF5b3V0VGVzdHMiLAotICAgICAgICAiaHR0
cCIsICJjb25mIiwgImFwYWNoZTItZGViaWFuLWh0dHBkLmNvbmYiKQotCi0KLWRlZiBsaWdodHRw
ZF9leGVjdXRhYmxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGgg
dG8gc3RhcnQgTGlnSFRUUGQiIiIKLSAgICBiaW5wYXRoID0gIi91c3Ivc2Jpbi9saWdodHRwZCIK
LSAgICBpZiBvcy5wYXRoLmV4aXN0cyhiaW5wYXRoKToKLSAgICAgICAgcmV0dXJuIGJpbnBhdGgK
LSAgICBwcmludCAiVW5hYmxlIHRvIGZpbmQgTGlnSFRUUGQgZXhlY3V0YWJsZSAlcyIgJSBiaW5w
YXRoCi0gICAgX21pc3NpbmdfbGlnaHR0cGQoKQotCi0KLWRlZiBsaWdodHRwZF9tb2R1bGVfcGF0
aCgpOgotICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxlIHBhdGggZm9yIExpZ0hUVFBk
IiIiCi0gICAgbW9kcGF0aCA9ICIvdXNyL2xpYi9saWdodHRwZCIKLSAgICBpZiBvcy5wYXRoLmV4
aXN0cyhtb2RwYXRoKToKLSAgICAgICAgcmV0dXJuIG1vZHBhdGgKLSAgICBwcmludCAiVW5hYmxl
IHRvIGZpbmQgTGlnSFRUUGQgbW9kdWxlcyAlcyIgJSBtb2RwYXRoCi0gICAgX21pc3NpbmdfbGln
aHR0cGQoKQotCi0KLWRlZiBsaWdodHRwZF9waHBfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhl
IFBIUCBleGVjdXRhYmxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCi0gICAgYmlucGF0aCA9ICIvdXNy
L2Jpbi9waHAtY2dpIgotICAgIGlmIG9zLnBhdGguZXhpc3RzKGJpbnBhdGgpOgotICAgICAgICBy
ZXR1cm4gYmlucGF0aAotICAgIHByaW50ICJVbmFibGUgdG8gZmluZCBQSFAgQ0dJIGV4ZWN1dGFi
bGUgJXMiICUgYmlucGF0aAotICAgIF9taXNzaW5nX2xpZ2h0dHBkKCkKLQotCi1kZWYgd2RpZmZf
cGF0aCgpOgotICAgICIiIlBhdGggdG8gdGhlIFdEaWZmIGV4ZWN1dGFibGUsIHdoaWNoIHdlIGFz
c3VtZSBpcyBhbHJlYWR5IGluc3RhbGxlZCBhbmQKLSAgICBpbiB0aGUgdXNlcidzICRQQVRILiIi
IgotICAgIHJldHVybiAnd2RpZmYnCi0KLQotZGVmIGltYWdlX2RpZmZfcGF0aCh0YXJnZXQpOgot
ICAgICIiIlBhdGggdG8gdGhlIGltYWdlX2RpZmYgYmluYXJ5LgotCi0gICAgQXJnczoKLSAgICAg
IHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2UpIiIiCi0gICAgcmV0
dXJuIF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cyh0YXJnZXQsICdpbWFnZV9kaWZmJykKLQotCi1k
ZWYgbGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgodGFyZ2V0KToKLSAgICAiIiJQYXRoIHRvIHRoZSBs
YXlvdXRfdGVzdCBoZWxwZXIgYmluYXJ5LCBpZiBuZWVkZWQsIGVtcHR5IG90aGVyd2lzZSIiIgot
ICAgIHJldHVybiAnJwotCi0KLWRlZiB0ZXN0X3NoZWxsX3BhdGgodGFyZ2V0KToKLSAgICAiIiJS
ZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRoIGZvciBvdXIgVGVzdFNoZWxs
LgotCi0gICAgQXJnczoKLSAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9y
IHJlbGVhc2UpICIiIgotICAgIGlmIHRhcmdldCBpbiAoJ0RlYnVnJywgJ1JlbGVhc2UnKToKLSAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgZGVidWdfcGF0aCA9IF9wYXRoX2Zyb21fYnVpbGRfcmVz
dWx0cygnRGVidWcnLCAndGVzdF9zaGVsbCcpCi0gICAgICAgICAgICByZWxlYXNlX3BhdGggPSBf
cGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHMoJ1JlbGVhc2UnLCAndGVzdF9zaGVsbCcpCi0KLSAgICAg
ICAgICAgIGRlYnVnX210aW1lID0gb3Muc3RhdChkZWJ1Z19wYXRoKS5zdF9tdGltZQotICAgICAg
ICAgICAgcmVsZWFzZV9tdGltZSA9IG9zLnN0YXQocmVsZWFzZV9wYXRoKS5zdF9tdGltZQotCi0g
ICAgICAgICAgICBpZiBkZWJ1Z19tdGltZSA+IHJlbGVhc2VfbXRpbWUgYW5kIHRhcmdldCA9PSAn
UmVsZWFzZScgb3IgXAotICAgICAgICAgICAgICAgcmVsZWFzZV9tdGltZSA+IGRlYnVnX210aW1l
IGFuZCB0YXJnZXQgPT0gJ0RlYnVnJzoKLSAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ1x4
MWJbMzFtV2FybmluZzogeW91IGFyZSBub3QgcnVubmluZyB0aGUgbW9zdCAnCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdyZWNlbnQgdGVzdF9zaGVsbCBiaW5hcnkuIFlvdSBuZWVkIHRv
IHBhc3MgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1kZWJ1ZyBvciBub3QgdG8g
c2VsZWN0IGJldHdlZW4gRGVidWcgYW5kICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J1JlbGVhc2UuXHgxYlswbScpCi0gICAgICAgICMgVGhpcyB3aWxsIGZhaWwgaWYgd2UgZG9uJ3Qg
aGF2ZSBib3RoIGEgZGVidWcgYW5kIHJlbGVhc2UgYmluYXJ5LgotICAgICAgICAjIFRoYXQncyBm
aW5lIGJlY2F1c2UsIGluIHRoaXMgY2FzZSwgd2UgbXVzdCBhbHJlYWR5IGJlIHJ1bm5pbmcgdGhl
Ci0gICAgICAgICMgbW9zdCB1cC10by1kYXRlIG9uZS4KLSAgICAgICAgZXhjZXB0IHBhdGhfdXRp
bHMuUGF0aE5vdEZvdW5kOgotICAgICAgICAgICAgcGFzcwotCi0gICAgcmV0dXJuIF9wYXRoX2Zy
b21fYnVpbGRfcmVzdWx0cyh0YXJnZXQsICd0ZXN0X3NoZWxsJykKLQotCi1kZWYgZnV6enlfbWF0
Y2hfcGF0aCgpOgotICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgZnV6enkgbWF0Y2hlciBi
aW5hcnkuIiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3Bh
cnR5JywgJ2Z1enp5bWF0Y2gnLCAnZnV6enltYXRjaCcpCi0KLQotZGVmIHNodXRfZG93bl9odHRw
X3NlcnZlcihzZXJ2ZXJfcGlkKToKLSAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBkIHdlYiBz
ZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1bGx5IHNodXQgZG93bi4KLQotICAgIEFyZ3M6Ci0g
ICAgICBzZXJ2ZXJfcGlkOiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCi0g
ICAgIiIiCi0gICAgIyBzZXJ2ZXJfcGlkIGlzIG5vdCBzZXQgd2hlbiAiaHR0cF9zZXJ2ZXIucHkg
c3RvcCIgaXMgcnVuIG1hbnVhbGx5LgotICAgIGlmIHNlcnZlcl9waWQgaXMgTm9uZToKLSAgICAg
ICAgIyBUaGlzIGlzbid0IGlkZWFsLCBzaW5jZSBpdCBjb3VsZCBjb25mbGljdCB3aXRoIHdlYiBz
ZXJ2ZXIgcHJvY2Vzc2VzCi0gICAgICAgICMgbm90IHN0YXJ0ZWQgYnkgaHR0cF9zZXJ2ZXIucHks
IGJ1dCBnb29kIGVub3VnaCBmb3Igbm93LgotICAgICAgICBraWxsX2FsbF9wcm9jZXNzKCdsaWdo
dHRwZCcpCi0gICAgICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ2FwYWNoZTInKQotICAgIGVsc2U6Ci0g
ICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLmtpbGwoc2VydmVyX3BpZCwgc2lnbmFsLlNJR1RF
Uk0pCi0gICAgICAgICAgICAjVE9ETyhtbW9zcykgTWF5YmUgdGhyb3cgaW4gYSBTSUdLSUxMIGp1
c3QgdG8gYmUgc3VyZT8KLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAjIFNv
bWV0aW1lcyB3ZSBnZXQgYSBiYWQgUElEIChlLmcuIGZyb20gYSBzdGFsZSBodHRwZC5waWQgZmls
ZSksCi0gICAgICAgICAgICAjIHNvIGlmIGtpbGwgZmFpbHMgb24gdGhlIGdpdmVuIFBJRCwganVz
dCB0cnkgdG8gJ2tpbGxhbGwnIHdlYgotICAgICAgICAgICAgIyBzZXJ2ZXJzLgotICAgICAgICAg
ICAgc2h1dF9kb3duX2h0dHBfc2VydmVyKE5vbmUpCi0KLQotZGVmIGtpbGxfcHJvY2VzcyhwaWQp
OgotICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KLQotICAgIEFyZ3M6Ci0gICAg
ICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCi0gICAgIiIiCi0gICAg
b3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQotCi0KLWRlZiBraWxsX2FsbF9wcm9jZXNzKHBy
b2Nlc3NfbmFtZSk6Ci0gICAgbnVsbCA9IG9wZW4ob3MuZGV2bnVsbCkKLSAgICBzdWJwcm9jZXNz
LmNhbGwoWydraWxsYWxsJywgJy1URVJNJywgJy11Jywgb3MuZ2V0ZW52KCdVU0VSJyksCi0gICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1udWxsKQotICAgIG51bGwuY2xv
c2UoKQotCi0KLWRlZiBraWxsX2FsbF90ZXN0X3NoZWxscygpOgotICAgICIiIktpbGxzIGFsbCBp
bnN0YW5jZXMgb2YgdGhlIHRlc3Rfc2hlbGwgYmluYXJ5IGN1cnJlbnRseSBydW5uaW5nLiIiIgot
ICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ3Rlc3Rfc2hlbGwnKQotCi0jCi0jIFByaXZhdGUgaGVscGVy
IGZ1bmN0aW9ucwotIwotCi0KLWRlZiBfbWlzc2luZ19saWdodHRwZCgpOgotICAgIHByaW50ICdQ
bGVhc2UgaW5zdGFsbCB1c2luZzogInN1ZG8gYXB0LWdldCBpbnN0YWxsIGxpZ2h0dHBkIHBocDUt
Y2dpIicKLSAgICBwcmludCAnRm9yIGNvbXBsZXRlIExpbnV4IGJ1aWxkIHJlcXVpcmVtZW50cywg
cGxlYXNlIHNlZTonCi0gICAgcHJpbnQgJ2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1
bS93aWtpL0xpbnV4QnVpbGRJbnN0cnVjdGlvbnMnCi0gICAgc3lzLmV4aXQoMSkKLQotCi1kZWYg
X21pc3NpbmdfYXBhY2hlKCk6Ci0gICAgcHJpbnQgKCdQbGVhc2UgaW5zdGFsbCB1c2luZzogInN1
ZG8gYXB0LWdldCBpbnN0YWxsIGFwYWNoZTIgJwotICAgICAgICAnbGliYXBhY2hlMi1tb2QtcGhw
NSInKQotICAgIHByaW50ICdGb3IgY29tcGxldGUgTGludXggYnVpbGQgcmVxdWlyZW1lbnRzLCBw
bGVhc2Ugc2VlOicKLSAgICBwcmludCAnaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVt
L3dpa2kvTGludXhCdWlsZEluc3RydWN0aW9ucycKLSAgICBzeXMuZXhpdCgxKQotCi0KLWRlZiBf
cGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHMoKnBhdGhpZXMpOgotICAgICMgRklYTUUoZGtlZ2VsKTog
dXNlIGxhdGVzdCBvciB3YXJuIGlmIG1vcmUgdGhhbiBvbmUgZm91bmQ/Ci0gICAgZm9yIGRpciBp
biBbInNjb25zYnVpbGQiLCAib3V0IiwgInhjb2RlYnVpbGQiXToKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoZGlyLCAqcGF0aGllcykK
LSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotICAgIHJhaXNlIHBhdGhfdXRpbHMu
UGF0aE5vdEZvdW5kKCJVbmFibGUgdG8gZmluZCAlcyBpbiBidWlsZCB0cmVlIiAlCi0gICAgICAg
IChvcy5wYXRoLmpvaW4oKnBhdGhpZXMpKSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX21h
Yy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3BsYXRmb3JtX3V0aWxzX21hYy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMWVhYTEwYy4uMDAwMDAwMAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19tYWMucHkKKysrIC9kZXYv
bnVsbApAQCAtMSwyMDEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdo
dCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4K
LSMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cwot
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLSIiIlRoaXMgaXMgdGhlIE1hYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGF5
b3V0X3BhY2thZ2UucGxhdGZvcm1fdXRpbHMKLSAgIHBhY2thZ2UuIFRoaXMgZmlsZSBzaG91bGQg
b25seSBiZSBpbXBvcnRlZCBieSB0aGF0IHBhY2thZ2UuIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0
IHBsYXRmb3JtCi1pbXBvcnQgc2lnbmFsCi1pbXBvcnQgc3VicHJvY2VzcwotCi1pbXBvcnQgcGF0
aF91dGlscwotCi0KLWRlZiBwbGF0Zm9ybV9uYW1lKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbmFt
ZSBvZiB0aGUgcGxhdGZvcm0gd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgb24uIiIiCi0gICAgIyBB
dCB0aGUgbW9tZW50IGFsbCBjaHJvbWl1bSBtYWMgcmVzdWx0cyBhcmUgdmVyc2lvbi1pbmRlcGVu
ZGVudC4gQXQgc29tZQotICAgICMgcG9pbnQgd2UgbWF5IG5lZWQgdG8gcmV0dXJuICdjaHJvbWl1
bS1tYWMnICsgUGxhdGZvcm1WZXJzaW9uKCkKLSAgICByZXR1cm4gJ2Nocm9taXVtLW1hYycKLQot
Ci1kZWYgcGxhdGZvcm1fdmVyc2lvbigpOgotICAgICIiIlJldHVybnMgdGhlIHZlcnNpb24gc3Ry
aW5nIGZvciB0aGUgcGxhdGZvcm0sIGUuZy4gJy12aXN0YScgb3IKLSAgICAnLXNub3dsZW9wYXJk
Jy4gSWYgdGhlIHBsYXRmb3JtIGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4KLSAgICBtaW5v
ciB2ZXJzaW9ucywgaXQgcmV0dXJucyAnJy4iIiIKLSAgICBvc192ZXJzaW9uX3N0cmluZyA9IHBs
YXRmb3JtLm1hY192ZXIoKVswXSAgIyBlLmcuICIxMC41LjYiCi0gICAgaWYgbm90IG9zX3ZlcnNp
b25fc3RyaW5nOgotICAgICAgICByZXR1cm4gJy1sZW9wYXJkJwotCi0gICAgcmVsZWFzZV92ZXJz
aW9uID0gaW50KG9zX3ZlcnNpb25fc3RyaW5nLnNwbGl0KCcuJylbMV0pCi0KLSAgICAjIHdlIGRv
bid0IHN1cHBvcnQgJ3RpZ2VyJyBvciBlYXJsaWVyIHJlbGVhc2VzCi0gICAgaWYgcmVsZWFzZV92
ZXJzaW9uID09IDU6Ci0gICAgICAgIHJldHVybiAnLWxlb3BhcmQnCi0gICAgZWxpZiByZWxlYXNl
X3ZlcnNpb24gPT0gNjoKLSAgICAgICAgcmV0dXJuICctc25vd2xlb3BhcmQnCi0KLSAgICByZXR1
cm4gJycKLQotCi1kZWYgZ2V0X251bV9jb3JlcygpOgotICAgICIiIlJldHVybnMgdGhlIG51bWJl
ciBvZiBjb3JlcyBvbiB0aGUgbWFjaGluZS4gRm9yIGh5cGVydGhyZWFkZWQgbWFjaGluZXMsCi0g
ICAgdGhpcyB3aWxsIGJlIGRvdWJsZSB0aGUgbnVtYmVyIG9mIGFjdHVhbCBwcm9jZXNzb3JzLiIi
IgotICAgIHJldHVybiBpbnQob3MucG9wZW4yKCJzeXNjdGwgLW4gaHcubmNwdSIpWzFdLnJlYWQo
KSkKLQotCi1kZWYgYmFzZWxpbmVfcGF0aChwbGF0Zm9ybT1Ob25lKToKLSAgICAiIiJSZXR1cm5z
IHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlIGZvciB0aGUK
LSAgICBiYXNlbGluZXMgZm9yIHRoZSBzcGVjaWZpZWQgcGxhdGZvcm0gdmVyc2lvbi4gSWYgfHBs
YXRmb3JtfCBpcyBOb25lLAotICAgIHRoZW4gdGhlIHZlcnNpb24gY3VycmVudGx5IGluIHVzZSBp
cyB1c2VkLiIiIgotICAgIGlmIHBsYXRmb3JtIGlzIE5vbmU6Ci0gICAgICAgIHBsYXRmb3JtID0g
cGxhdGZvcm1fbmFtZSgpCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3dl
YmtpdCcsICdkYXRhJywgJ2xheW91dF90ZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3BsYXRmb3JtJywgcGxhdGZvcm0sICdMYXlvdXRUZXN0cycpCi0KLSMgVE9E
TzogV2Ugc2hvdWxkIGFkZCBsZW9wYXJkIGFuZCBzbm93bGVvcGFyZCB0byB0aGUgbGlzdCBvZiBw
YXRocyB0byBjaGVjawotIyBvbmNlIHdlIHN0YXJ0IHJ1bm5pbmcgdGhlIHRlc3RzIGZyb20gc25v
d2xlb3BhcmQuCi0KLQotZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtPU5vbmUpOgot
ICAgICIiIlJldHVybnMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBiYXNl
bGluZXMvcmVzdWx0cywgaW4KLSAgICBvcmRlciBvZiBwcmVmZXJlbmNlLiBQYXRocyBhcmUgcmVs
YXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUuIiIiCi0gICAgcmV0dXJuIFtiYXNl
bGluZV9wYXRoKHBsYXRmb3JtKSwKLSAgICAgICAgICAgIHBhdGhfdXRpbHMud2Via2l0X2Jhc2Vs
aW5lX3BhdGgoJ21hYycgKyBwbGF0Zm9ybV92ZXJzaW9uKCkpLAotICAgICAgICAgICAgcGF0aF91
dGlscy53ZWJraXRfYmFzZWxpbmVfcGF0aCgnbWFjJyldCi0KLQotZGVmIHdkaWZmX3BhdGgoKToK
LSAgICAiIiJQYXRoIHRvIHRoZSBXRGlmZiBleGVjdXRhYmxlLCB3aGljaCB3ZSBhc3N1bWUgaXMg
YWxyZWFkeSBpbnN0YWxsZWQgYW5kCi0gICAgaW4gdGhlIHVzZXIncyAkUEFUSC4iIiIKLSAgICBy
ZXR1cm4gJ3dkaWZmJwotCi0KLWRlZiBpbWFnZV9kaWZmX3BhdGgodGFyZ2V0KToKLSAgICAiIiJQ
YXRoIHRvIHRoZSBpbWFnZV9kaWZmIGV4ZWN1dGFibGUKLQotICAgIEFyZ3M6Ci0gICAgICB0YXJn
ZXQ6IGJ1aWxkIHR5cGUgLSAnRGVidWcnLCdSZWxlYXNlJyxldGMuIiIiCi0gICAgcmV0dXJuIHBh
dGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3hjb2RlYnVpbGQnLCB0YXJnZXQsICdpbWFnZV9kaWZm
JykKLQotCi1kZWYgbGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgodGFyZ2V0KToKLSAgICAiIiJQYXRo
IHRvIHRoZSBsYXlvdXRfdGVzdF9oZWxwZXIgZXhlY3V0YWJsZSwgaWYgbmVlZGVkLCBlbXB0eSBv
dGhlcndpc2UKLQotICAgIEFyZ3M6Ci0gICAgICB0YXJnZXQ6IGJ1aWxkIHR5cGUgLSAnRGVidWcn
LCdSZWxlYXNlJyxldGMuIiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uo
J3hjb2RlYnVpbGQnLCB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2xheW91dF90ZXN0X2hlbHBlcicpCi0KLQotZGVmIHRlc3Rfc2hlbGxfcGF0aCh0YXJnZXQp
OgotICAgICIiIlBhdGggdG8gdGhlIHRlc3Rfc2hlbGwgZXhlY3V0YWJsZS4KLQotICAgIEFyZ3M6
Ci0gICAgICB0YXJnZXQ6IGJ1aWxkIHR5cGUgLSAnRGVidWcnLCdSZWxlYXNlJyxldGMuIiIiCi0g
ICAgIyBUT0RPKHBpbmtlcnRvbik6IG1ha2UgfHRhcmdldHwgaGFwcHkgd2l0aCBjYXNlLXNlbnNp
dGl2ZSBmaWxlIHN5c3RlbXMuCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uo
J3hjb2RlYnVpbGQnLCB0YXJnZXQsICdUZXN0U2hlbGwuYXBwJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnQ29udGVudHMnLCAnTWFjT1MnLCAnVGVzdFNoZWxsJykKLQot
Ci1kZWYgYXBhY2hlX2V4ZWN1dGFibGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIGV4ZWN1
dGFibGUgcGF0aCB0byBzdGFydCBBcGFjaGUiIiIKLSAgICByZXR1cm4gb3MucGF0aC5qb2luKCIv
dXNyIiwgInNiaW4iLCAiaHR0cGQiKQotCi0KLWRlZiBhcGFjaGVfY29uZmlnX2ZpbGVfcGF0aCgp
OgotICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8gQXBhY2hlIGNvbmZpZyBmaWxlIiIiCi0gICAg
cmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoInRoaXJkX3BhcnR5IiwgIldlYktpdCIs
ICJMYXlvdXRUZXN0cyIsCi0gICAgICAgICJodHRwIiwgImNvbmYiLCAiYXBhY2hlMi1odHRwZC5j
b25mIikKLQotCi1kZWYgbGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCk6Ci0gICAgIiIiUmV0dXJu
cyB0aGUgZXhlY3V0YWJsZSBwYXRoIHRvIHN0YXJ0IExpZ0hUVFBkIiIiCi0gICAgcmV0dXJuIHBh
dGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ21hYycs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpbicsICdsaWdodHRwZCcp
Ci0KLQotZGVmIGxpZ2h0dHBkX21vZHVsZV9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbGli
cmFyeSBtb2R1bGUgcGF0aCBmb3IgTGlnSFRUUGQiIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5w
YXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQnLCAnbWFjJywgJ2xpYicpCi0K
LQotZGVmIGxpZ2h0dHBkX3BocF9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgUEhQIGV4ZWN1
dGFibGUgcGF0aCBmb3IgTGlnSFRUUGQiIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zy
b21fYmFzZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQnLCAnbWFjJywgJ2JpbicsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BocC1jZ2knKQotCi0KLWRlZiBzaHV0X2Rv
d25faHR0cF9zZXJ2ZXIoc2VydmVyX3BpZCk6Ci0gICAgIiIiU2h1dCBkb3duIHRoZSBsaWdodHRw
ZCB3ZWIgc2VydmVyLiBCbG9ja3MgdW50aWwgaXQncyBmdWxseSBzaHV0IGRvd24uCi0KLSAgICAg
IEFyZ3M6Ci0gICAgICAgIHNlcnZlcl9waWQ6IFRoZSBwcm9jZXNzIElEIG9mIHRoZSBydW5uaW5n
IHNlcnZlci4KLSAgICAiIiIKLSAgICAjIHNlcnZlcl9waWQgaXMgbm90IHNldCB3aGVuICJodHRw
X3NlcnZlci5weSBzdG9wIiBpcyBydW4gbWFudWFsbHkuCi0gICAgaWYgc2VydmVyX3BpZCBpcyBO
b25lOgotICAgICAgICAjIFRPRE8obW1vc3MpIFRoaXMgaXNuJ3QgaWRlYWwsIHNpbmNlIGl0IGNv
dWxkIGNvbmZsaWN0IHdpdGggbGlnaHR0cGQKLSAgICAgICAgIyBwcm9jZXNzZXMgbm90IHN0YXJ0
ZWQgYnkgaHR0cF9zZXJ2ZXIucHksIGJ1dCBnb29kIGVub3VnaCBmb3Igbm93LgotICAgICAgICBr
aWxsX2FsbF9wcm9jZXNzKCdsaWdodHRwZCcpCi0gICAgICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ2h0
dHBkJykKLSAgICBlbHNlOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5raWxsKHNlcnZl
cl9waWQsIHNpZ25hbC5TSUdURVJNKQotICAgICAgICAgICAgIyBUT0RPKG1tb3NzKSBNYXliZSB0
aHJvdyBpbiBhIFNJR0tJTEwganVzdCB0byBiZSBzdXJlPwotICAgICAgICBleGNlcHQgT1NFcnJv
cjoKLSAgICAgICAgICAgICMgU29tZXRpbWVzIHdlIGdldCBhIGJhZCBQSUQgKGUuZy4gZnJvbSBh
IHN0YWxlIGh0dHBkLnBpZCBmaWxlKSwKLSAgICAgICAgICAgICMgc28gaWYga2lsbCBmYWlscyBv
biB0aGUgZ2l2ZW4gUElELCBqdXN0IHRyeSB0byAna2lsbGFsbCcgd2ViCi0gICAgICAgICAgICAj
IHNlcnZlcnMuCi0gICAgICAgICAgICBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIoTm9uZSkKLQotCi1k
ZWYga2lsbF9wcm9jZXNzKHBpZCk6Ci0gICAgIiIiRm9yY2VmdWxseSBraWxsIHRoZSBwcm9jZXNz
LgotCi0gICAgQXJnczoKLSAgICAgIHBpZDogVGhlIGlkIG9mIHRoZSBwcm9jZXNzIHRvIGJlIGtp
bGxlZC4KLSAgICAiIiIKLSAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0tJTEwpCi0KLQotZGVm
IGtpbGxfYWxsX3Byb2Nlc3MocHJvY2Vzc19uYW1lKToKLSAgICAjIE9uIE1hYyBPUyBYIDEwLjYs
IGtpbGxhbGwgaGFzIGEgbmV3IGNvbnN0cmFpbnQ6IC1TSUdOQUxOQU1FIG9yCi0gICAgIyAtU0lH
TkFMTlVNQkVSIG11c3QgY29tZSBmaXJzdC4gIEV4YW1wbGUgcHJvYmxlbToKLSAgICAjICAgJCBr
aWxsYWxsIC11ICRVU0VSIC1URVJNIGxpZ2h0dHBkCi0gICAgIyAgIGtpbGxhbGw6IGlsbGVnYWwg
b3B0aW9uIC0tIFQKLSAgICAjIFVzZSBvZiB0aGUgZWFybGllciAtVEVSTSBwbGFjZW1lbnQgaXMg
anVzdCBmaW5lIG9uIDEwLjUuCi0gICAgbnVsbCA9IG9wZW4ob3MuZGV2bnVsbCkKLSAgICBzdWJw
cm9jZXNzLmNhbGwoWydraWxsYWxsJywgJy1URVJNJywgJy11Jywgb3MuZ2V0ZW52KCdVU0VSJyks
Ci0gICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX25hbWVdLCBzdGRlcnI9bnVsbCkKLSAgICBu
dWxsLmNsb3NlKCkKLQotCi1kZWYga2lsbF9hbGxfdGVzdF9zaGVsbHMoKToKLSAgICAiIiJLaWxs
cyBhbGwgaW5zdGFuY2VzIG9mIHRoZSB0ZXN0X3NoZWxsIGJpbmFyeSBjdXJyZW50bHkgcnVubmlu
Zy4iIiIKLSAgICBraWxsX2FsbF9wcm9jZXNzKCdUZXN0U2hlbGwnKQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxh
dGZvcm1fdXRpbHNfd2luLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfd2luLnB5CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzY2JiZWMzLi4wMDAwMDAwCi0tLSBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX3dp
bi5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRo
b24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0j
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMg
ZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiVGhpcyBpcyB0aGUgTGludXggaW1wbGVtZW50
YXRpb24gb2YgdGhlIGxheW91dF9wYWNrYWdlLnBsYXRmb3JtX3V0aWxzCi0gICBwYWNrYWdlLiBU
aGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBwYWNrYWdlLiIiIgotCi1p
bXBvcnQgb3MKLWltcG9ydCBwYXRoX3V0aWxzCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5
cwotCi0KLWRlZiBwbGF0Zm9ybV9uYW1lKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbmFtZSBvZiB0
aGUgcGxhdGZvcm0gd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgb24uIiIiCi0gICAgIyBXZSdyZSBu
b3QgcmVhZHkgZm9yIHZlcnNpb24tc3BlY2lmaWMgcmVzdWx0cyB5ZXQuIFdoZW4gd2UgdW5jb21t
ZW50Ci0gICAgIyB0aGlzLCB3ZSBhbHNvIG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBCYXNlbGluZVNl
YXJjaFBhdGgoKQotICAgIHJldHVybiAnY2hyb21pdW0td2luJyArIHBsYXRmb3JtX3ZlcnNpb24o
KQotCi0KLWRlZiBwbGF0Zm9ybV92ZXJzaW9uKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgdmVyc2lv
biBzdHJpbmcgZm9yIHRoZSBwbGF0Zm9ybSwgZS5nLiAnLXZpc3RhJyBvcgotICAgICctc25vd2xl
b3BhcmQnLiBJZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbgotICAg
IG1pbm9yIHZlcnNpb25zLCBpdCByZXR1cm5zICcnLiIiIgotICAgIHdpbnZlciA9IHN5cy5nZXR3
aW5kb3dzdmVyc2lvbigpCi0gICAgaWYgd2ludmVyWzBdID09IDYgYW5kICh3aW52ZXJbMV0gPT0g
MSk6Ci0gICAgICAgIHJldHVybiAnLTcnCi0gICAgaWYgd2ludmVyWzBdID09IDYgYW5kICh3aW52
ZXJbMV0gPT0gMCk6Ci0gICAgICAgIHJldHVybiAnLXZpc3RhJwotICAgIGlmIHdpbnZlclswXSA9
PSA1IGFuZCAod2ludmVyWzFdID09IDEgb3Igd2ludmVyWzFdID09IDIpOgotICAgICAgICByZXR1
cm4gJy14cCcKLSAgICByZXR1cm4gJycKLQotCi1kZWYgZ2V0X251bV9jb3JlcygpOgotICAgICIi
IlJldHVybnMgdGhlIG51bWJlciBvZiBjb3JlcyBvbiB0aGUgbWFjaGluZS4gRm9yIGh5cGVydGhy
ZWFkZWQgbWFjaGluZXMsCi0gICAgdGhpcyB3aWxsIGJlIGRvdWJsZSB0aGUgbnVtYmVyIG9mIGFj
dHVhbCBwcm9jZXNzb3JzLiIiIgotICAgIHJldHVybiBpbnQob3MuZW52aXJvbi5nZXQoJ05VTUJF
Ul9PRl9QUk9DRVNTT1JTJywgMSkpCi0KLQotZGVmIGJhc2VsaW5lX3BhdGgocGxhdGZvcm09Tm9u
ZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBz
b3VyY2UgdHJlZSBmb3IgdGhlCi0gICAgYmFzZWxpbmVzIGZvciB0aGUgc3BlY2lmaWVkIHBsYXRm
b3JtIHZlcnNpb24uIElmIHxwbGF0Zm9ybXwgaXMgTm9uZSwKLSAgICB0aGVuIHRoZSB2ZXJzaW9u
IGN1cnJlbnRseSBpbiB1c2UgaXMgdXNlZC4iIiIKLSAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgot
ICAgICAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUoKQotICAgIHJldHVybiBwYXRoX3V0aWxz
LnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICdsYXlvdXRfdGVzdHMnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybScsIHBsYXRmb3JtLCAnTGF5
b3V0VGVzdHMnKQotCi0KLWRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybT1Ob25lKToK
LSAgICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgYmFz
ZWxpbmVzL3Jlc3VsdHMsIGluCi0gICAgb3JkZXIgb2YgcHJlZmVyZW5jZS4gUGF0aHMgYXJlIHJl
bGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLiIiIgotICAgIGRpcnMgPSBbXQot
ICAgIGlmIHBsYXRmb3JtIGlzIE5vbmU6Ci0gICAgICAgIHBsYXRmb3JtID0gcGxhdGZvcm1fbmFt
ZSgpCi0KLSAgICBpZiBwbGF0Zm9ybSA9PSAnY2hyb21pdW0td2luLXhwJzoKLSAgICAgICAgZGly
cy5hcHBlbmQoYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkpCi0gICAgaWYgcGxhdGZvcm0gaW4gKCdj
aHJvbWl1bS13aW4teHAnLCAnY2hyb21pdW0td2luLXZpc3RhJyk6Ci0gICAgICAgIGRpcnMuYXBw
ZW5kKGJhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbi12aXN0YScpKQotICAgIGRpcnMuYXBwZW5k
KGJhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbicpKQotICAgIGRpcnMuYXBwZW5kKHBhdGhfdXRp
bHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3dpbicpKQotICAgIGRpcnMuYXBwZW5kKHBhdGhfdXRp
bHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpKQotICAgIHJldHVybiBkaXJzCi0KLQotZGVm
IHdkaWZmX3BhdGgoKToKLSAgICAiIiJQYXRoIHRvIHRoZSBXRGlmZiBleGVjdXRhYmxlLCB3aG9z
ZSBiaW5hcnkgaXMgY2hlY2tlZCBpbiBvbiBXaW4iIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5w
YXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2JpbicsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dkaWZmLmV4ZScpCi0KLQotZGVmIGltYWdlX2Rp
ZmZfcGF0aCh0YXJnZXQpOgotICAgICIiIlJldHVybiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYmlu
YXJ5IHBhdGggZm9yIHRoZSBpbWFnZSBjb21wYXJlIHV0aWwuCi0gICAgICAgICBXZSB1c2UgdGhp
cyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBiaW5hcnkgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24KLSAg
ICAgICAgIGluIHBhdGhfdXRpbHMuCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBCdWlsZCB0
YXJnZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkKLSAgICAiIiIKLSAgICByZXR1cm4gX2ZpbmRf
YmluYXJ5KHRhcmdldCwgJ2ltYWdlX2RpZmYuZXhlJykKLQotCi1kZWYgbGF5b3V0X3Rlc3RfaGVs
cGVyX3BhdGgodGFyZ2V0KToKLSAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJp
bmFyeSBwYXRoIGZvciB0aGUgbGF5b3V0IHRlc3QgaGVscGVyLgotICAgIFdlIHVzZSB0aGlzIGlm
IHdlIGNhbid0IGZpbmQgdGhlIGJpbmFyeSBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbgotICAgIGlu
IHBhdGhfdXRpbHMuCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9k
ZSAoZGVidWcgb3IgcmVsZWFzZSkKLSAgICAiIiIKLSAgICByZXR1cm4gX2ZpbmRfYmluYXJ5KHRh
cmdldCwgJ2xheW91dF90ZXN0X2hlbHBlci5leGUnKQotCi0KLWRlZiB0ZXN0X3NoZWxsX3BhdGgo
dGFyZ2V0KToKLSAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRo
IGZvciBvdXIgVGVzdFNoZWxsLgotICAgICAgIFdlIHVzZSB0aGlzIGlmIHdlIGNhbid0IGZpbmQg
dGhlIGJpbmFyeSBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbgotICAgICAgIGluIHBhdGhfdXRpbHMu
Ci0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9kZSAoZGVidWcgb3Ig
cmVsZWFzZSkKLSAgICAiIiIKLSAgICByZXR1cm4gX2ZpbmRfYmluYXJ5KHRhcmdldCwgJ3Rlc3Rf
c2hlbGwuZXhlJykKLQotCi1kZWYgYXBhY2hlX2V4ZWN1dGFibGVfcGF0aCgpOgotICAgICIiIlJl
dHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBBcGFjaGUiIiIKLSAgICBwYXRoID0g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgInVzciIs
ICJzYmluIikKLSAgICAjIERvbid0IHJldHVybiBodHRwZC5leGUgc2luY2Ugd2Ugd2FudCB0byB1
c2UgdGhpcyBmcm9tIGN5Z3dpbi4KLSAgICByZXR1cm4gb3MucGF0aC5qb2luKHBhdGgsICJodHRw
ZCIpCi0KLQotZGVmIGFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0
aGUgcGF0aCB0byBBcGFjaGUgY29uZmlnIGZpbGUiIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5w
YXRoX2Zyb21fYmFzZSgidGhpcmRfcGFydHkiLCAiV2ViS2l0IiwgIkxheW91dFRlc3RzIiwKLSAg
ICAgICAgImh0dHAiLCAiY29uZiIsICJjeWd3aW4taHR0cGQuY29uZiIpCi0KLQotZGVmIGxpZ2h0
dHBkX2V4ZWN1dGFibGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0
aCB0byBzdGFydCBMaWdIVFRQZCIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9i
YXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICd3aW4nLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdMaWdodFRQRC5leGUnKQotCi0KLWRlZiBsaWdodHRwZF9tb2R1
bGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxlIHBhdGggZm9yIExp
Z0hUVFBkIiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3Bh
cnR5JywgJ2xpZ2h0dHBkJywgJ3dpbicsICdsaWInKQotCi0KLWRlZiBsaWdodHRwZF9waHBfcGF0
aCgpOgotICAgICIiIlJldHVybnMgdGhlIFBIUCBleGVjdXRhYmxlIHBhdGggZm9yIExpZ0hUVFBk
IiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5Jywg
J2xpZ2h0dHBkJywgJ3dpbicsICdwaHA1JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAncGhwLWNnaS5leGUnKQotCi0KLWRlZiBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2Vy
dmVyX3BpZCk6Ci0gICAgIiIiU2h1dCBkb3duIHRoZSBsaWdodHRwZCB3ZWIgc2VydmVyLiBCbG9j
a3MgdW50aWwgaXQncyBmdWxseSBzaHV0IGRvd24uCi0KLSAgICBBcmdzOgotICAgICAgc2VydmVy
X3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5pbmcgc2VydmVyLgotICAgICAgICAgIFVu
dXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZXRob2QuCi0gICAgIiIiCi0gICAg
c3VicHJvY2Vzcy5Qb3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvaW0nLCAnTGlnaHRUUEQu
ZXhlJyksCi0gICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAg
ICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCi0gICAgc3Vi
cHJvY2Vzcy5Qb3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvaW0nLCAnaHR0cGQuZXhlJyks
Ci0gICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAg
ICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCi0KLQotZGVmIGtpbGxf
cHJvY2VzcyhwaWQpOgotICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KLQotICAg
IEFyZ3M6Ci0gICAgICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCi0g
ICAgIiIiCi0gICAgc3VicHJvY2Vzcy5jYWxsKCgndGFza2tpbGwuZXhlJywgJy9mJywgJy9waWQn
LCBzdHIocGlkKSksCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUs
Ci0gICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0KLQotZGVmIGtp
bGxfYWxsX3Rlc3Rfc2hlbGxzKHNlbGYpOgotICAgICIiIktpbGxzIGFsbCBpbnN0YW5jZXMgb2Yg
dGhlIHRlc3Rfc2hlbGwgYmluYXJ5IGN1cnJlbnRseSBydW5uaW5nLiIiIgotICAgIHN1YnByb2Nl
c3MuUG9wZW4oKCd0YXNra2lsbC5leGUnLCAnL2YnLCAnL2ltJywgJ3Rlc3Rfc2hlbGwuZXhlJyks
Ci0gICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAg
ICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCi0KLSMKLSMgUHJpdmF0
ZSBoZWxwZXIgZnVuY3Rpb25zLgotIwotCi0KLWRlZiBfZmluZF9iaW5hcnkodGFyZ2V0LCBiaW5h
cnkpOgotICAgICIiIk9uIFdpbmRvd3MsIHdlIGxvb2sgZm9yIGJpbmFyaWVzIHRoYXQgd2UgY29t
cGlsZSBpbiBwb3RlbnRpYWxseQotICAgIHR3byBwbGFjZXM6IHNyYy93ZWJraXQvJHRhcmdldCAo
cHJlZmVyYWJseSwgd2hpY2ggd2UgZ2V0IGlmIHdlCi0gICAgYnVpbHQgdXNpbmcgd2Via2l0X2ds
dWUuZ3lwKSwgb3Igc3JjL2Nocm9tZS8kdGFyZ2V0IChpZiBjb21waWxlZCBzb21lCi0gICAgb3Ro
ZXIgd2F5KS4iIiIKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCd3ZWJraXQnLCB0YXJnZXQsIGJpbmFyeSkKLSAgICBleGNlcHQgcGF0aF91dGlscy5Q
YXRoTm90Rm91bmQ6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBwYXRoX3V0aWxz
LnBhdGhfZnJvbV9iYXNlKCdjaHJvbWUnLCB0YXJnZXQsIGJpbmFyeSkKLSAgICAgICAgZXhjZXB0
IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgotICAgICAgICAgICAgcmV0dXJuIHBhdGhfdXRpbHMu
cGF0aF9mcm9tX2Jhc2UoJ2J1aWxkJywgdGFyZ2V0LCBiaW5hcnkpCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0
X2V4cGVjdGF0aW9ucy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CmluZGV4IGYxNjQ3ZjcuLjkz
NzcxMjEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0
YXRpb25zLnB5CkBAIC0zNiwxMCArMzYsNyBAQCBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0
IHN5cwogaW1wb3J0IHRpbWUKLWltcG9ydCBwYXRoX3V0aWxzCiAKLXN5cy5wYXRoLmFwcGVuZChw
YXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXZWJLaXRUb29scycpKSAKIGlt
cG9ydCBzaW1wbGVqc29uCiAKICMgVGVzdCBleHBlY3RhdGlvbiBhbmQgbW9kaWZpZXIgY29uc3Rh
bnRzLgpAQCAtNTMsMTIgKzUwLDExIEBAIGltcG9ydCBzaW1wbGVqc29uCiBjbGFzcyBUZXN0RXhw
ZWN0YXRpb25zOgogICAgIFRFU1RfTElTVCA9ICJ0ZXN0X2V4cGVjdGF0aW9ucy50eHQiCiAKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgdGVzdHMsIGRpcmVjdG9yeSwgcGxhdGZvcm0sIGlzX2RlYnVn
X21vZGUsIGlzX2xpbnRfbW9kZSwKLSAgICAgICAgdGVzdHNfYXJlX3ByZXNlbnQ9VHJ1ZSk6Ci0g
ICAgICAgICIiIlJlYWRzIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBmaWxlcyBmcm9tIHRoZSBnaXZl
biBkaXJlY3RvcnkuIiIiCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCBz
ZWxmLlRFU1RfTElTVCkKLSAgICAgICAgc2VsZi5fZXhwZWN0ZWRfZmFpbHVyZXMgPSBUZXN0RXhw
ZWN0YXRpb25zRmlsZShwYXRoLCB0ZXN0cywgcGxhdGZvcm0sCi0gICAgICAgICAgICBpc19kZWJ1
Z19tb2RlLCBpc19saW50X21vZGUsIHRlc3RzX2FyZV9wcmVzZW50PXRlc3RzX2FyZV9wcmVzZW50
KQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCB0ZXN0cywgZXhwZWN0YXRpb25zLCBwbGF0
Zm9ybSwgaXNfZGVidWdfbW9kZSwKKyAgICAgICAgICAgICAgICAgIGlzX2xpbnRfbW9kZSwgdGVz
dHNfYXJlX3ByZXNlbnQ9VHJ1ZSk6CisgICAgICAgIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzID0g
VGVzdEV4cGVjdGF0aW9uc0ZpbGUocG9ydCwgZXhwZWN0YXRpb25zLAorICAgICAgICAgICAgdGVz
dHMsIHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlLCBpc19saW50X21vZGUsCisgICAgICAgICAgICB0
ZXN0c19hcmVfcHJlc2VudD10ZXN0c19hcmVfcHJlc2VudCkKIAogICAgICMgVE9ETyhvamFuKTog
QWxsb3cgZm9yIHJlbW92aW5nIHNraXBwZWQgdGVzdHMgd2hlbiBnZXR0aW5nIHRoZSBsaXN0IG9m
CiAgICAgIyB0ZXN0cyB0byBydW4sIGJ1dCBub3Qgd2hlbiBnZXR0aW5nIG1ldHJpY3MuCkBAIC0y
MzAsOSArMjI2LDYgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc0ZpbGU6CiAgICAgRVhQRUNUQVRJ
T05fT1JERVIgPSAoUEFTUywgQ1JBU0gsIFRJTUVPVVQsIE1JU1NJTkcsIElNQUdFX1BMVVNfVEVY
VCwKICAgICAgICBURVhULCBJTUFHRSwgRkFJTCwgU0tJUCkKIAotICAgIEJBU0VfUExBVEZPUk1T
ID0gKCdsaW51eCcsICdtYWMnLCAnd2luJykKLSAgICBQTEFURk9STVMgPSBCQVNFX1BMQVRGT1JN
UyArICgnd2luLXhwJywgJ3dpbi12aXN0YScsICd3aW4tNycpCi0KICAgICBCVUlMRF9UWVBFUyA9
ICgnZGVidWcnLCAncmVsZWFzZScpCiAKICAgICBNT0RJRklFUlMgPSB7J3NraXAnOiBTS0lQLApA
QCAtMjUxLDM2ICsyNDQsMzIgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc0ZpbGU6CiAgICAgICAg
ICAgICAgICAgICAgICdmYWlsJzogRkFJTCwKICAgICAgICAgICAgICAgICAgICAgJ2ZsYWt5Jzog
RkxBS1l9CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgZnVsbF90ZXN0X2xpc3QsIHBs
YXRmb3JtLCBpc19kZWJ1Z19tb2RlLAotICAgICAgICBpc19saW50X21vZGUsIGV4cGVjdGF0aW9u
c19hc19zdHI9Tm9uZSwgc3VwcHJlc3NfZXJyb3JzPUZhbHNlLAorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwb3J0LCBleHBlY3RhdGlvbnMsIGZ1bGxfdGVzdF9saXN0LCBwbGF0Zm9ybSwKKyAgICAg
ICAgaXNfZGVidWdfbW9kZSwgaXNfbGludF9tb2RlLCBzdXBwcmVzc19lcnJvcnM9RmFsc2UsCiAg
ICAgICAgIHRlc3RzX2FyZV9wcmVzZW50PVRydWUpOgogICAgICAgICAiIiIKLSAgICAgICAgcGF0
aDogVGhlIHBhdGggdG8gdGhlIGV4cGVjdGF0aW9uIGZpbGUuIEFuIGVycm9yIGlzIHRocm93biBp
ZiBhIHRlc3QgaXMKLSAgICAgICAgICAgIGxpc3RlZCBtb3JlIHRoYW4gb25jZS4KKyAgICAgICAg
ZXhwZWN0YXRpb25zOiBDb250ZW50cyBvZiB0aGUgZXhwZWN0YXRpb25zIGZpbGUKICAgICAgICAg
ZnVsbF90ZXN0X2xpc3Q6IFRoZSBsaXN0IG9mIGFsbCB0ZXN0cyB0byBiZSBydW4gcGVuZGluZyBw
cm9jZXNzaW5nIG9mCiAgICAgICAgICAgICB0aGUgZXhwZWN0aW9ucyBmb3IgdGhvc2UgdGVzdHMu
Ci0gICAgICAgIHBsYXRmb3JtOiBXaGljaCBwbGF0Zm9ybSBmcm9tIHNlbGYuUExBVEZPUk1TIHRv
IGZpbHRlciB0ZXN0cyBmb3IuCisgICAgICAgIHBsYXRmb3JtOiBXaGljaCBwbGF0Zm9ybSBmcm9t
IHBvcnQudGVzdF9wbGF0Zm9ybV9uYW1lcygpIHRvIGZpbHRlcgorICAgICAgICAgICAgdGVzdHMg
Zm9yLgogICAgICAgICBpc19kZWJ1Z19tb2RlOiBXaGV0aGVyIHdlIHRlc3RpbmcgYSB0ZXN0X3No
ZWxsIGJ1aWx0IGRlYnVnIG1vZGUuCiAgICAgICAgIGlzX2xpbnRfbW9kZTogV2hldGhlciB0aGlz
IGlzIGp1c3QgbGludGluZyB0ZXN0X2V4cGVjYXRhdGlvbnMudHh0LgotICAgICAgICBleHBlY3Rh
dGlvbnNfYXNfc3RyOiBDb250ZW50cyBvZiB0aGUgZXhwZWN0YXRpb25zIGZpbGUuIFVzZWQgaW5z
dGVhZCBvZgotICAgICAgICAgICAgdGhlIHBhdGguIFRoaXMgbWFrZXMgdW5pdHRlc3Rpbmcgc2Fu
ZS4KICAgICAgICAgc3VwcHJlc3NfZXJyb3JzOiBXaGV0aGVyIHRvIHN1cHByZXNzIGxpbnQgZXJy
b3JzLgogICAgICAgICB0ZXN0c19hcmVfcHJlc2VudDogV2hldGhlciB0aGUgdGVzdCBmaWxlcyBh
cmUgcHJlc2VudCBpbiB0aGUgbG9jYWwKICAgICAgICAgICAgIGZpbGVzeXN0ZW0uIFRoZSBMVFRG
IERhc2hib2FyZCB1c2VzIEZhbHNlIGhlcmUgdG8gYXZvaWQgaGF2aW5nIHRvCiAgICAgICAgICAg
ICBrZWVwIGEgbG9jYWwgY29weSBvZiB0aGUgdHJlZS4KICAgICAgICAgIiIiCiAKLSAgICAgICAg
c2VsZi5fcGF0aCA9IHBhdGgKLSAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zX2FzX3N0ciA9IGV4
cGVjdGF0aW9uc19hc19zdHIKKyAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zID0gZXhwZWN0YXRp
b25zCiAgICAgICAgIHNlbGYuX2lzX2xpbnRfbW9kZSA9IGlzX2xpbnRfbW9kZQogICAgICAgICBz
ZWxmLl90ZXN0c19hcmVfcHJlc2VudCA9IHRlc3RzX2FyZV9wcmVzZW50CiAgICAgICAgIHNlbGYu
X2Z1bGxfdGVzdF9saXN0ID0gZnVsbF90ZXN0X2xpc3QKICAgICAgICAgc2VsZi5fc3VwcHJlc3Nf
ZXJyb3JzID0gc3VwcHJlc3NfZXJyb3JzCiAgICAgICAgIHNlbGYuX2Vycm9ycyA9IFtdCiAgICAg
ICAgIHNlbGYuX25vbl9mYXRhbF9lcnJvcnMgPSBbXQotICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9
IHNlbGYudG9fdGVzdF9wbGF0Zm9ybV9uYW1lKHBsYXRmb3JtKQotICAgICAgICBpZiBzZWxmLl9w
bGF0Zm9ybSBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHBs
YXRmb3JtICclcyciICUgKHBsYXRmb3JtKSkKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAg
ICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQogICAgICAgICBzZWxmLl9pc19kZWJ1Z19t
b2RlID0gaXNfZGVidWdfbW9kZQogCiAgICAgICAgICMgTWFwcyByZWxhdGl2ZSB0ZXN0IHBhdGhz
IGFzIGxpc3RlZCBpbiB0aGUgZXhwZWN0YXRpb25zIGZpbGUgdG8gYQpAQCAtMzIwLDI3ICszMDks
MTMgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc0ZpbGU6CiAgICAgICAgICIiIlJldHVybnMgYW4g
b2JqZWN0IHRoYXQgY2FuIGJlIGl0ZXJhdGVkIG92ZXIuIEFsbG93cyBmb3Igbm90IGNhcmluZwog
ICAgICAgICBhYm91dCB3aGV0aGVyIHdlJ3JlIGl0ZXJhdGluZyBvdmVyIGEgZmlsZSBvciBhIG5l
dy1saW5lIHNlcGFyYXRlZAogICAgICAgICBzdHJpbmcuIiIiCi0gICAgICAgIGlmIHNlbGYuX2V4
cGVjdGF0aW9uc19hc19zdHI6Ci0gICAgICAgICAgICBpdGVyYWJsZSA9IFt4ICsgIlxuIiBmb3Ig
eCBpbgotICAgICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9uc19hc19zdHIuc3BsaXQoIlxu
IildCi0gICAgICAgICAgICAjIFN0cmlwIGZpbmFsIGVudHJ5IGlmIGl0J3MgZW1wdHkgdG8gYXZv
aWQgYWRkZWQgaW4gYW4gZXh0cmEKLSAgICAgICAgICAgICMgbmV3bGluZS4KLSAgICAgICAgICAg
IGlmIGl0ZXJhYmxlW2xlbihpdGVyYWJsZSkgLSAxXSA9PSAiXG4iOgotICAgICAgICAgICAgICAg
IHJldHVybiBpdGVyYWJsZVs6bGVuKGl0ZXJhYmxlKSAtIDFdCi0gICAgICAgICAgICByZXR1cm4g
aXRlcmFibGUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBvcGVuKHNlbGYuX3Bh
dGgpCi0KLSAgICBkZWYgdG9fdGVzdF9wbGF0Zm9ybV9uYW1lKHNlbGYsIG5hbWUpOgotICAgICAg
ICAiIiJSZXR1cm5zIHRoZSB0ZXN0IGV4cGVjdGF0aW9uIHBsYXRmb3JtIHRoYXQgd2lsbCBiZSB1
c2VkIGZvciBhCi0gICAgICAgIGdpdmVuIHBsYXRmb3JtIG5hbWUsIG9yIE5vbmUgaWYgdGhlcmUg
aXMgbm8gbWF0Y2guIiIiCi0gICAgICAgIGNocm9taXVtX3ByZWZpeCA9ICdjaHJvbWl1bS0nCi0g
ICAgICAgIG5hbWUgPSBuYW1lLmxvd2VyKCkKLSAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKGNo
cm9taXVtX3ByZWZpeCk6Ci0gICAgICAgICAgICBuYW1lID0gbmFtZVtsZW4oY2hyb21pdW1fcHJl
Zml4KTpdCi0gICAgICAgIGlmIG5hbWUgaW4gc2VsZi5QTEFURk9STVM6Ci0gICAgICAgICAgICBy
ZXR1cm4gbmFtZQotICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpdGVyYWJsZSA9IFt4ICsg
IlxuIiBmb3IgeCBpbgorICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLnNwbGl0KCJcbiIp
XQorICAgICAgICAjIFN0cmlwIGZpbmFsIGVudHJ5IGlmIGl0J3MgZW1wdHkgdG8gYXZvaWQgYWRk
ZWQgaW4gYW4gZXh0cmEKKyAgICAgICAgIyBuZXdsaW5lLgorICAgICAgICBpZiBpdGVyYWJsZVts
ZW4oaXRlcmFibGUpIC0gMV0gPT0gIlxuIjoKKyAgICAgICAgICAgIHJldHVybiBpdGVyYWJsZVs6
bGVuKGl0ZXJhYmxlKSAtIDFdCisgICAgICAgIHJldHVybiBpdGVyYWJsZQogCiAgICAgZGVmIGdl
dF90ZXN0X3NldChzZWxmLCBtb2RpZmllciwgZXhwZWN0YXRpb249Tm9uZSwgaW5jbHVkZV9za2lw
cz1UcnVlKToKICAgICAgICAgaWYgZXhwZWN0YXRpb24gaXMgTm9uZToKQEAgLTM5OCw2ICszNzMs
OSBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zRmlsZToKICAgICAgICAgICBubwogICAgICAgICAi
IiIKIAorICAgICAgICAjIFRPRE8oZHByYW5rZSkgLSB1cGRhdGUgdGhpcworICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbigncmVtb3ZlX3BsYXRmb3JtX2Zyb21fZmlsZScpCisK
ICAgICAgICAgbmV3X2ZpbGUgPSBzZWxmLl9wYXRoICsgJy5uZXcnCiAgICAgICAgIGxvZ2dpbmcu
ZGVidWcoJ09yaWdpbmFsIGZpbGU6ICIlcyInLCBzZWxmLl9wYXRoKQogICAgICAgICBsb2dnaW5n
LmRlYnVnKCdOZXcgZmlsZTogIiVzIicsIG5ld19maWxlKQpAQCAtNDMwLDExICs0MDgsMTIgQEAg
Y2xhc3MgVGVzdEV4cGVjdGF0aW9uc0ZpbGU6CiAgICAgICAgICAgICBlbGlmIGFjdGlvbiA9PSBB
RERfUExBVEZPUk1TX0VYQ0VQVF9USElTOgogICAgICAgICAgICAgICAgIHBhcnRzID0gbGluZS5z
cGxpdCgnOicpCiAgICAgICAgICAgICAgICAgbmV3X29wdGlvbnMgPSBwYXJ0c1swXQotICAgICAg
ICAgICAgICAgIGZvciBwIGluIHNlbGYuUExBVEZPUk1TOgotICAgICAgICAgICAgICAgICAgICBw
ID0gcC51cHBlcigpOworICAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuX3BvcnQudGVzdF9w
bGF0Zm9ybV9uYW1lcygpOgorICAgICAgICAgICAgICAgICAgICBwID0gcC51cHBlcigpCiAgICAg
ICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhIHRlbXAgc29sdXRpb24gZm9yIHJlYmFzZWxpbmlu
ZyB0b29sLgogICAgICAgICAgICAgICAgICAgICAjIERvIG5vdCBhZGQgdGFncyBXSU4tNyBhbmQg
V0lOLVZJU1RBIHRvIHRlc3QgZXhwZWN0YXRpb25zCi0gICAgICAgICAgICAgICAgICAgICMgaWYg
dGhlIG9yaWdpbmFsIGxpbmUgZG9lcyBub3Qgc3BlY2lmeSB0aGUgcGxhdGZvcm0gb3B0aW9uLgor
ICAgICAgICAgICAgICAgICAgICAjIGlmIHRoZSBvcmlnaW5hbCBsaW5lIGRvZXMgbm90IHNwZWNp
ZnkgdGhlIHBsYXRmb3JtCisgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uLgogICAgICAgICAg
ICAgICAgICAgICAjIFRPRE8odmljdG9ydyk6IFJlbW92ZSBXSU4tVklTVEEgYW5kIFdJTi03IG9u
Y2Ugd2UgaGF2ZQogICAgICAgICAgICAgICAgICAgICAjIHJlbGlhYmxlIFdpbiA3IGFuZCBXaW4g
VmlzdGEgYnVpbGRib3RzIHNldHVwLgogICAgICAgICAgICAgICAgICAgICBpZiBub3QgcCBpbiAo
cGxhdGZvcm0udXBwZXIoKSwgJ1dJTi1WSVNUQScsICdXSU4tNycpOgpAQCAtNTE3LDcgKzQ5Niw3
IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNGaWxlOgogCiAgICAgICAgIGhhc19hbnlfcGxhdGZv
cm0gPSBGYWxzZQogICAgICAgICBmb3Igb3B0aW9uIGluIG9wdGlvbnM6Ci0gICAgICAgICAgICBp
ZiBvcHRpb24gaW4gc2VsZi5QTEFURk9STVM6CisgICAgICAgICAgICBpZiBvcHRpb24gaW4gc2Vs
Zi5fcG9ydC50ZXN0X3BsYXRmb3JtX25hbWVzKCk6CiAgICAgICAgICAgICAgICAgaGFzX2FueV9w
bGF0Zm9ybSA9IFRydWUKICAgICAgICAgICAgICAgICBpZiBub3Qgb3B0aW9uID09IHBsYXRmb3Jt
OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUkVNT1ZFX1BMQVRGT1JNCkBAIC01NDcsNyAr
NTI2LDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc0ZpbGU6CiAgICAgICAgIGZvciBvcHRpb24g
aW4gb3B0aW9uczoKICAgICAgICAgICAgIGlmIG9wdGlvbiBpbiBzZWxmLk1PRElGSUVSUzoKICAg
ICAgICAgICAgICAgICBtb2RpZmllcnMuYWRkKG9wdGlvbikKLSAgICAgICAgICAgIGVsaWYgb3B0
aW9uIGluIHNlbGYuUExBVEZPUk1TOgorICAgICAgICAgICAgZWxpZiBvcHRpb24gaW4gc2VsZi5f
cG9ydC50ZXN0X3BsYXRmb3JtX25hbWVzKCk6CiAgICAgICAgICAgICAgICAgaGFzX2FueV9wbGF0
Zm9ybSA9IFRydWUKICAgICAgICAgICAgIGVsaWYgb3B0aW9uLnN0YXJ0c3dpdGgoJ2J1ZycpOgog
ICAgICAgICAgICAgICAgIGhhc19idWdfaWQgPSBUcnVlCkBAIC02MzIsNyArNjExLDcgQEAgY2xh
c3MgVGVzdEV4cGVjdGF0aW9uc0ZpbGU6CiAgICAgICAgICAgICAgICAgICAgICdpbmRlZmluaXRl
bHksIHRoZW4gaXQgc2hvdWxkIGJlIGp1c3QgdGltZW91dC4nLAogICAgICAgICAgICAgICAgICAg
ICB0ZXN0X2xpc3RfcGF0aCkKIAotICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2lu
KHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RzX2RpcigpLAorICAgICAgICAgICAgZnVsbF9wYXRoID0g
b3MucGF0aC5qb2luKHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbGlzdF9wYXRoKQogICAgICAgICAgICAgZnVs
bF9wYXRoID0gb3MucGF0aC5ub3JtcGF0aChmdWxsX3BhdGgpCiAgICAgICAgICAgICAjIFdlYktp
dCdzIHdheSBvZiBza2lwcGluZyB0ZXN0cyBpcyB0byBhZGQgYSAtZGlzYWJsZWQgc3VmZml4LgpA
QCAtNjk1LDcgKzY3NCw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNGaWxlOgogICAgIGRlZiBf
ZXhwYW5kX3Rlc3RzKHNlbGYsIHRlc3RfbGlzdF9wYXRoKToKICAgICAgICAgIiIiQ29udmVydCB0
aGUgdGVzdCBzcGVjaWZpY2F0aW9uIHRvIGFuIGFic29sdXRlLCBub3JtYWxpemVkCiAgICAgICAg
IHBhdGggYW5kIG1ha2Ugc3VyZSBkaXJlY3RvcmllcyBlbmQgd2l0aCB0aGUgT1MgcGF0aCBzZXBh
cmF0b3IuIiIiCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aF91dGlscy5sYXlvdXRf
dGVzdHNfZGlyKCksIHRlc3RfbGlzdF9wYXRoKQorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2lu
KHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCB0ZXN0X2xpc3RfcGF0aCkKICAgICAgICAg
cGF0aCA9IG9zLnBhdGgubm9ybXBhdGgocGF0aCkKICAgICAgICAgcGF0aCA9IHNlbGYuX2ZpeF9k
aXIocGF0aCkKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9maWxlcy5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmlsZXMucHkKaW5k
ZXggOTFmZTEzNi4uNmNkYzM5ZSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9maWxlcy5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0
X2ZpbGVzLnB5CkBAIC0zNiw3ICszNiw2IEBAIHVuZGVyIHRoYXQgZGlyZWN0b3J5LiIiIgogCiBp
bXBvcnQgZ2xvYgogaW1wb3J0IG9zCi1pbXBvcnQgcGF0aF91dGlscwogCiAjIFdoZW4gY29sbGVj
dGluZyB0ZXN0IGNhc2VzLCB3ZSBpbmNsdWRlIGFueSBmaWxlIHdpdGggdGhlc2UgZXh0ZW5zaW9u
cy4KIF9zdXBwb3J0ZWRfZmlsZV9leHRlbnNpb25zID0gc2V0KFsnLmh0bWwnLCAnLnNodG1sJywg
Jy54bWwnLCAnLnhodG1sJywgJy5wbCcsCkBAIC00NSw3ICs0NCw3IEBAIF9zdXBwb3J0ZWRfZmls
ZV9leHRlbnNpb25zID0gc2V0KFsnLmh0bWwnLCAnLnNodG1sJywgJy54bWwnLCAnLnhodG1sJywg
Jy5wbCcsCiBfc2tpcHBlZF9kaXJlY3RvcmllcyA9IHNldChbJy5zdm4nLCAnX3N2bicsICdyZXNv
dXJjZXMnLCAnc2NyaXB0LXRlc3RzJ10pCiAKIAotZGVmIGdhdGhlcl90ZXN0X2ZpbGVzKHBhdGhz
KToKK2RlZiBnYXRoZXJfdGVzdF9maWxlcyhwb3J0LCBwYXRocyk6CiAgICAgIiIiR2VuZXJhdGUg
YSBzZXQgb2YgdGVzdCBmaWxlcyBhbmQgcmV0dXJuIHRoZW0uCiAKICAgICBBcmdzOgpAQCAtNTcs
MTQgKzU2LDE0IEBAIGRlZiBnYXRoZXJfdGVzdF9maWxlcyhwYXRocyk6CiAgICAgaWYgcGF0aHM6
CiAgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgogICAgICAgICAgICAgIyBJZiB0aGVyZSdzIGFu
ICogaW4gdGhlIG5hbWUsIGFzc3VtZSBpdCdzIGEgZ2xvYiBwYXR0ZXJuLgotICAgICAgICAgICAg
cGF0aCA9IG9zLnBhdGguam9pbihwYXRoX3V0aWxzLmxheW91dF90ZXN0c19kaXIoKSwgcGF0aCkK
KyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocG9ydC5sYXlvdXRfdGVzdHNfZGlyKCks
IHBhdGgpCiAgICAgICAgICAgICBpZiBwYXRoLmZpbmQoJyonKSA+IC0xOgogICAgICAgICAgICAg
ICAgIGZpbGVuYW1lcyA9IGdsb2IuZ2xvYihwYXRoKQogICAgICAgICAgICAgICAgIHBhdGhzX3Rv
X3dhbGsudXBkYXRlKGZpbGVuYW1lcykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAg
ICAgcGF0aHNfdG9fd2Fsay5hZGQocGF0aCkKICAgICBlbHNlOgotICAgICAgICBwYXRoc190b193
YWxrLmFkZChwYXRoX3V0aWxzLmxheW91dF90ZXN0c19kaXIoKSkKKyAgICAgICAgcGF0aHNfdG9f
d2Fsay5hZGQocG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpCiAKICAgICAjIE5vdyB3YWxrIGFsbCB0
aGUgcGF0aHMgcGFzc2VkIGluIG9uIHRoZSBjb21tYW5kIGxpbmUgYW5kIGdldCBmaWxlbmFtZXMK
ICAgICB0ZXN0X2ZpbGVzID0gc2V0KCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfc2hlbGxfdGhyZWFkLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvdGVzdF9zaGVsbF90aHJlYWQucHkKaW5kZXggMTBkMDUwOS4uOWNiNTEyOSAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvdGVzdF9zaGVsbF90aHJlYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHkKQEAgLTQw
LDIxICs0MCwyMiBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgUXVldWUKIGlt
cG9ydCBzaWduYWwKLWltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGhyZWFk
CiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogCi1pbXBvcnQgcGF0aF91dGlscwogaW1w
b3J0IHRlc3RfZmFpbHVyZXMKIAogCi1kZWYgcHJvY2Vzc19vdXRwdXQocHJvYywgdGVzdF9pbmZv
LCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIHRhcmdldCwgb3V0cHV0X2Rpcik6CitkZWYgcHJvY2Vz
c19vdXRwdXQocG9ydCwgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIHRhcmdldCwg
b3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAgICBjcmFzaCwgdGltZW91dCwgdGVzdF9ydW5f
dGltZSwgYWN0dWFsX2NoZWNrc3VtLAorICAgICAgICAgICAgICAgICAgIG91dHB1dCwgZXJyb3Ip
OgogICAgICIiIlJlY2VpdmVzIHRoZSBvdXRwdXQgZnJvbSBhIHRlc3Rfc2hlbGwgcHJvY2Vzcywg
c3ViamVjdHMgaXQgdG8gYSBudW1iZXIKICAgICBvZiB0ZXN0cywgYW5kIHJldHVybnMgYSBsaXN0
IG9mIGZhaWx1cmUgdHlwZXMgdGhlIHRlc3QgcHJvZHVjZWQuCiAKICAgICBBcmdzOgorICAgICAg
cG9ydDogcG9ydC1zcGVjaWZpYyBob29rcwogICAgICAgcHJvYzogYW4gYWN0aXZlIHRlc3Rfc2hl
bGwgcHJvY2VzcwogICAgICAgdGVzdF9pbmZvOiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBm
aWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0CiAgICAgICB0ZXN0X3R5cGVzOiBsaXN0IG9mIHRlc3Qg
dHlwZXMgdG8gc3ViamVjdCB0aGUgb3V0cHV0IHRvCkBAIC02NCw4NCArNjUsMzkgQEAgZGVmIHBy
b2Nlc3Nfb3V0cHV0KHByb2MsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzLCB0YXJn
ZXQsIG91dHB1dF9kaXIpOgogCiAgICAgUmV0dXJuczogYSBsaXN0IG9mIGZhaWx1cmUgb2JqZWN0
cyBhbmQgdGltZXMgZm9yIHRoZSB0ZXN0IGJlaW5nIHByb2Nlc3NlZAogICAgICIiIgotICAgIG91
dGxpbmVzID0gW10KLSAgICBleHRyYV9saW5lcyA9IFtdCiAgICAgZmFpbHVyZXMgPSBbXQotICAg
IGNyYXNoID0gRmFsc2UKIAogICAgICMgU29tZSB0ZXN0IGFyZ3MsIHN1Y2ggYXMgdGhlIGltYWdl
IGhhc2gsIG1heSBiZSBhZGRlZCBvciBjaGFuZ2VkIG9uIGEKICAgICAjIHRlc3QtYnktdGVzdCBi
YXNpcy4KICAgICBsb2NhbF90ZXN0X2FyZ3MgPSBjb3B5LmNvcHkodGVzdF9hcmdzKQogCi0gICAg
c3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0KLSAgICBsaW5lID0gcHJvYy5zdGRvdXQucmVhZGxp
bmUoKQotCi0gICAgIyBPbmx5IHN0YXJ0IHNhdmluZyBvdXRwdXQgbGluZXMgb25jZSB3ZSd2ZSBs
b2FkZWQgdGhlIFVSTCBmb3IgdGhlIHRlc3QuCi0gICAgdXJsID0gTm9uZQotICAgIHRlc3Rfc3Ry
aW5nID0gdGVzdF9pbmZvLnVyaS5zdHJpcCgpCi0KLSAgICB3aGlsZSBsaW5lLnJzdHJpcCgpICE9
ICIjRU9GIjoKLSAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGF2ZW4ndCBjcmFzaGVkLgotICAgICAg
ICBpZiBsaW5lID09ICcnIGFuZCBwcm9jLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAg
IGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaCgpKQotCi0gICAgICAg
ICAgICAjIFRoaXMgaXMgaGV4IGNvZGUgMHhjMDAwMDAxZCwgd2hpY2ggaXMgdXNlZCBmb3IgYWJy
dXB0Ci0gICAgICAgICAgICAjIHRlcm1pbmF0aW9uLiBUaGlzIGhhcHBlbnMgaWYgd2UgaGl0IGN0
cmwrYyBmcm9tIHRoZSBwcm9tcHQgYW5kCi0gICAgICAgICAgICAjIHdlIGhhcHBlbiB0byBiZSB3
YWl0aW5nIG9uIHRoZSB0ZXN0X3NoZWxsLgotICAgICAgICAgICAgIyBzZG95b246IE5vdCBzdXJl
IGZvciB3aGljaCBPUyBhbmQgaW4gd2hhdCBjaXJjdW1zdGFuY2VzIHRoZQotICAgICAgICAgICAg
IyBhYm92ZSBjb2RlIGlzIHZhbGlkLiBXaGF0IHdvcmtzIGZvciBtZSB1bmRlciBMaW51eCB0byBk
ZXRlY3QKLSAgICAgICAgICAgICMgY3RybCtjIGlzIGZvciB0aGUgc3VicHJvY2VzcyByZXR1cm5j
b2RlIHRvIGJlIG5lZ2F0aXZlIFNJR0lOVC4KLSAgICAgICAgICAgICMgQW5kIHRoYXQgYWdyZWVz
IHdpdGggdGhlIHN1YnByb2Nlc3MgZG9jdW1lbnRhdGlvbi4KLSAgICAgICAgICAgIGlmICgtMTA3
Mzc0MTUxMCA9PSBwcm9jLnJldHVybmNvZGUgb3IKLSAgICAgICAgICAgICAgICAtIHNpZ25hbC5T
SUdJTlQgPT0gcHJvYy5yZXR1cm5jb2RlKToKLSAgICAgICAgICAgICAgICByYWlzZSBLZXlib2Fy
ZEludGVycnVwdAotICAgICAgICAgICAgY3Jhc2ggPSBUcnVlCi0gICAgICAgICAgICBicmVhawot
Ci0gICAgICAgICMgRG9uJ3QgaW5jbHVkZSAjVVJMIGxpbmVzIGluIG91ciBvdXRwdXQKLSAgICAg
ICAgaWYgbGluZS5zdGFydHN3aXRoKCIjVVJMOiIpOgotICAgICAgICAgICAgdXJsID0gbGluZS5y
c3RyaXAoKVs1Ol0KLSAgICAgICAgICAgIGlmIHVybCAhPSB0ZXN0X3N0cmluZzoKLSAgICAgICAg
ICAgICAgICBsb2dnaW5nLmZhdGFsKCJUZXN0IGdvdCBvdXQgb2Ygc3luYzpcbnwlc3xcbnwlc3wi
ICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cmwsIHRlc3Rfc3RyaW5nKSkKLSAg
ICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigidGVzdCBvdXQgb2Ygc3luYyIpCi0g
ICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCIjTUQ1OiIpOgotICAgICAgICAgICAgbG9jYWxf
dGVzdF9hcmdzLmhhc2ggPSBsaW5lLnJzdHJpcCgpWzU6XQotICAgICAgICBlbGlmIGxpbmUuc3Rh
cnRzd2l0aCgiI1RFU1RfVElNRURfT1VUIik6Ci0gICAgICAgICAgICAjIFRlc3QgdGltZWQgb3V0
LCBidXQgd2Ugc3RpbGwgbmVlZCB0byByZWFkIHVudGlsICNFT0YuCi0gICAgICAgICAgICBmYWls
dXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpKQotICAgICAgICBlbGlm
IHVybDoKLSAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZChsaW5lKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgZXh0cmFfbGluZXMuYXBwZW5kKGxpbmUpCi0KLSAgICAgICAgbGluZSA9IHBy
b2Muc3Rkb3V0LnJlYWRsaW5lKCkKLQotICAgIGVuZF90ZXN0X3RpbWUgPSB0aW1lLnRpbWUoKQot
Ci0gICAgaWYgbGVuKGV4dHJhX2xpbmVzKToKLSAgICAgICAgZXh0cmEgPSAiIi5qb2luKGV4dHJh
X2xpbmVzKQotICAgICAgICBpZiBjcmFzaDoKLSAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlN0
YWNrdHJhY2UgZm9yICVzOlxuJXMiICUgKHRlc3Rfc3RyaW5nLCBleHRyYSkpCi0gICAgICAgICAg
ICAjIFN0cmlwIG9mZiAiZmlsZTovLyIgc2luY2UgUmVsYXRpdmVUZXN0RmlsZW5hbWUgZXhwZWN0
cwotICAgICAgICAgICAgIyBmaWxlc3lzdGVtIHBhdGhzLgotICAgICAgICAgICAgZmlsZW5hbWUg
PSBvcy5wYXRoLmpvaW4ob3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnJl
bGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9zdHJpbmdbNzpdKSkKLSAgICAgICAgICAgIGZpbGVu
YW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gKyAiLXN0YWNrLnR4dCIKLSAgICAg
ICAgICAgIHBhdGhfdXRpbHMubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxl
bmFtZSlbMF0pCi0gICAgICAgICAgICBvcGVuKGZpbGVuYW1lLCAid2IiKS53cml0ZShleHRyYSkK
LSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlByZXZpb3VzIHRlc3Qg
b3V0cHV0IGV4dHJhIGxpbmVzIGFmdGVyIGR1bXA6XG4lcyIgJQotICAgICAgICAgICAgICAgIGV4
dHJhKQorICAgIGxvY2FsX3Rlc3RfYXJncy5oYXNoID0gYWN0dWFsX2NoZWNrc3VtCisKKyAgICBp
ZiBjcmFzaDoKKyAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNy
YXNoKCkpCisgICAgaWYgdGltZW91dDoKKyAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFp
bHVyZXMuRmFpbHVyZVRpbWVvdXQoKSkKKworICAgIGlmIGNyYXNoOgorICAgICAgICBsb2dnaW5n
LmRlYnVnKCJTdGFja3RyYWNlIGZvciAlczpcbiVzIiAlICh0ZXN0X2luZm8uZmlsZW5hbWUsIGVy
cm9yKSkKKyAgICAgICAgIyBTdHJpcCBvZmYgImZpbGU6Ly8iIHNpbmNlIFJlbGF0aXZlVGVzdEZp
bGVuYW1lIGV4cGVjdHMKKyAgICAgICAgIyBmaWxlc3lzdGVtIHBhdGhzLgorICAgICAgICBmaWxl
bmFtZSA9IG9zLnBhdGguam9pbihvdXRwdXRfZGlyLCB0ZXN0X2luZm8uZmlsZW5hbWUpCisgICAg
ICAgIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gKyAiLXN0YWNrLnR4
dCIKKyAgICAgICAgcG9ydC5tYXliZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRoLnNwbGl0KGZpbGVu
YW1lKVswXSkKKyAgICAgICAgb3BlbihmaWxlbmFtZSwgIndiIikud3JpdGUoZXJyb3IpCisgICAg
ZWxzZToKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygiUHJldmlvdXMgdGVzdCBvdXRwdXQgZXh0cmEg
bGluZXMgYWZ0ZXIgZHVtcDpcbiVzIiAlCisgICAgICAgICAgICBlcnJvcikKIAogICAgICMgQ2hl
Y2sgdGhlIG91dHB1dCBhbmQgc2F2ZSB0aGUgcmVzdWx0cy4KKyAgICBzdGFydF90aW1lID0gdGlt
ZS50aW1lKCkKICAgICB0aW1lX2Zvcl9kaWZmcyA9IHt9CiAgICAgZm9yIHRlc3RfdHlwZSBpbiB0
ZXN0X3R5cGVzOgogICAgICAgICBzdGFydF9kaWZmX3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAg
ICBuZXdfZmFpbHVyZXMgPSB0ZXN0X3R5cGUuY29tcGFyZV9vdXRwdXQodGVzdF9pbmZvLmZpbGVu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv
YywgJycuam9pbihvdXRsaW5lcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2NhbF90ZXN0X2FyZ3MsIHRhcmdldCkKKyAgICAgICAgbmV3X2ZhaWx1
cmVzID0gdGVzdF90eXBlLmNvbXBhcmVfb3V0cHV0KHBvcnQsIHRlc3RfaW5mby5maWxlbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwg
bG9jYWxfdGVzdF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0KQogICAgICAgICAjIERvbid0IGFkZCBhbnkgbW9yZSBmYWlsdXJlcyBp
ZiB3ZSBhbHJlYWR5IGhhdmUgYSBjcmFzaCwgc28gd2UgZG9uJ3QKICAgICAgICAgIyBkb3VibGUt
cmVwb3J0IHRob3NlIHRlc3RzLiBXZSBkbyBkb3VibGUtcmVwb3J0IGZvciB0aW1lb3V0cyBzaW5j
ZQogICAgICAgICAjIHdlIHN0aWxsIHdhbnQgdG8gc2VlIHRoZSB0ZXh0IGFuZCBpbWFnZSBvdXRw
dXQuCkBAIC0xNTAsMjggKzEwNiwxMSBAQCBkZWYgcHJvY2Vzc19vdXRwdXQocHJvYywgdGVzdF9p
bmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIHRhcmdldCwgb3V0cHV0X2Rpcik6CiAgICAgICAg
IHRpbWVfZm9yX2RpZmZzW3Rlc3RfdHlwZS5fX2NsYXNzX18uX19uYW1lX19dID0gKAogICAgICAg
ICAgICAgdGltZS50aW1lKCkgLSBzdGFydF9kaWZmX3RpbWUpCiAKLSAgICB0b3RhbF90aW1lX2Zv
cl9hbGxfZGlmZnMgPSB0aW1lLnRpbWUoKSAtIGVuZF90ZXN0X3RpbWUKLSAgICB0ZXN0X3J1bl90
aW1lID0gZW5kX3Rlc3RfdGltZSAtIHN0YXJ0X3RpbWUKKyAgICB0b3RhbF90aW1lX2Zvcl9hbGxf
ZGlmZnMgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZQogICAgIHJldHVybiBUZXN0U3Rh
dHModGVzdF9pbmZvLmZpbGVuYW1lLCBmYWlsdXJlcywgdGVzdF9ydW5fdGltZSwKICAgICAgICAg
dG90YWxfdGltZV9mb3JfYWxsX2RpZmZzLCB0aW1lX2Zvcl9kaWZmcykKIAogCi1kZWYgc3RhcnRf
dGVzdF9zaGVsbChjb21tYW5kLCBhcmdzKToKLSAgICAiIiJSZXR1cm5zIHRoZSBwcm9jZXNzIGZv
ciBhIG5ldyB0ZXN0X3NoZWxsIHN0YXJ0ZWQgaW4gbGF5b3V0LXRlc3RzIG1vZGUuCi0gICAgIiIi
Ci0gICAgY21kID0gW10KLSAgICAjIEhvb2sgZm9yIGluamVjdGluZyB2YWxncmluZCBvciBvdGhl
ciBydW50aW1lIGluc3RydW1lbnRhdGlvbiwKLSAgICAjIHVzZWQgYnkgZS5nLiB0b29scy92YWxn
cmluZC92YWxncmluZF90ZXN0cy5weS4KLSAgICB3cmFwcGVyID0gb3MuZW52aXJvbi5nZXQoIkJS
T1dTRVJfV1JBUFBFUiIsIE5vbmUpCi0gICAgaWYgd3JhcHBlciAhPSBOb25lOgotICAgICAgICBj
bWQgKz0gW3dyYXBwZXJdCi0gICAgY21kICs9IGNvbW1hbmQgKyBbJy0tbGF5b3V0LXRlc3RzJ10g
KyBhcmdzCi0gICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY21kLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLQotCiBjbGFzcyBUZXN0U3RhdHM6CiAKICAg
ICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGZhaWx1cmVzLCB0ZXN0X3J1bl90aW1lLApA
QCAtMTg2LDE3ICsxMjUsMTkgQEAgY2xhc3MgVGVzdFN0YXRzOgogY2xhc3MgU2luZ2xlVGVzdFRo
cmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAiIiJUaHJlYWQgd3JhcHBlciBmb3IgcnVubmlu
ZyBhIHNpbmdsZSB0ZXN0IGZpbGUuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9z
aGVsbF9jb21tYW5kLCBzaGVsbF9hcmdzLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsCi0gICAgICAg
IHRlc3RfYXJncywgdGFyZ2V0LCBvdXRwdXRfZGlyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
cG9ydCwgaW1hZ2VfcGF0aCwgc2hlbGxfYXJncywgdGVzdF9pbmZvLAorICAgICAgICB0ZXN0X3R5
cGVzLCB0ZXN0X2FyZ3MsIHRhcmdldCwgb3V0cHV0X2Rpcik6CiAgICAgICAgICIiIgogICAgICAg
ICBBcmdzOgorICAgICAgICAgIHBvcnQ6IG9iamVjdCBpbXBsZW1lbnRpbmcgcG9ydC1zcGVjaWZp
YyBob29rcwogICAgICAgICAgIHRlc3RfaW5mbzogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3Qg
ZmlsZW5hbWUsIHVyaSBhbmQgdGltZW91dAogICAgICAgICAgIG91dHB1dF9kaXI6IERpcmVjdG9y
eSB0byBwdXQgY3Jhc2ggc3RhY2tzIGludG8uCiAgICAgICAgICAgU2VlIFRlc3RTaGVsbFRocmVh
ZCBmb3IgZG9jdW1lbnRhdGlvbiBvZiB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KICAgICAgICAg
IiIiCiAKICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQotICAgICAgICBz
ZWxmLl9jb21tYW5kID0gdGVzdF9zaGVsbF9jb21tYW5kCisgICAgICAgIHNlbGYuX3BvcnQgPSBw
b3J0CisgICAgICAgIHNlbGYuX2ltYWdlX3BhdGggPSBpbWFnZV9wYXRoCiAgICAgICAgIHNlbGYu
X3NoZWxsX2FyZ3MgPSBzaGVsbF9hcmdzCiAgICAgICAgIHNlbGYuX3Rlc3RfaW5mbyA9IHRlc3Rf
aW5mbwogICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gdGVzdF90eXBlcwpAQCAtMjA1LDEwICsx
NDYsMTggQEAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAg
ICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKIAogICAgIGRlZiBydW4oc2VsZik6Ci0g
ICAgICAgIHByb2MgPSBzdGFydF90ZXN0X3NoZWxsKHNlbGYuX2NvbW1hbmQsIHNlbGYuX3NoZWxs
X2FyZ3MgKwotICAgICAgICAgICAgWyItLXRpbWUtb3V0LW1zPSIgKyBzZWxmLl90ZXN0X2luZm8u
dGltZW91dCwgc2VsZi5fdGVzdF9pbmZvLnVyaV0pCi0gICAgICAgIHNlbGYuX3Rlc3Rfc3RhdHMg
PSBwcm9jZXNzX291dHB1dChwcm9jLCBzZWxmLl90ZXN0X2luZm8sCi0gICAgICAgICAgICBzZWxm
Ll90ZXN0X3R5cGVzLCBzZWxmLl90ZXN0X2FyZ3MsIHNlbGYuX3RhcmdldCwgc2VsZi5fb3V0cHV0
X2RpcikKKyAgICAgICAgZHJpdmVyID0gc2VsZi5fcG9ydC5zdGFydF90ZXN0X2RyaXZlcihzZWxm
Ll9pbWFnZV9wYXRoLAorICAgICAgICAgICAgc2VsZi5fc2hlbGxfYXJncykKKyAgICAgICAgc3Rh
cnQgPSB0aW1lLnRpbWUoKQorICAgICAgICAoY3Jhc2gsIHRpbWVvdXQsIGFjdHVhbF9jaGVja3N1
bSwgb3V0cHV0LCBlcnJvcikgPSAgXAorICAgICAgICAgICAgZHJpdmVyLnJ1bl90ZXN0KHRlc3Rf
aW5mby51cmkuc3RyaXAoKSwgdGVzdF9pbmZvLnRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdF9pbmZvLmltYWdlX2hhc2gpCisgICAgICAgIGVuZCA9IHRpbWUudGltZSgp
CisgICAgICAgIHNlbGYuX3Rlc3Rfc3RhdHMgPSBwcm9jZXNzX291dHB1dChzZWxmLl9wb3J0LAor
ICAgICAgICAgICAgc2VsZi5fdGVzdF9pbmZvLCBzZWxmLl90ZXN0X3R5cGVzLCBzZWxmLl90ZXN0
X2FyZ3MsCisgICAgICAgICAgICBzZWxmLl90YXJnZXQsIHNlbGYuX291dHB1dF9kaXIsIGNyYXNo
LCB0aW1lb3V0LCBlbmQgLSBzdGFydCwKKyAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bSwgb3V0
cHV0LCBlcnJvcikKKyAgICAgICAgZHJpdmVyLnN0b3AoKQogCiAgICAgZGVmIGdldF90ZXN0X3N0
YXRzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9zdGF0cwpAQCAtMjE2LDE3ICsx
NjUsMTYgQEAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKIAogY2xh
c3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIGZpbGVuYW1lX2xpc3RfcXVldWUsIHJlc3VsdF9xdWV1ZSwgdGVzdF9zaGVsbF9jb21t
YW5kLAotICAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIHNoZWxsX2FyZ3Ms
IG9wdGlvbnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBmaWxlbmFtZV9saXN0X3F1
ZXVlLCByZXN1bHRfcXVldWUsCisgICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMsIHRlc3RfYXJn
cywgaW1hZ2VfcGF0aCwgc2hlbGxfYXJncywgb3B0aW9ucyk6CiAgICAgICAgICIiIkluaXRpYWxp
emUgYWxsIHRoZSBsb2NhbCBzdGF0ZSBmb3IgdGhpcyB0ZXN0IHNoZWxsIHRocmVhZC4KIAogICAg
ICAgICBBcmdzOgorICAgICAgICAgIHBvcnQ6IGludGVyZmFjZSB0byBwb3J0LXNwZWNpZmljIGhv
b2tzCiAgICAgICAgICAgZmlsZW5hbWVfbGlzdF9xdWV1ZTogQSB0aHJlYWQgc2FmZSBRdWV1ZSBj
bGFzcyB0aGF0IGNvbnRhaW5zIGxpc3RzCiAgICAgICAgICAgICAgIG9mIHR1cGxlcyBvZiAoZmls
ZW5hbWUsIHVyaSkgcGFpcnMuCiAgICAgICAgICAgcmVzdWx0X3F1ZXVlOiBBIHRocmVhZCBzYWZl
IFF1ZXVlIGNsYXNzIHRoYXQgd2lsbCBjb250YWluIHR1cGxlcyBvZgogICAgICAgICAgICAgICAo
dGVzdCwgZmFpbHVyZSBsaXN0cykgZm9yIHRoZSB0ZXN0IHJlc3VsdHMuCi0gICAgICAgICAgdGVz
dF9zaGVsbF9jb21tYW5kOiBBIGxpc3Qgc3BlY2lmeWluZyB0aGUgY29tbWFuZCthcmdzIGZvcgot
ICAgICAgICAgICAgICB0ZXN0X3NoZWxsCiAgICAgICAgICAgdGVzdF90eXBlczogQSBsaXN0IG9m
IFRlc3RUeXBlIG9iamVjdHMgdG8gcnVuIHRoZSB0ZXN0IG91dHB1dAogICAgICAgICAgICAgICBh
Z2FpbnN0LgogICAgICAgICAgIHRlc3RfYXJnczogQSBUZXN0QXJndW1lbnRzIG9iamVjdCB0byBw
YXNzIHRvIGVhY2ggVGVzdFR5cGUuCkBAIC0yMzYsMTMgKzE4NCwxNCBAQCBjbGFzcyBUZXN0U2hl
bGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgICAgICAgIHJ1bl93ZWJraXRfdGVz
dHM7IHRoZXkgYXJlIHR5cGljYWxseSBwYXNzZWQgdmlhIHRoZQogICAgICAgICAgICAgICBydW5f
d2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIgY2xhc3MuIiIiCiAgICAgICAgIHRocmVhZGluZy5UaHJl
YWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2Vs
Zi5fZmlsZW5hbWVfbGlzdF9xdWV1ZSA9IGZpbGVuYW1lX2xpc3RfcXVldWUKICAgICAgICAgc2Vs
Zi5fcmVzdWx0X3F1ZXVlID0gcmVzdWx0X3F1ZXVlCiAgICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xp
c3QgPSBbXQotICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX2NvbW1hbmQgPSB0ZXN0X3NoZWxsX2Nv
bW1hbmQKICAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IHRlc3RfdHlwZXMKICAgICAgICAgc2Vs
Zi5fdGVzdF9hcmdzID0gdGVzdF9hcmdzCi0gICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYyA9
IE5vbmUKKyAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQorICAgICAgICBzZWxmLl9pbWFnZV9w
YXRoID0gaW1hZ2VfcGF0aAogICAgICAgICBzZWxmLl9zaGVsbF9hcmdzID0gc2hlbGxfYXJncwog
ICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxmLl9jYW5jZWxlZCA9
IEZhbHNlCkBAIC0zNzksMTEgKzMyOCwxMSBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFk
aW5nLlRocmVhZCk6CiAgICAgICAgICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVzc2FnZShz
KS4KICAgICAgICAgICAgICAgICBlcnJvcl9zdHIgPSAnXG4nLmpvaW4oWycgICcgKyBmLm1lc3Nh
Z2UoKSBmb3IgZiBpbiBmYWlsdXJlc10pCiAgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1Zygi
JXMgJXMgZmFpbGVkOlxuJXMiICUgKHNlbGYuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShmaWxlbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9z
dHIpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCIl
cyAlcyBwYXNzZWQiICUgKHNlbGYuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5h
bWUoZmlsZW5hbWUpKSkKICAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZS5wdXQoKGZpbGVu
YW1lLCBmYWlsdXJlcykpCiAKICAgICAgICAgICAgIGlmIGJhdGNoX3NpemUgPiAwIGFuZCBiYXRj
aF9jb3VudCA+IGJhdGNoX3NpemU6CkBAIC00MDcsNyArMzU2LDcgQEAgY2xhc3MgVGVzdFNoZWxs
VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICBSZXR1cm46CiAgICAgICAgICAgQSBs
aXN0IG9mIFRlc3RGYWlsdXJlIG9iamVjdHMgZGVzY3JpYmluZyB0aGUgZXJyb3IuCiAgICAgICAg
ICIiIgotICAgICAgICB3b3JrZXIgPSBTaW5nbGVUZXN0VGhyZWFkKHNlbGYuX3Rlc3Rfc2hlbGxf
Y29tbWFuZCwKKyAgICAgICAgd29ya2VyID0gU2luZ2xlVGVzdFRocmVhZChzZWxmLl9wb3J0LCBz
ZWxmLl9pbWFnZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3NoZWxsX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZv
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMsCkBA
IC00MzEsNyArMzgwLDcgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQp
OgogICAgICAgICAgICAgIyB0cmFkZW9mZiBpbiBvcmRlciB0byBhdm9pZCBsb3NpbmcgdGhlIHJl
c3Qgb2YgdGhpcyB0aHJlYWQncwogICAgICAgICAgICAgIyByZXN1bHRzLgogICAgICAgICAgICAg
bG9nZ2luZy5lcnJvcignVGVzdCB0aHJlYWQgaHVuZzoga2lsbGluZyBhbGwgdGVzdF9zaGVsbHMn
KQotICAgICAgICAgICAgcGF0aF91dGlscy5raWxsX2FsbF90ZXN0X3NoZWxscygpCisgICAgICAg
ICAgICB3b3JrZXIuX2RyaXZlci5zdG9wKCkKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBz
dGF0cyA9IHdvcmtlci5nZXRfdGVzdF9zdGF0cygpCkBAIC00NTQsMzIgKzQwMywyMyBAQCBjbGFz
cyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgICAgQSBsaXN0IG9m
IFRlc3RGYWlsdXJlIG9iamVjdHMgZGVzY3JpYmluZyB0aGUgZXJyb3IuCiAgICAgICAgICIiIgog
ICAgICAgICBzZWxmLl9lbnN1cmVfdGVzdF9zaGVsbF9pc19ydW5uaW5nKCkKLSAgICAgICAgIyBB
cmdzIHRvIHRlc3Rfc2hlbGwgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZgotICAgICAgICAj
ICJ1cmkgdGltZW91dCBwaXhlbF9oYXNoIgotICAgICAgICAjIFRoZSB0aW1lb3V0IGFuZCBwaXhl
bF9oYXNoIGFyZSBvcHRpb25hbC4gIFRoZSB0aW1lb3V0IGlzIHVzZWQgaWYgdGhpcwotICAgICAg
ICAjIHRlc3QgaGFzIGEgY3VzdG9tIHRpbWVvdXQuIFRoZSBwaXhlbF9oYXNoIGlzIHVzZWQgdG8g
YXZvaWQgZG9pbmcgYW4KLSAgICAgICAgIyBpbWFnZSBkdW1wIGlmIHRoZSBjaGVja3N1bXMgbWF0
Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBibGFuawotICAgICAgICAjIHZhbHVlIGlmIHdl
IGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLgotICAgICAgICAjIChPdGhlcndpc2UsIGFu
IGltYWdlIGZyb20gYSBwcmV2aW91cyBydW4gd2lsbCBiZSBjb3BpZWQgaW50bwotICAgICAgICAj
IHRoZSBiYXNlbGluZS4pCisgICAgICAgICMgVGhlIHBpeGVsX2hhc2ggaXMgdXNlZCB0byBhdm9p
ZCBkb2luZyBhbiBpbWFnZSBkdW1wIGlmIHRoZQorICAgICAgICAjIGNoZWNrc3VtcyBtYXRjaCwg
c28gaXQgc2hvdWxkIGJlIHNldCB0byBhIGJsYW5rIHZhbHVlIGlmIHdlCisgICAgICAgICMgYXJl
IGdlbmVyYXRpbmcgYSBuZXcgYmFzZWxpbmUuICAoT3RoZXJ3aXNlLCBhbiBpbWFnZSBmcm9tIGEK
KyAgICAgICAgIyBwcmV2aW91cyBydW4gd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgYmFzZWxpbmUu
KQogICAgICAgICBpbWFnZV9oYXNoID0gdGVzdF9pbmZvLmltYWdlX2hhc2gKICAgICAgICAgaWYg
aW1hZ2VfaGFzaCBhbmQgc2VsZi5fdGVzdF9hcmdzLm5ld19iYXNlbGluZToKICAgICAgICAgICAg
IGltYWdlX2hhc2ggPSAiIgotICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2Muc3RkaW4ud3Jp
dGUoKCIlcyAlcyAlc1xuIiAlCi0gICAgICAgICAgICAodGVzdF9pbmZvLnVyaSwgdGVzdF9pbmZv
LnRpbWVvdXQsIGltYWdlX2hhc2gpKSkKLQotICAgICAgICAjIElmIHRoZSB0ZXN0IHNoZWxsIGlz
IGRlYWQsIHRoZSBhYm92ZSBtYXkgY2F1c2UgYW4gSU9FcnJvciBhcyB3ZQotICAgICAgICAjIHRy
eSB0byB3cml0ZSBvbnRvIHRoZSBicm9rZW4gcGlwZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGVz
dCBmb3IKLSAgICAgICAgIyB0aGlzIHRlc3Qgc2hlbGwgcHJvY2VzcywgdGhhbiB0aGUgdGVzdCBz
aGVsbCBkaWQgbm90Ci0gICAgICAgICMgc3VjY2Vzc2Z1bGx5IHN0YXJ0LiBJZiB0aGlzIGlzIG5v
dCB0aGUgZmlyc3QgdGVzdCwgdGhlbiB0aGUKLSAgICAgICAgIyBwcmV2aW91cyB0ZXN0cyBoYXZl
IGNhdXNlZCBzb21lIGtpbmQgb2YgZGVsYXllZCBjcmFzaC4gV2UgZG9uJ3QKLSAgICAgICAgIyB0
cnkgdG8gcmVjb3ZlciBoZXJlLgotICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2Muc3RkaW4u
Zmx1c2goKQotCi0gICAgICAgIHN0YXRzID0gcHJvY2Vzc19vdXRwdXQoc2VsZi5fdGVzdF9zaGVs
bF9wcm9jLCB0ZXN0X2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
dGVzdF90eXBlcywgc2VsZi5fdGVzdF9hcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMudGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgICAgIHN0YXJ0ID0gdGltZS50
aW1lKCkKKyAgICAgICAgKGNyYXNoLCB0aW1lb3V0LCBhY3R1YWxfY2hlY2tzdW0sIG91dHB1dCwg
ZXJyb3IpID0gXAorICAgICAgICAgICBzZWxmLl9kcml2ZXIucnVuX3Rlc3QodGVzdF9pbmZvLnVy
aSwgdGVzdF9pbmZvLnRpbWVvdXQsIGltYWdlX2hhc2gpCisgICAgICAgIGVuZCA9IHRpbWUudGlt
ZSgpCisKKyAgICAgICAgc3RhdHMgPSBwcm9jZXNzX291dHB1dChzZWxmLl9wb3J0LCB0ZXN0X2lu
Zm8sIHNlbGYuX3Rlc3RfdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fdGVzdF9hcmdzLCBzZWxmLl9vcHRpb25zLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCBjcmFzaCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LCBlbmQgLSBzdGFydCwgYWN0dWFsX2No
ZWNrc3VtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgZXJyb3IpCiAK
ICAgICAgICAgc2VsZi5fdGVzdF9zdGF0cy5hcHBlbmQoc3RhdHMpCiAgICAgICAgIHJldHVybiBz
dGF0cy5mYWlsdXJlcwpAQCAtNDg5LDIzICs0MjksMTIgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFk
KHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICBydW5uaW5nIHRlc3RzIHNpbmdseSwgc2luY2Ug
dGhvc2UgZWFjaCBzdGFydCBhIHNlcGFyYXRlIHRlc3Qgc2hlbGwgaW4KICAgICAgICAgdGhlaXIg
b3duIHRocmVhZC4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIChub3Qgc2VsZi5fdGVzdF9zaGVs
bF9wcm9jIG9yCi0gICAgICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2MucG9sbCgpIGlzIG5v
dCBOb25lKToKLSAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYyA9IHN0YXJ0X3Rlc3Rf
c2hlbGwoc2VsZi5fdGVzdF9zaGVsbF9jb21tYW5kLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbF9hcmdzKQorICAgICAgICBp
ZiAobm90IHNlbGYuX2RyaXZlciBvciBzZWxmLl9kcml2ZXIucG9sbCgpIGlzIG5vdCBOb25lKToK
KyAgICAgICAgICAgIHNlbGYuX2RyaXZlciA9IHNlbGYuX3BvcnQuc3RhcnRfZHJpdmVyKAorICAg
ICAgICAgICAgICAgIHNlbGYuX2ltYWdlX3BhdGgsIHNlbGYuX3NoZWxsX2FyZ3MpCiAKICAgICBk
ZWYgX2tpbGxfdGVzdF9zaGVsbChzZWxmKToKICAgICAgICAgIiIiS2lsbCB0aGUgdGVzdCBzaGVs
bCBwcm9jZXNzIGlmIGl0J3MgcnVubmluZy4iIiIKLSAgICAgICAgaWYgc2VsZi5fdGVzdF9zaGVs
bF9wcm9jOgotICAgICAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnN0ZGluLmNsb3NlKCkK
LSAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRvdXQuY2xvc2UoKQotICAgICAg
ICAgICAgaWYgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBz
ZWxmLl90ZXN0X3NoZWxsX3Byb2Muc3RkZXJyLmNsb3NlKCkKLSAgICAgICAgICAgIGlmIChzeXMu
cGxhdGZvcm0gbm90IGluICgnd2luMzInLCAnY3lnd2luJykgYW5kCi0gICAgICAgICAgICAgICAg
bm90IHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5wb2xsKCkpOgotICAgICAgICAgICAgICAgICMgQ2xv
c2luZyBzdGRpbi9zdGRvdXQvc3RkZXJyIGhhbmdzIHNvbWV0aW1lcyBvbiBPUyBYLgotICAgICAg
ICAgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3IikKLSAgICAgICAgICAgICAgICBz
dWJwcm9jZXNzLlBvcGVuKFsia2lsbCIsICItOSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIoc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnBpZCldLCBzdGRlcnI9bnVsbCkKLSAg
ICAgICAgICAgICAgICBudWxsLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxf
cHJvYyA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fZHJpdmVyOgorICAgICAgICAgICAgc2VsZi5f
ZHJpdmVyLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2Uvd2Vic29ja2V0X3NlcnZlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHkKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDdmYzQ3YTAuLjAwMDAwMDAKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd2Vic29ja2V0X3NlcnZl
ci5weQorKysgL2Rldi9udWxsCkBAIC0xLDMxNiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRo
b24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0j
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMg
ZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiQSBjbGFzcyB0byBoZWxwIHN0YXJ0L3N0b3Ag
dGhlIFB5V2ViU29ja2V0IHNlcnZlciB1c2VkIGJ5IGxheW91dCB0ZXN0cy4iIiIKLQotCi1pbXBv
cnQgbG9nZ2luZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgb3MKLWltcG9ydCBzdWJwcm9jZXNz
Ci1pbXBvcnQgc3lzCi1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCB0aW1lCi1pbXBvcnQgdXJsbGli
Ci0KLWltcG9ydCBwYXRoX3V0aWxzCi1pbXBvcnQgcGxhdGZvcm1fdXRpbHMKLWltcG9ydCBodHRw
X3NlcnZlcgotCi1fV1NfTE9HX1BSRUZJWCA9ICdweXdlYnNvY2tldC53cy5sb2ctJwotX1dTU19M
T0dfUFJFRklYID0gJ3B5d2Vic29ja2V0Lndzcy5sb2ctJwotCi1fREVGQVVMVF9XU19QT1JUID0g
ODg4MAotX0RFRkFVTFRfV1NTX1BPUlQgPSA5MzIzCi0KLQotZGVmIHVybF9pc19hbGl2ZSh1cmwp
OgotICAiIiJDaGVja3MgdG8gc2VlIGlmIHdlIGdldCBhbiBodHRwIHJlc3BvbnNlIGZyb20gfHVy
bHwuCi0gIFdlIHBvbGwgdGhlIHVybCA1IHRpbWVzIHdpdGggYSAxIHNlY29uZCBkZWxheS4gIElm
IHdlIGRvbid0Ci0gIGdldCBhIHJlcGx5IGluIHRoYXQgdGltZSwgd2UgZ2l2ZSB1cCBhbmQgYXNz
dW1lIHRoZSBodHRwZAotICBkaWRuJ3Qgc3RhcnQgcHJvcGVybHkuCi0KLSAgQXJnczoKLSAgICB1
cmw6IFRoZSBVUkwgdG8gY2hlY2suCi0gIFJldHVybjoKLSAgICBUcnVlIGlmIHRoZSB1cmwgaXMg
YWxpdmUuCi0gICIiIgotICB3YWl0X3RpbWUgPSA1Ci0gIHdoaWxlIHdhaXRfdGltZSA+IDA6Ci0g
ICAgdHJ5OgotICAgICAgcmVzcG9uc2UgPSB1cmxsaWIudXJsb3Blbih1cmwpCi0gICAgICAjIFNl
cnZlciBpcyB1cCBhbmQgcmVzcG9uZGluZy4KLSAgICAgIHJldHVybiBUcnVlCi0gICAgZXhjZXB0
IElPRXJyb3I6Ci0gICAgICBwYXNzCi0gICAgd2FpdF90aW1lIC09IDEKLSAgICAjIFdhaXQgYSBz
ZWNvbmQgYW5kIHRyeSBhZ2Fpbi4KLSAgICB0aW1lLnNsZWVwKDEpCi0KLSAgcmV0dXJuIEZhbHNl
Ci0KLQotZGVmIHJlbW92ZV9sb2dfZmlsZXMoZm9sZGVyLCBzdGFydHNfd2l0aCk6Ci0gICAgZmls
ZXMgPSBvcy5saXN0ZGlyKGZvbGRlcikKLSAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAgICAg
aWYgZmlsZS5zdGFydHN3aXRoKHN0YXJ0c193aXRoKToKLSAgICAgICAgICAgIGZ1bGxfcGF0aCA9
IG9zLnBhdGguam9pbihmb2xkZXIsIGZpbGUpCi0gICAgICAgICAgICBvcy5yZW1vdmUoZnVsbF9w
YXRoKQotCi0KLWNsYXNzIFB5V2ViU29ja2V0Tm90U3RhcnRlZChFeGNlcHRpb24pOgotICAgIHBh
c3MKLQotCi1jbGFzcyBQeVdlYlNvY2tldE5vdEZvdW5kKEV4Y2VwdGlvbik6Ci0gICAgcGFzcwot
Ci0KLWNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKLQotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyLCBwb3J0PV9ERUZBVUxUX1dTX1BPUlQsCi0gICAgICAg
ICAgICAgICAgIHJvb3Q9Tm9uZSwKLSAgICAgICAgICAgICAgICAgdXNlX3Rscz1GYWxzZSwKLSAg
ICAgICAgICAgICAgICAgcHJpdmF0ZV9rZXk9aHR0cF9zZXJ2ZXIuTGlnaHR0cGQuX3BlbV9maWxl
LAotICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZT1odHRwX3NlcnZlci5MaWdodHRwZC5fcGVt
X2ZpbGUsCi0gICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2N5Z3dpbj1Ob25lLAotICAgICAgICAg
ICAgICAgICBwaWRmaWxlPU5vbmUpOgotICAgICAgICAiIiJBcmdzOgotICAgICAgICAgIG91dHB1
dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgZGlyZWN0
b3J5Ci0gICAgICAgICIiIgotICAgICAgICBodHRwX3NlcnZlci5MaWdodHRwZC5fX2luaXRfXyhz
ZWxmLCBvdXRwdXRfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b3J0PXBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Q9cm9v
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfY3lnd2lu
PXJlZ2lzdGVyX2N5Z3dpbikKLSAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIK
LSAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQK
LSAgICAgICAgc2VsZi5fcm9vdCA9IHJvb3QKLSAgICAgICAgc2VsZi5fdXNlX3RscyA9IHVzZV90
bHMKLSAgICAgICAgc2VsZi5fcHJpdmF0ZV9rZXkgPSBwcml2YXRlX2tleQotICAgICAgICBzZWxm
Ll9jZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlCi0gICAgICAgIGlmIHNlbGYuX3BvcnQ6Ci0gICAg
ICAgICAgICBzZWxmLl9wb3J0ID0gaW50KHNlbGYuX3BvcnQpCi0gICAgICAgIGlmIHNlbGYuX3Vz
ZV90bHM6Ci0gICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfbmFtZSA9ICdQeVdlYlNvY2tldChTZWN1
cmUpJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fc2VydmVyX25hbWUgPSAnUHlX
ZWJTb2NrZXQnCi0gICAgICAgIHNlbGYuX3BpZGZpbGUgPSBwaWRmaWxlCi0gICAgICAgIHNlbGYu
X3dzb3V0ID0gTm9uZQotCi0gICAgICAgICMgV2Via2l0IHRlc3RzCi0gICAgICAgIGlmIHNlbGYu
X3Jvb3Q6Ci0gICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHMgPSBvcy5wYXRoLmFic3BhdGgo
c2VsZi5fcm9vdCkKLSAgICAgICAgICAgIHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMgPSBvcy5wYXRo
LmFic3BhdGgoCi0gICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuX3Jvb3QsICd3ZWJz
b2NrZXQnLCAndGVzdHMnKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRyeToKLSAgICAg
ICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzID0gcGF0aF91dGlscy5wYXRoX2Zyb21f
YmFzZSgKLSAgICAgICAgICAgICAgICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdMYXlv
dXRUZXN0cycsICd3ZWJzb2NrZXQnLAotICAgICAgICAgICAgICAgICAgICAndGVzdHMnKQotICAg
ICAgICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0cyA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jh
c2UoCi0gICAgICAgICAgICAgICAgICAgICd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0
VGVzdHMnKQotICAgICAgICAgICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgotICAg
ICAgICAgICAgICAgIHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMgPSBOb25lCi0KLSAgICBkZWYgc3Rh
cnQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzOgotICAgICAg
ICAgICAgbG9nZ2luZy5pbmZvKCdObyBuZWVkIHRvIHN0YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5f
c2VydmVyX25hbWUpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgc2VsZi5pc19ydW5u
aW5nKCk6Ci0gICAgICAgICAgICByYWlzZSBQeVdlYlNvY2tldE5vdFN0YXJ0ZWQoJyVzIGlzIGFs
cmVhZHkgcnVubmluZy4nICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9zZXJ2ZXJfbmFtZSkKLQotICAgICAgICB0aW1lX3N0ciA9IHRpbWUuc3RyZnRpbWUo
JyVkJWIlWS0lSCVNJVMnKQotICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgotICAgICAgICAgICAg
bG9nX3ByZWZpeCA9IF9XU1NfTE9HX1BSRUZJWAotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
bG9nX3ByZWZpeCA9IF9XU19MT0dfUFJFRklYCi0gICAgICAgIGxvZ19maWxlX25hbWUgPSBsb2df
cHJlZml4ICsgdGltZV9zdHIKLQotICAgICAgICAjIFJlbW92ZSBvbGQgbG9nIGZpbGVzLiBXZSBv
bmx5IG5lZWQgdG8ga2VlcCB0aGUgbGFzdCBvbmVzLgotICAgICAgICByZW1vdmVfbG9nX2ZpbGVz
KHNlbGYuX291dHB1dF9kaXIsIGxvZ19wcmVmaXgpCi0KLSAgICAgICAgZXJyb3JfbG9nID0gb3Mu
cGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxlX25hbWUgKyAiLWVyci50eHQiKQot
Ci0gICAgICAgIG91dHB1dF9sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgbG9n
X2ZpbGVfbmFtZSArICItb3V0LnR4dCIpCi0gICAgICAgIHNlbGYuX3dzb3V0ID0gb3BlbihvdXRw
dXRfbG9nLCAidyIpCi0KLSAgICAgICAgcHl0aG9uX2ludGVycCA9IHN5cy5leGVjdXRhYmxlCi0g
ICAgICAgIHB5d2Vic29ja2V0X2Jhc2UgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKAotICAg
ICAgICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdXZWJLaXRUb29scycsICdweXdlYnNv
Y2tldCcpCi0gICAgICAgIHB5d2Vic29ja2V0X3NjcmlwdCA9IHBhdGhfdXRpbHMucGF0aF9mcm9t
X2Jhc2UoCi0gICAgICAgICAgICAndGhpcmRfcGFydHknLCAnV2ViS2l0JywgJ1dlYktpdFRvb2xz
JywgJ3B5d2Vic29ja2V0JywKLSAgICAgICAgICAgICdtb2RfcHl3ZWJzb2NrZXQnLCAnc3RhbmRh
bG9uZS5weScpCi0gICAgICAgIHN0YXJ0X2NtZCA9IFsKLSAgICAgICAgICAgIHB5dGhvbl9pbnRl
cnAsIHB5d2Vic29ja2V0X3NjcmlwdCwKLSAgICAgICAgICAgICctcCcsIHN0cihzZWxmLl9wb3J0
KSwKLSAgICAgICAgICAgICctZCcsIHNlbGYuX2xheW91dF90ZXN0cywKLSAgICAgICAgICAgICct
cycsIHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMsCi0gICAgICAgICAgICAnLWwnLCBlcnJvcl9sb2cs
Ci0gICAgICAgIF0KLQotICAgICAgICBoYW5kbGVyX21hcF9maWxlID0gb3MucGF0aC5qb2luKHNl
bGYuX3dlYl9zb2NrZXRfdGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2hhbmRsZXJfbWFwLnR4dCcpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGhhbmRs
ZXJfbWFwX2ZpbGUpOgotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnVXNpbmcgaGFuZGxlcl9t
YXBfZmlsZTogJXMnICUgaGFuZGxlcl9tYXBfZmlsZSkKLSAgICAgICAgICAgIHN0YXJ0X2NtZC5h
cHBlbmQoJy1tJykKLSAgICAgICAgICAgIHN0YXJ0X2NtZC5hcHBlbmQoaGFuZGxlcl9tYXBfZmls
ZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnTm8gaGFuZGxl
cl9tYXBfZmlsZSBmb3VuZCcpCi0KLSAgICAgICAgaWYgc2VsZi5fdXNlX3RsczoKLSAgICAgICAg
ICAgIHN0YXJ0X2NtZC5leHRlbmQoWyctdCcsICctaycsIHNlbGYuX3ByaXZhdGVfa2V5LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1jJywgc2VsZi5fY2VydGlmaWNhdGVdKQotCi0g
ICAgICAgICMgUHV0IHRoZSBjeWd3aW4gZGlyZWN0b3J5IGZpcnN0IGluIHRoZSBwYXRoIHRvIGZp
bmQgY3lnd2luMS5kbGwKLSAgICAgICAgZW52ID0gb3MuZW52aXJvbgotICAgICAgICBpZiBzeXMu
cGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKLSAgICAgICAgICAgIGVudlsnUEFUSCdd
ID0gJyVzOyVzJyAlICgKLSAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNl
KCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAnYmluJyksCi0gICAgICAgICAgICAgICAgZW52WydQ
QVRIJ10pCi0KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIHNlbGYuX3Jl
Z2lzdGVyX2N5Z3dpbjoKLSAgICAgICAgICAgIHNldHVwX21vdW50ID0gcGF0aF91dGlscy5wYXRo
X2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywKLSAgICAgICAgICAgICAgICAnc2V0
dXBfbW91bnQuYmF0JykKLSAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oc2V0dXBfbW91bnQp
LndhaXQoKQotCi0gICAgICAgIGVudlsnUFlUSE9OUEFUSCddID0gKHB5d2Vic29ja2V0X2Jhc2Ug
KyBvcy5wYXRoLnBhdGhzZXAgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYuZ2V0
KCdQWVRIT05QQVRIJywgJycpKQotCi0gICAgICAgIGxvZ2dpbmcuZGVidWcoJ1N0YXJ0aW5nICVz
IHNlcnZlciBvbiAlZC4nICUgKAotICAgICAgICAgICAgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYu
X3BvcnQpKQotICAgICAgICBsb2dnaW5nLmRlYnVnKCdjbWRsaW5lOiAlcycgJSAnICcuam9pbihz
dGFydF9jbWQpKQotICAgICAgICBzZWxmLl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzdGFy
dF9jbWQsIHN0ZG91dD1zZWxmLl93c291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQotCi0gICAgICAgICMgV2FpdCBhIGJpdCBi
ZWZvcmUgY2hlY2tpbmcgdGhlIGxpdmVuZXNzIG9mIHRoZSBzZXJ2ZXIuCi0gICAgICAgIHRpbWUu
c2xlZXAoMC41KQotCi0gICAgICAgIGlmIHNlbGYuX3VzZV90bHM6Ci0gICAgICAgICAgICB1cmwg
PSAnaHR0cHMnCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB1cmwgPSAnaHR0cCcKLSAgICAg
ICAgdXJsID0gdXJsICsgJzovLzEyNy4wLjAuMTolZC8nICUgc2VsZi5fcG9ydAotICAgICAgICBp
ZiBub3QgdXJsX2lzX2FsaXZlKHVybCk6Ci0gICAgICAgICAgICBmcCA9IG9wZW4ob3V0cHV0X2xv
ZykKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmcDoKLSAg
ICAgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihsaW5lKQotICAgICAgICAgICAgZmluYWxs
eToKLSAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICByYWlzZSBQeVdlYlNv
Y2tldE5vdFN0YXJ0ZWQoCi0gICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2
ZXIgb24gcG9ydCAlcy4nICUKLSAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3NlcnZlcl9uYW1l
LCBzZWxmLl9wb3J0KSkKLQotICAgICAgICAjIE91ciBwcm9jZXNzIHRlcm1pbmF0ZWQgYWxyZWFk
eQotICAgICAgICBpZiBzZWxmLl9wcm9jZXNzLnJldHVybmNvZGUgIT0gTm9uZToKLSAgICAgICAg
ICAgIHJhaXNlIFB5V2ViU29ja2V0Tm90U3RhcnRlZCgKLSAgICAgICAgICAgICAgICAnRmFpbGVk
IHRvIHN0YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5fc2VydmVyX25hbWUpCi0gICAgICAgIGlmIHNl
bGYuX3BpZGZpbGU6Ci0gICAgICAgICAgICBmID0gb3BlbihzZWxmLl9waWRmaWxlLCAndycpCi0g
ICAgICAgICAgICBmLndyaXRlKCIlZCIgJSBzZWxmLl9wcm9jZXNzLnBpZCkKLSAgICAgICAgICAg
IGYuY2xvc2UoKQotCi0gICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgotICAgICAgICBp
ZiBub3QgZm9yY2UgYW5kIG5vdCBzZWxmLmlzX3J1bm5pbmcoKToKLSAgICAgICAgICAgIHJldHVy
bgotCi0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAgICAgICBwaWQgPSBzZWxmLl9w
cm9jZXNzLnBpZAotICAgICAgICBlbGlmIHNlbGYuX3BpZGZpbGU6Ci0gICAgICAgICAgICBmID0g
b3BlbihzZWxmLl9waWRmaWxlKQotICAgICAgICAgICAgcGlkID0gaW50KGYucmVhZCgpLnN0cmlw
KCkpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICBpZiBub3QgcGlkOgotICAgICAg
ICAgICAgcmFpc2UgUHlXZWJTb2NrZXROb3RGb3VuZCgKLSAgICAgICAgICAgICAgICAnRmFpbGVk
IHRvIGZpbmQgJXMgc2VydmVyIHBpZC4nICUgc2VsZi5fc2VydmVyX25hbWUpCi0KLSAgICAgICAg
bG9nZ2luZy5kZWJ1ZygnU2h1dHRpbmcgZG93biAlcyBzZXJ2ZXIgJWQuJyAlIChzZWxmLl9zZXJ2
ZXJfbmFtZSwgcGlkKSkKLSAgICAgICAgcGxhdGZvcm1fdXRpbHMua2lsbF9wcm9jZXNzKHBpZCkK
LQotICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgotICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy53
YWl0KCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCi0KLSAgICAgICAgaWYgc2Vs
Zi5fd3NvdXQ6Ci0gICAgICAgICAgICBzZWxmLl93c291dC5jbG9zZSgpCi0gICAgICAgICAgICBz
ZWxmLl93c291dCA9IE5vbmUKLQotCi1pZiAnX19tYWluX18nID09IF9fbmFtZV9fOgotICAgICMg
UHJvdmlkZSBzb21lIGNvbW1hbmQgbGluZSBwYXJhbXMgZm9yIHN0YXJ0aW5nIHRoZSBQeVdlYlNv
Y2tldCBzZXJ2ZXIKLSAgICAjIG1hbnVhbGx5LgotICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJz
ZS5PcHRpb25QYXJzZXIoKQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1zZXJ2ZXIn
LCB0eXBlPSdjaG9pY2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsn
c3RhcnQnLCAnc3RvcCddLCBkZWZhdWx0PSdzdGFydCcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J1NlcnZlciBhY3Rpb24gKHN0YXJ0fHN0b3ApJykKLSAgICBvcHRpb25fcGFy
c2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcG9ydCcsIGRlc3Q9J3BvcnQnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsIGhlbHA9J1BvcnQgdG8gbGlzdGVuIG9uJykK
LSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1yJywgJy0tcm9vdCcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9J0Fic29sdXRlIHBhdGggdG8gRG9jdW1lbnRSb290ICcK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG92ZXJyaWRlcyBsYXlvdXQgdGVz
dCByb290cyknKQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10bHMnLCBk
ZXN0PSd1c2VfdGxzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9y
ZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVs
cD0ndXNlIFRMUyAod3NzOi8vKScpCi0gICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctaycs
ICctLXByaXZhdGVfa2V5JywgZGVzdD0ncHJpdmF0ZV9rZXknLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxwPSdUTFMgcHJpdmF0ZSBrZXkgZmlsZS4nKQotICAg
IG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLWMnLCAnLS1jZXJ0aWZpY2F0ZScsIGRlc3Q9J2Nl
cnRpZmljYXRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJywgaGVs
cD0nVExTIGNlcnRpZmljYXRlIGZpbGUuJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24o
Jy0tcmVnaXN0ZXJfY3lnd2luJywgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdD0icmVnaXN0ZXJfY3lnd2luIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0nUmVnaXN0ZXIgQ3lnd2luIHBhdGhzIChvbiBXaW4gdHJ5IGJvdHMp
JykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tcGlkZmlsZScsIGhlbHA9J3BhdGgg
dG8gcGlkIGZpbGUuJykKLSAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9h
cmdzKCkKLQotICAgIGlmIG5vdCBvcHRpb25zLnBvcnQ6Ci0gICAgICAgIGlmIG9wdGlvbnMudXNl
X3RsczoKLSAgICAgICAgICAgIG9wdGlvbnMucG9ydCA9IF9ERUZBVUxUX1dTU19QT1JUCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBvcHRpb25zLnBvcnQgPSBfREVGQVVMVF9XU19QT1JUCi0K
LSAgICBrd2RzID0geydwb3J0Jzogb3B0aW9ucy5wb3J0LCAndXNlX3Rscyc6IG9wdGlvbnMudXNl
X3Rsc30KLSAgICBpZiBvcHRpb25zLnJvb3Q6Ci0gICAgICAgIGt3ZHNbJ3Jvb3QnXSA9IG9wdGlv
bnMucm9vdAotICAgIGlmIG9wdGlvbnMucHJpdmF0ZV9rZXk6Ci0gICAgICAgIGt3ZHNbJ3ByaXZh
dGVfa2V5J10gPSBvcHRpb25zLnByaXZhdGVfa2V5Ci0gICAgaWYgb3B0aW9ucy5jZXJ0aWZpY2F0
ZToKLSAgICAgICAga3dkc1snY2VydGlmaWNhdGUnXSA9IG9wdGlvbnMuY2VydGlmaWNhdGUKLSAg
ICBrd2RzWydyZWdpc3Rlcl9jeWd3aW4nXSA9IG9wdGlvbnMucmVnaXN0ZXJfY3lnd2luCi0gICAg
aWYgb3B0aW9ucy5waWRmaWxlOgotICAgICAgICBrd2RzWydwaWRmaWxlJ10gPSBvcHRpb25zLnBp
ZGZpbGUKLQotICAgIHB5d2Vic29ja2V0ID0gUHlXZWJTb2NrZXQodGVtcGZpbGUuZ2V0dGVtcGRp
cigpLCAqKmt3ZHMpCi0KLSAgICBpZiAnc3RhcnQnID09IG9wdGlvbnMuc2VydmVyOgotICAgICAg
ICBweXdlYnNvY2tldC5zdGFydCgpCi0gICAgZWxzZToKLSAgICAgICAgcHl3ZWJzb2NrZXQuc3Rv
cChmb3JjZT1UcnVlKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9fX2luaXRfXy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYmZkZWE1NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvX19pbml0X18ucHkKQEAgLTAsMCArMSw1NyBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21p
dW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
Q2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlBvcnQt
c3BlY2lmaWMgZW50cnlwb2ludHMgZm9yIHRoZSBsYXlvdXQgdGVzdHMgdGVzdCBpbmZyYXN0cnVj
dHVyZS4iIiIKKworCitkZWYgZ2V0KHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgorICAg
ICIiIlJldHVybnMgYW4gb2JqZWN0IGltcGxlbWVudGluZyB0aGUgUG9ydCBpbnRlcmZhY2UuIElm
CisgICAgcG9ydF9uYW1lIGlzIE5vbmUsIHRoaXMgcm91dGluZSBhdHRlbXB0cyB0byBndWVzcyBh
dCB0aGUgbW9zdAorICAgIGFwcHJvcHJpYXRlIHBvcnQgb24gdGhpcyBwbGF0Zm9ybS4iIiIKKyAg
ICBwb3J0X3RvX3VzZSA9IHBvcnRfbmFtZQorICAgIGlmIHBvcnRfdG9fdXNlIGlzIE5vbmU6Cisg
ICAgICAgIHBvcnRfdG9fdXNlID0gJ2Nocm9taXVtLW1hYycKKworICAgIGlmIHBvcnRfdG9fdXNl
ID09ICd0ZXN0JzoKKyAgICAgICAgaW1wb3J0IHRlc3QKKyAgICAgICAgcmV0dXJuIHRlc3QuVGVz
dFBvcnQocG9ydF9uYW1lLCBvcHRpb25zKQorICAgIGVsaWYgcG9ydF90b191c2Uuc3RhcnRzd2l0
aCgnbWFjJyk6CisgICAgICAgIGltcG9ydCBtYWMKKyAgICAgICAgcmV0dXJuIG1hYy5NYWNQb3J0
KHBvcnRfbmFtZSwgb3B0aW9ucykKKyAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ2No
cm9taXVtLW1hYycpOgorICAgICAgICBpbXBvcnQgY2hyb21pdW1fbWFjCisgICAgICAgIHJldHVy
biBjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0KHBvcnRfbmFtZSwgb3B0aW9ucykKKyAgICBl
bGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLWxpbnV4Jyk6CisgICAgICAgIGlt
cG9ydCBjaHJvbWl1bV9saW51eAorICAgICAgICByZXR1cm4gY2hyb21pdW1fbGludXguQ2hyb21p
dW1MaW51eFBvcnQocG9ydF9uYW1lLCBvcHRpb25zKQorICAgIGVsaWYgcG9ydF90b191c2Uuc3Rh
cnR3aXRoKCdjaHJvbWl1bS13aW4nKToKKyAgICAgICAgaW1wb3J0IGNocm9taXVtX3dpbgorICAg
ICAgICByZXR1cm4gY2hyb21pdW1fd2luLkNocm9taXVtV2luUG9ydChwb3J0X25hbWUsIG9wdGlv
bnMpCisKKyAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCd1bnN1cHBvcnRlZCBwb3J0OiAl
cycgJSBwb3J0X25hbWUpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZTg5YWQKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNo
ZV9odHRwX3NlcnZlci5weQpAQCAtMCwwICsxLDIxOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRp
c3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkEgY2xhc3MgdG8gc3RhcnQvc3RvcCB0aGUgYXBh
Y2hlIGh0dHAgc2VydmVyIHVzZWQgYnkgbGF5b3V0IHRlc3RzLiIiIgorCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nl
c3MKK2ltcG9ydCBzeXMKKworaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKKworCitjbGFzcyBMYXlv
dXRUZXN0QXBhY2hlSHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG91dHB1dF9kaXIpOgorICAgICAgICAiIiJB
cmdzOgorICAgICAgICAgIHBvcnRfb2JqOiBoYW5kbGUgdG8gdGhlIHBsYXRmb3JtLXNwZWNpZmlj
IHJvdXRpbmVzCisgICAgICAgICAgb3V0cHV0X2RpcjogdGhlIGFic29sdXRlIHBhdGggdG8gdGhl
IGxheW91dCB0ZXN0IHJlc3VsdCBkaXJlY3RvcnkKKyAgICAgICAgIiIiCisgICAgICAgIGh0dHBf
c2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18oc2VsZiwgcG9ydF9vYmopCisgICAg
ICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAgIHNlbGYuX2h0dHBkX3By
b2MgPSBOb25lCisgICAgICAgIHBvcnRfb2JqLm1heWJlX21ha2VfZGlyZWN0b3J5KG91dHB1dF9k
aXIpCisKKyAgICAgICAgc2VsZi5tYXBwaW5ncyA9IFt7J3BvcnQnOiA4MDAwfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4MDgwfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICB7J3BvcnQnOiA4MDgxfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQz
LCAnc3NsY2VydCc6IFRydWV9XQorCisgICAgICAgICMgVGhlIHVwc3RyZWFtIC5jb25mIGZpbGUg
YXNzdW1lZCB0aGUgZXhpc3RlbmNlIG9mIC90bXAvV2ViS2l0IGZvcgorICAgICAgICAjIHBsYWNp
bmcgYXBhY2hlIGZpbGVzIGxpa2UgdGhlIGxvY2sgZmlsZSB0aGVyZS4KKyAgICAgICAgc2VsZi5f
cnVudGltZV9wYXRoID0gb3MucGF0aC5qb2luKCIvdG1wIiwgIldlYktpdCIpCisgICAgICAgIHBv
cnRfb2JqLm1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYuX3J1bnRpbWVfcGF0aCkKKworICAgICAg
ICAjIFRoZSBQSUQgcmV0dXJuZWQgd2hlbiBBcGFjaGUgaXMgc3RhcnRlZCBnb2VzIGF3YXkgKGR1
ZSB0byBkcm9wcGluZworICAgICAgICAjIHByaXZpbGVnZXM/KS4gVGhlIHByb3BlciBjb250cm9s
bGluZyBQSUQgaXMgd3JpdHRlbiB0byBhIGZpbGUgaW4gdGhlCisgICAgICAgICMgYXBhY2hlIHJ1
bnRpbWUgZGlyZWN0b3J5LgorICAgICAgICBzZWxmLl9waWRfZmlsZSA9IG9zLnBhdGguam9pbihz
ZWxmLl9ydW50aW1lX3BhdGgsICdodHRwZC5waWQnKQorCisgICAgICAgIHRlc3RfZGlyID0gc2Vs
Zi5fcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2RpcigpCisgICAgICAgIGpzX3Rlc3RfcmVzb3VyY2Vz
X2RpciA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4odGVzdF9kaXIsICJmYXN0IiwgImpzIiwKKyAg
ICAgICAgICAgICJyZXNvdXJjZXMiKQorICAgICAgICBtaW1lX3R5cGVzX3BhdGggPSBzZWxmLl9j
eWd3aW5fc2FmZV9qb2luKHRlc3RfZGlyLCAiaHR0cCIsICJjb25mIiwKKyAgICAgICAgICAgICJt
aW1lLnR5cGVzIikKKyAgICAgICAgY2VydF9maWxlID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbih0
ZXN0X2RpciwgImh0dHAiLCAiY29uZiIsCisgICAgICAgICAgICAid2Via2l0LWh0dHBkLnBlbSIp
CisgICAgICAgIGFjY2Vzc19sb2cgPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2luKG91dHB1dF9kaXIs
ICJhY2Nlc3NfbG9nLnR4dCIpCisgICAgICAgIGVycm9yX2xvZyA9IHNlbGYuX2N5Z3dpbl9zYWZl
X2pvaW4ob3V0cHV0X2RpciwgImVycm9yX2xvZy50eHQiKQorICAgICAgICBkb2N1bWVudF9yb290
ID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbih0ZXN0X2RpciwgImh0dHAiLCAidGVzdHMiKQorCisg
ICAgICAgIGV4ZWN1dGFibGUgPSBzZWxmLl9wb3J0X29iai5fcGF0aF90b19hcGFjaGUoKQorICAg
ICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKKyAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBzZWxm
Ll9nZXRfY3lnd2luX3BhdGgoZXhlY3V0YWJsZSkKKworICAgICAgICBjbWQgPSBbZXhlY3V0YWJs
ZSwKKyAgICAgICAgICAgICctZicsIHNlbGYuX2dldF9hcGFjaGVfY29uZmlnX2ZpbGVfcGF0aCh0
ZXN0X2Rpciwgb3V0cHV0X2RpciksCisgICAgICAgICAgICAnLUMnLCAiXCdEb2N1bWVudFJvb3Qg
JXNcJyIgJSBkb2N1bWVudF9yb290LAorICAgICAgICAgICAgJy1jJywgIlwnQWxpYXMgL2pzLXRl
c3QtcmVzb3VyY2VzICVzXCciICUganNfdGVzdF9yZXNvdXJjZXNfZGlyLAorICAgICAgICAgICAg
Jy1DJywgIlwnTGlzdGVuICVzXCciICUgIjEyNy4wLjAuMTo4MDAwIiwKKyAgICAgICAgICAgICct
QycsICJcJ0xpc3RlbiAlc1wnIiAlICIxMjcuMC4wLjE6ODA4MSIsCisgICAgICAgICAgICAnLWMn
LCAiXCdUeXBlc0NvbmZpZyBcIiVzXCJcJyIgJSBtaW1lX3R5cGVzX3BhdGgsCisgICAgICAgICAg
ICAnLWMnLCAiXCdDdXN0b21Mb2cgXCIlc1wiIGNvbW1vblwnIiAlIGFjY2Vzc19sb2csCisgICAg
ICAgICAgICAnLWMnLCAiXCdFcnJvckxvZyBcIiVzXCJcJyIgJSBlcnJvcl9sb2csCisgICAgICAg
ICAgICAnLUMnLCAiXCdVc2VyIFwiJXNcIlwnIiAlIG9zLmVudmlyb24uZ2V0KCJVU0VSTkFNRSIs
CisgICAgICAgICAgICAgICAgb3MuZW52aXJvbi5nZXQoIlVTRVIiLCAiIikpXQorCisgICAgICAg
IGlmIHNlbGYuX2lzX2N5Z3dpbigpOgorICAgICAgICAgICAgY3lnYmluID0gc2VsZi5fcG9ydF9v
YmouX3BhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLAorICAgICAgICAgICAg
ICAgICdiaW4nKQorICAgICAgICAgICAgIyBOb3QgZW50aXJlbHkgc3VyZSB3aHksIGJ1dCBmcm9t
IGN5Z3dpbiB3ZSBuZWVkIHRvIHJ1biB0aGUKKyAgICAgICAgICAgICMgaHR0cGQgY29tbWFuZCB0
aHJvdWdoIGJhc2guCisgICAgICAgICAgICBzZWxmLl9zdGFydF9jbWQgPSBbCisgICAgICAgICAg
ICAgICAgb3MucGF0aC5qb2luKGN5Z2JpbiwgJ2Jhc2guZXhlJyksCisgICAgICAgICAgICAgICAg
Jy1jJywKKyAgICAgICAgICAgICAgICAnUEFUSD0lcyAlcycgJSAoc2VsZi5fZ2V0X2N5Z3dpbl9w
YXRoKGN5Z2JpbiksICIgIi5qb2luKGNtZCkpLAorICAgICAgICAgICAgICBdCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAjIFRPRE8ob2phbik6IFdoZW4gd2UgZ2V0IGN5Z3dpbiB1c2luZyBB
cGFjaGUgMiwgdXNlIHNldCB0aGUKKyAgICAgICAgICAgICMgY2VydCBmaWxlIGZvciBjeWd3aW4g
YXMgd2VsbC4KKyAgICAgICAgICAgIGNtZC5leHRlbmQoWyctYycsICJcJ1NTTENlcnRpZmljYXRl
RmlsZSAlc1wnIiAlIGNlcnRfZmlsZV0pCisgICAgICAgICAgICAjIEpvaW4gdGhlIHN0cmluZyBo
ZXJlIHNvIHRoYXQgQ3lnd2luL1dpbmRvd3MgYW5kIE1hYy9MaW51eAorICAgICAgICAgICAgIyBj
YW4gdXNlIHRoZSBzYW1lIGNvZGUuIE90aGVyd2lzZSwgd2UgY291bGQgcmVtb3ZlIHRoZSBzaW5n
bGUKKyAgICAgICAgICAgICMgcXVvdGVzIGFib3ZlIGFuZCBrZWVwIGNtZCBhcyBhIHNlcXVlbmNl
LgorICAgICAgICAgICAgc2VsZi5fc3RhcnRfY21kID0gIiAiLmpvaW4oY21kKQorCisgICAgZGVm
IF9pc19jeWd3aW4oc2VsZik6CisgICAgICAgIHJldHVybiBzeXMucGxhdGZvcm0gaW4gKCJ3aW4z
MiIsICJjeWd3aW4iKQorCisgICAgZGVmIF9jeWd3aW5fc2FmZV9qb2luKHNlbGYsICpwYXJ0cyk6
CisgICAgICAgICIiIlJldHVybnMgYSBwbGF0Zm9ybSBhcHByb3ByaWF0ZSBwYXRoLiIiIgorICAg
ICAgICBwYXRoID0gb3MucGF0aC5qb2luKCpwYXJ0cykKKyAgICAgICAgaWYgc2VsZi5faXNfY3ln
d2luKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKHBhdGgpCisg
ICAgICAgIHJldHVybiBwYXRoCisKKyAgICBkZWYgX2dldF9jeWd3aW5fcGF0aChzZWxmLCBwYXRo
KToKKyAgICAgICAgIiIiQ29udmVydCBhIFdpbmRvd3MgcGF0aCB0byBhIGN5Z3dpbiBwYXRoLgor
CisgICAgICAgIFRoZSBjeWdwYXRoIHV0aWxpdHkgaW5zaXN0cyBvbiBjb252ZXJ0aW5nIHBhdGhz
IHRoYXQgaXQgdGhpbmtzIGFyZQorICAgICAgICBDeWd3aW4gcm9vdCBwYXRocyB0byB3aGF0IGl0
IHRoaW5rcyB0aGUgY29ycmVjdCByb290cyBhcmUuICBTbyBwYXRocworICAgICAgICBzdWNoIGFz
ICJDOlxiXHNsYXZlXHdlYmtpdC1yZWxlYXNlXGJ1aWxkXHRoaXJkX3BhcnR5XGN5Z3dpblxiaW4i
CisgICAgICAgIGFyZSBjb252ZXJ0ZWQgdG8gcGxhaW4gIi91c3IvYmluIi4gIFRvIGF2b2lkIHRo
aXMsIHdlCisgICAgICAgIGRvIHRoZSBjb252ZXJzaW9uIG1hbnVhbGx5LgorCisgICAgICAgIFRo
ZSBwYXRoIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFic29sdXRlIHBhdGgsIG9uIGFueSBkcml2ZS4K
KyAgICAgICAgIiIiCisgICAgICAgIGRyaXZlX3JlZ2V4cCA9IHJlLmNvbXBpbGUocicoW2Etel0p
OlsvXFxdJywgcmUuSUdOT1JFQ0FTRSkKKworICAgICAgICBkZWYgbG93ZXJfZHJpdmUobWF0Y2hv
YmopOgorICAgICAgICAgICAgcmV0dXJuICcvY3lnZHJpdmUvJXMvJyAlIG1hdGNob2JqLmdyb3Vw
KDEpLmxvd2VyKCkKKyAgICAgICAgcGF0aCA9IGRyaXZlX3JlZ2V4cC5zdWIobG93ZXJfZHJpdmUs
IHBhdGgpCisgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKQorCisgICAgZGVm
IF9nZXRfYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgoc2VsZiwgdGVzdF9kaXIsIG91dHB1dF9kaXIp
OgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBhcGFjaGUgY29uZmlnIGZpbGUg
dG8gdXNlLgorICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3RfZGlyOiBhYnNvbHV0ZSBwYXRo
IHRvIHRoZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkuCisgICAgICAgICAgb3V0cHV0X2RpcjogYWJz
b2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0cyBkaXJlY3RvcnkuCisgICAgICAg
ICIiIgorICAgICAgICBodHRwZF9jb25maWcgPSBzZWxmLl9wb3J0X29iai5fcGF0aF90b19hcGFj
aGVfY29uZmlnX2ZpbGUoKQorICAgICAgICBodHRwZF9jb25maWdfY29weSA9IG9zLnBhdGguam9p
bihvdXRwdXRfZGlyLCAiaHR0cGQuY29uZiIpCisgICAgICAgIGh0dHBkX2NvbmYgPSBvcGVuKGh0
dHBkX2NvbmZpZykucmVhZCgpCisgICAgICAgIGlmIHNlbGYuX2lzX2N5Z3dpbigpOgorICAgICAg
ICAgICAgIyBUaGlzIGlzIGEgZ3Jvc3MgaGFjaywgYnV0IGl0IGxldHMgdXMgdXNlIHRoZSB1cHN0
cmVhbSAuY29uZiBmaWxlCisgICAgICAgICAgICAjIGFuZCBvdXIgY2hlY2tlZCBpbiBjeWd3aW4u
IFRoaXMgdGVsbHMgdGhlIHNlcnZlciB0aGUgcm9vdAorICAgICAgICAgICAgIyBkaXJlY3Rvcnkg
dG8gbG9vayBpbiBmb3IgLnNvIG1vZHVsZXMuIEl0IHdpbGwgdXNlIHRoaXMgcGF0aAorICAgICAg
ICAgICAgIyBwbHVzIHRoZSByZWxhdGl2ZSBwYXRocyB0byB0aGUgLnNvIGZpbGVzIGxpc3RlZCBp
biB0aGUgLmNvbmYKKyAgICAgICAgICAgICMgZmlsZS4gV2UgaGF2ZSBhcGFjaGUvY3lnd2luIGNo
ZWNrZWQgaW50byBvdXIgdHJlZSBzbworICAgICAgICAgICAgIyBwZW9wbGUgZG9uJ3QgaGF2ZSB0
byBpbnN0YWxsIGl0IGludG8gdGhlaXIgY3lnd2luLgorICAgICAgICAgICAgY3lndXNyID0gc2Vs
Zi5fcG9ydF9vYmouX3BhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLAorICAg
ICAgICAgICAgICAgICd1c3InKQorICAgICAgICAgICAgaHR0cGRfY29uZiA9IGh0dHBkX2NvbmYu
cmVwbGFjZSgnU2VydmVyUm9vdCAiL3VzciInLAorICAgICAgICAgICAgICAgICdTZXJ2ZXJSb290
ICIlcyInICUgc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGN5Z3VzcikpCisKKyAgICAgICAgZiA9IG9w
ZW4oaHR0cGRfY29uZmlnX2NvcHksICd3YicpCisgICAgICAgIGYud3JpdGUoaHR0cGRfY29uZikK
KyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgaWYgc2VsZi5faXNfY3lnd2luKCk6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGh0dHBkX2NvbmZpZ19jb3B5KQor
ICAgICAgICByZXR1cm4gaHR0cGRfY29uZmlnX2NvcHkKKworICAgIGRlZiBfZ2V0X3ZpcnR1YWxf
aG9zdF9jb25maWcoc2VsZiwgZG9jdW1lbnRfcm9vdCwgcG9ydCwgc3NsPUZhbHNlKToKKyAgICAg
ICAgIiIiUmV0dXJucyBhIDxWaXJ0dWFsSG9zdD4gZGlyZWN0aXZlIGJsb2NrIGZvciBhbiBodHRw
ZC5jb25mIGZpbGUuCisgICAgICAgIEl0IHdpbGwgbGlzdGVuIHRvIDEyNy4wLjAuMSBvbiBlYWNo
IG9mIHRoZSBnaXZlbiBwb3J0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICdcbicuam9p
bigoJzxWaXJ0dWFsSG9zdCAxMjcuMC4wLjE6JXM+JyAlIHBvcnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICdEb2N1bWVudFJvb3QgJXMnICUgZG9jdW1lbnRfcm9vdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3NsIGFuZCAnU1NMRW5naW5lIE9uJyBvciAnJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgJzwvVmlydHVhbEhvc3Q+JywgJycpKQorCisgICAgZGVmIF9zdGFydF9o
dHRwZF9wcm9jZXNzKHNlbGYpOgorICAgICAgICAiIiJTdGFydHMgdGhlIGh0dHBkIHByb2Nlc3Mg
YW5kIHJldHVybnMgd2hldGhlciB0aGVyZSB3ZXJlIGVycm9ycy4iIiIKKyAgICAgICAgIyBVc2Ug
c2hlbGw9VHJ1ZSBiZWNhdXNlIHdlIGpvaW4gdGhlIGFyZ3VtZW50cyBpbnRvIGEgc3RyaW5nIGZv
cgorICAgICAgICAjIHRoZSBzYWtlIG9mIFdpbmRvdy9DeWd3aW4gYW5kIGl0IG5lZWRzIHF1b3Rp
bmcgdGhhdCBicmVha3MKKyAgICAgICAgIyBzaGVsbD1GYWxzZS4KKyAgICAgICAgc2VsZi5faHR0
cGRfcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5fc3RhcnRfY21kLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAor
ICAgICAgICAgICAgc2hlbGw9VHJ1ZSkKKyAgICAgICAgZXJyID0gc2VsZi5faHR0cGRfcHJvYy5z
dGRlcnIucmVhZCgpCisgICAgICAgIGlmIGxlbihlcnIpOgorICAgICAgICAgICAgbG9nZ2luZy5k
ZWJ1ZyhlcnIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUK
KworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgIiIiU3RhcnRzIHRoZSBhcGFjaGUgaHR0
cCBzZXJ2ZXIuIiIiCisgICAgICAgICMgU3RvcCBhbnkgY3VycmVudGx5IHJ1bm5pbmcgc2VydmVy
cy4KKyAgICAgICAgc2VsZi5zdG9wKCkKKworICAgICAgICBsb2dnaW5nLmRlYnVnKCJTdGFydGlu
ZyBhcGFjaGUgaHR0cCBzZXJ2ZXIiKQorICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2Fp
dF9mb3JfYWN0aW9uKHNlbGYuX3N0YXJ0X2h0dHBkX3Byb2Nlc3MpCisgICAgICAgIGlmIHNlcnZl
cl9zdGFydGVkOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiQXBhY2hlIHN0YXJ0ZWQuIFRl
c3RpbmcgcG9ydHMiKQorICAgICAgICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndhaXRfZm9y
X2FjdGlvbigKKyAgICAgICAgICAgICAgICBzZWxmLmlzX3NlcnZlcl9ydW5uaW5nX29uX2FsbF9w
b3J0cykKKworICAgICAgICBpZiBzZXJ2ZXJfc3RhcnRlZDoKKyAgICAgICAgICAgIGxvZ2dpbmcu
ZGVidWcoIlNlcnZlciBzdWNjZXNzZnVsbHkgc3RhcnRlZCIpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBzdGFydCBodHRwIHNlcnZlcicpCisK
KyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiU3RvcHMgdGhlIGFwYWNoZSBodHRwIHNl
cnZlci4iIiIKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU2h1dHRpbmcgZG93biBhbnkgcnVubmlu
ZyBodHRwIHNlcnZlcnMiKQorICAgICAgICBodHRwZF9waWQgPSBOb25lCisgICAgICAgIGlmIG9z
LnBhdGguZXhpc3RzKHNlbGYuX3BpZF9maWxlKToKKyAgICAgICAgICAgIGh0dHBkX3BpZCA9IGlu
dChvcGVuKHNlbGYuX3BpZF9maWxlKS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLl9wb3J0X29i
ai5fc2h1dF9kb3duX2h0dHBfc2VydmVyKGh0dHBkX3BpZCkKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWNkNDk4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBAIC0w
LDAgKzEsNjI2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhl
IEdvb2dsZSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQWJzdHJh
Y3QgYmFzZSBjbGFzcyBvZiBQb3J0LXNwZWNpZmljIGVudHJ5cG9pbnRzIGZvciB0aGUgbGF5b3V0
IHRlc3RzCit0ZXN0IGluZnJhc3RydWN0dXJlLiIiIgorCitpbXBvcnQgY2dpCitpbXBvcnQgZGlm
ZmxpYgoraW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQg
c3lzCisKK2ltcG9ydCBhcGFjaGVfaHR0cF9zZXJ2ZXIKK2ltcG9ydCBodHRwX3NlcnZlcgoraW1w
b3J0IHdlYnNvY2tldF9zZXJ2ZXIKKworIyBQeXRob24gYnVnIHdvcmthcm91bmQuICBTZWUgUG9y
dC53ZGlmZl90ZXh0KCkgZm9yIGFuIGV4cGxhbmF0aW9uLgorX3dkaWZmX2F2YWlsYWJsZSA9IFRy
dWUKKworCitjbGFzcyBQb3J0KG9iamVjdCk6CisgICAgIiIiQWJzdHJhY3QgY2xhc3MgZm9yIFBv
cnQtc3BlY2lmaWMgaG9va3MgZm9yIHRoZSBsYXlvdXRfdGVzdCBwYWNrYWdlLgorICAgICIiIgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgor
ICAgICAgICBzZWxmLl9uYW1lID0gcG9ydF9uYW1lCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBv
cHRpb25zCisgICAgICAgIHNlbGYuX2hlbHBlciA9IE5vbmUKKyAgICAgICAgc2VsZi5faHR0cF9z
ZXJ2ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIgPSBOb25lCisgICAg
ICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIgPSBOb25lCisKKyAgICBkZWYgYmFzZWxpbmVfcGF0
aChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJl
Y3RvcnkgdG8gc3RvcmUgbmV3IGJhc2VsaW5lcworICAgICAgICBpbiBmb3IgdGhpcyBwb3J0LiIi
IgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LmJhc2VsaW5lX3BhdGgn
KQorCisgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgorICAgICAgICAiIiJSZXR1
cm4gYSBsaXN0IG9mIGFic29sdXRlIHBhdGhzIHRvIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCB1bmRl
ciBmb3IKKyAgICAgICAgYmFzZWxpbmVzLiBUaGUgZGlyZWN0b3JpZXMgYXJlIHNlYXJjaGVkIGlu
IG9yZGVyLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LmJhc2Vs
aW5lX3NlYXJjaF9wYXRoJykKKworICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmKToKKyAgICAg
ICAgIiIiSWYgdGhlIHBvcnQgbmVlZHMgdG8gZG8gc29tZSBydW50aW1lIGNoZWNrcyB0byBlbnN1
cmUgdGhhdCB0aGUKKyAgICAgICAgdGVzdHMgY2FuIGJlIHJ1biBzdWNjZXNzZnVsbHksIHRoZXkg
c2hvdWxkIGJlIGRvbmUgaGVyZS4KKworICAgICAgICBSZXR1cm5zIHdoZXRoZXIgdGhlIHN5c3Rl
bSBpcyBwcm9wZXJseSBjb25maWd1cmVkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yKCdQb3J0LmNoZWNrX3N5c19kZXBzJykKKworICAgIGRlZiBjb21wYXJlX3RleHQoc2Vs
ZiwgYWN0dWFsX3RleHQsIGV4cGVjdGVkX3RleHQpOgorICAgICAgICAiIiJSZXR1cm4gd2hldGhl
ciBvciBub3QgdGhlIHR3byBzdHJpbmdzIGFyZSAqbm90KiBlcXVhbC4gVGhpcworICAgICAgICBy
b3V0aW5lIGlzIHVzZWQgdG8gZGlmZiB0ZXh0IG91dHB1dC4KKworICAgICAgICBXaGlsZSB0aGlz
IGlzIGEgZ2VuZXJpYyByb3V0aW5lLCB3ZSBpbmNsdWRlIGl0IGluIHRoZSBQb3J0CisgICAgICAg
IGludGVyZmFjZSBzbyB0aGF0IGl0IGNhbiBiZSBvdmVycmlkZW4gZm9yIHRlc3RpbmcgcHVycG9z
ZXMuIiIiCisgICAgICAgIHJldHVybiBhY3R1YWxfdGV4dCAhPSBleHBlY3RlZF90ZXh0CisKKyAg
ICBkZWYgZGlmZl9pbWFnZShzZWxmLCBhY3R1YWxfZmlsZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1l
LCBkaWZmX2ZpbGVuYW1lKToKKyAgICAgICAgIiIiQ29tcGFyZSB0d28gaW1hZ2UgZmlsZXMgYW5k
IHByb2R1Y2UgYSBkZWx0YSBpbWFnZSBmaWxlLgorCisgICAgICAgIFJldHVybiAxIGlmIHRoZSB0
d28gZmlsZXMgYXJlIGRpZmZlcmVudCwgMCBpZiB0aGV5IGFyZSB0aGUgc2FtZS4KKyAgICAgICAg
QWxzbyBwcm9kdWNlIGEgZGVsdGEgaW1hZ2Ugb2YgdGhlIHR3byBpbWFnZXMgYW5kIHdyaXRlIHRo
YXQgaW50bworICAgICAgICB8ZGlmZl9maWxlbmFtZXwuCisKKyAgICAgICAgV2hpbGUgdGhpcyBp
cyBhIGdlbmVyaWMgcm91dGluZSwgd2UgaW5jbHVkZSBpdCBpbiB0aGUgUG9ydAorICAgICAgICBp
bnRlcmZhY2Ugc28gdGhhdCBpdCBjYW4gYmUgb3ZlcnJpZGVuIGZvciB0ZXN0aW5nIHB1cnBvc2Vz
LiIiIgorICAgICAgICBleGVjdXRhYmxlID0gc2VsZi5fcGF0aF90b19pbWFnZV9kaWZmKCkKKyAg
ICAgICAgY21kID0gW2V4ZWN1dGFibGUsICctLWRpZmYnLCBhY3R1YWxfZmlsZW5hbWUsIGV4cGVj
dGVkX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgZGlmZl9maWxlbmFtZV0KKyAgICAgICAgcmVz
dWx0ID0gMQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNh
bGwoY21kKQorICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuZXJy
bm8gPT0gZXJybm8uRU5PRU5UIG9yIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTOgorICAgICAgICAg
ICAgICAgIF9jb21wYXJlX2F2YWlsYWJsZSA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAg
ICAgICAjIHdvcmsgYXJvdW5kIGEgcmFjZSBjb25kaXRpb24gaW4gUHl0aG9uIDIuNCdzIGltcGxl
bWVudGF0aW9uCisgICAgICAgICAgICAjIG9mIHN1YnByb2Nlc3MuUG9wZW4KKyAgICAgICAgICAg
IHBhc3MKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGRpZmZfdGV4dChzZWxmLCBh
Y3R1YWxfdGV4dCwgZXhwZWN0ZWRfdGV4dCwKKyAgICAgICAgICAgICAgICAgIGFjdHVhbF9maWxl
bmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUpOgorICAgICAgICAiIiJSZXR1cm5zIGEgc3RyaW5nIGNv
bnRhaW5pbmcgdGhlIGRpZmYgb2YgdGhlIHR3byB0ZXh0IHN0cmluZ3MKKyAgICAgICAgaW4gJ3Vu
aWZpZWQgZGlmZicgZm9ybWF0LgorCisgICAgICAgIFdoaWxlIHRoaXMgaXMgYSBnZW5lcmljIHJv
dXRpbmUsIHdlIGluY2x1ZGUgaXQgaW4gdGhlIFBvcnQKKyAgICAgICAgaW50ZXJmYWNlIHNvIHRo
YXQgaXQgY2FuIGJlIG92ZXJyaWRlbiBmb3IgdGVzdGluZyBwdXJwb3Nlcy4iIiIKKyAgICAgICAg
ZGlmZiA9IGRpZmZsaWIudW5pZmllZF9kaWZmKGV4cGVjdGVkX3RleHQuc3BsaXRsaW5lcyhUcnVl
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF90ZXh0LnNwbGl0
bGluZXMoVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Rl
ZF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9m
aWxlbmFtZSkKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oZGlmZikKKworICAgIGRlZiBleHBlY3Rl
ZF9iYXNlbGluZXMoc2VsZiwgZmlsZW5hbWUsIHN1ZmZpeCwgYWxsX2Jhc2VsaW5lcz1GYWxzZSk6
CisgICAgICAgICIiIkdpdmVuIGEgdGVzdCBuYW1lLCBmaW5kcyB3aGVyZSB0aGUgYmFzZWxpbmUg
cmVzdWx0cyBhcmUgbG9jYXRlZC4KKworICAgICAgICBBcmdzOgorICAgICAgICBmaWxlbmFtZTog
YWJzb2x1dGUgZmlsZW5hbWUgdG8gdGVzdCBmaWxlCisgICAgICAgIHN1ZmZpeDogZmlsZSBzdWZm
aXggb2YgdGhlIGV4cGVjdGVkIHJlc3VsdHMsIGluY2x1ZGluZyBkb3Q7IGUuZy4KKyAgICAgICAg
ICAgICcudHh0JyBvciAnLnBuZycuICBUaGlzIHNob3VsZCBub3QgYmUgTm9uZSwgYnV0IG1heSBi
ZSBhbiBlbXB0eQorICAgICAgICAgICAgc3RyaW5nLgorICAgICAgICBhbGxfYmFzZWxpbmVzOiBJ
ZiBUcnVlLCByZXR1cm4gYW4gb3JkZXJlZCBsaXN0IG9mIGFsbCBiYXNlbGluZSBwYXRocworICAg
ICAgICAgICAgZm9yIHRoZSBnaXZlbiBwbGF0Zm9ybS4gSWYgRmFsc2UsIHJldHVybiBvbmx5IHRo
ZSBmaXJzdCBvbmUuCisgICAgICAgIFJldHVybnMKKyAgICAgICAgYSBsaXN0IG9mICggcGxhdGZv
cm1fZGlyLCByZXN1bHRzX2ZpbGVuYW1lICksIHdoZXJlCisgICAgICAgICAgICBwbGF0Zm9ybV9k
aXIgLSBhYnMgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSByZXN1bHRzIHRyZWUgKG9yIHRlc3QKKyAg
ICAgICAgICAgICAgICB0cmVlKQorICAgICAgICAgICAgcmVzdWx0c19maWxlbmFtZSAtIHJlbGF0
aXZlIHBhdGggZnJvbSB0b3Agb2YgdHJlZSB0byB0aGUgcmVzdWx0cworICAgICAgICAgICAgICAg
IGZpbGUKKyAgICAgICAgICAgIChvcy5wYXRoLmpvaW4gb2YgdGhlIHR3byBnaXZlcyB5b3UgdGhl
IGZ1bGwgcGF0aCB0byB0aGUgZmlsZSwKKyAgICAgICAgICAgICAgICB1bmxlc3MgTm9uZSB3YXMg
cmV0dXJuZWQuKQorICAgICAgICBSZXR1cm4gdmFsdWVzIHdpbGwgYmUgaW4gdGhlIGZvcm1hdCBh
cHByb3ByaWF0ZSBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgcGxhdGZvcm0gKGUuZy4sICJcXCIg
Zm9yIHBhdGggc2VwYXJhdG9ycyBvbiBXaW5kb3dzKS4gSWYgdGhlIHJlc3VsdHMKKyAgICAgICAg
ZmlsZSBpcyBub3QgZm91bmQsIHRoZW4gTm9uZSB3aWxsIGJlIHJldHVybmVkIGZvciB0aGUgZGly
ZWN0b3J5LAorICAgICAgICBidXQgdGhlIGV4cGVjdGVkIHJlbGF0aXZlIHBhdGhuYW1lIHdpbGwg
c3RpbGwgYmUgcmV0dXJuZWQuCisKKyAgICAgICAgVGhpcyByb3V0aW5lIGlzIGdlbmVyaWMgYnV0
IGxpdmVzIGhlcmUgc2luY2UgaXQgaXMgdXNlZCBpbgorICAgICAgICBjb25qdW5jdGlvbiB3aXRo
IHRoZSBvdGhlciBiYXNlbGluZSBhbmQgZmlsZW5hbWUgcm91dGluZXMgdGhhdCBhcmUKKyAgICAg
ICAgcGxhdGZvcm0gc3BlY2lmaWMuCisgICAgICAgICIiIgorICAgICAgICB0ZXN0bmFtZSA9IG9z
LnBhdGguc3BsaXRleHQoc2VsZi5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSlbMF0K
KworICAgICAgICBiYXNlbGluZV9maWxlbmFtZSA9IHRlc3RuYW1lICsgJy1leHBlY3RlZCcgKyBz
dWZmaXgKKworICAgICAgICBiYXNlbGluZV9zZWFyY2hfcGF0aCA9IHNlbGYuYmFzZWxpbmVfc2Vh
cmNoX3BhdGgoKQorCisgICAgICAgIGJhc2VsaW5lcyA9IFtdCisgICAgICAgIGZvciBwbGF0Zm9y
bV9kaXIgaW4gYmFzZWxpbmVfc2VhcmNoX3BhdGg6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4
aXN0cyhvcy5wYXRoLmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpOgorICAg
ICAgICAgICAgICAgIGJhc2VsaW5lcy5hcHBlbmQoKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmls
ZW5hbWUpKQorCisgICAgICAgICAgICBpZiBub3QgYWxsX2Jhc2VsaW5lcyBhbmQgYmFzZWxpbmVz
OgorICAgICAgICAgICAgICAgIHJldHVybiBiYXNlbGluZXMKKworICAgICAgICAjIElmIGl0IHdh
c24ndCBmb3VuZCBpbiBhIHBsYXRmb3JtIGRpcmVjdG9yeSwgcmV0dXJuIHRoZSBleHBlY3RlZAor
ICAgICAgICAjIHJlc3VsdCBpbiB0aGUgdGVzdCBkaXJlY3RvcnksIGV2ZW4gaWYgbm8gc3VjaCBm
aWxlIGFjdHVhbGx5IGV4aXN0cy4KKyAgICAgICAgcGxhdGZvcm1fZGlyID0gc2VsZi5sYXlvdXRf
dGVzdHNfZGlyKCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBsYXRm
b3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKToKKyAgICAgICAgICAgIGJhc2VsaW5lcy5hcHBl
bmQoKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQorCisgICAgICAgIGlmIGJhc2Vs
aW5lczoKKyAgICAgICAgICAgIHJldHVybiBiYXNlbGluZXMKKworICAgICAgICByZXR1cm4gWyhO
b25lLCBiYXNlbGluZV9maWxlbmFtZSldCisKKyAgICBkZWYgZXhwZWN0ZWRfZmlsZW5hbWUoc2Vs
ZiwgZmlsZW5hbWUsIHN1ZmZpeCk6CisgICAgICAgICIiIkdpdmVuIGEgdGVzdCBuYW1lLCByZXR1
cm5zIGFuIGFic29sdXRlIHBhdGggdG8gaXRzIGV4cGVjdGVkIHJlc3VsdHMuCisKKyAgICAgICAg
SWYgbm8gZXhwZWN0ZWQgcmVzdWx0cyBhcmUgZm91bmQgaW4gYW55IG9mIHRoZSBzZWFyY2hlZCBk
aXJlY3RvcmllcywKKyAgICAgICAgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgdGVzdCBpdHNl
bGYgaXMgbG9jYXRlZCB3aWxsIGJlIHJldHVybmVkLgorICAgICAgICBUaGUgcmV0dXJuIHZhbHVl
IGlzIGluIHRoZSBmb3JtYXQgYXBwcm9wcmlhdGUgZm9yIHRoZSBwbGF0Zm9ybQorICAgICAgICAo
ZS5nLiwgIlxcIiBmb3IgcGF0aCBzZXBhcmF0b3JzIG9uIHdpbmRvd3MpLgorCisgICAgICAgIEFy
Z3M6CisgICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKKyAg
ICAgICAgc3VmZml4OiBmaWxlIHN1ZmZpeCBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cywgaW5jbHVk
aW5nIGRvdDsgZS5nLiAnLnR4dCcKKyAgICAgICAgICAgIG9yICcucG5nJy4gIFRoaXMgc2hvdWxk
IG5vdCBiZSBOb25lLCBidXQgbWF5IGJlIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAgcGxhdGZv
cm06IHRoZSBtb3N0LXNwZWNpZmljIGRpcmVjdG9yeSBuYW1lIHRvIHVzZSB0byBidWlsZCB0aGUK
KyAgICAgICAgICAgIHNlYXJjaCBsaXN0IG9mIGRpcmVjdG9yaWVzLCBlLmcuLCAnY2hyb21pdW0t
d2luJywgb3IKKyAgICAgICAgICAgICdjaHJvbWl1bS1tYWMtbGVvcGFyZCcgKHdlIGZvbGxvdyB0
aGUgV2ViS2l0IGZvcm1hdCkKKworICAgICAgICBUaGlzIHJvdXRpbmUgaXMgZ2VuZXJpYyBidXQg
aXMgaW1wbGVtZW50ZWQgaGVyZSB0byBsaXZlIGFsb25nc2lkZQorICAgICAgICB0aGUgb3RoZXIg
YmFzZWxpbmUgYW5kIGZpbGVuYW1lIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KKyAgICAgICAgIiIi
CisgICAgICAgIHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUgPSBzZWxmLmV4cGVjdGVk
X2Jhc2VsaW5lcygKKyAgICAgICAgICAgIGZpbGVuYW1lLCBzdWZmaXgpWzBdCisgICAgICAgIGlm
IHBsYXRmb3JtX2RpcjoKKyAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocGxhdGZvcm1f
ZGlyLCBiYXNlbGluZV9maWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxm
LmxheW91dF90ZXN0c19kaXIoKSwgYmFzZWxpbmVfZmlsZW5hbWUpCisKKyAgICBkZWYgZmlsZW5h
bWVfdG9fdXJpKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiQ29udmVydCBhIHRlc3QgZmls
ZSB0byBhIFVSSS4iIiIKKyAgICAgICAgTEFZT1VUVEVTVF9IVFRQX0RJUiA9ICJodHRwL3Rlc3Rz
LyIKKyAgICAgICAgTEFZT1VUVEVTVF9XRUJTT0NLRVRfRElSID0gIndlYnNvY2tldC90ZXN0cy8i
CisKKyAgICAgICAgcmVsYXRpdmVfcGF0aCA9IHNlbGYucmVsYXRpdmVfdGVzdF9maWxlbmFtZShm
aWxlbmFtZSkKKyAgICAgICAgcG9ydCA9IE5vbmUKKyAgICAgICAgdXNlX3NzbCA9IEZhbHNlCisK
KyAgICAgICAgaWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKExBWU9VVFRFU1RfSFRUUF9ESVIp
OgorICAgICAgICAgICAgIyBodHRwL3Rlc3RzLyBydW4gb2ZmIHBvcnQgODAwMCBhbmQgc3NsLyBv
ZmYgODQ0MworICAgICAgICAgICAgcmVsYXRpdmVfcGF0aCA9IHJlbGF0aXZlX3BhdGhbbGVuKExB
WU9VVFRFU1RfSFRUUF9ESVIpOl0KKyAgICAgICAgICAgIHBvcnQgPSA4MDAwCisgICAgICAgIGVs
aWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKExBWU9VVFRFU1RfV0VCU09DS0VUX0RJUik6Cisg
ICAgICAgICAgICAjIHdlYnNvY2tldC90ZXN0cy8gcnVuIG9mZiBwb3J0IDg4ODAgYW5kIDkzMjMK
KyAgICAgICAgICAgICMgTm90ZTogdGhlIHJvb3QgaXMgLywgbm90IHdlYnNvY2tldC90ZXN0cy8K
KyAgICAgICAgICAgIHBvcnQgPSA4ODgwCisKKyAgICAgICAgIyBNYWtlIGh0dHAvdGVzdHMvbG9j
YWwgcnVuIGFzIGxvY2FsIGZpbGVzLiBUaGlzIGlzIHRvIG1pbWljIHRoZQorICAgICAgICAjIGxv
Z2ljIGluIHJ1bi13ZWJraXQtdGVzdHMuCisgICAgICAgICMKKyAgICAgICAgIyBUT0RPKGRwcmFu
a2UpOiByZW1vdmUgdGhlIG1lZGlhIHJlZmVyZW5jZSBhbmQgdGhlIFNTTCByZWZlcmVuY2U/Cisg
ICAgICAgIGlmIChwb3J0IGFuZCBub3QgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKCJsb2NhbC8i
KSBhbmQKKyAgICAgICAgICAgIG5vdCByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoIm1lZGlhLyIp
KToKKyAgICAgICAgICAgIGlmIHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0aCgic3NsLyIpOgorICAg
ICAgICAgICAgICAgIHBvcnQgKz0gNDQzCisgICAgICAgICAgICAgICAgcHJvdG9jb2wgPSAiaHR0
cHMiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb3RvY29sID0gImh0dHAi
CisgICAgICAgICAgICByZXR1cm4gIiVzOi8vMTI3LjAuMC4xOiV1LyVzIiAlIChwcm90b2NvbCwg
cG9ydCwgcmVsYXRpdmVfcGF0aCkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3
aW4nLCAnd2luMzInKToKKyAgICAgICAgICAgIHJldHVybiAiZmlsZTovLy8iICsgc2VsZi5nZXRf
YWJzb2x1dGVfcGF0aChmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuICJmaWxlOi8vIiArIHNlbGYu
Z2V0X2Fic29sdXRlX3BhdGgoZmlsZW5hbWUpCisKKyAgICBkZWYgZ2V0X2Fic29sdXRlX3BhdGgo
c2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIHBhdGggaW4g
dW5peCBmb3JtYXQgZm9yIHRoZSBnaXZlbiBmaWxlbmFtZS4KKworICAgICAgICBUaGlzIHJvdXRp
bmUgZXhpc3RzIHNvIHRoYXQgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgdXNlIHVuaXggZmlsZW5hbWVz
CisgICAgICAgIGNhbiBjb252ZXJ0IGFjY29yZGluZ2x5LiIiIgorICAgICAgICByZXR1cm4gb3Mu
cGF0aC5hYnNwYXRoKGZpbGVuYW1lKQorCisgICAgZGVmIGxheW91dF90ZXN0c19kaXIoc2VsZik6
CisgICAgICAgICIiIlJldHVybiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBM
YXlvdXRUZXN0cyBkaXJlY3RvcnkuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9sYXlvdXRfdGVz
dHNfZGlyOgorICAgICAgICAgICAgYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykK
KyAgICAgICAgICAgIHdlYmtpdHRvb2xzX2RpciA9IGFic3BhdGhbMDphYnNwYXRoLmZpbmQoJ1dl
YktpdFRvb2xzJyldCisgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyID0gb3MucGF0
aC5qb2luKAorICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZSh3ZWJraXR0b29sc19kaXIp
LCAnTGF5b3V0VGVzdHMnKQorICAgICAgICByZXR1cm4gc2VsZi5fbGF5b3V0X3Rlc3RzX2Rpcgor
CisgICAgZGVmIG1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYsICpwYXRoKToKKyAgICAgICAgIiIi
Q3JlYXRlcyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9p
bigqcGF0aCkpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgaWYgZS5l
cnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBu
YW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHBvcnQgKGUuZy4s
ICdtYWMnLCAnY2hyb21pdW0td2luLXhwJykuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgaXMg
ZGlmZmVyZW50IGZyb20gdGhlIHRlc3RfcGxhdGZvcm1fbmFtZSgpLCB3aGljaAorICAgICAgICBt
YXkgYmUgZGlmZmVyZW50IChlLmcuLCAnd2luLXhwJyBpbnN0ZWFkIG9mICdjaHJvbWl1bS13aW4t
eHAnLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIG51bV9jb3Jlcyhz
ZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgY29yZXMvY3B1cyBhdmFpbGFi
bGUgb24gdGhpcyBtYWNoaW5lLgorCisgICAgICAgIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGRl
dGVybWluZSB0aGUgZGVmYXVsdCBhbW91bnQgb2YgcGFyYWxsZWxpc20KKyAgICAgICAgdXNlZCBi
eSBydW4tY2hyb21pdW0td2Via2l0LXRlc3RzLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yKCdQb3J0Lm51bV9jb3JlcycpCisKKyAgICBkZWYgcmVtb3ZlX2RpcmVjdG9yeShz
ZWxmLCAqcGF0aCk6CisgICAgICAgICIiIlJlY3Vyc2l2ZWx5IHJlbW92ZXMgYSBkaXJlY3Rvcnks
IGV2ZW4gaWYgaXQncyBtYXJrZWQgcmVhZC1vbmx5LgorCisgICAgICAgIFJlbW92ZSB0aGUgZGly
ZWN0b3J5IGxvY2F0ZWQgYXQgKnBhdGgsIGlmIGl0IGV4aXN0cy4KKworICAgICAgICBzaHV0aWwu
cm10cmVlKCkgZG9lc24ndCB3b3JrIG9uIFdpbmRvd3MgaWYgYW55IG9mIHRoZSBmaWxlcworICAg
ICAgICBvciBkaXJlY3RvcmllcyBhcmUgcmVhZC1vbmx5LCB3aGljaCBzdm4gcmVwb3NpdG9yaWVz
IGFuZAorICAgICAgICBzb21lIC5zdm4gZmlsZXMgYXJlLiAgV2UgbmVlZCB0byBiZSBhYmxlIHRv
IGZvcmNlIHRoZSBmaWxlcworICAgICAgICB0byBiZSB3cml0YWJsZSAoaS5lLiwgZGVsZXRhYmxl
KSBhcyB3ZSB0cmF2ZXJzZSB0aGUgdHJlZS4KKworICAgICAgICBFdmVuIHdpdGggYWxsIHRoaXMs
IFdpbmRvd3Mgc3RpbGwgc29tZXRpbWVzIGZhaWxzIHRvIGRlbGV0ZSBhIGZpbGUsCisgICAgICAg
IGNpdGluZyBhIHBlcm1pc3Npb24gZXJyb3IgKG1heWJlIHNvbWV0aGluZyB0byBkbyB3aXRoIGFu
dGl2aXJ1cworICAgICAgICBzY2FucyBvciBkaXNrIGluZGV4aW5nKS4gIFRoZSBiZXN0IHN1Z2dl
c3Rpb24gYW55IG9mIHRoZSB1c2VyCisgICAgICAgIGZvcnVtcyBoYWQgd2FzIHRvIHdhaXQgYSBi
aXQgYW5kIHRyeSBhZ2Fpbiwgc28gd2UgZG8gdGhhdCB0b28uCisgICAgICAgIEl0J3MgaGFuZC13
YXZpbmcsIGJ1dCBzb21ldGltZXMgaXQgd29ya3MuIDovCisgICAgICAgICIiIgorICAgICAgICBm
aWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oKnBhdGgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4
aXN0cyhmaWxlX3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd2luMzIgPSBG
YWxzZQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHdp
bjMyID0gVHJ1ZQorICAgICAgICAgICAgIyBTb21lIHBlb3BsZSBkb24ndCBoYXZlIHRoZSBBUElz
IGluc3RhbGxlZC4gSW4gdGhhdCBjYXNlIHdlJ2xsIGRvCisgICAgICAgICAgICAjIHdpdGhvdXQu
CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2luMzJhcGkgPSBfX2ltcG9ydF9f
KCd3aW4zMmFwaScpCisgICAgICAgICAgICAgICAgd2luMzJjb24gPSBfX2ltcG9ydF9fKCd3aW4z
MmNvbicpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAg
d2luMzIgPSBGYWxzZQorCisgICAgICAgICAgICBkZWYgcmVtb3ZlX3dpdGhfcmV0cnkocm1mdW5j
LCBwYXRoKToKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChwYXRoLCBzdGF0LlNfSVdSSVRFKQor
ICAgICAgICAgICAgICAgIGlmIHdpbjMyOgorICAgICAgICAgICAgICAgICAgICB3aW4zMmFwaS5T
ZXRGaWxlQXR0cmlidXRlcyhwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpbjMyY29uLkZJTEVfQVRUUklCVVRFX05PUk1BTCkKKyAgICAgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBybWZ1bmMocGF0aCkKKyAgICAg
ICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciwgZToKKyAgICAgICAgICAgICAgICAg
ICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQUNDRVM6CisgICAgICAgICAgICAgICAgICAgICAgICBy
YWlzZQorICAgICAgICAgICAgICAgICAgICBwcmludCAnRmFpbGVkIHRvIGRlbGV0ZSAlczogdHJ5
aW5nIGFnYWluJyAlIHJlcHIocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgw
LjEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBybWZ1bmMocGF0aCkKKyAgICAgICAgZWxz
ZToKKworICAgICAgICAgICAgZGVmIHJlbW92ZV93aXRoX3JldHJ5KHJtZnVuYywgcGF0aCk6Cisg
ICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcm1mdW5jKHBhdGgpCisKKyAgICAgICAgZm9yIHJvb3QsIGRp
cnMsIGZpbGVzIGluIG9zLndhbGsoZmlsZV9wYXRoLCB0b3Bkb3duPUZhbHNlKToKKyAgICAgICAg
ICAgICMgRm9yIFBPU0lYOiAgbWFraW5nIHRoZSBkaXJlY3Rvcnkgd3JpdGFibGUgZ3VhcmFudGVl
cworICAgICAgICAgICAgIyByZW1vdmFiaWxpdHkuIFdpbmRvd3Mgd2lsbCBpZ25vcmUgdGhlIG5v
bi1yZWFkLW9ubHkKKyAgICAgICAgICAgICMgYml0cyBpbiB0aGUgY2htb2QgdmFsdWUuCisgICAg
ICAgICAgICBvcy5jaG1vZChyb290LCAwNzcwKQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmls
ZXM6CisgICAgICAgICAgICAgICAgcmVtb3ZlX3dpdGhfcmV0cnkob3MucmVtb3ZlLCBvcy5wYXRo
LmpvaW4ocm9vdCwgbmFtZSkpCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBkaXJzOgorICAgICAg
ICAgICAgICAgIHJlbW92ZV93aXRoX3JldHJ5KG9zLnJtZGlyLCBvcy5wYXRoLmpvaW4ocm9vdCwg
bmFtZSkpCisKKyAgICAgICAgcmVtb3ZlX3dpdGhfcmV0cnkob3Mucm1kaXIsIGZpbGVfcGF0aCkK
KworICAgIGRlZiB0ZXN0X3BsYXRmb3JtX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9uYW1lCisKKyAgICBkZWYgcmVsYXRpdmVfdGVzdF9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSk6
CisgICAgICAgICIiIlJlbGF0aXZlIHVuaXgtc3R5bGUgcGF0aCBmb3IgYSBmaWxlbmFtZSB1bmRl
ciB0aGUgTGF5b3V0VGVzdHMKKyAgICAgICAgZGlyZWN0b3J5LiBGaWxlbmFtZXMgb3V0c2lkZSB0
aGUgTGF5b3V0VGVzdHMgZGlyZWN0b3J5IHNob3VsZCByYWlzZQorICAgICAgICBhbiBlcnJvci4i
IiIKKyAgICAgICAgcmV0dXJuIGZpbGVuYW1lW2xlbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSkg
KyAxOl0KKworICAgIGRlZiByZXN1bHRzX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgIiIiQWJz
b2x1dGUgcGF0aCB0byB0aGUgcGxhY2UgdG8gc3RvcmUgdGhlIHRlc3QgcmVzdWx0cy4iIiIKKyAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWQoJ1BvcnQucmVzdWx0c19kaXJlY3RvcnknKQorCisg
ICAgZGVmIHNldHVwX3Rlc3RfcnVuKHNlbGYpOgorICAgICAgICAiIiJUaGlzIHJvdXRpbmUgY2Fu
IGJlIG92ZXJyaWRkZW4gdG8gcGVyZm9ybSBhbnkgcG9ydC1zcGVjaWZpYworICAgICAgICB3b3Jr
IHRoYXQgc2hvdXVsZCBiZSBkb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSB0ZXN0IHJ1bi4iIiIK
KyAgICAgICAgcGFzcworCisgICAgZGVmIHNob3dfaHRtbF9yZXN1bHRzX2ZpbGUoc2VsZiwgcmVz
dWx0c19maWxlbmFtZSk6CisgICAgICAgICIiIlRoaXMgcm91dGluZSBzaG91bGQgZGlzcGxheSB0
aGUgSFRNTCBmaWxlIHBvaW50ZWQgYXQgYnkKKyAgICAgICAgcmVzdWx0c19maWxlbmFtZSBpbiBh
IHVzZXJzJyBicm93c2VyLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQ
b3J0LnNob3dfaHRtbF9yZXN1bHRzX2ZpbGUnKQorCisgICAgZGVmIHN0YXJ0X2RyaXZlcihzZWxm
LCBwbmdfcGF0aCwgb3B0aW9ucyk6CisgICAgICAgICIiIlN0YXJ0cyBhIG5ldyB0ZXN0IERyaXZl
ciBhbmQgcmV0dXJucyBhIGhhbmRsZSB0byB0aGUgb2JqZWN0LiIiIgorICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LnN0YXJ0X2RyaXZlcicpCisKKyAgICBkZWYgc3RhcnRf
aGVscGVyKHNlbGYpOgorICAgICAgICAiIiJTdGFydCBhIGxheW91dCB0ZXN0IGhlbHBlciBpZiBu
ZWVkZWQgb24gdGhpcyBwb3J0LiBUaGUgdGVzdCBoZWxwZXIKKyAgICAgICAgaXMgdXNlZCB0byBy
ZWNvbmZpZ3VyZSBncmFwaGljcyBzZXR0aW5ncyBhbmQgZG8gb3RoZXIgdGhpbmdzIHRoYXQKKyAg
ICAgICAgbWF5IGJlIG5lY2Vzc2FyeSB0byBlbnN1cmUgYSBrbm93biB0ZXN0IGNvbmZpZ3VyYXRp
b24uIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQuc3RhcnRfaGVs
cGVyJykKKworICAgIGRlZiBzdGFydF9odHRwX3NlcnZlcihzZWxmKToKKyAgICAgICAgIiIiU3Rh
cnQgYSB3ZWIgc2VydmVyIGlmIGl0IGlzIGF2YWlsYWJsZS4gRG8gbm90aGluZyBpZgorICAgICAg
ICBpdCBpc24ndC4gVGhpcyByb3V0aW5lIGlzIGFsbG93ZWQgdG8gKGFuZCBtYXkpIGZhaWwgaWYg
YSBzZXJ2ZXIKKyAgICAgICAgaXMgYWxyZWFkeSBydW5uaW5nLiIiIgorICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLnVzZV9hcGFjaGU6CisgICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9IGFw
YWNoZV9odHRwX3NlcnZlci5MYXlvdXRUZXN0QXBhY2hlSHR0cGQoc2VsZiwKKyAgICAgICAgICAg
ICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIgPSBodHRwX3NlcnZlci5MaWdodHRwZChzZWxmLAor
ICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgICAg
IHNlbGYuX2h0dHBfc2VydmVyLnN0YXJ0KCkKKworICAgIGRlZiBzdGFydF93ZWJzb2NrZXRfc2Vy
dmVyKHNlbGYpOgorICAgICAgICAiIiJTdGFydCBhIHdlYnNvY2tldCBzZXJ2ZXIgaWYgaXQgaXMg
YXZhaWxhYmxlLiBEbyBub3RoaW5nIGlmCisgICAgICAgIGl0IGlzbid0LiBUaGlzIHJvdXRpbmUg
aXMgYWxsb3dlZCB0byAoYW5kIG1heSkgZmFpbCBpZiBhIHNlcnZlcgorICAgICAgICBpcyBhbHJl
YWR5IHJ1bm5pbmcuIiIiCisgICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIgPSB3ZWJzb2Nr
ZXRfc2VydmVyLlB5V2ViU29ja2V0KHNlbGYsCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJl
c3VsdHNfZGlyZWN0b3J5KQorICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyLnN0YXJ0KCkK
KworICAgIGRlZiBzdG9wX2hlbHBlcihzZWxmKToKKyAgICAgICAgIiIiU2h1dCBkb3duIHRoZSB0
ZXN0IGhlbHBlciBpZiBpdCBpcyBydW5uaW5nLiBEbyBub3RoaW5nIGlmCisgICAgICAgIGl0IGlz
bid0LCBvciBpdCBpc24ndCBhdmFpbGFibGUuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IoJ1BvcnQuc3RvcF9oZWxwZXInKQorCisgICAgZGVmIHN0b3BfaHR0cF9zZXJ2ZXIo
c2VsZik6CisgICAgICAgICIiIlNodXQgZG93biB0aGUgaHR0cCBzZXJ2ZXIgaWYgaXQgaXMgcnVu
bmluZy4gRG8gbm90aGluZyBpZgorICAgICAgICBpdCBpc24ndCwgb3IgaXQgaXNuJ3QgYXZhaWxh
YmxlLiIiIgorICAgICAgICBpZiBzZWxmLl9odHRwX3NlcnZlcjoKKyAgICAgICAgICAgIHNlbGYu
X2h0dHBfc2VydmVyLnN0b3AoKQorCisgICAgZGVmIHN0b3Bfd2Vic29ja2V0X3NlcnZlcihzZWxm
KToKKyAgICAgICAgIiIiU2h1dCBkb3duIHRoZSB3ZWJzb2NrZXQgc2VydmVyIGlmIGl0IGlzIHJ1
bm5pbmcuIERvIG5vdGhpbmcgaWYKKyAgICAgICAgaXQgaXNuJ3QsIG9yIGl0IGlzbid0IGF2YWls
YWJsZS4iIiIKKyAgICAgICAgaWYgc2VsZi5fd2Vic29ja2V0X3NlcnZlcjoKKyAgICAgICAgICAg
IHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF9leHBlY3RhdGlv
bnMoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIHRlc3QgZXhwZWN0YXRpb25zIGZvciB0
aGlzIHBvcnQuCisKKyAgICAgICAgQmFzaWNhbGx5IHRoaXMgc3RyaW5nIHNob3VsZCBjb250YWlu
IHRoZSBlcXVpdmFsZW50IG9mIGEKKyAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMgZmlsZS4gU2Vl
IHRlc3RfZXhwZWN0YXRpb25zLnB5IGZvciBtb3JlIGRldGFpbHMuIiIiCisgICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQudGVzdF9leHBlY3RhdGlvbnMnKQorCisgICAgZGVm
IHRlc3RfYmFzZV9wbGF0Zm9ybV9uYW1lcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbGlz
dCBvZiB0aGUgJ2Jhc2UnIHBsYXRmb3JtcyBvbiB5b3VyIHBvcnQuIFRoZSBiYXNlCisgICAgICAg
IHBsYXRmb3JtcyByZXByZXNlbnQgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMsIG9wZXJhdGluZyBz
eXN0ZW1zLAorICAgICAgICBvciBpbXBsZW1lbnRhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZGlmZmVy
ZW50IHZlcnNpb25zIG9mIGEgc2luZ2xlCisgICAgICAgIHBsYXRmb3JtKS4gRm9yIGV4YW1wbGUs
ICdtYWMnIGFuZCAnd2luJyBtaWdodCBiZSBkaWZmZXJlbnQgYmFzZQorICAgICAgICBwbGF0Zm9y
bXMsIHdoZXJlYXNlICdtYWMtdGlnZXInIGFuZCAnbWFjLWxlb3BhcmQnIG1pZ2h0IGJlCisgICAg
ICAgIGRpZmZlcmVudCBwbGF0Zm9ybXMuIFRoaXMgcm91dGluZSBpcyB1c2VkIGJ5IHRoZSByZWJh
c2VsaW5pbmcgdG9vbAorICAgICAgICBhbmQgdGhlIGRhc2hib2FyZHMsIGFuZCB0aGUgc3RyaW5n
cyBjb3JyZXNwb25kIHRvIHRoZSBpZGVudGlmaWVycworICAgICAgICBpbiB5b3VyIHRlc3QgZXhw
ZWN0YXRpb25zICgqbm90KiBuZWNlc3NhcmlseSB0aGUgcGxhdGZvcm0gbmFtZXMKKyAgICAgICAg
dGhlbXNlbHZlcykuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQu
YmFzZV90ZXN0X3BsYXRmb3JtcycpCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1lKHNlbGYp
OgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUg
Z2l2ZW4gcGxhdGZvcm0gbmFtZQorICAgICAgICBpbiB0aGUgdGVzdCBleHBlY3RhdGlvbnMuIFRo
aXMgbWF5IGJlIHRoZSBzYW1lIGFzIG5hbWUoKSwgb3IgaXQKKyAgICAgICAgbWF5IGJlIGRpZmZl
cmVudC4gRm9yIGV4YW1wbGUsIGNocm9taXVtIHJldHVybnMgJ21hYycgZm9yCisgICAgICAgICdj
aHJvbWl1bS1tYWMnLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0
LnRlc3RfcGxhdGZvcm1fbmFtZScpCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybXMoc2VsZik6Cisg
ICAgICAgICIiIlJldHVybnMgdGhlIGxpc3Qgb2YgdGVzdCBwbGF0Zm9ybSBpZGVudGlmaWVycyBh
cyB1c2VkIGluIHRoZQorICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucyBhbmQgb24gZGFzaGJvYXJk
cywgdGhlIHJlYmFzZWxpbmluZyB0b29sLCBldGMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMg
aXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBsaXN0IG9mIHBvcnRzLAorICAgICAg
ICB3aGljaCBtdXN0IGJlIGdsb2JhbGx5IHVuaXF1ZSAoZS5nLiwgYm90aCAnY2hyb21pdW0tbWFj
JyBhbmQgJ21hYycKKyAgICAgICAgbWlnaHQgcmV0dXJuICdtYWMnIGFzIGEgdGVzdF9wbGF0Zm9y
bSBuYW1lJy4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5wbGF0
Zm9ybXMnKQorCisgICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAgICIiIlJldHVybnMgYSBz
dHJpbmcgaW5kaWNhdGluZyB0aGUgdmVyc2lvbiBvZiBhIGdpdmVuIHBsYXRmb3JtLCBlLmcuCisg
ICAgICAgICctbGVvcGFyZCcgb3IgJy14cCcuCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIHRvIGhl
bHAgaWRlbnRpZnkgdGhlIGV4YWN0IHBvcnQgd2hlbiBwYXJzaW5nIHRlc3QKKyAgICAgICAgZXhw
ZWN0YXRpb25zLCBkZXRlcm1pbmluZyBzZWFyY2ggcGF0aHMsIGFuZCBsb2dnaW5nIGluZm9ybWF0
aW9uLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LnZlcnNpb24n
KQorCisgICAgZGVmIHdkaWZmX3RleHQoc2VsZiwgYWN0dWFsX2ZpbGVuYW1lLCBleHBlY3RlZF9m
aWxlbmFtZSk6CisgICAgICAgICIiIlJldHVybnMgYSBzdHJpbmcgb2YgSFRNTCBpbmRpY2F0aW5n
IHRoZSB3b3JkLWxldmVsIGRpZmYgb2YgdGhlCisgICAgICAgIGNvbnRlbnRzIG9mIHRoZSB0d28g
ZmlsZW5hbWVzLiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB3b3JkLWxldmVsCisgICAgICAg
IGRpZmZpbmcgaXNuJ3QgYXZhaWxhYmxlLiIiIgorICAgICAgICBleGVjdXRhYmxlID0gc2VsZi5f
cGF0aF90b193ZGlmZigpCisgICAgICAgIGNtZCA9IFtleGVjdXRhYmxlLAorICAgICAgICAgICAg
ICAgJy0tc3RhcnQtZGVsZXRlPSMjV0RJRkZfREVMIyMnLAorICAgICAgICAgICAgICAgJy0tZW5k
LWRlbGV0ZT0jI1dESUZGX0VORCMjJywKKyAgICAgICAgICAgICAgICctLXN0YXJ0LWluc2VydD0j
I1dESUZGX0FERCMjJywKKyAgICAgICAgICAgICAgICctLWVuZC1pbnNlcnQ9IyNXRElGRl9FTkQj
IycsCisgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgIGFj
dHVhbF9maWxlbmFtZV0KKyAgICAgICAgZ2xvYmFsIF93ZGlmZl9hdmFpbGFibGUKKyAgICAgICAg
cmVzdWx0ID0gJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBQeXRob24ncyBQb3BlbiBo
YXMgYSBidWcgdGhhdCBjYXVzZXMgYW55IHBpcGVzIG9wZW5lZCB0byBhCisgICAgICAgICAgICAj
IHByb2Nlc3MgdGhhdCBjYW4ndCBiZSBleGVjdXRlZCB0byBiZSBsZWFrZWQuICBTaW5jZSB0aGlz
CisgICAgICAgICAgICAjIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHRvbGVyYXRl
IGV4ZWMgZmFpbHVyZXMKKyAgICAgICAgICAgICMgdG8gZ3JhY2VmdWxseSBoYW5kbGUgY2FzZXMg
d2hlcmUgd2RpZmYgaXMgbm90IGluc3RhbGxlZCwKKyAgICAgICAgICAgICMgdGhlIGJ1ZyByZXN1
bHRzIGluIGEgbWFzc2l2ZSBmaWxlIGRlc2NyaXB0b3IgbGVhay4gQXMgYQorICAgICAgICAgICAg
IyB3b3JrYXJvdW5kLCBpZiBhbiBleGVjIGZhaWx1cmUgaXMgZXZlciBleHBlcmllbmNlZCBmb3IK
KyAgICAgICAgICAgICMgd2RpZmYsIGFzc3VtZSBpdCdzIG5vdCBhdmFpbGFibGUuICBUaGlzIHdp
bGwgbGVhayBvbmUKKyAgICAgICAgICAgICMgZmlsZSBkZXNjcmlwdG9yIGJ1dCB0aGF0J3MgYmV0
dGVyIHRoYW4gbGVha2luZyBlYWNoIHRpbWUKKyAgICAgICAgICAgICMgd2RpZmYgd291bGQgYmUg
cnVuLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBodHRwOi8vbWFpbC5weXRob24ub3Jn
L3BpcGVybWFpbC9weXRob24tbGlzdC8KKyAgICAgICAgICAgICMgICAgMjAwOC1BdWd1c3QvNTA1
NzUzLmh0bWwKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTMyMTAK
KyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSXQgYWxzbyBoYXMgYSB0aHJlYWRpbmcgYnVn
LCBzbyB3ZSBkb24ndCBvdXRwdXQgd2RpZmYgaWYKKyAgICAgICAgICAgICMgdGhlIFBvcGVuIHJh
aXNlcyBhIFZhbHVlRXJyb3IuCisgICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcv
aXNzdWUxMjM2CisgICAgICAgICAgICBpZiBfd2RpZmZfYXZhaWxhYmxlOgorICAgICAgICAgICAg
ICAgIHdkaWZmID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsCisgICAgICAgICAgICAgICAgICAgIHN0
ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgICAgICB3
ZGlmZiA9IGNnaS5lc2NhcGUod2RpZmYpCisgICAgICAgICAgICAgICAgd2RpZmYgPSB3ZGlmZi5y
ZXBsYWNlKCcjI1dESUZGX0RFTCMjJywgJzxzcGFuIGNsYXNzPWRlbD4nKQorICAgICAgICAgICAg
ICAgIHdkaWZmID0gd2RpZmYucmVwbGFjZSgnIyNXRElGRl9BREQjIycsICc8c3BhbiBjbGFzcz1h
ZGQ+JykKKyAgICAgICAgICAgICAgICB3ZGlmZiA9IHdkaWZmLnJlcGxhY2UoJyMjV0RJRkZfRU5E
IyMnLCAnPC9zcGFuPicpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJzxoZWFkPjxzdHlsZT4u
ZGVsIHsgYmFja2dyb3VuZDogI2ZhYTsgfSAnCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcu
YWRkIHsgYmFja2dyb3VuZDogI2FmYTsgfTwvc3R5bGU+PC9oZWFkPicKKyAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gJzxwcmU+JyArIHdkaWZmICsgJzwvcHJlPicKKyAgICAgICAgZXhjZXB0IE9T
RXJyb3IsIGU6CisgICAgICAgICAgICBpZiAoZS5lcnJubyA9PSBlcnJuby5FTk9FTlQgb3IgZS5l
cnJubyA9PSBlcnJuby5FQUNDRVMgb3IKKyAgICAgICAgICAgICAgICBlLmVycm5vID09IGVycm5v
LkVDSElMRCk6CisgICAgICAgICAgICAgICAgX3dkaWZmX2F2YWlsYWJsZSA9IEZhbHNlCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgcmV0dXJuIHJl
c3VsdAorCisgICAgIworICAgICMgUFJPVEVDVEVEIFJPVVRJTkVTCisgICAgIworICAgICMgVGhl
IHJvdXRpbmVzIGJlbG93IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSByb3V0aW5lcyBpbiB0aGlz
IGNsYXNzCisgICAgIyBvciBhbnkgb2YgaXRzIHN1YmNsYXNzZXMuCisgICAgIworCisgICAgZGVm
IF9raWxsX3Byb2Nlc3Moc2VsZiwgcGlkKToKKyAgICAgICAgIiIiRm9yY2VmdWxseSBraWxsIGEg
cHJvY2Vzcy4KKworICAgICAgICBUaGlzIHJvdXRpbmUgc2hvdWxkIG5vdCBiZSB1c2VkIG9yIG5l
ZWRlZCBnZW5lcmljYWxseSwgYnV0IGNhbiBiZQorICAgICAgICB1c2VkIGluIGhlbHBlciBmaWxl
cyBsaWtlIGh0dHBfc2VydmVyLnB5LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yKCdQb3J0LmtpbGxfcHJvY2VzcycpCisKKyAgICBkZWYgX3BhdGhfdG9fYXBhY2hlKHNlbGYp
OgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGFwYWNoZSBiaW5hcnku
CisKKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgb25seSBieSBwb3J0cyB0aGF0IHVzZSB0aGUgYXBh
Y2hlX2h0dHBfc2VydmVyIG1vZHVsZS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF
cnJvcignUG9ydC5wYXRoX3RvX2FwYWNoZScpCisKKyAgICBkZWYgX3BhdGhfdG9fYXBhY2hlX2Nv
bmZpZ19maWxlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhl
IGFwYWNoZSBiaW5hcnkuCisKKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgb25seSBieSBwb3J0cyB0
aGF0IHVzZSB0aGUgYXBhY2hlX2h0dHBfc2VydmVyIG1vZHVsZS4iIiIKKyAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5wYXRoX3RvX2FwYWNoZV9jb25maWdfZmlsZScpCisK
KyAgICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBm
dWxsIHBhdGggdG8gdGhlIHRlc3QgZHJpdmVyIChEdW1wUmVuZGVyVHJlZSkuIiIiCisgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQucGF0aF90b19kcml2ZXInKQorCisgICAg
ZGVmIF9wYXRoX3RvX2hlbHBlcihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBw
YXRoIHRvIHRoZSBsYXlvdXRfdGVzdF9oZWxwZXIgYmluYXJ5LCB3aGljaAorICAgICAgICBpcyB1
c2VkIHRvIGhlbHAgY29uZmlndXJlIHRoZSBzeXN0ZW0gZm9yIHRoZSB0ZXN0IHJ1biwgb3IgTm9u
ZQorICAgICAgICBpZiBubyBoZWxwZXIgaXMgbmVlZGVkLgorCisgICAgICAgIFRoaXMgaXMgbGlr
ZWx5IG9ubHkgdXNlZCBieSBzdGFydC9zdG9wX2hlbHBlcigpLiIiIgorICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0Ll9wYXRoX3RvX2hlbHBlcicpCisKKyAgICBkZWYgX3Bh
dGhfdG9faW1hZ2VfZGlmZihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRo
IHRvIHRoZSBpbWFnZV9kaWZmIGJpbmFyeSwgb3IgTm9uZSBpZiBpdAorICAgICAgICBpcyBub3Qg
YXZhaWxhYmxlLgorCisgICAgICAgIFRoaXMgaXMgbGlrZWx5IHVzZWQgb25seSBieSBkaWZmX2lt
YWdlKCkiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5wYXRoX3Rv
X2ltYWdlX2RpZmYnKQorCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkKHNlbGYpOgorICAgICAg
ICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBMaWdIVFRQZCBiaW5hcnkuCisKKyAgICAgICAg
VGhpcyBpcyBuZWVkZWQgb25seSBieSBwb3J0cyB0aGF0IHVzZSB0aGUgaHR0cF9zZXJ2ZXIucHkg
bW9kdWxlLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0Ll9wYXRo
X3RvX2xpZ2h0dHBkJykKKworICAgIGRlZiBfcGF0aF90b19saWdodHRwZF9tb2R1bGVzKHNlbGYp
OgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBMaWdIVFRQZCBtb2R1bGVzIGRp
cmVjdG9yeS4KKworICAgICAgICBUaGlzIGlzIG5lZWRlZCBvbmx5IGJ5IHBvcnRzIHRoYXQgdXNl
IHRoZSBodHRwX3NlcnZlci5weSBtb2R1bGUuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IoJ1BvcnQuX3BhdGhfdG9fbGlnaHR0cGRfbW9kdWxlcycpCisKKyAgICBkZWYgX3Bh
dGhfdG9fbGlnaHR0cGRfcGhwKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRv
IHRoZSBMaWdIVFRQZCBQSFAgZXhlY3V0YWJsZS4KKworICAgICAgICBUaGlzIGlzIG5lZWRlZCBv
bmx5IGJ5IHBvcnRzIHRoYXQgdXNlIHRoZSBodHRwX3NlcnZlci5weSBtb2R1bGUuIiIiCisgICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQuX3BhdGhfdG9fbGlnaHR0cGRfcGhw
JykKKworICAgIGRlZiBfcGF0aF90b193ZGlmZihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0
aGUgZnVsbCBwYXRoIHRvIHRoZSB3ZGlmZiBiaW5hcnksIG9yIE5vbmUgaWYgaXQgaXMKKyAgICAg
ICAgbm90IGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIGlzIGxpa2VseSB1c2VkIG9ubHkgYnkg
d2RpZmZfdGV4dCgpIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQu
X3BhdGhfdG9fd2RpZmYnKQorCisgICAgZGVmIF9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2VsZiwg
cGlkKToKKyAgICAgICAgIiIiRm9yY2VmdWxseSBhbmQgc3luY2hyb25vdXNseSBraWxscyB0aGUg
d2ViIHNlcnZlci4KKworICAgICAgICBUaGlzIHJvdXRpbmUgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGZyb20gaHR0cF9zZXJ2ZXIucHkgb3IgaXRzCisgICAgICAgIHN1YmNsYXNzZXMuIiIiCisgICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQuX3NodXRfZG93bl9odHRwX3NlcnZl
cicpCisKKyAgICBkZWYgX3dlYmtpdF9iYXNlbGluZV9wYXRoKHNlbGYsIHBsYXRmb3JtKToKKyAg
ICAgICAgIiIiUmV0dXJuIHRoZSAgZnVsbCBwYXRoIHRvIHRoZSB0b3Agb2YgdGhlIGJhc2VsaW5l
IHRyZWUgZm9yIGEKKyAgICAgICAgZ2l2ZW4gcGxhdGZvcm0uIiIiCisgICAgICAgIHJldHVybiBv
cy5wYXRoLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksICdwbGF0Zm9ybScsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0pCisKKworY2xhc3MgRHJpdmVyOgorICAgICIi
IkFic3RyYWN0IGludGVyZmFjZSBmb3IgdGhlIER1bXBSZW5kZXJUcmVlIGludGVyZmFjZS4iIiIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwbmdfcGF0aCwgb3B0aW9ucywgcG9ydF9vYmplY3Qp
OgorICAgICAgICAiIiJJbml0aWFsaXplIGEgRHJpdmVyIHRvIHN1YnNlcXVlbnRseSBydW4gdGVz
dHMuCisKKyAgICAgICAgVHlwaWNhbGx5IHRoaXMgcm91dGluZSB3aWxsIHNwYXduIER1bXBSZW5k
ZXJUcmVlIGluIGEgY29uZmlnCisgICAgICAgIHJlYWR5IGZvciBzdWJzZXF1ZW50IGlucHV0Lgor
CisgICAgICAgIHBuZ19wYXRoIC0gYW4gYWJzb2x1dGUgcGF0aCBmb3IgdGhlIGRyaXZlciB0byB3
cml0ZSBhbnkgaW1hZ2UKKyAgICAgICAgICAgIGRhdGEgZm9yIGEgdGVzdCAoYXMgYSBQTkcpLiBJ
ZiBubyBwYXRoIGlzIHByb3ZpZGVkLCB0aGF0CisgICAgICAgICAgICBpbmRpY2F0ZXMgdGhhdCBw
aXhlbCB0ZXN0IHJlc3VsdHMgd2lsbCBub3QgYmUgY2hlY2tlZC4KKyAgICAgICAgb3B0aW9ucyAt
IGFueSBwb3J0LXNwZWNpZmljIGRyaXZlciBvcHRpb25zCisgICAgICAgIHBvcnRfb2JqZWN0IC0g
cmVmZXJlbmNlIGJhY2sgdG8gdGhlIHBvcnQgb2JqZWN0LiIiIgorICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yKCdEcml2ZXIuX19pbml0X18nKQorCisgICAgZGVmIHJ1bl90ZXN0KHVy
aSwgdGltZW91dCwgY2hlY2tzdW0pOgorICAgICAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdCBhbmQg
cmV0dXJuIHRoZSByZXN1bHRzLgorCisgICAgICAgIE5vdGUgdGhhdCBpdCBpcyBva2F5IGlmIGEg
dGVzdCB0aW1lcyBvdXQgb3IgY3Jhc2hlcyBhbmQgbGVhdmVzCisgICAgICAgIHRoZSBkcml2ZXIg
aW4gYW4gaW5kZXRlcm1pbmF0ZSBzdGF0ZS4gVGhlIHVwcGVyIGxheWVycyBvZiB0aGUgcHJvZ3Jh
bQorICAgICAgICBhcmUgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIGFuZCBlbnN1cmluZyB0
aGluZ3MgYXJlIG9rYXkuCisKKyAgICAgICAgdXJpIC0gYSBmdWxsIFVSSSBmb3IgdGhlIGdpdmVu
IHRlc3QKKyAgICAgICAgdGltZW91dCAtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBi
ZWZvcmUgYWJvcnRpbmcgdGhpcyB0ZXN0LgorICAgICAgICBjaGVja3N1bSAtIGlmIHByZXNlbnQs
IHRoZSBleHBlY3RlZCBjaGVja3N1bSBmb3IgdGhlIGltYWdlIGZvciB0aGlzCisgICAgICAgICAg
ICB0ZXN0CisKKyAgICAgICAgUmV0dXJucyBhIHR1cGxlIG9mIHRoZSBmb2xsb3dpbmc6CisgICAg
ICAgICAgICBjcmFzaCAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRyaXZlciBj
cmFzaGVkIG9uIHRoZSB0ZXN0CisgICAgICAgICAgICB0aW1lb3V0IC0gYSBib29sZWFuIGluZGlj
YXRpbmcgd2hlaHRlciB0aGUgdGVzdCB0aW1lZCBvdXQKKyAgICAgICAgICAgIGNoZWNrc3VtIC0g
YSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2hlY2tzdW0gb2YgdGhlIGltYWdlLCBpZgorICAgICAg
ICAgICAgICAgIHByZXNlbnQKKyAgICAgICAgICAgIG91dHB1dCAtIGFueSB0ZXh0IG91dHB1dAor
ICAgICAgICAgICAgZXJyb3IgLSBhbnkgdW5leHBlY3RlZCBvciBhZGRpdGlvbmFsIChvciBlcnJv
cikgdGV4dCBvdXRwdXQKKworICAgICAgICBOb3RlIHRoYXQgdGhlIGltYWdlIGl0c2VsZiBzaG91
bGQgYmUgd3JpdHRlbiB0byB0aGUgcGF0aCB0aGF0IHdhcworICAgICAgICBzcGVjaWZpZWQgaW4g
dGhlIF9faW5pdF9fKCkgY2FsbC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cignRHJpdmVyLnJ1bl90ZXN0JykKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdEcml2ZXIuc3RvcCcpCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDk1MzgyCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bS5weQpAQCAtMCwwICsxLDI2MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIiIiQ2hyb21pdW0gaW1wbGVtZW50YXRpb25zIG9mIHRoZSBQb3J0IGludGVyZmFjZS4i
IiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9y
dCBzeXMKK2ltcG9ydCB0aW1lCisKK2ltcG9ydCBiYXNlCitpbXBvcnQgaHR0cF9zZXJ2ZXIKK2lt
cG9ydCB3ZWJzb2NrZXRfc2VydmVyCisKKworY2xhc3MgQ2hyb21pdW1Qb3J0KGJhc2UuUG9ydCk6
CisgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgQ2hyb21pdW0gaW1wbGVtZW50YXRpb25z
IG9mIHRoZSBQb3J0IGNsYXNzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFt
ZT1Ob25lLCBvcHRpb25zPU5vbmUpOgorICAgICAgICBiYXNlLlBvcnQuX19pbml0X18oc2VsZiwg
cG9ydF9uYW1lLCBvcHRpb25zKQorICAgICAgICBzZWxmLl9iYXNlX2RpciA9IE5vbmUKKworICAg
IGRlZiBiYXNlbGluZV9wYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2hyb21pdW1f
YmFzZWxpbmVfcGF0aChzZWxmLl9uYW1lKQorCisgICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYp
OgorICAgICAgICByZXN1bHQgPSBUcnVlCisgICAgICAgIHRlc3Rfc2hlbGxfYmluYXJ5X3BhdGgg
PSBzZWxmLl9wYXRoX3RvX2RyaXZlcigpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRlc3Rf
c2hlbGxfYmluYXJ5X3BhdGgpOgorICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4o
W3Rlc3Rfc2hlbGxfYmluYXJ5X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJy0tY2hlY2stbGF5b3V0LXRlc3Qtc3lzLWRlcHMnXSkKKyAgICAgICAgICAgIGlmIHBy
b2Mud2FpdCgpICE9IDA6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiQWJvcnRpbmcg
YmVjYXVzZSBzeXN0ZW0gZGVwZW5kZW5jaWVzIGNoZWNrICIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJmYWlsZWQuIikKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJUbyBv
dmVycmlkZSwgaW52b2tlIHdpdGggLS1ub2NoZWNrLXN5cy1kZXBzIikKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJv
cigndGVzdCBkcml2ZXIgaXMgbm90IGZvdW5kIGF0ICVzJyAlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3Rfc2hlbGxfYmluYXJ5X3BhdGgpCisgICAgICAgICAgICByZXN1bHQgPSBGYWxz
ZQorCisgICAgICAgIGltYWdlX2RpZmZfcGF0aCA9IHNlbGYuX3BhdGhfdG9faW1hZ2VfZGlmZigp
CisgICAgICAgIGlmIChub3Qgb3MucGF0aC5leGlzdHMoaW1hZ2VfZGlmZl9wYXRoKSBhbmQgbm90
CisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLm5vX3BpeGVsX3Rlc3RzKToKKyAgICAgICAgICAg
IGxvZ2dpbmcuZXJyb3IoJ2ltYWdlIGRpZmYgbm90IGZvdW5kIGF0ICVzJyAlIGltYWdlX2RpZmZf
cGF0aCkKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIlRvIG92ZXJyaWRlLCBpbnZva2Ugd2l0
aCAtLW5vLXBpeGVsLXRlc3RzIikKKyAgICAgICAgICAgIHJlc3VsdCA9IEZhbHNlCisKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGNvbXBhcmVfdGV4dChzZWxmLCBhY3R1YWxfdGV4
dCwgZXhwZWN0ZWRfdGV4dCk6CisgICAgICAgIHJldHVybiBhY3R1YWxfdGV4dCAhPSBleHBlY3Rl
ZF90ZXh0CisKKyAgICBkZWYgbGF5b3V0X3Rlc3RzX2RpcihzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3BhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0VGVz
dHMnKQorCisgICAgZGVmIHJlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fcGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsIHNlbGYuX29wdGlvbnMudGFyZ2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGly
ZWN0b3J5KQorCisgICAgZGVmIHNldHVwX3Rlc3RfcnVuKHNlbGYpOgorICAgICAgICAjIERlbGV0
ZSB0aGUgZGlzayBjYWNoZSBpZiBhbnkgdG8gZW5zdXJlIGEgY2xlYW4gdGVzdCBydW4uCisgICAg
ICAgIHRlc3Rfc2hlbGxfYmluYXJ5X3BhdGggPSBzZWxmLl9wYXRoX3RvX2RyaXZlcigpCisgICAg
ICAgIGNhY2hlZGlyID0gb3MucGF0aC5zcGxpdCh0ZXN0X3NoZWxsX2JpbmFyeV9wYXRoKVswXQor
ICAgICAgICBjYWNoZWRpciA9IG9zLnBhdGguam9pbihjYWNoZWRpciwgImNhY2hlIikKKyAgICAg
ICAgaWYgb3MucGF0aC5leGlzdHMoY2FjaGVkaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJl
ZShjYWNoZWRpcikKKworICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3Vs
dHNfZmlsZW5hbWUpOgorICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFtzZWxmLl9wYXRoX3RvX2Ry
aXZlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVuYW1lX3RvX3VyaShy
ZXN1bHRzX2ZpbGVuYW1lKV0pCisKKyAgICBkZWYgc3RhcnRfZHJpdmVyKHNlbGYsIGltYWdlX3Bh
dGgsIG9wdGlvbnMpOgorICAgICAgICAiIiJTdGFydHMgYSBuZXcgRHJpdmVyIGFuZCByZXR1cm5z
IGEgaGFuZGxlIHRvIGl0LiIiIgorICAgICAgICByZXR1cm4gQ2hyb21pdW1Ecml2ZXIoaW1hZ2Vf
cGF0aCwgb3B0aW9ucywgc2VsZikKKworICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZik6CisgICAg
ICAgIHNlbGYuX2hlbHBlciA9IE5vbmUKKyAgICAgICAgcmV0dXJuCisgICAgICAgIGhlbHBlcl9w
YXRoID0gc2VsZi5fcGF0aF90b19oZWxwZXIoKQorICAgICAgICBsb2dnaW5nLmRlYnVnKCJTdGFy
dGluZyBsYXlvdXQgaGVscGVyICVzIiAlIGhlbHBlcl9wYXRoKQorICAgICAgICBzZWxmLl9oZWxw
ZXIgPSBzdWJwcm9jZXNzLlBvcGVuKFtoZWxwZXJfcGF0aF0sCisgICAgICAgICAgICBzdGRpbj1z
dWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1Ob25lKQorICAg
ICAgICBpc19yZWFkeSA9IHNlbGYuX2hlbHBlci5zdGRvdXQucmVhZGxpbmUoKQorICAgICAgICBp
ZiBub3QgaXNfcmVhZHkuc3RhcnRzd2l0aCgncmVhZHknKToKKyAgICAgICAgICAgIGxvZ2dpbmcu
ZXJyb3IoImxheW91dF90ZXN0X2hlbHBlciBmYWlsZWQgdG8gYmUgcmVhZHkiKQorCisgICAgZGVm
IHN0b3BfaGVscGVyKHNlbGYpOgorICAgICAgICBwYXNzCisgICAgICAgIGlmIHNlbGYuX2hlbHBl
cjoKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlN0b3BwaW5nIGxheW91dCB0ZXN0IGhlbHBl
ciIpCisgICAgICAgICAgICBzZWxmLl9oZWxwZXIuc3RkaW4ud3JpdGUoInhcbiIpCisgICAgICAg
ICAgICBzZWxmLl9oZWxwZXIuc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5faGVscGVy
LndhaXQoKQorCisgICAgZGVmIHRlc3RfYmFzZV9wbGF0Zm9ybV9uYW1lcyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuICgnbGludXgnLCAnbWFjJywgJ3dpbicpCisKKyAgICBkZWYgdGVzdF9leHBlY3Rh
dGlvbnMoc2VsZiwgb3B0aW9ucz1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgdGVzdCBl
eHBlY3RhdGlvbnMgZm9yIHRoaXMgcG9ydC4KKworICAgICAgICBCYXNpY2FsbHkgdGhpcyBzdHJp
bmcgc2hvdWxkIGNvbnRhaW4gdGhlIGVxdWl2YWxlbnQgb2YgYQorICAgICAgICB0ZXN0X2V4cGVj
dGF0aW9ucyBmaWxlLiBTZWUgdGVzdF9leHBlY3RhdGlvbnMucHkgZm9yIG1vcmUgZGV0YWlscy4i
IiIKKyAgICAgICAgZXhwZWN0YXRpb25zX2ZpbGUgPSBzZWxmLl9wYXRoX2Zyb21fYmFzZSgnd2Vi
a2l0JywgJ3Rvb2xzJywKKyAgICAgICAgICAgICdsYXlvdXRfdGVzdHMnLCAndGVzdF9leHBlY3Rh
dGlvbnMudHh0JykKKyAgICAgICAgcmV0dXJuIGZpbGUoZXhwZWN0YXRpb25zX2ZpbGUsICJyIiku
cmVhZCgpCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1lcyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYudGVzdF9iYXNlX3BsYXRmb3JtX25hbWVzKCkgKyAoJ3dpbi14cCcsIAorICAgICAg
ICAgICAgJ3dpbi12aXN0YScsICd3aW4tNycpCisKKyAgICAjCisgICAgIyBQUk9URUNURUQgTUVU
SE9EUworICAgICMKKyAgICAjIFRoZXNlIHJvdXRpbmVzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBi
eSBvdGhlciBtZXRob2RzIGluIHRoaXMgZmlsZQorICAgICMgb3IgYW55IHN1YmNsYXNzZXMuCisg
ICAgIworCisgICAgZGVmIF9jaHJvbWl1bV9iYXNlbGluZV9wYXRoKHNlbGYsIHBsYXRmb3JtKToK
KyAgICAgICAgaWYgcGxhdGZvcm0gaXMgTm9uZToKKyAgICAgICAgICAgIHBsYXRmb3JtID0gc2Vs
Zi5uYW1lKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAn
ZGF0YScsICdsYXlvdXRfdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAncGxhdGZvcm0nLCBwbGF0Zm9ybSwgJ0xheW91dFRlc3RzJykKKworICAgIGRlZiBfcGF0aF9m
cm9tX2Jhc2Uoc2VsZiwgKmNvbXBzKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2Jhc2VfZGlyOgor
ICAgICAgICAgICAgYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKKyAgICAgICAg
ICAgIHNlbGYuX2Jhc2VfZGlyID0gYWJzcGF0aFswOmFic3BhdGguZmluZCgndGhpcmRfcGFydHkn
KV0KKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLl9iYXNlX2RpciwgKmNvbXBzKQor
CisKK2NsYXNzIENocm9taXVtRHJpdmVyKGJhc2UuRHJpdmVyKToKKyAgICAiIiJBYnN0cmFjdCBp
bnRlcmZhY2UgZm9yIHRoZSBEdW1wUmVuZGVyVHJlZSBpbnRlcmZhY2UuIiIiCisKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgaW1hZ2VfcGF0aCwgb3B0aW9ucywgcG9ydCk6CisgICAgICAgIHNlbGYu
X3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNl
bGYuX3RhcmdldCA9IHBvcnQuX29wdGlvbnMudGFyZ2V0CisgICAgICAgIHNlbGYuX2ltYWdlX3Bh
dGggPSBpbWFnZV9wYXRoCisKKyAgICAgICAgY21kID0gW10KKyAgICAgICAgIyBIb29rIGZvciBp
bmplY3RpbmcgdmFsZ3JpbmQgb3Igb3RoZXIgcnVudGltZSBpbnN0cnVtZW50YXRpb24sCisgICAg
ICAgICMgdXNlZCBieSBlLmcuIHRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kX3Rlc3RzLnB5LgorICAg
ICAgICB3cmFwcGVyID0gb3MuZW52aXJvbi5nZXQoIkJST1dTRVJfV1JBUFBFUiIsIE5vbmUpCisg
ICAgICAgIGlmIHdyYXBwZXIgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSBbd3JhcHBlcl0K
KyAgICAgICAgaWYgc2VsZi5fcG9ydC5fb3B0aW9ucy53cmFwcGVyOgorICAgICAgICAgICAgIyBU
aGlzIHNwbGl0KCkgaXNuJ3QgcmVhbGx5IHdoYXQgd2Ugd2FudCAtLSBpdCBpbmNvcnJlY3RseSB3
aWxsCisgICAgICAgICAgICAjIHNwbGl0IHF1b3RlZCBzdHJpbmdzIHdpdGhpbiB0aGUgd3JhcHBl
ciBhcmd1bWVudCAtLSBidXQgaW4KKyAgICAgICAgICAgICMgcHJhY3RpY2UgaXQgc2hvdWxkbid0
IGNvbWUgdXAgYW5kIHRoZSAtLWhlbHAgb3V0cHV0IHdhcm5zCisgICAgICAgICAgICAjIGFib3V0
IGl0IGFueXdheS4KKyAgICAgICAgICAgIGNtZCArPSBzZWxmLl9vcHRpb25zLndyYXBwZXIuc3Bs
aXQoKQorICAgICAgICBjbWQgKz0gW3BvcnQuX3BhdGhfdG9fZHJpdmVyKCksICctLWxheW91dC10
ZXN0cyddCisgICAgICAgIGlmIG9wdGlvbnM6CisgICAgICAgICAgICBjbWQgKz0gb3B0aW9ucwor
ICAgICAgICBzZWxmLl9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZGluPXN1YnByb2Nl
c3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1
YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
ZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorCisgICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLl9wcm9jLnBvbGwoKQorCisgICAgZGVmIHJldHVybmNvZGUoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9wcm9jLnJldHVybmNvZGUKKworICAgIGRlZiBydW5fdGVzdChzZWxm
LCB1cmksIHRpbWVvdXRtcywgY2hlY2tzdW0pOgorICAgICAgICBvdXRwdXQgPSBbXQorICAgICAg
ICBlcnJvciA9IFtdCisgICAgICAgIGNyYXNoID0gRmFsc2UKKyAgICAgICAgdGltZW91dCA9IEZh
bHNlCisgICAgICAgIGFjdHVhbF91cmkgPSBOb25lCisgICAgICAgIGFjdHVhbF9jaGVja3N1bSA9
IE5vbmUKKworICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgY21kID0g
dXJpCisgICAgICAgIGlmIHRpbWVvdXRtczoKKyAgICAgICAgICAgIGNtZCArPSAnICcgKyBzdHIo
dGltZW91dG1zKQorICAgICAgICBpZiBjaGVja3N1bToKKyAgICAgICAgICAgIGNtZCArPSAnICcg
KyBjaGVja3N1bQorICAgICAgICBjbWQgKz0gIlxuIgorCisgICAgICAgIHNlbGYuX3Byb2Muc3Rk
aW4ud3JpdGUoY21kKQorICAgICAgICBsaW5lID0gc2VsZi5fcHJvYy5zdGRvdXQucmVhZGxpbmUo
KQorICAgICAgICB3aGlsZSBsaW5lLnJzdHJpcCgpICE9ICIjRU9GIjoKKyAgICAgICAgICAgICMg
TWFrZSBzdXJlIHdlIGhhdmVuJ3QgY3Jhc2hlZC4KKyAgICAgICAgICAgIGlmIGxpbmUgPT0gJycg
YW5kIHNlbGYucG9sbCgpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBo
ZXggY29kZSAweGMwMDAwMDFkLCB3aGljaCBpcyB1c2VkIGZvciBhYnJ1cHQKKyAgICAgICAgICAg
ICAgICAjIHRlcm1pbmF0aW9uLiBUaGlzIGhhcHBlbnMgaWYgd2UgaGl0IGN0cmwrYyBmcm9tIHRo
ZSBwcm9tcHQKKyAgICAgICAgICAgICAgICAjIGFuZCB3ZSBoYXBwZW4gdG8gYmUgd2FpdGluZyBv
biB0aGUgdGVzdF9zaGVsbC4KKyAgICAgICAgICAgICAgICAjIHNkb3lvbjogTm90IHN1cmUgZm9y
IHdoaWNoIE9TIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgdGhlCisgICAgICAgICAgICAgICAg
IyBhYm92ZSBjb2RlIGlzIHZhbGlkLiBXaGF0IHdvcmtzIGZvciBtZSB1bmRlciBMaW51eCB0byBk
ZXRlY3QKKyAgICAgICAgICAgICAgICAjIGN0cmwrYyBpcyBmb3IgdGhlIHN1YnByb2Nlc3MgcmV0
dXJuY29kZSB0byBiZSBuZWdhdGl2ZQorICAgICAgICAgICAgICAgICMgU0lHSU5ULiBBbmQgdGhh
dCBhZ3JlZXMgd2l0aCB0aGUgc3VicHJvY2VzcyBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAg
ICAgIGlmICgtMTA3Mzc0MTUxMCA9PSBzZWxmLl9wcm9jLnJldHVybmNvZGUoKSBvcgorICAgICAg
ICAgICAgICAgICAgICAtIHNpZ25hbC5TSUdJTlQgPT0gc2VsZi5fcHJvYy5yZXR1cm5jb2RlKCkp
OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorICAgICAgICAg
ICAgICAgIGNyYXNoID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAg
ICMgRG9uJ3QgaW5jbHVkZSAjVVJMIGxpbmVzIGluIG91ciBvdXRwdXQKKyAgICAgICAgICAgIGlm
IGxpbmUuc3RhcnRzd2l0aCgiI1VSTDoiKToKKyAgICAgICAgICAgICAgICBhY3R1YWxfdXJpID0g
bGluZS5yc3RyaXAoKVs1Ol0KKyAgICAgICAgICAgICAgICBpZiB1cmkgIT0gYWN0dWFsX3VyaToK
KyAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5mYXRhbCgiVGVzdCBnb3Qgb3V0IG9mIHN5bmM6
XG58JXN8XG58JXN8IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cmksIGFj
dHVhbF91cmkpKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigidGVz
dCBvdXQgb2Ygc3luYyIpCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiI01ENToi
KToKKyAgICAgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSBsaW5lLnJzdHJpcCgpWzU6XQor
ICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIiNURVNUX1RJTUVEX09VVCIpOgorICAg
ICAgICAgICAgICAgIHRpbWVvdXQgPSBUcnVlCisgICAgICAgICAgICAgICAgIyBUZXN0IHRpbWVk
IG91dCwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gcmVhZCB1bnRpbCAjRU9GLgorICAgICAgICAgICAg
ZWxpZiBhY3R1YWxfdXJpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQobGluZSkKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyb3IuYXBwZW5kKGxpbmUpCisKKyAg
ICAgICAgICAgIGxpbmUgPSBzZWxmLl9wcm9jLnN0ZG91dC5yZWFkbGluZSgpCisKKyAgICAgICAg
cmV0dXJuIChjcmFzaCwgdGltZW91dCwgYWN0dWFsX2NoZWNrc3VtLCAnJy5qb2luKG91dHB1dCks
CisgICAgICAgICAgICAgICAgJycuam9pbihlcnJvcikpCisKKyAgICBkZWYgc3RvcChzZWxmKToK
KyAgICAgICAgaWYgc2VsZi5fcHJvYzoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xv
c2UoKQorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2UoKQorICAgICAgICAgICAg
aWYgc2VsZi5fcHJvYy5zdGRlcnI6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIu
Y2xvc2UoKQorICAgICAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSBub3QgaW4gKCd3aW4zMicsICdj
eWd3aW4nKSBhbmQKKyAgICAgICAgICAgICAgICBub3Qgc2VsZi5fcHJvYy5wb2xsKCkpOgorICAg
ICAgICAgICAgICAgICMgQ2xvc2luZyBzdGRpbi9zdGRvdXQvc3RkZXJyIGhhbmdzIHNvbWV0aW1l
cyBvbiBPUyBYLgorICAgICAgICAgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3IikK
KyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsia2lsbCIsICItOSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZi5fcHJvYy5waWQpXSwgc3RkZXJyPW51
bGwpCisgICAgICAgICAgICAgICAgbnVsbC5jbG9zZSgpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9s
aW51eC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTRjMDA3Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bV9saW51eC5weQpAQCAtMCwwICsxLDE0MyBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkNocm9taXVtIE1hYyBpbXBsZW1lbnRh
dGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHBsYXRm
b3JtCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworCitpbXBvcnQgY2hyb21pdW0K
KworCitjbGFzcyBDaHJvbWl1bUxpbnV4UG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgorICAg
ICIiIkNocm9taXVtIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGNsYXNzLiIiIgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgor
ICAgICAgICBpZiBwb3J0X25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHBvcnRfbmFtZSA9ICdj
aHJvbWl1bS1saW51eCcKKyAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Qb3J0Ll9faW5pdF9fKHNl
bGYsIHBvcnRfbmFtZSwgb3B0aW9ucykKKworICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChz
ZWxmKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLmJhc2VsaW5lX3BhdGgoKSwKKyAgICAgICAgICAg
ICAgICBzZWxmLmNocm9taXVtX2Jhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbicpLAorICAgICAg
ICAgICAgICAgIHNlbGYud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3dpbicpLAorICAgICAgICAgICAg
ICAgIHNlbGYud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpXQorCisgICAgZGVmIGNoZWNrX3N5
c19kZXBzKHNlbGYpOgorICAgICAgICAjIFdlIGhhdmUgbm8gcGxhdGZvcm0tc3BlY2lmaWMgZGVw
ZW5kZW5jaWVzIHRvIGNoZWNrLgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIG51bV9j
b3JlcyhzZWxmKToKKyAgICAgICAgbnVtX2NvcmVzID0gb3Muc3lzY29uZigiU0NfTlBST0NFU1NP
UlNfT05MTiIpCisgICAgICAgIGlmIGlzaW5zdGFuY2UobnVtX2NvcmVzLCBpbnQpIGFuZCBudW1f
Y29yZXMgPiAwOgorICAgICAgICAgICAgcmV0dXJuIG51bV9jb3JlcworICAgICAgICByZXR1cm4g
MQorCisgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToKKyAgICAgICAgIyBXZSB1c2Ug
J2xpbnV4JyBpbnN0ZWFkIG9mICdjaHJvbWl1bS1saW51eCcgaW4gdGVzdF9leHBlY3RhdGlvbnMu
dHh0LgorICAgICAgICByZXR1cm4gJ2xpbnV4JworCisgICAgZGVmIHZlcnNpb24oc2VsZik6Cisg
ICAgICAgICMgV2UgZG9uJ3QgaGF2ZSBkaWZmZXJlbnQgdmVyc2lvbnMgb24gbGludXguCisgICAg
ICAgIHJldHVybiAnJworCisgICAgIworICAgICMgUFJPVEVDVEVEIE1FVEhPRFMKKyAgICAjCisK
KyAgICBkZWYgX2J1aWxkX3BhdGgoc2VsZiwgKmNvbXBzKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3BhdGhfZnJvbV9iYXNlKCdzY29uc2J1aWxkJywgc2VsZi5fb3B0aW9ucy50YXJnZXQsICpjb21w
cykKKworICAgIGRlZiBfa2lsbF9wcm9jZXNzKHNlbGYsIHBpZCk6CisgICAgICAgICIiIkZvcmNl
ZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KKworICAgICAgICBBcmdzOgorICAgICAgICBwaWQ6IFRo
ZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBv
cy5raWxsKHBpZCwgc2lnbmFsLlNJR0tJTEwpCisKKyAgICBkZWYgX2tpbGxfYWxsX3Byb2Nlc3Mo
c2VsZiwgcHJvY2Vzc19uYW1lKToKKyAgICAgICAgbnVsbCA9IG9wZW4ob3MuZGV2bnVsbCkKKyAg
ICAgICAgc3VicHJvY2Vzcy5jYWxsKFsna2lsbGFsbCcsICctVEVSTScsICctdScsIG9zLmdldGVu
dignVVNFUicpLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19uYW1lXSwgc3RkZXJy
PW51bGwpCisgICAgICAgIG51bGwuY2xvc2UoKQorCisgICAgZGVmIF9wYXRoX3RvX2FwYWNoZShz
ZWxmKToKKyAgICAgICAgcmV0dXJuICcvdXNyL3NiaW4vYXBhY2hlMicKKworICAgIGRlZiBfcGF0
aF90b19hcGFjaGVfY29uZmlnX2ZpbGUoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpv
aW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksICdodHRwJywgJ2NvbmYnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdhcGFjaGUyLWRlYmlhbi1odHRwZC5jb25mJykKKworICAgIGRlZiBf
cGF0aF90b19saWdodHRwZChzZWxmKToKKyAgICAgICAgcmV0dXJuICIvdXNyL3NiaW4vbGlnaHR0
cGQiCisKKyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGRfbW9kdWxlcyhzZWxmKToKKyAgICAgICAg
cmV0dXJuICIvdXNyL2xpYi9saWdodHRwZCIKKworICAgIGRlZiBfcGF0aF90b19saWdodHRwZF9w
aHAoc2VsZik6CisgICAgICAgIHJldHVybiAiL3Vzci9iaW4vcGhwLWNnaSIKKworICAgIGRlZiBf
cGF0aF90b19kcml2ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCd0
ZXN0X3NoZWxsJykKKworICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6CisgICAgICAgIHJl
dHVybiBOb25lCisKKyAgICBkZWYgX3BhdGhfdG9faW1hZ2VfZGlmZihzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2ltYWdlX2RpZmYnKQorCisgICAgZGVmIF9wYXRoX3Rv
X3dkaWZmKHNlbGYpOgorICAgICAgICByZXR1cm4gJ3dkaWZmJworCisgICAgZGVmIF9zaHV0X2Rv
d25faHR0cF9zZXJ2ZXIoc2VsZiwgc2VydmVyX3BpZCk6CisgICAgICAgICIiIlNodXQgZG93biB0
aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVsbHkKKyAgICAgICAg
c2h1dCBkb3duLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzZXJ2ZXJfcGlkOiBUaGUg
cHJvY2VzcyBJRCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCisgICAgICAgICIiIgorICAgICAgICAj
IHNlcnZlcl9waWQgaXMgbm90IHNldCB3aGVuICJodHRwX3NlcnZlci5weSBzdG9wIiBpcyBydW4g
bWFudWFsbHkuCisgICAgICAgIGlmIHNlcnZlcl9waWQgaXMgTm9uZToKKyAgICAgICAgICAgICMg
VE9ETyhtbW9zcykgVGhpcyBpc24ndCBpZGVhbCwgc2luY2UgaXQgY291bGQgY29uZmxpY3Qgd2l0
aAorICAgICAgICAgICAgIyBsaWdodHRwZCBwcm9jZXNzZXMgbm90IHN0YXJ0ZWQgYnkgaHR0cF9z
ZXJ2ZXIucHksCisgICAgICAgICAgICAjIGJ1dCBnb29kIGVub3VnaCBmb3Igbm93LgorICAgICAg
ICAgICAgc2VsZi5fa2lsbF9hbGxfcHJvY2VzcygnbGlnaHR0cGQnKQorICAgICAgICAgICAgc2Vs
Zi5fa2lsbF9hbGxfcHJvY2VzcygnYXBhY2hlMicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgb3Mua2lsbChzZXJ2ZXJfcGlkLCBzaWduYWwuU0lHVEVS
TSkKKyAgICAgICAgICAgICAgICAjIFRPRE8obW1vc3MpIE1heWJlIHRocm93IGluIGEgU0lHS0lM
TCBqdXN0IHRvIGJlIHN1cmU/CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAg
ICAgICAgICAjIFNvbWV0aW1lcyB3ZSBnZXQgYSBiYWQgUElEIChlLmcuIGZyb20gYSBzdGFsZSBo
dHRwZC5waWQKKyAgICAgICAgICAgICAgICAjIGZpbGUpLCBzbyBpZiBraWxsIGZhaWxzIG9uIHRo
ZSBnaXZlbiBQSUQsIGp1c3QgdHJ5IHRvCisgICAgICAgICAgICAgICAgIyAna2lsbGFsbCcgd2Vi
IHNlcnZlcnMuCisgICAgICAgICAgICAgICAgc2VsZi5fc2h1dF9kb3duX2h0dHBfc2VydmVyKE5v
bmUpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtX21hYy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmQ3MWMzNzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQpAQCAtMCwwICsxLDE1
OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkNo
cm9taXVtIE1hYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCisKK2lt
cG9ydCBvcworaW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2Vz
cworCitpbXBvcnQgY2hyb21pdW0KKworCitjbGFzcyBDaHJvbWl1bU1hY1BvcnQoY2hyb21pdW0u
Q2hyb21pdW1Qb3J0KToKKyAgICAiIiJDaHJvbWl1bSBNYWMgaW1wbGVtZW50YXRpb24gb2YgdGhl
IFBvcnQgY2xhc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9uYW1lPU5vbmUs
IG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIGlmIHBvcnRfbmFtZSBpcyBOb25lOgorICAgICAgICAg
ICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLW1hYycKKyAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Q
b3J0Ll9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZSwgb3B0aW9ucykKKworICAgIGRlZiBiYXNlbGlu
ZV9zZWFyY2hfcGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLmJhc2VsaW5lX3BhdGgo
KSwKKyAgICAgICAgICAgICAgICBzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCgnbWFjJyArIHNl
bGYudmVyc2lvbigpKSwKKyAgICAgICAgICAgICAgICBzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0
aCgnbWFjJyldCisKKyAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZik6CisgICAgICAgICMgV2Ug
aGF2ZSBubyBzcGVjaWZpYyBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMuCisgICAgICAgIHJldHVybiBU
cnVlCisKKyAgICBkZWYgbnVtX2NvcmVzKHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KG9zLnBv
cGVuMigic3lzY3RsIC1uIGh3Lm5jcHUiKVsxXS5yZWFkKCkpCisKKyAgICBkZWYgdGVzdF9wbGF0
Zm9ybV9uYW1lKHNlbGYpOgorICAgICAgICAjIFdlIHVzZSAnbWFjJyBpbnN0ZWFkIG9mICdjaHJv
bWl1bS1tYWMnCisgICAgICAgIHJldHVybiAnbWFjJworCisgICAgZGVmIHZlcnNpb24oc2VsZik6
CisgICAgICAgIG9zX3ZlcnNpb25fc3RyaW5nID0gcGxhdGZvcm0ubWFjX3ZlcigpWzBdICAjIGUu
Zy4gIjEwLjUuNiIKKyAgICAgICAgaWYgbm90IG9zX3ZlcnNpb25fc3RyaW5nOgorICAgICAgICAg
ICAgcmV0dXJuICctbGVvcGFyZCcKKyAgICAgICAgcmVsZWFzZV92ZXJzaW9uID0gaW50KG9zX3Zl
cnNpb25fc3RyaW5nLnNwbGl0KCcuJylbMV0pCisgICAgICAgICMgd2UgZG9uJ3Qgc3VwcG9ydCAn
dGlnZXInIG9yIGVhcmxpZXIgcmVsZWFzZXMKKyAgICAgICAgaWYgcmVsZWFzZV92ZXJzaW9uID09
IDU6CisgICAgICAgICAgICByZXR1cm4gJy1sZW9wYXJkJworICAgICAgICBlbGlmIHJlbGVhc2Vf
dmVyc2lvbiA9PSA2OgorICAgICAgICAgICAgcmV0dXJuICctc25vd2xlb3BhcmQnCisgICAgICAg
IHJldHVybiAnJworCisgICAgIworICAgICMgUFJPVEVDVEVEIE1FVEhPRFMKKyAgICAjCisKKyAg
ICBkZWYgX2J1aWxkX3BhdGgoc2VsZiwgKmNvbXBzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Bh
dGhfZnJvbV9iYXNlKCd4Y29kZWJ1aWxkJywgc2VsZi5fb3B0aW9ucy50YXJnZXQsICpjb21wcykK
KworICAgIGRlZiBfbGlnaHR0cGRfcGF0aChzZWxmLCAqY29tcHMpOgorICAgICAgICByZXR1cm4g
c2VsZi5fcGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ21hYycsICpj
b21wcykKKworICAgIGRlZiBfa2lsbF9wcm9jZXNzKHNlbGYsIHBpZCk6CisgICAgICAgICIiIkZv
cmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAg
cGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUga2lsbGVkLgorICAgICAgICAiIiIKKyAg
ICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQorCisgICAgZGVmIF9raWxsX2FsbF9w
cm9jZXNzKHNlbGYsIHByb2Nlc3NfbmFtZSk6CisgICAgICAgICIiIktpbGwgYW55IHByb2Nlc3Nl
cyBydW5uaW5nIHVuZGVyIHRoaXMgbmFtZS4iIiIKKyAgICAgICAgIyBPbiBNYWMgT1MgWCAxMC42
LCBraWxsYWxsIGhhcyBhIG5ldyBjb25zdHJhaW50OiAtU0lHTkFMTkFNRSBvcgorICAgICAgICAj
IC1TSUdOQUxOVU1CRVIgbXVzdCBjb21lIGZpcnN0LiAgRXhhbXBsZSBwcm9ibGVtOgorICAgICAg
ICAjICAgJCBraWxsYWxsIC11ICRVU0VSIC1URVJNIGxpZ2h0dHBkCisgICAgICAgICMgICBraWxs
YWxsOiBpbGxlZ2FsIG9wdGlvbiAtLSBUCisgICAgICAgICMgVXNlIG9mIHRoZSBlYXJsaWVyIC1U
RVJNIHBsYWNlbWVudCBpcyBqdXN0IGZpbmUgb24gMTAuNS4KKyAgICAgICAgbnVsbCA9IG9wZW4o
b3MuZGV2bnVsbCkKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFsna2lsbGFsbCcsICctVEVSTScs
ICctdScsIG9zLmdldGVudignVVNFUicpLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vz
c19uYW1lXSwgc3RkZXJyPW51bGwpCisgICAgICAgIG51bGwuY2xvc2UoKQorCisgICAgZGVmIF9w
YXRoX3RvX2FwYWNoZShzZWxmKToKKyAgICAgICAgcmV0dXJuICcvdXNyL3NiaW4vaHR0cGQnCisK
KyAgICBkZWYgX3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKHNlbGYpOgorICAgICAgICByZXR1
cm4gb3MucGF0aC5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCAnaHR0cCcsICdjb25mJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBhY2hlMi1odHRwZC5jb25mJykKKworICAg
IGRlZiBfcGF0aF90b19saWdodHRwZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpZ2h0
dHBfcGF0aCgnYmluJywgJ2xpZ2h0dHAnKQorCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkX21v
ZHVsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9saWdodHRwX3BhdGgoJ2xpYicpCisK
KyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGRfcGhwKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fbGlnaHR0cGRfcGF0aCgnYmluJywgJ3BocC1jZ2knKQorCisgICAgZGVmIF9wYXRoX3RvX2Ry
aXZlcihzZWxmKToKKyAgICAgICAgIyBUT0RPKHBpbmtlcnRvbik6IG1ha2UgfHRhcmdldHwgaGFw
cHkgd2l0aCBjYXNlLXNlbnNpdGl2ZSBmaWxlCisgICAgICAgICMgc3lzdGVtcy4KKyAgICAgICAg
cmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ1Rlc3RTaGVsbC5hcHAnLCAnQ29udGVudHMnLCAnTWFj
T1MnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3RTaGVsbCcpCisKKyAg
ICBkZWYgX3BhdGhfdG9faGVscGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRf
cGF0aCgnbGF5b3V0X3Rlc3RfaGVscGVyJykKKworICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZm
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnaW1hZ2VfZGlmZicpCisK
KyAgICBkZWYgX3BhdGhfdG9fd2RpZmYoc2VsZik6CisgICAgICAgIHJldHVybiAnd2RpZmYnCisK
KyAgICBkZWYgX3NodXRfZG93bl9odHRwX3NlcnZlcihzZWxmLCBzZXJ2ZXJfcGlkKToKKyAgICAg
ICAgIiIiU2h1dCBkb3duIHRoZSBsaWdodHRwZCB3ZWIgc2VydmVyLiBCbG9ja3MgdW50aWwgaXQn
cyBmdWxseQorICAgICAgICBzaHV0IGRvd24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAg
IHNlcnZlcl9waWQ6IFRoZSBwcm9jZXNzIElEIG9mIHRoZSBydW5uaW5nIHNlcnZlci4KKyAgICAg
ICAgIiIiCisgICAgICAgICMgc2VydmVyX3BpZCBpcyBub3Qgc2V0IHdoZW4gImh0dHBfc2VydmVy
LnB5IHN0b3AiIGlzIHJ1biBtYW51YWxseS4KKyAgICAgICAgaWYgc2VydmVyX3BpZCBpcyBOb25l
OgorICAgICAgICAgICAgIyBUT0RPKG1tb3NzKSBUaGlzIGlzbid0IGlkZWFsLCBzaW5jZSBpdCBj
b3VsZCBjb25mbGljdCB3aXRoCisgICAgICAgICAgICAjIGxpZ2h0dHBkIHByb2Nlc3NlcyBub3Qg
c3RhcnRlZCBieSBodHRwX3NlcnZlci5weSwKKyAgICAgICAgICAgICMgYnV0IGdvb2QgZW5vdWdo
IGZvciBub3cuCisgICAgICAgICAgICBzZWxmLl9raWxsX2FsbF9wcm9jZXNzKCdsaWdodHRwZCcp
CisgICAgICAgICAgICBzZWxmLl9raWxsX2FsbF9wcm9jZXNzKCdodHRwZCcpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Mua2lsbChzZXJ2ZXJfcGlk
LCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgICAgICAjIFRPRE8obW1vc3MpIE1heWJlIHRo
cm93IGluIGEgU0lHS0lMTCBqdXN0IHRvIGJlIHN1cmU/CisgICAgICAgICAgICBleGNlcHQgT1NF
cnJvcjoKKyAgICAgICAgICAgICAgICAjIFNvbWV0aW1lcyB3ZSBnZXQgYSBiYWQgUElEIChlLmcu
IGZyb20gYSBzdGFsZSBodHRwZC5waWQKKyAgICAgICAgICAgICAgICAjIGZpbGUpLCBzbyBpZiBr
aWxsIGZhaWxzIG9uIHRoZSBnaXZlbiBQSUQsIGp1c3QgdHJ5IHRvCisgICAgICAgICAgICAgICAg
IyAna2lsbGFsbCcgd2ViIHNlcnZlcnMuCisgICAgICAgICAgICAgICAgc2VsZi5fc2h1dF9kb3du
X2h0dHBfc2VydmVyKE5vbmUpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3dpbi5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNmQ1MDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3dpbi5w
eQpAQCAtMCwwICsxLDE0NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIi
IkNocm9taXVtIFdpbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCisK
K2ltcG9ydCBvcworaW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJv
Y2VzcworCitpbXBvcnQgY2hyb21pdW0KKworCitjbGFzcyBDaHJvbWl1bVdpblBvcnQoY2hyb21p
dW0uQ2hyb21pdW1Qb3J0KToKKyAgICAiIiJDaHJvbWl1bSBXaW4gaW1wbGVtZW50YXRpb24gb2Yg
dGhlIFBvcnQgY2xhc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9uYW1lPU5v
bmUsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIGlmIHBvcnRfbmFtZSBpcyBOb25lOgorICAgICAg
ICAgICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLXdpbicgKyBzZWxmLnZlcnNpb24oKQorICAgICAg
ICBjaHJvbWl1bS5DaHJvbWl1bVBvcnQuX19pbml0X18oc2VsZiwgcG9ydF9uYW1lLCBvcHRpb25z
KQorCisgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgorICAgICAgICBpZiBzZWxm
Ll9uYW1lID09ICdjaHJvbWl1bS13aW4teHAnOgorICAgICAgICAgICAgZGlycy5hcHBlbmQoc2Vs
Zi5iYXNlbGluZV9wYXRoKHNlbGYuX25hbWUpKQorICAgICAgICBpZiBzZWxmLl9uYW1lIGluICgn
Y2hyb21pdW0td2luLXhwJywgJ2Nocm9taXVtLXdpbi12aXN0YScpOgorICAgICAgICAgICAgZGly
cy5hcHBlbmQoc2VsZi5iYXNlbGluZV9wYXRoKCdjaHJvbWl1bS13aW4tdmlzdGEnKSkKKyAgICAg
ICAgZGlycy5hcHBlbmQoc2VsZi5iYXNlbGluZV9wYXRoKCdjaHJvbWl1bS13aW4nKSkKKyAgICAg
ICAgZGlycy5hcHBlbmQoc2VsZi53ZWJraXRfYmFzZWxpbmVfcGF0aCgnd2luJykpCisgICAgICAg
IGRpcnMuYXBwZW5kKHNlbGYud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpKQorICAgICAgICBy
ZXR1cm4gZGlycworCisgICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYpOgorICAgICAgICAjIFRP
RE8oZHByYW5rZSk6IGltcGxlbWVudCB0aGlzCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBk
ZWYgZ2V0X2Fic29sdXRlX3BhdGgoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJSZXR1cm4g
dGhlIGFic29sdXRlIHBhdGggaW4gdW5peCBmb3JtYXQgZm9yIHRoZSBnaXZlbiBmaWxlbmFtZS4i
IiIKKyAgICAgICAgYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkKKyAgICAgICAg
cmV0dXJuIHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCisKKyAgICBkZWYgbnVtX2NvcmVzKHNlbGYp
OgorICAgICAgICByZXR1cm4gaW50KG9zLmVudmlyb24uZ2V0KCdOVU1CRVJfT0ZfUFJPQ0VTU09S
UycsIDEpKQorCisgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToKKyAgICAgICAgIyBX
ZSByZXR1cm4gJ3dpbi14cCcsIG5vdCAnY2hyb21pdW0td2luLXhwJyBoZXJlLCBmb3IgY29udmVu
aWVuY2UuCisgICAgICAgIHJldHVybiAnd2luJyArIHNlbGYudmVyc2lvbigpCisKKyAgICBkZWYg
dmVyc2lvbihzZWxmKToKKyAgICAgICAgd2ludmVyID0gc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkK
KyAgICAgICAgaWYgd2ludmVyWzBdID09IDYgYW5kICh3aW52ZXJbMV0gPT0gMSk6CisgICAgICAg
ICAgICByZXR1cm4gJy03JworICAgICAgICBpZiB3aW52ZXJbMF0gPT0gNiBhbmQgKHdpbnZlclsx
XSA9PSAwKToKKyAgICAgICAgICAgIHJldHVybiAnLXZpc3RhJworICAgICAgICBpZiB3aW52ZXJb
MF0gPT0gNSBhbmQgKHdpbnZlclsxXSA9PSAxIG9yIHdpbnZlclsxXSA9PSAyKToKKyAgICAgICAg
ICAgIHJldHVybiAnLXhwJworICAgICAgICByZXR1cm4gJycKKworICAgICMKKyAgICAjIFBST1RF
Q1RFRCBST1VUSU5FUworICAgICMKKworICAgIGRlZiBfYnVpbGRfcGF0aChzZWxmLCAqY29tcHMp
OgorICAgICAgICByZXR1cm4gc2VsZi5fcGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsIHNlbGYuX29w
dGlvbnMudGFyZ2V0LCAqY29tcHMpCisKKyAgICBkZWYgX2xpZ2h0dHBkX3BhdGgoc2VsZiwgKmNv
bXBzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScs
ICdsaWdodHRwZCcsICd3aW4nLCAqY29tcHMpCisKKworICAgIGRlZiBfa2lsbF9wcm9jZXNzKHNl
bGYsIHBpZCk6CisgICAgICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KKworICAg
ICAgICBBcmdzOgorICAgICAgICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBiZSBraWxs
ZWQuCisgICAgICAgICIiIgorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoKCd0YXNra2lsbC5leGUn
LCAnL2YnLCAnL3BpZCcsIHN0cihwaWQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91
dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJv
Y2Vzcy5QSVBFKQorCisgICAgZGVmIF9wYXRoX3RvX2FwYWNoZShzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICd1c3InLCAn
c2JpbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwZCcpCisKKyAg
ICBkZWYgX3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKHNlbGYpOgorICAgICAgICByZXR1cm4g
b3MucGF0aC5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCAnaHR0cCcsICdjb25mJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnY3lnd2luLWh0dHBkLmNvbmYnKQorCisgICAgZGVm
IF9wYXRoX3RvX2xpZ2h0dHBkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGlnaHR0cF9w
YXRoKCdMaWdodFRQRC5leGUnKQorCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkX21vZHVsZXMo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9saWdodHRwX3BhdGgoJ2xpYicpCisKKyAgICBk
ZWYgX3BhdGhfdG9fbGlnaHR0cGRfcGhwKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGln
aHR0cF9wYXRoKCdwaHA1JywgJ3BocC1jZ2kuZXhlJykKKworICAgIGRlZiBfcGF0aF90b19kcml2
ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCd0ZXN0X3NoZWxsLmV4
ZScpCisKKyAgICBkZWYgX3BhdGhfdG9faGVscGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fYnVpbGRfcGF0aCgnbGF5b3V0X3Rlc3RfaGVscGVyLmV4ZScpCisKKyAgICBkZWYgX3BhdGhf
dG9faW1hZ2VfZGlmZihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2xh
eW91dF90ZXN0X2hlbHBlci5leGUnKQorCisgICAgZGVmIF9wYXRoX3RvX3dkaWZmKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2lu
JywgJ2JpbicsICd3ZGlmZi5leGUnKQorCisgICAgZGVmIF9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIo
c2VsZiwgc2VydmVyX3BpZCk6CisgICAgICAgICIiIlNodXQgZG93biB0aGUgbGlnaHR0cGQgd2Vi
IHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVsbHkKKyAgICAgICAgc2h1dCBkb3duLgorCisg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzZXJ2ZXJfcGlkOiBUaGUgcHJvY2VzcyBJRCBvZiB0
aGUgcnVubmluZyBzZXJ2ZXIuCisgICAgICAgICIiIgorICAgICAgICBzdWJwcm9jZXNzLlBvcGVu
KCgndGFza2tpbGwuZXhlJywgJy9mJywgJy9pbScsICdMaWdodFRQRC5leGUnKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKS53YWl0KCkKKyAgICAgICAgc3VicHJvY2Vz
cy5Qb3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvaW0nLCAnaHR0cGQuZXhlJyksCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVy
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRw
X3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xOWJhZDY5Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9odHRwX3NlcnZlci5weQpAQCAtMCwwICsxLDI4MSBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkEgY2xhc3MgdG8gaGVscCBzdGFydC9z
dG9wIHRoZSBsaWdodHRwZCBzZXJ2ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMuIiIiCisKKworaW1w
b3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitp
bXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGlt
ZQoraW1wb3J0IHVybGxpYgorCitpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQorCisKK2NsYXNzIEh0
dHBkTm90U3RhcnRlZChFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitkZWYgcmVtb3ZlX2xvZ19m
aWxlcyhmb2xkZXIsIHN0YXJ0c193aXRoKToKKyAgICBmaWxlcyA9IG9zLmxpc3RkaXIoZm9sZGVy
KQorICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICBpZiBmaWxlLnN0YXJ0c3dpdGgoc3Rh
cnRzX3dpdGgpOgorICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKGZvbGRlciwg
ZmlsZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShmdWxsX3BhdGgpCisKKworY2xhc3MgTGlnaHR0
cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydF9vYmosIG91dHB1dF9kaXIsIGJhY2tncm91bmQ9RmFsc2UsIHBvcnQ9Tm9uZSwK
KyAgICAgICAgICAgICAgICAgcm9vdD1Ob25lLCByZWdpc3Rlcl9jeWd3aW49Tm9uZSwgcnVuX2Jh
Y2tncm91bmQ9Tm9uZSk6CisgICAgICAgICIiIkFyZ3M6CisgICAgICAgICAgb3V0cHV0X2Rpcjog
dGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdCBkaXJlY3RvcnkKKyAg
ICAgICAgIiIiCisgICAgICAgICMgV2Via2l0IHRlc3RzCisgICAgICAgIGh0dHBfc2VydmVyX2Jh
c2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18oc2VsZiwgcG9ydF9vYmopCisgICAgICAgIHNlbGYu
X291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisg
ICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CisgICAg
ICAgIHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbiA9IHJlZ2lzdGVyX2N5Z3dpbgorICAgICAgICBzZWxm
Ll9ydW5fYmFja2dyb3VuZCA9IHJ1bl9iYWNrZ3JvdW5kCisgICAgICAgIGlmIHNlbGYuX3BvcnQ6
CisgICAgICAgICAgICBzZWxmLl9wb3J0ID0gaW50KHNlbGYuX3BvcnQpCisKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgX3dlYmtpdF90ZXN0cyA9IG9zLnBhdGguam9pbihzZWxmLl9wb3J0X29i
ai5sYXlvdXRfdGVzdHNfZGlyKCksCisgICAgICAgICAgICAgICAgICdodHRwJywgJ3Rlc3RzJykK
KyAgICAgICAgICAgIF93ZWJraXRfdGVzdHMgPSBvcy5wYXRoLmpvaW4oc2VsZi5fcG9ydF9vYmou
bGF5b3V0X3Rlc3RzX2RpcigpLAorICAgICAgICAgICAgICAgICAnZmFzdCcsICdqcycsICdyZXNv
dXJjZXMnKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBfd2Via2l0X3Rlc3RzID0gTm9u
ZQorICAgICAgICAgICAgX2pzX3Rlc3RfcmVzb3VyY2UgPSBOb25lCisKKyAgICAgICAgIyBTZWxm
IGdlbmVyYXRlZCBjZXJ0aWZpY2F0ZSBmb3IgU1NMIHNlcnZlciAoZm9yIGNsaWVudCBjZXJ0IGdl
dAorICAgICAgICAjIDxiYXNlLXBhdGg+XGNocm9tZVx0ZXN0XGRhdGFcc3NsXGNlcnRzXHJvb3Rf
Y2FfY2VydC5jcnQpCisgICAgICAgIHNlbGYuX3BlbV9maWxlID0gb3MucGF0aC5qb2luKAorICAg
ICAgICAgICAgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLCAnaHR0
cGQyLnBlbScpCisKKyAgICAgICAgIyBPbmUgbWFwcGluZyB3aGVyZSB3ZSBjYW4gZ2V0IHRvIGV2
ZXJ5dGhpbmcKKyAgICAgICAgVklSVFVBTENPTkZJRyA9IFtdCisKKyAgICAgICAgaWYgX3dlYmtp
dF90ZXN0czoKKyAgICAgICAgICAgIFZJUlRVQUxDT05GSUcuZXh0ZW5kKAorICAgICAgICAgICAg
ICAgIyBUaHJlZSBtYXBwaW5ncyAob25lIHdpdGggU1NMKSBmb3IgTGF5b3V0VGVzdHMgaHR0cCB0
ZXN0cworICAgICAgICAgICAgICAgW3sncG9ydCc6IDgwMDAsICdkb2Nyb290JzogX3dlYmtpdF90
ZXN0c30sCisgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MCwgJ2RvY3Jvb3QnOiBfd2Via2l0
X3Rlc3RzfSwKKyAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnZG9jcm9vdCc6IF93ZWJr
aXRfdGVzdHMsCisgICAgICAgICAgICAgICAgICdzc2xjZXJ0Jzogc2VsZi5fcGVtX2ZpbGV9XSkK
KworICAgIGRlZiBpc19ydW5uaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2Vz
cyAhPSBOb25lCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfcnVu
bmluZygpOgorICAgICAgICAgICAgcmFpc2UgJ0xpZ2h0dHBkIGFscmVhZHkgcnVubmluZycKKwor
ICAgICAgICBiYXNlX2NvbmZfZmlsZSA9IHNlbGYuX3BvcnRfb2JqLnBhdGhfZnJvbV9iYXNlKCd0
aGlyZF9wYXJ0eScsCisgICAgICAgICAgICAnV2ViS2l0VG9vbHMnLCAnU2NyaXB0cycsICd3ZWJr
aXRweScsICdsYXlvdXRfdGVzdHMnLAorICAgICAgICAgICAgJ3BvcnQnLCAnbGlnaHR0cGQuY29u
ZicpCisgICAgICAgIG91dF9jb25mX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2Rp
ciwgJ2xpZ2h0dHBkLmNvbmYnKQorICAgICAgICB0aW1lX3N0ciA9IHRpbWUuc3RyZnRpbWUoIiVk
JWIlWS0lSCVNJVMiKQorICAgICAgICBhY2Nlc3NfZmlsZV9uYW1lID0gImFjY2Vzcy5sb2ctIiAr
IHRpbWVfc3RyICsgIi50eHQiCisgICAgICAgIGFjY2Vzc19sb2cgPSBvcy5wYXRoLmpvaW4oc2Vs
Zi5fb3V0cHV0X2RpciwgYWNjZXNzX2ZpbGVfbmFtZSkKKyAgICAgICAgbG9nX2ZpbGVfbmFtZSA9
ICJlcnJvci5sb2ctIiArIHRpbWVfc3RyICsgIi50eHQiCisgICAgICAgIGVycm9yX2xvZyA9IG9z
LnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBsb2dfZmlsZV9uYW1lKQorCisgICAgICAgICMg
UmVtb3ZlIG9sZCBsb2cgZmlsZXMuIFdlIG9ubHkgbmVlZCB0byBrZWVwIHRoZSBsYXN0IG9uZXMu
CisgICAgICAgIHJlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgImFjY2Vzcy5sb2ct
IikKKyAgICAgICAgcmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCAiZXJyb3IubG9n
LSIpCisKKyAgICAgICAgIyBXcml0ZSBvdXQgdGhlIGNvbmZpZworICAgICAgICBmID0gZmlsZShi
YXNlX2NvbmZfZmlsZSwgJ3JiJykKKyAgICAgICAgYmFzZV9jb25mID0gZi5yZWFkKCkKKyAgICAg
ICAgZi5jbG9zZSgpCisKKyAgICAgICAgZiA9IGZpbGUob3V0X2NvbmZfZmlsZSwgJ3diJykKKyAg
ICAgICAgZi53cml0ZShiYXNlX2NvbmYpCisKKyAgICAgICAgIyBXcml0ZSBvdXQgb3VyIGNnaSBo
YW5kbGVycy4gIFJ1biBwZXJsIHRocm91Z2ggZW52IHNvIHRoYXQgaXQKKyAgICAgICAgIyBwcm9j
ZXNzZXMgdGhlICMhIGxpbmUgYW5kIHJ1bnMgcGVybCB3aXRoIHRoZSBwcm9wZXIgY29tbWFuZAor
ICAgICAgICAjIGxpbmUgYXJndW1lbnRzLiBFbXVsYXRlIGFwYWNoZSdzIG1vZF9hc2lzIHdpdGgg
YSBjYXQgY2dpIGhhbmRsZXIuCisgICAgICAgIGYud3JpdGUoKCdjZ2kuYXNzaWduID0gKCAiLmNn
aSIgID0+ICIvdXNyL2Jpbi9lbnYiLFxuJworICAgICAgICAgICAgICAgICAnICAgICAgICAgICAg
ICAgIi5wbCIgICA9PiAiL3Vzci9iaW4vZW52IixcbicKKyAgICAgICAgICAgICAgICAgJyAgICAg
ICAgICAgICAgICIuYXNpcyIgPT4gIi9iaW4vY2F0IixcbicKKyAgICAgICAgICAgICAgICAgJyAg
ICAgICAgICAgICAgICIucGhwIiAgPT4gIiVzIiApXG5cbicpICUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0X29iai5fcGF0aF90b19saWdodHRwZF9waHAo
KSkKKworICAgICAgICAjIFNldHVwIGxvZyBmaWxlcworICAgICAgICBmLndyaXRlKCgnc2VydmVy
LmVycm9ybG9nID0gIiVzIlxuJworICAgICAgICAgICAgICAgICAnYWNjZXNzbG9nLmZpbGVuYW1l
ID0gIiVzIlxuXG4nKSAlIChlcnJvcl9sb2csIGFjY2Vzc19sb2cpKQorCisgICAgICAgICMgU2V0
dXAgdXBsb2FkIGZvbGRlcnMuIFVwbG9hZCBmb2xkZXIgaXMgdG8gaG9sZCB0ZW1wb3JhcnkgdXBs
b2FkIGZpbGVzCisgICAgICAgICMgYW5kIGFsc28gUE9TVCBkYXRhLiBUaGlzIGlzIHVzZWQgdG8g
c3VwcG9ydCBYSFIgbGF5b3V0IHRlc3RzIHRoYXQKKyAgICAgICAgIyBkb2VzIFBPU1QuCisgICAg
ICAgIGYud3JpdGUoKCdzZXJ2ZXIudXBsb2FkLWRpcnMgPSAoICIlcyIgKVxuXG4nKSAlIChzZWxm
Ll9vdXRwdXRfZGlyKSkKKworICAgICAgICAjIFNldHVwIGEgbGluayB0byB3aGVyZSB0aGUganMg
dGVzdCB0ZW1wbGF0ZXMgYXJlIHN0b3JlZAorICAgICAgICBmLndyaXRlKCgnYWxpYXMudXJsID0g
KCAiL2pzLXRlc3QtcmVzb3VyY2VzIiA9PiAiJXMiIClcblxuJykgJQorICAgICAgICAgICAgICAg
ICAgICAoc2VsZi5fanNfdGVzdF9yZXNvdXJjZSkpCisKKyAgICAgICAgIyBkdW1wIG91dCBvZiB2
aXJ0dWFsIGhvc3QgY29uZmlnIGF0IHRoZSBib3R0b20uCisgICAgICAgIGlmIHNlbGYuX3Jvb3Q6
CisgICAgICAgICAgICBpZiBzZWxmLl9wb3J0OgorICAgICAgICAgICAgICAgICMgSGF2ZSBib3Ro
IHBvcnQgYW5kIHJvb3QgZGlyLgorICAgICAgICAgICAgICAgIG1hcHBpbmdzID0gW3sncG9ydCc6
IHNlbGYuX3BvcnQsICdkb2Nyb290Jzogc2VsZi5fcm9vdH1dCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgICMgSGF2ZSBvbmx5IGEgcm9vdCBkaXIgLSBzZXQgdGhlIHBvcnRzIGFz
IGZvciBMYXlvdXRUZXN0cy4KKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdXNlZCBpbiB1aV90
ZXN0cyB0byBydW4gaHR0cCB0ZXN0cyBhZ2FpbnN0IGEgYnJvd3Nlci4KKworICAgICAgICAgICAg
ICAgICMgZGVmYXVsdCBzZXQgb2YgcG9ydHMgYXMgZm9yIExheW91dFRlc3RzIGJ1dCB3aXRoIGEK
KyAgICAgICAgICAgICAgICAjIHNwZWNpZmllZCByb290LgorICAgICAgICAgICAgICAgIG1hcHBp
bmdzID0gW3sncG9ydCc6IDgwMDAsICdkb2Nyb290Jzogc2VsZi5fcm9vdH0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MCwgJ2RvY3Jvb3QnOiBzZWxmLl9yb290fSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnZG9jcm9vdCc6IHNl
bGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc2xjZXJ0Jzogc2VsZi5f
cGVtX2ZpbGV9XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFwcGluZ3MgPSBzZWxmLlZJ
UlRVQUxDT05GSUcKKyAgICAgICAgZm9yIG1hcHBpbmcgaW4gbWFwcGluZ3M6CisgICAgICAgICAg
ICBzc2xfc2V0dXAgPSAnJworICAgICAgICAgICAgaWYgJ3NzbGNlcnQnIGluIG1hcHBpbmc6Cisg
ICAgICAgICAgICAgICAgc3NsX3NldHVwID0gKCcgIHNzbC5lbmdpbmUgPSAiZW5hYmxlIlxuJwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBzc2wucGVtZmlsZSA9ICIlcyJcbicgJSBt
YXBwaW5nWydzc2xjZXJ0J10pCisKKyAgICAgICAgICAgIGYud3JpdGUoKCckU0VSVkVSWyJzb2Nr
ZXQiXSA9PSAiMTI3LjAuMC4xOiVkIiB7XG4nCisgICAgICAgICAgICAgICAgICAgICAnICBzZXJ2
ZXIuZG9jdW1lbnQtcm9vdCA9ICIlcyJcbicgKworICAgICAgICAgICAgICAgICAgICAgc3NsX3Nl
dHVwICsKKyAgICAgICAgICAgICAgICAgICAgICd9XG5cbicpICUgKG1hcHBpbmdbJ3BvcnQnXSwg
bWFwcGluZ1snZG9jcm9vdCddKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZXhlY3V0
YWJsZSA9IHNlbGYuX3BvcnRfb2JqLl9wYXRoX3RvX2xpZ2h0dHBkKCkKKyAgICAgICAgbW9kdWxl
X3BhdGggPSBzZWxmLl9wb3J0X29iai5fcGF0aF90b19saWdodHRwZF9tb2R1bGVzKCkKKyAgICAg
ICAgc3RhcnRfY21kID0gW2V4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAjIE5ld2x5
IHdyaXR0ZW4gY29uZmlnIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICctZicsIHNlbGYuX3Bv
cnRfb2JqLl9wYXRoX2Zyb21fYmFzZShzZWxmLl9vdXRwdXRfZGlyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpZ2h0dHBkLmNvbmYn
KSwKKyAgICAgICAgICAgICAgICAgICAgICMgV2hlcmUgaXQgY2FuIGZpbmQgaXRzIG1vZHVsZSBk
eW5hbWljIGxpYnJhcmllcworICAgICAgICAgICAgICAgICAgICAgJy1tJywgbW9kdWxlX3BhdGhd
CisKKyAgICAgICAgaWYgbm90IHNlbGYuX3J1bl9iYWNrZ3JvdW5kOgorICAgICAgICAgICAgc3Rh
cnRfY21kLmFwcGVuZCgjIERvbid0IGJhY2tncm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJy1EJykKKworICAgICAgICAjIENvcHkgbGlibGlnaHRjb21wLmR5bGliIHRvIC90bXAv
bGlnaHR0cGQvbGliIHRvIHdvcmsgYXJvdW5kIHRoZQorICAgICAgICAjIGJ1ZyB0aGF0IG1vZF9h
bGlhcy5zbyBsb2FkcyBpdCBmcm9tIHRoZSBoYXJkIGNvZGVkIHBhdGguCisgICAgICAgIGlmIHN5
cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgIHRtcF9tb2R1bGVfcGF0aCA9ICcv
dG1wL2xpZ2h0dHBkL2xpYicKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0bXBf
bW9kdWxlX3BhdGgpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRtcF9tb2R1bGVfcGF0
aCkKKyAgICAgICAgICAgIGxpYl9maWxlID0gJ2xpYmxpZ2h0Y29tcC5keWxpYicKKyAgICAgICAg
ICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4obW9kdWxlX3BhdGgsIGxpYl9maWxlKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4odG1wX21vZHVsZV9wYXRo
LCBsaWJfZmlsZSkpCisKKyAgICAgICAgIyBQdXQgdGhlIGN5Z3dpbiBkaXJlY3RvcnkgZmlyc3Qg
aW4gdGhlIHBhdGggdG8gZmluZCBjeWd3aW4xLmRsbAorICAgICAgICBlbnYgPSBvcy5lbnZpcm9u
CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgorICAgICAg
ICAgICAgZW52WydQQVRIJ10gPSAnJXM7JXMnICUgKAorICAgICAgICAgICAgICAgIHBvcnQucGF0
aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nKSwKKyAgICAgICAgICAg
ICAgICBlbnZbJ1BBVEgnXSkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBh
bmQgc2VsZi5fcmVnaXN0ZXJfY3lnd2luOgorICAgICAgICAgICAgc2V0dXBfbW91bnQgPSBwb3J0
LnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXR1cF9tb3VudC5iYXQnKQor
ICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihzZXR1cF9tb3VudCkud2FpdCgpCisKKyAgICAg
ICAgbG9nZ2luZy5kZWJ1ZygnU3RhcnRpbmcgaHR0cCBzZXJ2ZXInKQorICAgICAgICBzZWxmLl9w
cm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzdGFydF9jbWQsIGVudj1lbnYpCisKKyAgICAgICAg
IyBXYWl0IGZvciBzZXJ2ZXIgdG8gc3RhcnQuCisgICAgICAgIHNlbGYubWFwcGluZ3MgPSBtYXBw
aW5ncworICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2FpdF9mb3JfYWN0aW9uKAorICAg
ICAgICAgICAgc2VsZi5pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMpCisKKyAgICAgICAg
IyBPdXIgcHJvY2VzcyB0ZXJtaW5hdGVkIGFscmVhZHkKKyAgICAgICAgaWYgbm90IHNlcnZlcl9z
dGFydGVkIG9yIHNlbGYuX3Byb2Nlc3MucmV0dXJuY29kZSAhPSBOb25lOgorICAgICAgICAgICAg
cmFpc2UgZ29vZ2xlLmh0dHBkX3V0aWxzLkh0dHBkTm90U3RhcnRlZCgnRmFpbGVkIHRvIHN0YXJ0
IGh0dHBkLicpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU2VydmVyIHN1Y2Nlc3NmdWxseSBz
dGFydGVkIikKKworICAgICMgVE9ETyhkZWFubSk6IEZpbmQgYSBuaWNlciB3YXkgdG8gc2h1dGRv
d24gY2xlYW5seS4gIE91ciBsb2cgZmlsZXMgYXJlCisgICAgIyBwcm9iYWJseSBub3QgYmVpbmcg
Zmx1c2hlZCwgZXRjLi4uIHdoeSBkb2Vzbid0IG91ciBweXRob24gaGF2ZSBvcy5raWxsID8KKwor
ICAgIGRlZiBzdG9wKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGZvcmNlIGFu
ZCBub3Qgc2VsZi5pc19ydW5uaW5nKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBo
dHRwZF9waWQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICBo
dHRwZF9waWQgPSBzZWxmLl9wcm9jZXNzLnBpZAorICAgICAgICBwb3J0Ll9zaHV0X2Rvd25faHR0
cF9zZXJ2ZXIoaHR0cGRfcGlkKQorCisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAg
ICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQorICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5v
bmUKKworaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICAjIFByb3ZpZGUgc29tZSBjb21t
YW5kIGxpbmUgcGFyYW1zIGZvciBzdGFydGluZy9zdG9wcGluZyB0aGUgaHR0cCBzZXJ2ZXIKKyAg
ICAjIG1hbnVhbGx5LiBBbHNvIHVzZWQgaW4gdWlfdGVzdHMgdG8gcnVuIGh0dHAgbGF5b3V0IHRl
c3RzIGluIGEgYnJvd3Nlci4KKyAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFy
c2VyKCkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1rJywgJy0tc2VydmVyJywKKyAg
ICAgICAgaGVscD0nU2VydmVyIGFjdGlvbiAoc3RhcnR8c3RvcCknKQorICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbignLXAnLCAnLS1wb3J0JywKKyAgICAgICAgaGVscD0nUG9ydCB0byBsaXN0
ZW4gb24gKG92ZXJyaWRlcyBsYXlvdXQgdGVzdCBwb3J0cyknKQorICAgIG9wdGlvbl9wYXJzZXIu
YWRkX29wdGlvbignLXInLCAnLS1yb290JywKKyAgICAgICAgaGVscD0nQWJzb2x1dGUgcGF0aCB0
byBEb2N1bWVudFJvb3QgKG92ZXJyaWRlcyBsYXlvdXQgdGVzdCByb290cyknKQorICAgIG9wdGlv
bl9wYXJzZXIuYWRkX29wdGlvbignLS1yZWdpc3Rlcl9jeWd3aW4nLCBhY3Rpb249InN0b3JlX3Ry
dWUiLAorICAgICAgICBkZXN0PSJyZWdpc3Rlcl9jeWd3aW4iLCBoZWxwPSdSZWdpc3RlciBDeWd3
aW4gcGF0aHMgKG9uIFdpbiB0cnkgYm90cyknKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlv
bignLS1ydW5fYmFja2dyb3VuZCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlc3Q9
InJ1bl9iYWNrZ3JvdW5kIiwKKyAgICAgICAgaGVscD0nUnVuIG9uIGJhY2tncm91bmQgKGZvciBy
dW5uaW5nIGFzIFVJIHRlc3QpJykKKyAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5w
YXJzZV9hcmdzKCkKKworICAgIGlmIG5vdCBvcHRpb25zLnNlcnZlcjoKKyAgICAgICAgcHJpbnQg
KCdVc2FnZTogJXMgLS1zZXJ2ZXIge3N0YXJ0fHN0b3B9IFstLXJvb3Q9cm9vdF9kaXJdJworICAg
ICAgICAgICAgICAgJyBbLS1wb3J0PXBvcnRfbnVtYmVyXScgJSBzeXMuYXJndlswXSkKKyAgICBl
bHNlOgorICAgICAgICBpZiAob3B0aW9ucy5yb290IGlzIE5vbmUpIGFuZCAob3B0aW9ucy5wb3J0
IGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgICMgc3BlY2lmeWluZyByb290IGJ1dCBub3QgcG9y
dCBtZWFucyB3ZSB3YW50IGh0dHBkIG9uIGRlZmF1bHQKKyAgICAgICAgICAgICMgc2V0IG9mIHBv
cnRzIHRoYXQgTGF5b3V0VGVzdCB1c2UsIGJ1dCBwb2ludGluZyB0byBhIGRpZmZlcmVudAorICAg
ICAgICAgICAgIyBzb3VyY2Ugb2YgdGVzdHMuIFNwZWNpZnlpbmcgcG9ydCBidXQgbm8gcm9vdCBk
b2VzIG5vdCBzZWVtCisgICAgICAgICAgICAjIG1lYW5pbmdmdWwuCisgICAgICAgICAgICByYWlz
ZSAnU3BlY2lmeWluZyBwb3J0IHJlcXVpcmVzIGFsc28gYSByb290LicKKyAgICAgICAgaHR0cGQg
PSBMaWdodHRwZCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgcG9ydD1vcHRpb25zLnBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdD1vcHRp
b25zLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfY3lnd2luPW9wdGlv
bnMucmVnaXN0ZXJfY3lnd2luLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9iYWNrZ3Jv
dW5kPW9wdGlvbnMucnVuX2JhY2tncm91bmQpCisgICAgICAgIGlmICdzdGFydCcgPT0gb3B0aW9u
cy5zZXJ2ZXI6CisgICAgICAgICAgICBodHRwZC5zdGFydCgpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBodHRwZC5zdG9wKGZvcmNlPVRydWUpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2Jhc2UucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVy
X2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjMzg1ZAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5weQpAQCAtMCwwICsxLDcwIEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQmFzZSBjbGFzcyB3aXRoIGNvbW1v
biByb3V0aW5lcyBiZXR3ZWVuIHRoZSBBcGFjaGUgYW5kIExpZ2h0dHBkIHNlcnZlcnMuIiIiCisK
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHVybGxpYgorCisKK2NsYXNzIEh0
dHBTZXJ2ZXJCYXNlKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmop
OgorICAgICAgICBzZWxmLl9wb3J0X29iaiA9IHBvcnRfb2JqCisKKyAgICBkZWYgd2FpdF9mb3Jf
YWN0aW9uKHNlbGYsIGFjdGlvbik6CisgICAgICAgICIiIlJlcGVhdCB0aGUgYWN0aW9uIGZvciAy
MCBzZWNvbmRzIG9yIHVudGlsIGl0IHN1Y2NlZWRzLiBSZXR1cm5zCisgICAgICAgIHdoZXRoZXIg
aXQgc3VjY2VlZGVkLiIiIgorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAg
ICAgd2hpbGUgdGltZS50aW1lKCkgLSBzdGFydF90aW1lIDwgMjA6CisgICAgICAgICAgICBpZiBh
Y3Rpb24oKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgdGltZS5z
bGVlcCgxKQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX3NlcnZlcl9ydW5u
aW5nX29uX2FsbF9wb3J0cyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBz
ZXJ2ZXIgaXMgcnVubmluZyBvbiBhbGwgdGhlIGRlc2lyZWQgcG9ydHMuIiIiCisgICAgICAgIGZv
ciBtYXBwaW5nIGluIHNlbGYubWFwcGluZ3M6CisgICAgICAgICAgICBpZiAnc3NsY2VydCcgaW4g
bWFwcGluZzoKKyAgICAgICAgICAgICAgICBodHRwX3N1ZmZpeCA9ICdzJworICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBodHRwX3N1ZmZpeCA9ICcnCisKKyAgICAgICAgICAgIHVy
bCA9ICdodHRwJXM6Ly8xMjcuMC4wLjE6JWQvJyAlIChodHRwX3N1ZmZpeCwgbWFwcGluZ1sncG9y
dCddKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1cmxs
aWIudXJsb3Blbih1cmwpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU2VydmVyIHJ1
bm5pbmcgYXQgJXMiICUgdXJsKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAg
ICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU2VydmVyIE5PVCBydW5uaW5nIGF0ICVzIiAlIHVybCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gVHJ1ZQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9o
dHRwZDIucGVtIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9odHRwZDIucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNDliNzgK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2h0dHBkMi5wZW0KQEAgLTAsMCArMSw0MSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJ
Q0FURS0tLS0tCitNSUlFWkRDQ0FreWdBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUVVGQURCZ01S
QXdEZ1lEVlFRREV3ZFVaWE4wCitJRU5CTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNCTUtR
MkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCeE1OCitUVzkxYm5SaGFXNGdWbWxsZHpFU01CQUdBMVVF
Q2hNSlEyVnlkQ0JVWlhOME1CNFhEVEE0TURjeU9ESXlNekl5CitPRm9YRFRFek1EY3lOekl5TXpJ
eU9Gb3dTakVMTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtCitiM0p1YVdFeEVq
QVFCZ05WQkFvVENVTmxjblFnVkdWemRERVNNQkFHQTFVRUF4TUpNVEkzTGpBdU1DNHhNSUdmCitN
QTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRRFFqMnRQV1BVZ2J1STRIMy8zZG50dHFW
Ym5kd1UzCiszQmRSQ2Q2N0RGTTQ0R1Jyc2pEU0g0YlkvRWJGeVg5RDUyZC9peTZaYUFtRGVQY0N6
NWsvZmdQM0RNdWp5a1lHCitxZ05pVjJ5d3hUbE1qN05sTjJDN1NSdDY4ZlFNWnI1aUk3cnlwZHh1
YVp0OWxTTUQzRU5CZmZZdHVMVHlaZDlhCiszSlBKZTFUYUlhYjVHd0lEQVFBQm80SENNSUcvTUFr
R0ExVWRFd1FDTUFBd0hRWURWUjBPQkJZRUZDWUxCdjVLCit4NXNMTlZscExoNUZ3VHdoZERsN01J
R1NCZ05WSFNNRWdZb3dnWWVBRkYzT2Y1bmoxQmxCTVUvR3o3RWw5VnF2Cis0NWN4b1dTa1lqQmdN
UkF3RGdZRFZRUURFd2RVWlhOMElFTkJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFCitDQk1L
UTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTlRXOTFiblJoYVc0Z1ZtbGxkekVTTUJBR0ExVUVD
aE1KCitRMlZ5ZENCVVpYTjBnZ2tBMUZHVDFEL2UyVTR3RFFZSktvWklodmNOQVFFRkJRQURnZ0lC
QUV0a1ZtTE9iVWdrCitiMmNJQTJTK1FEdGlmcTFVZ1ZmQmJ5dHZSMmxGbW5BRE9SNTVtbzBnSFFH
M0hIcXE0ZzAzNExtb1ZYREhoVWs4CitHYjZhRml2NFF1Ym1WaExYY1VlbFRSWHdpTnZHemtXN3BD
NkpycTEwNWhkUGp6WE1LVGNtaUxhb3BtNUZxZmM3CitoajVDbjFTanNwYzhwZGVRanJiZU1kdmNh
N0tsRnJHUDhZa3dDVTJ4T09YOVBpTjlHMDk2NkJXZmpuci9mWlpwCisrT1FWdVVGSGRpQVp3dGhF
TXVEcEFBWEhxWVhJc2VybWdkT3BnSmFBNTNjZjhOcUJWMlFHaHRGZ3RzSkNSb2l1Cis3REtxaHlS
V0JHeXoxOVZJSDJiN3krNnF2UVZ4dUhrMTlrS1JNMG5mdHcveU5jSm5tN2d0dHRlc3BNVVBzT01h
CithMlNEMUcwaG0wVE5ENnZ4YUJoZ1IzY1ZxcGwvcUlwQWRGaTAwVG03aFR5WUU3STQzelBXMDN0
Ky9EcEN0M1VtCitFTVJac1E5MGNvNXErYmN4L3ZRN1lBdHdVaDMwdU1iMHdwaWJleUN3RHA4Y3FO
bVNpUmtFdWMvRmpUWWVzNXQ4Cis1Z1IvL1dYMWwwK3Fqcmp1c085Tm1vTG5xMllrNlVjaW9YK3or
cTZaL2R1ZEdmcWhMZmVXRDJRMExXWUEyNDJDCitkN2ttNVkzS0F0MVBKZFZzb2YvYWlWaFZkZGRZ
L09JRUtUUlFoV0VkRGJvc3kyZWgxNkJDS1hUMkZGdmhORGcxCitBWUZ2bjZJOG5qOUlsZE1KaUlj
M0RkaGFjRUFFelJNZVJnUGR6QWExZ3JpS1VHa254c3lUeVJpaThydTBXUzZ3CitEQ05ybERPVlhk
ellHRVpvb0JJNzZCRFZZMFcwYWtqVgorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1C
RUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1hRSUJBQUtCZ1FEUWoydFBXUFVnYnVJNEgz
LzNkbnR0cVZibmR3VTMzQmRSQ2Q2N0RGTTQ0R1Jyc2pEUworSDRiWS9FYkZ5WDlENTJkL2l5Nlph
QW1EZVBjQ3o1ay9mZ1AzRE11anlrWUdxZ05pVjJ5d3hUbE1qN05sTjJDNworU1J0NjhmUU1acjVp
STdyeXBkeHVhWnQ5bFNNRDNFTkJmZll0dUxUeVpkOWEzSlBKZTFUYUlhYjVHd0lEQVFBQgorQW9H
QU5IWHU4ejJZSXpsaEUrYndoR204TUdCcEtMM3FoUnVLamVyaXFNQTM2dFdlek93OGxZNHltRUFV
K1VsdgorQnNDZGF4cXlkUW9UWW91NTdtNFR5VUhFY3hxOXBxM0gwekIwcUw3MDlEZEhpL3Q0emJW
OVhJb0F6QzV2MC9oRworOStDYTI5VHdDMDJGQ3crcUxrTnJ0d0Nwd09jUW1jK2JQeHF2RnUxaU1p
YWhVUkVDUVFEMkkvSGkyNDEzQ01aegorVEJqbDhmTWlWTzlHaEEySjBzYzhRaStZY2dKYWthTEQ5
eGNiYWlMa1R6UFpEbEEzODlDMWI2SWErcG9BcjRZQQorVmUwRkZieHBBa0VBMk9vYmF5eUhFL1F0
UEVxb3k2TkxSNTdqaXJtVkJObVNXV2Q0bEF5TDVVSUhJWVZ0dEpaZworOENMdmJ6YVUvaURHd1Ir
d0tzTTY2NHJLUEhFbXRseW80d0pCQU1lU3FZTzVaT0NKR3U5TldqckhqTTNmZEFzRworOHpzMnpo
aUx5YStmY1UwaUhJa3NCVzVUQm10NzFKdy93TWM5UjVKMUswa1l2Rm1sOTg2NTNPNXNpMUVDUUJD
aworUlY0L21FMXJtbHpaellGeUVjQjQ3RFFrY001aWN0dnhHRXNqZTBnbmZLeVJ0QXo2ekkwZjRR
YkRSVU1KK0xXdworWEsrck1zWUhhK1NmT2IwYjlza0NRUUNMZGVvbnNJcEZEdi9VditmbEhJU3kw
V0ErQUZrTFhyUmtCS2g2Ry9PRAorZE1IYU5ldmtKZ1VucGNlVkVua3JkZW5wNUNjRW9GVEkxN3Bk
K25CZ0RtL0IKKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2xpZ2h0dHBkLmNvbmYg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2xpZ2h0dHBk
LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMxNTBkZAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvbGlnaHR0cGQuY29uZgpAQCAtMCwwICsxLDg5IEBACitzZXJ2ZXIudGFnICAgICAgICAgICAg
ICAgICAgPSAiTGlnaHRUUEQvMS40LjE5IChXaW4zMikiCitzZXJ2ZXIubW9kdWxlcyAgICAgICAg
ICAgICAgPSAoICJtb2RfYWNjZXNzbG9nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIm1vZF9hbGlhcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfY2dp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9yZXdyaXRlIiApCisKKyMg
ZGVmYXVsdCBkb2N1bWVudCByb290IHJlcXVpcmVkCitzZXJ2ZXIuZG9jdW1lbnQtcm9vdCA9ICIu
IgorCisjIGZpbGVzIHRvIGNoZWNrIGZvciBpZiAuLi4vIGlzIHJlcXVlc3RlZAoraW5kZXgtZmls
ZS5uYW1lcyAgICAgICAgICAgID0gKCAiaW5kZXgucGhwIiwgImluZGV4LnBsIiwgImluZGV4LmNn
aSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRleC5odG1sIiwgImluZGV4
Lmh0bSIsICJkZWZhdWx0Lmh0bSIgKQorIyBtaW1ldHlwZSBtYXBwaW5nCittaW1ldHlwZS5hc3Np
Z24gICAgICAgICAgICAgPSAoCisgICIuZ2lmIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9naWYi
LAorICAiLmpwZyIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisgICIuanBlZyIgICAg
ICAgICA9PiAgICAgICJpbWFnZS9qcGVnIiwKKyAgIi5wbmciICAgICAgICAgID0+ICAgICAgImlt
YWdlL3BuZyIsCisgICIuc3ZnIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9zdmcreG1sIiwKKyAg
Ii5jc3MiICAgICAgICAgID0+ICAgICAgInRleHQvY3NzIiwKKyAgIi5odG1sIiAgICAgICAgID0+
ICAgICAgInRleHQvaHRtbCIsCisgICIuaHRtIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwi
LAorICAiLnhodG1sIiAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veGh0bWwreG1sIiwKKyAg
Ii5qcyIgICAgICAgICAgID0+ICAgICAgInRleHQvamF2YXNjcmlwdCIsCisgICIubG9nIiAgICAg
ICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5jb25mIiAgICAgICAgID0+ICAgICAgInRl
eHQvcGxhaW4iLAorICAiLnRleHQiICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIu
dHh0IiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5kdGQiICAgICAgICAgID0+
ICAgICAgInRleHQveG1sIiwKKyAgIi54bWwiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwK
KyAgIi5tYW5pZmVzdCIgICAgID0+ICAgICAgInRleHQvY2FjaGUtbWFuaWZlc3QiLAorICkKKwor
IyBVc2UgdGhlICJDb250ZW50LVR5cGUiIGV4dGVuZGVkIGF0dHJpYnV0ZSB0byBvYnRhaW4gbWlt
ZSB0eXBlIGlmIHBvc3NpYmxlCittaW1ldHlwZS51c2UteGF0dHIgICAgICAgICAgPSAiZW5hYmxl
IgorCisjIworIyB3aGljaCBleHRlbnNpb25zIHNob3VsZCBub3QgYmUgaGFuZGxlIHZpYSBzdGF0
aWMtZmlsZSB0cmFuc2ZlcgorIworIyAucGhwLCAucGwsIC5mY2dpIGFyZSBtb3N0IG9mdGVuIGhh
bmRsZWQgYnkgbW9kX2Zhc3RjZ2kgb3IgbW9kX2NnaQorc3RhdGljLWZpbGUuZXhjbHVkZS1leHRl
bnNpb25zID0gKCAiLnBocCIsICIucGwiLCAiLmNnaSIgKQorCitzZXJ2ZXIuYmluZCA9ICJsb2Nh
bGhvc3QiCitzZXJ2ZXIucG9ydCA9IDgwMDEKKworIyMgdmlydHVhbCBkaXJlY3RvcnkgbGlzdGlu
Z3MKK2Rpci1saXN0aW5nLmFjdGl2YXRlICAgICAgICA9ICJlbmFibGUiCisjZGlyLWxpc3Rpbmcu
ZW5jb2RpbmcgICAgICAgPSAiaXNvLTg4NTktMiIKKyNkaXItbGlzdGluZy5leHRlcm5hbC1jc3Mg
ICA9ICJzdHlsZS9vbGRzdHlsZS5jc3MiCisKKyMjIGVuYWJsZSBkZWJ1Z2dpbmcKKyNkZWJ1Zy5s
b2ctcmVxdWVzdC1oZWFkZXIgICA9ICJlbmFibGUiCisjZGVidWcubG9nLXJlc3BvbnNlLWhlYWRl
ciAgPSAiZW5hYmxlIgorI2RlYnVnLmxvZy1yZXF1ZXN0LWhhbmRsaW5nID0gImVuYWJsZSIKKyNk
ZWJ1Zy5sb2ctZmlsZS1ub3QtZm91bmQgICA9ICJlbmFibGUiCisKKyMjIyMgU1NMIGVuZ2luZQor
I3NzbC5lbmdpbmUgICAgICAgICAgICAgICAgID0gImVuYWJsZSIKKyNzc2wucGVtZmlsZSAgICAg
ICAgICAgICAgICA9ICJzZXJ2ZXIucGVtIgorCisjIFJld3JpdGUgcnVsZSBmb3IgdXRmLTggcGF0
aCB0ZXN0IChMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3VyaS91dGY4LXBhdGguaHRtbCkKKyMgU2Vl
IHRoZSBhcGFjaGUgcmV3cml0ZSBydWxlIGF0IExheW91dFRlc3RzL2h0dHAvdGVzdHMvdXJpL2lu
dGVyY2VwdC8uaHRhY2Nlc3MKKyMgUmV3cml0ZSBydWxlIGZvciBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2FwcGNhY2hlL2N5cmlsbGljLXVyaS5odG1sLgorIyBTZWUgdGhlIGFwYWNoZSByZXdyaXRl
IHJ1bGUgYXQKKyMgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvaW50
ZXJjZXB0Ly5odGFjY2VzcwordXJsLnJld3JpdGUtb25jZSA9ICgKKyAgIl4vdXJpL2ludGVyY2Vw
dC8oLiopIiA9PiAiL3VyaS9yZXNvdXJjZXMvcHJpbnQtdXJpLnBocCIsCisgICJeL2FwcGNhY2hl
L3Jlc291cmNlcy9pbnRlcmNlcHQvKC4qKSIgPT4gIi9hcHBjYWNoZS9yZXNvdXJjZXMvcHJpbnQt
dXJpLnBocCIKKykKKworIyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jl
c3BvbnNlLWVuY29kaW5nLmh0bWwgdXNlcyBhbiBodGFjY2VzcworIyB0byBvdmVycmlkZSBjaGFy
c2V0IGZvciByZXBseTIudHh0LCByZXBseTIueG1sLCBhbmQgcmVwbHk0LnR4dC4KKyRIVFRQWyJ1
cmwiXSA9fiAiXi94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVwbHkyLih0eHR8eG1sKSIgewor
ICBtaW1ldHlwZS5hc3NpZ24gPSAoCisgICAgIi50eHQiID0+ICJ0ZXh0L3BsYWluOyBjaGFyc2V0
PXdpbmRvd3MtMTI1MSIsCisgICAgIi54bWwiID0+ICJ0ZXh0L3htbDsgY2hhcnNldD13aW5kb3dz
LTEyNTEiCisgICkKK30KKyRIVFRQWyJ1cmwiXSA9fiAiXi94bWxodHRwcmVxdWVzdC9yZXNvdXJj
ZXMvcmVwbHk0LnR4dCIgeworICBtaW1ldHlwZS5hc3NpZ24gPSAoICIudHh0IiA9PiAidGV4dC9w
bGFpbjsgY2hhcnNldD1rb2k4LXIiICkKK30KKworIyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Fw
cGNhY2hlL3dyb25nLWNvbnRlbnQtdHlwZS5odG1sIHVzZXMgYW4gaHRhY2Nlc3MKKyMgdG8gb3Zl
cnJpZGUgbWltZSB0eXBlIGZvciB3cm9uZy1jb250ZW50LXR5cGUubWFuaWZlc3QuCiskSFRUUFsi
dXJsIl0gPX4gIl4vYXBwY2FjaGUvcmVzb3VyY2VzL3dyb25nLWNvbnRlbnQtdHlwZS5tYW5pZmVz
dCIgeworICBtaW1ldHlwZS5hc3NpZ24gPSAoICIubWFuaWZlc3QiID0+ICJ0ZXh0L3BsYWluIiAp
Cit9CisKKyMgQXV0b2dlbmVyYXRlZCB0ZXN0LXNwZWNpZmljIGNvbmZpZyBmb2xsb3dzLgpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9t
YWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21h
Yy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmRlNmQ2Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9tYWMucHkKQEAgLTAsMCArMSw0MzMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgR29vZ2xlIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisiIiJXZWJLaXQgTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4i
IiIKKworaW1wb3J0IGZjbnRsCitpbXBvcnQgb3MKK2ltcG9ydCBwZGIKK2ltcG9ydCBwbGF0Zm9y
bQoraW1wb3J0IHNlbGVjdAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9y
dCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgd2ViYnJvd3NlcgorCitpbXBvcnQgYmFzZQorCisK
K2NsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0KToKKyAgICAiIiJXZWJLaXQgTWFjIGltcGxlbWVudGF0
aW9uIG9mIHRoZSBQb3J0IGNsYXNzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRf
bmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgorICAgICAgICBpZiBwb3J0X25hbWUgaXMgTm9uZToK
KyAgICAgICAgICAgIHBvcnRfbmFtZSA9ICdtYWMnICsgcG9ydC52ZXJzaW9uKCkKKyAgICAgICAg
YmFzZS5Qb3J0Ll9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZSwgb3B0aW9ucykKKworICAgIGRlZiBi
YXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKKyAgICAgICAgZGlycyA9IFtdCisgICAgICAgIGlm
IHNlbGYuX25hbWUgPT0gJ21hYy10aWdlcic6CisgICAgICAgICAgICBkaXJzLmFwcGVuZChzZWxm
Ll93ZWJraXRfYmFzZWxpbmVfcGF0aChzZWxmLl9uYW1lKSkKKyAgICAgICAgaWYgc2VsZi5fbmFt
ZSBpbiAoJ21hYy10aWdlcicsICdtYWMtbGVvcGFyZCcpOgorICAgICAgICAgICAgZGlycy5hcHBl
bmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYy1sZW9wYXJkJykpCisgICAgICAgIGlm
IHNlbGYuX25hbWUgaW4gKCdtYWMtdGlnZXInLCAnbWFjLWxlb3BhcmQnLCAnbWFjLXNub3dsZW9w
YXJkJyk6CisgICAgICAgICAgICBkaXJzLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0
aCgnbWFjLXNub3dsZW9wYXJkJykpCisgICAgICAgIGRpcnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9i
YXNlbGluZV9wYXRoKCdtYWMnKSkKKyAgICAgICAgcmV0dXJuIGRpcnMKKworICAgIGRlZiBjaGVj
a19zeXNfZGVwcyhzZWxmKToKKyAgICAgICAgIyBUaGVyZSBhcmUgbm8gcGxhdGZvcm0tc3BlY2lm
aWMgY2hlY2tzIHdlIG5lZWQgdG8gZG8uCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYg
bnVtX2NvcmVzKHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KG9zLnBvcGVuMigic3lzY3RsIC1u
IGh3Lm5jcHUiKVsxXS5yZWFkKCkpCisKKyAgICBkZWYgcmVzdWx0c19kaXJlY3Rvcnkoc2VsZik6
CisgICAgICAgIHJldHVybiAoJy90bXAvcnVuLWNocm9taXVtLXdlYmtpdC10ZXN0cy0nICsKKyAg
ICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorCisgICAgZGVm
IHNldHVwX3Rlc3RfcnVuKHNlbGYpOgorICAgICAgICAjIFRoaXMgcG9ydCBkb2Vzbid0IHJlcXVp
cmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIHBhc3MKKworICAgIGRlZiBz
aG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNfZmlsZW5hbWUpOgorICAgICAgICB1
cmkgPSBzZWxmLmZpbGVuYW1lX3RvX3VyaShyZXN1bHRzX2ZpbGVuYW1lKQorICAgICAgICB3ZWJi
cm93c2VyLm9wZW4odXJpLCBuZXc9MSkKKworICAgIGRlZiBzdGFydF9kcml2ZXIoc2VsZiwgaW1h
Z2VfcGF0aCwgb3B0aW9ucyk6CisgICAgICAgICIiIlN0YXJ0cyBhIG5ldyBEcml2ZXIgYW5kIHJl
dHVybnMgYSBoYW5kbGUgdG8gaXQuIiIiCisgICAgICAgIHJldHVybiBNYWNEcml2ZXIoaW1hZ2Vf
cGF0aCwgb3B0aW9ucywgc2VsZikKKworICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZik6CisgICAg
ICAgICMgVGhpcyBwb3J0IGRvZXNuJ3QgdXNlIGEgaGVscGVyIHByb2Nlc3MuCisgICAgICAgIHBh
c3MKKworICAgIGRlZiBzdG9wX2hlbHBlcihzZWxmKToKKyAgICAgICAgIyBUaGlzIHBvcnQgZG9l
c24ndCB1c2UgYSBoZWxwZXIgcHJvY2Vzcy4KKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rf
YmFzZV9wbGF0Zm9ybV9uYW1lcyhzZWxmKToKKyAgICAgICAgIyBBdCB0aGUgbW9tZW50IHdlIGRv
bid0IHVzZSB0ZXN0IHBsYXRmb3JtIG5hbWVzLCBidXQgd2UgaGF2ZQorICAgICAgICAjIHRvIHJl
dHVybiBzb21ldGhpbmcuCisgICAgICAgIHJldHVybiAoJ21hYycsKQorCisgICAgZGVmIHRlc3Rf
ZXhwZWN0YXRpb25zKHNlbGYpOgorICAgICAgICAjCisgICAgICAgICMgVGhlIFdlYktpdCBtYWMg
cG9ydCB1c2VzICdTa2lwcGVkJyBmaWxlcyBhdCB0aGUgbW9tZW50LiBFYWNoCisgICAgICAgICMg
ZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdG8gYmUgc2tpcHBl
ZCBkdXJpbmcKKyAgICAgICAgIyB0aGUgdGVzdCBydW4uIFRoZSB0b3RhbCBsaXN0IG9mIHRlc3Rz
IHRvIHNraXBwZWQgaXMgZ2l2ZW4gYnkgdGhlCisgICAgICAgICMgY29udGVudHMgb2YgdGhlIGdl
bmVyaWMgU2tpcHBlZCBmaWxlIGZvdW5kIGluIHBsYXRmb3JtL1ggcGx1cworICAgICAgICAjIGEg
dmVyc2lvbi1zcGVjaWZpYyBmaWxlIGZvdW5kIGluIHBsYXRmb3JtL1gtdmVyc2lvbi4gRHVwbGlj
YXRlCisgICAgICAgICMgZW50cmllcyBhcmUgYWxsb3dlZC4gVGhpcyByb3V0aW5lIHJlYWRzIHRo
b3NlIGZpbGVzIGFuZCB0dXJucworICAgICAgICAjIGNvbnRlbnRzIGludG8gdGhlIGZvcm1hdCBl
eHBlY3RlZCBieSB0ZXN0X2V4cGVjdGF0aW9ucy4KKyAgICAgICAgZXhwZWN0YXRpb25zID0gW10K
KyAgICAgICAgc2tpcHBlZF9maWxlcyA9IFtdCisgICAgICAgIGlmIHNlbGYuX25hbWUgaW4gKCdt
YWMtdGlnZXInLCAnbWFjLWxlb3BhcmQnLCAnbWFjLXNub3dsZW9wYXJkJyk6CisgICAgICAgICAg
ICBza2lwcGVkX2ZpbGVzLmFwcGVuZChvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICAgICAgc2Vs
Zi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoc2VsZi5fbmFtZSksICdTa2lwcGVkJykpCisgICAgICAg
IHNraXBwZWRfZmlsZXMuYXBwZW5kKG9zLnBhdGguam9pbihzZWxmLl93ZWJraXRfYmFzZWxpbmVf
cGF0aCgnbWFjJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
U2tpcHBlZCcpKQorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2tpcHBlZF9maWxlczoKKyAgICAg
ICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBmID0g
ZmlsZShmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgor
ICAgICAgICAgICAgICAgICAgICBsID0gbC5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlm
IG5vdCBsLnN0YXJ0c3dpdGgoJyMnKSBhbmQgbGVuKGwpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgbCA9ICdCVUdfU0tJUFBFRCBTS0lQIDogJyArIGwgKyAnID0gRkFJTCcKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIGwgbm90IGluIGV4cGVjdGF0aW9uczoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKGwpCisgICAgICAgICAgICAgICAgZi5jbG9z
ZSgpCisKKyAgICAgICAgIyBUT0RPIC0gZmlndXJlIG91dCBob3cgdG8gY2hlY2sgZm9yIHRoZXNl
IGR5bmFtaWNhbGx5CisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoJ0JVR19TS0lQUEVEIFNL
SVAgOiBmYXN0L3djc3MgPSBGQUlMJykKKyAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZCgnQlVH
X1NLSVBQRUQgU0tJUCA6IGZhc3QveGh0bWxtcCA9IEZBSUwnKQorICAgICAgICBleHBlY3RhdGlv
bnMuYXBwZW5kKCdCVUdfU0tJUFBFRCBTS0lQIDogaHR0cC90ZXN0cy93bWwgPSBGQUlMJykKKyAg
ICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZCgnQlVHX1NLSVBQRUQgU0tJUCA6IG1hdGhtbCA9IEZB
SUwnKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKCdCVUdfU0tJUFBFRCBTS0lQIDogcGxh
dGZvcm0vY2hyb21pdW0gPSBGQUlMJykKKyAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZCgnQlVH
X1NLSVBQRUQgU0tJUCA6IHBsYXRmb3JtL2d0ayA9IEZBSUwnKQorICAgICAgICBleHBlY3RhdGlv
bnMuYXBwZW5kKCdCVUdfU0tJUFBFRCBTS0lQIDogcGxhdGZvcm0vcXQgPSBGQUlMJykKKyAgICAg
ICAgZXhwZWN0YXRpb25zLmFwcGVuZCgnQlVHX1NLSVBQRUQgU0tJUCA6IHBsYXRmb3JtL3dpbiA9
IEZBSUwnKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKCdCVUdfU0tJUFBFRCBTS0lQIDog
d21sID0gRkFJTCcpCisKKyAgICAgICAgIyBUT0RPIC0gZmlndXJlIG91dCBob3cgdG8gaGFuZGxl
IHdlYmFyY2hpdmUgdGVzdHMKKyAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZCgnQlVHX1NLSVBQ
RUQgU0tJUCA6IHdlYmFyY2hpdmUgPSBQQVNTJykKKyAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVu
ZCgnQlVHX1NLSVBQRUQgU0tJUCA6IHN2Zy93ZWJhcmNoaXZlID0gUEFTUycpCisgICAgICAgIGV4
cGVjdGF0aW9ucy5hcHBlbmQoJ0JVR19TS0lQUEVEIFNLSVAgOiBodHRwL3Rlc3RzL3dlYmFyY2hp
dmUgPSBQQVNTJykKKyAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZCgnQlVHX1NLSVBQRUQgU0tJ
UCA6IHN2Zy9jdXN0b20vJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbWFnZS13aXRo
LXByZWZpeC1pbi13ZWJhcmNoaXZlLnN2ZyA9IFBBU1MnKQorCisgICAgICAgIGV4cGVjdGF0aW9u
c19zdHIgPSAnXG4nLmpvaW4oZXhwZWN0YXRpb25zKQorICAgICAgICByZXR1cm4gZXhwZWN0YXRp
b25zX3N0cgorCisgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToKKyAgICAgICAgIyBB
dCB0aGUgbW9tZW50IHdlIGRvbid0IHVzZSB0ZXN0IHBsYXRmb3JtIG5hbWVzLCBidXQgd2UgaGF2
ZQorICAgICAgICAjIHRvIHJldHVybiBzb21ldGhpbmcuCisgICAgICAgIHJldHVybiAnbWFjJwor
CisgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZXMoc2VsZik6CisgICAgICAgICMgQXQgdGhlIG1v
bWVudCB3ZSBkb24ndCB1c2UgdGVzdCBwbGF0Zm9ybSBuYW1lcywgYnV0IHdlIGhhdmUKKyAgICAg
ICAgIyB0byByZXR1cm4gc29tZXRoaW5nLgorICAgICAgICByZXR1cm4gKCdtYWMnLCkKKworICAg
IGRlZiB2ZXJzaW9uKHNlbGYpOgorICAgICAgICBvc192ZXJzaW9uX3N0cmluZyA9IHBsYXRmb3Jt
Lm1hY192ZXIoKVswXSAgIyBlLmcuICIxMC41LjYiCisgICAgICAgIGlmIG5vdCBvc192ZXJzaW9u
X3N0cmluZzoKKyAgICAgICAgICAgIHJldHVybiAnLWxlb3BhcmQnCisgICAgICAgIHJlbGVhc2Vf
dmVyc2lvbiA9IGludChvc192ZXJzaW9uX3N0cmluZy5zcGxpdCgnLicpWzFdKQorICAgICAgICBp
ZiByZWxlYXNlX3ZlcnNpb24gPT0gNDoKKyAgICAgICAgICAgIHJldHVybiAnLXRpZ2VyJworICAg
ICAgICBlbGlmIHJlbGVhc2VfdmVyc2lvbiA9PSA1OgorICAgICAgICAgICAgcmV0dXJuICctbGVv
cGFyZCcKKyAgICAgICAgZWxpZiByZWxlYXNlX3ZlcnNpb24gPT0gNjoKKyAgICAgICAgICAgIHJl
dHVybiAnLXNub3dsZW9wYXJkJworICAgICAgICByZXR1cm4gJycKKworICAgICMKKyAgICAjIFBS
T1RFQ1RFRCBNRVRIT0RTCisgICAgIworCisgICAgZGVmIF9idWlsZF9wYXRoKHNlbGYsICpjb21w
cyk6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5fd2Via2l0X2RpcigpLCAnV2Vi
S2l0QnVpbGQnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnRh
cmdldCwgKmNvbXBzKQorCisgICAgZGVmIF9raWxsX3Byb2Nlc3Moc2VsZiwgcGlkKToKKyAgICAg
ICAgIiIiRm9yY2VmdWxseSBraWxsIHRoZSBwcm9jZXNzLgorCisgICAgICAgIEFyZ3M6CisgICAg
ICAgIHBpZDogVGhlIGlkIG9mIHRoZSBwcm9jZXNzIHRvIGJlIGtpbGxlZC4KKyAgICAgICAgIiIi
CisgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKKworICAgIGRlZiBfa2lsbF9h
bGxfcHJvY2VzcyhzZWxmLCBwcm9jZXNzX25hbWUpOgorICAgICAgICAjIE9uIE1hYyBPUyBYIDEw
LjYsIGtpbGxhbGwgaGFzIGEgbmV3IGNvbnN0cmFpbnQ6IC1TSUdOQUxOQU1FIG9yCisgICAgICAg
ICMgLVNJR05BTE5VTUJFUiBtdXN0IGNvbWUgZmlyc3QuICBFeGFtcGxlIHByb2JsZW06CisgICAg
ICAgICMgICAkIGtpbGxhbGwgLXUgJFVTRVIgLVRFUk0gbGlnaHR0cGQKKyAgICAgICAgIyAgIGtp
bGxhbGw6IGlsbGVnYWwgb3B0aW9uIC0tIFQKKyAgICAgICAgIyBVc2Ugb2YgdGhlIGVhcmxpZXIg
LVRFUk0gcGxhY2VtZW50IGlzIGp1c3QgZmluZSBvbiAxMC41LgorICAgICAgICBudWxsID0gb3Bl
bihvcy5kZXZudWxsKQorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoWydraWxsYWxsJywgJy1URVJN
JywgJy11Jywgb3MuZ2V0ZW52KCdVU0VSJyksCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9j
ZXNzX25hbWVdLCBzdGRlcnI9bnVsbCkKKyAgICAgICAgbnVsbC5jbG9zZSgpCisKKyAgICBkZWYg
X3BhdGhfdG9fYXBhY2hlKHNlbGYpOgorICAgICAgICByZXR1cm4gJy91c3Ivc2Jpbi9odHRwZCcK
KworICAgIGRlZiBfcGF0aF90b19hcGFjaGVfY29uZmlnX2ZpbGUoc2VsZik6CisgICAgICAgIHJl
dHVybiBvcy5wYXRoLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksICdodHRwJywgJ2NvbmYn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcGFjaGUyLWh0dHBkLmNvbmYnKQorCisg
ICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxk
X3BhdGgoJ0R1bXBSZW5kZXJUcmVlJykKKworICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6
CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3BhdGhfdG9faW1hZ2VfZGlmZihzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2ltYWdlX2RpZmYnKQorCisgICAg
ZGVmIF9wYXRoX3RvX3dkaWZmKHNlbGYpOgorICAgICAgICByZXR1cm4gJ3dkaWZmJworCisgICAg
ZGVmIF9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2VsZiwgc2VydmVyX3BpZCk6CisgICAgICAgICIi
IlNodXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVs
bHkKKyAgICAgICAgc2h1dCBkb3duLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzZXJ2
ZXJfcGlkOiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCisgICAgICAgICIi
IgorICAgICAgICAjIHNlcnZlcl9waWQgaXMgbm90IHNldCB3aGVuICJodHRwX3NlcnZlci5weSBz
dG9wIiBpcyBydW4gbWFudWFsbHkuCisgICAgICAgIGlmIHNlcnZlcl9waWQgaXMgTm9uZToKKyAg
ICAgICAgICAgICMgVE9ETyhtbW9zcykgVGhpcyBpc24ndCBpZGVhbCwgc2luY2UgaXQgY291bGQg
Y29uZmxpY3Qgd2l0aAorICAgICAgICAgICAgIyBsaWdodHRwZCBwcm9jZXNzZXMgbm90IHN0YXJ0
ZWQgYnkgaHR0cF9zZXJ2ZXIucHksCisgICAgICAgICAgICAjIGJ1dCBnb29kIGVub3VnaCBmb3Ig
bm93LgorICAgICAgICAgICAgc2VsZi5fa2lsbF9hbGxfcHJvY2VzcygnaHR0cGQnKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmtpbGwoc2VydmVy
X3BpZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAgICAgIyBUT0RPKG1tb3NzKSBNYXli
ZSB0aHJvdyBpbiBhIFNJR0tJTEwganVzdCB0byBiZSBzdXJlPworICAgICAgICAgICAgZXhjZXB0
IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBTb21ldGltZXMgd2UgZ2V0IGEgYmFkIFBJRCAo
ZS5nLiBmcm9tIGEgc3RhbGUgaHR0cGQucGlkCisgICAgICAgICAgICAgICAgIyBmaWxlKSwgc28g
aWYga2lsbCBmYWlscyBvbiB0aGUgZ2l2ZW4gUElELCBqdXN0IHRyeSB0bworICAgICAgICAgICAg
ICAgICMgJ2tpbGxhbGwnIHdlYiBzZXJ2ZXJzLgorICAgICAgICAgICAgICAgIHNlbGYuX3NodXRf
ZG93bl9odHRwX3NlcnZlcihOb25lKQorCisgICAgZGVmIF93ZWJraXRfZGlyKHNlbGYpOgorICAg
ICAgICAiIiJSZXR1cm4gdGhlIGZ1bGwgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBXZWJLaXQgc291
cmNlIHRyZWUuIiIiCisgICAgICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUoc2VsZi5sYXlvdXRf
dGVzdHNfZGlyKCkpCisKKworY2xhc3MgTWFjRHJpdmVyKGJhc2UuRHJpdmVyKToKKyAgICAiIiJp
bXBsZW1lbnRhdGlvbiBvZiB0aGUgRHVtcFJlbmRlclRyZWUgaW50ZXJmYWNlLiIiIgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX3BhdGgsIGRyaXZlcl9vcHRpb25zLCBwb3J0KToKKyAg
ICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fZHJpdmVyX29wdGlvbnMgPSBk
cml2ZXJfb3B0aW9ucworICAgICAgICBzZWxmLl90YXJnZXQgPSBwb3J0Ll9vcHRpb25zLnRhcmdl
dAorICAgICAgICBzZWxmLl9pbWFnZV9wYXRoID0gaW1hZ2VfcGF0aAorICAgICAgICBzZWxmLl9z
dGRvdXRfZmQgPSBOb25lCisgICAgICAgIHNlbGYuX2NtZCA9IE5vbmUKKyAgICAgICAgc2VsZi5f
ZW52ID0gTm9uZQorICAgICAgICBzZWxmLl9wcm9jID0gTm9uZQorICAgICAgICBzZWxmLl9yZWFk
X2J1ZmZlciA9ICcnCisKKyAgICAgICAgY21kID0gW10KKyAgICAgICAgIyBIb29rIGZvciBpbmpl
Y3RpbmcgdmFsZ3JpbmQgb3Igb3RoZXIgcnVudGltZSBpbnN0cnVtZW50YXRpb24sCisgICAgICAg
ICMgdXNlZCBieSBlLmcuIHRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kX3Rlc3RzLnB5LgorICAgICAg
ICB3cmFwcGVyID0gb3MuZW52aXJvbi5nZXQoIkJST1dTRVJfV1JBUFBFUiIsIE5vbmUpCisgICAg
ICAgIGlmIHdyYXBwZXIgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSBbd3JhcHBlcl0KKyAg
ICAgICAgaWYgc2VsZi5fcG9ydC5fb3B0aW9ucy53cmFwcGVyOgorICAgICAgICAgICAgIyBUaGlz
IHNwbGl0KCkgaXNuJ3QgcmVhbGx5IHdoYXQgd2Ugd2FudCAtLSBpdCBpbmNvcnJlY3RseSB3aWxs
CisgICAgICAgICAgICAjIHNwbGl0IHF1b3RlZCBzdHJpbmdzIHdpdGhpbiB0aGUgd3JhcHBlciBh
cmd1bWVudCAtLSBidXQgaW4KKyAgICAgICAgICAgICMgcHJhY3RpY2UgaXQgc2hvdWxkbid0IGNv
bWUgdXAgYW5kIHRoZSAtLWhlbHAgb3V0cHV0IHdhcm5zCisgICAgICAgICAgICAjIGFib3V0IGl0
IGFueXdheS4KKyAgICAgICAgICAgIGNtZCArPSBzZWxmLl9vcHRpb25zLndyYXBwZXIuc3BsaXQo
KQorICAgICAgICBjbWQgKz0gWydhcmNoJywgJy1pMzg2JywgcG9ydC5fcGF0aF90b19kcml2ZXIo
KSwgJy0nXQorICAgICAgICBpZiBub3Qgc2VsZi5fcG9ydC5fb3B0aW9ucy5ub19waXhlbF90ZXN0
czoKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tcGl4ZWwtdGVzdHMnKQorCisgICAgICAgICNp
ZiBkcml2ZXJfb3B0aW9uczoKKyAgICAgICAgIyAgICBjbWQgKz0gZHJpdmVyX29wdGlvbnMKKyAg
ICAgICAgZW52ID0gb3MuZW52aXJvbgorICAgICAgICBlbnZbJ0RZTERfRlJBTUVXT1JLX1BBVEgn
XSA9IG9zLnBhdGguam9pbihwb3J0Ll93ZWJraXRfZGlyKCksCisgICAgICAgICAgICAnV2ViS2l0
QnVpbGQnLCBwb3J0Ll9vcHRpb25zLnRhcmdldCkKKyAgICAgICAgc2VsZi5fY21kID0gY21kCisg
ICAgICAgIHNlbGYuX2VudiA9IGVudgorICAgICAgICBzZWxmLnJlc3RhcnQoKQorCisgICAgZGVm
IHBvbGwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBvbGwoKQorCisgICAgZGVm
IHJlc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgIHNlbGYuX3Byb2Mg
PSBzdWJwcm9jZXNzLlBvcGVuKHNlbGYuX2NtZCwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBF
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vz
cy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9c2VsZi5f
ZW52KQorCisgICAgZGVmIHJldHVybmNvZGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9w
cm9jLnJldHVybmNvZGUKKworICAgIGRlZiBydW5fdGVzdChzZWxmLCB1cmksIHRpbWVvdXRtcywg
aW1hZ2VfaGFzaCk6CisgICAgICAgIG91dHB1dCA9IFtdCisgICAgICAgIGVycm9yID0gW10KKyAg
ICAgICAgaW1hZ2UgPSAnJworICAgICAgICBjcmFzaCA9IEZhbHNlCisgICAgICAgIHRpbWVvdXQg
PSBGYWxzZQorICAgICAgICBhY3R1YWxfdXJpID0gTm9uZQorICAgICAgICBhY3R1YWxfaW1hZ2Vf
aGFzaCA9IE5vbmUKKworICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgiZmlsZTovLy8iKToKKyAg
ICAgICAgICAgIGNtZCA9IHVyaVs3Ol0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9
IHVyaQorCisgICAgICAgIGlmIGltYWdlX2hhc2g6CisgICAgICAgICAgICBjbWQgKz0gIiciICsg
aW1hZ2VfaGFzaAorICAgICAgICBjbWQgKz0gIlxuIgorCisgICAgICAgIHNlbGYuX3Byb2Muc3Rk
aW4ud3JpdGUoY21kKQorICAgICAgICBzZWxmLl9zdGRvdXRfZmQgPSBzZWxmLl9wcm9jLnN0ZG91
dC5maWxlbm8oKQorICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKHNlbGYuX3N0ZG91dF9mZCwgZmNu
dGwuRl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwoc2VsZi5fc3Rkb3V0X2ZkLCBmY250bC5G
X1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisKKyAgICAgICAgc3RvcF90aW1lID0gdGltZS50
aW1lKCkgKyAoaW50KHRpbWVvdXRtcykgLyAxMDAwLjApCisgICAgICAgIHJlc3AgPSAnJworICAg
ICAgICAodGltZW91dCwgbGluZSkgPSBzZWxmLl9yZWFkX2xpbmUodGltZW91dCwgc3RvcF90aW1l
KQorICAgICAgICByZXNwICs9IGxpbmUKKyAgICAgICAgaGF2ZV9zZWVuX2NvbnRlbnRfdHlwZSA9
IEZhbHNlCisgICAgICAgIHdoaWxlIG5vdCB0aW1lb3V0IGFuZCBsaW5lLnJzdHJpcCgpICE9ICIj
RU9GIjoKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGhhdmVuJ3QgY3Jhc2hlZC4KKyAgICAg
ICAgICAgIGlmIGxpbmUgPT0gJycgYW5kIHNlbGYucG9sbCgpIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgICAgICMgVGhpcyBpcyBoZXggY29kZSAweGMwMDAwMDFkLCB3aGljaCBpcyB1c2VkIGZv
ciBhYnJ1cHQKKyAgICAgICAgICAgICAgICAjIHRlcm1pbmF0aW9uLiBUaGlzIGhhcHBlbnMgaWYg
d2UgaGl0IGN0cmwrYyBmcm9tIHRoZSBwcm9tcHQKKyAgICAgICAgICAgICAgICAjIGFuZCB3ZSBo
YXBwZW4gdG8gYmUgd2FpdGluZyBvbiB0aGUgdGVzdF9zaGVsbC4KKyAgICAgICAgICAgICAgICAj
IHNkb3lvbjogTm90IHN1cmUgZm9yIHdoaWNoIE9TIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMg
dGhlCisgICAgICAgICAgICAgICAgIyBhYm92ZSBjb2RlIGlzIHZhbGlkLiBXaGF0IHdvcmtzIGZv
ciBtZSB1bmRlciBMaW51eCB0byBkZXRlY3QKKyAgICAgICAgICAgICAgICAjIGN0cmwrYyBpcyBm
b3IgdGhlIHN1YnByb2Nlc3MgcmV0dXJuY29kZSB0byBiZSBuZWdhdGl2ZQorICAgICAgICAgICAg
ICAgICMgU0lHSU5ULiBBbmQgdGhhdCBhZ3JlZXMgd2l0aCB0aGUgc3VicHJvY2VzcyBkb2N1bWVu
dGF0aW9uLgorICAgICAgICAgICAgICAgIGlmICgtMTA3Mzc0MTUxMCA9PSBzZWxmLnJldHVybmNv
ZGUoKSBvcgorICAgICAgICAgICAgICAgICAgICAtIHNpZ25hbC5TSUdJTlQgPT0gc2VsZi5yZXR1
cm5jb2RlKCkpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAor
ICAgICAgICAgICAgICAgIGNyYXNoID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAg
ICAgICAgICAgIGVsaWYgKGxpbmUuc3RhcnRzd2l0aCgnQ29udGVudC1UeXBlOicpIGFuZCBub3QK
KyAgICAgICAgICAgICAgICAgIGhhdmVfc2Vlbl9jb250ZW50X3R5cGUpOgorICAgICAgICAgICAg
ICAgIGhhdmVfc2Vlbl9jb250ZW50X3R5cGUgPSBUcnVlCisgICAgICAgICAgICAgICAgcGFzcwor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGxpbmUpCisK
KyAgICAgICAgICAgICh0aW1lb3V0LCBsaW5lKSA9IHNlbGYuX3JlYWRfbGluZSh0aW1lb3V0LCBz
dG9wX3RpbWUpCisgICAgICAgICAgICByZXNwICs9IGxpbmUKKworICAgICAgICAjIE5vdyByZWFk
IGEgc2Vjb25kIGJsb2NrIG9mIHRleHQgZm9yIHRoZSBvcHRpb25hbCBpbWFnZSBkYXRhCisgICAg
ICAgIGltYWdlX2xlbmd0aCA9IDAKKyAgICAgICAgKHRpbWVvdXQsIGxpbmUpID0gc2VsZi5fcmVh
ZF9saW5lKHRpbWVvdXQsIHN0b3BfdGltZSkKKyAgICAgICAgcmVzcCArPSBsaW5lCisgICAgICAg
IEhBU0hfSEVBREVSID0gJ0FjdHVhbEhhc2g6ICcKKyAgICAgICAgTEVOR1RIX0hFQURFUiA9ICdD
b250ZW50LUxlbmd0aDogJworICAgICAgICB3aGlsZSBub3QgdGltZW91dCBhbmQgbm90IGNyYXNo
IGFuZCBsaW5lLnJzdHJpcCgpICE9ICIjRU9GIjoKKyAgICAgICAgICAgIGlmIGxpbmUgPT0gJycg
YW5kIHNlbGYucG9sbCgpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmICgtMTA3Mzc0
MTUxMCA9PSBzZWxmLnJldHVybmNvZGUoKSBvcgorICAgICAgICAgICAgICAgICAgICAtIHNpZ25h
bC5TSUdJTlQgPT0gc2VsZi5yZXR1cm5jb2RlKCkpOgorICAgICAgICAgICAgICAgICAgICByYWlz
ZSBLZXlib2FyZEludGVycnVwdAorICAgICAgICAgICAgICAgIGNyYXNoID0gVHJ1ZQorICAgICAg
ICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aChIQVNIX0hF
QURFUik6CisgICAgICAgICAgICAgICAgYWN0dWFsX2ltYWdlX2hhc2ggPSBsaW5lW2xlbihIQVNI
X0hFQURFUik6XS5zdHJpcCgpCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnQ29u
dGVudC1UeXBlOicpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsaWYgbGlu
ZS5zdGFydHN3aXRoKExFTkdUSF9IRUFERVIpOgorICAgICAgICAgICAgICAgIGltYWdlX2xlbmd0
aCA9IGludChsaW5lW2xlbihMRU5HVEhfSEVBREVSKTpdKQorICAgICAgICAgICAgZWxpZiBpbWFn
ZV9sZW5ndGg6CisgICAgICAgICAgICAgICAgaW1hZ2UgKz0gbGluZQorCisgICAgICAgICAgICAo
dGltZW91dCwgbGluZSkgPSBzZWxmLl9yZWFkX2xpbmUodGltZW91dCwgc3RvcF90aW1lLCBpbWFn
ZV9sZW5ndGgpCisgICAgICAgICAgICByZXNwICs9IGxpbmUKKworICAgICAgICBpZiB0aW1lb3V0
OgorICAgICAgICAgICAgc2VsZi5yZXN0YXJ0KCkKKworICAgICAgICBpZiBzZWxmLl9pbWFnZV9w
YXRoIGFuZCBsZW4oc2VsZi5faW1hZ2VfcGF0aCk6CisgICAgICAgICAgICBpbWFnZV9maWxlID0g
ZmlsZShzZWxmLl9pbWFnZV9wYXRoLCAid2IiKQorICAgICAgICAgICAgaW1hZ2VfZmlsZS53cml0
ZShpbWFnZSkKKyAgICAgICAgICAgIGltYWdlX2ZpbGUuY2xvc2UoKQorCisgICAgICAgIHJldHVy
biAoY3Jhc2gsIHRpbWVvdXQsIGFjdHVhbF9pbWFnZV9oYXNoLAorICAgICAgICAgICAgICAgICcn
LmpvaW4ob3V0cHV0KSwgJycuam9pbihlcnJvcikpCisgICAgICAgIHBhc3MKKworICAgIGRlZiBz
dG9wKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jOgorICAgICAgICAgICAgc2VsZi5fcHJv
Yy5zdGRpbi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCisg
ICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKKyAgICAgICAgICAgICAgICBzZWxmLl9w
cm9jLnN0ZGVyci5jbG9zZSgpCisgICAgICAgICAgICBpZiAoc3lzLnBsYXRmb3JtIG5vdCBpbiAo
J3dpbjMyJywgJ2N5Z3dpbicpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9wcm9jLnBv
bGwoKSk6CisgICAgICAgICAgICAgICAgIyBDbG9zaW5nIHN0ZGluL3N0ZG91dC9zdGRlcnIgaGFu
Z3Mgc29tZXRpbWVzIG9uIE9TIFguCisgICAgICAgICAgICAgICAgbnVsbCA9IG9wZW4ob3MuZGV2
bnVsbCwgInciKQorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oWyJraWxsIiwgIi05
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihzZWxmLl9wcm9jLnBpZCld
LCBzdGRlcnI9bnVsbCkKKyAgICAgICAgICAgICAgICBudWxsLmNsb3NlKCkKKworICAgIGRlZiBf
cmVhZF9saW5lKHNlbGYsIHRpbWVvdXQsIHN0b3BfdGltZSwgaW1hZ2VfbGVuZ3RoPTApOgorICAg
ICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICByZWFkX2ZkcyA9IFtdCisKKyAgICAgICAg
IyBmaXJzdCBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIGxpbmUgYWxyZWFkeSByZWFkIG9yIGlm
IHdlJ3ZlCisgICAgICAgICMgcmVhZCB0aGUgZW50aXJlIGltYWdlCisgICAgICAgIGlmIGltYWdl
X2xlbmd0aCBhbmQgbGVuKHNlbGYuX3JlYWRfYnVmZmVyKSA+PSBpbWFnZV9sZW5ndGg6CisgICAg
ICAgICAgICBvdXQgPSBzZWxmLl9yZWFkX2J1ZmZlclswOmltYWdlX2xlbmd0aF0KKyAgICAgICAg
ICAgIHNlbGYuX3JlYWRfYnVmZmVyID0gc2VsZi5fcmVhZF9idWZmZXJbaW1hZ2VfbGVuZ3RoOl0K
KyAgICAgICAgICAgIHJldHVybiAodGltZW91dCwgb3V0KQorCisgICAgICAgIGlkeCA9IHNlbGYu
X3JlYWRfYnVmZmVyLmZpbmQoJ1xuJykKKyAgICAgICAgaWYgbm90IGltYWdlX2xlbmd0aCBhbmQg
aWR4ICE9IC0xOgorICAgICAgICAgICAgb3V0ID0gc2VsZi5fcmVhZF9idWZmZXJbMDppZHggKyAx
XQorICAgICAgICAgICAgc2VsZi5fcmVhZF9idWZmZXIgPSBzZWxmLl9yZWFkX2J1ZmZlcltpZHgg
KyAxOl0KKyAgICAgICAgICAgIHJldHVybiAodGltZW91dCwgb3V0KQorCisgICAgICAgICMgSWYg
d2UndmUgdGltZWQgb3V0LCByZXR1cm4ganVzdCB3aGF0IHdlIGhhdmUsIGlmIGFueXRoaW5nCisg
ICAgICAgIGlmIHRpbWVvdXQgb3Igbm93ID49IHN0b3BfdGltZToKKyAgICAgICAgICAgIG91dCA9
IHNlbGYuX3JlYWRfYnVmZmVyCisgICAgICAgICAgICBzZWxmLl9yZWFkX2J1ZmZlciA9ICcnCisg
ICAgICAgICAgICByZXR1cm4gKFRydWUsIG91dCkKKworICAgICAgICAocmVhZF9mZHMsIHdyaXRl
X2ZkcywgZXJyX2ZkcykgPSBzZWxlY3Quc2VsZWN0KAorICAgICAgICAgICAgW3NlbGYuX3N0ZG91
dF9mZF0sIFtdLCBbXSwgc3RvcF90aW1lIC0gbm93KQorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBpZiB0aW1lb3V0IG9yIGxlbihyZWFkX2ZkcykgPT0gMToKKyAgICAgICAgICAgICAgICBzZWxm
Ll9yZWFkX2J1ZmZlciArPSBzZWxmLl9wcm9jLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgZXhjZXB0
IElPRXJyb3IsIGU6CisgICAgICAgICAgICByZWFkID0gW10KKyAgICAgICAgcmV0dXJuIHNlbGYu
X3JlYWRfbGluZSh0aW1lb3V0LCBzdG9wX3RpbWUpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOGY3OGYxMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQpAQCAtMCwwICsx
LDE0NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBu
YW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiRHVtbXkgUG9ydCBpbXBs
ZW1lbnRhdGlvbiB1c2VkIGZvciB0ZXN0aW5nLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1l
CisKK2ltcG9ydCBiYXNlCisKKworY2xhc3MgVGVzdFBvcnQoYmFzZS5Qb3J0KToKKyAgICAiIiJU
ZXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lKToKKyAgICAgICAgYmFz
ZS5Qb3J0Ll9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZSwgb3B0aW9ucykKKworICAgIGRlZiBiYXNl
X3BsYXRmb3JtcyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgndGVzdCcsKQorCisgICAgZGVmIGJh
c2VsaW5lX3BhdGgoc2VsZik6CisgICAgICAgIGN1cmRpciA9IG9zLnBhdGguYWJzcGF0aChfX2Zp
bGVfXykKKyAgICAgICAgc2VsZi50b3BkaXIgPSBjdXJkaXJbMDpjdXJkaXIuaW5kZXgoIldlYktp
dFRvb2xzIildCisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi50b3BkaXIsICdMYXlv
dXRUZXN0cycsICdwbGF0Zm9ybScsICd0ZXN0JykKKworICAgIGRlZiBiYXNlbGluZV9zZWFyY2hf
cGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLmJhc2VsaW5lX3BhdGgoKV0KKworICAg
IGRlZiBjaGVja19zeXNfZGVwcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRl
ZiBkaWZmX2ltYWdlKHNlbGYsIGFjdHVhbF9maWxlbmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUsIGRp
ZmZfZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBjb21wYXJlX3Rl
eHQoc2VsZiwgYWN0dWFsX3RleHQsIGV4cGVjdGVkX3RleHQpOgorICAgICAgICByZXR1cm4gRmFs
c2UKKworICAgIGRlZiBkaWZmX3RleHQoc2VsZiwgYWN0dWFsX3RleHQsIGV4cGVjdGVkX3RleHQs
CisgICAgICAgICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lKToK
KyAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX25hbWUKKworICAgIGRlZiBudW1fY29yZXMoc2VsZik6CisgICAgICAgIHJldHVybiBp
bnQob3MucG9wZW4yKCJzeXNjdGwgLW4gaHcubmNwdSIpWzFdLnJlYWQoKSkKKworICAgIGRlZiBv
cHRpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9ucworCisgICAgZGVmIHJl
c3VsdHNfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICByZXR1cm4gJy90bXAnICsgc2VsZi5fb3B0
aW9ucy5yZXN1bHRzX2RpcmVjdG9yeQorCisgICAgZGVmIHNldHVwX3Rlc3RfcnVuKHNlbGYpOgor
ICAgICAgICBwYXNzCisKKyAgICBkZWYgc2hvd19yZXN1bHRzX2h0bWxfZmlsZShzZWxmLCBmaWxl
bmFtZSk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydF9kcml2ZXIoc2VsZiwgaW1hZ2Vf
cGF0aCwgb3B0aW9ucyk6CisgICAgICAgIHJldHVybiBUZXN0RHJpdmVyKGltYWdlX3BhdGgsIG9w
dGlvbnMsIHNlbGYpCisKKyAgICBkZWYgc3RhcnRfaHR0cF9zZXJ2ZXIoc2VsZik6CisgICAgICAg
IHBhc3MKKworICAgIGRlZiBzdGFydF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgorICAgICAgICBw
YXNzCisKKyAgICBkZWYgc3RhcnRfaGVscGVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBk
ZWYgc3RvcF9odHRwX3NlcnZlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3Bf
d2Vic29ja2V0X3NlcnZlcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3BfaGVs
cGVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnMoc2Vs
Zik6CisgICAgICAgIHJldHVybiAnJworCisgICAgZGVmIHRlc3RfYmFzZV9wbGF0Zm9ybV9uYW1l
cyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgndGVzdCcsKQorCisgICAgZGVmIHRlc3RfcGxhdGZv
cm1fbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICd0ZXN0JworCisgICAgZGVmIHRlc3RfcGxh
dGZvcm1fbmFtZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRlc3RfYmFzZV9wbGF0Zm9y
bV9uYW1lcygpCisKKyAgICBkZWYgdmVyc2lvbigpOgorICAgICAgICByZXR1cm4gJycKKworICAg
IGRlZiB3ZGlmZl90ZXh0KHNlbGYsIGFjdHVhbF9maWxlbmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUp
OgorICAgICAgICByZXR1cm4gJycKKworCitjbGFzcyBUZXN0RHJpdmVyKGJhc2UuRHJpdmVyKToK
KyAgICAiIiJUZXN0L0R1bW15IGltcGxlbWVudGF0aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBp
bnRlcmZhY2UuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW1hZ2VfcGF0aCwgdGVzdF9k
cml2ZXJfb3B0aW9ucywgcG9ydCk6CisgICAgICAgIHNlbGYuX2RyaXZlcl9vcHRpb25zID0gdGVz
dF9kcml2ZXJfb3B0aW9ucworICAgICAgICBzZWxmLl9pbWFnZV9wYXRoID0gaW1hZ2VfcGF0aAor
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorCisgICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAg
IHJldHVybiBUcnVlCisKKyAgICBkZWYgcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJu
IDAKKworICAgIGRlZiBydW5fdGVzdChzZWxmLCB1cmksIHRpbWVvdXRtcywgaW1hZ2VfaGFzaCk6
CisgICAgICAgIHJldHVybiAoRmFsc2UsIEZhbHNlLCBpbWFnZV9oYXNoLCAnJywgTm9uZSkKKwor
ICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tl
dF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlNjkxNwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQpAQCAtMCwwICsxLDMwOSBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFt
ZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkEgY2xhc3MgdG8gaGVscCBz
dGFydC9zdG9wIHRoZSBQeVdlYlNvY2tldCBzZXJ2ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMuIiIi
CisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQg
c3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1w
b3J0IHVybGxpYgorCitpbXBvcnQgaHR0cF9zZXJ2ZXIKKworX1dTX0xPR19QUkVGSVggPSAncHl3
ZWJzb2NrZXQud3MubG9nLScKK19XU1NfTE9HX1BSRUZJWCA9ICdweXdlYnNvY2tldC53c3MubG9n
LScKKworX0RFRkFVTFRfV1NfUE9SVCA9IDg4ODAKK19ERUZBVUxUX1dTU19QT1JUID0gOTMyMwor
CisKK2RlZiB1cmxfaXNfYWxpdmUodXJsKToKKyAgICAiIiJDaGVja3MgdG8gc2VlIGlmIHdlIGdl
dCBhbiBodHRwIHJlc3BvbnNlIGZyb20gfHVybHwuCisgICAgV2UgcG9sbCB0aGUgdXJsIDUgdGlt
ZXMgd2l0aCBhIDEgc2Vjb25kIGRlbGF5LiAgSWYgd2UgZG9uJ3QKKyAgICBnZXQgYSByZXBseSBp
biB0aGF0IHRpbWUsIHdlIGdpdmUgdXAgYW5kIGFzc3VtZSB0aGUgaHR0cGQKKyAgICBkaWRuJ3Qg
c3RhcnQgcHJvcGVybHkuCisKKyAgICBBcmdzOgorICAgICAgdXJsOiBUaGUgVVJMIHRvIGNoZWNr
LgorICAgIFJldHVybjoKKyAgICAgIFRydWUgaWYgdGhlIHVybCBpcyBhbGl2ZS4KKyAgICAiIiIK
KyAgICB3YWl0X3RpbWUgPSA1CisgICAgd2hpbGUgd2FpdF90aW1lID4gMDoKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIudXJsb3Blbih1cmwpCisgICAgICAgICAg
ICAjIFNlcnZlciBpcyB1cCBhbmQgcmVzcG9uZGluZy4KKyAgICAgICAgICAgIHJldHVybiBUcnVl
CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3YWl0
X3RpbWUgLT0gMQorICAgICAgICAjIFdhaXQgYSBzZWNvbmQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAg
ICAgdGltZS5zbGVlcCgxKQorCisgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIHJlbW92ZV9sb2df
ZmlsZXMoZm9sZGVyLCBzdGFydHNfd2l0aCk6CisgICAgZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRl
cikKKyAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgaWYgZmlsZS5zdGFydHN3aXRoKHN0
YXJ0c193aXRoKToKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIs
IGZpbGUpCisgICAgICAgICAgICBvcy5yZW1vdmUoZnVsbF9wYXRoKQorCisKK2NsYXNzIFB5V2Vi
U29ja2V0Tm90U3RhcnRlZChFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBQeVdlYlNv
Y2tldE5vdEZvdW5kKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIFB5V2ViU29ja2V0
KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29i
aiwgb3V0cHV0X2RpciwgcG9ydD1fREVGQVVMVF9XU19QT1JULAorICAgICAgICAgICAgICAgICBy
b290PU5vbmUsIHVzZV90bHM9RmFsc2UsCisgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2N5Z3dp
bj1Ob25lLAorICAgICAgICAgICAgICAgICBwaWRmaWxlPU5vbmUpOgorICAgICAgICAiIiJBcmdz
OgorICAgICAgICAgIG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQg
dGVzdCByZXN1bHQgZGlyZWN0b3J5CisgICAgICAgICIiIgorICAgICAgICBodHRwX3NlcnZlci5M
aWdodHRwZC5fX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgb3V0cHV0X2RpciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD1fREVGQVVMVF9XU19QT1JULAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290PXJvb3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2N5Z3dpbj1yZWdpc3Rlcl9jeWd3aW4p
CisgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAgIHNlbGYuX3By
b2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX3Jv
b3QgPSByb290CisgICAgICAgIHNlbGYuX3VzZV90bHMgPSB1c2VfdGxzCisgICAgICAgIHNlbGYu
X3ByaXZhdGVfa2V5ID0gc2VsZi5fcGVtX2ZpbGUKKyAgICAgICAgc2VsZi5fY2VydGlmaWNhdGUg
PSBzZWxmLl9wZW1fZmlsZQorICAgICAgICBpZiBzZWxmLl9wb3J0OgorICAgICAgICAgICAgc2Vs
Zi5fcG9ydCA9IGludChzZWxmLl9wb3J0KQorICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgorICAg
ICAgICAgICAgc2VsZi5fc2VydmVyX25hbWUgPSAnUHlXZWJTb2NrZXQoU2VjdXJlKScKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9uYW1lID0gJ1B5V2ViU29ja2V0Jwor
ICAgICAgICBzZWxmLl9waWRmaWxlID0gcGlkZmlsZQorICAgICAgICBzZWxmLl93c291dCA9IE5v
bmUKKworICAgICAgICAjIFdlYmtpdCB0ZXN0cworICAgICAgICBpZiBzZWxmLl9yb290OgorICAg
ICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzID0gb3MucGF0aC5hYnNwYXRoKHNlbGYuX3Jvb3Qp
CisgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzID0gb3MucGF0aC5hYnNwYXRoKAor
ICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLl9yb290LCAnd2Vic29ja2V0JywgJ3Rl
c3RzJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
c2VsZi5fbGF5b3V0X3Rlc3RzID0gc2VsZi5fcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2RpcigpCisg
ICAgICAgICAgICAgICAgc2VsZi5fd2ViX3NvY2tldF90ZXN0cyA9IG9zLnBhdGguam9pbihzZWxm
Ll9sYXlvdXRfdGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAnd2Vic29ja2V0JywgJ3Rlc3Rz
JykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0
X3Rlc3RzID0gTm9uZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2Vs
Zi5fd2ViX3NvY2tldF90ZXN0czoKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnTm8gbmVlZCB0
byBzdGFydCAlcyBzZXJ2ZXIuJyAlIHNlbGYuX3NlcnZlcl9uYW1lKQorICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgIGlmIHNlbGYuaXNfcnVubmluZygpOgorICAgICAgICAgICAgcmFpc2UgUHlX
ZWJTb2NrZXROb3RTdGFydGVkKCclcyBpcyBhbHJlYWR5IHJ1bm5pbmcuJyAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VydmVyX25hbWUpCisKKyAgICAg
ICAgdGltZV9zdHIgPSB0aW1lLnN0cmZ0aW1lKCclZCViJVktJUglTSVTJykKKyAgICAgICAgaWYg
c2VsZi5fdXNlX3RsczoKKyAgICAgICAgICAgIGxvZ19wcmVmaXggPSBfV1NTX0xPR19QUkVGSVgK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ19wcmVmaXggPSBfV1NfTE9HX1BSRUZJWAor
ICAgICAgICBsb2dfZmlsZV9uYW1lID0gbG9nX3ByZWZpeCArIHRpbWVfc3RyCisKKyAgICAgICAg
IyBSZW1vdmUgb2xkIGxvZyBmaWxlcy4gV2Ugb25seSBuZWVkIHRvIGtlZXAgdGhlIGxhc3Qgb25l
cy4KKyAgICAgICAgcmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCBsb2dfcHJlZml4
KQorCisgICAgICAgIGVycm9yX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBs
b2dfZmlsZV9uYW1lICsgIi1lcnIudHh0IikKKworICAgICAgICBvdXRwdXRfbG9nID0gb3MucGF0
aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxlX25hbWUgKyAiLW91dC50eHQiKQorICAg
ICAgICBzZWxmLl93c291dCA9IG9wZW4ob3V0cHV0X2xvZywgInciKQorCisgICAgICAgIHB5dGhv
bl9pbnRlcnAgPSBzeXMuZXhlY3V0YWJsZQorICAgICAgICBweXdlYnNvY2tldF9iYXNlID0gb3Mu
cGF0aC5qb2luKAorICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShv
cy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKAorICAgICAgICAgICAgb3MucGF0aC5hYnNw
YXRoKF9fZmlsZV9fKSkpKSksICdweXdlYnNvY2tldCcpCisgICAgICAgIHB5d2Vic29ja2V0X3Nj
cmlwdCA9IG9zLnBhdGguam9pbihweXdlYnNvY2tldF9iYXNlLCAnbW9kX3B5d2Vic29ja2V0JywK
KyAgICAgICAgICAgICdzdGFuZGFsb25lLnB5JykKKyAgICAgICAgc3RhcnRfY21kID0gWworICAg
ICAgICAgICAgcHl0aG9uX2ludGVycCwgcHl3ZWJzb2NrZXRfc2NyaXB0LAorICAgICAgICAgICAg
Jy1wJywgc3RyKHNlbGYuX3BvcnQpLAorICAgICAgICAgICAgJy1kJywgc2VsZi5fbGF5b3V0X3Rl
c3RzLAorICAgICAgICAgICAgJy1zJywgc2VsZi5fd2ViX3NvY2tldF90ZXN0cywKKyAgICAgICAg
ICAgICctbCcsIGVycm9yX2xvZywKKyAgICAgICAgXQorCisgICAgICAgIGhhbmRsZXJfbWFwX2Zp
bGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fd2ViX3NvY2tldF90ZXN0cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFuZGxlcl9tYXAudHh0JykKKyAgICAgICAgaWYg
b3MucGF0aC5leGlzdHMoaGFuZGxlcl9tYXBfZmlsZSk6CisgICAgICAgICAgICBsb2dnaW5nLmRl
YnVnKCdVc2luZyBoYW5kbGVyX21hcF9maWxlOiAlcycgJSBoYW5kbGVyX21hcF9maWxlKQorICAg
ICAgICAgICAgc3RhcnRfY21kLmFwcGVuZCgnLW0nKQorICAgICAgICAgICAgc3RhcnRfY21kLmFw
cGVuZChoYW5kbGVyX21hcF9maWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2lu
Zy53YXJuaW5nKCdObyBoYW5kbGVyX21hcF9maWxlIGZvdW5kJykKKworICAgICAgICBpZiBzZWxm
Ll91c2VfdGxzOgorICAgICAgICAgICAgc3RhcnRfY21kLmV4dGVuZChbJy10JywgJy1rJywgc2Vs
Zi5fcHJpdmF0ZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWMnLCBzZWxm
Ll9jZXJ0aWZpY2F0ZV0pCisKKyAgICAgICAgIyBQdXQgdGhlIGN5Z3dpbiBkaXJlY3RvcnkgZmly
c3QgaW4gdGhlIHBhdGggdG8gZmluZCBjeWd3aW4xLmRsbAorICAgICAgICBlbnYgPSBvcy5lbnZp
cm9uCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgorICAg
ICAgICAgICAgZW52WydQQVRIJ10gPSAnJXM7JXMnICUgKAorICAgICAgICAgICAgICAgIHNlbGYu
X3BvcnRfb2JqLl9wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2Jpbicp
LAorICAgICAgICAgICAgICAgIGVudlsnUEFUSCddKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9y
bSA9PSAnd2luMzInIGFuZCBzZWxmLl9yZWdpc3Rlcl9jeWd3aW46CisgICAgICAgICAgICBzZXR1
cF9tb3VudCA9IHNlbGYuX3BvcnRfb2JqLl9wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLAor
ICAgICAgICAgICAgICAgICAnY3lnd2luJywgJ3NldHVwX21vdW50LmJhdCcpCisgICAgICAgICAg
ICBzdWJwcm9jZXNzLlBvcGVuKHNldHVwX21vdW50KS53YWl0KCkKKworICAgICAgICBlbnZbJ1BZ
VEhPTlBBVEgnXSA9IChweXdlYnNvY2tldF9iYXNlICsgb3MucGF0aC5wYXRoc2VwICsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW52LmdldCgnUFlUSE9OUEFUSCcsICcnKSkKKworICAg
ICAgICBsb2dnaW5nLmRlYnVnKCdTdGFydGluZyAlcyBzZXJ2ZXIgb24gJWQuJyAlICgKKyAgICAg
ICAgICAgIHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLl9wb3J0KSkKKyAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygnY21kbGluZTogJXMnICUgJyAnLmpvaW4oc3RhcnRfY21kKSkKKyAgICAgICAgc2VsZi5f
cHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc3RhcnRfY21kLCBzdGRvdXQ9c2VsZi5fd3NvdXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9j
ZXNzLlNURE9VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52
PWVudikKKworICAgICAgICAjIFdhaXQgYSBiaXQgYmVmb3JlIGNoZWNraW5nIHRoZSBsaXZlbmVz
cyBvZiB0aGUgc2VydmVyLgorICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKworICAgICAgICBpZiBz
ZWxmLl91c2VfdGxzOgorICAgICAgICAgICAgdXJsID0gJ2h0dHBzJworICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgdXJsID0gJ2h0dHAnCisgICAgICAgIHVybCA9IHVybCArICc6Ly8xMjcuMC4w
LjE6JWQvJyAlIHNlbGYuX3BvcnQKKyAgICAgICAgaWYgbm90IHVybF9pc19hbGl2ZSh1cmwpOgor
ICAgICAgICAgICAgZnAgPSBvcGVuKG91dHB1dF9sb2cpCisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgZm9yIGxpbmUgaW4gZnA6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcu
ZXJyb3IobGluZSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZnAuY2xv
c2UoKQorICAgICAgICAgICAgcmFpc2UgUHlXZWJTb2NrZXROb3RTdGFydGVkKAorICAgICAgICAg
ICAgICAgICdGYWlsZWQgdG8gc3RhcnQgJXMgc2VydmVyIG9uIHBvcnQgJXMuJyAlCisgICAgICAg
ICAgICAgICAgICAgIChzZWxmLl9zZXJ2ZXJfbmFtZSwgc2VsZi5fcG9ydCkpCisKKyAgICAgICAg
IyBPdXIgcHJvY2VzcyB0ZXJtaW5hdGVkIGFscmVhZHkKKyAgICAgICAgaWYgc2VsZi5fcHJvY2Vz
cy5yZXR1cm5jb2RlICE9IE5vbmU6CisgICAgICAgICAgICByYWlzZSBQeVdlYlNvY2tldE5vdFN0
YXJ0ZWQoCisgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2ZXIuJyAlIHNl
bGYuX3NlcnZlcl9uYW1lKQorICAgICAgICBpZiBzZWxmLl9waWRmaWxlOgorICAgICAgICAgICAg
ZiA9IG9wZW4oc2VsZi5fcGlkZmlsZSwgJ3cnKQorICAgICAgICAgICAgZi53cml0ZSgiJWQiICUg
c2VsZi5fcHJvY2Vzcy5waWQpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiBzdG9w
KHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGZvcmNlIGFuZCBub3Qgc2VsZi5p
c19ydW5uaW5nKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9wcm9j
ZXNzOgorICAgICAgICAgICAgcGlkID0gc2VsZi5fcHJvY2Vzcy5waWQKKyAgICAgICAgZWxpZiBz
ZWxmLl9waWRmaWxlOgorICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGlkZmlsZSkKKyAgICAg
ICAgICAgIHBpZCA9IGludChmLnJlYWQoKS5zdHJpcCgpKQorICAgICAgICAgICAgZi5jbG9zZSgp
CisKKyAgICAgICAgaWYgbm90IHBpZDoKKyAgICAgICAgICAgIHJhaXNlIFB5V2ViU29ja2V0Tm90
Rm91bmQoCisgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBmaW5kICVzIHNlcnZlciBwaWQuJyAl
IHNlbGYuX3NlcnZlcl9uYW1lKQorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1NodXR0aW5nIGRv
d24gJXMgc2VydmVyICVkLicgJSAoc2VsZi5fc2VydmVyX25hbWUsIHBpZCkpCisgICAgICAgIHNl
bGYuX3BvcnRfb2JqLl9raWxsX3Byb2Nlc3MocGlkKQorCisgICAgICAgIGlmIHNlbGYuX3Byb2Nl
c3M6CisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQorICAgICAgICAgICAgc2VsZi5f
cHJvY2VzcyA9IE5vbmUKKworICAgICAgICBpZiBzZWxmLl93c291dDoKKyAgICAgICAgICAgIHNl
bGYuX3dzb3V0LmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQorCisKK2lm
ICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgIyBQcm92aWRlIHNvbWUgY29tbWFuZCBsaW5l
IHBhcmFtcyBmb3Igc3RhcnRpbmcgdGhlIFB5V2ViU29ja2V0IHNlcnZlcgorICAgICMgbWFudWFs
bHkuCisgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCisgICAgb3B0
aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctLXNlcnZlcicsIHR5cGU9J2Nob2ljZScsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9WydzdGFydCcsICdzdG9wJ10sIGRlZmF1bHQ9
J3N0YXJ0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2VydmVyIGFjdGlv
biAoc3RhcnR8c3RvcCknKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1w
b3J0JywgZGVzdD0ncG9ydCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9
Tm9uZSwgaGVscD0nUG9ydCB0byBsaXN0ZW4gb24nKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29w
dGlvbignLXInLCAnLS1yb290JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0n
QWJzb2x1dGUgcGF0aCB0byBEb2N1bWVudFJvb3QgJworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcob3ZlcnJpZGVzIGxheW91dCB0ZXN0IHJvb3RzKScpCisgICAgb3B0aW9uX3Bh
cnNlci5hZGRfb3B0aW9uKCctdCcsICctLXRscycsIGRlc3Q9J3VzZV90bHMnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSd1c2UgVExTICh3c3M6Ly8pJykKKyAg
ICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1rJywgJy0tcHJpdmF0ZV9rZXknLCBkZXN0PSdw
cml2YXRlX2tleScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycsIGhl
bHA9J1RMUyBwcml2YXRlIGtleSBmaWxlLicpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9u
KCctYycsICctLWNlcnRpZmljYXRlJywgZGVzdD0nY2VydGlmaWNhdGUnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxwPSdUTFMgY2VydGlmaWNhdGUgZmlsZS4n
KQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1yZWdpc3Rlcl9jeWd3aW4nLCBhY3Rp
b249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJyZWdp
c3Rlcl9jeWd3aW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSZWdpc3Rl
ciBDeWd3aW4gcGF0aHMgKG9uIFdpbiB0cnkgYm90cyknKQorICAgIG9wdGlvbl9wYXJzZXIuYWRk
X29wdGlvbignLS1waWRmaWxlJywgaGVscD0ncGF0aCB0byBwaWQgZmlsZS4nKQorICAgIG9wdGlv
bnMsIGFyZ3MgPSBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgbm90IG9wdGlv
bnMucG9ydDoKKyAgICAgICAgaWYgb3B0aW9ucy51c2VfdGxzOgorICAgICAgICAgICAgb3B0aW9u
cy5wb3J0ID0gX0RFRkFVTFRfV1NTX1BPUlQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9w
dGlvbnMucG9ydCA9IF9ERUZBVUxUX1dTX1BPUlQKKworICAgIGt3ZHMgPSB7J3BvcnQnOiBvcHRp
b25zLnBvcnQsICd1c2VfdGxzJzogb3B0aW9ucy51c2VfdGxzfQorICAgIGlmIG9wdGlvbnMucm9v
dDoKKyAgICAgICAga3dkc1sncm9vdCddID0gb3B0aW9ucy5yb290CisgICAgaWYgb3B0aW9ucy5w
cml2YXRlX2tleToKKyAgICAgICAga3dkc1sncHJpdmF0ZV9rZXknXSA9IG9wdGlvbnMucHJpdmF0
ZV9rZXkKKyAgICBpZiBvcHRpb25zLmNlcnRpZmljYXRlOgorICAgICAgICBrd2RzWydjZXJ0aWZp
Y2F0ZSddID0gb3B0aW9ucy5jZXJ0aWZpY2F0ZQorICAgIGt3ZHNbJ3JlZ2lzdGVyX2N5Z3dpbidd
ID0gb3B0aW9ucy5yZWdpc3Rlcl9jeWd3aW4KKyAgICBpZiBvcHRpb25zLnBpZGZpbGU6CisgICAg
ICAgIGt3ZHNbJ3BpZGZpbGUnXSA9IG9wdGlvbnMucGlkZmlsZQorCisgICAgcHl3ZWJzb2NrZXQg
PSBQeVdlYlNvY2tldCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICoqa3dkcykKKworICAgIGlmICdz
dGFydCcgPT0gb3B0aW9ucy5zZXJ2ZXI6CisgICAgICAgIHB5d2Vic29ja2V0LnN0YXJ0KCkKKyAg
ICBlbHNlOgorICAgICAgICBweXdlYnNvY2tldC5zdG9wKGZvcmNlPVRydWUpCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fY2hyb21pdW1f
d2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQppbmRleCA4OGI5N2Y4Li42YzliMzYzIDEw
MDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
Y2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKQEAgLTU0LDI5ICs1
NCwyNCBAQCBpbXBvcnQgUXVldWUKIGltcG9ydCByYW5kb20KIGltcG9ydCByZQogaW1wb3J0IHNo
dXRpbAotaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQg
dHJhY2ViYWNrCiAKLWZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGFwYWNoZV9odHRwX3NlcnZl
cgoraW1wb3J0IHNpbXBsZWpzb24KKwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9l
eHBlY3RhdGlvbnMKLWZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGh0dHBfc2VydmVyCiBmcm9t
IGxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvcgogZnJv
bSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgbWV0ZXJlZF9zdHJlYW0KLWZyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHBhdGhfdXRpbHMKLWZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHBsYXRmb3Jt
X3V0aWxzCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBmcm9tIGxh
eW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3NoZWxsX3RocmVhZAogZnJvbSBsYXlvdXRfcGFja2Fn
ZSBpbXBvcnQgdGVzdF9maWxlcwotZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgd2Vic29ja2V0
X3NlcnZlcgogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCBmdXp6eV9pbWFnZV9kaWZmCiBmcm9tIHRl
c3RfdHlwZXMgaW1wb3J0IGltYWdlX2RpZmYKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90
eXBlX2Jhc2UKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGV4dF9kaWZmCiAKLXN5cy5wYXRoLmFw
cGVuZChwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScpKQotaW1wb3J0IHNp
bXBsZWpzb24KK2ltcG9ydCBwb3J0CiAKICMgSW5kaWNhdGVzIHRoYXQgd2Ugd2FudCBkZXRhaWxl
ZCBwcm9ncmVzcyB1cGRhdGVzIGluIHRoZSBvdXRwdXQgKHByaW50cwogIyBkaXJlY3RvcnktYnkt
ZGlyZWN0b3J5IGZlZWRiYWNrKS4KQEAgLTk0LDE3ICs4OSwxNiBAQCBUZXN0RXhwZWN0YXRpb25z
RmlsZSA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnNGaWxlCiBjbGFzcyBUZXN0
SW5mbzoKICAgICAiIiJHcm91cHMgaW5mb3JtYXRpb24gYWJvdXQgYSB0ZXN0IGZvciBlYXN5IHBh
c3Npbmcgb2YgZGF0YS4iIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgdGlt
ZW91dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGZpbGVuYW1lLCB0aW1lb3V0KToK
ICAgICAgICAgIiIiR2VuZXJhdGVzIHRoZSBVUkkgYW5kIHN0b3JlcyB0aGUgZmlsZW5hbWUgYW5k
IHRpbWVvdXQgZm9yIHRoaXMgdGVzdC4KICAgICAgICAgQXJnczoKICAgICAgICAgICBmaWxlbmFt
ZTogRnVsbCBwYXRoIHRvIHRoZSB0ZXN0LgogICAgICAgICAgIHRpbWVvdXQ6IFRpbWVvdXQgZm9y
IHJ1bm5pbmcgdGhlIHRlc3QgaW4gVGVzdFNoZWxsLgogICAgICAgICAgICIiIgogICAgICAgICBz
ZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKLSAgICAgICAgc2VsZi51cmkgPSBwYXRoX3V0aWxzLmZp
bGVuYW1lX3RvX3VyaShmaWxlbmFtZSkKKyAgICAgICAgc2VsZi51cmkgPSBwb3J0LmZpbGVuYW1l
X3RvX3VyaShmaWxlbmFtZSkKICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAotICAgICAg
ICBleHBlY3RlZF9oYXNoX2ZpbGUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcuY2hlY2tzdW0nKQorICAgICAgICBleHBlY3RlZF9oYXNoX2ZpbGUgPSBwb3J0LmV4
cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLmNoZWNrc3VtJykKICAgICAgICAgdHJ5OgogICAg
ICAgICAgICAgc2VsZi5pbWFnZV9oYXNoID0gb3BlbihleHBlY3RlZF9oYXNoX2ZpbGUsICJyIiku
cmVhZCgpCiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgpAQCAtMTczLDI0ICsxNjcsMTkgQEAg
Y2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgIE5VTV9SRVRSWV9PTl9VTkVYUEVDVEVEX0ZBSUxVUkUg
PSAxCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgbWV0ZXIpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBvcHRpb25zLCBtZXRlciwgcG9ydCk6CiAgICAgICAgICIiIkluaXRpYWxp
emUgdGVzdCBydW5uZXIgZGF0YSBzdHJ1Y3R1cmVzLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAg
ICAgb3B0aW9uczogYSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCiAgICAgICAg
ICAgbWV0ZXI6IGEgTWV0ZXJlZFN0cmVhbSBvYmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCisg
ICAgICAgICAgcG9ydDogYW4gb2JqZWN0IGltcGxlbWVudGluZyBwb3J0LXNwZWNpZmljIGhvb2tz
CiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBz
ZWxmLl9tZXRlciA9IG1ldGVyCiAKLSAgICAgICAgaWYgb3B0aW9ucy51c2VfYXBhY2hlOgotICAg
ICAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIgPSBhcGFjaGVfaHR0cF9zZXJ2ZXIuTGF5b3V0VGVz
dEFwYWNoZUh0dHBkKAotICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3Rvcnkp
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9IGh0dHBfc2Vy
dmVyLkxpZ2h0dHBkKG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgICAgIHNlbGYuX3Bv
cnQgPSBwb3J0CiAKLSAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlciA9IHdlYnNvY2tldF9z
ZXJ2ZXIuUHlXZWJTb2NrZXQoCi0gICAgICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5
KQogICAgICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3BlblNT
TCBvbiBidWlsZGJvdHMuCiAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIg
PSB3ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KAogICAgICAgICAjICAgICAgICBvcHRpb25z
LnJlc3VsdHNfZGlyZWN0b3J5LCB1c2VfdGxzPVRydWUsIHBvcnQ9OTMyMykKQEAgLTIwMSw4ICsx
OTAsNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAjIGEgc2V0IG9mIHRlc3QgZmlsZXMs
IGFuZCB0aGUgc2FtZSB0ZXN0cyBhcyBhIGxpc3QKICAgICAgICAgc2VsZi5fdGVzdF9maWxlcyA9
IHNldCgpCiAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCA9IE5vbmUKLSAgICAgICAgc2Vs
Zi5fZmlsZV9kaXIgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAndG9vbHMn
LAotICAgICAgICAgICAgJ2xheW91dF90ZXN0cycpCiAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1
ZSA9IFF1ZXVlLlF1ZXVlKCkKIAogICAgICAgICAjIFRoZXNlIGFyZSB1c2VkIGZvciAtLWxvZyBk
ZXRhaWxlZC1wcm9ncmVzcyB0byB0cmFjayBzdGF0dXMgYnkKQEAgLTIxNywxOCArMjA0LDE2IEBA
IGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIGxvZ2dpbmcuZGVidWcoImZsdXNoaW5nIHN0ZGVy
ciIpCiAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQogICAgICAgICBsb2dnaW5nLmRlYnVnKCJz
dG9wcGluZyBodHRwIHNlcnZlciIpCi0gICAgICAgICMgU3RvcCB0aGUgaHR0cCBzZXJ2ZXIuCi0g
ICAgICAgIHNlbGYuX2h0dHBfc2VydmVyLnN0b3AoKQotICAgICAgICAjIFN0b3AgdGhlIFdlYiBT
b2NrZXQgLyBXZWIgU29ja2V0IFNlY3VyZSBzZXJ2ZXJzLgotICAgICAgICBzZWxmLl93ZWJzb2Nr
ZXRfc2VydmVyLnN0b3AoKQotICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVy
LlN0b3AoKQorICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQorICAgICAgICBs
b2dnaW5nLmRlYnVnKCJzdG9wcGluZyB3ZWJzb2NrZXQgc2VydmVyIikKKyAgICAgICAgc2VsZi5f
cG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQogCiAgICAgZGVmIGdhdGhlcl9maWxlX3BhdGhz
KHNlbGYsIHBhdGhzKToKICAgICAgICAgIiIiRmluZCBhbGwgdGhlIGZpbGVzIHRvIHRlc3QuCiAK
ICAgICAgICAgQXJnczoKICAgICAgICAgICBwYXRoczogYSBsaXN0IG9mIGdsb2JzIHRvIHVzZSBp
bnN0ZWFkIG9mIHRoZSBkZWZhdWx0cy4iIiIKLSAgICAgICAgc2VsZi5fdGVzdF9maWxlcyA9IHRl
c3RfZmlsZXMuZ2F0aGVyX3Rlc3RfZmlsZXMocGF0aHMpCisgICAgICAgIHNlbGYuX3Rlc3RfZmls
ZXMgPSB0ZXN0X2ZpbGVzLmdhdGhlcl90ZXN0X2ZpbGVzKHNlbGYuX3BvcnQsIHBhdGhzKQogCiAg
ICAgZGVmIHBhcnNlX2V4cGVjdGF0aW9ucyhzZWxmLCBwbGF0Zm9ybSwgaXNfZGVidWdfbW9kZSk6
CiAgICAgICAgICIiIlBhcnNlIHRoZSBleHBlY3RhdGlvbnMgZnJvbSB0aGUgdGVzdF9saXN0IGZp
bGVzIGFuZCByZXR1cm4gYSBkYXRhCkBAIC0yNDAsOSArMjI1LDEwIEBAIGNsYXNzIFRlc3RSdW5u
ZXI6CiAgICAgICAgICAgICB0ZXN0X2ZpbGVzID0gc2VsZi5fdGVzdF9maWxlcwogCiAgICAgICAg
IHRyeToKLSAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IHRlc3RfZXhwZWN0YXRpb25z
LlRlc3RFeHBlY3RhdGlvbnModGVzdF9maWxlcywKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxl
X2RpciwgcGxhdGZvcm0sIGlzX2RlYnVnX21vZGUsCi0gICAgICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucy5saW50X3Rlc3RfZmlsZXMpCisgICAgICAgICAgICBleHBlY3RhdGlvbnNfc3RyID0gc2Vs
Zi5fcG9ydC50ZXN0X2V4cGVjdGF0aW9ucygpCisgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlv
bnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zKAorICAgICAgICAgICAgICAg
IHNlbGYuX3BvcnQsIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9uc19zdHIsCisgICAgICAgICAgICAg
ICAgcGxhdGZvcm0sIGlzX2RlYnVnX21vZGUsIHNlbGYuX29wdGlvbnMubGludF90ZXN0X2ZpbGVz
KQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucwogICAgICAgICBleGNlcHQg
RXhjZXB0aW9uLCBlcnI6CiAgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmxpbnRfdGVzdF9m
aWxlczoKQEAgLTM1Nyw3ICszNDMsOCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAg
c2VsZi5fdGVzdF9maWxlcyA9IHNldChzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpCiAKICAgICAgICAg
ICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IHNlbGYucGFyc2VfZXhwZWN0YXRpb25zKAotICAgICAg
ICAgICAgICAgIHBhdGhfdXRpbHMucGxhdGZvcm1fbmFtZSgpLCBzZWxmLl9vcHRpb25zLnRhcmdl
dCA9PSAnRGVidWcnKQorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQudGVzdF9wbGF0Zm9ybV9u
YW1lKCksCisgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy50YXJnZXQgPT0gJ0RlYnVnJykK
IAogICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlcyA9IHNldChmaWxlcykKICAgICAgICAgICAg
IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCA9IGZpbGVzCkBAIC00MjIsOCArNDA5LDkgQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKICAgICAgICAgaXMgdXNlZCBmb3IgbG9va2luZyB1cCB0aGUgdGltZW91dCB2
YWx1ZSAoaW4gbXMpIHRvIHVzZSBmb3IgdGhlIGdpdmVuCiAgICAgICAgIHRlc3QuIiIiCiAgICAg
ICAgIGlmIHNlbGYuX2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxlLCB0ZXN0X2V4
cGVjdGF0aW9ucy5TTE9XKToKLSAgICAgICAgICAgIHJldHVybiBUZXN0SW5mbyh0ZXN0X2ZpbGUs
IHNlbGYuX29wdGlvbnMuc2xvd190aW1lX291dF9tcykKLSAgICAgICAgcmV0dXJuIFRlc3RJbmZv
KHRlc3RfZmlsZSwgc2VsZi5fb3B0aW9ucy50aW1lX291dF9tcykKKyAgICAgICAgICAgIHJldHVy
biBUZXN0SW5mbyhzZWxmLl9wb3J0LCB0ZXN0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zKQorICAgICAgICByZXR1cm4gVGVz
dEluZm8oc2VsZi5fcG9ydCwgdGVzdF9maWxlLCBzZWxmLl9vcHRpb25zLnRpbWVfb3V0X21zKQog
CiAgICAgZGVmIF9nZXRfdGVzdF9maWxlX3F1ZXVlKHNlbGYsIHRlc3RfZmlsZXMpOgogICAgICAg
ICAiIiJDcmVhdGUgdGhlIHRocmVhZCBzYWZlIHF1ZXVlIG9mIGxpc3RzIG9mICh0ZXN0IGZpbGVu
YW1lcywgdGVzdCBVUklzKQpAQCAtNTA0LDcgKzQ5Miw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZ3BfZmF1bHRfZXJyb3JfYm94OgogICAgICAgICAgICAg
c2hlbGxfYXJncy5hcHBlbmQoJy0tZ3AtZmF1bHQtZXJyb3ItYm94JykKIAotICAgICAgICByZXR1
cm4gKHRlc3RfYXJncywgc2hlbGxfYXJncykKKyAgICAgICAgcmV0dXJuICh0ZXN0X2FyZ3MsIHBu
Z19wYXRoLCBzaGVsbF9hcmdzKQogCiAgICAgZGVmIF9jb250YWluc190ZXN0cyhzZWxmLCBzdWJk
aXIpOgogICAgICAgICBmb3IgdGVzdF9maWxlIGluIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdDoKQEAg
LTUxMiwyMyArNTAwLDEyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBkZWYgX2luc3RhbnRpYXRlX3Rl
c3Rfc2hlbGxfdGhyZWFkcyhzZWxmLCB0ZXN0X3NoZWxsX2JpbmFyeSwgdGVzdF9maWxlcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSk6CisgICAg
ZGVmIF9pbnN0YW50aWF0ZV90ZXN0X3NoZWxsX3RocmVhZHMoc2VsZiwgdGVzdF9maWxlcywgcmVz
dWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJJbnN0YW50aXRhdGVzIGFuZCBzdGFydHMgdGhlIFRl
c3RTaGVsbFRocmVhZChzKS4KIAogICAgICAgICBSZXR1cm46CiAgICAgICAgICAgVGhlIGxpc3Qg
b2YgdGhyZWFkcy4KICAgICAgICAgIiIiCi0gICAgICAgIHRlc3Rfc2hlbGxfY29tbWFuZCA9IFt0
ZXN0X3NoZWxsX2JpbmFyeV0KLQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLndyYXBwZXI6Ci0g
ICAgICAgICAgICAjIFRoaXMgc3BsaXQoKSBpc24ndCByZWFsbHkgd2hhdCB3ZSB3YW50IC0tIGl0
IGluY29ycmVjdGx5IHdpbGwKLSAgICAgICAgICAgICMgc3BsaXQgcXVvdGVkIHN0cmluZ3Mgd2l0
aGluIHRoZSB3cmFwcGVyIGFyZ3VtZW50IC0tIGJ1dCBpbgotICAgICAgICAgICAgIyBwcmFjdGlj
ZSBpdCBzaG91bGRuJ3QgY29tZSB1cCBhbmQgdGhlIC0taGVscCBvdXRwdXQgd2FybnMKLSAgICAg
ICAgICAgICMgYWJvdXQgaXQgYW55d2F5LgotICAgICAgICAgICAgdGVzdF9zaGVsbF9jb21tYW5k
ID0gKHNlbGYuX29wdGlvbnMud3JhcHBlci5zcGxpdCgpICsKLSAgICAgICAgICAgICAgICB0ZXN0
X3NoZWxsX2NvbW1hbmQpCi0KICAgICAgICAgZmlsZW5hbWVfcXVldWUgPSBzZWxmLl9nZXRfdGVz
dF9maWxlX3F1ZXVlKHRlc3RfZmlsZXMpCiAKICAgICAgICAgIyBJbnN0YW50aWF0ZSBUZXN0U2hl
bGxUaHJlYWRzIGFuZCBzdGFydCB0aGVtLgpAQCAtNTM3LDE1ICs1MTQsMTYgQEAgY2xhc3MgVGVz
dFJ1bm5lcjoKICAgICAgICAgICAgICMgQ3JlYXRlIHNlcGFyYXRlIFRlc3RUeXBlcyBpbnN0YW5j
ZXMgZm9yIGVhY2ggdGhyZWFkLgogICAgICAgICAgICAgdGVzdF90eXBlcyA9IFtdCiAgICAgICAg
ICAgICBmb3IgdCBpbiBzZWxmLl90ZXN0X3R5cGVzOgotICAgICAgICAgICAgICAgIHRlc3RfdHlw
ZXMuYXBwZW5kKHQoc2VsZi5fb3B0aW9ucy5wbGF0Zm9ybSwKKyAgICAgICAgICAgICAgICB0ZXN0
X3R5cGVzLmFwcGVuZCh0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMucGxhdGZvcm0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGly
ZWN0b3J5KSkKIAotICAgICAgICAgICAgdGVzdF9hcmdzLCBzaGVsbF9hcmdzID0gc2VsZi5fZ2V0
X3Rlc3Rfc2hlbGxfYXJncyhpKQotICAgICAgICAgICAgdGhyZWFkID0gdGVzdF9zaGVsbF90aHJl
YWQuVGVzdFNoZWxsVGhyZWFkKGZpbGVuYW1lX3F1ZXVlLAorICAgICAgICAgICAgdGVzdF9hcmdz
LCBwbmdfcGF0aCwgc2hlbGxfYXJncyA9IHNlbGYuX2dldF90ZXN0X3NoZWxsX2FyZ3MoaSkKKyAg
ICAgICAgICAgIHRocmVhZCA9IHRlc3Rfc2hlbGxfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxm
Ll9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpbGVuYW1lX3F1ZXVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3NoZWxsX2NvbW1h
bmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdF90eXBlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0X2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcG5nX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGxfYXJncywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25z
KQogICAgICAgICAgICAgaWYgc2VsZi5faXNfc2luZ2xlX3RocmVhZGVkKCk6CkBAIC01NTYsMTkg
KzUzNCwxMSBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAgIHJldHVybiB0aHJlYWRzCiAK
LSAgICBkZWYgX3N0b3BfbGF5b3V0X3Rlc3RfaGVscGVyKHNlbGYsIHByb2MpOgotICAgICAgICAi
IiJTdG9wIHRoZSBsYXlvdXQgdGVzdCBoZWxwZXIgYW5kIGNsb3NlcyBpdCBkb3duLiIiIgotICAg
ICAgICBpZiBwcm9jOgotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RvcHBpbmcgbGF5b3V0
IHRlc3QgaGVscGVyIikKLSAgICAgICAgICAgIHByb2Muc3RkaW4ud3JpdGUoInhcbiIpCi0gICAg
ICAgICAgICBwcm9jLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAgIHByb2Mud2FpdCgpCi0KICAg
ICBkZWYgX2lzX3NpbmdsZV90aHJlYWRlZChzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB3aGV0
aGVyIHdlIHNob3VsZCBydW4gYWxsIHRoZSB0ZXN0cyBpbiB0aGUgbWFpbiB0aHJlYWQuIiIiCiAg
ICAgICAgIHJldHVybiBpbnQoc2VsZi5fb3B0aW9ucy5udW1fdGVzdF9zaGVsbHMpID09IDEKIAot
ICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIHRlc3Rfc2hlbGxfYmluYXJ5LCBmaWxlX2xpc3QsIHJl
c3VsdF9zdW1tYXJ5KToKKyAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCBmaWxlX2xpc3QsIHJlc3Vs
dF9zdW1tYXJ5KToKICAgICAgICAgIiIiUnVucyB0aGUgdGVzdHMgaW4gdGhlIGZpbGVfbGlzdC4K
IAogICAgICAgICBSZXR1cm46IEEgdHVwbGUgKGZhaWx1cmVzLCB0aHJlYWRfdGltaW5ncywgdGVz
dF90aW1pbmdzLApAQCAtNTgyLDkgKzU1Miw4IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAg
ICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0
X3J1bl90aW1lfQogICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRv
IHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKICAgICAgICAgIiIiCi0gICAgICAgIHRocmVhZHMg
PSBzZWxmLl9pbnN0YW50aWF0ZV90ZXN0X3NoZWxsX3RocmVhZHModGVzdF9zaGVsbF9iaW5hcnks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmls
ZV9saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICB0aHJlYWRzID0gc2VsZi5faW5zdGFudGlhdGVf
dGVzdF9zaGVsbF90aHJlYWRzKGZpbGVfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKIAogICAgICAgICAj
IFdhaXQgZm9yIHRoZSB0aHJlYWRzIHRvIGZpbmlzaCBhbmQgY29sbGVjdCB0ZXN0IGZhaWx1cmVz
LgogICAgICAgICBmYWlsdXJlcyA9IHt9CkBAIC02MTAsNyArNTc5LDcgQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgZm9y
IHRocmVhZCBpbiB0aHJlYWRzOgogICAgICAgICAgICAgICAgIHRocmVhZC5jYW5jZWwoKQotICAg
ICAgICAgICAgc2VsZi5fc3RvcF9sYXlvdXRfdGVzdF9oZWxwZXIobGF5b3V0X3Rlc3RfaGVscGVy
X3Byb2MpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaGVscGVyKCkKICAgICAgICAgICAg
IHJhaXNlCiAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKICAgICAgICAgICAgICMgQ2hl
Y2sgd2hldGhlciBhIFRlc3RTaGVsbFRocmVhZCBkaWVkIGJlZm9yZSBub3JtYWwgY29tcGxldGlv
bi4KQEAgLTY0MCw0MiArNjA5LDIwIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIGlmIG5v
dCBzZWxmLl90ZXN0X2ZpbGVzOgogICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgc3RhcnRf
dGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIHRlc3Rfc2hlbGxfYmluYXJ5ID0gcGF0aF91dGls
cy50ZXN0X3NoZWxsX3BhdGgoc2VsZi5fb3B0aW9ucy50YXJnZXQpCiAKICAgICAgICAgIyBTdGFy
dCB1cCBhbnkgaGVscGVyIG5lZWRlZAotICAgICAgICBsYXlvdXRfdGVzdF9oZWxwZXJfcHJvYyA9
IE5vbmUKICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMubm9fcGl4ZWxfdGVzdHM6Ci0gICAg
ICAgICAgICBoZWxwZXJfcGF0aCA9IHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgo
Ci0gICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy50YXJnZXQpCi0gICAgICAgICAgICBpZiBs
ZW4oaGVscGVyX3BhdGgpOgotICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlN0YXJ0aW5n
IGxheW91dCBoZWxwZXIgJXMiICUgaGVscGVyX3BhdGgpCi0gICAgICAgICAgICAgICAgbGF5b3V0
X3Rlc3RfaGVscGVyX3Byb2MgPSBzdWJwcm9jZXNzLlBvcGVuKAotICAgICAgICAgICAgICAgICAg
ICBbaGVscGVyX3BhdGhdLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAg
ICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1Ob25lKQotICAgICAgICAgICAgICAg
IGlzX3JlYWR5ID0gbGF5b3V0X3Rlc3RfaGVscGVyX3Byb2Muc3Rkb3V0LnJlYWRsaW5lKCkKLSAg
ICAgICAgICAgICAgICBpZiBub3QgaXNfcmVhZHkuc3RhcnRzd2l0aCgncmVhZHknKToKLSAgICAg
ICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigibGF5b3V0X3Rlc3RfaGVscGVyIGZhaWxlZCB0
byBiZSByZWFkeSIpCi0KLSAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBzeXN0ZW0gZGVwZW5kZW5j
aWVzICh0aGVtZXMsIGZvbnRzLCAuLi4pIGFyZSBjb3JyZWN0LgotICAgICAgICBpZiBub3Qgc2Vs
Zi5fb3B0aW9ucy5ub2NoZWNrX3N5c19kZXBzOgotICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nl
c3MuUG9wZW4oW3Rlc3Rfc2hlbGxfYmluYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIi0tY2hlY2stbGF5b3V0LXRlc3Qtc3lzLWRlcHMiXSkKLSAgICAgICAgICAgIGlm
IHByb2Mud2FpdCgpICE9IDA6Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJBYm9ydGlu
ZyBiZWNhdXNlIHN5c3RlbSBkZXBlbmRlbmNpZXMgY2hlY2sgIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZmFpbGVkLlxuIFRvIG92ZXJyaWRlLCBpbnZva2Ugd2l0aCAiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICItLW5vY2hlY2stc3lzLWRlcHMiKQotICAgICAgICAgICAg
ICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2hlbHBlcigpCiAK
ICAgICAgICAgaWYgc2VsZi5fY29udGFpbnNfdGVzdHMoc2VsZi5IVFRQX1NVQkRJUik6Ci0gICAg
ICAgICAgICBzZWxmLl9odHRwX3NlcnZlci5zdGFydCgpCisgICAgICAgICAgICBzZWxmLl9wb3J0
LnN0YXJ0X2h0dHBfc2VydmVyKCkKIAogICAgICAgICBpZiBzZWxmLl9jb250YWluc190ZXN0cyhz
ZWxmLldFQlNPQ0tFVF9TVUJESVIpOgotICAgICAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZl
ci5zdGFydCgpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIo
KQogICAgICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3NlcnZlci5TdGFydCgpCiAK
ICAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3MgPSAoCi0gICAgICAgICAgICBzZWxmLl9ydW5fdGVzdHModGVzdF9zaGVsbF9iaW5hcnks
IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dF9zdW1tYXJ5KSkKKyAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0cyhzZWxmLl90ZXN0X2ZpbGVz
X2xpc3QsIHJlc3VsdF9zdW1tYXJ5KSkKIAogICAgICAgICAjIFdlIGV4Y2x1ZGUgdGhlIGNyYXNo
ZXMgZnJvbSB0aGUgbGlzdCBvZiByZXN1bHRzIHRvIHJldHJ5LCBiZWNhdXNlCiAgICAgICAgICMg
d2Ugd2FudCB0byB0cmVhdCBldmVuIGEgcG90ZW50aWFsbHkgZmxha3kgY3Jhc2ggYXMgYW4gZXJy
b3IuCkBAIC02ODcsMTAgKzYzNCwxMCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAg
bG9nZ2luZy5kZWJ1ZygiUmV0cnlpbmcgJWQgdW5leHBlY3RlZCBmYWlsdXJlKHMpIiAlIGxlbihm
YWlsdXJlcykpCiAgICAgICAgICAgICByZXRyaWVzICs9IDEKICAgICAgICAgICAgIHJldHJ5X3N1
bW1hcnkgPSBSZXN1bHRTdW1tYXJ5KHNlbGYuX2V4cGVjdGF0aW9ucywgZmFpbHVyZXMua2V5cygp
KQotICAgICAgICAgICAgc2VsZi5fcnVuX3Rlc3RzKHRlc3Rfc2hlbGxfYmluYXJ5LCBmYWlsdXJl
cy5rZXlzKCksIHJldHJ5X3N1bW1hcnkpCisgICAgICAgICAgICBzZWxmLl9ydW5fdGVzdHMoZmFp
bHVyZXMua2V5cygpLCByZXRyeV9zdW1tYXJ5KQogICAgICAgICAgICAgZmFpbHVyZXMgPSBzZWxm
Ll9nZXRfZmFpbHVyZXMocmV0cnlfc3VtbWFyeSwgaW5jbHVkZV9jcmFzaGVzPVRydWUpCiAKLSAg
ICAgICAgc2VsZi5fc3RvcF9sYXlvdXRfdGVzdF9oZWxwZXIobGF5b3V0X3Rlc3RfaGVscGVyX3By
b2MpCisgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9oZWxwZXIoKQogICAgICAgICBlbmRfdGltZSA9
IHRpbWUudGltZSgpCiAKICAgICAgICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIoc2Vs
Zi5fb3B0aW9ucywgJ3RpbWluZycpCkBAIC03NzUsNyArNzIyLDcgQEAgY2xhc3MgVGVzdFJ1bm5l
cjoKIAogICAgICAgICBuZXh0X3Rlc3QgPSBzZWxmLl90ZXN0X2ZpbGVzX2xpc3Rbc2VsZi5fY3Vy
cmVudF90ZXN0X251bWJlcl0KICAgICAgICAgbmV4dF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoCi0g
ICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUobmV4dF90ZXN0KSkK
KyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShuZXh0X3Rlc3Qp
KQogICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0ciA9PSAiIjoKICAgICAgICAg
ICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAiICUgKG5leHRfZGlyKQogICAg
ICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2RpcgpAQCAtODAxLDcgKzc0OCw3IEBA
IGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAgICAgIG5leHRfdGVzdCA9IHNlbGYuX3Rlc3Rf
ZmlsZXNfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQogICAgICAgICAgICAgbmV4dF9k
aXIgPSBvcy5wYXRoLmRpcm5hbWUoCi0gICAgICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2
ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCisgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCiAKICAgICAgICAgaWYgcmVzdWx0X3N1
bW1hcnkucmVtYWluaW5nOgogICAgICAgICAgICAgcmVtYWluX3N0ciA9ICIgKCVkKSIgJSAocmVz
dWx0X3N1bW1hcnkucmVtYWluaW5nKQpAQCAtODcyLDcgKzgxOSw3IEBAIGNsYXNzIFRlc3RSdW5u
ZXI6CiAgICAgICAgICAgICAjIE5vdGUgdGhhdCBpZiBhIHRlc3QgY3Jhc2hlZCBpbiB0aGUgb3Jp
Z2luYWwgcnVuLCB3ZSBpZ25vcmUKICAgICAgICAgICAgICMgd2hldGhlciBvciBub3QgaXQgY3Jh
c2hlZCB3aGVuIHdlIHJldHJpZWQgaXQgKGlmIHdlIHJldHJpZWQgaXQpLAogICAgICAgICAgICAg
IyBhbmQgYWx3YXlzIGNvbnNpZGVyIHRoZSByZXN1bHQgbm90IGZsYWt5LgotICAgICAgICAgICAg
dGVzdCA9IHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAg
ICAgICAgIHRlc3QgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUp
CiAgICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRp
b25zX3N0cmluZyhmaWxlbmFtZSkKICAgICAgICAgICAgIGFjdHVhbCA9IFtrZXl3b3Jkc1tyZXN1
bHRdXQogCkBAIC05NDEsNyArODg4LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgZXhw
ZWN0YXRpb25zX2ZpbGUuY2xvc2UoKQogCiAgICAgICAgIGpzb25fbGF5b3V0X3Jlc3VsdHNfZ2Vu
ZXJhdG9yLkpTT05MYXlvdXRSZXN1bHRzR2VuZXJhdG9yKAotICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucy5idWlsZGVyX25hbWUsIHNlbGYuX29wdGlvbnMuYnVpbGRfbmFtZSwKKyAgICAgICAgICAg
IHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMuYnVpbGRlcl9uYW1lLCBzZWxmLl9vcHRpb25zLmJ1
aWxkX25hbWUsCiAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmJ1aWxkX251bWJlciwgc2VsZi5f
b3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKICAgICAgICAgICAgIEJVSUxERVJfQkFTRV9VUkws
IGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAogICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25z
LCByZXN1bHRfc3VtbWFyeSwgc2VsZi5fdGVzdF9maWxlc19saXN0KQpAQCAtMTEwOCw3ICsxMDU1
LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgd3JpdGUodGl0bGUpCiAgICAgICAgIGZv
ciB0ZXN0X3R1cGxlIGluIHRlc3RfbGlzdDoKICAgICAgICAgICAgIGZpbGVuYW1lID0gdGVzdF90
dXBsZS5maWxlbmFtZVtsZW4oCi0gICAgICAgICAgICAgICAgcGF0aF91dGlscy5sYXlvdXRfdGVz
dHNfZGlyKCkpICsgMTpdCisgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNf
ZGlyKCkpICsgMTpdCiAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoJ1xc
JywgJy8nKQogICAgICAgICAgICAgdGVzdF9ydW5fdGltZSA9IHJvdW5kKHRlc3RfdHVwbGUudGVz
dF9ydW5fdGltZSwgMSkKICAgICAgICAgICAgIHdyaXRlKCIgICVzIHRvb2sgJXMgc2Vjb25kcyIg
JSAoZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWUpKQpAQCAtMTMyNiw3ICsxMjczLDcgQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKICAgICAgICAgIiIiUHJpbnRzIG9uZSB1bmV4cGVjdGVkIHRlc3QgcmVzdWx0
IGxpbmUuIiIiCiAgICAgICAgIGRlc2MgPSBUZXN0RXhwZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElP
Tl9ERVNDUklQVElPTlNbcmVzdWx0XVswXQogICAgICAgICBzZWxmLl9tZXRlci53cml0ZSgiICAl
cyAtPiB1bmV4cGVjdGVkICVzXG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGhf
dXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0KSwgZGVzYykpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdCksIGRl
c2MpKQogCiAgICAgZGVmIF93cml0ZV9yZXN1bHRzX2h0bWxfZmlsZShzZWxmLCByZXN1bHRfc3Vt
bWFyeSk6CiAgICAgICAgICIiIldyaXRlIHJlc3VsdHMuaHRtbCB3aGljaCBpcyBhIHN1bW1hcnkg
b2YgdGVzdHMgdGhhdCBmYWlsZWQuCkBAIC0xMzY0LDEyICsxMzExLDEyIEBAIGNsYXNzIFRlc3RS
dW5uZXI6CiAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKICAgICAgICAgICAg
IHRlc3RfZmFpbHVyZXMgPSByZXN1bHRfc3VtbWFyeS5mYWlsdXJlcy5nZXQodGVzdF9maWxlLCBb
XSkKICAgICAgICAgICAgIG91dF9maWxlLndyaXRlKCI8cD48YSBocmVmPSclcyc+JXM8L2E+PGJy
IC8+XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwYXRoX3V0aWxzLmZpbGVuYW1l
X3RvX3VyaSh0ZXN0X2ZpbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF91
dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfZmlsZSkpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJSAoc2VsZi5fcG9ydC5maWxlbmFtZV90b191cmkodGVzdF9maWxlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxl
bmFtZSh0ZXN0X2ZpbGUpKSkKICAgICAgICAgICAgIGZvciBmYWlsdXJlIGluIHRlc3RfZmFpbHVy
ZXM6CiAgICAgICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIiZuYnNwOyZuYnNwOyVzPGJyLz4i
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBmYWlsdXJlLnJlc3VsdF9odG1sX291
dHB1dCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMucmVsYXRp
dmVfdGVzdF9maWxlbmFtZSh0ZXN0X2ZpbGUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2ZpbGUpKSkKICAg
ICAgICAgICAgIG91dF9maWxlLndyaXRlKCI8L3A+XG4iKQogCiAgICAgICAgICMgZm9vdGVyCkBA
IC0xMzgwLDggKzEzMjcsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAiIiJMYXVuY2hl
cyB0aGUgdGVzdCBzaGVsbCBvcGVuIHRvIHRoZSByZXN1bHRzLmh0bWwgcGFnZS4iIiIKICAgICAg
ICAgcmVzdWx0c19maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNf
ZGlyZWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1
bHRzLmh0bWwiKQotICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFtwYXRoX3V0aWxzLnRlc3Rfc2hl
bGxfcGF0aChzZWxmLl9vcHRpb25zLnRhcmdldCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHBhdGhfdXRpbHMuZmlsZW5hbWVfdG9fdXJpKHJlc3VsdHNfZmlsZW5hbWUpXSkKKyAgICAgICAg
c2VsZi5fcG9ydC5zaG93X3Jlc3VsdHNfaHRtbF9maWxlKHJlc3VsdHNfZmlsZW5hbWUpCiAKIAog
ZGVmIF9hZGRfdG9fZGljdF9vZl9saXN0cyhkaWN0LCBrZXksIHZhbHVlKToKQEAgLTE0NDIsMTkg
KzEzODgsMTkgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncyk6CiAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICBvcHRpb25zLnRhcmdldCA9ICJSZWxlYXNlIgogCisgICAgcG9ydF9vYmogPSBwb3J0
LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQorCiAgICAgaWYgbm90IG9wdGlvbnMudXNl
X2FwYWNoZToKICAgICAgICAgb3B0aW9ucy51c2VfYXBhY2hlID0gc3lzLnBsYXRmb3JtIGluICgn
ZGFyd2luJywgJ2xpbnV4MicpCiAKICAgICBpZiBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LnN0
YXJ0c3dpdGgoIi8iKToKICAgICAgICAgIyBBc3N1bWUgaXQncyBhbiBhYnNvbHV0ZSBwYXRoIGFu
ZCBub3JtYWxpemUuCi0gICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkgPSBwYXRoX3V0
aWxzLmdldF9hYnNvbHV0ZV9wYXRoKAorICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5
ID0gcG9ydF9vYmouZ2V0X2Fic29sdXRlX3BhdGgoCiAgICAgICAgICAgICBvcHRpb25zLnJlc3Vs
dHNfZGlyZWN0b3J5KQogICAgIGVsc2U6CiAgICAgICAgICMgSWYgaXQncyBhIHJlbGF0aXZlIHBh
dGgsIG1ha2UgdGhlIG91dHB1dCBkaXJlY3RvcnkgcmVsYXRpdmUgdG8KICAgICAgICAgIyBEZWJ1
ZyBvciBSZWxlYXNlLgotICAgICAgICBiYXNlZGlyID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgnd2Via2l0JykKLSAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSA9IHBhdGhfdXRp
bHMuZ2V0X2Fic29sdXRlX3BhdGgoCi0gICAgICAgICAgICBvcy5wYXRoLmpvaW4oYmFzZWRpciwg
b3B0aW9ucy50YXJnZXQsIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpKQorICAgICAgICBvcHRp
b25zLnJlc3VsdHNfZGlyZWN0b3J5ID0gcG9ydF9vYmoucmVzdWx0c19kaXJlY3RvcnkoKQogCiAg
ICAgaWYgb3B0aW9ucy5jbG9iYmVyX29sZF9yZXN1bHRzOgogICAgICAgICAjIEp1c3QgY2xvYmJl
ciB0aGUgYWN0dWFsIHRlc3QgcmVzdWx0cyBkaXJlY3RvcmllcyBzaW5jZSB0aGUgb3RoZXIKQEAg
LTE0NjQsMTIgKzE0MTAsOSBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzKToKICAgICAgICAgaWYg
b3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHBhdGgpCiAK
LSAgICAjIEVuc3VyZSBwbGF0Zm9ybSBpcyB2YWxpZCBhbmQgZm9yY2UgaXQgdG8gdGhlIGZvcm0g
J2Nocm9taXVtLTxwbGF0Zm9ybT4nLgotICAgIG9wdGlvbnMucGxhdGZvcm0gPSBwYXRoX3V0aWxz
LnBsYXRmb3JtX25hbWUob3B0aW9ucy5wbGF0Zm9ybSkKLQogICAgIGlmIG5vdCBvcHRpb25zLm51
bV90ZXN0X3NoZWxsczoKICAgICAgICAgIyBUT0RPKG9qYW4pOiBJbnZlc3RpZ2F0ZSBwZXJmL2Zs
YWtpbmVzcyBpbXBhY3Qgb2YgdXNpbmcgbnVtY29yZXMgKyAxLgotICAgICAgICBvcHRpb25zLm51
bV90ZXN0X3NoZWxscyA9IHBsYXRmb3JtX3V0aWxzLmdldF9udW1fY29yZXMoKQorICAgICAgICBv
cHRpb25zLm51bV90ZXN0X3NoZWxscyA9IHBvcnRfb2JqLm51bV9jb3JlcygpCiAKICAgICB3cml0
ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25zLCAnY29uZmlnJykKICAgICB3cml0ZSgi
UnVubmluZyAlcyB0ZXN0X3NoZWxscyBpbiBwYXJhbGxlbCIgJSBvcHRpb25zLm51bV90ZXN0X3No
ZWxscykKQEAgLTE0OTcsNjIgKzE0NDAsNDYgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncyk6CiAg
ICAgICAgIHBhdGhzICs9IHJlYWRfdGVzdF9maWxlcyhvcHRpb25zLnRlc3RfbGlzdCkKIAogICAg
ICMgQ3JlYXRlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlz
dC4KLSAgICBwYXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KG9wdGlvbnMucmVzdWx0c19k
aXJlY3RvcnkpCisgICAgcG9ydF9vYmoubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3B0aW9ucy5yZXN1
bHRzX2RpcmVjdG9yeSkKICAgICBtZXRlci51cGRhdGUoIkdhdGhlcmluZyBmaWxlcyAuLi4iKQog
Ci0gICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKG9wdGlvbnMsIG1ldGVyKQorICAgIHRlc3Rf
cnVubmVyID0gVGVzdFJ1bm5lcihvcHRpb25zLCBtZXRlciwgcG9ydF9vYmopCiAgICAgdGVzdF9y
dW5uZXIuZ2F0aGVyX2ZpbGVfcGF0aHMocGF0aHMpCiAKICAgICBpZiBvcHRpb25zLmxpbnRfdGVz
dF9maWxlczoKICAgICAgICAgIyBDcmVhdGluZyB0aGUgZXhwZWNhdGlvbnMgZm9yIGVhY2ggcGxh
dGZvcm0vdGFyZ2V0IHBhaXIgZG9lcyBhbGwgdGhlCiAgICAgICAgICMgdGVzdCBsaXN0IHBhcnNp
bmcgYW5kIGVuc3VyZXMgaXQncyBjb3JyZWN0IHN5bnRheCAoZS5nLiBubyBkdXBlcykuCi0gICAg
ICAgIGZvciBwbGF0Zm9ybSBpbiBUZXN0RXhwZWN0YXRpb25zRmlsZS5QTEFURk9STVM6CisgICAg
ICAgIGZvciBwbGF0Zm9ybSBpbiBwb3J0X29iai50ZXN0X3BsYXRmb3JtX25hbWVzKCk6CiAgICAg
ICAgICAgICB0ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocGxhdGZvcm0sIGlzX2RlYnVn
X21vZGU9VHJ1ZSkKICAgICAgICAgICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0aW9ucyhw
bGF0Zm9ybSwgaXNfZGVidWdfbW9kZT1GYWxzZSkKICAgICAgICAgcHJpbnQgKCJJZiB0aGVyZSBh
cmUgbm8gZmFpbCBtZXNzYWdlcywgZXJyb3JzIG9yIGV4Y2VwdGlvbnMsIHRoZW4gdGhlICIKICAg
ICAgICAgICAgICJsaW50IHN1Y2NlZWRlZC4iKQogICAgICAgICBzeXMuZXhpdCgwKQogCi0gICAg
dHJ5OgotICAgICAgICB0ZXN0X3NoZWxsX2JpbmFyeV9wYXRoID0gcGF0aF91dGlscy50ZXN0X3No
ZWxsX3BhdGgob3B0aW9ucy50YXJnZXQpCi0gICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZv
dW5kOgotICAgICAgICBwcmludCAiXG5FUlJPUjogdGVzdF9zaGVsbCBpcyBub3QgZm91bmQuIEJl
IHN1cmUgdGhhdCB5b3UgaGF2ZSBidWlsdCIKLSAgICAgICAgcHJpbnQgIml0IGFuZCB0aGF0IHlv
dSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgYnVpbGQuIFRoaXMgc2NyaXB0IgotICAgICAgICBwcmlu
dCAid2lsbCBydW4gdGhlIFJlbGVhc2Ugb25lIGJ5IGRlZmF1bHQuIFVzZSAtLWRlYnVnIHRvIHVz
ZSB0aGUiCi0gICAgICAgIHByaW50ICJEZWJ1ZyBidWlsZC5cbiIKLSAgICAgICAgc3lzLmV4aXQo
MSkKKyAgICAjIENoZWNrIHRoYXQgdGhlIHN5c3RlbSBkZXBlbmRlbmNpZXMgKHRoZW1lcywgZm9u
dHMsIC4uLikgYXJlIGNvcnJlY3QuCisgICAgaWYgbm90IG9wdGlvbnMubm9jaGVja19zeXNfZGVw
czoKKyAgICAgICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX3N5c19kZXBzKCk6CisgICAgICAgICAg
ICBzeXMuZXhpdCgxKQogCiAgICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIob3B0aW9u
cywgImNvbmZpZyIpCi0gICAgd3JpdGUoIlVzaW5nIHBsYXRmb3JtICclcyciICUgb3B0aW9ucy5w
bGF0Zm9ybSkKKyAgICB3cml0ZSgiVXNpbmcgcG9ydCAnJXMnIiAlIHBvcnRfb2JqLm5hbWUoKSkK
ICAgICB3cml0ZSgiUGxhY2luZyB0ZXN0IHJlc3VsdHMgaW4gJXMiICUgb3B0aW9ucy5yZXN1bHRz
X2RpcmVjdG9yeSkKICAgICBpZiBvcHRpb25zLm5ld19iYXNlbGluZToKLSAgICAgICAgd3JpdGUo
IlBsYWNpbmcgbmV3IGJhc2VsaW5lcyBpbiAlcyIgJQotICAgICAgICAgICAgICBwYXRoX3V0aWxz
LmNocm9taXVtX2Jhc2VsaW5lX3BhdGgob3B0aW9ucy5wbGF0Zm9ybSkpCi0gICAgd3JpdGUoIlVz
aW5nICVzIGJ1aWxkIGF0ICVzIiAlIChvcHRpb25zLnRhcmdldCwgdGVzdF9zaGVsbF9iaW5hcnlf
cGF0aCkpCisgICAgICAgIHdyaXRlKCJQbGFjaW5nIG5ldyBiYXNlbGluZXMgaW4gJXMiICUgcG9y
dF9vYmouYmFzZWxpbmVfcGF0aCgpKQorICAgIHdyaXRlKCJVc2luZyAlcyBidWlsZCIgJSBvcHRp
b25zLnRhcmdldCkKICAgICBpZiBvcHRpb25zLm5vX3BpeGVsX3Rlc3RzOgogICAgICAgICB3cml0
ZSgiTm90IHJ1bm5pbmcgcGl4ZWwgdGVzdHMiKQogICAgIHdyaXRlKCIiKQogCiAgICAgbWV0ZXIu
dXBkYXRlKCJQYXJzaW5nIGV4cGVjdGF0aW9ucyAuLi4iKQotICAgIHRlc3RfcnVubmVyLnBhcnNl
X2V4cGVjdGF0aW9ucyhvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zLnRhcmdldCA9PSAnRGVidWcn
KQorICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0aW9ucyhwb3J0X29iai50ZXN0X3BsYXRm
b3JtX25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50
YXJnZXQgPT0gJ0RlYnVnJykKIAogICAgIG1ldGVyLnVwZGF0ZSgiUHJlcGFyaW5nIHRlc3RzIC4u
LiIpCiAgICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIob3B0aW9ucywgImV4cGVjdGVk
IikKICAgICByZXN1bHRfc3VtbWFyeSA9IHRlc3RfcnVubmVyLnByZXBhcmVfbGlzdHNfYW5kX3By
aW50X291dHB1dCh3cml0ZSkKIAotICAgIGlmICdjeWd3aW4nID09IHN5cy5wbGF0Zm9ybToKLSAg
ICAgICAgbG9nZ2luZy53YXJuKCIjIiAqIDQwKQotICAgICAgICBsb2dnaW5nLndhcm4oIiMgVU5F
WFBFQ1RFRCBQWVRIT04gVkVSU0lPTiIpCi0gICAgICAgIGxvZ2dpbmcud2FybigiIyBUaGlzIHNj
cmlwdCBzaG91bGQgYmUgcnVuIHVzaW5nIHRoZSB2ZXJzaW9uIG9mIHB5dGhvbiIpCi0gICAgICAg
IGxvZ2dpbmcud2FybigiIyBpbiB0aGlyZF9wYXJ0eS9weXRob25fMjQvIikKLSAgICAgICAgbG9n
Z2luZy53YXJuKCIjIiAqIDQwKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgIyBEZWxldGUg
dGhlIGRpc2sgY2FjaGUgaWYgYW55IHRvIGVuc3VyZSBhIGNsZWFuIHRlc3QgcnVuLgotICAgIGNh
Y2hlZGlyID0gb3MucGF0aC5zcGxpdCh0ZXN0X3NoZWxsX2JpbmFyeV9wYXRoKVswXQotICAgIGNh
Y2hlZGlyID0gb3MucGF0aC5qb2luKGNhY2hlZGlyLCAiY2FjaGUiKQotICAgIGlmIG9zLnBhdGgu
ZXhpc3RzKGNhY2hlZGlyKToKLSAgICAgICAgc2h1dGlsLnJtdHJlZShjYWNoZWRpcikKKyAgICBw
b3J0X29iai5zZXR1cF90ZXN0X3J1bigpCiAKICAgICB0ZXN0X3J1bm5lci5hZGRfdGVzdF90eXBl
KHRleHRfZGlmZi5UZXN0VGV4dERpZmYpCiAgICAgaWYgbm90IG9wdGlvbnMubm9fcGl4ZWxfdGVz
dHM6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdlX2RpZmYucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdlX2RpZmYucHkKaW5kZXgg
MTM0YjUwNy4uYmEyMTQ2NSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9mdXp6eV9pbWFnZV9kaWZmLnB5CisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvZnV6enlfaW1h
Z2VfZGlmZi5weQpAQCAtMzUsMTYgKzM1LDE0IEBAIGltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dp
bmcKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAotaW1wb3J0IHN1YnByb2Nlc3MKIAotZnJvbSBs
YXlvdXRfcGFja2FnZSBpbXBvcnQgcGF0aF91dGlscwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBv
cnQgdGVzdF9mYWlsdXJlcwogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFzZQog
CiAKIGNsYXNzIEZ1enp5SW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAK
LSAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgZmlsZW5hbWUsIHByb2MsIG91dHB1dCwgdGVz
dF9hcmdzLCB0YXJnZXQpOgorICAgIGRlZiBjb21wYXJlX291dHB1dChzZWxmLCBmaWxlbmFtZSwg
b3V0cHV0LCB0ZXN0X2FyZ3MsIHRhcmdldCk6CiAgICAgICAgICIiIkltcGxlbWVudGF0aW9uIG9m
IENvbXBhcmVPdXRwdXQgdGhhdCBjaGVja3MgdGhlIG91dHB1dCBpbWFnZSBhbmQKICAgICAgICAg
Y2hlY2tzdW0gYWdhaW5zdCB0aGUgZXhwZWN0ZWQgZmlsZXMgZnJvbSB0aGUgTGF5b3V0VGVzdCBk
aXJlY3RvcnkuCiAgICAgICAgICIiIgpAQCAtNTQsNyArNTIsNyBAQCBjbGFzcyBGdXp6eUltYWdl
RGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogICAgICAgICBpZiB0ZXN0X2FyZ3Mu
aGFzaCBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCiAKLSAgICAgICAgZXhw
ZWN0ZWRfcG5nX2ZpbGUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAn
LnBuZycpCisgICAgICAgIGV4cGVjdGVkX3BuZ19maWxlID0gc2VsZi5fcG9ydC5leHBlY3RlZF9m
aWxlbmFtZShmaWxlbmFtZSwgJy5wbmcnKQogCiAgICAgICAgIGlmIHRlc3RfYXJncy5zaG93X3Nv
dXJjZXM6CiAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCdVc2luZyAlcycgJSBleHBlY3RlZF9w
bmdfZmlsZSkKQEAgLTY0LDggKzYyLDcgQEAgY2xhc3MgRnV6enlJbWFnZURpZmYodGVzdF90eXBl
X2Jhc2UuVGVzdFR5cGVCYXNlKToKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2Zh
aWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2Uoc2VsZikpCiAKICAgICAgICAgIyBSdW4gdGhlIGZ1
enp5bWF0Y2hlcgotICAgICAgICByID0gc3VicHJvY2Vzcy5jYWxsKFtwYXRoX3V0aWxzLmZ1enp5
X21hdGNoX3BhdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2FyZ3MucG5n
X3BhdGgsIGV4cGVjdGVkX3BuZ19maWxlXSkKKyAgICAgICAgciA9IHBvcnQuZnV6enlfZGlmZih0
ZXN0X2FyZ3MucG5nX3BhdGgsIGV4cGVjdGVkX3BuZ19maWxlKQogICAgICAgICBpZiByICE9IDA6
CiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlRnV6enlG
YWlsdXJlKHNlbGYpKQogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkKaW5kZXgg
YjBiZjE4OS4uMjJiMDU2MCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5CisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weQpA
QCAtMzgsOSArMzgsNyBAQCBpbXBvcnQgZXJybm8KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MK
IGltcG9ydCBzaHV0aWwKLWltcG9ydCBzdWJwcm9jZXNzCiAKLWZyb20gbGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IHBhdGhfdXRpbHMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVy
ZXMKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKIApAQCAtODQsNyArODIs
NyBAQCBjbGFzcyBJbWFnZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKICAgICAg
ICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGZpbGVuYW1lLCBwbmdfZGF0YSwgIi5wbmciKQog
ICAgICAgICBzZWxmLl9zYXZlX2Jhc2VsaW5lX2RhdGEoZmlsZW5hbWUsIGNoZWNrc3VtLCAiLmNo
ZWNrc3VtIikKIAotICAgIGRlZiBfY3JlYXRlX2ltYWdlX2RpZmYoc2VsZiwgZmlsZW5hbWUsIHRh
cmdldCk6CisgICAgZGVmIF9jcmVhdGVfaW1hZ2VfZGlmZihzZWxmLCBwb3J0LCBmaWxlbmFtZSwg
dGFyZ2V0KToKICAgICAgICAgIiIiQ3JlYXRlcyB0aGUgdmlzdWFsIGRpZmYgb2YgdGhlIGV4cGVj
dGVkL2FjdHVhbCBQTkdzLgogCiAgICAgICAgIEFyZ3M6CkBAIC05OCwzMiArOTYsMTQgQEAgY2xh
c3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAgICAgICAgIGV4cGVj
dGVkX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoZmlsZW5hbWUsCiAgICAgICAgICAg
c2VsZi5GSUxFTkFNRV9TVUZGSVhfRVhQRUNURUQgKyAnLnBuZycpCiAKLSAgICAgICAgZ2xvYmFs
IF9jb21wYXJlX2F2YWlsYWJsZQotICAgICAgICBjbWQgPSAnJwotCiAgICAgICAgIHRyeToKLSAg
ICAgICAgICAgIGV4ZWN1dGFibGUgPSBwYXRoX3V0aWxzLmltYWdlX2RpZmZfcGF0aCh0YXJnZXQp
Ci0gICAgICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwgJy0tZGlmZicsIGFjdHVhbF9maWxlbmFt
ZSwgZXhwZWN0ZWRfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgZGlmZl9maWxlbmFtZV0K
LSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIF9jb21wYXJlX2F2YWls
YWJsZSA9IFRydWUKKyAgICAgICAgICAgIHJlc3VsdCA9IHBvcnQuZGlmZl9pbWFnZShhY3R1YWxf
ZmlsZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZmZfZmlsZW5hbWUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAg
ICAgICAgICAgX2NvbXBhcmVfYXZhaWxhYmxlID0gRmFsc2UKIAotICAgICAgICByZXN1bHQgPSAx
Ci0gICAgICAgIGlmIF9jb21wYXJlX2F2YWlsYWJsZToKLSAgICAgICAgICAgIHRyeToKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNhbGwoY21kKQotICAgICAgICAgICAgZXhj
ZXB0IE9TRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9F
TlQgb3IgZS5lcnJubyA9PSBlcnJuby5FQUNDRVM6Ci0gICAgICAgICAgICAgICAgICAgIF9jb21w
YXJlX2F2YWlsYWJsZSA9IEZhbHNlCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgZQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAg
ICAgICAgICAgIyB3b3JrIGFyb3VuZCBhIHJhY2UgY29uZGl0aW9uIGluIFB5dGhvbiAyLjQncyBp
bXBsZW1lbnRhdGlvbgotICAgICAgICAgICAgICAgICMgb2Ygc3VicHJvY2Vzcy5Qb3BlbgotICAg
ICAgICAgICAgICAgIHBhc3MKLQogICAgICAgICBnbG9iYWwgX2NvbXBhcmVfbXNnX3ByaW50ZWQK
LQogICAgICAgICBpZiBub3QgX2NvbXBhcmVfYXZhaWxhYmxlIGFuZCBub3QgX2NvbXBhcmVfbXNn
X3ByaW50ZWQ6CiAgICAgICAgICAgICBfY29tcGFyZV9tc2dfcHJpbnRlZCA9IFRydWUKICAgICAg
ICAgICAgIHByaW50KCdpbWFnZV9kaWZmIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHlvdSBoYXZlIGEg
JyArIHRhcmdldCArCkBAIC0xMzEsNyArMTExLDcgQEAgY2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlw
ZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVm
IGNvbXBhcmVfb3V0cHV0KHNlbGYsIGZpbGVuYW1lLCBwcm9jLCBvdXRwdXQsIHRlc3RfYXJncywg
dGFyZ2V0KToKKyAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgcG9ydCwgZmlsZW5hbWUsIG91
dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgogICAgICAgICAiIiJJbXBsZW1lbnRhdGlvbiBvZiBD
b21wYXJlT3V0cHV0IHRoYXQgY2hlY2tzIHRoZSBvdXRwdXQgaW1hZ2UgYW5kCiAgICAgICAgIGNo
ZWNrc3VtIGFnYWluc3QgdGhlIGV4cGVjdGVkIGZpbGVzIGZyb20gdGhlIExheW91dFRlc3QgZGly
ZWN0b3J5LgogICAgICAgICAiIiIKQEAgLTE0OCw5ICsxMjgsOSBAQCBjbGFzcyBJbWFnZURpZmYo
dGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJl
cwogCiAgICAgICAgICMgQ29tcGFyZSBoYXNoZXMuCi0gICAgICAgIGV4cGVjdGVkX2hhc2hfZmls
ZSA9IHBhdGhfdXRpbHMuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsCisgICAgICAgIGV4cGVj
dGVkX2hhc2hfZmlsZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jy5jaGVja3N1bScpCi0gICAgICAgIGV4cGVjdGVkX3BuZ19maWxlID0gcGF0aF91dGlscy5leHBl
Y3RlZF9maWxlbmFtZShmaWxlbmFtZSwgJy5wbmcnKQorICAgICAgICBleHBlY3RlZF9wbmdfZmls
ZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykKIAogICAg
ICAgICBpZiB0ZXN0X2FyZ3Muc2hvd19zb3VyY2VzOgogICAgICAgICAgICAgbG9nZ2luZy5kZWJ1
ZygnVXNpbmcgJXMnICUgZXhwZWN0ZWRfaGFzaF9maWxlKQpAQCAtMTY2LDggKzE0Niw5IEBAIGNs
YXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogCiAgICAgICAgIGlm
IG5vdCBvcy5wYXRoLmlzZmlsZShleHBlY3RlZF9wbmdfZmlsZSk6CiAgICAgICAgICAgICAjIFJl
cG9ydCBhIG1pc3NpbmcgZXhwZWN0ZWQgUE5HIGZpbGUuCi0gICAgICAgICAgICBzZWxmLndyaXRl
X291dHB1dF9maWxlcyhmaWxlbmFtZSwgJycsICcuY2hlY2tzdW0nLCB0ZXN0X2FyZ3MuaGFzaCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2hhc2gsIGRpZmY9
RmFsc2UsIHdkaWZmPUZhbHNlKQorICAgICAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMo
cG9ydCwgZmlsZW5hbWUsICcnLCAnLmNoZWNrc3VtJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlc3RfYXJncy5oYXNoLCBleHBlY3RlZF9oYXNoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGlmZj1GYWxzZSwgd2RpZmY9RmFsc2UpCiAgICAgICAg
ICAgICBzZWxmLl9jb3B5X291dHB1dF9wbmcoZmlsZW5hbWUsIHRlc3RfYXJncy5wbmdfcGF0aCwg
Jy1hY3R1YWwucG5nJykKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVz
LkZhaWx1cmVNaXNzaW5nSW1hZ2Uoc2VsZikpCiAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZXMK
QEAgLTE3NiwxNCArMTU3LDE1IEBAIGNsYXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0
VHlwZUJhc2UpOgogICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCiAKIAotICAgICAgICBzZWxm
LndyaXRlX291dHB1dF9maWxlcyhmaWxlbmFtZSwgJycsICcuY2hlY2tzdW0nLCB0ZXN0X2FyZ3Mu
aGFzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaGFzaCwgZGlm
Zj1GYWxzZSwgd2RpZmY9RmFsc2UpCisgICAgICAgIHNlbGYud3JpdGVfb3V0cHV0X2ZpbGVzKHBv
cnQsIGZpbGVuYW1lLCAnJywgJy5jaGVja3N1bScsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RfYXJncy5oYXNoLCBleHBlY3RlZF9oYXNoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaWZmPUZhbHNlLCB3ZGlmZj1GYWxzZSkKICAgICAgICAgc2VsZi5fY29w
eV9vdXRwdXRfcG5nKGZpbGVuYW1lLCB0ZXN0X2FyZ3MucG5nX3BhdGgsICctYWN0dWFsLnBuZycp
CiAgICAgICAgIHNlbGYuX2NvcHlfb3V0cHV0X3BuZyhmaWxlbmFtZSwgZXhwZWN0ZWRfcG5nX2Zp
bGUsICctZXhwZWN0ZWQucG5nJykKIAogICAgICAgICAjIEV2ZW4gdGhvdWdoIHdlIG9ubHkgdXNl
IHJlc3VsdCBpbiBvbmUgY29kZXBhdGggYmVsb3cgYnV0IHdlCiAgICAgICAgICMgc3RpbGwgbmVl
ZCB0byBjYWxsIENyZWF0ZUltYWdlRGlmZiBmb3Igb3RoZXIgY29kZXBhdGhzLgotICAgICAgICBy
ZXN1bHQgPSBzZWxmLl9jcmVhdGVfaW1hZ2VfZGlmZihmaWxlbmFtZSwgdGFyZ2V0KQorICAgICAg
ICByZXN1bHQgPSBzZWxmLl9jcmVhdGVfaW1hZ2VfZGlmZihwb3J0LCBmaWxlbmFtZSwgdGFyZ2V0
KQogICAgICAgICBpZiBleHBlY3RlZF9oYXNoID09ICcnOgogICAgICAgICAgICAgZmFpbHVyZXMu
YXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZUhhc2goc2VsZikpCiAgICAg
ICAgIGVsaWYgdGVzdF9hcmdzLmhhc2ggIT0gZXhwZWN0ZWRfaGFzaDoKQEAgLTE5Niw3ICsxNzgs
NyBAQCBjbGFzcyBJbWFnZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKIAogICAg
ICAgICByZXR1cm4gZmFpbHVyZXMKIAotICAgIGRlZiBkaWZmX2ZpbGVzKHNlbGYsIGZpbGUxLCBm
aWxlMik6CisgICAgZGVmIGRpZmZfZmlsZXMoc2VsZiwgcG9ydCwgZmlsZTEsIGZpbGUyKToKICAg
ICAgICAgIiIiRGlmZiB0d28gaW1hZ2UgZmlsZXMuCiAKICAgICAgICAgQXJnczoKQEAgLTIwOCwx
NyArMTkwLDggQEAgY2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6
CiAgICAgICAgICIiIgogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBw
YXRoX3V0aWxzLmltYWdlX2RpZmZfcGF0aCgnRGVidWcnKQotICAgICAgICBleGNlcHQgRXhjZXB0
aW9uLCBlOgotICAgICAgICAgICAgbG9nZ2luZy53YXJuKCdGYWlsZWQgdG8gZmluZCBpbWFnZSBk
aWZmIGV4ZWN1dGFibGUuJykKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgY21k
ID0gW2V4ZWN1dGFibGUsIGZpbGUxLCBmaWxlMl0KLSAgICAgICAgcmVzdWx0ID0gMQotICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNhbGwoY21kKQotICAgICAg
ICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgICAgIGxvZ2dpbmcud2FybignRmFpbGVkIHRv
IGNvbXBhcmUgaW1hZ2UgZGlmZjogJXMnLCBlKQorICAgICAgICAgICAgcmVzdWx0ID0gcG9ydC5k
aWZmX2ltYWdlKGZpbGUxLCBmaWxlMikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CiAg
ICAgICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgICAgIHJldHVybiByZXN1bHQgPT0gMQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90
eXBlcy90ZXN0X3R5cGVfYmFzZS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkKaW5kZXggMzM0YWU3MC4uNmZl
NjZhNSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvdGVzdF90eXBlcy90ZXN0X3R5cGVfYmFzZS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5CkBAIC0z
MywxMyArMzMsOSBAQCBBbHNvIGRlZmluZXMgdGhlIFRlc3RBcmd1bWVudHMgInN0cnVjdCIgdG8g
cGFzcyB0aGVtIGFkZGl0aW9uYWwgYXJndW1lbnRzLgogIiIiCiAKIGltcG9ydCBjZ2kKLWltcG9y
dCBkaWZmbGliCiBpbXBvcnQgZXJybm8KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MucGF0aAot
aW1wb3J0IHN1YnByb2Nlc3MKLQotZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcGF0aF91dGls
cwogCiAKIGNsYXNzIFRlc3RBcmd1bWVudHMob2JqZWN0KToKQEAgLTc0LDcgKzcwLDcgQEAgY2xh
c3MgVGVzdFR5cGVCYXNlKG9iamVjdCk6CiAgICAgRklMRU5BTUVfU1VGRklYX1dESUZGID0gIi13
ZGlmZi5odG1sIgogICAgIEZJTEVOQU1FX1NVRkZJWF9DT01QQVJFID0gIi1kaWZmLnBuZyIKIAot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwbGF0Zm9ybSwgcm9vdF9vdXRwdXRfZGlyKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydCwgcGxhdGZvcm0sIHJvb3Rfb3V0cHV0X2Rpcik6CiAgICAg
ICAgICIiIkluaXRpYWxpemUgYSBUZXN0VHlwZUJhc2Ugb2JqZWN0LgogCiAgICAgICAgIEFyZ3M6
CkBAIC04MywxNCArNzksMTUgQEAgY2xhc3MgVGVzdFR5cGVCYXNlKG9iamVjdCk6CiAgICAgICAg
ICAgcm9vdF9vdXRwdXRfZGlyOiBUaGUgdW5peCBzdHlsZSBwYXRoIHRvIHRoZSBvdXRwdXQgZGly
LgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fcm9vdF9vdXRwdXRfZGlyID0gcm9vdF9vdXRw
dXRfZGlyCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX3BsYXRmb3Jt
ID0gcGxhdGZvcm0KIAogICAgIGRlZiBfbWFrZV9vdXRwdXRfZGlyZWN0b3J5KHNlbGYsIGZpbGVu
YW1lKToKICAgICAgICAgIiIiQ3JlYXRlcyB0aGUgb3V0cHV0IGRpcmVjdG9yeSAoaWYgbmVlZGVk
KSBmb3IgYSBnaXZlbiB0ZXN0CiAgICAgICAgIGZpbGVuYW1lLiIiIgogICAgICAgICBvdXRwdXRf
ZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fcm9vdF9vdXRwdXRfZGlyLAotICAgICAgICAg
ICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkKLSAgICAgICAg
cGF0aF91dGlscy5tYXliZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRoLnNwbGl0KG91dHB1dF9maWxl
bmFtZSlbMF0pCisgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUo
ZmlsZW5hbWUpKQorICAgICAgICBzZWxmLl9wb3J0Lm1heWJlX21ha2VfZGlyZWN0b3J5KG9zLnBh
dGguc3BsaXQob3V0cHV0X2ZpbGVuYW1lKVswXSkKIAogICAgIGRlZiBfc2F2ZV9iYXNlbGluZV9k
YXRhKHNlbGYsIGZpbGVuYW1lLCBkYXRhLCBtb2RpZmllcik6CiAgICAgICAgICIiIlNhdmVzIGEg
bmV3IGJhc2VsaW5lIGZpbGUgaW50byB0aGUgcGxhdGZvcm0gZGlyZWN0b3J5LgpAQCAtMTA0LDEz
ICsxMDEsMTMgQEAgY2xhc3MgVGVzdFR5cGVCYXNlKG9iamVjdCk6CiAgICAgICAgICAgbW9kaWZp
ZXI6IHR5cGUgb2YgdGhlIHJlc3VsdCBmaWxlLCBlLmcuICIudHh0IiBvciAiLnBuZyIKICAgICAg
ICAgIiIiCiAgICAgICAgIHJlbGF0aXZlX2RpciA9IG9zLnBhdGguZGlybmFtZSgKLSAgICAgICAg
ICAgIHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCisgICAgICAg
ICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKQogICAgICAg
ICBvdXRwdXRfZGlyID0gb3MucGF0aC5qb2luKAotICAgICAgICAgICAgcGF0aF91dGlscy5jaHJv
bWl1bV9iYXNlbGluZV9wYXRoKHNlbGYuX3BsYXRmb3JtKSwgcmVsYXRpdmVfZGlyKQorICAgICAg
ICAgICAgc2VsZi5fcG9ydC5jaHJvbWl1bV9iYXNlbGluZV9wYXRoKHNlbGYuX3BsYXRmb3JtKSwg
cmVsYXRpdmVfZGlyKQogICAgICAgICBvdXRwdXRfZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUob3Mu
cGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gKwogICAgICAgICAgICAgc2VsZi5GSUxFTkFNRV9T
VUZGSVhfRVhQRUNURUQgKyBtb2RpZmllcikKIAotICAgICAgICBwYXRoX3V0aWxzLm1heWJlX21h
a2VfZGlyZWN0b3J5KG91dHB1dF9kaXIpCisgICAgICAgIHNlbGYuX3BvcnQubWF5YmVfbWFrZV9k
aXJlY3Rvcnkob3V0cHV0X2RpcikKICAgICAgICAgb3V0cHV0X3BhdGggPSBvcy5wYXRoLmpvaW4o
b3V0cHV0X2Rpciwgb3V0cHV0X2ZpbGUpCiAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ3dyaXRpbmcg
bmV3IGJhc2VsaW5lIHRvICIlcyInICUgKG91dHB1dF9wYXRoKSkKICAgICAgICAgb3BlbihvdXRw
dXRfcGF0aCwgIndiIikud3JpdGUoZGF0YSkKQEAgLTEzMCwxMCArMTI3LDEwIEBAIGNsYXNzIFRl
c3RUeXBlQmFzZShvYmplY3QpOgogICAgICAgICAgIFRoZSBhYnNvbHV0ZSB3aW5kb3dzIHBhdGgg
dG8gdGhlIG91dHB1dCBmaWxlbmFtZQogICAgICAgICAiIiIKICAgICAgICAgb3V0cHV0X2ZpbGVu
YW1lID0gb3MucGF0aC5qb2luKHNlbGYuX3Jvb3Rfb3V0cHV0X2RpciwKLSAgICAgICAgICAgIHBh
dGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCisgICAgICAgICAgICBz
ZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKQogICAgICAgICByZXR1
cm4gb3MucGF0aC5zcGxpdGV4dChvdXRwdXRfZmlsZW5hbWUpWzBdICsgbW9kaWZpZXIKIAotICAg
IGRlZiBjb21wYXJlX291dHB1dChzZWxmLCBmaWxlbmFtZSwgcHJvYywgb3V0cHV0LCB0ZXN0X2Fy
Z3MsIHRhcmdldCk6CisgICAgZGVmIGNvbXBhcmVfb3V0cHV0KHNlbGYsIHBvcnQsIGZpbGVuYW1l
LCBvdXRwdXQsIHRlc3RfYXJncywgdGFyZ2V0KToKICAgICAgICAgIiIiTWV0aG9kIHRoYXQgY29t
cGFyZXMgdGhlIG91dHB1dCBmcm9tIHRoZSB0ZXN0IHdpdGggdGhlCiAgICAgICAgIGV4cGVjdGVk
IHZhbHVlLgogCkBAIC0xNDEsNyArMTM4LDYgQEAgY2xhc3MgVGVzdFR5cGVCYXNlKG9iamVjdCk6
CiAKICAgICAgICAgQXJnczoKICAgICAgICAgICBmaWxlbmFtZTogYWJzb2x1dGUgZmlsZW5hbWUg
dG8gdGVzdCBmaWxlCi0gICAgICAgICAgcHJvYzogYSByZWZlcmVuY2UgdG8gdGhlIHRlc3Rfc2hl
bGwgcHJvY2VzcwogICAgICAgICAgIG91dHB1dDogYSBzdHJpbmcgY29udGFpbmluZyB0aGUgb3V0
cHV0IG9mIHRoZSB0ZXN0CiAgICAgICAgICAgdGVzdF9hcmdzOiBhIFRlc3RBcmd1bWVudHMgb2Jq
ZWN0IGhvbGRpbmcgb3B0aW9uYWwgYWRkaXRpb25hbAogICAgICAgICAgICAgICBhcmd1bWVudHMK
QEAgLTE1Miw4ICsxNDgsOCBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAgICAg
IiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkCiAKLSAgICBkZWYgd3JpdGVfb3V0cHV0
X2ZpbGVzKHNlbGYsIGZpbGVuYW1lLCB0ZXN0X3R5cGUsIGZpbGVfdHlwZSwgb3V0cHV0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIGRpZmY9VHJ1ZSwgd2RpZmY9RmFsc2Up
OgorICAgIGRlZiB3cml0ZV9vdXRwdXRfZmlsZXMoc2VsZiwgcG9ydCwgZmlsZW5hbWUsIHRlc3Rf
dHlwZSwgZmlsZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBleHBl
Y3RlZCwgZGlmZj1UcnVlLCB3ZGlmZj1GYWxzZSk6CiAgICAgICAgICIiIldyaXRlcyB0aGUgdGVz
dCBvdXRwdXQsIHRoZSBleHBlY3RlZCBvdXRwdXQgYW5kIG9wdGlvbmFsbHkgdGhlIGRpZmYKICAg
ICAgICAgYmV0d2VlbiB0aGUgdHdvIHRvIGZpbGVzIGluIHRoZSByZXN1bHRzIGRpcmVjdG9yeS4K
IApAQCAtMTg2LDgxICsxODIsMTUgQEAgY2xhc3MgVGVzdFR5cGVCYXNlKG9iamVjdCk6CiAgICAg
ICAgICAgICByZXR1cm4KIAogICAgICAgICBpZiBkaWZmOgotICAgICAgICAgICAgZGlmZiA9IGRp
ZmZsaWIudW5pZmllZF9kaWZmKGV4cGVjdGVkLnNwbGl0bGluZXMoVHJ1ZSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnNwbGl0bGluZXMoVHJ1ZSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX2ZpbGVuYW1l
KQotCisgICAgICAgICAgICBkaWZmID0gcG9ydC5kaWZmX3RleHQoZXhwZWN0ZWQsIG91dHB1dCwg
ZXhwZWN0ZWRfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0
dWFsX2ZpbGVuYW1lKQogICAgICAgICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2Zp
bGVuYW1lKGZpbGVuYW1lLAogICAgICAgICAgICAgICAgIHRlc3RfdHlwZSArIHNlbGYuRklMRU5B
TUVfU1VGRklYX0RJRkYgKyBmaWxlX3R5cGUpCi0gICAgICAgICAgICBvcGVuKGRpZmZfZmlsZW5h
bWUsICJ3YiIpLndyaXRlKCcnLmpvaW4oZGlmZikpCisgICAgICAgICAgICBvcGVuKGRpZmZfZmls
ZW5hbWUsICJ3YiIpLndyaXRlKGRpZmYpCiAKICAgICAgICAgaWYgd2RpZmY6CiAgICAgICAgICAg
ICAjIFNoZWxsIG91dCB0byB3ZGlmZiB0byBnZXQgY29sb3JlZCBpbmxpbmUgZGlmZnMuCi0gICAg
ICAgICAgICBleGVjdXRhYmxlID0gcGF0aF91dGlscy53ZGlmZl9wYXRoKCkKLSAgICAgICAgICAg
IGNtZCA9IFtleGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICctLXN0YXJ0LWRlbGV0ZT0j
I1dESUZGX0RFTCMjJywKLSAgICAgICAgICAgICAgICAgICAnLS1lbmQtZGVsZXRlPSMjV0RJRkZf
RU5EIyMnLAotICAgICAgICAgICAgICAgICAgICctLXN0YXJ0LWluc2VydD0jI1dESUZGX0FERCMj
JywKLSAgICAgICAgICAgICAgICAgICAnLS1lbmQtaW5zZXJ0PSMjV0RJRkZfRU5EIyMnLAotICAg
ICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgIGFj
dHVhbF9maWxlbmFtZV0KLSAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5h
bWUoZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF90eXBlICsgc2Vs
Zi5GSUxFTkFNRV9TVUZGSVhfV0RJRkYpCi0KLSAgICAgICAgICAgIGdsb2JhbCBfd2RpZmZfYXZh
aWxhYmxlCi0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIFB5dGhvbidzIFBv
cGVuIGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBhbnkgcGlwZXMgb3BlbmVkIHRvIGEKLSAgICAgICAg
ICAgICAgICAjIHByb2Nlc3MgdGhhdCBjYW4ndCBiZSBleGVjdXRlZCB0byBiZSBsZWFrZWQuICBT
aW5jZSB0aGlzCi0gICAgICAgICAgICAgICAgIyBjb2RlIGlzIHNwZWNpZmljYWxseSBkZXNpZ25l
ZCB0byB0b2xlcmF0ZSBleGVjIGZhaWx1cmVzCi0gICAgICAgICAgICAgICAgIyB0byBncmFjZWZ1
bGx5IGhhbmRsZSBjYXNlcyB3aGVyZSB3ZGlmZiBpcyBub3QgaW5zdGFsbGVkLAotICAgICAgICAg
ICAgICAgICMgdGhlIGJ1ZyByZXN1bHRzIGluIGEgbWFzc2l2ZSBmaWxlIGRlc2NyaXB0b3IgbGVh
ay4gQXMgYQotICAgICAgICAgICAgICAgICMgd29ya2Fyb3VuZCwgaWYgYW4gZXhlYyBmYWlsdXJl
IGlzIGV2ZXIgZXhwZXJpZW5jZWQgZm9yCi0gICAgICAgICAgICAgICAgIyB3ZGlmZiwgYXNzdW1l
IGl0J3Mgbm90IGF2YWlsYWJsZS4gIFRoaXMgd2lsbCBsZWFrIG9uZQotICAgICAgICAgICAgICAg
ICMgZmlsZSBkZXNjcmlwdG9yIGJ1dCB0aGF0J3MgYmV0dGVyIHRoYW4gbGVha2luZyBlYWNoIHRp
bWUKLSAgICAgICAgICAgICAgICAjIHdkaWZmIHdvdWxkIGJlIHJ1bi4KLSAgICAgICAgICAgICAg
ICAjCi0gICAgICAgICAgICAgICAgIyBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9w
eXRob24tbGlzdC8KLSAgICAgICAgICAgICAgICAjICAgIDIwMDgtQXVndXN0LzUwNTc1My5odG1s
Ci0gICAgICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMzIxMAotICAg
ICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAjIEl0IGFsc28gaGFzIGEgdGhyZWFkaW5n
IGJ1Zywgc28gd2UgZG9uJ3Qgb3V0cHV0IHdkaWZmIGlmCi0gICAgICAgICAgICAgICAgIyB0aGUg
UG9wZW4gcmFpc2VzIGEgVmFsdWVFcnJvci4KLSAgICAgICAgICAgICAgICAjIGh0dHA6Ly9idWdz
LnB5dGhvbi5vcmcvaXNzdWUxMjM2Ci0gICAgICAgICAgICAgICAgaWYgX3dkaWZmX2F2YWlsYWJs
ZToKLSAgICAgICAgICAgICAgICAgICAgd2RpZmYgPSBzdWJwcm9jZXNzLlBvcGVuKAotICAgICAg
ICAgICAgICAgICAgICAgICAgY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0
ZSgpWzBdCi0gICAgICAgICAgICAgICAgICAgIHdkaWZmX2ZhaWxlZCA9IEZhbHNlCi0KLSAgICAg
ICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICAgICAgICAgIGlmIChlLmVycm5vID09
IGVycm5vLkVOT0VOVCBvciBlLmVycm5vID09IGVycm5vLkVBQ0NFUyBvcgotICAgICAgICAgICAg
ICAgICAgICBlLmVycm5vID09IGVycm5vLkVDSElMRCk6Ci0gICAgICAgICAgICAgICAgICAgIF93
ZGlmZl9hdmFpbGFibGUgPSBGYWxzZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgICAgIHJhaXNlIGUKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAg
ICAgICAgICAgICAgIHdkaWZmX2ZhaWxlZCA9IFRydWUKLQotICAgICAgICAgICAgb3V0ID0gb3Bl
bihmaWxlbmFtZSwgJ3diJykKLQotICAgICAgICAgICAgaWYgbm90IF93ZGlmZl9hdmFpbGFibGU6
Ci0gICAgICAgICAgICAgICAgb3V0LndyaXRlKAotICAgICAgICAgICAgICAgICAgICAid2RpZmYg
bm90IGluc3RhbGxlZC48YnIvPiAiCi0gICAgICAgICAgICAgICAgICAgICJJZiB5b3UncmUgcnVu
bmluZyBPUyBYLCB5b3UgY2FuIGluc3RhbGwgdmlhIG1hY3BvcnRzLiIKLSAgICAgICAgICAgICAg
ICAgICAgIjxici8+IgotICAgICAgICAgICAgICAgICAgICAiSWYgcnVubmluZyBVYnVudHUgbGlu
dXgsIHlvdSBjYW4gcnVuICIKLSAgICAgICAgICAgICAgICAgICAgIidzdWRvIGFwdC1nZXQgaW5z
dGFsbCB3ZGlmZicuIikKLSAgICAgICAgICAgIGVsaWYgd2RpZmZfZmFpbGVkOgotICAgICAgICAg
ICAgICAgIG91dC53cml0ZSgnd2RpZmYgZmFpbGVkIGR1ZSB0byBydW5uaW5nIHdpdGggbXVsdGlw
bGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9zaGVsbHMgaW4gcGFyYWxsZWwu
JykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgd2RpZmYgPSBjZ2kuZXNjYXBl
KHdkaWZmKQotICAgICAgICAgICAgICAgIHdkaWZmID0gd2RpZmYucmVwbGFjZSgnIyNXRElGRl9E
RUwjIycsICc8c3BhbiBjbGFzcz1kZWw+JykKLSAgICAgICAgICAgICAgICB3ZGlmZiA9IHdkaWZm
LnJlcGxhY2UoJyMjV0RJRkZfQUREIyMnLCAnPHNwYW4gY2xhc3M9YWRkPicpCi0gICAgICAgICAg
ICAgICAgd2RpZmYgPSB3ZGlmZi5yZXBsYWNlKCcjI1dESUZGX0VORCMjJywgJzwvc3Bhbj4nKQot
ICAgICAgICAgICAgICAgIG91dC53cml0ZSgnPGhlYWQ+PHN0eWxlPi5kZWwgeyBiYWNrZ3JvdW5k
OiAjZmFhOyB9ICcpCi0gICAgICAgICAgICAgICAgb3V0LndyaXRlKCcuYWRkIHsgYmFja2dyb3Vu
ZDogI2FmYTsgfTwvc3R5bGU+PC9oZWFkPicpCi0gICAgICAgICAgICAgICAgb3V0LndyaXRlKCc8
cHJlPicgKyB3ZGlmZiArICc8L3ByZT4nKQotCi0gICAgICAgICAgICBvdXQuY2xvc2UoKQorICAg
ICAgICAgICAgd2RpZmYgPSBwb3J0LndkaWZmX3RleHQoZXhwZWN0ZWRfZmlsZW5hbWUsIGFjdHVh
bF9maWxlbmFtZSkKKyAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUo
ZmlsZW5hbWUsIHRlc3RfdHlwZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuRklMRU5BTUVfU1VGRklYX1dESUZGKQorICAgICAgICAgICAgb3V0ID0g
b3BlbihmaWxlbmFtZSwgJ3diJykud3JpdGUod2RpZmYpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4
dF9kaWZmLnB5CmluZGV4IDhjZmY5ZTYuLjBmOTJlZmIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5Cisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMv
dGV4dF9kaWZmLnB5CkBAIC0zNyw3ICszNyw2IEBAIGltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dp
bmcKIGltcG9ydCBvcy5wYXRoCiAKLWZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHBhdGhfdXRp
bHMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gdGVzdF90
eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKIApAQCAtNjEsOCArNjAsOCBAQCBjbGFzcyBUZXN0
VGV4dERpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKICAgICAgICAgIiIiR2l2ZW4g
dGhlIGZpbGVuYW1lIG9mIHRoZSB0ZXN0LCByZWFkIHRoZSBleHBlY3RlZCBvdXRwdXQgZnJvbSBh
IGZpbGUKICAgICAgICAgYW5kIG5vcm1hbGl6ZSB0aGUgdGV4dC4gIFJldHVybnMgYSBzdHJpbmcg
d2l0aCB0aGUgZXhwZWN0ZWQgdGV4dCwgb3IgJycKICAgICAgICAgaWYgdGhlIGV4cGVjdGVkIG91
dHB1dCBmaWxlIHdhcyBub3QgZm91bmQuIiIiCi0gICAgICAgICMgUmVhZCB0aGUgcGxhdGZvcm0t
c3BlY2lmaWMgZXhwZWN0ZWQgdGV4dC4KLSAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUgPSBwYXRo
X3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnR4dCcpCisgICAgICAgICMgUmVh
ZCB0aGUgcG9ydC1zcGVjaWZpYyBleHBlY3RlZCB0ZXh0LgorICAgICAgICBleHBlY3RlZF9maWxl
bmFtZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcudHh0JykKICAg
ICAgICAgaWYgc2hvd19zb3VyY2VzOgogICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnVXNpbmcg
JXMnICUgZXhwZWN0ZWRfZmlsZW5hbWUpCiAKQEAgLTc5LDcgKzc4LDcgQEAgY2xhc3MgVGVzdFRl
eHREaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAgICAgICAgICMgTm9ybWFsaXpl
IGxpbmUgZW5kaW5ncwogICAgICAgICByZXR1cm4gdGV4dC5zdHJpcCgiXHJcbiIpLnJlcGxhY2Uo
IlxyXG4iLCAiXG4iKSArICJcbiIKIAotICAgIGRlZiBjb21wYXJlX291dHB1dChzZWxmLCBmaWxl
bmFtZSwgcHJvYywgb3V0cHV0LCB0ZXN0X2FyZ3MsIHRhcmdldCk6CisgICAgZGVmIGNvbXBhcmVf
b3V0cHV0KHNlbGYsIHBvcnQsIGZpbGVuYW1lLCBvdXRwdXQsIHRlc3RfYXJncywgdGFyZ2V0KToK
ICAgICAgICAgIiIiSW1wbGVtZW50YXRpb24gb2YgQ29tcGFyZU91dHB1dCB0aGF0IGNoZWNrcyB0
aGUgb3V0cHV0IHRleHQgYWdhaW5zdAogICAgICAgICB0aGUgZXhwZWN0ZWQgdGV4dCBmcm9tIHRo
ZSBMYXlvdXRUZXN0IGRpcmVjdG9yeS4iIiIKICAgICAgICAgZmFpbHVyZXMgPSBbXQpAQCAtOTUs
MTAgKzk0LDEwIEBAIGNsYXNzIFRlc3RUZXh0RGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJh
c2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0X2FyZ3Muc2hvd19zb3VyY2VzKQogCiAgICAgICAgICMgV3JpdGUgb3V0cHV0IGZpbGVz
IGZvciBuZXcgdGVzdHMsIHRvby4KLSAgICAgICAgaWYgb3V0cHV0ICE9IGV4cGVjdGVkOgorICAg
ICAgICBpZiBwb3J0LmNvbXBhcmVfdGV4dChvdXRwdXQsIGV4cGVjdGVkKToKICAgICAgICAgICAg
ICMgVGV4dCBkb2Vzbid0IG1hdGNoLCB3cml0ZSBvdXRwdXQgZmlsZXMuCi0gICAgICAgICAgICBz
ZWxmLndyaXRlX291dHB1dF9maWxlcyhmaWxlbmFtZSwgIiIsICIudHh0Iiwgb3V0cHV0LCBleHBl
Y3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmY9VHJ1ZSwgd2Rp
ZmY9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYud3JpdGVfb3V0cHV0X2ZpbGVzKHBvcnQsIGZpbGVu
YW1lLCAiIiwgIi50eHQiLCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBleHBlY3RlZCwgZGlmZj1UcnVlLCB3ZGlmZj1UcnVlKQogCiAgICAgICAgICAgICBpZiBl
eHBlY3RlZCA9PSAnJzoKICAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWls
dXJlcy5GYWlsdXJlTWlzc2luZ1Jlc3VsdChzZWxmKSkKQEAgLTEwNyw3ICsxMDYsNyBAQCBjbGFz
cyBUZXN0VGV4dERpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKIAogICAgICAgICBy
ZXR1cm4gZmFpbHVyZXMKIAotICAgIGRlZiBkaWZmX2ZpbGVzKHNlbGYsIGZpbGUxLCBmaWxlMik6
CisgICAgZGVmIGRpZmZfZmlsZXMoc2VsZiwgcG9ydCwgZmlsZTEsIGZpbGUyKToKICAgICAgICAg
IiIiRGlmZiB0d28gdGV4dCBmaWxlcy4KIAogICAgICAgICBBcmdzOgpAQCAtMTE4LDUgKzExNyw1
IEBAIGNsYXNzIFRlc3RUZXh0RGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogICAg
ICAgICAgIEZhbHNlIG90aGVyd2lzZS4KICAgICAgICAgIiIiCiAKLSAgICAgICAgcmV0dXJuIChz
ZWxmLmdldF9ub3JtYWxpemVkX3RleHQoZmlsZTEpICE9Ci0gICAgICAgICAgICAgICAgc2VsZi5n
ZXRfbm9ybWFsaXplZF90ZXh0KGZpbGUyKSkKKyAgICAgICAgcmV0dXJuIHBvcnQuY29tcGFyZV90
ZXh0KHNlbGYuZ2V0X25vcm1hbGl6ZWRfdGV4dChmaWxlMSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfbm9ybWFsaXplZF90ZXh0KGZpbGUyKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48098</attachid>
            <date>2010-02-03 21:28:05 -0800</date>
            <delta_ts>2010-02-03 23:58:56 -0800</delta_ts>
            <desc>full patch revised w/ feedback from reviewers</desc>
            <filename>git.patch</filename>
            <type>text/plain</type>
            <size>307239</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBmYjg2NDE5Li5iYTZkYjEyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODcgQEAKKzIwMTAtMDIt
MDMgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM0NTExCisKKyAgICAgICAgUmVmYWN0b3IgcnVuLWNocm9taXVtLXdl
YmtpdC10ZXN0cyBhbmQgaW1wbGVtZW50IHRoZSBXZWJLaXQgbWFjIHBvcnQuCisKKyAgICAgICAg
V2UgcmVwbGFjZSB0aGUgJ3BsYXRmb3JtX3V0aWxzKicgbW9kdWxlcyB3aXRoIGEgbmV3ICdwb3J0
JyBwYWNrYWdlCisgICAgICAgIHRoYXQgaXMgb2JqZWN0LW9yaWVudGVkLiBUaGlzIGFsbG93cyB1
cyB0byBwcm9wZXJseSBzdXBwb3J0IG11bHRpcGxlCisgICAgICAgIHBvcnRzIGluIGEgc2luZ2xl
IHByb2Nlc3MsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgdGhpbmdzIGxpa2UgdGhlCisgICAgICAgIHJl
YmFzZWxpbmluZyB0b29sLiBJdCBhbHNvIG1ha2VzIGNvZGUtc2hhcmluZyBhIGxvdCBjbGVhcmVy
IGFuZCBlYXNpZXIuCisgICAgICAgIFRoZSBwYXRoX3V0aWxzLnB5IGZ1bmN0aW9uYWxpdHkgaXMg
YWxzbyByb2xsZWQgaW50byB0aGUgcG9ydCBwYWNrYWdlLAorICAgICAgICBhbmQgdGhlIGh0dHBf
c2VydmVyIGFuZCB3ZWJzb2NrZXRfc2VydmVyIGNvZGUgaXMgbW92ZWQgZnJvbQorICAgICAgICBs
YXlvdXRfcGFja2FnZS8gdG8gcG9ydC8sIHNpbmNlIGl0J3Mgbm90IHZlcnkgc3BlY2lmaWMgdG8g
dGhlIGFjdHVhbAorICAgICAgICB0ZXN0IGRyaXZlciBjb2RlLgorCisgICAgICAgIFRoZSBuZXcg
cG9ydCBwYWNrYWdlIGludGVyZmFjZSAodGhlIFBvcnQgY2xhc3MpIGNvbnRhaW5zIGFsbCBvZgor
ICAgICAgICB0aGUgZW50cnkgcG9pbnRzIG5lZWRlZCB0byBoaWRlIGRpcmVjdG9yeSBsb2NhdGlv
bnMsIGNvbnZlcnQgcGF0aHMKKyAgICAgICAgdG8gVVJMcywgc3Bhd24gcHJvY2Vzc2VzIGFuZCBy
dW4gdGVzdHMsIGFuZCBob2xkIHBsYXRmb3JtLXNwZWNpZmljCisgICAgICAgIGNvbmZpZ3VyYXRp
b24gaW5mby4KKworICAgICAgICBUaGUgbm9uLXBsYXRmb3JtLXNwZWNpZmljIGZpbGVzIGhhdmUg
YmVlbiB1cGRhdGVkIHRvIHVzZSB0aGUgcG9ydAorICAgICAgICBpbnRlcmZhY2UgYnV0IGFyZSBv
dGhlcndpc2UgbGFyZ2VseSB1bmNoYW5nZWQuCisKKyAgICAgICAgQ2F2ZWF0czoKKyAgICAgICAg
LSB0aGUgcmViYXNlbGluaW5nIHRvb2wgaXMgY29tcGxldGVseSBicm9rZW4KKyAgICAgICAgLSB0
aGUgd2luZG93cyBhbmQgbGludXggY2hyb21pdW0gcG9ydHMgYXJlIHVudGVzdGVkCisKKyAgICAg
ICAgU28gd2UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBsYW5kIHRoaXMgdmVyc2lvbiwgYnV0IEkg
YW0gcG9zdGluZyBpdAorICAgICAgICBmb3IgcmV2aWV3LiBEZXBlbmRpbmcgb24gdGhlIHNpemUg
b2YgdGhlIHBhdGNoLCBJIG1heSBuZWVkIHRvIHNwbGl0CisgICAgICAgIHRoaXMgaW50byBtdWx0
aXBsZSBDTHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVzdHM6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZHJpdmVyX3Rlc3QucHk6
IENvcGllZCBmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWNocm9taXVtLXdlYmtpdC10ZXN0
cy4KKyAgICAgICAgICAtIGEgbmV3IHRlc3QgZHJpdmVyIGZvciBhY3R1YWxseSBpbnZva2luZyBE
dW1wUmVuZGVyVHJlZQorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAgICAgICAg
IC0gdXBkYXRlZCB0byBjYWxsIHRoZSBuZXcgcG9ydHMgaW50ZXJmYWNlCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dl
bmVyYXRvci5weToKKyAgICAgICAgICAtIHVwZGF0ZWQgdG8gY2FsbCB0aGUgbmV3IHBvcnRzIGlu
dGVyZmFjZQorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5OgorICAgICAgICAgIC0gdXBkYXRlZCB0byBjYWxs
IHRoZSBuZXcgcG9ydHMgaW50ZXJmYWNlLiBBbHNvIG1vdmVkIFBMQVRGT1JNUworICAgICAgICAg
ICAgaW50byB0aGUgcG9ydHMgaW50ZXJmYWNlLCBhbmQgbW9kaWZpZWQgdGhlIGNvZGUgdG8gb25s
eSBhY2NlcHQKKyAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zIHN0cmluZ3MgKHRoZSBhY3Qg
b2YgcmVhZGluZyB0aGUgZXhwZWN0YXRpb25zCisgICAgICAgICAgICBpcyBub3cgaW4gcG9ydC50
ZXN0X2V4cGVjdGF0aW9ucygpKQorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3BhdGhfdXRpbHMucHk6IFJlbW92ZWQuCisgICAgICAgICAgLSBy
b2xsZWQgaW50byB0aGUgUG9ydCBjbGFzc2VzCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbGludXgucHk6IFJlbW92
ZWQuCisgICAgICAgICAgLSBvYnNvbGV0ZWQKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19tYWMucHk6IFJlbW92ZWQu
CisgICAgICAgICAgLSBvYnNvbGV0ZWQKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc193aW4ucHk6IFJlbW92ZWQuCisg
ICAgICAgICAgLSBvYnNvbGV0ZWQKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5OgorICAgICAgICAgIC0gdXBkYXRlZCB0
byBjYWxsIHRoZSBuZXcgcG9ydHMgaW50ZXJmYWNlCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHk6CisgICAg
ICAgICAgLSB1cGRhdGVkIHRvIGNhbGwgdGhlIG5ldyBwb3J0cyBpbnRlcmZhY2UsIGFuZCByZXdv
cmtlZCB0byBoaWRlCisgICAgICAgICAgICBob3cgd2UgYWN0dWFsbHkgZ2V0IHRoZSBvdXRwdXQg
ZnJvbSBEdW1wUmVuZGVyVHJlZS9UZXN0U2hlbGwuCisgICAgICAgICAgICBUaGUgYWN0dWFsIHRl
c3QgZXhlY3V0aW9uIG5vdyBvY2N1cnMgaW4gcG9ydC9Ecml2ZXIucnVuX3Rlc3QoKQorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvX19pbml0X18ucHk6IFJlbmFt
ZWQgZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9wbGF0Zm9ybV91dGlscy5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weTogUmVuYW1lZCBmcm9tIFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2FwYWNo
ZV9odHRwX3NlcnZlci5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Jhc2UucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbGludXgucHk6IEFkZGVkLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
X3dpbi5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9odHRwX3NlcnZlci5weTogUmVuYW1lZCBmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyLnB5LgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5w
eTogUmVuYW1lZCBmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyX2Jhc2UucHkuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwZDIucGVtOiBSZW5hbWVkIGZyb20gV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cGQy
LnBlbS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2xpZ2h0
dHBkLmNvbmY6IFJlbmFtZWQgZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9saWdodHRwZC5jb25mLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHk6IEFkZGVkLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weTog
UmVuYW1lZCBmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAg
ICAtIHVwZGF0ZWQgdG8gY2FsbCB0aGUgbmV3IHBvcnRzIGludGVyZmFjZQorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvZnV6enlfaW1hZ2VfZGlmZi5w
eToKKyAgICAgICAgICAtIHVwZGF0ZWQgdG8gY2FsbCB0aGUgbmV3IHBvcnRzIGludGVyZmFjZQor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2Vf
ZGlmZi5weToKKyAgICAgICAgICAtIHVwZGF0ZWQgdG8gY2FsbCB0aGUgbmV3IHBvcnRzIGludGVy
ZmFjZQorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMv
dGVzdF90eXBlX2Jhc2UucHk6CisgICAgICAgICAgLSB1cGRhdGVkIHRvIGNhbGwgdGhlIG5ldyBw
b3J0cyBpbnRlcmZhY2UKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90
ZXN0X3R5cGVzL3RleHRfZGlmZi5weToKKyAgICAgICAgICAtIHVwZGF0ZWQgdG8gY2FsbCB0aGUg
bmV3IHBvcnRzIGludGVyZmFjZQorCiAyMDEwLTAyLTAzICBDc2FiYSBPc3p0cm9nb27DoWMgIDxv
c3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgRXJpYyBTZWlkZWwu
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0td2Vi
a2l0LXRlc3RzIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9yZWJhc2VsaW5lLWNocm9taXVtLXdlYmtp
dC10ZXN0cwppbmRleCA5YThhMTU2Li5hZTJiYzM5IDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0td2Via2l0LXRlc3RzCisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13ZWJraXQtdGVzdHMKQEAgLTExLDcgKzExLDcg
QEAKICMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgogIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAjIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVp
dGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMgbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KICMKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWNocm9taXVt
LXdlYmtpdC10ZXN0cyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWNocm9taXVtLXdlYmtpdC10
ZXN0cwppbmRleCA5YzAyN2I4Li4yMjFiNWFhIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVzdHMKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9y
dW4tY2hyb21pdW0td2Via2l0LXRlc3RzCkBAIC0xMSw3ICsxMSw3IEBACiAjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKICMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQogIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIENocm9taXVt
IG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogIwpAQCAt
MzMsNiArMzMsNyBAQCBpbXBvcnQgc3lzCiAKIHN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4o
b3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAid2Via2l0cHkiLCAibGF5b3V0X3Rlc3RzIikpCitzeXMucGF0
aC5hcHBlbmQob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgo
c3lzLmFyZ3ZbMF0pKSkpCiBpbXBvcnQgcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cwogCiBpZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvZHJpdmVyX3Rlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9kcml2ZXJfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCAwMDAwMDAwLi44ZDJlMWZiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZHJpdmVyX3Rlc3QucHkKQEAgLTAsMCArMSw3
MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiU2ltcGxl
IHRlc3QgY2xpZW50IGZvciB0aGUgcG9ydC9Ecml2ZXIgaW50ZXJmYWNlLiIiIgorCitpbXBvcnQg
b3MKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHBvcnQKKworCitkZWYgcnVuX3Rlc3RzKHBvcnQs
IG9wdGlvbnMsIHRlc3RzKToKKyAgICAjIHxpbWFnZV9wYXRofCBpcyBhIHBhdGggdG8gdGhlIGlt
YWdlIGNhcHR1cmUgZnJvbSB0aGUgZHJpdmVyLgorICAgIGltYWdlX3BhdGggPSAnaW1hZ2VfcmVz
dWx0LnBuZycKKyAgICBkcml2ZXIgPSBwb3J0LnN0YXJ0X2RyaXZlcihpbWFnZV9wYXRoLCBOb25l
KQorICAgIGZvciB0IGluIHRlc3RzOgorICAgICAgICB1cmkgPSBwb3J0LmZpbGVuYW1lX3RvX3Vy
aShvcy5wYXRoLmpvaW4ocG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIHQpKQorICAgICAgICBwcmlu
dCAidXJpOiAiICsgdXJpCisgICAgICAgIGNyYXNoLCB0aW1lb3V0LCBjaGVja3N1bSwgb3V0cHV0
LCBlcnIgPSBcCisgICAgICAgICAgICBkcml2ZXIucnVuX3Rlc3QodXJpLCBpbnQob3B0aW9ucy50
aW1lb3V0KSwgTm9uZSkKKyAgICAgICAgcHJpbnQgImNyYXNoOiAgICAgICAgICIgKyBzdHIoY3Jh
c2gpCisgICAgICAgIHByaW50ICJ0aW1lb3V0OiAgICAgICAiICsgc3RyKHRpbWVvdXQpCisgICAg
ICAgIHByaW50ICJjaGVja3N1bTogICAgICAiICsgc3RyKGNoZWNrc3VtKQorICAgICAgICBwcmlu
dCAnc3Rkb3V0OiAiIiInCisgICAgICAgIHByaW50ICcnLmpvaW4ob3V0cHV0KQorICAgICAgICBw
cmludCAnIiIiJworICAgICAgICBwcmludCAnc3RkZXJyOiAiIiInCisgICAgICAgIHByaW50ICcn
LmpvaW4oZXJyKQorICAgICAgICBwcmludCAnIiIiJworICAgICAgICBwcmludAorCisKK2lmIF9f
bmFtZV9fID09ICdfX21haW5fXyc6CisgICAgb3B0cGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFy
c2VyKCkKKyAgICBvcHRwYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1wb3J0JywgYWN0aW9uPSdz
dG9yZScsIGRlZmF1bHQ9J21hYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1BsYXRmb3Jt
IHRvIHRlc3QgKGUuZy4sICJtYWMiLCAiY2hyb21pdW0tbWFjIiwgZXRjLicpCisgICAgb3B0cGFy
c2VyLmFkZF9vcHRpb24oJy10JywgJy0tdGFyZ2V0JywgYWN0aW9uPSdzdG9yZScsIGRlZmF1bHQ9
J1JlbGVhc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdidWlsZCB0eXBlICgiRGVidWci
IG9yICJSZWxlYXNlIiknKQorICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCcnLCAnLS10aW1lb3V0
JywgYWN0aW9uPSdzdG9yZScsIGRlZmF1bHQ9JzIwMDAnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICd0ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICgyMDAwIGJ5IGRlZmF1bHQpJykKKyAg
ICBvcHRwYXJzZXIuYWRkX29wdGlvbignJywgJy0td3JhcHBlcicsIGFjdGlvbj0nc3RvcmUnKQor
ICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCcnLCAnLS1uby1waXhlbC10ZXN0cycsIGFjdGlvbj0n
c3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkaXNhYmxlIHBpeGVsLXRvLXBpeGVsIFBORyBj
b21wYXJpc29ucycpCisgICAgb3B0aW9ucywgYXJncyA9IG9wdHBhcnNlci5wYXJzZV9hcmdzKCkK
KyAgICBwID0gcG9ydC5nZXQob3B0aW9ucy5wb3J0LCBvcHRpb25zKQorICAgIHJ1bl90ZXN0cyhw
LCBvcHRpb25zLCBhcmdzKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvYXBhY2hlX2h0dHBfc2VydmVyLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvYXBh
Y2hlX2h0dHBfc2VydmVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDdhMzM1
Li4wMDAwMDAwCi0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2FwYWNoZV9odHRwX3NlcnZlci5weQorKysgL2Rldi9udWxsCkBAIC0x
LDIyOSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhl
IENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJBIGNs
YXNzIHRvIHN0YXJ0L3N0b3AgdGhlIGFwYWNoZSBodHRwIHNlcnZlciB1c2VkIGJ5IGxheW91dCB0
ZXN0cy4iIiIKLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IG9zCi1p
bXBvcnQgcmUKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi0KLWltcG9ydCBodHRwX3Nl
cnZlcl9iYXNlCi1pbXBvcnQgcGF0aF91dGlscwotaW1wb3J0IHBsYXRmb3JtX3V0aWxzCi0KLQot
Y2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJh
c2UpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dF9kaXIpOgotICAgICAgICAiIiJB
cmdzOgotICAgICAgICAgIG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlv
dXQgdGVzdCByZXN1bHQgZGlyZWN0b3J5Ci0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9vdXRw
dXRfZGlyID0gb3V0cHV0X2RpcgotICAgICAgICBzZWxmLl9odHRwZF9wcm9jID0gTm9uZQotICAg
ICAgICBwYXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KG91dHB1dF9kaXIpCi0KLSAgICAg
ICAgc2VsZi5tYXBwaW5ncyA9IFt7J3BvcnQnOiA4MDAwfSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICB7J3BvcnQnOiA4MDgwfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4
MDgxfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnc3NsY2VydCc6
IFRydWV9XQotCi0gICAgICAgICMgVGhlIHVwc3RyZWFtIC5jb25mIGZpbGUgYXNzdW1lZCB0aGUg
ZXhpc3RlbmNlIG9mIC90bXAvV2ViS2l0IGZvcgotICAgICAgICAjIHBsYWNpbmcgYXBhY2hlIGZp
bGVzIGxpa2UgdGhlIGxvY2sgZmlsZSB0aGVyZS4KLSAgICAgICAgc2VsZi5fcnVudGltZV9wYXRo
ID0gb3MucGF0aC5qb2luKCIvdG1wIiwgIldlYktpdCIpCi0gICAgICAgIHBhdGhfdXRpbHMubWF5
YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5fcnVudGltZV9wYXRoKQotCi0gICAgICAgICMgVGhlIFBJ
RCByZXR1cm5lZCB3aGVuIEFwYWNoZSBpcyBzdGFydGVkIGdvZXMgYXdheSAoZHVlIHRvIGRyb3Bw
aW5nCi0gICAgICAgICMgcHJpdmlsZWdlcz8pLiBUaGUgcHJvcGVyIGNvbnRyb2xsaW5nIFBJRCBp
cyB3cml0dGVuIHRvIGEgZmlsZSBpbiB0aGUKLSAgICAgICAgIyBhcGFjaGUgcnVudGltZSBkaXJl
Y3RvcnkuCi0gICAgICAgIHNlbGYuX3BpZF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3J1bnRp
bWVfcGF0aCwgJ2h0dHBkLnBpZCcpCi0KLSAgICAgICAgdGVzdF9kaXIgPSBwYXRoX3V0aWxzLnBh
dGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLAotICAgICAgICAgICAgJ0xheW91
dFRlc3RzJykKLSAgICAgICAganNfdGVzdF9yZXNvdXJjZXNfZGlyID0gc2VsZi5fY3lnd2luX3Nh
ZmVfam9pbih0ZXN0X2RpciwgImZhc3QiLCAianMiLAotICAgICAgICAgICAgInJlc291cmNlcyIp
Ci0gICAgICAgIG1pbWVfdHlwZXNfcGF0aCA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4odGVzdF9k
aXIsICJodHRwIiwgImNvbmYiLAotICAgICAgICAgICAgIm1pbWUudHlwZXMiKQotICAgICAgICBj
ZXJ0X2ZpbGUgPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2luKHRlc3RfZGlyLCAiaHR0cCIsICJjb25m
IiwKLSAgICAgICAgICAgICJ3ZWJraXQtaHR0cGQucGVtIikKLSAgICAgICAgYWNjZXNzX2xvZyA9
IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4ob3V0cHV0X2RpciwgImFjY2Vzc19sb2cudHh0IikKLSAg
ICAgICAgZXJyb3JfbG9nID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbihvdXRwdXRfZGlyLCAiZXJy
b3JfbG9nLnR4dCIpCi0gICAgICAgIGRvY3VtZW50X3Jvb3QgPSBzZWxmLl9jeWd3aW5fc2FmZV9q
b2luKHRlc3RfZGlyLCAiaHR0cCIsICJ0ZXN0cyIpCi0KLSAgICAgICAgZXhlY3V0YWJsZSA9IHBs
YXRmb3JtX3V0aWxzLmFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKQotICAgICAgICBpZiBzZWxmLl9p
c19jeWd3aW4oKToKLSAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBzZWxmLl9nZXRfY3lnd2luX3Bh
dGgoZXhlY3V0YWJsZSkKLQotICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwKLSAgICAgICAgICAg
ICctZicsIHNlbGYuX2dldF9hcGFjaGVfY29uZmlnX2ZpbGVfcGF0aCh0ZXN0X2Rpciwgb3V0cHV0
X2RpciksCi0gICAgICAgICAgICAnLUMnLCAiXCdEb2N1bWVudFJvb3QgJXNcJyIgJSBkb2N1bWVu
dF9yb290LAotICAgICAgICAgICAgJy1jJywgIlwnQWxpYXMgL2pzLXRlc3QtcmVzb3VyY2VzICVz
XCciICUganNfdGVzdF9yZXNvdXJjZXNfZGlyLAotICAgICAgICAgICAgJy1DJywgIlwnTGlzdGVu
ICVzXCciICUgIjEyNy4wLjAuMTo4MDAwIiwKLSAgICAgICAgICAgICctQycsICJcJ0xpc3RlbiAl
c1wnIiAlICIxMjcuMC4wLjE6ODA4MSIsCi0gICAgICAgICAgICAnLWMnLCAiXCdUeXBlc0NvbmZp
ZyBcIiVzXCJcJyIgJSBtaW1lX3R5cGVzX3BhdGgsCi0gICAgICAgICAgICAnLWMnLCAiXCdDdXN0
b21Mb2cgXCIlc1wiIGNvbW1vblwnIiAlIGFjY2Vzc19sb2csCi0gICAgICAgICAgICAnLWMnLCAi
XCdFcnJvckxvZyBcIiVzXCJcJyIgJSBlcnJvcl9sb2csCi0gICAgICAgICAgICAnLUMnLCAiXCdV
c2VyIFwiJXNcIlwnIiAlIG9zLmVudmlyb24uZ2V0KCJVU0VSTkFNRSIsCi0gICAgICAgICAgICAg
ICAgb3MuZW52aXJvbi5nZXQoIlVTRVIiLCAiIikpXQotCi0gICAgICAgIGlmIHNlbGYuX2lzX2N5
Z3dpbigpOgotICAgICAgICAgICAgY3lnYmluID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgn
dGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2JpbicpCi0gICAgICAgICAgICAjIE5vdCBlbnRpcmVs
eSBzdXJlIHdoeSwgYnV0IGZyb20gY3lnd2luIHdlIG5lZWQgdG8gcnVuIHRoZQotICAgICAgICAg
ICAgIyBodHRwZCBjb21tYW5kIHRocm91Z2ggYmFzaC4KLSAgICAgICAgICAgIHNlbGYuX3N0YXJ0
X2NtZCA9IFsKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oY3lnYmluLCAnYmFzaC5leGUn
KSwKLSAgICAgICAgICAgICAgICAnLWMnLAotICAgICAgICAgICAgICAgICdQQVRIPSVzICVzJyAl
IChzZWxmLl9nZXRfY3lnd2luX3BhdGgoY3lnYmluKSwgIiAiLmpvaW4oY21kKSksCi0gICAgICAg
ICAgICAgIF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgVE9ETyhvamFuKTogV2hlbiB3
ZSBnZXQgY3lnd2luIHVzaW5nIEFwYWNoZSAyLCB1c2Ugc2V0IHRoZQotICAgICAgICAgICAgIyBj
ZXJ0IGZpbGUgZm9yIGN5Z3dpbiBhcyB3ZWxsLgotICAgICAgICAgICAgY21kLmV4dGVuZChbJy1j
JywgIlwnU1NMQ2VydGlmaWNhdGVGaWxlICVzXCciICUgY2VydF9maWxlXSkKLSAgICAgICAgICAg
ICMgSm9pbiB0aGUgc3RyaW5nIGhlcmUgc28gdGhhdCBDeWd3aW4vV2luZG93cyBhbmQgTWFjL0xp
bnV4Ci0gICAgICAgICAgICAjIGNhbiB1c2UgdGhlIHNhbWUgY29kZS4gT3RoZXJ3aXNlLCB3ZSBj
b3VsZCByZW1vdmUgdGhlIHNpbmdsZQotICAgICAgICAgICAgIyBxdW90ZXMgYWJvdmUgYW5kIGtl
ZXAgY21kIGFzIGEgc2VxdWVuY2UuCi0gICAgICAgICAgICBzZWxmLl9zdGFydF9jbWQgPSAiICIu
am9pbihjbWQpCi0KLSAgICBkZWYgX2lzX2N5Z3dpbihzZWxmKToKLSAgICAgICAgcmV0dXJuIHN5
cy5wbGF0Zm9ybSBpbiAoIndpbjMyIiwgImN5Z3dpbiIpCi0KLSAgICBkZWYgX2N5Z3dpbl9zYWZl
X2pvaW4oc2VsZiwgKnBhcnRzKToKLSAgICAgICAgIiIiUmV0dXJucyBhIHBsYXRmb3JtIGFwcHJv
cHJpYXRlIHBhdGguIiIiCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oKnBhcnRzKQotICAg
ICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRf
Y3lnd2luX3BhdGgocGF0aCkKLSAgICAgICAgcmV0dXJuIHBhdGgKLQotICAgIGRlZiBfZ2V0X2N5
Z3dpbl9wYXRoKHNlbGYsIHBhdGgpOgotICAgICAgICAiIiJDb252ZXJ0IGEgV2luZG93cyBwYXRo
IHRvIGEgY3lnd2luIHBhdGguCi0KLSAgICAgICAgVGhlIGN5Z3BhdGggdXRpbGl0eSBpbnNpc3Rz
IG9uIGNvbnZlcnRpbmcgcGF0aHMgdGhhdCBpdCB0aGlua3MgYXJlCi0gICAgICAgIEN5Z3dpbiBy
b290IHBhdGhzIHRvIHdoYXQgaXQgdGhpbmtzIHRoZSBjb3JyZWN0IHJvb3RzIGFyZS4gIFNvIHBh
dGhzCi0gICAgICAgIHN1Y2ggYXMgIkM6XGJcc2xhdmVcd2Via2l0LXJlbGVhc2VcYnVpbGRcdGhp
cmRfcGFydHlcY3lnd2luXGJpbiIKLSAgICAgICAgYXJlIGNvbnZlcnRlZCB0byBwbGFpbiAiL3Vz
ci9iaW4iLiAgVG8gYXZvaWQgdGhpcywgd2UKLSAgICAgICAgZG8gdGhlIGNvbnZlcnNpb24gbWFu
dWFsbHkuCi0KLSAgICAgICAgVGhlIHBhdGggaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYWJzb2x1dGUg
cGF0aCwgb24gYW55IGRyaXZlLgotICAgICAgICAiIiIKLSAgICAgICAgZHJpdmVfcmVnZXhwID0g
cmUuY29tcGlsZShyJyhbYS16XSk6Wy9cXF0nLCByZS5JR05PUkVDQVNFKQotCi0gICAgICAgIGRl
ZiBsb3dlcl9kcml2ZShtYXRjaG9iaik6Ci0gICAgICAgICAgICByZXR1cm4gJy9jeWdkcml2ZS8l
cy8nICUgbWF0Y2hvYmouZ3JvdXAoMSkubG93ZXIoKQotICAgICAgICBwYXRoID0gZHJpdmVfcmVn
ZXhwLnN1Yihsb3dlcl9kcml2ZSwgcGF0aCkKLSAgICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgn
XFwnLCAnLycpCi0KLSAgICBkZWYgX2dldF9hcGFjaGVfY29uZmlnX2ZpbGVfcGF0aChzZWxmLCB0
ZXN0X2Rpciwgb3V0cHV0X2Rpcik6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8gdGhl
IGFwYWNoZSBjb25maWcgZmlsZSB0byB1c2UuCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgdGVz
dF9kaXI6IGFic29sdXRlIHBhdGggdG8gdGhlIExheW91dFRlc3RzIGRpcmVjdG9yeS4KLSAgICAg
ICAgICBvdXRwdXRfZGlyOiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHRz
IGRpcmVjdG9yeS4KLSAgICAgICAgIiIiCi0gICAgICAgIGh0dHBkX2NvbmZpZyA9IHBsYXRmb3Jt
X3V0aWxzLmFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCkKLSAgICAgICAgaHR0cGRfY29uZmlnX2Nv
cHkgPSBvcy5wYXRoLmpvaW4ob3V0cHV0X2RpciwgImh0dHBkLmNvbmYiKQotICAgICAgICBodHRw
ZF9jb25mID0gb3BlbihodHRwZF9jb25maWcpLnJlYWQoKQotICAgICAgICBpZiBzZWxmLl9pc19j
eWd3aW4oKToKLSAgICAgICAgICAgICMgVGhpcyBpcyBhIGdyb3NzIGhhY2ssIGJ1dCBpdCBsZXRz
IHVzIHVzZSB0aGUgdXBzdHJlYW0gLmNvbmYgZmlsZQotICAgICAgICAgICAgIyBhbmQgb3VyIGNo
ZWNrZWQgaW4gY3lnd2luLiBUaGlzIHRlbGxzIHRoZSBzZXJ2ZXIgdGhlIHJvb3QKLSAgICAgICAg
ICAgICMgZGlyZWN0b3J5IHRvIGxvb2sgaW4gZm9yIC5zbyBtb2R1bGVzLiBJdCB3aWxsIHVzZSB0
aGlzIHBhdGgKLSAgICAgICAgICAgICMgcGx1cyB0aGUgcmVsYXRpdmUgcGF0aHMgdG8gdGhlIC5z
byBmaWxlcyBsaXN0ZWQgaW4gdGhlIC5jb25mCi0gICAgICAgICAgICAjIGZpbGUuIFdlIGhhdmUg
YXBhY2hlL2N5Z3dpbiBjaGVja2VkIGludG8gb3VyIHRyZWUgc28KLSAgICAgICAgICAgICMgcGVv
cGxlIGRvbid0IGhhdmUgdG8gaW5zdGFsbCBpdCBpbnRvIHRoZWlyIGN5Z3dpbi4KLSAgICAgICAg
ICAgIGN5Z3VzciA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5
Z3dpbicsICd1c3InKQotICAgICAgICAgICAgaHR0cGRfY29uZiA9IGh0dHBkX2NvbmYucmVwbGFj
ZSgnU2VydmVyUm9vdCAiL3VzciInLAotICAgICAgICAgICAgICAgICdTZXJ2ZXJSb290ICIlcyIn
ICUgc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGN5Z3VzcikpCi0KLSAgICAgICAgIyBUT0RPKG9qYW4p
OiBJbnN0ZWFkIG9mIHdyaXRpbmcgYW4gZXh0cmEgZmlsZSwgY2hlY2tpbiBhIGNvbmYgZmlsZQot
ICAgICAgICAjIHVwc3RyZWFtLiBPciwgZXZlbiBiZXR0ZXIsIHVwc3RyZWFtL2RlbGV0ZSBhbGwg
b3VyIGNocm9tZSBodHRwCi0gICAgICAgICMgdGVzdHMgc28gd2UgZG9uJ3QgbmVlZCB0aGlzIHNw
ZWNpYWwtY2FzZWQgRG9jdW1lbnRSb290IGFuZCB0aGVuCi0gICAgICAgICMganVzdCB1c2UgdGhl
IHVwc3RyZWFtCi0gICAgICAgICMgY29uZiBmaWxlLgotICAgICAgICBjaHJvbWVfZG9jdW1lbnRf
cm9vdCA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICdkYXRhJywKLSAgICAg
ICAgICAgICdsYXlvdXRfdGVzdHMnKQotICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKLSAg
ICAgICAgICAgIGNocm9tZV9kb2N1bWVudF9yb290ID0gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGNo
cm9tZV9kb2N1bWVudF9yb290KQotICAgICAgICBodHRwZF9jb25mID0gKGh0dHBkX2NvbmYgKwot
ICAgICAgICAgICAgc2VsZi5fZ2V0X3ZpcnR1YWxfaG9zdF9jb25maWcoY2hyb21lX2RvY3VtZW50
X3Jvb3QsIDgwODEpKQotCi0gICAgICAgIGYgPSBvcGVuKGh0dHBkX2NvbmZpZ19jb3B5LCAnd2In
KQotICAgICAgICBmLndyaXRlKGh0dHBkX2NvbmYpCi0gICAgICAgIGYuY2xvc2UoKQotCi0gICAg
ICAgIGlmIHNlbGYuX2lzX2N5Z3dpbigpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9j
eWd3aW5fcGF0aChodHRwZF9jb25maWdfY29weSkKLSAgICAgICAgcmV0dXJuIGh0dHBkX2NvbmZp
Z19jb3B5Ci0KLSAgICBkZWYgX2dldF92aXJ0dWFsX2hvc3RfY29uZmlnKHNlbGYsIGRvY3VtZW50
X3Jvb3QsIHBvcnQsIHNzbD1GYWxzZSk6Ci0gICAgICAgICIiIlJldHVybnMgYSA8VmlydHVhbEhv
c3Q+IGRpcmVjdGl2ZSBibG9jayBmb3IgYW4gaHR0cGQuY29uZiBmaWxlLgotICAgICAgICBJdCB3
aWxsIGxpc3RlbiB0byAxMjcuMC4wLjEgb24gZWFjaCBvZiB0aGUgZ2l2ZW4gcG9ydC4KLSAgICAg
ICAgIiIiCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oKCc8VmlydHVhbEhvc3QgMTI3LjAuMC4x
OiVzPicgJSBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAnRG9jdW1lbnRSb290ICVz
JyAlIGRvY3VtZW50X3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNzbCBhbmQgJ1NT
TEVuZ2luZSBPbicgb3IgJycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICc8L1ZpcnR1YWxI
b3N0PicsICcnKSkKLQotICAgIGRlZiBfc3RhcnRfaHR0cGRfcHJvY2VzcyhzZWxmKToKLSAgICAg
ICAgIiIiU3RhcnRzIHRoZSBodHRwZCBwcm9jZXNzIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlcmUg
d2VyZSBlcnJvcnMuIiIiCi0gICAgICAgICMgVXNlIHNoZWxsPVRydWUgYmVjYXVzZSB3ZSBqb2lu
IHRoZSBhcmd1bWVudHMgaW50byBhIHN0cmluZyBmb3IKLSAgICAgICAgIyB0aGUgc2FrZSBvZiBX
aW5kb3cvQ3lnd2luIGFuZCBpdCBuZWVkcyBxdW90aW5nIHRoYXQgYnJlYWtzCi0gICAgICAgICMg
c2hlbGw9RmFsc2UuCi0gICAgICAgIHNlbGYuX2h0dHBkX3Byb2MgPSBzdWJwcm9jZXNzLlBvcGVu
KHNlbGYuX3N0YXJ0X2NtZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgIHNoZWxsPVRydWUpCi0g
ICAgICAgIGVyciA9IHNlbGYuX2h0dHBkX3Byb2Muc3RkZXJyLnJlYWQoKQotICAgICAgICBpZiBs
ZW4oZXJyKToKLSAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoZXJyKQotICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0g
ICAgICAgICIiIlN0YXJ0cyB0aGUgYXBhY2hlIGh0dHAgc2VydmVyLiIiIgotICAgICAgICAjIFN0
b3AgYW55IGN1cnJlbnRseSBydW5uaW5nIHNlcnZlcnMuCi0gICAgICAgIHNlbGYuc3RvcCgpCi0K
LSAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RhcnRpbmcgYXBhY2hlIGh0dHAgc2VydmVyIikKLSAg
ICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndhaXRfZm9yX2FjdGlvbihzZWxmLl9zdGFydF9o
dHRwZF9wcm9jZXNzKQotICAgICAgICBpZiBzZXJ2ZXJfc3RhcnRlZDoKLSAgICAgICAgICAgIGxv
Z2dpbmcuZGVidWcoIkFwYWNoZSBzdGFydGVkLiBUZXN0aW5nIHBvcnRzIikKLSAgICAgICAgICAg
IHNlcnZlcl9zdGFydGVkID0gc2VsZi53YWl0X2Zvcl9hY3Rpb24oCi0gICAgICAgICAgICAgICAg
c2VsZi5pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMpCi0KLSAgICAgICAgaWYgc2VydmVy
X3N0YXJ0ZWQ6Ci0gICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTZXJ2ZXIgc3VjY2Vzc2Z1bGx5
IHN0YXJ0ZWQiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdG
YWlsZWQgdG8gc3RhcnQgaHR0cCBzZXJ2ZXInKQotCi0gICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAg
ICAgICIiIlN0b3BzIHRoZSBhcGFjaGUgaHR0cCBzZXJ2ZXIuIiIiCi0gICAgICAgIGxvZ2dpbmcu
ZGVidWcoIlNodXR0aW5nIGRvd24gYW55IHJ1bm5pbmcgaHR0cCBzZXJ2ZXJzIikKLSAgICAgICAg
aHR0cGRfcGlkID0gTm9uZQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9waWRfZmls
ZSk6Ci0gICAgICAgICAgICBodHRwZF9waWQgPSBpbnQob3BlbihzZWxmLl9waWRfZmlsZSkucmVh
ZGxpbmUoKSkKLSAgICAgICAgcGF0aF91dGlscy5zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0cGRf
cGlkKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZlci5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZWJjOWY0OC4uMDAwMDAwMAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZl
ci5weQorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRo
b24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRp
b24uCi0jICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0iIiJBIGNsYXNzIHRvIGhlbHAgc3RhcnQvc3RvcCB0aGUgbGlnaHR0
cGQgc2VydmVyIHVzZWQgYnkgbGF5b3V0IHRlc3RzLiIiIgotCi0KLWltcG9ydCBsb2dnaW5nCi1p
bXBvcnQgb3B0cGFyc2UKLWltcG9ydCBvcwotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN1YnByb2Nl
c3MKLWltcG9ydCBzeXMKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHRpbWUKLWltcG9ydCB1cmxs
aWIKLQotaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKLWltcG9ydCBwYXRoX3V0aWxzCi0KLWNsYXNz
IEh0dHBkTm90U3RhcnRlZChFeGNlcHRpb24pOiBwYXNzCi0KLWRlZiByZW1vdmVfbG9nX2ZpbGVz
KGZvbGRlciwgc3RhcnRzX3dpdGgpOgotICAgIGZpbGVzID0gb3MubGlzdGRpcihmb2xkZXIpCi0g
ICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0gICAgICAgIGlmIGZpbGUuc3RhcnRzd2l0aChzdGFydHNf
d2l0aCk6Ci0gICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oZm9sZGVyLCBmaWxl
KQotICAgICAgICAgICAgb3MucmVtb3ZlKGZ1bGxfcGF0aCkKLQotCi1jbGFzcyBMaWdodHRwZCho
dHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKLSAgICAjIFdlYmtpdCB0ZXN0cwotICAg
IHRyeToKLSAgICAgICAgX3dlYmtpdF90ZXN0cyA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uo
J3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdMYXlvdXRUZXN0cycsICdodHRwJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzJykKLSAgICAgICAgX2pz
X3Rlc3RfcmVzb3VyY2UgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScs
ICdXZWJLaXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ0xheW91dFRlc3RzJywgJ2Zhc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2pzJywgJ3Jlc291cmNlcycpCi0gICAgZXhj
ZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgotICAgICAgICBfd2Via2l0X3Rlc3RzID0gTm9u
ZQotICAgICAgICBfanNfdGVzdF9yZXNvdXJjZSA9IE5vbmUKLQotICAgICMgUGF0aCB3aGVyZSB3
ZSBjYW4gYWNjZXNzIGFsbCBvZiB0aGUgdGVzdHMKLSAgICBfYWxsX3Rlc3RzID0gcGF0aF91dGls
cy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3RzJykKLSAgICAj
IFNlbGYgZ2VuZXJhdGVkIGNlcnRpZmljYXRlIGZvciBTU0wgc2VydmVyIChmb3IgY2xpZW50IGNl
cnQgZ2V0Ci0gICAgIyA8YmFzZS1wYXRoPlxjaHJvbWVcdGVzdFxkYXRhXHNzbFxjZXJ0c1xyb290
X2NhX2NlcnQuY3J0KQotICAgIF9wZW1fZmlsZSA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uo
Ci0gICAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgJ2h0
dHBkMi5wZW0nKQotICAgICMgT25lIG1hcHBpbmcgd2hlcmUgd2UgY2FuIGdldCB0byBldmVyeXRo
aW5nCi0gICAgVklSVFVBTENPTkZJRyA9IFt7J3BvcnQnOiA4MDgxLCAnZG9jcm9vdCc6IF9hbGxf
dGVzdHN9XQotCi0gICAgaWYgX3dlYmtpdF90ZXN0czoKLSAgICAgICAgVklSVFVBTENPTkZJRy5l
eHRlbmQoCi0gICAgICAgICAgIyBUaHJlZSBtYXBwaW5ncyAob25lIHdpdGggU1NMIGVuYWJsZWQp
IGZvciBMYXlvdXRUZXN0cyBodHRwIHRlc3RzCi0gICAgICAgICAgW3sncG9ydCc6IDgwMDAsICdk
b2Nyb290JzogX3dlYmtpdF90ZXN0c30sCi0gICAgICAgICAgIHsncG9ydCc6IDgwODAsICdkb2Ny
b290JzogX3dlYmtpdF90ZXN0c30sCi0gICAgICAgICAgIHsncG9ydCc6IDg0NDMsICdkb2Nyb290
JzogX3dlYmtpdF90ZXN0cywgJ3NzbGNlcnQnOiBfcGVtX2ZpbGV9XSkKLQotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBvdXRwdXRfZGlyLCBiYWNrZ3JvdW5kPUZhbHNlLCBwb3J0PU5vbmUsCi0gICAg
ICAgICAgICAgICAgIHJvb3Q9Tm9uZSwgcmVnaXN0ZXJfY3lnd2luPU5vbmUsIHJ1bl9iYWNrZ3Jv
dW5kPU5vbmUpOgotICAgICAgICAiIiJBcmdzOgotICAgICAgICAgIG91dHB1dF9kaXI6IHRoZSBh
YnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgZGlyZWN0b3J5Ci0gICAgICAg
ICIiIgotICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgotICAgICAgICBzZWxm
Ll9wcm9jZXNzID0gTm9uZQotICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAotICAgICAgICBzZWxm
Ll9yb290ID0gcm9vdAotICAgICAgICBzZWxmLl9yZWdpc3Rlcl9jeWd3aW4gPSByZWdpc3Rlcl9j
eWd3aW4KLSAgICAgICAgc2VsZi5fcnVuX2JhY2tncm91bmQgPSBydW5fYmFja2dyb3VuZAotICAg
ICAgICBpZiBzZWxmLl9wb3J0OgotICAgICAgICAgICAgc2VsZi5fcG9ydCA9IGludChzZWxmLl9w
b3J0KQotCi0gICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9w
cm9jZXNzICE9IE5vbmUKLQotICAgIGRlZiBzdGFydChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5p
c19ydW5uaW5nKCk6Ci0gICAgICAgICAgICByYWlzZSAnTGlnaHR0cGQgYWxyZWFkeSBydW5uaW5n
JwotCi0gICAgICAgIGJhc2VfY29uZl9maWxlID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgn
dGhpcmRfcGFydHknLAotICAgICAgICAgICAgJ1dlYktpdFRvb2xzJywgJ1NjcmlwdHMnLCAnd2Vi
a2l0cHknLCAnbGF5b3V0X3Rlc3RzJywKLSAgICAgICAgICAgICdsYXlvdXRfcGFja2FnZScsICds
aWdodHRwZC5jb25mJykKLSAgICAgICAgb3V0X2NvbmZfZmlsZSA9IG9zLnBhdGguam9pbihzZWxm
Ll9vdXRwdXRfZGlyLCAnbGlnaHR0cGQuY29uZicpCi0gICAgICAgIHRpbWVfc3RyID0gdGltZS5z
dHJmdGltZSgiJWQlYiVZLSVIJU0lUyIpCi0gICAgICAgIGFjY2Vzc19maWxlX25hbWUgPSAiYWNj
ZXNzLmxvZy0iICsgdGltZV9zdHIgKyAiLnR4dCIKLSAgICAgICAgYWNjZXNzX2xvZyA9IG9zLnBh
dGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBhY2Nlc3NfZmlsZV9uYW1lKQotICAgICAgICBsb2df
ZmlsZV9uYW1lID0gImVycm9yLmxvZy0iICsgdGltZV9zdHIgKyAiLnR4dCIKLSAgICAgICAgZXJy
b3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxlX25hbWUpCi0K
LSAgICAgICAgIyBSZW1vdmUgb2xkIGxvZyBmaWxlcy4gV2Ugb25seSBuZWVkIHRvIGtlZXAgdGhl
IGxhc3Qgb25lcy4KLSAgICAgICAgcmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCAi
YWNjZXNzLmxvZy0iKQotICAgICAgICByZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIs
ICJlcnJvci5sb2ctIikKLQotICAgICAgICAjIFdyaXRlIG91dCB0aGUgY29uZmlnCi0gICAgICAg
IGYgPSBmaWxlKGJhc2VfY29uZl9maWxlLCAncmInKQotICAgICAgICBiYXNlX2NvbmYgPSBmLnJl
YWQoKQotICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICBmID0gZmlsZShvdXRfY29uZl9maWxl
LCAnd2InKQotICAgICAgICBmLndyaXRlKGJhc2VfY29uZikKLQotICAgICAgICAjIFdyaXRlIG91
dCBvdXIgY2dpIGhhbmRsZXJzLiAgUnVuIHBlcmwgdGhyb3VnaCBlbnYgc28gdGhhdCBpdAotICAg
ICAgICAjIHByb2Nlc3NlcyB0aGUgIyEgbGluZSBhbmQgcnVucyBwZXJsIHdpdGggdGhlIHByb3Bl
ciBjb21tYW5kCi0gICAgICAgICMgbGluZSBhcmd1bWVudHMuIEVtdWxhdGUgYXBhY2hlJ3MgbW9k
X2FzaXMgd2l0aCBhIGNhdCBjZ2kgaGFuZGxlci4KLSAgICAgICAgZi53cml0ZSgoJ2NnaS5hc3Np
Z24gPSAoICIuY2dpIiAgPT4gIi91c3IvYmluL2VudiIsXG4nCi0gICAgICAgICAgICAgICAgICcg
ICAgICAgICAgICAgICAiLnBsIiAgID0+ICIvdXNyL2Jpbi9lbnYiLFxuJwotICAgICAgICAgICAg
ICAgICAnICAgICAgICAgICAgICAgIi5hc2lzIiA9PiAiL2Jpbi9jYXQiLFxuJwotICAgICAgICAg
ICAgICAgICAnICAgICAgICAgICAgICAgIi5waHAiICA9PiAiJXMiIClcblxuJykgJQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMubGlnaHR0cGRfcGhwX3Bh
dGgoKSkKLQotICAgICAgICAjIFNldHVwIGxvZyBmaWxlcwotICAgICAgICBmLndyaXRlKCgnc2Vy
dmVyLmVycm9ybG9nID0gIiVzIlxuJwotICAgICAgICAgICAgICAgICAnYWNjZXNzbG9nLmZpbGVu
YW1lID0gIiVzIlxuXG4nKSAlIChlcnJvcl9sb2csIGFjY2Vzc19sb2cpKQotCi0gICAgICAgICMg
U2V0dXAgdXBsb2FkIGZvbGRlcnMuIFVwbG9hZCBmb2xkZXIgaXMgdG8gaG9sZCB0ZW1wb3Jhcnkg
dXBsb2FkIGZpbGVzCi0gICAgICAgICMgYW5kIGFsc28gUE9TVCBkYXRhLiBUaGlzIGlzIHVzZWQg
dG8gc3VwcG9ydCBYSFIgbGF5b3V0IHRlc3RzIHRoYXQKLSAgICAgICAgIyBkb2VzIFBPU1QuCi0g
ICAgICAgIGYud3JpdGUoKCdzZXJ2ZXIudXBsb2FkLWRpcnMgPSAoICIlcyIgKVxuXG4nKSAlIChz
ZWxmLl9vdXRwdXRfZGlyKSkKLQotICAgICAgICAjIFNldHVwIGEgbGluayB0byB3aGVyZSB0aGUg
anMgdGVzdCB0ZW1wbGF0ZXMgYXJlIHN0b3JlZAotICAgICAgICBmLndyaXRlKCgnYWxpYXMudXJs
ID0gKCAiL2pzLXRlc3QtcmVzb3VyY2VzIiA9PiAiJXMiIClcblxuJykgJQotICAgICAgICAgICAg
ICAgICAgICAoc2VsZi5fanNfdGVzdF9yZXNvdXJjZSkpCi0KLSAgICAgICAgIyBkdW1wIG91dCBv
ZiB2aXJ0dWFsIGhvc3QgY29uZmlnIGF0IHRoZSBib3R0b20uCi0gICAgICAgIGlmIHNlbGYuX3Jv
b3Q6Ci0gICAgICAgICAgICBpZiBzZWxmLl9wb3J0OgotICAgICAgICAgICAgICAgICMgSGF2ZSBi
b3RoIHBvcnQgYW5kIHJvb3QgZGlyLgotICAgICAgICAgICAgICAgIG1hcHBpbmdzID0gW3sncG9y
dCc6IHNlbGYuX3BvcnQsICdkb2Nyb290Jzogc2VsZi5fcm9vdH1dCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgICMgSGF2ZSBvbmx5IGEgcm9vdCBkaXIgLSBzZXQgdGhlIHBvcnRz
IGFzIGZvciBMYXlvdXRUZXN0cy4KLSAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdXNlZCBpbiB1
aV90ZXN0cyB0byBydW4gaHR0cCB0ZXN0cyBhZ2FpbnN0IGEgYnJvd3Nlci4KLQotICAgICAgICAg
ICAgICAgICMgZGVmYXVsdCBzZXQgb2YgcG9ydHMgYXMgZm9yIExheW91dFRlc3RzIGJ1dCB3aXRo
IGEKLSAgICAgICAgICAgICAgICAjIHNwZWNpZmllZCByb290LgotICAgICAgICAgICAgICAgIG1h
cHBpbmdzID0gW3sncG9ydCc6IDgwMDAsICdkb2Nyb290Jzogc2VsZi5fcm9vdH0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MCwgJ2RvY3Jvb3QnOiBzZWxmLl9yb290
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnZG9jcm9vdCc6
IHNlbGYuX3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc2xjZXJ0JzogTGln
aHR0cGQuX3BlbV9maWxlfV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1hcHBpbmdzID0g
c2VsZi5WSVJUVUFMQ09ORklHCi0gICAgICAgIGZvciBtYXBwaW5nIGluIG1hcHBpbmdzOgotICAg
ICAgICAgICAgc3NsX3NldHVwID0gJycKLSAgICAgICAgICAgIGlmICdzc2xjZXJ0JyBpbiBtYXBw
aW5nOgotICAgICAgICAgICAgICAgIHNzbF9zZXR1cCA9ICgnICBzc2wuZW5naW5lID0gImVuYWJs
ZSJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgc3NsLnBlbWZpbGUgPSAiJXMi
XG4nICUgbWFwcGluZ1snc3NsY2VydCddKQotCi0gICAgICAgICAgICBmLndyaXRlKCgnJFNFUlZF
Ulsic29ja2V0Il0gPT0gIjEyNy4wLjAuMTolZCIge1xuJwotICAgICAgICAgICAgICAgICAgICAg
JyAgc2VydmVyLmRvY3VtZW50LXJvb3QgPSAiJXMiXG4nICsKLSAgICAgICAgICAgICAgICAgICAg
IHNzbF9zZXR1cCArCi0gICAgICAgICAgICAgICAgICAgICAnfVxuXG4nKSAlIChtYXBwaW5nWydw
b3J0J10sIG1hcHBpbmdbJ2RvY3Jvb3QnXSkpCi0gICAgICAgIGYuY2xvc2UoKQotCi0gICAgICAg
IGV4ZWN1dGFibGUgPSBwYXRoX3V0aWxzLmxpZ2h0dHBkX2V4ZWN1dGFibGVfcGF0aCgpCi0gICAg
ICAgIG1vZHVsZV9wYXRoID0gcGF0aF91dGlscy5saWdodHRwZF9tb2R1bGVfcGF0aCgpCi0gICAg
ICAgIHN0YXJ0X2NtZCA9IFtleGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgIyBOZXds
eSB3cml0dGVuIGNvbmZpZyBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAnLWYnLCBwYXRoX3V0
aWxzLnBhdGhfZnJvbV9iYXNlKHNlbGYuX291dHB1dF9kaXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWdodHRwZC5jb25mJyksCi0gICAg
ICAgICAgICAgICAgICAgICAjIFdoZXJlIGl0IGNhbiBmaW5kIGl0cyBtb2R1bGUgZHluYW1pYyBs
aWJyYXJpZXMKLSAgICAgICAgICAgICAgICAgICAgICctbScsIG1vZHVsZV9wYXRoXQotCi0gICAg
ICAgIGlmIG5vdCBzZWxmLl9ydW5fYmFja2dyb3VuZDoKLSAgICAgICAgICAgIHN0YXJ0X2NtZC5h
cHBlbmQoIyBEb24ndCBiYWNrZ3JvdW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICct
RCcpCi0KLSAgICAgICAgIyBDb3B5IGxpYmxpZ2h0Y29tcC5keWxpYiB0byAvdG1wL2xpZ2h0dHBk
L2xpYiB0byB3b3JrIGFyb3VuZCB0aGUKLSAgICAgICAgIyBidWcgdGhhdCBtb2RfYWxpYXMuc28g
bG9hZHMgaXQgZnJvbSB0aGUgaGFyZCBjb2RlZCBwYXRoLgotICAgICAgICBpZiBzeXMucGxhdGZv
cm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgICAgICB0bXBfbW9kdWxlX3BhdGggPSAnL3RtcC9saWdo
dHRwZC9saWInCi0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModG1wX21vZHVsZV9w
YXRoKToKLSAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyh0bXBfbW9kdWxlX3BhdGgpCi0gICAg
ICAgICAgICBsaWJfZmlsZSA9ICdsaWJsaWdodGNvbXAuZHlsaWInCi0gICAgICAgICAgICBzaHV0
aWwuY29weWZpbGUob3MucGF0aC5qb2luKG1vZHVsZV9wYXRoLCBsaWJfZmlsZSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRtcF9tb2R1bGVfcGF0aCwgbGliX2Zp
bGUpKQotCi0gICAgICAgICMgUHV0IHRoZSBjeWd3aW4gZGlyZWN0b3J5IGZpcnN0IGluIHRoZSBw
YXRoIHRvIGZpbmQgY3lnd2luMS5kbGwKLSAgICAgICAgZW52ID0gb3MuZW52aXJvbgotICAgICAg
ICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKLSAgICAgICAgICAgIGVu
dlsnUEFUSCddID0gJyVzOyVzJyAlICgKLSAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnBhdGhf
ZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAnYmluJyksCi0gICAgICAgICAgICAg
ICAgZW52WydQQVRIJ10pCi0KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5k
IHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbjoKLSAgICAgICAgICAgIHNldHVwX21vdW50ID0gcGF0aF91
dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2V0dXBfbW91bnQuYmF0
JykKLSAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oc2V0dXBfbW91bnQpLndhaXQoKQotCi0g
ICAgICAgIGxvZ2dpbmcuZGVidWcoJ1N0YXJ0aW5nIGh0dHAgc2VydmVyJykKLSAgICAgICAgc2Vs
Zi5fcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc3RhcnRfY21kLCBlbnY9ZW52KQotCi0gICAg
ICAgICMgV2FpdCBmb3Igc2VydmVyIHRvIHN0YXJ0LgotICAgICAgICBzZWxmLm1hcHBpbmdzID0g
bWFwcGluZ3MKLSAgICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndhaXRfZm9yX2FjdGlvbigK
LSAgICAgICAgICAgIHNlbGYuaXNfc2VydmVyX3J1bm5pbmdfb25fYWxsX3BvcnRzKQotCi0gICAg
ICAgICMgT3VyIHByb2Nlc3MgdGVybWluYXRlZCBhbHJlYWR5Ci0gICAgICAgIGlmIG5vdCBzZXJ2
ZXJfc3RhcnRlZCBvciBzZWxmLl9wcm9jZXNzLnJldHVybmNvZGUgIT0gTm9uZToKLSAgICAgICAg
ICAgIHJhaXNlIGdvb2dsZS5odHRwZF91dGlscy5IdHRwZE5vdFN0YXJ0ZWQoJ0ZhaWxlZCB0byBz
dGFydCBodHRwZC4nKQotCi0gICAgICAgIGxvZ2dpbmcuZGVidWcoIlNlcnZlciBzdWNjZXNzZnVs
bHkgc3RhcnRlZCIpCi0KLSAgICAjIFRPRE8oZGVhbm0pOiBGaW5kIGEgbmljZXIgd2F5IHRvIHNo
dXRkb3duIGNsZWFubHkuICBPdXIgbG9nIGZpbGVzIGFyZQotICAgICMgcHJvYmFibHkgbm90IGJl
aW5nIGZsdXNoZWQsIGV0Yy4uLiB3aHkgZG9lc24ndCBvdXIgcHl0aG9uIGhhdmUgb3Mua2lsbCA/
Ci0KLSAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6Ci0gICAgICAgIGlmIG5vdCBmb3Jj
ZSBhbmQgbm90IHNlbGYuaXNfcnVubmluZygpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAg
ICAgaHR0cGRfcGlkID0gTm9uZQotICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgotICAgICAgICAg
ICAgaHR0cGRfcGlkID0gc2VsZi5fcHJvY2Vzcy5waWQKLSAgICAgICAgcGF0aF91dGlscy5zaHV0
X2Rvd25faHR0cF9zZXJ2ZXIoaHR0cGRfcGlkKQotCi0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6
Ci0gICAgICAgICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQotICAgICAgICAgICAgc2VsZi5fcHJv
Y2VzcyA9IE5vbmUKLQotaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKLSAgICAjIFByb3ZpZGUg
c29tZSBjb21tYW5kIGxpbmUgcGFyYW1zIGZvciBzdGFydGluZy9zdG9wcGluZyB0aGUgaHR0cCBz
ZXJ2ZXIKLSAgICAjIG1hbnVhbGx5LiBBbHNvIHVzZWQgaW4gdWlfdGVzdHMgdG8gcnVuIGh0dHAg
bGF5b3V0IHRlc3RzIGluIGEgYnJvd3Nlci4KLSAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2Uu
T3B0aW9uUGFyc2VyKCkKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1rJywgJy0tc2Vy
dmVyJywKLSAgICAgICAgaGVscD0nU2VydmVyIGFjdGlvbiAoc3RhcnR8c3RvcCknKQotICAgIG9w
dGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1wb3J0JywKLSAgICAgICAgaGVscD0nUG9y
dCB0byBsaXN0ZW4gb24gKG92ZXJyaWRlcyBsYXlvdXQgdGVzdCBwb3J0cyknKQotICAgIG9wdGlv
bl9wYXJzZXIuYWRkX29wdGlvbignLXInLCAnLS1yb290JywKLSAgICAgICAgaGVscD0nQWJzb2x1
dGUgcGF0aCB0byBEb2N1bWVudFJvb3QgKG92ZXJyaWRlcyBsYXlvdXQgdGVzdCByb290cyknKQot
ICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1yZWdpc3Rlcl9jeWd3aW4nLCBhY3Rpb249
InN0b3JlX3RydWUiLAotICAgICAgICBkZXN0PSJyZWdpc3Rlcl9jeWd3aW4iLCBoZWxwPSdSZWdp
c3RlciBDeWd3aW4gcGF0aHMgKG9uIFdpbiB0cnkgYm90cyknKQotICAgIG9wdGlvbl9wYXJzZXIu
YWRkX29wdGlvbignLS1ydW5fYmFja2dyb3VuZCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCi0gICAg
ICAgIGRlc3Q9InJ1bl9iYWNrZ3JvdW5kIiwKLSAgICAgICAgaGVscD0nUnVuIG9uIGJhY2tncm91
bmQgKGZvciBydW5uaW5nIGFzIFVJIHRlc3QpJykKLSAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9u
X3BhcnNlci5wYXJzZV9hcmdzKCkKLQotICAgIGlmIG5vdCBvcHRpb25zLnNlcnZlcjoKLSAgICAg
ICAgcHJpbnQgKCdVc2FnZTogJXMgLS1zZXJ2ZXIge3N0YXJ0fHN0b3B9IFstLXJvb3Q9cm9vdF9k
aXJdJwotICAgICAgICAgICAgICAgJyBbLS1wb3J0PXBvcnRfbnVtYmVyXScgJSBzeXMuYXJndlsw
XSkKLSAgICBlbHNlOgotICAgICAgICBpZiAob3B0aW9ucy5yb290IGlzIE5vbmUpIGFuZCAob3B0
aW9ucy5wb3J0IGlzIG5vdCBOb25lKToKLSAgICAgICAgICAgICMgc3BlY2lmeWluZyByb290IGJ1
dCBub3QgcG9ydCBtZWFucyB3ZSB3YW50IGh0dHBkIG9uIGRlZmF1bHQKLSAgICAgICAgICAgICMg
c2V0IG9mIHBvcnRzIHRoYXQgTGF5b3V0VGVzdCB1c2UsIGJ1dCBwb2ludGluZyB0byBhIGRpZmZl
cmVudAotICAgICAgICAgICAgIyBzb3VyY2Ugb2YgdGVzdHMuIFNwZWNpZnlpbmcgcG9ydCBidXQg
bm8gcm9vdCBkb2VzIG5vdCBzZWVtCi0gICAgICAgICAgICAjIG1lYW5pbmdmdWwuCi0gICAgICAg
ICAgICByYWlzZSAnU3BlY2lmeWluZyBwb3J0IHJlcXVpcmVzIGFsc28gYSByb290LicKLSAgICAg
ICAgaHR0cGQgPSBMaWdodHRwZCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgcG9ydD1vcHRpb25zLnBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
cm9vdD1vcHRpb25zLnJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfY3ln
d2luPW9wdGlvbnMucmVnaXN0ZXJfY3lnd2luLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJ1
bl9iYWNrZ3JvdW5kPW9wdGlvbnMucnVuX2JhY2tncm91bmQpCi0gICAgICAgIGlmICdzdGFydCcg
PT0gb3B0aW9ucy5zZXJ2ZXI6Ci0gICAgICAgICAgICBodHRwZC5zdGFydCgpCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBodHRwZC5zdG9wKGZvcmNlPVRydWUpCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRw
X3NlcnZlcl9iYXNlLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXJfYmFzZS5weQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggODljZjljMC4uMDAwMDAwMAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZlcl9iYXNlLnB5Cisr
KyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAg
ICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotIiIiQmFzZSBjbGFzcyB3aXRoIGNvbW1vbiByb3V0aW5lcyBiZXR3ZWVuIHRoZSBB
cGFjaGUgYW5kIExpZ2h0dHBkIHNlcnZlcnMuIiIiCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQg
dGltZQotaW1wb3J0IHVybGxpYgotCi0KLWNsYXNzIEh0dHBTZXJ2ZXJCYXNlKG9iamVjdCk6Ci0K
LSAgICBkZWYgd2FpdF9mb3JfYWN0aW9uKHNlbGYsIGFjdGlvbik6Ci0gICAgICAgICIiIlJlcGVh
dCB0aGUgYWN0aW9uIGZvciAyMCBzZWNvbmRzIG9yIHVudGlsIGl0IHN1Y2NlZWRzLiBSZXR1cm5z
Ci0gICAgICAgIHdoZXRoZXIgaXQgc3VjY2VlZGVkLiIiIgotICAgICAgICBzdGFydF90aW1lID0g
dGltZS50aW1lKCkKLSAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgLSBzdGFydF90aW1lIDwgMjA6
Ci0gICAgICAgICAgICBpZiBhY3Rpb24oKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQot
ICAgICAgICAgICAgdGltZS5zbGVlcCgxKQotCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAg
ZGVmIGlzX3NlcnZlcl9ydW5uaW5nX29uX2FsbF9wb3J0cyhzZWxmKToKLSAgICAgICAgIiIiUmV0
dXJucyB3aGV0aGVyIHRoZSBzZXJ2ZXIgaXMgcnVubmluZyBvbiBhbGwgdGhlIGRlc2lyZWQgcG9y
dHMuIiIiCi0gICAgICAgIGZvciBtYXBwaW5nIGluIHNlbGYubWFwcGluZ3M6Ci0gICAgICAgICAg
ICBpZiAnc3NsY2VydCcgaW4gbWFwcGluZzoKLSAgICAgICAgICAgICAgICBodHRwX3N1ZmZpeCA9
ICdzJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBodHRwX3N1ZmZpeCA9ICcn
Ci0KLSAgICAgICAgICAgIHVybCA9ICdodHRwJXM6Ly8xMjcuMC4wLjE6JWQvJyAlIChodHRwX3N1
ZmZpeCwgbWFwcGluZ1sncG9ydCddKQotCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAg
ICAgcmVzcG9uc2UgPSB1cmxsaWIudXJsb3Blbih1cmwpCi0gICAgICAgICAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygiU2VydmVyIHJ1bm5pbmcgYXQgJXMiICUgdXJsKQotICAgICAgICAgICAgZXhjZXB0
IElPRXJyb3I6Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU2VydmVyIE5PVCBydW5u
aW5nIGF0ICVzIiAlIHVybCkKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAg
ICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cGQyLnBlbSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBkMi5wZW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNDliNzguLjAwMDAwMDAKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cGQyLnBl
bQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS0tLS0tQkVHSU4gQ0VSVElGSUNBVEUt
LS0tLQotTUlJRVpEQ0NBa3lnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFVRkFEQmdNUkF3RGdZ
RFZRUURFd2RVWlhOMAotSUVOQk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FX
WnZjbTVwWVRFV01CUUdBMVVFQnhNTgotVFc5MWJuUmhhVzRnVm1sbGR6RVNNQkFHQTFVRUNoTUpR
MlZ5ZENCVVpYTjBNQjRYRFRBNE1EY3lPREl5TXpJeQotT0ZvWERURXpNRGN5TnpJeU16SXlPRm93
U2pFTE1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbQotYjNKdWFXRXhFakFRQmdO
VkJBb1RDVU5sY25RZ1ZHVnpkREVTTUJBR0ExVUVBeE1KTVRJM0xqQXVNQzR4TUlHZgotTUEwR0NT
cUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUURRajJ0UFdQVWdidUk0SDMvM2RudHRxVmJuZHdV
MwotM0JkUkNkNjdERk00NEdScnNqRFNINGJZL0ViRnlYOUQ1MmQvaXk2WmFBbURlUGNDejVrL2Zn
UDNETXVqeWtZRwotcWdOaVYyeXd4VGxNajdObE4yQzdTUnQ2OGZRTVpyNWlJN3J5cGR4dWFadDls
U01EM0VOQmZmWXR1TFR5WmQ5YQotM0pQSmUxVGFJYWI1R3dJREFRQUJvNEhDTUlHL01Ba0dBMVVk
RXdRQ01BQXdIUVlEVlIwT0JCWUVGQ1lMQnY1SwoteDVzTE5WbHBMaDVGd1R3aGREbDdNSUdTQmdO
VkhTTUVnWW93Z1llQUZGM09mNW5qMUJsQk1VL0d6N0VsOVZxdgotNDVjeG9XU2tZakJnTVJBd0Rn
WURWUVFERXdkVVpYTjBJRU5CTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRQotQ0JNS1EyRnNh
V1p2Y201cFlURVdNQlFHQTFVRUJ4TU5UVzkxYm5SaGFXNGdWbWxsZHpFU01CQUdBMVVFQ2hNSgot
UTJWeWRDQlVaWE4wZ2drQTFGR1QxRC9lMlU0d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dJQkFFdGtW
bUxPYlVnawotYjJjSUEyUytRRHRpZnExVWdWZkJieXR2UjJsRm1uQURPUjU1bW8wZ0hRRzNISHFx
NGcwMzRMbW9WWERIaFVrOAotR2I2YUZpdjRRdWJtVmhMWGNVZWxUUlh3aU52R3prVzdwQzZKcnEx
MDVoZFBqelhNS1RjbWlMYW9wbTVGcWZjNwotaGo1Q24xU2pzcGM4cGRlUWpyYmVNZHZjYTdLbEZy
R1A4WWt3Q1UyeE9PWDlQaU45RzA5NjZCV2ZqbnIvZlpacAotK09RVnVVRkhkaUFad3RoRU11RHBB
QVhIcVlYSXNlcm1nZE9wZ0phQTUzY2Y4TnFCVjJRR2h0Rmd0c0pDUm9pdQotN0RLcWh5UldCR3l6
MTlWSUgyYjd5KzZxdlFWeHVIazE5a0tSTTBuZnR3L3lOY0pubTdndHR0ZXNwTVVQc09NYQotYTJT
RDFHMGhtMFRORDZ2eGFCaGdSM2NWcXBsL3FJcEFkRmkwMFRtN2hUeVlFN0k0M3pQVzAzdCsvRHBD
dDNVbQotRU1SWnNROTBjbzVxK2JjeC92UTdZQXR3VWgzMHVNYjB3cGliZXlDd0RwOGNxTm1TaVJr
RXVjL0ZqVFllczV0OAotNWdSLy9XWDFsMCtxanJqdXNPOU5tb0xucTJZazZVY2lvWCt6K3E2Wi9k
dWRHZnFoTGZlV0QyUTBMV1lBMjQyQwotZDdrbTVZM0tBdDFQSmRWc29mL2FpVmhWZGRkWS9PSUVL
VFJRaFdFZERib3N5MmVoMTZCQ0tYVDJGRnZoTkRnMQotQVlGdm42SThuajlJbGRNSmlJYzNEZGhh
Y0VBRXpSTWVSZ1BkekFhMWdyaUtVR2tueHN5VHlSaWk4cnUwV1M2dwotRENOcmxET1ZYZHpZR0Va
b29CSTc2QkRWWTBXMGFralYKLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS0tQkVHSU4g
UlNBIFBSSVZBVEUgS0VZLS0tLS0KLU1JSUNYUUlCQUFLQmdRRFFqMnRQV1BVZ2J1STRIMy8zZG50
dHFWYm5kd1UzM0JkUkNkNjdERk00NEdScnNqRFMKLUg0YlkvRWJGeVg5RDUyZC9peTZaYUFtRGVQ
Y0N6NWsvZmdQM0RNdWp5a1lHcWdOaVYyeXd4VGxNajdObE4yQzcKLVNSdDY4ZlFNWnI1aUk3cnlw
ZHh1YVp0OWxTTUQzRU5CZmZZdHVMVHlaZDlhM0pQSmUxVGFJYWI1R3dJREFRQUIKLUFvR0FOSFh1
OHoyWUl6bGhFK2J3aEdtOE1HQnBLTDNxaFJ1S2plcmlxTUEzNnRXZXpPdzhsWTR5bUVBVStVbHYK
LUJzQ2RheHF5ZFFvVFlvdTU3bTRUeVVIRWN4cTlwcTNIMHpCMHFMNzA5RGRIaS90NHpiVjlYSW9B
ekM1djAvaEcKLTkrQ2EyOVR3QzAyRkN3K3FMa05ydHdDcHdPY1FtYytiUHhxdkZ1MWlNaWFoVVJF
Q1FRRDJJL0hpMjQxM0NNWnoKLVRCamw4Zk1pVk85R2hBMkowc2M4UWkrWWNnSmFrYUxEOXhjYmFp
TGtUelBaRGxBMzg5QzFiNklhK3BvQXI0WUEKLVZlMEZGYnhwQWtFQTJPb2JheXlIRS9RdFBFcW95
Nk5MUjU3amlybVZCTm1TV1dkNGxBeUw1VUlISVlWdHRKWmcKLThDTHZiemFVL2lER3dSK3dLc002
NjRyS1BIRW10bHlvNHdKQkFNZVNxWU81Wk9DSkd1OU5XanJIak0zZmRBc0cKLTh6czJ6aGlMeWEr
ZmNVMGlISWtzQlc1VEJtdDcxSncvd01jOVI1SjFLMGtZdkZtbDk4NjUzTzVzaTFFQ1FCQ2sKLVJW
NC9tRTFybWx6WnpZRnlFY0I0N0RRa2NNNWljdHZ4R0VzamUwZ25mS3lSdEF6NnpJMGY0UWJEUlVN
SitMV3cKLVhLK3JNc1lIYStTZk9iMGI5c2tDUVFDTGRlb25zSXBGRHYvVXYrZmxISVN5MFdBK0FG
a0xYclJrQktoNkcvT0QKLWRNSGFOZXZrSmdVbnBjZVZFbmtyZGVucDVDY0VvRlRJMTdwZCtuQmdE
bS9CCi0tLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlv
dXRfcmVzdWx0c19nZW5lcmF0b3IucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5w
eQppbmRleCAyNzFmZjZjLi41MjBhYjFmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRz
X2dlbmVyYXRvci5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQpAQCAt
MTEsNyArMTEsNyBAQAogIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICMgZGlzdHJpYnV0aW9uLgot
IyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KICMKQEAgLTI5LDkgKzI5LDkgQEAKIAogaW1wb3J0IGxvZ2dp
bmcKIGltcG9ydCBvcworaW1wb3J0IHNpbXBsZWpzb24KIAogZnJvbSBsYXlvdXRfcGFja2FnZSBp
bXBvcnQganNvbl9yZXN1bHRzX2dlbmVyYXRvcgotZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQg
cGF0aF91dGlscwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMK
IGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIApAQCAtNDUsNyArNDUs
NyBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcihqc29uX3Jlc3VsdHNfZ2VuZXJh
dG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yKToKICAgICBXT05URklYID0gIndvbnRmaXhDb3VudHMi
CiAgICAgREVGRVJSRUQgPSAiZGVmZXJyZWRDb3VudHMiCiAKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBvcnQsIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAog
ICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2VfdXJsLAogICAgICAg
ICB0ZXN0X3RpbWluZ3MsIGV4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksIGFsbF90ZXN0cyk6
CiAgICAgICAgICIiIk1vZGlmaWVzIHRoZSByZXN1bHRzLmpzb24gZmlsZS4gR3JhYnMgaXQgb2Zm
IHRoZSBhcmNoaXZlIGRpcmVjdG9yeQpAQCAtNTYsNyArNTYsNyBAQCBjbGFzcyBKU09OTGF5b3V0
UmVzdWx0c0dlbmVyYXRvcihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJh
dG9yKToKICAgICAgICAgICAgICAgcmVzdWx0cy4KICAgICAgICAgICAoc2VlIHRoZSBjb21tZW50
IG9mIEpTT05SZXN1bHRzR2VuZXJhdG9yLl9faW5pdF9fIGZvciBvdGhlciBBcmdzKQogICAgICAg
ICAiIiIKLQorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9idWlsZGVy
X25hbWUgPSBidWlsZGVyX25hbWUKICAgICAgICAgc2VsZi5fYnVpbGRfbmFtZSA9IGJ1aWxkX25h
bWUKICAgICAgICAgc2VsZi5fYnVpbGRfbnVtYmVyID0gYnVpbGRfbnVtYmVyCkBAIC0xNTMsNyAr
MTUzLDcgQEAgY2xhc3MgSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0b3IoanNvbl9yZXN1bHRzX2dl
bmVyYXRvci5KU09OUmVzdWx0c0dlbmVyYXRvcik6CiAgICAgICAgICAgICB0ZXN0LCB0ZXN0X25h
bWUsIHRlc3RzKQogCiAgICAgICAgICMgUmVtb3ZlIHRlc3RzIHRoYXQgZG9uJ3QgZXhpc3QgYW55
bW9yZS4KLSAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHBhdGhfdXRpbHMubGF5b3V0
X3Rlc3RzX2RpcigpLCB0ZXN0X25hbWUpCisgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9p
bihzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwgdGVzdF9uYW1lKQogICAgICAgICBmdWxs
X3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKGZ1bGxfcGF0aCkKICAgICAgICAgaWYgbm90IG9zLnBh
dGguZXhpc3RzKGZ1bGxfcGF0aCk6CiAgICAgICAgICAgICBkZWwgdGVzdHNbdGVzdF9uYW1lXQpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3IucHkKaW5kZXggMDU0MDE5NC4uODRiZTBlMSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRz
X2dlbmVyYXRvci5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC0xMSw3ICsx
MSw3IEBACiAjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKICMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogIyBkaXN0cmlidXRpb24uCi0jICAgICAq
IE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQogIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgogIwpAQCAtMjksMTkgKzI5LDE1IEBACiAKIGltcG9ydCBsb2dnaW5nCiBp
bXBvcnQgb3MKK2ltcG9ydCBzaW1wbGVqc29uCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5
cwogaW1wb3J0IHRpbWUKIGltcG9ydCB1cmxsaWIyCiBpbXBvcnQgeG1sLmRvbS5taW5pZG9tCiAK
LWZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHBhdGhfdXRpbHMKIGZyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiAKLXN5cy5wYXRoLmFwcGVuZChwYXRoX3V0aWxz
LnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXZWJLaXRUb29scycpKSAKLWltcG9ydCBzaW1w
bGVqc29uCi0KIAogY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0KToKIApAQCAtODAs
NyArNzYsNyBAQCBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihvYmplY3QpOgogCiAgICAgUkVT
VUxUU19GSUxFTkFNRSA9ICJyZXN1bHRzLmpzb24iCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
YnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnQsIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAogICAg
ICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2VfdXJsLAogICAgICAgICB0
ZXN0X3RpbWluZ3MsIGZhaWx1cmVzLCBwYXNzZWRfdGVzdHMsIHNraXBwZWRfdGVzdHMsIGFsbF90
ZXN0cyk6CiAgICAgICAgICIiIk1vZGlmaWVzIHRoZSByZXN1bHRzLmpzb24gZmlsZS4gR3JhYnMg
aXQgb2ZmIHRoZSBhcmNoaXZlIGRpcmVjdG9yeQpAQCAtMTAwLDYgKzk2LDcgQEAgY2xhc3MgSlNP
TlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0KToKICAgICAgICAgICBhbGxfdGVzdHM6IExpc3Qgb2Yg
YWxsIHRoZSB0ZXN0cyB0aGF0IHdlcmUgcnVuLiAgVGhpcyBzaG91bGQgbm90CiAgICAgICAgICAg
ICAgIGluY2x1ZGUgc2tpcHBlZCB0ZXN0cy4KICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3Bv
cnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX2J1aWxkZXJfbmFtZSA9IGJ1aWxkZXJfbmFtZQogICAg
ICAgICBzZWxmLl9idWlsZF9uYW1lID0gYnVpbGRfbmFtZQogICAgICAgICBzZWxmLl9idWlsZF9u
dW1iZXIgPSBidWlsZF9udW1iZXIKQEAgLTEyMiwyMiArMTE5LDI0IEBAIGNsYXNzIEpTT05SZXN1
bHRzR2VuZXJhdG9yKG9iamVjdCk6CiAgICAgICAgICAgICByZXN1bHRzX2ZpbGUud3JpdGUoanNv
bikKICAgICAgICAgICAgIHJlc3VsdHNfZmlsZS5jbG9zZSgpCiAKLSAgICBkZWYgX2dldF9zdm5f
cmV2aXNpb24oc2VsZiwgaW5fZGlyZWN0b3J5PU5vbmUpOgorICAgIGRlZiBfZ2V0X3N2bl9yZXZp
c2lvbihzZWxmLCBpbl9kaXJlY3RvcnkpOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdm4gcmV2
aXNpb24gZm9yIHRoZSBnaXZlbiBkaXJlY3RvcnkuCiAKICAgICAgICAgQXJnczoKICAgICAgICAg
ICBpbl9kaXJlY3Rvcnk6IFRoZSBkaXJlY3Rvcnkgd2hlcmUgc3ZuIGlzIHRvIGJlIHJ1bi4KICAg
ICAgICAgIiIiCi0gICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzdm4iLCAiaW5m
byIsICItLXhtbCJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1pbl9k
aXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9KHN5cy5w
bGF0Zm9ybSA9PSAnd2luMzInKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCi0gICAgICAgIHRyeToKLSAg
ICAgICAgICAgIGRvbSA9IHhtbC5kb20ubWluaWRvbS5wYXJzZVN0cmluZyhvdXRwdXQpCi0gICAg
ICAgICAgICByZXR1cm4gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdlbnRyeScpWzBdLmdldEF0
dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICAncmV2aXNpb24nKQotICAgICAgICBleGNlcHQgeG1s
LnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiAiIgorICAgICAg
ICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oaW5fZGlyZWN0b3J5LCAnLnN2bicpKToK
KyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzdm4iLCAiaW5mbyIsICIt
LXhtbCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9aW5fZGly
ZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD0oc3lz
LnBsYXRmb3JtID09ICd3aW4zMicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgZG9tID0geG1sLmRvbS5taW5pZG9tLnBhcnNlU3RyaW5n
KG91dHB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdlbnRyeScpWzBdLmdldEF0dHJpYnV0ZSgKKyAgICAgICAgICAgICAgICAgICAgJ3JldmlzaW9u
JykKKyAgICAgICAgICAgIGV4Y2VwdCB4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yOgorICAg
ICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICByZXR1cm4gIiIKIAogICAgIGRlZiBfZ2V0
X2FyY2hpdmVkX2pzb25fcmVzdWx0cyhzZWxmKToKICAgICAgICAgIiIiUmVhZHMgb2xkIHJlc3Vs
dHMgSlNPTiBmaWxlIGlmIGl0IGV4aXN0cy4KQEAgLTMwNSwxNiArMzA0LDE5IEBAIGNsYXNzIEpT
T05SZXN1bHRzR2VuZXJhdG9yKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2lu
dG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKICAgICAgICAgICAgIHNlbGYuX2J1aWxk
X251bWJlciwgc2VsZi5CVUlMRF9OVU1CRVJTKQogCi0gICAgICAgIHBhdGhfdG9fd2Via2l0ID0g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXZWJDb3JlJykK
LSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWls
ZGVyLAotICAgICAgICAgICAgc2VsZi5fZ2V0X3N2bl9yZXZpc2lvbihwYXRoX3RvX3dlYmtpdCks
Ci0gICAgICAgICAgICBzZWxmLldFQktJVF9TVk4pCi0KLSAgICAgICAgcGF0aF90b19jaHJvbWVf
YmFzZSA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoKQotICAgICAgICBzZWxmLl9pbnNlcnRf
aXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCi0gICAgICAgICAgICBzZWxm
Ll9nZXRfc3ZuX3JldmlzaW9uKHBhdGhfdG9fY2hyb21lX2Jhc2UpLAotICAgICAgICAgICAgc2Vs
Zi5DSFJPTUVfU1ZOKQorICAgICAgICAjIFRoZXNlIG5leHQgdHdvIGJyYW5jaGVzIHRlc3QgdG8g
c2VlIHdoaWNoIHNvdXJjZSByZXBvcyB3ZSBjYW4KKyAgICAgICAgIyBwdWxsIHJldmlzaW9ucyBm
cm9tLgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX3BvcnQsICdwYXRoX2Zyb21fd2Via2l0X2Jh
c2UnKToKKyAgICAgICAgICAgIHBhdGhfdG9fd2Via2l0ID0gc2VsZi5fcG9ydC5wYXRoX2Zyb21f
d2Via2l0X2Jhc2UoKQorICAgICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlz
dChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgICAgIHNlbGYuX2dldF9zdm5fcmV2
aXNpb24ocGF0aF90b193ZWJraXQpLAorICAgICAgICAgICAgICAgIHNlbGYuV0VCS0lUX1NWTikK
KworICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX3BvcnQsICdwYXRoX2Zyb21fY2hyb21pdW1fYmFz
ZScpOgorICAgICAgICAgICAgcGF0aF90b19jaHJvbWUgPSBzZWxmLl9wb3J0LnBhdGhfZnJvbV9j
aHJvbWl1bV9iYXNlKCkKKyAgICAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xp
c3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgICAgICBzZWxmLl9nZXRfc3ZuX3Jl
dmlzaW9uKHBhdGhfdG9fY2hyb21lKSwKKyAgICAgICAgICAgICAgICBzZWxmLkNIUk9NRV9TVk4p
CiAKICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9i
dWlsZGVyLAogICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2xpZ2h0
dHBkLmNvbmYgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9saWdodHRwZC5jb25mCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
MzE1MGRkLi4wMDAwMDAwCi0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL2xpZ2h0dHBkLmNvbmYKKysrIC9kZXYvbnVsbApAQCAtMSw4
OSArMCwwIEBACi1zZXJ2ZXIudGFnICAgICAgICAgICAgICAgICAgPSAiTGlnaHRUUEQvMS40LjE5
IChXaW4zMikiCi1zZXJ2ZXIubW9kdWxlcyAgICAgICAgICAgICAgPSAoICJtb2RfYWNjZXNzbG9n
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9hbGlhcyIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfY2dpIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIm1vZF9yZXdyaXRlIiApCi0KLSMgZGVmYXVsdCBkb2N1bWVudCByb290IHJl
cXVpcmVkCi1zZXJ2ZXIuZG9jdW1lbnQtcm9vdCA9ICIuIgotCi0jIGZpbGVzIHRvIGNoZWNrIGZv
ciBpZiAuLi4vIGlzIHJlcXVlc3RlZAotaW5kZXgtZmlsZS5uYW1lcyAgICAgICAgICAgID0gKCAi
aW5kZXgucGhwIiwgImluZGV4LnBsIiwgImluZGV4LmNnaSIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJpbmRleC5odG1sIiwgImluZGV4Lmh0bSIsICJkZWZhdWx0Lmh0bSIgKQot
IyBtaW1ldHlwZSBtYXBwaW5nCi1taW1ldHlwZS5hc3NpZ24gICAgICAgICAgICAgPSAoCi0gICIu
Z2lmIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9naWYiLAotICAiLmpwZyIgICAgICAgICAgPT4g
ICAgICAiaW1hZ2UvanBlZyIsCi0gICIuanBlZyIgICAgICAgICA9PiAgICAgICJpbWFnZS9qcGVn
IiwKLSAgIi5wbmciICAgICAgICAgID0+ICAgICAgImltYWdlL3BuZyIsCi0gICIuc3ZnIiAgICAg
ICAgICA9PiAgICAgICJpbWFnZS9zdmcreG1sIiwKLSAgIi5jc3MiICAgICAgICAgID0+ICAgICAg
InRleHQvY3NzIiwKLSAgIi5odG1sIiAgICAgICAgID0+ICAgICAgInRleHQvaHRtbCIsCi0gICIu
aHRtIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAotICAiLnhodG1sIiAgICAgICAgPT4g
ICAgICAiYXBwbGljYXRpb24veGh0bWwreG1sIiwKLSAgIi5qcyIgICAgICAgICAgID0+ICAgICAg
InRleHQvamF2YXNjcmlwdCIsCi0gICIubG9nIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWlu
IiwKLSAgIi5jb25mIiAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAotICAiLnRleHQiICAg
ICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCi0gICIudHh0IiAgICAgICAgICA9PiAgICAgICJ0
ZXh0L3BsYWluIiwKLSAgIi5kdGQiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwKLSAgIi54
bWwiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwKLSAgIi5tYW5pZmVzdCIgICAgID0+ICAg
ICAgInRleHQvY2FjaGUtbWFuaWZlc3QiLAotICkKLQotIyBVc2UgdGhlICJDb250ZW50LVR5cGUi
IGV4dGVuZGVkIGF0dHJpYnV0ZSB0byBvYnRhaW4gbWltZSB0eXBlIGlmIHBvc3NpYmxlCi1taW1l
dHlwZS51c2UteGF0dHIgICAgICAgICAgPSAiZW5hYmxlIgotCi0jIwotIyB3aGljaCBleHRlbnNp
b25zIHNob3VsZCBub3QgYmUgaGFuZGxlIHZpYSBzdGF0aWMtZmlsZSB0cmFuc2ZlcgotIwotIyAu
cGhwLCAucGwsIC5mY2dpIGFyZSBtb3N0IG9mdGVuIGhhbmRsZWQgYnkgbW9kX2Zhc3RjZ2kgb3Ig
bW9kX2NnaQotc3RhdGljLWZpbGUuZXhjbHVkZS1leHRlbnNpb25zID0gKCAiLnBocCIsICIucGwi
LCAiLmNnaSIgKQotCi1zZXJ2ZXIuYmluZCA9ICJsb2NhbGhvc3QiCi1zZXJ2ZXIucG9ydCA9IDgw
MDEKLQotIyMgdmlydHVhbCBkaXJlY3RvcnkgbGlzdGluZ3MKLWRpci1saXN0aW5nLmFjdGl2YXRl
ICAgICAgICA9ICJlbmFibGUiCi0jZGlyLWxpc3RpbmcuZW5jb2RpbmcgICAgICAgPSAiaXNvLTg4
NTktMiIKLSNkaXItbGlzdGluZy5leHRlcm5hbC1jc3MgICA9ICJzdHlsZS9vbGRzdHlsZS5jc3Mi
Ci0KLSMjIGVuYWJsZSBkZWJ1Z2dpbmcKLSNkZWJ1Zy5sb2ctcmVxdWVzdC1oZWFkZXIgICA9ICJl
bmFibGUiCi0jZGVidWcubG9nLXJlc3BvbnNlLWhlYWRlciAgPSAiZW5hYmxlIgotI2RlYnVnLmxv
Zy1yZXF1ZXN0LWhhbmRsaW5nID0gImVuYWJsZSIKLSNkZWJ1Zy5sb2ctZmlsZS1ub3QtZm91bmQg
ICA9ICJlbmFibGUiCi0KLSMjIyMgU1NMIGVuZ2luZQotI3NzbC5lbmdpbmUgICAgICAgICAgICAg
ICAgID0gImVuYWJsZSIKLSNzc2wucGVtZmlsZSAgICAgICAgICAgICAgICA9ICJzZXJ2ZXIucGVt
IgotCi0jIFJld3JpdGUgcnVsZSBmb3IgdXRmLTggcGF0aCB0ZXN0IChMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3VyaS91dGY4LXBhdGguaHRtbCkKLSMgU2VlIHRoZSBhcGFjaGUgcmV3cml0ZSBydWxl
IGF0IExheW91dFRlc3RzL2h0dHAvdGVzdHMvdXJpL2ludGVyY2VwdC8uaHRhY2Nlc3MKLSMgUmV3
cml0ZSBydWxlIGZvciBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2N5cmlsbGljLXVy
aS5odG1sLgotIyBTZWUgdGhlIGFwYWNoZSByZXdyaXRlIHJ1bGUgYXQKLSMgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvaW50ZXJjZXB0Ly5odGFjY2VzcwotdXJsLnJl
d3JpdGUtb25jZSA9ICgKLSAgIl4vdXJpL2ludGVyY2VwdC8oLiopIiA9PiAiL3VyaS9yZXNvdXJj
ZXMvcHJpbnQtdXJpLnBocCIsCi0gICJeL2FwcGNhY2hlL3Jlc291cmNlcy9pbnRlcmNlcHQvKC4q
KSIgPT4gIi9hcHBjYWNoZS9yZXNvdXJjZXMvcHJpbnQtdXJpLnBocCIKLSkKLQotIyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc3BvbnNlLWVuY29kaW5nLmh0bWwgdXNl
cyBhbiBodGFjY2VzcwotIyB0byBvdmVycmlkZSBjaGFyc2V0IGZvciByZXBseTIudHh0LCByZXBs
eTIueG1sLCBhbmQgcmVwbHk0LnR4dC4KLSRIVFRQWyJ1cmwiXSA9fiAiXi94bWxodHRwcmVxdWVz
dC9yZXNvdXJjZXMvcmVwbHkyLih0eHR8eG1sKSIgewotICBtaW1ldHlwZS5hc3NpZ24gPSAoCi0g
ICAgIi50eHQiID0+ICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXdpbmRvd3MtMTI1MSIsCi0gICAgIi54
bWwiID0+ICJ0ZXh0L3htbDsgY2hhcnNldD13aW5kb3dzLTEyNTEiCi0gICkKLX0KLSRIVFRQWyJ1
cmwiXSA9fiAiXi94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVwbHk0LnR4dCIgewotICBtaW1l
dHlwZS5hc3NpZ24gPSAoICIudHh0IiA9PiAidGV4dC9wbGFpbjsgY2hhcnNldD1rb2k4LXIiICkK
LX0KLQotIyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3dyb25nLWNvbnRlbnQtdHlw
ZS5odG1sIHVzZXMgYW4gaHRhY2Nlc3MKLSMgdG8gb3ZlcnJpZGUgbWltZSB0eXBlIGZvciB3cm9u
Zy1jb250ZW50LXR5cGUubWFuaWZlc3QuCi0kSFRUUFsidXJsIl0gPX4gIl4vYXBwY2FjaGUvcmVz
b3VyY2VzL3dyb25nLWNvbnRlbnQtdHlwZS5tYW5pZmVzdCIgewotICBtaW1ldHlwZS5hc3NpZ24g
PSAoICIubWFuaWZlc3QiID0+ICJ0ZXh0L3BsYWluIiApCi19Ci0KLSMgQXV0b2dlbmVyYXRlZCB0
ZXN0LXNwZWNpZmljIGNvbmZpZyBmb2xsb3dzLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW0u
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9tZXRlcmVkX3N0cmVhbS5weQppbmRleCA4NzAxYWQzLi43MmIzMGExIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9tZXRlcmVkX3N0cmVhbS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXRlcmVkX3N0cmVhbS5weQpAQCAtMTEsNyArMTEs
NyBAQAogIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCiAjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBO
ZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KICMKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BhdGhfdXRpbHMucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wYXRoX3V0aWxzLnB5
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGI3NjExLi4wMDAwMDAwCi0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Bh
dGhfdXRpbHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzOTUgKzAsMCBAQAotIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlz
dHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHV0aWxpdHkg
bWV0aG9kcyBmb3IgbWFuaXB1bGF0aW5nIHBhdGhzIGFuZAotZmlsZW5hbWVzIGZvciB0ZXN0IHJl
c3VsdHMgYW5kIGJhc2VsaW5lcy4gSXQgYWxzbyBjb250YWlucyB3cmFwcGVycwotb2YgYSBmZXcg
cm91dGluZXMgaW4gcGxhdGZvcm1fdXRpbHMucHkgc28gdGhhdCBwbGF0Zm9ybV91dGlscy5weSBj
YW4KLWJlIGNvbnNpZGVyZWQgYSAncHJvdGVjdGVkJyBwYWNrYWdlIC0gaS5lLiwgdGhpcyBmaWxl
IHNob3VsZCBiZQotdGhlIG9ubHkgZmlsZSB0aGF0IGV2ZXIgaW5jbHVkZXMgcGxhdGZvcm1fdXRp
bHMuIFRoaXMgbGVhZHMgdG8KLXVzIGluY2x1ZGluZyBhIGZldyB0aGluZ3MgdGhhdCBkb24ndCBy
ZWFsbHkgaGF2ZSBhbnl0aGluZyB0byBkbwotIHdpdGggcGF0aHMsIHVuZm9ydHVuYXRlbHkuIiIi
Ci0KLWltcG9ydCBlcnJubwotaW1wb3J0IG9zCi1pbXBvcnQgc3RhdAotaW1wb3J0IHN5cwotCi1p
bXBvcnQgcGxhdGZvcm1fdXRpbHMKLWltcG9ydCBwbGF0Zm9ybV91dGlsc193aW4KLWltcG9ydCBw
bGF0Zm9ybV91dGlsc19tYWMKLWltcG9ydCBwbGF0Zm9ybV91dGlsc19saW51eAotCi0jIENhY2hl
IHNvbWUgdmFsdWVzIHNvIHdlIGRvbid0IGhhdmUgdG8gcmVjYWxjdWxhdGUgdGhlbS4gX2Jhc2Vk
aXIgaXMKLSMgdXNlZCBieSBQYXRoRnJvbUJhc2UoKSBhbmQgY2FjaGVzIHRoZSBmdWxsIChuYXRp
dmUpIHBhdGggdG8gdGhlIHRvcAotIyBvZiB0aGUgc291cmNlIHRyZWUgKC9zcmMpLiBfYmFzZWxp
bmVfc2VhcmNoX3BhdGggaXMgdXNlZCBieQotIyBFeHBlY3RlZEJhc2VsaW5lcygpIGFuZCBjYWNo
ZXMgdGhlIGxpc3Qgb2YgbmF0aXZlIHBhdGhzIHRvIHNlYXJjaAotIyBmb3IgYmFzZWxpbmUgcmVz
dWx0cy4KLV9iYXNlZGlyID0gTm9uZQotX2Jhc2VsaW5lX3NlYXJjaF9wYXRoID0gTm9uZQotCi0K
LWNsYXNzIFBhdGhOb3RGb3VuZChFeGNlcHRpb24pOgotICAgIHBhc3MKLQotCi1kZWYgbGF5b3V0
X3Rlc3RzX2RpcigpOgotICAgICIiIlJldHVybnMgdGhlIGZ1bGx5LXF1YWxpZmllZCBwYXRoIHRv
IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaW5wdXQKLSAgICBkYXRhIGZvciB0aGUgc3Bl
Y2lmaWVkIGxheW91dCB0ZXN0LiIiIgotICAgIHJldHVybiBwYXRoX2Zyb21fYmFzZSgndGhpcmRf
cGFydHknLCAnV2ViS2l0JywgJ0xheW91dFRlc3RzJykKLQotCi1kZWYgY2hyb21pdW1fYmFzZWxp
bmVfcGF0aChwbGF0Zm9ybT1Ob25lKToKLSAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8g
dGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGV4cGVjdGVkCi0gICAgYmFzZWxpbmUgcmVzdWx0cyBm
cm9tIGNocm9taXVtIHBvcnRzLiBJZiB8cGxhdGZvcm18IGlzIE5vbmUsIHRoZQotICAgIGN1cnJl
bnRseSBleGVjdXRpbmcgcGxhdGZvcm0gaXMgdXNlZC4KLQotICAgIE5vdGU6IGFsdGhvdWdoIGRp
cmVjdGx5IHJlZmVyZW5jaW5nIGluZGl2aWR1YWwgcGxhdGZvcm1fdXRpbHNfKiBmaWxlcyBpcwot
ICAgIHVzdWFsbHkgZGlzY291cmFnZWQsIHdlIGFsbG93IGl0IGhlcmUgc28gdGhhdCB0aGUgcmVi
YXNlbGluaW5nIHRvb2wgY2FuCi0gICAgcHVsbCBiYXNlbGluZXMgZm9yIHBsYXRmb3JtcyBvdGhl
ciB0aGFuIHRoZSBob3N0IHBsYXRmb3JtLiIiIgotCi0gICAgIyBOb3JtYWxpemUgdGhlIHBsYXRm
b3JtIHN0cmluZy4KLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUocGxhdGZvcm0pCi0gICAg
aWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21pdW0tbWFjJyk6Ci0gICAgICAgIHJldHVybiBw
bGF0Zm9ybV91dGlsc19tYWMuYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkKLSAgICBlbGlmIHBsYXRm
b3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLXdpbicpOgotICAgICAgICByZXR1cm4gcGxhdGZvcm1f
dXRpbHNfd2luLmJhc2VsaW5lX3BhdGgocGxhdGZvcm0pCi0gICAgZWxpZiBwbGF0Zm9ybS5zdGFy
dHN3aXRoKCdjaHJvbWl1bS1saW51eCcpOgotICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNf
bGludXguYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkKLQotICAgIHJldHVybiBwbGF0Zm9ybV91dGls
cy5iYXNlbGluZV9wYXRoKCkKLQotCi1kZWYgd2Via2l0X2Jhc2VsaW5lX3BhdGgocGxhdGZvcm0p
OgotICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5p
bmcgZXhwZWN0ZWQKLSAgICBiYXNlbGluZSByZXN1bHRzIGZyb20gV2ViS2l0IHBvcnRzLiIiIgot
ICAgIHJldHVybiBwYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywgJ0xheW91
dFRlc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJywgcGxhdGZvcm0p
Ci0KLQotZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtPU5vbmUpOgotICAgICIiIlJl
dHVybnMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBiYXNlbGluZXMvcmVz
dWx0cyBmb3IgYQotICAgIGdpdmVuIHBsYXRmb3JtLCBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLiBQ
YXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIHRvcCBvZgotICAgIHRoZSBzb3VyY2UgdHJlZS4gSWYg
cGFyYW1ldGVyIHBsYXRmb3JtIGlzIE5vbmUsIHJldHVybnMgdGhlIGxpc3QgZm9yIHRoZQotICAg
IGN1cnJlbnQgcGxhdGZvcm0gdGhhdCB0aGUgc2NyaXB0IGlzIHJ1bm5pbmcgb24uCi0KLSAgICBO
b3RlOiBhbHRob3VnaCBkaXJlY3RseSByZWZlcmVuY2luZyBpbmRpdmlkdWFsIHBsYXRmb3JtX3V0
aWxzXyogZmlsZXMgaXMKLSAgICB1c3VhbGx5IGRpc2NvdXJhZ2VkLCB3ZSBhbGxvdyBpdCBoZXJl
IHNvIHRoYXQgdGhlIHJlYmFzZWxpbmluZyB0b29sIGNhbgotICAgIHB1bGwgYmFzZWxpbmVzIGZv
ciBwbGF0Zm9ybXMgb3RoZXIgdGhhbiB0aGUgaG9zdCBwbGF0Zm9ybS4iIiIKLQotICAgICMgTm9y
bWFsaXplIHRoZSBwbGF0Zm9ybSBuYW1lLgotICAgIHBsYXRmb3JtID0gcGxhdGZvcm1fbmFtZShw
bGF0Zm9ybSkKLSAgICBpZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdjaHJvbWl1bS1tYWMnKToKLSAg
ICAgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzX21hYy5iYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0
Zm9ybSkKLSAgICBlbGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLXdpbicpOgotICAg
ICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfd2luLmJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRm
b3JtKQotICAgIGVsaWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21pdW0tbGludXgnKToKLSAg
ICAgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzX2xpbnV4LmJhc2VsaW5lX3NlYXJjaF9wYXRoKHBs
YXRmb3JtKQotICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5iYXNlbGluZV9zZWFyY2hfcGF0aCgp
Ci0KLQotZGVmIGV4cGVjdGVkX2Jhc2VsaW5lcyhmaWxlbmFtZSwgc3VmZml4LCBwbGF0Zm9ybT1O
b25lLCBhbGxfYmFzZWxpbmVzPUZhbHNlKToKLSAgICAiIiJHaXZlbiBhIHRlc3QgbmFtZSwgZmlu
ZHMgd2hlcmUgdGhlIGJhc2VsaW5lIHJlc3VsdHMgYXJlIGxvY2F0ZWQuCi0KLSAgICBBcmdzOgot
ICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKLSAgICAgICBz
dWZmaXg6IGZpbGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1bHRzLCBpbmNsdWRpbmcgZG90
OyBlLmcuICcudHh0JwotICAgICAgICAgICBvciAnLnBuZycuICBUaGlzIHNob3VsZCBub3QgYmUg
Tm9uZSwgYnV0IG1heSBiZSBhbiBlbXB0eSBzdHJpbmcuCi0gICAgICAgcGxhdGZvcm06IGxheW91
dCB0ZXN0IHBsYXRmb3JtOiAnd2luJywgJ2xpbnV4JyBvciAnbWFjJy4gRGVmYXVsdHMgdG8KLSAg
ICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCi0gICAgICAgYWxsX2Jhc2VsaW5l
czogSWYgVHJ1ZSwgcmV0dXJuIGFuIG9yZGVyZWQgbGlzdCBvZiBhbGwgYmFzZWxpbmUgcGF0aHMK
LSAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGdpdmVuIHBsYXRmb3JtLiBJZiBGYWxzZSwg
cmV0dXJuIG9ubHkgdGhlIGZpcnN0Ci0gICAgICAgICAgICAgICAgICAgICAgb25lLgotICAgIFJl
dHVybnMKLSAgICAgICBhIGxpc3Qgb2YgKCBwbGF0Zm9ybV9kaXIsIHJlc3VsdHNfZmlsZW5hbWUg
KSwgd2hlcmUKLSAgICAgICAgIHBsYXRmb3JtX2RpciAtIGFicyBwYXRoIHRvIHRoZSB0b3Agb2Yg
dGhlIHJlc3VsdHMgdHJlZSAob3IgdGVzdCB0cmVlKQotICAgICAgICAgcmVzdWx0c19maWxlbmFt
ZSAtIHJlbGF0aXZlIHBhdGggZnJvbSB0b3Agb2YgdHJlZSB0byB0aGUgcmVzdWx0cyBmaWxlCi0g
ICAgICAgICAgIChvcy5wYXRoLmpvaW4gb2YgdGhlIHR3byBnaXZlcyB5b3UgdGhlIGZ1bGwgcGF0
aCB0byB0aGUgZmlsZSwKLSAgICAgICAgICAgIHVubGVzcyBOb25lIHdhcyByZXR1cm5lZC4pCi0g
ICAgICBSZXR1cm4gdmFsdWVzIHdpbGwgYmUgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0ZSBmb3Ig
dGhlIGN1cnJlbnQgcGxhdGZvcm0KLSAgICAgIChlLmcuLCAiXFwiIGZvciBwYXRoIHNlcGFyYXRv
cnMgb24gV2luZG93cykuIElmIHRoZSByZXN1bHRzIGZpbGUgaXMgbm90Ci0gICAgICBmb3VuZCwg
dGhlbiBOb25lIHdpbGwgYmUgcmV0dXJuZWQgZm9yIHRoZSBkaXJlY3RvcnksIGJ1dCB0aGUgZXhw
ZWN0ZWQKLSAgICAgIHJlbGF0aXZlIHBhdGhuYW1lIHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQuCi0g
ICAgIiIiCi0gICAgZ2xvYmFsIF9iYXNlbGluZV9zZWFyY2hfcGF0aAotICAgIGdsb2JhbCBfc2Vh
cmNoX3BhdGhfcGxhdGZvcm0KLSAgICB0ZXN0bmFtZSA9IG9zLnBhdGguc3BsaXRleHQocmVsYXRp
dmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpWzBdCi0KLSAgICBiYXNlbGluZV9maWxlbmFtZSA9
IHRlc3RuYW1lICsgJy1leHBlY3RlZCcgKyBzdWZmaXgKLQotICAgIGlmIChfYmFzZWxpbmVfc2Vh
cmNoX3BhdGggaXMgTm9uZSkgb3IgKF9zZWFyY2hfcGF0aF9wbGF0Zm9ybSAhPSBwbGF0Zm9ybSk6
Ci0gICAgICAgIF9iYXNlbGluZV9zZWFyY2hfcGF0aCA9IGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBs
YXRmb3JtKQotICAgICAgICBfc2VhcmNoX3BhdGhfcGxhdGZvcm0gPSBwbGF0Zm9ybQotCi0gICAg
YmFzZWxpbmVzID0gW10KLSAgICBmb3IgcGxhdGZvcm1fZGlyIGluIF9iYXNlbGluZV9zZWFyY2hf
cGF0aDoKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBsYXRmb3JtX2Rp
ciwgYmFzZWxpbmVfZmlsZW5hbWUpKToKLSAgICAgICAgICAgIGJhc2VsaW5lcy5hcHBlbmQoKHBs
YXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQotCi0gICAgICAgIGlmIG5vdCBhbGxfYmFz
ZWxpbmVzIGFuZCBiYXNlbGluZXM6Ci0gICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVzCi0KLSAg
ICAjIElmIGl0IHdhc24ndCBmb3VuZCBpbiBhIHBsYXRmb3JtIGRpcmVjdG9yeSwgcmV0dXJuIHRo
ZSBleHBlY3RlZCByZXN1bHQKLSAgICAjIGluIHRoZSB0ZXN0IGRpcmVjdG9yeSwgZXZlbiBpZiBu
byBzdWNoIGZpbGUgYWN0dWFsbHkgZXhpc3RzLgotICAgIHBsYXRmb3JtX2RpciA9IGxheW91dF90
ZXN0c19kaXIoKQotICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwbGF0Zm9ybV9k
aXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSk6Ci0gICAgICAgIGJhc2VsaW5lcy5hcHBlbmQoKHBsYXRm
b3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQotCi0gICAgaWYgYmFzZWxpbmVzOgotICAgICAg
ICByZXR1cm4gYmFzZWxpbmVzCi0KLSAgICByZXR1cm4gWyhOb25lLCBiYXNlbGluZV9maWxlbmFt
ZSldCi0KLQotZGVmIGV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCBzdWZmaXgpOgotICAgICIi
IkdpdmVuIGEgdGVzdCBuYW1lLCByZXR1cm5zIGFuIGFic29sdXRlIHBhdGggdG8gaXRzIGV4cGVj
dGVkIHJlc3VsdHMuCi0KLSAgICBJZiBubyBleHBlY3RlZCByZXN1bHRzIGFyZSBmb3VuZCBpbiBh
bnkgb2YgdGhlIHNlYXJjaGVkIGRpcmVjdG9yaWVzLCB0aGUKLSAgICBkaXJlY3RvcnkgaW4gd2hp
Y2ggdGhlIHRlc3QgaXRzZWxmIGlzIGxvY2F0ZWQgd2lsbCBiZSByZXR1cm5lZC4gVGhlIHJldHVy
bgotICAgIHZhbHVlIGlzIGluIHRoZSBmb3JtYXQgYXBwcm9wcmlhdGUgZm9yIHRoZSBwbGF0Zm9y
bSAoZS5nLiwgIlxcIiBmb3IKLSAgICBwYXRoIHNlcGFyYXRvcnMgb24gd2luZG93cykuCi0KLSAg
ICBBcmdzOgotICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUK
LSAgICAgICBzdWZmaXg6IGZpbGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1bHRzLCBpbmNs
dWRpbmcgZG90OyBlLmcuICcudHh0JwotICAgICAgICAgICBvciAnLnBuZycuICBUaGlzIHNob3Vs
ZCBub3QgYmUgTm9uZSwgYnV0IG1heSBiZSBhbiBlbXB0eSBzdHJpbmcuCi0gICAgICAgcGxhdGZv
cm06IHRoZSBtb3N0LXNwZWNpZmljIGRpcmVjdG9yeSBuYW1lIHRvIHVzZSB0byBidWlsZCB0aGUK
LSAgICAgICAgICAgc2VhcmNoIGxpc3Qgb2YgZGlyZWN0b3JpZXMsIGUuZy4sICdjaHJvbWl1bS13
aW4nLCBvcgotICAgICAgICAgICAnY2hyb21pdW0tbWFjLWxlb3BhcmQnICh3ZSBmb2xsb3cgdGhl
IFdlYktpdCBmb3JtYXQpCi0gICAgIiIiCi0gICAgcGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxl
bmFtZSA9IGV4cGVjdGVkX2Jhc2VsaW5lcyhmaWxlbmFtZSwgc3VmZml4KVswXQotICAgIGlmIHBs
YXRmb3JtX2RpcjoKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwbGF0Zm9ybV9kaXIsIGJh
c2VsaW5lX2ZpbGVuYW1lKQotICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGF5b3V0X3Rlc3RzX2Rp
cigpLCBiYXNlbGluZV9maWxlbmFtZSkKLQotCi1kZWYgcmVsYXRpdmVfdGVzdF9maWxlbmFtZShm
aWxlbmFtZSk6Ci0gICAgIiIiUHJvdmlkZSB0aGUgZmlsZW5hbWUgb2YgdGhlIHRlc3QgcmVsYXRp
dmUgdG8gdGhlIGxheW91dCB0ZXN0cwotICAgIGRpcmVjdG9yeSBhcyBhIHVuaXggc3R5bGUgcGF0
aCAoYS9iL2MpLiIiIgotICAgIHJldHVybiBfd2luX3BhdGhfdG9fdW5peChmaWxlbmFtZVtsZW4o
bGF5b3V0X3Rlc3RzX2RpcigpKSArIDE6XSkKLQotCi1kZWYgX3dpbl9wYXRoX3RvX3VuaXgocGF0
aCk6Ci0gICAgIiIiQ29udmVydCBhIHdpbmRvd3MgcGF0aCB0byB1c2UgdW5peC1zdHlsZSBwYXRo
IHNlcGFyYXRvcnMgKGEvYi9jKS4iIiIKLSAgICByZXR1cm4gcGF0aC5yZXBsYWNlKCdcXCcsICcv
JykKLQotIwotIyBSb3V0aW5lcyB0aGF0IGFyZSBhcmd1YWJseSBwbGF0Zm9ybS1zcGVjaWZpYyBi
dXQgaGF2ZSBiZWVuIG1hZGUKLSMgZ2VuZXJpYyBmb3Igbm93ICh0aGV5IHVzZWQgdG8gYmUgaW4g
cGxhdGZvcm1fdXRpbHNfKikKLSMKLQotCi1kZWYgZmlsZW5hbWVfdG9fdXJpKGZ1bGxfcGF0aCk6
Ci0gICAgIiIiQ29udmVydCBhIHRlc3QgZmlsZSB0byBhIFVSSS4iIiIKLSAgICBMQVlPVVRURVNU
X0hUVFBfRElSID0gImh0dHAvdGVzdHMvIgotICAgIExBWU9VVFRFU1RfV0VCU09DS0VUX0RJUiA9
ICJ3ZWJzb2NrZXQvdGVzdHMvIgotCi0gICAgcmVsYXRpdmVfcGF0aCA9IF93aW5fcGF0aF90b191
bml4KHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZnVsbF9wYXRoKSkKLSAgICBwb3J0ID0gTm9uZQot
ICAgIHVzZV9zc2wgPSBGYWxzZQotCi0gICAgaWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKExB
WU9VVFRFU1RfSFRUUF9ESVIpOgotICAgICAgICAjIGh0dHAvdGVzdHMvIHJ1biBvZmYgcG9ydCA4
MDAwIGFuZCBzc2wvIG9mZiA4NDQzCi0gICAgICAgIHJlbGF0aXZlX3BhdGggPSByZWxhdGl2ZV9w
YXRoW2xlbihMQVlPVVRURVNUX0hUVFBfRElSKTpdCi0gICAgICAgIHBvcnQgPSA4MDAwCi0gICAg
ZWxpZiByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoTEFZT1VUVEVTVF9XRUJTT0NLRVRfRElSKToK
LSAgICAgICAgIyB3ZWJzb2NrZXQvdGVzdHMvIHJ1biBvZmYgcG9ydCA4ODgwIGFuZCA5MzIzCi0g
ICAgICAgICMgTm90ZTogdGhlIHJvb3QgaXMgLywgbm90IHdlYnNvY2tldC90ZXN0cy8KLSAgICAg
ICAgcG9ydCA9IDg4ODAKLQotICAgICMgTWFrZSBodHRwL3Rlc3RzL2xvY2FsIHJ1biBhcyBsb2Nh
bCBmaWxlcy4gVGhpcyBpcyB0byBtaW1pYyB0aGUKLSAgICAjIGxvZ2ljIGluIHJ1bi13ZWJraXQt
dGVzdHMuCi0gICAgIyBUT0RPKGppYW5saSk6IENvbnNpZGVyIGV4dGVuZGluZyB0aGlzIHRvICJt
ZWRpYS8iLgotICAgIGlmIHBvcnQgYW5kIG5vdCByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoImxv
Y2FsLyIpOgotICAgICAgICBpZiByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoInNzbC8iKToKLSAg
ICAgICAgICAgIHBvcnQgKz0gNDQzCi0gICAgICAgICAgICBwcm90b2NvbCA9ICJodHRwcyIKLSAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIHByb3RvY29sID0gImh0dHAiCi0gICAgICAgIHJldHVy
biAiJXM6Ly8xMjcuMC4wLjE6JXUvJXMiICUgKHByb3RvY29sLCBwb3J0LCByZWxhdGl2ZV9wYXRo
KQotCi0gICAgaWYgc3lzLnBsYXRmb3JtIGluICgnY3lnd2luJywgJ3dpbjMyJyk6Ci0gICAgICAg
IHJldHVybiAiZmlsZTovLy8iICsgZ2V0X2Fic29sdXRlX3BhdGgoZnVsbF9wYXRoKQotICAgIHJl
dHVybiAiZmlsZTovLyIgKyBnZXRfYWJzb2x1dGVfcGF0aChmdWxsX3BhdGgpCi0KLQotZGVmIGdl
dF9hYnNvbHV0ZV9wYXRoKHBhdGgpOgotICAgICIiIlJldHVybnMgYW4gYWJzb2x1dGUgVU5JWCBw
YXRoLiIiIgotICAgIHJldHVybiBfd2luX3BhdGhfdG9fdW5peChvcy5wYXRoLmFic3BhdGgocGF0
aCkpCi0KLQotZGVmIG1heWJlX21ha2VfZGlyZWN0b3J5KCpwYXRoKToKLSAgICAiIiJDcmVhdGVz
IHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4iIiIK
LSAgICB0cnk6Ci0gICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbigqcGF0aCkpCi0gICAg
ZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgot
ICAgICAgICAgICAgcmFpc2UKLQotCi1kZWYgcGF0aF9mcm9tX2Jhc2UoKmNvbXBzKToKLSAgICAi
IiJSZXR1cm5zIGFuIGFic29sdXRlIGZpbGVuYW1lIGZyb20gYSBzZXQgb2YgY29tcG9uZW50cyBz
cGVjaWZpZWQKLSAgICByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4gSWYg
dGhlIHBhdGggZG9lcyBub3QgZXhpc3QsCi0gICAgdGhlIGV4Y2VwdGlvbiBQYXRoTm90Rm91bmQg
aXMgcmFpc2VkLiIiIgotICAgIGdsb2JhbCBfYmFzZWRpcgotICAgIGlmIF9iYXNlZGlyID09IE5v
bmU6Ci0gICAgICAgICMgV2UgY29tcHV0ZSB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSBieSBm
aW5kaW5nIHRoZSBhYnNvbHV0ZQotICAgICAgICAjIHBhdGggb2YgdGhpcyBzb3VyY2UgZmlsZSwg
YW5kIHRoZW4gY2xpbWJpbmcgdXAgdGhyZWUgZGlyZWN0b3JpZXMKLSAgICAgICAgIyBhcyBnaXZl
biBpbiBzdWJwYXRoLiBJZiB3ZSBtb3ZlIHRoaXMgZmlsZSwgc3VicGF0aCBuZWVkcyB0byBiZQot
ICAgICAgICAjIHVwZGF0ZWQuCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmFic3BhdGgoX19maWxl
X18pCi0gICAgICAgIHN1YnBhdGggPSBvcy5wYXRoLmpvaW4oJ3RoaXJkX3BhcnR5JywgJ1dlYktp
dCcpCi0gICAgICAgIF9iYXNlZGlyID0gcGF0aFs6cGF0aC5pbmRleChzdWJwYXRoKV0KLSAgICBw
YXRoID0gb3MucGF0aC5qb2luKF9iYXNlZGlyLCAqY29tcHMpCi0gICAgaWYgbm90IG9zLnBhdGgu
ZXhpc3RzKHBhdGgpOgotICAgICAgICByYWlzZSBQYXRoTm90Rm91bmQoJ2NvdWxkIG5vdCBmaW5k
ICVzJyAlIChwYXRoKSkKLSAgICByZXR1cm4gcGF0aAotCi0KLWRlZiByZW1vdmVfZGlyZWN0b3J5
KCpwYXRoKToKLSAgICAiIiJSZWN1cnNpdmVseSByZW1vdmVzIGEgZGlyZWN0b3J5LCBldmVuIGlm
IGl0J3MgbWFya2VkIHJlYWQtb25seS4KLQotICAgIFJlbW92ZSB0aGUgZGlyZWN0b3J5IGxvY2F0
ZWQgYXQgKnBhdGgsIGlmIGl0IGV4aXN0cy4KLQotICAgIHNodXRpbC5ybXRyZWUoKSBkb2Vzbid0
IHdvcmsgb24gV2luZG93cyBpZiBhbnkgb2YgdGhlIGZpbGVzIG9yIGRpcmVjdG9yaWVzCi0gICAg
YXJlIHJlYWQtb25seSwgd2hpY2ggc3ZuIHJlcG9zaXRvcmllcyBhbmQgc29tZSAuc3ZuIGZpbGVz
IGFyZS4gIFdlIG5lZWQgdG8KLSAgICBiZSBhYmxlIHRvIGZvcmNlIHRoZSBmaWxlcyB0byBiZSB3
cml0YWJsZSAoaS5lLiwgZGVsZXRhYmxlKSBhcyB3ZSB0cmF2ZXJzZQotICAgIHRoZSB0cmVlLgot
Ci0gICAgRXZlbiB3aXRoIGFsbCB0aGlzLCBXaW5kb3dzIHN0aWxsIHNvbWV0aW1lcyBmYWlscyB0
byBkZWxldGUgYSBmaWxlLCBjaXRpbmcKLSAgICBhIHBlcm1pc3Npb24gZXJyb3IgKG1heWJlIHNv
bWV0aGluZyB0byBkbyB3aXRoIGFudGl2aXJ1cyBzY2FucyBvciBkaXNrCi0gICAgaW5kZXhpbmcp
LiAgVGhlIGJlc3Qgc3VnZ2VzdGlvbiBhbnkgb2YgdGhlIHVzZXIgZm9ydW1zIGhhZCB3YXMgdG8g
d2FpdCBhCi0gICAgYml0IGFuZCB0cnkgYWdhaW4sIHNvIHdlIGRvIHRoYXQgdG9vLiAgSXQncyBo
YW5kLXdhdmluZywgYnV0IHNvbWV0aW1lcyBpdAotICAgIHdvcmtzLiA6LwotICAgICIiIgotICAg
IGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbigqcGF0aCkKLSAgICBpZiBub3Qgb3MucGF0aC5leGlz
dHMoZmlsZV9wYXRoKToKLSAgICAgICAgcmV0dXJuCi0KLSAgICB3aW4zMiA9IEZhbHNlCi0gICAg
aWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgIHdpbjMyID0gVHJ1ZQotICAgICAg
ICAjIFNvbWUgcGVvcGxlIGRvbid0IGhhdmUgdGhlIEFQSXMgaW5zdGFsbGVkLiBJbiB0aGF0IGNh
c2Ugd2UnbGwgZG8KLSAgICAgICAgIyB3aXRob3V0LgotICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICB3aW4zMmFwaSA9IF9faW1wb3J0X18oJ3dpbjMyYXBpJykKLSAgICAgICAgICAgIHdpbjMyY29u
ID0gX19pbXBvcnRfXygnd2luMzJjb24nKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0g
ICAgICAgICAgICB3aW4zMiA9IEZhbHNlCi0KLSAgICAgICAgZGVmIHJlbW92ZV93aXRoX3JldHJ5
KHJtZnVuYywgcGF0aCk6Ci0gICAgICAgICAgICBvcy5jaG1vZChwYXRoLCBzdGF0LlNfSVdSSVRF
KQotICAgICAgICAgICAgaWYgd2luMzI6Ci0gICAgICAgICAgICAgICAgd2luMzJhcGkuU2V0Rmls
ZUF0dHJpYnV0ZXMocGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aW4zMmNvbi5GSUxFX0FUVFJJQlVURV9OT1JNQUwpCi0gICAgICAgICAgICB0cnk6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJtZnVuYyhwYXRoKQotICAgICAgICAgICAgZXhjZXB0IEVu
dmlyb25tZW50RXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5F
QUNDRVM6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgcHJpbnQg
J0ZhaWxlZCB0byBkZWxldGUgJXM6IHRyeWluZyBhZ2FpbicgJSByZXByKHBhdGgpCi0gICAgICAg
ICAgICAgICAgdGltZS5zbGVlcCgwLjEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJtZnVuYyhw
YXRoKQotICAgIGVsc2U6Ci0KLSAgICAgICAgZGVmIHJlbW92ZV93aXRoX3JldHJ5KHJtZnVuYywg
cGF0aCk6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gb3MucmVtb3ZlKHBhdGgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgIHJldHVybiBybWZ1bmMocGF0aCkKLQotICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBp
biBvcy53YWxrKGZpbGVfcGF0aCwgdG9wZG93bj1GYWxzZSk6Ci0gICAgICAgICMgRm9yIFBPU0lY
OiAgbWFraW5nIHRoZSBkaXJlY3Rvcnkgd3JpdGFibGUgZ3VhcmFudGVlcyByZW1vdmFiaWxpdHku
Ci0gICAgICAgICMgV2luZG93cyB3aWxsIGlnbm9yZSB0aGUgbm9uLXJlYWQtb25seSBiaXRzIGlu
IHRoZSBjaG1vZCB2YWx1ZS4KLSAgICAgICAgb3MuY2htb2Qocm9vdCwgMDc3MCkKLSAgICAgICAg
Zm9yIG5hbWUgaW4gZmlsZXM6Ci0gICAgICAgICAgICByZW1vdmVfd2l0aF9yZXRyeShvcy5yZW1v
dmUsIG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKLSAgICAgICAgZm9yIG5hbWUgaW4gZGlyczoK
LSAgICAgICAgICAgIHJlbW92ZV93aXRoX3JldHJ5KG9zLnJtZGlyLCBvcy5wYXRoLmpvaW4ocm9v
dCwgbmFtZSkpCi0KLSAgICByZW1vdmVfd2l0aF9yZXRyeShvcy5ybWRpciwgZmlsZV9wYXRoKQot
Ci0jCi0jIFdyYXBwZXJzIGFyb3VuZCBwbGF0Zm9ybV91dGlscwotIwotCi0KLWRlZiBwbGF0Zm9y
bV9uYW1lKHBsYXRmb3JtPU5vbmUpOgotICAgICIiIlJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNo
cm9taXVtIHBsYXRmb3JtIG5hbWUgZm9yIHxwbGF0Zm9ybXwuIElmCi0gICAgICAgfHBsYXRmb3Jt
fCBpcyBOb25lLCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjaHJvbWl1bSBwbGF0Zm9ybSBvbiB0
aGUKLSAgICAgICBjdXJyZW50bHkgcnVubmluZyBzeXN0ZW0uIElmIHxwbGF0Zm9ybXwgaXMgb2Yg
dGhlIGZvcm0gJ2Nocm9taXVtLSonLAotICAgICAgIGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZCwg
b3RoZXJ3aXNlICdjaHJvbWl1bS0nIGlzIHByZXBlbmRlZC4iIiIKLSAgICBpZiBwbGF0Zm9ybSA9
PSBOb25lOgotICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMucGxhdGZvcm1fbmFtZSgpCi0g
ICAgaWYgbm90IHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLScpOgotICAgICAgICBwbGF0
Zm9ybSA9ICJjaHJvbWl1bS0iICsgcGxhdGZvcm0KLSAgICByZXR1cm4gcGxhdGZvcm0KLQotCi1k
ZWYgcGxhdGZvcm1fdmVyc2lvbigpOgotICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5wbGF0Zm9y
bV92ZXJzaW9uKCkKLQotCi1kZWYgbGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCk6Ci0gICAgcmV0
dXJuIHBsYXRmb3JtX3V0aWxzLmxpZ2h0dHBkX2V4ZWN1dGFibGVfcGF0aCgpCi0KLQotZGVmIGxp
Z2h0dHBkX21vZHVsZV9wYXRoKCk6Ci0gICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLmxpZ2h0dHBk
X21vZHVsZV9wYXRoKCkKLQotCi1kZWYgbGlnaHR0cGRfcGhwX3BhdGgoKToKLSAgICByZXR1cm4g
cGxhdGZvcm1fdXRpbHMubGlnaHR0cGRfcGhwX3BhdGgoKQotCi0KLWRlZiB3ZGlmZl9wYXRoKCk6
Ci0gICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLndkaWZmX3BhdGgoKQotCi0KLWRlZiB0ZXN0X3No
ZWxsX3BhdGgodGFyZ2V0KToKLSAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMudGVzdF9zaGVsbF9w
YXRoKHRhcmdldCkKLQotCi1kZWYgaW1hZ2VfZGlmZl9wYXRoKHRhcmdldCk6Ci0gICAgcmV0dXJu
IHBsYXRmb3JtX3V0aWxzLmltYWdlX2RpZmZfcGF0aCh0YXJnZXQpCi0KLQotZGVmIGxheW91dF90
ZXN0X2hlbHBlcl9wYXRoKHRhcmdldCk6Ci0gICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLmxheW91
dF90ZXN0X2hlbHBlcl9wYXRoKHRhcmdldCkKLQotCi1kZWYgZnV6enlfbWF0Y2hfcGF0aCgpOgot
ICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5mdXp6eV9tYXRjaF9wYXRoKCkKLQotCi1kZWYgc2h1
dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9waWQpOgotICAgIHJldHVybiBwbGF0Zm9ybV91dGls
cy5zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2VydmVyX3BpZCkKLQotCi1kZWYga2lsbF9hbGxfdGVz
dF9zaGVsbHMoKToKLSAgICBwbGF0Zm9ybV91dGlscy5raWxsX2FsbF90ZXN0X3NoZWxscygpCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9wbGF0Zm9ybV91dGlscy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzLnB5CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmE4MDFjLi4wMDAwMDAwCi0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0
aWxzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0
aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotIiIiUGxhdGZvcm0tc3BlY2lmaWMgdXRpbGl0aWVzIGFuZCBwc2V1
ZG8tY29uc3RhbnRzCi0KLUFueSBmdW5jdGlvbnMgd2hvc2UgaW1wbGVtZW50YXRpb25zIG9yIHZh
bHVlcyBkaWZmZXIgZnJvbSBvbmUgcGxhdGZvcm0gdG8KLWFub3RoZXIgc2hvdWxkIGJlIGRlZmlu
ZWQgaW4gdGhlaXIgcmVzcGVjdGl2ZSBwbGF0Zm9ybV91dGlsc188cGxhdGZvcm0+LnB5Ci1tb2R1
bGVzLiBUaGUgYXBwcm9wcmlhdGUgb25lIG9mIHRob3NlIHdpbGwgYmUgaW1wb3J0ZWQgaW50byB0
aGlzIG1vZHVsZSB0bwotcHJvdmlkZSBjYWxsZXJzIHdpdGggYSBjb21tb24sIHBsYXRmb3JtLWlu
ZGVwZW5kZW50IGludGVyZmFjZS4KLQotVGhpcyBmaWxlIHNob3VsZCBvbmx5IGV2ZXIgYmUgaW1w
b3J0ZWQgYnkgbGF5b3V0X3BhY2thZ2UucGF0aF91dGlscy4KLSIiIgotCi1pbXBvcnQgc3lzCi0K
LSMgV2UgbWF5IG5vdCBzdXBwb3J0IHRoZSB2ZXJzaW9uIG9mIFB5dGhvbiB0aGF0IGEgdXNlciBo
YXMgaW5zdGFsbGVkIChDeWd3aW4KLSMgZXNwZWNpYWxseSBoYXMgaGFkIHByb2JsZW1zKSwgYnV0
IHdlJ2xsIGFsbG93IHRoZSBwbGF0Zm9ybSB1dGlscyB0byBiZQotIyBpbmNsdWRlZCBpbiBhbnkg
Y2FzZSBzbyB3ZSBkb24ndCBnZXQgYW4gaW1wb3J0IGVycm9yLgotaWYgc3lzLnBsYXRmb3JtIGlu
ICgnY3lnd2luJywgJ3dpbjMyJyk6Ci0gICAgZnJvbSBwbGF0Zm9ybV91dGlsc193aW4gaW1wb3J0
ICoKLWVsaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgIGZyb20gcGxhdGZvcm1fdXRp
bHNfbWFjIGltcG9ydCAqCi1lbGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2xpbnV4JywgJ2xpbnV4Mics
ICdmcmVlYnNkNycsICdvcGVuYnNkNCcpOgotICAgIGZyb20gcGxhdGZvcm1fdXRpbHNfbGludXgg
aW1wb3J0ICoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX2xpbnV4LnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1f
dXRpbHNfbGludXgucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMWM1ZGEuLjAw
MDAwMDAKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbGludXgucHkKKysrIC9kZXYvbnVsbApAQCAtMSwy
NDggKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBD
aHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0j
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0j
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiVGhpcyBp
cyB0aGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIGxheW91dF9wYWNrYWdlLnBsYXRmb3Jt
X3V0aWxzCi0gICBwYWNrYWdlLiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkg
dGhhdCBwYWNrYWdlLiIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBzaWduYWwKLWltcG9ydCBzdWJw
cm9jZXNzCi1pbXBvcnQgc3lzCi1pbXBvcnQgbG9nZ2luZwotCi1pbXBvcnQgcGF0aF91dGlscwot
aW1wb3J0IHBsYXRmb3JtX3V0aWxzX3dpbgotCi0KLWRlZiBwbGF0Zm9ybV9uYW1lKCk6Ci0gICAg
IiIiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcGxhdGZvcm0gd2UncmUgY3VycmVudGx5IHJ1bm5p
bmcgb24uIiIiCi0gICAgcmV0dXJuICdjaHJvbWl1bS1saW51eCcgKyBwbGF0Zm9ybV92ZXJzaW9u
KCkKLQotCi1kZWYgcGxhdGZvcm1fdmVyc2lvbigpOgotICAgICIiIlJldHVybnMgdGhlIHZlcnNp
b24gc3RyaW5nIGZvciB0aGUgcGxhdGZvcm0sIGUuZy4gJy12aXN0YScgb3IKLSAgICAnLXNub3ds
ZW9wYXJkJy4gSWYgdGhlIHBsYXRmb3JtIGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4KLSAg
ICBtaW5vciB2ZXJzaW9ucywgaXQgcmV0dXJucyAnJy4iIiIKLSAgICByZXR1cm4gJycKLQotCi1k
ZWYgZ2V0X251bV9jb3JlcygpOgotICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBjb3JlcyBv
biB0aGUgbWFjaGluZS4gRm9yIGh5cGVydGhyZWFkZWQgbWFjaGluZXMsCi0gICAgdGhpcyB3aWxs
IGJlIGRvdWJsZSB0aGUgbnVtYmVyIG9mIGFjdHVhbCBwcm9jZXNzb3JzLiIiIgotICAgIG51bV9j
b3JlcyA9IG9zLnN5c2NvbmYoIlNDX05QUk9DRVNTT1JTX09OTE4iKQotICAgIGlmIGlzaW5zdGFu
Y2UobnVtX2NvcmVzLCBpbnQpIGFuZCBudW1fY29yZXMgPiAwOgotICAgICAgICByZXR1cm4gbnVt
X2NvcmVzCi0gICAgcmV0dXJuIDEKLQotCi1kZWYgYmFzZWxpbmVfcGF0aChwbGF0Zm9ybT1Ob25l
KToKLSAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNv
dXJjZSB0cmVlIGZvciB0aGUKLSAgICBiYXNlbGluZXMgZm9yIHRoZSBzcGVjaWZpZWQgcGxhdGZv
cm0gdmVyc2lvbi4gSWYgfHBsYXRmb3JtfCBpcyBOb25lLAotICAgIHRoZW4gdGhlIHZlcnNpb24g
Y3VycmVudGx5IGluIHVzZSBpcyB1c2VkLiIiIgotICAgIGlmIHBsYXRmb3JtIGlzIE5vbmU6Ci0g
ICAgICAgIHBsYXRmb3JtID0gcGxhdGZvcm1fbmFtZSgpCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMu
cGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICdkYXRhJywgJ2xheW91dF90ZXN0cycsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJywgcGxhdGZvcm0sICdMYXlv
dXRUZXN0cycpCi0KLQotZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtPU5vbmUpOgot
ICAgICIiIlJldHVybnMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBiYXNl
bGluZXMvcmVzdWx0cywgaW4KLSAgICBvcmRlciBvZiBwcmVmZXJlbmNlLiBQYXRocyBhcmUgcmVs
YXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUuIiIiCi0gICAgcmV0dXJuIFtiYXNl
bGluZV9wYXRoKHBsYXRmb3JtKSwKLSAgICAgICAgICAgIHBsYXRmb3JtX3V0aWxzX3dpbi5iYXNl
bGluZV9wYXRoKCdjaHJvbWl1bS13aW4nKSwKLSAgICAgICAgICAgIHBhdGhfdXRpbHMud2Via2l0
X2Jhc2VsaW5lX3BhdGgoJ3dpbicpLAotICAgICAgICAgICAgcGF0aF91dGlscy53ZWJraXRfYmFz
ZWxpbmVfcGF0aCgnbWFjJyldCi0KLQotZGVmIGFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKToKLSAg
ICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBhY2hlIiIiCi0gICAg
cGF0aCA9IG9zLnBhdGguam9pbigiL3VzciIsICJzYmluIiwgImFwYWNoZTIiKQotICAgIGlmIG9z
LnBhdGguZXhpc3RzKHBhdGgpOgotICAgICAgICByZXR1cm4gcGF0aAotICAgIHByaW50ICJVbmFi
bGUgdG8gZmluZSBBcGFjaGUgZXhlY3V0YWJsZSAlcyIgJSBwYXRoCi0gICAgX21pc3NpbmdfYXBh
Y2hlKCkKLQotCi1kZWYgYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5z
IHRoZSBwYXRoIHRvIEFwYWNoZSBjb25maWcgZmlsZSIiIgotICAgIHJldHVybiBwYXRoX3V0aWxz
LnBhdGhfZnJvbV9iYXNlKCJ0aGlyZF9wYXJ0eSIsICJXZWJLaXQiLCAiTGF5b3V0VGVzdHMiLAot
ICAgICAgICAiaHR0cCIsICJjb25mIiwgImFwYWNoZTItZGViaWFuLWh0dHBkLmNvbmYiKQotCi0K
LWRlZiBsaWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBleGVj
dXRhYmxlIHBhdGggdG8gc3RhcnQgTGlnSFRUUGQiIiIKLSAgICBiaW5wYXRoID0gIi91c3Ivc2Jp
bi9saWdodHRwZCIKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhiaW5wYXRoKToKLSAgICAgICAgcmV0
dXJuIGJpbnBhdGgKLSAgICBwcmludCAiVW5hYmxlIHRvIGZpbmQgTGlnSFRUUGQgZXhlY3V0YWJs
ZSAlcyIgJSBiaW5wYXRoCi0gICAgX21pc3NpbmdfbGlnaHR0cGQoKQotCi0KLWRlZiBsaWdodHRw
ZF9tb2R1bGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxlIHBhdGgg
Zm9yIExpZ0hUVFBkIiIiCi0gICAgbW9kcGF0aCA9ICIvdXNyL2xpYi9saWdodHRwZCIKLSAgICBp
ZiBvcy5wYXRoLmV4aXN0cyhtb2RwYXRoKToKLSAgICAgICAgcmV0dXJuIG1vZHBhdGgKLSAgICBw
cmludCAiVW5hYmxlIHRvIGZpbmQgTGlnSFRUUGQgbW9kdWxlcyAlcyIgJSBtb2RwYXRoCi0gICAg
X21pc3NpbmdfbGlnaHR0cGQoKQotCi0KLWRlZiBsaWdodHRwZF9waHBfcGF0aCgpOgotICAgICIi
IlJldHVybnMgdGhlIFBIUCBleGVjdXRhYmxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCi0gICAgYmlu
cGF0aCA9ICIvdXNyL2Jpbi9waHAtY2dpIgotICAgIGlmIG9zLnBhdGguZXhpc3RzKGJpbnBhdGgp
OgotICAgICAgICByZXR1cm4gYmlucGF0aAotICAgIHByaW50ICJVbmFibGUgdG8gZmluZCBQSFAg
Q0dJIGV4ZWN1dGFibGUgJXMiICUgYmlucGF0aAotICAgIF9taXNzaW5nX2xpZ2h0dHBkKCkKLQot
Ci1kZWYgd2RpZmZfcGF0aCgpOgotICAgICIiIlBhdGggdG8gdGhlIFdEaWZmIGV4ZWN1dGFibGUs
IHdoaWNoIHdlIGFzc3VtZSBpcyBhbHJlYWR5IGluc3RhbGxlZCBhbmQKLSAgICBpbiB0aGUgdXNl
cidzICRQQVRILiIiIgotICAgIHJldHVybiAnd2RpZmYnCi0KLQotZGVmIGltYWdlX2RpZmZfcGF0
aCh0YXJnZXQpOgotICAgICIiIlBhdGggdG8gdGhlIGltYWdlX2RpZmYgYmluYXJ5LgotCi0gICAg
QXJnczoKLSAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2Up
IiIiCi0gICAgcmV0dXJuIF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cyh0YXJnZXQsICdpbWFnZV9k
aWZmJykKLQotCi1kZWYgbGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgodGFyZ2V0KToKLSAgICAiIiJQ
YXRoIHRvIHRoZSBsYXlvdXRfdGVzdCBoZWxwZXIgYmluYXJ5LCBpZiBuZWVkZWQsIGVtcHR5IG90
aGVyd2lzZSIiIgotICAgIHJldHVybiAnJwotCi0KLWRlZiB0ZXN0X3NoZWxsX3BhdGgodGFyZ2V0
KToKLSAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRoIGZvciBv
dXIgVGVzdFNoZWxsLgotCi0gICAgQXJnczoKLSAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1v
ZGUgKGRlYnVnIG9yIHJlbGVhc2UpICIiIgotICAgIGlmIHRhcmdldCBpbiAoJ0RlYnVnJywgJ1Jl
bGVhc2UnKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVidWdfcGF0aCA9IF9wYXRoX2Zy
b21fYnVpbGRfcmVzdWx0cygnRGVidWcnLCAndGVzdF9zaGVsbCcpCi0gICAgICAgICAgICByZWxl
YXNlX3BhdGggPSBfcGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHMoJ1JlbGVhc2UnLCAndGVzdF9zaGVs
bCcpCi0KLSAgICAgICAgICAgIGRlYnVnX210aW1lID0gb3Muc3RhdChkZWJ1Z19wYXRoKS5zdF9t
dGltZQotICAgICAgICAgICAgcmVsZWFzZV9tdGltZSA9IG9zLnN0YXQocmVsZWFzZV9wYXRoKS5z
dF9tdGltZQotCi0gICAgICAgICAgICBpZiBkZWJ1Z19tdGltZSA+IHJlbGVhc2VfbXRpbWUgYW5k
IHRhcmdldCA9PSAnUmVsZWFzZScgb3IgXAotICAgICAgICAgICAgICAgcmVsZWFzZV9tdGltZSA+
IGRlYnVnX210aW1lIGFuZCB0YXJnZXQgPT0gJ0RlYnVnJzoKLSAgICAgICAgICAgICAgICBsb2dn
aW5nLmluZm8oJ1x4MWJbMzFtV2FybmluZzogeW91IGFyZSBub3QgcnVubmluZyB0aGUgbW9zdCAn
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWNlbnQgdGVzdF9zaGVsbCBiaW5hcnku
IFlvdSBuZWVkIHRvIHBhc3MgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1kZWJ1
ZyBvciBub3QgdG8gc2VsZWN0IGJldHdlZW4gRGVidWcgYW5kICcKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ1JlbGVhc2UuXHgxYlswbScpCi0gICAgICAgICMgVGhpcyB3aWxsIGZhaWwg
aWYgd2UgZG9uJ3QgaGF2ZSBib3RoIGEgZGVidWcgYW5kIHJlbGVhc2UgYmluYXJ5LgotICAgICAg
ICAjIFRoYXQncyBmaW5lIGJlY2F1c2UsIGluIHRoaXMgY2FzZSwgd2UgbXVzdCBhbHJlYWR5IGJl
IHJ1bm5pbmcgdGhlCi0gICAgICAgICMgbW9zdCB1cC10by1kYXRlIG9uZS4KLSAgICAgICAgZXhj
ZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgotICAgICAgICAgICAgcGFzcwotCi0gICAgcmV0
dXJuIF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cyh0YXJnZXQsICd0ZXN0X3NoZWxsJykKLQotCi1k
ZWYgZnV6enlfbWF0Y2hfcGF0aCgpOgotICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgZnV6
enkgbWF0Y2hlciBiaW5hcnkuIiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jh
c2UoJ3RoaXJkX3BhcnR5JywgJ2Z1enp5bWF0Y2gnLCAnZnV6enltYXRjaCcpCi0KLQotZGVmIHNo
dXRfZG93bl9odHRwX3NlcnZlcihzZXJ2ZXJfcGlkKToKLSAgICAiIiJTaHV0IGRvd24gdGhlIGxp
Z2h0dHBkIHdlYiBzZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1bGx5IHNodXQgZG93bi4KLQot
ICAgIEFyZ3M6Ci0gICAgICBzZXJ2ZXJfcGlkOiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgcnVubmlu
ZyBzZXJ2ZXIuCi0gICAgIiIiCi0gICAgIyBzZXJ2ZXJfcGlkIGlzIG5vdCBzZXQgd2hlbiAiaHR0
cF9zZXJ2ZXIucHkgc3RvcCIgaXMgcnVuIG1hbnVhbGx5LgotICAgIGlmIHNlcnZlcl9waWQgaXMg
Tm9uZToKLSAgICAgICAgIyBUaGlzIGlzbid0IGlkZWFsLCBzaW5jZSBpdCBjb3VsZCBjb25mbGlj
dCB3aXRoIHdlYiBzZXJ2ZXIgcHJvY2Vzc2VzCi0gICAgICAgICMgbm90IHN0YXJ0ZWQgYnkgaHR0
cF9zZXJ2ZXIucHksIGJ1dCBnb29kIGVub3VnaCBmb3Igbm93LgotICAgICAgICBraWxsX2FsbF9w
cm9jZXNzKCdsaWdodHRwZCcpCi0gICAgICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ2FwYWNoZTInKQot
ICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLmtpbGwoc2VydmVyX3BpZCwg
c2lnbmFsLlNJR1RFUk0pCi0gICAgICAgICAgICAjVE9ETyhtbW9zcykgTWF5YmUgdGhyb3cgaW4g
YSBTSUdLSUxMIGp1c3QgdG8gYmUgc3VyZT8KLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAg
ICAgICAgICAjIFNvbWV0aW1lcyB3ZSBnZXQgYSBiYWQgUElEIChlLmcuIGZyb20gYSBzdGFsZSBo
dHRwZC5waWQgZmlsZSksCi0gICAgICAgICAgICAjIHNvIGlmIGtpbGwgZmFpbHMgb24gdGhlIGdp
dmVuIFBJRCwganVzdCB0cnkgdG8gJ2tpbGxhbGwnIHdlYgotICAgICAgICAgICAgIyBzZXJ2ZXJz
LgotICAgICAgICAgICAgc2h1dF9kb3duX2h0dHBfc2VydmVyKE5vbmUpCi0KLQotZGVmIGtpbGxf
cHJvY2VzcyhwaWQpOgotICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KLQotICAg
IEFyZ3M6Ci0gICAgICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCi0g
ICAgIiIiCi0gICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQotCi0KLWRlZiBraWxsX2Fs
bF9wcm9jZXNzKHByb2Nlc3NfbmFtZSk6Ci0gICAgbnVsbCA9IG9wZW4ob3MuZGV2bnVsbCkKLSAg
ICBzdWJwcm9jZXNzLmNhbGwoWydraWxsYWxsJywgJy1URVJNJywgJy11Jywgb3MuZ2V0ZW52KCdV
U0VSJyksCi0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1udWxsKQot
ICAgIG51bGwuY2xvc2UoKQotCi0KLWRlZiBraWxsX2FsbF90ZXN0X3NoZWxscygpOgotICAgICIi
IktpbGxzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHRlc3Rfc2hlbGwgYmluYXJ5IGN1cnJlbnRseSBy
dW5uaW5nLiIiIgotICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ3Rlc3Rfc2hlbGwnKQotCi0jCi0jIFBy
aXZhdGUgaGVscGVyIGZ1bmN0aW9ucwotIwotCi0KLWRlZiBfbWlzc2luZ19saWdodHRwZCgpOgot
ICAgIHByaW50ICdQbGVhc2UgaW5zdGFsbCB1c2luZzogInN1ZG8gYXB0LWdldCBpbnN0YWxsIGxp
Z2h0dHBkIHBocDUtY2dpIicKLSAgICBwcmludCAnRm9yIGNvbXBsZXRlIExpbnV4IGJ1aWxkIHJl
cXVpcmVtZW50cywgcGxlYXNlIHNlZTonCi0gICAgcHJpbnQgJ2h0dHA6Ly9jb2RlLmdvb2dsZS5j
b20vcC9jaHJvbWl1bS93aWtpL0xpbnV4QnVpbGRJbnN0cnVjdGlvbnMnCi0gICAgc3lzLmV4aXQo
MSkKLQotCi1kZWYgX21pc3NpbmdfYXBhY2hlKCk6Ci0gICAgcHJpbnQgKCdQbGVhc2UgaW5zdGFs
bCB1c2luZzogInN1ZG8gYXB0LWdldCBpbnN0YWxsIGFwYWNoZTIgJwotICAgICAgICAnbGliYXBh
Y2hlMi1tb2QtcGhwNSInKQotICAgIHByaW50ICdGb3IgY29tcGxldGUgTGludXggYnVpbGQgcmVx
dWlyZW1lbnRzLCBwbGVhc2Ugc2VlOicKLSAgICBwcmludCAnaHR0cDovL2NvZGUuZ29vZ2xlLmNv
bS9wL2Nocm9taXVtL3dpa2kvTGludXhCdWlsZEluc3RydWN0aW9ucycKLSAgICBzeXMuZXhpdCgx
KQotCi0KLWRlZiBfcGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHMoKnBhdGhpZXMpOgotICAgICMgRklY
TUUoZGtlZ2VsKTogdXNlIGxhdGVzdCBvciB3YXJuIGlmIG1vcmUgdGhhbiBvbmUgZm91bmQ/Ci0g
ICAgZm9yIGRpciBpbiBbInNjb25zYnVpbGQiLCAib3V0IiwgInhjb2RlYnVpbGQiXToKLSAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoZGly
LCAqcGF0aGllcykKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotICAgIHJhaXNl
IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kKCJVbmFibGUgdG8gZmluZCAlcyBpbiBidWlsZCB0cmVl
IiAlCi0gICAgICAgIChvcy5wYXRoLmpvaW4oKnBhdGhpZXMpKSkKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRm
b3JtX3V0aWxzX21hYy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX21hYy5weQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzhjMjIxZS4uMDAwMDAwMAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19tYWMu
cHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
Ci0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
IwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9u
LgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotIiIiVGhpcyBpcyB0aGUgTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBs
YXlvdXRfcGFja2FnZS5wbGF0Zm9ybV91dGlscwotICAgcGFja2FnZS4gVGhpcyBmaWxlIHNob3Vs
ZCBvbmx5IGJlIGltcG9ydGVkIGJ5IHRoYXQgcGFja2FnZS4iIiIKLQotaW1wb3J0IG9zCi1pbXBv
cnQgcGxhdGZvcm0KLWltcG9ydCBzaWduYWwKLWltcG9ydCBzdWJwcm9jZXNzCi0KLWltcG9ydCBw
YXRoX3V0aWxzCi0KLQotZGVmIHBsYXRmb3JtX25hbWUoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBu
YW1lIG9mIHRoZSBwbGF0Zm9ybSB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBvbi4iIiIKLSAgICAj
IEF0IHRoZSBtb21lbnQgYWxsIGNocm9taXVtIG1hYyByZXN1bHRzIGFyZSB2ZXJzaW9uLWluZGVw
ZW5kZW50LiBBdCBzb21lCi0gICAgIyBwb2ludCB3ZSBtYXkgbmVlZCB0byByZXR1cm4gJ2Nocm9t
aXVtLW1hYycgKyBQbGF0Zm9ybVZlcnNpb24oKQotICAgIHJldHVybiAnY2hyb21pdW0tbWFjJwot
Ci0KLWRlZiBwbGF0Zm9ybV92ZXJzaW9uKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgdmVyc2lvbiBz
dHJpbmcgZm9yIHRoZSBwbGF0Zm9ybSwgZS5nLiAnLXZpc3RhJyBvcgotICAgICctc25vd2xlb3Bh
cmQnLiBJZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbgotICAgIG1p
bm9yIHZlcnNpb25zLCBpdCByZXR1cm5zICcnLiIiIgotICAgIG9zX3ZlcnNpb25fc3RyaW5nID0g
cGxhdGZvcm0ubWFjX3ZlcigpWzBdICAjIGUuZy4gIjEwLjUuNiIKLSAgICBpZiBub3Qgb3NfdmVy
c2lvbl9zdHJpbmc6Ci0gICAgICAgIHJldHVybiAnLWxlb3BhcmQnCi0KLSAgICByZWxlYXNlX3Zl
cnNpb24gPSBpbnQob3NfdmVyc2lvbl9zdHJpbmcuc3BsaXQoJy4nKVsxXSkKLQotICAgICMgd2Ug
ZG9uJ3Qgc3VwcG9ydCAndGlnZXInIG9yIGVhcmxpZXIgcmVsZWFzZXMKLSAgICBpZiByZWxlYXNl
X3ZlcnNpb24gPT0gNToKLSAgICAgICAgcmV0dXJuICctbGVvcGFyZCcKLSAgICBlbGlmIHJlbGVh
c2VfdmVyc2lvbiA9PSA2OgotICAgICAgICByZXR1cm4gJy1zbm93bGVvcGFyZCcKLQotICAgIHJl
dHVybiAnJwotCi0KLWRlZiBnZXRfbnVtX2NvcmVzKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbnVt
YmVyIG9mIGNvcmVzIG9uIHRoZSBtYWNoaW5lLiBGb3IgaHlwZXJ0aHJlYWRlZCBtYWNoaW5lcywK
LSAgICB0aGlzIHdpbGwgYmUgZG91YmxlIHRoZSBudW1iZXIgb2YgYWN0dWFsIHByb2Nlc3NvcnMu
IiIiCi0gICAgcmV0dXJuIGludChvcy5wb3BlbjIoInN5c2N0bCAtbiBody5uY3B1IilbMV0ucmVh
ZCgpKQotCi0KLWRlZiBiYXNlbGluZV9wYXRoKHBsYXRmb3JtPU5vbmUpOgotICAgICIiIlJldHVy
bnMgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUgZm9yIHRo
ZQotICAgIGJhc2VsaW5lcyBmb3IgdGhlIHNwZWNpZmllZCBwbGF0Zm9ybSB2ZXJzaW9uLiBJZiB8
cGxhdGZvcm18IGlzIE5vbmUsCi0gICAgdGhlbiB0aGUgdmVyc2lvbiBjdXJyZW50bHkgaW4gdXNl
IGlzIHVzZWQuIiIiCi0gICAgaWYgcGxhdGZvcm0gaXMgTm9uZToKLSAgICAgICAgcGxhdGZvcm0g
PSBwbGF0Zm9ybV9uYW1lKCkKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgn
d2Via2l0JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAncGxhdGZvcm0nLCBwbGF0Zm9ybSwgJ0xheW91dFRlc3RzJykKLQotIyBU
T0RPOiBXZSBzaG91bGQgYWRkIGxlb3BhcmQgYW5kIHNub3dsZW9wYXJkIHRvIHRoZSBsaXN0IG9m
IHBhdGhzIHRvIGNoZWNrCi0jIG9uY2Ugd2Ugc3RhcnQgcnVubmluZyB0aGUgdGVzdHMgZnJvbSBz
bm93bGVvcGFyZC4KLQotCi1kZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm09Tm9uZSk6
Ci0gICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGJh
c2VsaW5lcy9yZXN1bHRzLCBpbgotICAgIG9yZGVyIG9mIHByZWZlcmVuY2UuIFBhdGhzIGFyZSBy
ZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4iIiIKLSAgICByZXR1cm4gW2Jh
c2VsaW5lX3BhdGgocGxhdGZvcm0pLAotICAgICAgICAgICAgcGF0aF91dGlscy53ZWJraXRfYmFz
ZWxpbmVfcGF0aCgnbWFjJyArIHBsYXRmb3JtX3ZlcnNpb24oKSksCi0gICAgICAgICAgICBwYXRo
X3V0aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnKV0KLQotCi1kZWYgd2RpZmZfcGF0aCgp
OgotICAgICIiIlBhdGggdG8gdGhlIFdEaWZmIGV4ZWN1dGFibGUsIHdoaWNoIHdlIGFzc3VtZSBp
cyBhbHJlYWR5IGluc3RhbGxlZCBhbmQKLSAgICBpbiB0aGUgdXNlcidzICRQQVRILiIiIgotICAg
IHJldHVybiAnd2RpZmYnCi0KLQotZGVmIGltYWdlX2RpZmZfcGF0aCh0YXJnZXQpOgotICAgICIi
IlBhdGggdG8gdGhlIGltYWdlX2RpZmYgZXhlY3V0YWJsZQotCi0gICAgQXJnczoKLSAgICAgIHRh
cmdldDogYnVpbGQgdHlwZSAtICdEZWJ1ZycsJ1JlbGVhc2UnLGV0Yy4iIiIKLSAgICByZXR1cm4g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgneGNvZGVidWlsZCcsIHRhcmdldCwgJ2ltYWdlX2Rp
ZmYnKQotCi0KLWRlZiBsYXlvdXRfdGVzdF9oZWxwZXJfcGF0aCh0YXJnZXQpOgotICAgICIiIlBh
dGggdG8gdGhlIGxheW91dF90ZXN0X2hlbHBlciBleGVjdXRhYmxlLCBpZiBuZWVkZWQsIGVtcHR5
IG90aGVyd2lzZQotCi0gICAgQXJnczoKLSAgICAgIHRhcmdldDogYnVpbGQgdHlwZSAtICdEZWJ1
ZycsJ1JlbGVhc2UnLGV0Yy4iIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgneGNvZGVidWlsZCcsIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnbGF5b3V0X3Rlc3RfaGVscGVyJykKLQotCi1kZWYgdGVzdF9zaGVsbF9wYXRoKHRhcmdl
dCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgdGVzdF9zaGVsbCBleGVjdXRhYmxlLgotCi0gICAgQXJn
czoKLSAgICAgIHRhcmdldDogYnVpbGQgdHlwZSAtICdEZWJ1ZycsJ1JlbGVhc2UnLGV0Yy4iIiIK
LSAgICAjIFRPRE8ocGlua2VydG9uKTogbWFrZSB8dGFyZ2V0fCBoYXBweSB3aXRoIGNhc2Utc2Vu
c2l0aXZlIGZpbGUgc3lzdGVtcy4KLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgneGNvZGVidWlsZCcsIHRhcmdldCwgJ1Rlc3RTaGVsbC5hcHAnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50cycsICdNYWNPUycsICdUZXN0U2hlbGwnKQot
Ci0KLWRlZiBhcGFjaGVfZXhlY3V0YWJsZV9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZXhl
Y3V0YWJsZSBwYXRoIHRvIHN0YXJ0IEFwYWNoZSIiIgotICAgIHJldHVybiBvcy5wYXRoLmpvaW4o
Ii91c3IiLCAic2JpbiIsICJodHRwZCIpCi0KLQotZGVmIGFwYWNoZV9jb25maWdfZmlsZV9wYXRo
KCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0byBBcGFjaGUgY29uZmlnIGZpbGUiIiIKLSAg
ICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgidGhpcmRfcGFydHkiLCAiV2ViS2l0
IiwgIkxheW91dFRlc3RzIiwKLSAgICAgICAgImh0dHAiLCAiY29uZiIsICJhcGFjaGUyLWh0dHBk
LmNvbmYiKQotCi0KLWRlZiBsaWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKToKLSAgICAiIiJSZXR1
cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgTGlnSFRUUGQiIiIKLSAgICByZXR1cm4g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQnLCAnbWFj
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmluJywgJ2xpZ2h0dHBk
JykKLQotCi1kZWYgbGlnaHR0cGRfbW9kdWxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBs
aWJyYXJ5IG1vZHVsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgotICAgIHJldHVybiBwYXRoX3V0aWxz
LnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICdtYWMnLCAnbGliJykK
LQotCi1kZWYgbGlnaHR0cGRfcGhwX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBQSFAgZXhl
Y3V0YWJsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhf
ZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICdtYWMnLCAnYmluJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGhwLWNnaScpCi0KLQotZGVmIHNodXRf
ZG93bl9odHRwX3NlcnZlcihzZXJ2ZXJfcGlkKToKLSAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0
dHBkIHdlYiBzZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1bGx5IHNodXQgZG93bi4KLQotICAg
ICAgQXJnczoKLSAgICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5p
bmcgc2VydmVyLgotICAgICIiIgotICAgICMgc2VydmVyX3BpZCBpcyBub3Qgc2V0IHdoZW4gImh0
dHBfc2VydmVyLnB5IHN0b3AiIGlzIHJ1biBtYW51YWxseS4KLSAgICBpZiBzZXJ2ZXJfcGlkIGlz
IE5vbmU6Ci0gICAgICAgICMgVE9ETyhtbW9zcykgVGhpcyBpc24ndCBpZGVhbCwgc2luY2UgaXQg
Y291bGQgY29uZmxpY3Qgd2l0aCBsaWdodHRwZAotICAgICAgICAjIHByb2Nlc3NlcyBub3Qgc3Rh
cnRlZCBieSBodHRwX3NlcnZlci5weSwgYnV0IGdvb2QgZW5vdWdoIGZvciBub3cuCi0gICAgICAg
IGtpbGxfYWxsX3Byb2Nlc3MoJ2xpZ2h0dHBkJykKLSAgICAgICAga2lsbF9hbGxfcHJvY2Vzcygn
aHR0cGQnKQotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLmtpbGwoc2Vy
dmVyX3BpZCwgc2lnbmFsLlNJR1RFUk0pCi0gICAgICAgICAgICAjIFRPRE8obW1vc3MpIE1heWJl
IHRocm93IGluIGEgU0lHS0lMTCBqdXN0IHRvIGJlIHN1cmU/Ci0gICAgICAgIGV4Y2VwdCBPU0Vy
cm9yOgotICAgICAgICAgICAgIyBTb21ldGltZXMgd2UgZ2V0IGEgYmFkIFBJRCAoZS5nLiBmcm9t
IGEgc3RhbGUgaHR0cGQucGlkIGZpbGUpLAotICAgICAgICAgICAgIyBzbyBpZiBraWxsIGZhaWxz
IG9uIHRoZSBnaXZlbiBQSUQsIGp1c3QgdHJ5IHRvICdraWxsYWxsJyB3ZWIKLSAgICAgICAgICAg
ICMgc2VydmVycy4KLSAgICAgICAgICAgIHNodXRfZG93bl9odHRwX3NlcnZlcihOb25lKQotCi0K
LWRlZiBraWxsX3Byb2Nlc3MocGlkKToKLSAgICAiIiJGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nl
c3MuCi0KLSAgICBBcmdzOgotICAgICAgcGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUg
a2lsbGVkLgotICAgICIiIgotICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKLQotCi1k
ZWYga2lsbF9hbGxfcHJvY2Vzcyhwcm9jZXNzX25hbWUpOgotICAgICMgT24gTWFjIE9TIFggMTAu
Niwga2lsbGFsbCBoYXMgYSBuZXcgY29uc3RyYWludDogLVNJR05BTE5BTUUgb3IKLSAgICAjIC1T
SUdOQUxOVU1CRVIgbXVzdCBjb21lIGZpcnN0LiAgRXhhbXBsZSBwcm9ibGVtOgotICAgICMgICAk
IGtpbGxhbGwgLXUgJFVTRVIgLVRFUk0gbGlnaHR0cGQKLSAgICAjICAga2lsbGFsbDogaWxsZWdh
bCBvcHRpb24gLS0gVAotICAgICMgVXNlIG9mIHRoZSBlYXJsaWVyIC1URVJNIHBsYWNlbWVudCBp
cyBqdXN0IGZpbmUgb24gMTAuNS4KLSAgICBudWxsID0gb3Blbihvcy5kZXZudWxsKQotICAgIHN1
YnByb2Nlc3MuY2FsbChbJ2tpbGxhbGwnLCAnLVRFUk0nLCAnLXUnLCBvcy5nZXRlbnYoJ1VTRVIn
KSwKLSAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1udWxsKQotICAg
IG51bGwuY2xvc2UoKQotCi0KLWRlZiBraWxsX2FsbF90ZXN0X3NoZWxscygpOgotICAgICIiIktp
bGxzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHRlc3Rfc2hlbGwgYmluYXJ5IGN1cnJlbnRseSBydW5u
aW5nLiIiIgotICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ1Rlc3RTaGVsbCcpCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9w
bGF0Zm9ybV91dGlsc193aW4ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc193aW4ucHkKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDNlNjRkNzguLjAwMDAwMDAKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNf
d2luLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5
dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1
dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9m
IGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSIiIlRoaXMgaXMgdGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9m
IHRoZSBsYXlvdXRfcGFja2FnZS5wbGF0Zm9ybV91dGlscwotICAgcGFja2FnZS4gVGhpcyBmaWxl
IHNob3VsZCBvbmx5IGJlIGltcG9ydGVkIGJ5IHRoYXQgcGFja2FnZS4iIiIKLQotaW1wb3J0IG9z
Ci1pbXBvcnQgcGF0aF91dGlscwotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKLQotCi1k
ZWYgcGxhdGZvcm1fbmFtZSgpOgotICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBsYXRm
b3JtIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIG9uLiIiIgotICAgICMgV2UncmUgbm90IHJlYWR5
IGZvciB2ZXJzaW9uLXNwZWNpZmljIHJlc3VsdHMgeWV0LiBXaGVuIHdlIHVuY29tbWVudAotICAg
ICMgdGhpcywgd2UgYWxzbyBuZWVkIHRvIGFkZCBpdCB0byB0aGUgQmFzZWxpbmVTZWFyY2hQYXRo
KCkKLSAgICByZXR1cm4gJ2Nocm9taXVtLXdpbicgKyBwbGF0Zm9ybV92ZXJzaW9uKCkKLQotCi1k
ZWYgcGxhdGZvcm1fdmVyc2lvbigpOgotICAgICIiIlJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5n
IGZvciB0aGUgcGxhdGZvcm0sIGUuZy4gJy12aXN0YScgb3IKLSAgICAnLXNub3dsZW9wYXJkJy4g
SWYgdGhlIHBsYXRmb3JtIGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4KLSAgICBtaW5vciB2
ZXJzaW9ucywgaXQgcmV0dXJucyAnJy4iIiIKLSAgICB3aW52ZXIgPSBzeXMuZ2V0d2luZG93c3Zl
cnNpb24oKQotICAgIGlmIHdpbnZlclswXSA9PSA2IGFuZCAod2ludmVyWzFdID09IDEpOgotICAg
ICAgICByZXR1cm4gJy03JwotICAgIGlmIHdpbnZlclswXSA9PSA2IGFuZCAod2ludmVyWzFdID09
IDApOgotICAgICAgICByZXR1cm4gJy12aXN0YScKLSAgICBpZiB3aW52ZXJbMF0gPT0gNSBhbmQg
KHdpbnZlclsxXSA9PSAxIG9yIHdpbnZlclsxXSA9PSAyKToKLSAgICAgICAgcmV0dXJuICcteHAn
Ci0gICAgcmV0dXJuICcnCi0KLQotZGVmIGdldF9udW1fY29yZXMoKToKLSAgICAiIiJSZXR1cm5z
IHRoZSBudW1iZXIgb2YgY29yZXMgb24gdGhlIG1hY2hpbmUuIEZvciBoeXBlcnRocmVhZGVkIG1h
Y2hpbmVzLAotICAgIHRoaXMgd2lsbCBiZSBkb3VibGUgdGhlIG51bWJlciBvZiBhY3R1YWwgcHJv
Y2Vzc29ycy4iIiIKLSAgICByZXR1cm4gaW50KG9zLmVudmlyb24uZ2V0KCdOVU1CRVJfT0ZfUFJP
Q0VTU09SUycsIDEpKQotCi0KLWRlZiBiYXNlbGluZV9wYXRoKHBsYXRmb3JtPU5vbmUpOgotICAg
ICIiIlJldHVybnMgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRy
ZWUgZm9yIHRoZQotICAgIGJhc2VsaW5lcyBmb3IgdGhlIHNwZWNpZmllZCBwbGF0Zm9ybSB2ZXJz
aW9uLiBJZiB8cGxhdGZvcm18IGlzIE5vbmUsCi0gICAgdGhlbiB0aGUgdmVyc2lvbiBjdXJyZW50
bHkgaW4gdXNlIGlzIHVzZWQuIiIiCi0gICAgaWYgcGxhdGZvcm0gaXMgTm9uZToKLSAgICAgICAg
cGxhdGZvcm0gPSBwbGF0Zm9ybV9uYW1lKCkKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zy
b21fYmFzZSgnd2Via2l0JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3RzJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm0nLCBwbGF0Zm9ybSwgJ0xheW91dFRlc3Rz
JykKLQotCi1kZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIi
UmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGJhc2VsaW5lcy9y
ZXN1bHRzLCBpbgotICAgIG9yZGVyIG9mIHByZWZlcmVuY2UuIFBhdGhzIGFyZSByZWxhdGl2ZSB0
byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4iIiIKLSAgICBkaXJzID0gW10KLSAgICBpZiBw
bGF0Zm9ybSBpcyBOb25lOgotICAgICAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUoKQotCi0g
ICAgaWYgcGxhdGZvcm0gPT0gJ2Nocm9taXVtLXdpbi14cCc6Ci0gICAgICAgIGRpcnMuYXBwZW5k
KGJhc2VsaW5lX3BhdGgocGxhdGZvcm0pKQotICAgIGlmIHBsYXRmb3JtIGluICgnY2hyb21pdW0t
d2luLXhwJywgJ2Nocm9taXVtLXdpbi12aXN0YScpOgotICAgICAgICBkaXJzLmFwcGVuZChiYXNl
bGluZV9wYXRoKCdjaHJvbWl1bS13aW4tdmlzdGEnKSkKLSAgICBkaXJzLmFwcGVuZChiYXNlbGlu
ZV9wYXRoKCdjaHJvbWl1bS13aW4nKSkKLSAgICBkaXJzLmFwcGVuZChwYXRoX3V0aWxzLndlYmtp
dF9iYXNlbGluZV9wYXRoKCd3aW4nKSkKLSAgICBkaXJzLmFwcGVuZChwYXRoX3V0aWxzLndlYmtp
dF9iYXNlbGluZV9wYXRoKCdtYWMnKSkKLSAgICByZXR1cm4gZGlycwotCi0KLWRlZiB3ZGlmZl9w
YXRoKCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgV0RpZmYgZXhlY3V0YWJsZSwgd2hvc2UgYmluYXJ5
IGlzIGNoZWNrZWQgaW4gb24gV2luIiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9t
X2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICd3ZGlmZi5leGUnKQotCi0KLWRlZiBpbWFnZV9kaWZmX3BhdGgo
dGFyZ2V0KToKLSAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRo
IGZvciB0aGUgaW1hZ2UgY29tcGFyZSB1dGlsLgotICAgICAgICAgV2UgdXNlIHRoaXMgaWYgd2Ug
Y2FuJ3QgZmluZCB0aGUgYmluYXJ5IGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uCi0gICAgICAgICBp
biBwYXRoX3V0aWxzLgotCi0gICAgQXJnczoKLSAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1v
ZGUgKGRlYnVnIG9yIHJlbGVhc2UpCi0gICAgIiIiCi0gICAgcmV0dXJuIF9maW5kX2JpbmFyeSh0
YXJnZXQsICdpbWFnZV9kaWZmLmV4ZScpCi0KLQotZGVmIGxheW91dF90ZXN0X2hlbHBlcl9wYXRo
KHRhcmdldCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBiaW5hcnkgcGF0
aCBmb3IgdGhlIGxheW91dCB0ZXN0IGhlbHBlci4KLSAgICBXZSB1c2UgdGhpcyBpZiB3ZSBjYW4n
dCBmaW5kIHRoZSBiaW5hcnkgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24KLSAgICBpbiBwYXRoX3V0
aWxzLgotCi0gICAgQXJnczoKLSAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVn
IG9yIHJlbGVhc2UpCi0gICAgIiIiCi0gICAgcmV0dXJuIF9maW5kX2JpbmFyeSh0YXJnZXQsICds
YXlvdXRfdGVzdF9oZWxwZXIuZXhlJykKLQotCi1kZWYgdGVzdF9zaGVsbF9wYXRoKHRhcmdldCk6
Ci0gICAgIiIiUmV0dXJuIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBiaW5hcnkgcGF0aCBmb3Igb3Vy
IFRlc3RTaGVsbC4KLSAgICAgICBXZSB1c2UgdGhpcyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBiaW5h
cnkgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24KLSAgICAgICBpbiBwYXRoX3V0aWxzLgotCi0gICAg
QXJnczoKLSAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2Up
Ci0gICAgIiIiCi0gICAgcmV0dXJuIF9maW5kX2JpbmFyeSh0YXJnZXQsICd0ZXN0X3NoZWxsLmV4
ZScpCi0KLQotZGVmIGFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRo
ZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBhY2hlIiIiCi0gICAgcGF0aCA9IHBhdGhfdXRp
bHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICJ1c3IiLCAic2JpbiIp
Ci0gICAgIyBEb24ndCByZXR1cm4gaHR0cGQuZXhlIHNpbmNlIHdlIHdhbnQgdG8gdXNlIHRoaXMg
ZnJvbSBjeWd3aW4uCi0gICAgcmV0dXJuIG9zLnBhdGguam9pbihwYXRoLCAiaHR0cGQiKQotCi0K
LWRlZiBhcGFjaGVfY29uZmlnX2ZpbGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIHBhdGgg
dG8gQXBhY2hlIGNvbmZpZyBmaWxlIiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9t
X2Jhc2UoInRoaXJkX3BhcnR5IiwgIldlYktpdCIsICJMYXlvdXRUZXN0cyIsCi0gICAgICAgICJo
dHRwIiwgImNvbmYiLCAiY3lnd2luLWh0dHBkLmNvbmYiKQotCi0KLWRlZiBsaWdodHRwZF9leGVj
dXRhYmxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3Rh
cnQgTGlnSFRUUGQiIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhp
cmRfcGFydHknLCAnbGlnaHR0cGQnLCAnd2luJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnTGlnaHRUUEQuZXhlJykKLQotCi1kZWYgbGlnaHR0cGRfbW9kdWxlX3BhdGgo
KToKLSAgICAiIiJSZXR1cm5zIHRoZSBsaWJyYXJ5IG1vZHVsZSBwYXRoIGZvciBMaWdIVFRQZCIi
IgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICds
aWdodHRwZCcsICd3aW4nLCAnbGliJykKLQotCi1kZWYgbGlnaHR0cGRfcGhwX3BhdGgoKToKLSAg
ICAiIiJSZXR1cm5zIHRoZSBQSFAgZXhlY3V0YWJsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgotICAg
IHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRw
ZCcsICd3aW4nLCAncGhwNScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3BocC1jZ2kuZXhlJykKLQotCi1kZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9waWQp
OgotICAgICIiIlNodXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGls
IGl0J3MgZnVsbHkgc2h1dCBkb3duLgotCi0gICAgQXJnczoKLSAgICAgIHNlcnZlcl9waWQ6IFRo
ZSBwcm9jZXNzIElEIG9mIHRoZSBydW5uaW5nIHNlcnZlci4KLSAgICAgICAgICBVbnVzZWQgaW4g
dGhpcyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWV0aG9kLgotICAgICIiIgotICAgIHN1YnByb2Nl
c3MuUG9wZW4oKCd0YXNra2lsbC5leGUnLCAnL2YnLCAnL2ltJywgJ0xpZ2h0VFBELmV4ZScpLAot
ICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAg
ICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpLndhaXQoKQotICAgIHN1YnByb2Nlc3Mu
UG9wZW4oKCd0YXNra2lsbC5leGUnLCAnL2YnLCAnL2ltJywgJ2h0dHBkLmV4ZScpLAotICAgICAg
ICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAg
ICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpLndhaXQoKQotCi0KLWRlZiBraWxsX3Byb2Nlc3Mo
cGlkKToKLSAgICAiIiJGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3MuCi0KLSAgICBBcmdzOgot
ICAgICAgcGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUga2lsbGVkLgotICAgICIiIgot
ICAgIHN1YnByb2Nlc3MuY2FsbCgoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvcGlkJywgc3RyKHBp
ZCkpLAotICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAg
ICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQotCi0KLWRlZiBraWxsX2FsbF90
ZXN0X3NoZWxscyhzZWxmKToKLSAgICAiIiJLaWxscyBhbGwgaW5zdGFuY2VzIG9mIHRoZSB0ZXN0
X3NoZWxsIGJpbmFyeSBjdXJyZW50bHkgcnVubmluZy4iIiIKLSAgICBzdWJwcm9jZXNzLlBvcGVu
KCgndGFza2tpbGwuZXhlJywgJy9mJywgJy9pbScsICd0ZXN0X3NoZWxsLmV4ZScpLAotICAgICAg
ICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAg
ICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpLndhaXQoKQotCi0jCi0jIFByaXZhdGUgaGVscGVy
IGZ1bmN0aW9ucy4KLSMKLQotCi1kZWYgX2ZpbmRfYmluYXJ5KHRhcmdldCwgYmluYXJ5KToKLSAg
ICAiIiJPbiBXaW5kb3dzLCB3ZSBsb29rIGZvciBiaW5hcmllcyB0aGF0IHdlIGNvbXBpbGUgaW4g
cG90ZW50aWFsbHkKLSAgICB0d28gcGxhY2VzOiBzcmMvd2Via2l0LyR0YXJnZXQgKHByZWZlcmFi
bHksIHdoaWNoIHdlIGdldCBpZiB3ZQotICAgIGJ1aWx0IHVzaW5nIHdlYmtpdF9nbHVlLmd5cCks
IG9yIHNyYy9jaHJvbWUvJHRhcmdldCAoaWYgY29tcGlsZWQgc29tZQotICAgIG90aGVyIHdheSku
IiIiCi0gICAgdHJ5OgotICAgICAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgn
d2Via2l0JywgdGFyZ2V0LCBiaW5hcnkpCi0gICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZv
dW5kOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zy
b21fYmFzZSgnY2hyb21lJywgdGFyZ2V0LCBiaW5hcnkpCi0gICAgICAgIGV4Y2VwdCBwYXRoX3V0
aWxzLlBhdGhOb3RGb3VuZDoKLSAgICAgICAgICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCdidWlsZCcsIHRhcmdldCwgYmluYXJ5KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3Rh
dGlvbnMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQppbmRleCBhM2JlOGY0Li4wZTVhNzQ2IDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5w
eQpAQCAtMTEsNyArMTEsNyBAQAogIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAjIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICMgZGlzdHJpYnV0
aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICMKQEAgLTM2LDEwICszNiw3IEBAIGltcG9ydCBv
cwogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQotaW1wb3J0IHBhdGhfdXRpbHMK
IAotc3lzLnBhdGguYXBwZW5kKHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5
JywgJ1dlYktpdCcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J1dlYktpdFRvb2xzJykpIAogaW1wb3J0IHNpbXBsZWpzb24KIAogIyBUZXN0IGV4cGVjdGF0aW9u
IGFuZCBtb2RpZmllciBjb25zdGFudHMuCkBAIC01MywxMiArNTAsMjYgQEAgaW1wb3J0IHNpbXBs
ZWpzb24KIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnM6CiAgICAgVEVTVF9MSVNUID0gInRlc3RfZXhw
ZWN0YXRpb25zLnR4dCIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0cywgZGlyZWN0b3J5
LCBwbGF0Zm9ybSwgaXNfZGVidWdfbW9kZSwgaXNfbGludF9tb2RlLAotICAgICAgICB0ZXN0c19h
cmVfcHJlc2VudD1UcnVlKToKLSAgICAgICAgIiIiUmVhZHMgdGhlIHRlc3QgZXhwZWN0YXRpb25z
IGZpbGVzIGZyb20gdGhlIGdpdmVuIGRpcmVjdG9yeS4iIiIKLSAgICAgICAgcGF0aCA9IG9zLnBh
dGguam9pbihkaXJlY3RvcnksIHNlbGYuVEVTVF9MSVNUKQotICAgICAgICBzZWxmLl9leHBlY3Rl
ZF9mYWlsdXJlcyA9IFRlc3RFeHBlY3RhdGlvbnNGaWxlKHBhdGgsIHRlc3RzLCBwbGF0Zm9ybSwK
LSAgICAgICAgICAgIGlzX2RlYnVnX21vZGUsIGlzX2xpbnRfbW9kZSwgdGVzdHNfYXJlX3ByZXNl
bnQ9dGVzdHNfYXJlX3ByZXNlbnQpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHRlc3Rz
LCBleHBlY3RhdGlvbnMsIHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlLAorICAgICAgICAgICAgICAg
ICAgaXNfbGludF9tb2RlLCB0ZXN0c19hcmVfcHJlc2VudD1UcnVlKToKKyAgICAgICAgIiIiTG9h
ZHMgYW5kIHBhcnNlcyB0aGUgdGVzdCBleHBlY3RhdGlvbnMgZ2l2ZW4gaW4gdGhlIHN0cmluZy4K
KyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHBvcnQ6IHJlZmVyZW5jZSB0byBwbGF0Zm9ybS1z
cGVjaWZpYyBpbnRlcmZhY2UKKyAgICAgICAgICAgIHRlc3Q6IGxpc3Qgb2YgYWxsIG9mIHRoZSB0
ZXN0IGZpbGVzCisgICAgICAgICAgICBleHBlY3RhdGlvbnM6IHRlc3QgZXhwZWN0YXRpb25zIGFz
IGEgc3RyaW5nCisgICAgICAgICAgICBwbGF0Zm9ybTogdGVzdCBwbGF0Zm9ybSBuYW1lIHRvIHVz
ZSBmb3IgcGFyc2luZyBleHBlY3RhdGlvbnMKKyAgICAgICAgICAgIGlzX2RlYnVnX21vZGU6IHdo
ZXRoZXIgdG8gdXNlIHRoZSBERUJVRyBvciBSRUxFQVNFIG1vZGlmaWVycworICAgICAgICAgICAg
ICAgIGluIHRoZSBleHBlY3RhdGlvbnMKKyAgICAgICAgICAgIGlzX2xpbnRfbW9kZTogSWYgVHJ1
ZSwganVzdCBwYXJzZSB0aGUgZXhwZWN0YXRpb25zIHN0cmluZworICAgICAgICAgICAgICAgIGxv
b2tpbmcgZm9yIGVycm9ycy4KKyAgICAgICAgICAgIHRlc3RzX2FyZV9wcmVzZW50OiB3aGV0aGVy
IHRoZSB0ZXN0IGZpbGVzIGV4aXN0IGluIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgc3lzdGVt
IGFuZCBjYW4gYmUgcHJvYmVkIGZvci4gVGhpcyBpcyB1c2VmdWwgZm9yIGRpc3Rpbmd1aXNoaW5n
CisgICAgICAgICAgICAgICAgdGVzdCBmaWxlcyBmcm9tIGRpcmVjdG9yaWVzLCBhbmQgaXMgbmVl
ZGVkIGJ5IHRoZSBMVFRGCisgICAgICAgICAgICAgICAgZGFzaGJvYXJkLCB3aGVyZSB0aGUgZmls
ZXMgYXJlbid0IGFjdHVhbGx5IGxvY2FsbHkgcHJlc2VudC4KKyAgICAgICAgIiIiCisgICAgICAg
IHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUocG9ydCwgZXhw
ZWN0YXRpb25zLAorICAgICAgICAgICAgdGVzdHMsIHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlLCBp
c19saW50X21vZGUsCisgICAgICAgICAgICB0ZXN0c19hcmVfcHJlc2VudD10ZXN0c19hcmVfcHJl
c2VudCkKIAogICAgICMgVE9ETyhvamFuKTogQWxsb3cgZm9yIHJlbW92aW5nIHNraXBwZWQgdGVz
dHMgd2hlbiBnZXR0aW5nIHRoZSBsaXN0IG9mCiAgICAgIyB0ZXN0cyB0byBydW4sIGJ1dCBub3Qg
d2hlbiBnZXR0aW5nIG1ldHJpY3MuCkBAIC0yMzAsOSArMjQxLDYgQEAgY2xhc3MgVGVzdEV4cGVj
dGF0aW9uc0ZpbGU6CiAgICAgRVhQRUNUQVRJT05fT1JERVIgPSAoUEFTUywgQ1JBU0gsIFRJTUVP
VVQsIE1JU1NJTkcsIElNQUdFX1BMVVNfVEVYVCwKICAgICAgICBURVhULCBJTUFHRSwgRkFJTCwg
U0tJUCkKIAotICAgIEJBU0VfUExBVEZPUk1TID0gKCdsaW51eCcsICdtYWMnLCAnd2luJykKLSAg
ICBQTEFURk9STVMgPSBCQVNFX1BMQVRGT1JNUyArICgnd2luLXhwJywgJ3dpbi12aXN0YScsICd3
aW4tNycpCi0KICAgICBCVUlMRF9UWVBFUyA9ICgnZGVidWcnLCAncmVsZWFzZScpCiAKICAgICBN
T0RJRklFUlMgPSB7J3NraXAnOiBTS0lQLApAQCAtMjUxLDM2ICsyNTksMzIgQEAgY2xhc3MgVGVz
dEV4cGVjdGF0aW9uc0ZpbGU6CiAgICAgICAgICAgICAgICAgICAgICdmYWlsJzogRkFJTCwKICAg
ICAgICAgICAgICAgICAgICAgJ2ZsYWt5JzogRkxBS1l9CiAKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcGF0aCwgZnVsbF90ZXN0X2xpc3QsIHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlLAotICAgICAg
ICBpc19saW50X21vZGUsIGV4cGVjdGF0aW9uc19hc19zdHI9Tm9uZSwgc3VwcHJlc3NfZXJyb3Jz
PUZhbHNlLAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBleHBlY3RhdGlvbnMsIGZ1bGxf
dGVzdF9saXN0LCBwbGF0Zm9ybSwKKyAgICAgICAgaXNfZGVidWdfbW9kZSwgaXNfbGludF9tb2Rl
LCBzdXBwcmVzc19lcnJvcnM9RmFsc2UsCiAgICAgICAgIHRlc3RzX2FyZV9wcmVzZW50PVRydWUp
OgogICAgICAgICAiIiIKLSAgICAgICAgcGF0aDogVGhlIHBhdGggdG8gdGhlIGV4cGVjdGF0aW9u
IGZpbGUuIEFuIGVycm9yIGlzIHRocm93biBpZiBhIHRlc3QgaXMKLSAgICAgICAgICAgIGxpc3Rl
ZCBtb3JlIHRoYW4gb25jZS4KKyAgICAgICAgZXhwZWN0YXRpb25zOiBDb250ZW50cyBvZiB0aGUg
ZXhwZWN0YXRpb25zIGZpbGUKICAgICAgICAgZnVsbF90ZXN0X2xpc3Q6IFRoZSBsaXN0IG9mIGFs
bCB0ZXN0cyB0byBiZSBydW4gcGVuZGluZyBwcm9jZXNzaW5nIG9mCiAgICAgICAgICAgICB0aGUg
ZXhwZWN0aW9ucyBmb3IgdGhvc2UgdGVzdHMuCi0gICAgICAgIHBsYXRmb3JtOiBXaGljaCBwbGF0
Zm9ybSBmcm9tIHNlbGYuUExBVEZPUk1TIHRvIGZpbHRlciB0ZXN0cyBmb3IuCisgICAgICAgIHBs
YXRmb3JtOiBXaGljaCBwbGF0Zm9ybSBmcm9tIHBvcnQudGVzdF9wbGF0Zm9ybV9uYW1lcygpIHRv
IGZpbHRlcgorICAgICAgICAgICAgdGVzdHMgZm9yLgogICAgICAgICBpc19kZWJ1Z19tb2RlOiBX
aGV0aGVyIHdlIHRlc3RpbmcgYSB0ZXN0X3NoZWxsIGJ1aWx0IGRlYnVnIG1vZGUuCiAgICAgICAg
IGlzX2xpbnRfbW9kZTogV2hldGhlciB0aGlzIGlzIGp1c3QgbGludGluZyB0ZXN0X2V4cGVjYXRh
dGlvbnMudHh0LgotICAgICAgICBleHBlY3RhdGlvbnNfYXNfc3RyOiBDb250ZW50cyBvZiB0aGUg
ZXhwZWN0YXRpb25zIGZpbGUuIFVzZWQgaW5zdGVhZCBvZgotICAgICAgICAgICAgdGhlIHBhdGgu
IFRoaXMgbWFrZXMgdW5pdHRlc3Rpbmcgc2FuZS4KICAgICAgICAgc3VwcHJlc3NfZXJyb3JzOiBX
aGV0aGVyIHRvIHN1cHByZXNzIGxpbnQgZXJyb3JzLgogICAgICAgICB0ZXN0c19hcmVfcHJlc2Vu
dDogV2hldGhlciB0aGUgdGVzdCBmaWxlcyBhcmUgcHJlc2VudCBpbiB0aGUgbG9jYWwKICAgICAg
ICAgICAgIGZpbGVzeXN0ZW0uIFRoZSBMVFRGIERhc2hib2FyZCB1c2VzIEZhbHNlIGhlcmUgdG8g
YXZvaWQgaGF2aW5nIHRvCiAgICAgICAgICAgICBrZWVwIGEgbG9jYWwgY29weSBvZiB0aGUgdHJl
ZS4KICAgICAgICAgIiIiCiAKLSAgICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKLSAgICAgICAgc2Vs
Zi5fZXhwZWN0YXRpb25zX2FzX3N0ciA9IGV4cGVjdGF0aW9uc19hc19zdHIKKyAgICAgICAgc2Vs
Zi5fZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zCiAgICAgICAgIHNlbGYuX2lzX2xpbnRfbW9k
ZSA9IGlzX2xpbnRfbW9kZQogICAgICAgICBzZWxmLl90ZXN0c19hcmVfcHJlc2VudCA9IHRlc3Rz
X2FyZV9wcmVzZW50CiAgICAgICAgIHNlbGYuX2Z1bGxfdGVzdF9saXN0ID0gZnVsbF90ZXN0X2xp
c3QKICAgICAgICAgc2VsZi5fc3VwcHJlc3NfZXJyb3JzID0gc3VwcHJlc3NfZXJyb3JzCiAgICAg
ICAgIHNlbGYuX2Vycm9ycyA9IFtdCiAgICAgICAgIHNlbGYuX25vbl9mYXRhbF9lcnJvcnMgPSBb
XQotICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9IHNlbGYudG9fdGVzdF9wbGF0Zm9ybV9uYW1lKHBs
YXRmb3JtKQotICAgICAgICBpZiBzZWxmLl9wbGF0Zm9ybSBpcyBOb25lOgotICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHBsYXRmb3JtICclcyciICUgKHBsYXRmb3JtKSkKKyAg
ICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0Zm9y
bQogICAgICAgICBzZWxmLl9pc19kZWJ1Z19tb2RlID0gaXNfZGVidWdfbW9kZQogCiAgICAgICAg
ICMgTWFwcyByZWxhdGl2ZSB0ZXN0IHBhdGhzIGFzIGxpc3RlZCBpbiB0aGUgZXhwZWN0YXRpb25z
IGZpbGUgdG8gYQpAQCAtMzIwLDI3ICszMjQsMTMgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc0Zp
bGU6CiAgICAgICAgICIiIlJldHVybnMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIGl0ZXJhdGVkIG92
ZXIuIEFsbG93cyBmb3Igbm90IGNhcmluZwogICAgICAgICBhYm91dCB3aGV0aGVyIHdlJ3JlIGl0
ZXJhdGluZyBvdmVyIGEgZmlsZSBvciBhIG5ldy1saW5lIHNlcGFyYXRlZAogICAgICAgICBzdHJp
bmcuIiIiCi0gICAgICAgIGlmIHNlbGYuX2V4cGVjdGF0aW9uc19hc19zdHI6Ci0gICAgICAgICAg
ICBpdGVyYWJsZSA9IFt4ICsgIlxuIiBmb3IgeCBpbgotICAgICAgICAgICAgICAgIHNlbGYuX2V4
cGVjdGF0aW9uc19hc19zdHIuc3BsaXQoIlxuIildCi0gICAgICAgICAgICAjIFN0cmlwIGZpbmFs
IGVudHJ5IGlmIGl0J3MgZW1wdHkgdG8gYXZvaWQgYWRkZWQgaW4gYW4gZXh0cmEKLSAgICAgICAg
ICAgICMgbmV3bGluZS4KLSAgICAgICAgICAgIGlmIGl0ZXJhYmxlW2xlbihpdGVyYWJsZSkgLSAx
XSA9PSAiXG4iOgotICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYWJsZVs6bGVuKGl0ZXJhYmxl
KSAtIDFdCi0gICAgICAgICAgICByZXR1cm4gaXRlcmFibGUKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIHJldHVybiBvcGVuKHNlbGYuX3BhdGgpCi0KLSAgICBkZWYgdG9fdGVzdF9wbGF0Zm9y
bV9uYW1lKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSB0ZXN0IGV4cGVjdGF0
aW9uIHBsYXRmb3JtIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhCi0gICAgICAgIGdpdmVuIHBsYXRm
b3JtIG5hbWUsIG9yIE5vbmUgaWYgdGhlcmUgaXMgbm8gbWF0Y2guIiIiCi0gICAgICAgIGNocm9t
aXVtX3ByZWZpeCA9ICdjaHJvbWl1bS0nCi0gICAgICAgIG5hbWUgPSBuYW1lLmxvd2VyKCkKLSAg
ICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKGNocm9taXVtX3ByZWZpeCk6Ci0gICAgICAgICAgICBu
YW1lID0gbmFtZVtsZW4oY2hyb21pdW1fcHJlZml4KTpdCi0gICAgICAgIGlmIG5hbWUgaW4gc2Vs
Zi5QTEFURk9STVM6Ci0gICAgICAgICAgICByZXR1cm4gbmFtZQotICAgICAgICByZXR1cm4gTm9u
ZQorICAgICAgICBpdGVyYWJsZSA9IFt4ICsgIlxuIiBmb3IgeCBpbgorICAgICAgICAgICAgc2Vs
Zi5fZXhwZWN0YXRpb25zLnNwbGl0KCJcbiIpXQorICAgICAgICAjIFN0cmlwIGZpbmFsIGVudHJ5
IGlmIGl0J3MgZW1wdHkgdG8gYXZvaWQgYWRkZWQgaW4gYW4gZXh0cmEKKyAgICAgICAgIyBuZXds
aW5lLgorICAgICAgICBpZiBpdGVyYWJsZVstMV0gPT0gIlxuIjoKKyAgICAgICAgICAgIHJldHVy
biBpdGVyYWJsZVs6LTFdCisgICAgICAgIHJldHVybiBpdGVyYWJsZQogCiAgICAgZGVmIGdldF90
ZXN0X3NldChzZWxmLCBtb2RpZmllciwgZXhwZWN0YXRpb249Tm9uZSwgaW5jbHVkZV9za2lwcz1U
cnVlKToKICAgICAgICAgaWYgZXhwZWN0YXRpb24gaXMgTm9uZToKQEAgLTM5OCw2ICszODgsOSBA
QCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zRmlsZToKICAgICAgICAgICBubwogICAgICAgICAiIiIK
IAorICAgICAgICAjIEZJWE1FKGRwcmFua2UpIC0gdXBkYXRlIHRoaXMKKyAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFeGNlcHRpb24oJ3JlbW92ZV9wbGF0Zm9ybV9mcm9tX2ZpbGUnKQorCiAg
ICAgICAgIG5ld19maWxlID0gc2VsZi5fcGF0aCArICcubmV3JwogICAgICAgICBsb2dnaW5nLmRl
YnVnKCdPcmlnaW5hbCBmaWxlOiAiJXMiJywgc2VsZi5fcGF0aCkKICAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygnTmV3IGZpbGU6ICIlcyInLCBuZXdfZmlsZSkKQEAgLTQzMCwxMSArNDIzLDEyIEBAIGNs
YXNzIFRlc3RFeHBlY3RhdGlvbnNGaWxlOgogICAgICAgICAgICAgZWxpZiBhY3Rpb24gPT0gQURE
X1BMQVRGT1JNU19FWENFUFRfVEhJUzoKICAgICAgICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3Bs
aXQoJzonKQogICAgICAgICAgICAgICAgIG5ld19vcHRpb25zID0gcGFydHNbMF0KLSAgICAgICAg
ICAgICAgICBmb3IgcCBpbiBzZWxmLlBMQVRGT1JNUzoKLSAgICAgICAgICAgICAgICAgICAgcCA9
IHAudXBwZXIoKTsKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLl9wb3J0LnRlc3RfcGxh
dGZvcm1fbmFtZXMoKToKKyAgICAgICAgICAgICAgICAgICAgcCA9IHAudXBwZXIoKQogICAgICAg
ICAgICAgICAgICAgICAjIFRoaXMgaXMgYSB0ZW1wIHNvbHV0aW9uIGZvciByZWJhc2VsaW5pbmcg
dG9vbC4KICAgICAgICAgICAgICAgICAgICAgIyBEbyBub3QgYWRkIHRhZ3MgV0lOLTcgYW5kIFdJ
Ti1WSVNUQSB0byB0ZXN0IGV4cGVjdGF0aW9ucwotICAgICAgICAgICAgICAgICAgICAjIGlmIHRo
ZSBvcmlnaW5hbCBsaW5lIGRvZXMgbm90IHNwZWNpZnkgdGhlIHBsYXRmb3JtIG9wdGlvbi4KKyAg
ICAgICAgICAgICAgICAgICAgIyBpZiB0aGUgb3JpZ2luYWwgbGluZSBkb2VzIG5vdCBzcGVjaWZ5
IHRoZSBwbGF0Zm9ybQorICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbi4KICAgICAgICAgICAg
ICAgICAgICAgIyBUT0RPKHZpY3RvcncpOiBSZW1vdmUgV0lOLVZJU1RBIGFuZCBXSU4tNyBvbmNl
IHdlIGhhdmUKICAgICAgICAgICAgICAgICAgICAgIyByZWxpYWJsZSBXaW4gNyBhbmQgV2luIFZp
c3RhIGJ1aWxkYm90cyBzZXR1cC4KICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHAgaW4gKHBs
YXRmb3JtLnVwcGVyKCksICdXSU4tVklTVEEnLCAnV0lOLTcnKToKQEAgLTUxNyw3ICs1MTEsNyBA
QCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zRmlsZToKIAogICAgICAgICBoYXNfYW55X3BsYXRmb3Jt
ID0gRmFsc2UKICAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgotICAgICAgICAgICAgaWYg
b3B0aW9uIGluIHNlbGYuUExBVEZPUk1TOgorICAgICAgICAgICAgaWYgb3B0aW9uIGluIHNlbGYu
X3BvcnQudGVzdF9wbGF0Zm9ybV9uYW1lcygpOgogICAgICAgICAgICAgICAgIGhhc19hbnlfcGxh
dGZvcm0gPSBUcnVlCiAgICAgICAgICAgICAgICAgaWYgbm90IG9wdGlvbiA9PSBwbGF0Zm9ybToK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJFTU9WRV9QTEFURk9STQpAQCAtNTQ3LDcgKzU0
MSw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNGaWxlOgogICAgICAgICBmb3Igb3B0aW9uIGlu
IG9wdGlvbnM6CiAgICAgICAgICAgICBpZiBvcHRpb24gaW4gc2VsZi5NT0RJRklFUlM6CiAgICAg
ICAgICAgICAgICAgbW9kaWZpZXJzLmFkZChvcHRpb24pCi0gICAgICAgICAgICBlbGlmIG9wdGlv
biBpbiBzZWxmLlBMQVRGT1JNUzoKKyAgICAgICAgICAgIGVsaWYgb3B0aW9uIGluIHNlbGYuX3Bv
cnQudGVzdF9wbGF0Zm9ybV9uYW1lcygpOgogICAgICAgICAgICAgICAgIGhhc19hbnlfcGxhdGZv
cm0gPSBUcnVlCiAgICAgICAgICAgICBlbGlmIG9wdGlvbi5zdGFydHN3aXRoKCdidWcnKToKICAg
ICAgICAgICAgICAgICBoYXNfYnVnX2lkID0gVHJ1ZQpAQCAtNjMyLDcgKzYyNiw3IEBAIGNsYXNz
IFRlc3RFeHBlY3RhdGlvbnNGaWxlOgogICAgICAgICAgICAgICAgICAgICAnaW5kZWZpbml0ZWx5
LCB0aGVuIGl0IHNob3VsZCBiZSBqdXN0IHRpbWVvdXQuJywKICAgICAgICAgICAgICAgICAgICAg
dGVzdF9saXN0X3BhdGgpCiAKLSAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihw
YXRoX3V0aWxzLmxheW91dF90ZXN0c19kaXIoKSwKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9z
LnBhdGguam9pbihzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2xpc3RfcGF0aCkKICAgICAgICAgICAgIGZ1bGxf
cGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoZnVsbF9wYXRoKQogICAgICAgICAgICAgIyBXZWJLaXQn
cyB3YXkgb2Ygc2tpcHBpbmcgdGVzdHMgaXMgdG8gYWRkIGEgLWRpc2FibGVkIHN1ZmZpeC4KQEAg
LTY5NSw3ICs2ODksNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zRmlsZToKICAgICBkZWYgX2V4
cGFuZF90ZXN0cyhzZWxmLCB0ZXN0X2xpc3RfcGF0aCk6CiAgICAgICAgICIiIkNvbnZlcnQgdGhl
IHRlc3Qgc3BlY2lmaWNhdGlvbiB0byBhbiBhYnNvbHV0ZSwgbm9ybWFsaXplZAogICAgICAgICBw
YXRoIGFuZCBtYWtlIHN1cmUgZGlyZWN0b3JpZXMgZW5kIHdpdGggdGhlIE9TIHBhdGggc2VwYXJh
dG9yLiIiIgotICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGhfdXRpbHMubGF5b3V0X3Rl
c3RzX2RpcigpLCB0ZXN0X2xpc3RfcGF0aCkKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihz
ZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwgdGVzdF9saXN0X3BhdGgpCiAgICAgICAgIHBh
dGggPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCiAgICAgICAgIHBhdGggPSBzZWxmLl9maXhfZGly
KHBhdGgpCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmFpbHVyZXMucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZhaWx1cmVzLnB5
CmluZGV4IGIwNjRiMGMuLjU2ZDdiNWEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmFpbHVyZXMucHkKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvdGVzdF9mYWlsdXJlcy5weQpAQCAtMTEsNyArMTEsNyBAQAogIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1l
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICMKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3RfZmlsZXMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5CmluZGV4IDAyMjdlN2IuLjNjMDg3YzAg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3Rlc3RfZmlsZXMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9maWxlcy5weQpAQCAtMTEsNyAr
MTEsNyBAQAogIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAg
KiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KICMKQEAgLTM2LDcgKzM2LDYgQEAgdW5kZXIgdGhhdCBkaXJlY3Rvcnku
IiIiCiAKIGltcG9ydCBnbG9iCiBpbXBvcnQgb3MKLWltcG9ydCBwYXRoX3V0aWxzCiAKICMgV2hl
biBjb2xsZWN0aW5nIHRlc3QgY2FzZXMsIHdlIGluY2x1ZGUgYW55IGZpbGUgd2l0aCB0aGVzZSBl
eHRlbnNpb25zLgogX3N1cHBvcnRlZF9maWxlX2V4dGVuc2lvbnMgPSBzZXQoWycuaHRtbCcsICcu
c2h0bWwnLCAnLnhtbCcsICcueGh0bWwnLCAnLnBsJywKQEAgLTQ1LDcgKzQ0LDcgQEAgX3N1cHBv
cnRlZF9maWxlX2V4dGVuc2lvbnMgPSBzZXQoWycuaHRtbCcsICcuc2h0bWwnLCAnLnhtbCcsICcu
eGh0bWwnLCAnLnBsJywKIF9za2lwcGVkX2RpcmVjdG9yaWVzID0gc2V0KFsnLnN2bicsICdfc3Zu
JywgJ3Jlc291cmNlcycsICdzY3JpcHQtdGVzdHMnXSkKIAogCi1kZWYgZ2F0aGVyX3Rlc3RfZmls
ZXMocGF0aHMpOgorZGVmIGdhdGhlcl90ZXN0X2ZpbGVzKHBvcnQsIHBhdGhzKToKICAgICAiIiJH
ZW5lcmF0ZSBhIHNldCBvZiB0ZXN0IGZpbGVzIGFuZCByZXR1cm4gdGhlbS4KIAogICAgIEFyZ3M6
CkBAIC01NywxNCArNTYsMTQgQEAgZGVmIGdhdGhlcl90ZXN0X2ZpbGVzKHBhdGhzKToKICAgICBp
ZiBwYXRoczoKICAgICAgICAgZm9yIHBhdGggaW4gcGF0aHM6CiAgICAgICAgICAgICAjIElmIHRo
ZXJlJ3MgYW4gKiBpbiB0aGUgbmFtZSwgYXNzdW1lIGl0J3MgYSBnbG9iIHBhdHRlcm4uCi0gICAg
ICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RzX2Rpcigp
LCBwYXRoKQorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihwb3J0LmxheW91dF90ZXN0
c19kaXIoKSwgcGF0aCkKICAgICAgICAgICAgIGlmIHBhdGguZmluZCgnKicpID4gLTE6CiAgICAg
ICAgICAgICAgICAgZmlsZW5hbWVzID0gZ2xvYi5nbG9iKHBhdGgpCiAgICAgICAgICAgICAgICAg
cGF0aHNfdG9fd2Fsay51cGRhdGUoZmlsZW5hbWVzKQogICAgICAgICAgICAgZWxzZToKICAgICAg
ICAgICAgICAgICBwYXRoc190b193YWxrLmFkZChwYXRoKQogICAgIGVsc2U6Ci0gICAgICAgIHBh
dGhzX3RvX3dhbGsuYWRkKHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RzX2RpcigpKQorICAgICAgICBw
YXRoc190b193YWxrLmFkZChwb3J0LmxheW91dF90ZXN0c19kaXIoKSkKIAogICAgICMgTm93IHdh
bGsgYWxsIHRoZSBwYXRocyBwYXNzZWQgaW4gb24gdGhlIGNvbW1hbmQgbGluZSBhbmQgZ2V0IGZp
bGVuYW1lcwogICAgIHRlc3RfZmlsZXMgPSBzZXQoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90
aHJlYWQucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weQppbmRleCBmOWEwMGMxLi44NmQ4NDM3IDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5w
eQpAQCAtMTEsNyArMTEsNyBAQAogIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAjIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICMgZGlzdHJpYnV0
aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICMKQEAgLTQwLDIxICs0MCwyMiBAQCBpbXBvcnQg
bG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgUXVldWUKIGltcG9ydCBzaWduYWwKLWltcG9ydCBz
dWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGhyZWFkCiBpbXBvcnQgdGhyZWFkaW5nCiBp
bXBvcnQgdGltZQogCi1pbXBvcnQgcGF0aF91dGlscwogaW1wb3J0IHRlc3RfZmFpbHVyZXMKIAog
Ci1kZWYgcHJvY2Vzc19vdXRwdXQocHJvYywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2Fy
Z3MsIHRhcmdldCwgb3V0cHV0X2Rpcik6CitkZWYgcHJvY2Vzc19vdXRwdXQocG9ydCwgdGVzdF9p
bmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIHRhcmdldCwgb3V0cHV0X2RpciwKKyAgICAgICAg
ICAgICAgICAgICBjcmFzaCwgdGltZW91dCwgdGVzdF9ydW5fdGltZSwgYWN0dWFsX2NoZWNrc3Vt
LAorICAgICAgICAgICAgICAgICAgIG91dHB1dCwgZXJyb3IpOgogICAgICIiIlJlY2VpdmVzIHRo
ZSBvdXRwdXQgZnJvbSBhIHRlc3Rfc2hlbGwgcHJvY2Vzcywgc3ViamVjdHMgaXQgdG8gYSBudW1i
ZXIKICAgICBvZiB0ZXN0cywgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUgdHlwZXMgdGhl
IHRlc3QgcHJvZHVjZWQuCiAKICAgICBBcmdzOgorICAgICAgcG9ydDogcG9ydC1zcGVjaWZpYyBo
b29rcwogICAgICAgcHJvYzogYW4gYWN0aXZlIHRlc3Rfc2hlbGwgcHJvY2VzcwogICAgICAgdGVz
dF9pbmZvOiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSwgdXJpIGFuZCB0aW1l
b3V0CiAgICAgICB0ZXN0X3R5cGVzOiBsaXN0IG9mIHRlc3QgdHlwZXMgdG8gc3ViamVjdCB0aGUg
b3V0cHV0IHRvCkBAIC02NCw4NCArNjUsMzkgQEAgZGVmIHByb2Nlc3Nfb3V0cHV0KHByb2MsIHRl
c3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzLCB0YXJnZXQsIG91dHB1dF9kaXIpOgogCiAg
ICAgUmV0dXJuczogYSBsaXN0IG9mIGZhaWx1cmUgb2JqZWN0cyBhbmQgdGltZXMgZm9yIHRoZSB0
ZXN0IGJlaW5nIHByb2Nlc3NlZAogICAgICIiIgotICAgIG91dGxpbmVzID0gW10KLSAgICBleHRy
YV9saW5lcyA9IFtdCiAgICAgZmFpbHVyZXMgPSBbXQotICAgIGNyYXNoID0gRmFsc2UKIAogICAg
ICMgU29tZSB0ZXN0IGFyZ3MsIHN1Y2ggYXMgdGhlIGltYWdlIGhhc2gsIG1heSBiZSBhZGRlZCBv
ciBjaGFuZ2VkIG9uIGEKICAgICAjIHRlc3QtYnktdGVzdCBiYXNpcy4KICAgICBsb2NhbF90ZXN0
X2FyZ3MgPSBjb3B5LmNvcHkodGVzdF9hcmdzKQogCi0gICAgc3RhcnRfdGltZSA9IHRpbWUudGlt
ZSgpCi0KLSAgICBsaW5lID0gcHJvYy5zdGRvdXQucmVhZGxpbmUoKQotCi0gICAgIyBPbmx5IHN0
YXJ0IHNhdmluZyBvdXRwdXQgbGluZXMgb25jZSB3ZSd2ZSBsb2FkZWQgdGhlIFVSTCBmb3IgdGhl
IHRlc3QuCi0gICAgdXJsID0gTm9uZQotICAgIHRlc3Rfc3RyaW5nID0gdGVzdF9pbmZvLnVyaS5z
dHJpcCgpCi0KLSAgICB3aGlsZSBsaW5lLnJzdHJpcCgpICE9ICIjRU9GIjoKLSAgICAgICAgIyBN
YWtlIHN1cmUgd2UgaGF2ZW4ndCBjcmFzaGVkLgotICAgICAgICBpZiBsaW5lID09ICcnIGFuZCBw
cm9jLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0
X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaCgpKQotCi0gICAgICAgICAgICAjIFRoaXMgaXMgaGV4IGNv
ZGUgMHhjMDAwMDAxZCwgd2hpY2ggaXMgdXNlZCBmb3IgYWJydXB0Ci0gICAgICAgICAgICAjIHRl
cm1pbmF0aW9uLiBUaGlzIGhhcHBlbnMgaWYgd2UgaGl0IGN0cmwrYyBmcm9tIHRoZSBwcm9tcHQg
YW5kCi0gICAgICAgICAgICAjIHdlIGhhcHBlbiB0byBiZSB3YWl0aW5nIG9uIHRoZSB0ZXN0X3No
ZWxsLgotICAgICAgICAgICAgIyBzZG95b246IE5vdCBzdXJlIGZvciB3aGljaCBPUyBhbmQgaW4g
d2hhdCBjaXJjdW1zdGFuY2VzIHRoZQotICAgICAgICAgICAgIyBhYm92ZSBjb2RlIGlzIHZhbGlk
LiBXaGF0IHdvcmtzIGZvciBtZSB1bmRlciBMaW51eCB0byBkZXRlY3QKLSAgICAgICAgICAgICMg
Y3RybCtjIGlzIGZvciB0aGUgc3VicHJvY2VzcyByZXR1cm5jb2RlIHRvIGJlIG5lZ2F0aXZlIFNJ
R0lOVC4KLSAgICAgICAgICAgICMgQW5kIHRoYXQgYWdyZWVzIHdpdGggdGhlIHN1YnByb2Nlc3Mg
ZG9jdW1lbnRhdGlvbi4KLSAgICAgICAgICAgIGlmICgtMTA3Mzc0MTUxMCA9PSBwcm9jLnJldHVy
bmNvZGUgb3IKLSAgICAgICAgICAgICAgICAtIHNpZ25hbC5TSUdJTlQgPT0gcHJvYy5yZXR1cm5j
b2RlKToKLSAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAotICAgICAgICAg
ICAgY3Jhc2ggPSBUcnVlCi0gICAgICAgICAgICBicmVhawotCi0gICAgICAgICMgRG9uJ3QgaW5j
bHVkZSAjVVJMIGxpbmVzIGluIG91ciBvdXRwdXQKLSAgICAgICAgaWYgbGluZS5zdGFydHN3aXRo
KCIjVVJMOiIpOgotICAgICAgICAgICAgdXJsID0gbGluZS5yc3RyaXAoKVs1Ol0KLSAgICAgICAg
ICAgIGlmIHVybCAhPSB0ZXN0X3N0cmluZzoKLSAgICAgICAgICAgICAgICBsb2dnaW5nLmZhdGFs
KCJUZXN0IGdvdCBvdXQgb2Ygc3luYzpcbnwlc3xcbnwlc3wiICUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh1cmwsIHRlc3Rfc3RyaW5nKSkKLSAgICAgICAgICAgICAgICByYWlzZSBB
c3NlcnRpb25FcnJvcigidGVzdCBvdXQgb2Ygc3luYyIpCi0gICAgICAgIGVsaWYgbGluZS5zdGFy
dHN3aXRoKCIjTUQ1OiIpOgotICAgICAgICAgICAgbG9jYWxfdGVzdF9hcmdzLmhhc2ggPSBsaW5l
LnJzdHJpcCgpWzU6XQotICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiI1RFU1RfVElNRURf
T1VUIik6Ci0gICAgICAgICAgICAjIFRlc3QgdGltZWQgb3V0LCBidXQgd2Ugc3RpbGwgbmVlZCB0
byByZWFkIHVudGlsICNFT0YuCi0gICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWls
dXJlcy5GYWlsdXJlVGltZW91dCgpKQotICAgICAgICBlbGlmIHVybDoKLSAgICAgICAgICAgIG91
dGxpbmVzLmFwcGVuZChsaW5lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZXh0cmFfbGlu
ZXMuYXBwZW5kKGxpbmUpCi0KLSAgICAgICAgbGluZSA9IHByb2Muc3Rkb3V0LnJlYWRsaW5lKCkK
LQotICAgIGVuZF90ZXN0X3RpbWUgPSB0aW1lLnRpbWUoKQotCi0gICAgaWYgbGVuKGV4dHJhX2xp
bmVzKToKLSAgICAgICAgZXh0cmEgPSAiIi5qb2luKGV4dHJhX2xpbmVzKQotICAgICAgICBpZiBj
cmFzaDoKLSAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlN0YWNrdHJhY2UgZm9yICVzOlxuJXMi
ICUgKHRlc3Rfc3RyaW5nLCBleHRyYSkpCi0gICAgICAgICAgICAjIFN0cmlwIG9mZiAiZmlsZTov
LyIgc2luY2UgUmVsYXRpdmVUZXN0RmlsZW5hbWUgZXhwZWN0cwotICAgICAgICAgICAgIyBmaWxl
c3lzdGVtIHBhdGhzLgotICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3V0cHV0
X2RpciwKLSAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUo
dGVzdF9zdHJpbmdbNzpdKSkKLSAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdGV4
dChmaWxlbmFtZSlbMF0gKyAiLXN0YWNrLnR4dCIKLSAgICAgICAgICAgIHBhdGhfdXRpbHMubWF5
YmVfbWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxlbmFtZSlbMF0pCi0gICAgICAgICAg
ICBvcGVuKGZpbGVuYW1lLCAid2IiKS53cml0ZShleHRyYSkKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIGxvZ2dpbmcuZGVidWcoIlByZXZpb3VzIHRlc3Qgb3V0cHV0IGV4dHJhIGxpbmVzIGFm
dGVyIGR1bXA6XG4lcyIgJQotICAgICAgICAgICAgICAgIGV4dHJhKQorICAgIGxvY2FsX3Rlc3Rf
YXJncy5oYXNoID0gYWN0dWFsX2NoZWNrc3VtCisKKyAgICBpZiBjcmFzaDoKKyAgICAgICAgZmFp
bHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkpCisgICAgaWYgdGltZW91
dDoKKyAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZVRpbWVvdXQo
KSkKKworICAgIGlmIGNyYXNoOgorICAgICAgICBsb2dnaW5nLmRlYnVnKCJTdGFja3RyYWNlIGZv
ciAlczpcbiVzIiAlICh0ZXN0X2luZm8uZmlsZW5hbWUsIGVycm9yKSkKKyAgICAgICAgIyBTdHJp
cCBvZmYgImZpbGU6Ly8iIHNpbmNlIFJlbGF0aXZlVGVzdEZpbGVuYW1lIGV4cGVjdHMKKyAgICAg
ICAgIyBmaWxlc3lzdGVtIHBhdGhzLgorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihv
dXRwdXRfZGlyLCB0ZXN0X2luZm8uZmlsZW5hbWUpCisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0
aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gKyAiLXN0YWNrLnR4dCIKKyAgICAgICAgcG9ydC5tYXli
ZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKVswXSkKKyAgICAgICAgb3Bl
bihmaWxlbmFtZSwgIndiIikud3JpdGUoZXJyb3IpCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygiUHJldmlvdXMgdGVzdCBvdXRwdXQgZXh0cmEgbGluZXMgYWZ0ZXIgZHVtcDpcbiVz
IiAlCisgICAgICAgICAgICBlcnJvcikKIAogICAgICMgQ2hlY2sgdGhlIG91dHB1dCBhbmQgc2F2
ZSB0aGUgcmVzdWx0cy4KKyAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKICAgICB0aW1lX2Zv
cl9kaWZmcyA9IHt9CiAgICAgZm9yIHRlc3RfdHlwZSBpbiB0ZXN0X3R5cGVzOgogICAgICAgICBz
dGFydF9kaWZmX3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICBuZXdfZmFpbHVyZXMgPSB0ZXN0
X3R5cGUuY29tcGFyZV9vdXRwdXQodGVzdF9pbmZvLmZpbGVuYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYywgJycuam9pbihvdXRsaW5lcyks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF90
ZXN0X2FyZ3MsIHRhcmdldCkKKyAgICAgICAgbmV3X2ZhaWx1cmVzID0gdGVzdF90eXBlLmNvbXBh
cmVfb3V0cHV0KHBvcnQsIHRlc3RfaW5mby5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgbG9jYWxfdGVzdF9hcmdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0KQogICAg
ICAgICAjIERvbid0IGFkZCBhbnkgbW9yZSBmYWlsdXJlcyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBj
cmFzaCwgc28gd2UgZG9uJ3QKICAgICAgICAgIyBkb3VibGUtcmVwb3J0IHRob3NlIHRlc3RzLiBX
ZSBkbyBkb3VibGUtcmVwb3J0IGZvciB0aW1lb3V0cyBzaW5jZQogICAgICAgICAjIHdlIHN0aWxs
IHdhbnQgdG8gc2VlIHRoZSB0ZXh0IGFuZCBpbWFnZSBvdXRwdXQuCkBAIC0xNTAsMjggKzEwNiwx
MSBAQCBkZWYgcHJvY2Vzc19vdXRwdXQocHJvYywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0
X2FyZ3MsIHRhcmdldCwgb3V0cHV0X2Rpcik6CiAgICAgICAgIHRpbWVfZm9yX2RpZmZzW3Rlc3Rf
dHlwZS5fX2NsYXNzX18uX19uYW1lX19dID0gKAogICAgICAgICAgICAgdGltZS50aW1lKCkgLSBz
dGFydF9kaWZmX3RpbWUpCiAKLSAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMgPSB0aW1lLnRp
bWUoKSAtIGVuZF90ZXN0X3RpbWUKLSAgICB0ZXN0X3J1bl90aW1lID0gZW5kX3Rlc3RfdGltZSAt
IHN0YXJ0X3RpbWUKKyAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMgPSB0aW1lLnRpbWUoKSAt
IHN0YXJ0X2RpZmZfdGltZQogICAgIHJldHVybiBUZXN0U3RhdHModGVzdF9pbmZvLmZpbGVuYW1l
LCBmYWlsdXJlcywgdGVzdF9ydW5fdGltZSwKICAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2Rp
ZmZzLCB0aW1lX2Zvcl9kaWZmcykKIAogCi1kZWYgc3RhcnRfdGVzdF9zaGVsbChjb21tYW5kLCBh
cmdzKToKLSAgICAiIiJSZXR1cm5zIHRoZSBwcm9jZXNzIGZvciBhIG5ldyB0ZXN0X3NoZWxsIHN0
YXJ0ZWQgaW4gbGF5b3V0LXRlc3RzIG1vZGUuCi0gICAgIiIiCi0gICAgY21kID0gW10KLSAgICAj
IEhvb2sgZm9yIGluamVjdGluZyB2YWxncmluZCBvciBvdGhlciBydW50aW1lIGluc3RydW1lbnRh
dGlvbiwKLSAgICAjIHVzZWQgYnkgZS5nLiB0b29scy92YWxncmluZC92YWxncmluZF90ZXN0cy5w
eS4KLSAgICB3cmFwcGVyID0gb3MuZW52aXJvbi5nZXQoIkJST1dTRVJfV1JBUFBFUiIsIE5vbmUp
Ci0gICAgaWYgd3JhcHBlciAhPSBOb25lOgotICAgICAgICBjbWQgKz0gW3dyYXBwZXJdCi0gICAg
Y21kICs9IGNvbW1hbmQgKyBbJy0tbGF5b3V0LXRlc3RzJ10gKyBhcmdzCi0gICAgcmV0dXJuIHN1
YnByb2Nlc3MuUG9wZW4oY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1
YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJv
Y2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNz
LlNURE9VVCkKLQotCiBjbGFzcyBUZXN0U3RhdHM6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwg
ZmlsZW5hbWUsIGZhaWx1cmVzLCB0ZXN0X3J1bl90aW1lLApAQCAtMTg2LDE3ICsxMjUsMTkgQEAg
Y2xhc3MgVGVzdFN0YXRzOgogY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFk
KToKICAgICAiIiJUaHJlYWQgd3JhcHBlciBmb3IgcnVubmluZyBhIHNpbmdsZSB0ZXN0IGZpbGUu
IiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9zaGVsbF9jb21tYW5kLCBzaGVsbF9h
cmdzLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsCi0gICAgICAgIHRlc3RfYXJncywgdGFyZ2V0LCBv
dXRwdXRfZGlyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgaW1hZ2VfcGF0aCwgc2hl
bGxfYXJncywgdGVzdF9pbmZvLAorICAgICAgICB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIHRhcmdl
dCwgb3V0cHV0X2Rpcik6CiAgICAgICAgICIiIgogICAgICAgICBBcmdzOgorICAgICAgICAgIHBv
cnQ6IG9iamVjdCBpbXBsZW1lbnRpbmcgcG9ydC1zcGVjaWZpYyBob29rcwogICAgICAgICAgIHRl
c3RfaW5mbzogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUsIHVyaSBhbmQgdGlt
ZW91dAogICAgICAgICAgIG91dHB1dF9kaXI6IERpcmVjdG9yeSB0byBwdXQgY3Jhc2ggc3RhY2tz
IGludG8uCiAgICAgICAgICAgU2VlIFRlc3RTaGVsbFRocmVhZCBmb3IgZG9jdW1lbnRhdGlvbiBv
ZiB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KICAgICAgICAgIiIiCiAKICAgICAgICAgdGhyZWFk
aW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9jb21tYW5kID0gdGVzdF9z
aGVsbF9jb21tYW5kCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2lt
YWdlX3BhdGggPSBpbWFnZV9wYXRoCiAgICAgICAgIHNlbGYuX3NoZWxsX2FyZ3MgPSBzaGVsbF9h
cmdzCiAgICAgICAgIHNlbGYuX3Rlc3RfaW5mbyA9IHRlc3RfaW5mbwogICAgICAgICBzZWxmLl90
ZXN0X3R5cGVzID0gdGVzdF90eXBlcwpAQCAtMjA1LDEwICsxNDYsMTggQEAgY2xhc3MgU2luZ2xl
VGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9
IG91dHB1dF9kaXIKIAogICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHByb2MgPSBzdGFydF90
ZXN0X3NoZWxsKHNlbGYuX2NvbW1hbmQsIHNlbGYuX3NoZWxsX2FyZ3MgKwotICAgICAgICAgICAg
WyItLXRpbWUtb3V0LW1zPSIgKyBzZWxmLl90ZXN0X2luZm8udGltZW91dCwgc2VsZi5fdGVzdF9p
bmZvLnVyaV0pCi0gICAgICAgIHNlbGYuX3Rlc3Rfc3RhdHMgPSBwcm9jZXNzX291dHB1dChwcm9j
LCBzZWxmLl90ZXN0X2luZm8sCi0gICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLCBzZWxmLl90
ZXN0X2FyZ3MsIHNlbGYuX3RhcmdldCwgc2VsZi5fb3V0cHV0X2RpcikKKyAgICAgICAgZHJpdmVy
ID0gc2VsZi5fcG9ydC5zdGFydF90ZXN0X2RyaXZlcihzZWxmLl9pbWFnZV9wYXRoLAorICAgICAg
ICAgICAgc2VsZi5fc2hlbGxfYXJncykKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAg
ICAgICAoY3Jhc2gsIHRpbWVvdXQsIGFjdHVhbF9jaGVja3N1bSwgb3V0cHV0LCBlcnJvcikgPSAg
XAorICAgICAgICAgICAgZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5mby51cmkuc3RyaXAoKSwgdGVz
dF9pbmZvLnRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLmlt
YWdlX2hhc2gpCisgICAgICAgIGVuZCA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuX3Rlc3Rf
c3RhdHMgPSBwcm9jZXNzX291dHB1dChzZWxmLl9wb3J0LAorICAgICAgICAgICAgc2VsZi5fdGVz
dF9pbmZvLCBzZWxmLl90ZXN0X3R5cGVzLCBzZWxmLl90ZXN0X2FyZ3MsCisgICAgICAgICAgICBz
ZWxmLl90YXJnZXQsIHNlbGYuX291dHB1dF9kaXIsIGNyYXNoLCB0aW1lb3V0LCBlbmQgLSBzdGFy
dCwKKyAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bSwgb3V0cHV0LCBlcnJvcikKKyAgICAgICAg
ZHJpdmVyLnN0b3AoKQogCiAgICAgZGVmIGdldF90ZXN0X3N0YXRzKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gc2VsZi5fdGVzdF9zdGF0cwpAQCAtMjE2LDE3ICsxNjUsMTYgQEAgY2xhc3MgU2luZ2xl
VGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKIAogY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRo
cmVhZGluZy5UaHJlYWQpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lX2xpc3Rf
cXVldWUsIHJlc3VsdF9xdWV1ZSwgdGVzdF9zaGVsbF9jb21tYW5kLAotICAgICAgICAgICAgICAg
ICB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIHNoZWxsX2FyZ3MsIG9wdGlvbnMpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0LCBmaWxlbmFtZV9saXN0X3F1ZXVlLCByZXN1bHRfcXVldWUsCisg
ICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMsIHRlc3RfYXJncywgaW1hZ2VfcGF0aCwgc2hlbGxf
YXJncywgb3B0aW9ucyk6CiAgICAgICAgICIiIkluaXRpYWxpemUgYWxsIHRoZSBsb2NhbCBzdGF0
ZSBmb3IgdGhpcyB0ZXN0IHNoZWxsIHRocmVhZC4KIAogICAgICAgICBBcmdzOgorICAgICAgICAg
IHBvcnQ6IGludGVyZmFjZSB0byBwb3J0LXNwZWNpZmljIGhvb2tzCiAgICAgICAgICAgZmlsZW5h
bWVfbGlzdF9xdWV1ZTogQSB0aHJlYWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IGNvbnRhaW5zIGxp
c3RzCiAgICAgICAgICAgICAgIG9mIHR1cGxlcyBvZiAoZmlsZW5hbWUsIHVyaSkgcGFpcnMuCiAg
ICAgICAgICAgcmVzdWx0X3F1ZXVlOiBBIHRocmVhZCBzYWZlIFF1ZXVlIGNsYXNzIHRoYXQgd2ls
bCBjb250YWluIHR1cGxlcyBvZgogICAgICAgICAgICAgICAodGVzdCwgZmFpbHVyZSBsaXN0cykg
Zm9yIHRoZSB0ZXN0IHJlc3VsdHMuCi0gICAgICAgICAgdGVzdF9zaGVsbF9jb21tYW5kOiBBIGxp
c3Qgc3BlY2lmeWluZyB0aGUgY29tbWFuZCthcmdzIGZvcgotICAgICAgICAgICAgICB0ZXN0X3No
ZWxsCiAgICAgICAgICAgdGVzdF90eXBlczogQSBsaXN0IG9mIFRlc3RUeXBlIG9iamVjdHMgdG8g
cnVuIHRoZSB0ZXN0IG91dHB1dAogICAgICAgICAgICAgICBhZ2FpbnN0LgogICAgICAgICAgIHRl
c3RfYXJnczogQSBUZXN0QXJndW1lbnRzIG9iamVjdCB0byBwYXNzIHRvIGVhY2ggVGVzdFR5cGUu
CkBAIC0yMzYsMTMgKzE4NCwxNCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRo
cmVhZCk6CiAgICAgICAgICAgICAgIHJ1bl93ZWJraXRfdGVzdHM7IHRoZXkgYXJlIHR5cGljYWxs
eSBwYXNzZWQgdmlhIHRoZQogICAgICAgICAgICAgICBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5u
ZXIgY2xhc3MuIiIiCiAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAg
ICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1
ZSA9IGZpbGVuYW1lX2xpc3RfcXVldWUKICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gcmVz
dWx0X3F1ZXVlCiAgICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBbXQotICAgICAgICBzZWxm
Ll90ZXN0X3NoZWxsX2NvbW1hbmQgPSB0ZXN0X3NoZWxsX2NvbW1hbmQKICAgICAgICAgc2VsZi5f
dGVzdF90eXBlcyA9IHRlc3RfdHlwZXMKICAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0gdGVzdF9h
cmdzCi0gICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYyA9IE5vbmUKKyAgICAgICAgc2VsZi5f
ZHJpdmVyID0gTm9uZQorICAgICAgICBzZWxmLl9pbWFnZV9wYXRoID0gaW1hZ2VfcGF0aAogICAg
ICAgICBzZWxmLl9zaGVsbF9hcmdzID0gc2hlbGxfYXJncwogICAgICAgICBzZWxmLl9vcHRpb25z
ID0gb3B0aW9ucwogICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCkBAIC0zNzksMTEgKzMy
OCwxMSBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAg
ICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVzc2FnZShzKS4KICAgICAgICAgICAgICAgICBl
cnJvcl9zdHIgPSAnXG4nLmpvaW4oWycgICcgKyBmLm1lc3NhZ2UoKSBmb3IgZiBpbiBmYWlsdXJl
c10pCiAgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiJXMgJXMgZmFpbGVkOlxuJXMiICUg
KHNlbGYuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF91dGls
cy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9zdHIpKQogICAgICAgICAgICAgZWxz
ZToKICAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYu
Z2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF91dGlscy5yZWxh
dGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKSkKICAgICAg
ICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZS5wdXQoKGZpbGVuYW1lLCBmYWlsdXJlcykpCiAKICAg
ICAgICAgICAgIGlmIGJhdGNoX3NpemUgPiAwIGFuZCBiYXRjaF9jb3VudCA+IGJhdGNoX3NpemU6
CkBAIC00MDcsNyArMzU2LDcgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJl
YWQpOgogICAgICAgICBSZXR1cm46CiAgICAgICAgICAgQSBsaXN0IG9mIFRlc3RGYWlsdXJlIG9i
amVjdHMgZGVzY3JpYmluZyB0aGUgZXJyb3IuCiAgICAgICAgICIiIgotICAgICAgICB3b3JrZXIg
PSBTaW5nbGVUZXN0VGhyZWFkKHNlbGYuX3Rlc3Rfc2hlbGxfY29tbWFuZCwKKyAgICAgICAgd29y
a2VyID0gU2luZ2xlVGVzdFRocmVhZChzZWxmLl9wb3J0LCBzZWxmLl9pbWFnZV9wYXRoLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsX2FyZ3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMsCkBAIC00MzEsNyArMzgwLDcgQEAgY2xh
c3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICAgICAgIyB0cmFk
ZW9mZiBpbiBvcmRlciB0byBhdm9pZCBsb3NpbmcgdGhlIHJlc3Qgb2YgdGhpcyB0aHJlYWQncwog
ICAgICAgICAgICAgIyByZXN1bHRzLgogICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignVGVzdCB0
aHJlYWQgaHVuZzoga2lsbGluZyBhbGwgdGVzdF9zaGVsbHMnKQotICAgICAgICAgICAgcGF0aF91
dGlscy5raWxsX2FsbF90ZXN0X3NoZWxscygpCisgICAgICAgICAgICB3b3JrZXIuX2RyaXZlci5z
dG9wKCkKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdGF0cyA9IHdvcmtlci5nZXRfdGVz
dF9zdGF0cygpCkBAIC00NTQsMzIgKzQwMywyMyBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhy
ZWFkaW5nLlRocmVhZCk6CiAgICAgICAgICAgQSBsaXN0IG9mIFRlc3RGYWlsdXJlIG9iamVjdHMg
ZGVzY3JpYmluZyB0aGUgZXJyb3IuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9lbnN1cmVf
dGVzdF9zaGVsbF9pc19ydW5uaW5nKCkKLSAgICAgICAgIyBBcmdzIHRvIHRlc3Rfc2hlbGwgaXMg
YSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZgotICAgICAgICAjICJ1cmkgdGltZW91dCBwaXhlbF9o
YXNoIgotICAgICAgICAjIFRoZSB0aW1lb3V0IGFuZCBwaXhlbF9oYXNoIGFyZSBvcHRpb25hbC4g
IFRoZSB0aW1lb3V0IGlzIHVzZWQgaWYgdGhpcwotICAgICAgICAjIHRlc3QgaGFzIGEgY3VzdG9t
IHRpbWVvdXQuIFRoZSBwaXhlbF9oYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4KLSAgICAg
ICAgIyBpbWFnZSBkdW1wIGlmIHRoZSBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBz
ZXQgdG8gYSBibGFuawotICAgICAgICAjIHZhbHVlIGlmIHdlIGFyZSBnZW5lcmF0aW5nIGEgbmV3
IGJhc2VsaW5lLgotICAgICAgICAjIChPdGhlcndpc2UsIGFuIGltYWdlIGZyb20gYSBwcmV2aW91
cyBydW4gd2lsbCBiZSBjb3BpZWQgaW50bwotICAgICAgICAjIHRoZSBiYXNlbGluZS4pCisgICAg
ICAgICMgVGhlIHBpeGVsX2hhc2ggaXMgdXNlZCB0byBhdm9pZCBkb2luZyBhbiBpbWFnZSBkdW1w
IGlmIHRoZQorICAgICAgICAjIGNoZWNrc3VtcyBtYXRjaCwgc28gaXQgc2hvdWxkIGJlIHNldCB0
byBhIGJsYW5rIHZhbHVlIGlmIHdlCisgICAgICAgICMgYXJlIGdlbmVyYXRpbmcgYSBuZXcgYmFz
ZWxpbmUuICAoT3RoZXJ3aXNlLCBhbiBpbWFnZSBmcm9tIGEKKyAgICAgICAgIyBwcmV2aW91cyBy
dW4gd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgYmFzZWxpbmUuKQogICAgICAgICBpbWFnZV9oYXNo
ID0gdGVzdF9pbmZvLmltYWdlX2hhc2gKICAgICAgICAgaWYgaW1hZ2VfaGFzaCBhbmQgc2VsZi5f
dGVzdF9hcmdzLm5ld19iYXNlbGluZToKICAgICAgICAgICAgIGltYWdlX2hhc2ggPSAiIgotICAg
ICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2Muc3RkaW4ud3JpdGUoKCIlcyAlcyAlc1xuIiAlCi0g
ICAgICAgICAgICAodGVzdF9pbmZvLnVyaSwgdGVzdF9pbmZvLnRpbWVvdXQsIGltYWdlX2hhc2gp
KSkKLQotICAgICAgICAjIElmIHRoZSB0ZXN0IHNoZWxsIGlzIGRlYWQsIHRoZSBhYm92ZSBtYXkg
Y2F1c2UgYW4gSU9FcnJvciBhcyB3ZQotICAgICAgICAjIHRyeSB0byB3cml0ZSBvbnRvIHRoZSBi
cm9rZW4gcGlwZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGVzdCBmb3IKLSAgICAgICAgIyB0aGlz
IHRlc3Qgc2hlbGwgcHJvY2VzcywgdGhhbiB0aGUgdGVzdCBzaGVsbCBkaWQgbm90Ci0gICAgICAg
ICMgc3VjY2Vzc2Z1bGx5IHN0YXJ0LiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgdGVzdCwgdGhl
biB0aGUKLSAgICAgICAgIyBwcmV2aW91cyB0ZXN0cyBoYXZlIGNhdXNlZCBzb21lIGtpbmQgb2Yg
ZGVsYXllZCBjcmFzaC4gV2UgZG9uJ3QKLSAgICAgICAgIyB0cnkgdG8gcmVjb3ZlciBoZXJlLgot
ICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2Muc3RkaW4uZmx1c2goKQotCi0gICAgICAgIHN0
YXRzID0gcHJvY2Vzc19vdXRwdXQoc2VsZi5fdGVzdF9zaGVsbF9wcm9jLCB0ZXN0X2luZm8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywgc2VsZi5fdGVz
dF9hcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMudGFy
Z2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0
c19kaXJlY3RvcnkpCisgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAgICAgY3Jhc2gs
IHRpbWVvdXQsIGFjdHVhbF9jaGVja3N1bSwgb3V0cHV0LCBlcnJvciA9IFwKKyAgICAgICAgICAg
c2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5mby51cmksIHRlc3RfaW5mby50aW1lb3V0LCBp
bWFnZV9oYXNoKQorICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQorCisgICAgICAgIHN0YXRzID0g
cHJvY2Vzc19vdXRwdXQoc2VsZi5fcG9ydCwgdGVzdF9pbmZvLCBzZWxmLl90ZXN0X3R5cGVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfYXJncywgc2VsZi5fb3B0
aW9ucy50YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9u
cy5yZXN1bHRzX2RpcmVjdG9yeSwgY3Jhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGltZW91dCwgZW5kIC0gc3RhcnQsIGFjdHVhbF9jaGVja3N1bSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXQsIGVycm9yKQogCiAgICAgICAgIHNlbGYuX3Rlc3Rfc3Rh
dHMuYXBwZW5kKHN0YXRzKQogICAgICAgICByZXR1cm4gc3RhdHMuZmFpbHVyZXMKQEAgLTQ4OSwy
MyArNDI5LDEyIEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAg
ICAgICAgcnVubmluZyB0ZXN0cyBzaW5nbHksIHNpbmNlIHRob3NlIGVhY2ggc3RhcnQgYSBzZXBh
cmF0ZSB0ZXN0IHNoZWxsIGluCiAgICAgICAgIHRoZWlyIG93biB0aHJlYWQuCiAgICAgICAgICIi
IgotICAgICAgICBpZiAobm90IHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYyBvcgotICAgICAgICAgICAg
c2VsZi5fdGVzdF9zaGVsbF9wcm9jLnBvbGwoKSBpcyBub3QgTm9uZSk6Ci0gICAgICAgICAgICBz
ZWxmLl90ZXN0X3NoZWxsX3Byb2MgPSBzdGFydF90ZXN0X3NoZWxsKHNlbGYuX3Rlc3Rfc2hlbGxf
Y29tbWFuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fc2hlbGxfYXJncykKKyAgICAgICAgaWYgKG5vdCBzZWxmLl9kcml2ZXIgb3Ig
c2VsZi5fZHJpdmVyLnBvbGwoKSBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICBzZWxmLl9kcml2
ZXIgPSBzZWxmLl9wb3J0LnN0YXJ0X2RyaXZlcigKKyAgICAgICAgICAgICAgICBzZWxmLl9pbWFn
ZV9wYXRoLCBzZWxmLl9zaGVsbF9hcmdzKQogCiAgICAgZGVmIF9raWxsX3Rlc3Rfc2hlbGwoc2Vs
Zik6CiAgICAgICAgICIiIktpbGwgdGhlIHRlc3Qgc2hlbGwgcHJvY2VzcyBpZiBpdCdzIHJ1bm5p
bmcuIiIiCi0gICAgICAgIGlmIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYzoKLSAgICAgICAgICAgIHNl
bGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl90ZXN0
X3NoZWxsX3Byb2Muc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3Rfc2hl
bGxfcHJvYy5zdGRlcnI6Ci0gICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnN0
ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICBpZiAoc3lzLnBsYXRmb3JtIG5vdCBpbiAoJ3dpbjMy
JywgJ2N5Z3dpbicpIGFuZAotICAgICAgICAgICAgICAgIG5vdCBzZWxmLl90ZXN0X3NoZWxsX3By
b2MucG9sbCgpKToKLSAgICAgICAgICAgICAgICAjIENsb3Npbmcgc3RkaW4vc3Rkb3V0L3N0ZGVy
ciBoYW5ncyBzb21ldGltZXMgb24gT1MgWC4KLSAgICAgICAgICAgICAgICBudWxsID0gb3Blbihv
cy5kZXZudWxsLCAidyIpCi0gICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbImtpbGwi
LCAiLTkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYuX3Rlc3Rf
c2hlbGxfcHJvYy5waWQpXSwgc3RkZXJyPW51bGwpCi0gICAgICAgICAgICAgICAgbnVsbC5jbG9z
ZSgpCi0gICAgICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2MgPSBOb25lCisgICAgICAgIGlm
IHNlbGYuX2RyaXZlcjoKKyAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdG9wKCkKKyAgICAgICAg
ICAgIHNlbGYuX2RyaXZlciA9IE5vbmUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS93ZWJzb2NrZXRfc2VydmVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWUw
YmE5Li4wMDAwMDAwCi0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHkKKysrIC9kZXYvbnVsbApAQCAt
MSwzMTYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRo
ZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0j
Ci0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiQSBj
bGFzcyB0byBoZWxwIHN0YXJ0L3N0b3AgdGhlIFB5V2ViU29ja2V0IHNlcnZlciB1c2VkIGJ5IGxh
eW91dCB0ZXN0cy4iIiIKLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBv
cnQgb3MKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGVtcGZpbGUKLWlt
cG9ydCB0aW1lCi1pbXBvcnQgdXJsbGliCi0KLWltcG9ydCBwYXRoX3V0aWxzCi1pbXBvcnQgcGxh
dGZvcm1fdXRpbHMKLWltcG9ydCBodHRwX3NlcnZlcgotCi1fV1NfTE9HX1BSRUZJWCA9ICdweXdl
YnNvY2tldC53cy5sb2ctJwotX1dTU19MT0dfUFJFRklYID0gJ3B5d2Vic29ja2V0Lndzcy5sb2ct
JwotCi1fREVGQVVMVF9XU19QT1JUID0gODg4MAotX0RFRkFVTFRfV1NTX1BPUlQgPSA5MzIzCi0K
LQotZGVmIHVybF9pc19hbGl2ZSh1cmwpOgotICAiIiJDaGVja3MgdG8gc2VlIGlmIHdlIGdldCBh
biBodHRwIHJlc3BvbnNlIGZyb20gfHVybHwuCi0gIFdlIHBvbGwgdGhlIHVybCA1IHRpbWVzIHdp
dGggYSAxIHNlY29uZCBkZWxheS4gIElmIHdlIGRvbid0Ci0gIGdldCBhIHJlcGx5IGluIHRoYXQg
dGltZSwgd2UgZ2l2ZSB1cCBhbmQgYXNzdW1lIHRoZSBodHRwZAotICBkaWRuJ3Qgc3RhcnQgcHJv
cGVybHkuCi0KLSAgQXJnczoKLSAgICB1cmw6IFRoZSBVUkwgdG8gY2hlY2suCi0gIFJldHVybjoK
LSAgICBUcnVlIGlmIHRoZSB1cmwgaXMgYWxpdmUuCi0gICIiIgotICB3YWl0X3RpbWUgPSA1Ci0g
IHdoaWxlIHdhaXRfdGltZSA+IDA6Ci0gICAgdHJ5OgotICAgICAgcmVzcG9uc2UgPSB1cmxsaWIu
dXJsb3Blbih1cmwpCi0gICAgICAjIFNlcnZlciBpcyB1cCBhbmQgcmVzcG9uZGluZy4KLSAgICAg
IHJldHVybiBUcnVlCi0gICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICBwYXNzCi0gICAgd2FpdF90
aW1lIC09IDEKLSAgICAjIFdhaXQgYSBzZWNvbmQgYW5kIHRyeSBhZ2Fpbi4KLSAgICB0aW1lLnNs
ZWVwKDEpCi0KLSAgcmV0dXJuIEZhbHNlCi0KLQotZGVmIHJlbW92ZV9sb2dfZmlsZXMoZm9sZGVy
LCBzdGFydHNfd2l0aCk6Ci0gICAgZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRlcikKLSAgICBmb3Ig
ZmlsZSBpbiBmaWxlczoKLSAgICAgICAgaWYgZmlsZS5zdGFydHN3aXRoKHN0YXJ0c193aXRoKToK
LSAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsIGZpbGUpCi0gICAg
ICAgICAgICBvcy5yZW1vdmUoZnVsbF9wYXRoKQotCi0KLWNsYXNzIFB5V2ViU29ja2V0Tm90U3Rh
cnRlZChFeGNlcHRpb24pOgotICAgIHBhc3MKLQotCi1jbGFzcyBQeVdlYlNvY2tldE5vdEZvdW5k
KEV4Y2VwdGlvbik6Ci0gICAgcGFzcwotCi0KLWNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVy
LkxpZ2h0dHBkKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyLCBwb3J0PV9E
RUZBVUxUX1dTX1BPUlQsCi0gICAgICAgICAgICAgICAgIHJvb3Q9Tm9uZSwKLSAgICAgICAgICAg
ICAgICAgdXNlX3Rscz1GYWxzZSwKLSAgICAgICAgICAgICAgICAgcHJpdmF0ZV9rZXk9aHR0cF9z
ZXJ2ZXIuTGlnaHR0cGQuX3BlbV9maWxlLAotICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZT1o
dHRwX3NlcnZlci5MaWdodHRwZC5fcGVtX2ZpbGUsCi0gICAgICAgICAgICAgICAgIHJlZ2lzdGVy
X2N5Z3dpbj1Ob25lLAotICAgICAgICAgICAgICAgICBwaWRmaWxlPU5vbmUpOgotICAgICAgICAi
IiJBcmdzOgotICAgICAgICAgIG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBs
YXlvdXQgdGVzdCByZXN1bHQgZGlyZWN0b3J5Ci0gICAgICAgICIiIgotICAgICAgICBodHRwX3Nl
cnZlci5MaWdodHRwZC5fX2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb3J0PXBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJvb3Q9cm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVnaXN0ZXJfY3lnd2luPXJlZ2lzdGVyX2N5Z3dpbikKLSAgICAgICAgc2VsZi5f
b3V0cHV0X2RpciA9IG91dHB1dF9kaXIKLSAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKLSAg
ICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKLSAgICAgICAgc2VsZi5fcm9vdCA9IHJvb3QKLSAgICAg
ICAgc2VsZi5fdXNlX3RscyA9IHVzZV90bHMKLSAgICAgICAgc2VsZi5fcHJpdmF0ZV9rZXkgPSBw
cml2YXRlX2tleQotICAgICAgICBzZWxmLl9jZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlCi0gICAg
ICAgIGlmIHNlbGYuX3BvcnQ6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0ID0gaW50KHNlbGYuX3Bv
cnQpCi0gICAgICAgIGlmIHNlbGYuX3VzZV90bHM6Ci0gICAgICAgICAgICBzZWxmLl9zZXJ2ZXJf
bmFtZSA9ICdQeVdlYlNvY2tldChTZWN1cmUpJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
c2VsZi5fc2VydmVyX25hbWUgPSAnUHlXZWJTb2NrZXQnCi0gICAgICAgIHNlbGYuX3BpZGZpbGUg
PSBwaWRmaWxlCi0gICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQotCi0gICAgICAgICMgV2Via2l0
IHRlc3RzCi0gICAgICAgIGlmIHNlbGYuX3Jvb3Q6Ci0gICAgICAgICAgICBzZWxmLl9sYXlvdXRf
dGVzdHMgPSBvcy5wYXRoLmFic3BhdGgoc2VsZi5fcm9vdCkKLSAgICAgICAgICAgIHNlbGYuX3dl
Yl9zb2NrZXRfdGVzdHMgPSBvcy5wYXRoLmFic3BhdGgoCi0gICAgICAgICAgICAgICAgb3MucGF0
aC5qb2luKHNlbGYuX3Jvb3QsICd3ZWJzb2NrZXQnLCAndGVzdHMnKSkKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0X3Rlc3Rz
ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgKLSAgICAgICAgICAgICAgICAgICAgJ3RoaXJk
X3BhcnR5JywgJ1dlYktpdCcsICdMYXlvdXRUZXN0cycsICd3ZWJzb2NrZXQnLAotICAgICAgICAg
ICAgICAgICAgICAndGVzdHMnKQotICAgICAgICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0cyA9
IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoCi0gICAgICAgICAgICAgICAgICAgICd0aGlyZF9w
YXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMnKQotICAgICAgICAgICAgZXhjZXB0IHBhdGhf
dXRpbHMuUGF0aE5vdEZvdW5kOgotICAgICAgICAgICAgICAgIHNlbGYuX3dlYl9zb2NrZXRfdGVz
dHMgPSBOb25lCi0KLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl93
ZWJfc29ja2V0X3Rlc3RzOgotICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdObyBuZWVkIHRvIHN0
YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5fc2VydmVyX25hbWUpCi0gICAgICAgICAgICByZXR1cm4K
LSAgICAgICAgaWYgc2VsZi5pc19ydW5uaW5nKCk6Ci0gICAgICAgICAgICByYWlzZSBQeVdlYlNv
Y2tldE5vdFN0YXJ0ZWQoJyVzIGlzIGFscmVhZHkgcnVubmluZy4nICUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfbmFtZSkKLQotICAgICAgICB0
aW1lX3N0ciA9IHRpbWUuc3RyZnRpbWUoJyVkJWIlWS0lSCVNJVMnKQotICAgICAgICBpZiBzZWxm
Ll91c2VfdGxzOgotICAgICAgICAgICAgbG9nX3ByZWZpeCA9IF9XU1NfTE9HX1BSRUZJWAotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgbG9nX3ByZWZpeCA9IF9XU19MT0dfUFJFRklYCi0gICAg
ICAgIGxvZ19maWxlX25hbWUgPSBsb2dfcHJlZml4ICsgdGltZV9zdHIKLQotICAgICAgICAjIFJl
bW92ZSBvbGQgbG9nIGZpbGVzLiBXZSBvbmx5IG5lZWQgdG8ga2VlcCB0aGUgbGFzdCBvbmVzLgot
ICAgICAgICByZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsIGxvZ19wcmVmaXgpCi0K
LSAgICAgICAgZXJyb3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxvZ19m
aWxlX25hbWUgKyAiLWVyci50eHQiKQotCi0gICAgICAgIG91dHB1dF9sb2cgPSBvcy5wYXRoLmpv
aW4oc2VsZi5fb3V0cHV0X2RpciwgbG9nX2ZpbGVfbmFtZSArICItb3V0LnR4dCIpCi0gICAgICAg
IHNlbGYuX3dzb3V0ID0gb3BlbihvdXRwdXRfbG9nLCAidyIpCi0KLSAgICAgICAgcHl0aG9uX2lu
dGVycCA9IHN5cy5leGVjdXRhYmxlCi0gICAgICAgIHB5d2Vic29ja2V0X2Jhc2UgPSBwYXRoX3V0
aWxzLnBhdGhfZnJvbV9iYXNlKAotICAgICAgICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcs
ICdXZWJLaXRUb29scycsICdweXdlYnNvY2tldCcpCi0gICAgICAgIHB5d2Vic29ja2V0X3Njcmlw
dCA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoCi0gICAgICAgICAgICAndGhpcmRfcGFydHkn
LCAnV2ViS2l0JywgJ1dlYktpdFRvb2xzJywgJ3B5d2Vic29ja2V0JywKLSAgICAgICAgICAgICdt
b2RfcHl3ZWJzb2NrZXQnLCAnc3RhbmRhbG9uZS5weScpCi0gICAgICAgIHN0YXJ0X2NtZCA9IFsK
LSAgICAgICAgICAgIHB5dGhvbl9pbnRlcnAsIHB5d2Vic29ja2V0X3NjcmlwdCwKLSAgICAgICAg
ICAgICctcCcsIHN0cihzZWxmLl9wb3J0KSwKLSAgICAgICAgICAgICctZCcsIHNlbGYuX2xheW91
dF90ZXN0cywKLSAgICAgICAgICAgICctcycsIHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMsCi0gICAg
ICAgICAgICAnLWwnLCBlcnJvcl9sb2csCi0gICAgICAgIF0KLQotICAgICAgICBoYW5kbGVyX21h
cF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hhbmRsZXJfbWFwLnR4dCcpCi0gICAgICAg
IGlmIG9zLnBhdGguZXhpc3RzKGhhbmRsZXJfbWFwX2ZpbGUpOgotICAgICAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygnVXNpbmcgaGFuZGxlcl9tYXBfZmlsZTogJXMnICUgaGFuZGxlcl9tYXBfZmlsZSkK
LSAgICAgICAgICAgIHN0YXJ0X2NtZC5hcHBlbmQoJy1tJykKLSAgICAgICAgICAgIHN0YXJ0X2Nt
ZC5hcHBlbmQoaGFuZGxlcl9tYXBfZmlsZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxv
Z2dpbmcud2FybmluZygnTm8gaGFuZGxlcl9tYXBfZmlsZSBmb3VuZCcpCi0KLSAgICAgICAgaWYg
c2VsZi5fdXNlX3RsczoKLSAgICAgICAgICAgIHN0YXJ0X2NtZC5leHRlbmQoWyctdCcsICctaycs
IHNlbGYuX3ByaXZhdGVfa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1jJywg
c2VsZi5fY2VydGlmaWNhdGVdKQotCi0gICAgICAgICMgUHV0IHRoZSBjeWd3aW4gZGlyZWN0b3J5
IGZpcnN0IGluIHRoZSBwYXRoIHRvIGZpbmQgY3lnd2luMS5kbGwKLSAgICAgICAgZW52ID0gb3Mu
ZW52aXJvbgotICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToK
LSAgICAgICAgICAgIGVudlsnUEFUSCddID0gJyVzOyVzJyAlICgKLSAgICAgICAgICAgICAgICBw
YXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAnYmluJyks
Ci0gICAgICAgICAgICAgICAgZW52WydQQVRIJ10pCi0KLSAgICAgICAgaWYgc3lzLnBsYXRmb3Jt
ID09ICd3aW4zMicgYW5kIHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbjoKLSAgICAgICAgICAgIHNldHVw
X21vdW50ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2lu
JywKLSAgICAgICAgICAgICAgICAnc2V0dXBfbW91bnQuYmF0JykKLSAgICAgICAgICAgIHN1YnBy
b2Nlc3MuUG9wZW4oc2V0dXBfbW91bnQpLndhaXQoKQotCi0gICAgICAgIGVudlsnUFlUSE9OUEFU
SCddID0gKHB5d2Vic29ja2V0X2Jhc2UgKyBvcy5wYXRoLnBhdGhzZXAgKwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbnYuZ2V0KCdQWVRIT05QQVRIJywgJycpKQotCi0gICAgICAgIGxv
Z2dpbmcuZGVidWcoJ1N0YXJ0aW5nICVzIHNlcnZlciBvbiAlZC4nICUgKAotICAgICAgICAgICAg
c2VsZi5fc2VydmVyX25hbWUsIHNlbGYuX3BvcnQpKQotICAgICAgICBsb2dnaW5nLmRlYnVnKCdj
bWRsaW5lOiAlcycgJSAnICcuam9pbihzdGFydF9jbWQpKQotICAgICAgICBzZWxmLl9wcm9jZXNz
ID0gc3VicHJvY2Vzcy5Qb3BlbihzdGFydF9jbWQsIHN0ZG91dD1zZWxmLl93c291dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RE
T1VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQot
Ci0gICAgICAgICMgV2FpdCBhIGJpdCBiZWZvcmUgY2hlY2tpbmcgdGhlIGxpdmVuZXNzIG9mIHRo
ZSBzZXJ2ZXIuCi0gICAgICAgIHRpbWUuc2xlZXAoMC41KQotCi0gICAgICAgIGlmIHNlbGYuX3Vz
ZV90bHM6Ci0gICAgICAgICAgICB1cmwgPSAnaHR0cHMnCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICB1cmwgPSAnaHR0cCcKLSAgICAgICAgdXJsID0gdXJsICsgJzovLzEyNy4wLjAuMTolZC8n
ICUgc2VsZi5fcG9ydAotICAgICAgICBpZiBub3QgdXJsX2lzX2FsaXZlKHVybCk6Ci0gICAgICAg
ICAgICBmcCA9IG9wZW4ob3V0cHV0X2xvZykKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAg
ICAgICBmb3IgbGluZSBpbiBmcDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihs
aW5lKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCi0g
ICAgICAgICAgICByYWlzZSBQeVdlYlNvY2tldE5vdFN0YXJ0ZWQoCi0gICAgICAgICAgICAgICAg
J0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2ZXIgb24gcG9ydCAlcy4nICUKLSAgICAgICAgICAgICAg
ICAgICAgKHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLl9wb3J0KSkKLQotICAgICAgICAjIE91ciBw
cm9jZXNzIHRlcm1pbmF0ZWQgYWxyZWFkeQotICAgICAgICBpZiBzZWxmLl9wcm9jZXNzLnJldHVy
bmNvZGUgIT0gTm9uZToKLSAgICAgICAgICAgIHJhaXNlIFB5V2ViU29ja2V0Tm90U3RhcnRlZCgK
LSAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHN0YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5fc2Vy
dmVyX25hbWUpCi0gICAgICAgIGlmIHNlbGYuX3BpZGZpbGU6Ci0gICAgICAgICAgICBmID0gb3Bl
bihzZWxmLl9waWRmaWxlLCAndycpCi0gICAgICAgICAgICBmLndyaXRlKCIlZCIgJSBzZWxmLl9w
cm9jZXNzLnBpZCkKLSAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgZGVmIHN0b3Aoc2VsZiwg
Zm9yY2U9RmFsc2UpOgotICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBzZWxmLmlzX3J1bm5p
bmcoKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Ci0g
ICAgICAgICAgICBwaWQgPSBzZWxmLl9wcm9jZXNzLnBpZAotICAgICAgICBlbGlmIHNlbGYuX3Bp
ZGZpbGU6Ci0gICAgICAgICAgICBmID0gb3BlbihzZWxmLl9waWRmaWxlKQotICAgICAgICAgICAg
cGlkID0gaW50KGYucmVhZCgpLnN0cmlwKCkpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLQotICAg
ICAgICBpZiBub3QgcGlkOgotICAgICAgICAgICAgcmFpc2UgUHlXZWJTb2NrZXROb3RGb3VuZCgK
LSAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGZpbmQgJXMgc2VydmVyIHBpZC4nICUgc2VsZi5f
c2VydmVyX25hbWUpCi0KLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygnU2h1dHRpbmcgZG93biAlcyBz
ZXJ2ZXIgJWQuJyAlIChzZWxmLl9zZXJ2ZXJfbmFtZSwgcGlkKSkKLSAgICAgICAgcGxhdGZvcm1f
dXRpbHMua2lsbF9wcm9jZXNzKHBpZCkKLQotICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgotICAg
ICAgICAgICAgc2VsZi5fcHJvY2Vzcy53YWl0KCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mg
PSBOb25lCi0KLSAgICAgICAgaWYgc2VsZi5fd3NvdXQ6Ci0gICAgICAgICAgICBzZWxmLl93c291
dC5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKLQotCi1pZiAnX19tYWlu
X18nID09IF9fbmFtZV9fOgotICAgICMgUHJvdmlkZSBzb21lIGNvbW1hbmQgbGluZSBwYXJhbXMg
Zm9yIHN0YXJ0aW5nIHRoZSBQeVdlYlNvY2tldCBzZXJ2ZXIKLSAgICAjIG1hbnVhbGx5LgotICAg
IG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQotICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbignLS1zZXJ2ZXInLCB0eXBlPSdjaG9pY2UnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaG9pY2VzPVsnc3RhcnQnLCAnc3RvcCddLCBkZWZhdWx0PSdzdGFydCcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NlcnZlciBhY3Rpb24gKHN0YXJ0
fHN0b3ApJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcG9ydCcsIGRl
c3Q9J3BvcnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsIGhl
bHA9J1BvcnQgdG8gbGlzdGVuIG9uJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1y
JywgJy0tcm9vdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0Fic29sdXRl
IHBhdGggdG8gRG9jdW1lbnRSb290ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnKG92ZXJyaWRlcyBsYXlvdXQgdGVzdCByb290cyknKQotICAgIG9wdGlvbl9wYXJzZXIuYWRk
X29wdGlvbignLXQnLCAnLS10bHMnLCBkZXN0PSd1c2VfdGxzJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0ndXNlIFRMUyAod3NzOi8vKScpCi0gICAgb3B0aW9u
X3BhcnNlci5hZGRfb3B0aW9uKCctaycsICctLXByaXZhdGVfa2V5JywgZGVzdD0ncHJpdmF0ZV9r
ZXknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxwPSdUTFMg
cHJpdmF0ZSBrZXkgZmlsZS4nKQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLWMnLCAn
LS1jZXJ0aWZpY2F0ZScsIGRlc3Q9J2NlcnRpZmljYXRlJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD0nJywgaGVscD0nVExTIGNlcnRpZmljYXRlIGZpbGUuJykKLSAgICBv
cHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tcmVnaXN0ZXJfY3lnd2luJywgYWN0aW9uPSJzdG9y
ZV90cnVlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0icmVnaXN0ZXJfY3ln
d2luIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUmVnaXN0ZXIgQ3lnd2lu
IHBhdGhzIChvbiBXaW4gdHJ5IGJvdHMpJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24o
Jy0tcGlkZmlsZScsIGhlbHA9J3BhdGggdG8gcGlkIGZpbGUuJykKLSAgICBvcHRpb25zLCBhcmdz
ID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkKLQotICAgIGlmIG5vdCBvcHRpb25zLnBvcnQ6
Ci0gICAgICAgIGlmIG9wdGlvbnMudXNlX3RsczoKLSAgICAgICAgICAgIG9wdGlvbnMucG9ydCA9
IF9ERUZBVUxUX1dTU19QT1JUCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvcHRpb25zLnBv
cnQgPSBfREVGQVVMVF9XU19QT1JUCi0KLSAgICBrd2RzID0geydwb3J0Jzogb3B0aW9ucy5wb3J0
LCAndXNlX3Rscyc6IG9wdGlvbnMudXNlX3Rsc30KLSAgICBpZiBvcHRpb25zLnJvb3Q6Ci0gICAg
ICAgIGt3ZHNbJ3Jvb3QnXSA9IG9wdGlvbnMucm9vdAotICAgIGlmIG9wdGlvbnMucHJpdmF0ZV9r
ZXk6Ci0gICAgICAgIGt3ZHNbJ3ByaXZhdGVfa2V5J10gPSBvcHRpb25zLnByaXZhdGVfa2V5Ci0g
ICAgaWYgb3B0aW9ucy5jZXJ0aWZpY2F0ZToKLSAgICAgICAga3dkc1snY2VydGlmaWNhdGUnXSA9
IG9wdGlvbnMuY2VydGlmaWNhdGUKLSAgICBrd2RzWydyZWdpc3Rlcl9jeWd3aW4nXSA9IG9wdGlv
bnMucmVnaXN0ZXJfY3lnd2luCi0gICAgaWYgb3B0aW9ucy5waWRmaWxlOgotICAgICAgICBrd2Rz
WydwaWRmaWxlJ10gPSBvcHRpb25zLnBpZGZpbGUKLQotICAgIHB5d2Vic29ja2V0ID0gUHlXZWJT
b2NrZXQodGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAqKmt3ZHMpCi0KLSAgICBpZiAnc3RhcnQnID09
IG9wdGlvbnMuc2VydmVyOgotICAgICAgICBweXdlYnNvY2tldC5zdGFydCgpCi0gICAgZWxzZToK
LSAgICAgICAgcHl3ZWJzb2NrZXQuc3RvcChmb3JjZT1UcnVlKQpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9fX2luaXRfXy5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvX19pbml0X18ucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ4NzUxZAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvX19p
bml0X18ucHkKQEAgLTAsMCArMSw1NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworIiIiUG9ydC1zcGVjaWZpYyBlbnRyeXBvaW50cyBmb3IgdGhlIGxheW91dCB0
ZXN0cyB0ZXN0IGluZnJhc3RydWN0dXJlLiIiIgorCisKK2RlZiBnZXQocG9ydF9uYW1lPU5vbmUs
IG9wdGlvbnM9Tm9uZSk6CisgICAgIiIiUmV0dXJucyBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHRo
ZSBQb3J0IGludGVyZmFjZS4gSWYKKyAgICBwb3J0X25hbWUgaXMgTm9uZSwgdGhpcyByb3V0aW5l
IGF0dGVtcHRzIHRvIGd1ZXNzIGF0IHRoZSBtb3N0CisgICAgYXBwcm9wcmlhdGUgcG9ydCBvbiB0
aGlzIHBsYXRmb3JtLiIiIgorICAgIHBvcnRfdG9fdXNlID0gcG9ydF9uYW1lCisgICAgaWYgcG9y
dF90b191c2UgaXMgTm9uZToKKyAgICAgICAgcG9ydF90b191c2UgPSAnY2hyb21pdW0tbWFjJwor
CisgICAgaWYgcG9ydF90b191c2UgPT0gJ3Rlc3QnOgorICAgICAgICBpbXBvcnQgdGVzdAorICAg
ICAgICByZXR1cm4gdGVzdC5UZXN0UG9ydChwb3J0X25hbWUsIG9wdGlvbnMpCisgICAgZWxpZiBw
b3J0X3RvX3VzZS5zdGFydHN3aXRoKCdtYWMnKToKKyAgICAgICAgaW1wb3J0IG1hYworICAgICAg
ICByZXR1cm4gbWFjLk1hY1BvcnQocG9ydF9uYW1lLCBvcHRpb25zKQorICAgIGVsaWYgcG9ydF90
b191c2Uuc3RhcnRzd2l0aCgnY2hyb21pdW0tbWFjJyk6CisgICAgICAgIGltcG9ydCBjaHJvbWl1
bV9tYWMKKyAgICAgICAgcmV0dXJuIGNocm9taXVtX21hYy5DaHJvbWl1bU1hY1BvcnQocG9ydF9u
YW1lLCBvcHRpb25zKQorICAgIGVsaWYgcG9ydF90b191c2Uuc3RhcnRzd2l0aCgnY2hyb21pdW0t
bGludXgnKToKKyAgICAgICAgaW1wb3J0IGNocm9taXVtX2xpbnV4CisgICAgICAgIHJldHVybiBj
aHJvbWl1bV9saW51eC5DaHJvbWl1bUxpbnV4UG9ydChwb3J0X25hbWUsIG9wdGlvbnMpCisgICAg
ZWxpZiBwb3J0X3RvX3VzZS5zdGFydHdpdGgoJ2Nocm9taXVtLXdpbicpOgorICAgICAgICBpbXBv
cnQgY2hyb21pdW1fd2luCisgICAgICAgIHJldHVybiBjaHJvbWl1bV93aW4uQ2hyb21pdW1XaW5Q
b3J0KHBvcnRfbmFtZSwgb3B0aW9ucykKKworICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3Io
J3Vuc3VwcG9ydGVkIHBvcnQ6ICVzJyAlIHBvcnRfbmFtZSkKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVy
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFj
aGVfaHR0cF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZm
MzY3MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5CkBAIC0wLDAgKzEsMjE4IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJBIGNsYXNzIHRvIHN0
YXJ0L3N0b3AgdGhlIGFwYWNoZSBodHRwIHNlcnZlciB1c2VkIGJ5IGxheW91dCB0ZXN0cy4iIiIK
KworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcmUK
K2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBodHRwX3NlcnZlcl9iYXNl
CisKKworY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNl
cnZlckJhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBvdXRwdXRfZGly
KToKKyAgICAgICAgIiIiQXJnczoKKyAgICAgICAgICBwb3J0X29iajogaGFuZGxlIHRvIHRoZSBw
bGF0Zm9ybS1zcGVjaWZpYyByb3V0aW5lcworICAgICAgICAgIG91dHB1dF9kaXI6IHRoZSBhYnNv
bHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgZGlyZWN0b3J5CisgICAgICAgICIi
IgorICAgICAgICBodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlLl9faW5pdF9fKHNlbGYs
IHBvcnRfb2JqKQorICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgorICAgICAg
ICBzZWxmLl9odHRwZF9wcm9jID0gTm9uZQorICAgICAgICBwb3J0X29iai5tYXliZV9tYWtlX2Rp
cmVjdG9yeShvdXRwdXRfZGlyKQorCisgICAgICAgIHNlbGYubWFwcGluZ3MgPSBbeydwb3J0Jzog
ODAwMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MX0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgeydwb3J0JzogODQ0MywgJ3NzbGNlcnQnOiBUcnVlfV0KKworICAgICAgICAjIFRoZSB1cHN0
cmVhbSAuY29uZiBmaWxlIGFzc3VtZWQgdGhlIGV4aXN0ZW5jZSBvZiAvdG1wL1dlYktpdCBmb3IK
KyAgICAgICAgIyBwbGFjaW5nIGFwYWNoZSBmaWxlcyBsaWtlIHRoZSBsb2NrIGZpbGUgdGhlcmUu
CisgICAgICAgIHNlbGYuX3J1bnRpbWVfcGF0aCA9IG9zLnBhdGguam9pbigiL3RtcCIsICJXZWJL
aXQiKQorICAgICAgICBwb3J0X29iai5tYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLl9ydW50aW1l
X3BhdGgpCisKKyAgICAgICAgIyBUaGUgUElEIHJldHVybmVkIHdoZW4gQXBhY2hlIGlzIHN0YXJ0
ZWQgZ29lcyBhd2F5IChkdWUgdG8gZHJvcHBpbmcKKyAgICAgICAgIyBwcml2aWxlZ2VzPykuIFRo
ZSBwcm9wZXIgY29udHJvbGxpbmcgUElEIGlzIHdyaXR0ZW4gdG8gYSBmaWxlIGluIHRoZQorICAg
ICAgICAjIGFwYWNoZSBydW50aW1lIGRpcmVjdG9yeS4KKyAgICAgICAgc2VsZi5fcGlkX2ZpbGUg
PSBvcy5wYXRoLmpvaW4oc2VsZi5fcnVudGltZV9wYXRoLCAnaHR0cGQucGlkJykKKworICAgICAg
ICB0ZXN0X2RpciA9IHNlbGYuX3BvcnRfb2JqLmxheW91dF90ZXN0c19kaXIoKQorICAgICAgICBq
c190ZXN0X3Jlc291cmNlc19kaXIgPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2luKHRlc3RfZGlyLCAi
ZmFzdCIsICJqcyIsCisgICAgICAgICAgICAicmVzb3VyY2VzIikKKyAgICAgICAgbWltZV90eXBl
c19wYXRoID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbih0ZXN0X2RpciwgImh0dHAiLCAiY29uZiIs
CisgICAgICAgICAgICAibWltZS50eXBlcyIpCisgICAgICAgIGNlcnRfZmlsZSA9IHNlbGYuX2N5
Z3dpbl9zYWZlX2pvaW4odGVzdF9kaXIsICJodHRwIiwgImNvbmYiLAorICAgICAgICAgICAgIndl
YmtpdC1odHRwZC5wZW0iKQorICAgICAgICBhY2Nlc3NfbG9nID0gc2VsZi5fY3lnd2luX3NhZmVf
am9pbihvdXRwdXRfZGlyLCAiYWNjZXNzX2xvZy50eHQiKQorICAgICAgICBlcnJvcl9sb2cgPSBz
ZWxmLl9jeWd3aW5fc2FmZV9qb2luKG91dHB1dF9kaXIsICJlcnJvcl9sb2cudHh0IikKKyAgICAg
ICAgZG9jdW1lbnRfcm9vdCA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4odGVzdF9kaXIsICJodHRw
IiwgInRlc3RzIikKKworICAgICAgICBleGVjdXRhYmxlID0gc2VsZi5fcG9ydF9vYmouX3BhdGhf
dG9fYXBhY2hlKCkKKyAgICAgICAgaWYgc2VsZi5faXNfY3lnd2luKCk6CisgICAgICAgICAgICBl
eGVjdXRhYmxlID0gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGV4ZWN1dGFibGUpCisKKyAgICAgICAg
Y21kID0gW2V4ZWN1dGFibGUsCisgICAgICAgICAgICAnLWYnLCBzZWxmLl9nZXRfYXBhY2hlX2Nv
bmZpZ19maWxlX3BhdGgodGVzdF9kaXIsIG91dHB1dF9kaXIpLAorICAgICAgICAgICAgJy1DJywg
IlwnRG9jdW1lbnRSb290ICVzXCciICUgZG9jdW1lbnRfcm9vdCwKKyAgICAgICAgICAgICctYycs
ICJcJ0FsaWFzIC9qcy10ZXN0LXJlc291cmNlcyAlc1wnIiAlIGpzX3Rlc3RfcmVzb3VyY2VzX2Rp
ciwKKyAgICAgICAgICAgICctQycsICJcJ0xpc3RlbiAlc1wnIiAlICIxMjcuMC4wLjE6ODAwMCIs
CisgICAgICAgICAgICAnLUMnLCAiXCdMaXN0ZW4gJXNcJyIgJSAiMTI3LjAuMC4xOjgwODEiLAor
ICAgICAgICAgICAgJy1jJywgIlwnVHlwZXNDb25maWcgXCIlc1wiXCciICUgbWltZV90eXBlc19w
YXRoLAorICAgICAgICAgICAgJy1jJywgIlwnQ3VzdG9tTG9nIFwiJXNcIiBjb21tb25cJyIgJSBh
Y2Nlc3NfbG9nLAorICAgICAgICAgICAgJy1jJywgIlwnRXJyb3JMb2cgXCIlc1wiXCciICUgZXJy
b3JfbG9nLAorICAgICAgICAgICAgJy1DJywgIlwnVXNlciBcIiVzXCJcJyIgJSBvcy5lbnZpcm9u
LmdldCgiVVNFUk5BTUUiLAorICAgICAgICAgICAgICAgIG9zLmVudmlyb24uZ2V0KCJVU0VSIiwg
IiIpKV0KKworICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKKyAgICAgICAgICAgIGN5Z2Jp
biA9IHNlbGYuX3BvcnRfb2JqLl9wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2lu
JywKKyAgICAgICAgICAgICAgICAnYmluJykKKyAgICAgICAgICAgICMgTm90IGVudGlyZWx5IHN1
cmUgd2h5LCBidXQgZnJvbSBjeWd3aW4gd2UgbmVlZCB0byBydW4gdGhlCisgICAgICAgICAgICAj
IGh0dHBkIGNvbW1hbmQgdGhyb3VnaCBiYXNoLgorICAgICAgICAgICAgc2VsZi5fc3RhcnRfY21k
ID0gWworICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihjeWdiaW4sICdiYXNoLmV4ZScpLAor
ICAgICAgICAgICAgICAgICctYycsCisgICAgICAgICAgICAgICAgJ1BBVEg9JXMgJXMnICUgKHNl
bGYuX2dldF9jeWd3aW5fcGF0aChjeWdiaW4pLCAiICIuam9pbihjbWQpKSwKKyAgICAgICAgICAg
ICAgXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUT0RPKG9qYW4pOiBXaGVuIHdlIGdl
dCBjeWd3aW4gdXNpbmcgQXBhY2hlIDIsIHVzZSBzZXQgdGhlCisgICAgICAgICAgICAjIGNlcnQg
ZmlsZSBmb3IgY3lnd2luIGFzIHdlbGwuCisgICAgICAgICAgICBjbWQuZXh0ZW5kKFsnLWMnLCAi
XCdTU0xDZXJ0aWZpY2F0ZUZpbGUgJXNcJyIgJSBjZXJ0X2ZpbGVdKQorICAgICAgICAgICAgIyBK
b2luIHRoZSBzdHJpbmcgaGVyZSBzbyB0aGF0IEN5Z3dpbi9XaW5kb3dzIGFuZCBNYWMvTGludXgK
KyAgICAgICAgICAgICMgY2FuIHVzZSB0aGUgc2FtZSBjb2RlLiBPdGhlcndpc2UsIHdlIGNvdWxk
IHJlbW92ZSB0aGUgc2luZ2xlCisgICAgICAgICAgICAjIHF1b3RlcyBhYm92ZSBhbmQga2VlcCBj
bWQgYXMgYSBzZXF1ZW5jZS4KKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0X2NtZCA9ICIgIi5qb2lu
KGNtZCkKKworICAgIGRlZiBfaXNfY3lnd2luKHNlbGYpOgorICAgICAgICByZXR1cm4gc3lzLnBs
YXRmb3JtIGluICgid2luMzIiLCAiY3lnd2luIikKKworICAgIGRlZiBfY3lnd2luX3NhZmVfam9p
bihzZWxmLCAqcGFydHMpOgorICAgICAgICAiIiJSZXR1cm5zIGEgcGxhdGZvcm0gYXBwcm9wcmlh
dGUgcGF0aC4iIiIKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigqcGFydHMpCisgICAgICAg
IGlmIHNlbGYuX2lzX2N5Z3dpbigpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jeWd3
aW5fcGF0aChwYXRoKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIF9nZXRfY3lnd2lu
X3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIkNvbnZlcnQgYSBXaW5kb3dzIHBhdGggdG8g
YSBjeWd3aW4gcGF0aC4KKworICAgICAgICBUaGUgY3lncGF0aCB1dGlsaXR5IGluc2lzdHMgb24g
Y29udmVydGluZyBwYXRocyB0aGF0IGl0IHRoaW5rcyBhcmUKKyAgICAgICAgQ3lnd2luIHJvb3Qg
cGF0aHMgdG8gd2hhdCBpdCB0aGlua3MgdGhlIGNvcnJlY3Qgcm9vdHMgYXJlLiAgU28gcGF0aHMK
KyAgICAgICAgc3VjaCBhcyAiQzpcYlxzbGF2ZVx3ZWJraXQtcmVsZWFzZVxidWlsZFx0aGlyZF9w
YXJ0eVxjeWd3aW5cYmluIgorICAgICAgICBhcmUgY29udmVydGVkIHRvIHBsYWluICIvdXNyL2Jp
biIuICBUbyBhdm9pZCB0aGlzLCB3ZQorICAgICAgICBkbyB0aGUgY29udmVyc2lvbiBtYW51YWxs
eS4KKworICAgICAgICBUaGUgcGF0aCBpcyBleHBlY3RlZCB0byBiZSBhbiBhYnNvbHV0ZSBwYXRo
LCBvbiBhbnkgZHJpdmUuCisgICAgICAgICIiIgorICAgICAgICBkcml2ZV9yZWdleHAgPSByZS5j
b21waWxlKHInKFthLXpdKTpbL1xcXScsIHJlLklHTk9SRUNBU0UpCisKKyAgICAgICAgZGVmIGxv
d2VyX2RyaXZlKG1hdGNob2JqKToKKyAgICAgICAgICAgIHJldHVybiAnL2N5Z2RyaXZlLyVzLycg
JSBtYXRjaG9iai5ncm91cCgxKS5sb3dlcigpCisgICAgICAgIHBhdGggPSBkcml2ZV9yZWdleHAu
c3ViKGxvd2VyX2RyaXZlLCBwYXRoKQorICAgICAgICByZXR1cm4gcGF0aC5yZXBsYWNlKCdcXCcs
ICcvJykKKworICAgIGRlZiBfZ2V0X2FwYWNoZV9jb25maWdfZmlsZV9wYXRoKHNlbGYsIHRlc3Rf
ZGlyLCBvdXRwdXRfZGlyKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgYXBh
Y2hlIGNvbmZpZyBmaWxlIHRvIHVzZS4KKyAgICAgICAgQXJnczoKKyAgICAgICAgICB0ZXN0X2Rp
cjogYWJzb2x1dGUgcGF0aCB0byB0aGUgTGF5b3V0VGVzdHMgZGlyZWN0b3J5LgorICAgICAgICAg
IG91dHB1dF9kaXI6IGFic29sdXRlIHBhdGggdG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdHMgZGly
ZWN0b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgaHR0cGRfY29uZmlnID0gc2VsZi5fcG9ydF9v
YmouX3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKCkKKyAgICAgICAgaHR0cGRfY29uZmlnX2Nv
cHkgPSBvcy5wYXRoLmpvaW4ob3V0cHV0X2RpciwgImh0dHBkLmNvbmYiKQorICAgICAgICBodHRw
ZF9jb25mID0gb3BlbihodHRwZF9jb25maWcpLnJlYWQoKQorICAgICAgICBpZiBzZWxmLl9pc19j
eWd3aW4oKToKKyAgICAgICAgICAgICMgVGhpcyBpcyBhIGdyb3NzIGhhY2ssIGJ1dCBpdCBsZXRz
IHVzIHVzZSB0aGUgdXBzdHJlYW0gLmNvbmYgZmlsZQorICAgICAgICAgICAgIyBhbmQgb3VyIGNo
ZWNrZWQgaW4gY3lnd2luLiBUaGlzIHRlbGxzIHRoZSBzZXJ2ZXIgdGhlIHJvb3QKKyAgICAgICAg
ICAgICMgZGlyZWN0b3J5IHRvIGxvb2sgaW4gZm9yIC5zbyBtb2R1bGVzLiBJdCB3aWxsIHVzZSB0
aGlzIHBhdGgKKyAgICAgICAgICAgICMgcGx1cyB0aGUgcmVsYXRpdmUgcGF0aHMgdG8gdGhlIC5z
byBmaWxlcyBsaXN0ZWQgaW4gdGhlIC5jb25mCisgICAgICAgICAgICAjIGZpbGUuIFdlIGhhdmUg
YXBhY2hlL2N5Z3dpbiBjaGVja2VkIGludG8gb3VyIHRyZWUgc28KKyAgICAgICAgICAgICMgcGVv
cGxlIGRvbid0IGhhdmUgdG8gaW5zdGFsbCBpdCBpbnRvIHRoZWlyIGN5Z3dpbi4KKyAgICAgICAg
ICAgIGN5Z3VzciA9IHNlbGYuX3BvcnRfb2JqLl9wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHkn
LCAnY3lnd2luJywKKyAgICAgICAgICAgICAgICAndXNyJykKKyAgICAgICAgICAgIGh0dHBkX2Nv
bmYgPSBodHRwZF9jb25mLnJlcGxhY2UoJ1NlcnZlclJvb3QgIi91c3IiJywKKyAgICAgICAgICAg
ICAgICAnU2VydmVyUm9vdCAiJXMiJyAlIHNlbGYuX2dldF9jeWd3aW5fcGF0aChjeWd1c3IpKQor
CisgICAgICAgIGYgPSBvcGVuKGh0dHBkX2NvbmZpZ19jb3B5LCAnd2InKQorICAgICAgICBmLndy
aXRlKGh0dHBkX2NvbmYpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGlmIHNlbGYuX2lz
X2N5Z3dpbigpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jeWd3aW5fcGF0aChodHRw
ZF9jb25maWdfY29weSkKKyAgICAgICAgcmV0dXJuIGh0dHBkX2NvbmZpZ19jb3B5CisKKyAgICBk
ZWYgX2dldF92aXJ0dWFsX2hvc3RfY29uZmlnKHNlbGYsIGRvY3VtZW50X3Jvb3QsIHBvcnQsIHNz
bD1GYWxzZSk6CisgICAgICAgICIiIlJldHVybnMgYSA8VmlydHVhbEhvc3Q+IGRpcmVjdGl2ZSBi
bG9jayBmb3IgYW4gaHR0cGQuY29uZiBmaWxlLgorICAgICAgICBJdCB3aWxsIGxpc3RlbiB0byAx
MjcuMC4wLjEgb24gZWFjaCBvZiB0aGUgZ2l2ZW4gcG9ydC4KKyAgICAgICAgIiIiCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4oKCc8VmlydHVhbEhvc3QgMTI3LjAuMC4xOiVzPicgJSBwb3J0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAnRG9jdW1lbnRSb290ICVzJyAlIGRvY3VtZW50X3Jv
b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbCBhbmQgJ1NTTEVuZ2luZSBPbicgb3Ig
JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICc8L1ZpcnR1YWxIb3N0PicsICcnKSkKKwor
ICAgIGRlZiBfc3RhcnRfaHR0cGRfcHJvY2VzcyhzZWxmKToKKyAgICAgICAgIiIiU3RhcnRzIHRo
ZSBodHRwZCBwcm9jZXNzIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlcmUgd2VyZSBlcnJvcnMuIiIi
CisgICAgICAgICMgVXNlIHNoZWxsPVRydWUgYmVjYXVzZSB3ZSBqb2luIHRoZSBhcmd1bWVudHMg
aW50byBhIHN0cmluZyBmb3IKKyAgICAgICAgIyB0aGUgc2FrZSBvZiBXaW5kb3cvQ3lnd2luIGFu
ZCBpdCBuZWVkcyBxdW90aW5nIHRoYXQgYnJlYWtzCisgICAgICAgICMgc2hlbGw9RmFsc2UuCisg
ICAgICAgIHNlbGYuX2h0dHBkX3Byb2MgPSBzdWJwcm9jZXNzLlBvcGVuKHNlbGYuX3N0YXJ0X2Nt
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1
YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHNoZWxsPVRydWUpCisgICAgICAgIGVyciA9IHNl
bGYuX2h0dHBkX3Byb2Muc3RkZXJyLnJlYWQoKQorICAgICAgICBpZiBsZW4oZXJyKToKKyAgICAg
ICAgICAgIGxvZ2dpbmcuZGVidWcoZXJyKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg
ICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgICIiIlN0YXJ0
cyB0aGUgYXBhY2hlIGh0dHAgc2VydmVyLiIiIgorICAgICAgICAjIFN0b3AgYW55IGN1cnJlbnRs
eSBydW5uaW5nIHNlcnZlcnMuCisgICAgICAgIHNlbGYuc3RvcCgpCisKKyAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygiU3RhcnRpbmcgYXBhY2hlIGh0dHAgc2VydmVyIikKKyAgICAgICAgc2VydmVyX3N0
YXJ0ZWQgPSBzZWxmLndhaXRfZm9yX2FjdGlvbihzZWxmLl9zdGFydF9odHRwZF9wcm9jZXNzKQor
ICAgICAgICBpZiBzZXJ2ZXJfc3RhcnRlZDoKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIkFw
YWNoZSBzdGFydGVkLiBUZXN0aW5nIHBvcnRzIikKKyAgICAgICAgICAgIHNlcnZlcl9zdGFydGVk
ID0gc2VsZi53YWl0X2Zvcl9hY3Rpb24oCisgICAgICAgICAgICAgICAgc2VsZi5pc19zZXJ2ZXJf
cnVubmluZ19vbl9hbGxfcG9ydHMpCisKKyAgICAgICAgaWYgc2VydmVyX3N0YXJ0ZWQ6CisgICAg
ICAgICAgICBsb2dnaW5nLmRlYnVnKCJTZXJ2ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQiKQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8gc3RhcnQg
aHR0cCBzZXJ2ZXInKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3BzIHRo
ZSBhcGFjaGUgaHR0cCBzZXJ2ZXIuIiIiCisgICAgICAgIGxvZ2dpbmcuZGVidWcoIlNodXR0aW5n
IGRvd24gYW55IHJ1bm5pbmcgaHR0cCBzZXJ2ZXJzIikKKyAgICAgICAgaHR0cGRfcGlkID0gTm9u
ZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9waWRfZmlsZSk6CisgICAgICAgICAg
ICBodHRwZF9waWQgPSBpbnQob3BlbihzZWxmLl9waWRfZmlsZSkucmVhZGxpbmUoKSkKKyAgICAg
ICAgc2VsZi5fcG9ydF9vYmouX3NodXRfZG93bl9odHRwX3NlcnZlcihodHRwZF9waWQpCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jh
c2UucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jh
c2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlmYzNjYgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvYmFzZS5weQpAQCAtMCwwICsxLDYzOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyIiIkFic3RyYWN0IGJhc2UgY2xhc3Mgb2YgUG9ydC1zcGVjaWZpYyBlbnRyeXBvaW50
cyBmb3IgdGhlIGxheW91dCB0ZXN0cwordGVzdCBpbmZyYXN0cnVjdHVyZSAodGhlIFBvcnQgYW5k
IERyaXZlciBjbGFzc2VzKS4iIiIKKworaW1wb3J0IGNnaQoraW1wb3J0IGRpZmZsaWIKK2ltcG9y
dCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworCitpbXBv
cnQgYXBhY2hlX2h0dHBfc2VydmVyCitpbXBvcnQgaHR0cF9zZXJ2ZXIKK2ltcG9ydCB3ZWJzb2Nr
ZXRfc2VydmVyCisKKyMgUHl0aG9uIGJ1ZyB3b3JrYXJvdW5kLiAgU2VlIFBvcnQud2RpZmZfdGV4
dCgpIGZvciBhbiBleHBsYW5hdGlvbi4KK193ZGlmZl9hdmFpbGFibGUgPSBUcnVlCisKKworY2xh
c3MgUG9ydChvYmplY3QpOgorICAgICIiIkFic3RyYWN0IGNsYXNzIGZvciBQb3J0LXNwZWNpZmlj
IGhvb2tzIGZvciB0aGUgbGF5b3V0X3Rlc3QgcGFja2FnZS4KKyAgICAiIiIKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lKToKKyAgICAgICAgc2Vs
Zi5fbmFtZSA9IHBvcnRfbmFtZQorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAg
ICAgICBzZWxmLl9oZWxwZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyID0gTm9u
ZQorICAgICAgICBzZWxmLl93ZWJraXRfYmFzZV9kaXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dl
YnNvY2tldF9zZXJ2ZXIgPSBOb25lCisKKyAgICBkZWYgYmFzZWxpbmVfcGF0aChzZWxmKToKKyAg
ICAgICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gc3Rv
cmUgbmV3IGJhc2VsaW5lcworICAgICAgICBpbiBmb3IgdGhpcyBwb3J0LiIiIgorICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LmJhc2VsaW5lX3BhdGgnKQorCisgICAgZGVm
IGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9m
IGFic29sdXRlIHBhdGhzIHRvIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCB1bmRlciBmb3IKKyAgICAg
ICAgYmFzZWxpbmVzLiBUaGUgZGlyZWN0b3JpZXMgYXJlIHNlYXJjaGVkIGluIG9yZGVyLiIiIgor
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LmJhc2VsaW5lX3NlYXJjaF9w
YXRoJykKKworICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmKToKKyAgICAgICAgIiIiSWYgdGhl
IHBvcnQgbmVlZHMgdG8gZG8gc29tZSBydW50aW1lIGNoZWNrcyB0byBlbnN1cmUgdGhhdCB0aGUK
KyAgICAgICAgdGVzdHMgY2FuIGJlIHJ1biBzdWNjZXNzZnVsbHksIHRoZXkgc2hvdWxkIGJlIGRv
bmUgaGVyZS4KKworICAgICAgICBSZXR1cm5zIHdoZXRoZXIgdGhlIHN5c3RlbSBpcyBwcm9wZXJs
eSBjb25maWd1cmVkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0
LmNoZWNrX3N5c19kZXBzJykKKworICAgIGRlZiBjb21wYXJlX3RleHQoc2VsZiwgYWN0dWFsX3Rl
eHQsIGV4cGVjdGVkX3RleHQpOgorICAgICAgICAiIiJSZXR1cm4gd2hldGhlciBvciBub3QgdGhl
IHR3byBzdHJpbmdzIGFyZSAqbm90KiBlcXVhbC4gVGhpcworICAgICAgICByb3V0aW5lIGlzIHVz
ZWQgdG8gZGlmZiB0ZXh0IG91dHB1dC4KKworICAgICAgICBXaGlsZSB0aGlzIGlzIGEgZ2VuZXJp
YyByb3V0aW5lLCB3ZSBpbmNsdWRlIGl0IGluIHRoZSBQb3J0CisgICAgICAgIGludGVyZmFjZSBz
byB0aGF0IGl0IGNhbiBiZSBvdmVycmlkZW4gZm9yIHRlc3RpbmcgcHVycG9zZXMuIiIiCisgICAg
ICAgIHJldHVybiBhY3R1YWxfdGV4dCAhPSBleHBlY3RlZF90ZXh0CisKKyAgICBkZWYgZGlmZl9p
bWFnZShzZWxmLCBhY3R1YWxfZmlsZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lLCBkaWZmX2ZpbGVu
YW1lKToKKyAgICAgICAgIiIiQ29tcGFyZSB0d28gaW1hZ2UgZmlsZXMgYW5kIHByb2R1Y2UgYSBk
ZWx0YSBpbWFnZSBmaWxlLgorCisgICAgICAgIFJldHVybiAxIGlmIHRoZSB0d28gZmlsZXMgYXJl
IGRpZmZlcmVudCwgMCBpZiB0aGV5IGFyZSB0aGUgc2FtZS4KKyAgICAgICAgQWxzbyBwcm9kdWNl
IGEgZGVsdGEgaW1hZ2Ugb2YgdGhlIHR3byBpbWFnZXMgYW5kIHdyaXRlIHRoYXQgaW50bworICAg
ICAgICB8ZGlmZl9maWxlbmFtZXwuCisKKyAgICAgICAgV2hpbGUgdGhpcyBpcyBhIGdlbmVyaWMg
cm91dGluZSwgd2UgaW5jbHVkZSBpdCBpbiB0aGUgUG9ydAorICAgICAgICBpbnRlcmZhY2Ugc28g
dGhhdCBpdCBjYW4gYmUgb3ZlcnJpZGVuIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiIiIgorICAgICAg
ICBleGVjdXRhYmxlID0gc2VsZi5fcGF0aF90b19pbWFnZV9kaWZmKCkKKyAgICAgICAgY21kID0g
W2V4ZWN1dGFibGUsICctLWRpZmYnLCBhY3R1YWxfZmlsZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1l
LAorICAgICAgICAgICAgICAgZGlmZl9maWxlbmFtZV0KKyAgICAgICAgcmVzdWx0ID0gMQorICAg
ICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNhbGwoY21kKQorICAg
ICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8u
RU5PRU5UIG9yIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTOgorICAgICAgICAgICAgICAgIF9jb21w
YXJlX2F2YWlsYWJsZSA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHJhaXNlIGUKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAjIHdvcmsg
YXJvdW5kIGEgcmFjZSBjb25kaXRpb24gaW4gUHl0aG9uIDIuNCdzIGltcGxlbWVudGF0aW9uCisg
ICAgICAgICAgICAjIG9mIHN1YnByb2Nlc3MuUG9wZW4KKyAgICAgICAgICAgIHBhc3MKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGRpZmZfdGV4dChzZWxmLCBhY3R1YWxfdGV4dCwg
ZXhwZWN0ZWRfdGV4dCwKKyAgICAgICAgICAgICAgICAgIGFjdHVhbF9maWxlbmFtZSwgZXhwZWN0
ZWRfZmlsZW5hbWUpOgorICAgICAgICAiIiJSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhl
IGRpZmYgb2YgdGhlIHR3byB0ZXh0IHN0cmluZ3MKKyAgICAgICAgaW4gJ3VuaWZpZWQgZGlmZicg
Zm9ybWF0LgorCisgICAgICAgIFdoaWxlIHRoaXMgaXMgYSBnZW5lcmljIHJvdXRpbmUsIHdlIGlu
Y2x1ZGUgaXQgaW4gdGhlIFBvcnQKKyAgICAgICAgaW50ZXJmYWNlIHNvIHRoYXQgaXQgY2FuIGJl
IG92ZXJyaWRlbiBmb3IgdGVzdGluZyBwdXJwb3Nlcy4iIiIKKyAgICAgICAgZGlmZiA9IGRpZmZs
aWIudW5pZmllZF9kaWZmKGV4cGVjdGVkX3RleHQuc3BsaXRsaW5lcyhUcnVlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF90ZXh0LnNwbGl0bGluZXMoVHJ1ZSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9maWxlbmFtZSkKKyAg
ICAgICAgcmV0dXJuICcnLmpvaW4oZGlmZikKKworICAgIGRlZiBleHBlY3RlZF9iYXNlbGluZXMo
c2VsZiwgZmlsZW5hbWUsIHN1ZmZpeCwgYWxsX2Jhc2VsaW5lcz1GYWxzZSk6CisgICAgICAgICIi
IkdpdmVuIGEgdGVzdCBuYW1lLCBmaW5kcyB3aGVyZSB0aGUgYmFzZWxpbmUgcmVzdWx0cyBhcmUg
bG9jYXRlZC4KKworICAgICAgICBBcmdzOgorICAgICAgICBmaWxlbmFtZTogYWJzb2x1dGUgZmls
ZW5hbWUgdG8gdGVzdCBmaWxlCisgICAgICAgIHN1ZmZpeDogZmlsZSBzdWZmaXggb2YgdGhlIGV4
cGVjdGVkIHJlc3VsdHMsIGluY2x1ZGluZyBkb3Q7IGUuZy4KKyAgICAgICAgICAgICcudHh0JyBv
ciAnLnBuZycuICBUaGlzIHNob3VsZCBub3QgYmUgTm9uZSwgYnV0IG1heSBiZSBhbiBlbXB0eQor
ICAgICAgICAgICAgc3RyaW5nLgorICAgICAgICBhbGxfYmFzZWxpbmVzOiBJZiBUcnVlLCByZXR1
cm4gYW4gb3JkZXJlZCBsaXN0IG9mIGFsbCBiYXNlbGluZSBwYXRocworICAgICAgICAgICAgZm9y
IHRoZSBnaXZlbiBwbGF0Zm9ybS4gSWYgRmFsc2UsIHJldHVybiBvbmx5IHRoZSBmaXJzdCBvbmUu
CisgICAgICAgIFJldHVybnMKKyAgICAgICAgYSBsaXN0IG9mICggcGxhdGZvcm1fZGlyLCByZXN1
bHRzX2ZpbGVuYW1lICksIHdoZXJlCisgICAgICAgICAgICBwbGF0Zm9ybV9kaXIgLSBhYnMgcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSByZXN1bHRzIHRyZWUgKG9yIHRlc3QKKyAgICAgICAgICAgICAg
ICB0cmVlKQorICAgICAgICAgICAgcmVzdWx0c19maWxlbmFtZSAtIHJlbGF0aXZlIHBhdGggZnJv
bSB0b3Agb2YgdHJlZSB0byB0aGUgcmVzdWx0cworICAgICAgICAgICAgICAgIGZpbGUKKyAgICAg
ICAgICAgIChvcy5wYXRoLmpvaW4gb2YgdGhlIHR3byBnaXZlcyB5b3UgdGhlIGZ1bGwgcGF0aCB0
byB0aGUgZmlsZSwKKyAgICAgICAgICAgICAgICB1bmxlc3MgTm9uZSB3YXMgcmV0dXJuZWQuKQor
ICAgICAgICBSZXR1cm4gdmFsdWVzIHdpbGwgYmUgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0ZSBm
b3IgdGhlIGN1cnJlbnQKKyAgICAgICAgcGxhdGZvcm0gKGUuZy4sICJcXCIgZm9yIHBhdGggc2Vw
YXJhdG9ycyBvbiBXaW5kb3dzKS4gSWYgdGhlIHJlc3VsdHMKKyAgICAgICAgZmlsZSBpcyBub3Qg
Zm91bmQsIHRoZW4gTm9uZSB3aWxsIGJlIHJldHVybmVkIGZvciB0aGUgZGlyZWN0b3J5LAorICAg
ICAgICBidXQgdGhlIGV4cGVjdGVkIHJlbGF0aXZlIHBhdGhuYW1lIHdpbGwgc3RpbGwgYmUgcmV0
dXJuZWQuCisKKyAgICAgICAgVGhpcyByb3V0aW5lIGlzIGdlbmVyaWMgYnV0IGxpdmVzIGhlcmUg
c2luY2UgaXQgaXMgdXNlZCBpbgorICAgICAgICBjb25qdW5jdGlvbiB3aXRoIHRoZSBvdGhlciBi
YXNlbGluZSBhbmQgZmlsZW5hbWUgcm91dGluZXMgdGhhdCBhcmUKKyAgICAgICAgcGxhdGZvcm0g
c3BlY2lmaWMuCisgICAgICAgICIiIgorICAgICAgICB0ZXN0bmFtZSA9IG9zLnBhdGguc3BsaXRl
eHQoc2VsZi5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSlbMF0KKworICAgICAgICBi
YXNlbGluZV9maWxlbmFtZSA9IHRlc3RuYW1lICsgJy1leHBlY3RlZCcgKyBzdWZmaXgKKworICAg
ICAgICBiYXNlbGluZV9zZWFyY2hfcGF0aCA9IHNlbGYuYmFzZWxpbmVfc2VhcmNoX3BhdGgoKQor
CisgICAgICAgIGJhc2VsaW5lcyA9IFtdCisgICAgICAgIGZvciBwbGF0Zm9ybV9kaXIgaW4gYmFz
ZWxpbmVfc2VhcmNoX3BhdGg6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRo
LmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpOgorICAgICAgICAgICAgICAg
IGJhc2VsaW5lcy5hcHBlbmQoKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQorCisg
ICAgICAgICAgICBpZiBub3QgYWxsX2Jhc2VsaW5lcyBhbmQgYmFzZWxpbmVzOgorICAgICAgICAg
ICAgICAgIHJldHVybiBiYXNlbGluZXMKKworICAgICAgICAjIElmIGl0IHdhc24ndCBmb3VuZCBp
biBhIHBsYXRmb3JtIGRpcmVjdG9yeSwgcmV0dXJuIHRoZSBleHBlY3RlZAorICAgICAgICAjIHJl
c3VsdCBpbiB0aGUgdGVzdCBkaXJlY3RvcnksIGV2ZW4gaWYgbm8gc3VjaCBmaWxlIGFjdHVhbGx5
IGV4aXN0cy4KKyAgICAgICAgcGxhdGZvcm1fZGlyID0gc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkK
KyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBsYXRmb3JtX2RpciwgYmFz
ZWxpbmVfZmlsZW5hbWUpKToKKyAgICAgICAgICAgIGJhc2VsaW5lcy5hcHBlbmQoKHBsYXRmb3Jt
X2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQorCisgICAgICAgIGlmIGJhc2VsaW5lczoKKyAgICAg
ICAgICAgIHJldHVybiBiYXNlbGluZXMKKworICAgICAgICByZXR1cm4gWyhOb25lLCBiYXNlbGlu
ZV9maWxlbmFtZSldCisKKyAgICBkZWYgZXhwZWN0ZWRfZmlsZW5hbWUoc2VsZiwgZmlsZW5hbWUs
IHN1ZmZpeCk6CisgICAgICAgICIiIkdpdmVuIGEgdGVzdCBuYW1lLCByZXR1cm5zIGFuIGFic29s
dXRlIHBhdGggdG8gaXRzIGV4cGVjdGVkIHJlc3VsdHMuCisKKyAgICAgICAgSWYgbm8gZXhwZWN0
ZWQgcmVzdWx0cyBhcmUgZm91bmQgaW4gYW55IG9mIHRoZSBzZWFyY2hlZCBkaXJlY3RvcmllcywK
KyAgICAgICAgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgdGVzdCBpdHNlbGYgaXMgbG9jYXRl
ZCB3aWxsIGJlIHJldHVybmVkLgorICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGluIHRoZSBm
b3JtYXQgYXBwcm9wcmlhdGUgZm9yIHRoZSBwbGF0Zm9ybQorICAgICAgICAoZS5nLiwgIlxcIiBm
b3IgcGF0aCBzZXBhcmF0b3JzIG9uIHdpbmRvd3MpLgorCisgICAgICAgIEFyZ3M6CisgICAgICAg
IGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKKyAgICAgICAgc3VmZml4
OiBmaWxlIHN1ZmZpeCBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cywgaW5jbHVkaW5nIGRvdDsgZS5n
LiAnLnR4dCcKKyAgICAgICAgICAgIG9yICcucG5nJy4gIFRoaXMgc2hvdWxkIG5vdCBiZSBOb25l
LCBidXQgbWF5IGJlIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAgcGxhdGZvcm06IHRoZSBtb3N0
LXNwZWNpZmljIGRpcmVjdG9yeSBuYW1lIHRvIHVzZSB0byBidWlsZCB0aGUKKyAgICAgICAgICAg
IHNlYXJjaCBsaXN0IG9mIGRpcmVjdG9yaWVzLCBlLmcuLCAnY2hyb21pdW0td2luJywgb3IKKyAg
ICAgICAgICAgICdjaHJvbWl1bS1tYWMtbGVvcGFyZCcgKHdlIGZvbGxvdyB0aGUgV2ViS2l0IGZv
cm1hdCkKKworICAgICAgICBUaGlzIHJvdXRpbmUgaXMgZ2VuZXJpYyBidXQgaXMgaW1wbGVtZW50
ZWQgaGVyZSB0byBsaXZlIGFsb25nc2lkZQorICAgICAgICB0aGUgb3RoZXIgYmFzZWxpbmUgYW5k
IGZpbGVuYW1lIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KKyAgICAgICAgIiIiCisgICAgICAgIHBs
YXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUgPSBzZWxmLmV4cGVjdGVkX2Jhc2VsaW5lcygK
KyAgICAgICAgICAgIGZpbGVuYW1lLCBzdWZmaXgpWzBdCisgICAgICAgIGlmIHBsYXRmb3JtX2Rp
cjoKKyAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNlbGlu
ZV9maWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmxheW91dF90ZXN0
c19kaXIoKSwgYmFzZWxpbmVfZmlsZW5hbWUpCisKKyAgICBkZWYgZmlsZW5hbWVfdG9fdXJpKHNl
bGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiQ29udmVydCBhIHRlc3QgZmlsZSB0byBhIFVSSS4i
IiIKKyAgICAgICAgTEFZT1VUVEVTVF9IVFRQX0RJUiA9ICJodHRwL3Rlc3RzLyIKKyAgICAgICAg
TEFZT1VUVEVTVF9XRUJTT0NLRVRfRElSID0gIndlYnNvY2tldC90ZXN0cy8iCisKKyAgICAgICAg
cmVsYXRpdmVfcGF0aCA9IHNlbGYucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKKyAg
ICAgICAgcG9ydCA9IE5vbmUKKyAgICAgICAgdXNlX3NzbCA9IEZhbHNlCisKKyAgICAgICAgaWYg
cmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKExBWU9VVFRFU1RfSFRUUF9ESVIpOgorICAgICAgICAg
ICAgIyBodHRwL3Rlc3RzLyBydW4gb2ZmIHBvcnQgODAwMCBhbmQgc3NsLyBvZmYgODQ0MworICAg
ICAgICAgICAgcmVsYXRpdmVfcGF0aCA9IHJlbGF0aXZlX3BhdGhbbGVuKExBWU9VVFRFU1RfSFRU
UF9ESVIpOl0KKyAgICAgICAgICAgIHBvcnQgPSA4MDAwCisgICAgICAgIGVsaWYgcmVsYXRpdmVf
cGF0aC5zdGFydHN3aXRoKExBWU9VVFRFU1RfV0VCU09DS0VUX0RJUik6CisgICAgICAgICAgICAj
IHdlYnNvY2tldC90ZXN0cy8gcnVuIG9mZiBwb3J0IDg4ODAgYW5kIDkzMjMKKyAgICAgICAgICAg
ICMgTm90ZTogdGhlIHJvb3QgaXMgLywgbm90IHdlYnNvY2tldC90ZXN0cy8KKyAgICAgICAgICAg
IHBvcnQgPSA4ODgwCisKKyAgICAgICAgIyBNYWtlIGh0dHAvdGVzdHMvbG9jYWwgcnVuIGFzIGxv
Y2FsIGZpbGVzLiBUaGlzIGlzIHRvIG1pbWljIHRoZQorICAgICAgICAjIGxvZ2ljIGluIHJ1bi13
ZWJraXQtdGVzdHMuCisgICAgICAgICMKKyAgICAgICAgIyBUT0RPKGRwcmFua2UpOiByZW1vdmUg
dGhlIG1lZGlhIHJlZmVyZW5jZSBhbmQgdGhlIFNTTCByZWZlcmVuY2U/CisgICAgICAgIGlmIChw
b3J0IGFuZCBub3QgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKCJsb2NhbC8iKSBhbmQKKyAgICAg
ICAgICAgIG5vdCByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoIm1lZGlhLyIpKToKKyAgICAgICAg
ICAgIGlmIHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0aCgic3NsLyIpOgorICAgICAgICAgICAgICAg
IHBvcnQgKz0gNDQzCisgICAgICAgICAgICAgICAgcHJvdG9jb2wgPSAiaHR0cHMiCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb3RvY29sID0gImh0dHAiCisgICAgICAgICAg
ICByZXR1cm4gIiVzOi8vMTI3LjAuMC4xOiV1LyVzIiAlIChwcm90b2NvbCwgcG9ydCwgcmVsYXRp
dmVfcGF0aCkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzIn
KToKKyAgICAgICAgICAgIHJldHVybiAiZmlsZTovLy8iICsgc2VsZi5nZXRfYWJzb2x1dGVfcGF0
aChmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuICJmaWxlOi8vIiArIHNlbGYuZ2V0X2Fic29sdXRl
X3BhdGgoZmlsZW5hbWUpCisKKyAgICBkZWYgZ2V0X2Fic29sdXRlX3BhdGgoc2VsZiwgZmlsZW5h
bWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIHBhdGggaW4gdW5peCBmb3JtYXQg
Zm9yIHRoZSBnaXZlbiBmaWxlbmFtZS4KKworICAgICAgICBUaGlzIHJvdXRpbmUgZXhpc3RzIHNv
IHRoYXQgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgdXNlIHVuaXggZmlsZW5hbWVzCisgICAgICAgIGNh
biBjb252ZXJ0IGFjY29yZGluZ2x5LiIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRo
KGZpbGVuYW1lKQorCisgICAgZGVmIGxheW91dF90ZXN0c19kaXIoc2VsZik6CisgICAgICAgICIi
IlJldHVybiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBMYXlvdXRUZXN0cyBk
aXJlY3RvcnkuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgn
TGF5b3V0VGVzdHMnKQorCisgICAgZGVmIG1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYsICpwYXRo
KToKKyAgICAgICAgIiIiQ3JlYXRlcyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpZiBpdCBkb2Vz
bid0IGFscmVhZHkgZXhpc3QuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1ha2Vk
aXJzKG9zLnBhdGguam9pbigqcGF0aCkpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAg
ICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgcmFp
c2UKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG5hbWUgb2Yg
dGhlIHBvcnQgKGUuZy4sICdtYWMnLCAnY2hyb21pdW0td2luLXhwJykuCisKKyAgICAgICAgTm90
ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIHRlc3RfcGxhdGZvcm1fbmFtZSgpLCB3
aGljaAorICAgICAgICBtYXkgYmUgZGlmZmVyZW50IChlLmcuLCAnd2luLXhwJyBpbnN0ZWFkIG9m
ICdjaHJvbWl1bS13aW4teHAnLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAg
ZGVmIG51bV9jb3JlcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgY29y
ZXMvY3B1cyBhdmFpbGFibGUgb24gdGhpcyBtYWNoaW5lLgorCisgICAgICAgIFRoaXMgcm91dGlu
ZSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBhbW91bnQgb2YgcGFyYWxsZWxpc20K
KyAgICAgICAgdXNlZCBieSBydW4tY2hyb21pdW0td2Via2l0LXRlc3RzLiIiIgorICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0Lm51bV9jb3JlcycpCisKKyAgICBkZWYgcGF0
aF9mcm9tX3dlYmtpdF9iYXNlKHNlbGYsICpjb21wcyk6CisgICAgICAgICIiIlJldHVybnMgdGhl
IGZ1bGwgcGF0aCB0byBwYXRoIG1hZGUgYnkgam9pbmluZyB0aGUgdG9wIG9mIHRoZQorICAgICAg
ICBXZWJLaXQgc291cmNlIHRyZWUgYW5kIHRoZSBsaXN0IG9mIHBhdGggY29tcG9uZW50cyBpbiB8
KmNvbXBzfC4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3dlYmtpdF9iYXNlX2RpcjoKKyAgICAg
ICAgICAgIGFic3BhdGggPSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCisgICAgICAgICAgICBz
ZWxmLl93ZWJraXRfYmFzZV9kaXIgPSBhYnNwYXRoWzA6YWJzcGF0aC5maW5kKCdXZWJLaXRUb29s
cycpXQorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuX3dlYmtpdF9iYXNlX2Rpciwg
KmNvbXBzKQorCisgICAgZGVmIHJlbW92ZV9kaXJlY3Rvcnkoc2VsZiwgKnBhdGgpOgorICAgICAg
ICAiIiJSZWN1cnNpdmVseSByZW1vdmVzIGEgZGlyZWN0b3J5LCBldmVuIGlmIGl0J3MgbWFya2Vk
IHJlYWQtb25seS4KKworICAgICAgICBSZW1vdmUgdGhlIGRpcmVjdG9yeSBsb2NhdGVkIGF0ICpw
YXRoLCBpZiBpdCBleGlzdHMuCisKKyAgICAgICAgc2h1dGlsLnJtdHJlZSgpIGRvZXNuJ3Qgd29y
ayBvbiBXaW5kb3dzIGlmIGFueSBvZiB0aGUgZmlsZXMKKyAgICAgICAgb3IgZGlyZWN0b3JpZXMg
YXJlIHJlYWQtb25seSwgd2hpY2ggc3ZuIHJlcG9zaXRvcmllcyBhbmQKKyAgICAgICAgc29tZSAu
c3ZuIGZpbGVzIGFyZS4gIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBmb3JjZSB0aGUgZmlsZXMKKyAg
ICAgICAgdG8gYmUgd3JpdGFibGUgKGkuZS4sIGRlbGV0YWJsZSkgYXMgd2UgdHJhdmVyc2UgdGhl
IHRyZWUuCisKKyAgICAgICAgRXZlbiB3aXRoIGFsbCB0aGlzLCBXaW5kb3dzIHN0aWxsIHNvbWV0
aW1lcyBmYWlscyB0byBkZWxldGUgYSBmaWxlLAorICAgICAgICBjaXRpbmcgYSBwZXJtaXNzaW9u
IGVycm9yIChtYXliZSBzb21ldGhpbmcgdG8gZG8gd2l0aCBhbnRpdmlydXMKKyAgICAgICAgc2Nh
bnMgb3IgZGlzayBpbmRleGluZykuICBUaGUgYmVzdCBzdWdnZXN0aW9uIGFueSBvZiB0aGUgdXNl
cgorICAgICAgICBmb3J1bXMgaGFkIHdhcyB0byB3YWl0IGEgYml0IGFuZCB0cnkgYWdhaW4sIHNv
IHdlIGRvIHRoYXQgdG9vLgorICAgICAgICBJdCdzIGhhbmQtd2F2aW5nLCBidXQgc29tZXRpbWVz
IGl0IHdvcmtzLiA6LworICAgICAgICAiIiIKKyAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5q
b2luKCpwYXRoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKKyAg
ICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdpbjMyID0gRmFsc2UKKyAgICAgICAgaWYgc3lz
LnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICB3aW4zMiA9IFRydWUKKyAgICAgICAg
ICAgICMgU29tZSBwZW9wbGUgZG9uJ3QgaGF2ZSB0aGUgQVBJcyBpbnN0YWxsZWQuIEluIHRoYXQg
Y2FzZSB3ZSdsbCBkbworICAgICAgICAgICAgIyB3aXRob3V0LgorICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgIHdpbjMyYXBpID0gX19pbXBvcnRfXygnd2luMzJhcGknKQorICAgICAg
ICAgICAgICAgIHdpbjMyY29uID0gX19pbXBvcnRfXygnd2luMzJjb24nKQorICAgICAgICAgICAg
ZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHdpbjMyID0gRmFsc2UKKworICAg
ICAgICAgICAgZGVmIHJlbW92ZV93aXRoX3JldHJ5KHJtZnVuYywgcGF0aCk6CisgICAgICAgICAg
ICAgICAgb3MuY2htb2QocGF0aCwgc3RhdC5TX0lXUklURSkKKyAgICAgICAgICAgICAgICBpZiB3
aW4zMjoKKyAgICAgICAgICAgICAgICAgICAgd2luMzJhcGkuU2V0RmlsZUF0dHJpYnV0ZXMocGF0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW4zMmNv
bi5GSUxFX0FUVFJJQlVURV9OT1JNQUwpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcm1mdW5jKHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEVu
dmlyb25tZW50RXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJy
bm8uRUFDQ0VTOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbnQgJ0ZhaWxlZCB0byBkZWxldGUgJXM6IHRyeWluZyBhZ2FpbicgJSByZXByKHBh
dGgpCisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcm1mdW5jKHBhdGgpCisgICAgICAgIGVsc2U6CisKKyAgICAgICAgICAgIGRl
ZiByZW1vdmVfd2l0aF9yZXRyeShybWZ1bmMsIHBhdGgpOgorICAgICAgICAgICAgICAgIGlmIG9z
LnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3MucmVtb3Zl
KHBhdGgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJtZnVuYyhwYXRoKQorCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxr
KGZpbGVfcGF0aCwgdG9wZG93bj1GYWxzZSk6CisgICAgICAgICAgICAjIEZvciBQT1NJWDogIG1h
a2luZyB0aGUgZGlyZWN0b3J5IHdyaXRhYmxlIGd1YXJhbnRlZXMKKyAgICAgICAgICAgICMgcmVt
b3ZhYmlsaXR5LiBXaW5kb3dzIHdpbGwgaWdub3JlIHRoZSBub24tcmVhZC1vbmx5CisgICAgICAg
ICAgICAjIGJpdHMgaW4gdGhlIGNobW9kIHZhbHVlLgorICAgICAgICAgICAgb3MuY2htb2Qocm9v
dCwgMDc3MCkKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAg
IHJlbW92ZV93aXRoX3JldHJ5KG9zLnJlbW92ZSwgb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQor
ICAgICAgICAgICAgZm9yIG5hbWUgaW4gZGlyczoKKyAgICAgICAgICAgICAgICByZW1vdmVfd2l0
aF9yZXRyeShvcy5ybWRpciwgb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorCisgICAgICAgIHJl
bW92ZV93aXRoX3JldHJ5KG9zLnJtZGlyLCBmaWxlX3BhdGgpCisKKyAgICBkZWYgdGVzdF9wbGF0
Zm9ybV9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHJl
bGF0aXZlX3Rlc3RfZmlsZW5hbWUoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJSZWxhdGl2
ZSB1bml4LXN0eWxlIHBhdGggZm9yIGEgZmlsZW5hbWUgdW5kZXIgdGhlIExheW91dFRlc3RzCisg
ICAgICAgIGRpcmVjdG9yeS4gRmlsZW5hbWVzIG91dHNpZGUgdGhlIExheW91dFRlc3RzIGRpcmVj
dG9yeSBzaG91bGQgcmFpc2UKKyAgICAgICAgYW4gZXJyb3IuIiIiCisgICAgICAgIHJldHVybiBm
aWxlbmFtZVtsZW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkpICsgMTpdCisKKyAgICBkZWYgcmVz
dWx0c19kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgICIiIkFic29sdXRlIHBhdGggdG8gdGhlIHBs
YWNlIHRvIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHMuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkKCdQb3J0LnJlc3VsdHNfZGlyZWN0b3J5JykKKworICAgIGRlZiBzZXR1cF90ZXN0X3J1
bihzZWxmKToKKyAgICAgICAgIiIiVGhpcyByb3V0aW5lIGNhbiBiZSBvdmVycmlkZGVuIHRvIHBl
cmZvcm0gYW55IHBvcnQtc3BlY2lmaWMKKyAgICAgICAgd29yayB0aGF0IHNob3V1bGQgYmUgZG9u
ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgdGVzdCBydW4uIiIiCisgICAgICAgIHBhc3MKKworICAg
IGRlZiBzaG93X2h0bWxfcmVzdWx0c19maWxlKHNlbGYsIHJlc3VsdHNfZmlsZW5hbWUpOgorICAg
ICAgICAiIiJUaGlzIHJvdXRpbmUgc2hvdWxkIGRpc3BsYXkgdGhlIEhUTUwgZmlsZSBwb2ludGVk
IGF0IGJ5CisgICAgICAgIHJlc3VsdHNfZmlsZW5hbWUgaW4gYSB1c2VycycgYnJvd3Nlci4iIiIK
KyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5zaG93X2h0bWxfcmVzdWx0
c19maWxlJykKKworICAgIGRlZiBzdGFydF9kcml2ZXIoc2VsZiwgcG5nX3BhdGgsIG9wdGlvbnMp
OgorICAgICAgICAiIiJTdGFydHMgYSBuZXcgdGVzdCBEcml2ZXIgYW5kIHJldHVybnMgYSBoYW5k
bGUgdG8gdGhlIG9iamVjdC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcign
UG9ydC5zdGFydF9kcml2ZXInKQorCisgICAgZGVmIHN0YXJ0X2hlbHBlcihzZWxmKToKKyAgICAg
ICAgIiIiU3RhcnQgYSBsYXlvdXQgdGVzdCBoZWxwZXIgaWYgbmVlZGVkIG9uIHRoaXMgcG9ydC4g
VGhlIHRlc3QgaGVscGVyCisgICAgICAgIGlzIHVzZWQgdG8gcmVjb25maWd1cmUgZ3JhcGhpY3Mg
c2V0dGluZ3MgYW5kIGRvIG90aGVyIHRoaW5ncyB0aGF0CisgICAgICAgIG1heSBiZSBuZWNlc3Nh
cnkgdG8gZW5zdXJlIGEga25vd24gdGVzdCBjb25maWd1cmF0aW9uLiIiIgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LnN0YXJ0X2hlbHBlcicpCisKKyAgICBkZWYgc3Rh
cnRfaHR0cF9zZXJ2ZXIoc2VsZik6CisgICAgICAgICIiIlN0YXJ0IGEgd2ViIHNlcnZlciBpZiBp
dCBpcyBhdmFpbGFibGUuIERvIG5vdGhpbmcgaWYKKyAgICAgICAgaXQgaXNuJ3QuIFRoaXMgcm91
dGluZSBpcyBhbGxvd2VkIHRvIChhbmQgbWF5KSBmYWlsIGlmIGEgc2VydmVyCisgICAgICAgIGlz
IGFscmVhZHkgcnVubmluZy4iIiIKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy51c2VfYXBhY2hl
OgorICAgICAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIgPSBhcGFjaGVfaHR0cF9zZXJ2ZXIuTGF5
b3V0VGVzdEFwYWNoZUh0dHBkKHNlbGYsCisgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5y
ZXN1bHRzX2RpcmVjdG9yeSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2h0dHBf
c2VydmVyID0gaHR0cF9zZXJ2ZXIuTGlnaHR0cGQoc2VsZiwKKyAgICAgICAgICAgICAgICBzZWxm
Ll9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgICAgICBzZWxmLl9odHRwX3NlcnZlci5z
dGFydCgpCisKKyAgICBkZWYgc3RhcnRfd2Vic29ja2V0X3NlcnZlcihzZWxmKToKKyAgICAgICAg
IiIiU3RhcnQgYSB3ZWJzb2NrZXQgc2VydmVyIGlmIGl0IGlzIGF2YWlsYWJsZS4gRG8gbm90aGlu
ZyBpZgorICAgICAgICBpdCBpc24ndC4gVGhpcyByb3V0aW5lIGlzIGFsbG93ZWQgdG8gKGFuZCBt
YXkpIGZhaWwgaWYgYSBzZXJ2ZXIKKyAgICAgICAgaXMgYWxyZWFkeSBydW5uaW5nLiIiIgorICAg
ICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyID0gd2Vic29ja2V0X3NlcnZlci5QeVdlYlNvY2tl
dChzZWxmLAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKKyAg
ICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlci5zdGFydCgpCisKKyAgICBkZWYgc3RvcF9oZWxw
ZXIoc2VsZik6CisgICAgICAgICIiIlNodXQgZG93biB0aGUgdGVzdCBoZWxwZXIgaWYgaXQgaXMg
cnVubmluZy4gRG8gbm90aGluZyBpZgorICAgICAgICBpdCBpc24ndCwgb3IgaXQgaXNuJ3QgYXZh
aWxhYmxlLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LnN0b3Bf
aGVscGVyJykKKworICAgIGRlZiBzdG9wX2h0dHBfc2VydmVyKHNlbGYpOgorICAgICAgICAiIiJT
aHV0IGRvd24gdGhlIGh0dHAgc2VydmVyIGlmIGl0IGlzIHJ1bm5pbmcuIERvIG5vdGhpbmcgaWYK
KyAgICAgICAgaXQgaXNuJ3QsIG9yIGl0IGlzbid0IGF2YWlsYWJsZS4iIiIKKyAgICAgICAgaWYg
c2VsZi5faHR0cF9zZXJ2ZXI6CisgICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlci5zdG9wKCkK
KworICAgIGRlZiBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIoc2VsZik6CisgICAgICAgICIiIlNodXQg
ZG93biB0aGUgd2Vic29ja2V0IHNlcnZlciBpZiBpdCBpcyBydW5uaW5nLiBEbyBub3RoaW5nIGlm
CisgICAgICAgIGl0IGlzbid0LCBvciBpdCBpc24ndCBhdmFpbGFibGUuIiIiCisgICAgICAgIGlm
IHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXI6CisgICAgICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2Vy
dmVyLnN0b3AoKQorCisgICAgZGVmIHRlc3RfZXhwZWN0YXRpb25zKHNlbGYpOgorICAgICAgICAi
IiJSZXR1cm5zIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBmb3IgdGhpcyBwb3J0LgorCisgICAgICAg
IEJhc2ljYWxseSB0aGlzIHN0cmluZyBzaG91bGQgY29udGFpbiB0aGUgZXF1aXZhbGVudCBvZiBh
CisgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zIGZpbGUuIFNlZSB0ZXN0X2V4cGVjdGF0aW9ucy5w
eSBmb3IgbW9yZSBkZXRhaWxzLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
KCdQb3J0LnRlc3RfZXhwZWN0YXRpb25zJykKKworICAgIGRlZiB0ZXN0X2Jhc2VfcGxhdGZvcm1f
bmFtZXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgdGhlICdiYXNlJyBwbGF0
Zm9ybXMgb24geW91ciBwb3J0LiBUaGUgYmFzZQorICAgICAgICBwbGF0Zm9ybXMgcmVwcmVzZW50
IGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLCBvcGVyYXRpbmcgc3lzdGVtcywKKyAgICAgICAgb3Ig
aW1wbGVtZW50YXRpb25zIChhcyBvcHBvc2VkIHRvIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBhIHNp
bmdsZQorICAgICAgICBwbGF0Zm9ybSkuIEZvciBleGFtcGxlLCAnbWFjJyBhbmQgJ3dpbicgbWln
aHQgYmUgZGlmZmVyZW50IGJhc2UKKyAgICAgICAgcGxhdGZvcm1zLCB3aGVyZWFzZSAnbWFjLXRp
Z2VyJyBhbmQgJ21hYy1sZW9wYXJkJyBtaWdodCBiZQorICAgICAgICBkaWZmZXJlbnQgcGxhdGZv
cm1zLiBUaGlzIHJvdXRpbmUgaXMgdXNlZCBieSB0aGUgcmViYXNlbGluaW5nIHRvb2wKKyAgICAg
ICAgYW5kIHRoZSBkYXNoYm9hcmRzLCBhbmQgdGhlIHN0cmluZ3MgY29ycmVzcG9uZCB0byB0aGUg
aWRlbnRpZmllcnMKKyAgICAgICAgaW4geW91ciB0ZXN0IGV4cGVjdGF0aW9ucyAoKm5vdCogbmVj
ZXNzYXJpbHkgdGhlIHBsYXRmb3JtIG5hbWVzCisgICAgICAgIHRoZW1zZWx2ZXMpLiIiIgorICAg
ICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LmJhc2VfdGVzdF9wbGF0Zm9ybXMn
KQorCisgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJu
cyB0aGUgc3RyaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIHBsYXRmb3JtIG5hbWUK
KyAgICAgICAgaW4gdGhlIHRlc3QgZXhwZWN0YXRpb25zLiBUaGlzIG1heSBiZSB0aGUgc2FtZSBh
cyBuYW1lKCksIG9yIGl0CisgICAgICAgIG1heSBiZSBkaWZmZXJlbnQuIEZvciBleGFtcGxlLCBj
aHJvbWl1bSByZXR1cm5zICdtYWMnIGZvcgorICAgICAgICAnY2hyb21pdW0tbWFjJy4iIiIKKyAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC50ZXN0X3BsYXRmb3JtX25hbWUn
KQorCisgICAgZGVmIHRlc3RfcGxhdGZvcm1zKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRo
ZSBsaXN0IG9mIHRlc3QgcGxhdGZvcm0gaWRlbnRpZmllcnMgYXMgdXNlZCBpbiB0aGUKKyAgICAg
ICAgdGVzdF9leHBlY3RhdGlvbnMgYW5kIG9uIGRhc2hib2FyZHMsIHRoZSByZWJhc2VsaW5pbmcg
dG9vbCwgZXRjLgorCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0
aGUgc2FtZSBhcyB0aGUgbGlzdCBvZiBwb3J0cywKKyAgICAgICAgd2hpY2ggbXVzdCBiZSBnbG9i
YWxseSB1bmlxdWUgKGUuZy4sIGJvdGggJ2Nocm9taXVtLW1hYycgYW5kICdtYWMnCisgICAgICAg
IG1pZ2h0IHJldHVybiAnbWFjJyBhcyBhIHRlc3RfcGxhdGZvcm0gbmFtZScuIiIiCisgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQucGxhdGZvcm1zJykKKworICAgIGRlZiB2
ZXJzaW9uKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIGEgc3RyaW5nIGluZGljYXRpbmcgdGhl
IHZlcnNpb24gb2YgYSBnaXZlbiBwbGF0Zm9ybSwgZS5nLgorICAgICAgICAnLWxlb3BhcmQnIG9y
ICcteHAnLgorCisgICAgICAgIFRoaXMgaXMgdXNlZCB0byBoZWxwIGlkZW50aWZ5IHRoZSBleGFj
dCBwb3J0IHdoZW4gcGFyc2luZyB0ZXN0CisgICAgICAgIGV4cGVjdGF0aW9ucywgZGV0ZXJtaW5p
bmcgc2VhcmNoIHBhdGhzLCBhbmQgbG9nZ2luZyBpbmZvcm1hdGlvbi4iIiIKKyAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC52ZXJzaW9uJykKKworICAgIGRlZiB3ZGlmZl90
ZXh0KHNlbGYsIGFjdHVhbF9maWxlbmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUpOgorICAgICAgICAi
IiJSZXR1cm5zIGEgc3RyaW5nIG9mIEhUTUwgaW5kaWNhdGluZyB0aGUgd29yZC1sZXZlbCBkaWZm
IG9mIHRoZQorICAgICAgICBjb250ZW50cyBvZiB0aGUgdHdvIGZpbGVuYW1lcy4gUmV0dXJucyBh
biBlbXB0eSBzdHJpbmcgaWYgd29yZC1sZXZlbAorICAgICAgICBkaWZmaW5nIGlzbid0IGF2YWls
YWJsZS4iIiIKKyAgICAgICAgZXhlY3V0YWJsZSA9IHNlbGYuX3BhdGhfdG9fd2RpZmYoKQorICAg
ICAgICBjbWQgPSBbZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICctLXN0YXJ0LWRlbGV0ZT0j
I1dESUZGX0RFTCMjJywKKyAgICAgICAgICAgICAgICctLWVuZC1kZWxldGU9IyNXRElGRl9FTkQj
IycsCisgICAgICAgICAgICAgICAnLS1zdGFydC1pbnNlcnQ9IyNXRElGRl9BREQjIycsCisgICAg
ICAgICAgICAgICAnLS1lbmQtaW5zZXJ0PSMjV0RJRkZfRU5EIyMnLAorICAgICAgICAgICAgICAg
ZXhwZWN0ZWRfZmlsZW5hbWUsCisgICAgICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWVdCisgICAg
ICAgIGdsb2JhbCBfd2RpZmZfYXZhaWxhYmxlCisgICAgICAgIHJlc3VsdCA9ICcnCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgICMgUHl0aG9uJ3MgUG9wZW4gaGFzIGEgYnVnIHRoYXQgY2F1c2Vz
IGFueSBwaXBlcyBvcGVuZWQgdG8gYQorICAgICAgICAgICAgIyBwcm9jZXNzIHRoYXQgY2FuJ3Qg
YmUgZXhlY3V0ZWQgdG8gYmUgbGVha2VkLiAgU2luY2UgdGhpcworICAgICAgICAgICAgIyBjb2Rl
IGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB0b2xlcmF0ZSBleGVjIGZhaWx1cmVzCisgICAg
ICAgICAgICAjIHRvIGdyYWNlZnVsbHkgaGFuZGxlIGNhc2VzIHdoZXJlIHdkaWZmIGlzIG5vdCBp
bnN0YWxsZWQsCisgICAgICAgICAgICAjIHRoZSBidWcgcmVzdWx0cyBpbiBhIG1hc3NpdmUgZmls
ZSBkZXNjcmlwdG9yIGxlYWsuIEFzIGEKKyAgICAgICAgICAgICMgd29ya2Fyb3VuZCwgaWYgYW4g
ZXhlYyBmYWlsdXJlIGlzIGV2ZXIgZXhwZXJpZW5jZWQgZm9yCisgICAgICAgICAgICAjIHdkaWZm
LCBhc3N1bWUgaXQncyBub3QgYXZhaWxhYmxlLiAgVGhpcyB3aWxsIGxlYWsgb25lCisgICAgICAg
ICAgICAjIGZpbGUgZGVzY3JpcHRvciBidXQgdGhhdCdzIGJldHRlciB0aGFuIGxlYWtpbmcgZWFj
aCB0aW1lCisgICAgICAgICAgICAjIHdkaWZmIHdvdWxkIGJlIHJ1bi4KKyAgICAgICAgICAgICMK
KyAgICAgICAgICAgICMgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWxp
c3QvCisgICAgICAgICAgICAjICAgIDIwMDgtQXVndXN0LzUwNTc1My5odG1sCisgICAgICAgICAg
ICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzMjEwCisgICAgICAgICAgICAjCisgICAg
ICAgICAgICAjIEl0IGFsc28gaGFzIGEgdGhyZWFkaW5nIGJ1Zywgc28gd2UgZG9uJ3Qgb3V0cHV0
IHdkaWZmIGlmCisgICAgICAgICAgICAjIHRoZSBQb3BlbiByYWlzZXMgYSBWYWx1ZUVycm9yLgor
ICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTIzNgorICAgICAgICAg
ICAgaWYgX3dkaWZmX2F2YWlsYWJsZToKKyAgICAgICAgICAgICAgICB3ZGlmZiA9IHN1YnByb2Nl
c3MuUG9wZW4oY21kLAorICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBF
KS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICAgICAgd2RpZmYgPSBjZ2kuZXNjYXBlKHdk
aWZmKQorICAgICAgICAgICAgICAgIHdkaWZmID0gd2RpZmYucmVwbGFjZSgnIyNXRElGRl9ERUwj
IycsICc8c3BhbiBjbGFzcz1kZWw+JykKKyAgICAgICAgICAgICAgICB3ZGlmZiA9IHdkaWZmLnJl
cGxhY2UoJyMjV0RJRkZfQUREIyMnLCAnPHNwYW4gY2xhc3M9YWRkPicpCisgICAgICAgICAgICAg
ICAgd2RpZmYgPSB3ZGlmZi5yZXBsYWNlKCcjI1dESUZGX0VORCMjJywgJzwvc3Bhbj4nKQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9ICc8aGVhZD48c3R5bGU+LmRlbCB7IGJhY2tncm91bmQ6ICNm
YWE7IH0gJworICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnLmFkZCB7IGJhY2tncm91bmQ6ICNh
ZmE7IH08L3N0eWxlPjwvaGVhZD4nCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICc8cHJlPicg
KyB3ZGlmZiArICc8L3ByZT4nCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAg
ICAgaWYgKGUuZXJybm8gPT0gZXJybm8uRU5PRU5UIG9yIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VT
IG9yCisgICAgICAgICAgICAgICAgZS5lcnJubyA9PSBlcnJuby5FQ0hJTEQpOgorICAgICAgICAg
ICAgICAgIF93ZGlmZl9hdmFpbGFibGUgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICByYWlzZSBlCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICMKKyAgICAj
IFBST1RFQ1RFRCBST1VUSU5FUworICAgICMKKyAgICAjIFRoZSByb3V0aW5lcyBiZWxvdyBzaG91
bGQgb25seSBiZSBjYWxsZWQgYnkgcm91dGluZXMgaW4gdGhpcyBjbGFzcworICAgICMgb3IgYW55
IG9mIGl0cyBzdWJjbGFzc2VzLgorICAgICMKKworICAgIGRlZiBfa2lsbF9wcm9jZXNzKHNlbGYs
IHBpZCk6CisgICAgICAgICIiIkZvcmNlZnVsbHkga2lsbCBhIHByb2Nlc3MuCisKKyAgICAgICAg
VGhpcyByb3V0aW5lIHNob3VsZCBub3QgYmUgdXNlZCBvciBuZWVkZWQgZ2VuZXJpY2FsbHksIGJ1
dCBjYW4gYmUKKyAgICAgICAgdXNlZCBpbiBoZWxwZXIgZmlsZXMgbGlrZSBodHRwX3NlcnZlci5w
eS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5raWxsX3Byb2Nl
c3MnKQorCisgICAgZGVmIF9wYXRoX3RvX2FwYWNoZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJu
cyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBhcGFjaGUgYmluYXJ5LgorCisgICAgICAgIFRoaXMgaXMg
bmVlZGVkIG9ubHkgYnkgcG9ydHMgdGhhdCB1c2UgdGhlIGFwYWNoZV9odHRwX3NlcnZlciBtb2R1
bGUuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQucGF0aF90b19h
cGFjaGUnKQorCisgICAgZGVmIF9wYXRoX3RvX2FwYWNoZV9jb25maWdfZmlsZShzZWxmKToKKyAg
ICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBhcGFjaGUgYmluYXJ5LgorCisg
ICAgICAgIFRoaXMgaXMgbmVlZGVkIG9ubHkgYnkgcG9ydHMgdGhhdCB1c2UgdGhlIGFwYWNoZV9o
dHRwX3NlcnZlciBtb2R1bGUuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3Io
J1BvcnQucGF0aF90b19hcGFjaGVfY29uZmlnX2ZpbGUnKQorCisgICAgZGVmIF9wYXRoX3RvX2Ry
aXZlcihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0ZXN0
IGRyaXZlciAoRHVtcFJlbmRlclRyZWUpLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yKCdQb3J0LnBhdGhfdG9fZHJpdmVyJykKKworICAgIGRlZiBfcGF0aF90b19oZWxwZXIo
c2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgbGF5b3V0X3Rl
c3RfaGVscGVyIGJpbmFyeSwgd2hpY2gKKyAgICAgICAgaXMgdXNlZCB0byBoZWxwIGNvbmZpZ3Vy
ZSB0aGUgc3lzdGVtIGZvciB0aGUgdGVzdCBydW4sIG9yIE5vbmUKKyAgICAgICAgaWYgbm8gaGVs
cGVyIGlzIG5lZWRlZC4KKworICAgICAgICBUaGlzIGlzIGxpa2VseSBvbmx5IHVzZWQgYnkgc3Rh
cnQvc3RvcF9oZWxwZXIoKS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcign
UG9ydC5fcGF0aF90b19oZWxwZXInKQorCisgICAgZGVmIF9wYXRoX3RvX2ltYWdlX2RpZmYoc2Vs
Zik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgaW1hZ2VfZGlmZiBi
aW5hcnksIG9yIE5vbmUgaWYgaXQKKyAgICAgICAgaXMgbm90IGF2YWlsYWJsZS4KKworICAgICAg
ICBUaGlzIGlzIGxpa2VseSB1c2VkIG9ubHkgYnkgZGlmZl9pbWFnZSgpIiIiCisgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQucGF0aF90b19pbWFnZV9kaWZmJykKKworICAg
IGRlZiBfcGF0aF90b19saWdodHRwZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgcGF0
aCB0byB0aGUgTGlnSFRUUGQgYmluYXJ5LgorCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIG9ubHkg
YnkgcG9ydHMgdGhhdCB1c2UgdGhlIGh0dHBfc2VydmVyLnB5IG1vZHVsZS4iIiIKKyAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5fcGF0aF90b19saWdodHRwZCcpCisKKyAg
ICBkZWYgX3BhdGhfdG9fbGlnaHR0cGRfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJu
cyB0aGUgcGF0aCB0byB0aGUgTGlnSFRUUGQgbW9kdWxlcyBkaXJlY3RvcnkuCisKKyAgICAgICAg
VGhpcyBpcyBuZWVkZWQgb25seSBieSBwb3J0cyB0aGF0IHVzZSB0aGUgaHR0cF9zZXJ2ZXIucHkg
bW9kdWxlLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0Ll9wYXRo
X3RvX2xpZ2h0dHBkX21vZHVsZXMnKQorCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkX3BocChz
ZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgTGlnSFRUUGQgUEhQIGV4
ZWN1dGFibGUuCisKKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgb25seSBieSBwb3J0cyB0aGF0IHVz
ZSB0aGUgaHR0cF9zZXJ2ZXIucHkgbW9kdWxlLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yKCdQb3J0Ll9wYXRoX3RvX2xpZ2h0dHBkX3BocCcpCisKKyAgICBkZWYgX3BhdGhf
dG9fd2RpZmYoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUg
d2RpZmYgYmluYXJ5LCBvciBOb25lIGlmIGl0IGlzCisgICAgICAgIG5vdCBhdmFpbGFibGUuCisK
KyAgICAgICAgVGhpcyBpcyBsaWtlbHkgdXNlZCBvbmx5IGJ5IHdkaWZmX3RleHQoKSIiIgorICAg
ICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0Ll9wYXRoX3RvX3dkaWZmJykKKwor
ICAgIGRlZiBfc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlbGYsIHBpZCk6CisgICAgICAgICIiIkZv
cmNlZnVsbHkgYW5kIHN5bmNocm9ub3VzbHkga2lsbHMgdGhlIHdlYiBzZXJ2ZXIuCisKKyAgICAg
ICAgVGhpcyByb3V0aW5lIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIGh0dHBfc2VydmVyLnB5
IG9yIGl0cworICAgICAgICBzdWJjbGFzc2VzLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yKCdQb3J0Ll9zaHV0X2Rvd25faHR0cF9zZXJ2ZXInKQorCisgICAgZGVmIF93ZWJr
aXRfYmFzZWxpbmVfcGF0aChzZWxmLCBwbGF0Zm9ybSk6CisgICAgICAgICIiIlJldHVybiB0aGUg
IGZ1bGwgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBiYXNlbGluZSB0cmVlIGZvciBhCisgICAgICAg
IGdpdmVuIHBsYXRmb3JtLiIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYubGF5
b3V0X3Rlc3RzX2RpcigpLCAncGxhdGZvcm0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBsYXRmb3JtKQorCisKK2NsYXNzIERyaXZlcjoKKyAgICAiIiJBYnN0cmFjdCBpbnRlcmZhY2Ug
Zm9yIHRoZSBEdW1wUmVuZGVyVHJlZSBpbnRlcmZhY2UuIiIiCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydCwgcG5nX3BhdGgsIG9wdGlvbnMpOgorICAgICAgICAiIiJJbml0aWFsaXplIGEg
RHJpdmVyIHRvIHN1YnNlcXVlbnRseSBydW4gdGVzdHMuCisKKyAgICAgICAgVHlwaWNhbGx5IHRo
aXMgcm91dGluZSB3aWxsIHNwYXduIER1bXBSZW5kZXJUcmVlIGluIGEgY29uZmlnCisgICAgICAg
IHJlYWR5IGZvciBzdWJzZXF1ZW50IGlucHV0LgorCisgICAgICAgIHBvcnQgLSByZWZlcmVuY2Ug
YmFjayB0byB0aGUgcG9ydCBvYmplY3QuCisgICAgICAgIHBuZ19wYXRoIC0gYW4gYWJzb2x1dGUg
cGF0aCBmb3IgdGhlIGRyaXZlciB0byB3cml0ZSBhbnkgaW1hZ2UKKyAgICAgICAgICAgIGRhdGEg
Zm9yIGEgdGVzdCAoYXMgYSBQTkcpLiBJZiBubyBwYXRoIGlzIHByb3ZpZGVkLCB0aGF0CisgICAg
ICAgICAgICBpbmRpY2F0ZXMgdGhhdCBwaXhlbCB0ZXN0IHJlc3VsdHMgd2lsbCBub3QgYmUgY2hl
Y2tlZC4KKyAgICAgICAgb3B0aW9ucyAtIGFueSBwb3J0LXNwZWNpZmljIGRyaXZlciBvcHRpb25z
LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdEcml2ZXIuX19pbml0X18n
KQorCisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHVyaSwgdGltZW91dCwgY2hlY2tzdW0pOgorICAg
ICAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdCBhbmQgcmV0dXJuIHRoZSByZXN1bHRzLgorCisgICAg
ICAgIE5vdGUgdGhhdCBpdCBpcyBva2F5IGlmIGEgdGVzdCB0aW1lcyBvdXQgb3IgY3Jhc2hlcyBh
bmQgbGVhdmVzCisgICAgICAgIHRoZSBkcml2ZXIgaW4gYW4gaW5kZXRlcm1pbmF0ZSBzdGF0ZS4g
VGhlIHVwcGVyIGxheWVycyBvZiB0aGUgcHJvZ3JhbQorICAgICAgICBhcmUgcmVzcG9uc2libGUg
Zm9yIGNsZWFuaW5nIHVwIGFuZCBlbnN1cmluZyB0aGluZ3MgYXJlIG9rYXkuCisKKyAgICAgICAg
dXJpIC0gYSBmdWxsIFVSSSBmb3IgdGhlIGdpdmVuIHRlc3QKKyAgICAgICAgdGltZW91dCAtIG51
bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgYWJvcnRpbmcgdGhpcyB0ZXN0Lgor
ICAgICAgICBjaGVja3N1bSAtIGlmIHByZXNlbnQsIHRoZSBleHBlY3RlZCBjaGVja3N1bSBmb3Ig
dGhlIGltYWdlIGZvciB0aGlzCisgICAgICAgICAgICB0ZXN0CisKKyAgICAgICAgUmV0dXJucyBh
IHR1cGxlIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICBjcmFzaCAtIGEgYm9vbGVhbiBp
bmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRyaXZlciBjcmFzaGVkIG9uIHRoZSB0ZXN0CisgICAgICAg
ICAgICB0aW1lb3V0IC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hlaHRlciB0aGUgdGVzdCB0aW1l
ZCBvdXQKKyAgICAgICAgICAgIGNoZWNrc3VtIC0gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2hl
Y2tzdW0gb2YgdGhlIGltYWdlLCBpZgorICAgICAgICAgICAgICAgIHByZXNlbnQKKyAgICAgICAg
ICAgIG91dHB1dCAtIGFueSB0ZXh0IG91dHB1dAorICAgICAgICAgICAgZXJyb3IgLSBhbnkgdW5l
eHBlY3RlZCBvciBhZGRpdGlvbmFsIChvciBlcnJvcikgdGV4dCBvdXRwdXQKKworICAgICAgICBO
b3RlIHRoYXQgdGhlIGltYWdlIGl0c2VsZiBzaG91bGQgYmUgd3JpdHRlbiB0byB0aGUgcGF0aCB0
aGF0IHdhcworICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIF9faW5pdF9fKCkgY2FsbC4iIiIKKyAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignRHJpdmVyLnJ1bl90ZXN0JykKKworICAg
IGRlZiBwb2xsKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIE5vbmUgaWYgdGhlIERyaXZlciBp
cyBzdGlsbCBydW5uaW5nLiBSZXR1cm5zIHRoZSByZXR1cm5jb2RlCisgICAgICAgIGlmIGl0IGhh
cyBleGl0ZWQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0RyaXZlci5w
b2xsJykKKworICAgIGRlZiByZXR1cm5jb2RlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRo
ZSBzeXN0ZW0tc3BlY2lmaWMgcmV0dXJuY29kZSBpZiB0aGUgRHJpdmVyIGhhcyBzdG9wcGVkIG9y
CisgICAgICAgIGV4aXRlZC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcign
RHJpdmVyLnJldHVybmNvZGUnKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IoJ0RyaXZlci5zdG9wJykKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YTc0MGQKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9t
aXVtLnB5CkBAIC0wLDAgKzEsMjU4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisiIiJDaHJvbWl1bSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFBvcnQgaW50ZXJm
YWNlLiIiIgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2Vzcwor
aW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworaW1wb3J0IGJhc2UKK2ltcG9ydCBodHRwX3NlcnZl
cgoraW1wb3J0IHdlYnNvY2tldF9zZXJ2ZXIKKworCitjbGFzcyBDaHJvbWl1bVBvcnQoYmFzZS5Q
b3J0KToKKyAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBDaHJvbWl1bSBpbXBsZW1lbnRh
dGlvbnMgb2YgdGhlIFBvcnQgY2xhc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9y
dF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIGJhc2UuUG9ydC5fX2luaXRfXyhz
ZWxmLCBwb3J0X25hbWUsIG9wdGlvbnMpCisgICAgICAgIHNlbGYuX2Nocm9taXVtX2Jhc2VfZGly
ID0gTm9uZQorCisgICAgZGVmIGJhc2VsaW5lX3BhdGgoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9jaHJvbWl1bV9iYXNlbGluZV9wYXRoKHNlbGYuX25hbWUpCisKKyAgICBkZWYgY2hlY2tf
c3lzX2RlcHMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IFRydWUKKyAgICAgICAgdGVzdF9zaGVs
bF9iaW5hcnlfcGF0aCA9IHNlbGYuX3BhdGhfdG9fZHJpdmVyKCkKKyAgICAgICAgaWYgb3MucGF0
aC5leGlzdHModGVzdF9zaGVsbF9iaW5hcnlfcGF0aCk6CisgICAgICAgICAgICBwcm9jID0gc3Vi
cHJvY2Vzcy5Qb3BlbihbdGVzdF9zaGVsbF9iaW5hcnlfcGF0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnLS1jaGVjay1sYXlvdXQtdGVzdC1zeXMtZGVwcyddKQorICAg
ICAgICAgICAgaWYgcHJvYy53YWl0KCkgIT0gMDoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmVy
cm9yKCJBYm9ydGluZyBiZWNhdXNlIHN5c3RlbSBkZXBlbmRlbmNpZXMgY2hlY2sgIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZC4iKQorICAgICAgICAgICAgICAgIGxvZ2dp
bmcuZXJyb3IoIlRvIG92ZXJyaWRlLCBpbnZva2Ugd2l0aCAtLW5vY2hlY2stc3lzLWRlcHMiKQor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBsb2dnaW5nLmVycm9yKCd0ZXN0IGRyaXZlciBpcyBub3QgZm91bmQgYXQgJXMnICUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdF9zaGVsbF9iaW5hcnlfcGF0aCkKKyAgICAgICAgICAg
IHJlc3VsdCA9IEZhbHNlCisKKyAgICAgICAgaW1hZ2VfZGlmZl9wYXRoID0gc2VsZi5fcGF0aF90
b19pbWFnZV9kaWZmKCkKKyAgICAgICAgaWYgKG5vdCBvcy5wYXRoLmV4aXN0cyhpbWFnZV9kaWZm
X3BhdGgpIGFuZCBub3QKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubm9fcGl4ZWxfdGVzdHMp
OgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignaW1hZ2UgZGlmZiBub3QgZm91bmQgYXQgJXMn
ICUgaW1hZ2VfZGlmZl9wYXRoKQorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiVG8gb3ZlcnJp
ZGUsIGludm9rZSB3aXRoIC0tbm8tcGl4ZWwtdGVzdHMiKQorICAgICAgICAgICAgcmVzdWx0ID0g
RmFsc2UKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgY29tcGFyZV90ZXh0KHNl
bGYsIGFjdHVhbF90ZXh0LCBleHBlY3RlZF90ZXh0KToKKyAgICAgICAgcmV0dXJuIGFjdHVhbF90
ZXh0ICE9IGV4cGVjdGVkX3RleHQKKworICAgIGRlZiBwYXRoX2Zyb21fY2hyb21pdW1fYmFzZShz
ZWxmLCAqY29tcHMpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gcGF0aCBt
YWRlIGJ5IGpvaW5pbmcgdGhlIHRvcCBvZiB0aGUKKyAgICAgICAgQ2hyb21pdW0gc291cmNlIHRy
ZWUgYW5kIHRoZSBsaXN0IG9mIHBhdGggY29tcG9uZW50cyBpbiB8KmNvbXBzfC4iIiIKKyAgICAg
ICAgaWYgbm90IHNlbGYuX2Nocm9taXVtX2Jhc2VfZGlyOgorICAgICAgICAgICAgYWJzcGF0aCA9
IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKKyAgICAgICAgICAgIHNlbGYuX2Nocm9taXVtX2Jh
c2VfZGlyID0gYWJzcGF0aFswOmFic3BhdGguZmluZCgndGhpcmRfcGFydHknKV0KKyAgICAgICAg
cmV0dXJuIG9zLnBhdGguam9pbihzZWxmLl9jaHJvbWl1bV9iYXNlX2RpciwgKmNvbXBzKQorCisg
ICAgZGVmIHJlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRo
X2Zyb21fY2hyb21pdW1fYmFzZSgnd2Via2l0Jywgc2VsZi5fb3B0aW9ucy50YXJnZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnkpCisKKyAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2VsZik6CisgICAgICAg
ICMgRGVsZXRlIHRoZSBkaXNrIGNhY2hlIGlmIGFueSB0byBlbnN1cmUgYSBjbGVhbiB0ZXN0IHJ1
bi4KKyAgICAgICAgdGVzdF9zaGVsbF9iaW5hcnlfcGF0aCA9IHNlbGYuX3BhdGhfdG9fZHJpdmVy
KCkKKyAgICAgICAgY2FjaGVkaXIgPSBvcy5wYXRoLnNwbGl0KHRlc3Rfc2hlbGxfYmluYXJ5X3Bh
dGgpWzBdCisgICAgICAgIGNhY2hlZGlyID0gb3MucGF0aC5qb2luKGNhY2hlZGlyLCAiY2FjaGUi
KQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjYWNoZWRpcik6CisgICAgICAgICAgICBzaHV0
aWwucm10cmVlKGNhY2hlZGlyKQorCisgICAgZGVmIHNob3dfcmVzdWx0c19odG1sX2ZpbGUoc2Vs
ZiwgcmVzdWx0c19maWxlbmFtZSk6CisgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oW3NlbGYuX3Bh
dGhfdG9fZHJpdmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZW5hbWVf
dG9fdXJpKHJlc3VsdHNfZmlsZW5hbWUpXSkKKworICAgIGRlZiBzdGFydF9kcml2ZXIoc2VsZiwg
aW1hZ2VfcGF0aCwgb3B0aW9ucyk6CisgICAgICAgICIiIlN0YXJ0cyBhIG5ldyBEcml2ZXIgYW5k
IHJldHVybnMgYSBoYW5kbGUgdG8gaXQuIiIiCisgICAgICAgIHJldHVybiBDaHJvbWl1bURyaXZl
cihzZWxmLCBpbWFnZV9wYXRoLCBvcHRpb25zKQorCisgICAgZGVmIHN0YXJ0X2hlbHBlcihzZWxm
KToKKyAgICAgICAgaGVscGVyX3BhdGggPSBzZWxmLl9wYXRoX3RvX2hlbHBlcigpCisgICAgICAg
IGlmIGhlbHBlcl9wYXRoOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RhcnRpbmcgbGF5
b3V0IGhlbHBlciAlcyIgJSBoZWxwZXJfcGF0aCkKKyAgICAgICAgICAgIHNlbGYuX2hlbHBlciA9
IHN1YnByb2Nlc3MuUG9wZW4oW2hlbHBlcl9wYXRoXSwKKyAgICAgICAgICAgICAgICBzdGRpbj1z
dWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1Ob25lKQorICAg
ICAgICAgICAgaXNfcmVhZHkgPSBzZWxmLl9oZWxwZXIuc3Rkb3V0LnJlYWRsaW5lKCkKKyAgICAg
ICAgICAgIGlmIG5vdCBpc19yZWFkeS5zdGFydHN3aXRoKCdyZWFkeScpOgorICAgICAgICAgICAg
ICAgIGxvZ2dpbmcuZXJyb3IoImxheW91dF90ZXN0X2hlbHBlciBmYWlsZWQgdG8gYmUgcmVhZHki
KQorCisgICAgZGVmIHN0b3BfaGVscGVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9oZWxwZXI6
CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTdG9wcGluZyBsYXlvdXQgdGVzdCBoZWxwZXIi
KQorICAgICAgICAgICAgc2VsZi5faGVscGVyLnN0ZGluLndyaXRlKCJ4XG4iKQorICAgICAgICAg
ICAgc2VsZi5faGVscGVyLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX2hlbHBlci53
YWl0KCkKKworICAgIGRlZiB0ZXN0X2Jhc2VfcGxhdGZvcm1fbmFtZXMoc2VsZik6CisgICAgICAg
IHJldHVybiAoJ2xpbnV4JywgJ21hYycsICd3aW4nKQorCisgICAgZGVmIHRlc3RfZXhwZWN0YXRp
b25zKHNlbGYsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHRlc3QgZXhw
ZWN0YXRpb25zIGZvciB0aGlzIHBvcnQuCisKKyAgICAgICAgQmFzaWNhbGx5IHRoaXMgc3RyaW5n
IHNob3VsZCBjb250YWluIHRoZSBlcXVpdmFsZW50IG9mIGEKKyAgICAgICAgdGVzdF9leHBlY3Rh
dGlvbnMgZmlsZS4gU2VlIHRlc3RfZXhwZWN0YXRpb25zLnB5IGZvciBtb3JlIGRldGFpbHMuIiIi
CisgICAgICAgIGV4cGVjdGF0aW9uc19maWxlID0gc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFz
ZSgnd2Via2l0JywgJ3Rvb2xzJywKKyAgICAgICAgICAgICdsYXlvdXRfdGVzdHMnLCAndGVzdF9l
eHBlY3RhdGlvbnMudHh0JykKKyAgICAgICAgcmV0dXJuIGZpbGUoZXhwZWN0YXRpb25zX2ZpbGUs
ICJyIikucmVhZCgpCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1lcyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYudGVzdF9iYXNlX3BsYXRmb3JtX25hbWVzKCkgKyAoJ3dpbi14cCcsCisg
ICAgICAgICAgICAnd2luLXZpc3RhJywgJ3dpbi03JykKKworICAgICMKKyAgICAjIFBST1RFQ1RF
RCBNRVRIT0RTCisgICAgIworICAgICMgVGhlc2Ugcm91dGluZXMgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGJ5IG90aGVyIG1ldGhvZHMgaW4gdGhpcyBmaWxlCisgICAgIyBvciBhbnkgc3ViY2xhc3Nl
cy4KKyAgICAjCisKKyAgICBkZWYgX2Nocm9taXVtX2Jhc2VsaW5lX3BhdGgoc2VsZiwgcGxhdGZv
cm0pOgorICAgICAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgorICAgICAgICAgICAgcGxhdGZvcm0g
PSBzZWxmLm5hbWUoKQorICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFz
ZSgnd2Via2l0JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3RzJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bScsIHBsYXRmb3JtLCAnTGF5b3V0VGVzdHMnKQorCisKK2NsYXNzIENocm9taXVtRHJpdmVyKGJh
c2UuRHJpdmVyKToKKyAgICAiIiJBYnN0cmFjdCBpbnRlcmZhY2UgZm9yIHRoZSBEdW1wUmVuZGVy
VHJlZSBpbnRlcmZhY2UuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgaW1hZ2Vf
cGF0aCwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYu
X29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3RhcmdldCA9IHBvcnQuX29wdGlvbnMu
dGFyZ2V0CisgICAgICAgIHNlbGYuX2ltYWdlX3BhdGggPSBpbWFnZV9wYXRoCisKKyAgICAgICAg
Y21kID0gW10KKyAgICAgICAgIyBIb29rIGZvciBpbmplY3RpbmcgdmFsZ3JpbmQgb3Igb3RoZXIg
cnVudGltZSBpbnN0cnVtZW50YXRpb24sCisgICAgICAgICMgdXNlZCBieSBlLmcuIHRvb2xzL3Zh
bGdyaW5kL3ZhbGdyaW5kX3Rlc3RzLnB5LgorICAgICAgICB3cmFwcGVyID0gb3MuZW52aXJvbi5n
ZXQoIkJST1dTRVJfV1JBUFBFUiIsIE5vbmUpCisgICAgICAgIGlmIHdyYXBwZXIgIT0gTm9uZToK
KyAgICAgICAgICAgIGNtZCArPSBbd3JhcHBlcl0KKyAgICAgICAgaWYgc2VsZi5fcG9ydC5fb3B0
aW9ucy53cmFwcGVyOgorICAgICAgICAgICAgIyBUaGlzIHNwbGl0KCkgaXNuJ3QgcmVhbGx5IHdo
YXQgd2Ugd2FudCAtLSBpdCBpbmNvcnJlY3RseSB3aWxsCisgICAgICAgICAgICAjIHNwbGl0IHF1
b3RlZCBzdHJpbmdzIHdpdGhpbiB0aGUgd3JhcHBlciBhcmd1bWVudCAtLSBidXQgaW4KKyAgICAg
ICAgICAgICMgcHJhY3RpY2UgaXQgc2hvdWxkbid0IGNvbWUgdXAgYW5kIHRoZSAtLWhlbHAgb3V0
cHV0IHdhcm5zCisgICAgICAgICAgICAjIGFib3V0IGl0IGFueXdheS4KKyAgICAgICAgICAgIGNt
ZCArPSBzZWxmLl9vcHRpb25zLndyYXBwZXIuc3BsaXQoKQorICAgICAgICBjbWQgKz0gW3BvcnQu
X3BhdGhfdG9fZHJpdmVyKCksICctLWxheW91dC10ZXN0cyddCisgICAgICAgIGlmIG9wdGlvbnM6
CisgICAgICAgICAgICBjbWQgKz0gb3B0aW9ucworICAgICAgICBzZWxmLl9wcm9jID0gc3VicHJv
Y2Vzcy5Qb3BlbihjbWQsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorCisg
ICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBvbGwoKQorCisg
ICAgZGVmIHJldHVybmNvZGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnJldHVy
bmNvZGUKKworICAgIGRlZiBydW5fdGVzdChzZWxmLCB1cmksIHRpbWVvdXRtcywgY2hlY2tzdW0p
OgorICAgICAgICBvdXRwdXQgPSBbXQorICAgICAgICBlcnJvciA9IFtdCisgICAgICAgIGNyYXNo
ID0gRmFsc2UKKyAgICAgICAgdGltZW91dCA9IEZhbHNlCisgICAgICAgIGFjdHVhbF91cmkgPSBO
b25lCisgICAgICAgIGFjdHVhbF9jaGVja3N1bSA9IE5vbmUKKworICAgICAgICBzdGFydF90aW1l
ID0gdGltZS50aW1lKCkKKyAgICAgICAgY21kID0gdXJpCisgICAgICAgIGlmIHRpbWVvdXRtczoK
KyAgICAgICAgICAgIGNtZCArPSAnICcgKyBzdHIodGltZW91dG1zKQorICAgICAgICBpZiBjaGVj
a3N1bToKKyAgICAgICAgICAgIGNtZCArPSAnICcgKyBjaGVja3N1bQorICAgICAgICBjbWQgKz0g
IlxuIgorCisgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUoY21kKQorICAgICAgICBsaW5l
ID0gc2VsZi5fcHJvYy5zdGRvdXQucmVhZGxpbmUoKQorICAgICAgICB3aGlsZSBsaW5lLnJzdHJp
cCgpICE9ICIjRU9GIjoKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGhhdmVuJ3QgY3Jhc2hl
ZC4KKyAgICAgICAgICAgIGlmIGxpbmUgPT0gJycgYW5kIHNlbGYucG9sbCgpIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBoZXggY29kZSAweGMwMDAwMDFkLCB3aGljaCBp
cyB1c2VkIGZvciBhYnJ1cHQKKyAgICAgICAgICAgICAgICAjIHRlcm1pbmF0aW9uLiBUaGlzIGhh
cHBlbnMgaWYgd2UgaGl0IGN0cmwrYyBmcm9tIHRoZSBwcm9tcHQKKyAgICAgICAgICAgICAgICAj
IGFuZCB3ZSBoYXBwZW4gdG8gYmUgd2FpdGluZyBvbiB0aGUgdGVzdF9zaGVsbC4KKyAgICAgICAg
ICAgICAgICAjIHNkb3lvbjogTm90IHN1cmUgZm9yIHdoaWNoIE9TIGFuZCBpbiB3aGF0IGNpcmN1
bXN0YW5jZXMgdGhlCisgICAgICAgICAgICAgICAgIyBhYm92ZSBjb2RlIGlzIHZhbGlkLiBXaGF0
IHdvcmtzIGZvciBtZSB1bmRlciBMaW51eCB0byBkZXRlY3QKKyAgICAgICAgICAgICAgICAjIGN0
cmwrYyBpcyBmb3IgdGhlIHN1YnByb2Nlc3MgcmV0dXJuY29kZSB0byBiZSBuZWdhdGl2ZQorICAg
ICAgICAgICAgICAgICMgU0lHSU5ULiBBbmQgdGhhdCBhZ3JlZXMgd2l0aCB0aGUgc3VicHJvY2Vz
cyBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgICAgIGlmICgtMTA3Mzc0MTUxMCA9PSBzZWxm
Ll9wcm9jLnJldHVybmNvZGUoKSBvcgorICAgICAgICAgICAgICAgICAgICAtIHNpZ25hbC5TSUdJ
TlQgPT0gc2VsZi5fcHJvYy5yZXR1cm5jb2RlKCkpOgorICAgICAgICAgICAgICAgICAgICByYWlz
ZSBLZXlib2FyZEludGVycnVwdAorICAgICAgICAgICAgICAgIGNyYXNoID0gVHJ1ZQorICAgICAg
ICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICMgRG9uJ3QgaW5jbHVkZSAjVVJMIGxpbmVz
IGluIG91ciBvdXRwdXQKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiI1VSTDoiKToK
KyAgICAgICAgICAgICAgICBhY3R1YWxfdXJpID0gbGluZS5yc3RyaXAoKVs1Ol0KKyAgICAgICAg
ICAgICAgICBpZiB1cmkgIT0gYWN0dWFsX3VyaToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2lu
Zy5mYXRhbCgiVGVzdCBnb3Qgb3V0IG9mIHN5bmM6XG58JXN8XG58JXN8IiAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh1cmksIGFjdHVhbF91cmkpKQorICAgICAgICAgICAgICAg
ICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigidGVzdCBvdXQgb2Ygc3luYyIpCisgICAgICAgICAg
ICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiI01ENToiKToKKyAgICAgICAgICAgICAgICBhY3R1YWxf
Y2hlY2tzdW0gPSBsaW5lLnJzdHJpcCgpWzU6XQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0
c3dpdGgoIiNURVNUX1RJTUVEX09VVCIpOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBUcnVl
CisgICAgICAgICAgICAgICAgIyBUZXN0IHRpbWVkIG91dCwgYnV0IHdlIHN0aWxsIG5lZWQgdG8g
cmVhZCB1bnRpbCAjRU9GLgorICAgICAgICAgICAgZWxpZiBhY3R1YWxfdXJpOgorICAgICAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgZXJyb3IuYXBwZW5kKGxpbmUpCisKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9wcm9j
LnN0ZG91dC5yZWFkbGluZSgpCisKKyAgICAgICAgcmV0dXJuIChjcmFzaCwgdGltZW91dCwgYWN0
dWFsX2NoZWNrc3VtLCAnJy5qb2luKG91dHB1dCksCisgICAgICAgICAgICAgICAgJycuam9pbihl
cnJvcikpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYzoKKyAg
ICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcHJv
Yy5zdGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRlcnI6CisgICAg
ICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQorICAgICAgICAgICAgaWYgKHN5
cy5wbGF0Zm9ybSBub3QgaW4gKCd3aW4zMicsICdjeWd3aW4nKSBhbmQKKyAgICAgICAgICAgICAg
ICBub3Qgc2VsZi5fcHJvYy5wb2xsKCkpOgorICAgICAgICAgICAgICAgICMgQ2xvc2luZyBzdGRp
bi9zdGRvdXQvc3RkZXJyIGhhbmdzIHNvbWV0aW1lcyBvbiBPUyBYLgorICAgICAgICAgICAgICAg
IG51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3IikKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNz
LlBvcGVuKFsia2lsbCIsICItOSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHIoc2VsZi5fcHJvYy5waWQpXSwgc3RkZXJyPW51bGwpCisgICAgICAgICAgICAgICAgbnVsbC5j
bG9zZSgpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9saW51eC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42NGQxNDEyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9saW51eC5weQpAQCAt
MCwwICsxLDE0NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
IiIiQ2hyb21pdW0gTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIK
KworaW1wb3J0IG9zCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJw
cm9jZXNzCisKK2ltcG9ydCBjaHJvbWl1bQorCisKK2NsYXNzIENocm9taXVtTGludXhQb3J0KGNo
cm9taXVtLkNocm9taXVtUG9ydCk6CisgICAgIiIiQ2hyb21pdW0gTGludXggaW1wbGVtZW50YXRp
b24gb2YgdGhlIFBvcnQgY2xhc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9u
YW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIGlmIHBvcnRfbmFtZSBpcyBOb25lOgor
ICAgICAgICAgICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLWxpbnV4JworICAgICAgICBjaHJvbWl1
bS5DaHJvbWl1bVBvcnQuX19pbml0X18oc2VsZiwgcG9ydF9uYW1lLCBvcHRpb25zKQorCisgICAg
ZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gW3NlbGYuYmFz
ZWxpbmVfcGF0aCgpLAorICAgICAgICAgICAgICAgIHNlbGYuY2hyb21pdW1fYmFzZWxpbmVfcGF0
aCgnY2hyb21pdW0td2luJyksCisgICAgICAgICAgICAgICAgc2VsZi53ZWJraXRfYmFzZWxpbmVf
cGF0aCgnd2luJyksCisgICAgICAgICAgICAgICAgc2VsZi53ZWJraXRfYmFzZWxpbmVfcGF0aCgn
bWFjJyldCisKKyAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZik6CisgICAgICAgICMgV2UgaGF2
ZSBubyBwbGF0Zm9ybS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgdG8gY2hlY2suCisgICAgICAgIHJl
dHVybiBUcnVlCisKKyAgICBkZWYgbnVtX2NvcmVzKHNlbGYpOgorICAgICAgICBudW1fY29yZXMg
PSBvcy5zeXNjb25mKCJTQ19OUFJPQ0VTU09SU19PTkxOIikKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShudW1fY29yZXMsIGludCkgYW5kIG51bV9jb3JlcyA+IDA6CisgICAgICAgICAgICByZXR1cm4g
bnVtX2NvcmVzCisgICAgICAgIHJldHVybiAxCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1l
KHNlbGYpOgorICAgICAgICAjIFdlIHVzZSAnbGludXgnIGluc3RlYWQgb2YgJ2Nocm9taXVtLWxp
bnV4JyBpbiB0ZXN0X2V4cGVjdGF0aW9ucy50eHQuCisgICAgICAgIHJldHVybiAnbGludXgnCisK
KyAgICBkZWYgdmVyc2lvbihzZWxmKToKKyAgICAgICAgIyBXZSBkb24ndCBoYXZlIGRpZmZlcmVu
dCB2ZXJzaW9ucyBvbiBsaW51eC4KKyAgICAgICAgcmV0dXJuICcnCisKKyAgICAjCisgICAgIyBQ
Uk9URUNURUQgTUVUSE9EUworICAgICMKKworICAgIGRlZiBfYnVpbGRfcGF0aChzZWxmLCAqY29t
cHMpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnc2NvbnNi
dWlsZCcsIHNlbGYuX29wdGlvbnMudGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqY29tcHMpCisKKyAgICBkZWYgX2tpbGxfcHJvY2VzcyhzZWxmLCBw
aWQpOgorICAgICAgICAiIiJGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3MuCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgcGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUga2lsbGVkLgor
ICAgICAgICAiIiIKKyAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQorCisgICAg
ZGVmIF9raWxsX2FsbF9wcm9jZXNzKHNlbGYsIHByb2Nlc3NfbmFtZSk6CisgICAgICAgIG51bGwg
PSBvcGVuKG9zLmRldm51bGwpCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbJ2tpbGxhbGwnLCAn
LVRFUk0nLCAnLXUnLCBvcy5nZXRlbnYoJ1VTRVInKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1udWxsKQorICAgICAgICBudWxsLmNsb3NlKCkKKworICAg
IGRlZiBfcGF0aF90b19hcGFjaGUoc2VsZik6CisgICAgICAgIHJldHVybiAnL3Vzci9zYmluL2Fw
YWNoZTInCisKKyAgICBkZWYgX3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKHNlbGYpOgorICAg
ICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCAnaHR0cCcs
ICdjb25mJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBhY2hlMi1kZWJpYW4taHR0
cGQuY29uZicpCisKKyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGQoc2VsZik6CisgICAgICAgIHJl
dHVybiAiL3Vzci9zYmluL2xpZ2h0dHBkIgorCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkX21v
ZHVsZXMoc2VsZik6CisgICAgICAgIHJldHVybiAiL3Vzci9saWIvbGlnaHR0cGQiCisKKyAgICBk
ZWYgX3BhdGhfdG9fbGlnaHR0cGRfcGhwKHNlbGYpOgorICAgICAgICByZXR1cm4gIi91c3IvYmlu
L3BocC1jZ2kiCisKKyAgICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fYnVpbGRfcGF0aCgndGVzdF9zaGVsbCcpCisKKyAgICBkZWYgX3BhdGhfdG9faGVs
cGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9wYXRoX3RvX2ltYWdl
X2RpZmYoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdpbWFnZV9kaWZm
JykKKworICAgIGRlZiBfcGF0aF90b193ZGlmZihzZWxmKToKKyAgICAgICAgcmV0dXJuICd3ZGlm
ZicKKworICAgIGRlZiBfc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlbGYsIHNlcnZlcl9waWQpOgor
ICAgICAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBkIHdlYiBzZXJ2ZXIuIEJsb2NrcyB1bnRp
bCBpdCdzIGZ1bGx5CisgICAgICAgIHNodXQgZG93bi4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5pbmcgc2VydmVyLgor
ICAgICAgICAiIiIKKyAgICAgICAgIyBzZXJ2ZXJfcGlkIGlzIG5vdCBzZXQgd2hlbiAiaHR0cF9z
ZXJ2ZXIucHkgc3RvcCIgaXMgcnVuIG1hbnVhbGx5LgorICAgICAgICBpZiBzZXJ2ZXJfcGlkIGlz
IE5vbmU6CisgICAgICAgICAgICAjIFRPRE8obW1vc3MpIFRoaXMgaXNuJ3QgaWRlYWwsIHNpbmNl
IGl0IGNvdWxkIGNvbmZsaWN0IHdpdGgKKyAgICAgICAgICAgICMgbGlnaHR0cGQgcHJvY2Vzc2Vz
IG5vdCBzdGFydGVkIGJ5IGh0dHBfc2VydmVyLnB5LAorICAgICAgICAgICAgIyBidXQgZ29vZCBl
bm91Z2ggZm9yIG5vdy4KKyAgICAgICAgICAgIHNlbGYuX2tpbGxfYWxsX3Byb2Nlc3MoJ2xpZ2h0
dHBkJykKKyAgICAgICAgICAgIHNlbGYuX2tpbGxfYWxsX3Byb2Nlc3MoJ2FwYWNoZTInKQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmtpbGwoc2Vy
dmVyX3BpZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAgICAgIyBUT0RPKG1tb3NzKSBN
YXliZSB0aHJvdyBpbiBhIFNJR0tJTEwganVzdCB0byBiZSBzdXJlPworICAgICAgICAgICAgZXhj
ZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBTb21ldGltZXMgd2UgZ2V0IGEgYmFkIFBJ
RCAoZS5nLiBmcm9tIGEgc3RhbGUgaHR0cGQucGlkCisgICAgICAgICAgICAgICAgIyBmaWxlKSwg
c28gaWYga2lsbCBmYWlscyBvbiB0aGUgZ2l2ZW4gUElELCBqdXN0IHRyeSB0bworICAgICAgICAg
ICAgICAgICMgJ2tpbGxhbGwnIHdlYiBzZXJ2ZXJzLgorICAgICAgICAgICAgICAgIHNlbGYuX3No
dXRfZG93bl9odHRwX3NlcnZlcihOb25lKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTdiNGNhCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV9tYWMucHkKQEAgLTAsMCArMSwxNjIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyIiIkNocm9taXVtIE1hYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBp
bnRlcmZhY2UuIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgc2lnbmFs
CitpbXBvcnQgc3VicHJvY2VzcworCitpbXBvcnQgY2hyb21pdW0KKworCitjbGFzcyBDaHJvbWl1
bU1hY1BvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKKyAgICAiIiJDaHJvbWl1bSBNYWMgaW1w
bGVtZW50YXRpb24gb2YgdGhlIFBvcnQgY2xhc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIGlmIHBvcnRfbmFtZSBp
cyBOb25lOgorICAgICAgICAgICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLW1hYycKKyAgICAgICAg
Y2hyb21pdW0uQ2hyb21pdW1Qb3J0Ll9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZSwgb3B0aW9ucykK
KworICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtz
ZWxmLmJhc2VsaW5lX3BhdGgoKSwKKyAgICAgICAgICAgICAgICBzZWxmLl93ZWJraXRfYmFzZWxp
bmVfcGF0aCgnbWFjJyArIHNlbGYudmVyc2lvbigpKSwKKyAgICAgICAgICAgICAgICBzZWxmLl93
ZWJraXRfYmFzZWxpbmVfcGF0aCgnbWFjJyldCisKKyAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2Vs
Zik6CisgICAgICAgICMgV2UgaGF2ZSBubyBzcGVjaWZpYyBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMu
CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgbnVtX2NvcmVzKHNlbGYpOgorICAgICAg
ICByZXR1cm4gaW50KHN1YnByb2Nlc3MuUG9wZW4oWydzeXNjdGwnLCctbicsJ2h3Lm5jcHUnXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJ
UEUpLnN0ZG91dC5yZWFkKCkpCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1lKHNlbGYpOgor
ICAgICAgICAjIFdlIHVzZSAnbWFjJyBpbnN0ZWFkIG9mICdjaHJvbWl1bS1tYWMnCisgICAgICAg
IHJldHVybiAnbWFjJworCisgICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAgIG9zX3ZlcnNp
b25fc3RyaW5nID0gcGxhdGZvcm0ubWFjX3ZlcigpWzBdICAjIGUuZy4gIjEwLjUuNiIKKyAgICAg
ICAgaWYgbm90IG9zX3ZlcnNpb25fc3RyaW5nOgorICAgICAgICAgICAgcmV0dXJuICctbGVvcGFy
ZCcKKyAgICAgICAgcmVsZWFzZV92ZXJzaW9uID0gaW50KG9zX3ZlcnNpb25fc3RyaW5nLnNwbGl0
KCcuJylbMV0pCisgICAgICAgICMgd2UgZG9uJ3Qgc3VwcG9ydCAndGlnZXInIG9yIGVhcmxpZXIg
cmVsZWFzZXMKKyAgICAgICAgaWYgcmVsZWFzZV92ZXJzaW9uID09IDU6CisgICAgICAgICAgICBy
ZXR1cm4gJy1sZW9wYXJkJworICAgICAgICBlbGlmIHJlbGVhc2VfdmVyc2lvbiA9PSA2OgorICAg
ICAgICAgICAgcmV0dXJuICctc25vd2xlb3BhcmQnCisgICAgICAgIHJldHVybiAnJworCisgICAg
IworICAgICMgUFJPVEVDVEVEIE1FVEhPRFMKKyAgICAjCisKKyAgICBkZWYgX2J1aWxkX3BhdGgo
c2VsZiwgKmNvbXBzKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jh
c2UoJ3hjb2RlYnVpbGQnLCBzZWxmLl9vcHRpb25zLnRhcmdldCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbXBzKQorCisgICAgZGVmIF9saWdodHRwZF9w
YXRoKHNlbGYsICpjb21wcyk6CisgICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV9jaHJvbWl1
bV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdtYWMnLCAqY29tcHMpCisKKyAgICBkZWYgX2tpbGxfcHJv
Y2VzcyhzZWxmLCBwaWQpOgorICAgICAgICAiIiJGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3Mu
CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHBpZDogVGhlIGlkIG9mIHRoZSBwcm9jZXNz
IHRvIGJlIGtpbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwu
U0lHS0lMTCkKKworICAgIGRlZiBfa2lsbF9hbGxfcHJvY2VzcyhzZWxmLCBwcm9jZXNzX25hbWUp
OgorICAgICAgICAiIiJLaWxsIGFueSBwcm9jZXNzZXMgcnVubmluZyB1bmRlciB0aGlzIG5hbWUu
IiIiCisgICAgICAgICMgT24gTWFjIE9TIFggMTAuNiwga2lsbGFsbCBoYXMgYSBuZXcgY29uc3Ry
YWludDogLVNJR05BTE5BTUUgb3IKKyAgICAgICAgIyAtU0lHTkFMTlVNQkVSIG11c3QgY29tZSBm
aXJzdC4gIEV4YW1wbGUgcHJvYmxlbToKKyAgICAgICAgIyAgICQga2lsbGFsbCAtdSAkVVNFUiAt
VEVSTSBsaWdodHRwZAorICAgICAgICAjICAga2lsbGFsbDogaWxsZWdhbCBvcHRpb24gLS0gVAor
ICAgICAgICAjIFVzZSBvZiB0aGUgZWFybGllciAtVEVSTSBwbGFjZW1lbnQgaXMganVzdCBmaW5l
IG9uIDEwLjUuCisgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwpCisgICAgICAgIHN1YnBy
b2Nlc3MuY2FsbChbJ2tpbGxhbGwnLCAnLVRFUk0nLCAnLXUnLCBvcy5nZXRlbnYoJ1VTRVInKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1udWxsKQorICAg
ICAgICBudWxsLmNsb3NlKCkKKworICAgIGRlZiBfcGF0aF90b19hcGFjaGUoc2VsZik6CisgICAg
ICAgIHJldHVybiAnL3Vzci9zYmluL2h0dHBkJworCisgICAgZGVmIF9wYXRoX3RvX2FwYWNoZV9j
b25maWdfZmlsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmxheW91
dF90ZXN0c19kaXIoKSwgJ2h0dHAnLCAnY29uZicsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2FwYWNoZTItaHR0cGQuY29uZicpCisKKyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGQoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl9saWdodHRwX3BhdGgoJ2JpbicsICdsaWdodHRwJykK
KworICAgIGRlZiBfcGF0aF90b19saWdodHRwZF9tb2R1bGVzKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fbGlnaHR0cF9wYXRoKCdsaWInKQorCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBk
X3BocChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpZ2h0dHBkX3BhdGgoJ2JpbicsICdw
aHAtY2dpJykKKworICAgIGRlZiBfcGF0aF90b19kcml2ZXIoc2VsZik6CisgICAgICAgICMgVE9E
TyhwaW5rZXJ0b24pOiBtYWtlIHx0YXJnZXR8IGhhcHB5IHdpdGggY2FzZS1zZW5zaXRpdmUgZmls
ZQorICAgICAgICAjIHN5c3RlbXMuCisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdU
ZXN0U2hlbGwuYXBwJywgJ0NvbnRlbnRzJywgJ01hY09TJywgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdUZXN0U2hlbGwnKQorCisgICAgZGVmIF9wYXRoX3RvX2hlbHBlcihzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2xheW91dF90ZXN0X2hlbHBlcicp
CisKKyAgICBkZWYgX3BhdGhfdG9faW1hZ2VfZGlmZihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2J1aWxkX3BhdGgoJ2ltYWdlX2RpZmYnKQorCisgICAgZGVmIF9wYXRoX3RvX3dkaWZmKHNl
bGYpOgorICAgICAgICByZXR1cm4gJ3dkaWZmJworCisgICAgZGVmIF9zaHV0X2Rvd25faHR0cF9z
ZXJ2ZXIoc2VsZiwgc2VydmVyX3BpZCk6CisgICAgICAgICIiIlNodXQgZG93biB0aGUgbGlnaHR0
cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVsbHkKKyAgICAgICAgc2h1dCBkb3du
LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzZXJ2ZXJfcGlkOiBUaGUgcHJvY2VzcyBJ
RCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCisgICAgICAgICIiIgorICAgICAgICAjIHNlcnZlcl9w
aWQgaXMgbm90IHNldCB3aGVuICJodHRwX3NlcnZlci5weSBzdG9wIiBpcyBydW4gbWFudWFsbHku
CisgICAgICAgIGlmIHNlcnZlcl9waWQgaXMgTm9uZToKKyAgICAgICAgICAgICMgVE9ETyhtbW9z
cykgVGhpcyBpc24ndCBpZGVhbCwgc2luY2UgaXQgY291bGQgY29uZmxpY3Qgd2l0aAorICAgICAg
ICAgICAgIyBsaWdodHRwZCBwcm9jZXNzZXMgbm90IHN0YXJ0ZWQgYnkgaHR0cF9zZXJ2ZXIucHks
CisgICAgICAgICAgICAjIGJ1dCBnb29kIGVub3VnaCBmb3Igbm93LgorICAgICAgICAgICAgc2Vs
Zi5fa2lsbF9hbGxfcHJvY2VzcygnbGlnaHR0cGQnKQorICAgICAgICAgICAgc2VsZi5fa2lsbF9h
bGxfcHJvY2VzcygnaHR0cGQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIG9zLmtpbGwoc2VydmVyX3BpZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAg
ICAgICAgICAgIyBUT0RPKG1tb3NzKSBNYXliZSB0aHJvdyBpbiBhIFNJR0tJTEwganVzdCB0byBi
ZSBzdXJlPworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBT
b21ldGltZXMgd2UgZ2V0IGEgYmFkIFBJRCAoZS5nLiBmcm9tIGEgc3RhbGUgaHR0cGQucGlkCisg
ICAgICAgICAgICAgICAgIyBmaWxlKSwgc28gaWYga2lsbCBmYWlscyBvbiB0aGUgZ2l2ZW4gUElE
LCBqdXN0IHRyeSB0bworICAgICAgICAgICAgICAgICMgJ2tpbGxhbGwnIHdlYiBzZXJ2ZXJzLgor
ICAgICAgICAgICAgICAgIHNlbGYuX3NodXRfZG93bl9odHRwX3NlcnZlcihOb25lKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV93aW4ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Nocm9taXVtX3dpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
ODFhMWFmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHkKQEAgLTAsMCArMSwxNDkgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgR29vZ2xlIG5hbWUgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJDaHJvbWl1bSBXaW4gaW1wbGVtZW50YXRp
b24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBwbGF0Zm9y
bQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKKworaW1wb3J0IGNocm9taXVtCisK
KworY2xhc3MgQ2hyb21pdW1XaW5Qb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CisgICAgIiIi
Q2hyb21pdW0gV2luIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGNsYXNzLiIiIgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgorICAgICAg
ICBpZiBwb3J0X25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHBvcnRfbmFtZSA9ICdjaHJvbWl1
bS13aW4nICsgc2VsZi52ZXJzaW9uKCkKKyAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Qb3J0Ll9f
aW5pdF9fKHNlbGYsIHBvcnRfbmFtZSwgb3B0aW9ucykKKworICAgIGRlZiBiYXNlbGluZV9zZWFy
Y2hfcGF0aChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fbmFtZSA9PSAnY2hyb21pdW0td2luLXhw
JzoKKyAgICAgICAgICAgIGRpcnMuYXBwZW5kKHNlbGYuYmFzZWxpbmVfcGF0aChzZWxmLl9uYW1l
KSkKKyAgICAgICAgaWYgc2VsZi5fbmFtZSBpbiAoJ2Nocm9taXVtLXdpbi14cCcsICdjaHJvbWl1
bS13aW4tdmlzdGEnKToKKyAgICAgICAgICAgIGRpcnMuYXBwZW5kKHNlbGYuYmFzZWxpbmVfcGF0
aCgnY2hyb21pdW0td2luLXZpc3RhJykpCisgICAgICAgIGRpcnMuYXBwZW5kKHNlbGYuYmFzZWxp
bmVfcGF0aCgnY2hyb21pdW0td2luJykpCisgICAgICAgIGRpcnMuYXBwZW5kKHNlbGYud2Via2l0
X2Jhc2VsaW5lX3BhdGgoJ3dpbicpKQorICAgICAgICBkaXJzLmFwcGVuZChzZWxmLndlYmtpdF9i
YXNlbGluZV9wYXRoKCdtYWMnKSkKKyAgICAgICAgcmV0dXJuIGRpcnMKKworICAgIGRlZiBjaGVj
a19zeXNfZGVwcyhzZWxmKToKKyAgICAgICAgIyBUT0RPKGRwcmFua2UpOiBpbXBsZW1lbnQgdGhp
cworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGdldF9hYnNvbHV0ZV9wYXRoKHNlbGYs
IGZpbGVuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSBwYXRoIGluIHVuaXgg
Zm9ybWF0IGZvciB0aGUgZ2l2ZW4gZmlsZW5hbWUuIiIiCisgICAgICAgIGFic3BhdGggPSBvcy5w
YXRoLmFic3BhdGgoZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoJ1xcJywg
Jy8nKQorCisgICAgZGVmIG51bV9jb3JlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGludChvcy5l
bnZpcm9uLmdldCgnTlVNQkVSX09GX1BST0NFU1NPUlMnLCAxKSkKKworICAgIGRlZiB0ZXN0X3Bs
YXRmb3JtX25hbWUoc2VsZik6CisgICAgICAgICMgV2UgcmV0dXJuICd3aW4teHAnLCBub3QgJ2No
cm9taXVtLXdpbi14cCcgaGVyZSwgZm9yIGNvbnZlbmllbmNlLgorICAgICAgICByZXR1cm4gJ3dp
bicgKyBzZWxmLnZlcnNpb24oKQorCisgICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAgIHdp
bnZlciA9IHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpCisgICAgICAgIGlmIHdpbnZlclswXSA9PSA2
IGFuZCAod2ludmVyWzFdID09IDEpOgorICAgICAgICAgICAgcmV0dXJuICctNycKKyAgICAgICAg
aWYgd2ludmVyWzBdID09IDYgYW5kICh3aW52ZXJbMV0gPT0gMCk6CisgICAgICAgICAgICByZXR1
cm4gJy12aXN0YScKKyAgICAgICAgaWYgd2ludmVyWzBdID09IDUgYW5kICh3aW52ZXJbMV0gPT0g
MSBvciB3aW52ZXJbMV0gPT0gMik6CisgICAgICAgICAgICByZXR1cm4gJy14cCcKKyAgICAgICAg
cmV0dXJuICcnCisKKyAgICAjCisgICAgIyBQUk9URUNURUQgUk9VVElORVMKKyAgICAjCisKKyAg
ICBkZWYgX2J1aWxkX3BhdGgoc2VsZiwgKmNvbXBzKToKKyAgICAgICAgIyBGSVhNRShkcHJhbmtl
KTogYWxsb3cgZm9yIGJ1aWxkcyB1bmRlciAnY2hyb21lJyBhcyB3ZWxsLgorICAgICAgICByZXR1
cm4gc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnd2Via2l0Jywgc2VsZi5fb3B0aW9ucy50
YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb21w
cykKKworICAgIGRlZiBfbGlnaHR0cGRfcGF0aChzZWxmLCAqY29tcHMpOgorICAgICAgICByZXR1
cm4gc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQn
LCAnd2luJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNv
bXBzKQorCisgICAgZGVmIF9raWxsX3Byb2Nlc3Moc2VsZiwgcGlkKToKKyAgICAgICAgIiIiRm9y
Y2VmdWxseSBraWxsIHRoZSBwcm9jZXNzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgIHBpZDog
VGhlIGlkIG9mIHRoZSBwcm9jZXNzIHRvIGJlIGtpbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAg
IHN1YnByb2Nlc3MuY2FsbCgoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvcGlkJywgc3RyKHBpZCkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisKKyAgICBkZWYgX3Bh
dGhfdG9fYXBhY2hlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fY2hyb21p
dW1fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ3VzcicsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzYmluJywgJ2h0dHBkJykKKworICAgIGRlZiBf
cGF0aF90b19hcGFjaGVfY29uZmlnX2ZpbGUoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRo
LmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksICdodHRwJywgJ2NvbmYnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdjeWd3aW4taHR0cGQuY29uZicpCisKKyAgICBkZWYgX3BhdGhf
dG9fbGlnaHR0cGQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9saWdodHRwX3BhdGgoJ0xp
Z2h0VFBELmV4ZScpCisKKyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGRfbW9kdWxlcyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2xpZ2h0dHBfcGF0aCgnbGliJykKKworICAgIGRlZiBfcGF0
aF90b19saWdodHRwZF9waHAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9saWdodHRwX3Bh
dGgoJ3BocDUnLCAncGhwLWNnaS5leGUnKQorCisgICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ3Rlc3Rfc2hlbGwuZXhlJykKKwor
ICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWls
ZF9wYXRoKCdsYXlvdXRfdGVzdF9oZWxwZXIuZXhlJykKKworICAgIGRlZiBfcGF0aF90b19pbWFn
ZV9kaWZmKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnbGF5b3V0X3Rl
c3RfaGVscGVyLmV4ZScpCisKKyAgICBkZWYgX3BhdGhfdG9fd2RpZmYoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3
aW4nLCAnYmluJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3dkaWZmLmV4ZScpCisKKyAgICBkZWYgX3NodXRfZG93bl9odHRwX3NlcnZlcihzZWxmLCBzZXJ2
ZXJfcGlkKToKKyAgICAgICAgIiIiU2h1dCBkb3duIHRoZSBsaWdodHRwZCB3ZWIgc2VydmVyLiBC
bG9ja3MgdW50aWwgaXQncyBmdWxseQorICAgICAgICBzaHV0IGRvd24uCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICAgIHNlcnZlcl9waWQ6IFRoZSBwcm9jZXNzIElEIG9mIHRoZSBydW5uaW5n
IHNlcnZlci4KKyAgICAgICAgIiIiCisgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oKCd0YXNra2ls
bC5leGUnLCAnL2YnLCAnL2ltJywgJ0xpZ2h0VFBELmV4ZScpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZGVycj1zdWJwcm9jZXNzLlBJUEUpLndhaXQoKQorICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKCgn
dGFza2tpbGwuZXhlJywgJy9mJywgJy9pbScsICdodHRwZC5leGUnKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKS53YWl0KCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIyNGI5YzAKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0
dHBfc2VydmVyLnB5CkBAIC0wLDAgKzEsMjczIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMg
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisj
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisiIiJBIGNsYXNzIHRvIGhlbHAgc3RhcnQvc3RvcCB0aGUgbGlnaHR0
cGQgc2VydmVyIHVzZWQgYnkgbGF5b3V0IHRlc3RzLiIiIgorCisKK2ltcG9ydCBsb2dnaW5nCitp
bXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nl
c3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCB1cmxs
aWIKKworaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKKworCitjbGFzcyBIdHRwZE5vdFN0YXJ0ZWQo
RXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFz
ZS5IdHRwU2VydmVyQmFzZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG91
dHB1dF9kaXIsIGJhY2tncm91bmQ9RmFsc2UsIHBvcnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAg
cm9vdD1Ob25lLCByZWdpc3Rlcl9jeWd3aW49Tm9uZSwgcnVuX2JhY2tncm91bmQ9Tm9uZSk6Cisg
ICAgICAgICIiIkFyZ3M6CisgICAgICAgICAgb3V0cHV0X2RpcjogdGhlIGFic29sdXRlIHBhdGgg
dG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdCBkaXJlY3RvcnkKKyAgICAgICAgIiIiCisgICAgICAg
ICMgV2Via2l0IHRlc3RzCisgICAgICAgIGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2Uu
X19pbml0X18oc2VsZiwgcG9ydF9vYmopCisgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRw
dXRfZGlyCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3BvcnQg
PSBwb3J0CisgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuX3JlZ2lzdGVy
X2N5Z3dpbiA9IHJlZ2lzdGVyX2N5Z3dpbgorICAgICAgICBzZWxmLl9ydW5fYmFja2dyb3VuZCA9
IHJ1bl9iYWNrZ3JvdW5kCisgICAgICAgIGlmIHNlbGYuX3BvcnQ6CisgICAgICAgICAgICBzZWxm
Ll9wb3J0ID0gaW50KHNlbGYuX3BvcnQpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX3dl
YmtpdF90ZXN0cyA9IG9zLnBhdGguam9pbihzZWxmLl9wb3J0X29iai5sYXlvdXRfdGVzdHNfZGly
KCksCisgICAgICAgICAgICAgICAgICdodHRwJywgJ3Rlc3RzJykKKyAgICAgICAgICAgIF93ZWJr
aXRfdGVzdHMgPSBvcy5wYXRoLmpvaW4oc2VsZi5fcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2Rpcigp
LAorICAgICAgICAgICAgICAgICAnZmFzdCcsICdqcycsICdyZXNvdXJjZXMnKQorICAgICAgICBl
eGNlcHQ6CisgICAgICAgICAgICBfd2Via2l0X3Rlc3RzID0gTm9uZQorICAgICAgICAgICAgX2pz
X3Rlc3RfcmVzb3VyY2UgPSBOb25lCisKKyAgICAgICAgIyBTZWxmIGdlbmVyYXRlZCBjZXJ0aWZp
Y2F0ZSBmb3IgU1NMIHNlcnZlciAoZm9yIGNsaWVudCBjZXJ0IGdldAorICAgICAgICAjIDxiYXNl
LXBhdGg+XGNocm9tZVx0ZXN0XGRhdGFcc3NsXGNlcnRzXHJvb3RfY2FfY2VydC5jcnQpCisgICAg
ICAgIHNlbGYuX3BlbV9maWxlID0gb3MucGF0aC5qb2luKAorICAgICAgICAgICAgb3MucGF0aC5k
aXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLCAnaHR0cGQyLnBlbScpCisKKyAgICAg
ICAgIyBPbmUgbWFwcGluZyB3aGVyZSB3ZSBjYW4gZ2V0IHRvIGV2ZXJ5dGhpbmcKKyAgICAgICAg
VklSVFVBTENPTkZJRyA9IFtdCisKKyAgICAgICAgaWYgX3dlYmtpdF90ZXN0czoKKyAgICAgICAg
ICAgIFZJUlRVQUxDT05GSUcuZXh0ZW5kKAorICAgICAgICAgICAgICAgIyBUaHJlZSBtYXBwaW5n
cyAob25lIHdpdGggU1NMKSBmb3IgTGF5b3V0VGVzdHMgaHR0cCB0ZXN0cworICAgICAgICAgICAg
ICAgW3sncG9ydCc6IDgwMDAsICdkb2Nyb290JzogX3dlYmtpdF90ZXN0c30sCisgICAgICAgICAg
ICAgICAgeydwb3J0JzogODA4MCwgJ2RvY3Jvb3QnOiBfd2Via2l0X3Rlc3RzfSwKKyAgICAgICAg
ICAgICAgICB7J3BvcnQnOiA4NDQzLCAnZG9jcm9vdCc6IF93ZWJraXRfdGVzdHMsCisgICAgICAg
ICAgICAgICAgICdzc2xjZXJ0Jzogc2VsZi5fcGVtX2ZpbGV9XSkKKworICAgIGRlZiBpc19ydW5u
aW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2VzcyAhPSBOb25lCisKKyAgICBk
ZWYgc3RhcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfcnVubmluZygpOgorICAgICAgICAg
ICAgcmFpc2UgJ0xpZ2h0dHBkIGFscmVhZHkgcnVubmluZycKKworICAgICAgICBiYXNlX2NvbmZf
ZmlsZSA9IHNlbGYuX3BvcnRfb2JqLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsCisgICAg
ICAgICAgICAnV2ViS2l0VG9vbHMnLCAnU2NyaXB0cycsICd3ZWJraXRweScsICdsYXlvdXRfdGVz
dHMnLAorICAgICAgICAgICAgJ3BvcnQnLCAnbGlnaHR0cGQuY29uZicpCisgICAgICAgIG91dF9j
b25mX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgJ2xpZ2h0dHBkLmNvbmYn
KQorICAgICAgICB0aW1lX3N0ciA9IHRpbWUuc3RyZnRpbWUoIiVkJWIlWS0lSCVNJVMiKQorICAg
ICAgICBhY2Nlc3NfZmlsZV9uYW1lID0gImFjY2Vzcy5sb2ctIiArIHRpbWVfc3RyICsgIi50eHQi
CisgICAgICAgIGFjY2Vzc19sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgYWNj
ZXNzX2ZpbGVfbmFtZSkKKyAgICAgICAgbG9nX2ZpbGVfbmFtZSA9ICJlcnJvci5sb2ctIiArIHRp
bWVfc3RyICsgIi50eHQiCisgICAgICAgIGVycm9yX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9v
dXRwdXRfZGlyLCBsb2dfZmlsZV9uYW1lKQorCisgICAgICAgICMgUmVtb3ZlIG9sZCBsb2cgZmls
ZXMuIFdlIG9ubHkgbmVlZCB0byBrZWVwIHRoZSBsYXN0IG9uZXMuCisgICAgICAgIHNlbGYucmVt
b3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCAiYWNjZXNzLmxvZy0iKQorICAgICAgICBz
ZWxmLnJlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgImVycm9yLmxvZy0iKQorCisg
ICAgICAgICMgV3JpdGUgb3V0IHRoZSBjb25maWcKKyAgICAgICAgZiA9IGZpbGUoYmFzZV9jb25m
X2ZpbGUsICdyYicpCisgICAgICAgIGJhc2VfY29uZiA9IGYucmVhZCgpCisgICAgICAgIGYuY2xv
c2UoKQorCisgICAgICAgIGYgPSBmaWxlKG91dF9jb25mX2ZpbGUsICd3YicpCisgICAgICAgIGYu
d3JpdGUoYmFzZV9jb25mKQorCisgICAgICAgICMgV3JpdGUgb3V0IG91ciBjZ2kgaGFuZGxlcnMu
ICBSdW4gcGVybCB0aHJvdWdoIGVudiBzbyB0aGF0IGl0CisgICAgICAgICMgcHJvY2Vzc2VzIHRo
ZSAjISBsaW5lIGFuZCBydW5zIHBlcmwgd2l0aCB0aGUgcHJvcGVyIGNvbW1hbmQKKyAgICAgICAg
IyBsaW5lIGFyZ3VtZW50cy4gRW11bGF0ZSBhcGFjaGUncyBtb2RfYXNpcyB3aXRoIGEgY2F0IGNn
aSBoYW5kbGVyLgorICAgICAgICBmLndyaXRlKCgnY2dpLmFzc2lnbiA9ICggIi5jZ2kiICA9PiAi
L3Vzci9iaW4vZW52IixcbicKKyAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICIucGwi
ICAgPT4gIi91c3IvYmluL2VudiIsXG4nCisgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAg
ICAiLmFzaXMiID0+ICIvYmluL2NhdCIsXG4nCisgICAgICAgICAgICAgICAgICcgICAgICAgICAg
ICAgICAiLnBocCIgID0+ICIlcyIgKVxuXG4nKSAlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fcG9ydF9vYmouX3BhdGhfdG9fbGlnaHR0cGRfcGhwKCkpCisKKyAg
ICAgICAgIyBTZXR1cCBsb2cgZmlsZXMKKyAgICAgICAgZi53cml0ZSgoJ3NlcnZlci5lcnJvcmxv
ZyA9ICIlcyJcbicKKyAgICAgICAgICAgICAgICAgJ2FjY2Vzc2xvZy5maWxlbmFtZSA9ICIlcyJc
blxuJykgJSAoZXJyb3JfbG9nLCBhY2Nlc3NfbG9nKSkKKworICAgICAgICAjIFNldHVwIHVwbG9h
ZCBmb2xkZXJzLiBVcGxvYWQgZm9sZGVyIGlzIHRvIGhvbGQgdGVtcG9yYXJ5IHVwbG9hZCBmaWxl
cworICAgICAgICAjIGFuZCBhbHNvIFBPU1QgZGF0YS4gVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQg
WEhSIGxheW91dCB0ZXN0cyB0aGF0CisgICAgICAgICMgZG9lcyBQT1NULgorICAgICAgICBmLndy
aXRlKCgnc2VydmVyLnVwbG9hZC1kaXJzID0gKCAiJXMiIClcblxuJykgJSAoc2VsZi5fb3V0cHV0
X2RpcikpCisKKyAgICAgICAgIyBTZXR1cCBhIGxpbmsgdG8gd2hlcmUgdGhlIGpzIHRlc3QgdGVt
cGxhdGVzIGFyZSBzdG9yZWQKKyAgICAgICAgZi53cml0ZSgoJ2FsaWFzLnVybCA9ICggIi9qcy10
ZXN0LXJlc291cmNlcyIgPT4gIiVzIiApXG5cbicpICUKKyAgICAgICAgICAgICAgICAgICAgKHNl
bGYuX2pzX3Rlc3RfcmVzb3VyY2UpKQorCisgICAgICAgICMgZHVtcCBvdXQgb2YgdmlydHVhbCBo
b3N0IGNvbmZpZyBhdCB0aGUgYm90dG9tLgorICAgICAgICBpZiBzZWxmLl9yb290OgorICAgICAg
ICAgICAgaWYgc2VsZi5fcG9ydDoKKyAgICAgICAgICAgICAgICAjIEhhdmUgYm90aCBwb3J0IGFu
ZCByb290IGRpci4KKyAgICAgICAgICAgICAgICBtYXBwaW5ncyA9IFt7J3BvcnQnOiBzZWxmLl9w
b3J0LCAnZG9jcm9vdCc6IHNlbGYuX3Jvb3R9XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICAjIEhhdmUgb25seSBhIHJvb3QgZGlyIC0gc2V0IHRoZSBwb3J0cyBhcyBmb3IgTGF5
b3V0VGVzdHMuCisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHVzZWQgaW4gdWlfdGVzdHMgdG8g
cnVuIGh0dHAgdGVzdHMgYWdhaW5zdCBhIGJyb3dzZXIuCisKKyAgICAgICAgICAgICAgICAjIGRl
ZmF1bHQgc2V0IG9mIHBvcnRzIGFzIGZvciBMYXlvdXRUZXN0cyBidXQgd2l0aCBhCisgICAgICAg
ICAgICAgICAgIyBzcGVjaWZpZWQgcm9vdC4KKyAgICAgICAgICAgICAgICBtYXBwaW5ncyA9IFt7
J3BvcnQnOiA4MDAwLCAnZG9jcm9vdCc6IHNlbGYuX3Jvb3R9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsncG9ydCc6IDgwODAsICdkb2Nyb290Jzogc2VsZi5fcm9vdH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODQ0MywgJ2RvY3Jvb3QnOiBzZWxmLl9yb290
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3NsY2VydCc6IHNlbGYuX3BlbV9maWxl
fV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hcHBpbmdzID0gc2VsZi5WSVJUVUFMQ09O
RklHCisgICAgICAgIGZvciBtYXBwaW5nIGluIG1hcHBpbmdzOgorICAgICAgICAgICAgc3NsX3Nl
dHVwID0gJycKKyAgICAgICAgICAgIGlmICdzc2xjZXJ0JyBpbiBtYXBwaW5nOgorICAgICAgICAg
ICAgICAgIHNzbF9zZXR1cCA9ICgnICBzc2wuZW5naW5lID0gImVuYWJsZSJcbicKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJyAgc3NsLnBlbWZpbGUgPSAiJXMiXG4nICUgbWFwcGluZ1sn
c3NsY2VydCddKQorCisgICAgICAgICAgICBmLndyaXRlKCgnJFNFUlZFUlsic29ja2V0Il0gPT0g
IjEyNy4wLjAuMTolZCIge1xuJworICAgICAgICAgICAgICAgICAgICAgJyAgc2VydmVyLmRvY3Vt
ZW50LXJvb3QgPSAiJXMiXG4nICsKKyAgICAgICAgICAgICAgICAgICAgIHNzbF9zZXR1cCArCisg
ICAgICAgICAgICAgICAgICAgICAnfVxuXG4nKSAlIChtYXBwaW5nWydwb3J0J10sIG1hcHBpbmdb
J2RvY3Jvb3QnXSkpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGV4ZWN1dGFibGUgPSBz
ZWxmLl9wb3J0X29iai5fcGF0aF90b19saWdodHRwZCgpCisgICAgICAgIG1vZHVsZV9wYXRoID0g
c2VsZi5fcG9ydF9vYmouX3BhdGhfdG9fbGlnaHR0cGRfbW9kdWxlcygpCisgICAgICAgIHN0YXJ0
X2NtZCA9IFtleGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgIyBOZXdseSB3cml0dGVu
IGNvbmZpZyBmaWxlCisgICAgICAgICAgICAgICAgICAgICAnLWYnLCBzZWxmLl9wb3J0X29iai5f
cGF0aF9mcm9tX2Jhc2Uoc2VsZi5fb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWdodHRwZC5jb25mJyksCisgICAg
ICAgICAgICAgICAgICAgICAjIFdoZXJlIGl0IGNhbiBmaW5kIGl0cyBtb2R1bGUgZHluYW1pYyBs
aWJyYXJpZXMKKyAgICAgICAgICAgICAgICAgICAgICctbScsIG1vZHVsZV9wYXRoXQorCisgICAg
ICAgIGlmIG5vdCBzZWxmLl9ydW5fYmFja2dyb3VuZDoKKyAgICAgICAgICAgIHN0YXJ0X2NtZC5h
cHBlbmQoIyBEb24ndCBiYWNrZ3JvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICct
RCcpCisKKyAgICAgICAgIyBDb3B5IGxpYmxpZ2h0Y29tcC5keWxpYiB0byAvdG1wL2xpZ2h0dHBk
L2xpYiB0byB3b3JrIGFyb3VuZCB0aGUKKyAgICAgICAgIyBidWcgdGhhdCBtb2RfYWxpYXMuc28g
bG9hZHMgaXQgZnJvbSB0aGUgaGFyZCBjb2RlZCBwYXRoLgorICAgICAgICBpZiBzeXMucGxhdGZv
cm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICB0bXBfbW9kdWxlX3BhdGggPSAnL3RtcC9saWdo
dHRwZC9saWInCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModG1wX21vZHVsZV9w
YXRoKToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyh0bXBfbW9kdWxlX3BhdGgpCisgICAg
ICAgICAgICBsaWJfZmlsZSA9ICdsaWJsaWdodGNvbXAuZHlsaWInCisgICAgICAgICAgICBzaHV0
aWwuY29weWZpbGUob3MucGF0aC5qb2luKG1vZHVsZV9wYXRoLCBsaWJfZmlsZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRtcF9tb2R1bGVfcGF0aCwgbGliX2Zp
bGUpKQorCisgICAgICAgICMgUHV0IHRoZSBjeWd3aW4gZGlyZWN0b3J5IGZpcnN0IGluIHRoZSBw
YXRoIHRvIGZpbmQgY3lnd2luMS5kbGwKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbgorICAgICAg
ICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKKyAgICAgICAgICAgIGVu
dlsnUEFUSCddID0gJyVzOyVzJyAlICgKKyAgICAgICAgICAgICAgICBwb3J0LnBhdGhfZnJvbV9i
YXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAnYmluJyksCisgICAgICAgICAgICAgICAgZW52
WydQQVRIJ10pCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIHNlbGYu
X3JlZ2lzdGVyX2N5Z3dpbjoKKyAgICAgICAgICAgIHNldHVwX21vdW50ID0gcG9ydC5wYXRoX2Zy
b21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2V0dXBfbW91bnQuYmF0JykKKyAgICAgICAg
ICAgIHN1YnByb2Nlc3MuUG9wZW4oc2V0dXBfbW91bnQpLndhaXQoKQorCisgICAgICAgIGxvZ2dp
bmcuZGVidWcoJ1N0YXJ0aW5nIGh0dHAgc2VydmVyJykKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9
IHN1YnByb2Nlc3MuUG9wZW4oc3RhcnRfY21kLCBlbnY9ZW52KQorCisgICAgICAgICMgV2FpdCBm
b3Igc2VydmVyIHRvIHN0YXJ0LgorICAgICAgICBzZWxmLm1hcHBpbmdzID0gbWFwcGluZ3MKKyAg
ICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndhaXRfZm9yX2FjdGlvbigKKyAgICAgICAgICAg
IHNlbGYuaXNfc2VydmVyX3J1bm5pbmdfb25fYWxsX3BvcnRzKQorCisgICAgICAgICMgT3VyIHBy
b2Nlc3MgdGVybWluYXRlZCBhbHJlYWR5CisgICAgICAgIGlmIG5vdCBzZXJ2ZXJfc3RhcnRlZCBv
ciBzZWxmLl9wcm9jZXNzLnJldHVybmNvZGUgIT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIGdv
b2dsZS5odHRwZF91dGlscy5IdHRwZE5vdFN0YXJ0ZWQoJ0ZhaWxlZCB0byBzdGFydCBodHRwZC4n
KQorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoIlNlcnZlciBzdWNjZXNzZnVsbHkgc3RhcnRlZCIp
CisKKyAgICAjIFRPRE8oZGVhbm0pOiBGaW5kIGEgbmljZXIgd2F5IHRvIHNodXRkb3duIGNsZWFu
bHkuICBPdXIgbG9nIGZpbGVzIGFyZQorICAgICMgcHJvYmFibHkgbm90IGJlaW5nIGZsdXNoZWQs
IGV0Yy4uLiB3aHkgZG9lc24ndCBvdXIgcHl0aG9uIGhhdmUgb3Mua2lsbCA/CisKKyAgICBkZWYg
c3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIGlmIG5vdCBmb3JjZSBhbmQgbm90IHNl
bGYuaXNfcnVubmluZygpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaHR0cGRfcGlk
ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgorICAgICAgICAgICAgaHR0cGRfcGlk
ID0gc2VsZi5fcHJvY2Vzcy5waWQKKyAgICAgICAgcG9ydC5fc2h1dF9kb3duX2h0dHBfc2VydmVy
KGh0dHBkX3BpZCkKKworICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgorICAgICAgICAgICAgc2Vs
Zi5fcHJvY2Vzcy53YWl0KCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisKK2lm
ICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgIyBQcm92aWRlIHNvbWUgY29tbWFuZCBsaW5l
IHBhcmFtcyBmb3Igc3RhcnRpbmcvc3RvcHBpbmcgdGhlIGh0dHAgc2VydmVyCisgICAgIyBtYW51
YWxseS4gQWxzbyB1c2VkIGluIHVpX3Rlc3RzIHRvIHJ1biBodHRwIGxheW91dCB0ZXN0cyBpbiBh
IGJyb3dzZXIuCisgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCisg
ICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctaycsICctLXNlcnZlcicsCisgICAgICAgIGhl
bHA9J1NlcnZlciBhY3Rpb24gKHN0YXJ0fHN0b3ApJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9v
cHRpb24oJy1wJywgJy0tcG9ydCcsCisgICAgICAgIGhlbHA9J1BvcnQgdG8gbGlzdGVuIG9uIChv
dmVycmlkZXMgbGF5b3V0IHRlc3QgcG9ydHMpJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRp
b24oJy1yJywgJy0tcm9vdCcsCisgICAgICAgIGhlbHA9J0Fic29sdXRlIHBhdGggdG8gRG9jdW1l
bnRSb290IChvdmVycmlkZXMgbGF5b3V0IHRlc3Qgcm9vdHMpJykKKyAgICBvcHRpb25fcGFyc2Vy
LmFkZF9vcHRpb24oJy0tcmVnaXN0ZXJfY3lnd2luJywgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAg
ICAgICAgZGVzdD0icmVnaXN0ZXJfY3lnd2luIiwgaGVscD0nUmVnaXN0ZXIgQ3lnd2luIHBhdGhz
IChvbiBXaW4gdHJ5IGJvdHMpJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tcnVu
X2JhY2tncm91bmQnLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBkZXN0PSJydW5fYmFj
a2dyb3VuZCIsCisgICAgICAgIGhlbHA9J1J1biBvbiBiYWNrZ3JvdW5kIChmb3IgcnVubmluZyBh
cyBVSSB0ZXN0KScpCisgICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJn
cygpCisKKyAgICBpZiBub3Qgb3B0aW9ucy5zZXJ2ZXI6CisgICAgICAgIHByaW50ICgnVXNhZ2U6
ICVzIC0tc2VydmVyIHtzdGFydHxzdG9wfSBbLS1yb290PXJvb3RfZGlyXScKKyAgICAgICAgICAg
ICAgICcgWy0tcG9ydD1wb3J0X251bWJlcl0nICUgc3lzLmFyZ3ZbMF0pCisgICAgZWxzZToKKyAg
ICAgICAgaWYgKG9wdGlvbnMucm9vdCBpcyBOb25lKSBhbmQgKG9wdGlvbnMucG9ydCBpcyBub3Qg
Tm9uZSk6CisgICAgICAgICAgICAjIHNwZWNpZnlpbmcgcm9vdCBidXQgbm90IHBvcnQgbWVhbnMg
d2Ugd2FudCBodHRwZCBvbiBkZWZhdWx0CisgICAgICAgICAgICAjIHNldCBvZiBwb3J0cyB0aGF0
IExheW91dFRlc3QgdXNlLCBidXQgcG9pbnRpbmcgdG8gYSBkaWZmZXJlbnQKKyAgICAgICAgICAg
ICMgc291cmNlIG9mIHRlc3RzLiBTcGVjaWZ5aW5nIHBvcnQgYnV0IG5vIHJvb3QgZG9lcyBub3Qg
c2VlbQorICAgICAgICAgICAgIyBtZWFuaW5nZnVsLgorICAgICAgICAgICAgcmFpc2UgJ1NwZWNp
ZnlpbmcgcG9ydCByZXF1aXJlcyBhbHNvIGEgcm9vdC4nCisgICAgICAgIGh0dHBkID0gTGlnaHR0
cGQodGVtcGZpbGUuZ2V0dGVtcGRpcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ9
b3B0aW9ucy5wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Q9b3B0aW9ucy5yb290
LAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2N5Z3dpbj1vcHRpb25zLnJlZ2lz
dGVyX2N5Z3dpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBydW5fYmFja2dyb3VuZD1vcHRp
b25zLnJ1bl9iYWNrZ3JvdW5kKQorICAgICAgICBpZiAnc3RhcnQnID09IG9wdGlvbnMuc2VydmVy
OgorICAgICAgICAgICAgaHR0cGQuc3RhcnQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
aHR0cGQuc3RvcChmb3JjZT1UcnVlKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4Mjk0M2UKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0
dHBfc2VydmVyX2Jhc2UucHkKQEAgLTAsMCArMSw3OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworIiIiQmFzZSBjbGFzcyB3aXRoIGNvbW1vbiByb3V0aW5lcyBi
ZXR3ZWVuIHRoZSBBcGFjaGUgYW5kIExpZ2h0dHBkIHNlcnZlcnMuIiIiCisKK2ltcG9ydCBsb2dn
aW5nCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJsbGliCisKKworY2xhc3MgSHR0
cFNlcnZlckJhc2Uob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaik6
CisgICAgICAgIHNlbGYuX3BvcnRfb2JqID0gcG9ydF9vYmoKKworICAgIGRlZiB3YWl0X2Zvcl9h
Y3Rpb24oc2VsZiwgYWN0aW9uKToKKyAgICAgICAgIiIiUmVwZWF0IHRoZSBhY3Rpb24gZm9yIDIw
IHNlY29uZHMgb3IgdW50aWwgaXQgc3VjY2VlZHMuIFJldHVybnMKKyAgICAgICAgd2hldGhlciBp
dCBzdWNjZWVkZWQuIiIiCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAg
ICB3aGlsZSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUgPCAyMDoKKyAgICAgICAgICAgIGlmIGFj
dGlvbigpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICB0aW1lLnNs
ZWVwKDEpCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfc2VydmVyX3J1bm5p
bmdfb25fYWxsX3BvcnRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHNl
cnZlciBpcyBydW5uaW5nIG9uIGFsbCB0aGUgZGVzaXJlZCBwb3J0cy4iIiIKKyAgICAgICAgZm9y
IG1hcHBpbmcgaW4gc2VsZi5tYXBwaW5nczoKKyAgICAgICAgICAgIGlmICdzc2xjZXJ0JyBpbiBt
YXBwaW5nOgorICAgICAgICAgICAgICAgIGh0dHBfc3VmZml4ID0gJ3MnCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIGh0dHBfc3VmZml4ID0gJycKKworICAgICAgICAgICAgdXJs
ID0gJ2h0dHAlczovLzEyNy4wLjAuMTolZC8nICUgKGh0dHBfc3VmZml4LCBtYXBwaW5nWydwb3J0
J10pCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVybGxp
Yi51cmxvcGVuKHVybCkKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTZXJ2ZXIgcnVu
bmluZyBhdCAlcyIgJSB1cmwpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAg
ICAgICAgICBsb2dnaW5nLmRlYnVnKCJTZXJ2ZXIgTk9UIHJ1bm5pbmcgYXQgJXMiICUgdXJsKQor
ICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAg
ICBkZWYgcmVtb3ZlX2xvZ19maWxlcyhzZWxmLCBmb2xkZXIsIHN0YXJ0c193aXRoKToKKyAgICAg
ICAgZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRlcikKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6
CisgICAgICAgICAgICBpZiBmaWxlLnN0YXJ0c3dpdGgoc3RhcnRzX3dpdGgpOgorICAgICAgICAg
ICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsIGZpbGUpCisgICAgICAgICAg
ICAgICAgb3MucmVtb3ZlKGZ1bGxfcGF0aCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cGQyLnBlbSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cGQyLnBlbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzQ5Yjc4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwZDIucGVtCkBAIC0w
LDAgKzEsNDEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRVpEQ0NBa3lnQXdJ
QkFnSUJBVEFOQmdrcWhraUc5dzBCQVFVRkFEQmdNUkF3RGdZRFZRUURFd2RVWlhOMAorSUVOQk1R
c3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhN
TgorVFc5MWJuUmhhVzRnVm1sbGR6RVNNQkFHQTFVRUNoTUpRMlZ5ZENCVVpYTjBNQjRYRFRBNE1E
Y3lPREl5TXpJeQorT0ZvWERURXpNRGN5TnpJeU16SXlPRm93U2pFTE1Ba0dBMVVFQmhNQ1ZWTXhF
ekFSQmdOVkJBZ1RDa05oYkdsbQorYjNKdWFXRXhFakFRQmdOVkJBb1RDVU5sY25RZ1ZHVnpkREVT
TUJBR0ExVUVBeE1KTVRJM0xqQXVNQzR4TUlHZgorTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURD
QmlRS0JnUURRajJ0UFdQVWdidUk0SDMvM2RudHRxVmJuZHdVMworM0JkUkNkNjdERk00NEdScnNq
RFNINGJZL0ViRnlYOUQ1MmQvaXk2WmFBbURlUGNDejVrL2ZnUDNETXVqeWtZRworcWdOaVYyeXd4
VGxNajdObE4yQzdTUnQ2OGZRTVpyNWlJN3J5cGR4dWFadDlsU01EM0VOQmZmWXR1TFR5WmQ5YQor
M0pQSmUxVGFJYWI1R3dJREFRQUJvNEhDTUlHL01Ba0dBMVVkRXdRQ01BQXdIUVlEVlIwT0JCWUVG
Q1lMQnY1SworeDVzTE5WbHBMaDVGd1R3aGREbDdNSUdTQmdOVkhTTUVnWW93Z1llQUZGM09mNW5q
MUJsQk1VL0d6N0VsOVZxdgorNDVjeG9XU2tZakJnTVJBd0RnWURWUVFERXdkVVpYTjBJRU5CTVFz
d0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRQorQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4
TU5UVzkxYm5SaGFXNGdWbWxsZHpFU01CQUdBMVVFQ2hNSgorUTJWeWRDQlVaWE4wZ2drQTFGR1Qx
RC9lMlU0d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dJQkFFdGtWbUxPYlVnaworYjJjSUEyUytRRHRp
ZnExVWdWZkJieXR2UjJsRm1uQURPUjU1bW8wZ0hRRzNISHFxNGcwMzRMbW9WWERIaFVrOAorR2I2
YUZpdjRRdWJtVmhMWGNVZWxUUlh3aU52R3prVzdwQzZKcnExMDVoZFBqelhNS1RjbWlMYW9wbTVG
cWZjNworaGo1Q24xU2pzcGM4cGRlUWpyYmVNZHZjYTdLbEZyR1A4WWt3Q1UyeE9PWDlQaU45RzA5
NjZCV2ZqbnIvZlpacAorK09RVnVVRkhkaUFad3RoRU11RHBBQVhIcVlYSXNlcm1nZE9wZ0phQTUz
Y2Y4TnFCVjJRR2h0Rmd0c0pDUm9pdQorN0RLcWh5UldCR3l6MTlWSUgyYjd5KzZxdlFWeHVIazE5
a0tSTTBuZnR3L3lOY0pubTdndHR0ZXNwTVVQc09NYQorYTJTRDFHMGhtMFRORDZ2eGFCaGdSM2NW
cXBsL3FJcEFkRmkwMFRtN2hUeVlFN0k0M3pQVzAzdCsvRHBDdDNVbQorRU1SWnNROTBjbzVxK2Jj
eC92UTdZQXR3VWgzMHVNYjB3cGliZXlDd0RwOGNxTm1TaVJrRXVjL0ZqVFllczV0OAorNWdSLy9X
WDFsMCtxanJqdXNPOU5tb0xucTJZazZVY2lvWCt6K3E2Wi9kdWRHZnFoTGZlV0QyUTBMV1lBMjQy
QworZDdrbTVZM0tBdDFQSmRWc29mL2FpVmhWZGRkWS9PSUVLVFJRaFdFZERib3N5MmVoMTZCQ0tY
VDJGRnZoTkRnMQorQVlGdm42SThuajlJbGRNSmlJYzNEZGhhY0VBRXpSTWVSZ1BkekFhMWdyaUtV
R2tueHN5VHlSaWk4cnUwV1M2dworRENOcmxET1ZYZHpZR0Vab29CSTc2QkRWWTBXMGFralYKKy0t
LS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0K
K01JSUNYUUlCQUFLQmdRRFFqMnRQV1BVZ2J1STRIMy8zZG50dHFWYm5kd1UzM0JkUkNkNjdERk00
NEdScnNqRFMKK0g0YlkvRWJGeVg5RDUyZC9peTZaYUFtRGVQY0N6NWsvZmdQM0RNdWp5a1lHcWdO
aVYyeXd4VGxNajdObE4yQzcKK1NSdDY4ZlFNWnI1aUk3cnlwZHh1YVp0OWxTTUQzRU5CZmZZdHVM
VHlaZDlhM0pQSmUxVGFJYWI1R3dJREFRQUIKK0FvR0FOSFh1OHoyWUl6bGhFK2J3aEdtOE1HQnBL
TDNxaFJ1S2plcmlxTUEzNnRXZXpPdzhsWTR5bUVBVStVbHYKK0JzQ2RheHF5ZFFvVFlvdTU3bTRU
eVVIRWN4cTlwcTNIMHpCMHFMNzA5RGRIaS90NHpiVjlYSW9BekM1djAvaEcKKzkrQ2EyOVR3QzAy
RkN3K3FMa05ydHdDcHdPY1FtYytiUHhxdkZ1MWlNaWFoVVJFQ1FRRDJJL0hpMjQxM0NNWnoKK1RC
amw4Zk1pVk85R2hBMkowc2M4UWkrWWNnSmFrYUxEOXhjYmFpTGtUelBaRGxBMzg5QzFiNklhK3Bv
QXI0WUEKK1ZlMEZGYnhwQWtFQTJPb2JheXlIRS9RdFBFcW95Nk5MUjU3amlybVZCTm1TV1dkNGxB
eUw1VUlISVlWdHRKWmcKKzhDTHZiemFVL2lER3dSK3dLc002NjRyS1BIRW10bHlvNHdKQkFNZVNx
WU81Wk9DSkd1OU5XanJIak0zZmRBc0cKKzh6czJ6aGlMeWErZmNVMGlISWtzQlc1VEJtdDcxSncv
d01jOVI1SjFLMGtZdkZtbDk4NjUzTzVzaTFFQ1FCQ2sKK1JWNC9tRTFybWx6WnpZRnlFY0I0N0RR
a2NNNWljdHZ4R0VzamUwZ25mS3lSdEF6NnpJMGY0UWJEUlVNSitMV3cKK1hLK3JNc1lIYStTZk9i
MGI5c2tDUVFDTGRlb25zSXBGRHYvVXYrZmxISVN5MFdBK0FGa0xYclJrQktoNkcvT0QKK2RNSGFO
ZXZrSmdVbnBjZVZFbmtyZGVucDVDY0VvRlRJMTdwZCtuQmdEbS9CCistLS0tLUVORCBSU0EgUFJJ
VkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9saWdodHRwZC5jb25mIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9saWdodHRwZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmQzMTUwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2xpZ2h0dHBkLmNvbmYKQEAgLTAsMCAr
MSw4OSBAQAorc2VydmVyLnRhZyAgICAgICAgICAgICAgICAgID0gIkxpZ2h0VFBELzEuNC4xOSAo
V2luMzIpIgorc2VydmVyLm1vZHVsZXMgICAgICAgICAgICAgID0gKCAibW9kX2FjY2Vzc2xvZyIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfYWxpYXMiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAibW9kX2NnaSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJtb2RfcmV3cml0ZSIgKQorCisjIGRlZmF1bHQgZG9jdW1lbnQgcm9vdCByZXF1
aXJlZAorc2VydmVyLmRvY3VtZW50LXJvb3QgPSAiLiIKKworIyBmaWxlcyB0byBjaGVjayBmb3Ig
aWYgLi4uLyBpcyByZXF1ZXN0ZWQKK2luZGV4LWZpbGUubmFtZXMgICAgICAgICAgICA9ICggImlu
ZGV4LnBocCIsICJpbmRleC5wbCIsICJpbmRleC5jZ2kiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW5kZXguaHRtbCIsICJpbmRleC5odG0iLCAiZGVmYXVsdC5odG0iICkKKyMg
bWltZXR5cGUgbWFwcGluZworbWltZXR5cGUuYXNzaWduICAgICAgICAgICAgID0gKAorICAiLmdp
ZiIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvZ2lmIiwKKyAgIi5qcGciICAgICAgICAgID0+ICAg
ICAgImltYWdlL2pwZWciLAorICAiLmpwZWciICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIs
CisgICIucG5nIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9wbmciLAorICAiLnN2ZyIgICAgICAg
ICAgPT4gICAgICAiaW1hZ2Uvc3ZnK3htbCIsCisgICIuY3NzIiAgICAgICAgICA9PiAgICAgICJ0
ZXh0L2NzcyIsCisgICIuaHRtbCIgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAorICAiLmh0
bSIgICAgICAgICAgPT4gICAgICAidGV4dC9odG1sIiwKKyAgIi54aHRtbCIgICAgICAgID0+ICAg
ICAgImFwcGxpY2F0aW9uL3hodG1sK3htbCIsCisgICIuanMiICAgICAgICAgICA9PiAgICAgICJ0
ZXh0L2phdmFzY3JpcHQiLAorICAiLmxvZyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIs
CisgICIuY29uZiIgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi50ZXh0IiAgICAg
ICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLnR4dCIgICAgICAgICAgPT4gICAgICAidGV4
dC9wbGFpbiIsCisgICIuZHRkIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisgICIueG1s
IiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisgICIubWFuaWZlc3QiICAgICA9PiAgICAg
ICJ0ZXh0L2NhY2hlLW1hbmlmZXN0IiwKKyApCisKKyMgVXNlIHRoZSAiQ29udGVudC1UeXBlIiBl
eHRlbmRlZCBhdHRyaWJ1dGUgdG8gb2J0YWluIG1pbWUgdHlwZSBpZiBwb3NzaWJsZQorbWltZXR5
cGUudXNlLXhhdHRyICAgICAgICAgID0gImVuYWJsZSIKKworIyMKKyMgd2hpY2ggZXh0ZW5zaW9u
cyBzaG91bGQgbm90IGJlIGhhbmRsZSB2aWEgc3RhdGljLWZpbGUgdHJhbnNmZXIKKyMKKyMgLnBo
cCwgLnBsLCAuZmNnaSBhcmUgbW9zdCBvZnRlbiBoYW5kbGVkIGJ5IG1vZF9mYXN0Y2dpIG9yIG1v
ZF9jZ2kKK3N0YXRpYy1maWxlLmV4Y2x1ZGUtZXh0ZW5zaW9ucyA9ICggIi5waHAiLCAiLnBsIiwg
Ii5jZ2kiICkKKworc2VydmVyLmJpbmQgPSAibG9jYWxob3N0Igorc2VydmVyLnBvcnQgPSA4MDAx
CisKKyMjIHZpcnR1YWwgZGlyZWN0b3J5IGxpc3RpbmdzCitkaXItbGlzdGluZy5hY3RpdmF0ZSAg
ICAgICAgPSAiZW5hYmxlIgorI2Rpci1saXN0aW5nLmVuY29kaW5nICAgICAgID0gImlzby04ODU5
LTIiCisjZGlyLWxpc3RpbmcuZXh0ZXJuYWwtY3NzICAgPSAic3R5bGUvb2xkc3R5bGUuY3NzIgor
CisjIyBlbmFibGUgZGVidWdnaW5nCisjZGVidWcubG9nLXJlcXVlc3QtaGVhZGVyICAgPSAiZW5h
YmxlIgorI2RlYnVnLmxvZy1yZXNwb25zZS1oZWFkZXIgID0gImVuYWJsZSIKKyNkZWJ1Zy5sb2ct
cmVxdWVzdC1oYW5kbGluZyA9ICJlbmFibGUiCisjZGVidWcubG9nLWZpbGUtbm90LWZvdW5kICAg
PSAiZW5hYmxlIgorCisjIyMjIFNTTCBlbmdpbmUKKyNzc2wuZW5naW5lICAgICAgICAgICAgICAg
ICA9ICJlbmFibGUiCisjc3NsLnBlbWZpbGUgICAgICAgICAgICAgICAgPSAic2VydmVyLnBlbSIK
KworIyBSZXdyaXRlIHJ1bGUgZm9yIHV0Zi04IHBhdGggdGVzdCAoTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy91cmkvdXRmOC1wYXRoLmh0bWwpCisjIFNlZSB0aGUgYXBhY2hlIHJld3JpdGUgcnVsZSBh
dCBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3VyaS9pbnRlcmNlcHQvLmh0YWNjZXNzCisjIFJld3Jp
dGUgcnVsZSBmb3IgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9jeXJpbGxpYy11cmku
aHRtbC4KKyMgU2VlIHRoZSBhcGFjaGUgcmV3cml0ZSBydWxlIGF0CisjIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvYXBwY2FjaGUvcmVzb3VyY2VzL2ludGVyY2VwdC8uaHRhY2Nlc3MKK3VybC5yZXdy
aXRlLW9uY2UgPSAoCisgICJeL3VyaS9pbnRlcmNlcHQvKC4qKSIgPT4gIi91cmkvcmVzb3VyY2Vz
L3ByaW50LXVyaS5waHAiLAorICAiXi9hcHBjYWNoZS9yZXNvdXJjZXMvaW50ZXJjZXB0LyguKiki
ID0+ICIvYXBwY2FjaGUvcmVzb3VyY2VzL3ByaW50LXVyaS5waHAiCispCisKKyMgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNwb25zZS1lbmNvZGluZy5odG1sIHVzZXMg
YW4gaHRhY2Nlc3MKKyMgdG8gb3ZlcnJpZGUgY2hhcnNldCBmb3IgcmVwbHkyLnR4dCwgcmVwbHky
LnhtbCwgYW5kIHJlcGx5NC50eHQuCiskSFRUUFsidXJsIl0gPX4gIl4veG1saHR0cHJlcXVlc3Qv
cmVzb3VyY2VzL3JlcGx5Mi4odHh0fHhtbCkiIHsKKyAgbWltZXR5cGUuYXNzaWduID0gKAorICAg
ICIudHh0IiA9PiAidGV4dC9wbGFpbjsgY2hhcnNldD13aW5kb3dzLTEyNTEiLAorICAgICIueG1s
IiA9PiAidGV4dC94bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUxIgorICApCit9CiskSFRUUFsidXJs
Il0gPX4gIl4veG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlcGx5NC50eHQiIHsKKyAgbWltZXR5
cGUuYXNzaWduID0gKCAiLnR4dCIgPT4gInRleHQvcGxhaW47IGNoYXJzZXQ9a29pOC1yIiApCit9
CisKKyMgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS93cm9uZy1jb250ZW50LXR5cGUu
aHRtbCB1c2VzIGFuIGh0YWNjZXNzCisjIHRvIG92ZXJyaWRlIG1pbWUgdHlwZSBmb3Igd3Jvbmct
Y29udGVudC10eXBlLm1hbmlmZXN0LgorJEhUVFBbInVybCJdID1+ICJeL2FwcGNhY2hlL3Jlc291
cmNlcy93cm9uZy1jb250ZW50LXR5cGUubWFuaWZlc3QiIHsKKyAgbWltZXR5cGUuYXNzaWduID0g
KCAiLm1hbmlmZXN0IiA9PiAidGV4dC9wbGFpbiIgKQorfQorCisjIEF1dG9nZW5lcmF0ZWQgdGVz
dC1zcGVjaWZpYyBjb25maWcgZm9sbG93cy4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOTIzODZhOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CkBAIC0wLDAgKzEsNDI5IEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisj
IG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1l
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiV2ViS2l0IE1hYyBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCisKK2ltcG9ydCBmY250bAoraW1wb3J0
IG9zCitpbXBvcnQgcGRiCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBz
aWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0
IHdlYmJyb3dzZXIKKworaW1wb3J0IGJhc2UKKworCitjbGFzcyBNYWNQb3J0KGJhc2UuUG9ydCk6
CisgICAgIiIiV2ViS2l0IE1hYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBjbGFzcy4iIiIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lKToK
KyAgICAgICAgaWYgcG9ydF9uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBwb3J0X25hbWUgPSAn
bWFjJyArIHBvcnQudmVyc2lvbigpCisgICAgICAgIGJhc2UuUG9ydC5fX2luaXRfXyhzZWxmLCBw
b3J0X25hbWUsIG9wdGlvbnMpCisKKyAgICBkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6
CisgICAgICAgIGRpcnMgPSBbXQorICAgICAgICBpZiBzZWxmLl9uYW1lID09ICdtYWMtdGlnZXIn
OgorICAgICAgICAgICAgZGlycy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoc2Vs
Zi5fbmFtZSkpCisgICAgICAgIGlmIHNlbGYuX25hbWUgaW4gKCdtYWMtdGlnZXInLCAnbWFjLWxl
b3BhcmQnKToKKyAgICAgICAgICAgIGRpcnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9w
YXRoKCdtYWMtbGVvcGFyZCcpKQorICAgICAgICBpZiBzZWxmLl9uYW1lIGluICgnbWFjLXRpZ2Vy
JywgJ21hYy1sZW9wYXJkJywgJ21hYy1zbm93bGVvcGFyZCcpOgorICAgICAgICAgICAgZGlycy5h
cHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYy1zbm93bGVvcGFyZCcpKQorICAg
ICAgICBkaXJzLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCgnbWFjJykpCisgICAg
ICAgIHJldHVybiBkaXJzCisKKyAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZik6CisgICAgICAg
ICMgVGhlcmUgYXJlIG5vIHBsYXRmb3JtLXNwZWNpZmljIGNoZWNrcyB3ZSBuZWVkIHRvIGRvLgor
ICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIG51bV9jb3JlcyhzZWxmKToKKyAgICAgICAg
cmV0dXJuIGludChvcy5wb3BlbjIoInN5c2N0bCAtbiBody5uY3B1IilbMV0ucmVhZCgpKQorCisg
ICAgZGVmIHJlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICByZXR1cm4gKCcvdG1wL3J1
bi1jaHJvbWl1bS13ZWJraXQtdGVzdHMtJyArCisgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9u
cy5yZXN1bHRzX2RpcmVjdG9yeSkKKworICAgIGRlZiBzZXR1cF90ZXN0X3J1bihzZWxmKToKKyAg
ICAgICAgIyBUaGlzIHBvcnQgZG9lc24ndCByZXF1aXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0
aW9uLgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2hvd19yZXN1bHRzX2h0bWxfZmlsZShzZWxm
LCByZXN1bHRzX2ZpbGVuYW1lKToKKyAgICAgICAgdXJpID0gc2VsZi5maWxlbmFtZV90b191cmko
cmVzdWx0c19maWxlbmFtZSkKKyAgICAgICAgd2ViYnJvd3Nlci5vcGVuKHVyaSwgbmV3PTEpCisK
KyAgICBkZWYgc3RhcnRfZHJpdmVyKHNlbGYsIGltYWdlX3BhdGgsIG9wdGlvbnMpOgorICAgICAg
ICAiIiJTdGFydHMgYSBuZXcgRHJpdmVyIGFuZCByZXR1cm5zIGEgaGFuZGxlIHRvIGl0LiIiIgor
ICAgICAgICByZXR1cm4gTWFjRHJpdmVyKHNlbGYsIGltYWdlX3BhdGgsIG9wdGlvbnMpCisKKyAg
ICBkZWYgc3RhcnRfaGVscGVyKHNlbGYpOgorICAgICAgICAjIFRoaXMgcG9ydCBkb2Vzbid0IHVz
ZSBhIGhlbHBlciBwcm9jZXNzLgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcF9oZWxwZXIo
c2VsZik6CisgICAgICAgICMgVGhpcyBwb3J0IGRvZXNuJ3QgdXNlIGEgaGVscGVyIHByb2Nlc3Mu
CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2Jhc2VfcGxhdGZvcm1fbmFtZXMoc2VsZik6
CisgICAgICAgICMgQXQgdGhlIG1vbWVudCB3ZSBkb24ndCB1c2UgdGVzdCBwbGF0Zm9ybSBuYW1l
cywgYnV0IHdlIGhhdmUKKyAgICAgICAgIyB0byByZXR1cm4gc29tZXRoaW5nLgorICAgICAgICBy
ZXR1cm4gKCdtYWMnLCkKKworICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9ucyhzZWxmKToKKyAgICAg
ICAgIworICAgICAgICAjIFRoZSBXZWJLaXQgbWFjIHBvcnQgdXNlcyAnU2tpcHBlZCcgZmlsZXMg
YXQgdGhlIG1vbWVudC4gRWFjaAorICAgICAgICAjIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIGZp
bGVzIG9yIGRpcmVjdG9yaWVzIHRvIGJlIHNraXBwZWQgZHVyaW5nCisgICAgICAgICMgdGhlIHRl
c3QgcnVuLiBUaGUgdG90YWwgbGlzdCBvZiB0ZXN0cyB0byBza2lwcGVkIGlzIGdpdmVuIGJ5IHRo
ZQorICAgICAgICAjIGNvbnRlbnRzIG9mIHRoZSBnZW5lcmljIFNraXBwZWQgZmlsZSBmb3VuZCBp
biBwbGF0Zm9ybS9YIHBsdXMKKyAgICAgICAgIyBhIHZlcnNpb24tc3BlY2lmaWMgZmlsZSBmb3Vu
ZCBpbiBwbGF0Zm9ybS9YLXZlcnNpb24uIER1cGxpY2F0ZQorICAgICAgICAjIGVudHJpZXMgYXJl
IGFsbG93ZWQuIFRoaXMgcm91dGluZSByZWFkcyB0aG9zZSBmaWxlcyBhbmQgdHVybnMKKyAgICAg
ICAgIyBjb250ZW50cyBpbnRvIHRoZSBmb3JtYXQgZXhwZWN0ZWQgYnkgdGVzdF9leHBlY3RhdGlv
bnMuCisgICAgICAgIGV4cGVjdGF0aW9ucyA9IFtdCisgICAgICAgIHNraXBwZWRfZmlsZXMgPSBb
XQorICAgICAgICBpZiBzZWxmLl9uYW1lIGluICgnbWFjLXRpZ2VyJywgJ21hYy1sZW9wYXJkJywg
J21hYy1zbm93bGVvcGFyZCcpOgorICAgICAgICAgICAgc2tpcHBlZF9maWxlcy5hcHBlbmQob3Mu
cGF0aC5qb2luKAorICAgICAgICAgICAgICAgIHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKHNl
bGYuX25hbWUpLCAnU2tpcHBlZCcpKQorICAgICAgICBza2lwcGVkX2ZpbGVzLmFwcGVuZChvcy5w
YXRoLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NraXBwZWQnKSkKKyAgICAgICAgZm9yIGZp
bGVuYW1lIGluIHNraXBwZWRfZmlsZXM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhm
aWxlbmFtZSk6CisgICAgICAgICAgICAgICAgZiA9IGZpbGUoZmlsZW5hbWUpCisgICAgICAgICAg
ICAgICAgZm9yIGwgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgbCA9IGwu
c3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbC5zdGFydHN3aXRoKCcjJykgYW5k
IGxlbihsKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAnQlVHX1NLSVBQRUQgU0tJUCA6
ICcgKyBsICsgJyA9IEZBSUwnCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsIG5vdCBpbiBl
eHBlY3RhdGlvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFw
cGVuZChsKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICMgVE9ETyAtIGZp
Z3VyZSBvdXQgaG93IHRvIGNoZWNrIGZvciB0aGVzZSBkeW5hbWljYWxseQorICAgICAgICBleHBl
Y3RhdGlvbnMuYXBwZW5kKCdCVUdfU0tJUFBFRCBTS0lQIDogZmFzdC93Y3NzID0gRkFJTCcpCisg
ICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoJ0JVR19TS0lQUEVEIFNLSVAgOiBmYXN0L3hodG1s
bXAgPSBGQUlMJykKKyAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZCgnQlVHX1NLSVBQRUQgU0tJ
UCA6IGh0dHAvdGVzdHMvd21sID0gRkFJTCcpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQo
J0JVR19TS0lQUEVEIFNLSVAgOiBtYXRobWwgPSBGQUlMJykKKyAgICAgICAgZXhwZWN0YXRpb25z
LmFwcGVuZCgnQlVHX1NLSVBQRUQgU0tJUCA6IHBsYXRmb3JtL2Nocm9taXVtID0gRkFJTCcpCisg
ICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoJ0JVR19TS0lQUEVEIFNLSVAgOiBwbGF0Zm9ybS9n
dGsgPSBGQUlMJykKKyAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZCgnQlVHX1NLSVBQRUQgU0tJ
UCA6IHBsYXRmb3JtL3F0ID0gRkFJTCcpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoJ0JV
R19TS0lQUEVEIFNLSVAgOiBwbGF0Zm9ybS93aW4gPSBGQUlMJykKKyAgICAgICAgZXhwZWN0YXRp
b25zLmFwcGVuZCgnQlVHX1NLSVBQRUQgU0tJUCA6IHdtbCA9IEZBSUwnKQorCisgICAgICAgICMg
VE9ETyAtIGZpZ3VyZSBvdXQgaG93IHRvIGhhbmRsZSB3ZWJhcmNoaXZlIHRlc3RzCisgICAgICAg
IGV4cGVjdGF0aW9ucy5hcHBlbmQoJ0JVR19TS0lQUEVEIFNLSVAgOiB3ZWJhcmNoaXZlID0gUEFT
UycpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoJ0JVR19TS0lQUEVEIFNLSVAgOiBzdmcv
d2ViYXJjaGl2ZSA9IFBBU1MnKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKCdCVUdfU0tJ
UFBFRCBTS0lQIDogaHR0cC90ZXN0cy93ZWJhcmNoaXZlID0gUEFTUycpCisgICAgICAgIGV4cGVj
dGF0aW9ucy5hcHBlbmQoJ0JVR19TS0lQUEVEIFNLSVAgOiBzdmcvY3VzdG9tLycKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnaW1hZ2Utd2l0aC1wcmVmaXgtaW4td2ViYXJjaGl2ZS5zdmcg
PSBQQVNTJykKKworICAgICAgICBleHBlY3RhdGlvbnNfc3RyID0gJ1xuJy5qb2luKGV4cGVjdGF0
aW9ucykKKyAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uc19zdHIKKworICAgIGRlZiB0ZXN0X3Bs
YXRmb3JtX25hbWUoc2VsZik6CisgICAgICAgICMgQXQgdGhlIG1vbWVudCB3ZSBkb24ndCB1c2Ug
dGVzdCBwbGF0Zm9ybSBuYW1lcywgYnV0IHdlIGhhdmUKKyAgICAgICAgIyB0byByZXR1cm4gc29t
ZXRoaW5nLgorICAgICAgICByZXR1cm4gJ21hYycKKworICAgIGRlZiB0ZXN0X3BsYXRmb3JtX25h
bWVzKHNlbGYpOgorICAgICAgICAjIEF0IHRoZSBtb21lbnQgd2UgZG9uJ3QgdXNlIHRlc3QgcGxh
dGZvcm0gbmFtZXMsIGJ1dCB3ZSBoYXZlCisgICAgICAgICMgdG8gcmV0dXJuIHNvbWV0aGluZy4K
KyAgICAgICAgcmV0dXJuICgnbWFjJywpCisKKyAgICBkZWYgdmVyc2lvbihzZWxmKToKKyAgICAg
ICAgb3NfdmVyc2lvbl9zdHJpbmcgPSBwbGF0Zm9ybS5tYWNfdmVyKClbMF0gICMgZS5nLiAiMTAu
NS42IgorICAgICAgICBpZiBub3Qgb3NfdmVyc2lvbl9zdHJpbmc6CisgICAgICAgICAgICByZXR1
cm4gJy1sZW9wYXJkJworICAgICAgICByZWxlYXNlX3ZlcnNpb24gPSBpbnQob3NfdmVyc2lvbl9z
dHJpbmcuc3BsaXQoJy4nKVsxXSkKKyAgICAgICAgaWYgcmVsZWFzZV92ZXJzaW9uID09IDQ6Cisg
ICAgICAgICAgICByZXR1cm4gJy10aWdlcicKKyAgICAgICAgZWxpZiByZWxlYXNlX3ZlcnNpb24g
PT0gNToKKyAgICAgICAgICAgIHJldHVybiAnLWxlb3BhcmQnCisgICAgICAgIGVsaWYgcmVsZWFz
ZV92ZXJzaW9uID09IDY6CisgICAgICAgICAgICByZXR1cm4gJy1zbm93bGVvcGFyZCcKKyAgICAg
ICAgcmV0dXJuICcnCisKKyAgICAjCisgICAgIyBQUk9URUNURUQgTUVUSE9EUworICAgICMKKwor
ICAgIGRlZiBfYnVpbGRfcGF0aChzZWxmLCAqY29tcHMpOgorICAgICAgICByZXR1cm4gc2VsZi5w
YXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1dlYktpdEJ1aWxkJywgc2VsZi5fb3B0aW9ucy50YXJnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29tcHMpCisKKyAg
ICBkZWYgX2tpbGxfcHJvY2VzcyhzZWxmLCBwaWQpOgorICAgICAgICAiIiJGb3JjZWZ1bGx5IGtp
bGwgdGhlIHByb2Nlc3MuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgcGlkOiBUaGUgaWQgb2Yg
dGhlIHByb2Nlc3MgdG8gYmUga2lsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgb3Mua2lsbChw
aWQsIHNpZ25hbC5TSUdLSUxMKQorCisgICAgZGVmIF9raWxsX2FsbF9wcm9jZXNzKHNlbGYsIHBy
b2Nlc3NfbmFtZSk6CisgICAgICAgICMgT24gTWFjIE9TIFggMTAuNiwga2lsbGFsbCBoYXMgYSBu
ZXcgY29uc3RyYWludDogLVNJR05BTE5BTUUgb3IKKyAgICAgICAgIyAtU0lHTkFMTlVNQkVSIG11
c3QgY29tZSBmaXJzdC4gIEV4YW1wbGUgcHJvYmxlbToKKyAgICAgICAgIyAgICQga2lsbGFsbCAt
dSAkVVNFUiAtVEVSTSBsaWdodHRwZAorICAgICAgICAjICAga2lsbGFsbDogaWxsZWdhbCBvcHRp
b24gLS0gVAorICAgICAgICAjIFVzZSBvZiB0aGUgZWFybGllciAtVEVSTSBwbGFjZW1lbnQgaXMg
anVzdCBmaW5lIG9uIDEwLjUuCisgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwpCisgICAg
ICAgIHN1YnByb2Nlc3MuY2FsbChbJ2tpbGxhbGwnLCAnLVRFUk0nLCAnLXUnLCBvcy5nZXRlbnYo
J1VTRVInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1u
dWxsKQorICAgICAgICBudWxsLmNsb3NlKCkKKworICAgIGRlZiBfcGF0aF90b19hcGFjaGUoc2Vs
Zik6CisgICAgICAgIHJldHVybiAnL3Vzci9zYmluL2h0dHBkJworCisgICAgZGVmIF9wYXRoX3Rv
X2FwYWNoZV9jb25maWdfZmlsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihz
ZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ2h0dHAnLCAnY29uZicsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2FwYWNoZTItaHR0cGQuY29uZicpCisKKyAgICBkZWYgX3BhdGhfdG9fZHJp
dmVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnRHVtcFJlbmRlclRy
ZWUnKQorCisgICAgZGVmIF9wYXRoX3RvX2hlbHBlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIE5v
bmUKKworICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fYnVpbGRfcGF0aCgnaW1hZ2VfZGlmZicpCisKKyAgICBkZWYgX3BhdGhfdG9fd2RpZmYo
c2VsZik6CisgICAgICAgIHJldHVybiAnd2RpZmYnCisKKyAgICBkZWYgX3NodXRfZG93bl9odHRw
X3NlcnZlcihzZWxmLCBzZXJ2ZXJfcGlkKToKKyAgICAgICAgIiIiU2h1dCBkb3duIHRoZSBsaWdo
dHRwZCB3ZWIgc2VydmVyLiBCbG9ja3MgdW50aWwgaXQncyBmdWxseQorICAgICAgICBzaHV0IGRv
d24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHNlcnZlcl9waWQ6IFRoZSBwcm9jZXNz
IElEIG9mIHRoZSBydW5uaW5nIHNlcnZlci4KKyAgICAgICAgIiIiCisgICAgICAgICMgc2VydmVy
X3BpZCBpcyBub3Qgc2V0IHdoZW4gImh0dHBfc2VydmVyLnB5IHN0b3AiIGlzIHJ1biBtYW51YWxs
eS4KKyAgICAgICAgaWYgc2VydmVyX3BpZCBpcyBOb25lOgorICAgICAgICAgICAgIyBUT0RPKG1t
b3NzKSBUaGlzIGlzbid0IGlkZWFsLCBzaW5jZSBpdCBjb3VsZCBjb25mbGljdCB3aXRoCisgICAg
ICAgICAgICAjIGxpZ2h0dHBkIHByb2Nlc3NlcyBub3Qgc3RhcnRlZCBieSBodHRwX3NlcnZlci5w
eSwKKyAgICAgICAgICAgICMgYnV0IGdvb2QgZW5vdWdoIGZvciBub3cuCisgICAgICAgICAgICBz
ZWxmLl9raWxsX2FsbF9wcm9jZXNzKCdodHRwZCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgb3Mua2lsbChzZXJ2ZXJfcGlkLCBzaWduYWwuU0lHVEVS
TSkKKyAgICAgICAgICAgICAgICAjIFRPRE8obW1vc3MpIE1heWJlIHRocm93IGluIGEgU0lHS0lM
TCBqdXN0IHRvIGJlIHN1cmU/CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAg
ICAgICAgICAjIFNvbWV0aW1lcyB3ZSBnZXQgYSBiYWQgUElEIChlLmcuIGZyb20gYSBzdGFsZSBo
dHRwZC5waWQKKyAgICAgICAgICAgICAgICAjIGZpbGUpLCBzbyBpZiBraWxsIGZhaWxzIG9uIHRo
ZSBnaXZlbiBQSUQsIGp1c3QgdHJ5IHRvCisgICAgICAgICAgICAgICAgIyAna2lsbGFsbCcgd2Vi
IHNlcnZlcnMuCisgICAgICAgICAgICAgICAgc2VsZi5fc2h1dF9kb3duX2h0dHBfc2VydmVyKE5v
bmUpCisKKworY2xhc3MgTWFjRHJpdmVyKGJhc2UuRHJpdmVyKToKKyAgICAiIiJpbXBsZW1lbnRh
dGlvbiBvZiB0aGUgRHVtcFJlbmRlclRyZWUgaW50ZXJmYWNlLiIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBvcnQsIGltYWdlX3BhdGgsIGRyaXZlcl9vcHRpb25zKToKKyAgICAgICAgc2Vs
Zi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fZHJpdmVyX29wdGlvbnMgPSBkcml2ZXJfb3B0
aW9ucworICAgICAgICBzZWxmLl90YXJnZXQgPSBwb3J0Ll9vcHRpb25zLnRhcmdldAorICAgICAg
ICBzZWxmLl9pbWFnZV9wYXRoID0gaW1hZ2VfcGF0aAorICAgICAgICBzZWxmLl9zdGRvdXRfZmQg
PSBOb25lCisgICAgICAgIHNlbGYuX2NtZCA9IE5vbmUKKyAgICAgICAgc2VsZi5fZW52ID0gTm9u
ZQorICAgICAgICBzZWxmLl9wcm9jID0gTm9uZQorICAgICAgICBzZWxmLl9yZWFkX2J1ZmZlciA9
ICcnCisKKyAgICAgICAgY21kID0gW10KKyAgICAgICAgIyBIb29rIGZvciBpbmplY3RpbmcgdmFs
Z3JpbmQgb3Igb3RoZXIgcnVudGltZSBpbnN0cnVtZW50YXRpb24sCisgICAgICAgICMgdXNlZCBi
eSBlLmcuIHRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kX3Rlc3RzLnB5LgorICAgICAgICB3cmFwcGVy
ID0gb3MuZW52aXJvbi5nZXQoIkJST1dTRVJfV1JBUFBFUiIsIE5vbmUpCisgICAgICAgIGlmIHdy
YXBwZXIgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSBbd3JhcHBlcl0KKyAgICAgICAgaWYg
c2VsZi5fcG9ydC5fb3B0aW9ucy53cmFwcGVyOgorICAgICAgICAgICAgIyBUaGlzIHNwbGl0KCkg
aXNuJ3QgcmVhbGx5IHdoYXQgd2Ugd2FudCAtLSBpdCBpbmNvcnJlY3RseSB3aWxsCisgICAgICAg
ICAgICAjIHNwbGl0IHF1b3RlZCBzdHJpbmdzIHdpdGhpbiB0aGUgd3JhcHBlciBhcmd1bWVudCAt
LSBidXQgaW4KKyAgICAgICAgICAgICMgcHJhY3RpY2UgaXQgc2hvdWxkbid0IGNvbWUgdXAgYW5k
IHRoZSAtLWhlbHAgb3V0cHV0IHdhcm5zCisgICAgICAgICAgICAjIGFib3V0IGl0IGFueXdheS4K
KyAgICAgICAgICAgIGNtZCArPSBzZWxmLl9vcHRpb25zLndyYXBwZXIuc3BsaXQoKQorICAgICAg
ICBjbWQgKz0gWydhcmNoJywgJy1pMzg2JywgcG9ydC5fcGF0aF90b19kcml2ZXIoKSwgJy0nXQor
ICAgICAgICBpZiBub3Qgc2VsZi5fcG9ydC5fb3B0aW9ucy5ub19waXhlbF90ZXN0czoKKyAgICAg
ICAgICAgIGNtZC5hcHBlbmQoJy0tcGl4ZWwtdGVzdHMnKQorCisgICAgICAgICNpZiBkcml2ZXJf
b3B0aW9uczoKKyAgICAgICAgIyAgICBjbWQgKz0gZHJpdmVyX29wdGlvbnMKKyAgICAgICAgZW52
ID0gb3MuZW52aXJvbgorICAgICAgICBlbnZbJ0RZTERfRlJBTUVXT1JLX1BBVEgnXSA9IHNlbGYu
X3BvcnQucGF0aF9mcm9tX3dlYmtpdF9iYXNlKAorICAgICAgICAgICAgJ1dlYktpdEJ1aWxkJywg
cG9ydC5fb3B0aW9ucy50YXJnZXQpCisgICAgICAgIHNlbGYuX2NtZCA9IGNtZAorICAgICAgICBz
ZWxmLl9lbnYgPSBlbnYKKyAgICAgICAgc2VsZi5yZXN0YXJ0KCkKKworICAgIGRlZiBwb2xsKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5wb2xsKCkKKworICAgIGRlZiByZXN0YXJ0
KHNlbGYpOgorICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICBzZWxmLl9wcm9jID0gc3VicHJv
Y2Vzcy5Qb3BlbihzZWxmLl9jbWQsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PXNlbGYuX2VudikKKwor
ICAgIGRlZiByZXR1cm5jb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5yZXR1
cm5jb2RlCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdXJpLCB0aW1lb3V0bXMsIGltYWdlX2hh
c2gpOgorICAgICAgICBvdXRwdXQgPSBbXQorICAgICAgICBlcnJvciA9IFtdCisgICAgICAgIGlt
YWdlID0gJycKKyAgICAgICAgY3Jhc2ggPSBGYWxzZQorICAgICAgICB0aW1lb3V0ID0gRmFsc2UK
KyAgICAgICAgYWN0dWFsX3VyaSA9IE5vbmUKKyAgICAgICAgYWN0dWFsX2ltYWdlX2hhc2ggPSBO
b25lCisKKyAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImZpbGU6Ly8vIik6CisgICAgICAgICAg
ICBjbWQgPSB1cmlbNzpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSB1cmkKKwor
ICAgICAgICBpZiBpbWFnZV9oYXNoOgorICAgICAgICAgICAgY21kICs9ICInIiArIGltYWdlX2hh
c2gKKyAgICAgICAgY21kICs9ICJcbiIKKworICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRl
KGNtZCkKKyAgICAgICAgc2VsZi5fc3Rkb3V0X2ZkID0gc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5v
KCkKKyAgICAgICAgZmwgPSBmY250bC5mY250bChzZWxmLl9zdGRvdXRfZmQsIGZjbnRsLkZfR0VU
RkwpCisgICAgICAgIGZjbnRsLmZjbnRsKHNlbGYuX3N0ZG91dF9mZCwgZmNudGwuRl9TRVRGTCwg
ZmwgfCBvcy5PX05PTkJMT0NLKQorCisgICAgICAgIHN0b3BfdGltZSA9IHRpbWUudGltZSgpICsg
KGludCh0aW1lb3V0bXMpIC8gMTAwMC4wKQorICAgICAgICByZXNwID0gJycKKyAgICAgICAgKHRp
bWVvdXQsIGxpbmUpID0gc2VsZi5fcmVhZF9saW5lKHRpbWVvdXQsIHN0b3BfdGltZSkKKyAgICAg
ICAgcmVzcCArPSBsaW5lCisgICAgICAgIGhhdmVfc2Vlbl9jb250ZW50X3R5cGUgPSBGYWxzZQor
ICAgICAgICB3aGlsZSBub3QgdGltZW91dCBhbmQgbGluZS5yc3RyaXAoKSAhPSAiI0VPRiI6Cisg
ICAgICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlbid0IGNyYXNoZWQuCisgICAgICAgICAgICBp
ZiBsaW5lID09ICcnIGFuZCBzZWxmLnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAg
ICAjIFRoaXMgaXMgaGV4IGNvZGUgMHhjMDAwMDAxZCwgd2hpY2ggaXMgdXNlZCBmb3IgYWJydXB0
CisgICAgICAgICAgICAgICAgIyB0ZXJtaW5hdGlvbi4gVGhpcyBoYXBwZW5zIGlmIHdlIGhpdCBj
dHJsK2MgZnJvbSB0aGUgcHJvbXB0CisgICAgICAgICAgICAgICAgIyBhbmQgd2UgaGFwcGVuIHRv
IGJlIHdhaXRpbmcgb24gdGhlIHRlc3Rfc2hlbGwuCisgICAgICAgICAgICAgICAgIyBzZG95b246
IE5vdCBzdXJlIGZvciB3aGljaCBPUyBhbmQgaW4gd2hhdCBjaXJjdW1zdGFuY2VzIHRoZQorICAg
ICAgICAgICAgICAgICMgYWJvdmUgY29kZSBpcyB2YWxpZC4gV2hhdCB3b3JrcyBmb3IgbWUgdW5k
ZXIgTGludXggdG8gZGV0ZWN0CisgICAgICAgICAgICAgICAgIyBjdHJsK2MgaXMgZm9yIHRoZSBz
dWJwcm9jZXNzIHJldHVybmNvZGUgdG8gYmUgbmVnYXRpdmUKKyAgICAgICAgICAgICAgICAjIFNJ
R0lOVC4gQW5kIHRoYXQgYWdyZWVzIHdpdGggdGhlIHN1YnByb2Nlc3MgZG9jdW1lbnRhdGlvbi4K
KyAgICAgICAgICAgICAgICBpZiAoLTEwNzM3NDE1MTAgPT0gc2VsZi5yZXR1cm5jb2RlKCkgb3IK
KyAgICAgICAgICAgICAgICAgICAgLSBzaWduYWwuU0lHSU5UID09IHNlbGYucmV0dXJuY29kZSgp
KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAgICAg
ICAgICAgICBjcmFzaCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAg
ICBlbGlmIChsaW5lLnN0YXJ0c3dpdGgoJ0NvbnRlbnQtVHlwZTonKSBhbmQgbm90CisgICAgICAg
ICAgICAgICAgICBoYXZlX3NlZW5fY29udGVudF90eXBlKToKKyAgICAgICAgICAgICAgICBoYXZl
X3NlZW5fY29udGVudF90eXBlID0gVHJ1ZQorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChsaW5lKQorCisgICAgICAg
ICAgICAodGltZW91dCwgbGluZSkgPSBzZWxmLl9yZWFkX2xpbmUodGltZW91dCwgc3RvcF90aW1l
KQorICAgICAgICAgICAgcmVzcCArPSBsaW5lCisKKyAgICAgICAgIyBOb3cgcmVhZCBhIHNlY29u
ZCBibG9jayBvZiB0ZXh0IGZvciB0aGUgb3B0aW9uYWwgaW1hZ2UgZGF0YQorICAgICAgICBpbWFn
ZV9sZW5ndGggPSAwCisgICAgICAgICh0aW1lb3V0LCBsaW5lKSA9IHNlbGYuX3JlYWRfbGluZSh0
aW1lb3V0LCBzdG9wX3RpbWUpCisgICAgICAgIHJlc3AgKz0gbGluZQorICAgICAgICBIQVNIX0hF
QURFUiA9ICdBY3R1YWxIYXNoOiAnCisgICAgICAgIExFTkdUSF9IRUFERVIgPSAnQ29udGVudC1M
ZW5ndGg6ICcKKyAgICAgICAgd2hpbGUgbm90IHRpbWVvdXQgYW5kIG5vdCBjcmFzaCBhbmQgbGlu
ZS5yc3RyaXAoKSAhPSAiI0VPRiI6CisgICAgICAgICAgICBpZiBsaW5lID09ICcnIGFuZCBzZWxm
LnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiAoLTEwNzM3NDE1MTAgPT0g
c2VsZi5yZXR1cm5jb2RlKCkgb3IKKyAgICAgICAgICAgICAgICAgICAgLSBzaWduYWwuU0lHSU5U
ID09IHNlbGYucmV0dXJuY29kZSgpKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9h
cmRJbnRlcnJ1cHQKKyAgICAgICAgICAgICAgICBjcmFzaCA9IFRydWUKKyAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoSEFTSF9IRUFERVIpOgor
ICAgICAgICAgICAgICAgIGFjdHVhbF9pbWFnZV9oYXNoID0gbGluZVtsZW4oSEFTSF9IRUFERVIp
Ol0uc3RyaXAoKQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ0NvbnRlbnQtVHlw
ZTonKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRz
d2l0aChMRU5HVEhfSEVBREVSKToKKyAgICAgICAgICAgICAgICBpbWFnZV9sZW5ndGggPSBpbnQo
bGluZVtsZW4oTEVOR1RIX0hFQURFUik6XSkKKyAgICAgICAgICAgIGVsaWYgaW1hZ2VfbGVuZ3Ro
OgorICAgICAgICAgICAgICAgIGltYWdlICs9IGxpbmUKKworICAgICAgICAgICAgKHRpbWVvdXQs
IGxpbmUpID0gc2VsZi5fcmVhZF9saW5lKHRpbWVvdXQsIHN0b3BfdGltZSwgaW1hZ2VfbGVuZ3Ro
KQorICAgICAgICAgICAgcmVzcCArPSBsaW5lCisKKyAgICAgICAgaWYgdGltZW91dDoKKyAgICAg
ICAgICAgIHNlbGYucmVzdGFydCgpCisKKyAgICAgICAgaWYgc2VsZi5faW1hZ2VfcGF0aCBhbmQg
bGVuKHNlbGYuX2ltYWdlX3BhdGgpOgorICAgICAgICAgICAgaW1hZ2VfZmlsZSA9IGZpbGUoc2Vs
Zi5faW1hZ2VfcGF0aCwgIndiIikKKyAgICAgICAgICAgIGltYWdlX2ZpbGUud3JpdGUoaW1hZ2Up
CisgICAgICAgICAgICBpbWFnZV9maWxlLmNsb3NlKCkKKworICAgICAgICByZXR1cm4gKGNyYXNo
LCB0aW1lb3V0LCBhY3R1YWxfaW1hZ2VfaGFzaCwKKyAgICAgICAgICAgICAgICAnJy5qb2luKG91
dHB1dCksICcnLmpvaW4oZXJyb3IpKQorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcChzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5fcHJvYzoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4u
Y2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2UoKQorICAgICAgICAg
ICAgaWYgc2VsZi5fcHJvYy5zdGRlcnI6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRl
cnIuY2xvc2UoKQorICAgICAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSBub3QgaW4gKCd3aW4zMics
ICdjeWd3aW4nKSBhbmQKKyAgICAgICAgICAgICAgICBub3Qgc2VsZi5fcHJvYy5wb2xsKCkpOgor
ICAgICAgICAgICAgICAgICMgQ2xvc2luZyBzdGRpbi9zdGRvdXQvc3RkZXJyIGhhbmdzIHNvbWV0
aW1lcyBvbiBPUyBYLgorICAgICAgICAgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3
IikKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsia2lsbCIsICItOSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZi5fcHJvYy5waWQpXSwgc3RkZXJy
PW51bGwpCisgICAgICAgICAgICAgICAgbnVsbC5jbG9zZSgpCisKKyAgICBkZWYgX3JlYWRfbGlu
ZShzZWxmLCB0aW1lb3V0LCBzdG9wX3RpbWUsIGltYWdlX2xlbmd0aD0wKToKKyAgICAgICAgbm93
ID0gdGltZS50aW1lKCkKKyAgICAgICAgcmVhZF9mZHMgPSBbXQorCisgICAgICAgICMgZmlyc3Qg
Y2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBsaW5lIGFscmVhZHkgcmVhZCBvciBpZiB3ZSd2ZQor
ICAgICAgICAjIHJlYWQgdGhlIGVudGlyZSBpbWFnZQorICAgICAgICBpZiBpbWFnZV9sZW5ndGgg
YW5kIGxlbihzZWxmLl9yZWFkX2J1ZmZlcikgPj0gaW1hZ2VfbGVuZ3RoOgorICAgICAgICAgICAg
b3V0ID0gc2VsZi5fcmVhZF9idWZmZXJbMDppbWFnZV9sZW5ndGhdCisgICAgICAgICAgICBzZWxm
Ll9yZWFkX2J1ZmZlciA9IHNlbGYuX3JlYWRfYnVmZmVyW2ltYWdlX2xlbmd0aDpdCisgICAgICAg
ICAgICByZXR1cm4gKHRpbWVvdXQsIG91dCkKKworICAgICAgICBpZHggPSBzZWxmLl9yZWFkX2J1
ZmZlci5maW5kKCdcbicpCisgICAgICAgIGlmIG5vdCBpbWFnZV9sZW5ndGggYW5kIGlkeCAhPSAt
MToKKyAgICAgICAgICAgIG91dCA9IHNlbGYuX3JlYWRfYnVmZmVyWzA6aWR4ICsgMV0KKyAgICAg
ICAgICAgIHNlbGYuX3JlYWRfYnVmZmVyID0gc2VsZi5fcmVhZF9idWZmZXJbaWR4ICsgMTpdCisg
ICAgICAgICAgICByZXR1cm4gKHRpbWVvdXQsIG91dCkKKworICAgICAgICAjIElmIHdlJ3ZlIHRp
bWVkIG91dCwgcmV0dXJuIGp1c3Qgd2hhdCB3ZSBoYXZlLCBpZiBhbnl0aGluZworICAgICAgICBp
ZiB0aW1lb3V0IG9yIG5vdyA+PSBzdG9wX3RpbWU6CisgICAgICAgICAgICBvdXQgPSBzZWxmLl9y
ZWFkX2J1ZmZlcgorICAgICAgICAgICAgc2VsZi5fcmVhZF9idWZmZXIgPSAnJworICAgICAgICAg
ICAgcmV0dXJuIChUcnVlLCBvdXQpCisKKyAgICAgICAgKHJlYWRfZmRzLCB3cml0ZV9mZHMsIGVy
cl9mZHMpID0gc2VsZWN0LnNlbGVjdCgKKyAgICAgICAgICAgIFtzZWxmLl9zdGRvdXRfZmRdLCBb
XSwgW10sIHN0b3BfdGltZSAtIG5vdykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdGlt
ZW91dCBvciBsZW4ocmVhZF9mZHMpID09IDE6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9i
dWZmZXIgKz0gc2VsZi5fcHJvYy5zdGRvdXQucmVhZCgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9y
LCBlOgorICAgICAgICAgICAgcmVhZCA9IFtdCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2xp
bmUodGltZW91dCwgc3RvcF90aW1lKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjBiYzZlN2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTAsMCArMSwxNDQgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgR29vZ2xlIG5hbWUg
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJEdW1teSBQb3J0IGltcGxlbWVu
dGF0aW9uIHVzZWQgZm9yIHRlc3RpbmcuIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKKwor
aW1wb3J0IGJhc2UKKworCitjbGFzcyBUZXN0UG9ydChiYXNlLlBvcnQpOgorICAgICIiIlRlc3Qg
aW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlLiIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgorICAgICAgICBiYXNlLlBv
cnQuX19pbml0X18oc2VsZiwgcG9ydF9uYW1lLCBvcHRpb25zKQorCisgICAgZGVmIGJhc2VfcGxh
dGZvcm1zKHNlbGYpOgorICAgICAgICByZXR1cm4gKCd0ZXN0JywpCisKKyAgICBkZWYgYmFzZWxp
bmVfcGF0aChzZWxmKToKKyAgICAgICAgY3VyZGlyID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9f
KQorICAgICAgICBzZWxmLnRvcGRpciA9IGN1cmRpclswOmN1cmRpci5pbmRleCgiV2ViS2l0VG9v
bHMiKV0KKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnRvcGRpciwgJ0xheW91dFRl
c3RzJywgJ3BsYXRmb3JtJywgJ3Rlc3QnKQorCisgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRo
KHNlbGYpOgorICAgICAgICByZXR1cm4gW3NlbGYuYmFzZWxpbmVfcGF0aCgpXQorCisgICAgZGVm
IGNoZWNrX3N5c19kZXBzKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGRp
ZmZfaW1hZ2Uoc2VsZiwgYWN0dWFsX2ZpbGVuYW1lLCBleHBlY3RlZF9maWxlbmFtZSwgZGlmZl9m
aWxlbmFtZSk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGNvbXBhcmVfdGV4dChz
ZWxmLCBhY3R1YWxfdGV4dCwgZXhwZWN0ZWRfdGV4dCk6CisgICAgICAgIHJldHVybiBGYWxzZQor
CisgICAgZGVmIGRpZmZfdGV4dChzZWxmLCBhY3R1YWxfdGV4dCwgZXhwZWN0ZWRfdGV4dCwKKyAg
ICAgICAgICAgICAgICAgIGFjdHVhbF9maWxlbmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUpOgorICAg
ICAgICByZXR1cm4gJycKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fbmFtZQorCisgICAgZGVmIG51bV9jb3JlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGludChv
cy5wb3BlbjIoInN5c2N0bCAtbiBody5uY3B1IilbMV0ucmVhZCgpKQorCisgICAgZGVmIG9wdGlv
bnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9vcHRpb25zCisKKyAgICBkZWYgcmVzdWx0
c19kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHJldHVybiAnL3RtcCcgKyBzZWxmLl9vcHRpb25z
LnJlc3VsdHNfZGlyZWN0b3J5CisKKyAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2VsZik6CisgICAg
ICAgIHBhc3MKKworICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIGZpbGVuYW1l
KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0YXJ0X2RyaXZlcihzZWxmLCBpbWFnZV9wYXRo
LCBvcHRpb25zKToKKyAgICAgICAgcmV0dXJuIFRlc3REcml2ZXIoaW1hZ2VfcGF0aCwgb3B0aW9u
cywgc2VsZikKKworICAgIGRlZiBzdGFydF9odHRwX3NlcnZlcihzZWxmKToKKyAgICAgICAgcGFz
cworCisgICAgZGVmIHN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHBhc3MK
KworICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBz
dG9wX2h0dHBfc2VydmVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcF93ZWJz
b2NrZXRfc2VydmVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcF9oZWxwZXIo
c2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9ucyhzZWxmKToK
KyAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgdGVzdF9iYXNlX3BsYXRmb3JtX25hbWVzKHNl
bGYpOgorICAgICAgICByZXR1cm4gKCd0ZXN0JywpCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9u
YW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJ3Rlc3QnCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9y
bV9uYW1lcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVzdF9iYXNlX3BsYXRmb3JtX25h
bWVzKCkKKworICAgIGRlZiB2ZXJzaW9uKCk6CisgICAgICAgIHJldHVybiAnJworCisgICAgZGVm
IHdkaWZmX3RleHQoc2VsZiwgYWN0dWFsX2ZpbGVuYW1lLCBleHBlY3RlZF9maWxlbmFtZSk6Cisg
ICAgICAgIHJldHVybiAnJworCisKK2NsYXNzIFRlc3REcml2ZXIoYmFzZS5Ecml2ZXIpOgorICAg
ICIiIlRlc3QvRHVtbXkgaW1wbGVtZW50YXRpb24gb2YgdGhlIER1bXBSZW5kZXJUcmVlIGludGVy
ZmFjZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZV9wYXRoLCB0ZXN0X2RyaXZl
cl9vcHRpb25zLCBwb3J0KToKKyAgICAgICAgc2VsZi5fZHJpdmVyX29wdGlvbnMgPSB0ZXN0X2Ry
aXZlcl9vcHRpb25zCisgICAgICAgIHNlbGYuX2ltYWdlX3BhdGggPSBpbWFnZV9wYXRoCisgICAg
ICAgIHNlbGYuX3BvcnQgPSBwb3J0CisKKyAgICBkZWYgcG9sbChzZWxmKToKKyAgICAgICAgcmV0
dXJuIFRydWUKKworICAgIGRlZiByZXR1cm5jb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gMAor
CisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHVyaSwgdGltZW91dG1zLCBpbWFnZV9oYXNoKToKKyAg
ICAgICAgcmV0dXJuIChGYWxzZSwgRmFsc2UsIGltYWdlX2hhc2gsICcnLCBOb25lKQorCisgICAg
ZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3Nl
cnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzUwZDFkCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CkBAIC0wLDAgKzEsMzAxIEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJBIGNsYXNzIHRvIGhlbHAgc3RhcnQvc3Rv
cCB0aGUgUHlXZWJTb2NrZXQgc2VydmVyIHVzZWQgYnkgbGF5b3V0IHRlc3RzLiIiIgorCisKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nl
c3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCB1cmxs
aWIKKworaW1wb3J0IGh0dHBfc2VydmVyCisKK19XU19MT0dfUFJFRklYID0gJ3B5d2Vic29ja2V0
LndzLmxvZy0nCitfV1NTX0xPR19QUkVGSVggPSAncHl3ZWJzb2NrZXQud3NzLmxvZy0nCisKK19E
RUZBVUxUX1dTX1BPUlQgPSA4ODgwCitfREVGQVVMVF9XU1NfUE9SVCA9IDkzMjMKKworCitkZWYg
dXJsX2lzX2FsaXZlKHVybCk6CisgICAgIiIiQ2hlY2tzIHRvIHNlZSBpZiB3ZSBnZXQgYW4gaHR0
cCByZXNwb25zZSBmcm9tIHx1cmx8LgorICAgIFdlIHBvbGwgdGhlIHVybCA1IHRpbWVzIHdpdGgg
YSAxIHNlY29uZCBkZWxheS4gIElmIHdlIGRvbid0CisgICAgZ2V0IGEgcmVwbHkgaW4gdGhhdCB0
aW1lLCB3ZSBnaXZlIHVwIGFuZCBhc3N1bWUgdGhlIGh0dHBkCisgICAgZGlkbid0IHN0YXJ0IHBy
b3Blcmx5LgorCisgICAgQXJnczoKKyAgICAgIHVybDogVGhlIFVSTCB0byBjaGVjay4KKyAgICBS
ZXR1cm46CisgICAgICBUcnVlIGlmIHRoZSB1cmwgaXMgYWxpdmUuCisgICAgIiIiCisgICAgd2Fp
dF90aW1lID0gNQorICAgIHdoaWxlIHdhaXRfdGltZSA+IDA6CisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHJlc3BvbnNlID0gdXJsbGliLnVybG9wZW4odXJsKQorICAgICAgICAgICAgIyBTZXJ2
ZXIgaXMgdXAgYW5kIHJlc3BvbmRpbmcuCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAg
ICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2FpdF90aW1lIC09
IDEKKyAgICAgICAgIyBXYWl0IGEgc2Vjb25kIGFuZCB0cnkgYWdhaW4uCisgICAgICAgIHRpbWUu
c2xlZXAoMSkKKworICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIFB5V2ViU29ja2V0Tm90U3Rh
cnRlZChFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBQeVdlYlNvY2tldE5vdEZvdW5k
KEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVy
LkxpZ2h0dHBkKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgb3V0cHV0X2Rp
ciwgcG9ydD1fREVGQVVMVF9XU19QT1JULAorICAgICAgICAgICAgICAgICByb290PU5vbmUsIHVz
ZV90bHM9RmFsc2UsCisgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2N5Z3dpbj1Ob25lLAorICAg
ICAgICAgICAgICAgICBwaWRmaWxlPU5vbmUpOgorICAgICAgICAiIiJBcmdzOgorICAgICAgICAg
IG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQg
ZGlyZWN0b3J5CisgICAgICAgICIiIgorICAgICAgICBodHRwX3NlcnZlci5MaWdodHRwZC5fX2lu
aXRfXyhzZWxmLCBwb3J0X29iaiwgb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcG9ydD1fREVGQVVMVF9XU19QT1JULAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByb290PXJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyX2N5Z3dpbj1yZWdpc3Rlcl9jeWd3aW4pCisgICAgICAgIHNl
bGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25l
CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX3Jvb3QgPSByb290Cisg
ICAgICAgIHNlbGYuX3VzZV90bHMgPSB1c2VfdGxzCisgICAgICAgIHNlbGYuX3ByaXZhdGVfa2V5
ID0gc2VsZi5fcGVtX2ZpbGUKKyAgICAgICAgc2VsZi5fY2VydGlmaWNhdGUgPSBzZWxmLl9wZW1f
ZmlsZQorICAgICAgICBpZiBzZWxmLl9wb3J0OgorICAgICAgICAgICAgc2VsZi5fcG9ydCA9IGlu
dChzZWxmLl9wb3J0KQorICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgorICAgICAgICAgICAgc2Vs
Zi5fc2VydmVyX25hbWUgPSAnUHlXZWJTb2NrZXQoU2VjdXJlKScKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHNlbGYuX3NlcnZlcl9uYW1lID0gJ1B5V2ViU29ja2V0JworICAgICAgICBzZWxm
Ll9waWRmaWxlID0gcGlkZmlsZQorICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKKworICAgICAg
ICAjIFdlYmtpdCB0ZXN0cworICAgICAgICBpZiBzZWxmLl9yb290OgorICAgICAgICAgICAgc2Vs
Zi5fbGF5b3V0X3Rlc3RzID0gb3MucGF0aC5hYnNwYXRoKHNlbGYuX3Jvb3QpCisgICAgICAgICAg
ICBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzID0gb3MucGF0aC5hYnNwYXRoKAorICAgICAgICAgICAg
ICAgIG9zLnBhdGguam9pbihzZWxmLl9yb290LCAnd2Vic29ja2V0JywgJ3Rlc3RzJykpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fbGF5b3V0
X3Rlc3RzID0gc2VsZi5fcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2RpcigpCisgICAgICAgICAgICAg
ICAgc2VsZi5fd2ViX3NvY2tldF90ZXN0cyA9IG9zLnBhdGguam9pbihzZWxmLl9sYXlvdXRfdGVz
dHMsCisgICAgICAgICAgICAgICAgICAgICAnd2Vic29ja2V0JywgJ3Rlc3RzJykKKyAgICAgICAg
ICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzID0gTm9u
ZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd2ViX3NvY2tl
dF90ZXN0czoKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnTm8gbmVlZCB0byBzdGFydCAlcyBz
ZXJ2ZXIuJyAlIHNlbGYuX3NlcnZlcl9uYW1lKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
IGlmIHNlbGYuaXNfcnVubmluZygpOgorICAgICAgICAgICAgcmFpc2UgUHlXZWJTb2NrZXROb3RT
dGFydGVkKCclcyBpcyBhbHJlYWR5IHJ1bm5pbmcuJyAlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fc2VydmVyX25hbWUpCisKKyAgICAgICAgdGltZV9zdHIg
PSB0aW1lLnN0cmZ0aW1lKCclZCViJVktJUglTSVTJykKKyAgICAgICAgaWYgc2VsZi5fdXNlX3Rs
czoKKyAgICAgICAgICAgIGxvZ19wcmVmaXggPSBfV1NTX0xPR19QUkVGSVgKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGxvZ19wcmVmaXggPSBfV1NfTE9HX1BSRUZJWAorICAgICAgICBsb2df
ZmlsZV9uYW1lID0gbG9nX3ByZWZpeCArIHRpbWVfc3RyCisKKyAgICAgICAgIyBSZW1vdmUgb2xk
IGxvZyBmaWxlcy4gV2Ugb25seSBuZWVkIHRvIGtlZXAgdGhlIGxhc3Qgb25lcy4KKyAgICAgICAg
c2VsZi5yZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsIGxvZ19wcmVmaXgpCisKKyAg
ICAgICAgZXJyb3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxl
X25hbWUgKyAiLWVyci50eHQiKQorCisgICAgICAgIG91dHB1dF9sb2cgPSBvcy5wYXRoLmpvaW4o
c2VsZi5fb3V0cHV0X2RpciwgbG9nX2ZpbGVfbmFtZSArICItb3V0LnR4dCIpCisgICAgICAgIHNl
bGYuX3dzb3V0ID0gb3BlbihvdXRwdXRfbG9nLCAidyIpCisKKyAgICAgICAgcHl0aG9uX2ludGVy
cCA9IHN5cy5leGVjdXRhYmxlCisgICAgICAgIHB5d2Vic29ja2V0X2Jhc2UgPSBvcy5wYXRoLmpv
aW4oCisgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGgu
ZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoCisgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgoX19m
aWxlX18pKSkpKSwgJ3B5d2Vic29ja2V0JykKKyAgICAgICAgcHl3ZWJzb2NrZXRfc2NyaXB0ID0g
b3MucGF0aC5qb2luKHB5d2Vic29ja2V0X2Jhc2UsICdtb2RfcHl3ZWJzb2NrZXQnLAorICAgICAg
ICAgICAgJ3N0YW5kYWxvbmUucHknKQorICAgICAgICBzdGFydF9jbWQgPSBbCisgICAgICAgICAg
ICBweXRob25faW50ZXJwLCBweXdlYnNvY2tldF9zY3JpcHQsCisgICAgICAgICAgICAnLXAnLCBz
dHIoc2VsZi5fcG9ydCksCisgICAgICAgICAgICAnLWQnLCBzZWxmLl9sYXlvdXRfdGVzdHMsCisg
ICAgICAgICAgICAnLXMnLCBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzLAorICAgICAgICAgICAgJy1s
JywgZXJyb3JfbG9nLAorICAgICAgICBdCisKKyAgICAgICAgaGFuZGxlcl9tYXBfZmlsZSA9IG9z
LnBhdGguam9pbihzZWxmLl93ZWJfc29ja2V0X3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdoYW5kbGVyX21hcC50eHQnKQorICAgICAgICBpZiBvcy5wYXRo
LmV4aXN0cyhoYW5kbGVyX21hcF9maWxlKToKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1Vz
aW5nIGhhbmRsZXJfbWFwX2ZpbGU6ICVzJyAlIGhhbmRsZXJfbWFwX2ZpbGUpCisgICAgICAgICAg
ICBzdGFydF9jbWQuYXBwZW5kKCctbScpCisgICAgICAgICAgICBzdGFydF9jbWQuYXBwZW5kKGhh
bmRsZXJfbWFwX2ZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnaW5nLndhcm5p
bmcoJ05vIGhhbmRsZXJfbWFwX2ZpbGUgZm91bmQnKQorCisgICAgICAgIGlmIHNlbGYuX3VzZV90
bHM6CisgICAgICAgICAgICBzdGFydF9jbWQuZXh0ZW5kKFsnLXQnLCAnLWsnLCBzZWxmLl9wcml2
YXRlX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYycsIHNlbGYuX2NlcnRp
ZmljYXRlXSkKKworICAgICAgICAjIFB1dCB0aGUgY3lnd2luIGRpcmVjdG9yeSBmaXJzdCBpbiB0
aGUgcGF0aCB0byBmaW5kIGN5Z3dpbjEuZGxsCisgICAgICAgIGVudiA9IG9zLmVudmlyb24KKyAg
ICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnY3lnd2luJywgJ3dpbjMyJyk6CisgICAgICAgICAg
ICBlbnZbJ1BBVEgnXSA9ICclczslcycgJSAoCisgICAgICAgICAgICAgICAgc2VsZi5fcG9ydF9v
YmouX3BhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAnYmluJyksCisgICAg
ICAgICAgICAgICAgZW52WydQQVRIJ10pCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3
aW4zMicgYW5kIHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbjoKKyAgICAgICAgICAgIHNldHVwX21vdW50
ID0gc2VsZi5fcG9ydF9vYmouX3BhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsCisgICAgICAg
ICAgICAgICAgICdjeWd3aW4nLCAnc2V0dXBfbW91bnQuYmF0JykKKyAgICAgICAgICAgIHN1YnBy
b2Nlc3MuUG9wZW4oc2V0dXBfbW91bnQpLndhaXQoKQorCisgICAgICAgIGVudlsnUFlUSE9OUEFU
SCddID0gKHB5d2Vic29ja2V0X2Jhc2UgKyBvcy5wYXRoLnBhdGhzZXAgKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbnYuZ2V0KCdQWVRIT05QQVRIJywgJycpKQorCisgICAgICAgIGxv
Z2dpbmcuZGVidWcoJ1N0YXJ0aW5nICVzIHNlcnZlciBvbiAlZC4nICUgKAorICAgICAgICAgICAg
c2VsZi5fc2VydmVyX25hbWUsIHNlbGYuX3BvcnQpKQorICAgICAgICBsb2dnaW5nLmRlYnVnKCdj
bWRsaW5lOiAlcycgJSAnICcuam9pbihzdGFydF9jbWQpKQorICAgICAgICBzZWxmLl9wcm9jZXNz
ID0gc3VicHJvY2Vzcy5Qb3BlbihzdGFydF9jbWQsIHN0ZG91dD1zZWxmLl93c291dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RE
T1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQor
CisgICAgICAgICMgV2FpdCBhIGJpdCBiZWZvcmUgY2hlY2tpbmcgdGhlIGxpdmVuZXNzIG9mIHRo
ZSBzZXJ2ZXIuCisgICAgICAgIHRpbWUuc2xlZXAoMC41KQorCisgICAgICAgIGlmIHNlbGYuX3Vz
ZV90bHM6CisgICAgICAgICAgICB1cmwgPSAnaHR0cHMnCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICB1cmwgPSAnaHR0cCcKKyAgICAgICAgdXJsID0gdXJsICsgJzovLzEyNy4wLjAuMTolZC8n
ICUgc2VsZi5fcG9ydAorICAgICAgICBpZiBub3QgdXJsX2lzX2FsaXZlKHVybCk6CisgICAgICAg
ICAgICBmcCA9IG9wZW4ob3V0cHV0X2xvZykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICBmb3IgbGluZSBpbiBmcDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihs
aW5lKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisg
ICAgICAgICAgICByYWlzZSBQeVdlYlNvY2tldE5vdFN0YXJ0ZWQoCisgICAgICAgICAgICAgICAg
J0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2ZXIgb24gcG9ydCAlcy4nICUKKyAgICAgICAgICAgICAg
ICAgICAgKHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLl9wb3J0KSkKKworICAgICAgICAjIE91ciBw
cm9jZXNzIHRlcm1pbmF0ZWQgYWxyZWFkeQorICAgICAgICBpZiBzZWxmLl9wcm9jZXNzLnJldHVy
bmNvZGUgIT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFB5V2ViU29ja2V0Tm90U3RhcnRlZCgK
KyAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHN0YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5fc2Vy
dmVyX25hbWUpCisgICAgICAgIGlmIHNlbGYuX3BpZGZpbGU6CisgICAgICAgICAgICBmID0gb3Bl
bihzZWxmLl9waWRmaWxlLCAndycpCisgICAgICAgICAgICBmLndyaXRlKCIlZCIgJSBzZWxmLl9w
cm9jZXNzLnBpZCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHN0b3Aoc2VsZiwg
Zm9yY2U9RmFsc2UpOgorICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBzZWxmLmlzX3J1bm5p
bmcoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Cisg
ICAgICAgICAgICBwaWQgPSBzZWxmLl9wcm9jZXNzLnBpZAorICAgICAgICBlbGlmIHNlbGYuX3Bp
ZGZpbGU6CisgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9waWRmaWxlKQorICAgICAgICAgICAg
cGlkID0gaW50KGYucmVhZCgpLnN0cmlwKCkpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAg
ICAgICBpZiBub3QgcGlkOgorICAgICAgICAgICAgcmFpc2UgUHlXZWJTb2NrZXROb3RGb3VuZCgK
KyAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGZpbmQgJXMgc2VydmVyIHBpZC4nICUgc2VsZi5f
c2VydmVyX25hbWUpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygnU2h1dHRpbmcgZG93biAlcyBz
ZXJ2ZXIgJWQuJyAlIChzZWxmLl9zZXJ2ZXJfbmFtZSwgcGlkKSkKKyAgICAgICAgc2VsZi5fcG9y
dF9vYmouX2tpbGxfcHJvY2VzcyhwaWQpCisKKyAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKKyAg
ICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mud2FpdCgpCisgICAgICAgICAgICBzZWxmLl9wcm9jZXNz
ID0gTm9uZQorCisgICAgICAgIGlmIHNlbGYuX3dzb3V0OgorICAgICAgICAgICAgc2VsZi5fd3Nv
dXQuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fd3NvdXQgPSBOb25lCisKKworaWYgJ19fbWFp
bl9fJyA9PSBfX25hbWVfXzoKKyAgICAjIFByb3ZpZGUgc29tZSBjb21tYW5kIGxpbmUgcGFyYW1z
IGZvciBzdGFydGluZyB0aGUgUHlXZWJTb2NrZXQgc2VydmVyCisgICAgIyBtYW51YWxseS4KKyAg
ICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKKyAgICBvcHRpb25fcGFy
c2VyLmFkZF9vcHRpb24oJy0tc2VydmVyJywgdHlwZT0nY2hvaWNlJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hvaWNlcz1bJ3N0YXJ0JywgJ3N0b3AnXSwgZGVmYXVsdD0nc3RhcnQn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTZXJ2ZXIgYWN0aW9uIChzdGFy
dHxzdG9wKScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctcCcsICctLXBvcnQnLCBk
ZXN0PSdwb3J0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLCBo
ZWxwPSdQb3J0IHRvIGxpc3RlbiBvbicpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCct
cicsICctLXJvb3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdBYnNvbHV0
ZSBwYXRoIHRvIERvY3VtZW50Um9vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyhvdmVycmlkZXMgbGF5b3V0IHRlc3Qgcm9vdHMpJykKKyAgICBvcHRpb25fcGFyc2VyLmFk
ZF9vcHRpb24oJy10JywgJy0tdGxzJywgZGVzdD0ndXNlX3RscycsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J3VzZSBUTFMgKHdzczovLyknKQorICAgIG9wdGlv
bl9wYXJzZXIuYWRkX29wdGlvbignLWsnLCAnLS1wcml2YXRlX2tleScsIGRlc3Q9J3ByaXZhdGVf
a2V5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nJywgaGVscD0nVExT
IHByaXZhdGUga2V5IGZpbGUuJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1jJywg
Jy0tY2VydGlmaWNhdGUnLCBkZXN0PSdjZXJ0aWZpY2F0ZScsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ9JycsIGhlbHA9J1RMUyBjZXJ0aWZpY2F0ZSBmaWxlLicpCisgICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctLXJlZ2lzdGVyX2N5Z3dpbicsIGFjdGlvbj0ic3Rv
cmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InJlZ2lzdGVyX2N5
Z3dpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1JlZ2lzdGVyIEN5Z3dp
biBwYXRocyAob24gV2luIHRyeSBib3RzKScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9u
KCctLXBpZGZpbGUnLCBoZWxwPSdwYXRoIHRvIHBpZCBmaWxlLicpCisgICAgb3B0aW9ucywgYXJn
cyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBub3Qgb3B0aW9ucy5wb3J0
OgorICAgICAgICBpZiBvcHRpb25zLnVzZV90bHM6CisgICAgICAgICAgICBvcHRpb25zLnBvcnQg
PSBfREVGQVVMVF9XU1NfUE9SVAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3B0aW9ucy5w
b3J0ID0gX0RFRkFVTFRfV1NfUE9SVAorCisgICAga3dkcyA9IHsncG9ydCc6IG9wdGlvbnMucG9y
dCwgJ3VzZV90bHMnOiBvcHRpb25zLnVzZV90bHN9CisgICAgaWYgb3B0aW9ucy5yb290OgorICAg
ICAgICBrd2RzWydyb290J10gPSBvcHRpb25zLnJvb3QKKyAgICBpZiBvcHRpb25zLnByaXZhdGVf
a2V5OgorICAgICAgICBrd2RzWydwcml2YXRlX2tleSddID0gb3B0aW9ucy5wcml2YXRlX2tleQor
ICAgIGlmIG9wdGlvbnMuY2VydGlmaWNhdGU6CisgICAgICAgIGt3ZHNbJ2NlcnRpZmljYXRlJ10g
PSBvcHRpb25zLmNlcnRpZmljYXRlCisgICAga3dkc1sncmVnaXN0ZXJfY3lnd2luJ10gPSBvcHRp
b25zLnJlZ2lzdGVyX2N5Z3dpbgorICAgIGlmIG9wdGlvbnMucGlkZmlsZToKKyAgICAgICAga3dk
c1sncGlkZmlsZSddID0gb3B0aW9ucy5waWRmaWxlCisKKyAgICBweXdlYnNvY2tldCA9IFB5V2Vi
U29ja2V0KHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgKiprd2RzKQorCisgICAgaWYgJ3N0YXJ0JyA9
PSBvcHRpb25zLnNlcnZlcjoKKyAgICAgICAgcHl3ZWJzb2NrZXQuc3RhcnQoKQorICAgIGVsc2U6
CisgICAgICAgIHB5d2Vic29ja2V0LnN0b3AoZm9yY2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1f
d2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKaW5kZXggNWI5ZjFlOC4uNGRh
MzJhZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRf
dGVzdHMucHkKQEAgLTExLDcgKzExLDcgQEAKICMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAjIGRp
c3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAjCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fY2hyb21pdW1fd2Via2l0X3Rl
c3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX2No
cm9taXVtX3dlYmtpdF90ZXN0cy5weQppbmRleCA0MTczMTkxLi45MjUzNzY2IDEwMDc1NQotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fY2hyb21pdW1f
d2Via2l0X3Rlc3RzLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKQEAgLTExLDcgKzExLDcgQEAKICMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgogIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCiAjIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0
aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCiAjCkBAIC01NCwyOSArNTQsMjQgQEAgaW1wb3J0IFF1ZXVlCiBpbXBvcnQgcmFuZG9tCiBp
bXBvcnQgcmUKIGltcG9ydCBzaHV0aWwKLWltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBp
bXBvcnQgdGltZQogaW1wb3J0IHRyYWNlYmFjawogCi1mcm9tIGxheW91dF9wYWNrYWdlIGltcG9y
dCBhcGFjaGVfaHR0cF9zZXJ2ZXIKK2ltcG9ydCBzaW1wbGVqc29uCisKIGZyb20gbGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCi1mcm9tIGxheW91dF9wYWNrYWdlIGltcG9y
dCBodHRwX3NlcnZlcgogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9sYXlvdXRfcmVz
dWx0c19nZW5lcmF0b3IKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1ldGVyZWRfc3RyZWFt
Ci1mcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBwYXRoX3V0aWxzCi1mcm9tIGxheW91dF9wYWNr
YWdlIGltcG9ydCBwbGF0Zm9ybV91dGlscwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVz
dF9mYWlsdXJlcwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9zaGVsbF90aHJlYWQK
IGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmlsZXMKLWZyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHdlYnNvY2tldF9zZXJ2ZXIKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgZnV6enlf
aW1hZ2VfZGlmZgogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCBpbWFnZV9kaWZmCiBmcm9tIHRlc3Rf
dHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNlCiBmcm9tIHRlc3RfdHlwZXMgaW1wb3J0IHRleHRf
ZGlmZgogCi1zeXMucGF0aC5hcHBlbmQocGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRf
cGFydHknKSkKLWltcG9ydCBzaW1wbGVqc29uCitpbXBvcnQgcG9ydAogCiAjIEluZGljYXRlcyB0
aGF0IHdlIHdhbnQgZGV0YWlsZWQgcHJvZ3Jlc3MgdXBkYXRlcyBpbiB0aGUgb3V0cHV0IChwcmlu
dHMKICMgZGlyZWN0b3J5LWJ5LWRpcmVjdG9yeSBmZWVkYmFjaykuCkBAIC05NCwxNyArODksMTYg
QEAgVGVzdEV4cGVjdGF0aW9uc0ZpbGUgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRp
b25zRmlsZQogY2xhc3MgVGVzdEluZm86CiAgICAgIiIiR3JvdXBzIGluZm9ybWF0aW9uIGFib3V0
IGEgdGVzdCBmb3IgZWFzeSBwYXNzaW5nIG9mIGRhdGEuIiIiCiAKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgZmlsZW5hbWUsIHRpbWVvdXQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBm
aWxlbmFtZSwgdGltZW91dCk6CiAgICAgICAgICIiIkdlbmVyYXRlcyB0aGUgVVJJIGFuZCBzdG9y
ZXMgdGhlIGZpbGVuYW1lIGFuZCB0aW1lb3V0IGZvciB0aGlzIHRlc3QuCiAgICAgICAgIEFyZ3M6
CiAgICAgICAgICAgZmlsZW5hbWU6IEZ1bGwgcGF0aCB0byB0aGUgdGVzdC4KICAgICAgICAgICB0
aW1lb3V0OiBUaW1lb3V0IGZvciBydW5uaW5nIHRoZSB0ZXN0IGluIFRlc3RTaGVsbC4KICAgICAg
ICAgICAiIiIKICAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCi0gICAgICAgIHNlbGYu
dXJpID0gcGF0aF91dGlscy5maWxlbmFtZV90b191cmkoZmlsZW5hbWUpCisgICAgICAgIHNlbGYu
dXJpID0gcG9ydC5maWxlbmFtZV90b191cmkoZmlsZW5hbWUpCiAgICAgICAgIHNlbGYudGltZW91
dCA9IHRpbWVvdXQKLSAgICAgICAgZXhwZWN0ZWRfaGFzaF9maWxlID0gcGF0aF91dGlscy5leHBl
Y3RlZF9maWxlbmFtZShmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnLmNoZWNrc3VtJykKKyAgICAgICAgZXhwZWN0ZWRf
aGFzaF9maWxlID0gcG9ydC5leHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwgJy5jaGVja3N1bScp
CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuaW1hZ2VfaGFzaCA9IG9wZW4oZXhwZWN0
ZWRfaGFzaF9maWxlLCAiciIpLnJlYWQoKQogICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKQEAg
LTE3MywyNCArMTY3LDE5IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICBOVU1fUkVUUllfT05f
VU5FWFBFQ1RFRF9GQUlMVVJFID0gMQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMs
IG1ldGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgbWV0ZXIsIHBvcnQpOgog
ICAgICAgICAiIiJJbml0aWFsaXplIHRlc3QgcnVubmVyIGRhdGEgc3RydWN0dXJlcy4KIAogICAg
ICAgICBBcmdzOgogICAgICAgICAgIG9wdGlvbnM6IGEgZGljdGlvbmFyeSBvZiBjb21tYW5kIGxp
bmUgb3B0aW9ucwogICAgICAgICAgIG1ldGVyOiBhIE1ldGVyZWRTdHJlYW0gb2JqZWN0IHRvIHJl
Y29yZCB1cGRhdGVzIHRvLgorICAgICAgICAgIHBvcnQ6IGFuIG9iamVjdCBpbXBsZW1lbnRpbmcg
cG9ydC1zcGVjaWZpYyBob29rcwogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9
IG9wdGlvbnMKICAgICAgICAgc2VsZi5fbWV0ZXIgPSBtZXRlcgogCi0gICAgICAgIGlmIG9wdGlv
bnMudXNlX2FwYWNoZToKLSAgICAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyID0gYXBhY2hlX2h0
dHBfc2VydmVyLkxheW91dFRlc3RBcGFjaGVIdHRwZCgKLSAgICAgICAgICAgICAgICBvcHRpb25z
LnJlc3VsdHNfZGlyZWN0b3J5KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5faHR0
cF9zZXJ2ZXIgPSBodHRwX3NlcnZlci5MaWdodHRwZChvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5
KQorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogCi0gICAgICAgIHNlbGYuX3dlYnNvY2tldF9z
ZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KAotICAgICAgICAgICAgb3B0aW9u
cy5yZXN1bHRzX2RpcmVjdG9yeSkKICAgICAgICAgIyBkaXNhYmxlIHdzcyBzZXJ2ZXIuIG5lZWQg
dG8gaW5zdGFsbCBweU9wZW5TU0wgb24gYnVpbGRib3RzLgogICAgICAgICAjIHNlbGYuX3dlYnNv
Y2tldF9zZWN1cmVfc2VydmVyID0gd2Vic29ja2V0X3NlcnZlci5QeVdlYlNvY2tldCgKICAgICAg
ICAgIyAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwgdXNlX3Rscz1UcnVlLCBwb3J0
PTkzMjMpCkBAIC0yMDEsOCArMTkwLDYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgIyBh
IHNldCBvZiB0ZXN0IGZpbGVzLCBhbmQgdGhlIHNhbWUgdGVzdHMgYXMgYSBsaXN0CiAgICAgICAg
IHNlbGYuX3Rlc3RfZmlsZXMgPSBzZXQoKQogICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3Qg
PSBOb25lCi0gICAgICAgIHNlbGYuX2ZpbGVfZGlyID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgnd2Via2l0JywgJ3Rvb2xzJywKLSAgICAgICAgICAgICdsYXlvdXRfdGVzdHMnKQogICAgICAg
ICBzZWxmLl9yZXN1bHRfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCiAKICAgICAgICAgIyBUaGVzZSBh
cmUgdXNlZCBmb3IgLS1sb2cgZGV0YWlsZWQtcHJvZ3Jlc3MgdG8gdHJhY2sgc3RhdHVzIGJ5CkBA
IC0yMTcsMTggKzIwNCwxNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBsb2dnaW5nLmRl
YnVnKCJmbHVzaGluZyBzdGRlcnIiKQogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKICAgICAg
ICAgbG9nZ2luZy5kZWJ1Zygic3RvcHBpbmcgaHR0cCBzZXJ2ZXIiKQotICAgICAgICAjIFN0b3Ag
dGhlIGh0dHAgc2VydmVyLgotICAgICAgICBzZWxmLl9odHRwX3NlcnZlci5zdG9wKCkKLSAgICAg
ICAgIyBTdG9wIHRoZSBXZWIgU29ja2V0IC8gV2ViIFNvY2tldCBTZWN1cmUgc2VydmVycy4KLSAg
ICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlci5zdG9wKCkKLSAgICAgICAgIyBzZWxmLl93ZWJz
b2NrZXRfc2VjdXJlX3NlcnZlci5TdG9wKCkKKyAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBf
c2VydmVyKCkKKyAgICAgICAgbG9nZ2luZy5kZWJ1Zygic3RvcHBpbmcgd2Vic29ja2V0IHNlcnZl
ciIpCisgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKIAogICAgIGRl
ZiBnYXRoZXJfZmlsZV9wYXRocyhzZWxmLCBwYXRocyk6CiAgICAgICAgICIiIkZpbmQgYWxsIHRo
ZSBmaWxlcyB0byB0ZXN0LgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgcGF0aHM6IGEgbGlz
dCBvZiBnbG9icyB0byB1c2UgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdHMuIiIiCi0gICAgICAgIHNl
bGYuX3Rlc3RfZmlsZXMgPSB0ZXN0X2ZpbGVzLmdhdGhlcl90ZXN0X2ZpbGVzKHBhdGhzKQorICAg
ICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gdGVzdF9maWxlcy5nYXRoZXJfdGVzdF9maWxlcyhzZWxm
Ll9wb3J0LCBwYXRocykKIAogICAgIGRlZiBwYXJzZV9leHBlY3RhdGlvbnMoc2VsZiwgcGxhdGZv
cm0sIGlzX2RlYnVnX21vZGUpOgogICAgICAgICAiIiJQYXJzZSB0aGUgZXhwZWN0YXRpb25zIGZy
b20gdGhlIHRlc3RfbGlzdCBmaWxlcyBhbmQgcmV0dXJuIGEgZGF0YQpAQCAtMjQwLDkgKzIyNSwx
MCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgdGVzdF9maWxlcyA9IHNlbGYuX3Rl
c3RfZmlsZXMKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMg
PSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zKHRlc3RfZmlsZXMsCi0gICAgICAg
ICAgICAgICAgc2VsZi5fZmlsZV9kaXIsIHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlLAotICAgICAg
ICAgICAgICAgIHNlbGYuX29wdGlvbnMubGludF90ZXN0X2ZpbGVzKQorICAgICAgICAgICAgZXhw
ZWN0YXRpb25zX3N0ciA9IHNlbGYuX3BvcnQudGVzdF9leHBlY3RhdGlvbnMoKQorICAgICAgICAg
ICAgc2VsZi5fZXhwZWN0YXRpb25zID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9u
cygKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LCB0ZXN0X2ZpbGVzLCBleHBlY3RhdGlvbnNf
c3RyLAorICAgICAgICAgICAgICAgIHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlLCBzZWxmLl9vcHRp
b25zLmxpbnRfdGVzdF9maWxlcykKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RhdGlv
bnMKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgogICAgICAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5saW50X3Rlc3RfZmlsZXM6CkBAIC0zNTcsNyArMzQzLDggQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgPSBzZXQoc2VsZi5fdGVzdF9maWxl
c19saXN0KQogCiAgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMgPSBzZWxmLnBhcnNlX2V4
cGVjdGF0aW9ucygKLSAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnBsYXRmb3JtX25hbWUoKSwg
c2VsZi5fb3B0aW9ucy50YXJnZXQgPT0gJ0RlYnVnJykKKyAgICAgICAgICAgICAgICBzZWxmLl9w
b3J0LnRlc3RfcGxhdGZvcm1fbmFtZSgpLAorICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
dGFyZ2V0ID09ICdEZWJ1ZycpCiAKICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgPSBzZXQo
ZmlsZXMpCiAgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBmaWxlcwpAQCAtNDIy
LDggKzQwOSw5IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIGlzIHVzZWQgZm9yIGxvb2tp
bmcgdXAgdGhlIHRpbWVvdXQgdmFsdWUgKGluIG1zKSB0byB1c2UgZm9yIHRoZSBnaXZlbgogICAg
ICAgICB0ZXN0LiIiIgogICAgICAgICBpZiBzZWxmLl9leHBlY3RhdGlvbnMuaGFzX21vZGlmaWVy
KHRlc3RfZmlsZSwgdGVzdF9leHBlY3RhdGlvbnMuU0xPVyk6Ci0gICAgICAgICAgICByZXR1cm4g
VGVzdEluZm8odGVzdF9maWxlLCBzZWxmLl9vcHRpb25zLnNsb3dfdGltZV9vdXRfbXMpCi0gICAg
ICAgIHJldHVybiBUZXN0SW5mbyh0ZXN0X2ZpbGUsIHNlbGYuX29wdGlvbnMudGltZV9vdXRfbXMp
CisgICAgICAgICAgICByZXR1cm4gVGVzdEluZm8oc2VsZi5fcG9ydCwgdGVzdF9maWxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2xvd190aW1lX291dF9tcykK
KyAgICAgICAgcmV0dXJuIFRlc3RJbmZvKHNlbGYuX3BvcnQsIHRlc3RfZmlsZSwgc2VsZi5fb3B0
aW9ucy50aW1lX291dF9tcykKIAogICAgIGRlZiBfZ2V0X3Rlc3RfZmlsZV9xdWV1ZShzZWxmLCB0
ZXN0X2ZpbGVzKToKICAgICAgICAgIiIiQ3JlYXRlIHRoZSB0aHJlYWQgc2FmZSBxdWV1ZSBvZiBs
aXN0cyBvZiAodGVzdCBmaWxlbmFtZXMsIHRlc3QgVVJJcykKQEAgLTQ4OCw2ICs0NzYsNyBAQCBj
bGFzcyBUZXN0UnVubmVyOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSB0dXBsZSBvZiBhcmd1bWVu
dHMgZm9yIHRlc3RzIGFuZCBmb3IgdGVzdF9zaGVsbC4iIiIKICAgICAgICAgc2hlbGxfYXJncyA9
IFtdCiAgICAgICAgIHRlc3RfYXJncyA9IHRlc3RfdHlwZV9iYXNlLlRlc3RBcmd1bWVudHMoKQor
ICAgICAgICBwbmdfcGF0aCA9IE5vbmUKICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMubm9f
cGl4ZWxfdGVzdHM6CiAgICAgICAgICAgICBwbmdfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9v
cHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInBuZ19yZXN1bHQlcy5wbmciICUgaW5kZXgpCkBAIC01MDQsNyArNDkzLDcgQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ncF9mYXVsdF9lcnJvcl9i
b3g6CiAgICAgICAgICAgICBzaGVsbF9hcmdzLmFwcGVuZCgnLS1ncC1mYXVsdC1lcnJvci1ib3gn
KQogCi0gICAgICAgIHJldHVybiAodGVzdF9hcmdzLCBzaGVsbF9hcmdzKQorICAgICAgICByZXR1
cm4gKHRlc3RfYXJncywgcG5nX3BhdGgsIHNoZWxsX2FyZ3MpCiAKICAgICBkZWYgX2NvbnRhaW5z
X3Rlc3RzKHNlbGYsIHN1YmRpcik6CiAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gc2VsZi5fdGVz
dF9maWxlc19saXN0OgpAQCAtNTEyLDIzICs1MDEsMTIgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAg
ICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgIGRl
ZiBfaW5zdGFudGlhdGVfdGVzdF9zaGVsbF90aHJlYWRzKHNlbGYsIHRlc3Rfc2hlbGxfYmluYXJ5
LCB0ZXN0X2ZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dF9zdW1tYXJ5KToKKyAgICBkZWYgX2luc3RhbnRpYXRlX3Rlc3Rfc2hlbGxfdGhyZWFkcyhzZWxm
LCB0ZXN0X2ZpbGVzLCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIkluc3RhbnRpdGF0ZXMg
YW5kIHN0YXJ0cyB0aGUgVGVzdFNoZWxsVGhyZWFkKHMpLgogCiAgICAgICAgIFJldHVybjoKICAg
ICAgICAgICBUaGUgbGlzdCBvZiB0aHJlYWRzLgogICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9z
aGVsbF9jb21tYW5kID0gW3Rlc3Rfc2hlbGxfYmluYXJ5XQotCi0gICAgICAgIGlmIHNlbGYuX29w
dGlvbnMud3JhcHBlcjoKLSAgICAgICAgICAgICMgVGhpcyBzcGxpdCgpIGlzbid0IHJlYWxseSB3
aGF0IHdlIHdhbnQgLS0gaXQgaW5jb3JyZWN0bHkgd2lsbAotICAgICAgICAgICAgIyBzcGxpdCBx
dW90ZWQgc3RyaW5ncyB3aXRoaW4gdGhlIHdyYXBwZXIgYXJndW1lbnQgLS0gYnV0IGluCi0gICAg
ICAgICAgICAjIHByYWN0aWNlIGl0IHNob3VsZG4ndCBjb21lIHVwIGFuZCB0aGUgLS1oZWxwIG91
dHB1dCB3YXJucwotICAgICAgICAgICAgIyBhYm91dCBpdCBhbnl3YXkuCi0gICAgICAgICAgICB0
ZXN0X3NoZWxsX2NvbW1hbmQgPSAoc2VsZi5fb3B0aW9ucy53cmFwcGVyLnNwbGl0KCkgKwotICAg
ICAgICAgICAgICAgIHRlc3Rfc2hlbGxfY29tbWFuZCkKLQogICAgICAgICBmaWxlbmFtZV9xdWV1
ZSA9IHNlbGYuX2dldF90ZXN0X2ZpbGVfcXVldWUodGVzdF9maWxlcykKIAogICAgICAgICAjIElu
c3RhbnRpYXRlIFRlc3RTaGVsbFRocmVhZHMgYW5kIHN0YXJ0IHRoZW0uCkBAIC01MzcsMTUgKzUx
NSwxNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgIyBDcmVhdGUgc2VwYXJhdGUg
VGVzdFR5cGVzIGluc3RhbmNlcyBmb3IgZWFjaCB0aHJlYWQuCiAgICAgICAgICAgICB0ZXN0X3R5
cGVzID0gW10KICAgICAgICAgICAgIGZvciB0IGluIHNlbGYuX3Rlc3RfdHlwZXM6Ci0gICAgICAg
ICAgICAgICAgdGVzdF90eXBlcy5hcHBlbmQodChzZWxmLl9vcHRpb25zLnBsYXRmb3JtLAorICAg
ICAgICAgICAgICAgIHRlc3RfdHlwZXMuYXBwZW5kKHQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9u
cy5wbGF0Zm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29w
dGlvbnMucmVzdWx0c19kaXJlY3RvcnkpKQogCi0gICAgICAgICAgICB0ZXN0X2FyZ3MsIHNoZWxs
X2FyZ3MgPSBzZWxmLl9nZXRfdGVzdF9zaGVsbF9hcmdzKGkpCi0gICAgICAgICAgICB0aHJlYWQg
PSB0ZXN0X3NoZWxsX3RocmVhZC5UZXN0U2hlbGxUaHJlYWQoZmlsZW5hbWVfcXVldWUsCisgICAg
ICAgICAgICB0ZXN0X2FyZ3MsIHBuZ19wYXRoLCBzaGVsbF9hcmdzID0gc2VsZi5fZ2V0X3Rlc3Rf
c2hlbGxfYXJncyhpKQorICAgICAgICAgICAgdGhyZWFkID0gdGVzdF9zaGVsbF90aHJlYWQuVGVz
dFNoZWxsVGhyZWFkKHNlbGYuX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVfcXVldWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRlc3Rfc2hlbGxfY29tbWFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfYXJncywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfcGF0aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbF9h
cmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMpCiAgICAgICAgICAgICBpZiBzZWxmLl9pc19zaW5nbGVfdGhyZWFk
ZWQoKToKQEAgLTU1NiwxOSArNTM1LDExIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAg
cmV0dXJuIHRocmVhZHMKIAotICAgIGRlZiBfc3RvcF9sYXlvdXRfdGVzdF9oZWxwZXIoc2VsZiwg
cHJvYyk6Ci0gICAgICAgICIiIlN0b3AgdGhlIGxheW91dCB0ZXN0IGhlbHBlciBhbmQgY2xvc2Vz
IGl0IGRvd24uIiIiCi0gICAgICAgIGlmIHByb2M6Ci0gICAgICAgICAgICBsb2dnaW5nLmRlYnVn
KCJTdG9wcGluZyBsYXlvdXQgdGVzdCBoZWxwZXIiKQotICAgICAgICAgICAgcHJvYy5zdGRpbi53
cml0ZSgieFxuIikKLSAgICAgICAgICAgIHByb2Muc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAg
cHJvYy53YWl0KCkKLQogICAgIGRlZiBfaXNfc2luZ2xlX3RocmVhZGVkKHNlbGYpOgogICAgICAg
ICAiIiJSZXR1cm5zIHdoZXRoZXIgd2Ugc2hvdWxkIHJ1biBhbGwgdGhlIHRlc3RzIGluIHRoZSBt
YWluIHRocmVhZC4iIiIKICAgICAgICAgcmV0dXJuIGludChzZWxmLl9vcHRpb25zLm51bV90ZXN0
X3NoZWxscykgPT0gMQogCi0gICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgdGVzdF9zaGVsbF9iaW5h
cnksIGZpbGVfbGlzdCwgcmVzdWx0X3N1bW1hcnkpOgorICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYs
IGZpbGVfbGlzdCwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJSdW5zIHRoZSB0ZXN0cyBp
biB0aGUgZmlsZV9saXN0LgogCiAgICAgICAgIFJldHVybjogQSB0dXBsZSAoZmFpbHVyZXMsIHRo
cmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCkBAIC01ODIsOSArNTUzLDggQEAgY2xhc3MgVGVz
dFJ1bm5lcjoKICAgICAgICAgICAgICAgaW4gdGhlIGZvcm0ge2ZpbGVuYW1lOmZpbGVuYW1lLCB0
ZXN0X3J1bl90aW1lOnRlc3RfcnVuX3RpbWV9CiAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeTog
c3VtbWFyeSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cwogICAgICAgICAiIiIK
LSAgICAgICAgdGhyZWFkcyA9IHNlbGYuX2luc3RhbnRpYXRlX3Rlc3Rfc2hlbGxfdGhyZWFkcyh0
ZXN0X3NoZWxsX2JpbmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaWxlX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCisgICAgICAgIHRocmVhZHMgPSBz
ZWxmLl9pbnN0YW50aWF0ZV90ZXN0X3NoZWxsX3RocmVhZHMoZmlsZV9saXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1t
YXJ5KQogCiAgICAgICAgICMgV2FpdCBmb3IgdGhlIHRocmVhZHMgdG8gZmluaXNoIGFuZCBjb2xs
ZWN0IHRlc3QgZmFpbHVyZXMuCiAgICAgICAgIGZhaWx1cmVzID0ge30KQEAgLTYxMCw3ICs1ODAs
NyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6
CiAgICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CiAgICAgICAgICAgICAgICAgdGhy
ZWFkLmNhbmNlbCgpCi0gICAgICAgICAgICBzZWxmLl9zdG9wX2xheW91dF90ZXN0X2hlbHBlcihs
YXlvdXRfdGVzdF9oZWxwZXJfcHJvYykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9oZWxw
ZXIoKQogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgog
ICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIGEgVGVzdFNoZWxsVGhyZWFkIGRpZWQgYmVmb3Jl
IG5vcm1hbCBjb21wbGV0aW9uLgpAQCAtNjQwLDQyICs2MTAsMjAgQEAgY2xhc3MgVGVzdFJ1bm5l
cjoKICAgICAgICAgaWYgbm90IHNlbGYuX3Rlc3RfZmlsZXM6CiAgICAgICAgICAgICByZXR1cm4g
MAogICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgdGVzdF9zaGVsbF9i
aW5hcnkgPSBwYXRoX3V0aWxzLnRlc3Rfc2hlbGxfcGF0aChzZWxmLl9vcHRpb25zLnRhcmdldCkK
IAogICAgICAgICAjIFN0YXJ0IHVwIGFueSBoZWxwZXIgbmVlZGVkCi0gICAgICAgIGxheW91dF90
ZXN0X2hlbHBlcl9wcm9jID0gTm9uZQogICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5ub19w
aXhlbF90ZXN0czoKLSAgICAgICAgICAgIGhlbHBlcl9wYXRoID0gcGF0aF91dGlscy5sYXlvdXRf
dGVzdF9oZWxwZXJfcGF0aCgKLSAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnRhcmdldCkK
LSAgICAgICAgICAgIGlmIGxlbihoZWxwZXJfcGF0aCk6Ci0gICAgICAgICAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygiU3RhcnRpbmcgbGF5b3V0IGhlbHBlciAlcyIgJSBoZWxwZXJfcGF0aCkKLSAgICAg
ICAgICAgICAgICBsYXlvdXRfdGVzdF9oZWxwZXJfcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oCi0g
ICAgICAgICAgICAgICAgICAgIFtoZWxwZXJfcGF0aF0sIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwK
LSAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPU5vbmUp
Ci0gICAgICAgICAgICAgICAgaXNfcmVhZHkgPSBsYXlvdXRfdGVzdF9oZWxwZXJfcHJvYy5zdGRv
dXQucmVhZGxpbmUoKQotICAgICAgICAgICAgICAgIGlmIG5vdCBpc19yZWFkeS5zdGFydHN3aXRo
KCdyZWFkeScpOgotICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJsYXlvdXRfdGVz
dF9oZWxwZXIgZmFpbGVkIHRvIGJlIHJlYWR5IikKLQotICAgICAgICAjIENoZWNrIHRoYXQgdGhl
IHN5c3RlbSBkZXBlbmRlbmNpZXMgKHRoZW1lcywgZm9udHMsIC4uLikgYXJlIGNvcnJlY3QuCi0g
ICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLm5vY2hlY2tfc3lzX2RlcHM6Ci0gICAgICAgICAg
ICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihbdGVzdF9zaGVsbF9iaW5hcnksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1jaGVjay1sYXlvdXQtdGVzdC1zeXMtZGVwcyJd
KQotICAgICAgICAgICAgaWYgcHJvYy53YWl0KCkgIT0gMDoKLSAgICAgICAgICAgICAgICBsb2dn
aW5nLmluZm8oIkFib3J0aW5nIGJlY2F1c2Ugc3lzdGVtIGRlcGVuZGVuY2llcyBjaGVjayAiCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQuXG4gVG8gb3ZlcnJpZGUsIGludm9r
ZSB3aXRoICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tbm9jaGVjay1zeXMtZGVw
cyIpCi0gICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQu
c3RhcnRfaGVscGVyKCkKIAogICAgICAgICBpZiBzZWxmLl9jb250YWluc190ZXN0cyhzZWxmLkhU
VFBfU1VCRElSKToKLSAgICAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyLnN0YXJ0KCkKKyAgICAg
ICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQogCiAgICAgICAgIGlmIHNlbGYu
X2NvbnRhaW5zX3Rlc3RzKHNlbGYuV0VCU09DS0VUX1NVQkRJUik6Ci0gICAgICAgICAgICBzZWxm
Ll93ZWJzb2NrZXRfc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRf
d2Vic29ja2V0X3NlcnZlcigpCiAgICAgICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVf
c2VydmVyLlN0YXJ0KCkKIAogICAgICAgICB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBp
bmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9ICgKLSAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0cyh0
ZXN0X3NoZWxsX2JpbmFyeSwgc2VsZi5fdGVzdF9maWxlc19saXN0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpKQorICAgICAgICAgICAgc2VsZi5fcnVuX3Rlc3Rz
KHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCwgcmVzdWx0X3N1bW1hcnkpKQogCiAgICAgICAgICMgV2Ug
ZXhjbHVkZSB0aGUgY3Jhc2hlcyBmcm9tIHRoZSBsaXN0IG9mIHJlc3VsdHMgdG8gcmV0cnksIGJl
Y2F1c2UKICAgICAgICAgIyB3ZSB3YW50IHRvIHRyZWF0IGV2ZW4gYSBwb3RlbnRpYWxseSBmbGFr
eSBjcmFzaCBhcyBhbiBlcnJvci4KQEAgLTY4NywxMCArNjM1LDEwIEBAIGNsYXNzIFRlc3RSdW5u
ZXI6CiAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJSZXRyeWluZyAlZCB1bmV4cGVjdGVkIGZh
aWx1cmUocykiICUgbGVuKGZhaWx1cmVzKSkKICAgICAgICAgICAgIHJldHJpZXMgKz0gMQogICAg
ICAgICAgICAgcmV0cnlfc3VtbWFyeSA9IFJlc3VsdFN1bW1hcnkoc2VsZi5fZXhwZWN0YXRpb25z
LCBmYWlsdXJlcy5rZXlzKCkpCi0gICAgICAgICAgICBzZWxmLl9ydW5fdGVzdHModGVzdF9zaGVs
bF9iaW5hcnksIGZhaWx1cmVzLmtleXMoKSwgcmV0cnlfc3VtbWFyeSkKKyAgICAgICAgICAgIHNl
bGYuX3J1bl90ZXN0cyhmYWlsdXJlcy5rZXlzKCksIHJldHJ5X3N1bW1hcnkpCiAgICAgICAgICAg
ICBmYWlsdXJlcyA9IHNlbGYuX2dldF9mYWlsdXJlcyhyZXRyeV9zdW1tYXJ5LCBpbmNsdWRlX2Ny
YXNoZXM9VHJ1ZSkKIAotICAgICAgICBzZWxmLl9zdG9wX2xheW91dF90ZXN0X2hlbHBlcihsYXlv
dXRfdGVzdF9oZWxwZXJfcHJvYykKKyAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2hlbHBlcigpCiAg
ICAgICAgIGVuZF90aW1lID0gdGltZS50aW1lKCkKIAogICAgICAgICB3cml0ZSA9IGNyZWF0ZV9s
b2dnaW5nX3dyaXRlcihzZWxmLl9vcHRpb25zLCAndGltaW5nJykKQEAgLTc3NSw3ICs3MjMsNyBA
QCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAgIG5leHRfdGVzdCA9IHNlbGYuX3Rlc3RfZmls
ZXNfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQogICAgICAgICBuZXh0X2RpciA9IG9z
LnBhdGguZGlybmFtZSgKLSAgICAgICAgICAgIHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxl
bmFtZShuZXh0X3Rlc3QpKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2Zp
bGVuYW1lKG5leHRfdGVzdCkpCiAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3Ry
ID09ICIiOgogICAgICAgICAgICAgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPSAiJXM6ICIg
JSAobmV4dF9kaXIpCiAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2RpciA9IG5leHRfZGlyCkBA
IC04MDEsNyArNzQ5LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICAgICAgbmV4dF90
ZXN0ID0gc2VsZi5fdGVzdF9maWxlc19saXN0W3NlbGYuX2N1cnJlbnRfdGVzdF9udW1iZXJdCiAg
ICAgICAgICAgICBuZXh0X2RpciA9IG9zLnBhdGguZGlybmFtZSgKLSAgICAgICAgICAgICAgICBw
YXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUobmV4dF90ZXN0KSkKKyAgICAgICAgICAg
ICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUobmV4dF90ZXN0KSkKIAogICAg
ICAgICBpZiByZXN1bHRfc3VtbWFyeS5yZW1haW5pbmc6CiAgICAgICAgICAgICByZW1haW5fc3Ry
ID0gIiAoJWQpIiAlIChyZXN1bHRfc3VtbWFyeS5yZW1haW5pbmcpCkBAIC04NzIsNyArODIwLDcg
QEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICMgTm90ZSB0aGF0IGlmIGEgdGVzdCBj
cmFzaGVkIGluIHRoZSBvcmlnaW5hbCBydW4sIHdlIGlnbm9yZQogICAgICAgICAgICAgIyB3aGV0
aGVyIG9yIG5vdCBpdCBjcmFzaGVkIHdoZW4gd2UgcmV0cmllZCBpdCAoaWYgd2UgcmV0cmllZCBp
dCksCiAgICAgICAgICAgICAjIGFuZCBhbHdheXMgY29uc2lkZXIgdGhlIHJlc3VsdCBub3QgZmxh
a3kuCi0gICAgICAgICAgICB0ZXN0ID0gcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1l
KGZpbGVuYW1lKQorICAgICAgICAgICAgdGVzdCA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShmaWxlbmFtZSkKICAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRp
b25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKGZpbGVuYW1lKQogICAgICAgICAgICAgYWN0dWFs
ID0gW2tleXdvcmRzW3Jlc3VsdF1dCiAKQEAgLTk0MSw3ICs4ODksNyBAQCBjbGFzcyBUZXN0UnVu
bmVyOgogICAgICAgICBleHBlY3RhdGlvbnNfZmlsZS5jbG9zZSgpCiAKICAgICAgICAganNvbl9s
YXlvdXRfcmVzdWx0c19nZW5lcmF0b3IuSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0b3IoCi0gICAg
ICAgICAgICBzZWxmLl9vcHRpb25zLmJ1aWxkZXJfbmFtZSwgc2VsZi5fb3B0aW9ucy5idWlsZF9u
YW1lLAorICAgICAgICAgICAgc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucy5idWlsZGVyX25hbWUs
IHNlbGYuX29wdGlvbnMuYnVpbGRfbmFtZSwKICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuYnVp
bGRfbnVtYmVyLCBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAogICAgICAgICAgICAg
QlVJTERFUl9CQVNFX1VSTCwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCiAgICAgICAgICAgICBz
ZWxmLl9leHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCBzZWxmLl90ZXN0X2ZpbGVzX2xpc3Qp
CkBAIC0xMTA4LDcgKzEwNTYsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICB3cml0ZSh0
aXRsZSkKICAgICAgICAgZm9yIHRlc3RfdHVwbGUgaW4gdGVzdF9saXN0OgogICAgICAgICAgICAg
ZmlsZW5hbWUgPSB0ZXN0X3R1cGxlLmZpbGVuYW1lW2xlbigKLSAgICAgICAgICAgICAgICBwYXRo
X3V0aWxzLmxheW91dF90ZXN0c19kaXIoKSkgKyAxOl0KKyAgICAgICAgICAgICAgICBzZWxmLl9w
b3J0LmxheW91dF90ZXN0c19kaXIoKSkgKyAxOl0KICAgICAgICAgICAgIGZpbGVuYW1lID0gZmls
ZW5hbWUucmVwbGFjZSgnXFwnLCAnLycpCiAgICAgICAgICAgICB0ZXN0X3J1bl90aW1lID0gcm91
bmQodGVzdF90dXBsZS50ZXN0X3J1bl90aW1lLCAxKQogICAgICAgICAgICAgd3JpdGUoIiAgJXMg
dG9vayAlcyBzZWNvbmRzIiAlIChmaWxlbmFtZSwgdGVzdF9ydW5fdGltZSkpCkBAIC0xMzI2LDcg
KzEyNzQsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAiIiJQcmludHMgb25lIHVuZXhw
ZWN0ZWQgdGVzdCByZXN1bHQgbGluZS4iIiIKICAgICAgICAgZGVzYyA9IFRlc3RFeHBlY3RhdGlv
bnNGaWxlLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OU1tyZXN1bHRdWzBdCiAgICAgICAgIHNlbGYu
X21ldGVyLndyaXRlKCIgICVzIC0+IHVuZXhwZWN0ZWQgJXNcbiIgJQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAocGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3QpLCBkZXNj
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZSh0ZXN0KSwgZGVzYykpCiAKICAgICBkZWYgX3dyaXRlX3Jlc3VsdHNfaHRtbF9maWxl
KHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiV3JpdGUgcmVzdWx0cy5odG1sIHdo
aWNoIGlzIGEgc3VtbWFyeSBvZiB0ZXN0cyB0aGF0IGZhaWxlZC4KQEAgLTEzNjQsMTIgKzEzMTIs
MTIgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiB0ZXN0X2Zp
bGVzOgogICAgICAgICAgICAgdGVzdF9mYWlsdXJlcyA9IHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVz
LmdldCh0ZXN0X2ZpbGUsIFtdKQogICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIjxwPjxhIGhy
ZWY9JyVzJz4lczwvYT48YnIgLz5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBh
dGhfdXRpbHMuZmlsZW5hbWVfdG9fdXJpKHRlc3RfZmlsZSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9maWxlKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLl9wb3J0LmZpbGVuYW1lX3RvX3Vy
aSh0ZXN0X2ZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfZmlsZSkpKQogICAgICAgICAgICAgZm9yIGZhaWx1
cmUgaW4gdGVzdF9mYWlsdXJlczoKICAgICAgICAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiJm5i
c3A7Jm5ic3A7JXM8YnIvPiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGZhaWx1
cmUucmVzdWx0X2h0bWxfb3V0cHV0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfZmlsZSkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1l
KHRlc3RfZmlsZSkpKQogICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIjwvcD5cbiIpCiAKICAg
ICAgICAgIyBmb290ZXIKQEAgLTEzODAsOCArMTMyOCw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAg
ICAgICAgICIiIkxhdW5jaGVzIHRoZSB0ZXN0IHNoZWxsIG9wZW4gdG8gdGhlIHJlc3VsdHMuaHRt
bCBwYWdlLiIiIgogICAgICAgICByZXN1bHRzX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYu
X29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInJlc3VsdHMuaHRtbCIpCi0gICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oW3Bh
dGhfdXRpbHMudGVzdF9zaGVsbF9wYXRoKHNlbGYuX29wdGlvbnMudGFyZ2V0KSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGF0aF91dGlscy5maWxlbmFtZV90b191cmkocmVzdWx0c19maWxl
bmFtZSldKQorICAgICAgICBzZWxmLl9wb3J0LnNob3dfcmVzdWx0c19odG1sX2ZpbGUocmVzdWx0
c19maWxlbmFtZSkKIAogCiBkZWYgX2FkZF90b19kaWN0X29mX2xpc3RzKGRpY3QsIGtleSwgdmFs
dWUpOgpAQCAtMTQ0MiwxOSArMTM4OSwxOSBAQCBkZWYgbWFpbihvcHRpb25zLCBhcmdzKToKICAg
ICAgICAgZWxzZToKICAgICAgICAgICAgIG9wdGlvbnMudGFyZ2V0ID0gIlJlbGVhc2UiCiAKKyAg
ICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCisKICAgICBp
ZiBub3Qgb3B0aW9ucy51c2VfYXBhY2hlOgogICAgICAgICBvcHRpb25zLnVzZV9hcGFjaGUgPSBz
eXMucGxhdGZvcm0gaW4gKCdkYXJ3aW4nLCAnbGludXgyJykKIAogICAgIGlmIG9wdGlvbnMucmVz
dWx0c19kaXJlY3Rvcnkuc3RhcnRzd2l0aCgiLyIpOgogICAgICAgICAjIEFzc3VtZSBpdCdzIGFu
IGFic29sdXRlIHBhdGggYW5kIG5vcm1hbGl6ZS4KLSAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2Rp
cmVjdG9yeSA9IHBhdGhfdXRpbHMuZ2V0X2Fic29sdXRlX3BhdGgoCisgICAgICAgIG9wdGlvbnMu
cmVzdWx0c19kaXJlY3RvcnkgPSBwb3J0X29iai5nZXRfYWJzb2x1dGVfcGF0aCgKICAgICAgICAg
ICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCiAgICAgZWxzZToKICAgICAgICAgIyBJZiBp
dCdzIGEgcmVsYXRpdmUgcGF0aCwgbWFrZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSByZWxhdGl2ZSB0
bwogICAgICAgICAjIERlYnVnIG9yIFJlbGVhc2UuCi0gICAgICAgIGJhc2VkaXIgPSBwYXRoX3V0
aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnKQotICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGly
ZWN0b3J5ID0gcGF0aF91dGlscy5nZXRfYWJzb2x1dGVfcGF0aCgKLSAgICAgICAgICAgIG9zLnBh
dGguam9pbihiYXNlZGlyLCBvcHRpb25zLnRhcmdldCwgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9y
eSkpCisgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkgPSBwb3J0X29iai5yZXN1bHRz
X2RpcmVjdG9yeSgpCiAKICAgICBpZiBvcHRpb25zLmNsb2JiZXJfb2xkX3Jlc3VsdHM6CiAgICAg
ICAgICMgSnVzdCBjbG9iYmVyIHRoZSBhY3R1YWwgdGVzdCByZXN1bHRzIGRpcmVjdG9yaWVzIHNp
bmNlIHRoZSBvdGhlcgpAQCAtMTQ2NCwxMiArMTQxMSw5IEBAIGRlZiBtYWluKG9wdGlvbnMsIGFy
Z3MpOgogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKICAgICAgICAgICAgIHNodXRp
bC5ybXRyZWUocGF0aCkKIAotICAgICMgRW5zdXJlIHBsYXRmb3JtIGlzIHZhbGlkIGFuZCBmb3Jj
ZSBpdCB0byB0aGUgZm9ybSAnY2hyb21pdW0tPHBsYXRmb3JtPicuCi0gICAgb3B0aW9ucy5wbGF0
Zm9ybSA9IHBhdGhfdXRpbHMucGxhdGZvcm1fbmFtZShvcHRpb25zLnBsYXRmb3JtKQotCiAgICAg
aWYgbm90IG9wdGlvbnMubnVtX3Rlc3Rfc2hlbGxzOgogICAgICAgICAjIFRPRE8ob2phbik6IElu
dmVzdGlnYXRlIHBlcmYvZmxha2luZXNzIGltcGFjdCBvZiB1c2luZyBudW1jb3JlcyArIDEuCi0g
ICAgICAgIG9wdGlvbnMubnVtX3Rlc3Rfc2hlbGxzID0gcGxhdGZvcm1fdXRpbHMuZ2V0X251bV9j
b3JlcygpCisgICAgICAgIG9wdGlvbnMubnVtX3Rlc3Rfc2hlbGxzID0gcG9ydF9vYmoubnVtX2Nv
cmVzKCkKIAogICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsICdjb25m
aWcnKQogICAgIHdyaXRlKCJSdW5uaW5nICVzIHRlc3Rfc2hlbGxzIGluIHBhcmFsbGVsIiAlIG9w
dGlvbnMubnVtX3Rlc3Rfc2hlbGxzKQpAQCAtMTQ5Nyw2MiArMTQ0MSw0NiBAQCBkZWYgbWFpbihv
cHRpb25zLCBhcmdzKToKICAgICAgICAgcGF0aHMgKz0gcmVhZF90ZXN0X2ZpbGVzKG9wdGlvbnMu
dGVzdF9saXN0KQogCiAgICAgIyBDcmVhdGUgdGhlIG91dHB1dCBkaXJlY3RvcnkgaWYgaXQgZG9l
c24ndCBhbHJlYWR5IGV4aXN0LgotICAgIHBhdGhfdXRpbHMubWF5YmVfbWFrZV9kaXJlY3Rvcnko
b3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKKyAgICBwb3J0X29iai5tYXliZV9tYWtlX2RpcmVj
dG9yeShvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQogICAgIG1ldGVyLnVwZGF0ZSgiR2F0aGVy
aW5nIGZpbGVzIC4uLiIpCiAKLSAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIob3B0aW9ucywg
bWV0ZXIpCisgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKG9wdGlvbnMsIG1ldGVyLCBwb3J0
X29iaikKICAgICB0ZXN0X3J1bm5lci5nYXRoZXJfZmlsZV9wYXRocyhwYXRocykKIAogICAgIGlm
IG9wdGlvbnMubGludF90ZXN0X2ZpbGVzOgogICAgICAgICAjIENyZWF0aW5nIHRoZSBleHBlY2F0
aW9ucyBmb3IgZWFjaCBwbGF0Zm9ybS90YXJnZXQgcGFpciBkb2VzIGFsbCB0aGUKICAgICAgICAg
IyB0ZXN0IGxpc3QgcGFyc2luZyBhbmQgZW5zdXJlcyBpdCdzIGNvcnJlY3Qgc3ludGF4IChlLmcu
IG5vIGR1cGVzKS4KLSAgICAgICAgZm9yIHBsYXRmb3JtIGluIFRlc3RFeHBlY3RhdGlvbnNGaWxl
LlBMQVRGT1JNUzoKKyAgICAgICAgZm9yIHBsYXRmb3JtIGluIHBvcnRfb2JqLnRlc3RfcGxhdGZv
cm1fbmFtZXMoKToKICAgICAgICAgICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0aW9ucyhw
bGF0Zm9ybSwgaXNfZGVidWdfbW9kZT1UcnVlKQogICAgICAgICAgICAgdGVzdF9ydW5uZXIucGFy
c2VfZXhwZWN0YXRpb25zKHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlPUZhbHNlKQogICAgICAgICBw
cmludCAoIklmIHRoZXJlIGFyZSBubyBmYWlsIG1lc3NhZ2VzLCBlcnJvcnMgb3IgZXhjZXB0aW9u
cywgdGhlbiB0aGUgIgogICAgICAgICAgICAgImxpbnQgc3VjY2VlZGVkLiIpCiAgICAgICAgIHN5
cy5leGl0KDApCiAKLSAgICB0cnk6Ci0gICAgICAgIHRlc3Rfc2hlbGxfYmluYXJ5X3BhdGggPSBw
YXRoX3V0aWxzLnRlc3Rfc2hlbGxfcGF0aChvcHRpb25zLnRhcmdldCkKLSAgICBleGNlcHQgcGF0
aF91dGlscy5QYXRoTm90Rm91bmQ6Ci0gICAgICAgIHByaW50ICJcbkVSUk9SOiB0ZXN0X3NoZWxs
IGlzIG5vdCBmb3VuZC4gQmUgc3VyZSB0aGF0IHlvdSBoYXZlIGJ1aWx0IgotICAgICAgICBwcmlu
dCAiaXQgYW5kIHRoYXQgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBidWlsZC4gVGhpcyBzY3Jp
cHQiCi0gICAgICAgIHByaW50ICJ3aWxsIHJ1biB0aGUgUmVsZWFzZSBvbmUgYnkgZGVmYXVsdC4g
VXNlIC0tZGVidWcgdG8gdXNlIHRoZSIKLSAgICAgICAgcHJpbnQgIkRlYnVnIGJ1aWxkLlxuIgot
ICAgICAgICBzeXMuZXhpdCgxKQorICAgICMgQ2hlY2sgdGhhdCB0aGUgc3lzdGVtIGRlcGVuZGVu
Y2llcyAodGhlbWVzLCBmb250cywgLi4uKSBhcmUgY29ycmVjdC4KKyAgICBpZiBub3Qgb3B0aW9u
cy5ub2NoZWNrX3N5c19kZXBzOgorICAgICAgICBpZiBub3QgcG9ydF9vYmouY2hlY2tfc3lzX2Rl
cHMoKToKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICB3cml0ZSA9IGNyZWF0ZV9sb2dn
aW5nX3dyaXRlcihvcHRpb25zLCAiY29uZmlnIikKLSAgICB3cml0ZSgiVXNpbmcgcGxhdGZvcm0g
JyVzJyIgJSBvcHRpb25zLnBsYXRmb3JtKQorICAgIHdyaXRlKCJVc2luZyBwb3J0ICclcyciICUg
cG9ydF9vYmoubmFtZSgpKQogICAgIHdyaXRlKCJQbGFjaW5nIHRlc3QgcmVzdWx0cyBpbiAlcyIg
JSBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQogICAgIGlmIG9wdGlvbnMubmV3X2Jhc2VsaW5l
OgotICAgICAgICB3cml0ZSgiUGxhY2luZyBuZXcgYmFzZWxpbmVzIGluICVzIiAlCi0gICAgICAg
ICAgICAgIHBhdGhfdXRpbHMuY2hyb21pdW1fYmFzZWxpbmVfcGF0aChvcHRpb25zLnBsYXRmb3Jt
KSkKLSAgICB3cml0ZSgiVXNpbmcgJXMgYnVpbGQgYXQgJXMiICUgKG9wdGlvbnMudGFyZ2V0LCB0
ZXN0X3NoZWxsX2JpbmFyeV9wYXRoKSkKKyAgICAgICAgd3JpdGUoIlBsYWNpbmcgbmV3IGJhc2Vs
aW5lcyBpbiAlcyIgJSBwb3J0X29iai5iYXNlbGluZV9wYXRoKCkpCisgICAgd3JpdGUoIlVzaW5n
ICVzIGJ1aWxkIiAlIG9wdGlvbnMudGFyZ2V0KQogICAgIGlmIG9wdGlvbnMubm9fcGl4ZWxfdGVz
dHM6CiAgICAgICAgIHdyaXRlKCJOb3QgcnVubmluZyBwaXhlbCB0ZXN0cyIpCiAgICAgd3JpdGUo
IiIpCiAKICAgICBtZXRlci51cGRhdGUoIlBhcnNpbmcgZXhwZWN0YXRpb25zIC4uLiIpCi0gICAg
dGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMu
dGFyZ2V0ID09ICdEZWJ1ZycpCisgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBv
cnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcHRpb25zLnRhcmdldCA9PSAnRGVidWcnKQogCiAgICAgbWV0ZXIudXBkYXRlKCJQ
cmVwYXJpbmcgdGVzdHMgLi4uIikKICAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihv
cHRpb25zLCAiZXhwZWN0ZWQiKQogICAgIHJlc3VsdF9zdW1tYXJ5ID0gdGVzdF9ydW5uZXIucHJl
cGFyZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KHdyaXRlKQogCi0gICAgaWYgJ2N5Z3dpbicgPT0g
c3lzLnBsYXRmb3JtOgotICAgICAgICBsb2dnaW5nLndhcm4oIiMiICogNDApCi0gICAgICAgIGxv
Z2dpbmcud2FybigiIyBVTkVYUEVDVEVEIFBZVEhPTiBWRVJTSU9OIikKLSAgICAgICAgbG9nZ2lu
Zy53YXJuKCIjIFRoaXMgc2NyaXB0IHNob3VsZCBiZSBydW4gdXNpbmcgdGhlIHZlcnNpb24gb2Yg
cHl0aG9uIikKLSAgICAgICAgbG9nZ2luZy53YXJuKCIjIGluIHRoaXJkX3BhcnR5L3B5dGhvbl8y
NC8iKQotICAgICAgICBsb2dnaW5nLndhcm4oIiMiICogNDApCi0gICAgICAgIHN5cy5leGl0KDEp
Ci0KLSAgICAjIERlbGV0ZSB0aGUgZGlzayBjYWNoZSBpZiBhbnkgdG8gZW5zdXJlIGEgY2xlYW4g
dGVzdCBydW4uCi0gICAgY2FjaGVkaXIgPSBvcy5wYXRoLnNwbGl0KHRlc3Rfc2hlbGxfYmluYXJ5
X3BhdGgpWzBdCi0gICAgY2FjaGVkaXIgPSBvcy5wYXRoLmpvaW4oY2FjaGVkaXIsICJjYWNoZSIp
Ci0gICAgaWYgb3MucGF0aC5leGlzdHMoY2FjaGVkaXIpOgotICAgICAgICBzaHV0aWwucm10cmVl
KGNhY2hlZGlyKQorICAgIHBvcnRfb2JqLnNldHVwX3Rlc3RfcnVuKCkKIAogICAgIHRlc3RfcnVu
bmVyLmFkZF90ZXN0X3R5cGUodGV4dF9kaWZmLlRlc3RUZXh0RGlmZikKICAgICBpZiBub3Qgb3B0
aW9ucy5ub19waXhlbF90ZXN0czoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvZnV6enlfaW1hZ2VfZGlmZi5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvZnV6enlfaW1h
Z2VfZGlmZi5weQppbmRleCA5MzgzNjZkLi44OWRkMTkyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdlX2Rp
ZmYucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVz
dF90eXBlcy9mdXp6eV9pbWFnZV9kaWZmLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKICMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQogIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIENocm9t
aXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogIwpA
QCAtMzUsMTYgKzM1LDE0IEBAIGltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBv
cwogaW1wb3J0IHNodXRpbAotaW1wb3J0IHN1YnByb2Nlc3MKIAotZnJvbSBsYXlvdXRfcGFja2Fn
ZSBpbXBvcnQgcGF0aF91dGlscwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWls
dXJlcwogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFzZQogCiAKIGNsYXNzIEZ1
enp5SW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAKLSAgICBkZWYgY29t
cGFyZV9vdXRwdXQoc2VsZiwgZmlsZW5hbWUsIHByb2MsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJn
ZXQpOgorICAgIGRlZiBjb21wYXJlX291dHB1dChzZWxmLCBmaWxlbmFtZSwgb3V0cHV0LCB0ZXN0
X2FyZ3MsIHRhcmdldCk6CiAgICAgICAgICIiIkltcGxlbWVudGF0aW9uIG9mIENvbXBhcmVPdXRw
dXQgdGhhdCBjaGVja3MgdGhlIG91dHB1dCBpbWFnZSBhbmQKICAgICAgICAgY2hlY2tzdW0gYWdh
aW5zdCB0aGUgZXhwZWN0ZWQgZmlsZXMgZnJvbSB0aGUgTGF5b3V0VGVzdCBkaXJlY3RvcnkuCiAg
ICAgICAgICIiIgpAQCAtNTQsNyArNTIsNyBAQCBjbGFzcyBGdXp6eUltYWdlRGlmZih0ZXN0X3R5
cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogICAgICAgICBpZiB0ZXN0X2FyZ3MuaGFzaCBpcyBOb25l
OgogICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCiAKLSAgICAgICAgZXhwZWN0ZWRfcG5nX2Zp
bGUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnBuZycpCisgICAg
ICAgIGV4cGVjdGVkX3BuZ19maWxlID0gc2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFtZShmaWxl
bmFtZSwgJy5wbmcnKQogCiAgICAgICAgIGlmIHRlc3RfYXJncy5zaG93X3NvdXJjZXM6CiAgICAg
ICAgICAgICBsb2dnaW5nLmRlYnVnKCdVc2luZyAlcycgJSBleHBlY3RlZF9wbmdfZmlsZSkKQEAg
LTY0LDggKzYyLDcgQEAgY2xhc3MgRnV6enlJbWFnZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5
cGVCYXNlKToKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1
cmVNaXNzaW5nSW1hZ2Uoc2VsZikpCiAKICAgICAgICAgIyBSdW4gdGhlIGZ1enp5bWF0Y2hlcgot
ICAgICAgICByID0gc3VicHJvY2Vzcy5jYWxsKFtwYXRoX3V0aWxzLmZ1enp5X21hdGNoX3BhdGgo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2FyZ3MucG5nX3BhdGgsIGV4cGVj
dGVkX3BuZ19maWxlXSkKKyAgICAgICAgciA9IHBvcnQuZnV6enlfZGlmZih0ZXN0X2FyZ3MucG5n
X3BhdGgsIGV4cGVjdGVkX3BuZ19maWxlKQogICAgICAgICBpZiByICE9IDA6CiAgICAgICAgICAg
ICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlRnV6enlGYWlsdXJlKHNlbGYp
KQogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkKaW5kZXggMjU3NmY3YS4uMWRm
N2NhMyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weQpAQCAtMTEsNyArMTEs
NyBAQAogIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCiAjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBO
ZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KICMKQEAgLTM4LDkgKzM4LDcgQEAgaW1wb3J0IGVycm5vCiBpbXBvcnQgbG9n
Z2luZwogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3VicHJvY2VzcwogCi1mcm9t
IGxheW91dF9wYWNrYWdlIGltcG9ydCBwYXRoX3V0aWxzCiBmcm9tIGxheW91dF9wYWNrYWdlIGlt
cG9ydCB0ZXN0X2ZhaWx1cmVzCiBmcm9tIHRlc3RfdHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNl
CiAKQEAgLTg0LDcgKzgyLDcgQEAgY2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RU
eXBlQmFzZSk6CiAgICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZGF0YShmaWxlbmFtZSwgcG5n
X2RhdGEsICIucG5nIikKICAgICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGZpbGVuYW1l
LCBjaGVja3N1bSwgIi5jaGVja3N1bSIpCiAKLSAgICBkZWYgX2NyZWF0ZV9pbWFnZV9kaWZmKHNl
bGYsIGZpbGVuYW1lLCB0YXJnZXQpOgorICAgIGRlZiBfY3JlYXRlX2ltYWdlX2RpZmYoc2VsZiwg
cG9ydCwgZmlsZW5hbWUsIHRhcmdldCk6CiAgICAgICAgICIiIkNyZWF0ZXMgdGhlIHZpc3VhbCBk
aWZmIG9mIHRoZSBleHBlY3RlZC9hY3R1YWwgUE5Hcy4KIAogICAgICAgICBBcmdzOgpAQCAtOTgs
MzIgKzk2LDE0IEBAIGNsYXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2Up
OgogICAgICAgICBleHBlY3RlZF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVu
YW1lLAogICAgICAgICAgIHNlbGYuRklMRU5BTUVfU1VGRklYX0VYUEVDVEVEICsgJy5wbmcnKQog
Ci0gICAgICAgIGdsb2JhbCBfY29tcGFyZV9hdmFpbGFibGUKLSAgICAgICAgY21kID0gJycKLQog
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICBleGVjdXRhYmxlID0gcGF0aF91dGlscy5pbWFnZV9k
aWZmX3BhdGgodGFyZ2V0KQotICAgICAgICAgICAgY21kID0gW2V4ZWN1dGFibGUsICctLWRpZmYn
LCBhY3R1YWxfZmlsZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAg
IGRpZmZfZmlsZW5hbWVdCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAg
ICBfY29tcGFyZV9hdmFpbGFibGUgPSBUcnVlCisgICAgICAgICAgICByZXN1bHQgPSBwb3J0LmRp
ZmZfaW1hZ2UoYWN0dWFsX2ZpbGVuYW1lLCBleHBlY3RlZF9maWxlbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmX2ZpbGVuYW1lKQorICAgICAgICBleGNlcHQg
VmFsdWVFcnJvcjoKICAgICAgICAgICAgIF9jb21wYXJlX2F2YWlsYWJsZSA9IEZhbHNlCiAKLSAg
ICAgICAgcmVzdWx0ID0gMQotICAgICAgICBpZiBfY29tcGFyZV9hdmFpbGFibGU6Ci0gICAgICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jYWxsKGNtZCkK
LSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJy
bm8gPT0gZXJybm8uRU5PRU5UIG9yIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTOgotICAgICAgICAg
ICAgICAgICAgICBfY29tcGFyZV9hdmFpbGFibGUgPSBGYWxzZQotICAgICAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIGUKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1
ZUVycm9yOgotICAgICAgICAgICAgICAgICMgd29yayBhcm91bmQgYSByYWNlIGNvbmRpdGlvbiBp
biBQeXRob24gMi40J3MgaW1wbGVtZW50YXRpb24KLSAgICAgICAgICAgICAgICAjIG9mIHN1YnBy
b2Nlc3MuUG9wZW4KLSAgICAgICAgICAgICAgICBwYXNzCi0KICAgICAgICAgZ2xvYmFsIF9jb21w
YXJlX21zZ19wcmludGVkCi0KICAgICAgICAgaWYgbm90IF9jb21wYXJlX2F2YWlsYWJsZSBhbmQg
bm90IF9jb21wYXJlX21zZ19wcmludGVkOgogICAgICAgICAgICAgX2NvbXBhcmVfbXNnX3ByaW50
ZWQgPSBUcnVlCiAgICAgICAgICAgICBwcmludCgnaW1hZ2VfZGlmZiBub3QgZm91bmQuIE1ha2Ug
c3VyZSB5b3UgaGF2ZSBhICcgKyB0YXJnZXQgKwpAQCAtMTMxLDcgKzExMSw3IEBAIGNsYXNzIElt
YWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogCiAgICAgICAgIHJldHVybiBy
ZXN1bHQKIAotICAgIGRlZiBjb21wYXJlX291dHB1dChzZWxmLCBmaWxlbmFtZSwgcHJvYywgb3V0
cHV0LCB0ZXN0X2FyZ3MsIHRhcmdldCk6CisgICAgZGVmIGNvbXBhcmVfb3V0cHV0KHNlbGYsIHBv
cnQsIGZpbGVuYW1lLCBvdXRwdXQsIHRlc3RfYXJncywgdGFyZ2V0KToKICAgICAgICAgIiIiSW1w
bGVtZW50YXRpb24gb2YgQ29tcGFyZU91dHB1dCB0aGF0IGNoZWNrcyB0aGUgb3V0cHV0IGltYWdl
IGFuZAogICAgICAgICBjaGVja3N1bSBhZ2FpbnN0IHRoZSBleHBlY3RlZCBmaWxlcyBmcm9tIHRo
ZSBMYXlvdXRUZXN0IGRpcmVjdG9yeS4KICAgICAgICAgIiIiCkBAIC0xNDgsOSArMTI4LDkgQEAg
Y2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAgICAgICAgICAg
ICByZXR1cm4gZmFpbHVyZXMKIAogICAgICAgICAjIENvbXBhcmUgaGFzaGVzLgotICAgICAgICBl
eHBlY3RlZF9oYXNoX2ZpbGUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1l
LAorICAgICAgICBleHBlY3RlZF9oYXNoX2ZpbGUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVu
YW1lKGZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICcuY2hlY2tzdW0nKQotICAgICAgICBleHBlY3RlZF9wbmdfZmlsZSA9
IHBhdGhfdXRpbHMuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykKKyAgICAgICAg
ZXhwZWN0ZWRfcG5nX2ZpbGUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1l
LCAnLnBuZycpCiAKICAgICAgICAgaWYgdGVzdF9hcmdzLnNob3dfc291cmNlczoKICAgICAgICAg
ICAgIGxvZ2dpbmcuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX2hhc2hfZmlsZSkKQEAgLTE2
Niw4ICsxNDYsOSBAQCBjbGFzcyBJbWFnZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNl
KToKIAogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZXhwZWN0ZWRfcG5nX2ZpbGUpOgog
ICAgICAgICAgICAgIyBSZXBvcnQgYSBtaXNzaW5nIGV4cGVjdGVkIFBORyBmaWxlLgotICAgICAg
ICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMoZmlsZW5hbWUsICcnLCAnLmNoZWNrc3VtJywg
dGVzdF9hcmdzLmhhc2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBl
Y3RlZF9oYXNoLCBkaWZmPUZhbHNlLCB3ZGlmZj1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYud3Jp
dGVfb3V0cHV0X2ZpbGVzKHBvcnQsIGZpbGVuYW1lLCAnJywgJy5jaGVja3N1bScsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2FyZ3MuaGFzaCwgZXhwZWN0ZWRfaGFz
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmY9RmFsc2UsIHdkaWZm
PUZhbHNlKQogICAgICAgICAgICAgc2VsZi5fY29weV9vdXRwdXRfcG5nKGZpbGVuYW1lLCB0ZXN0
X2FyZ3MucG5nX3BhdGgsICctYWN0dWFsLnBuZycpCiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBl
bmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlKHNlbGYpKQogICAgICAgICAgICAg
cmV0dXJuIGZhaWx1cmVzCkBAIC0xNzYsMTQgKzE1NywxNSBAQCBjbGFzcyBJbWFnZURpZmYodGVz
dF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcwog
CiAKLSAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMoZmlsZW5hbWUsICcnLCAnLmNoZWNr
c3VtJywgdGVzdF9hcmdzLmhhc2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
cGVjdGVkX2hhc2gsIGRpZmY9RmFsc2UsIHdkaWZmPUZhbHNlKQorICAgICAgICBzZWxmLndyaXRl
X291dHB1dF9maWxlcyhwb3J0LCBmaWxlbmFtZSwgJycsICcuY2hlY2tzdW0nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2FyZ3MuaGFzaCwgZXhwZWN0ZWRfaGFzaCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZj1GYWxzZSwgd2RpZmY9RmFsc2UpCiAg
ICAgICAgIHNlbGYuX2NvcHlfb3V0cHV0X3BuZyhmaWxlbmFtZSwgdGVzdF9hcmdzLnBuZ19wYXRo
LCAnLWFjdHVhbC5wbmcnKQogICAgICAgICBzZWxmLl9jb3B5X291dHB1dF9wbmcoZmlsZW5hbWUs
IGV4cGVjdGVkX3BuZ19maWxlLCAnLWV4cGVjdGVkLnBuZycpCiAKICAgICAgICAgIyBFdmVuIHRo
b3VnaCB3ZSBvbmx5IHVzZSByZXN1bHQgaW4gb25lIGNvZGVwYXRoIGJlbG93IGJ1dCB3ZQogICAg
ICAgICAjIHN0aWxsIG5lZWQgdG8gY2FsbCBDcmVhdGVJbWFnZURpZmYgZm9yIG90aGVyIGNvZGVw
YXRocy4KLSAgICAgICAgcmVzdWx0ID0gc2VsZi5fY3JlYXRlX2ltYWdlX2RpZmYoZmlsZW5hbWUs
IHRhcmdldCkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5fY3JlYXRlX2ltYWdlX2RpZmYocG9ydCwg
ZmlsZW5hbWUsIHRhcmdldCkKICAgICAgICAgaWYgZXhwZWN0ZWRfaGFzaCA9PSAnJzoKICAgICAg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nSW1hZ2VI
YXNoKHNlbGYpKQogICAgICAgICBlbGlmIHRlc3RfYXJncy5oYXNoICE9IGV4cGVjdGVkX2hhc2g6
CkBAIC0xOTYsNyArMTc4LDcgQEAgY2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RU
eXBlQmFzZSk6CiAKICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCiAKLSAgICBkZWYgZGlmZl9maWxl
cyhzZWxmLCBmaWxlMSwgZmlsZTIpOgorICAgIGRlZiBkaWZmX2ZpbGVzKHNlbGYsIHBvcnQsIGZp
bGUxLCBmaWxlMik6CiAgICAgICAgICIiIkRpZmYgdHdvIGltYWdlIGZpbGVzLgogCiAgICAgICAg
IEFyZ3M6CkBAIC0yMDgsMTcgKzE5MCw4IEBAIGNsYXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFz
ZS5UZXN0VHlwZUJhc2UpOgogICAgICAgICAiIiIKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICBleGVjdXRhYmxlID0gcGF0aF91dGlscy5pbWFnZV9kaWZmX3BhdGgoJ0RlYnVnJykKLSAgICAg
ICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIGxvZ2dpbmcud2FybignRmFpbGVk
IHRvIGZpbmQgaW1hZ2UgZGlmZiBleGVjdXRhYmxlLicpCi0gICAgICAgICAgICByZXR1cm4gVHJ1
ZQotCi0gICAgICAgIGNtZCA9IFtleGVjdXRhYmxlLCBmaWxlMSwgZmlsZTJdCi0gICAgICAgIHJl
c3VsdCA9IDEKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5j
YWxsKGNtZCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAgICAgICAgICBsb2dnaW5n
Lndhcm4oJ0ZhaWxlZCB0byBjb21wYXJlIGltYWdlIGRpZmY6ICVzJywgZSkKKyAgICAgICAgICAg
IHJlc3VsdCA9IHBvcnQuZGlmZl9pbWFnZShmaWxlMSwgZmlsZTIpCisgICAgICAgIGV4Y2VwdCBW
YWx1ZUVycm9yLCBlOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgICAgICByZXR1cm4g
cmVzdWx0ID09IDEKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5Cmlu
ZGV4IDJhYThhMmQuLmVmYTJlOGMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXN0X3R5
cGVfYmFzZS5weQpAQCAtMTEsNyArMTEsNyBAQAogIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICMg
ZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICMKQEAgLTMzLDEzICszMyw5IEBA
IEFsc28gZGVmaW5lcyB0aGUgVGVzdEFyZ3VtZW50cyAic3RydWN0IiB0byBwYXNzIHRoZW0gYWRk
aXRpb25hbCBhcmd1bWVudHMuCiAiIiIKIAogaW1wb3J0IGNnaQotaW1wb3J0IGRpZmZsaWIKIGlt
cG9ydCBlcnJubwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcy5wYXRoCi1pbXBvcnQgc3VicHJv
Y2VzcwotCi1mcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBwYXRoX3V0aWxzCiAKIAogY2xhc3Mg
VGVzdEFyZ3VtZW50cyhvYmplY3QpOgpAQCAtNzQsNyArNzAsNyBAQCBjbGFzcyBUZXN0VHlwZUJh
c2Uob2JqZWN0KToKICAgICBGSUxFTkFNRV9TVUZGSVhfV0RJRkYgPSAiLXdkaWZmLmh0bWwiCiAg
ICAgRklMRU5BTUVfU1VGRklYX0NPTVBBUkUgPSAiLWRpZmYucG5nIgogCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBsYXRmb3JtLCByb290X291dHB1dF9kaXIpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwb3J0LCBwbGF0Zm9ybSwgcm9vdF9vdXRwdXRfZGlyKToKICAgICAgICAgIiIiSW5pdGlh
bGl6ZSBhIFRlc3RUeXBlQmFzZSBvYmplY3QuCiAKICAgICAgICAgQXJnczoKQEAgLTgzLDE0ICs3
OSwxNSBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAgICAgICByb290X291dHB1
dF9kaXI6IFRoZSB1bml4IHN0eWxlIHBhdGggdG8gdGhlIG91dHB1dCBkaXIuCiAgICAgICAgICIi
IgogICAgICAgICBzZWxmLl9yb290X291dHB1dF9kaXIgPSByb290X291dHB1dF9kaXIKKyAgICAg
ICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQog
CiAgICAgZGVmIF9tYWtlX291dHB1dF9kaXJlY3Rvcnkoc2VsZiwgZmlsZW5hbWUpOgogICAgICAg
ICAiIiJDcmVhdGVzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IChpZiBuZWVkZWQpIGZvciBhIGdpdmVu
IHRlc3QKICAgICAgICAgZmlsZW5hbWUuIiIiCiAgICAgICAgIG91dHB1dF9maWxlbmFtZSA9IG9z
LnBhdGguam9pbihzZWxmLl9yb290X291dHB1dF9kaXIsCi0gICAgICAgICAgICBwYXRoX3V0aWxz
LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKQotICAgICAgICBwYXRoX3V0aWxzLm1h
eWJlX21ha2VfZGlyZWN0b3J5KG9zLnBhdGguc3BsaXQob3V0cHV0X2ZpbGVuYW1lKVswXSkKKyAg
ICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCisg
ICAgICAgIHNlbGYuX3BvcnQubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxpdChvdXRw
dXRfZmlsZW5hbWUpWzBdKQogCiAgICAgZGVmIF9zYXZlX2Jhc2VsaW5lX2RhdGEoc2VsZiwgZmls
ZW5hbWUsIGRhdGEsIG1vZGlmaWVyKToKICAgICAgICAgIiIiU2F2ZXMgYSBuZXcgYmFzZWxpbmUg
ZmlsZSBpbnRvIHRoZSBwbGF0Zm9ybSBkaXJlY3RvcnkuCkBAIC0xMDQsMTMgKzEwMSwxMyBAQCBj
bGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAgICAgICBtb2RpZmllcjogdHlwZSBvZiB0
aGUgcmVzdWx0IGZpbGUsIGUuZy4gIi50eHQiIG9yICIucG5nIgogICAgICAgICAiIiIKICAgICAg
ICAgcmVsYXRpdmVfZGlyID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAgICAgICAgcGF0aF91dGls
cy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkKKyAgICAgICAgICAgIHNlbGYuX3Bv
cnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCiAgICAgICAgIG91dHB1dF9kaXIg
PSBvcy5wYXRoLmpvaW4oCi0gICAgICAgICAgICBwYXRoX3V0aWxzLmNocm9taXVtX2Jhc2VsaW5l
X3BhdGgoc2VsZi5fcGxhdGZvcm0pLCByZWxhdGl2ZV9kaXIpCisgICAgICAgICAgICBzZWxmLl9w
b3J0LmNocm9taXVtX2Jhc2VsaW5lX3BhdGgoc2VsZi5fcGxhdGZvcm0pLCByZWxhdGl2ZV9kaXIp
CiAgICAgICAgIG91dHB1dF9maWxlID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLnNwbGl0ZXh0
KGZpbGVuYW1lKVswXSArCiAgICAgICAgICAgICBzZWxmLkZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RF
RCArIG1vZGlmaWVyKQogCi0gICAgICAgIHBhdGhfdXRpbHMubWF5YmVfbWFrZV9kaXJlY3Rvcnko
b3V0cHV0X2RpcikKKyAgICAgICAgc2VsZi5fcG9ydC5tYXliZV9tYWtlX2RpcmVjdG9yeShvdXRw
dXRfZGlyKQogICAgICAgICBvdXRwdXRfcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRfZGlyLCBv
dXRwdXRfZmlsZSkKICAgICAgICAgbG9nZ2luZy5kZWJ1Zygnd3JpdGluZyBuZXcgYmFzZWxpbmUg
dG8gIiVzIicgJSAob3V0cHV0X3BhdGgpKQogICAgICAgICBvcGVuKG91dHB1dF9wYXRoLCAid2Ii
KS53cml0ZShkYXRhKQpAQCAtMTMwLDEwICsxMjcsMTAgQEAgY2xhc3MgVGVzdFR5cGVCYXNlKG9i
amVjdCk6CiAgICAgICAgICAgVGhlIGFic29sdXRlIHdpbmRvd3MgcGF0aCB0byB0aGUgb3V0cHV0
IGZpbGVuYW1lCiAgICAgICAgICIiIgogICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBvcy5wYXRo
LmpvaW4oc2VsZi5fcm9vdF9vdXRwdXRfZGlyLAotICAgICAgICAgICAgcGF0aF91dGlscy5yZWxh
dGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVs
YXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCiAgICAgICAgIHJldHVybiBvcy5wYXRoLnNw
bGl0ZXh0KG91dHB1dF9maWxlbmFtZSlbMF0gKyBtb2RpZmllcgogCi0gICAgZGVmIGNvbXBhcmVf
b3V0cHV0KHNlbGYsIGZpbGVuYW1lLCBwcm9jLCBvdXRwdXQsIHRlc3RfYXJncywgdGFyZ2V0KToK
KyAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgcG9ydCwgZmlsZW5hbWUsIG91dHB1dCwgdGVz
dF9hcmdzLCB0YXJnZXQpOgogICAgICAgICAiIiJNZXRob2QgdGhhdCBjb21wYXJlcyB0aGUgb3V0
cHV0IGZyb20gdGhlIHRlc3Qgd2l0aCB0aGUKICAgICAgICAgZXhwZWN0ZWQgdmFsdWUuCiAKQEAg
LTE0MSw3ICsxMzgsNiBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKIAogICAgICAgICBB
cmdzOgogICAgICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUK
LSAgICAgICAgICBwcm9jOiBhIHJlZmVyZW5jZSB0byB0aGUgdGVzdF9zaGVsbCBwcm9jZXNzCiAg
ICAgICAgICAgb3V0cHV0OiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHRl
c3QKICAgICAgICAgICB0ZXN0X2FyZ3M6IGEgVGVzdEFyZ3VtZW50cyBvYmplY3QgaG9sZGluZyBv
cHRpb25hbCBhZGRpdGlvbmFsCiAgICAgICAgICAgICAgIGFyZ3VtZW50cwpAQCAtMTUyLDggKzE0
OCw4IEBAIGNsYXNzIFRlc3RUeXBlQmFzZShvYmplY3QpOgogICAgICAgICAiIiIKICAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWQKIAotICAgIGRlZiB3cml0ZV9vdXRwdXRfZmlsZXMoc2VsZiwg
ZmlsZW5hbWUsIHRlc3RfdHlwZSwgZmlsZV90eXBlLCBvdXRwdXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBleHBlY3RlZCwgZGlmZj1UcnVlLCB3ZGlmZj1GYWxzZSk6CisgICAgZGVmIHdy
aXRlX291dHB1dF9maWxlcyhzZWxmLCBwb3J0LCBmaWxlbmFtZSwgdGVzdF90eXBlLCBmaWxlX3R5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGV4cGVjdGVkLCBkaWZmPVRy
dWUsIHdkaWZmPUZhbHNlKToKICAgICAgICAgIiIiV3JpdGVzIHRoZSB0ZXN0IG91dHB1dCwgdGhl
IGV4cGVjdGVkIG91dHB1dCBhbmQgb3B0aW9uYWxseSB0aGUgZGlmZgogICAgICAgICBiZXR3ZWVu
IHRoZSB0d28gdG8gZmlsZXMgaW4gdGhlIHJlc3VsdHMgZGlyZWN0b3J5LgogCkBAIC0xODYsODEg
KzE4MiwxNSBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAgICAgICAgIHJldHVy
bgogCiAgICAgICAgIGlmIGRpZmY6Ci0gICAgICAgICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVk
X2RpZmYoZXhwZWN0ZWQuc3BsaXRsaW5lcyhUcnVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXQuc3BsaXRsaW5lcyhUcnVlKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWUpCi0KKyAgICAgICAg
ICAgIGRpZmYgPSBwb3J0LmRpZmZfdGV4dChleHBlY3RlZCwgb3V0cHV0LCBleHBlY3RlZF9maWxl
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWUp
CiAgICAgICAgICAgICBkaWZmX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoZmlsZW5h
bWUsCiAgICAgICAgICAgICAgICAgdGVzdF90eXBlICsgc2VsZi5GSUxFTkFNRV9TVUZGSVhfRElG
RiArIGZpbGVfdHlwZSkKLSAgICAgICAgICAgIG9wZW4oZGlmZl9maWxlbmFtZSwgIndiIikud3Jp
dGUoJycuam9pbihkaWZmKSkKKyAgICAgICAgICAgIG9wZW4oZGlmZl9maWxlbmFtZSwgIndiIiku
d3JpdGUoZGlmZikKIAogICAgICAgICBpZiB3ZGlmZjoKICAgICAgICAgICAgICMgU2hlbGwgb3V0
IHRvIHdkaWZmIHRvIGdldCBjb2xvcmVkIGlubGluZSBkaWZmcy4KLSAgICAgICAgICAgIGV4ZWN1
dGFibGUgPSBwYXRoX3V0aWxzLndkaWZmX3BhdGgoKQotICAgICAgICAgICAgY21kID0gW2V4ZWN1
dGFibGUsCi0gICAgICAgICAgICAgICAgICAgJy0tc3RhcnQtZGVsZXRlPSMjV0RJRkZfREVMIyMn
LAotICAgICAgICAgICAgICAgICAgICctLWVuZC1kZWxldGU9IyNXRElGRl9FTkQjIycsCi0gICAg
ICAgICAgICAgICAgICAgJy0tc3RhcnQtaW5zZXJ0PSMjV0RJRkZfQUREIyMnLAotICAgICAgICAg
ICAgICAgICAgICctLWVuZC1pbnNlcnQ9IyNXRElGRl9FTkQjIycsCi0gICAgICAgICAgICAgICAg
ICAgZXhwZWN0ZWRfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgYWN0dWFsX2ZpbGVuYW1l
XQotICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3R5cGUgKyBzZWxmLkZJTEVOQU1FX1NV
RkZJWF9XRElGRikKLQotICAgICAgICAgICAgZ2xvYmFsIF93ZGlmZl9hdmFpbGFibGUKLQotICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgUHl0aG9uJ3MgUG9wZW4gaGFzIGEgYnVn
IHRoYXQgY2F1c2VzIGFueSBwaXBlcyBvcGVuZWQgdG8gYQotICAgICAgICAgICAgICAgICMgcHJv
Y2VzcyB0aGF0IGNhbid0IGJlIGV4ZWN1dGVkIHRvIGJlIGxlYWtlZC4gIFNpbmNlIHRoaXMKLSAg
ICAgICAgICAgICAgICAjIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHRvbGVyYXRl
IGV4ZWMgZmFpbHVyZXMKLSAgICAgICAgICAgICAgICAjIHRvIGdyYWNlZnVsbHkgaGFuZGxlIGNh
c2VzIHdoZXJlIHdkaWZmIGlzIG5vdCBpbnN0YWxsZWQsCi0gICAgICAgICAgICAgICAgIyB0aGUg
YnVnIHJlc3VsdHMgaW4gYSBtYXNzaXZlIGZpbGUgZGVzY3JpcHRvciBsZWFrLiBBcyBhCi0gICAg
ICAgICAgICAgICAgIyB3b3JrYXJvdW5kLCBpZiBhbiBleGVjIGZhaWx1cmUgaXMgZXZlciBleHBl
cmllbmNlZCBmb3IKLSAgICAgICAgICAgICAgICAjIHdkaWZmLCBhc3N1bWUgaXQncyBub3QgYXZh
aWxhYmxlLiAgVGhpcyB3aWxsIGxlYWsgb25lCi0gICAgICAgICAgICAgICAgIyBmaWxlIGRlc2Ny
aXB0b3IgYnV0IHRoYXQncyBiZXR0ZXIgdGhhbiBsZWFraW5nIGVhY2ggdGltZQotICAgICAgICAg
ICAgICAgICMgd2RpZmYgd291bGQgYmUgcnVuLgotICAgICAgICAgICAgICAgICMKLSAgICAgICAg
ICAgICAgICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1saXN0Lwot
ICAgICAgICAgICAgICAgICMgICAgMjAwOC1BdWd1c3QvNTA1NzUzLmh0bWwKLSAgICAgICAgICAg
ICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzMjEwCi0gICAgICAgICAgICAgICAg
IwotICAgICAgICAgICAgICAgICMgSXQgYWxzbyBoYXMgYSB0aHJlYWRpbmcgYnVnLCBzbyB3ZSBk
b24ndCBvdXRwdXQgd2RpZmYgaWYKLSAgICAgICAgICAgICAgICAjIHRoZSBQb3BlbiByYWlzZXMg
YSBWYWx1ZUVycm9yLgotICAgICAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9p
c3N1ZTEyMzYKLSAgICAgICAgICAgICAgICBpZiBfd2RpZmZfYXZhaWxhYmxlOgotICAgICAgICAg
ICAgICAgICAgICB3ZGlmZiA9IHN1YnByb2Nlc3MuUG9wZW4oCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KLSAgICAg
ICAgICAgICAgICAgICAgd2RpZmZfZmFpbGVkID0gRmFsc2UKLQotICAgICAgICAgICAgZXhjZXB0
IE9TRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgaWYgKGUuZXJybm8gPT0gZXJybm8uRU5PRU5U
IG9yIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTIG9yCi0gICAgICAgICAgICAgICAgICAgIGUuZXJy
bm8gPT0gZXJybm8uRUNISUxEKToKLSAgICAgICAgICAgICAgICAgICAgX3dkaWZmX2F2YWlsYWJs
ZSA9IEZhbHNlCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFp
c2UgZQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAg
d2RpZmZfZmFpbGVkID0gVHJ1ZQotCi0gICAgICAgICAgICBvdXQgPSBvcGVuKGZpbGVuYW1lLCAn
d2InKQotCi0gICAgICAgICAgICBpZiBub3QgX3dkaWZmX2F2YWlsYWJsZToKLSAgICAgICAgICAg
ICAgICBvdXQud3JpdGUoCi0gICAgICAgICAgICAgICAgICAgICJ3ZGlmZiBub3QgaW5zdGFsbGVk
Ljxici8+ICIKLSAgICAgICAgICAgICAgICAgICAgIklmIHlvdSdyZSBydW5uaW5nIE9TIFgsIHlv
dSBjYW4gaW5zdGFsbCB2aWEgbWFjcG9ydHMuIgotICAgICAgICAgICAgICAgICAgICAiPGJyLz4i
Ci0gICAgICAgICAgICAgICAgICAgICJJZiBydW5uaW5nIFVidW50dSBsaW51eCwgeW91IGNhbiBy
dW4gIgotICAgICAgICAgICAgICAgICAgICAiJ3N1ZG8gYXB0LWdldCBpbnN0YWxsIHdkaWZmJy4i
KQotICAgICAgICAgICAgZWxpZiB3ZGlmZl9mYWlsZWQ6Ci0gICAgICAgICAgICAgICAgb3V0Lndy
aXRlKCd3ZGlmZiBmYWlsZWQgZHVlIHRvIHJ1bm5pbmcgd2l0aCBtdWx0aXBsZSAnCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICd0ZXN0X3NoZWxscyBpbiBwYXJhbGxlbC4nKQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICB3ZGlmZiA9IGNnaS5lc2NhcGUod2RpZmYpCi0gICAg
ICAgICAgICAgICAgd2RpZmYgPSB3ZGlmZi5yZXBsYWNlKCcjI1dESUZGX0RFTCMjJywgJzxzcGFu
IGNsYXNzPWRlbD4nKQotICAgICAgICAgICAgICAgIHdkaWZmID0gd2RpZmYucmVwbGFjZSgnIyNX
RElGRl9BREQjIycsICc8c3BhbiBjbGFzcz1hZGQ+JykKLSAgICAgICAgICAgICAgICB3ZGlmZiA9
IHdkaWZmLnJlcGxhY2UoJyMjV0RJRkZfRU5EIyMnLCAnPC9zcGFuPicpCi0gICAgICAgICAgICAg
ICAgb3V0LndyaXRlKCc8aGVhZD48c3R5bGU+LmRlbCB7IGJhY2tncm91bmQ6ICNmYWE7IH0gJykK
LSAgICAgICAgICAgICAgICBvdXQud3JpdGUoJy5hZGQgeyBiYWNrZ3JvdW5kOiAjYWZhOyB9PC9z
dHlsZT48L2hlYWQ+JykKLSAgICAgICAgICAgICAgICBvdXQud3JpdGUoJzxwcmU+JyArIHdkaWZm
ICsgJzwvcHJlPicpCi0KLSAgICAgICAgICAgIG91dC5jbG9zZSgpCisgICAgICAgICAgICB3ZGlm
ZiA9IHBvcnQud2RpZmZfdGV4dChleHBlY3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVuYW1lKQor
ICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwgdGVz
dF90eXBlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5GSUxFTkFNRV9TVUZGSVhfV0RJRkYpCisgICAgICAgICAgICBvdXQgPSBvcGVuKGZpbGVuYW1l
LCAnd2InKS53cml0ZSh3ZGlmZikKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkKaW5k
ZXggMWFhNDI1My4uNTRiMzMyYiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkK
QEAgLTExLDcgKzExLDcgQEAKICMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAjIGRpc3RyaWJ1dGlv
bi4KLSMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0
cworIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAjCkBAIC0zNyw3ICszNyw2IEBAIGltcG9ydCBlcnJu
bwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcy5wYXRoCiAKLWZyb20gbGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IHBhdGhfdXRpbHMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVy
ZXMKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKIApAQCAtNjEsOCArNjAs
OCBAQCBjbGFzcyBUZXN0VGV4dERpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKICAg
ICAgICAgIiIiR2l2ZW4gdGhlIGZpbGVuYW1lIG9mIHRoZSB0ZXN0LCByZWFkIHRoZSBleHBlY3Rl
ZCBvdXRwdXQgZnJvbSBhIGZpbGUKICAgICAgICAgYW5kIG5vcm1hbGl6ZSB0aGUgdGV4dC4gIFJl
dHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgZXhwZWN0ZWQgdGV4dCwgb3IgJycKICAgICAgICAgaWYg
dGhlIGV4cGVjdGVkIG91dHB1dCBmaWxlIHdhcyBub3QgZm91bmQuIiIiCi0gICAgICAgICMgUmVh
ZCB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZXhwZWN0ZWQgdGV4dC4KLSAgICAgICAgZXhwZWN0ZWRf
ZmlsZW5hbWUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnR4dCcp
CisgICAgICAgICMgUmVhZCB0aGUgcG9ydC1zcGVjaWZpYyBleHBlY3RlZCB0ZXh0LgorICAgICAg
ICBleHBlY3RlZF9maWxlbmFtZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5h
bWUsICcudHh0JykKICAgICAgICAgaWYgc2hvd19zb3VyY2VzOgogICAgICAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygnVXNpbmcgJXMnICUgZXhwZWN0ZWRfZmlsZW5hbWUpCiAKQEAgLTc5LDcgKzc4LDcg
QEAgY2xhc3MgVGVzdFRleHREaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAgICAg
ICAgICMgTm9ybWFsaXplIGxpbmUgZW5kaW5ncwogICAgICAgICByZXR1cm4gdGV4dC5zdHJpcCgi
XHJcbiIpLnJlcGxhY2UoIlxyXG4iLCAiXG4iKSArICJcbiIKIAotICAgIGRlZiBjb21wYXJlX291
dHB1dChzZWxmLCBmaWxlbmFtZSwgcHJvYywgb3V0cHV0LCB0ZXN0X2FyZ3MsIHRhcmdldCk6Cisg
ICAgZGVmIGNvbXBhcmVfb3V0cHV0KHNlbGYsIHBvcnQsIGZpbGVuYW1lLCBvdXRwdXQsIHRlc3Rf
YXJncywgdGFyZ2V0KToKICAgICAgICAgIiIiSW1wbGVtZW50YXRpb24gb2YgQ29tcGFyZU91dHB1
dCB0aGF0IGNoZWNrcyB0aGUgb3V0cHV0IHRleHQgYWdhaW5zdAogICAgICAgICB0aGUgZXhwZWN0
ZWQgdGV4dCBmcm9tIHRoZSBMYXlvdXRUZXN0IGRpcmVjdG9yeS4iIiIKICAgICAgICAgZmFpbHVy
ZXMgPSBbXQpAQCAtOTUsMTAgKzk0LDEwIEBAIGNsYXNzIFRlc3RUZXh0RGlmZih0ZXN0X3R5cGVf
YmFzZS5UZXN0VHlwZUJhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXN0X2FyZ3Muc2hvd19zb3VyY2VzKQogCiAgICAgICAgICMgV3Jp
dGUgb3V0cHV0IGZpbGVzIGZvciBuZXcgdGVzdHMsIHRvby4KLSAgICAgICAgaWYgb3V0cHV0ICE9
IGV4cGVjdGVkOgorICAgICAgICBpZiBwb3J0LmNvbXBhcmVfdGV4dChvdXRwdXQsIGV4cGVjdGVk
KToKICAgICAgICAgICAgICMgVGV4dCBkb2Vzbid0IG1hdGNoLCB3cml0ZSBvdXRwdXQgZmlsZXMu
Ci0gICAgICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcyhmaWxlbmFtZSwgIiIsICIudHh0
Iiwgb3V0cHV0LCBleHBlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpZmY9VHJ1ZSwgd2RpZmY9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYud3JpdGVfb3V0cHV0X2Zp
bGVzKHBvcnQsIGZpbGVuYW1lLCAiIiwgIi50eHQiLCBvdXRwdXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgZGlmZj1UcnVlLCB3ZGlmZj1UcnVlKQogCiAg
ICAgICAgICAgICBpZiBleHBlY3RlZCA9PSAnJzoKICAgICAgICAgICAgICAgICBmYWlsdXJlcy5h
cHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ1Jlc3VsdChzZWxmKSkKQEAgLTEwNyw3
ICsxMDYsNyBAQCBjbGFzcyBUZXN0VGV4dERpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNl
KToKIAogICAgICAgICByZXR1cm4gZmFpbHVyZXMKIAotICAgIGRlZiBkaWZmX2ZpbGVzKHNlbGYs
IGZpbGUxLCBmaWxlMik6CisgICAgZGVmIGRpZmZfZmlsZXMoc2VsZiwgcG9ydCwgZmlsZTEsIGZp
bGUyKToKICAgICAgICAgIiIiRGlmZiB0d28gdGV4dCBmaWxlcy4KIAogICAgICAgICBBcmdzOgpA
QCAtMTE4LDUgKzExNyw1IEBAIGNsYXNzIFRlc3RUZXh0RGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0
VHlwZUJhc2UpOgogICAgICAgICAgIEZhbHNlIG90aGVyd2lzZS4KICAgICAgICAgIiIiCiAKLSAg
ICAgICAgcmV0dXJuIChzZWxmLmdldF9ub3JtYWxpemVkX3RleHQoZmlsZTEpICE9Ci0gICAgICAg
ICAgICAgICAgc2VsZi5nZXRfbm9ybWFsaXplZF90ZXh0KGZpbGUyKSkKKyAgICAgICAgcmV0dXJu
IHBvcnQuY29tcGFyZV90ZXh0KHNlbGYuZ2V0X25vcm1hbGl6ZWRfdGV4dChmaWxlMSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfbm9ybWFsaXplZF90ZXh0
KGZpbGUyKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48106</attachid>
            <date>2010-02-03 23:58:56 -0800</date>
            <delta_ts>2010-02-04 13:15:57 -0800</delta_ts>
            <desc>patch 1 of 4 - rename files to the new dir structure</desc>
            <filename>git.patch.3_1</filename>
            <type>text/plain</type>
            <size>186776</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBmYjg2NDE5Li5iZTIxNDViIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTAtMDIt
MDMgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUnViYmVy
LXN0YW1wZWQgYnkgRXJpYyBTaWVkZWwuCisKKyAgICAgICAgUmVuYW1lIGZpbGVzIGFzIHBhcnQg
b2YgcmVmYWN0b3JpbmcgdGhlIGxheW91dF90ZXN0cyBwYWNrYWdlLiBBbGwKKyAgICAgICAgdGhl
IHBsYXRmb3JtX3V0aWxzKiBtb2R1bGUsIHRoZSBwYXRoX3V0aWxzLnB5IG1vZHVsZSwgYW5kCisg
ICAgICAgIHRoZSBodHRwIHNlcnZlciBhbmQgd2ViIHNvY2tldCBzZXJ2ZXIgbW9kdWxlcyBhcmUg
bW92ZWQgaW50byBhIG5ldworICAgICAgICBwb3J0LyBwYWNrYWdlLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDUxMQorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVz
dWx0c19nZW5lcmF0b3IucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0
aW9ucy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS90ZXN0X2ZpbGVzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfc2hlbGxfdGhyZWFkLnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvX19pbml0X18ucHk6IFJlbmFtZWQgZnJv
bSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9wbGF0Zm9ybV91dGlscy5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weTogUmVuYW1lZCBmcm9tIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2FwYWNoZV9odHRw
X3NlcnZlci5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtX2xpbnV4LnB5OiBSZW5hbWVkIGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbGludXgucHku
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9t
YWMucHk6IFJlbmFtZWQgZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19tYWMucHkuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHk6IFJlbmFtZWQg
ZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9wbGF0Zm9ybV91dGlsc193aW4ucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weTogUmVuYW1lZCBmcm9tIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVy
LnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9z
ZXJ2ZXJfYmFzZS5weTogUmVuYW1lZCBmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfc2VydmVyX2Jhc2UucHkuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwZDIucGVtOiBSZW5hbWVk
IGZyb20gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvaHR0cGQyLnBlbS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2xpZ2h0dHBkLmNvbmY6IFJlbmFtZWQgZnJvbSBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9saWdodHRwZC5jb25mLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGF0aF91dGlscy5weTogUmVu
YW1lZCBmcm9tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3BhdGhfdXRpbHMucHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5OiBSZW5hbWVkIGZyb20gV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd2Vic29ja2V0
X3NlcnZlci5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJh
c2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5OgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvZnV6enlfaW1hZ2VfZGlm
Zi5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVz
L2ltYWdlX2RpZmYucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
dGVzdF90eXBlcy90ZXN0X3R5cGVfYmFzZS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weToKKwogMjAxMC0wMi0wMyAgQ3Nh
YmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJ1YmJlci1zdGFt
cGVkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvYXBhY2hlX2h0dHBfc2VydmVyLnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
YXBhY2hlX2h0dHBfc2VydmVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDdh
MzM1Li4wMDAwMDAwCi0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2FwYWNoZV9odHRwX3NlcnZlci5weQorKysgL2Rldi9udWxsCkBA
IC0xLDIyOSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0j
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIg
dGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJB
IGNsYXNzIHRvIHN0YXJ0L3N0b3AgdGhlIGFwYWNoZSBodHRwIHNlcnZlciB1c2VkIGJ5IGxheW91
dCB0ZXN0cy4iIiIKLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IG9z
Ci1pbXBvcnQgcmUKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi0KLWltcG9ydCBodHRw
X3NlcnZlcl9iYXNlCi1pbXBvcnQgcGF0aF91dGlscwotaW1wb3J0IHBsYXRmb3JtX3V0aWxzCi0K
LQotY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZl
ckJhc2UpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dF9kaXIpOgotICAgICAgICAi
IiJBcmdzOgotICAgICAgICAgIG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBs
YXlvdXQgdGVzdCByZXN1bHQgZGlyZWN0b3J5Ci0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9v
dXRwdXRfZGlyID0gb3V0cHV0X2RpcgotICAgICAgICBzZWxmLl9odHRwZF9wcm9jID0gTm9uZQot
ICAgICAgICBwYXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KG91dHB1dF9kaXIpCi0KLSAg
ICAgICAgc2VsZi5tYXBwaW5ncyA9IFt7J3BvcnQnOiA4MDAwfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICB7J3BvcnQnOiA4MDgwfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQn
OiA4MDgxfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnc3NsY2Vy
dCc6IFRydWV9XQotCi0gICAgICAgICMgVGhlIHVwc3RyZWFtIC5jb25mIGZpbGUgYXNzdW1lZCB0
aGUgZXhpc3RlbmNlIG9mIC90bXAvV2ViS2l0IGZvcgotICAgICAgICAjIHBsYWNpbmcgYXBhY2hl
IGZpbGVzIGxpa2UgdGhlIGxvY2sgZmlsZSB0aGVyZS4KLSAgICAgICAgc2VsZi5fcnVudGltZV9w
YXRoID0gb3MucGF0aC5qb2luKCIvdG1wIiwgIldlYktpdCIpCi0gICAgICAgIHBhdGhfdXRpbHMu
bWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5fcnVudGltZV9wYXRoKQotCi0gICAgICAgICMgVGhl
IFBJRCByZXR1cm5lZCB3aGVuIEFwYWNoZSBpcyBzdGFydGVkIGdvZXMgYXdheSAoZHVlIHRvIGRy
b3BwaW5nCi0gICAgICAgICMgcHJpdmlsZWdlcz8pLiBUaGUgcHJvcGVyIGNvbnRyb2xsaW5nIFBJ
RCBpcyB3cml0dGVuIHRvIGEgZmlsZSBpbiB0aGUKLSAgICAgICAgIyBhcGFjaGUgcnVudGltZSBk
aXJlY3RvcnkuCi0gICAgICAgIHNlbGYuX3BpZF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3J1
bnRpbWVfcGF0aCwgJ2h0dHBkLnBpZCcpCi0KLSAgICAgICAgdGVzdF9kaXIgPSBwYXRoX3V0aWxz
LnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLAotICAgICAgICAgICAgJ0xh
eW91dFRlc3RzJykKLSAgICAgICAganNfdGVzdF9yZXNvdXJjZXNfZGlyID0gc2VsZi5fY3lnd2lu
X3NhZmVfam9pbih0ZXN0X2RpciwgImZhc3QiLCAianMiLAotICAgICAgICAgICAgInJlc291cmNl
cyIpCi0gICAgICAgIG1pbWVfdHlwZXNfcGF0aCA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4odGVz
dF9kaXIsICJodHRwIiwgImNvbmYiLAotICAgICAgICAgICAgIm1pbWUudHlwZXMiKQotICAgICAg
ICBjZXJ0X2ZpbGUgPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2luKHRlc3RfZGlyLCAiaHR0cCIsICJj
b25mIiwKLSAgICAgICAgICAgICJ3ZWJraXQtaHR0cGQucGVtIikKLSAgICAgICAgYWNjZXNzX2xv
ZyA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4ob3V0cHV0X2RpciwgImFjY2Vzc19sb2cudHh0IikK
LSAgICAgICAgZXJyb3JfbG9nID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbihvdXRwdXRfZGlyLCAi
ZXJyb3JfbG9nLnR4dCIpCi0gICAgICAgIGRvY3VtZW50X3Jvb3QgPSBzZWxmLl9jeWd3aW5fc2Fm
ZV9qb2luKHRlc3RfZGlyLCAiaHR0cCIsICJ0ZXN0cyIpCi0KLSAgICAgICAgZXhlY3V0YWJsZSA9
IHBsYXRmb3JtX3V0aWxzLmFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKQotICAgICAgICBpZiBzZWxm
Ll9pc19jeWd3aW4oKToKLSAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBzZWxmLl9nZXRfY3lnd2lu
X3BhdGgoZXhlY3V0YWJsZSkKLQotICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwKLSAgICAgICAg
ICAgICctZicsIHNlbGYuX2dldF9hcGFjaGVfY29uZmlnX2ZpbGVfcGF0aCh0ZXN0X2Rpciwgb3V0
cHV0X2RpciksCi0gICAgICAgICAgICAnLUMnLCAiXCdEb2N1bWVudFJvb3QgJXNcJyIgJSBkb2N1
bWVudF9yb290LAotICAgICAgICAgICAgJy1jJywgIlwnQWxpYXMgL2pzLXRlc3QtcmVzb3VyY2Vz
ICVzXCciICUganNfdGVzdF9yZXNvdXJjZXNfZGlyLAotICAgICAgICAgICAgJy1DJywgIlwnTGlz
dGVuICVzXCciICUgIjEyNy4wLjAuMTo4MDAwIiwKLSAgICAgICAgICAgICctQycsICJcJ0xpc3Rl
biAlc1wnIiAlICIxMjcuMC4wLjE6ODA4MSIsCi0gICAgICAgICAgICAnLWMnLCAiXCdUeXBlc0Nv
bmZpZyBcIiVzXCJcJyIgJSBtaW1lX3R5cGVzX3BhdGgsCi0gICAgICAgICAgICAnLWMnLCAiXCdD
dXN0b21Mb2cgXCIlc1wiIGNvbW1vblwnIiAlIGFjY2Vzc19sb2csCi0gICAgICAgICAgICAnLWMn
LCAiXCdFcnJvckxvZyBcIiVzXCJcJyIgJSBlcnJvcl9sb2csCi0gICAgICAgICAgICAnLUMnLCAi
XCdVc2VyIFwiJXNcIlwnIiAlIG9zLmVudmlyb24uZ2V0KCJVU0VSTkFNRSIsCi0gICAgICAgICAg
ICAgICAgb3MuZW52aXJvbi5nZXQoIlVTRVIiLCAiIikpXQotCi0gICAgICAgIGlmIHNlbGYuX2lz
X2N5Z3dpbigpOgotICAgICAgICAgICAgY3lnYmluID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2JpbicpCi0gICAgICAgICAgICAjIE5vdCBlbnRp
cmVseSBzdXJlIHdoeSwgYnV0IGZyb20gY3lnd2luIHdlIG5lZWQgdG8gcnVuIHRoZQotICAgICAg
ICAgICAgIyBodHRwZCBjb21tYW5kIHRocm91Z2ggYmFzaC4KLSAgICAgICAgICAgIHNlbGYuX3N0
YXJ0X2NtZCA9IFsKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oY3lnYmluLCAnYmFzaC5l
eGUnKSwKLSAgICAgICAgICAgICAgICAnLWMnLAotICAgICAgICAgICAgICAgICdQQVRIPSVzICVz
JyAlIChzZWxmLl9nZXRfY3lnd2luX3BhdGgoY3lnYmluKSwgIiAiLmpvaW4oY21kKSksCi0gICAg
ICAgICAgICAgIF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgVE9ETyhvamFuKTogV2hl
biB3ZSBnZXQgY3lnd2luIHVzaW5nIEFwYWNoZSAyLCB1c2Ugc2V0IHRoZQotICAgICAgICAgICAg
IyBjZXJ0IGZpbGUgZm9yIGN5Z3dpbiBhcyB3ZWxsLgotICAgICAgICAgICAgY21kLmV4dGVuZChb
Jy1jJywgIlwnU1NMQ2VydGlmaWNhdGVGaWxlICVzXCciICUgY2VydF9maWxlXSkKLSAgICAgICAg
ICAgICMgSm9pbiB0aGUgc3RyaW5nIGhlcmUgc28gdGhhdCBDeWd3aW4vV2luZG93cyBhbmQgTWFj
L0xpbnV4Ci0gICAgICAgICAgICAjIGNhbiB1c2UgdGhlIHNhbWUgY29kZS4gT3RoZXJ3aXNlLCB3
ZSBjb3VsZCByZW1vdmUgdGhlIHNpbmdsZQotICAgICAgICAgICAgIyBxdW90ZXMgYWJvdmUgYW5k
IGtlZXAgY21kIGFzIGEgc2VxdWVuY2UuCi0gICAgICAgICAgICBzZWxmLl9zdGFydF9jbWQgPSAi
ICIuam9pbihjbWQpCi0KLSAgICBkZWYgX2lzX2N5Z3dpbihzZWxmKToKLSAgICAgICAgcmV0dXJu
IHN5cy5wbGF0Zm9ybSBpbiAoIndpbjMyIiwgImN5Z3dpbiIpCi0KLSAgICBkZWYgX2N5Z3dpbl9z
YWZlX2pvaW4oc2VsZiwgKnBhcnRzKToKLSAgICAgICAgIiIiUmV0dXJucyBhIHBsYXRmb3JtIGFw
cHJvcHJpYXRlIHBhdGguIiIiCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oKnBhcnRzKQot
ICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9n
ZXRfY3lnd2luX3BhdGgocGF0aCkKLSAgICAgICAgcmV0dXJuIHBhdGgKLQotICAgIGRlZiBfZ2V0
X2N5Z3dpbl9wYXRoKHNlbGYsIHBhdGgpOgotICAgICAgICAiIiJDb252ZXJ0IGEgV2luZG93cyBw
YXRoIHRvIGEgY3lnd2luIHBhdGguCi0KLSAgICAgICAgVGhlIGN5Z3BhdGggdXRpbGl0eSBpbnNp
c3RzIG9uIGNvbnZlcnRpbmcgcGF0aHMgdGhhdCBpdCB0aGlua3MgYXJlCi0gICAgICAgIEN5Z3dp
biByb290IHBhdGhzIHRvIHdoYXQgaXQgdGhpbmtzIHRoZSBjb3JyZWN0IHJvb3RzIGFyZS4gIFNv
IHBhdGhzCi0gICAgICAgIHN1Y2ggYXMgIkM6XGJcc2xhdmVcd2Via2l0LXJlbGVhc2VcYnVpbGRc
dGhpcmRfcGFydHlcY3lnd2luXGJpbiIKLSAgICAgICAgYXJlIGNvbnZlcnRlZCB0byBwbGFpbiAi
L3Vzci9iaW4iLiAgVG8gYXZvaWQgdGhpcywgd2UKLSAgICAgICAgZG8gdGhlIGNvbnZlcnNpb24g
bWFudWFsbHkuCi0KLSAgICAgICAgVGhlIHBhdGggaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYWJzb2x1
dGUgcGF0aCwgb24gYW55IGRyaXZlLgotICAgICAgICAiIiIKLSAgICAgICAgZHJpdmVfcmVnZXhw
ID0gcmUuY29tcGlsZShyJyhbYS16XSk6Wy9cXF0nLCByZS5JR05PUkVDQVNFKQotCi0gICAgICAg
IGRlZiBsb3dlcl9kcml2ZShtYXRjaG9iaik6Ci0gICAgICAgICAgICByZXR1cm4gJy9jeWdkcml2
ZS8lcy8nICUgbWF0Y2hvYmouZ3JvdXAoMSkubG93ZXIoKQotICAgICAgICBwYXRoID0gZHJpdmVf
cmVnZXhwLnN1Yihsb3dlcl9kcml2ZSwgcGF0aCkKLSAgICAgICAgcmV0dXJuIHBhdGgucmVwbGFj
ZSgnXFwnLCAnLycpCi0KLSAgICBkZWYgX2dldF9hcGFjaGVfY29uZmlnX2ZpbGVfcGF0aChzZWxm
LCB0ZXN0X2Rpciwgb3V0cHV0X2Rpcik6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8g
dGhlIGFwYWNoZSBjb25maWcgZmlsZSB0byB1c2UuCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAg
dGVzdF9kaXI6IGFic29sdXRlIHBhdGggdG8gdGhlIExheW91dFRlc3RzIGRpcmVjdG9yeS4KLSAg
ICAgICAgICBvdXRwdXRfZGlyOiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1
bHRzIGRpcmVjdG9yeS4KLSAgICAgICAgIiIiCi0gICAgICAgIGh0dHBkX2NvbmZpZyA9IHBsYXRm
b3JtX3V0aWxzLmFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCkKLSAgICAgICAgaHR0cGRfY29uZmln
X2NvcHkgPSBvcy5wYXRoLmpvaW4ob3V0cHV0X2RpciwgImh0dHBkLmNvbmYiKQotICAgICAgICBo
dHRwZF9jb25mID0gb3BlbihodHRwZF9jb25maWcpLnJlYWQoKQotICAgICAgICBpZiBzZWxmLl9p
c19jeWd3aW4oKToKLSAgICAgICAgICAgICMgVGhpcyBpcyBhIGdyb3NzIGhhY2ssIGJ1dCBpdCBs
ZXRzIHVzIHVzZSB0aGUgdXBzdHJlYW0gLmNvbmYgZmlsZQotICAgICAgICAgICAgIyBhbmQgb3Vy
IGNoZWNrZWQgaW4gY3lnd2luLiBUaGlzIHRlbGxzIHRoZSBzZXJ2ZXIgdGhlIHJvb3QKLSAgICAg
ICAgICAgICMgZGlyZWN0b3J5IHRvIGxvb2sgaW4gZm9yIC5zbyBtb2R1bGVzLiBJdCB3aWxsIHVz
ZSB0aGlzIHBhdGgKLSAgICAgICAgICAgICMgcGx1cyB0aGUgcmVsYXRpdmUgcGF0aHMgdG8gdGhl
IC5zbyBmaWxlcyBsaXN0ZWQgaW4gdGhlIC5jb25mCi0gICAgICAgICAgICAjIGZpbGUuIFdlIGhh
dmUgYXBhY2hlL2N5Z3dpbiBjaGVja2VkIGludG8gb3VyIHRyZWUgc28KLSAgICAgICAgICAgICMg
cGVvcGxlIGRvbid0IGhhdmUgdG8gaW5zdGFsbCBpdCBpbnRvIHRoZWlyIGN5Z3dpbi4KLSAgICAg
ICAgICAgIGN5Z3VzciA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5Jywg
J2N5Z3dpbicsICd1c3InKQotICAgICAgICAgICAgaHR0cGRfY29uZiA9IGh0dHBkX2NvbmYucmVw
bGFjZSgnU2VydmVyUm9vdCAiL3VzciInLAotICAgICAgICAgICAgICAgICdTZXJ2ZXJSb290ICIl
cyInICUgc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGN5Z3VzcikpCi0KLSAgICAgICAgIyBUT0RPKG9q
YW4pOiBJbnN0ZWFkIG9mIHdyaXRpbmcgYW4gZXh0cmEgZmlsZSwgY2hlY2tpbiBhIGNvbmYgZmls
ZQotICAgICAgICAjIHVwc3RyZWFtLiBPciwgZXZlbiBiZXR0ZXIsIHVwc3RyZWFtL2RlbGV0ZSBh
bGwgb3VyIGNocm9tZSBodHRwCi0gICAgICAgICMgdGVzdHMgc28gd2UgZG9uJ3QgbmVlZCB0aGlz
IHNwZWNpYWwtY2FzZWQgRG9jdW1lbnRSb290IGFuZCB0aGVuCi0gICAgICAgICMganVzdCB1c2Ug
dGhlIHVwc3RyZWFtCi0gICAgICAgICMgY29uZiBmaWxlLgotICAgICAgICBjaHJvbWVfZG9jdW1l
bnRfcm9vdCA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICdkYXRhJywKLSAg
ICAgICAgICAgICdsYXlvdXRfdGVzdHMnKQotICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToK
LSAgICAgICAgICAgIGNocm9tZV9kb2N1bWVudF9yb290ID0gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRo
KGNocm9tZV9kb2N1bWVudF9yb290KQotICAgICAgICBodHRwZF9jb25mID0gKGh0dHBkX2NvbmYg
KwotICAgICAgICAgICAgc2VsZi5fZ2V0X3ZpcnR1YWxfaG9zdF9jb25maWcoY2hyb21lX2RvY3Vt
ZW50X3Jvb3QsIDgwODEpKQotCi0gICAgICAgIGYgPSBvcGVuKGh0dHBkX2NvbmZpZ19jb3B5LCAn
d2InKQotICAgICAgICBmLndyaXRlKGh0dHBkX2NvbmYpCi0gICAgICAgIGYuY2xvc2UoKQotCi0g
ICAgICAgIGlmIHNlbGYuX2lzX2N5Z3dpbigpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dl
dF9jeWd3aW5fcGF0aChodHRwZF9jb25maWdfY29weSkKLSAgICAgICAgcmV0dXJuIGh0dHBkX2Nv
bmZpZ19jb3B5Ci0KLSAgICBkZWYgX2dldF92aXJ0dWFsX2hvc3RfY29uZmlnKHNlbGYsIGRvY3Vt
ZW50X3Jvb3QsIHBvcnQsIHNzbD1GYWxzZSk6Ci0gICAgICAgICIiIlJldHVybnMgYSA8VmlydHVh
bEhvc3Q+IGRpcmVjdGl2ZSBibG9jayBmb3IgYW4gaHR0cGQuY29uZiBmaWxlLgotICAgICAgICBJ
dCB3aWxsIGxpc3RlbiB0byAxMjcuMC4wLjEgb24gZWFjaCBvZiB0aGUgZ2l2ZW4gcG9ydC4KLSAg
ICAgICAgIiIiCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oKCc8VmlydHVhbEhvc3QgMTI3LjAu
MC4xOiVzPicgJSBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAnRG9jdW1lbnRSb290
ICVzJyAlIGRvY3VtZW50X3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNzbCBhbmQg
J1NTTEVuZ2luZSBPbicgb3IgJycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICc8L1ZpcnR1
YWxIb3N0PicsICcnKSkKLQotICAgIGRlZiBfc3RhcnRfaHR0cGRfcHJvY2VzcyhzZWxmKToKLSAg
ICAgICAgIiIiU3RhcnRzIHRoZSBodHRwZCBwcm9jZXNzIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhl
cmUgd2VyZSBlcnJvcnMuIiIiCi0gICAgICAgICMgVXNlIHNoZWxsPVRydWUgYmVjYXVzZSB3ZSBq
b2luIHRoZSBhcmd1bWVudHMgaW50byBhIHN0cmluZyBmb3IKLSAgICAgICAgIyB0aGUgc2FrZSBv
ZiBXaW5kb3cvQ3lnd2luIGFuZCBpdCBuZWVkcyBxdW90aW5nIHRoYXQgYnJlYWtzCi0gICAgICAg
ICMgc2hlbGw9RmFsc2UuCi0gICAgICAgIHNlbGYuX2h0dHBkX3Byb2MgPSBzdWJwcm9jZXNzLlBv
cGVuKHNlbGYuX3N0YXJ0X2NtZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgIHNoZWxsPVRydWUp
Ci0gICAgICAgIGVyciA9IHNlbGYuX2h0dHBkX3Byb2Muc3RkZXJyLnJlYWQoKQotICAgICAgICBp
ZiBsZW4oZXJyKToKLSAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoZXJyKQotICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgc3RhcnQoc2VsZik6
Ci0gICAgICAgICIiIlN0YXJ0cyB0aGUgYXBhY2hlIGh0dHAgc2VydmVyLiIiIgotICAgICAgICAj
IFN0b3AgYW55IGN1cnJlbnRseSBydW5uaW5nIHNlcnZlcnMuCi0gICAgICAgIHNlbGYuc3RvcCgp
Ci0KLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RhcnRpbmcgYXBhY2hlIGh0dHAgc2VydmVyIikK
LSAgICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndhaXRfZm9yX2FjdGlvbihzZWxmLl9zdGFy
dF9odHRwZF9wcm9jZXNzKQotICAgICAgICBpZiBzZXJ2ZXJfc3RhcnRlZDoKLSAgICAgICAgICAg
IGxvZ2dpbmcuZGVidWcoIkFwYWNoZSBzdGFydGVkLiBUZXN0aW5nIHBvcnRzIikKLSAgICAgICAg
ICAgIHNlcnZlcl9zdGFydGVkID0gc2VsZi53YWl0X2Zvcl9hY3Rpb24oCi0gICAgICAgICAgICAg
ICAgc2VsZi5pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMpCi0KLSAgICAgICAgaWYgc2Vy
dmVyX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTZXJ2ZXIgc3VjY2Vzc2Z1
bGx5IHN0YXJ0ZWQiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCdGYWlsZWQgdG8gc3RhcnQgaHR0cCBzZXJ2ZXInKQotCi0gICAgZGVmIHN0b3Aoc2VsZik6Ci0g
ICAgICAgICIiIlN0b3BzIHRoZSBhcGFjaGUgaHR0cCBzZXJ2ZXIuIiIiCi0gICAgICAgIGxvZ2dp
bmcuZGVidWcoIlNodXR0aW5nIGRvd24gYW55IHJ1bm5pbmcgaHR0cCBzZXJ2ZXJzIikKLSAgICAg
ICAgaHR0cGRfcGlkID0gTm9uZQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9waWRf
ZmlsZSk6Ci0gICAgICAgICAgICBodHRwZF9waWQgPSBpbnQob3BlbihzZWxmLl9waWRfZmlsZSku
cmVhZGxpbmUoKSkKLSAgICAgICAgcGF0aF91dGlscy5zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0
cGRfcGlkKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZlci5weQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZWJjOWY0OC4uMDAwMDAwMAotLS0gYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3Nl
cnZlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi0jIS91c3IvYmluL2VudiBw
eXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmli
dXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0iIiJBIGNsYXNzIHRvIGhlbHAgc3RhcnQvc3RvcCB0aGUgbGln
aHR0cGQgc2VydmVyIHVzZWQgYnkgbGF5b3V0IHRlc3RzLiIiIgotCi0KLWltcG9ydCBsb2dnaW5n
Ci1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCBvcwotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN1YnBy
b2Nlc3MKLWltcG9ydCBzeXMKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHRpbWUKLWltcG9ydCB1
cmxsaWIKLQotaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKLWltcG9ydCBwYXRoX3V0aWxzCi0KLWNs
YXNzIEh0dHBkTm90U3RhcnRlZChFeGNlcHRpb24pOiBwYXNzCi0KLWRlZiByZW1vdmVfbG9nX2Zp
bGVzKGZvbGRlciwgc3RhcnRzX3dpdGgpOgotICAgIGZpbGVzID0gb3MubGlzdGRpcihmb2xkZXIp
Ci0gICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0gICAgICAgIGlmIGZpbGUuc3RhcnRzd2l0aChzdGFy
dHNfd2l0aCk6Ci0gICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oZm9sZGVyLCBm
aWxlKQotICAgICAgICAgICAgb3MucmVtb3ZlKGZ1bGxfcGF0aCkKLQotCi1jbGFzcyBMaWdodHRw
ZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKLSAgICAjIFdlYmtpdCB0ZXN0cwot
ICAgIHRyeToKLSAgICAgICAgX3dlYmtpdF90ZXN0cyA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jh
c2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdMYXlvdXRUZXN0cycsICdodHRwJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzJykKLSAgICAgICAg
X2pzX3Rlc3RfcmVzb3VyY2UgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0
eScsICdXZWJLaXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ0xheW91dFRlc3RzJywgJ2Zhc3QnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2pzJywgJ3Jlc291cmNlcycpCi0gICAg
ZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgotICAgICAgICBfd2Via2l0X3Rlc3RzID0g
Tm9uZQotICAgICAgICBfanNfdGVzdF9yZXNvdXJjZSA9IE5vbmUKLQotICAgICMgUGF0aCB3aGVy
ZSB3ZSBjYW4gYWNjZXNzIGFsbCBvZiB0aGUgdGVzdHMKLSAgICBfYWxsX3Rlc3RzID0gcGF0aF91
dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3RzJykKLSAg
ICAjIFNlbGYgZ2VuZXJhdGVkIGNlcnRpZmljYXRlIGZvciBTU0wgc2VydmVyIChmb3IgY2xpZW50
IGNlcnQgZ2V0Ci0gICAgIyA8YmFzZS1wYXRoPlxjaHJvbWVcdGVzdFxkYXRhXHNzbFxjZXJ0c1xy
b290X2NhX2NlcnQuY3J0KQotICAgIF9wZW1fZmlsZSA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jh
c2UoCi0gICAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwg
J2h0dHBkMi5wZW0nKQotICAgICMgT25lIG1hcHBpbmcgd2hlcmUgd2UgY2FuIGdldCB0byBldmVy
eXRoaW5nCi0gICAgVklSVFVBTENPTkZJRyA9IFt7J3BvcnQnOiA4MDgxLCAnZG9jcm9vdCc6IF9h
bGxfdGVzdHN9XQotCi0gICAgaWYgX3dlYmtpdF90ZXN0czoKLSAgICAgICAgVklSVFVBTENPTkZJ
Ry5leHRlbmQoCi0gICAgICAgICAgIyBUaHJlZSBtYXBwaW5ncyAob25lIHdpdGggU1NMIGVuYWJs
ZWQpIGZvciBMYXlvdXRUZXN0cyBodHRwIHRlc3RzCi0gICAgICAgICAgW3sncG9ydCc6IDgwMDAs
ICdkb2Nyb290JzogX3dlYmtpdF90ZXN0c30sCi0gICAgICAgICAgIHsncG9ydCc6IDgwODAsICdk
b2Nyb290JzogX3dlYmtpdF90ZXN0c30sCi0gICAgICAgICAgIHsncG9ydCc6IDg0NDMsICdkb2Ny
b290JzogX3dlYmtpdF90ZXN0cywgJ3NzbGNlcnQnOiBfcGVtX2ZpbGV9XSkKLQotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyLCBiYWNrZ3JvdW5kPUZhbHNlLCBwb3J0PU5vbmUsCi0g
ICAgICAgICAgICAgICAgIHJvb3Q9Tm9uZSwgcmVnaXN0ZXJfY3lnd2luPU5vbmUsIHJ1bl9iYWNr
Z3JvdW5kPU5vbmUpOgotICAgICAgICAiIiJBcmdzOgotICAgICAgICAgIG91dHB1dF9kaXI6IHRo
ZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgZGlyZWN0b3J5Ci0gICAg
ICAgICIiIgotICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgotICAgICAgICBz
ZWxmLl9wcm9jZXNzID0gTm9uZQotICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAotICAgICAgICBz
ZWxmLl9yb290ID0gcm9vdAotICAgICAgICBzZWxmLl9yZWdpc3Rlcl9jeWd3aW4gPSByZWdpc3Rl
cl9jeWd3aW4KLSAgICAgICAgc2VsZi5fcnVuX2JhY2tncm91bmQgPSBydW5fYmFja2dyb3VuZAot
ICAgICAgICBpZiBzZWxmLl9wb3J0OgotICAgICAgICAgICAgc2VsZi5fcG9ydCA9IGludChzZWxm
Ll9wb3J0KQotCi0gICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxm
Ll9wcm9jZXNzICE9IE5vbmUKLQotICAgIGRlZiBzdGFydChzZWxmKToKLSAgICAgICAgaWYgc2Vs
Zi5pc19ydW5uaW5nKCk6Ci0gICAgICAgICAgICByYWlzZSAnTGlnaHR0cGQgYWxyZWFkeSBydW5u
aW5nJwotCi0gICAgICAgIGJhc2VfY29uZl9maWxlID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgndGhpcmRfcGFydHknLAotICAgICAgICAgICAgJ1dlYktpdFRvb2xzJywgJ1NjcmlwdHMnLCAn
d2Via2l0cHknLCAnbGF5b3V0X3Rlc3RzJywKLSAgICAgICAgICAgICdsYXlvdXRfcGFja2FnZScs
ICdsaWdodHRwZC5jb25mJykKLSAgICAgICAgb3V0X2NvbmZfZmlsZSA9IG9zLnBhdGguam9pbihz
ZWxmLl9vdXRwdXRfZGlyLCAnbGlnaHR0cGQuY29uZicpCi0gICAgICAgIHRpbWVfc3RyID0gdGlt
ZS5zdHJmdGltZSgiJWQlYiVZLSVIJU0lUyIpCi0gICAgICAgIGFjY2Vzc19maWxlX25hbWUgPSAi
YWNjZXNzLmxvZy0iICsgdGltZV9zdHIgKyAiLnR4dCIKLSAgICAgICAgYWNjZXNzX2xvZyA9IG9z
LnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBhY2Nlc3NfZmlsZV9uYW1lKQotICAgICAgICBs
b2dfZmlsZV9uYW1lID0gImVycm9yLmxvZy0iICsgdGltZV9zdHIgKyAiLnR4dCIKLSAgICAgICAg
ZXJyb3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxlX25hbWUp
Ci0KLSAgICAgICAgIyBSZW1vdmUgb2xkIGxvZyBmaWxlcy4gV2Ugb25seSBuZWVkIHRvIGtlZXAg
dGhlIGxhc3Qgb25lcy4KLSAgICAgICAgcmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGly
LCAiYWNjZXNzLmxvZy0iKQotICAgICAgICByZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9k
aXIsICJlcnJvci5sb2ctIikKLQotICAgICAgICAjIFdyaXRlIG91dCB0aGUgY29uZmlnCi0gICAg
ICAgIGYgPSBmaWxlKGJhc2VfY29uZl9maWxlLCAncmInKQotICAgICAgICBiYXNlX2NvbmYgPSBm
LnJlYWQoKQotICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICBmID0gZmlsZShvdXRfY29uZl9m
aWxlLCAnd2InKQotICAgICAgICBmLndyaXRlKGJhc2VfY29uZikKLQotICAgICAgICAjIFdyaXRl
IG91dCBvdXIgY2dpIGhhbmRsZXJzLiAgUnVuIHBlcmwgdGhyb3VnaCBlbnYgc28gdGhhdCBpdAot
ICAgICAgICAjIHByb2Nlc3NlcyB0aGUgIyEgbGluZSBhbmQgcnVucyBwZXJsIHdpdGggdGhlIHBy
b3BlciBjb21tYW5kCi0gICAgICAgICMgbGluZSBhcmd1bWVudHMuIEVtdWxhdGUgYXBhY2hlJ3Mg
bW9kX2FzaXMgd2l0aCBhIGNhdCBjZ2kgaGFuZGxlci4KLSAgICAgICAgZi53cml0ZSgoJ2NnaS5h
c3NpZ24gPSAoICIuY2dpIiAgPT4gIi91c3IvYmluL2VudiIsXG4nCi0gICAgICAgICAgICAgICAg
ICcgICAgICAgICAgICAgICAiLnBsIiAgID0+ICIvdXNyL2Jpbi9lbnYiLFxuJwotICAgICAgICAg
ICAgICAgICAnICAgICAgICAgICAgICAgIi5hc2lzIiA9PiAiL2Jpbi9jYXQiLFxuJwotICAgICAg
ICAgICAgICAgICAnICAgICAgICAgICAgICAgIi5waHAiICA9PiAiJXMiIClcblxuJykgJQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMubGlnaHR0cGRfcGhw
X3BhdGgoKSkKLQotICAgICAgICAjIFNldHVwIGxvZyBmaWxlcwotICAgICAgICBmLndyaXRlKCgn
c2VydmVyLmVycm9ybG9nID0gIiVzIlxuJwotICAgICAgICAgICAgICAgICAnYWNjZXNzbG9nLmZp
bGVuYW1lID0gIiVzIlxuXG4nKSAlIChlcnJvcl9sb2csIGFjY2Vzc19sb2cpKQotCi0gICAgICAg
ICMgU2V0dXAgdXBsb2FkIGZvbGRlcnMuIFVwbG9hZCBmb2xkZXIgaXMgdG8gaG9sZCB0ZW1wb3Jh
cnkgdXBsb2FkIGZpbGVzCi0gICAgICAgICMgYW5kIGFsc28gUE9TVCBkYXRhLiBUaGlzIGlzIHVz
ZWQgdG8gc3VwcG9ydCBYSFIgbGF5b3V0IHRlc3RzIHRoYXQKLSAgICAgICAgIyBkb2VzIFBPU1Qu
Ci0gICAgICAgIGYud3JpdGUoKCdzZXJ2ZXIudXBsb2FkLWRpcnMgPSAoICIlcyIgKVxuXG4nKSAl
IChzZWxmLl9vdXRwdXRfZGlyKSkKLQotICAgICAgICAjIFNldHVwIGEgbGluayB0byB3aGVyZSB0
aGUganMgdGVzdCB0ZW1wbGF0ZXMgYXJlIHN0b3JlZAotICAgICAgICBmLndyaXRlKCgnYWxpYXMu
dXJsID0gKCAiL2pzLXRlc3QtcmVzb3VyY2VzIiA9PiAiJXMiIClcblxuJykgJQotICAgICAgICAg
ICAgICAgICAgICAoc2VsZi5fanNfdGVzdF9yZXNvdXJjZSkpCi0KLSAgICAgICAgIyBkdW1wIG91
dCBvZiB2aXJ0dWFsIGhvc3QgY29uZmlnIGF0IHRoZSBib3R0b20uCi0gICAgICAgIGlmIHNlbGYu
X3Jvb3Q6Ci0gICAgICAgICAgICBpZiBzZWxmLl9wb3J0OgotICAgICAgICAgICAgICAgICMgSGF2
ZSBib3RoIHBvcnQgYW5kIHJvb3QgZGlyLgotICAgICAgICAgICAgICAgIG1hcHBpbmdzID0gW3sn
cG9ydCc6IHNlbGYuX3BvcnQsICdkb2Nyb290Jzogc2VsZi5fcm9vdH1dCi0gICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgICMgSGF2ZSBvbmx5IGEgcm9vdCBkaXIgLSBzZXQgdGhlIHBv
cnRzIGFzIGZvciBMYXlvdXRUZXN0cy4KLSAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdXNlZCBp
biB1aV90ZXN0cyB0byBydW4gaHR0cCB0ZXN0cyBhZ2FpbnN0IGEgYnJvd3Nlci4KLQotICAgICAg
ICAgICAgICAgICMgZGVmYXVsdCBzZXQgb2YgcG9ydHMgYXMgZm9yIExheW91dFRlc3RzIGJ1dCB3
aXRoIGEKLSAgICAgICAgICAgICAgICAjIHNwZWNpZmllZCByb290LgotICAgICAgICAgICAgICAg
IG1hcHBpbmdzID0gW3sncG9ydCc6IDgwMDAsICdkb2Nyb290Jzogc2VsZi5fcm9vdH0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MCwgJ2RvY3Jvb3QnOiBzZWxmLl9y
b290fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnZG9jcm9v
dCc6IHNlbGYuX3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc2xjZXJ0Jzog
TGlnaHR0cGQuX3BlbV9maWxlfV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1hcHBpbmdz
ID0gc2VsZi5WSVJUVUFMQ09ORklHCi0gICAgICAgIGZvciBtYXBwaW5nIGluIG1hcHBpbmdzOgot
ICAgICAgICAgICAgc3NsX3NldHVwID0gJycKLSAgICAgICAgICAgIGlmICdzc2xjZXJ0JyBpbiBt
YXBwaW5nOgotICAgICAgICAgICAgICAgIHNzbF9zZXR1cCA9ICgnICBzc2wuZW5naW5lID0gImVu
YWJsZSJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgc3NsLnBlbWZpbGUgPSAi
JXMiXG4nICUgbWFwcGluZ1snc3NsY2VydCddKQotCi0gICAgICAgICAgICBmLndyaXRlKCgnJFNF
UlZFUlsic29ja2V0Il0gPT0gIjEyNy4wLjAuMTolZCIge1xuJwotICAgICAgICAgICAgICAgICAg
ICAgJyAgc2VydmVyLmRvY3VtZW50LXJvb3QgPSAiJXMiXG4nICsKLSAgICAgICAgICAgICAgICAg
ICAgIHNzbF9zZXR1cCArCi0gICAgICAgICAgICAgICAgICAgICAnfVxuXG4nKSAlIChtYXBwaW5n
Wydwb3J0J10sIG1hcHBpbmdbJ2RvY3Jvb3QnXSkpCi0gICAgICAgIGYuY2xvc2UoKQotCi0gICAg
ICAgIGV4ZWN1dGFibGUgPSBwYXRoX3V0aWxzLmxpZ2h0dHBkX2V4ZWN1dGFibGVfcGF0aCgpCi0g
ICAgICAgIG1vZHVsZV9wYXRoID0gcGF0aF91dGlscy5saWdodHRwZF9tb2R1bGVfcGF0aCgpCi0g
ICAgICAgIHN0YXJ0X2NtZCA9IFtleGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgIyBO
ZXdseSB3cml0dGVuIGNvbmZpZyBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAnLWYnLCBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKHNlbGYuX291dHB1dF9kaXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWdodHRwZC5jb25mJyksCi0g
ICAgICAgICAgICAgICAgICAgICAjIFdoZXJlIGl0IGNhbiBmaW5kIGl0cyBtb2R1bGUgZHluYW1p
YyBsaWJyYXJpZXMKLSAgICAgICAgICAgICAgICAgICAgICctbScsIG1vZHVsZV9wYXRoXQotCi0g
ICAgICAgIGlmIG5vdCBzZWxmLl9ydW5fYmFja2dyb3VuZDoKLSAgICAgICAgICAgIHN0YXJ0X2Nt
ZC5hcHBlbmQoIyBEb24ndCBiYWNrZ3JvdW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICctRCcpCi0KLSAgICAgICAgIyBDb3B5IGxpYmxpZ2h0Y29tcC5keWxpYiB0byAvdG1wL2xpZ2h0
dHBkL2xpYiB0byB3b3JrIGFyb3VuZCB0aGUKLSAgICAgICAgIyBidWcgdGhhdCBtb2RfYWxpYXMu
c28gbG9hZHMgaXQgZnJvbSB0aGUgaGFyZCBjb2RlZCBwYXRoLgotICAgICAgICBpZiBzeXMucGxh
dGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgICAgICB0bXBfbW9kdWxlX3BhdGggPSAnL3RtcC9s
aWdodHRwZC9saWInCi0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModG1wX21vZHVs
ZV9wYXRoKToKLSAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyh0bXBfbW9kdWxlX3BhdGgpCi0g
ICAgICAgICAgICBsaWJfZmlsZSA9ICdsaWJsaWdodGNvbXAuZHlsaWInCi0gICAgICAgICAgICBz
aHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKG1vZHVsZV9wYXRoLCBsaWJfZmlsZSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRtcF9tb2R1bGVfcGF0aCwgbGli
X2ZpbGUpKQotCi0gICAgICAgICMgUHV0IHRoZSBjeWd3aW4gZGlyZWN0b3J5IGZpcnN0IGluIHRo
ZSBwYXRoIHRvIGZpbmQgY3lnd2luMS5kbGwKLSAgICAgICAgZW52ID0gb3MuZW52aXJvbgotICAg
ICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKLSAgICAgICAgICAg
IGVudlsnUEFUSCddID0gJyVzOyVzJyAlICgKLSAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnBh
dGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAnYmluJyksCi0gICAgICAgICAg
ICAgICAgZW52WydQQVRIJ10pCi0KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicg
YW5kIHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbjoKLSAgICAgICAgICAgIHNldHVwX21vdW50ID0gcGF0
aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2V0dXBfbW91bnQu
YmF0JykKLSAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oc2V0dXBfbW91bnQpLndhaXQoKQot
Ci0gICAgICAgIGxvZ2dpbmcuZGVidWcoJ1N0YXJ0aW5nIGh0dHAgc2VydmVyJykKLSAgICAgICAg
c2VsZi5fcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc3RhcnRfY21kLCBlbnY9ZW52KQotCi0g
ICAgICAgICMgV2FpdCBmb3Igc2VydmVyIHRvIHN0YXJ0LgotICAgICAgICBzZWxmLm1hcHBpbmdz
ID0gbWFwcGluZ3MKLSAgICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndhaXRfZm9yX2FjdGlv
bigKLSAgICAgICAgICAgIHNlbGYuaXNfc2VydmVyX3J1bm5pbmdfb25fYWxsX3BvcnRzKQotCi0g
ICAgICAgICMgT3VyIHByb2Nlc3MgdGVybWluYXRlZCBhbHJlYWR5Ci0gICAgICAgIGlmIG5vdCBz
ZXJ2ZXJfc3RhcnRlZCBvciBzZWxmLl9wcm9jZXNzLnJldHVybmNvZGUgIT0gTm9uZToKLSAgICAg
ICAgICAgIHJhaXNlIGdvb2dsZS5odHRwZF91dGlscy5IdHRwZE5vdFN0YXJ0ZWQoJ0ZhaWxlZCB0
byBzdGFydCBodHRwZC4nKQotCi0gICAgICAgIGxvZ2dpbmcuZGVidWcoIlNlcnZlciBzdWNjZXNz
ZnVsbHkgc3RhcnRlZCIpCi0KLSAgICAjIFRPRE8oZGVhbm0pOiBGaW5kIGEgbmljZXIgd2F5IHRv
IHNodXRkb3duIGNsZWFubHkuICBPdXIgbG9nIGZpbGVzIGFyZQotICAgICMgcHJvYmFibHkgbm90
IGJlaW5nIGZsdXNoZWQsIGV0Yy4uLiB3aHkgZG9lc24ndCBvdXIgcHl0aG9uIGhhdmUgb3Mua2ls
bCA/Ci0KLSAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6Ci0gICAgICAgIGlmIG5vdCBm
b3JjZSBhbmQgbm90IHNlbGYuaXNfcnVubmluZygpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAg
ICAgICAgaHR0cGRfcGlkID0gTm9uZQotICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgotICAgICAg
ICAgICAgaHR0cGRfcGlkID0gc2VsZi5fcHJvY2Vzcy5waWQKLSAgICAgICAgcGF0aF91dGlscy5z
aHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0cGRfcGlkKQotCi0gICAgICAgIGlmIHNlbGYuX3Byb2Nl
c3M6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQotICAgICAgICAgICAgc2VsZi5f
cHJvY2VzcyA9IE5vbmUKLQotaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKLSAgICAjIFByb3Zp
ZGUgc29tZSBjb21tYW5kIGxpbmUgcGFyYW1zIGZvciBzdGFydGluZy9zdG9wcGluZyB0aGUgaHR0
cCBzZXJ2ZXIKLSAgICAjIG1hbnVhbGx5LiBBbHNvIHVzZWQgaW4gdWlfdGVzdHMgdG8gcnVuIGh0
dHAgbGF5b3V0IHRlc3RzIGluIGEgYnJvd3Nlci4KLSAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFy
c2UuT3B0aW9uUGFyc2VyKCkKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1rJywgJy0t
c2VydmVyJywKLSAgICAgICAgaGVscD0nU2VydmVyIGFjdGlvbiAoc3RhcnR8c3RvcCknKQotICAg
IG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1wb3J0JywKLSAgICAgICAgaGVscD0n
UG9ydCB0byBsaXN0ZW4gb24gKG92ZXJyaWRlcyBsYXlvdXQgdGVzdCBwb3J0cyknKQotICAgIG9w
dGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXInLCAnLS1yb290JywKLSAgICAgICAgaGVscD0nQWJz
b2x1dGUgcGF0aCB0byBEb2N1bWVudFJvb3QgKG92ZXJyaWRlcyBsYXlvdXQgdGVzdCByb290cykn
KQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1yZWdpc3Rlcl9jeWd3aW4nLCBhY3Rp
b249InN0b3JlX3RydWUiLAotICAgICAgICBkZXN0PSJyZWdpc3Rlcl9jeWd3aW4iLCBoZWxwPSdS
ZWdpc3RlciBDeWd3aW4gcGF0aHMgKG9uIFdpbiB0cnkgYm90cyknKQotICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbignLS1ydW5fYmFja2dyb3VuZCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCi0g
ICAgICAgIGRlc3Q9InJ1bl9iYWNrZ3JvdW5kIiwKLSAgICAgICAgaGVscD0nUnVuIG9uIGJhY2tn
cm91bmQgKGZvciBydW5uaW5nIGFzIFVJIHRlc3QpJykKLSAgICBvcHRpb25zLCBhcmdzID0gb3B0
aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkKLQotICAgIGlmIG5vdCBvcHRpb25zLnNlcnZlcjoKLSAg
ICAgICAgcHJpbnQgKCdVc2FnZTogJXMgLS1zZXJ2ZXIge3N0YXJ0fHN0b3B9IFstLXJvb3Q9cm9v
dF9kaXJdJwotICAgICAgICAgICAgICAgJyBbLS1wb3J0PXBvcnRfbnVtYmVyXScgJSBzeXMuYXJn
dlswXSkKLSAgICBlbHNlOgotICAgICAgICBpZiAob3B0aW9ucy5yb290IGlzIE5vbmUpIGFuZCAo
b3B0aW9ucy5wb3J0IGlzIG5vdCBOb25lKToKLSAgICAgICAgICAgICMgc3BlY2lmeWluZyByb290
IGJ1dCBub3QgcG9ydCBtZWFucyB3ZSB3YW50IGh0dHBkIG9uIGRlZmF1bHQKLSAgICAgICAgICAg
ICMgc2V0IG9mIHBvcnRzIHRoYXQgTGF5b3V0VGVzdCB1c2UsIGJ1dCBwb2ludGluZyB0byBhIGRp
ZmZlcmVudAotICAgICAgICAgICAgIyBzb3VyY2Ugb2YgdGVzdHMuIFNwZWNpZnlpbmcgcG9ydCBi
dXQgbm8gcm9vdCBkb2VzIG5vdCBzZWVtCi0gICAgICAgICAgICAjIG1lYW5pbmdmdWwuCi0gICAg
ICAgICAgICByYWlzZSAnU3BlY2lmeWluZyBwb3J0IHJlcXVpcmVzIGFsc28gYSByb290LicKLSAg
ICAgICAgaHR0cGQgPSBMaWdodHRwZCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgcG9ydD1vcHRpb25zLnBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgcm9vdD1vcHRpb25zLnJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJf
Y3lnd2luPW9wdGlvbnMucmVnaXN0ZXJfY3lnd2luLAotICAgICAgICAgICAgICAgICAgICAgICAg
IHJ1bl9iYWNrZ3JvdW5kPW9wdGlvbnMucnVuX2JhY2tncm91bmQpCi0gICAgICAgIGlmICdzdGFy
dCcgPT0gb3B0aW9ucy5zZXJ2ZXI6Ci0gICAgICAgICAgICBodHRwZC5zdGFydCgpCi0gICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICBodHRwZC5zdG9wKGZvcmNlPVRydWUpCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9o
dHRwX3NlcnZlcl9iYXNlLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9zZXJ2ZXJfYmFzZS5weQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggODljZjljMC4uMDAwMDAwMAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX3NlcnZlcl9iYXNlLnB5
CisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0j
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwot
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgot
IyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0j
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotIiIiQmFzZSBjbGFzcyB3aXRoIGNvbW1vbiByb3V0aW5lcyBiZXR3ZWVuIHRo
ZSBBcGFjaGUgYW5kIExpZ2h0dHBkIHNlcnZlcnMuIiIiCi0KLWltcG9ydCBsb2dnaW5nCi1pbXBv
cnQgdGltZQotaW1wb3J0IHVybGxpYgotCi0KLWNsYXNzIEh0dHBTZXJ2ZXJCYXNlKG9iamVjdCk6
Ci0KLSAgICBkZWYgd2FpdF9mb3JfYWN0aW9uKHNlbGYsIGFjdGlvbik6Ci0gICAgICAgICIiIlJl
cGVhdCB0aGUgYWN0aW9uIGZvciAyMCBzZWNvbmRzIG9yIHVudGlsIGl0IHN1Y2NlZWRzLiBSZXR1
cm5zCi0gICAgICAgIHdoZXRoZXIgaXQgc3VjY2VlZGVkLiIiIgotICAgICAgICBzdGFydF90aW1l
ID0gdGltZS50aW1lKCkKLSAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgLSBzdGFydF90aW1lIDwg
MjA6Ci0gICAgICAgICAgICBpZiBhY3Rpb24oKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1
ZQotICAgICAgICAgICAgdGltZS5zbGVlcCgxKQotCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0g
ICAgZGVmIGlzX3NlcnZlcl9ydW5uaW5nX29uX2FsbF9wb3J0cyhzZWxmKToKLSAgICAgICAgIiIi
UmV0dXJucyB3aGV0aGVyIHRoZSBzZXJ2ZXIgaXMgcnVubmluZyBvbiBhbGwgdGhlIGRlc2lyZWQg
cG9ydHMuIiIiCi0gICAgICAgIGZvciBtYXBwaW5nIGluIHNlbGYubWFwcGluZ3M6Ci0gICAgICAg
ICAgICBpZiAnc3NsY2VydCcgaW4gbWFwcGluZzoKLSAgICAgICAgICAgICAgICBodHRwX3N1ZmZp
eCA9ICdzJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBodHRwX3N1ZmZpeCA9
ICcnCi0KLSAgICAgICAgICAgIHVybCA9ICdodHRwJXM6Ly8xMjcuMC4wLjE6JWQvJyAlIChodHRw
X3N1ZmZpeCwgbWFwcGluZ1sncG9ydCddKQotCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICAgICAgcmVzcG9uc2UgPSB1cmxsaWIudXJsb3Blbih1cmwpCi0gICAgICAgICAgICAgICAgbG9n
Z2luZy5kZWJ1ZygiU2VydmVyIHJ1bm5pbmcgYXQgJXMiICUgdXJsKQotICAgICAgICAgICAgZXhj
ZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU2VydmVyIE5PVCBy
dW5uaW5nIGF0ICVzIiAlIHVybCkKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAg
ICAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cGQyLnBlbSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBkMi5wZW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNDliNzguLjAwMDAwMDAKLS0tIGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cGQy
LnBlbQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS0tLS0tQkVHSU4gQ0VSVElGSUNB
VEUtLS0tLQotTUlJRVpEQ0NBa3lnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFVRkFEQmdNUkF3
RGdZRFZRUURFd2RVWlhOMAotSUVOQk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJG
c2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgotVFc5MWJuUmhhVzRnVm1sbGR6RVNNQkFHQTFVRUNo
TUpRMlZ5ZENCVVpYTjBNQjRYRFRBNE1EY3lPREl5TXpJeQotT0ZvWERURXpNRGN5TnpJeU16SXlP
Rm93U2pFTE1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbQotYjNKdWFXRXhFakFR
QmdOVkJBb1RDVU5sY25RZ1ZHVnpkREVTTUJBR0ExVUVBeE1KTVRJM0xqQXVNQzR4TUlHZgotTUEw
R0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUURRajJ0UFdQVWdidUk0SDMvM2RudHRxVmJu
ZHdVMwotM0JkUkNkNjdERk00NEdScnNqRFNINGJZL0ViRnlYOUQ1MmQvaXk2WmFBbURlUGNDejVr
L2ZnUDNETXVqeWtZRwotcWdOaVYyeXd4VGxNajdObE4yQzdTUnQ2OGZRTVpyNWlJN3J5cGR4dWFa
dDlsU01EM0VOQmZmWXR1TFR5WmQ5YQotM0pQSmUxVGFJYWI1R3dJREFRQUJvNEhDTUlHL01Ba0dB
MVVkRXdRQ01BQXdIUVlEVlIwT0JCWUVGQ1lMQnY1SwoteDVzTE5WbHBMaDVGd1R3aGREbDdNSUdT
QmdOVkhTTUVnWW93Z1llQUZGM09mNW5qMUJsQk1VL0d6N0VsOVZxdgotNDVjeG9XU2tZakJnTVJB
d0RnWURWUVFERXdkVVpYTjBJRU5CTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRQotQ0JNS1Ey
RnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5UVzkxYm5SaGFXNGdWbWxsZHpFU01CQUdBMVVFQ2hN
SgotUTJWeWRDQlVaWE4wZ2drQTFGR1QxRC9lMlU0d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dJQkFF
dGtWbUxPYlVnawotYjJjSUEyUytRRHRpZnExVWdWZkJieXR2UjJsRm1uQURPUjU1bW8wZ0hRRzNI
SHFxNGcwMzRMbW9WWERIaFVrOAotR2I2YUZpdjRRdWJtVmhMWGNVZWxUUlh3aU52R3prVzdwQzZK
cnExMDVoZFBqelhNS1RjbWlMYW9wbTVGcWZjNwotaGo1Q24xU2pzcGM4cGRlUWpyYmVNZHZjYTdL
bEZyR1A4WWt3Q1UyeE9PWDlQaU45RzA5NjZCV2ZqbnIvZlpacAotK09RVnVVRkhkaUFad3RoRU11
RHBBQVhIcVlYSXNlcm1nZE9wZ0phQTUzY2Y4TnFCVjJRR2h0Rmd0c0pDUm9pdQotN0RLcWh5UldC
R3l6MTlWSUgyYjd5KzZxdlFWeHVIazE5a0tSTTBuZnR3L3lOY0pubTdndHR0ZXNwTVVQc09NYQot
YTJTRDFHMGhtMFRORDZ2eGFCaGdSM2NWcXBsL3FJcEFkRmkwMFRtN2hUeVlFN0k0M3pQVzAzdCsv
RHBDdDNVbQotRU1SWnNROTBjbzVxK2JjeC92UTdZQXR3VWgzMHVNYjB3cGliZXlDd0RwOGNxTm1T
aVJrRXVjL0ZqVFllczV0OAotNWdSLy9XWDFsMCtxanJqdXNPOU5tb0xucTJZazZVY2lvWCt6K3E2
Wi9kdWRHZnFoTGZlV0QyUTBMV1lBMjQyQwotZDdrbTVZM0tBdDFQSmRWc29mL2FpVmhWZGRkWS9P
SUVLVFJRaFdFZERib3N5MmVoMTZCQ0tYVDJGRnZoTkRnMQotQVlGdm42SThuajlJbGRNSmlJYzNE
ZGhhY0VBRXpSTWVSZ1BkekFhMWdyaUtVR2tueHN5VHlSaWk4cnUwV1M2dwotRENOcmxET1ZYZHpZ
R0Vab29CSTc2QkRWWTBXMGFralYKLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS0tQkVH
SU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KLU1JSUNYUUlCQUFLQmdRRFFqMnRQV1BVZ2J1STRIMy8z
ZG50dHFWYm5kd1UzM0JkUkNkNjdERk00NEdScnNqRFMKLUg0YlkvRWJGeVg5RDUyZC9peTZaYUFt
RGVQY0N6NWsvZmdQM0RNdWp5a1lHcWdOaVYyeXd4VGxNajdObE4yQzcKLVNSdDY4ZlFNWnI1aUk3
cnlwZHh1YVp0OWxTTUQzRU5CZmZZdHVMVHlaZDlhM0pQSmUxVGFJYWI1R3dJREFRQUIKLUFvR0FO
SFh1OHoyWUl6bGhFK2J3aEdtOE1HQnBLTDNxaFJ1S2plcmlxTUEzNnRXZXpPdzhsWTR5bUVBVStV
bHYKLUJzQ2RheHF5ZFFvVFlvdTU3bTRUeVVIRWN4cTlwcTNIMHpCMHFMNzA5RGRIaS90NHpiVjlY
SW9BekM1djAvaEcKLTkrQ2EyOVR3QzAyRkN3K3FMa05ydHdDcHdPY1FtYytiUHhxdkZ1MWlNaWFo
VVJFQ1FRRDJJL0hpMjQxM0NNWnoKLVRCamw4Zk1pVk85R2hBMkowc2M4UWkrWWNnSmFrYUxEOXhj
YmFpTGtUelBaRGxBMzg5QzFiNklhK3BvQXI0WUEKLVZlMEZGYnhwQWtFQTJPb2JheXlIRS9RdFBF
cW95Nk5MUjU3amlybVZCTm1TV1dkNGxBeUw1VUlISVlWdHRKWmcKLThDTHZiemFVL2lER3dSK3dL
c002NjRyS1BIRW10bHlvNHdKQkFNZVNxWU81Wk9DSkd1OU5XanJIak0zZmRBc0cKLTh6czJ6aGlM
eWErZmNVMGlISWtzQlc1VEJtdDcxSncvd01jOVI1SjFLMGtZdkZtbDk4NjUzTzVzaTFFQ1FCQ2sK
LVJWNC9tRTFybWx6WnpZRnlFY0I0N0RRa2NNNWljdHZ4R0VzamUwZ25mS3lSdEF6NnpJMGY0UWJE
UlVNSitMV3cKLVhLK3JNc1lIYStTZk9iMGI5c2tDUVFDTGRlb25zSXBGRHYvVXYrZmxISVN5MFdB
K0FGa0xYclJrQktoNkcvT0QKLWRNSGFOZXZrSmdVbnBjZVZFbmtyZGVucDVDY0VvRlRJMTdwZCtu
QmdEbS9CCi0tLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9s
YXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRv
ci5weQppbmRleCAyNzFmZjZjLi41ZDkwZDEzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1
bHRzX2dlbmVyYXRvci5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQpA
QCAtMzEsNyArMzEsNyBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiAKIGZyb20gbGF5b3V0
X3BhY2thZ2UgaW1wb3J0IGpzb25fcmVzdWx0c19nZW5lcmF0b3IKLWZyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHBhdGhfdXRpbHMKK2Zyb20gcG9ydCBpbXBvcnQgcGF0aF91dGlscwogZnJvbSBs
YXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKIGZyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVy
YXRvci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkKaW5kZXggMDU0MDE5NC4uYmNlNmQx
MyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3Vs
dHNfZ2VuZXJhdG9yLnB5CkBAIC0zNSw3ICszNSw3IEBAIGltcG9ydCB0aW1lCiBpbXBvcnQgdXJs
bGliMgogaW1wb3J0IHhtbC5kb20ubWluaWRvbQogCi1mcm9tIGxheW91dF9wYWNrYWdlIGltcG9y
dCBwYXRoX3V0aWxzCitmcm9tIHBvcnQgaW1wb3J0IHBhdGhfdXRpbHMKIGZyb20gbGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiAKIHN5cy5wYXRoLmFwcGVuZChwYXRoX3V0
aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2xpZ2h0dHBkLmNvbmYgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9saWdodHRwZC5jb25mCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkMzE1MGRkLi4wMDAwMDAwCi0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2xpZ2h0dHBkLmNvbmYKKysrIC9kZXYvbnVsbApA
QCAtMSw4OSArMCwwIEBACi1zZXJ2ZXIudGFnICAgICAgICAgICAgICAgICAgPSAiTGlnaHRUUEQv
MS40LjE5IChXaW4zMikiCi1zZXJ2ZXIubW9kdWxlcyAgICAgICAgICAgICAgPSAoICJtb2RfYWNj
ZXNzbG9nIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9hbGlhcyIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfY2dpIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIm1vZF9yZXdyaXRlIiApCi0KLSMgZGVmYXVsdCBkb2N1bWVudCBy
b290IHJlcXVpcmVkCi1zZXJ2ZXIuZG9jdW1lbnQtcm9vdCA9ICIuIgotCi0jIGZpbGVzIHRvIGNo
ZWNrIGZvciBpZiAuLi4vIGlzIHJlcXVlc3RlZAotaW5kZXgtZmlsZS5uYW1lcyAgICAgICAgICAg
ID0gKCAiaW5kZXgucGhwIiwgImluZGV4LnBsIiwgImluZGV4LmNnaSIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJpbmRleC5odG1sIiwgImluZGV4Lmh0bSIsICJkZWZhdWx0Lmh0
bSIgKQotIyBtaW1ldHlwZSBtYXBwaW5nCi1taW1ldHlwZS5hc3NpZ24gICAgICAgICAgICAgPSAo
Ci0gICIuZ2lmIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9naWYiLAotICAiLmpwZyIgICAgICAg
ICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCi0gICIuanBlZyIgICAgICAgICA9PiAgICAgICJpbWFn
ZS9qcGVnIiwKLSAgIi5wbmciICAgICAgICAgID0+ICAgICAgImltYWdlL3BuZyIsCi0gICIuc3Zn
IiAgICAgICAgICA9PiAgICAgICJpbWFnZS9zdmcreG1sIiwKLSAgIi5jc3MiICAgICAgICAgID0+
ICAgICAgInRleHQvY3NzIiwKLSAgIi5odG1sIiAgICAgICAgID0+ICAgICAgInRleHQvaHRtbCIs
Ci0gICIuaHRtIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAotICAiLnhodG1sIiAgICAg
ICAgPT4gICAgICAiYXBwbGljYXRpb24veGh0bWwreG1sIiwKLSAgIi5qcyIgICAgICAgICAgID0+
ICAgICAgInRleHQvamF2YXNjcmlwdCIsCi0gICIubG9nIiAgICAgICAgICA9PiAgICAgICJ0ZXh0
L3BsYWluIiwKLSAgIi5jb25mIiAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAotICAiLnRl
eHQiICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCi0gICIudHh0IiAgICAgICAgICA9PiAg
ICAgICJ0ZXh0L3BsYWluIiwKLSAgIi5kdGQiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwK
LSAgIi54bWwiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwKLSAgIi5tYW5pZmVzdCIgICAg
ID0+ICAgICAgInRleHQvY2FjaGUtbWFuaWZlc3QiLAotICkKLQotIyBVc2UgdGhlICJDb250ZW50
LVR5cGUiIGV4dGVuZGVkIGF0dHJpYnV0ZSB0byBvYnRhaW4gbWltZSB0eXBlIGlmIHBvc3NpYmxl
Ci1taW1ldHlwZS51c2UteGF0dHIgICAgICAgICAgPSAiZW5hYmxlIgotCi0jIwotIyB3aGljaCBl
eHRlbnNpb25zIHNob3VsZCBub3QgYmUgaGFuZGxlIHZpYSBzdGF0aWMtZmlsZSB0cmFuc2Zlcgot
IwotIyAucGhwLCAucGwsIC5mY2dpIGFyZSBtb3N0IG9mdGVuIGhhbmRsZWQgYnkgbW9kX2Zhc3Rj
Z2kgb3IgbW9kX2NnaQotc3RhdGljLWZpbGUuZXhjbHVkZS1leHRlbnNpb25zID0gKCAiLnBocCIs
ICIucGwiLCAiLmNnaSIgKQotCi1zZXJ2ZXIuYmluZCA9ICJsb2NhbGhvc3QiCi1zZXJ2ZXIucG9y
dCA9IDgwMDEKLQotIyMgdmlydHVhbCBkaXJlY3RvcnkgbGlzdGluZ3MKLWRpci1saXN0aW5nLmFj
dGl2YXRlICAgICAgICA9ICJlbmFibGUiCi0jZGlyLWxpc3RpbmcuZW5jb2RpbmcgICAgICAgPSAi
aXNvLTg4NTktMiIKLSNkaXItbGlzdGluZy5leHRlcm5hbC1jc3MgICA9ICJzdHlsZS9vbGRzdHls
ZS5jc3MiCi0KLSMjIGVuYWJsZSBkZWJ1Z2dpbmcKLSNkZWJ1Zy5sb2ctcmVxdWVzdC1oZWFkZXIg
ICA9ICJlbmFibGUiCi0jZGVidWcubG9nLXJlc3BvbnNlLWhlYWRlciAgPSAiZW5hYmxlIgotI2Rl
YnVnLmxvZy1yZXF1ZXN0LWhhbmRsaW5nID0gImVuYWJsZSIKLSNkZWJ1Zy5sb2ctZmlsZS1ub3Qt
Zm91bmQgICA9ICJlbmFibGUiCi0KLSMjIyMgU1NMIGVuZ2luZQotI3NzbC5lbmdpbmUgICAgICAg
ICAgICAgICAgID0gImVuYWJsZSIKLSNzc2wucGVtZmlsZSAgICAgICAgICAgICAgICA9ICJzZXJ2
ZXIucGVtIgotCi0jIFJld3JpdGUgcnVsZSBmb3IgdXRmLTggcGF0aCB0ZXN0IChMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3VyaS91dGY4LXBhdGguaHRtbCkKLSMgU2VlIHRoZSBhcGFjaGUgcmV3cml0
ZSBydWxlIGF0IExheW91dFRlc3RzL2h0dHAvdGVzdHMvdXJpL2ludGVyY2VwdC8uaHRhY2Nlc3MK
LSMgUmV3cml0ZSBydWxlIGZvciBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2N5cmls
bGljLXVyaS5odG1sLgotIyBTZWUgdGhlIGFwYWNoZSByZXdyaXRlIHJ1bGUgYXQKLSMgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvaW50ZXJjZXB0Ly5odGFjY2Vzcwot
dXJsLnJld3JpdGUtb25jZSA9ICgKLSAgIl4vdXJpL2ludGVyY2VwdC8oLiopIiA9PiAiL3VyaS9y
ZXNvdXJjZXMvcHJpbnQtdXJpLnBocCIsCi0gICJeL2FwcGNhY2hlL3Jlc291cmNlcy9pbnRlcmNl
cHQvKC4qKSIgPT4gIi9hcHBjYWNoZS9yZXNvdXJjZXMvcHJpbnQtdXJpLnBocCIKLSkKLQotIyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc3BvbnNlLWVuY29kaW5nLmh0
bWwgdXNlcyBhbiBodGFjY2VzcwotIyB0byBvdmVycmlkZSBjaGFyc2V0IGZvciByZXBseTIudHh0
LCByZXBseTIueG1sLCBhbmQgcmVwbHk0LnR4dC4KLSRIVFRQWyJ1cmwiXSA9fiAiXi94bWxodHRw
cmVxdWVzdC9yZXNvdXJjZXMvcmVwbHkyLih0eHR8eG1sKSIgewotICBtaW1ldHlwZS5hc3NpZ24g
PSAoCi0gICAgIi50eHQiID0+ICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXdpbmRvd3MtMTI1MSIsCi0g
ICAgIi54bWwiID0+ICJ0ZXh0L3htbDsgY2hhcnNldD13aW5kb3dzLTEyNTEiCi0gICkKLX0KLSRI
VFRQWyJ1cmwiXSA9fiAiXi94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVwbHk0LnR4dCIgewot
ICBtaW1ldHlwZS5hc3NpZ24gPSAoICIudHh0IiA9PiAidGV4dC9wbGFpbjsgY2hhcnNldD1rb2k4
LXIiICkKLX0KLQotIyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3dyb25nLWNvbnRl
bnQtdHlwZS5odG1sIHVzZXMgYW4gaHRhY2Nlc3MKLSMgdG8gb3ZlcnJpZGUgbWltZSB0eXBlIGZv
ciB3cm9uZy1jb250ZW50LXR5cGUubWFuaWZlc3QuCi0kSFRUUFsidXJsIl0gPX4gIl4vYXBwY2Fj
aGUvcmVzb3VyY2VzL3dyb25nLWNvbnRlbnQtdHlwZS5tYW5pZmVzdCIgewotICBtaW1ldHlwZS5h
c3NpZ24gPSAoICIubWFuaWZlc3QiID0+ICJ0ZXh0L3BsYWluIiApCi19Ci0KLSMgQXV0b2dlbmVy
YXRlZCB0ZXN0LXNwZWNpZmljIGNvbmZpZyBmb2xsb3dzLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGF0aF91dGls
cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3BhdGhfdXRpbHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4Yjc2
MTEuLjAwMDAwMDAKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvcGF0aF91dGlscy5weQorKysgL2Rldi9udWxsCkBAIC0xLDM5NSAr
MCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIENocm9t
aXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJUaGlzIHBhY2th
Z2UgY29udGFpbnMgdXRpbGl0eSBtZXRob2RzIGZvciBtYW5pcHVsYXRpbmcgcGF0aHMgYW5kCi1m
aWxlbmFtZXMgZm9yIHRlc3QgcmVzdWx0cyBhbmQgYmFzZWxpbmVzLiBJdCBhbHNvIGNvbnRhaW5z
IHdyYXBwZXJzCi1vZiBhIGZldyByb3V0aW5lcyBpbiBwbGF0Zm9ybV91dGlscy5weSBzbyB0aGF0
IHBsYXRmb3JtX3V0aWxzLnB5IGNhbgotYmUgY29uc2lkZXJlZCBhICdwcm90ZWN0ZWQnIHBhY2th
Z2UgLSBpLmUuLCB0aGlzIGZpbGUgc2hvdWxkIGJlCi10aGUgb25seSBmaWxlIHRoYXQgZXZlciBp
bmNsdWRlcyBwbGF0Zm9ybV91dGlscy4gVGhpcyBsZWFkcyB0bwotdXMgaW5jbHVkaW5nIGEgZmV3
IHRoaW5ncyB0aGF0IGRvbid0IHJlYWxseSBoYXZlIGFueXRoaW5nIHRvIGRvCi0gd2l0aCBwYXRo
cywgdW5mb3J0dW5hdGVseS4iIiIKLQotaW1wb3J0IGVycm5vCi1pbXBvcnQgb3MKLWltcG9ydCBz
dGF0Ci1pbXBvcnQgc3lzCi0KLWltcG9ydCBwbGF0Zm9ybV91dGlscwotaW1wb3J0IHBsYXRmb3Jt
X3V0aWxzX3dpbgotaW1wb3J0IHBsYXRmb3JtX3V0aWxzX21hYwotaW1wb3J0IHBsYXRmb3JtX3V0
aWxzX2xpbnV4Ci0KLSMgQ2FjaGUgc29tZSB2YWx1ZXMgc28gd2UgZG9uJ3QgaGF2ZSB0byByZWNh
bGN1bGF0ZSB0aGVtLiBfYmFzZWRpciBpcwotIyB1c2VkIGJ5IFBhdGhGcm9tQmFzZSgpIGFuZCBj
YWNoZXMgdGhlIGZ1bGwgKG5hdGl2ZSkgcGF0aCB0byB0aGUgdG9wCi0jIG9mIHRoZSBzb3VyY2Ug
dHJlZSAoL3NyYykuIF9iYXNlbGluZV9zZWFyY2hfcGF0aCBpcyB1c2VkIGJ5Ci0jIEV4cGVjdGVk
QmFzZWxpbmVzKCkgYW5kIGNhY2hlcyB0aGUgbGlzdCBvZiBuYXRpdmUgcGF0aHMgdG8gc2VhcmNo
Ci0jIGZvciBiYXNlbGluZSByZXN1bHRzLgotX2Jhc2VkaXIgPSBOb25lCi1fYmFzZWxpbmVfc2Vh
cmNoX3BhdGggPSBOb25lCi0KLQotY2xhc3MgUGF0aE5vdEZvdW5kKEV4Y2VwdGlvbik6Ci0gICAg
cGFzcwotCi0KLWRlZiBsYXlvdXRfdGVzdHNfZGlyKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZnVs
bHktcXVhbGlmaWVkIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBpbnB1dAot
ICAgIGRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgbGF5b3V0IHRlc3QuIiIiCi0gICAgcmV0dXJuIHBh
dGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMnKQotCi0K
LWRlZiBjaHJvbWl1bV9iYXNlbGluZV9wYXRoKHBsYXRmb3JtPU5vbmUpOgotICAgICIiIlJldHVy
bnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgZXhwZWN0ZWQKLSAg
ICBiYXNlbGluZSByZXN1bHRzIGZyb20gY2hyb21pdW0gcG9ydHMuIElmIHxwbGF0Zm9ybXwgaXMg
Tm9uZSwgdGhlCi0gICAgY3VycmVudGx5IGV4ZWN1dGluZyBwbGF0Zm9ybSBpcyB1c2VkLgotCi0g
ICAgTm90ZTogYWx0aG91Z2ggZGlyZWN0bHkgcmVmZXJlbmNpbmcgaW5kaXZpZHVhbCBwbGF0Zm9y
bV91dGlsc18qIGZpbGVzIGlzCi0gICAgdXN1YWxseSBkaXNjb3VyYWdlZCwgd2UgYWxsb3cgaXQg
aGVyZSBzbyB0aGF0IHRoZSByZWJhc2VsaW5pbmcgdG9vbCBjYW4KLSAgICBwdWxsIGJhc2VsaW5l
cyBmb3IgcGxhdGZvcm1zIG90aGVyIHRoYW4gdGhlIGhvc3QgcGxhdGZvcm0uIiIiCi0KLSAgICAj
IE5vcm1hbGl6ZSB0aGUgcGxhdGZvcm0gc3RyaW5nLgotICAgIHBsYXRmb3JtID0gcGxhdGZvcm1f
bmFtZShwbGF0Zm9ybSkKLSAgICBpZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdjaHJvbWl1bS1tYWMn
KToKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzX21hYy5iYXNlbGluZV9wYXRoKHBsYXRm
b3JtKQotICAgIGVsaWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21pdW0td2luJyk6Ci0gICAg
ICAgIHJldHVybiBwbGF0Zm9ybV91dGlsc193aW4uYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkKLSAg
ICBlbGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLWxpbnV4Jyk6Ci0gICAgICAgIHJl
dHVybiBwbGF0Zm9ybV91dGlsc19saW51eC5iYXNlbGluZV9wYXRoKHBsYXRmb3JtKQotCi0gICAg
cmV0dXJuIHBsYXRmb3JtX3V0aWxzLmJhc2VsaW5lX3BhdGgoKQotCi0KLWRlZiB3ZWJraXRfYmFz
ZWxpbmVfcGF0aChwbGF0Zm9ybSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRo
ZSBkaXJlY3RvcnkgY29udGFpbmluZyBleHBlY3RlZAotICAgIGJhc2VsaW5lIHJlc3VsdHMgZnJv
bSBXZWJLaXQgcG9ydHMuIiIiCi0gICAgcmV0dXJuIHBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0
eScsICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAn
cGxhdGZvcm0nLCBwbGF0Zm9ybSkKLQotCi1kZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZv
cm09Tm9uZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFy
Y2ggZm9yIGJhc2VsaW5lcy9yZXN1bHRzIGZvciBhCi0gICAgZ2l2ZW4gcGxhdGZvcm0sIGluIG9y
ZGVyIG9mIHByZWZlcmVuY2UuIFBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9mCi0gICAg
dGhlIHNvdXJjZSB0cmVlLiBJZiBwYXJhbWV0ZXIgcGxhdGZvcm0gaXMgTm9uZSwgcmV0dXJucyB0
aGUgbGlzdCBmb3IgdGhlCi0gICAgY3VycmVudCBwbGF0Zm9ybSB0aGF0IHRoZSBzY3JpcHQgaXMg
cnVubmluZyBvbi4KLQotICAgIE5vdGU6IGFsdGhvdWdoIGRpcmVjdGx5IHJlZmVyZW5jaW5nIGlu
ZGl2aWR1YWwgcGxhdGZvcm1fdXRpbHNfKiBmaWxlcyBpcwotICAgIHVzdWFsbHkgZGlzY291cmFn
ZWQsIHdlIGFsbG93IGl0IGhlcmUgc28gdGhhdCB0aGUgcmViYXNlbGluaW5nIHRvb2wgY2FuCi0g
ICAgcHVsbCBiYXNlbGluZXMgZm9yIHBsYXRmb3JtcyBvdGhlciB0aGFuIHRoZSBob3N0IHBsYXRm
b3JtLiIiIgotCi0gICAgIyBOb3JtYWxpemUgdGhlIHBsYXRmb3JtIG5hbWUuCi0gICAgcGxhdGZv
cm0gPSBwbGF0Zm9ybV9uYW1lKHBsYXRmb3JtKQotICAgIGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgo
J2Nocm9taXVtLW1hYycpOgotICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfbWFjLmJhc2Vs
aW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtKQotICAgIGVsaWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgn
Y2hyb21pdW0td2luJyk6Ci0gICAgICAgIHJldHVybiBwbGF0Zm9ybV91dGlsc193aW4uYmFzZWxp
bmVfc2VhcmNoX3BhdGgocGxhdGZvcm0pCi0gICAgZWxpZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdj
aHJvbWl1bS1saW51eCcpOgotICAgICAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHNfbGludXguYmFz
ZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm0pCi0gICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLmJh
c2VsaW5lX3NlYXJjaF9wYXRoKCkKLQotCi1kZWYgZXhwZWN0ZWRfYmFzZWxpbmVzKGZpbGVuYW1l
LCBzdWZmaXgsIHBsYXRmb3JtPU5vbmUsIGFsbF9iYXNlbGluZXM9RmFsc2UpOgotICAgICIiIkdp
dmVuIGEgdGVzdCBuYW1lLCBmaW5kcyB3aGVyZSB0aGUgYmFzZWxpbmUgcmVzdWx0cyBhcmUgbG9j
YXRlZC4KLQotICAgIEFyZ3M6Ci0gICAgICAgZmlsZW5hbWU6IGFic29sdXRlIGZpbGVuYW1lIHRv
IHRlc3QgZmlsZQotICAgICAgIHN1ZmZpeDogZmlsZSBzdWZmaXggb2YgdGhlIGV4cGVjdGVkIHJl
c3VsdHMsIGluY2x1ZGluZyBkb3Q7IGUuZy4gJy50eHQnCi0gICAgICAgICAgIG9yICcucG5nJy4g
IFRoaXMgc2hvdWxkIG5vdCBiZSBOb25lLCBidXQgbWF5IGJlIGFuIGVtcHR5IHN0cmluZy4KLSAg
ICAgICBwbGF0Zm9ybTogbGF5b3V0IHRlc3QgcGxhdGZvcm06ICd3aW4nLCAnbGludXgnIG9yICdt
YWMnLiBEZWZhdWx0cyB0bwotICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBwbGF0Zm9ybS4K
LSAgICAgICBhbGxfYmFzZWxpbmVzOiBJZiBUcnVlLCByZXR1cm4gYW4gb3JkZXJlZCBsaXN0IG9m
IGFsbCBiYXNlbGluZSBwYXRocwotICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZ2l2ZW4g
cGxhdGZvcm0uIElmIEZhbHNlLCByZXR1cm4gb25seSB0aGUgZmlyc3QKLSAgICAgICAgICAgICAg
ICAgICAgICBvbmUuCi0gICAgUmV0dXJucwotICAgICAgIGEgbGlzdCBvZiAoIHBsYXRmb3JtX2Rp
ciwgcmVzdWx0c19maWxlbmFtZSApLCB3aGVyZQotICAgICAgICAgcGxhdGZvcm1fZGlyIC0gYWJz
IHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgcmVzdWx0cyB0cmVlIChvciB0ZXN0IHRyZWUpCi0gICAg
ICAgICByZXN1bHRzX2ZpbGVuYW1lIC0gcmVsYXRpdmUgcGF0aCBmcm9tIHRvcCBvZiB0cmVlIHRv
IHRoZSByZXN1bHRzIGZpbGUKLSAgICAgICAgICAgKG9zLnBhdGguam9pbiBvZiB0aGUgdHdvIGdp
dmVzIHlvdSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlLAotICAgICAgICAgICAgdW5sZXNzIE5v
bmUgd2FzIHJldHVybmVkLikKLSAgICAgIFJldHVybiB2YWx1ZXMgd2lsbCBiZSBpbiB0aGUgZm9y
bWF0IGFwcHJvcHJpYXRlIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybQotICAgICAgKGUuZy4sICJc
XCIgZm9yIHBhdGggc2VwYXJhdG9ycyBvbiBXaW5kb3dzKS4gSWYgdGhlIHJlc3VsdHMgZmlsZSBp
cyBub3QKLSAgICAgIGZvdW5kLCB0aGVuIE5vbmUgd2lsbCBiZSByZXR1cm5lZCBmb3IgdGhlIGRp
cmVjdG9yeSwgYnV0IHRoZSBleHBlY3RlZAotICAgICAgcmVsYXRpdmUgcGF0aG5hbWUgd2lsbCBz
dGlsbCBiZSByZXR1cm5lZC4KLSAgICAiIiIKLSAgICBnbG9iYWwgX2Jhc2VsaW5lX3NlYXJjaF9w
YXRoCi0gICAgZ2xvYmFsIF9zZWFyY2hfcGF0aF9wbGF0Zm9ybQotICAgIHRlc3RuYW1lID0gb3Mu
cGF0aC5zcGxpdGV4dChyZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSlbMF0KLQotICAg
IGJhc2VsaW5lX2ZpbGVuYW1lID0gdGVzdG5hbWUgKyAnLWV4cGVjdGVkJyArIHN1ZmZpeAotCi0g
ICAgaWYgKF9iYXNlbGluZV9zZWFyY2hfcGF0aCBpcyBOb25lKSBvciAoX3NlYXJjaF9wYXRoX3Bs
YXRmb3JtICE9IHBsYXRmb3JtKToKLSAgICAgICAgX2Jhc2VsaW5lX3NlYXJjaF9wYXRoID0gYmFz
ZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm0pCi0gICAgICAgIF9zZWFyY2hfcGF0aF9wbGF0Zm9y
bSA9IHBsYXRmb3JtCi0KLSAgICBiYXNlbGluZXMgPSBbXQotICAgIGZvciBwbGF0Zm9ybV9kaXIg
aW4gX2Jhc2VsaW5lX3NlYXJjaF9wYXRoOgotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5w
YXRoLmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpOgotICAgICAgICAgICAg
YmFzZWxpbmVzLmFwcGVuZCgocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpCi0KLSAg
ICAgICAgaWYgbm90IGFsbF9iYXNlbGluZXMgYW5kIGJhc2VsaW5lczoKLSAgICAgICAgICAgIHJl
dHVybiBiYXNlbGluZXMKLQotICAgICMgSWYgaXQgd2Fzbid0IGZvdW5kIGluIGEgcGxhdGZvcm0g
ZGlyZWN0b3J5LCByZXR1cm4gdGhlIGV4cGVjdGVkIHJlc3VsdAotICAgICMgaW4gdGhlIHRlc3Qg
ZGlyZWN0b3J5LCBldmVuIGlmIG5vIHN1Y2ggZmlsZSBhY3R1YWxseSBleGlzdHMuCi0gICAgcGxh
dGZvcm1fZGlyID0gbGF5b3V0X3Rlc3RzX2RpcigpCi0gICAgaWYgb3MucGF0aC5leGlzdHMob3Mu
cGF0aC5qb2luKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKToKLSAgICAgICAgYmFz
ZWxpbmVzLmFwcGVuZCgocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpCi0KLSAgICBp
ZiBiYXNlbGluZXM6Ci0gICAgICAgIHJldHVybiBiYXNlbGluZXMKLQotICAgIHJldHVybiBbKE5v
bmUsIGJhc2VsaW5lX2ZpbGVuYW1lKV0KLQotCi1kZWYgZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5h
bWUsIHN1ZmZpeCk6Ci0gICAgIiIiR2l2ZW4gYSB0ZXN0IG5hbWUsIHJldHVybnMgYW4gYWJzb2x1
dGUgcGF0aCB0byBpdHMgZXhwZWN0ZWQgcmVzdWx0cy4KLQotICAgIElmIG5vIGV4cGVjdGVkIHJl
c3VsdHMgYXJlIGZvdW5kIGluIGFueSBvZiB0aGUgc2VhcmNoZWQgZGlyZWN0b3JpZXMsIHRoZQot
ICAgIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgdGVzdCBpdHNlbGYgaXMgbG9jYXRlZCB3aWxsIGJl
IHJldHVybmVkLiBUaGUgcmV0dXJuCi0gICAgdmFsdWUgaXMgaW4gdGhlIGZvcm1hdCBhcHByb3By
aWF0ZSBmb3IgdGhlIHBsYXRmb3JtIChlLmcuLCAiXFwiIGZvcgotICAgIHBhdGggc2VwYXJhdG9y
cyBvbiB3aW5kb3dzKS4KLQotICAgIEFyZ3M6Ci0gICAgICAgZmlsZW5hbWU6IGFic29sdXRlIGZp
bGVuYW1lIHRvIHRlc3QgZmlsZQotICAgICAgIHN1ZmZpeDogZmlsZSBzdWZmaXggb2YgdGhlIGV4
cGVjdGVkIHJlc3VsdHMsIGluY2x1ZGluZyBkb3Q7IGUuZy4gJy50eHQnCi0gICAgICAgICAgIG9y
ICcucG5nJy4gIFRoaXMgc2hvdWxkIG5vdCBiZSBOb25lLCBidXQgbWF5IGJlIGFuIGVtcHR5IHN0
cmluZy4KLSAgICAgICBwbGF0Zm9ybTogdGhlIG1vc3Qtc3BlY2lmaWMgZGlyZWN0b3J5IG5hbWUg
dG8gdXNlIHRvIGJ1aWxkIHRoZQotICAgICAgICAgICBzZWFyY2ggbGlzdCBvZiBkaXJlY3Rvcmll
cywgZS5nLiwgJ2Nocm9taXVtLXdpbicsIG9yCi0gICAgICAgICAgICdjaHJvbWl1bS1tYWMtbGVv
cGFyZCcgKHdlIGZvbGxvdyB0aGUgV2ViS2l0IGZvcm1hdCkKLSAgICAiIiIKLSAgICBwbGF0Zm9y
bV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lID0gZXhwZWN0ZWRfYmFzZWxpbmVzKGZpbGVuYW1lLCBz
dWZmaXgpWzBdCi0gICAgaWYgcGxhdGZvcm1fZGlyOgotICAgICAgICByZXR1cm4gb3MucGF0aC5q
b2luKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpCi0gICAgcmV0dXJuIG9zLnBhdGgu
am9pbihsYXlvdXRfdGVzdHNfZGlyKCksIGJhc2VsaW5lX2ZpbGVuYW1lKQotCi0KLWRlZiByZWxh
dGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKToKLSAgICAiIiJQcm92aWRlIHRoZSBmaWxlbmFt
ZSBvZiB0aGUgdGVzdCByZWxhdGl2ZSB0byB0aGUgbGF5b3V0IHRlc3RzCi0gICAgZGlyZWN0b3J5
IGFzIGEgdW5peCBzdHlsZSBwYXRoIChhL2IvYykuIiIiCi0gICAgcmV0dXJuIF93aW5fcGF0aF90
b191bml4KGZpbGVuYW1lW2xlbihsYXlvdXRfdGVzdHNfZGlyKCkpICsgMTpdKQotCi0KLWRlZiBf
d2luX3BhdGhfdG9fdW5peChwYXRoKToKLSAgICAiIiJDb252ZXJ0IGEgd2luZG93cyBwYXRoIHRv
IHVzZSB1bml4LXN0eWxlIHBhdGggc2VwYXJhdG9ycyAoYS9iL2MpLiIiIgotICAgIHJldHVybiBw
YXRoLnJlcGxhY2UoJ1xcJywgJy8nKQotCi0jCi0jIFJvdXRpbmVzIHRoYXQgYXJlIGFyZ3VhYmx5
IHBsYXRmb3JtLXNwZWNpZmljIGJ1dCBoYXZlIGJlZW4gbWFkZQotIyBnZW5lcmljIGZvciBub3cg
KHRoZXkgdXNlZCB0byBiZSBpbiBwbGF0Zm9ybV91dGlsc18qKQotIwotCi0KLWRlZiBmaWxlbmFt
ZV90b191cmkoZnVsbF9wYXRoKToKLSAgICAiIiJDb252ZXJ0IGEgdGVzdCBmaWxlIHRvIGEgVVJJ
LiIiIgotICAgIExBWU9VVFRFU1RfSFRUUF9ESVIgPSAiaHR0cC90ZXN0cy8iCi0gICAgTEFZT1VU
VEVTVF9XRUJTT0NLRVRfRElSID0gIndlYnNvY2tldC90ZXN0cy8iCi0KLSAgICByZWxhdGl2ZV9w
YXRoID0gX3dpbl9wYXRoX3RvX3VuaXgocmVsYXRpdmVfdGVzdF9maWxlbmFtZShmdWxsX3BhdGgp
KQotICAgIHBvcnQgPSBOb25lCi0gICAgdXNlX3NzbCA9IEZhbHNlCi0KLSAgICBpZiByZWxhdGl2
ZV9wYXRoLnN0YXJ0c3dpdGgoTEFZT1VUVEVTVF9IVFRQX0RJUik6Ci0gICAgICAgICMgaHR0cC90
ZXN0cy8gcnVuIG9mZiBwb3J0IDgwMDAgYW5kIHNzbC8gb2ZmIDg0NDMKLSAgICAgICAgcmVsYXRp
dmVfcGF0aCA9IHJlbGF0aXZlX3BhdGhbbGVuKExBWU9VVFRFU1RfSFRUUF9ESVIpOl0KLSAgICAg
ICAgcG9ydCA9IDgwMDAKLSAgICBlbGlmIHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0aChMQVlPVVRU
RVNUX1dFQlNPQ0tFVF9ESVIpOgotICAgICAgICAjIHdlYnNvY2tldC90ZXN0cy8gcnVuIG9mZiBw
b3J0IDg4ODAgYW5kIDkzMjMKLSAgICAgICAgIyBOb3RlOiB0aGUgcm9vdCBpcyAvLCBub3Qgd2Vi
c29ja2V0L3Rlc3RzLwotICAgICAgICBwb3J0ID0gODg4MAotCi0gICAgIyBNYWtlIGh0dHAvdGVz
dHMvbG9jYWwgcnVuIGFzIGxvY2FsIGZpbGVzLiBUaGlzIGlzIHRvIG1pbWljIHRoZQotICAgICMg
bG9naWMgaW4gcnVuLXdlYmtpdC10ZXN0cy4KLSAgICAjIFRPRE8oamlhbmxpKTogQ29uc2lkZXIg
ZXh0ZW5kaW5nIHRoaXMgdG8gIm1lZGlhLyIuCi0gICAgaWYgcG9ydCBhbmQgbm90IHJlbGF0aXZl
X3BhdGguc3RhcnRzd2l0aCgibG9jYWwvIik6Ci0gICAgICAgIGlmIHJlbGF0aXZlX3BhdGguc3Rh
cnRzd2l0aCgic3NsLyIpOgotICAgICAgICAgICAgcG9ydCArPSA0NDMKLSAgICAgICAgICAgIHBy
b3RvY29sID0gImh0dHBzIgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJvdG9jb2wgPSAi
aHR0cCIKLSAgICAgICAgcmV0dXJuICIlczovLzEyNy4wLjAuMToldS8lcyIgJSAocHJvdG9jb2ws
IHBvcnQsIHJlbGF0aXZlX3BhdGgpCi0KLSAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4n
LCAnd2luMzInKToKLSAgICAgICAgcmV0dXJuICJmaWxlOi8vLyIgKyBnZXRfYWJzb2x1dGVfcGF0
aChmdWxsX3BhdGgpCi0gICAgcmV0dXJuICJmaWxlOi8vIiArIGdldF9hYnNvbHV0ZV9wYXRoKGZ1
bGxfcGF0aCkKLQotCi1kZWYgZ2V0X2Fic29sdXRlX3BhdGgocGF0aCk6Ci0gICAgIiIiUmV0dXJu
cyBhbiBhYnNvbHV0ZSBVTklYIHBhdGguIiIiCi0gICAgcmV0dXJuIF93aW5fcGF0aF90b191bml4
KG9zLnBhdGguYWJzcGF0aChwYXRoKSkKLQotCi1kZWYgbWF5YmVfbWFrZV9kaXJlY3RvcnkoKnBh
dGgpOgotICAgICIiIkNyZWF0ZXMgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgaWYgaXQgZG9lc24n
dCBhbHJlYWR5IGV4aXN0LiIiIgotICAgIHRyeToKLSAgICAgICAgb3MubWFrZWRpcnMob3MucGF0
aC5qb2luKCpwYXRoKSkKLSAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgaWYgZS5lcnJu
byAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICByYWlzZQotCi0KLWRlZiBwYXRoX2Zyb21f
YmFzZSgqY29tcHMpOgotICAgICIiIlJldHVybnMgYW4gYWJzb2x1dGUgZmlsZW5hbWUgZnJvbSBh
IHNldCBvZiBjb21wb25lbnRzIHNwZWNpZmllZAotICAgIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2Yg
dGhlIHNvdXJjZSB0cmVlLiBJZiB0aGUgcGF0aCBkb2VzIG5vdCBleGlzdCwKLSAgICB0aGUgZXhj
ZXB0aW9uIFBhdGhOb3RGb3VuZCBpcyByYWlzZWQuIiIiCi0gICAgZ2xvYmFsIF9iYXNlZGlyCi0g
ICAgaWYgX2Jhc2VkaXIgPT0gTm9uZToKLSAgICAgICAgIyBXZSBjb21wdXRlIHRoZSB0b3Agb2Yg
dGhlIHNvdXJjZSB0cmVlIGJ5IGZpbmRpbmcgdGhlIGFic29sdXRlCi0gICAgICAgICMgcGF0aCBv
ZiB0aGlzIHNvdXJjZSBmaWxlLCBhbmQgdGhlbiBjbGltYmluZyB1cCB0aHJlZSBkaXJlY3Rvcmll
cwotICAgICAgICAjIGFzIGdpdmVuIGluIHN1YnBhdGguIElmIHdlIG1vdmUgdGhpcyBmaWxlLCBz
dWJwYXRoIG5lZWRzIHRvIGJlCi0gICAgICAgICMgdXBkYXRlZC4KLSAgICAgICAgcGF0aCA9IG9z
LnBhdGguYWJzcGF0aChfX2ZpbGVfXykKLSAgICAgICAgc3VicGF0aCA9IG9zLnBhdGguam9pbign
dGhpcmRfcGFydHknLCAnV2ViS2l0JykKLSAgICAgICAgX2Jhc2VkaXIgPSBwYXRoWzpwYXRoLmlu
ZGV4KHN1YnBhdGgpXQotICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oX2Jhc2VkaXIsICpjb21wcykK
LSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6Ci0gICAgICAgIHJhaXNlIFBhdGhOb3RG
b3VuZCgnY291bGQgbm90IGZpbmQgJXMnICUgKHBhdGgpKQotICAgIHJldHVybiBwYXRoCi0KLQot
ZGVmIHJlbW92ZV9kaXJlY3RvcnkoKnBhdGgpOgotICAgICIiIlJlY3Vyc2l2ZWx5IHJlbW92ZXMg
YSBkaXJlY3RvcnksIGV2ZW4gaWYgaXQncyBtYXJrZWQgcmVhZC1vbmx5LgotCi0gICAgUmVtb3Zl
IHRoZSBkaXJlY3RvcnkgbG9jYXRlZCBhdCAqcGF0aCwgaWYgaXQgZXhpc3RzLgotCi0gICAgc2h1
dGlsLnJtdHJlZSgpIGRvZXNuJ3Qgd29yayBvbiBXaW5kb3dzIGlmIGFueSBvZiB0aGUgZmlsZXMg
b3IgZGlyZWN0b3JpZXMKLSAgICBhcmUgcmVhZC1vbmx5LCB3aGljaCBzdm4gcmVwb3NpdG9yaWVz
IGFuZCBzb21lIC5zdm4gZmlsZXMgYXJlLiAgV2UgbmVlZCB0bwotICAgIGJlIGFibGUgdG8gZm9y
Y2UgdGhlIGZpbGVzIHRvIGJlIHdyaXRhYmxlIChpLmUuLCBkZWxldGFibGUpIGFzIHdlIHRyYXZl
cnNlCi0gICAgdGhlIHRyZWUuCi0KLSAgICBFdmVuIHdpdGggYWxsIHRoaXMsIFdpbmRvd3Mgc3Rp
bGwgc29tZXRpbWVzIGZhaWxzIHRvIGRlbGV0ZSBhIGZpbGUsIGNpdGluZwotICAgIGEgcGVybWlz
c2lvbiBlcnJvciAobWF5YmUgc29tZXRoaW5nIHRvIGRvIHdpdGggYW50aXZpcnVzIHNjYW5zIG9y
IGRpc2sKLSAgICBpbmRleGluZykuICBUaGUgYmVzdCBzdWdnZXN0aW9uIGFueSBvZiB0aGUgdXNl
ciBmb3J1bXMgaGFkIHdhcyB0byB3YWl0IGEKLSAgICBiaXQgYW5kIHRyeSBhZ2Fpbiwgc28gd2Ug
ZG8gdGhhdCB0b28uICBJdCdzIGhhbmQtd2F2aW5nLCBidXQgc29tZXRpbWVzIGl0Ci0gICAgd29y
a3MuIDovCi0gICAgIiIiCi0gICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKCpwYXRoKQotICAg
IGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlX3BhdGgpOgotICAgICAgICByZXR1cm4KLQotICAg
IHdpbjMyID0gRmFsc2UKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAg
d2luMzIgPSBUcnVlCi0gICAgICAgICMgU29tZSBwZW9wbGUgZG9uJ3QgaGF2ZSB0aGUgQVBJcyBp
bnN0YWxsZWQuIEluIHRoYXQgY2FzZSB3ZSdsbCBkbwotICAgICAgICAjIHdpdGhvdXQuCi0gICAg
ICAgIHRyeToKLSAgICAgICAgICAgIHdpbjMyYXBpID0gX19pbXBvcnRfXygnd2luMzJhcGknKQot
ICAgICAgICAgICAgd2luMzJjb24gPSBfX2ltcG9ydF9fKCd3aW4zMmNvbicpCi0gICAgICAgIGV4
Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHdpbjMyID0gRmFsc2UKLQotICAgICAgICBk
ZWYgcmVtb3ZlX3dpdGhfcmV0cnkocm1mdW5jLCBwYXRoKToKLSAgICAgICAgICAgIG9zLmNobW9k
KHBhdGgsIHN0YXQuU19JV1JJVEUpCi0gICAgICAgICAgICBpZiB3aW4zMjoKLSAgICAgICAgICAg
ICAgICB3aW4zMmFwaS5TZXRGaWxlQXR0cmlidXRlcyhwYXRoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpbjMyY29uLkZJTEVfQVRUUklCVVRFX05PUk1BTCkK
LSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXR1cm4gcm1mdW5jKHBhdGgpCi0g
ICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciwgZToKLSAgICAgICAgICAgICAgICBp
ZiBlLmVycm5vICE9IGVycm5vLkVBQ0NFUzoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAg
ICAgICAgICAgICAgICBwcmludCAnRmFpbGVkIHRvIGRlbGV0ZSAlczogdHJ5aW5nIGFnYWluJyAl
IHJlcHIocGF0aCkKLSAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcm1mdW5jKHBhdGgpCi0gICAgZWxzZToKLQotICAgICAgICBkZWYgcmVtb3Zl
X3dpdGhfcmV0cnkocm1mdW5jLCBwYXRoKToKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5r
KHBhdGgpOgotICAgICAgICAgICAgICAgIHJldHVybiBvcy5yZW1vdmUocGF0aCkKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJtZnVuYyhwYXRoKQotCi0gICAgZm9y
IHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZmlsZV9wYXRoLCB0b3Bkb3duPUZhbHNlKToK
LSAgICAgICAgIyBGb3IgUE9TSVg6ICBtYWtpbmcgdGhlIGRpcmVjdG9yeSB3cml0YWJsZSBndWFy
YW50ZWVzIHJlbW92YWJpbGl0eS4KLSAgICAgICAgIyBXaW5kb3dzIHdpbGwgaWdub3JlIHRoZSBu
b24tcmVhZC1vbmx5IGJpdHMgaW4gdGhlIGNobW9kIHZhbHVlLgotICAgICAgICBvcy5jaG1vZChy
b290LCAwNzcwKQotICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKLSAgICAgICAgICAgIHJlbW92
ZV93aXRoX3JldHJ5KG9zLnJlbW92ZSwgb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQotICAgICAg
ICBmb3IgbmFtZSBpbiBkaXJzOgotICAgICAgICAgICAgcmVtb3ZlX3dpdGhfcmV0cnkob3Mucm1k
aXIsIG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKLQotICAgIHJlbW92ZV93aXRoX3JldHJ5KG9z
LnJtZGlyLCBmaWxlX3BhdGgpCi0KLSMKLSMgV3JhcHBlcnMgYXJvdW5kIHBsYXRmb3JtX3V0aWxz
Ci0jCi0KLQotZGVmIHBsYXRmb3JtX25hbWUocGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIiUmV0dXJu
cyB0aGUgYXBwcm9wcmlhdGUgY2hyb21pdW0gcGxhdGZvcm0gbmFtZSBmb3IgfHBsYXRmb3JtfC4g
SWYKLSAgICAgICB8cGxhdGZvcm18IGlzIE5vbmUsIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNo
cm9taXVtIHBsYXRmb3JtIG9uIHRoZQotICAgICAgIGN1cnJlbnRseSBydW5uaW5nIHN5c3RlbS4g
SWYgfHBsYXRmb3JtfCBpcyBvZiB0aGUgZm9ybSAnY2hyb21pdW0tKicsCi0gICAgICAgaXQgaXMg
cmV0dXJuZWQgdW5jaGFuZ2VkLCBvdGhlcndpc2UgJ2Nocm9taXVtLScgaXMgcHJlcGVuZGVkLiIi
IgotICAgIGlmIHBsYXRmb3JtID09IE5vbmU6Ci0gICAgICAgIHJldHVybiBwbGF0Zm9ybV91dGls
cy5wbGF0Zm9ybV9uYW1lKCkKLSAgICBpZiBub3QgcGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21p
dW0tJyk6Ci0gICAgICAgIHBsYXRmb3JtID0gImNocm9taXVtLSIgKyBwbGF0Zm9ybQotICAgIHJl
dHVybiBwbGF0Zm9ybQotCi0KLWRlZiBwbGF0Zm9ybV92ZXJzaW9uKCk6Ci0gICAgcmV0dXJuIHBs
YXRmb3JtX3V0aWxzLnBsYXRmb3JtX3ZlcnNpb24oKQotCi0KLWRlZiBsaWdodHRwZF9leGVjdXRh
YmxlX3BhdGgoKToKLSAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMubGlnaHR0cGRfZXhlY3V0YWJs
ZV9wYXRoKCkKLQotCi1kZWYgbGlnaHR0cGRfbW9kdWxlX3BhdGgoKToKLSAgICByZXR1cm4gcGxh
dGZvcm1fdXRpbHMubGlnaHR0cGRfbW9kdWxlX3BhdGgoKQotCi0KLWRlZiBsaWdodHRwZF9waHBf
cGF0aCgpOgotICAgIHJldHVybiBwbGF0Zm9ybV91dGlscy5saWdodHRwZF9waHBfcGF0aCgpCi0K
LQotZGVmIHdkaWZmX3BhdGgoKToKLSAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMud2RpZmZfcGF0
aCgpCi0KLQotZGVmIHRlc3Rfc2hlbGxfcGF0aCh0YXJnZXQpOgotICAgIHJldHVybiBwbGF0Zm9y
bV91dGlscy50ZXN0X3NoZWxsX3BhdGgodGFyZ2V0KQotCi0KLWRlZiBpbWFnZV9kaWZmX3BhdGgo
dGFyZ2V0KToKLSAgICByZXR1cm4gcGxhdGZvcm1fdXRpbHMuaW1hZ2VfZGlmZl9wYXRoKHRhcmdl
dCkKLQotCi1kZWYgbGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgodGFyZ2V0KToKLSAgICByZXR1cm4g
cGxhdGZvcm1fdXRpbHMubGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgodGFyZ2V0KQotCi0KLWRlZiBm
dXp6eV9tYXRjaF9wYXRoKCk6Ci0gICAgcmV0dXJuIHBsYXRmb3JtX3V0aWxzLmZ1enp5X21hdGNo
X3BhdGgoKQotCi0KLWRlZiBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2VydmVyX3BpZCk6Ci0gICAg
cmV0dXJuIHBsYXRmb3JtX3V0aWxzLnNodXRfZG93bl9odHRwX3NlcnZlcihzZXJ2ZXJfcGlkKQot
Ci0KLWRlZiBraWxsX2FsbF90ZXN0X3NoZWxscygpOgotICAgIHBsYXRmb3JtX3V0aWxzLmtpbGxf
YWxsX3Rlc3Rfc2hlbGxzKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzLnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZv
cm1fdXRpbHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YTgwMWMuLjAwMDAw
MDAKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBA
Ci0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0j
IG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5h
bWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJQbGF0Zm9ybS1zcGVjaWZp
YyB1dGlsaXRpZXMgYW5kIHBzZXVkby1jb25zdGFudHMKLQotQW55IGZ1bmN0aW9ucyB3aG9zZSBp
bXBsZW1lbnRhdGlvbnMgb3IgdmFsdWVzIGRpZmZlciBmcm9tIG9uZSBwbGF0Zm9ybSB0bwotYW5v
dGhlciBzaG91bGQgYmUgZGVmaW5lZCBpbiB0aGVpciByZXNwZWN0aXZlIHBsYXRmb3JtX3V0aWxz
XzxwbGF0Zm9ybT4ucHkKLW1vZHVsZXMuIFRoZSBhcHByb3ByaWF0ZSBvbmUgb2YgdGhvc2Ugd2ls
bCBiZSBpbXBvcnRlZCBpbnRvIHRoaXMgbW9kdWxlIHRvCi1wcm92aWRlIGNhbGxlcnMgd2l0aCBh
IGNvbW1vbiwgcGxhdGZvcm0taW5kZXBlbmRlbnQgaW50ZXJmYWNlLgotCi1UaGlzIGZpbGUgc2hv
dWxkIG9ubHkgZXZlciBiZSBpbXBvcnRlZCBieSBsYXlvdXRfcGFja2FnZS5wYXRoX3V0aWxzLgot
IiIiCi0KLWltcG9ydCBzeXMKLQotIyBXZSBtYXkgbm90IHN1cHBvcnQgdGhlIHZlcnNpb24gb2Yg
UHl0aG9uIHRoYXQgYSB1c2VyIGhhcyBpbnN0YWxsZWQgKEN5Z3dpbgotIyBlc3BlY2lhbGx5IGhh
cyBoYWQgcHJvYmxlbXMpLCBidXQgd2UnbGwgYWxsb3cgdGhlIHBsYXRmb3JtIHV0aWxzIHRvIGJl
Ci0jIGluY2x1ZGVkIGluIGFueSBjYXNlIHNvIHdlIGRvbid0IGdldCBhbiBpbXBvcnQgZXJyb3Iu
Ci1pZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKLSAgICBmcm9tIHBsYXRm
b3JtX3V0aWxzX3dpbiBpbXBvcnQgKgotZWxpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0g
ICAgZnJvbSBwbGF0Zm9ybV91dGlsc19tYWMgaW1wb3J0ICoKLWVsaWYgc3lzLnBsYXRmb3JtIGlu
ICgnbGludXgnLCAnbGludXgyJywgJ2ZyZWVic2Q3JywgJ29wZW5ic2Q0Jyk6Ci0gICAgZnJvbSBw
bGF0Zm9ybV91dGlsc19saW51eCBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNf
bGludXgucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19saW51eC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYmIxYzVkYS4uMDAwMDAwMAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wbGF0Zm9ybV91dGlsc19saW51eC5weQor
KysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMg
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0j
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0j
ICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0iIiJUaGlzIGlzIHRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGF5
b3V0X3BhY2thZ2UucGxhdGZvcm1fdXRpbHMKLSAgIHBhY2thZ2UuIFRoaXMgZmlsZSBzaG91bGQg
b25seSBiZSBpbXBvcnRlZCBieSB0aGF0IHBhY2thZ2UuIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0
IHNpZ25hbAotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKLWltcG9ydCBsb2dnaW5nCi0K
LWltcG9ydCBwYXRoX3V0aWxzCi1pbXBvcnQgcGxhdGZvcm1fdXRpbHNfd2luCi0KLQotZGVmIHBs
YXRmb3JtX25hbWUoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwbGF0Zm9ybSB3
ZSdyZSBjdXJyZW50bHkgcnVubmluZyBvbi4iIiIKLSAgICByZXR1cm4gJ2Nocm9taXVtLWxpbnV4
JyArIHBsYXRmb3JtX3ZlcnNpb24oKQotCi0KLWRlZiBwbGF0Zm9ybV92ZXJzaW9uKCk6Ci0gICAg
IiIiUmV0dXJucyB0aGUgdmVyc2lvbiBzdHJpbmcgZm9yIHRoZSBwbGF0Zm9ybSwgZS5nLiAnLXZp
c3RhJyBvcgotICAgICctc25vd2xlb3BhcmQnLiBJZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgZGlz
dGluZ3Vpc2ggYmV0d2VlbgotICAgIG1pbm9yIHZlcnNpb25zLCBpdCByZXR1cm5zICcnLiIiIgot
ICAgIHJldHVybiAnJwotCi0KLWRlZiBnZXRfbnVtX2NvcmVzKCk6Ci0gICAgIiIiUmV0dXJucyB0
aGUgbnVtYmVyIG9mIGNvcmVzIG9uIHRoZSBtYWNoaW5lLiBGb3IgaHlwZXJ0aHJlYWRlZCBtYWNo
aW5lcywKLSAgICB0aGlzIHdpbGwgYmUgZG91YmxlIHRoZSBudW1iZXIgb2YgYWN0dWFsIHByb2Nl
c3NvcnMuIiIiCi0gICAgbnVtX2NvcmVzID0gb3Muc3lzY29uZigiU0NfTlBST0NFU1NPUlNfT05M
TiIpCi0gICAgaWYgaXNpbnN0YW5jZShudW1fY29yZXMsIGludCkgYW5kIG51bV9jb3JlcyA+IDA6
Ci0gICAgICAgIHJldHVybiBudW1fY29yZXMKLSAgICByZXR1cm4gMQotCi0KLWRlZiBiYXNlbGlu
ZV9wYXRoKHBsYXRmb3JtPU5vbmUpOgotICAgICIiIlJldHVybnMgdGhlIHBhdGggcmVsYXRpdmUg
dG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUgZm9yIHRoZQotICAgIGJhc2VsaW5lcyBmb3Ig
dGhlIHNwZWNpZmllZCBwbGF0Zm9ybSB2ZXJzaW9uLiBJZiB8cGxhdGZvcm18IGlzIE5vbmUsCi0g
ICAgdGhlbiB0aGUgdmVyc2lvbiBjdXJyZW50bHkgaW4gdXNlIGlzIHVzZWQuIiIiCi0gICAgaWYg
cGxhdGZvcm0gaXMgTm9uZToKLSAgICAgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybV9uYW1lKCkKLSAg
ICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgJ2RhdGEnLCAnbGF5
b3V0X3Rlc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxhdGZv
cm0nLCBwbGF0Zm9ybSwgJ0xheW91dFRlc3RzJykKLQotCi1kZWYgYmFzZWxpbmVfc2VhcmNoX3Bh
dGgocGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3Rvcmll
cyB0byBzZWFyY2ggZm9yIGJhc2VsaW5lcy9yZXN1bHRzLCBpbgotICAgIG9yZGVyIG9mIHByZWZl
cmVuY2UuIFBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4i
IiIKLSAgICByZXR1cm4gW2Jhc2VsaW5lX3BhdGgocGxhdGZvcm0pLAotICAgICAgICAgICAgcGxh
dGZvcm1fdXRpbHNfd2luLmJhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbicpLAotICAgICAgICAg
ICAgcGF0aF91dGlscy53ZWJraXRfYmFzZWxpbmVfcGF0aCgnd2luJyksCi0gICAgICAgICAgICBw
YXRoX3V0aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnKV0KLQotCi1kZWYgYXBhY2hlX2V4
ZWN1dGFibGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBz
dGFydCBBcGFjaGUiIiIKLSAgICBwYXRoID0gb3MucGF0aC5qb2luKCIvdXNyIiwgInNiaW4iLCAi
YXBhY2hlMiIpCi0gICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6Ci0gICAgICAgIHJldHVybiBw
YXRoCi0gICAgcHJpbnQgIlVuYWJsZSB0byBmaW5lIEFwYWNoZSBleGVjdXRhYmxlICVzIiAlIHBh
dGgKLSAgICBfbWlzc2luZ19hcGFjaGUoKQotCi0KLWRlZiBhcGFjaGVfY29uZmlnX2ZpbGVfcGF0
aCgpOgotICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8gQXBhY2hlIGNvbmZpZyBmaWxlIiIiCi0g
ICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoInRoaXJkX3BhcnR5IiwgIldlYktp
dCIsICJMYXlvdXRUZXN0cyIsCi0gICAgICAgICJodHRwIiwgImNvbmYiLCAiYXBhY2hlMi1kZWJp
YW4taHR0cGQuY29uZiIpCi0KLQotZGVmIGxpZ2h0dHBkX2V4ZWN1dGFibGVfcGF0aCgpOgotICAg
ICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBMaWdIVFRQZCIiIgotICAg
IGJpbnBhdGggPSAiL3Vzci9zYmluL2xpZ2h0dHBkIgotICAgIGlmIG9zLnBhdGguZXhpc3RzKGJp
bnBhdGgpOgotICAgICAgICByZXR1cm4gYmlucGF0aAotICAgIHByaW50ICJVbmFibGUgdG8gZmlu
ZCBMaWdIVFRQZCBleGVjdXRhYmxlICVzIiAlIGJpbnBhdGgKLSAgICBfbWlzc2luZ19saWdodHRw
ZCgpCi0KLQotZGVmIGxpZ2h0dHBkX21vZHVsZV9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUg
bGlicmFyeSBtb2R1bGUgcGF0aCBmb3IgTGlnSFRUUGQiIiIKLSAgICBtb2RwYXRoID0gIi91c3Iv
bGliL2xpZ2h0dHBkIgotICAgIGlmIG9zLnBhdGguZXhpc3RzKG1vZHBhdGgpOgotICAgICAgICBy
ZXR1cm4gbW9kcGF0aAotICAgIHByaW50ICJVbmFibGUgdG8gZmluZCBMaWdIVFRQZCBtb2R1bGVz
ICVzIiAlIG1vZHBhdGgKLSAgICBfbWlzc2luZ19saWdodHRwZCgpCi0KLQotZGVmIGxpZ2h0dHBk
X3BocF9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgUEhQIGV4ZWN1dGFibGUgcGF0aCBmb3Ig
TGlnSFRUUGQiIiIKLSAgICBiaW5wYXRoID0gIi91c3IvYmluL3BocC1jZ2kiCi0gICAgaWYgb3Mu
cGF0aC5leGlzdHMoYmlucGF0aCk6Ci0gICAgICAgIHJldHVybiBiaW5wYXRoCi0gICAgcHJpbnQg
IlVuYWJsZSB0byBmaW5kIFBIUCBDR0kgZXhlY3V0YWJsZSAlcyIgJSBiaW5wYXRoCi0gICAgX21p
c3NpbmdfbGlnaHR0cGQoKQotCi0KLWRlZiB3ZGlmZl9wYXRoKCk6Ci0gICAgIiIiUGF0aCB0byB0
aGUgV0RpZmYgZXhlY3V0YWJsZSwgd2hpY2ggd2UgYXNzdW1lIGlzIGFscmVhZHkgaW5zdGFsbGVk
IGFuZAotICAgIGluIHRoZSB1c2VyJ3MgJFBBVEguIiIiCi0gICAgcmV0dXJuICd3ZGlmZicKLQot
Ci1kZWYgaW1hZ2VfZGlmZl9wYXRoKHRhcmdldCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgaW1hZ2Vf
ZGlmZiBiaW5hcnkuCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9k
ZSAoZGVidWcgb3IgcmVsZWFzZSkiIiIKLSAgICByZXR1cm4gX3BhdGhfZnJvbV9idWlsZF9yZXN1
bHRzKHRhcmdldCwgJ2ltYWdlX2RpZmYnKQotCi0KLWRlZiBsYXlvdXRfdGVzdF9oZWxwZXJfcGF0
aCh0YXJnZXQpOgotICAgICIiIlBhdGggdG8gdGhlIGxheW91dF90ZXN0IGhlbHBlciBiaW5hcnks
IGlmIG5lZWRlZCwgZW1wdHkgb3RoZXJ3aXNlIiIiCi0gICAgcmV0dXJuICcnCi0KLQotZGVmIHRl
c3Rfc2hlbGxfcGF0aCh0YXJnZXQpOgotICAgICIiIlJldHVybiB0aGUgcGxhdGZvcm0tc3BlY2lm
aWMgYmluYXJ5IHBhdGggZm9yIG91ciBUZXN0U2hlbGwuCi0KLSAgICBBcmdzOgotICAgICAgdGFy
Z2V0OiBCdWlsZCB0YXJnZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkgIiIiCi0gICAgaWYgdGFy
Z2V0IGluICgnRGVidWcnLCAnUmVsZWFzZScpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBk
ZWJ1Z19wYXRoID0gX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRzKCdEZWJ1ZycsICd0ZXN0X3NoZWxs
JykKLSAgICAgICAgICAgIHJlbGVhc2VfcGF0aCA9IF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cygn
UmVsZWFzZScsICd0ZXN0X3NoZWxsJykKLQotICAgICAgICAgICAgZGVidWdfbXRpbWUgPSBvcy5z
dGF0KGRlYnVnX3BhdGgpLnN0X210aW1lCi0gICAgICAgICAgICByZWxlYXNlX210aW1lID0gb3Mu
c3RhdChyZWxlYXNlX3BhdGgpLnN0X210aW1lCi0KLSAgICAgICAgICAgIGlmIGRlYnVnX210aW1l
ID4gcmVsZWFzZV9tdGltZSBhbmQgdGFyZ2V0ID09ICdSZWxlYXNlJyBvciBcCi0gICAgICAgICAg
ICAgICByZWxlYXNlX210aW1lID4gZGVidWdfbXRpbWUgYW5kIHRhcmdldCA9PSAnRGVidWcnOgot
ICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnXHgxYlszMW1XYXJuaW5nOiB5b3UgYXJlIG5v
dCBydW5uaW5nIHRoZSBtb3N0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlY2Vu
dCB0ZXN0X3NoZWxsIGJpbmFyeS4gWW91IG5lZWQgdG8gcGFzcyAnCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICctLWRlYnVnIG9yIG5vdCB0byBzZWxlY3QgYmV0d2VlbiBEZWJ1ZyBhbmQg
JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVsZWFzZS5ceDFiWzBtJykKLSAgICAg
ICAgIyBUaGlzIHdpbGwgZmFpbCBpZiB3ZSBkb24ndCBoYXZlIGJvdGggYSBkZWJ1ZyBhbmQgcmVs
ZWFzZSBiaW5hcnkuCi0gICAgICAgICMgVGhhdCdzIGZpbmUgYmVjYXVzZSwgaW4gdGhpcyBjYXNl
LCB3ZSBtdXN0IGFscmVhZHkgYmUgcnVubmluZyB0aGUKLSAgICAgICAgIyBtb3N0IHVwLXRvLWRh
dGUgb25lLgotICAgICAgICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6Ci0gICAgICAg
ICAgICBwYXNzCi0KLSAgICByZXR1cm4gX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRzKHRhcmdldCwg
J3Rlc3Rfc2hlbGwnKQotCi0KLWRlZiBmdXp6eV9tYXRjaF9wYXRoKCk6Ci0gICAgIiIiUmV0dXJu
IHRoZSBwYXRoIHRvIHRoZSBmdXp6eSBtYXRjaGVyIGJpbmFyeS4iIiIKLSAgICByZXR1cm4gcGF0
aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnZnV6enltYXRjaCcsICdmdXp6
eW1hdGNoJykKLQotCi1kZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9waWQpOgotICAg
ICIiIlNodXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3Mg
ZnVsbHkgc2h1dCBkb3duLgotCi0gICAgQXJnczoKLSAgICAgIHNlcnZlcl9waWQ6IFRoZSBwcm9j
ZXNzIElEIG9mIHRoZSBydW5uaW5nIHNlcnZlci4KLSAgICAiIiIKLSAgICAjIHNlcnZlcl9waWQg
aXMgbm90IHNldCB3aGVuICJodHRwX3NlcnZlci5weSBzdG9wIiBpcyBydW4gbWFudWFsbHkuCi0g
ICAgaWYgc2VydmVyX3BpZCBpcyBOb25lOgotICAgICAgICAjIFRoaXMgaXNuJ3QgaWRlYWwsIHNp
bmNlIGl0IGNvdWxkIGNvbmZsaWN0IHdpdGggd2ViIHNlcnZlciBwcm9jZXNzZXMKLSAgICAgICAg
IyBub3Qgc3RhcnRlZCBieSBodHRwX3NlcnZlci5weSwgYnV0IGdvb2QgZW5vdWdoIGZvciBub3cu
Ci0gICAgICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ2xpZ2h0dHBkJykKLSAgICAgICAga2lsbF9hbGxf
cHJvY2VzcygnYXBhY2hlMicpCi0gICAgZWxzZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAg
b3Mua2lsbChzZXJ2ZXJfcGlkLCBzaWduYWwuU0lHVEVSTSkKLSAgICAgICAgICAgICNUT0RPKG1t
b3NzKSBNYXliZSB0aHJvdyBpbiBhIFNJR0tJTEwganVzdCB0byBiZSBzdXJlPwotICAgICAgICBl
eGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgICMgU29tZXRpbWVzIHdlIGdldCBhIGJhZCBQSUQg
KGUuZy4gZnJvbSBhIHN0YWxlIGh0dHBkLnBpZCBmaWxlKSwKLSAgICAgICAgICAgICMgc28gaWYg
a2lsbCBmYWlscyBvbiB0aGUgZ2l2ZW4gUElELCBqdXN0IHRyeSB0byAna2lsbGFsbCcgd2ViCi0g
ICAgICAgICAgICAjIHNlcnZlcnMuCi0gICAgICAgICAgICBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIo
Tm9uZSkKLQotCi1kZWYga2lsbF9wcm9jZXNzKHBpZCk6Ci0gICAgIiIiRm9yY2VmdWxseSBraWxs
IHRoZSBwcm9jZXNzLgotCi0gICAgQXJnczoKLSAgICAgIHBpZDogVGhlIGlkIG9mIHRoZSBwcm9j
ZXNzIHRvIGJlIGtpbGxlZC4KLSAgICAiIiIKLSAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0tJ
TEwpCi0KLQotZGVmIGtpbGxfYWxsX3Byb2Nlc3MocHJvY2Vzc19uYW1lKToKLSAgICBudWxsID0g
b3Blbihvcy5kZXZudWxsKQotICAgIHN1YnByb2Nlc3MuY2FsbChbJ2tpbGxhbGwnLCAnLVRFUk0n
LCAnLXUnLCBvcy5nZXRlbnYoJ1VTRVInKSwKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19u
YW1lXSwgc3RkZXJyPW51bGwpCi0gICAgbnVsbC5jbG9zZSgpCi0KLQotZGVmIGtpbGxfYWxsX3Rl
c3Rfc2hlbGxzKCk6Ci0gICAgIiIiS2lsbHMgYWxsIGluc3RhbmNlcyBvZiB0aGUgdGVzdF9zaGVs
bCBiaW5hcnkgY3VycmVudGx5IHJ1bm5pbmcuIiIiCi0gICAga2lsbF9hbGxfcHJvY2VzcygndGVz
dF9zaGVsbCcpCi0KLSMKLSMgUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb25zCi0jCi0KLQotZGVmIF9t
aXNzaW5nX2xpZ2h0dHBkKCk6Ci0gICAgcHJpbnQgJ1BsZWFzZSBpbnN0YWxsIHVzaW5nOiAic3Vk
byBhcHQtZ2V0IGluc3RhbGwgbGlnaHR0cGQgcGhwNS1jZ2kiJwotICAgIHByaW50ICdGb3IgY29t
cGxldGUgTGludXggYnVpbGQgcmVxdWlyZW1lbnRzLCBwbGVhc2Ugc2VlOicKLSAgICBwcmludCAn
aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGludXhCdWlsZEluc3RydWN0
aW9ucycKLSAgICBzeXMuZXhpdCgxKQotCi0KLWRlZiBfbWlzc2luZ19hcGFjaGUoKToKLSAgICBw
cmludCAoJ1BsZWFzZSBpbnN0YWxsIHVzaW5nOiAic3VkbyBhcHQtZ2V0IGluc3RhbGwgYXBhY2hl
MiAnCi0gICAgICAgICdsaWJhcGFjaGUyLW1vZC1waHA1IicpCi0gICAgcHJpbnQgJ0ZvciBjb21w
bGV0ZSBMaW51eCBidWlsZCByZXF1aXJlbWVudHMsIHBsZWFzZSBzZWU6JwotICAgIHByaW50ICdo
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS9MaW51eEJ1aWxkSW5zdHJ1Y3Rp
b25zJwotICAgIHN5cy5leGl0KDEpCi0KLQotZGVmIF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cygq
cGF0aGllcyk6Ci0gICAgIyBGSVhNRShka2VnZWwpOiB1c2UgbGF0ZXN0IG9yIHdhcm4gaWYgbW9y
ZSB0aGFuIG9uZSBmb3VuZD8KLSAgICBmb3IgZGlyIGluIFsic2NvbnNidWlsZCIsICJvdXQiLCAi
eGNvZGVidWlsZCJdOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gcGF0aF91dGls
cy5wYXRoX2Zyb21fYmFzZShkaXIsICpwYXRoaWVzKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAg
ICAgICBwYXNzCi0gICAgcmFpc2UgcGF0aF91dGlscy5QYXRoTm90Rm91bmQoIlVuYWJsZSB0byBm
aW5kICVzIGluIGJ1aWxkIHRyZWUiICUKLSAgICAgICAgKG9zLnBhdGguam9pbigqcGF0aGllcykp
KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbWFjLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcGxhdGZvcm1fdXRpbHNfbWFj
LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGMyMjFlLi4wMDAwMDAwCi0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3BsYXRmb3JtX3V0aWxzX21hYy5weQorKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi0j
IS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1l
dDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUg
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJUaGlzIGlzIHRoZSBNYWMgaW1w
bGVtZW50YXRpb24gb2YgdGhlIGxheW91dF9wYWNrYWdlLnBsYXRmb3JtX3V0aWxzCi0gICBwYWNr
YWdlLiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBwYWNrYWdlLiIi
IgotCi1pbXBvcnQgb3MKLWltcG9ydCBwbGF0Zm9ybQotaW1wb3J0IHNpZ25hbAotaW1wb3J0IHN1
YnByb2Nlc3MKLQotaW1wb3J0IHBhdGhfdXRpbHMKLQotCi1kZWYgcGxhdGZvcm1fbmFtZSgpOgot
ICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtIHdlJ3JlIGN1cnJlbnRseSBy
dW5uaW5nIG9uLiIiIgotICAgICMgQXQgdGhlIG1vbWVudCBhbGwgY2hyb21pdW0gbWFjIHJlc3Vs
dHMgYXJlIHZlcnNpb24taW5kZXBlbmRlbnQuIEF0IHNvbWUKLSAgICAjIHBvaW50IHdlIG1heSBu
ZWVkIHRvIHJldHVybiAnY2hyb21pdW0tbWFjJyArIFBsYXRmb3JtVmVyc2lvbigpCi0gICAgcmV0
dXJuICdjaHJvbWl1bS1tYWMnCi0KLQotZGVmIHBsYXRmb3JtX3ZlcnNpb24oKToKLSAgICAiIiJS
ZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhlIHBsYXRmb3JtLCBlLmcuICctdmlzdGEn
IG9yCi0gICAgJy1zbm93bGVvcGFyZCcuIElmIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBkaXN0aW5n
dWlzaCBiZXR3ZWVuCi0gICAgbWlub3IgdmVyc2lvbnMsIGl0IHJldHVybnMgJycuIiIiCi0gICAg
b3NfdmVyc2lvbl9zdHJpbmcgPSBwbGF0Zm9ybS5tYWNfdmVyKClbMF0gICMgZS5nLiAiMTAuNS42
IgotICAgIGlmIG5vdCBvc192ZXJzaW9uX3N0cmluZzoKLSAgICAgICAgcmV0dXJuICctbGVvcGFy
ZCcKLQotICAgIHJlbGVhc2VfdmVyc2lvbiA9IGludChvc192ZXJzaW9uX3N0cmluZy5zcGxpdCgn
LicpWzFdKQotCi0gICAgIyB3ZSBkb24ndCBzdXBwb3J0ICd0aWdlcicgb3IgZWFybGllciByZWxl
YXNlcwotICAgIGlmIHJlbGVhc2VfdmVyc2lvbiA9PSA1OgotICAgICAgICByZXR1cm4gJy1sZW9w
YXJkJwotICAgIGVsaWYgcmVsZWFzZV92ZXJzaW9uID09IDY6Ci0gICAgICAgIHJldHVybiAnLXNu
b3dsZW9wYXJkJwotCi0gICAgcmV0dXJuICcnCi0KLQotZGVmIGdldF9udW1fY29yZXMoKToKLSAg
ICAiIiJSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29yZXMgb24gdGhlIG1hY2hpbmUuIEZvciBoeXBl
cnRocmVhZGVkIG1hY2hpbmVzLAotICAgIHRoaXMgd2lsbCBiZSBkb3VibGUgdGhlIG51bWJlciBv
ZiBhY3R1YWwgcHJvY2Vzc29ycy4iIiIKLSAgICByZXR1cm4gaW50KG9zLnBvcGVuMigic3lzY3Rs
IC1uIGh3Lm5jcHUiKVsxXS5yZWFkKCkpCi0KLQotZGVmIGJhc2VsaW5lX3BhdGgocGxhdGZvcm09
Tm9uZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRo
ZSBzb3VyY2UgdHJlZSBmb3IgdGhlCi0gICAgYmFzZWxpbmVzIGZvciB0aGUgc3BlY2lmaWVkIHBs
YXRmb3JtIHZlcnNpb24uIElmIHxwbGF0Zm9ybXwgaXMgTm9uZSwKLSAgICB0aGVuIHRoZSB2ZXJz
aW9uIGN1cnJlbnRseSBpbiB1c2UgaXMgdXNlZC4iIiIKLSAgICBpZiBwbGF0Zm9ybSBpcyBOb25l
OgotICAgICAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUoKQotICAgIHJldHVybiBwYXRoX3V0
aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICdsYXlvdXRfdGVzdHMnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybScsIHBsYXRmb3JtLCAn
TGF5b3V0VGVzdHMnKQotCi0jIFRPRE86IFdlIHNob3VsZCBhZGQgbGVvcGFyZCBhbmQgc25vd2xl
b3BhcmQgdG8gdGhlIGxpc3Qgb2YgcGF0aHMgdG8gY2hlY2sKLSMgb25jZSB3ZSBzdGFydCBydW5u
aW5nIHRoZSB0ZXN0cyBmcm9tIHNub3dsZW9wYXJkLgotCi0KLWRlZiBiYXNlbGluZV9zZWFyY2hf
cGF0aChwbGF0Zm9ybT1Ob25lKToKLSAgICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIGRpcmVjdG9y
aWVzIHRvIHNlYXJjaCBmb3IgYmFzZWxpbmVzL3Jlc3VsdHMsIGluCi0gICAgb3JkZXIgb2YgcHJl
ZmVyZW5jZS4gUGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVl
LiIiIgotICAgIHJldHVybiBbYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSksCi0gICAgICAgICAgICBw
YXRoX3V0aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnICsgcGxhdGZvcm1fdmVyc2lvbigp
KSwKLSAgICAgICAgICAgIHBhdGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpXQot
Ci0KLWRlZiB3ZGlmZl9wYXRoKCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgV0RpZmYgZXhlY3V0YWJs
ZSwgd2hpY2ggd2UgYXNzdW1lIGlzIGFscmVhZHkgaW5zdGFsbGVkIGFuZAotICAgIGluIHRoZSB1
c2VyJ3MgJFBBVEguIiIiCi0gICAgcmV0dXJuICd3ZGlmZicKLQotCi1kZWYgaW1hZ2VfZGlmZl9w
YXRoKHRhcmdldCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgaW1hZ2VfZGlmZiBleGVjdXRhYmxlCi0K
LSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBidWlsZCB0eXBlIC0gJ0RlYnVnJywnUmVsZWFzZScs
ZXRjLiIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd4Y29kZWJ1aWxk
JywgdGFyZ2V0LCAnaW1hZ2VfZGlmZicpCi0KLQotZGVmIGxheW91dF90ZXN0X2hlbHBlcl9wYXRo
KHRhcmdldCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgbGF5b3V0X3Rlc3RfaGVscGVyIGV4ZWN1dGFi
bGUsIGlmIG5lZWRlZCwgZW1wdHkgb3RoZXJ3aXNlCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0
OiBidWlsZCB0eXBlIC0gJ0RlYnVnJywnUmVsZWFzZScsZXRjLiIiIgotICAgIHJldHVybiBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd4Y29kZWJ1aWxkJywgdGFyZ2V0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXRfdGVzdF9oZWxwZXInKQotCi0KLWRlZiB0
ZXN0X3NoZWxsX3BhdGgodGFyZ2V0KToKLSAgICAiIiJQYXRoIHRvIHRoZSB0ZXN0X3NoZWxsIGV4
ZWN1dGFibGUuCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBidWlsZCB0eXBlIC0gJ0RlYnVn
JywnUmVsZWFzZScsZXRjLiIiIgotICAgICMgVE9ETyhwaW5rZXJ0b24pOiBtYWtlIHx0YXJnZXR8
IGhhcHB5IHdpdGggY2FzZS1zZW5zaXRpdmUgZmlsZSBzeXN0ZW1zLgotICAgIHJldHVybiBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd4Y29kZWJ1aWxkJywgdGFyZ2V0LCAnVGVzdFNoZWxsLmFw
cCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnRzJywgJ01h
Y09TJywgJ1Rlc3RTaGVsbCcpCi0KLQotZGVmIGFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKToKLSAg
ICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBhY2hlIiIiCi0gICAg
cmV0dXJuIG9zLnBhdGguam9pbigiL3VzciIsICJzYmluIiwgImh0dHBkIikKLQotCi1kZWYgYXBh
Y2hlX2NvbmZpZ19maWxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIEFwYWNo
ZSBjb25maWcgZmlsZSIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCJ0
aGlyZF9wYXJ0eSIsICJXZWJLaXQiLCAiTGF5b3V0VGVzdHMiLAotICAgICAgICAiaHR0cCIsICJj
b25mIiwgImFwYWNoZTItaHR0cGQuY29uZiIpCi0KLQotZGVmIGxpZ2h0dHBkX2V4ZWN1dGFibGVf
cGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBMaWdI
VFRQZCIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0
eScsICdsaWdodHRwZCcsICdtYWMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdiaW4nLCAnbGlnaHR0cGQnKQotCi0KLWRlZiBsaWdodHRwZF9tb2R1bGVfcGF0aCgpOgot
ICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCi0g
ICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0
dHBkJywgJ21hYycsICdsaWInKQotCi0KLWRlZiBsaWdodHRwZF9waHBfcGF0aCgpOgotICAgICIi
IlJldHVybnMgdGhlIFBIUCBleGVjdXRhYmxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCi0gICAgcmV0
dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywg
J21hYycsICdiaW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaHAt
Y2dpJykKLQotCi1kZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9waWQpOgotICAgICIi
IlNodXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVs
bHkgc2h1dCBkb3duLgotCi0gICAgICBBcmdzOgotICAgICAgICBzZXJ2ZXJfcGlkOiBUaGUgcHJv
Y2VzcyBJRCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCi0gICAgIiIiCi0gICAgIyBzZXJ2ZXJfcGlk
IGlzIG5vdCBzZXQgd2hlbiAiaHR0cF9zZXJ2ZXIucHkgc3RvcCIgaXMgcnVuIG1hbnVhbGx5Lgot
ICAgIGlmIHNlcnZlcl9waWQgaXMgTm9uZToKLSAgICAgICAgIyBUT0RPKG1tb3NzKSBUaGlzIGlz
bid0IGlkZWFsLCBzaW5jZSBpdCBjb3VsZCBjb25mbGljdCB3aXRoIGxpZ2h0dHBkCi0gICAgICAg
ICMgcHJvY2Vzc2VzIG5vdCBzdGFydGVkIGJ5IGh0dHBfc2VydmVyLnB5LCBidXQgZ29vZCBlbm91
Z2ggZm9yIG5vdy4KLSAgICAgICAga2lsbF9hbGxfcHJvY2VzcygnbGlnaHR0cGQnKQotICAgICAg
ICBraWxsX2FsbF9wcm9jZXNzKCdodHRwZCcpCi0gICAgZWxzZToKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgb3Mua2lsbChzZXJ2ZXJfcGlkLCBzaWduYWwuU0lHVEVSTSkKLSAgICAgICAgICAg
ICMgVE9ETyhtbW9zcykgTWF5YmUgdGhyb3cgaW4gYSBTSUdLSUxMIGp1c3QgdG8gYmUgc3VyZT8K
LSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAjIFNvbWV0aW1lcyB3ZSBnZXQg
YSBiYWQgUElEIChlLmcuIGZyb20gYSBzdGFsZSBodHRwZC5waWQgZmlsZSksCi0gICAgICAgICAg
ICAjIHNvIGlmIGtpbGwgZmFpbHMgb24gdGhlIGdpdmVuIFBJRCwganVzdCB0cnkgdG8gJ2tpbGxh
bGwnIHdlYgotICAgICAgICAgICAgIyBzZXJ2ZXJzLgotICAgICAgICAgICAgc2h1dF9kb3duX2h0
dHBfc2VydmVyKE5vbmUpCi0KLQotZGVmIGtpbGxfcHJvY2VzcyhwaWQpOgotICAgICIiIkZvcmNl
ZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KLQotICAgIEFyZ3M6Ci0gICAgICBwaWQ6IFRoZSBpZCBv
ZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCi0gICAgIiIiCi0gICAgb3Mua2lsbChwaWQsIHNp
Z25hbC5TSUdLSUxMKQotCi0KLWRlZiBraWxsX2FsbF9wcm9jZXNzKHByb2Nlc3NfbmFtZSk6Ci0g
ICAgIyBPbiBNYWMgT1MgWCAxMC42LCBraWxsYWxsIGhhcyBhIG5ldyBjb25zdHJhaW50OiAtU0lH
TkFMTkFNRSBvcgotICAgICMgLVNJR05BTE5VTUJFUiBtdXN0IGNvbWUgZmlyc3QuICBFeGFtcGxl
IHByb2JsZW06Ci0gICAgIyAgICQga2lsbGFsbCAtdSAkVVNFUiAtVEVSTSBsaWdodHRwZAotICAg
ICMgICBraWxsYWxsOiBpbGxlZ2FsIG9wdGlvbiAtLSBUCi0gICAgIyBVc2Ugb2YgdGhlIGVhcmxp
ZXIgLVRFUk0gcGxhY2VtZW50IGlzIGp1c3QgZmluZSBvbiAxMC41LgotICAgIG51bGwgPSBvcGVu
KG9zLmRldm51bGwpCi0gICAgc3VicHJvY2Vzcy5jYWxsKFsna2lsbGFsbCcsICctVEVSTScsICct
dScsIG9zLmdldGVudignVVNFUicpLAotICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19uYW1l
XSwgc3RkZXJyPW51bGwpCi0gICAgbnVsbC5jbG9zZSgpCi0KLQotZGVmIGtpbGxfYWxsX3Rlc3Rf
c2hlbGxzKCk6Ci0gICAgIiIiS2lsbHMgYWxsIGluc3RhbmNlcyBvZiB0aGUgdGVzdF9zaGVsbCBi
aW5hcnkgY3VycmVudGx5IHJ1bm5pbmcuIiIiCi0gICAga2lsbF9hbGxfcHJvY2VzcygnVGVzdFNo
ZWxsJykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxzX3dpbi5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3BsYXRmb3JtX3V0aWxz
X3dpbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U2NGQ3OC4uMDAwMDAwMAot
LS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9wbGF0Zm9ybV91dGlsc193aW4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBA
QAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
IyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBu
YW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiVGhpcyBpcyB0aGUgTGlu
dXggaW1wbGVtZW50YXRpb24gb2YgdGhlIGxheW91dF9wYWNrYWdlLnBsYXRmb3JtX3V0aWxzCi0g
ICBwYWNrYWdlLiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBwYWNr
YWdlLiIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBwYXRoX3V0aWxzCi1pbXBvcnQgc3VicHJvY2Vz
cwotaW1wb3J0IHN5cwotCi0KLWRlZiBwbGF0Zm9ybV9uYW1lKCk6Ci0gICAgIiIiUmV0dXJucyB0
aGUgbmFtZSBvZiB0aGUgcGxhdGZvcm0gd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgb24uIiIiCi0g
ICAgIyBXZSdyZSBub3QgcmVhZHkgZm9yIHZlcnNpb24tc3BlY2lmaWMgcmVzdWx0cyB5ZXQuIFdo
ZW4gd2UgdW5jb21tZW50Ci0gICAgIyB0aGlzLCB3ZSBhbHNvIG5lZWQgdG8gYWRkIGl0IHRvIHRo
ZSBCYXNlbGluZVNlYXJjaFBhdGgoKQotICAgIHJldHVybiAnY2hyb21pdW0td2luJyArIHBsYXRm
b3JtX3ZlcnNpb24oKQotCi0KLWRlZiBwbGF0Zm9ybV92ZXJzaW9uKCk6Ci0gICAgIiIiUmV0dXJu
cyB0aGUgdmVyc2lvbiBzdHJpbmcgZm9yIHRoZSBwbGF0Zm9ybSwgZS5nLiAnLXZpc3RhJyBvcgot
ICAgICctc25vd2xlb3BhcmQnLiBJZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgZGlzdGluZ3Vpc2gg
YmV0d2VlbgotICAgIG1pbm9yIHZlcnNpb25zLCBpdCByZXR1cm5zICcnLiIiIgotICAgIHdpbnZl
ciA9IHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpCi0gICAgaWYgd2ludmVyWzBdID09IDYgYW5kICh3
aW52ZXJbMV0gPT0gMSk6Ci0gICAgICAgIHJldHVybiAnLTcnCi0gICAgaWYgd2ludmVyWzBdID09
IDYgYW5kICh3aW52ZXJbMV0gPT0gMCk6Ci0gICAgICAgIHJldHVybiAnLXZpc3RhJwotICAgIGlm
IHdpbnZlclswXSA9PSA1IGFuZCAod2ludmVyWzFdID09IDEgb3Igd2ludmVyWzFdID09IDIpOgot
ICAgICAgICByZXR1cm4gJy14cCcKLSAgICByZXR1cm4gJycKLQotCi1kZWYgZ2V0X251bV9jb3Jl
cygpOgotICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBjb3JlcyBvbiB0aGUgbWFjaGluZS4g
Rm9yIGh5cGVydGhyZWFkZWQgbWFjaGluZXMsCi0gICAgdGhpcyB3aWxsIGJlIGRvdWJsZSB0aGUg
bnVtYmVyIG9mIGFjdHVhbCBwcm9jZXNzb3JzLiIiIgotICAgIHJldHVybiBpbnQob3MuZW52aXJv
bi5nZXQoJ05VTUJFUl9PRl9QUk9DRVNTT1JTJywgMSkpCi0KLQotZGVmIGJhc2VsaW5lX3BhdGgo
cGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUg
dG9wIG9mIHRoZSBzb3VyY2UgdHJlZSBmb3IgdGhlCi0gICAgYmFzZWxpbmVzIGZvciB0aGUgc3Bl
Y2lmaWVkIHBsYXRmb3JtIHZlcnNpb24uIElmIHxwbGF0Zm9ybXwgaXMgTm9uZSwKLSAgICB0aGVu
IHRoZSB2ZXJzaW9uIGN1cnJlbnRseSBpbiB1c2UgaXMgdXNlZC4iIiIKLSAgICBpZiBwbGF0Zm9y
bSBpcyBOb25lOgotICAgICAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUoKQotICAgIHJldHVy
biBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICdsYXlvdXRfdGVz
dHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybScsIHBs
YXRmb3JtLCAnTGF5b3V0VGVzdHMnKQotCi0KLWRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0
Zm9ybT1Ob25lKToKLSAgICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNl
YXJjaCBmb3IgYmFzZWxpbmVzL3Jlc3VsdHMsIGluCi0gICAgb3JkZXIgb2YgcHJlZmVyZW5jZS4g
UGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLiIiIgotICAg
IGRpcnMgPSBbXQotICAgIGlmIHBsYXRmb3JtIGlzIE5vbmU6Ci0gICAgICAgIHBsYXRmb3JtID0g
cGxhdGZvcm1fbmFtZSgpCi0KLSAgICBpZiBwbGF0Zm9ybSA9PSAnY2hyb21pdW0td2luLXhwJzoK
LSAgICAgICAgZGlycy5hcHBlbmQoYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkpCi0gICAgaWYgcGxh
dGZvcm0gaW4gKCdjaHJvbWl1bS13aW4teHAnLCAnY2hyb21pdW0td2luLXZpc3RhJyk6Ci0gICAg
ICAgIGRpcnMuYXBwZW5kKGJhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbi12aXN0YScpKQotICAg
IGRpcnMuYXBwZW5kKGJhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbicpKQotICAgIGRpcnMuYXBw
ZW5kKHBhdGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3dpbicpKQotICAgIGRpcnMuYXBw
ZW5kKHBhdGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpKQotICAgIHJldHVybiBk
aXJzCi0KLQotZGVmIHdkaWZmX3BhdGgoKToKLSAgICAiIiJQYXRoIHRvIHRoZSBXRGlmZiBleGVj
dXRhYmxlLCB3aG9zZSBiaW5hcnkgaXMgY2hlY2tlZCBpbiBvbiBXaW4iIiIKLSAgICByZXR1cm4g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2Jpbics
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dkaWZmLmV4ZScpCi0KLQot
ZGVmIGltYWdlX2RpZmZfcGF0aCh0YXJnZXQpOgotICAgICIiIlJldHVybiB0aGUgcGxhdGZvcm0t
c3BlY2lmaWMgYmluYXJ5IHBhdGggZm9yIHRoZSBpbWFnZSBjb21wYXJlIHV0aWwuCi0gICAgICAg
ICBXZSB1c2UgdGhpcyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBiaW5hcnkgaW4gdGhlIGRlZmF1bHQg
bG9jYXRpb24KLSAgICAgICAgIGluIHBhdGhfdXRpbHMuCi0KLSAgICBBcmdzOgotICAgICAgdGFy
Z2V0OiBCdWlsZCB0YXJnZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkKLSAgICAiIiIKLSAgICBy
ZXR1cm4gX2ZpbmRfYmluYXJ5KHRhcmdldCwgJ2ltYWdlX2RpZmYuZXhlJykKLQotCi1kZWYgbGF5
b3V0X3Rlc3RfaGVscGVyX3BhdGgodGFyZ2V0KToKLSAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3Jt
LXNwZWNpZmljIGJpbmFyeSBwYXRoIGZvciB0aGUgbGF5b3V0IHRlc3QgaGVscGVyLgotICAgIFdl
IHVzZSB0aGlzIGlmIHdlIGNhbid0IGZpbmQgdGhlIGJpbmFyeSBpbiB0aGUgZGVmYXVsdCBsb2Nh
dGlvbgotICAgIGluIHBhdGhfdXRpbHMuCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBCdWls
ZCB0YXJnZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkKLSAgICAiIiIKLSAgICByZXR1cm4gX2Zp
bmRfYmluYXJ5KHRhcmdldCwgJ2xheW91dF90ZXN0X2hlbHBlci5leGUnKQotCi0KLWRlZiB0ZXN0
X3NoZWxsX3BhdGgodGFyZ2V0KToKLSAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmlj
IGJpbmFyeSBwYXRoIGZvciBvdXIgVGVzdFNoZWxsLgotICAgICAgIFdlIHVzZSB0aGlzIGlmIHdl
IGNhbid0IGZpbmQgdGhlIGJpbmFyeSBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbgotICAgICAgIGlu
IHBhdGhfdXRpbHMuCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9k
ZSAoZGVidWcgb3IgcmVsZWFzZSkKLSAgICAiIiIKLSAgICByZXR1cm4gX2ZpbmRfYmluYXJ5KHRh
cmdldCwgJ3Rlc3Rfc2hlbGwuZXhlJykKLQotCi1kZWYgYXBhY2hlX2V4ZWN1dGFibGVfcGF0aCgp
OgotICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBBcGFjaGUiIiIK
LSAgICBwYXRoID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3ln
d2luJywgInVzciIsICJzYmluIikKLSAgICAjIERvbid0IHJldHVybiBodHRwZC5leGUgc2luY2Ug
d2Ugd2FudCB0byB1c2UgdGhpcyBmcm9tIGN5Z3dpbi4KLSAgICByZXR1cm4gb3MucGF0aC5qb2lu
KHBhdGgsICJodHRwZCIpCi0KLQotZGVmIGFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCk6Ci0gICAg
IiIiUmV0dXJucyB0aGUgcGF0aCB0byBBcGFjaGUgY29uZmlnIGZpbGUiIiIKLSAgICByZXR1cm4g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgidGhpcmRfcGFydHkiLCAiV2ViS2l0IiwgIkxheW91
dFRlc3RzIiwKLSAgICAgICAgImh0dHAiLCAiY29uZiIsICJjeWd3aW4taHR0cGQuY29uZiIpCi0K
LQotZGVmIGxpZ2h0dHBkX2V4ZWN1dGFibGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIGV4
ZWN1dGFibGUgcGF0aCB0byBzdGFydCBMaWdIVFRQZCIiIgotICAgIHJldHVybiBwYXRoX3V0aWxz
LnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICd3aW4nLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMaWdodFRQRC5leGUnKQotCi0KLWRlZiBs
aWdodHRwZF9tb2R1bGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxl
IHBhdGggZm9yIExpZ0hUVFBkIiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jh
c2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ3dpbicsICdsaWInKQotCi0KLWRlZiBsaWdo
dHRwZF9waHBfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIFBIUCBleGVjdXRhYmxlIHBhdGgg
Zm9yIExpZ0hUVFBkIiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3Ro
aXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ3dpbicsICdwaHA1JywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAncGhwLWNnaS5leGUnKQotCi0KLWRlZiBzaHV0X2Rvd25faHR0
cF9zZXJ2ZXIoc2VydmVyX3BpZCk6Ci0gICAgIiIiU2h1dCBkb3duIHRoZSBsaWdodHRwZCB3ZWIg
c2VydmVyLiBCbG9ja3MgdW50aWwgaXQncyBmdWxseSBzaHV0IGRvd24uCi0KLSAgICBBcmdzOgot
ICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5pbmcgc2VydmVyLgot
ICAgICAgICAgIFVudXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZXRob2QuCi0g
ICAgIiIiCi0gICAgc3VicHJvY2Vzcy5Qb3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvaW0n
LCAnTGlnaHRUUEQuZXhlJyksCi0gICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vz
cy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2Fp
dCgpCi0gICAgc3VicHJvY2Vzcy5Qb3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvaW0nLCAn
aHR0cGQuZXhlJyksCi0gICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBF
LAotICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCi0K
LQotZGVmIGtpbGxfcHJvY2VzcyhwaWQpOgotICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJv
Y2Vzcy4KLQotICAgIEFyZ3M6Ci0gICAgICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBi
ZSBraWxsZWQuCi0gICAgIiIiCi0gICAgc3VicHJvY2Vzcy5jYWxsKCgndGFza2tpbGwuZXhlJywg
Jy9mJywgJy9waWQnLCBzdHIocGlkKSksCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJw
cm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUp
Ci0KLQotZGVmIGtpbGxfYWxsX3Rlc3Rfc2hlbGxzKHNlbGYpOgotICAgICIiIktpbGxzIGFsbCBp
bnN0YW5jZXMgb2YgdGhlIHRlc3Rfc2hlbGwgYmluYXJ5IGN1cnJlbnRseSBydW5uaW5nLiIiIgot
ICAgIHN1YnByb2Nlc3MuUG9wZW4oKCd0YXNra2lsbC5leGUnLCAnL2YnLCAnL2ltJywgJ3Rlc3Rf
c2hlbGwuZXhlJyksCi0gICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBF
LAotICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCi0K
LSMKLSMgUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb25zLgotIwotCi0KLWRlZiBfZmluZF9iaW5hcnko
dGFyZ2V0LCBiaW5hcnkpOgotICAgICIiIk9uIFdpbmRvd3MsIHdlIGxvb2sgZm9yIGJpbmFyaWVz
IHRoYXQgd2UgY29tcGlsZSBpbiBwb3RlbnRpYWxseQotICAgIHR3byBwbGFjZXM6IHNyYy93ZWJr
aXQvJHRhcmdldCAocHJlZmVyYWJseSwgd2hpY2ggd2UgZ2V0IGlmIHdlCi0gICAgYnVpbHQgdXNp
bmcgd2Via2l0X2dsdWUuZ3lwKSwgb3Igc3JjL2Nocm9tZS8kdGFyZ2V0IChpZiBjb21waWxlZCBz
b21lCi0gICAgb3RoZXIgd2F5KS4iIiIKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiBwYXRoX3V0
aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCB0YXJnZXQsIGJpbmFyeSkKLSAgICBleGNlcHQg
cGF0aF91dGlscy5QYXRoTm90Rm91bmQ6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVy
biBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCdjaHJvbWUnLCB0YXJnZXQsIGJpbmFyeSkKLSAg
ICAgICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgotICAgICAgICAgICAgcmV0dXJu
IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ2J1aWxkJywgdGFyZ2V0LCBiaW5hcnkpCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CmluZGV4
IGEzYmU4ZjQuLjE0MWFhZTcgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3Rlc3RfZXhwZWN0YXRpb25zLnB5CkBAIC0zNiw3ICszNiw3IEBAIGltcG9ydCBvcwogaW1wb3J0
IHJlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQotaW1wb3J0IHBhdGhfdXRpbHMKK2Zyb20gcG9y
dCBpbXBvcnQgcGF0aF91dGlscwogCiBzeXMucGF0aC5hcHBlbmQocGF0aF91dGlscy5wYXRoX2Zy
b21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnV2ViS2l0VG9vbHMnKSkgCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2Zp
bGVzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvdGVzdF9maWxlcy5weQppbmRleCAwMjI3ZTdiLi41ODFmOTE0IDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS90ZXN0X2ZpbGVzLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmlsZXMucHkKQEAgLTM2LDcgKzM2LDcgQEAgdW5k
ZXIgdGhhdCBkaXJlY3RvcnkuIiIiCiAKIGltcG9ydCBnbG9iCiBpbXBvcnQgb3MKLWltcG9ydCBw
YXRoX3V0aWxzCitmcm9tIHBvcnQgaW1wb3J0IHBhdGhfdXRpbHMKIAogIyBXaGVuIGNvbGxlY3Rp
bmcgdGVzdCBjYXNlcywgd2UgaW5jbHVkZSBhbnkgZmlsZSB3aXRoIHRoZXNlIGV4dGVuc2lvbnMu
CiBfc3VwcG9ydGVkX2ZpbGVfZXh0ZW5zaW9ucyA9IHNldChbJy5odG1sJywgJy5zaHRtbCcsICcu
eG1sJywgJy54aHRtbCcsICcucGwnLApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS90ZXN0X3NoZWxsX3RocmVhZC5weQppbmRleCBmOWEwMGMxLi5iMzU3NjIwIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS90ZXN0X3NoZWxsX3RocmVhZC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weQpAQCAtNDYs
NyArNDYsNyBAQCBpbXBvcnQgdGhyZWFkCiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQog
Ci1pbXBvcnQgcGF0aF91dGlscworZnJvbSBwb3J0IGltcG9ydCBwYXRoX3V0aWxzCiBpbXBvcnQg
dGVzdF9mYWlsdXJlcwogCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93ZWJz
b2NrZXRfc2VydmVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWUwYmE5Li4w
MDAwMDAwCi0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3dlYnNvY2tldF9zZXJ2ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMTYg
KzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJv
bWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiQSBjbGFzcyB0
byBoZWxwIHN0YXJ0L3N0b3AgdGhlIFB5V2ViU29ja2V0IHNlcnZlciB1c2VkIGJ5IGxheW91dCB0
ZXN0cy4iIiIKLQotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgb3MK
LWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCB0
aW1lCi1pbXBvcnQgdXJsbGliCi0KLWltcG9ydCBwYXRoX3V0aWxzCi1pbXBvcnQgcGxhdGZvcm1f
dXRpbHMKLWltcG9ydCBodHRwX3NlcnZlcgotCi1fV1NfTE9HX1BSRUZJWCA9ICdweXdlYnNvY2tl
dC53cy5sb2ctJwotX1dTU19MT0dfUFJFRklYID0gJ3B5d2Vic29ja2V0Lndzcy5sb2ctJwotCi1f
REVGQVVMVF9XU19QT1JUID0gODg4MAotX0RFRkFVTFRfV1NTX1BPUlQgPSA5MzIzCi0KLQotZGVm
IHVybF9pc19hbGl2ZSh1cmwpOgotICAiIiJDaGVja3MgdG8gc2VlIGlmIHdlIGdldCBhbiBodHRw
IHJlc3BvbnNlIGZyb20gfHVybHwuCi0gIFdlIHBvbGwgdGhlIHVybCA1IHRpbWVzIHdpdGggYSAx
IHNlY29uZCBkZWxheS4gIElmIHdlIGRvbid0Ci0gIGdldCBhIHJlcGx5IGluIHRoYXQgdGltZSwg
d2UgZ2l2ZSB1cCBhbmQgYXNzdW1lIHRoZSBodHRwZAotICBkaWRuJ3Qgc3RhcnQgcHJvcGVybHku
Ci0KLSAgQXJnczoKLSAgICB1cmw6IFRoZSBVUkwgdG8gY2hlY2suCi0gIFJldHVybjoKLSAgICBU
cnVlIGlmIHRoZSB1cmwgaXMgYWxpdmUuCi0gICIiIgotICB3YWl0X3RpbWUgPSA1Ci0gIHdoaWxl
IHdhaXRfdGltZSA+IDA6Ci0gICAgdHJ5OgotICAgICAgcmVzcG9uc2UgPSB1cmxsaWIudXJsb3Bl
bih1cmwpCi0gICAgICAjIFNlcnZlciBpcyB1cCBhbmQgcmVzcG9uZGluZy4KLSAgICAgIHJldHVy
biBUcnVlCi0gICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICBwYXNzCi0gICAgd2FpdF90aW1lIC09
IDEKLSAgICAjIFdhaXQgYSBzZWNvbmQgYW5kIHRyeSBhZ2Fpbi4KLSAgICB0aW1lLnNsZWVwKDEp
Ci0KLSAgcmV0dXJuIEZhbHNlCi0KLQotZGVmIHJlbW92ZV9sb2dfZmlsZXMoZm9sZGVyLCBzdGFy
dHNfd2l0aCk6Ci0gICAgZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRlcikKLSAgICBmb3IgZmlsZSBp
biBmaWxlczoKLSAgICAgICAgaWYgZmlsZS5zdGFydHN3aXRoKHN0YXJ0c193aXRoKToKLSAgICAg
ICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsIGZpbGUpCi0gICAgICAgICAg
ICBvcy5yZW1vdmUoZnVsbF9wYXRoKQotCi0KLWNsYXNzIFB5V2ViU29ja2V0Tm90U3RhcnRlZChF
eGNlcHRpb24pOgotICAgIHBhc3MKLQotCi1jbGFzcyBQeVdlYlNvY2tldE5vdEZvdW5kKEV4Y2Vw
dGlvbik6Ci0gICAgcGFzcwotCi0KLWNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0
dHBkKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyLCBwb3J0PV9ERUZBVUxU
X1dTX1BPUlQsCi0gICAgICAgICAgICAgICAgIHJvb3Q9Tm9uZSwKLSAgICAgICAgICAgICAgICAg
dXNlX3Rscz1GYWxzZSwKLSAgICAgICAgICAgICAgICAgcHJpdmF0ZV9rZXk9aHR0cF9zZXJ2ZXIu
TGlnaHR0cGQuX3BlbV9maWxlLAotICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZT1odHRwX3Nl
cnZlci5MaWdodHRwZC5fcGVtX2ZpbGUsCi0gICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2N5Z3dp
bj1Ob25lLAotICAgICAgICAgICAgICAgICBwaWRmaWxlPU5vbmUpOgotICAgICAgICAiIiJBcmdz
OgotICAgICAgICAgIG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQg
dGVzdCByZXN1bHQgZGlyZWN0b3J5Ci0gICAgICAgICIiIgotICAgICAgICBodHRwX3NlcnZlci5M
aWdodHRwZC5fX2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb3J0PXBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJvb3Q9cm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVnaXN0ZXJfY3lnd2luPXJlZ2lzdGVyX2N5Z3dpbikKLSAgICAgICAgc2VsZi5fb3V0cHV0
X2RpciA9IG91dHB1dF9kaXIKLSAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKLSAgICAgICAg
c2VsZi5fcG9ydCA9IHBvcnQKLSAgICAgICAgc2VsZi5fcm9vdCA9IHJvb3QKLSAgICAgICAgc2Vs
Zi5fdXNlX3RscyA9IHVzZV90bHMKLSAgICAgICAgc2VsZi5fcHJpdmF0ZV9rZXkgPSBwcml2YXRl
X2tleQotICAgICAgICBzZWxmLl9jZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlCi0gICAgICAgIGlm
IHNlbGYuX3BvcnQ6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0ID0gaW50KHNlbGYuX3BvcnQpCi0g
ICAgICAgIGlmIHNlbGYuX3VzZV90bHM6Ci0gICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfbmFtZSA9
ICdQeVdlYlNvY2tldChTZWN1cmUpJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5f
c2VydmVyX25hbWUgPSAnUHlXZWJTb2NrZXQnCi0gICAgICAgIHNlbGYuX3BpZGZpbGUgPSBwaWRm
aWxlCi0gICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQotCi0gICAgICAgICMgV2Via2l0IHRlc3Rz
Ci0gICAgICAgIGlmIHNlbGYuX3Jvb3Q6Ci0gICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHMg
PSBvcy5wYXRoLmFic3BhdGgoc2VsZi5fcm9vdCkKLSAgICAgICAgICAgIHNlbGYuX3dlYl9zb2Nr
ZXRfdGVzdHMgPSBvcy5wYXRoLmFic3BhdGgoCi0gICAgICAgICAgICAgICAgb3MucGF0aC5qb2lu
KHNlbGYuX3Jvb3QsICd3ZWJzb2NrZXQnLCAndGVzdHMnKSkKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzID0gcGF0
aF91dGlscy5wYXRoX2Zyb21fYmFzZSgKLSAgICAgICAgICAgICAgICAgICAgJ3RoaXJkX3BhcnR5
JywgJ1dlYktpdCcsICdMYXlvdXRUZXN0cycsICd3ZWJzb2NrZXQnLAotICAgICAgICAgICAgICAg
ICAgICAndGVzdHMnKQotICAgICAgICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0cyA9IHBhdGhf
dXRpbHMucGF0aF9mcm9tX2Jhc2UoCi0gICAgICAgICAgICAgICAgICAgICd0aGlyZF9wYXJ0eScs
ICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMnKQotICAgICAgICAgICAgZXhjZXB0IHBhdGhfdXRpbHMu
UGF0aE5vdEZvdW5kOgotICAgICAgICAgICAgICAgIHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMgPSBO
b25lCi0KLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl93ZWJfc29j
a2V0X3Rlc3RzOgotICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdObyBuZWVkIHRvIHN0YXJ0ICVz
IHNlcnZlci4nICUgc2VsZi5fc2VydmVyX25hbWUpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAg
ICAgaWYgc2VsZi5pc19ydW5uaW5nKCk6Ci0gICAgICAgICAgICByYWlzZSBQeVdlYlNvY2tldE5v
dFN0YXJ0ZWQoJyVzIGlzIGFscmVhZHkgcnVubmluZy4nICUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfbmFtZSkKLQotICAgICAgICB0aW1lX3N0
ciA9IHRpbWUuc3RyZnRpbWUoJyVkJWIlWS0lSCVNJVMnKQotICAgICAgICBpZiBzZWxmLl91c2Vf
dGxzOgotICAgICAgICAgICAgbG9nX3ByZWZpeCA9IF9XU1NfTE9HX1BSRUZJWAotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgbG9nX3ByZWZpeCA9IF9XU19MT0dfUFJFRklYCi0gICAgICAgIGxv
Z19maWxlX25hbWUgPSBsb2dfcHJlZml4ICsgdGltZV9zdHIKLQotICAgICAgICAjIFJlbW92ZSBv
bGQgbG9nIGZpbGVzLiBXZSBvbmx5IG5lZWQgdG8ga2VlcCB0aGUgbGFzdCBvbmVzLgotICAgICAg
ICByZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsIGxvZ19wcmVmaXgpCi0KLSAgICAg
ICAgZXJyb3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxlX25h
bWUgKyAiLWVyci50eHQiKQotCi0gICAgICAgIG91dHB1dF9sb2cgPSBvcy5wYXRoLmpvaW4oc2Vs
Zi5fb3V0cHV0X2RpciwgbG9nX2ZpbGVfbmFtZSArICItb3V0LnR4dCIpCi0gICAgICAgIHNlbGYu
X3dzb3V0ID0gb3BlbihvdXRwdXRfbG9nLCAidyIpCi0KLSAgICAgICAgcHl0aG9uX2ludGVycCA9
IHN5cy5leGVjdXRhYmxlCi0gICAgICAgIHB5d2Vic29ja2V0X2Jhc2UgPSBwYXRoX3V0aWxzLnBh
dGhfZnJvbV9iYXNlKAotICAgICAgICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdXZWJL
aXRUb29scycsICdweXdlYnNvY2tldCcpCi0gICAgICAgIHB5d2Vic29ja2V0X3NjcmlwdCA9IHBh
dGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoCi0gICAgICAgICAgICAndGhpcmRfcGFydHknLCAnV2Vi
S2l0JywgJ1dlYktpdFRvb2xzJywgJ3B5d2Vic29ja2V0JywKLSAgICAgICAgICAgICdtb2RfcHl3
ZWJzb2NrZXQnLCAnc3RhbmRhbG9uZS5weScpCi0gICAgICAgIHN0YXJ0X2NtZCA9IFsKLSAgICAg
ICAgICAgIHB5dGhvbl9pbnRlcnAsIHB5d2Vic29ja2V0X3NjcmlwdCwKLSAgICAgICAgICAgICct
cCcsIHN0cihzZWxmLl9wb3J0KSwKLSAgICAgICAgICAgICctZCcsIHNlbGYuX2xheW91dF90ZXN0
cywKLSAgICAgICAgICAgICctcycsIHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMsCi0gICAgICAgICAg
ICAnLWwnLCBlcnJvcl9sb2csCi0gICAgICAgIF0KLQotICAgICAgICBoYW5kbGVyX21hcF9maWxl
ID0gb3MucGF0aC5qb2luKHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2hhbmRsZXJfbWFwLnR4dCcpCi0gICAgICAgIGlmIG9z
LnBhdGguZXhpc3RzKGhhbmRsZXJfbWFwX2ZpbGUpOgotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1
ZygnVXNpbmcgaGFuZGxlcl9tYXBfZmlsZTogJXMnICUgaGFuZGxlcl9tYXBfZmlsZSkKLSAgICAg
ICAgICAgIHN0YXJ0X2NtZC5hcHBlbmQoJy1tJykKLSAgICAgICAgICAgIHN0YXJ0X2NtZC5hcHBl
bmQoaGFuZGxlcl9tYXBfZmlsZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvZ2dpbmcu
d2FybmluZygnTm8gaGFuZGxlcl9tYXBfZmlsZSBmb3VuZCcpCi0KLSAgICAgICAgaWYgc2VsZi5f
dXNlX3RsczoKLSAgICAgICAgICAgIHN0YXJ0X2NtZC5leHRlbmQoWyctdCcsICctaycsIHNlbGYu
X3ByaXZhdGVfa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1jJywgc2VsZi5f
Y2VydGlmaWNhdGVdKQotCi0gICAgICAgICMgUHV0IHRoZSBjeWd3aW4gZGlyZWN0b3J5IGZpcnN0
IGluIHRoZSBwYXRoIHRvIGZpbmQgY3lnd2luMS5kbGwKLSAgICAgICAgZW52ID0gb3MuZW52aXJv
bgotICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKLSAgICAg
ICAgICAgIGVudlsnUEFUSCddID0gJyVzOyVzJyAlICgKLSAgICAgICAgICAgICAgICBwYXRoX3V0
aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAnYmluJyksCi0gICAg
ICAgICAgICAgICAgZW52WydQQVRIJ10pCi0KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3
aW4zMicgYW5kIHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbjoKLSAgICAgICAgICAgIHNldHVwX21vdW50
ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywKLSAg
ICAgICAgICAgICAgICAnc2V0dXBfbW91bnQuYmF0JykKLSAgICAgICAgICAgIHN1YnByb2Nlc3Mu
UG9wZW4oc2V0dXBfbW91bnQpLndhaXQoKQotCi0gICAgICAgIGVudlsnUFlUSE9OUEFUSCddID0g
KHB5d2Vic29ja2V0X2Jhc2UgKyBvcy5wYXRoLnBhdGhzZXAgKwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbnYuZ2V0KCdQWVRIT05QQVRIJywgJycpKQotCi0gICAgICAgIGxvZ2dpbmcu
ZGVidWcoJ1N0YXJ0aW5nICVzIHNlcnZlciBvbiAlZC4nICUgKAotICAgICAgICAgICAgc2VsZi5f
c2VydmVyX25hbWUsIHNlbGYuX3BvcnQpKQotICAgICAgICBsb2dnaW5nLmRlYnVnKCdjbWRsaW5l
OiAlcycgJSAnICcuam9pbihzdGFydF9jbWQpKQotICAgICAgICBzZWxmLl9wcm9jZXNzID0gc3Vi
cHJvY2Vzcy5Qb3BlbihzdGFydF9jbWQsIHN0ZG91dD1zZWxmLl93c291dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQotCi0gICAg
ICAgICMgV2FpdCBhIGJpdCBiZWZvcmUgY2hlY2tpbmcgdGhlIGxpdmVuZXNzIG9mIHRoZSBzZXJ2
ZXIuCi0gICAgICAgIHRpbWUuc2xlZXAoMC41KQotCi0gICAgICAgIGlmIHNlbGYuX3VzZV90bHM6
Ci0gICAgICAgICAgICB1cmwgPSAnaHR0cHMnCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB1
cmwgPSAnaHR0cCcKLSAgICAgICAgdXJsID0gdXJsICsgJzovLzEyNy4wLjAuMTolZC8nICUgc2Vs
Zi5fcG9ydAotICAgICAgICBpZiBub3QgdXJsX2lzX2FsaXZlKHVybCk6Ci0gICAgICAgICAgICBm
cCA9IG9wZW4ob3V0cHV0X2xvZykKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBm
b3IgbGluZSBpbiBmcDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcihsaW5lKQot
ICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAg
ICAgICByYWlzZSBQeVdlYlNvY2tldE5vdFN0YXJ0ZWQoCi0gICAgICAgICAgICAgICAgJ0ZhaWxl
ZCB0byBzdGFydCAlcyBzZXJ2ZXIgb24gcG9ydCAlcy4nICUKLSAgICAgICAgICAgICAgICAgICAg
KHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLl9wb3J0KSkKLQotICAgICAgICAjIE91ciBwcm9jZXNz
IHRlcm1pbmF0ZWQgYWxyZWFkeQotICAgICAgICBpZiBzZWxmLl9wcm9jZXNzLnJldHVybmNvZGUg
IT0gTm9uZToKLSAgICAgICAgICAgIHJhaXNlIFB5V2ViU29ja2V0Tm90U3RhcnRlZCgKLSAgICAg
ICAgICAgICAgICAnRmFpbGVkIHRvIHN0YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5fc2VydmVyX25h
bWUpCi0gICAgICAgIGlmIHNlbGYuX3BpZGZpbGU6Ci0gICAgICAgICAgICBmID0gb3BlbihzZWxm
Ll9waWRmaWxlLCAndycpCi0gICAgICAgICAgICBmLndyaXRlKCIlZCIgJSBzZWxmLl9wcm9jZXNz
LnBpZCkKLSAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9
RmFsc2UpOgotICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBzZWxmLmlzX3J1bm5pbmcoKToK
LSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAg
ICAgICBwaWQgPSBzZWxmLl9wcm9jZXNzLnBpZAotICAgICAgICBlbGlmIHNlbGYuX3BpZGZpbGU6
Ci0gICAgICAgICAgICBmID0gb3BlbihzZWxmLl9waWRmaWxlKQotICAgICAgICAgICAgcGlkID0g
aW50KGYucmVhZCgpLnN0cmlwKCkpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICBp
ZiBub3QgcGlkOgotICAgICAgICAgICAgcmFpc2UgUHlXZWJTb2NrZXROb3RGb3VuZCgKLSAgICAg
ICAgICAgICAgICAnRmFpbGVkIHRvIGZpbmQgJXMgc2VydmVyIHBpZC4nICUgc2VsZi5fc2VydmVy
X25hbWUpCi0KLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygnU2h1dHRpbmcgZG93biAlcyBzZXJ2ZXIg
JWQuJyAlIChzZWxmLl9zZXJ2ZXJfbmFtZSwgcGlkKSkKLSAgICAgICAgcGxhdGZvcm1fdXRpbHMu
a2lsbF9wcm9jZXNzKHBpZCkKLQotICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgotICAgICAgICAg
ICAgc2VsZi5fcHJvY2Vzcy53YWl0KCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25l
Ci0KLSAgICAgICAgaWYgc2VsZi5fd3NvdXQ6Ci0gICAgICAgICAgICBzZWxmLl93c291dC5jbG9z
ZSgpCi0gICAgICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKLQotCi1pZiAnX19tYWluX18nID09
IF9fbmFtZV9fOgotICAgICMgUHJvdmlkZSBzb21lIGNvbW1hbmQgbGluZSBwYXJhbXMgZm9yIHN0
YXJ0aW5nIHRoZSBQeVdlYlNvY2tldCBzZXJ2ZXIKLSAgICAjIG1hbnVhbGx5LgotICAgIG9wdGlv
bl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQotICAgIG9wdGlvbl9wYXJzZXIuYWRk
X29wdGlvbignLS1zZXJ2ZXInLCB0eXBlPSdjaG9pY2UnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaG9pY2VzPVsnc3RhcnQnLCAnc3RvcCddLCBkZWZhdWx0PSdzdGFydCcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NlcnZlciBhY3Rpb24gKHN0YXJ0fHN0b3Ap
JykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcG9ydCcsIGRlc3Q9J3Bv
cnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsIGhlbHA9J1Bv
cnQgdG8gbGlzdGVuIG9uJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1yJywgJy0t
cm9vdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0Fic29sdXRlIHBhdGgg
dG8gRG9jdW1lbnRSb290ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG92
ZXJyaWRlcyBsYXlvdXQgdGVzdCByb290cyknKQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlv
bignLXQnLCAnLS10bHMnLCBkZXN0PSd1c2VfdGxzJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdD1GYWxzZSwgaGVscD0ndXNlIFRMUyAod3NzOi8vKScpCi0gICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCctaycsICctLXByaXZhdGVfa2V5JywgZGVzdD0ncHJpdmF0ZV9rZXknLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxwPSdUTFMgcHJpdmF0
ZSBrZXkgZmlsZS4nKQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLWMnLCAnLS1jZXJ0
aWZpY2F0ZScsIGRlc3Q9J2NlcnRpZmljYXRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdD0nJywgaGVscD0nVExTIGNlcnRpZmljYXRlIGZpbGUuJykKLSAgICBvcHRpb25f
cGFyc2VyLmFkZF9vcHRpb24oJy0tcmVnaXN0ZXJfY3lnd2luJywgYWN0aW9uPSJzdG9yZV90cnVl
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0icmVnaXN0ZXJfY3lnd2luIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUmVnaXN0ZXIgQ3lnd2luIHBhdGhz
IChvbiBXaW4gdHJ5IGJvdHMpJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tcGlk
ZmlsZScsIGhlbHA9J3BhdGggdG8gcGlkIGZpbGUuJykKLSAgICBvcHRpb25zLCBhcmdzID0gb3B0
aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkKLQotICAgIGlmIG5vdCBvcHRpb25zLnBvcnQ6Ci0gICAg
ICAgIGlmIG9wdGlvbnMudXNlX3RsczoKLSAgICAgICAgICAgIG9wdGlvbnMucG9ydCA9IF9ERUZB
VUxUX1dTU19QT1JUCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvcHRpb25zLnBvcnQgPSBf
REVGQVVMVF9XU19QT1JUCi0KLSAgICBrd2RzID0geydwb3J0Jzogb3B0aW9ucy5wb3J0LCAndXNl
X3Rscyc6IG9wdGlvbnMudXNlX3Rsc30KLSAgICBpZiBvcHRpb25zLnJvb3Q6Ci0gICAgICAgIGt3
ZHNbJ3Jvb3QnXSA9IG9wdGlvbnMucm9vdAotICAgIGlmIG9wdGlvbnMucHJpdmF0ZV9rZXk6Ci0g
ICAgICAgIGt3ZHNbJ3ByaXZhdGVfa2V5J10gPSBvcHRpb25zLnByaXZhdGVfa2V5Ci0gICAgaWYg
b3B0aW9ucy5jZXJ0aWZpY2F0ZToKLSAgICAgICAga3dkc1snY2VydGlmaWNhdGUnXSA9IG9wdGlv
bnMuY2VydGlmaWNhdGUKLSAgICBrd2RzWydyZWdpc3Rlcl9jeWd3aW4nXSA9IG9wdGlvbnMucmVn
aXN0ZXJfY3lnd2luCi0gICAgaWYgb3B0aW9ucy5waWRmaWxlOgotICAgICAgICBrd2RzWydwaWRm
aWxlJ10gPSBvcHRpb25zLnBpZGZpbGUKLQotICAgIHB5d2Vic29ja2V0ID0gUHlXZWJTb2NrZXQo
dGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAqKmt3ZHMpCi0KLSAgICBpZiAnc3RhcnQnID09IG9wdGlv
bnMuc2VydmVyOgotICAgICAgICBweXdlYnNvY2tldC5zdGFydCgpCi0gICAgZWxzZToKLSAgICAg
ICAgcHl3ZWJzb2NrZXQuc3RvcChmb3JjZT1UcnVlKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9fX2luaXRfXy5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvX19pbml0X18ucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5NGYyNAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvX19pbml0X18u
cHkKQEAgLTAsMCArMSw1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
IiIiUGxhdGZvcm0tc3BlY2lmaWMgdXRpbGl0aWVzIGFuZCBwc2V1ZG8tY29uc3RhbnRzCisKK0Fu
eSBmdW5jdGlvbnMgd2hvc2UgaW1wbGVtZW50YXRpb25zIG9yIHZhbHVlcyBkaWZmZXIgZnJvbSBv
bmUgcGxhdGZvcm0gdG8KK2Fub3RoZXIgc2hvdWxkIGJlIGRlZmluZWQgaW4gdGhlaXIgcmVzcGVj
dGl2ZSA8cGxhdGZvcm0+LnB5Cittb2R1bGVzLiBUaGUgYXBwcm9wcmlhdGUgb25lIG9mIHRob3Nl
IHdpbGwgYmUgaW1wb3J0ZWQgaW50byB0aGlzIG1vZHVsZSB0bworcHJvdmlkZSBjYWxsZXJzIHdp
dGggYSBjb21tb24sIHBsYXRmb3JtLWluZGVwZW5kZW50IGludGVyZmFjZS4KKworVGhpcyBmaWxl
IHNob3VsZCBvbmx5IGV2ZXIgYmUgaW1wb3J0ZWQgYnkgbGF5b3V0X3BhY2thZ2UucGF0aF91dGls
cy4KKyIiIgorCitpbXBvcnQgc3lzCisKKyMgV2UgbWF5IG5vdCBzdXBwb3J0IHRoZSB2ZXJzaW9u
IG9mIFB5dGhvbiB0aGF0IGEgdXNlciBoYXMgaW5zdGFsbGVkIChDeWd3aW4KKyMgZXNwZWNpYWxs
eSBoYXMgaGFkIHByb2JsZW1zKSwgYnV0IHdlJ2xsIGFsbG93IHRoZSBwbGF0Zm9ybSB1dGlscyB0
byBiZQorIyBpbmNsdWRlZCBpbiBhbnkgY2FzZSBzbyB3ZSBkb24ndCBnZXQgYW4gaW1wb3J0IGVy
cm9yLgoraWYgc3lzLnBsYXRmb3JtIGluICgnY3lnd2luJywgJ3dpbjMyJyk6CisgICAgZnJvbSBj
aHJvbWl1bV93aW4gaW1wb3J0ICoKK2VsaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAg
IGZyb20gY2hyb21pdW1fbWFjIGltcG9ydCAqCitlbGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2xpbnV4
JywgJ2xpbnV4MicsICdmcmVlYnNkNycsICdvcGVuYnNkNCcpOgorICAgIGZyb20gY2hyb21pdW1f
bGludXggaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIzM2Y4ZQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hl
X2h0dHBfc2VydmVyLnB5CkBAIC0wLDAgKzEsMjI5IEBACisjIS91c3IvYmluL2VudiBweXRob24K
KyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisiIiJBIGNsYXNzIHRvIHN0YXJ0L3N0b3AgdGhlIGFwYWNoZSBodHRwIHNl
cnZlciB1c2VkIGJ5IGxheW91dCB0ZXN0cy4iIiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBv
cHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQg
c3lzCisKK2ltcG9ydCBodHRwX3NlcnZlcl9iYXNlCitpbXBvcnQgcGF0aF91dGlscworaW1wb3J0
IHBvcnQKKworCitjbGFzcyBMYXlvdXRUZXN0QXBhY2hlSHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5I
dHRwU2VydmVyQmFzZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0X2Rpcik6Cisg
ICAgICAgICIiIkFyZ3M6CisgICAgICAgICAgb3V0cHV0X2RpcjogdGhlIGFic29sdXRlIHBhdGgg
dG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdCBkaXJlY3RvcnkKKyAgICAgICAgIiIiCisgICAgICAg
IHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAgIHNlbGYuX2h0dHBkX3Byb2Mg
PSBOb25lCisgICAgICAgIHBhdGhfdXRpbHMubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3V0cHV0X2Rp
cikKKworICAgICAgICBzZWxmLm1hcHBpbmdzID0gW3sncG9ydCc6IDgwMDB9LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIHsncG9ydCc6IDgwODB9LAorICAgICAgICAgICAgICAgICAgICAgICAg
IHsncG9ydCc6IDgwODF9LAorICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9ydCc6IDg0NDMs
ICdzc2xjZXJ0JzogVHJ1ZX1dCisKKyAgICAgICAgIyBUaGUgdXBzdHJlYW0gLmNvbmYgZmlsZSBh
c3N1bWVkIHRoZSBleGlzdGVuY2Ugb2YgL3RtcC9XZWJLaXQgZm9yCisgICAgICAgICMgcGxhY2lu
ZyBhcGFjaGUgZmlsZXMgbGlrZSB0aGUgbG9jayBmaWxlIHRoZXJlLgorICAgICAgICBzZWxmLl9y
dW50aW1lX3BhdGggPSBvcy5wYXRoLmpvaW4oIi90bXAiLCAiV2ViS2l0IikKKyAgICAgICAgcGF0
aF91dGlscy5tYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLl9ydW50aW1lX3BhdGgpCisKKyAgICAg
ICAgIyBUaGUgUElEIHJldHVybmVkIHdoZW4gQXBhY2hlIGlzIHN0YXJ0ZWQgZ29lcyBhd2F5IChk
dWUgdG8gZHJvcHBpbmcKKyAgICAgICAgIyBwcml2aWxlZ2VzPykuIFRoZSBwcm9wZXIgY29udHJv
bGxpbmcgUElEIGlzIHdyaXR0ZW4gdG8gYSBmaWxlIGluIHRoZQorICAgICAgICAjIGFwYWNoZSBy
dW50aW1lIGRpcmVjdG9yeS4KKyAgICAgICAgc2VsZi5fcGlkX2ZpbGUgPSBvcy5wYXRoLmpvaW4o
c2VsZi5fcnVudGltZV9wYXRoLCAnaHR0cGQucGlkJykKKworICAgICAgICB0ZXN0X2RpciA9IHBh
dGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsCisgICAgICAg
ICAgICAnTGF5b3V0VGVzdHMnKQorICAgICAgICBqc190ZXN0X3Jlc291cmNlc19kaXIgPSBzZWxm
Ll9jeWd3aW5fc2FmZV9qb2luKHRlc3RfZGlyLCAiZmFzdCIsICJqcyIsCisgICAgICAgICAgICAi
cmVzb3VyY2VzIikKKyAgICAgICAgbWltZV90eXBlc19wYXRoID0gc2VsZi5fY3lnd2luX3NhZmVf
am9pbih0ZXN0X2RpciwgImh0dHAiLCAiY29uZiIsCisgICAgICAgICAgICAibWltZS50eXBlcyIp
CisgICAgICAgIGNlcnRfZmlsZSA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4odGVzdF9kaXIsICJo
dHRwIiwgImNvbmYiLAorICAgICAgICAgICAgIndlYmtpdC1odHRwZC5wZW0iKQorICAgICAgICBh
Y2Nlc3NfbG9nID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbihvdXRwdXRfZGlyLCAiYWNjZXNzX2xv
Zy50eHQiKQorICAgICAgICBlcnJvcl9sb2cgPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2luKG91dHB1
dF9kaXIsICJlcnJvcl9sb2cudHh0IikKKyAgICAgICAgZG9jdW1lbnRfcm9vdCA9IHNlbGYuX2N5
Z3dpbl9zYWZlX2pvaW4odGVzdF9kaXIsICJodHRwIiwgInRlc3RzIikKKworICAgICAgICBleGVj
dXRhYmxlID0gcG9ydC5hcGFjaGVfZXhlY3V0YWJsZV9wYXRoKCkKKyAgICAgICAgaWYgc2VsZi5f
aXNfY3lnd2luKCk6CisgICAgICAgICAgICBleGVjdXRhYmxlID0gc2VsZi5fZ2V0X2N5Z3dpbl9w
YXRoKGV4ZWN1dGFibGUpCisKKyAgICAgICAgY21kID0gW2V4ZWN1dGFibGUsCisgICAgICAgICAg
ICAnLWYnLCBzZWxmLl9nZXRfYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgodGVzdF9kaXIsIG91dHB1
dF9kaXIpLAorICAgICAgICAgICAgJy1DJywgIlwnRG9jdW1lbnRSb290ICVzXCciICUgZG9jdW1l
bnRfcm9vdCwKKyAgICAgICAgICAgICctYycsICJcJ0FsaWFzIC9qcy10ZXN0LXJlc291cmNlcyAl
c1wnIiAlIGpzX3Rlc3RfcmVzb3VyY2VzX2RpciwKKyAgICAgICAgICAgICctQycsICJcJ0xpc3Rl
biAlc1wnIiAlICIxMjcuMC4wLjE6ODAwMCIsCisgICAgICAgICAgICAnLUMnLCAiXCdMaXN0ZW4g
JXNcJyIgJSAiMTI3LjAuMC4xOjgwODEiLAorICAgICAgICAgICAgJy1jJywgIlwnVHlwZXNDb25m
aWcgXCIlc1wiXCciICUgbWltZV90eXBlc19wYXRoLAorICAgICAgICAgICAgJy1jJywgIlwnQ3Vz
dG9tTG9nIFwiJXNcIiBjb21tb25cJyIgJSBhY2Nlc3NfbG9nLAorICAgICAgICAgICAgJy1jJywg
IlwnRXJyb3JMb2cgXCIlc1wiXCciICUgZXJyb3JfbG9nLAorICAgICAgICAgICAgJy1DJywgIlwn
VXNlciBcIiVzXCJcJyIgJSBvcy5lbnZpcm9uLmdldCgiVVNFUk5BTUUiLAorICAgICAgICAgICAg
ICAgIG9zLmVudmlyb24uZ2V0KCJVU0VSIiwgIiIpKV0KKworICAgICAgICBpZiBzZWxmLl9pc19j
eWd3aW4oKToKKyAgICAgICAgICAgIGN5Z2JpbiA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uo
J3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nKQorICAgICAgICAgICAgIyBOb3QgZW50aXJl
bHkgc3VyZSB3aHksIGJ1dCBmcm9tIGN5Z3dpbiB3ZSBuZWVkIHRvIHJ1biB0aGUKKyAgICAgICAg
ICAgICMgaHR0cGQgY29tbWFuZCB0aHJvdWdoIGJhc2guCisgICAgICAgICAgICBzZWxmLl9zdGFy
dF9jbWQgPSBbCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGN5Z2JpbiwgJ2Jhc2guZXhl
JyksCisgICAgICAgICAgICAgICAgJy1jJywKKyAgICAgICAgICAgICAgICAnUEFUSD0lcyAlcycg
JSAoc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGN5Z2JpbiksICIgIi5qb2luKGNtZCkpLAorICAgICAg
ICAgICAgICBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRPRE8ob2phbik6IFdoZW4g
d2UgZ2V0IGN5Z3dpbiB1c2luZyBBcGFjaGUgMiwgdXNlIHNldCB0aGUKKyAgICAgICAgICAgICMg
Y2VydCBmaWxlIGZvciBjeWd3aW4gYXMgd2VsbC4KKyAgICAgICAgICAgIGNtZC5leHRlbmQoWyct
YycsICJcJ1NTTENlcnRpZmljYXRlRmlsZSAlc1wnIiAlIGNlcnRfZmlsZV0pCisgICAgICAgICAg
ICAjIEpvaW4gdGhlIHN0cmluZyBoZXJlIHNvIHRoYXQgQ3lnd2luL1dpbmRvd3MgYW5kIE1hYy9M
aW51eAorICAgICAgICAgICAgIyBjYW4gdXNlIHRoZSBzYW1lIGNvZGUuIE90aGVyd2lzZSwgd2Ug
Y291bGQgcmVtb3ZlIHRoZSBzaW5nbGUKKyAgICAgICAgICAgICMgcXVvdGVzIGFib3ZlIGFuZCBr
ZWVwIGNtZCBhcyBhIHNlcXVlbmNlLgorICAgICAgICAgICAgc2VsZi5fc3RhcnRfY21kID0gIiAi
LmpvaW4oY21kKQorCisgICAgZGVmIF9pc19jeWd3aW4oc2VsZik6CisgICAgICAgIHJldHVybiBz
eXMucGxhdGZvcm0gaW4gKCJ3aW4zMiIsICJjeWd3aW4iKQorCisgICAgZGVmIF9jeWd3aW5fc2Fm
ZV9qb2luKHNlbGYsICpwYXJ0cyk6CisgICAgICAgICIiIlJldHVybnMgYSBwbGF0Zm9ybSBhcHBy
b3ByaWF0ZSBwYXRoLiIiIgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCpwYXJ0cykKKyAg
ICAgICAgaWYgc2VsZi5faXNfY3lnd2luKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0
X2N5Z3dpbl9wYXRoKHBhdGgpCisgICAgICAgIHJldHVybiBwYXRoCisKKyAgICBkZWYgX2dldF9j
eWd3aW5fcGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiQ29udmVydCBhIFdpbmRvd3MgcGF0
aCB0byBhIGN5Z3dpbiBwYXRoLgorCisgICAgICAgIFRoZSBjeWdwYXRoIHV0aWxpdHkgaW5zaXN0
cyBvbiBjb252ZXJ0aW5nIHBhdGhzIHRoYXQgaXQgdGhpbmtzIGFyZQorICAgICAgICBDeWd3aW4g
cm9vdCBwYXRocyB0byB3aGF0IGl0IHRoaW5rcyB0aGUgY29ycmVjdCByb290cyBhcmUuICBTbyBw
YXRocworICAgICAgICBzdWNoIGFzICJDOlxiXHNsYXZlXHdlYmtpdC1yZWxlYXNlXGJ1aWxkXHRo
aXJkX3BhcnR5XGN5Z3dpblxiaW4iCisgICAgICAgIGFyZSBjb252ZXJ0ZWQgdG8gcGxhaW4gIi91
c3IvYmluIi4gIFRvIGF2b2lkIHRoaXMsIHdlCisgICAgICAgIGRvIHRoZSBjb252ZXJzaW9uIG1h
bnVhbGx5LgorCisgICAgICAgIFRoZSBwYXRoIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFic29sdXRl
IHBhdGgsIG9uIGFueSBkcml2ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGRyaXZlX3JlZ2V4cCA9
IHJlLmNvbXBpbGUocicoW2Etel0pOlsvXFxdJywgcmUuSUdOT1JFQ0FTRSkKKworICAgICAgICBk
ZWYgbG93ZXJfZHJpdmUobWF0Y2hvYmopOgorICAgICAgICAgICAgcmV0dXJuICcvY3lnZHJpdmUv
JXMvJyAlIG1hdGNob2JqLmdyb3VwKDEpLmxvd2VyKCkKKyAgICAgICAgcGF0aCA9IGRyaXZlX3Jl
Z2V4cC5zdWIobG93ZXJfZHJpdmUsIHBhdGgpCisgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2Uo
J1xcJywgJy8nKQorCisgICAgZGVmIF9nZXRfYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgoc2VsZiwg
dGVzdF9kaXIsIG91dHB1dF9kaXIpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIHRo
ZSBhcGFjaGUgY29uZmlnIGZpbGUgdG8gdXNlLgorICAgICAgICBBcmdzOgorICAgICAgICAgIHRl
c3RfZGlyOiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkuCisgICAg
ICAgICAgb3V0cHV0X2RpcjogYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0
cyBkaXJlY3RvcnkuCisgICAgICAgICIiIgorICAgICAgICBodHRwZF9jb25maWcgPSBwb3J0LmFw
YWNoZV9jb25maWdfZmlsZV9wYXRoKCkKKyAgICAgICAgaHR0cGRfY29uZmlnX2NvcHkgPSBvcy5w
YXRoLmpvaW4ob3V0cHV0X2RpciwgImh0dHBkLmNvbmYiKQorICAgICAgICBodHRwZF9jb25mID0g
b3BlbihodHRwZF9jb25maWcpLnJlYWQoKQorICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToK
KyAgICAgICAgICAgICMgVGhpcyBpcyBhIGdyb3NzIGhhY2ssIGJ1dCBpdCBsZXRzIHVzIHVzZSB0
aGUgdXBzdHJlYW0gLmNvbmYgZmlsZQorICAgICAgICAgICAgIyBhbmQgb3VyIGNoZWNrZWQgaW4g
Y3lnd2luLiBUaGlzIHRlbGxzIHRoZSBzZXJ2ZXIgdGhlIHJvb3QKKyAgICAgICAgICAgICMgZGly
ZWN0b3J5IHRvIGxvb2sgaW4gZm9yIC5zbyBtb2R1bGVzLiBJdCB3aWxsIHVzZSB0aGlzIHBhdGgK
KyAgICAgICAgICAgICMgcGx1cyB0aGUgcmVsYXRpdmUgcGF0aHMgdG8gdGhlIC5zbyBmaWxlcyBs
aXN0ZWQgaW4gdGhlIC5jb25mCisgICAgICAgICAgICAjIGZpbGUuIFdlIGhhdmUgYXBhY2hlL2N5
Z3dpbiBjaGVja2VkIGludG8gb3VyIHRyZWUgc28KKyAgICAgICAgICAgICMgcGVvcGxlIGRvbid0
IGhhdmUgdG8gaW5zdGFsbCBpdCBpbnRvIHRoZWlyIGN5Z3dpbi4KKyAgICAgICAgICAgIGN5Z3Vz
ciA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICd1
c3InKQorICAgICAgICAgICAgaHR0cGRfY29uZiA9IGh0dHBkX2NvbmYucmVwbGFjZSgnU2VydmVy
Um9vdCAiL3VzciInLAorICAgICAgICAgICAgICAgICdTZXJ2ZXJSb290ICIlcyInICUgc2VsZi5f
Z2V0X2N5Z3dpbl9wYXRoKGN5Z3VzcikpCisKKyAgICAgICAgIyBUT0RPKG9qYW4pOiBJbnN0ZWFk
IG9mIHdyaXRpbmcgYW4gZXh0cmEgZmlsZSwgY2hlY2tpbiBhIGNvbmYgZmlsZQorICAgICAgICAj
IHVwc3RyZWFtLiBPciwgZXZlbiBiZXR0ZXIsIHVwc3RyZWFtL2RlbGV0ZSBhbGwgb3VyIGNocm9t
ZSBodHRwCisgICAgICAgICMgdGVzdHMgc28gd2UgZG9uJ3QgbmVlZCB0aGlzIHNwZWNpYWwtY2Fz
ZWQgRG9jdW1lbnRSb290IGFuZCB0aGVuCisgICAgICAgICMganVzdCB1c2UgdGhlIHVwc3RyZWFt
CisgICAgICAgICMgY29uZiBmaWxlLgorICAgICAgICBjaHJvbWVfZG9jdW1lbnRfcm9vdCA9IHBh
dGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICdkYXRhJywKKyAgICAgICAgICAgICds
YXlvdXRfdGVzdHMnKQorICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKKyAgICAgICAgICAg
IGNocm9tZV9kb2N1bWVudF9yb290ID0gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGNocm9tZV9kb2N1
bWVudF9yb290KQorICAgICAgICBodHRwZF9jb25mID0gKGh0dHBkX2NvbmYgKworICAgICAgICAg
ICAgc2VsZi5fZ2V0X3ZpcnR1YWxfaG9zdF9jb25maWcoY2hyb21lX2RvY3VtZW50X3Jvb3QsIDgw
ODEpKQorCisgICAgICAgIGYgPSBvcGVuKGh0dHBkX2NvbmZpZ19jb3B5LCAnd2InKQorICAgICAg
ICBmLndyaXRlKGh0dHBkX2NvbmYpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGlmIHNl
bGYuX2lzX2N5Z3dpbigpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jeWd3aW5fcGF0
aChodHRwZF9jb25maWdfY29weSkKKyAgICAgICAgcmV0dXJuIGh0dHBkX2NvbmZpZ19jb3B5CisK
KyAgICBkZWYgX2dldF92aXJ0dWFsX2hvc3RfY29uZmlnKHNlbGYsIGRvY3VtZW50X3Jvb3QsIHBv
cnQsIHNzbD1GYWxzZSk6CisgICAgICAgICIiIlJldHVybnMgYSA8VmlydHVhbEhvc3Q+IGRpcmVj
dGl2ZSBibG9jayBmb3IgYW4gaHR0cGQuY29uZiBmaWxlLgorICAgICAgICBJdCB3aWxsIGxpc3Rl
biB0byAxMjcuMC4wLjEgb24gZWFjaCBvZiB0aGUgZ2l2ZW4gcG9ydC4KKyAgICAgICAgIiIiCisg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4oKCc8VmlydHVhbEhvc3QgMTI3LjAuMC4xOiVzPicgJSBw
b3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAnRG9jdW1lbnRSb290ICVzJyAlIGRvY3Vt
ZW50X3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbCBhbmQgJ1NTTEVuZ2luZSBP
bicgb3IgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICc8L1ZpcnR1YWxIb3N0PicsICcn
KSkKKworICAgIGRlZiBfc3RhcnRfaHR0cGRfcHJvY2VzcyhzZWxmKToKKyAgICAgICAgIiIiU3Rh
cnRzIHRoZSBodHRwZCBwcm9jZXNzIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlcmUgd2VyZSBlcnJv
cnMuIiIiCisgICAgICAgICMgVXNlIHNoZWxsPVRydWUgYmVjYXVzZSB3ZSBqb2luIHRoZSBhcmd1
bWVudHMgaW50byBhIHN0cmluZyBmb3IKKyAgICAgICAgIyB0aGUgc2FrZSBvZiBXaW5kb3cvQ3ln
d2luIGFuZCBpdCBuZWVkcyBxdW90aW5nIHRoYXQgYnJlYWtzCisgICAgICAgICMgc2hlbGw9RmFs
c2UuCisgICAgICAgIHNlbGYuX2h0dHBkX3Byb2MgPSBzdWJwcm9jZXNzLlBvcGVuKHNlbGYuX3N0
YXJ0X2NtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
ZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHNoZWxsPVRydWUpCisgICAgICAgIGVy
ciA9IHNlbGYuX2h0dHBkX3Byb2Muc3RkZXJyLnJlYWQoKQorICAgICAgICBpZiBsZW4oZXJyKToK
KyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoZXJyKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNl
CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgICIi
IlN0YXJ0cyB0aGUgYXBhY2hlIGh0dHAgc2VydmVyLiIiIgorICAgICAgICAjIFN0b3AgYW55IGN1
cnJlbnRseSBydW5uaW5nIHNlcnZlcnMuCisgICAgICAgIHNlbGYuc3RvcCgpCisKKyAgICAgICAg
bG9nZ2luZy5kZWJ1ZygiU3RhcnRpbmcgYXBhY2hlIGh0dHAgc2VydmVyIikKKyAgICAgICAgc2Vy
dmVyX3N0YXJ0ZWQgPSBzZWxmLndhaXRfZm9yX2FjdGlvbihzZWxmLl9zdGFydF9odHRwZF9wcm9j
ZXNzKQorICAgICAgICBpZiBzZXJ2ZXJfc3RhcnRlZDoKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVi
dWcoIkFwYWNoZSBzdGFydGVkLiBUZXN0aW5nIHBvcnRzIikKKyAgICAgICAgICAgIHNlcnZlcl9z
dGFydGVkID0gc2VsZi53YWl0X2Zvcl9hY3Rpb24oCisgICAgICAgICAgICAgICAgc2VsZi5pc19z
ZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMpCisKKyAgICAgICAgaWYgc2VydmVyX3N0YXJ0ZWQ6
CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTZXJ2ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQi
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8g
c3RhcnQgaHR0cCBzZXJ2ZXInKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0
b3BzIHRoZSBhcGFjaGUgaHR0cCBzZXJ2ZXIuIiIiCisgICAgICAgIGxvZ2dpbmcuZGVidWcoIlNo
dXR0aW5nIGRvd24gYW55IHJ1bm5pbmcgaHR0cCBzZXJ2ZXJzIikKKyAgICAgICAgaHR0cGRfcGlk
ID0gTm9uZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9waWRfZmlsZSk6CisgICAg
ICAgICAgICBodHRwZF9waWQgPSBpbnQob3BlbihzZWxmLl9waWRfZmlsZSkucmVhZGxpbmUoKSkK
KyAgICAgICAgcGF0aF91dGlscy5zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0cGRfcGlkKQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV9saW51eC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW1fbGludXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNDRjYWY5NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbGludXgucHkKQEAgLTAsMCArMSwyNDgg
QEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0g
bmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlRoaXMgaXMgdGhlIExp
bnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBwb3J0CisgICBwYWNrYWdlLiBUaGlzIGZpbGUgc2hv
dWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBwYWNrYWdlLiIiIgorCitpbXBvcnQgb3MKK2lt
cG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2lu
ZworCitpbXBvcnQgY2hyb21pdW1fd2luCitpbXBvcnQgcGF0aF91dGlscworCisKK2RlZiBwbGF0
Zm9ybV9uYW1lKCk6CisgICAgIiIiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcGxhdGZvcm0gd2Un
cmUgY3VycmVudGx5IHJ1bm5pbmcgb24uIiIiCisgICAgcmV0dXJuICdjaHJvbWl1bS1saW51eCcg
KyBwbGF0Zm9ybV92ZXJzaW9uKCkKKworCitkZWYgcGxhdGZvcm1fdmVyc2lvbigpOgorICAgICIi
IlJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5nIGZvciB0aGUgcGxhdGZvcm0sIGUuZy4gJy12aXN0
YScgb3IKKyAgICAnLXNub3dsZW9wYXJkJy4gSWYgdGhlIHBsYXRmb3JtIGRvZXMgbm90IGRpc3Rp
bmd1aXNoIGJldHdlZW4KKyAgICBtaW5vciB2ZXJzaW9ucywgaXQgcmV0dXJucyAnJy4iIiIKKyAg
ICByZXR1cm4gJycKKworCitkZWYgZ2V0X251bV9jb3JlcygpOgorICAgICIiIlJldHVybnMgdGhl
IG51bWJlciBvZiBjb3JlcyBvbiB0aGUgbWFjaGluZS4gRm9yIGh5cGVydGhyZWFkZWQgbWFjaGlu
ZXMsCisgICAgdGhpcyB3aWxsIGJlIGRvdWJsZSB0aGUgbnVtYmVyIG9mIGFjdHVhbCBwcm9jZXNz
b3JzLiIiIgorICAgIG51bV9jb3JlcyA9IG9zLnN5c2NvbmYoIlNDX05QUk9DRVNTT1JTX09OTE4i
KQorICAgIGlmIGlzaW5zdGFuY2UobnVtX2NvcmVzLCBpbnQpIGFuZCBudW1fY29yZXMgPiAwOgor
ICAgICAgICByZXR1cm4gbnVtX2NvcmVzCisgICAgcmV0dXJuIDEKKworCitkZWYgYmFzZWxpbmVf
cGF0aChwbGF0Zm9ybT1Ob25lKToKKyAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHJlbGF0aXZlIHRv
IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlIGZvciB0aGUKKyAgICBiYXNlbGluZXMgZm9yIHRo
ZSBzcGVjaWZpZWQgcGxhdGZvcm0gdmVyc2lvbi4gSWYgfHBsYXRmb3JtfCBpcyBOb25lLAorICAg
IHRoZW4gdGhlIHZlcnNpb24gY3VycmVudGx5IGluIHVzZSBpcyB1c2VkLiIiIgorICAgIGlmIHBs
YXRmb3JtIGlzIE5vbmU6CisgICAgICAgIHBsYXRmb3JtID0gcGxhdGZvcm1fbmFtZSgpCisgICAg
cmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICdkYXRhJywgJ2xheW91
dF90ZXN0cycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3Jt
JywgcGxhdGZvcm0sICdMYXlvdXRUZXN0cycpCisKKworZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRo
KHBsYXRmb3JtPU5vbmUpOgorICAgICIiIlJldHVybnMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMg
dG8gc2VhcmNoIGZvciBiYXNlbGluZXMvcmVzdWx0cywgaW4KKyAgICBvcmRlciBvZiBwcmVmZXJl
bmNlLiBQYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUuIiIi
CisgICAgcmV0dXJuIFtiYXNlbGluZV9wYXRoKHBsYXRmb3JtKSwKKyAgICAgICAgICAgIGNocm9t
aXVtX3dpbi5iYXNlbGluZV9wYXRoKCdjaHJvbWl1bS13aW4nKSwKKyAgICAgICAgICAgIHBhdGhf
dXRpbHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3dpbicpLAorICAgICAgICAgICAgcGF0aF91dGls
cy53ZWJraXRfYmFzZWxpbmVfcGF0aCgnbWFjJyldCisKKworZGVmIGFwYWNoZV9leGVjdXRhYmxl
X3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBh
Y2hlIiIiCisgICAgcGF0aCA9IG9zLnBhdGguam9pbigiL3VzciIsICJzYmluIiwgImFwYWNoZTIi
KQorICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICByZXR1cm4gcGF0aAorICAg
IHByaW50ICJVbmFibGUgdG8gZmluZSBBcGFjaGUgZXhlY3V0YWJsZSAlcyIgJSBwYXRoCisgICAg
X21pc3NpbmdfYXBhY2hlKCkKKworCitkZWYgYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgoKToKKyAg
ICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIEFwYWNoZSBjb25maWcgZmlsZSIiIgorICAgIHJldHVy
biBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCJ0aGlyZF9wYXJ0eSIsICJXZWJLaXQiLCAiTGF5
b3V0VGVzdHMiLAorICAgICAgICAiaHR0cCIsICJjb25mIiwgImFwYWNoZTItZGViaWFuLWh0dHBk
LmNvbmYiKQorCisKK2RlZiBsaWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKToKKyAgICAiIiJSZXR1
cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgTGlnSFRUUGQiIiIKKyAgICBiaW5wYXRo
ID0gIi91c3Ivc2Jpbi9saWdodHRwZCIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhiaW5wYXRoKToK
KyAgICAgICAgcmV0dXJuIGJpbnBhdGgKKyAgICBwcmludCAiVW5hYmxlIHRvIGZpbmQgTGlnSFRU
UGQgZXhlY3V0YWJsZSAlcyIgJSBiaW5wYXRoCisgICAgX21pc3NpbmdfbGlnaHR0cGQoKQorCisK
K2RlZiBsaWdodHRwZF9tb2R1bGVfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkg
bW9kdWxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCisgICAgbW9kcGF0aCA9ICIvdXNyL2xpYi9saWdo
dHRwZCIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhtb2RwYXRoKToKKyAgICAgICAgcmV0dXJuIG1v
ZHBhdGgKKyAgICBwcmludCAiVW5hYmxlIHRvIGZpbmQgTGlnSFRUUGQgbW9kdWxlcyAlcyIgJSBt
b2RwYXRoCisgICAgX21pc3NpbmdfbGlnaHR0cGQoKQorCisKK2RlZiBsaWdodHRwZF9waHBfcGF0
aCgpOgorICAgICIiIlJldHVybnMgdGhlIFBIUCBleGVjdXRhYmxlIHBhdGggZm9yIExpZ0hUVFBk
IiIiCisgICAgYmlucGF0aCA9ICIvdXNyL2Jpbi9waHAtY2dpIgorICAgIGlmIG9zLnBhdGguZXhp
c3RzKGJpbnBhdGgpOgorICAgICAgICByZXR1cm4gYmlucGF0aAorICAgIHByaW50ICJVbmFibGUg
dG8gZmluZCBQSFAgQ0dJIGV4ZWN1dGFibGUgJXMiICUgYmlucGF0aAorICAgIF9taXNzaW5nX2xp
Z2h0dHBkKCkKKworCitkZWYgd2RpZmZfcGF0aCgpOgorICAgICIiIlBhdGggdG8gdGhlIFdEaWZm
IGV4ZWN1dGFibGUsIHdoaWNoIHdlIGFzc3VtZSBpcyBhbHJlYWR5IGluc3RhbGxlZCBhbmQKKyAg
ICBpbiB0aGUgdXNlcidzICRQQVRILiIiIgorICAgIHJldHVybiAnd2RpZmYnCisKKworZGVmIGlt
YWdlX2RpZmZfcGF0aCh0YXJnZXQpOgorICAgICIiIlBhdGggdG8gdGhlIGltYWdlX2RpZmYgYmlu
YXJ5LgorCisgICAgQXJnczoKKyAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVn
IG9yIHJlbGVhc2UpIiIiCisgICAgcmV0dXJuIF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cyh0YXJn
ZXQsICdpbWFnZV9kaWZmJykKKworCitkZWYgbGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgodGFyZ2V0
KToKKyAgICAiIiJQYXRoIHRvIHRoZSBsYXlvdXRfdGVzdCBoZWxwZXIgYmluYXJ5LCBpZiBuZWVk
ZWQsIGVtcHR5IG90aGVyd2lzZSIiIgorICAgIHJldHVybiAnJworCisKK2RlZiB0ZXN0X3NoZWxs
X3BhdGgodGFyZ2V0KToKKyAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFy
eSBwYXRoIGZvciBvdXIgVGVzdFNoZWxsLgorCisgICAgQXJnczoKKyAgICAgIHRhcmdldDogQnVp
bGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2UpICIiIgorICAgIGlmIHRhcmdldCBpbiAo
J0RlYnVnJywgJ1JlbGVhc2UnKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVidWdfcGF0
aCA9IF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cygnRGVidWcnLCAndGVzdF9zaGVsbCcpCisgICAg
ICAgICAgICByZWxlYXNlX3BhdGggPSBfcGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHMoJ1JlbGVhc2Un
LCAndGVzdF9zaGVsbCcpCisKKyAgICAgICAgICAgIGRlYnVnX210aW1lID0gb3Muc3RhdChkZWJ1
Z19wYXRoKS5zdF9tdGltZQorICAgICAgICAgICAgcmVsZWFzZV9tdGltZSA9IG9zLnN0YXQocmVs
ZWFzZV9wYXRoKS5zdF9tdGltZQorCisgICAgICAgICAgICBpZiBkZWJ1Z19tdGltZSA+IHJlbGVh
c2VfbXRpbWUgYW5kIHRhcmdldCA9PSAnUmVsZWFzZScgb3IgXAorICAgICAgICAgICAgICAgcmVs
ZWFzZV9tdGltZSA+IGRlYnVnX210aW1lIGFuZCB0YXJnZXQgPT0gJ0RlYnVnJzoKKyAgICAgICAg
ICAgICAgICBsb2dnaW5nLmluZm8oJ1x4MWJbMzFtV2FybmluZzogeW91IGFyZSBub3QgcnVubmlu
ZyB0aGUgbW9zdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWNlbnQgdGVzdF9z
aGVsbCBiaW5hcnkuIFlvdSBuZWVkIHRvIHBhc3MgJworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnLS1kZWJ1ZyBvciBub3QgdG8gc2VsZWN0IGJldHdlZW4gRGVidWcgYW5kICcKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ1JlbGVhc2UuXHgxYlswbScpCisgICAgICAgICMgVGhp
cyB3aWxsIGZhaWwgaWYgd2UgZG9uJ3QgaGF2ZSBib3RoIGEgZGVidWcgYW5kIHJlbGVhc2UgYmlu
YXJ5LgorICAgICAgICAjIFRoYXQncyBmaW5lIGJlY2F1c2UsIGluIHRoaXMgY2FzZSwgd2UgbXVz
dCBhbHJlYWR5IGJlIHJ1bm5pbmcgdGhlCisgICAgICAgICMgbW9zdCB1cC10by1kYXRlIG9uZS4K
KyAgICAgICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgorICAgICAgICAgICAgcGFz
cworCisgICAgcmV0dXJuIF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cyh0YXJnZXQsICd0ZXN0X3No
ZWxsJykKKworCitkZWYgZnV6enlfbWF0Y2hfcGF0aCgpOgorICAgICIiIlJldHVybiB0aGUgcGF0
aCB0byB0aGUgZnV6enkgbWF0Y2hlciBiaW5hcnkuIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMu
cGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2Z1enp5bWF0Y2gnLCAnZnV6enltYXRjaCcp
CisKKworZGVmIHNodXRfZG93bl9odHRwX3NlcnZlcihzZXJ2ZXJfcGlkKToKKyAgICAiIiJTaHV0
IGRvd24gdGhlIGxpZ2h0dHBkIHdlYiBzZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1bGx5IHNo
dXQgZG93bi4KKworICAgIEFyZ3M6CisgICAgICBzZXJ2ZXJfcGlkOiBUaGUgcHJvY2VzcyBJRCBv
ZiB0aGUgcnVubmluZyBzZXJ2ZXIuCisgICAgIiIiCisgICAgIyBzZXJ2ZXJfcGlkIGlzIG5vdCBz
ZXQgd2hlbiAiaHR0cF9zZXJ2ZXIucHkgc3RvcCIgaXMgcnVuIG1hbnVhbGx5LgorICAgIGlmIHNl
cnZlcl9waWQgaXMgTm9uZToKKyAgICAgICAgIyBUaGlzIGlzbid0IGlkZWFsLCBzaW5jZSBpdCBj
b3VsZCBjb25mbGljdCB3aXRoIHdlYiBzZXJ2ZXIgcHJvY2Vzc2VzCisgICAgICAgICMgbm90IHN0
YXJ0ZWQgYnkgaHR0cF9zZXJ2ZXIucHksIGJ1dCBnb29kIGVub3VnaCBmb3Igbm93LgorICAgICAg
ICBraWxsX2FsbF9wcm9jZXNzKCdsaWdodHRwZCcpCisgICAgICAgIGtpbGxfYWxsX3Byb2Nlc3Mo
J2FwYWNoZTInKQorICAgIGVsc2U6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmtpbGwo
c2VydmVyX3BpZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAjVE9ETyhtbW9zcykgTWF5
YmUgdGhyb3cgaW4gYSBTSUdLSUxMIGp1c3QgdG8gYmUgc3VyZT8KKyAgICAgICAgZXhjZXB0IE9T
RXJyb3I6CisgICAgICAgICAgICAjIFNvbWV0aW1lcyB3ZSBnZXQgYSBiYWQgUElEIChlLmcuIGZy
b20gYSBzdGFsZSBodHRwZC5waWQgZmlsZSksCisgICAgICAgICAgICAjIHNvIGlmIGtpbGwgZmFp
bHMgb24gdGhlIGdpdmVuIFBJRCwganVzdCB0cnkgdG8gJ2tpbGxhbGwnIHdlYgorICAgICAgICAg
ICAgIyBzZXJ2ZXJzLgorICAgICAgICAgICAgc2h1dF9kb3duX2h0dHBfc2VydmVyKE5vbmUpCisK
KworZGVmIGtpbGxfcHJvY2VzcyhwaWQpOgorICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJv
Y2Vzcy4KKworICAgIEFyZ3M6CisgICAgICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBi
ZSBraWxsZWQuCisgICAgIiIiCisgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQorCisK
K2RlZiBraWxsX2FsbF9wcm9jZXNzKHByb2Nlc3NfbmFtZSk6CisgICAgbnVsbCA9IG9wZW4ob3Mu
ZGV2bnVsbCkKKyAgICBzdWJwcm9jZXNzLmNhbGwoWydraWxsYWxsJywgJy1URVJNJywgJy11Jywg
b3MuZ2V0ZW52KCdVU0VSJyksCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0
ZGVycj1udWxsKQorICAgIG51bGwuY2xvc2UoKQorCisKK2RlZiBraWxsX2FsbF90ZXN0X3NoZWxs
cygpOgorICAgICIiIktpbGxzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHRlc3Rfc2hlbGwgYmluYXJ5
IGN1cnJlbnRseSBydW5uaW5nLiIiIgorICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ3Rlc3Rfc2hlbGwn
KQorCisjCisjIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucworIworCisKK2RlZiBfbWlzc2luZ19s
aWdodHRwZCgpOgorICAgIHByaW50ICdQbGVhc2UgaW5zdGFsbCB1c2luZzogInN1ZG8gYXB0LWdl
dCBpbnN0YWxsIGxpZ2h0dHBkIHBocDUtY2dpIicKKyAgICBwcmludCAnRm9yIGNvbXBsZXRlIExp
bnV4IGJ1aWxkIHJlcXVpcmVtZW50cywgcGxlYXNlIHNlZTonCisgICAgcHJpbnQgJ2h0dHA6Ly9j
b2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS93aWtpL0xpbnV4QnVpbGRJbnN0cnVjdGlvbnMnCisg
ICAgc3lzLmV4aXQoMSkKKworCitkZWYgX21pc3NpbmdfYXBhY2hlKCk6CisgICAgcHJpbnQgKCdQ
bGVhc2UgaW5zdGFsbCB1c2luZzogInN1ZG8gYXB0LWdldCBpbnN0YWxsIGFwYWNoZTIgJworICAg
ICAgICAnbGliYXBhY2hlMi1tb2QtcGhwNSInKQorICAgIHByaW50ICdGb3IgY29tcGxldGUgTGlu
dXggYnVpbGQgcmVxdWlyZW1lbnRzLCBwbGVhc2Ugc2VlOicKKyAgICBwcmludCAnaHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGludXhCdWlsZEluc3RydWN0aW9ucycKKyAg
ICBzeXMuZXhpdCgxKQorCisKK2RlZiBfcGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHMoKnBhdGhpZXMp
OgorICAgICMgRklYTUUoZGtlZ2VsKTogdXNlIGxhdGVzdCBvciB3YXJuIGlmIG1vcmUgdGhhbiBv
bmUgZm91bmQ/CisgICAgZm9yIGRpciBpbiBbInNjb25zYnVpbGQiLCAib3V0IiwgInhjb2RlYnVp
bGQiXToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9m
cm9tX2Jhc2UoZGlyLCAqcGF0aGllcykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFz
cworICAgIHJhaXNlIHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kKCJVbmFibGUgdG8gZmluZCAlcyBp
biBidWlsZCB0cmVlIiAlCisgICAgICAgIChvcy5wYXRoLmpvaW4oKnBhdGhpZXMpKSkKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hy
b21pdW1fbWFjLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bV9tYWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ODI3ZWZkOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5CkBAIC0wLDAgKzEsMjAxIEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJUaGlzIGlzIHRoZSBNYWMgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIHBvcnQgaW50ZXJmYWNlCisgICBwYWNrYWdlLiBUaGlzIGZpbGUgc2hv
dWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBwYWNrYWdlLiIiIgorCitpbXBvcnQgb3MKK2lt
cG9ydCBwbGF0Zm9ybQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKKworaW1wb3J0
IHBhdGhfdXRpbHMKKworCitkZWYgcGxhdGZvcm1fbmFtZSgpOgorICAgICIiIlJldHVybnMgdGhl
IG5hbWUgb2YgdGhlIHBsYXRmb3JtIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIG9uLiIiIgorICAg
ICMgQXQgdGhlIG1vbWVudCBhbGwgY2hyb21pdW0gbWFjIHJlc3VsdHMgYXJlIHZlcnNpb24taW5k
ZXBlbmRlbnQuIEF0IHNvbWUKKyAgICAjIHBvaW50IHdlIG1heSBuZWVkIHRvIHJldHVybiAnY2hy
b21pdW0tbWFjJyArIFBsYXRmb3JtVmVyc2lvbigpCisgICAgcmV0dXJuICdjaHJvbWl1bS1tYWMn
CisKKworZGVmIHBsYXRmb3JtX3ZlcnNpb24oKToKKyAgICAiIiJSZXR1cm5zIHRoZSB2ZXJzaW9u
IHN0cmluZyBmb3IgdGhlIHBsYXRmb3JtLCBlLmcuICctdmlzdGEnIG9yCisgICAgJy1zbm93bGVv
cGFyZCcuIElmIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuCisgICAg
bWlub3IgdmVyc2lvbnMsIGl0IHJldHVybnMgJycuIiIiCisgICAgb3NfdmVyc2lvbl9zdHJpbmcg
PSBwbGF0Zm9ybS5tYWNfdmVyKClbMF0gICMgZS5nLiAiMTAuNS42IgorICAgIGlmIG5vdCBvc192
ZXJzaW9uX3N0cmluZzoKKyAgICAgICAgcmV0dXJuICctbGVvcGFyZCcKKworICAgIHJlbGVhc2Vf
dmVyc2lvbiA9IGludChvc192ZXJzaW9uX3N0cmluZy5zcGxpdCgnLicpWzFdKQorCisgICAgIyB3
ZSBkb24ndCBzdXBwb3J0ICd0aWdlcicgb3IgZWFybGllciByZWxlYXNlcworICAgIGlmIHJlbGVh
c2VfdmVyc2lvbiA9PSA1OgorICAgICAgICByZXR1cm4gJy1sZW9wYXJkJworICAgIGVsaWYgcmVs
ZWFzZV92ZXJzaW9uID09IDY6CisgICAgICAgIHJldHVybiAnLXNub3dsZW9wYXJkJworCisgICAg
cmV0dXJuICcnCisKKworZGVmIGdldF9udW1fY29yZXMoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBu
dW1iZXIgb2YgY29yZXMgb24gdGhlIG1hY2hpbmUuIEZvciBoeXBlcnRocmVhZGVkIG1hY2hpbmVz
LAorICAgIHRoaXMgd2lsbCBiZSBkb3VibGUgdGhlIG51bWJlciBvZiBhY3R1YWwgcHJvY2Vzc29y
cy4iIiIKKyAgICByZXR1cm4gaW50KG9zLnBvcGVuMigic3lzY3RsIC1uIGh3Lm5jcHUiKVsxXS5y
ZWFkKCkpCisKKworZGVmIGJhc2VsaW5lX3BhdGgocGxhdGZvcm09Tm9uZSk6CisgICAgIiIiUmV0
dXJucyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSBmb3Ig
dGhlCisgICAgYmFzZWxpbmVzIGZvciB0aGUgc3BlY2lmaWVkIHBsYXRmb3JtIHZlcnNpb24uIElm
IHxwbGF0Zm9ybXwgaXMgTm9uZSwKKyAgICB0aGVuIHRoZSB2ZXJzaW9uIGN1cnJlbnRseSBpbiB1
c2UgaXMgdXNlZC4iIiIKKyAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgorICAgICAgICBwbGF0Zm9y
bSA9IHBsYXRmb3JtX25hbWUoKQorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNl
KCd3ZWJraXQnLCAnZGF0YScsICdsYXlvdXRfdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdwbGF0Zm9ybScsIHBsYXRmb3JtLCAnTGF5b3V0VGVzdHMnKQorCisj
IFRPRE86IFdlIHNob3VsZCBhZGQgbGVvcGFyZCBhbmQgc25vd2xlb3BhcmQgdG8gdGhlIGxpc3Qg
b2YgcGF0aHMgdG8gY2hlY2sKKyMgb25jZSB3ZSBzdGFydCBydW5uaW5nIHRoZSB0ZXN0cyBmcm9t
IHNub3dsZW9wYXJkLgorCisKK2RlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybT1Ob25l
KToKKyAgICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3Ig
YmFzZWxpbmVzL3Jlc3VsdHMsIGluCisgICAgb3JkZXIgb2YgcHJlZmVyZW5jZS4gUGF0aHMgYXJl
IHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLiIiIgorICAgIHJldHVybiBb
YmFzZWxpbmVfcGF0aChwbGF0Zm9ybSksCisgICAgICAgICAgICBwYXRoX3V0aWxzLndlYmtpdF9i
YXNlbGluZV9wYXRoKCdtYWMnICsgcGxhdGZvcm1fdmVyc2lvbigpKSwKKyAgICAgICAgICAgIHBh
dGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpXQorCisKK2RlZiB3ZGlmZl9wYXRo
KCk6CisgICAgIiIiUGF0aCB0byB0aGUgV0RpZmYgZXhlY3V0YWJsZSwgd2hpY2ggd2UgYXNzdW1l
IGlzIGFscmVhZHkgaW5zdGFsbGVkIGFuZAorICAgIGluIHRoZSB1c2VyJ3MgJFBBVEguIiIiCisg
ICAgcmV0dXJuICd3ZGlmZicKKworCitkZWYgaW1hZ2VfZGlmZl9wYXRoKHRhcmdldCk6CisgICAg
IiIiUGF0aCB0byB0aGUgaW1hZ2VfZGlmZiBleGVjdXRhYmxlCisKKyAgICBBcmdzOgorICAgICAg
dGFyZ2V0OiBidWlsZCB0eXBlIC0gJ0RlYnVnJywnUmVsZWFzZScsZXRjLiIiIgorICAgIHJldHVy
biBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd4Y29kZWJ1aWxkJywgdGFyZ2V0LCAnaW1hZ2Vf
ZGlmZicpCisKKworZGVmIGxheW91dF90ZXN0X2hlbHBlcl9wYXRoKHRhcmdldCk6CisgICAgIiIi
UGF0aCB0byB0aGUgbGF5b3V0X3Rlc3RfaGVscGVyIGV4ZWN1dGFibGUsIGlmIG5lZWRlZCwgZW1w
dHkgb3RoZXJ3aXNlCisKKyAgICBBcmdzOgorICAgICAgdGFyZ2V0OiBidWlsZCB0eXBlIC0gJ0Rl
YnVnJywnUmVsZWFzZScsZXRjLiIiIgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9i
YXNlKCd4Y29kZWJ1aWxkJywgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdsYXlvdXRfdGVzdF9oZWxwZXInKQorCisKK2RlZiB0ZXN0X3NoZWxsX3BhdGgodGFy
Z2V0KToKKyAgICAiIiJQYXRoIHRvIHRoZSB0ZXN0X3NoZWxsIGV4ZWN1dGFibGUuCisKKyAgICBB
cmdzOgorICAgICAgdGFyZ2V0OiBidWlsZCB0eXBlIC0gJ0RlYnVnJywnUmVsZWFzZScsZXRjLiIi
IgorICAgICMgVE9ETyhwaW5rZXJ0b24pOiBtYWtlIHx0YXJnZXR8IGhhcHB5IHdpdGggY2FzZS1z
ZW5zaXRpdmUgZmlsZSBzeXN0ZW1zLgorICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9i
YXNlKCd4Y29kZWJ1aWxkJywgdGFyZ2V0LCAnVGVzdFNoZWxsLmFwcCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnRzJywgJ01hY09TJywgJ1Rlc3RTaGVsbCcp
CisKKworZGVmIGFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBl
eGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBhY2hlIiIiCisgICAgcmV0dXJuIG9zLnBhdGguam9p
bigiL3VzciIsICJzYmluIiwgImh0dHBkIikKKworCitkZWYgYXBhY2hlX2NvbmZpZ19maWxlX3Bh
dGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIEFwYWNoZSBjb25maWcgZmlsZSIiIgor
ICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCJ0aGlyZF9wYXJ0eSIsICJXZWJL
aXQiLCAiTGF5b3V0VGVzdHMiLAorICAgICAgICAiaHR0cCIsICJjb25mIiwgImFwYWNoZTItaHR0
cGQuY29uZiIpCisKKworZGVmIGxpZ2h0dHBkX2V4ZWN1dGFibGVfcGF0aCgpOgorICAgICIiIlJl
dHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBMaWdIVFRQZCIiIgorICAgIHJldHVy
biBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICdt
YWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaW4nLCAnbGlnaHR0
cGQnKQorCisKK2RlZiBsaWdodHRwZF9tb2R1bGVfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhl
IGxpYnJhcnkgbW9kdWxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCisgICAgcmV0dXJuIHBhdGhfdXRp
bHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ21hYycsICdsaWIn
KQorCisKK2RlZiBsaWdodHRwZF9waHBfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIFBIUCBl
eGVjdXRhYmxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0
aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ21hYycsICdiaW4nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaHAtY2dpJykKKworCitkZWYgc2h1
dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9waWQpOgorICAgICIiIlNodXQgZG93biB0aGUgbGln
aHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVsbHkgc2h1dCBkb3duLgorCisg
ICAgICBBcmdzOgorICAgICAgICBzZXJ2ZXJfcGlkOiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgcnVu
bmluZyBzZXJ2ZXIuCisgICAgIiIiCisgICAgIyBzZXJ2ZXJfcGlkIGlzIG5vdCBzZXQgd2hlbiAi
aHR0cF9zZXJ2ZXIucHkgc3RvcCIgaXMgcnVuIG1hbnVhbGx5LgorICAgIGlmIHNlcnZlcl9waWQg
aXMgTm9uZToKKyAgICAgICAgIyBUT0RPKG1tb3NzKSBUaGlzIGlzbid0IGlkZWFsLCBzaW5jZSBp
dCBjb3VsZCBjb25mbGljdCB3aXRoIGxpZ2h0dHBkCisgICAgICAgICMgcHJvY2Vzc2VzIG5vdCBz
dGFydGVkIGJ5IGh0dHBfc2VydmVyLnB5LCBidXQgZ29vZCBlbm91Z2ggZm9yIG5vdy4KKyAgICAg
ICAga2lsbF9hbGxfcHJvY2VzcygnbGlnaHR0cGQnKQorICAgICAgICBraWxsX2FsbF9wcm9jZXNz
KCdodHRwZCcpCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mua2lsbChz
ZXJ2ZXJfcGlkLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgICMgVE9ETyhtbW9zcykgTWF5
YmUgdGhyb3cgaW4gYSBTSUdLSUxMIGp1c3QgdG8gYmUgc3VyZT8KKyAgICAgICAgZXhjZXB0IE9T
RXJyb3I6CisgICAgICAgICAgICAjIFNvbWV0aW1lcyB3ZSBnZXQgYSBiYWQgUElEIChlLmcuIGZy
b20gYSBzdGFsZSBodHRwZC5waWQgZmlsZSksCisgICAgICAgICAgICAjIHNvIGlmIGtpbGwgZmFp
bHMgb24gdGhlIGdpdmVuIFBJRCwganVzdCB0cnkgdG8gJ2tpbGxhbGwnIHdlYgorICAgICAgICAg
ICAgIyBzZXJ2ZXJzLgorICAgICAgICAgICAgc2h1dF9kb3duX2h0dHBfc2VydmVyKE5vbmUpCisK
KworZGVmIGtpbGxfcHJvY2VzcyhwaWQpOgorICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJv
Y2Vzcy4KKworICAgIEFyZ3M6CisgICAgICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBi
ZSBraWxsZWQuCisgICAgIiIiCisgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQorCisK
K2RlZiBraWxsX2FsbF9wcm9jZXNzKHByb2Nlc3NfbmFtZSk6CisgICAgIyBPbiBNYWMgT1MgWCAx
MC42LCBraWxsYWxsIGhhcyBhIG5ldyBjb25zdHJhaW50OiAtU0lHTkFMTkFNRSBvcgorICAgICMg
LVNJR05BTE5VTUJFUiBtdXN0IGNvbWUgZmlyc3QuICBFeGFtcGxlIHByb2JsZW06CisgICAgIyAg
ICQga2lsbGFsbCAtdSAkVVNFUiAtVEVSTSBsaWdodHRwZAorICAgICMgICBraWxsYWxsOiBpbGxl
Z2FsIG9wdGlvbiAtLSBUCisgICAgIyBVc2Ugb2YgdGhlIGVhcmxpZXIgLVRFUk0gcGxhY2VtZW50
IGlzIGp1c3QgZmluZSBvbiAxMC41LgorICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwpCisgICAg
c3VicHJvY2Vzcy5jYWxsKFsna2lsbGFsbCcsICctVEVSTScsICctdScsIG9zLmdldGVudignVVNF
UicpLAorICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19uYW1lXSwgc3RkZXJyPW51bGwpCisg
ICAgbnVsbC5jbG9zZSgpCisKKworZGVmIGtpbGxfYWxsX3Rlc3Rfc2hlbGxzKCk6CisgICAgIiIi
S2lsbHMgYWxsIGluc3RhbmNlcyBvZiB0aGUgdGVzdF9zaGVsbCBiaW5hcnkgY3VycmVudGx5IHJ1
bm5pbmcuIiIiCisgICAga2lsbF9hbGxfcHJvY2VzcygnVGVzdFNoZWxsJykKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
d2luLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV93aW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhMTU0
OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5CkBAIC0wLDAgKzEsMjEwIEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJUaGlzIGlzIHRoZSBMaW51eCBpbXBsZW1lbnRh
dGlvbiBvZiB0aGUgcG9ydAorICAgcGFja2FnZS4gVGhpcyBmaWxlIHNob3VsZCBvbmx5IGJlIGlt
cG9ydGVkIGJ5IHRoYXQgcGFja2FnZS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2Vz
cworaW1wb3J0IHN5cworCitpbXBvcnQgcGF0aF91dGlscworCitkZWYgcGxhdGZvcm1fbmFtZSgp
OgorICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtIHdlJ3JlIGN1cnJlbnRs
eSBydW5uaW5nIG9uLiIiIgorICAgICMgV2UncmUgbm90IHJlYWR5IGZvciB2ZXJzaW9uLXNwZWNp
ZmljIHJlc3VsdHMgeWV0LiBXaGVuIHdlIHVuY29tbWVudAorICAgICMgdGhpcywgd2UgYWxzbyBu
ZWVkIHRvIGFkZCBpdCB0byB0aGUgQmFzZWxpbmVTZWFyY2hQYXRoKCkKKyAgICByZXR1cm4gJ2No
cm9taXVtLXdpbicgKyBwbGF0Zm9ybV92ZXJzaW9uKCkKKworCitkZWYgcGxhdGZvcm1fdmVyc2lv
bigpOgorICAgICIiIlJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5nIGZvciB0aGUgcGxhdGZvcm0s
IGUuZy4gJy12aXN0YScgb3IKKyAgICAnLXNub3dsZW9wYXJkJy4gSWYgdGhlIHBsYXRmb3JtIGRv
ZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4KKyAgICBtaW5vciB2ZXJzaW9ucywgaXQgcmV0dXJu
cyAnJy4iIiIKKyAgICB3aW52ZXIgPSBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKQorICAgIGlmIHdp
bnZlclswXSA9PSA2IGFuZCAod2ludmVyWzFdID09IDEpOgorICAgICAgICByZXR1cm4gJy03Jwor
ICAgIGlmIHdpbnZlclswXSA9PSA2IGFuZCAod2ludmVyWzFdID09IDApOgorICAgICAgICByZXR1
cm4gJy12aXN0YScKKyAgICBpZiB3aW52ZXJbMF0gPT0gNSBhbmQgKHdpbnZlclsxXSA9PSAxIG9y
IHdpbnZlclsxXSA9PSAyKToKKyAgICAgICAgcmV0dXJuICcteHAnCisgICAgcmV0dXJuICcnCisK
KworZGVmIGdldF9udW1fY29yZXMoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29y
ZXMgb24gdGhlIG1hY2hpbmUuIEZvciBoeXBlcnRocmVhZGVkIG1hY2hpbmVzLAorICAgIHRoaXMg
d2lsbCBiZSBkb3VibGUgdGhlIG51bWJlciBvZiBhY3R1YWwgcHJvY2Vzc29ycy4iIiIKKyAgICBy
ZXR1cm4gaW50KG9zLmVudmlyb24uZ2V0KCdOVU1CRVJfT0ZfUFJPQ0VTU09SUycsIDEpKQorCisK
K2RlZiBiYXNlbGluZV9wYXRoKHBsYXRmb3JtPU5vbmUpOgorICAgICIiIlJldHVybnMgdGhlIHBh
dGggcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUgZm9yIHRoZQorICAgIGJh
c2VsaW5lcyBmb3IgdGhlIHNwZWNpZmllZCBwbGF0Zm9ybSB2ZXJzaW9uLiBJZiB8cGxhdGZvcm18
IGlzIE5vbmUsCisgICAgdGhlbiB0aGUgdmVyc2lvbiBjdXJyZW50bHkgaW4gdXNlIGlzIHVzZWQu
IiIiCisgICAgaWYgcGxhdGZvcm0gaXMgTm9uZToKKyAgICAgICAgcGxhdGZvcm0gPSBwbGF0Zm9y
bV9uYW1lKCkKKyAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0Jywg
J2RhdGEnLCAnbGF5b3V0X3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAncGxhdGZvcm0nLCBwbGF0Zm9ybSwgJ0xheW91dFRlc3RzJykKKworCitkZWYgYmFzZWxp
bmVfc2VhcmNoX3BhdGgocGxhdGZvcm09Tm9uZSk6CisgICAgIiIiUmV0dXJucyB0aGUgbGlzdCBv
ZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGJhc2VsaW5lcy9yZXN1bHRzLCBpbgorICAgIG9y
ZGVyIG9mIHByZWZlcmVuY2UuIFBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBz
b3VyY2UgdHJlZS4iIiIKKyAgICBkaXJzID0gW10KKyAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgor
ICAgICAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUoKQorCisgICAgaWYgcGxhdGZvcm0gPT0g
J2Nocm9taXVtLXdpbi14cCc6CisgICAgICAgIGRpcnMuYXBwZW5kKGJhc2VsaW5lX3BhdGgocGxh
dGZvcm0pKQorICAgIGlmIHBsYXRmb3JtIGluICgnY2hyb21pdW0td2luLXhwJywgJ2Nocm9taXVt
LXdpbi12aXN0YScpOgorICAgICAgICBkaXJzLmFwcGVuZChiYXNlbGluZV9wYXRoKCdjaHJvbWl1
bS13aW4tdmlzdGEnKSkKKyAgICBkaXJzLmFwcGVuZChiYXNlbGluZV9wYXRoKCdjaHJvbWl1bS13
aW4nKSkKKyAgICBkaXJzLmFwcGVuZChwYXRoX3V0aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCd3
aW4nKSkKKyAgICBkaXJzLmFwcGVuZChwYXRoX3V0aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCdt
YWMnKSkKKyAgICByZXR1cm4gZGlycworCisKK2RlZiB3ZGlmZl9wYXRoKCk6CisgICAgIiIiUGF0
aCB0byB0aGUgV0RpZmYgZXhlY3V0YWJsZSwgd2hvc2UgYmluYXJ5IGlzIGNoZWNrZWQgaW4gb24g
V2luIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5
JywgJ2N5Z3dpbicsICdiaW4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICd3ZGlmZi5leGUnKQorCisKK2RlZiBpbWFnZV9kaWZmX3BhdGgodGFyZ2V0KToKKyAgICAiIiJS
ZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRoIGZvciB0aGUgaW1hZ2UgY29t
cGFyZSB1dGlsLgorICAgICAgICAgV2UgdXNlIHRoaXMgaWYgd2UgY2FuJ3QgZmluZCB0aGUgYmlu
YXJ5IGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uCisgICAgICAgICBpbiBwYXRoX3V0aWxzLgorCisg
ICAgQXJnczoKKyAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVh
c2UpCisgICAgIiIiCisgICAgcmV0dXJuIF9maW5kX2JpbmFyeSh0YXJnZXQsICdpbWFnZV9kaWZm
LmV4ZScpCisKKworZGVmIGxheW91dF90ZXN0X2hlbHBlcl9wYXRoKHRhcmdldCk6CisgICAgIiIi
UmV0dXJuIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBiaW5hcnkgcGF0aCBmb3IgdGhlIGxheW91dCB0
ZXN0IGhlbHBlci4KKyAgICBXZSB1c2UgdGhpcyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBiaW5hcnkg
aW4gdGhlIGRlZmF1bHQgbG9jYXRpb24KKyAgICBpbiBwYXRoX3V0aWxzLgorCisgICAgQXJnczoK
KyAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2UpCisgICAg
IiIiCisgICAgcmV0dXJuIF9maW5kX2JpbmFyeSh0YXJnZXQsICdsYXlvdXRfdGVzdF9oZWxwZXIu
ZXhlJykKKworCitkZWYgdGVzdF9zaGVsbF9wYXRoKHRhcmdldCk6CisgICAgIiIiUmV0dXJuIHRo
ZSBwbGF0Zm9ybS1zcGVjaWZpYyBiaW5hcnkgcGF0aCBmb3Igb3VyIFRlc3RTaGVsbC4KKyAgICAg
ICBXZSB1c2UgdGhpcyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBiaW5hcnkgaW4gdGhlIGRlZmF1bHQg
bG9jYXRpb24KKyAgICAgICBpbiBwYXRoX3V0aWxzLgorCisgICAgQXJnczoKKyAgICAgIHRhcmdl
dDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2UpCisgICAgIiIiCisgICAgcmV0
dXJuIF9maW5kX2JpbmFyeSh0YXJnZXQsICd0ZXN0X3NoZWxsLmV4ZScpCisKKworZGVmIGFwYWNo
ZV9leGVjdXRhYmxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGgg
dG8gc3RhcnQgQXBhY2hlIiIiCisgICAgcGF0aCA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uo
J3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICJ1c3IiLCAic2JpbiIpCisgICAgIyBEb24ndCByZXR1
cm4gaHR0cGQuZXhlIHNpbmNlIHdlIHdhbnQgdG8gdXNlIHRoaXMgZnJvbSBjeWd3aW4uCisgICAg
cmV0dXJuIG9zLnBhdGguam9pbihwYXRoLCAiaHR0cGQiKQorCisKK2RlZiBhcGFjaGVfY29uZmln
X2ZpbGVfcGF0aCgpOgorICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8gQXBhY2hlIGNvbmZpZyBm
aWxlIiIiCisgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoInRoaXJkX3BhcnR5
IiwgIldlYktpdCIsICJMYXlvdXRUZXN0cyIsCisgICAgICAgICJodHRwIiwgImNvbmYiLCAiY3ln
d2luLWh0dHBkLmNvbmYiKQorCisKK2RlZiBsaWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKToKKyAg
ICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgTGlnSFRUUGQiIiIKKyAg
ICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnbGlnaHR0
cGQnLCAnd2luJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGlnaHRU
UEQuZXhlJykKKworCitkZWYgbGlnaHR0cGRfbW9kdWxlX3BhdGgoKToKKyAgICAiIiJSZXR1cm5z
IHRoZSBsaWJyYXJ5IG1vZHVsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgorICAgIHJldHVybiBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICd3aW4nLCAn
bGliJykKKworCitkZWYgbGlnaHR0cGRfcGhwX3BhdGgoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBQ
SFAgZXhlY3V0YWJsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgorICAgIHJldHVybiBwYXRoX3V0aWxz
LnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICd3aW4nLCAncGhwNScs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BocC1jZ2kuZXhlJykKKwor
CitkZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9waWQpOgorICAgICIiIlNodXQgZG93
biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVsbHkgc2h1dCBk
b3duLgorCisgICAgQXJnczoKKyAgICAgIHNlcnZlcl9waWQ6IFRoZSBwcm9jZXNzIElEIG9mIHRo
ZSBydW5uaW5nIHNlcnZlci4KKyAgICAgICAgICBVbnVzZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgbWV0aG9kLgorICAgICIiIgorICAgIHN1YnByb2Nlc3MuUG9wZW4oKCd0YXNra2ls
bC5leGUnLCAnL2YnLCAnL2ltJywgJ0xpZ2h0VFBELmV4ZScpLAorICAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1z
dWJwcm9jZXNzLlBJUEUpLndhaXQoKQorICAgIHN1YnByb2Nlc3MuUG9wZW4oKCd0YXNra2lsbC5l
eGUnLCAnL2YnLCAnL2ltJywgJ2h0dHBkLmV4ZScpLAorICAgICAgICAgICAgICAgICAgICAgc3Rk
b3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9j
ZXNzLlBJUEUpLndhaXQoKQorCisKK2RlZiBraWxsX3Byb2Nlc3MocGlkKToKKyAgICAiIiJGb3Jj
ZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3MuCisKKyAgICBBcmdzOgorICAgICAgcGlkOiBUaGUgaWQg
b2YgdGhlIHByb2Nlc3MgdG8gYmUga2lsbGVkLgorICAgICIiIgorICAgIHN1YnByb2Nlc3MuY2Fs
bCgoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvcGlkJywgc3RyKHBpZCkpLAorICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICBzdGRl
cnI9c3VicHJvY2Vzcy5QSVBFKQorCisKK2RlZiBraWxsX2FsbF90ZXN0X3NoZWxscyhzZWxmKToK
KyAgICAiIiJLaWxscyBhbGwgaW5zdGFuY2VzIG9mIHRoZSB0ZXN0X3NoZWxsIGJpbmFyeSBjdXJy
ZW50bHkgcnVubmluZy4iIiIKKyAgICBzdWJwcm9jZXNzLlBvcGVuKCgndGFza2tpbGwuZXhlJywg
Jy9mJywgJy9pbScsICd0ZXN0X3NoZWxsLmV4ZScpLAorICAgICAgICAgICAgICAgICAgICAgc3Rk
b3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9j
ZXNzLlBJUEUpLndhaXQoKQorCisjCisjIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucy4KKyMKKwor
CitkZWYgX2ZpbmRfYmluYXJ5KHRhcmdldCwgYmluYXJ5KToKKyAgICAiIiJPbiBXaW5kb3dzLCB3
ZSBsb29rIGZvciBiaW5hcmllcyB0aGF0IHdlIGNvbXBpbGUgaW4gcG90ZW50aWFsbHkKKyAgICB0
d28gcGxhY2VzOiBzcmMvd2Via2l0LyR0YXJnZXQgKHByZWZlcmFibHksIHdoaWNoIHdlIGdldCBp
ZiB3ZQorICAgIGJ1aWx0IHVzaW5nIHdlYmtpdF9nbHVlLmd5cCksIG9yIHNyYy9jaHJvbWUvJHRh
cmdldCAoaWYgY29tcGlsZWQgc29tZQorICAgIG90aGVyIHdheSkuIiIiCisgICAgdHJ5OgorICAg
ICAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgdGFyZ2V0LCBi
aW5hcnkpCisgICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgorICAgICAgICB0cnk6
CisgICAgICAgICAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnY2hyb21lJywg
dGFyZ2V0LCBiaW5hcnkpCisgICAgICAgIGV4Y2VwdCBwYXRoX3V0aWxzLlBhdGhOb3RGb3VuZDoK
KyAgICAgICAgICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCdidWlsZCcsIHRh
cmdldCwgYmluYXJ5KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggMDAwMDAwMC4uZWJjOWY0OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKQEAgLTAs
MCArMSwyNzkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
Q2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkEgY2xh
c3MgdG8gaGVscCBzdGFydC9zdG9wIHRoZSBsaWdodHRwZCBzZXJ2ZXIgdXNlZCBieSBsYXlvdXQg
dGVzdHMuIiIiCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9z
CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRl
bXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHVybGxpYgorCitpbXBvcnQgaHR0cF9zZXJ2ZXJf
YmFzZQoraW1wb3J0IHBhdGhfdXRpbHMKKworY2xhc3MgSHR0cGROb3RTdGFydGVkKEV4Y2VwdGlv
bik6IHBhc3MKKworZGVmIHJlbW92ZV9sb2dfZmlsZXMoZm9sZGVyLCBzdGFydHNfd2l0aCk6Cisg
ICAgZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRlcikKKyAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAg
ICAgICAgaWYgZmlsZS5zdGFydHN3aXRoKHN0YXJ0c193aXRoKToKKyAgICAgICAgICAgIGZ1bGxf
cGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsIGZpbGUpCisgICAgICAgICAgICBvcy5yZW1vdmUo
ZnVsbF9wYXRoKQorCisKK2NsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZl
ckJhc2UpOgorICAgICMgV2Via2l0IHRlc3RzCisgICAgdHJ5OgorICAgICAgICBfd2Via2l0X3Rl
c3RzID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91
dFRlc3RzJywgJ2h0dHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAndGVzdHMnKQorICAgICAgICBfanNfdGVzdF9yZXNvdXJjZSA9IHBhdGhfdXRp
bHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMnLCAn
ZmFzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnanMnLCAncmVzb3VyY2VzJykKKyAgICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91
bmQ6CisgICAgICAgIF93ZWJraXRfdGVzdHMgPSBOb25lCisgICAgICAgIF9qc190ZXN0X3Jlc291
cmNlID0gTm9uZQorCisgICAgIyBQYXRoIHdoZXJlIHdlIGNhbiBhY2Nlc3MgYWxsIG9mIHRoZSB0
ZXN0cworICAgIF9hbGxfdGVzdHMgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQn
LCAnZGF0YScsICdsYXlvdXRfdGVzdHMnKQorICAgICMgU2VsZiBnZW5lcmF0ZWQgY2VydGlmaWNh
dGUgZm9yIFNTTCBzZXJ2ZXIgKGZvciBjbGllbnQgY2VydCBnZXQKKyAgICAjIDxiYXNlLXBhdGg+
XGNocm9tZVx0ZXN0XGRhdGFcc3NsXGNlcnRzXHJvb3RfY2FfY2VydC5jcnQpCisgICAgX3BlbV9m
aWxlID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgKKyAgICAgICAgb3MucGF0aC5kaXJuYW1l
KG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLCAnaHR0cGQyLnBlbScpCisgICAgIyBPbmUgbWFw
cGluZyB3aGVyZSB3ZSBjYW4gZ2V0IHRvIGV2ZXJ5dGhpbmcKKyAgICBWSVJUVUFMQ09ORklHID0g
W3sncG9ydCc6IDgwODEsICdkb2Nyb290JzogX2FsbF90ZXN0c31dCisKKyAgICBpZiBfd2Via2l0
X3Rlc3RzOgorICAgICAgICBWSVJUVUFMQ09ORklHLmV4dGVuZCgKKyAgICAgICAgICAjIFRocmVl
IG1hcHBpbmdzIChvbmUgd2l0aCBTU0wgZW5hYmxlZCkgZm9yIExheW91dFRlc3RzIGh0dHAgdGVz
dHMKKyAgICAgICAgICBbeydwb3J0JzogODAwMCwgJ2RvY3Jvb3QnOiBfd2Via2l0X3Rlc3RzfSwK
KyAgICAgICAgICAgeydwb3J0JzogODA4MCwgJ2RvY3Jvb3QnOiBfd2Via2l0X3Rlc3RzfSwKKyAg
ICAgICAgICAgeydwb3J0JzogODQ0MywgJ2RvY3Jvb3QnOiBfd2Via2l0X3Rlc3RzLCAnc3NsY2Vy
dCc6IF9wZW1fZmlsZX1dKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dF9kaXIsIGJh
Y2tncm91bmQ9RmFsc2UsIHBvcnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcm9vdD1Ob25lLCBy
ZWdpc3Rlcl9jeWd3aW49Tm9uZSwgcnVuX2JhY2tncm91bmQ9Tm9uZSk6CisgICAgICAgICIiIkFy
Z3M6CisgICAgICAgICAgb3V0cHV0X2RpcjogdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGxheW91
dCB0ZXN0IHJlc3VsdCBkaXJlY3RvcnkKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX291dHB1
dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisgICAgICAg
IHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CisgICAgICAgIHNl
bGYuX3JlZ2lzdGVyX2N5Z3dpbiA9IHJlZ2lzdGVyX2N5Z3dpbgorICAgICAgICBzZWxmLl9ydW5f
YmFja2dyb3VuZCA9IHJ1bl9iYWNrZ3JvdW5kCisgICAgICAgIGlmIHNlbGYuX3BvcnQ6CisgICAg
ICAgICAgICBzZWxmLl9wb3J0ID0gaW50KHNlbGYuX3BvcnQpCisKKyAgICBkZWYgaXNfcnVubmlu
ZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Nlc3MgIT0gTm9uZQorCisgICAgZGVm
IHN0YXJ0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlzX3J1bm5pbmcoKToKKyAgICAgICAgICAg
IHJhaXNlICdMaWdodHRwZCBhbHJlYWR5IHJ1bm5pbmcnCisKKyAgICAgICAgYmFzZV9jb25mX2Zp
bGUgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsCisgICAgICAgICAg
ICAnV2ViS2l0VG9vbHMnLCAnU2NyaXB0cycsICd3ZWJraXRweScsICdsYXlvdXRfdGVzdHMnLAor
ICAgICAgICAgICAgJ2xheW91dF9wYWNrYWdlJywgJ2xpZ2h0dHBkLmNvbmYnKQorICAgICAgICBv
dXRfY29uZl9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsICdsaWdodHRwZC5j
b25mJykKKyAgICAgICAgdGltZV9zdHIgPSB0aW1lLnN0cmZ0aW1lKCIlZCViJVktJUglTSVTIikK
KyAgICAgICAgYWNjZXNzX2ZpbGVfbmFtZSA9ICJhY2Nlc3MubG9nLSIgKyB0aW1lX3N0ciArICIu
dHh0IgorICAgICAgICBhY2Nlc3NfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIs
IGFjY2Vzc19maWxlX25hbWUpCisgICAgICAgIGxvZ19maWxlX25hbWUgPSAiZXJyb3IubG9nLSIg
KyB0aW1lX3N0ciArICIudHh0IgorICAgICAgICBlcnJvcl9sb2cgPSBvcy5wYXRoLmpvaW4oc2Vs
Zi5fb3V0cHV0X2RpciwgbG9nX2ZpbGVfbmFtZSkKKworICAgICAgICAjIFJlbW92ZSBvbGQgbG9n
IGZpbGVzLiBXZSBvbmx5IG5lZWQgdG8ga2VlcCB0aGUgbGFzdCBvbmVzLgorICAgICAgICByZW1v
dmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsICJhY2Nlc3MubG9nLSIpCisgICAgICAgIHJl
bW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgImVycm9yLmxvZy0iKQorCisgICAgICAg
ICMgV3JpdGUgb3V0IHRoZSBjb25maWcKKyAgICAgICAgZiA9IGZpbGUoYmFzZV9jb25mX2ZpbGUs
ICdyYicpCisgICAgICAgIGJhc2VfY29uZiA9IGYucmVhZCgpCisgICAgICAgIGYuY2xvc2UoKQor
CisgICAgICAgIGYgPSBmaWxlKG91dF9jb25mX2ZpbGUsICd3YicpCisgICAgICAgIGYud3JpdGUo
YmFzZV9jb25mKQorCisgICAgICAgICMgV3JpdGUgb3V0IG91ciBjZ2kgaGFuZGxlcnMuICBSdW4g
cGVybCB0aHJvdWdoIGVudiBzbyB0aGF0IGl0CisgICAgICAgICMgcHJvY2Vzc2VzIHRoZSAjISBs
aW5lIGFuZCBydW5zIHBlcmwgd2l0aCB0aGUgcHJvcGVyIGNvbW1hbmQKKyAgICAgICAgIyBsaW5l
IGFyZ3VtZW50cy4gRW11bGF0ZSBhcGFjaGUncyBtb2RfYXNpcyB3aXRoIGEgY2F0IGNnaSBoYW5k
bGVyLgorICAgICAgICBmLndyaXRlKCgnY2dpLmFzc2lnbiA9ICggIi5jZ2kiICA9PiAiL3Vzci9i
aW4vZW52IixcbicKKyAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICIucGwiICAgPT4g
Ii91c3IvYmluL2VudiIsXG4nCisgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAiLmFz
aXMiID0+ICIvYmluL2NhdCIsXG4nCisgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAi
LnBocCIgID0+ICIlcyIgKVxuXG4nKSAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGF0aF91dGlscy5saWdodHRwZF9waHBfcGF0aCgpKQorCisgICAgICAgICMgU2V0dXAg
bG9nIGZpbGVzCisgICAgICAgIGYud3JpdGUoKCdzZXJ2ZXIuZXJyb3Jsb2cgPSAiJXMiXG4nCisg
ICAgICAgICAgICAgICAgICdhY2Nlc3Nsb2cuZmlsZW5hbWUgPSAiJXMiXG5cbicpICUgKGVycm9y
X2xvZywgYWNjZXNzX2xvZykpCisKKyAgICAgICAgIyBTZXR1cCB1cGxvYWQgZm9sZGVycy4gVXBs
b2FkIGZvbGRlciBpcyB0byBob2xkIHRlbXBvcmFyeSB1cGxvYWQgZmlsZXMKKyAgICAgICAgIyBh
bmQgYWxzbyBQT1NUIGRhdGEuIFRoaXMgaXMgdXNlZCB0byBzdXBwb3J0IFhIUiBsYXlvdXQgdGVz
dHMgdGhhdAorICAgICAgICAjIGRvZXMgUE9TVC4KKyAgICAgICAgZi53cml0ZSgoJ3NlcnZlci51
cGxvYWQtZGlycyA9ICggIiVzIiApXG5cbicpICUgKHNlbGYuX291dHB1dF9kaXIpKQorCisgICAg
ICAgICMgU2V0dXAgYSBsaW5rIHRvIHdoZXJlIHRoZSBqcyB0ZXN0IHRlbXBsYXRlcyBhcmUgc3Rv
cmVkCisgICAgICAgIGYud3JpdGUoKCdhbGlhcy51cmwgPSAoICIvanMtdGVzdC1yZXNvdXJjZXMi
ID0+ICIlcyIgKVxuXG4nKSAlCisgICAgICAgICAgICAgICAgICAgIChzZWxmLl9qc190ZXN0X3Jl
c291cmNlKSkKKworICAgICAgICAjIGR1bXAgb3V0IG9mIHZpcnR1YWwgaG9zdCBjb25maWcgYXQg
dGhlIGJvdHRvbS4KKyAgICAgICAgaWYgc2VsZi5fcm9vdDoKKyAgICAgICAgICAgIGlmIHNlbGYu
X3BvcnQ6CisgICAgICAgICAgICAgICAgIyBIYXZlIGJvdGggcG9ydCBhbmQgcm9vdCBkaXIuCisg
ICAgICAgICAgICAgICAgbWFwcGluZ3MgPSBbeydwb3J0Jzogc2VsZi5fcG9ydCwgJ2RvY3Jvb3Qn
OiBzZWxmLl9yb290fV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBIYXZl
IG9ubHkgYSByb290IGRpciAtIHNldCB0aGUgcG9ydHMgYXMgZm9yIExheW91dFRlc3RzLgorICAg
ICAgICAgICAgICAgICMgVGhpcyBpcyB1c2VkIGluIHVpX3Rlc3RzIHRvIHJ1biBodHRwIHRlc3Rz
IGFnYWluc3QgYSBicm93c2VyLgorCisgICAgICAgICAgICAgICAgIyBkZWZhdWx0IHNldCBvZiBw
b3J0cyBhcyBmb3IgTGF5b3V0VGVzdHMgYnV0IHdpdGggYQorICAgICAgICAgICAgICAgICMgc3Bl
Y2lmaWVkIHJvb3QuCisgICAgICAgICAgICAgICAgbWFwcGluZ3MgPSBbeydwb3J0JzogODAwMCwg
J2RvY3Jvb3QnOiBzZWxmLl9yb290fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3Bv
cnQnOiA4MDgwLCAnZG9jcm9vdCc6IHNlbGYuX3Jvb3R9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsncG9ydCc6IDg0NDMsICdkb2Nyb290Jzogc2VsZi5fcm9vdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3NzbGNlcnQnOiBMaWdodHRwZC5fcGVtX2ZpbGV9XQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgbWFwcGluZ3MgPSBzZWxmLlZJUlRVQUxDT05GSUcKKyAgICAg
ICAgZm9yIG1hcHBpbmcgaW4gbWFwcGluZ3M6CisgICAgICAgICAgICBzc2xfc2V0dXAgPSAnJwor
ICAgICAgICAgICAgaWYgJ3NzbGNlcnQnIGluIG1hcHBpbmc6CisgICAgICAgICAgICAgICAgc3Ns
X3NldHVwID0gKCcgIHNzbC5lbmdpbmUgPSAiZW5hYmxlIlxuJworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnICBzc2wucGVtZmlsZSA9ICIlcyJcbicgJSBtYXBwaW5nWydzc2xjZXJ0J10p
CisKKyAgICAgICAgICAgIGYud3JpdGUoKCckU0VSVkVSWyJzb2NrZXQiXSA9PSAiMTI3LjAuMC4x
OiVkIiB7XG4nCisgICAgICAgICAgICAgICAgICAgICAnICBzZXJ2ZXIuZG9jdW1lbnQtcm9vdCA9
ICIlcyJcbicgKworICAgICAgICAgICAgICAgICAgICAgc3NsX3NldHVwICsKKyAgICAgICAgICAg
ICAgICAgICAgICd9XG5cbicpICUgKG1hcHBpbmdbJ3BvcnQnXSwgbWFwcGluZ1snZG9jcm9vdCdd
KSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMu
bGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCkKKyAgICAgICAgbW9kdWxlX3BhdGggPSBwYXRoX3V0
aWxzLmxpZ2h0dHBkX21vZHVsZV9wYXRoKCkKKyAgICAgICAgc3RhcnRfY21kID0gW2V4ZWN1dGFi
bGUsCisgICAgICAgICAgICAgICAgICAgICAjIE5ld2x5IHdyaXR0ZW4gY29uZmlnIGZpbGUKKyAg
ICAgICAgICAgICAgICAgICAgICctZicsIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uoc2VsZi5f
b3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2xpZ2h0dHBkLmNvbmYnKSwKKyAgICAgICAgICAgICAgICAgICAgICMgV2hlcmUg
aXQgY2FuIGZpbmQgaXRzIG1vZHVsZSBkeW5hbWljIGxpYnJhcmllcworICAgICAgICAgICAgICAg
ICAgICAgJy1tJywgbW9kdWxlX3BhdGhdCisKKyAgICAgICAgaWYgbm90IHNlbGYuX3J1bl9iYWNr
Z3JvdW5kOgorICAgICAgICAgICAgc3RhcnRfY21kLmFwcGVuZCgjIERvbid0IGJhY2tncm91bmQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1EJykKKworICAgICAgICAjIENvcHkgbGli
bGlnaHRjb21wLmR5bGliIHRvIC90bXAvbGlnaHR0cGQvbGliIHRvIHdvcmsgYXJvdW5kIHRoZQor
ICAgICAgICAjIGJ1ZyB0aGF0IG1vZF9hbGlhcy5zbyBsb2FkcyBpdCBmcm9tIHRoZSBoYXJkIGNv
ZGVkIHBhdGguCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAg
ICAgIHRtcF9tb2R1bGVfcGF0aCA9ICcvdG1wL2xpZ2h0dHBkL2xpYicKKyAgICAgICAgICAgIGlm
IG5vdCBvcy5wYXRoLmV4aXN0cyh0bXBfbW9kdWxlX3BhdGgpOgorICAgICAgICAgICAgICAgIG9z
Lm1ha2VkaXJzKHRtcF9tb2R1bGVfcGF0aCkKKyAgICAgICAgICAgIGxpYl9maWxlID0gJ2xpYmxp
Z2h0Y29tcC5keWxpYicKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4o
bW9kdWxlX3BhdGgsIGxpYl9maWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5w
YXRoLmpvaW4odG1wX21vZHVsZV9wYXRoLCBsaWJfZmlsZSkpCisKKyAgICAgICAgIyBQdXQgdGhl
IGN5Z3dpbiBkaXJlY3RvcnkgZmlyc3QgaW4gdGhlIHBhdGggdG8gZmluZCBjeWd3aW4xLmRsbAor
ICAgICAgICBlbnYgPSBvcy5lbnZpcm9uCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5
Z3dpbicsICd3aW4zMicpOgorICAgICAgICAgICAgZW52WydQQVRIJ10gPSAnJXM7JXMnICUgKAor
ICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5Jywg
J2N5Z3dpbicsICdiaW4nKSwKKyAgICAgICAgICAgICAgICBlbnZbJ1BBVEgnXSkKKworICAgICAg
ICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgc2VsZi5fcmVnaXN0ZXJfY3lnd2luOgor
ICAgICAgICAgICAgc2V0dXBfbW91bnQgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGly
ZF9wYXJ0eScsICdjeWd3aW4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdzZXR1cF9tb3VudC5iYXQnKQorICAgICAgICAgICAgc3VicHJvY2Vz
cy5Qb3BlbihzZXR1cF9tb3VudCkud2FpdCgpCisKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygnU3Rh
cnRpbmcgaHR0cCBzZXJ2ZXInKQorICAgICAgICBzZWxmLl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Q
b3BlbihzdGFydF9jbWQsIGVudj1lbnYpCisKKyAgICAgICAgIyBXYWl0IGZvciBzZXJ2ZXIgdG8g
c3RhcnQuCisgICAgICAgIHNlbGYubWFwcGluZ3MgPSBtYXBwaW5ncworICAgICAgICBzZXJ2ZXJf
c3RhcnRlZCA9IHNlbGYud2FpdF9mb3JfYWN0aW9uKAorICAgICAgICAgICAgc2VsZi5pc19zZXJ2
ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMpCisKKyAgICAgICAgIyBPdXIgcHJvY2VzcyB0ZXJtaW5h
dGVkIGFscmVhZHkKKyAgICAgICAgaWYgbm90IHNlcnZlcl9zdGFydGVkIG9yIHNlbGYuX3Byb2Nl
c3MucmV0dXJuY29kZSAhPSBOb25lOgorICAgICAgICAgICAgcmFpc2UgZ29vZ2xlLmh0dHBkX3V0
aWxzLkh0dHBkTm90U3RhcnRlZCgnRmFpbGVkIHRvIHN0YXJ0IGh0dHBkLicpCisKKyAgICAgICAg
bG9nZ2luZy5kZWJ1ZygiU2VydmVyIHN1Y2Nlc3NmdWxseSBzdGFydGVkIikKKworICAgICMgVE9E
TyhkZWFubSk6IEZpbmQgYSBuaWNlciB3YXkgdG8gc2h1dGRvd24gY2xlYW5seS4gIE91ciBsb2cg
ZmlsZXMgYXJlCisgICAgIyBwcm9iYWJseSBub3QgYmVpbmcgZmx1c2hlZCwgZXRjLi4uIHdoeSBk
b2Vzbid0IG91ciBweXRob24gaGF2ZSBvcy5raWxsID8KKworICAgIGRlZiBzdG9wKHNlbGYsIGZv
cmNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGZvcmNlIGFuZCBub3Qgc2VsZi5pc19ydW5uaW5n
KCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBodHRwZF9waWQgPSBOb25lCisgICAg
ICAgIGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICBodHRwZF9waWQgPSBzZWxmLl9wcm9j
ZXNzLnBpZAorICAgICAgICBwYXRoX3V0aWxzLnNodXRfZG93bl9odHRwX3NlcnZlcihodHRwZF9w
aWQpCisKKyAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nl
c3Mud2FpdCgpCisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQorCitpZiAnX19tYWlu
X18nID09IF9fbmFtZV9fOgorICAgICMgUHJvdmlkZSBzb21lIGNvbW1hbmQgbGluZSBwYXJhbXMg
Zm9yIHN0YXJ0aW5nL3N0b3BwaW5nIHRoZSBodHRwIHNlcnZlcgorICAgICMgbWFudWFsbHkuIEFs
c28gdXNlZCBpbiB1aV90ZXN0cyB0byBydW4gaHR0cCBsYXlvdXQgdGVzdHMgaW4gYSBicm93c2Vy
LgorICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQorICAgIG9wdGlv
bl9wYXJzZXIuYWRkX29wdGlvbignLWsnLCAnLS1zZXJ2ZXInLAorICAgICAgICBoZWxwPSdTZXJ2
ZXIgYWN0aW9uIChzdGFydHxzdG9wKScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCct
cCcsICctLXBvcnQnLAorICAgICAgICBoZWxwPSdQb3J0IHRvIGxpc3RlbiBvbiAob3ZlcnJpZGVz
IGxheW91dCB0ZXN0IHBvcnRzKScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctcics
ICctLXJvb3QnLAorICAgICAgICBoZWxwPSdBYnNvbHV0ZSBwYXRoIHRvIERvY3VtZW50Um9vdCAo
b3ZlcnJpZGVzIGxheW91dCB0ZXN0IHJvb3RzKScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0
aW9uKCctLXJlZ2lzdGVyX2N5Z3dpbicsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRl
c3Q9InJlZ2lzdGVyX2N5Z3dpbiIsIGhlbHA9J1JlZ2lzdGVyIEN5Z3dpbiBwYXRocyAob24gV2lu
IHRyeSBib3RzKScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctLXJ1bl9iYWNrZ3Jv
dW5kJywgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgZGVzdD0icnVuX2JhY2tncm91bmQi
LAorICAgICAgICBoZWxwPSdSdW4gb24gYmFja2dyb3VuZCAoZm9yIHJ1bm5pbmcgYXMgVUkgdGVz
dCknKQorICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisg
ICAgaWYgbm90IG9wdGlvbnMuc2VydmVyOgorICAgICAgICBwcmludCAoJ1VzYWdlOiAlcyAtLXNl
cnZlciB7c3RhcnR8c3RvcH0gWy0tcm9vdD1yb290X2Rpcl0nCisgICAgICAgICAgICAgICAnIFst
LXBvcnQ9cG9ydF9udW1iZXJdJyAlIHN5cy5hcmd2WzBdKQorICAgIGVsc2U6CisgICAgICAgIGlm
IChvcHRpb25zLnJvb3QgaXMgTm9uZSkgYW5kIChvcHRpb25zLnBvcnQgaXMgbm90IE5vbmUpOgor
ICAgICAgICAgICAgIyBzcGVjaWZ5aW5nIHJvb3QgYnV0IG5vdCBwb3J0IG1lYW5zIHdlIHdhbnQg
aHR0cGQgb24gZGVmYXVsdAorICAgICAgICAgICAgIyBzZXQgb2YgcG9ydHMgdGhhdCBMYXlvdXRU
ZXN0IHVzZSwgYnV0IHBvaW50aW5nIHRvIGEgZGlmZmVyZW50CisgICAgICAgICAgICAjIHNvdXJj
ZSBvZiB0ZXN0cy4gU3BlY2lmeWluZyBwb3J0IGJ1dCBubyByb290IGRvZXMgbm90IHNlZW0KKyAg
ICAgICAgICAgICMgbWVhbmluZ2Z1bC4KKyAgICAgICAgICAgIHJhaXNlICdTcGVjaWZ5aW5nIHBv
cnQgcmVxdWlyZXMgYWxzbyBhIHJvb3QuJworICAgICAgICBodHRwZCA9IExpZ2h0dHBkKHRlbXBm
aWxlLmdldHRlbXBkaXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0PW9wdGlvbnMu
cG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByb290PW9wdGlvbnMucm9vdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9jeWd3aW49b3B0aW9ucy5yZWdpc3Rlcl9jeWd3
aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2JhY2tncm91bmQ9b3B0aW9ucy5ydW5f
YmFja2dyb3VuZCkKKyAgICAgICAgaWYgJ3N0YXJ0JyA9PSBvcHRpb25zLnNlcnZlcjoKKyAgICAg
ICAgICAgIGh0dHBkLnN0YXJ0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGh0dHBkLnN0
b3AoZm9yY2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWNmOWMwCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZl
cl9iYXNlLnB5CkBAIC0wLDAgKzEsNjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyIiIkJhc2UgY2xhc3Mgd2l0aCBjb21tb24gcm91dGluZXMgYmV0d2VlbiB0aGUgQXBh
Y2hlIGFuZCBMaWdodHRwZCBzZXJ2ZXJzLiIiIgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHRp
bWUKK2ltcG9ydCB1cmxsaWIKKworCitjbGFzcyBIdHRwU2VydmVyQmFzZShvYmplY3QpOgorCisg
ICAgZGVmIHdhaXRfZm9yX2FjdGlvbihzZWxmLCBhY3Rpb24pOgorICAgICAgICAiIiJSZXBlYXQg
dGhlIGFjdGlvbiBmb3IgMjAgc2Vjb25kcyBvciB1bnRpbCBpdCBzdWNjZWVkcy4gUmV0dXJucwor
ICAgICAgICB3aGV0aGVyIGl0IHN1Y2NlZWRlZC4iIiIKKyAgICAgICAgc3RhcnRfdGltZSA9IHRp
bWUudGltZSgpCisgICAgICAgIHdoaWxlIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSA8IDIwOgor
ICAgICAgICAgICAgaWYgYWN0aW9uKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAg
ICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRl
ZiBpc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMoc2VsZik6CisgICAgICAgICIiIlJldHVy
bnMgd2hldGhlciB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgb24gYWxsIHRoZSBkZXNpcmVkIHBvcnRz
LiIiIgorICAgICAgICBmb3IgbWFwcGluZyBpbiBzZWxmLm1hcHBpbmdzOgorICAgICAgICAgICAg
aWYgJ3NzbGNlcnQnIGluIG1hcHBpbmc6CisgICAgICAgICAgICAgICAgaHR0cF9zdWZmaXggPSAn
cycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaHR0cF9zdWZmaXggPSAnJwor
CisgICAgICAgICAgICB1cmwgPSAnaHR0cCVzOi8vMTI3LjAuMC4xOiVkLycgJSAoaHR0cF9zdWZm
aXgsIG1hcHBpbmdbJ3BvcnQnXSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg
IHJlc3BvbnNlID0gdXJsbGliLnVybG9wZW4odXJsKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcu
ZGVidWcoIlNlcnZlciBydW5uaW5nIGF0ICVzIiAlIHVybCkKKyAgICAgICAgICAgIGV4Y2VwdCBJ
T0Vycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlNlcnZlciBOT1QgcnVubmlu
ZyBhdCAlcyIgJSB1cmwpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAg
cmV0dXJuIFRydWUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvaHR0cGQyLnBlbSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvaHR0cGQyLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi42MzQ5Yjc4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwZDIucGVtCkBAIC0wLDAgKzEsNDEgQEAKKy0t
LS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRVpEQ0NBa3lnQXdJQkFnSUJBVEFOQmdrcWhr
aUc5dzBCQVFVRkFEQmdNUkF3RGdZRFZRUURFd2RVWlhOMAorSUVOQk1Rc3dDUVlEVlFRR0V3SlZV
ekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgorVFc5MWJuUmhhVzRn
Vm1sbGR6RVNNQkFHQTFVRUNoTUpRMlZ5ZENCVVpYTjBNQjRYRFRBNE1EY3lPREl5TXpJeQorT0Zv
WERURXpNRGN5TnpJeU16SXlPRm93U2pFTE1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05o
YkdsbQorYjNKdWFXRXhFakFRQmdOVkJBb1RDVU5sY25RZ1ZHVnpkREVTTUJBR0ExVUVBeE1KTVRJ
M0xqQXVNQzR4TUlHZgorTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUURRajJ0UFdQ
VWdidUk0SDMvM2RudHRxVmJuZHdVMworM0JkUkNkNjdERk00NEdScnNqRFNINGJZL0ViRnlYOUQ1
MmQvaXk2WmFBbURlUGNDejVrL2ZnUDNETXVqeWtZRworcWdOaVYyeXd4VGxNajdObE4yQzdTUnQ2
OGZRTVpyNWlJN3J5cGR4dWFadDlsU01EM0VOQmZmWXR1TFR5WmQ5YQorM0pQSmUxVGFJYWI1R3dJ
REFRQUJvNEhDTUlHL01Ba0dBMVVkRXdRQ01BQXdIUVlEVlIwT0JCWUVGQ1lMQnY1SworeDVzTE5W
bHBMaDVGd1R3aGREbDdNSUdTQmdOVkhTTUVnWW93Z1llQUZGM09mNW5qMUJsQk1VL0d6N0VsOVZx
dgorNDVjeG9XU2tZakJnTVJBd0RnWURWUVFERXdkVVpYTjBJRU5CTVFzd0NRWURWUVFHRXdKVlV6
RVRNQkVHQTFVRQorQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5UVzkxYm5SaGFXNGdW
bWxsZHpFU01CQUdBMVVFQ2hNSgorUTJWeWRDQlVaWE4wZ2drQTFGR1QxRC9lMlU0d0RRWUpLb1pJ
aHZjTkFRRUZCUUFEZ2dJQkFFdGtWbUxPYlVnaworYjJjSUEyUytRRHRpZnExVWdWZkJieXR2UjJs
Rm1uQURPUjU1bW8wZ0hRRzNISHFxNGcwMzRMbW9WWERIaFVrOAorR2I2YUZpdjRRdWJtVmhMWGNV
ZWxUUlh3aU52R3prVzdwQzZKcnExMDVoZFBqelhNS1RjbWlMYW9wbTVGcWZjNworaGo1Q24xU2pz
cGM4cGRlUWpyYmVNZHZjYTdLbEZyR1A4WWt3Q1UyeE9PWDlQaU45RzA5NjZCV2ZqbnIvZlpacAor
K09RVnVVRkhkaUFad3RoRU11RHBBQVhIcVlYSXNlcm1nZE9wZ0phQTUzY2Y4TnFCVjJRR2h0Rmd0
c0pDUm9pdQorN0RLcWh5UldCR3l6MTlWSUgyYjd5KzZxdlFWeHVIazE5a0tSTTBuZnR3L3lOY0pu
bTdndHR0ZXNwTVVQc09NYQorYTJTRDFHMGhtMFRORDZ2eGFCaGdSM2NWcXBsL3FJcEFkRmkwMFRt
N2hUeVlFN0k0M3pQVzAzdCsvRHBDdDNVbQorRU1SWnNROTBjbzVxK2JjeC92UTdZQXR3VWgzMHVN
YjB3cGliZXlDd0RwOGNxTm1TaVJrRXVjL0ZqVFllczV0OAorNWdSLy9XWDFsMCtxanJqdXNPOU5t
b0xucTJZazZVY2lvWCt6K3E2Wi9kdWRHZnFoTGZlV0QyUTBMV1lBMjQyQworZDdrbTVZM0tBdDFQ
SmRWc29mL2FpVmhWZGRkWS9PSUVLVFJRaFdFZERib3N5MmVoMTZCQ0tYVDJGRnZoTkRnMQorQVlG
dm42SThuajlJbGRNSmlJYzNEZGhhY0VBRXpSTWVSZ1BkekFhMWdyaUtVR2tueHN5VHlSaWk4cnUw
V1M2dworRENOcmxET1ZYZHpZR0Vab29CSTc2QkRWWTBXMGFralYKKy0tLS0tRU5EIENFUlRJRklD
QVRFLS0tLS0KKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNYUUlCQUFLQmdR
RFFqMnRQV1BVZ2J1STRIMy8zZG50dHFWYm5kd1UzM0JkUkNkNjdERk00NEdScnNqRFMKK0g0Ylkv
RWJGeVg5RDUyZC9peTZaYUFtRGVQY0N6NWsvZmdQM0RNdWp5a1lHcWdOaVYyeXd4VGxNajdObE4y
QzcKK1NSdDY4ZlFNWnI1aUk3cnlwZHh1YVp0OWxTTUQzRU5CZmZZdHVMVHlaZDlhM0pQSmUxVGFJ
YWI1R3dJREFRQUIKK0FvR0FOSFh1OHoyWUl6bGhFK2J3aEdtOE1HQnBLTDNxaFJ1S2plcmlxTUEz
NnRXZXpPdzhsWTR5bUVBVStVbHYKK0JzQ2RheHF5ZFFvVFlvdTU3bTRUeVVIRWN4cTlwcTNIMHpC
MHFMNzA5RGRIaS90NHpiVjlYSW9BekM1djAvaEcKKzkrQ2EyOVR3QzAyRkN3K3FMa05ydHdDcHdP
Y1FtYytiUHhxdkZ1MWlNaWFoVVJFQ1FRRDJJL0hpMjQxM0NNWnoKK1RCamw4Zk1pVk85R2hBMkow
c2M4UWkrWWNnSmFrYUxEOXhjYmFpTGtUelBaRGxBMzg5QzFiNklhK3BvQXI0WUEKK1ZlMEZGYnhw
QWtFQTJPb2JheXlIRS9RdFBFcW95Nk5MUjU3amlybVZCTm1TV1dkNGxBeUw1VUlISVlWdHRKWmcK
KzhDTHZiemFVL2lER3dSK3dLc002NjRyS1BIRW10bHlvNHdKQkFNZVNxWU81Wk9DSkd1OU5XanJI
ak0zZmRBc0cKKzh6czJ6aGlMeWErZmNVMGlISWtzQlc1VEJtdDcxSncvd01jOVI1SjFLMGtZdkZt
bDk4NjUzTzVzaTFFQ1FCQ2sKK1JWNC9tRTFybWx6WnpZRnlFY0I0N0RRa2NNNWljdHZ4R0VzamUw
Z25mS3lSdEF6NnpJMGY0UWJEUlVNSitMV3cKK1hLK3JNc1lIYStTZk9iMGI5c2tDUVFDTGRlb25z
SXBGRHYvVXYrZmxISVN5MFdBK0FGa0xYclJrQktoNkcvT0QKK2RNSGFOZXZrSmdVbnBjZVZFbmty
ZGVucDVDY0VvRlRJMTdwZCtuQmdEbS9CCistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9saWdodHRwZC5jb25mIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9saWdodHRwZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmQzMTUwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2xpZ2h0dHBkLmNvbmYKQEAgLTAsMCArMSw4OSBAQAorc2VydmVy
LnRhZyAgICAgICAgICAgICAgICAgID0gIkxpZ2h0VFBELzEuNC4xOSAoV2luMzIpIgorc2VydmVy
Lm1vZHVsZXMgICAgICAgICAgICAgID0gKCAibW9kX2FjY2Vzc2xvZyIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJtb2RfYWxpYXMiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAibW9kX2NnaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2Rf
cmV3cml0ZSIgKQorCisjIGRlZmF1bHQgZG9jdW1lbnQgcm9vdCByZXF1aXJlZAorc2VydmVyLmRv
Y3VtZW50LXJvb3QgPSAiLiIKKworIyBmaWxlcyB0byBjaGVjayBmb3IgaWYgLi4uLyBpcyByZXF1
ZXN0ZWQKK2luZGV4LWZpbGUubmFtZXMgICAgICAgICAgICA9ICggImluZGV4LnBocCIsICJpbmRl
eC5wbCIsICJpbmRleC5jZ2kiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5k
ZXguaHRtbCIsICJpbmRleC5odG0iLCAiZGVmYXVsdC5odG0iICkKKyMgbWltZXR5cGUgbWFwcGlu
ZworbWltZXR5cGUuYXNzaWduICAgICAgICAgICAgID0gKAorICAiLmdpZiIgICAgICAgICAgPT4g
ICAgICAiaW1hZ2UvZ2lmIiwKKyAgIi5qcGciICAgICAgICAgID0+ICAgICAgImltYWdlL2pwZWci
LAorICAiLmpwZWciICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisgICIucG5nIiAgICAg
ICAgICA9PiAgICAgICJpbWFnZS9wbmciLAorICAiLnN2ZyIgICAgICAgICAgPT4gICAgICAiaW1h
Z2Uvc3ZnK3htbCIsCisgICIuY3NzIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2NzcyIsCisgICIu
aHRtbCIgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAorICAiLmh0bSIgICAgICAgICAgPT4g
ICAgICAidGV4dC9odG1sIiwKKyAgIi54aHRtbCIgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9u
L3hodG1sK3htbCIsCisgICIuanMiICAgICAgICAgICA9PiAgICAgICJ0ZXh0L2phdmFzY3JpcHQi
LAorICAiLmxvZyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuY29uZiIgICAg
ICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi50ZXh0IiAgICAgICAgID0+ICAgICAgInRl
eHQvcGxhaW4iLAorICAiLnR4dCIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIu
ZHRkIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisgICIueG1sIiAgICAgICAgICA9PiAg
ICAgICJ0ZXh0L3htbCIsCisgICIubWFuaWZlc3QiICAgICA9PiAgICAgICJ0ZXh0L2NhY2hlLW1h
bmlmZXN0IiwKKyApCisKKyMgVXNlIHRoZSAiQ29udGVudC1UeXBlIiBleHRlbmRlZCBhdHRyaWJ1
dGUgdG8gb2J0YWluIG1pbWUgdHlwZSBpZiBwb3NzaWJsZQorbWltZXR5cGUudXNlLXhhdHRyICAg
ICAgICAgID0gImVuYWJsZSIKKworIyMKKyMgd2hpY2ggZXh0ZW5zaW9ucyBzaG91bGQgbm90IGJl
IGhhbmRsZSB2aWEgc3RhdGljLWZpbGUgdHJhbnNmZXIKKyMKKyMgLnBocCwgLnBsLCAuZmNnaSBh
cmUgbW9zdCBvZnRlbiBoYW5kbGVkIGJ5IG1vZF9mYXN0Y2dpIG9yIG1vZF9jZ2kKK3N0YXRpYy1m
aWxlLmV4Y2x1ZGUtZXh0ZW5zaW9ucyA9ICggIi5waHAiLCAiLnBsIiwgIi5jZ2kiICkKKworc2Vy
dmVyLmJpbmQgPSAibG9jYWxob3N0Igorc2VydmVyLnBvcnQgPSA4MDAxCisKKyMjIHZpcnR1YWwg
ZGlyZWN0b3J5IGxpc3RpbmdzCitkaXItbGlzdGluZy5hY3RpdmF0ZSAgICAgICAgPSAiZW5hYmxl
IgorI2Rpci1saXN0aW5nLmVuY29kaW5nICAgICAgID0gImlzby04ODU5LTIiCisjZGlyLWxpc3Rp
bmcuZXh0ZXJuYWwtY3NzICAgPSAic3R5bGUvb2xkc3R5bGUuY3NzIgorCisjIyBlbmFibGUgZGVi
dWdnaW5nCisjZGVidWcubG9nLXJlcXVlc3QtaGVhZGVyICAgPSAiZW5hYmxlIgorI2RlYnVnLmxv
Zy1yZXNwb25zZS1oZWFkZXIgID0gImVuYWJsZSIKKyNkZWJ1Zy5sb2ctcmVxdWVzdC1oYW5kbGlu
ZyA9ICJlbmFibGUiCisjZGVidWcubG9nLWZpbGUtbm90LWZvdW5kICAgPSAiZW5hYmxlIgorCisj
IyMjIFNTTCBlbmdpbmUKKyNzc2wuZW5naW5lICAgICAgICAgICAgICAgICA9ICJlbmFibGUiCisj
c3NsLnBlbWZpbGUgICAgICAgICAgICAgICAgPSAic2VydmVyLnBlbSIKKworIyBSZXdyaXRlIHJ1
bGUgZm9yIHV0Zi04IHBhdGggdGVzdCAoTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy91cmkvdXRmOC1w
YXRoLmh0bWwpCisjIFNlZSB0aGUgYXBhY2hlIHJld3JpdGUgcnVsZSBhdCBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3VyaS9pbnRlcmNlcHQvLmh0YWNjZXNzCisjIFJld3JpdGUgcnVsZSBmb3IgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9jeXJpbGxpYy11cmkuaHRtbC4KKyMgU2VlIHRo
ZSBhcGFjaGUgcmV3cml0ZSBydWxlIGF0CisjIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2Fj
aGUvcmVzb3VyY2VzL2ludGVyY2VwdC8uaHRhY2Nlc3MKK3VybC5yZXdyaXRlLW9uY2UgPSAoCisg
ICJeL3VyaS9pbnRlcmNlcHQvKC4qKSIgPT4gIi91cmkvcmVzb3VyY2VzL3ByaW50LXVyaS5waHAi
LAorICAiXi9hcHBjYWNoZS9yZXNvdXJjZXMvaW50ZXJjZXB0LyguKikiID0+ICIvYXBwY2FjaGUv
cmVzb3VyY2VzL3ByaW50LXVyaS5waHAiCispCisKKyMgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC9yZXNwb25zZS1lbmNvZGluZy5odG1sIHVzZXMgYW4gaHRhY2Nlc3MKKyMg
dG8gb3ZlcnJpZGUgY2hhcnNldCBmb3IgcmVwbHkyLnR4dCwgcmVwbHkyLnhtbCwgYW5kIHJlcGx5
NC50eHQuCiskSFRUUFsidXJsIl0gPX4gIl4veG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlcGx5
Mi4odHh0fHhtbCkiIHsKKyAgbWltZXR5cGUuYXNzaWduID0gKAorICAgICIudHh0IiA9PiAidGV4
dC9wbGFpbjsgY2hhcnNldD13aW5kb3dzLTEyNTEiLAorICAgICIueG1sIiA9PiAidGV4dC94bWw7
IGNoYXJzZXQ9d2luZG93cy0xMjUxIgorICApCit9CiskSFRUUFsidXJsIl0gPX4gIl4veG1saHR0
cHJlcXVlc3QvcmVzb3VyY2VzL3JlcGx5NC50eHQiIHsKKyAgbWltZXR5cGUuYXNzaWduID0gKCAi
LnR4dCIgPT4gInRleHQvcGxhaW47IGNoYXJzZXQ9a29pOC1yIiApCit9CisKKyMgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9hcHBjYWNoZS93cm9uZy1jb250ZW50LXR5cGUuaHRtbCB1c2VzIGFuIGh0
YWNjZXNzCisjIHRvIG92ZXJyaWRlIG1pbWUgdHlwZSBmb3Igd3JvbmctY29udGVudC10eXBlLm1h
bmlmZXN0LgorJEhUVFBbInVybCJdID1+ICJeL2FwcGNhY2hlL3Jlc291cmNlcy93cm9uZy1jb250
ZW50LXR5cGUubWFuaWZlc3QiIHsKKyAgbWltZXR5cGUuYXNzaWduID0gKCAiLm1hbmlmZXN0IiA9
PiAidGV4dC9wbGFpbiIgKQorfQorCisjIEF1dG9nZW5lcmF0ZWQgdGVzdC1zcGVjaWZpYyBjb25m
aWcgZm9sbG93cy4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvcGF0aF91dGlscy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGF0aF91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45MWIxYjYyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wYXRoX3V0aWxzLnB5CkBAIC0wLDAgKzEs
Mzk1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIENocm9t
aXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJUaGlzIHBhY2th
Z2UgY29udGFpbnMgdXRpbGl0eSBtZXRob2RzIGZvciBtYW5pcHVsYXRpbmcgcGF0aHMgYW5kCitm
aWxlbmFtZXMgZm9yIHRlc3QgcmVzdWx0cyBhbmQgYmFzZWxpbmVzLiBJdCBhbHNvIGNvbnRhaW5z
IHdyYXBwZXJzCitvZiBhIGZldyByb3V0aW5lcyBpbiBwb3J0LyBzbyB0aGF0IHRoZSBwb3J0IHBh
Y2thZ2UgY2FuCitiZSBjb25zaWRlcmVkIGEgJ3Byb3RlY3RlZCcgcGFja2FnZSAtIGkuZS4sIHRo
aXMgZmlsZSBzaG91bGQgYmUKK3RoZSBvbmx5IGZpbGUgdGhhdCBldmVyIGluY2x1ZGVzIHBvcnQu
IFRoaXMgbGVhZHMgdG8KK3VzIGluY2x1ZGluZyBhIGZldyB0aGluZ3MgdGhhdCBkb24ndCByZWFs
bHkgaGF2ZSBhbnl0aGluZyB0byBkbworIHdpdGggcGF0aHMsIHVuZm9ydHVuYXRlbHkuIiIiCisK
K2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cworCitpbXBv
cnQgcG9ydAoraW1wb3J0IGNocm9taXVtX3dpbgoraW1wb3J0IGNocm9taXVtX21hYworaW1wb3J0
IGNocm9taXVtX2xpbnV4CisKKyMgQ2FjaGUgc29tZSB2YWx1ZXMgc28gd2UgZG9uJ3QgaGF2ZSB0
byByZWNhbGN1bGF0ZSB0aGVtLiBfYmFzZWRpciBpcworIyB1c2VkIGJ5IFBhdGhGcm9tQmFzZSgp
IGFuZCBjYWNoZXMgdGhlIGZ1bGwgKG5hdGl2ZSkgcGF0aCB0byB0aGUgdG9wCisjIG9mIHRoZSBz
b3VyY2UgdHJlZSAoL3NyYykuIF9iYXNlbGluZV9zZWFyY2hfcGF0aCBpcyB1c2VkIGJ5CisjIEV4
cGVjdGVkQmFzZWxpbmVzKCkgYW5kIGNhY2hlcyB0aGUgbGlzdCBvZiBuYXRpdmUgcGF0aHMgdG8g
c2VhcmNoCisjIGZvciBiYXNlbGluZSByZXN1bHRzLgorX2Jhc2VkaXIgPSBOb25lCitfYmFzZWxp
bmVfc2VhcmNoX3BhdGggPSBOb25lCisKKworY2xhc3MgUGF0aE5vdEZvdW5kKEV4Y2VwdGlvbik6
CisgICAgcGFzcworCisKK2RlZiBsYXlvdXRfdGVzdHNfZGlyKCk6CisgICAgIiIiUmV0dXJucyB0
aGUgZnVsbHktcXVhbGlmaWVkIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBp
bnB1dAorICAgIGRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgbGF5b3V0IHRlc3QuIiIiCisgICAgcmV0
dXJuIHBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMn
KQorCisKK2RlZiBjaHJvbWl1bV9iYXNlbGluZV9wYXRoKHBsYXRmb3JtPU5vbmUpOgorICAgICIi
IlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgZXhwZWN0
ZWQKKyAgICBiYXNlbGluZSByZXN1bHRzIGZyb20gY2hyb21pdW0gcG9ydHMuIElmIHxwbGF0Zm9y
bXwgaXMgTm9uZSwgdGhlCisgICAgY3VycmVudGx5IGV4ZWN1dGluZyBwbGF0Zm9ybSBpcyB1c2Vk
LgorCisgICAgTm90ZTogYWx0aG91Z2ggZGlyZWN0bHkgcmVmZXJlbmNpbmcgaW5kaXZpZHVhbCBw
b3J0LyogZmlsZXMgaXMKKyAgICB1c3VhbGx5IGRpc2NvdXJhZ2VkLCB3ZSBhbGxvdyBpdCBoZXJl
IHNvIHRoYXQgdGhlIHJlYmFzZWxpbmluZyB0b29sIGNhbgorICAgIHB1bGwgYmFzZWxpbmVzIGZv
ciBwbGF0Zm9ybXMgb3RoZXIgdGhhbiB0aGUgaG9zdCBwbGF0Zm9ybS4iIiIKKworICAgICMgTm9y
bWFsaXplIHRoZSBwbGF0Zm9ybSBzdHJpbmcuCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybV9uYW1l
KHBsYXRmb3JtKQorICAgIGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLW1hYycpOgor
ICAgICAgICByZXR1cm4gY2hyb21pdW1fbWFjLmJhc2VsaW5lX3BhdGgocGxhdGZvcm0pCisgICAg
ZWxpZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdjaHJvbWl1bS13aW4nKToKKyAgICAgICAgcmV0dXJu
IGNocm9taXVtX3dpbi5iYXNlbGluZV9wYXRoKHBsYXRmb3JtKQorICAgIGVsaWYgcGxhdGZvcm0u
c3RhcnRzd2l0aCgnY2hyb21pdW0tbGludXgnKToKKyAgICAgICAgcmV0dXJuIGNocm9taXVtX2xp
bnV4LmJhc2VsaW5lX3BhdGgocGxhdGZvcm0pCisKKyAgICByZXR1cm4gcG9ydC5iYXNlbGluZV9w
YXRoKCkKKworCitkZWYgd2Via2l0X2Jhc2VsaW5lX3BhdGgocGxhdGZvcm0pOgorICAgICIiIlJl
dHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgZXhwZWN0ZWQK
KyAgICBiYXNlbGluZSByZXN1bHRzIGZyb20gV2ViS2l0IHBvcnRzLiIiIgorICAgIHJldHVybiBw
YXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywgJ0xheW91dFRlc3RzJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJywgcGxhdGZvcm0pCisKKworZGVmIGJh
c2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtPU5vbmUpOgorICAgICIiIlJldHVybnMgdGhlIGxp
c3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBiYXNlbGluZXMvcmVzdWx0cyBmb3IgYQor
ICAgIGdpdmVuIHBsYXRmb3JtLCBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLiBQYXRocyBhcmUgcmVs
YXRpdmUgdG8gdGhlIHRvcCBvZgorICAgIHRoZSBzb3VyY2UgdHJlZS4gSWYgcGFyYW1ldGVyIHBs
YXRmb3JtIGlzIE5vbmUsIHJldHVybnMgdGhlIGxpc3QgZm9yIHRoZQorICAgIGN1cnJlbnQgcGxh
dGZvcm0gdGhhdCB0aGUgc2NyaXB0IGlzIHJ1bm5pbmcgb24uCisKKyAgICBOb3RlOiBhbHRob3Vn
aCBkaXJlY3RseSByZWZlcmVuY2luZyBpbmRpdmlkdWFsIHBvcnQvKiBmaWxlcyBpcworICAgIHVz
dWFsbHkgZGlzY291cmFnZWQsIHdlIGFsbG93IGl0IGhlcmUgc28gdGhhdCB0aGUgcmViYXNlbGlu
aW5nIHRvb2wgY2FuCisgICAgcHVsbCBiYXNlbGluZXMgZm9yIHBsYXRmb3JtcyBvdGhlciB0aGFu
IHRoZSBob3N0IHBsYXRmb3JtLiIiIgorCisgICAgIyBOb3JtYWxpemUgdGhlIHBsYXRmb3JtIG5h
bWUuCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybV9uYW1lKHBsYXRmb3JtKQorICAgIGlmIHBsYXRm
b3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLW1hYycpOgorICAgICAgICByZXR1cm4gY2hyb21pdW1f
bWFjLmJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtKQorICAgIGVsaWYgcGxhdGZvcm0uc3Rh
cnRzd2l0aCgnY2hyb21pdW0td2luJyk6CisgICAgICAgIHJldHVybiBjaHJvbWl1bV93aW4uYmFz
ZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm0pCisgICAgZWxpZiBwbGF0Zm9ybS5zdGFydHN3aXRo
KCdjaHJvbWl1bS1saW51eCcpOgorICAgICAgICByZXR1cm4gY2hyb21pdW1fbGludXguYmFzZWxp
bmVfc2VhcmNoX3BhdGgocGxhdGZvcm0pCisgICAgcmV0dXJuIHBvcnQuYmFzZWxpbmVfc2VhcmNo
X3BhdGgoKQorCisKK2RlZiBleHBlY3RlZF9iYXNlbGluZXMoZmlsZW5hbWUsIHN1ZmZpeCwgcGxh
dGZvcm09Tm9uZSwgYWxsX2Jhc2VsaW5lcz1GYWxzZSk6CisgICAgIiIiR2l2ZW4gYSB0ZXN0IG5h
bWUsIGZpbmRzIHdoZXJlIHRoZSBiYXNlbGluZSByZXN1bHRzIGFyZSBsb2NhdGVkLgorCisgICAg
QXJnczoKKyAgICAgICBmaWxlbmFtZTogYWJzb2x1dGUgZmlsZW5hbWUgdG8gdGVzdCBmaWxlCisg
ICAgICAgc3VmZml4OiBmaWxlIHN1ZmZpeCBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cywgaW5jbHVk
aW5nIGRvdDsgZS5nLiAnLnR4dCcKKyAgICAgICAgICAgb3IgJy5wbmcnLiAgVGhpcyBzaG91bGQg
bm90IGJlIE5vbmUsIGJ1dCBtYXkgYmUgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgIHBsYXRmb3Jt
OiBsYXlvdXQgdGVzdCBwbGF0Zm9ybTogJ3dpbicsICdsaW51eCcgb3IgJ21hYycuIERlZmF1bHRz
IHRvCisgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IHBsYXRmb3JtLgorICAgICAgIGFsbF9i
YXNlbGluZXM6IElmIFRydWUsIHJldHVybiBhbiBvcmRlcmVkIGxpc3Qgb2YgYWxsIGJhc2VsaW5l
IHBhdGhzCisgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBnaXZlbiBwbGF0Zm9ybS4gSWYg
RmFsc2UsIHJldHVybiBvbmx5IHRoZSBmaXJzdAorICAgICAgICAgICAgICAgICAgICAgIG9uZS4K
KyAgICBSZXR1cm5zCisgICAgICAgYSBsaXN0IG9mICggcGxhdGZvcm1fZGlyLCByZXN1bHRzX2Zp
bGVuYW1lICksIHdoZXJlCisgICAgICAgICBwbGF0Zm9ybV9kaXIgLSBhYnMgcGF0aCB0byB0aGUg
dG9wIG9mIHRoZSByZXN1bHRzIHRyZWUgKG9yIHRlc3QgdHJlZSkKKyAgICAgICAgIHJlc3VsdHNf
ZmlsZW5hbWUgLSByZWxhdGl2ZSBwYXRoIGZyb20gdG9wIG9mIHRyZWUgdG8gdGhlIHJlc3VsdHMg
ZmlsZQorICAgICAgICAgICAob3MucGF0aC5qb2luIG9mIHRoZSB0d28gZ2l2ZXMgeW91IHRoZSBm
dWxsIHBhdGggdG8gdGhlIGZpbGUsCisgICAgICAgICAgICB1bmxlc3MgTm9uZSB3YXMgcmV0dXJu
ZWQuKQorICAgICAgUmV0dXJuIHZhbHVlcyB3aWxsIGJlIGluIHRoZSBmb3JtYXQgYXBwcm9wcmlh
dGUgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtCisgICAgICAoZS5nLiwgIlxcIiBmb3IgcGF0aCBz
ZXBhcmF0b3JzIG9uIFdpbmRvd3MpLiBJZiB0aGUgcmVzdWx0cyBmaWxlIGlzIG5vdAorICAgICAg
Zm91bmQsIHRoZW4gTm9uZSB3aWxsIGJlIHJldHVybmVkIGZvciB0aGUgZGlyZWN0b3J5LCBidXQg
dGhlIGV4cGVjdGVkCisgICAgICByZWxhdGl2ZSBwYXRobmFtZSB3aWxsIHN0aWxsIGJlIHJldHVy
bmVkLgorICAgICIiIgorICAgIGdsb2JhbCBfYmFzZWxpbmVfc2VhcmNoX3BhdGgKKyAgICBnbG9i
YWwgX3NlYXJjaF9wYXRoX3BsYXRmb3JtCisgICAgdGVzdG5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0
KHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKVswXQorCisgICAgYmFzZWxpbmVfZmls
ZW5hbWUgPSB0ZXN0bmFtZSArICctZXhwZWN0ZWQnICsgc3VmZml4CisKKyAgICBpZiAoX2Jhc2Vs
aW5lX3NlYXJjaF9wYXRoIGlzIE5vbmUpIG9yIChfc2VhcmNoX3BhdGhfcGxhdGZvcm0gIT0gcGxh
dGZvcm0pOgorICAgICAgICBfYmFzZWxpbmVfc2VhcmNoX3BhdGggPSBiYXNlbGluZV9zZWFyY2hf
cGF0aChwbGF0Zm9ybSkKKyAgICAgICAgX3NlYXJjaF9wYXRoX3BsYXRmb3JtID0gcGxhdGZvcm0K
KworICAgIGJhc2VsaW5lcyA9IFtdCisgICAgZm9yIHBsYXRmb3JtX2RpciBpbiBfYmFzZWxpbmVf
c2VhcmNoX3BhdGg6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwbGF0
Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSk6CisgICAgICAgICAgICBiYXNlbGluZXMuYXBw
ZW5kKChwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSkKKworICAgICAgICBpZiBub3Qg
YWxsX2Jhc2VsaW5lcyBhbmQgYmFzZWxpbmVzOgorICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5l
cworCisgICAgIyBJZiBpdCB3YXNuJ3QgZm91bmQgaW4gYSBwbGF0Zm9ybSBkaXJlY3RvcnksIHJl
dHVybiB0aGUgZXhwZWN0ZWQgcmVzdWx0CisgICAgIyBpbiB0aGUgdGVzdCBkaXJlY3RvcnksIGV2
ZW4gaWYgbm8gc3VjaCBmaWxlIGFjdHVhbGx5IGV4aXN0cy4KKyAgICBwbGF0Zm9ybV9kaXIgPSBs
YXlvdXRfdGVzdHNfZGlyKCkKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGxh
dGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpOgorICAgICAgICBiYXNlbGluZXMuYXBwZW5k
KChwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSkKKworICAgIGlmIGJhc2VsaW5lczoK
KyAgICAgICAgcmV0dXJuIGJhc2VsaW5lcworCisgICAgcmV0dXJuIFsoTm9uZSwgYmFzZWxpbmVf
ZmlsZW5hbWUpXQorCisKK2RlZiBleHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwgc3VmZml4KToK
KyAgICAiIiJHaXZlbiBhIHRlc3QgbmFtZSwgcmV0dXJucyBhbiBhYnNvbHV0ZSBwYXRoIHRvIGl0
cyBleHBlY3RlZCByZXN1bHRzLgorCisgICAgSWYgbm8gZXhwZWN0ZWQgcmVzdWx0cyBhcmUgZm91
bmQgaW4gYW55IG9mIHRoZSBzZWFyY2hlZCBkaXJlY3RvcmllcywgdGhlCisgICAgZGlyZWN0b3J5
IGluIHdoaWNoIHRoZSB0ZXN0IGl0c2VsZiBpcyBsb2NhdGVkIHdpbGwgYmUgcmV0dXJuZWQuIFRo
ZSByZXR1cm4KKyAgICB2YWx1ZSBpcyBpbiB0aGUgZm9ybWF0IGFwcHJvcHJpYXRlIGZvciB0aGUg
cGxhdGZvcm0gKGUuZy4sICJcXCIgZm9yCisgICAgcGF0aCBzZXBhcmF0b3JzIG9uIHdpbmRvd3Mp
LgorCisgICAgQXJnczoKKyAgICAgICBmaWxlbmFtZTogYWJzb2x1dGUgZmlsZW5hbWUgdG8gdGVz
dCBmaWxlCisgICAgICAgc3VmZml4OiBmaWxlIHN1ZmZpeCBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0
cywgaW5jbHVkaW5nIGRvdDsgZS5nLiAnLnR4dCcKKyAgICAgICAgICAgb3IgJy5wbmcnLiAgVGhp
cyBzaG91bGQgbm90IGJlIE5vbmUsIGJ1dCBtYXkgYmUgYW4gZW1wdHkgc3RyaW5nLgorICAgICAg
IHBsYXRmb3JtOiB0aGUgbW9zdC1zcGVjaWZpYyBkaXJlY3RvcnkgbmFtZSB0byB1c2UgdG8gYnVp
bGQgdGhlCisgICAgICAgICAgIHNlYXJjaCBsaXN0IG9mIGRpcmVjdG9yaWVzLCBlLmcuLCAnY2hy
b21pdW0td2luJywgb3IKKyAgICAgICAgICAgJ2Nocm9taXVtLW1hYy1sZW9wYXJkJyAod2UgZm9s
bG93IHRoZSBXZWJLaXQgZm9ybWF0KQorICAgICIiIgorICAgIHBsYXRmb3JtX2RpciwgYmFzZWxp
bmVfZmlsZW5hbWUgPSBleHBlY3RlZF9iYXNlbGluZXMoZmlsZW5hbWUsIHN1ZmZpeClbMF0KKyAg
ICBpZiBwbGF0Zm9ybV9kaXI6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocGxhdGZvcm1f
ZGlyLCBiYXNlbGluZV9maWxlbmFtZSkKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGxheW91dF90
ZXN0c19kaXIoKSwgYmFzZWxpbmVfZmlsZW5hbWUpCisKKworZGVmIHJlbGF0aXZlX3Rlc3RfZmls
ZW5hbWUoZmlsZW5hbWUpOgorICAgICIiIlByb3ZpZGUgdGhlIGZpbGVuYW1lIG9mIHRoZSB0ZXN0
IHJlbGF0aXZlIHRvIHRoZSBsYXlvdXQgdGVzdHMKKyAgICBkaXJlY3RvcnkgYXMgYSB1bml4IHN0
eWxlIHBhdGggKGEvYi9jKS4iIiIKKyAgICByZXR1cm4gX3dpbl9wYXRoX3RvX3VuaXgoZmlsZW5h
bWVbbGVuKGxheW91dF90ZXN0c19kaXIoKSkgKyAxOl0pCisKKworZGVmIF93aW5fcGF0aF90b191
bml4KHBhdGgpOgorICAgICIiIkNvbnZlcnQgYSB3aW5kb3dzIHBhdGggdG8gdXNlIHVuaXgtc3R5
bGUgcGF0aCBzZXBhcmF0b3JzIChhL2IvYykuIiIiCisgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgn
XFwnLCAnLycpCisKKyMKKyMgUm91dGluZXMgdGhhdCBhcmUgYXJndWFibHkgcGxhdGZvcm0tc3Bl
Y2lmaWMgYnV0IGhhdmUgYmVlbiBtYWRlCisjIGdlbmVyaWMgZm9yIG5vdworIworCisKK2RlZiBm
aWxlbmFtZV90b191cmkoZnVsbF9wYXRoKToKKyAgICAiIiJDb252ZXJ0IGEgdGVzdCBmaWxlIHRv
IGEgVVJJLiIiIgorICAgIExBWU9VVFRFU1RfSFRUUF9ESVIgPSAiaHR0cC90ZXN0cy8iCisgICAg
TEFZT1VUVEVTVF9XRUJTT0NLRVRfRElSID0gIndlYnNvY2tldC90ZXN0cy8iCisKKyAgICByZWxh
dGl2ZV9wYXRoID0gX3dpbl9wYXRoX3RvX3VuaXgocmVsYXRpdmVfdGVzdF9maWxlbmFtZShmdWxs
X3BhdGgpKQorICAgIHBvcnQgPSBOb25lCisgICAgdXNlX3NzbCA9IEZhbHNlCisKKyAgICBpZiBy
ZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoTEFZT1VUVEVTVF9IVFRQX0RJUik6CisgICAgICAgICMg
aHR0cC90ZXN0cy8gcnVuIG9mZiBwb3J0IDgwMDAgYW5kIHNzbC8gb2ZmIDg0NDMKKyAgICAgICAg
cmVsYXRpdmVfcGF0aCA9IHJlbGF0aXZlX3BhdGhbbGVuKExBWU9VVFRFU1RfSFRUUF9ESVIpOl0K
KyAgICAgICAgcG9ydCA9IDgwMDAKKyAgICBlbGlmIHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0aChM
QVlPVVRURVNUX1dFQlNPQ0tFVF9ESVIpOgorICAgICAgICAjIHdlYnNvY2tldC90ZXN0cy8gcnVu
IG9mZiBwb3J0IDg4ODAgYW5kIDkzMjMKKyAgICAgICAgIyBOb3RlOiB0aGUgcm9vdCBpcyAvLCBu
b3Qgd2Vic29ja2V0L3Rlc3RzLworICAgICAgICBwb3J0ID0gODg4MAorCisgICAgIyBNYWtlIGh0
dHAvdGVzdHMvbG9jYWwgcnVuIGFzIGxvY2FsIGZpbGVzLiBUaGlzIGlzIHRvIG1pbWljIHRoZQor
ICAgICMgbG9naWMgaW4gcnVuLXdlYmtpdC10ZXN0cy4KKyAgICAjIFRPRE8oamlhbmxpKTogQ29u
c2lkZXIgZXh0ZW5kaW5nIHRoaXMgdG8gIm1lZGlhLyIuCisgICAgaWYgcG9ydCBhbmQgbm90IHJl
bGF0aXZlX3BhdGguc3RhcnRzd2l0aCgibG9jYWwvIik6CisgICAgICAgIGlmIHJlbGF0aXZlX3Bh
dGguc3RhcnRzd2l0aCgic3NsLyIpOgorICAgICAgICAgICAgcG9ydCArPSA0NDMKKyAgICAgICAg
ICAgIHByb3RvY29sID0gImh0dHBzIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvdG9j
b2wgPSAiaHR0cCIKKyAgICAgICAgcmV0dXJuICIlczovLzEyNy4wLjAuMToldS8lcyIgJSAocHJv
dG9jb2wsIHBvcnQsIHJlbGF0aXZlX3BhdGgpCisKKyAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdj
eWd3aW4nLCAnd2luMzInKToKKyAgICAgICAgcmV0dXJuICJmaWxlOi8vLyIgKyBnZXRfYWJzb2x1
dGVfcGF0aChmdWxsX3BhdGgpCisgICAgcmV0dXJuICJmaWxlOi8vIiArIGdldF9hYnNvbHV0ZV9w
YXRoKGZ1bGxfcGF0aCkKKworCitkZWYgZ2V0X2Fic29sdXRlX3BhdGgocGF0aCk6CisgICAgIiIi
UmV0dXJucyBhbiBhYnNvbHV0ZSBVTklYIHBhdGguIiIiCisgICAgcmV0dXJuIF93aW5fcGF0aF90
b191bml4KG9zLnBhdGguYWJzcGF0aChwYXRoKSkKKworCitkZWYgbWF5YmVfbWFrZV9kaXJlY3Rv
cnkoKnBhdGgpOgorICAgICIiIkNyZWF0ZXMgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgaWYgaXQg
ZG9lc24ndCBhbHJlYWR5IGV4aXN0LiIiIgorICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMo
b3MucGF0aC5qb2luKCpwYXRoKSkKKyAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgaWYg
ZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICByYWlzZQorCisKK2RlZiBwYXRo
X2Zyb21fYmFzZSgqY29tcHMpOgorICAgICIiIlJldHVybnMgYW4gYWJzb2x1dGUgZmlsZW5hbWUg
ZnJvbSBhIHNldCBvZiBjb21wb25lbnRzIHNwZWNpZmllZAorICAgIHJlbGF0aXZlIHRvIHRoZSB0
b3Agb2YgdGhlIHNvdXJjZSB0cmVlLiBJZiB0aGUgcGF0aCBkb2VzIG5vdCBleGlzdCwKKyAgICB0
aGUgZXhjZXB0aW9uIFBhdGhOb3RGb3VuZCBpcyByYWlzZWQuIiIiCisgICAgZ2xvYmFsIF9iYXNl
ZGlyCisgICAgaWYgX2Jhc2VkaXIgPT0gTm9uZToKKyAgICAgICAgIyBXZSBjb21wdXRlIHRoZSB0
b3Agb2YgdGhlIHNvdXJjZSB0cmVlIGJ5IGZpbmRpbmcgdGhlIGFic29sdXRlCisgICAgICAgICMg
cGF0aCBvZiB0aGlzIHNvdXJjZSBmaWxlLCBhbmQgdGhlbiBjbGltYmluZyB1cCB0aHJlZSBkaXJl
Y3RvcmllcworICAgICAgICAjIGFzIGdpdmVuIGluIHN1YnBhdGguIElmIHdlIG1vdmUgdGhpcyBm
aWxlLCBzdWJwYXRoIG5lZWRzIHRvIGJlCisgICAgICAgICMgdXBkYXRlZC4KKyAgICAgICAgcGF0
aCA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKKyAgICAgICAgc3VicGF0aCA9IG9zLnBhdGgu
am9pbigndGhpcmRfcGFydHknLCAnV2ViS2l0JykKKyAgICAgICAgX2Jhc2VkaXIgPSBwYXRoWzpw
YXRoLmluZGV4KHN1YnBhdGgpXQorICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oX2Jhc2VkaXIsICpj
b21wcykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgIHJhaXNlIFBh
dGhOb3RGb3VuZCgnY291bGQgbm90IGZpbmQgJXMnICUgKHBhdGgpKQorICAgIHJldHVybiBwYXRo
CisKKworZGVmIHJlbW92ZV9kaXJlY3RvcnkoKnBhdGgpOgorICAgICIiIlJlY3Vyc2l2ZWx5IHJl
bW92ZXMgYSBkaXJlY3RvcnksIGV2ZW4gaWYgaXQncyBtYXJrZWQgcmVhZC1vbmx5LgorCisgICAg
UmVtb3ZlIHRoZSBkaXJlY3RvcnkgbG9jYXRlZCBhdCAqcGF0aCwgaWYgaXQgZXhpc3RzLgorCisg
ICAgc2h1dGlsLnJtdHJlZSgpIGRvZXNuJ3Qgd29yayBvbiBXaW5kb3dzIGlmIGFueSBvZiB0aGUg
ZmlsZXMgb3IgZGlyZWN0b3JpZXMKKyAgICBhcmUgcmVhZC1vbmx5LCB3aGljaCBzdm4gcmVwb3Np
dG9yaWVzIGFuZCBzb21lIC5zdm4gZmlsZXMgYXJlLiAgV2UgbmVlZCB0bworICAgIGJlIGFibGUg
dG8gZm9yY2UgdGhlIGZpbGVzIHRvIGJlIHdyaXRhYmxlIChpLmUuLCBkZWxldGFibGUpIGFzIHdl
IHRyYXZlcnNlCisgICAgdGhlIHRyZWUuCisKKyAgICBFdmVuIHdpdGggYWxsIHRoaXMsIFdpbmRv
d3Mgc3RpbGwgc29tZXRpbWVzIGZhaWxzIHRvIGRlbGV0ZSBhIGZpbGUsIGNpdGluZworICAgIGEg
cGVybWlzc2lvbiBlcnJvciAobWF5YmUgc29tZXRoaW5nIHRvIGRvIHdpdGggYW50aXZpcnVzIHNj
YW5zIG9yIGRpc2sKKyAgICBpbmRleGluZykuICBUaGUgYmVzdCBzdWdnZXN0aW9uIGFueSBvZiB0
aGUgdXNlciBmb3J1bXMgaGFkIHdhcyB0byB3YWl0IGEKKyAgICBiaXQgYW5kIHRyeSBhZ2Fpbiwg
c28gd2UgZG8gdGhhdCB0b28uICBJdCdzIGhhbmQtd2F2aW5nLCBidXQgc29tZXRpbWVzIGl0Cisg
ICAgd29ya3MuIDovCisgICAgIiIiCisgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKCpwYXRo
KQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlX3BhdGgpOgorICAgICAgICByZXR1cm4K
KworICAgIHdpbjMyID0gRmFsc2UKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAg
ICAgICAgd2luMzIgPSBUcnVlCisgICAgICAgICMgU29tZSBwZW9wbGUgZG9uJ3QgaGF2ZSB0aGUg
QVBJcyBpbnN0YWxsZWQuIEluIHRoYXQgY2FzZSB3ZSdsbCBkbworICAgICAgICAjIHdpdGhvdXQu
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpbjMyYXBpID0gX19pbXBvcnRfXygnd2luMzJh
cGknKQorICAgICAgICAgICAgd2luMzJjb24gPSBfX2ltcG9ydF9fKCd3aW4zMmNvbicpCisgICAg
ICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHdpbjMyID0gRmFsc2UKKworICAg
ICAgICBkZWYgcmVtb3ZlX3dpdGhfcmV0cnkocm1mdW5jLCBwYXRoKToKKyAgICAgICAgICAgIG9z
LmNobW9kKHBhdGgsIHN0YXQuU19JV1JJVEUpCisgICAgICAgICAgICBpZiB3aW4zMjoKKyAgICAg
ICAgICAgICAgICB3aW4zMmFwaS5TZXRGaWxlQXR0cmlidXRlcyhwYXRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbjMyY29uLkZJTEVfQVRUUklCVVRFX05P
Uk1BTCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gcm1mdW5jKHBh
dGgpCisgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciwgZToKKyAgICAgICAgICAg
ICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVBQ0NFUzoKKyAgICAgICAgICAgICAgICAgICAgcmFp
c2UKKyAgICAgICAgICAgICAgICBwcmludCAnRmFpbGVkIHRvIGRlbGV0ZSAlczogdHJ5aW5nIGFn
YWluJyAlIHJlcHIocGF0aCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcm1mdW5jKHBhdGgpCisgICAgZWxzZToKKworICAgICAgICBkZWYg
cmVtb3ZlX3dpdGhfcmV0cnkocm1mdW5jLCBwYXRoKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGgu
aXNsaW5rKHBhdGgpOgorICAgICAgICAgICAgICAgIHJldHVybiBvcy5yZW1vdmUocGF0aCkKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJtZnVuYyhwYXRoKQorCisg
ICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZmlsZV9wYXRoLCB0b3Bkb3duPUZh
bHNlKToKKyAgICAgICAgIyBGb3IgUE9TSVg6ICBtYWtpbmcgdGhlIGRpcmVjdG9yeSB3cml0YWJs
ZSBndWFyYW50ZWVzIHJlbW92YWJpbGl0eS4KKyAgICAgICAgIyBXaW5kb3dzIHdpbGwgaWdub3Jl
IHRoZSBub24tcmVhZC1vbmx5IGJpdHMgaW4gdGhlIGNobW9kIHZhbHVlLgorICAgICAgICBvcy5j
aG1vZChyb290LCAwNzcwKQorICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAg
IHJlbW92ZV93aXRoX3JldHJ5KG9zLnJlbW92ZSwgb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQor
ICAgICAgICBmb3IgbmFtZSBpbiBkaXJzOgorICAgICAgICAgICAgcmVtb3ZlX3dpdGhfcmV0cnko
b3Mucm1kaXIsIG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKKworICAgIHJlbW92ZV93aXRoX3Jl
dHJ5KG9zLnJtZGlyLCBmaWxlX3BhdGgpCisKKyMKKyMgV3JhcHBlcnMgYXJvdW5kIHBvcnQvCisj
CisKKworZGVmIHBsYXRmb3JtX25hbWUocGxhdGZvcm09Tm9uZSk6CisgICAgIiIiUmV0dXJucyB0
aGUgYXBwcm9wcmlhdGUgY2hyb21pdW0gcGxhdGZvcm0gbmFtZSBmb3IgfHBsYXRmb3JtfC4gSWYK
KyAgICAgICB8cGxhdGZvcm18IGlzIE5vbmUsIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNocm9t
aXVtIHBsYXRmb3JtIG9uIHRoZQorICAgICAgIGN1cnJlbnRseSBydW5uaW5nIHN5c3RlbS4gSWYg
fHBsYXRmb3JtfCBpcyBvZiB0aGUgZm9ybSAnY2hyb21pdW0tKicsCisgICAgICAgaXQgaXMgcmV0
dXJuZWQgdW5jaGFuZ2VkLCBvdGhlcndpc2UgJ2Nocm9taXVtLScgaXMgcHJlcGVuZGVkLiIiIgor
ICAgIGlmIHBsYXRmb3JtID09IE5vbmU6CisgICAgICAgIHJldHVybiBwb3J0LnBsYXRmb3JtX25h
bWUoKQorICAgIGlmIG5vdCBwbGF0Zm9ybS5zdGFydHN3aXRoKCdjaHJvbWl1bS0nKToKKyAgICAg
ICAgcGxhdGZvcm0gPSAiY2hyb21pdW0tIiArIHBsYXRmb3JtCisgICAgcmV0dXJuIHBsYXRmb3Jt
CisKKworZGVmIHBsYXRmb3JtX3ZlcnNpb24oKToKKyAgICByZXR1cm4gcG9ydC5wbGF0Zm9ybV92
ZXJzaW9uKCkKKworCitkZWYgbGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCk6CisgICAgcmV0dXJu
IHBvcnQubGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCkKKworCitkZWYgbGlnaHR0cGRfbW9kdWxl
X3BhdGgoKToKKyAgICByZXR1cm4gcG9ydC5saWdodHRwZF9tb2R1bGVfcGF0aCgpCisKKworZGVm
IGxpZ2h0dHBkX3BocF9wYXRoKCk6CisgICAgcmV0dXJuIHBvcnQubGlnaHR0cGRfcGhwX3BhdGgo
KQorCisKK2RlZiB3ZGlmZl9wYXRoKCk6CisgICAgcmV0dXJuIHBvcnQud2RpZmZfcGF0aCgpCisK
KworZGVmIHRlc3Rfc2hlbGxfcGF0aCh0YXJnZXQpOgorICAgIHJldHVybiBwb3J0LnRlc3Rfc2hl
bGxfcGF0aCh0YXJnZXQpCisKKworZGVmIGltYWdlX2RpZmZfcGF0aCh0YXJnZXQpOgorICAgIHJl
dHVybiBwb3J0LmltYWdlX2RpZmZfcGF0aCh0YXJnZXQpCisKKworZGVmIGxheW91dF90ZXN0X2hl
bHBlcl9wYXRoKHRhcmdldCk6CisgICAgcmV0dXJuIHBvcnQubGF5b3V0X3Rlc3RfaGVscGVyX3Bh
dGgodGFyZ2V0KQorCisKK2RlZiBmdXp6eV9tYXRjaF9wYXRoKCk6CisgICAgcmV0dXJuIHBvcnQu
ZnV6enlfbWF0Y2hfcGF0aCgpCisKKworZGVmIHNodXRfZG93bl9odHRwX3NlcnZlcihzZXJ2ZXJf
cGlkKToKKyAgICByZXR1cm4gcG9ydC5zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2VydmVyX3BpZCkK
KworCitkZWYga2lsbF9hbGxfdGVzdF9zaGVsbHMoKToKKyAgICBwb3J0LmtpbGxfYWxsX3Rlc3Rf
c2hlbGxzKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmM3ZTZmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVy
LnB5CkBAIC0wLDAgKzEsMzE2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisiIiJBIGNsYXNzIHRvIGhlbHAgc3RhcnQvc3RvcCB0aGUgUHlXZWJTb2NrZXQgc2VydmVyIHVz
ZWQgYnkgbGF5b3V0IHRlc3RzLiIiIgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFy
c2UKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1w
ZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCB1cmxsaWIKKworaW1wb3J0IHBhdGhfdXRpbHMKK2lt
cG9ydCBwb3J0CitpbXBvcnQgaHR0cF9zZXJ2ZXIKKworX1dTX0xPR19QUkVGSVggPSAncHl3ZWJz
b2NrZXQud3MubG9nLScKK19XU1NfTE9HX1BSRUZJWCA9ICdweXdlYnNvY2tldC53c3MubG9nLScK
KworX0RFRkFVTFRfV1NfUE9SVCA9IDg4ODAKK19ERUZBVUxUX1dTU19QT1JUID0gOTMyMworCisK
K2RlZiB1cmxfaXNfYWxpdmUodXJsKToKKyAgIiIiQ2hlY2tzIHRvIHNlZSBpZiB3ZSBnZXQgYW4g
aHR0cCByZXNwb25zZSBmcm9tIHx1cmx8LgorICBXZSBwb2xsIHRoZSB1cmwgNSB0aW1lcyB3aXRo
IGEgMSBzZWNvbmQgZGVsYXkuICBJZiB3ZSBkb24ndAorICBnZXQgYSByZXBseSBpbiB0aGF0IHRp
bWUsIHdlIGdpdmUgdXAgYW5kIGFzc3VtZSB0aGUgaHR0cGQKKyAgZGlkbid0IHN0YXJ0IHByb3Bl
cmx5LgorCisgIEFyZ3M6CisgICAgdXJsOiBUaGUgVVJMIHRvIGNoZWNrLgorICBSZXR1cm46Cisg
ICAgVHJ1ZSBpZiB0aGUgdXJsIGlzIGFsaXZlLgorICAiIiIKKyAgd2FpdF90aW1lID0gNQorICB3
aGlsZSB3YWl0X3RpbWUgPiAwOgorICAgIHRyeToKKyAgICAgIHJlc3BvbnNlID0gdXJsbGliLnVy
bG9wZW4odXJsKQorICAgICAgIyBTZXJ2ZXIgaXMgdXAgYW5kIHJlc3BvbmRpbmcuCisgICAgICBy
ZXR1cm4gVHJ1ZQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgcGFzcworICAgIHdhaXRfdGlt
ZSAtPSAxCisgICAgIyBXYWl0IGEgc2Vjb25kIGFuZCB0cnkgYWdhaW4uCisgICAgdGltZS5zbGVl
cCgxKQorCisgIHJldHVybiBGYWxzZQorCisKK2RlZiByZW1vdmVfbG9nX2ZpbGVzKGZvbGRlciwg
c3RhcnRzX3dpdGgpOgorICAgIGZpbGVzID0gb3MubGlzdGRpcihmb2xkZXIpCisgICAgZm9yIGZp
bGUgaW4gZmlsZXM6CisgICAgICAgIGlmIGZpbGUuc3RhcnRzd2l0aChzdGFydHNfd2l0aCk6Cisg
ICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oZm9sZGVyLCBmaWxlKQorICAgICAg
ICAgICAgb3MucmVtb3ZlKGZ1bGxfcGF0aCkKKworCitjbGFzcyBQeVdlYlNvY2tldE5vdFN0YXJ0
ZWQoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgUHlXZWJTb2NrZXROb3RGb3VuZChF
eGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBQeVdlYlNvY2tldChodHRwX3NlcnZlci5M
aWdodHRwZCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0X2RpciwgcG9ydD1fREVG
QVVMVF9XU19QT1JULAorICAgICAgICAgICAgICAgICByb290PU5vbmUsCisgICAgICAgICAgICAg
ICAgIHVzZV90bHM9RmFsc2UsCisgICAgICAgICAgICAgICAgIHByaXZhdGVfa2V5PWh0dHBfc2Vy
dmVyLkxpZ2h0dHBkLl9wZW1fZmlsZSwKKyAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGU9aHR0
cF9zZXJ2ZXIuTGlnaHR0cGQuX3BlbV9maWxlLAorICAgICAgICAgICAgICAgICByZWdpc3Rlcl9j
eWd3aW49Tm9uZSwKKyAgICAgICAgICAgICAgICAgcGlkZmlsZT1Ob25lKToKKyAgICAgICAgIiIi
QXJnczoKKyAgICAgICAgICBvdXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5
b3V0IHRlc3QgcmVzdWx0IGRpcmVjdG9yeQorICAgICAgICAiIiIKKyAgICAgICAgaHR0cF9zZXJ2
ZXIuTGlnaHR0cGQuX19pbml0X18oc2VsZiwgb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG9ydD1wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByb290PXJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZ2lzdGVyX2N5Z3dpbj1yZWdpc3Rlcl9jeWd3aW4pCisgICAgICAgIHNlbGYuX291
dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisgICAg
ICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CisgICAgICAg
IHNlbGYuX3VzZV90bHMgPSB1c2VfdGxzCisgICAgICAgIHNlbGYuX3ByaXZhdGVfa2V5ID0gcHJp
dmF0ZV9rZXkKKyAgICAgICAgc2VsZi5fY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZQorICAgICAg
ICBpZiBzZWxmLl9wb3J0OgorICAgICAgICAgICAgc2VsZi5fcG9ydCA9IGludChzZWxmLl9wb3J0
KQorICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgorICAgICAgICAgICAgc2VsZi5fc2VydmVyX25h
bWUgPSAnUHlXZWJTb2NrZXQoU2VjdXJlKScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuX3NlcnZlcl9uYW1lID0gJ1B5V2ViU29ja2V0JworICAgICAgICBzZWxmLl9waWRmaWxlID0g
cGlkZmlsZQorICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKKworICAgICAgICAjIFdlYmtpdCB0
ZXN0cworICAgICAgICBpZiBzZWxmLl9yb290OgorICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rl
c3RzID0gb3MucGF0aC5hYnNwYXRoKHNlbGYuX3Jvb3QpCisgICAgICAgICAgICBzZWxmLl93ZWJf
c29ja2V0X3Rlc3RzID0gb3MucGF0aC5hYnNwYXRoKAorICAgICAgICAgICAgICAgIG9zLnBhdGgu
am9pbihzZWxmLl9yb290LCAnd2Vic29ja2V0JywgJ3Rlc3RzJykpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fd2ViX3NvY2tldF90ZXN0cyA9
IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoCisgICAgICAgICAgICAgICAgICAgICd0aGlyZF9w
YXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMnLCAnd2Vic29ja2V0JywKKyAgICAgICAgICAg
ICAgICAgICAgJ3Rlc3RzJykKKyAgICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHMgPSBw
YXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKAorICAgICAgICAgICAgICAgICAgICAndGhpcmRfcGFy
dHknLCAnV2ViS2l0JywgJ0xheW91dFRlc3RzJykKKyAgICAgICAgICAgIGV4Y2VwdCBwYXRoX3V0
aWxzLlBhdGhOb3RGb3VuZDoKKyAgICAgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0X3Rlc3Rz
ID0gTm9uZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd2Vi
X3NvY2tldF90ZXN0czoKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnTm8gbmVlZCB0byBzdGFy
dCAlcyBzZXJ2ZXIuJyAlIHNlbGYuX3NlcnZlcl9uYW1lKQorICAgICAgICAgICAgcmV0dXJuCisg
ICAgICAgIGlmIHNlbGYuaXNfcnVubmluZygpOgorICAgICAgICAgICAgcmFpc2UgUHlXZWJTb2Nr
ZXROb3RTdGFydGVkKCclcyBpcyBhbHJlYWR5IHJ1bm5pbmcuJyAlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VydmVyX25hbWUpCisKKyAgICAgICAgdGlt
ZV9zdHIgPSB0aW1lLnN0cmZ0aW1lKCclZCViJVktJUglTSVTJykKKyAgICAgICAgaWYgc2VsZi5f
dXNlX3RsczoKKyAgICAgICAgICAgIGxvZ19wcmVmaXggPSBfV1NTX0xPR19QUkVGSVgKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGxvZ19wcmVmaXggPSBfV1NfTE9HX1BSRUZJWAorICAgICAg
ICBsb2dfZmlsZV9uYW1lID0gbG9nX3ByZWZpeCArIHRpbWVfc3RyCisKKyAgICAgICAgIyBSZW1v
dmUgb2xkIGxvZyBmaWxlcy4gV2Ugb25seSBuZWVkIHRvIGtlZXAgdGhlIGxhc3Qgb25lcy4KKyAg
ICAgICAgcmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCBsb2dfcHJlZml4KQorCisg
ICAgICAgIGVycm9yX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBsb2dfZmls
ZV9uYW1lICsgIi1lcnIudHh0IikKKworICAgICAgICBvdXRwdXRfbG9nID0gb3MucGF0aC5qb2lu
KHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxlX25hbWUgKyAiLW91dC50eHQiKQorICAgICAgICBz
ZWxmLl93c291dCA9IG9wZW4ob3V0cHV0X2xvZywgInciKQorCisgICAgICAgIHB5dGhvbl9pbnRl
cnAgPSBzeXMuZXhlY3V0YWJsZQorICAgICAgICBweXdlYnNvY2tldF9iYXNlID0gcGF0aF91dGls
cy5wYXRoX2Zyb21fYmFzZSgKKyAgICAgICAgICAgICd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAn
V2ViS2l0VG9vbHMnLCAncHl3ZWJzb2NrZXQnKQorICAgICAgICBweXdlYnNvY2tldF9zY3JpcHQg
PSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKAorICAgICAgICAgICAgJ3RoaXJkX3BhcnR5Jywg
J1dlYktpdCcsICdXZWJLaXRUb29scycsICdweXdlYnNvY2tldCcsCisgICAgICAgICAgICAnbW9k
X3B5d2Vic29ja2V0JywgJ3N0YW5kYWxvbmUucHknKQorICAgICAgICBzdGFydF9jbWQgPSBbCisg
ICAgICAgICAgICBweXRob25faW50ZXJwLCBweXdlYnNvY2tldF9zY3JpcHQsCisgICAgICAgICAg
ICAnLXAnLCBzdHIoc2VsZi5fcG9ydCksCisgICAgICAgICAgICAnLWQnLCBzZWxmLl9sYXlvdXRf
dGVzdHMsCisgICAgICAgICAgICAnLXMnLCBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzLAorICAgICAg
ICAgICAgJy1sJywgZXJyb3JfbG9nLAorICAgICAgICBdCisKKyAgICAgICAgaGFuZGxlcl9tYXBf
ZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLl93ZWJfc29ja2V0X3Rlc3RzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYW5kbGVyX21hcC50eHQnKQorICAgICAgICBp
ZiBvcy5wYXRoLmV4aXN0cyhoYW5kbGVyX21hcF9maWxlKToKKyAgICAgICAgICAgIGxvZ2dpbmcu
ZGVidWcoJ1VzaW5nIGhhbmRsZXJfbWFwX2ZpbGU6ICVzJyAlIGhhbmRsZXJfbWFwX2ZpbGUpCisg
ICAgICAgICAgICBzdGFydF9jbWQuYXBwZW5kKCctbScpCisgICAgICAgICAgICBzdGFydF9jbWQu
YXBwZW5kKGhhbmRsZXJfbWFwX2ZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dn
aW5nLndhcm5pbmcoJ05vIGhhbmRsZXJfbWFwX2ZpbGUgZm91bmQnKQorCisgICAgICAgIGlmIHNl
bGYuX3VzZV90bHM6CisgICAgICAgICAgICBzdGFydF9jbWQuZXh0ZW5kKFsnLXQnLCAnLWsnLCBz
ZWxmLl9wcml2YXRlX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYycsIHNl
bGYuX2NlcnRpZmljYXRlXSkKKworICAgICAgICAjIFB1dCB0aGUgY3lnd2luIGRpcmVjdG9yeSBm
aXJzdCBpbiB0aGUgcGF0aCB0byBmaW5kIGN5Z3dpbjEuZGxsCisgICAgICAgIGVudiA9IG9zLmVu
dmlyb24KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnY3lnd2luJywgJ3dpbjMyJyk6Cisg
ICAgICAgICAgICBlbnZbJ1BBVEgnXSA9ICclczslcycgJSAoCisgICAgICAgICAgICAgICAgcGF0
aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2JpbicpLAor
ICAgICAgICAgICAgICAgIGVudlsnUEFUSCddKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9
PSAnd2luMzInIGFuZCBzZWxmLl9yZWdpc3Rlcl9jeWd3aW46CisgICAgICAgICAgICBzZXR1cF9t
b3VudCA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbics
CisgICAgICAgICAgICAgICAgJ3NldHVwX21vdW50LmJhdCcpCisgICAgICAgICAgICBzdWJwcm9j
ZXNzLlBvcGVuKHNldHVwX21vdW50KS53YWl0KCkKKworICAgICAgICBlbnZbJ1BZVEhPTlBBVEgn
XSA9IChweXdlYnNvY2tldF9iYXNlICsgb3MucGF0aC5wYXRoc2VwICsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW52LmdldCgnUFlUSE9OUEFUSCcsICcnKSkKKworICAgICAgICBsb2dn
aW5nLmRlYnVnKCdTdGFydGluZyAlcyBzZXJ2ZXIgb24gJWQuJyAlICgKKyAgICAgICAgICAgIHNl
bGYuX3NlcnZlcl9uYW1lLCBzZWxmLl9wb3J0KSkKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygnY21k
bGluZTogJXMnICUgJyAnLmpvaW4oc3RhcnRfY21kKSkKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9
IHN1YnByb2Nlc3MuUG9wZW4oc3RhcnRfY21kLCBzdGRvdXQ9c2VsZi5fd3NvdXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9V
VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKwor
ICAgICAgICAjIFdhaXQgYSBiaXQgYmVmb3JlIGNoZWNraW5nIHRoZSBsaXZlbmVzcyBvZiB0aGUg
c2VydmVyLgorICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKworICAgICAgICBpZiBzZWxmLl91c2Vf
dGxzOgorICAgICAgICAgICAgdXJsID0gJ2h0dHBzJworICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgdXJsID0gJ2h0dHAnCisgICAgICAgIHVybCA9IHVybCArICc6Ly8xMjcuMC4wLjE6JWQvJyAl
IHNlbGYuX3BvcnQKKyAgICAgICAgaWYgbm90IHVybF9pc19hbGl2ZSh1cmwpOgorICAgICAgICAg
ICAgZnAgPSBvcGVuKG91dHB1dF9sb2cpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgZm9yIGxpbmUgaW4gZnA6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IobGlu
ZSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorICAg
ICAgICAgICAgcmFpc2UgUHlXZWJTb2NrZXROb3RTdGFydGVkKAorICAgICAgICAgICAgICAgICdG
YWlsZWQgdG8gc3RhcnQgJXMgc2VydmVyIG9uIHBvcnQgJXMuJyAlCisgICAgICAgICAgICAgICAg
ICAgIChzZWxmLl9zZXJ2ZXJfbmFtZSwgc2VsZi5fcG9ydCkpCisKKyAgICAgICAgIyBPdXIgcHJv
Y2VzcyB0ZXJtaW5hdGVkIGFscmVhZHkKKyAgICAgICAgaWYgc2VsZi5fcHJvY2Vzcy5yZXR1cm5j
b2RlICE9IE5vbmU6CisgICAgICAgICAgICByYWlzZSBQeVdlYlNvY2tldE5vdFN0YXJ0ZWQoCisg
ICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2ZXIuJyAlIHNlbGYuX3NlcnZl
cl9uYW1lKQorICAgICAgICBpZiBzZWxmLl9waWRmaWxlOgorICAgICAgICAgICAgZiA9IG9wZW4o
c2VsZi5fcGlkZmlsZSwgJ3cnKQorICAgICAgICAgICAgZi53cml0ZSgiJWQiICUgc2VsZi5fcHJv
Y2Vzcy5waWQpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiBzdG9wKHNlbGYsIGZv
cmNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGZvcmNlIGFuZCBub3Qgc2VsZi5pc19ydW5uaW5n
KCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgorICAg
ICAgICAgICAgcGlkID0gc2VsZi5fcHJvY2Vzcy5waWQKKyAgICAgICAgZWxpZiBzZWxmLl9waWRm
aWxlOgorICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGlkZmlsZSkKKyAgICAgICAgICAgIHBp
ZCA9IGludChmLnJlYWQoKS5zdHJpcCgpKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAg
ICAgaWYgbm90IHBpZDoKKyAgICAgICAgICAgIHJhaXNlIFB5V2ViU29ja2V0Tm90Rm91bmQoCisg
ICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBmaW5kICVzIHNlcnZlciBwaWQuJyAlIHNlbGYuX3Nl
cnZlcl9uYW1lKQorCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1NodXR0aW5nIGRvd24gJXMgc2Vy
dmVyICVkLicgJSAoc2VsZi5fc2VydmVyX25hbWUsIHBpZCkpCisgICAgICAgIHBvcnQua2lsbF9w
cm9jZXNzKHBpZCkKKworICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgorICAgICAgICAgICAgc2Vs
Zi5fcHJvY2Vzcy53YWl0KCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisKKyAg
ICAgICAgaWYgc2VsZi5fd3NvdXQ6CisgICAgICAgICAgICBzZWxmLl93c291dC5jbG9zZSgpCisg
ICAgICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKKworCitpZiAnX19tYWluX18nID09IF9fbmFt
ZV9fOgorICAgICMgUHJvdmlkZSBzb21lIGNvbW1hbmQgbGluZSBwYXJhbXMgZm9yIHN0YXJ0aW5n
IHRoZSBQeVdlYlNvY2tldCBzZXJ2ZXIKKyAgICAjIG1hbnVhbGx5LgorICAgIG9wdGlvbl9wYXJz
ZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlv
bignLS1zZXJ2ZXInLCB0eXBlPSdjaG9pY2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaG9pY2VzPVsnc3RhcnQnLCAnc3RvcCddLCBkZWZhdWx0PSdzdGFydCcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9J1NlcnZlciBhY3Rpb24gKHN0YXJ0fHN0b3ApJykKKyAg
ICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcG9ydCcsIGRlc3Q9J3BvcnQnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsIGhlbHA9J1BvcnQgdG8g
bGlzdGVuIG9uJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1yJywgJy0tcm9vdCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0Fic29sdXRlIHBhdGggdG8gRG9j
dW1lbnRSb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG92ZXJyaWRl
cyBsYXlvdXQgdGVzdCByb290cyknKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXQn
LCAnLS10bHMnLCBkZXN0PSd1c2VfdGxzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dD1GYWxzZSwgaGVscD0ndXNlIFRMUyAod3NzOi8vKScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRf
b3B0aW9uKCctaycsICctLXByaXZhdGVfa2V5JywgZGVzdD0ncHJpdmF0ZV9rZXknLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxwPSdUTFMgcHJpdmF0ZSBrZXkg
ZmlsZS4nKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLWMnLCAnLS1jZXJ0aWZpY2F0
ZScsIGRlc3Q9J2NlcnRpZmljYXRlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdD0nJywgaGVscD0nVExTIGNlcnRpZmljYXRlIGZpbGUuJykKKyAgICBvcHRpb25fcGFyc2Vy
LmFkZF9vcHRpb24oJy0tcmVnaXN0ZXJfY3lnd2luJywgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0icmVnaXN0ZXJfY3lnd2luIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUmVnaXN0ZXIgQ3lnd2luIHBhdGhzIChvbiBX
aW4gdHJ5IGJvdHMpJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tcGlkZmlsZScs
IGhlbHA9J3BhdGggdG8gcGlkIGZpbGUuJykKKyAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3Bh
cnNlci5wYXJzZV9hcmdzKCkKKworICAgIGlmIG5vdCBvcHRpb25zLnBvcnQ6CisgICAgICAgIGlm
IG9wdGlvbnMudXNlX3RsczoKKyAgICAgICAgICAgIG9wdGlvbnMucG9ydCA9IF9ERUZBVUxUX1dT
U19QT1JUCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcHRpb25zLnBvcnQgPSBfREVGQVVM
VF9XU19QT1JUCisKKyAgICBrd2RzID0geydwb3J0Jzogb3B0aW9ucy5wb3J0LCAndXNlX3Rscyc6
IG9wdGlvbnMudXNlX3Rsc30KKyAgICBpZiBvcHRpb25zLnJvb3Q6CisgICAgICAgIGt3ZHNbJ3Jv
b3QnXSA9IG9wdGlvbnMucm9vdAorICAgIGlmIG9wdGlvbnMucHJpdmF0ZV9rZXk6CisgICAgICAg
IGt3ZHNbJ3ByaXZhdGVfa2V5J10gPSBvcHRpb25zLnByaXZhdGVfa2V5CisgICAgaWYgb3B0aW9u
cy5jZXJ0aWZpY2F0ZToKKyAgICAgICAga3dkc1snY2VydGlmaWNhdGUnXSA9IG9wdGlvbnMuY2Vy
dGlmaWNhdGUKKyAgICBrd2RzWydyZWdpc3Rlcl9jeWd3aW4nXSA9IG9wdGlvbnMucmVnaXN0ZXJf
Y3lnd2luCisgICAgaWYgb3B0aW9ucy5waWRmaWxlOgorICAgICAgICBrd2RzWydwaWRmaWxlJ10g
PSBvcHRpb25zLnBpZGZpbGUKKworICAgIHB5d2Vic29ja2V0ID0gUHlXZWJTb2NrZXQodGVtcGZp
bGUuZ2V0dGVtcGRpcigpLCAqKmt3ZHMpCisKKyAgICBpZiAnc3RhcnQnID09IG9wdGlvbnMuc2Vy
dmVyOgorICAgICAgICBweXdlYnNvY2tldC5zdGFydCgpCisgICAgZWxzZToKKyAgICAgICAgcHl3
ZWJzb2NrZXQuc3RvcChmb3JjZT1UcnVlKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMu
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5l
X2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQppbmRleCA1YjlmMWU4Li45NTMwM2M4IDEwMDY0NAot
LS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5l
X2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQpAQCAt
NTQsNyArNTQsNyBAQCBpbXBvcnQgdXJsbGliCiBpbXBvcnQgd2ViYnJvd3NlcgogaW1wb3J0IHpp
cGZpbGUKIAotZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcGF0aF91dGlscworZnJvbSBwb3J0
IGltcG9ydCBwYXRoX3V0aWxzCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVj
dGF0aW9ucwogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCBpbWFnZV9kaWZmCiBmcm9tIHRlc3RfdHlw
ZXMgaW1wb3J0IHRleHRfZGlmZgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl9jaHJvbWl1bV93ZWJraXRfdGVz
dHMucHkKaW5kZXggNDE3MzE5MS4uNTgwMzdmYiAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fY2hyb21p
dW1fd2Via2l0X3Rlc3RzLnB5CkBAIC01OSwxNyArNTksMTkgQEAgaW1wb3J0IHN5cwogaW1wb3J0
IHRpbWUKIGltcG9ydCB0cmFjZWJhY2sKIAotZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgYXBh
Y2hlX2h0dHBfc2VydmVyCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0
aW9ucwotZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgaHR0cF9zZXJ2ZXIKIGZyb20gbGF5b3V0
X3BhY2thZ2UgaW1wb3J0IGpzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yCiBmcm9tIGxheW91
dF9wYWNrYWdlIGltcG9ydCBtZXRlcmVkX3N0cmVhbQotZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBv
cnQgcGF0aF91dGlscwotZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcGxhdGZvcm1fdXRpbHMK
IGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gbGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHRlc3Rfc2hlbGxfdGhyZWFkCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9y
dCB0ZXN0X2ZpbGVzCi1mcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB3ZWJzb2NrZXRfc2VydmVy
CisKK2ltcG9ydCBwb3J0Citmcm9tIHBvcnQgaW1wb3J0IGFwYWNoZV9odHRwX3NlcnZlcgorZnJv
bSBwb3J0IGltcG9ydCBodHRwX3NlcnZlcgorZnJvbSBwb3J0IGltcG9ydCBwYXRoX3V0aWxzCitm
cm9tIHBvcnQgaW1wb3J0IHdlYnNvY2tldF9zZXJ2ZXIKKwogZnJvbSB0ZXN0X3R5cGVzIGltcG9y
dCBmdXp6eV9pbWFnZV9kaWZmCiBmcm9tIHRlc3RfdHlwZXMgaW1wb3J0IGltYWdlX2RpZmYKIGZy
b20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKQEAgLTE0NjksNyArMTQ3MSw3IEBA
IGRlZiBtYWluKG9wdGlvbnMsIGFyZ3MpOgogCiAgICAgaWYgbm90IG9wdGlvbnMubnVtX3Rlc3Rf
c2hlbGxzOgogICAgICAgICAjIFRPRE8ob2phbik6IEludmVzdGlnYXRlIHBlcmYvZmxha2luZXNz
IGltcGFjdCBvZiB1c2luZyBudW1jb3JlcyArIDEuCi0gICAgICAgIG9wdGlvbnMubnVtX3Rlc3Rf
c2hlbGxzID0gcGxhdGZvcm1fdXRpbHMuZ2V0X251bV9jb3JlcygpCisgICAgICAgIG9wdGlvbnMu
bnVtX3Rlc3Rfc2hlbGxzID0gcG9ydC5nZXRfbnVtX2NvcmVzKCkKIAogICAgIHdyaXRlID0gY3Jl
YXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsICdjb25maWcnKQogICAgIHdyaXRlKCJSdW5uaW5n
ICVzIHRlc3Rfc2hlbGxzIGluIHBhcmFsbGVsIiAlIG9wdGlvbnMubnVtX3Rlc3Rfc2hlbGxzKQpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVz
dF90eXBlcy9mdXp6eV9pbWFnZV9kaWZmLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9mdXp6eV9pbWFnZV9kaWZmLnB5CmluZGV4IDkzODM2
NmQuLjc3Y2UwMWQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvZnV6enlfaW1hZ2VfZGlmZi5weQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdlX2Rp
ZmYucHkKQEAgLTM3LDcgKzM3LDcgQEAgaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQg
c3VicHJvY2VzcwogCi1mcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBwYXRoX3V0aWxzCitmcm9t
IHBvcnQgaW1wb3J0IHBhdGhfdXRpbHMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3Rf
ZmFpbHVyZXMKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKIApkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBl
cy9pbWFnZV9kaWZmLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5CmluZGV4IDI1NzZmN2EuLjFiNDRiNDAgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlw
ZXMvaW1hZ2VfZGlmZi5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkKQEAgLTQwLDcgKzQwLDcgQEAgaW1wb3J0
IG9zCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3VicHJvY2VzcwogCi1mcm9tIGxheW91dF9wYWNr
YWdlIGltcG9ydCBwYXRoX3V0aWxzCitmcm9tIHBvcnQgaW1wb3J0IHBhdGhfdXRpbHMKIGZyb20g
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gdGVzdF90eXBlcyBpbXBv
cnQgdGVzdF90eXBlX2Jhc2UKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXN0X3R5cGVfYmFzZS5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jh
c2UucHkKaW5kZXggMmFhOGEyZC4uZDQxMmEwYiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXN0X3R5cGVfYmFzZS5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVz
L3Rlc3RfdHlwZV9iYXNlLnB5CkBAIC0zOSw3ICszOSw3IEBAIGltcG9ydCBsb2dnaW5nCiBpbXBv
cnQgb3MucGF0aAogaW1wb3J0IHN1YnByb2Nlc3MKIAotZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBv
cnQgcGF0aF91dGlscworZnJvbSBwb3J0IGltcG9ydCBwYXRoX3V0aWxzCiAKIAogY2xhc3MgVGVz
dEFyZ3VtZW50cyhvYmplY3QpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weQppbmRl
eCAxYWE0MjUzLi44ZWY3NzQ1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weQpA
QCAtMzcsNyArMzcsNyBAQCBpbXBvcnQgZXJybm8KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3Mu
cGF0aAogCi1mcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBwYXRoX3V0aWxzCitmcm9tIHBvcnQg
aW1wb3J0IHBhdGhfdXRpbHMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVy
ZXMKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48107</attachid>
            <date>2010-02-04 00:00:08 -0800</date>
            <delta_ts>2010-02-04 13:16:03 -0800</delta_ts>
            <desc>uploading patch 2 of 4 - this just fix a string in the copyright text for the files.</desc>
            <filename>git.patch.3_2</filename>
            <type>text/plain</type>
            <size>19314</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBiZTIxNDViLi5jNGUxZDQ4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMzcgQEAKIAogICAgICAg
ICBSdWJiZXItc3RhbXBlZCBieSBFcmljIFNpZWRlbC4KIAorICAgICAgICBDaGFuZ2UgInRoZSBD
aHJvbWl1bSBuYW1lIiB0byAidGhlIG5hbWUgb2YgR29vZ2xlIEluYy4iIGluIHRoZSBsaWNlbnNl
cworCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDUx
MQorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRv
ci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9tZXRlcmVkX3N0cmVhbS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZhaWx1cmVz
LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3RfZmlsZXMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9fX2luaXRfXy5weToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4
LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fbWFjLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW1fd2luLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvaHR0cF9zZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGF0aF91dGlscy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRf
dGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX2No
cm9taXVtX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdlX2RpZmYucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jh
c2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBl
cy90ZXh0X2RpZmYucHk6CisKKzIwMTAtMDItMDMgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgRXJpYyBTaWVkZWwuCisKICAg
ICAgICAgUmVuYW1lIGZpbGVzIGFzIHBhcnQgb2YgcmVmYWN0b3JpbmcgdGhlIGxheW91dF90ZXN0
cyBwYWNrYWdlLiBBbGwKICAgICAgICAgdGhlIHBsYXRmb3JtX3V0aWxzKiBtb2R1bGUsIHRoZSBw
YXRoX3V0aWxzLnB5IG1vZHVsZSwgYW5kCiAgICAgICAgIHRoZSBodHRwIHNlcnZlciBhbmQgd2Vi
IHNvY2tldCBzZXJ2ZXIgbW9kdWxlcyBhcmUgbW92ZWQgaW50byBhIG5ldwpAQCAtMzIsNiArNjMs
NyBAQAogICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMv
dGVzdF90eXBlX2Jhc2UucHk6CiAgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHk6CiAKKwogMjAxMC0wMi0wMyAgQ3NhYmEgT3N6dHJv
Z29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEVy
aWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQppbmRleCA1ZDkwZDEzLi5mMzhhN2Fi
IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29u
X2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQpAQCAtMTEsNyArMTEsNyBAQAogIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCiAjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJv
bWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICMK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2Vu
ZXJhdG9yLnB5CmluZGV4IGJjZTZkMTMuLmRjMjRhZGUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0
c19nZW5lcmF0b3IucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpAQCAtMTEsNyAr
MTEsNyBAQAogIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAg
KiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KICMKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21ldGVyZWRfc3RyZWFtLnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJl
ZF9zdHJlYW0ucHkKaW5kZXggODcwMWFkMy4uNzJiMzBhMSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9z
dHJlYW0ucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvbWV0ZXJlZF9zdHJlYW0ucHkKQEAgLTExLDcgKzExLDcgQEAKICMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgogIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCiAjIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUg
Q2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CiAjCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25z
LnB5CmluZGV4IDE0MWFhZTcuLjViMGQxODYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25z
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKICMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQogIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIENo
cm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgog
IwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvdGVzdF9mYWlsdXJlcy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZmFpbHVyZXMucHkKaW5kZXgg
YjA2NGIwYy4uNTZkN2I1YSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9mYWlsdXJlcy5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0
X2ZhaWx1cmVzLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKICMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQog
IyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogIwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVz
dF9maWxlcy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3Rlc3RfZmlsZXMucHkKaW5kZXggNTgxZjkxNC4uYjdlNjIwZCAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvdGVzdF9maWxlcy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5CkBAIC0xMSw3ICsxMSw3IEBA
CiAjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKICMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRo
ZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQogIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgogIwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3NoZWxs
X3RocmVhZC5weQppbmRleCBiMzU3NjIwLi45ZjUyNjg2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3NoZWxs
X3RocmVhZC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weQpAQCAtMTEsNyArMTEsNyBAQAog
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCiAjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVy
IHRoZSBDaHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KICMKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L19faW5pdF9fLnB5CmluZGV4IDcyOTRmMjQuLjE3MzAwODUgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvX19p
bml0X18ucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9fX2luaXRfXy5weQpAQCAtMTEsNyArMTEsNyBAQAogIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1lIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICMKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0
dHBfc2VydmVyLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkKaW5kZXggMmIzM2Y4ZS4uMWZiMDM2NyAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFj
aGVfaHR0cF9zZXJ2ZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkKQEAgLTExLDcgKzExLDcgQEAKICMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgogIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCiAjIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0
aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCiAjCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9saW51eC5weQppbmRleCA0NGNhZjk0Li45ZmZj
NDAxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbGludXgucHkKQEAgLTExLDcgKzExLDcgQEAK
ICMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgogIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAjIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhl
ciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCiAjCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5CmluZGV4IDgyN2VmZDguLmQwZmJj
MDEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW1fbWFjLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKICMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQogIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhl
IENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQog
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgogIwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bV93aW4ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3dpbi5weQppbmRleCBhMWExNTQ4Li4xZTBiMjEyIDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtX3dpbi5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Nocm9taXVtX3dpbi5weQpAQCAtMTEsNyArMTEsNyBAQAogIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCiAjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJv
bWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICMK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvaHR0cF9zZXJ2ZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CmluZGV4IGViYzlmNDguLjk5ZTJlYTEgMTAwNzU1Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9z
ZXJ2ZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9odHRwX3NlcnZlci5weQpAQCAtMTEsNyArMTEsNyBAQAogIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1l
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICMKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9z
ZXJ2ZXJfYmFzZS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5weQppbmRleCA4OWNmOWMwLi4wMjZlMDcwIDEwMDY0NAot
LS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBf
c2VydmVyX2Jhc2UucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKICMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQogIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIENo
cm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgog
IwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9wYXRoX3V0aWxzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9wYXRoX3V0aWxzLnB5CmluZGV4IDkxYjFiNjIuLjcwYjhjMDMgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGF0aF91
dGlscy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3BhdGhfdXRpbHMucHkKQEAgLTExLDcgKzExLDcgQEAKICMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCiAjIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAjCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tl
dF9zZXJ2ZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkKaW5kZXggNWZjN2U2Zi4uYzZjNzUyNyAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2Nr
ZXRfc2VydmVyLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQpAQCAtMTEsNyArMTEsNyBAQAogIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCiAjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJv
bWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICMK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Jl
YmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkK
aW5kZXggOTUzMDNjOC4uNDE0YmFhZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGlu
ZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKQEAgLTExLDcgKzExLDcgQEAKICMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgogIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCiAjIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgQ2hyb21p
dW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAjCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
Y2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQppbmRleCA1ODAzN2ZiLi41
NzFhZTNmIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKQEAg
LTExLDcgKzExLDcgQEAKICMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAjIGRpc3RyaWJ1dGlvbi4K
LSMgICAgICogTmVpdGhlciB0aGUgQ2hyb21pdW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCiAjCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdlX2RpZmYucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5
X2ltYWdlX2RpZmYucHkKaW5kZXggNzdjZTAxZC4uMTAwZmQwZCAxMDA2NDQKLS0tIGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9mdXp6eV9pbWFn
ZV9kaWZmLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3Rlc3RfdHlwZXMvZnV6enlfaW1hZ2VfZGlmZi5weQpAQCAtMTEsNyArMTEsNyBAQAogIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCiAjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBD
aHJvbWl1bSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
ICMKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weQppbmRleCAxYjQ0YjQwLi44NmI5
NjU5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5CkBAIC0xMSw3ICsxMSw3
IEBACiAjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKICMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5l
aXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQogIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgogIwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXN0X3R5cGVfYmFzZS5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkK
aW5kZXggZDQxMmEwYi4uNzliN2UzNCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXN0X3R5cGVfYmFzZS5weQorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3Rf
dHlwZV9iYXNlLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKICMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQog
IyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogIwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2Rp
ZmYucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5
cGVzL3RleHRfZGlmZi5weQppbmRleCA4ZWY3NzQ1Li4zYzg5NWFmIDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlm
Zi5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0
X3R5cGVzL3RleHRfZGlmZi5weQpAQCAtMTEsNyArMTEsNyBAQAogIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBuYW1l
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48109</attachid>
            <date>2010-02-04 00:07:19 -0800</date>
            <delta_ts>2010-02-04 13:16:11 -0800</delta_ts>
            <desc>patch 3 of 4 - refactor the port package into an object-oriented style</desc>
            <filename>svn.patch_3.3</filename>
            <type>text/plain</type>
            <size>187375</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">SW5kZXg6IFNjcmlwdHMvcnVuLWNocm9taXVtLXdlYmtpdC10ZXN0cwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
Y3JpcHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVzdHMJKHJldmlzaW9uIDU0MzI4KQorKysgU2Ny
aXB0cy9ydW4tY2hyb21pdW0td2Via2l0LXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw3ICsx
MSw3IEBACiAjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKICMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogIyBkaXN0cmlidXRpb24uCi0jICAgICAq
IE5laXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQogIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgogIwpAQCAtMzMsNiArMzMsNyBAQAogCiBzeXMucGF0aC5hcHBlbmQob3Mu
cGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmtpdHB5IiwgImxheW91dF90ZXN0cyIp
KQorc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0
aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpKQogaW1wb3J0IHJ1bl9jaHJvbWl1bV93ZWJraXRfdGVz
dHMKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKSW5kZXg6IFNjcmlwdHMvcmViYXNlbGlu
ZS1jaHJvbWl1bS13ZWJraXQtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU2NyaXB0cy9yZWJhc2VsaW5l
LWNocm9taXVtLXdlYmtpdC10ZXN0cwkocmV2aXNpb24gNTQzMjgpCisrKyBTY3JpcHRzL3JlYmFz
ZWxpbmUtY2hyb21pdW0td2Via2l0LXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw3ICsxMSw3
IEBACiAjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKICMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5l
aXRoZXIgdGhlIENocm9taXVtIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQogIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgogIwpJbmRleDogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90
eXBlcy9pbWFnZV9kaWZmLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weQkocmV2aXNpb24gNTQzMjgpCisrKyBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDkgKzM4LDcgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGlt
cG9ydCBzaHV0aWwKLWltcG9ydCBzdWJwcm9jZXNzCiAKLWZyb20gcG9ydCBpbXBvcnQgcGF0aF91
dGlscwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcwogZnJvbSB0ZXN0
X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFzZQogCkBAIC04NCw3ICs4Miw3IEBACiAgICAgICAg
IHNlbGYuX3NhdmVfYmFzZWxpbmVfZGF0YShmaWxlbmFtZSwgcG5nX2RhdGEsICIucG5nIikKICAg
ICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGZpbGVuYW1lLCBjaGVja3N1bSwgIi5jaGVj
a3N1bSIpCiAKLSAgICBkZWYgX2NyZWF0ZV9pbWFnZV9kaWZmKHNlbGYsIGZpbGVuYW1lLCB0YXJn
ZXQpOgorICAgIGRlZiBfY3JlYXRlX2ltYWdlX2RpZmYoc2VsZiwgcG9ydCwgZmlsZW5hbWUsIHRh
cmdldCk6CiAgICAgICAgICIiIkNyZWF0ZXMgdGhlIHZpc3VhbCBkaWZmIG9mIHRoZSBleHBlY3Rl
ZC9hY3R1YWwgUE5Hcy4KIAogICAgICAgICBBcmdzOgpAQCAtOTgsMzIgKzk2LDE0IEBACiAgICAg
ICAgIGV4cGVjdGVkX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoZmlsZW5hbWUsCiAg
ICAgICAgICAgc2VsZi5GSUxFTkFNRV9TVUZGSVhfRVhQRUNURUQgKyAnLnBuZycpCiAKLSAgICAg
ICAgZ2xvYmFsIF9jb21wYXJlX2F2YWlsYWJsZQotICAgICAgICBjbWQgPSAnJwotCiAgICAgICAg
IHRyeToKLSAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBwYXRoX3V0aWxzLmltYWdlX2RpZmZfcGF0
aCh0YXJnZXQpCi0gICAgICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwgJy0tZGlmZicsIGFjdHVh
bF9maWxlbmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgZGlmZl9m
aWxlbmFtZV0KLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIF9jb21w
YXJlX2F2YWlsYWJsZSA9IFRydWUKKyAgICAgICAgICAgIHJlc3VsdCA9IHBvcnQuZGlmZl9pbWFn
ZShhY3R1YWxfZmlsZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRpZmZfZmlsZW5hbWUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVy
cm9yOgogICAgICAgICAgICAgX2NvbXBhcmVfYXZhaWxhYmxlID0gRmFsc2UKIAotICAgICAgICBy
ZXN1bHQgPSAxCi0gICAgICAgIGlmIF9jb21wYXJlX2F2YWlsYWJsZToKLSAgICAgICAgICAgIHRy
eToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNhbGwoY21kKQotICAgICAg
ICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBl
cnJuby5FTk9FTlQgb3IgZS5lcnJubyA9PSBlcnJuby5FQUNDRVM6Ci0gICAgICAgICAgICAgICAg
ICAgIF9jb21wYXJlX2F2YWlsYWJsZSA9IEZhbHNlCi0gICAgICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICAgICAgcmFpc2UgZQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6
Ci0gICAgICAgICAgICAgICAgIyB3b3JrIGFyb3VuZCBhIHJhY2UgY29uZGl0aW9uIGluIFB5dGhv
biAyLjQncyBpbXBsZW1lbnRhdGlvbgotICAgICAgICAgICAgICAgICMgb2Ygc3VicHJvY2Vzcy5Q
b3BlbgotICAgICAgICAgICAgICAgIHBhc3MKLQogICAgICAgICBnbG9iYWwgX2NvbXBhcmVfbXNn
X3ByaW50ZWQKLQogICAgICAgICBpZiBub3QgX2NvbXBhcmVfYXZhaWxhYmxlIGFuZCBub3QgX2Nv
bXBhcmVfbXNnX3ByaW50ZWQ6CiAgICAgICAgICAgICBfY29tcGFyZV9tc2dfcHJpbnRlZCA9IFRy
dWUKICAgICAgICAgICAgIHByaW50KCdpbWFnZV9kaWZmIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHlv
dSBoYXZlIGEgJyArIHRhcmdldCArCkBAIC0xMzEsNyArMTExLDcgQEAKIAogICAgICAgICByZXR1
cm4gcmVzdWx0CiAKLSAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgZmlsZW5hbWUsIHByb2Ms
IG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgorICAgIGRlZiBjb21wYXJlX291dHB1dChzZWxm
LCBwb3J0LCBmaWxlbmFtZSwgb3V0cHV0LCB0ZXN0X2FyZ3MsIHRhcmdldCk6CiAgICAgICAgICIi
IkltcGxlbWVudGF0aW9uIG9mIENvbXBhcmVPdXRwdXQgdGhhdCBjaGVja3MgdGhlIG91dHB1dCBp
bWFnZSBhbmQKICAgICAgICAgY2hlY2tzdW0gYWdhaW5zdCB0aGUgZXhwZWN0ZWQgZmlsZXMgZnJv
bSB0aGUgTGF5b3V0VGVzdCBkaXJlY3RvcnkuCiAgICAgICAgICIiIgpAQCAtMTQ4LDkgKzEyOCw5
IEBACiAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZXMKIAogICAgICAgICAjIENvbXBhcmUgaGFz
aGVzLgotICAgICAgICBleHBlY3RlZF9oYXNoX2ZpbGUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2Zp
bGVuYW1lKGZpbGVuYW1lLAorICAgICAgICBleHBlY3RlZF9oYXNoX2ZpbGUgPSBzZWxmLl9wb3J0
LmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuY2hlY2tzdW0nKQotICAgICAgICBleHBl
Y3RlZF9wbmdfZmlsZSA9IHBhdGhfdXRpbHMuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcu
cG5nJykKKyAgICAgICAgZXhwZWN0ZWRfcG5nX2ZpbGUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2Zp
bGVuYW1lKGZpbGVuYW1lLCAnLnBuZycpCiAKICAgICAgICAgaWYgdGVzdF9hcmdzLnNob3dfc291
cmNlczoKICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX2hh
c2hfZmlsZSkKQEAgLTE2Niw4ICsxNDYsOSBAQAogCiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlz
ZmlsZShleHBlY3RlZF9wbmdfZmlsZSk6CiAgICAgICAgICAgICAjIFJlcG9ydCBhIG1pc3Npbmcg
ZXhwZWN0ZWQgUE5HIGZpbGUuCi0gICAgICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcyhm
aWxlbmFtZSwgJycsICcuY2hlY2tzdW0nLCB0ZXN0X2FyZ3MuaGFzaCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2hhc2gsIGRpZmY9RmFsc2UsIHdkaWZmPUZh
bHNlKQorICAgICAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMocG9ydCwgZmlsZW5hbWUs
ICcnLCAnLmNoZWNrc3VtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3RfYXJncy5oYXNoLCBleHBlY3RlZF9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlmZj1GYWxzZSwgd2RpZmY9RmFsc2UpCiAgICAgICAgICAgICBzZWxmLl9jb3B5
X291dHB1dF9wbmcoZmlsZW5hbWUsIHRlc3RfYXJncy5wbmdfcGF0aCwgJy1hY3R1YWwucG5nJykK
ICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5n
SW1hZ2Uoc2VsZikpCiAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZXMKQEAgLTE3NiwxNCArMTU3
LDE1IEBACiAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZXMKIAogCi0gICAgICAgIHNlbGYud3Jp
dGVfb3V0cHV0X2ZpbGVzKGZpbGVuYW1lLCAnJywgJy5jaGVja3N1bScsIHRlc3RfYXJncy5oYXNo
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9oYXNoLCBkaWZmPUZh
bHNlLCB3ZGlmZj1GYWxzZSkKKyAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMocG9ydCwg
ZmlsZW5hbWUsICcnLCAnLmNoZWNrc3VtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdF9hcmdzLmhhc2gsIGV4cGVjdGVkX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZmY9RmFsc2UsIHdkaWZmPUZhbHNlKQogICAgICAgICBzZWxmLl9jb3B5X291
dHB1dF9wbmcoZmlsZW5hbWUsIHRlc3RfYXJncy5wbmdfcGF0aCwgJy1hY3R1YWwucG5nJykKICAg
ICAgICAgc2VsZi5fY29weV9vdXRwdXRfcG5nKGZpbGVuYW1lLCBleHBlY3RlZF9wbmdfZmlsZSwg
Jy1leHBlY3RlZC5wbmcnKQogCiAgICAgICAgICMgRXZlbiB0aG91Z2ggd2Ugb25seSB1c2UgcmVz
dWx0IGluIG9uZSBjb2RlcGF0aCBiZWxvdyBidXQgd2UKICAgICAgICAgIyBzdGlsbCBuZWVkIHRv
IGNhbGwgQ3JlYXRlSW1hZ2VEaWZmIGZvciBvdGhlciBjb2RlcGF0aHMuCi0gICAgICAgIHJlc3Vs
dCA9IHNlbGYuX2NyZWF0ZV9pbWFnZV9kaWZmKGZpbGVuYW1lLCB0YXJnZXQpCisgICAgICAgIHJl
c3VsdCA9IHNlbGYuX2NyZWF0ZV9pbWFnZV9kaWZmKHBvcnQsIGZpbGVuYW1lLCB0YXJnZXQpCiAg
ICAgICAgIGlmIGV4cGVjdGVkX2hhc2ggPT0gJyc6CiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBl
bmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlSGFzaChzZWxmKSkKICAgICAgICAg
ZWxpZiB0ZXN0X2FyZ3MuaGFzaCAhPSBleHBlY3RlZF9oYXNoOgpAQCAtMTk2LDcgKzE3OCw3IEBA
CiAKICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCiAKLSAgICBkZWYgZGlmZl9maWxlcyhzZWxmLCBm
aWxlMSwgZmlsZTIpOgorICAgIGRlZiBkaWZmX2ZpbGVzKHNlbGYsIHBvcnQsIGZpbGUxLCBmaWxl
Mik6CiAgICAgICAgICIiIkRpZmYgdHdvIGltYWdlIGZpbGVzLgogCiAgICAgICAgIEFyZ3M6CkBA
IC0yMDgsMTcgKzE5MCw4IEBACiAgICAgICAgICIiIgogCiAgICAgICAgIHRyeToKLSAgICAgICAg
ICAgIGV4ZWN1dGFibGUgPSBwYXRoX3V0aWxzLmltYWdlX2RpZmZfcGF0aCgnRGVidWcnKQotICAg
ICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgbG9nZ2luZy53YXJuKCdGYWls
ZWQgdG8gZmluZCBpbWFnZSBkaWZmIGV4ZWN1dGFibGUuJykKKyAgICAgICAgICAgIHJlc3VsdCA9
IHBvcnQuZGlmZl9pbWFnZShmaWxlMSwgZmlsZTIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9y
LCBlOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgICAgICBjbWQgPSBbZXhlY3V0YWJs
ZSwgZmlsZTEsIGZpbGUyXQotICAgICAgICByZXN1bHQgPSAxCi0gICAgICAgIHRyeToKLSAgICAg
ICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2FsbChjbWQpCi0gICAgICAgIGV4Y2VwdCBPU0Vy
cm9yLCBlOgotICAgICAgICAgICAgbG9nZ2luZy53YXJuKCdGYWlsZWQgdG8gY29tcGFyZSBpbWFn
ZSBkaWZmOiAlcycsIGUpCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCiAgICAgICAgIHJldHVy
biByZXN1bHQgPT0gMQpJbmRleDogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90
eXBlcy90ZXN0X3R5cGVfYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5CShyZXZpc2lvbiA1NDMyOCkK
KysrIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jh
c2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE1ICszMywxMSBAQAogIiIiCiAKIGltcG9ydCBj
Z2kKLWltcG9ydCBkaWZmbGliCiBpbXBvcnQgZXJybm8KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQg
b3MucGF0aAotaW1wb3J0IHN1YnByb2Nlc3MKIAotZnJvbSBwb3J0IGltcG9ydCBwYXRoX3V0aWxz
CiAKLQogY2xhc3MgVGVzdEFyZ3VtZW50cyhvYmplY3QpOgogICAgICIiIlN0cnVjdC1saWtlIHdy
YXBwZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIG5lZWRlZCBieQogICAgIHNwZWNpZmljIHRl
c3RzLiIiIgpAQCAtNzQsNyArNzAsNyBAQAogICAgIEZJTEVOQU1FX1NVRkZJWF9XRElGRiA9ICIt
d2RpZmYuaHRtbCIKICAgICBGSUxFTkFNRV9TVUZGSVhfQ09NUEFSRSA9ICItZGlmZi5wbmciCiAK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm0sIHJvb3Rfb3V0cHV0X2Rpcik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHBsYXRmb3JtLCByb290X291dHB1dF9kaXIpOgogICAg
ICAgICAiIiJJbml0aWFsaXplIGEgVGVzdFR5cGVCYXNlIG9iamVjdC4KIAogICAgICAgICBBcmdz
OgpAQCAtODMsMTQgKzc5LDE1IEBACiAgICAgICAgICAgcm9vdF9vdXRwdXRfZGlyOiBUaGUgdW5p
eCBzdHlsZSBwYXRoIHRvIHRoZSBvdXRwdXQgZGlyLgogICAgICAgICAiIiIKICAgICAgICAgc2Vs
Zi5fcm9vdF9vdXRwdXRfZGlyID0gcm9vdF9vdXRwdXRfZGlyCisgICAgICAgIHNlbGYuX3BvcnQg
PSBwb3J0CiAgICAgICAgIHNlbGYuX3BsYXRmb3JtID0gcGxhdGZvcm0KIAogICAgIGRlZiBfbWFr
ZV9vdXRwdXRfZGlyZWN0b3J5KHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgIiIiQ3JlYXRlcyB0
aGUgb3V0cHV0IGRpcmVjdG9yeSAoaWYgbmVlZGVkKSBmb3IgYSBnaXZlbiB0ZXN0CiAgICAgICAg
IGZpbGVuYW1lLiIiIgogICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2Vs
Zi5fcm9vdF9vdXRwdXRfZGlyLAotICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKGZpbGVuYW1lKSkKLSAgICAgICAgcGF0aF91dGlscy5tYXliZV9tYWtlX2RpcmVj
dG9yeShvcy5wYXRoLnNwbGl0KG91dHB1dF9maWxlbmFtZSlbMF0pCisgICAgICAgICAgICBzZWxm
Ll9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKQorICAgICAgICBzZWxmLl9w
b3J0Lm1heWJlX21ha2VfZGlyZWN0b3J5KG9zLnBhdGguc3BsaXQob3V0cHV0X2ZpbGVuYW1lKVsw
XSkKIAogICAgIGRlZiBfc2F2ZV9iYXNlbGluZV9kYXRhKHNlbGYsIGZpbGVuYW1lLCBkYXRhLCBt
b2RpZmllcik6CiAgICAgICAgICIiIlNhdmVzIGEgbmV3IGJhc2VsaW5lIGZpbGUgaW50byB0aGUg
cGxhdGZvcm0gZGlyZWN0b3J5LgpAQCAtMTA0LDEzICsxMDEsMTMgQEAKICAgICAgICAgICBtb2Rp
ZmllcjogdHlwZSBvZiB0aGUgcmVzdWx0IGZpbGUsIGUuZy4gIi50eHQiIG9yICIucG5nIgogICAg
ICAgICAiIiIKICAgICAgICAgcmVsYXRpdmVfZGlyID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAg
ICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkKKyAgICAg
ICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCiAgICAg
ICAgIG91dHB1dF9kaXIgPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgICAgICBwYXRoX3V0aWxzLmNo
cm9taXVtX2Jhc2VsaW5lX3BhdGgoc2VsZi5fcGxhdGZvcm0pLCByZWxhdGl2ZV9kaXIpCisgICAg
ICAgICAgICBzZWxmLl9wb3J0LmNocm9taXVtX2Jhc2VsaW5lX3BhdGgoc2VsZi5fcGxhdGZvcm0p
LCByZWxhdGl2ZV9kaXIpCiAgICAgICAgIG91dHB1dF9maWxlID0gb3MucGF0aC5iYXNlbmFtZShv
cy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSArCiAgICAgICAgICAgICBzZWxmLkZJTEVOQU1F
X1NVRkZJWF9FWFBFQ1RFRCArIG1vZGlmaWVyKQogCi0gICAgICAgIHBhdGhfdXRpbHMubWF5YmVf
bWFrZV9kaXJlY3Rvcnkob3V0cHV0X2RpcikKKyAgICAgICAgc2VsZi5fcG9ydC5tYXliZV9tYWtl
X2RpcmVjdG9yeShvdXRwdXRfZGlyKQogICAgICAgICBvdXRwdXRfcGF0aCA9IG9zLnBhdGguam9p
bihvdXRwdXRfZGlyLCBvdXRwdXRfZmlsZSkKICAgICAgICAgbG9nZ2luZy5kZWJ1Zygnd3JpdGlu
ZyBuZXcgYmFzZWxpbmUgdG8gIiVzIicgJSAob3V0cHV0X3BhdGgpKQogICAgICAgICBvcGVuKG91
dHB1dF9wYXRoLCAid2IiKS53cml0ZShkYXRhKQpAQCAtMTMwLDEwICsxMjcsMTAgQEAKICAgICAg
ICAgICBUaGUgYWJzb2x1dGUgd2luZG93cyBwYXRoIHRvIHRoZSBvdXRwdXQgZmlsZW5hbWUKICAg
ICAgICAgIiIiCiAgICAgICAgIG91dHB1dF9maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9y
b290X291dHB1dF9kaXIsCi0gICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmls
ZW5hbWUoZmlsZW5hbWUpKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2Zp
bGVuYW1lKGZpbGVuYW1lKSkKICAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQob3V0cHV0
X2ZpbGVuYW1lKVswXSArIG1vZGlmaWVyCiAKLSAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwg
ZmlsZW5hbWUsIHByb2MsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgorICAgIGRlZiBjb21w
YXJlX291dHB1dChzZWxmLCBwb3J0LCBmaWxlbmFtZSwgb3V0cHV0LCB0ZXN0X2FyZ3MsIHRhcmdl
dCk6CiAgICAgICAgICIiIk1ldGhvZCB0aGF0IGNvbXBhcmVzIHRoZSBvdXRwdXQgZnJvbSB0aGUg
dGVzdCB3aXRoIHRoZQogICAgICAgICBleHBlY3RlZCB2YWx1ZS4KIApAQCAtMTQxLDcgKzEzOCw2
IEBACiAKICAgICAgICAgQXJnczoKICAgICAgICAgICBmaWxlbmFtZTogYWJzb2x1dGUgZmlsZW5h
bWUgdG8gdGVzdCBmaWxlCi0gICAgICAgICAgcHJvYzogYSByZWZlcmVuY2UgdG8gdGhlIHRlc3Rf
c2hlbGwgcHJvY2VzcwogICAgICAgICAgIG91dHB1dDogYSBzdHJpbmcgY29udGFpbmluZyB0aGUg
b3V0cHV0IG9mIHRoZSB0ZXN0CiAgICAgICAgICAgdGVzdF9hcmdzOiBhIFRlc3RBcmd1bWVudHMg
b2JqZWN0IGhvbGRpbmcgb3B0aW9uYWwgYWRkaXRpb25hbAogICAgICAgICAgICAgICBhcmd1bWVu
dHMKQEAgLTE1Miw4ICsxNDgsOCBAQAogICAgICAgICAiIiIKICAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWQKIAotICAgIGRlZiB3cml0ZV9vdXRwdXRfZmlsZXMoc2VsZiwgZmlsZW5hbWUsIHRl
c3RfdHlwZSwgZmlsZV90eXBlLCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBl
eHBlY3RlZCwgZGlmZj1UcnVlLCB3ZGlmZj1GYWxzZSk6CisgICAgZGVmIHdyaXRlX291dHB1dF9m
aWxlcyhzZWxmLCBwb3J0LCBmaWxlbmFtZSwgdGVzdF90eXBlLCBmaWxlX3R5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGV4cGVjdGVkLCBkaWZmPVRydWUsIHdkaWZmPUZh
bHNlKToKICAgICAgICAgIiIiV3JpdGVzIHRoZSB0ZXN0IG91dHB1dCwgdGhlIGV4cGVjdGVkIG91
dHB1dCBhbmQgb3B0aW9uYWxseSB0aGUgZGlmZgogICAgICAgICBiZXR3ZWVuIHRoZSB0d28gdG8g
ZmlsZXMgaW4gdGhlIHJlc3VsdHMgZGlyZWN0b3J5LgogCkBAIC0xODYsODEgKzE4MiwxNSBAQAog
ICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgaWYgZGlmZjoKLSAgICAgICAgICAgIGRpZmYg
PSBkaWZmbGliLnVuaWZpZWRfZGlmZihleHBlY3RlZC5zcGxpdGxpbmVzKFRydWUpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5zcGxpdGxpbmVzKFRydWUp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGVu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9maWxl
bmFtZSkKLQorICAgICAgICAgICAgZGlmZiA9IHBvcnQuZGlmZl90ZXh0KGV4cGVjdGVkLCBvdXRw
dXQsIGV4cGVjdGVkX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFjdHVhbF9maWxlbmFtZSkKICAgICAgICAgICAgIGRpZmZfZmlsZW5hbWUgPSBzZWxmLm91dHB1
dF9maWxlbmFtZShmaWxlbmFtZSwKICAgICAgICAgICAgICAgICB0ZXN0X3R5cGUgKyBzZWxmLkZJ
TEVOQU1FX1NVRkZJWF9ESUZGICsgZmlsZV90eXBlKQotICAgICAgICAgICAgb3BlbihkaWZmX2Zp
bGVuYW1lLCAid2IiKS53cml0ZSgnJy5qb2luKGRpZmYpKQorICAgICAgICAgICAgb3BlbihkaWZm
X2ZpbGVuYW1lLCAid2IiKS53cml0ZShkaWZmKQogCiAgICAgICAgIGlmIHdkaWZmOgogICAgICAg
ICAgICAgIyBTaGVsbCBvdXQgdG8gd2RpZmYgdG8gZ2V0IGNvbG9yZWQgaW5saW5lIGRpZmZzLgot
ICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMud2RpZmZfcGF0aCgpCi0gICAgICAg
ICAgICBjbWQgPSBbZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAnLS1zdGFydC1kZWxl
dGU9IyNXRElGRl9ERUwjIycsCi0gICAgICAgICAgICAgICAgICAgJy0tZW5kLWRlbGV0ZT0jI1dE
SUZGX0VORCMjJywKLSAgICAgICAgICAgICAgICAgICAnLS1zdGFydC1pbnNlcnQ9IyNXRElGRl9B
REQjIycsCi0gICAgICAgICAgICAgICAgICAgJy0tZW5kLWluc2VydD0jI1dESUZGX0VORCMjJywK
LSAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICBhY3R1YWxfZmlsZW5hbWVdCi0gICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYub3V0cHV0X2Zp
bGVuYW1lKGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdHlwZSAr
IHNlbGYuRklMRU5BTUVfU1VGRklYX1dESUZGKQotCi0gICAgICAgICAgICBnbG9iYWwgX3dkaWZm
X2F2YWlsYWJsZQotCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBQeXRob24n
cyBQb3BlbiBoYXMgYSBidWcgdGhhdCBjYXVzZXMgYW55IHBpcGVzIG9wZW5lZCB0byBhCi0gICAg
ICAgICAgICAgICAgIyBwcm9jZXNzIHRoYXQgY2FuJ3QgYmUgZXhlY3V0ZWQgdG8gYmUgbGVha2Vk
LiAgU2luY2UgdGhpcwotICAgICAgICAgICAgICAgICMgY29kZSBpcyBzcGVjaWZpY2FsbHkgZGVz
aWduZWQgdG8gdG9sZXJhdGUgZXhlYyBmYWlsdXJlcwotICAgICAgICAgICAgICAgICMgdG8gZ3Jh
Y2VmdWxseSBoYW5kbGUgY2FzZXMgd2hlcmUgd2RpZmYgaXMgbm90IGluc3RhbGxlZCwKLSAgICAg
ICAgICAgICAgICAjIHRoZSBidWcgcmVzdWx0cyBpbiBhIG1hc3NpdmUgZmlsZSBkZXNjcmlwdG9y
IGxlYWsuIEFzIGEKLSAgICAgICAgICAgICAgICAjIHdvcmthcm91bmQsIGlmIGFuIGV4ZWMgZmFp
bHVyZSBpcyBldmVyIGV4cGVyaWVuY2VkIGZvcgotICAgICAgICAgICAgICAgICMgd2RpZmYsIGFz
c3VtZSBpdCdzIG5vdCBhdmFpbGFibGUuICBUaGlzIHdpbGwgbGVhayBvbmUKLSAgICAgICAgICAg
ICAgICAjIGZpbGUgZGVzY3JpcHRvciBidXQgdGhhdCdzIGJldHRlciB0aGFuIGxlYWtpbmcgZWFj
aCB0aW1lCi0gICAgICAgICAgICAgICAgIyB3ZGlmZiB3b3VsZCBiZSBydW4uCi0gICAgICAgICAg
ICAgICAgIwotICAgICAgICAgICAgICAgICMgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1h
aWwvcHl0aG9uLWxpc3QvCi0gICAgICAgICAgICAgICAgIyAgICAyMDA4LUF1Z3VzdC81MDU3NTMu
aHRtbAotICAgICAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTMyMTAK
LSAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgIyBJdCBhbHNvIGhhcyBhIHRocmVh
ZGluZyBidWcsIHNvIHdlIGRvbid0IG91dHB1dCB3ZGlmZiBpZgotICAgICAgICAgICAgICAgICMg
dGhlIFBvcGVuIHJhaXNlcyBhIFZhbHVlRXJyb3IuCi0gICAgICAgICAgICAgICAgIyBodHRwOi8v
YnVncy5weXRob24ub3JnL2lzc3VlMTIzNgotICAgICAgICAgICAgICAgIGlmIF93ZGlmZl9hdmFp
bGFibGU6Ci0gICAgICAgICAgICAgICAgICAgIHdkaWZmID0gc3VicHJvY2Vzcy5Qb3BlbigKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVu
aWNhdGUoKVswXQotICAgICAgICAgICAgICAgICAgICB3ZGlmZl9mYWlsZWQgPSBGYWxzZQotCi0g
ICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgICAgICAgICBpZiAoZS5lcnJu
byA9PSBlcnJuby5FTk9FTlQgb3IgZS5lcnJubyA9PSBlcnJuby5FQUNDRVMgb3IKLSAgICAgICAg
ICAgICAgICAgICAgZS5lcnJubyA9PSBlcnJuby5FQ0hJTEQpOgotICAgICAgICAgICAgICAgICAg
ICBfd2RpZmZfYXZhaWxhYmxlID0gRmFsc2UKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgICAgICByYWlzZSBlCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToK
LSAgICAgICAgICAgICAgICB3ZGlmZl9mYWlsZWQgPSBUcnVlCi0KLSAgICAgICAgICAgIG91dCA9
IG9wZW4oZmlsZW5hbWUsICd3YicpCi0KLSAgICAgICAgICAgIGlmIG5vdCBfd2RpZmZfYXZhaWxh
YmxlOgotICAgICAgICAgICAgICAgIG91dC53cml0ZSgKLSAgICAgICAgICAgICAgICAgICAgIndk
aWZmIG5vdCBpbnN0YWxsZWQuPGJyLz4gIgotICAgICAgICAgICAgICAgICAgICAiSWYgeW91J3Jl
IHJ1bm5pbmcgT1MgWCwgeW91IGNhbiBpbnN0YWxsIHZpYSBtYWNwb3J0cy4iCi0gICAgICAgICAg
ICAgICAgICAgICI8YnIvPiIKLSAgICAgICAgICAgICAgICAgICAgIklmIHJ1bm5pbmcgVWJ1bnR1
IGxpbnV4LCB5b3UgY2FuIHJ1biAiCi0gICAgICAgICAgICAgICAgICAgICInc3VkbyBhcHQtZ2V0
IGluc3RhbGwgd2RpZmYnLiIpCi0gICAgICAgICAgICBlbGlmIHdkaWZmX2ZhaWxlZDoKLSAgICAg
ICAgICAgICAgICBvdXQud3JpdGUoJ3dkaWZmIGZhaWxlZCBkdWUgdG8gcnVubmluZyB3aXRoIG11
bHRpcGxlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Rfc2hlbGxzIGluIHBhcmFs
bGVsLicpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHdkaWZmID0gY2dpLmVz
Y2FwZSh3ZGlmZikKLSAgICAgICAgICAgICAgICB3ZGlmZiA9IHdkaWZmLnJlcGxhY2UoJyMjV0RJ
RkZfREVMIyMnLCAnPHNwYW4gY2xhc3M9ZGVsPicpCi0gICAgICAgICAgICAgICAgd2RpZmYgPSB3
ZGlmZi5yZXBsYWNlKCcjI1dESUZGX0FERCMjJywgJzxzcGFuIGNsYXNzPWFkZD4nKQotICAgICAg
ICAgICAgICAgIHdkaWZmID0gd2RpZmYucmVwbGFjZSgnIyNXRElGRl9FTkQjIycsICc8L3NwYW4+
JykKLSAgICAgICAgICAgICAgICBvdXQud3JpdGUoJzxoZWFkPjxzdHlsZT4uZGVsIHsgYmFja2dy
b3VuZDogI2ZhYTsgfSAnKQotICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLmFkZCB7IGJhY2tn
cm91bmQ6ICNhZmE7IH08L3N0eWxlPjwvaGVhZD4nKQotICAgICAgICAgICAgICAgIG91dC53cml0
ZSgnPHByZT4nICsgd2RpZmYgKyAnPC9wcmU+JykKLQotICAgICAgICAgICAgb3V0LmNsb3NlKCkK
KyAgICAgICAgICAgIHdkaWZmID0gcG9ydC53ZGlmZl90ZXh0KGV4cGVjdGVkX2ZpbGVuYW1lLCBh
Y3R1YWxfZmlsZW5hbWUpCisgICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVu
YW1lKGZpbGVuYW1lLCB0ZXN0X3R5cGUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLkZJTEVOQU1FX1NVRkZJWF9XRElGRikKKyAgICAgICAgICAgIG91
dCA9IG9wZW4oZmlsZW5hbWUsICd3YicpLndyaXRlKHdkaWZmKQpJbmRleDogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHkJKHJl
dmlzaW9uIDU0MzI4KQorKysgU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBl
cy90ZXh0X2RpZmYucHkJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKIGltcG9ydCBs
b2dnaW5nCiBpbXBvcnQgb3MucGF0aAogCi1mcm9tIHBvcnQgaW1wb3J0IHBhdGhfdXRpbHMKIGZy
b20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gdGVzdF90eXBlcyBp
bXBvcnQgdGVzdF90eXBlX2Jhc2UKIApAQCAtNjEsOCArNjAsOCBAQAogICAgICAgICAiIiJHaXZl
biB0aGUgZmlsZW5hbWUgb2YgdGhlIHRlc3QsIHJlYWQgdGhlIGV4cGVjdGVkIG91dHB1dCBmcm9t
IGEgZmlsZQogICAgICAgICBhbmQgbm9ybWFsaXplIHRoZSB0ZXh0LiAgUmV0dXJucyBhIHN0cmlu
ZyB3aXRoIHRoZSBleHBlY3RlZCB0ZXh0LCBvciAnJwogICAgICAgICBpZiB0aGUgZXhwZWN0ZWQg
b3V0cHV0IGZpbGUgd2FzIG5vdCBmb3VuZC4iIiIKLSAgICAgICAgIyBSZWFkIHRoZSBwbGF0Zm9y
bS1zcGVjaWZpYyBleHBlY3RlZCB0ZXh0LgotICAgICAgICBleHBlY3RlZF9maWxlbmFtZSA9IHBh
dGhfdXRpbHMuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcudHh0JykKKyAgICAgICAgIyBS
ZWFkIHRoZSBwb3J0LXNwZWNpZmljIGV4cGVjdGVkIHRleHQuCisgICAgICAgIGV4cGVjdGVkX2Zp
bGVuYW1lID0gc2VsZi5fcG9ydC5leHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwgJy50eHQnKQog
ICAgICAgICBpZiBzaG93X3NvdXJjZXM6CiAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCdVc2lu
ZyAlcycgJSBleHBlY3RlZF9maWxlbmFtZSkKIApAQCAtNzksNyArNzgsNyBAQAogICAgICAgICAj
IE5vcm1hbGl6ZSBsaW5lIGVuZGluZ3MKICAgICAgICAgcmV0dXJuIHRleHQuc3RyaXAoIlxyXG4i
KS5yZXBsYWNlKCJcclxuIiwgIlxuIikgKyAiXG4iCiAKLSAgICBkZWYgY29tcGFyZV9vdXRwdXQo
c2VsZiwgZmlsZW5hbWUsIHByb2MsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgorICAgIGRl
ZiBjb21wYXJlX291dHB1dChzZWxmLCBwb3J0LCBmaWxlbmFtZSwgb3V0cHV0LCB0ZXN0X2FyZ3Ms
IHRhcmdldCk6CiAgICAgICAgICIiIkltcGxlbWVudGF0aW9uIG9mIENvbXBhcmVPdXRwdXQgdGhh
dCBjaGVja3MgdGhlIG91dHB1dCB0ZXh0IGFnYWluc3QKICAgICAgICAgdGhlIGV4cGVjdGVkIHRl
eHQgZnJvbSB0aGUgTGF5b3V0VGVzdCBkaXJlY3RvcnkuIiIiCiAgICAgICAgIGZhaWx1cmVzID0g
W10KQEAgLTk1LDEwICs5NCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X2FyZ3Muc2hvd19zb3VyY2VzKQogCiAgICAgICAgICMg
V3JpdGUgb3V0cHV0IGZpbGVzIGZvciBuZXcgdGVzdHMsIHRvby4KLSAgICAgICAgaWYgb3V0cHV0
ICE9IGV4cGVjdGVkOgorICAgICAgICBpZiBwb3J0LmNvbXBhcmVfdGV4dChvdXRwdXQsIGV4cGVj
dGVkKToKICAgICAgICAgICAgICMgVGV4dCBkb2Vzbid0IG1hdGNoLCB3cml0ZSBvdXRwdXQgZmls
ZXMuCi0gICAgICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcyhmaWxlbmFtZSwgIiIsICIu
dHh0Iiwgb3V0cHV0LCBleHBlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRpZmY9VHJ1ZSwgd2RpZmY9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYud3JpdGVfb3V0cHV0
X2ZpbGVzKHBvcnQsIGZpbGVuYW1lLCAiIiwgIi50eHQiLCBvdXRwdXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgZGlmZj1UcnVlLCB3ZGlmZj1UcnVlKQog
CiAgICAgICAgICAgICBpZiBleHBlY3RlZCA9PSAnJzoKICAgICAgICAgICAgICAgICBmYWlsdXJl
cy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ1Jlc3VsdChzZWxmKSkKQEAgLTEw
Nyw3ICsxMDYsNyBAQAogCiAgICAgICAgIHJldHVybiBmYWlsdXJlcwogCi0gICAgZGVmIGRpZmZf
ZmlsZXMoc2VsZiwgZmlsZTEsIGZpbGUyKToKKyAgICBkZWYgZGlmZl9maWxlcyhzZWxmLCBwb3J0
LCBmaWxlMSwgZmlsZTIpOgogICAgICAgICAiIiJEaWZmIHR3byB0ZXh0IGZpbGVzLgogCiAgICAg
ICAgIEFyZ3M6CkBAIC0xMTgsNSArMTE3LDUgQEAKICAgICAgICAgICBGYWxzZSBvdGhlcndpc2Uu
CiAgICAgICAgICIiIgogCi0gICAgICAgIHJldHVybiAoc2VsZi5nZXRfbm9ybWFsaXplZF90ZXh0
KGZpbGUxKSAhPQotICAgICAgICAgICAgICAgIHNlbGYuZ2V0X25vcm1hbGl6ZWRfdGV4dChmaWxl
MikpCisgICAgICAgIHJldHVybiBwb3J0LmNvbXBhcmVfdGV4dChzZWxmLmdldF9ub3JtYWxpemVk
X3RleHQoZmlsZTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
Z2V0X25vcm1hbGl6ZWRfdGV4dChmaWxlMikpCkluZGV4OiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdlX2RpZmYucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9mdXp6eV9pbWFnZV9kaWZmLnB5
CShyZXZpc2lvbiA1NDMyOCkKKysrIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3Rf
dHlwZXMvZnV6enlfaW1hZ2VfZGlmZi5weQkod29ya2luZyBjb3B5KQpAQCAtMzUsMTYgKzM1LDE0
IEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3Vi
cHJvY2VzcwogCi1mcm9tIHBvcnQgaW1wb3J0IHBhdGhfdXRpbHMKIGZyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBl
X2Jhc2UKIAogCiBjbGFzcyBGdXp6eUltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJh
c2UpOgogCi0gICAgZGVmIGNvbXBhcmVfb3V0cHV0KHNlbGYsIGZpbGVuYW1lLCBwcm9jLCBvdXRw
dXQsIHRlc3RfYXJncywgdGFyZ2V0KToKKyAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgZmls
ZW5hbWUsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgogICAgICAgICAiIiJJbXBsZW1lbnRh
dGlvbiBvZiBDb21wYXJlT3V0cHV0IHRoYXQgY2hlY2tzIHRoZSBvdXRwdXQgaW1hZ2UgYW5kCiAg
ICAgICAgIGNoZWNrc3VtIGFnYWluc3QgdGhlIGV4cGVjdGVkIGZpbGVzIGZyb20gdGhlIExheW91
dFRlc3QgZGlyZWN0b3J5LgogICAgICAgICAiIiIKQEAgLTU0LDcgKzUyLDcgQEAKICAgICAgICAg
aWYgdGVzdF9hcmdzLmhhc2ggaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcwog
Ci0gICAgICAgIGV4cGVjdGVkX3BuZ19maWxlID0gcGF0aF91dGlscy5leHBlY3RlZF9maWxlbmFt
ZShmaWxlbmFtZSwgJy5wbmcnKQorICAgICAgICBleHBlY3RlZF9wbmdfZmlsZSA9IHNlbGYuX3Bv
cnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykKIAogICAgICAgICBpZiB0ZXN0
X2FyZ3Muc2hvd19zb3VyY2VzOgogICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnVXNpbmcgJXMn
ICUgZXhwZWN0ZWRfcG5nX2ZpbGUpCkBAIC02NCw4ICs2Miw3IEBACiAgICAgICAgICAgICBmYWls
dXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlKHNlbGYpKQogCiAg
ICAgICAgICMgUnVuIHRoZSBmdXp6eW1hdGNoZXIKLSAgICAgICAgciA9IHN1YnByb2Nlc3MuY2Fs
bChbcGF0aF91dGlscy5mdXp6eV9tYXRjaF9wYXRoKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdF9hcmdzLnBuZ19wYXRoLCBleHBlY3RlZF9wbmdfZmlsZV0pCisgICAgICAgIHIg
PSBwb3J0LmZ1enp5X2RpZmYodGVzdF9hcmdzLnBuZ19wYXRoLCBleHBlY3RlZF9wbmdfZmlsZSkK
ICAgICAgICAgaWYgciAhPSAwOgogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFp
bHVyZXMuRmFpbHVyZUZ1enp5RmFpbHVyZShzZWxmKSkKIApJbmRleDogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQkocmV2aXNpb24gMCkKKysrIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
MzkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgR29vZ2xl
IG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJBYnN0cmFjdCBiYXNl
IGNsYXNzIG9mIFBvcnQtc3BlY2lmaWMgZW50cnlwb2ludHMgZm9yIHRoZSBsYXlvdXQgdGVzdHMK
K3Rlc3QgaW5mcmFzdHJ1Y3R1cmUgKHRoZSBQb3J0IGFuZCBEcml2ZXIgY2xhc3NlcykuIiIiCisK
K2ltcG9ydCBjZ2kKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1w
b3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworaW1wb3J0IGFwYWNoZV9odHRwX3NlcnZlcgor
aW1wb3J0IGh0dHBfc2VydmVyCitpbXBvcnQgd2Vic29ja2V0X3NlcnZlcgorCisjIFB5dGhvbiBi
dWcgd29ya2Fyb3VuZC4gIFNlZSBQb3J0LndkaWZmX3RleHQoKSBmb3IgYW4gZXhwbGFuYXRpb24u
Citfd2RpZmZfYXZhaWxhYmxlID0gVHJ1ZQorCisKK2NsYXNzIFBvcnQob2JqZWN0KToKKyAgICAi
IiJBYnN0cmFjdCBjbGFzcyBmb3IgUG9ydC1zcGVjaWZpYyBob29rcyBmb3IgdGhlIGxheW91dF90
ZXN0IHBhY2thZ2UuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9uYW1l
PU5vbmUsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIHNlbGYuX25hbWUgPSBwb3J0X25hbWUKKyAg
ICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5faGVscGVyID0gTm9u
ZQorICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fd2Via2l0
X2Jhc2VfZGlyID0gTm9uZQorICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyID0gTm9uZQor
CisgICAgZGVmIGJhc2VsaW5lX3BhdGgoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgYWJz
b2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIHN0b3JlIG5ldyBiYXNlbGluZXMKKyAgICAg
ICAgaW4gZm9yIHRoaXMgcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cignUG9ydC5iYXNlbGluZV9wYXRoJykKKworICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChz
ZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBhYnNvbHV0ZSBwYXRocyB0byBkaXJl
Y3RvcmllcyB0byBzZWFyY2ggdW5kZXIgZm9yCisgICAgICAgIGJhc2VsaW5lcy4gVGhlIGRpcmVj
dG9yaWVzIGFyZSBzZWFyY2hlZCBpbiBvcmRlci4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcignUG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCcpCisKKyAgICBkZWYgY2hlY2tf
c3lzX2RlcHMoc2VsZik6CisgICAgICAgICIiIklmIHRoZSBwb3J0IG5lZWRzIHRvIGRvIHNvbWUg
cnVudGltZSBjaGVja3MgdG8gZW5zdXJlIHRoYXQgdGhlCisgICAgICAgIHRlc3RzIGNhbiBiZSBy
dW4gc3VjY2Vzc2Z1bGx5LCB0aGV5IHNob3VsZCBiZSBkb25lIGhlcmUuCisKKyAgICAgICAgUmV0
dXJucyB3aGV0aGVyIHRoZSBzeXN0ZW0gaXMgcHJvcGVybHkgY29uZmlndXJlZC4iIiIKKyAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5jaGVja19zeXNfZGVwcycpCisKKyAg
ICBkZWYgY29tcGFyZV90ZXh0KHNlbGYsIGFjdHVhbF90ZXh0LCBleHBlY3RlZF90ZXh0KToKKyAg
ICAgICAgIiIiUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSB0d28gc3RyaW5ncyBhcmUgKm5vdCog
ZXF1YWwuIFRoaXMKKyAgICAgICAgcm91dGluZSBpcyB1c2VkIHRvIGRpZmYgdGV4dCBvdXRwdXQu
CisKKyAgICAgICAgV2hpbGUgdGhpcyBpcyBhIGdlbmVyaWMgcm91dGluZSwgd2UgaW5jbHVkZSBp
dCBpbiB0aGUgUG9ydAorICAgICAgICBpbnRlcmZhY2Ugc28gdGhhdCBpdCBjYW4gYmUgb3ZlcnJp
ZGVuIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiIiIgorICAgICAgICByZXR1cm4gYWN0dWFsX3RleHQg
IT0gZXhwZWN0ZWRfdGV4dAorCisgICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgYWN0dWFsX2ZpbGVu
YW1lLCBleHBlY3RlZF9maWxlbmFtZSwgZGlmZl9maWxlbmFtZSk6CisgICAgICAgICIiIkNvbXBh
cmUgdHdvIGltYWdlIGZpbGVzIGFuZCBwcm9kdWNlIGEgZGVsdGEgaW1hZ2UgZmlsZS4KKworICAg
ICAgICBSZXR1cm4gMSBpZiB0aGUgdHdvIGZpbGVzIGFyZSBkaWZmZXJlbnQsIDAgaWYgdGhleSBh
cmUgdGhlIHNhbWUuCisgICAgICAgIEFsc28gcHJvZHVjZSBhIGRlbHRhIGltYWdlIG9mIHRoZSB0
d28gaW1hZ2VzIGFuZCB3cml0ZSB0aGF0IGludG8KKyAgICAgICAgfGRpZmZfZmlsZW5hbWV8Lgor
CisgICAgICAgIFdoaWxlIHRoaXMgaXMgYSBnZW5lcmljIHJvdXRpbmUsIHdlIGluY2x1ZGUgaXQg
aW4gdGhlIFBvcnQKKyAgICAgICAgaW50ZXJmYWNlIHNvIHRoYXQgaXQgY2FuIGJlIG92ZXJyaWRl
biBmb3IgdGVzdGluZyBwdXJwb3Nlcy4iIiIKKyAgICAgICAgZXhlY3V0YWJsZSA9IHNlbGYuX3Bh
dGhfdG9faW1hZ2VfZGlmZigpCisgICAgICAgIGNtZCA9IFtleGVjdXRhYmxlLCAnLS1kaWZmJywg
YWN0dWFsX2ZpbGVuYW1lLCBleHBlY3RlZF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgIGRpZmZf
ZmlsZW5hbWVdCisgICAgICAgIHJlc3VsdCA9IDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
cmVzdWx0ID0gc3VicHJvY2Vzcy5jYWxsKGNtZCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6
CisgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVCBvciBlLmVycm5vID09IGVy
cm5vLkVBQ0NFUzoKKyAgICAgICAgICAgICAgICBfY29tcGFyZV9hdmFpbGFibGUgPSBGYWxzZQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBlCisgICAgICAgIGV4Y2Vw
dCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgIyB3b3JrIGFyb3VuZCBhIHJhY2UgY29uZGl0aW9u
IGluIFB5dGhvbiAyLjQncyBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgIyBvZiBzdWJwcm9j
ZXNzLlBvcGVuCisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAg
IGRlZiBkaWZmX3RleHQoc2VsZiwgYWN0dWFsX3RleHQsIGV4cGVjdGVkX3RleHQsCisgICAgICAg
ICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lKToKKyAgICAgICAg
IiIiUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBkaWZmIG9mIHRoZSB0d28gdGV4dCBz
dHJpbmdzCisgICAgICAgIGluICd1bmlmaWVkIGRpZmYnIGZvcm1hdC4KKworICAgICAgICBXaGls
ZSB0aGlzIGlzIGEgZ2VuZXJpYyByb3V0aW5lLCB3ZSBpbmNsdWRlIGl0IGluIHRoZSBQb3J0Cisg
ICAgICAgIGludGVyZmFjZSBzbyB0aGF0IGl0IGNhbiBiZSBvdmVycmlkZW4gZm9yIHRlc3Rpbmcg
cHVycG9zZXMuIiIiCisgICAgICAgIGRpZmYgPSBkaWZmbGliLnVuaWZpZWRfZGlmZihleHBlY3Rl
ZF90ZXh0LnNwbGl0bGluZXMoVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhY3R1YWxfdGV4dC5zcGxpdGxpbmVzKFRydWUpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWUpCisgICAgICAgIHJldHVybiAnJy5qb2luKGRp
ZmYpCisKKyAgICBkZWYgZXhwZWN0ZWRfYmFzZWxpbmVzKHNlbGYsIGZpbGVuYW1lLCBzdWZmaXgs
IGFsbF9iYXNlbGluZXM9RmFsc2UpOgorICAgICAgICAiIiJHaXZlbiBhIHRlc3QgbmFtZSwgZmlu
ZHMgd2hlcmUgdGhlIGJhc2VsaW5lIHJlc3VsdHMgYXJlIGxvY2F0ZWQuCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgZmlsZW5hbWU6IGFic29sdXRlIGZpbGVuYW1lIHRvIHRlc3QgZmlsZQorICAg
ICAgICBzdWZmaXg6IGZpbGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1bHRzLCBpbmNsdWRp
bmcgZG90OyBlLmcuCisgICAgICAgICAgICAnLnR4dCcgb3IgJy5wbmcnLiAgVGhpcyBzaG91bGQg
bm90IGJlIE5vbmUsIGJ1dCBtYXkgYmUgYW4gZW1wdHkKKyAgICAgICAgICAgIHN0cmluZy4KKyAg
ICAgICAgYWxsX2Jhc2VsaW5lczogSWYgVHJ1ZSwgcmV0dXJuIGFuIG9yZGVyZWQgbGlzdCBvZiBh
bGwgYmFzZWxpbmUgcGF0aHMKKyAgICAgICAgICAgIGZvciB0aGUgZ2l2ZW4gcGxhdGZvcm0uIElm
IEZhbHNlLCByZXR1cm4gb25seSB0aGUgZmlyc3Qgb25lLgorICAgICAgICBSZXR1cm5zCisgICAg
ICAgIGEgbGlzdCBvZiAoIHBsYXRmb3JtX2RpciwgcmVzdWx0c19maWxlbmFtZSApLCB3aGVyZQor
ICAgICAgICAgICAgcGxhdGZvcm1fZGlyIC0gYWJzIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgcmVz
dWx0cyB0cmVlIChvciB0ZXN0CisgICAgICAgICAgICAgICAgdHJlZSkKKyAgICAgICAgICAgIHJl
c3VsdHNfZmlsZW5hbWUgLSByZWxhdGl2ZSBwYXRoIGZyb20gdG9wIG9mIHRyZWUgdG8gdGhlIHJl
c3VsdHMKKyAgICAgICAgICAgICAgICBmaWxlCisgICAgICAgICAgICAob3MucGF0aC5qb2luIG9m
IHRoZSB0d28gZ2l2ZXMgeW91IHRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUsCisgICAgICAgICAg
ICAgICAgdW5sZXNzIE5vbmUgd2FzIHJldHVybmVkLikKKyAgICAgICAgUmV0dXJuIHZhbHVlcyB3
aWxsIGJlIGluIHRoZSBmb3JtYXQgYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50CisgICAgICAg
IHBsYXRmb3JtIChlLmcuLCAiXFwiIGZvciBwYXRoIHNlcGFyYXRvcnMgb24gV2luZG93cykuIElm
IHRoZSByZXN1bHRzCisgICAgICAgIGZpbGUgaXMgbm90IGZvdW5kLCB0aGVuIE5vbmUgd2lsbCBi
ZSByZXR1cm5lZCBmb3IgdGhlIGRpcmVjdG9yeSwKKyAgICAgICAgYnV0IHRoZSBleHBlY3RlZCBy
ZWxhdGl2ZSBwYXRobmFtZSB3aWxsIHN0aWxsIGJlIHJldHVybmVkLgorCisgICAgICAgIFRoaXMg
cm91dGluZSBpcyBnZW5lcmljIGJ1dCBsaXZlcyBoZXJlIHNpbmNlIGl0IGlzIHVzZWQgaW4KKyAg
ICAgICAgY29uanVuY3Rpb24gd2l0aCB0aGUgb3RoZXIgYmFzZWxpbmUgYW5kIGZpbGVuYW1lIHJv
dXRpbmVzIHRoYXQgYXJlCisgICAgICAgIHBsYXRmb3JtIHNwZWNpZmljLgorICAgICAgICAiIiIK
KyAgICAgICAgdGVzdG5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KHNlbGYucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShmaWxlbmFtZSkpWzBdCisKKyAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUgPSB0ZXN0
bmFtZSArICctZXhwZWN0ZWQnICsgc3VmZml4CisKKyAgICAgICAgYmFzZWxpbmVfc2VhcmNoX3Bh
dGggPSBzZWxmLmJhc2VsaW5lX3NlYXJjaF9wYXRoKCkKKworICAgICAgICBiYXNlbGluZXMgPSBb
XQorICAgICAgICBmb3IgcGxhdGZvcm1fZGlyIGluIGJhc2VsaW5lX3NlYXJjaF9wYXRoOgorICAg
ICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBsYXRmb3JtX2RpciwgYmFz
ZWxpbmVfZmlsZW5hbWUpKToKKyAgICAgICAgICAgICAgICBiYXNlbGluZXMuYXBwZW5kKChwbGF0
Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSkKKworICAgICAgICAgICAgaWYgbm90IGFsbF9i
YXNlbGluZXMgYW5kIGJhc2VsaW5lczoKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVz
CisKKyAgICAgICAgIyBJZiBpdCB3YXNuJ3QgZm91bmQgaW4gYSBwbGF0Zm9ybSBkaXJlY3Rvcnks
IHJldHVybiB0aGUgZXhwZWN0ZWQKKyAgICAgICAgIyByZXN1bHQgaW4gdGhlIHRlc3QgZGlyZWN0
b3J5LCBldmVuIGlmIG5vIHN1Y2ggZmlsZSBhY3R1YWxseSBleGlzdHMuCisgICAgICAgIHBsYXRm
b3JtX2RpciA9IHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpCisgICAgICAgIGlmIG9zLnBhdGguZXhp
c3RzKG9zLnBhdGguam9pbihwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSk6CisgICAg
ICAgICAgICBiYXNlbGluZXMuYXBwZW5kKChwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1l
KSkKKworICAgICAgICBpZiBiYXNlbGluZXM6CisgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVz
CisKKyAgICAgICAgcmV0dXJuIFsoTm9uZSwgYmFzZWxpbmVfZmlsZW5hbWUpXQorCisgICAgZGVm
IGV4cGVjdGVkX2ZpbGVuYW1lKHNlbGYsIGZpbGVuYW1lLCBzdWZmaXgpOgorICAgICAgICAiIiJH
aXZlbiBhIHRlc3QgbmFtZSwgcmV0dXJucyBhbiBhYnNvbHV0ZSBwYXRoIHRvIGl0cyBleHBlY3Rl
ZCByZXN1bHRzLgorCisgICAgICAgIElmIG5vIGV4cGVjdGVkIHJlc3VsdHMgYXJlIGZvdW5kIGlu
IGFueSBvZiB0aGUgc2VhcmNoZWQgZGlyZWN0b3JpZXMsCisgICAgICAgIHRoZSBkaXJlY3Rvcnkg
aW4gd2hpY2ggdGhlIHRlc3QgaXRzZWxmIGlzIGxvY2F0ZWQgd2lsbCBiZSByZXR1cm5lZC4KKyAg
ICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBpbiB0aGUgZm9ybWF0IGFwcHJvcHJpYXRlIGZvciB0
aGUgcGxhdGZvcm0KKyAgICAgICAgKGUuZy4sICJcXCIgZm9yIHBhdGggc2VwYXJhdG9ycyBvbiB3
aW5kb3dzKS4KKworICAgICAgICBBcmdzOgorICAgICAgICBmaWxlbmFtZTogYWJzb2x1dGUgZmls
ZW5hbWUgdG8gdGVzdCBmaWxlCisgICAgICAgIHN1ZmZpeDogZmlsZSBzdWZmaXggb2YgdGhlIGV4
cGVjdGVkIHJlc3VsdHMsIGluY2x1ZGluZyBkb3Q7IGUuZy4gJy50eHQnCisgICAgICAgICAgICBv
ciAnLnBuZycuICBUaGlzIHNob3VsZCBub3QgYmUgTm9uZSwgYnV0IG1heSBiZSBhbiBlbXB0eSBz
dHJpbmcuCisgICAgICAgIHBsYXRmb3JtOiB0aGUgbW9zdC1zcGVjaWZpYyBkaXJlY3RvcnkgbmFt
ZSB0byB1c2UgdG8gYnVpbGQgdGhlCisgICAgICAgICAgICBzZWFyY2ggbGlzdCBvZiBkaXJlY3Rv
cmllcywgZS5nLiwgJ2Nocm9taXVtLXdpbicsIG9yCisgICAgICAgICAgICAnY2hyb21pdW0tbWFj
LWxlb3BhcmQnICh3ZSBmb2xsb3cgdGhlIFdlYktpdCBmb3JtYXQpCisKKyAgICAgICAgVGhpcyBy
b3V0aW5lIGlzIGdlbmVyaWMgYnV0IGlzIGltcGxlbWVudGVkIGhlcmUgdG8gbGl2ZSBhbG9uZ3Np
ZGUKKyAgICAgICAgdGhlIG90aGVyIGJhc2VsaW5lIGFuZCBmaWxlbmFtZSBtYW5pcHVsYXRpb24g
cm91dGluZXMuCisgICAgICAgICIiIgorICAgICAgICBwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2Zp
bGVuYW1lID0gc2VsZi5leHBlY3RlZF9iYXNlbGluZXMoCisgICAgICAgICAgICBmaWxlbmFtZSwg
c3VmZml4KVswXQorICAgICAgICBpZiBwbGF0Zm9ybV9kaXI6CisgICAgICAgICAgICByZXR1cm4g
b3MucGF0aC5qb2luKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpCisgICAgICAgIHJl
dHVybiBvcy5wYXRoLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksIGJhc2VsaW5lX2ZpbGVu
YW1lKQorCisgICAgZGVmIGZpbGVuYW1lX3RvX3VyaShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAg
ICIiIkNvbnZlcnQgYSB0ZXN0IGZpbGUgdG8gYSBVUkkuIiIiCisgICAgICAgIExBWU9VVFRFU1Rf
SFRUUF9ESVIgPSAiaHR0cC90ZXN0cy8iCisgICAgICAgIExBWU9VVFRFU1RfV0VCU09DS0VUX0RJ
UiA9ICJ3ZWJzb2NrZXQvdGVzdHMvIgorCisgICAgICAgIHJlbGF0aXZlX3BhdGggPSBzZWxmLnJl
bGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpCisgICAgICAgIHBvcnQgPSBOb25lCisgICAg
ICAgIHVzZV9zc2wgPSBGYWxzZQorCisgICAgICAgIGlmIHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0
aChMQVlPVVRURVNUX0hUVFBfRElSKToKKyAgICAgICAgICAgICMgaHR0cC90ZXN0cy8gcnVuIG9m
ZiBwb3J0IDgwMDAgYW5kIHNzbC8gb2ZmIDg0NDMKKyAgICAgICAgICAgIHJlbGF0aXZlX3BhdGgg
PSByZWxhdGl2ZV9wYXRoW2xlbihMQVlPVVRURVNUX0hUVFBfRElSKTpdCisgICAgICAgICAgICBw
b3J0ID0gODAwMAorICAgICAgICBlbGlmIHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0aChMQVlPVVRU
RVNUX1dFQlNPQ0tFVF9ESVIpOgorICAgICAgICAgICAgIyB3ZWJzb2NrZXQvdGVzdHMvIHJ1biBv
ZmYgcG9ydCA4ODgwIGFuZCA5MzIzCisgICAgICAgICAgICAjIE5vdGU6IHRoZSByb290IGlzIC8s
IG5vdCB3ZWJzb2NrZXQvdGVzdHMvCisgICAgICAgICAgICBwb3J0ID0gODg4MAorCisgICAgICAg
ICMgTWFrZSBodHRwL3Rlc3RzL2xvY2FsIHJ1biBhcyBsb2NhbCBmaWxlcy4gVGhpcyBpcyB0byBt
aW1pYyB0aGUKKyAgICAgICAgIyBsb2dpYyBpbiBydW4td2Via2l0LXRlc3RzLgorICAgICAgICAj
CisgICAgICAgICMgVE9ETyhkcHJhbmtlKTogcmVtb3ZlIHRoZSBtZWRpYSByZWZlcmVuY2UgYW5k
IHRoZSBTU0wgcmVmZXJlbmNlPworICAgICAgICBpZiAocG9ydCBhbmQgbm90IHJlbGF0aXZlX3Bh
dGguc3RhcnRzd2l0aCgibG9jYWwvIikgYW5kCisgICAgICAgICAgICBub3QgcmVsYXRpdmVfcGF0
aC5zdGFydHN3aXRoKCJtZWRpYS8iKSk6CisgICAgICAgICAgICBpZiByZWxhdGl2ZV9wYXRoLnN0
YXJ0c3dpdGgoInNzbC8iKToKKyAgICAgICAgICAgICAgICBwb3J0ICs9IDQ0MworICAgICAgICAg
ICAgICAgIHByb3RvY29sID0gImh0dHBzIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBwcm90b2NvbCA9ICJodHRwIgorICAgICAgICAgICAgcmV0dXJuICIlczovLzEyNy4wLjAu
MToldS8lcyIgJSAocHJvdG9jb2wsIHBvcnQsIHJlbGF0aXZlX3BhdGgpCisKKyAgICAgICAgaWYg
c3lzLnBsYXRmb3JtIGluICgnY3lnd2luJywgJ3dpbjMyJyk6CisgICAgICAgICAgICByZXR1cm4g
ImZpbGU6Ly8vIiArIHNlbGYuZ2V0X2Fic29sdXRlX3BhdGgoZmlsZW5hbWUpCisgICAgICAgIHJl
dHVybiAiZmlsZTovLyIgKyBzZWxmLmdldF9hYnNvbHV0ZV9wYXRoKGZpbGVuYW1lKQorCisgICAg
ZGVmIGdldF9hYnNvbHV0ZV9wYXRoKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiUmV0dXJu
IHRoZSBhYnNvbHV0ZSBwYXRoIGluIHVuaXggZm9ybWF0IGZvciB0aGUgZ2l2ZW4gZmlsZW5hbWUu
CisKKyAgICAgICAgVGhpcyByb3V0aW5lIGV4aXN0cyBzbyB0aGF0IHBsYXRmb3JtcyB0aGF0IGRv
bid0IHVzZSB1bml4IGZpbGVuYW1lcworICAgICAgICBjYW4gY29udmVydCBhY2NvcmRpbmdseS4i
IiIKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkKKworICAgIGRlZiBs
YXlvdXRfdGVzdHNfZGlyKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIHBh
dGggdG8gdGhlIHRvcCBvZiB0aGUgTGF5b3V0VGVzdHMgZGlyZWN0b3J5LiIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ0xheW91dFRlc3RzJykKKworICAgIGRl
ZiBtYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLCAqcGF0aCk6CisgICAgICAgICIiIkNyZWF0ZXMg
dGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LiIiIgor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4oKnBhdGgp
KQorICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0g
ZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgbmFtZShzZWxm
KToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBwb3J0IChlLmcuLCAnbWFjJywg
J2Nocm9taXVtLXdpbi14cCcpLgorCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVu
dCBmcm9tIHRoZSB0ZXN0X3BsYXRmb3JtX25hbWUoKSwgd2hpY2gKKyAgICAgICAgbWF5IGJlIGRp
ZmZlcmVudCAoZS5nLiwgJ3dpbi14cCcgaW5zdGVhZCBvZiAnY2hyb21pdW0td2luLXhwJy4iIiIK
KyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBudW1fY29yZXMoc2VsZik6Cisg
ICAgICAgICIiIlJldHVybiB0aGUgbnVtYmVyIG9mIGNvcmVzL2NwdXMgYXZhaWxhYmxlIG9uIHRo
aXMgbWFjaGluZS4KKworICAgICAgICBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBkZXRlcm1pbmUg
dGhlIGRlZmF1bHQgYW1vdW50IG9mIHBhcmFsbGVsaXNtCisgICAgICAgIHVzZWQgYnkgcnVuLWNo
cm9taXVtLXdlYmtpdC10ZXN0cy4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cignUG9ydC5udW1fY29yZXMnKQorCisgICAgZGVmIHBhdGhfZnJvbV93ZWJraXRfYmFzZShzZWxm
LCAqY29tcHMpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gcGF0aCBtYWRl
IGJ5IGpvaW5pbmcgdGhlIHRvcCBvZiB0aGUKKyAgICAgICAgV2ViS2l0IHNvdXJjZSB0cmVlIGFu
ZCB0aGUgbGlzdCBvZiBwYXRoIGNvbXBvbmVudHMgaW4gfCpjb21wc3wuIiIiCisgICAgICAgIGlm
IG5vdCBzZWxmLl93ZWJraXRfYmFzZV9kaXI6CisgICAgICAgICAgICBhYnNwYXRoID0gb3MucGF0
aC5hYnNwYXRoKF9fZmlsZV9fKQorICAgICAgICAgICAgc2VsZi5fd2Via2l0X2Jhc2VfZGlyID0g
YWJzcGF0aFswOmFic3BhdGguZmluZCgnV2ViS2l0VG9vbHMnKV0KKyAgICAgICAgcmV0dXJuIG9z
LnBhdGguam9pbihzZWxmLl93ZWJraXRfYmFzZV9kaXIsICpjb21wcykKKworICAgIGRlZiByZW1v
dmVfZGlyZWN0b3J5KHNlbGYsICpwYXRoKToKKyAgICAgICAgIiIiUmVjdXJzaXZlbHkgcmVtb3Zl
cyBhIGRpcmVjdG9yeSwgZXZlbiBpZiBpdCdzIG1hcmtlZCByZWFkLW9ubHkuCisKKyAgICAgICAg
UmVtb3ZlIHRoZSBkaXJlY3RvcnkgbG9jYXRlZCBhdCAqcGF0aCwgaWYgaXQgZXhpc3RzLgorCisg
ICAgICAgIHNodXRpbC5ybXRyZWUoKSBkb2Vzbid0IHdvcmsgb24gV2luZG93cyBpZiBhbnkgb2Yg
dGhlIGZpbGVzCisgICAgICAgIG9yIGRpcmVjdG9yaWVzIGFyZSByZWFkLW9ubHksIHdoaWNoIHN2
biByZXBvc2l0b3JpZXMgYW5kCisgICAgICAgIHNvbWUgLnN2biBmaWxlcyBhcmUuICBXZSBuZWVk
IHRvIGJlIGFibGUgdG8gZm9yY2UgdGhlIGZpbGVzCisgICAgICAgIHRvIGJlIHdyaXRhYmxlIChp
LmUuLCBkZWxldGFibGUpIGFzIHdlIHRyYXZlcnNlIHRoZSB0cmVlLgorCisgICAgICAgIEV2ZW4g
d2l0aCBhbGwgdGhpcywgV2luZG93cyBzdGlsbCBzb21ldGltZXMgZmFpbHMgdG8gZGVsZXRlIGEg
ZmlsZSwKKyAgICAgICAgY2l0aW5nIGEgcGVybWlzc2lvbiBlcnJvciAobWF5YmUgc29tZXRoaW5n
IHRvIGRvIHdpdGggYW50aXZpcnVzCisgICAgICAgIHNjYW5zIG9yIGRpc2sgaW5kZXhpbmcpLiAg
VGhlIGJlc3Qgc3VnZ2VzdGlvbiBhbnkgb2YgdGhlIHVzZXIKKyAgICAgICAgZm9ydW1zIGhhZCB3
YXMgdG8gd2FpdCBhIGJpdCBhbmQgdHJ5IGFnYWluLCBzbyB3ZSBkbyB0aGF0IHRvby4KKyAgICAg
ICAgSXQncyBoYW5kLXdhdmluZywgYnV0IHNvbWV0aW1lcyBpdCB3b3Jrcy4gOi8KKyAgICAgICAg
IiIiCisgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbigqcGF0aCkKKyAgICAgICAgaWYg
bm90IG9zLnBhdGguZXhpc3RzKGZpbGVfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKworICAg
ICAgICB3aW4zMiA9IEZhbHNlCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgor
ICAgICAgICAgICAgd2luMzIgPSBUcnVlCisgICAgICAgICAgICAjIFNvbWUgcGVvcGxlIGRvbid0
IGhhdmUgdGhlIEFQSXMgaW5zdGFsbGVkLiBJbiB0aGF0IGNhc2Ugd2UnbGwgZG8KKyAgICAgICAg
ICAgICMgd2l0aG91dC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aW4zMmFw
aSA9IF9faW1wb3J0X18oJ3dpbjMyYXBpJykKKyAgICAgICAgICAgICAgICB3aW4zMmNvbiA9IF9f
aW1wb3J0X18oJ3dpbjMyY29uJykKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAg
ICAgICAgICAgICAgICB3aW4zMiA9IEZhbHNlCisKKyAgICAgICAgICAgIGRlZiByZW1vdmVfd2l0
aF9yZXRyeShybWZ1bmMsIHBhdGgpOgorICAgICAgICAgICAgICAgIG9zLmNobW9kKHBhdGgsIHN0
YXQuU19JV1JJVEUpCisgICAgICAgICAgICAgICAgaWYgd2luMzI6CisgICAgICAgICAgICAgICAg
ICAgIHdpbjMyYXBpLlNldEZpbGVBdHRyaWJ1dGVzKHBhdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luMzJjb24uRklMRV9BVFRSSUJVVEVfTk9STUFM
KQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJtZnVu
YyhwYXRoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yLCBlOgorICAg
ICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVBQ0NFUzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIHByaW50ICdGYWlsZWQgdG8g
ZGVsZXRlICVzOiB0cnlpbmcgYWdhaW4nICUgcmVwcihwYXRoKQorICAgICAgICAgICAgICAgICAg
ICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJtZnVuYyhwYXRo
KQorICAgICAgICBlbHNlOgorCisgICAgICAgICAgICBkZWYgcmVtb3ZlX3dpdGhfcmV0cnkocm1m
dW5jLCBwYXRoKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG9zLnJlbW92ZShwYXRoKQorICAgICAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBybWZ1bmMocGF0aCkKKworICAgICAg
ICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhmaWxlX3BhdGgsIHRvcGRvd249RmFs
c2UpOgorICAgICAgICAgICAgIyBGb3IgUE9TSVg6ICBtYWtpbmcgdGhlIGRpcmVjdG9yeSB3cml0
YWJsZSBndWFyYW50ZWVzCisgICAgICAgICAgICAjIHJlbW92YWJpbGl0eS4gV2luZG93cyB3aWxs
IGlnbm9yZSB0aGUgbm9uLXJlYWQtb25seQorICAgICAgICAgICAgIyBiaXRzIGluIHRoZSBjaG1v
ZCB2YWx1ZS4KKyAgICAgICAgICAgIG9zLmNobW9kKHJvb3QsIDA3NzApCisgICAgICAgICAgICBm
b3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICByZW1vdmVfd2l0aF9yZXRyeShvcy5y
ZW1vdmUsIG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKKyAgICAgICAgICAgIGZvciBuYW1lIGlu
IGRpcnM6CisgICAgICAgICAgICAgICAgcmVtb3ZlX3dpdGhfcmV0cnkob3Mucm1kaXIsIG9zLnBh
dGguam9pbihyb290LCBuYW1lKSkKKworICAgICAgICByZW1vdmVfd2l0aF9yZXRyeShvcy5ybWRp
ciwgZmlsZV9wYXRoKQorCisgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiByZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHNl
bGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiUmVsYXRpdmUgdW5peC1zdHlsZSBwYXRoIGZvciBh
IGZpbGVuYW1lIHVuZGVyIHRoZSBMYXlvdXRUZXN0cworICAgICAgICBkaXJlY3RvcnkuIEZpbGVu
YW1lcyBvdXRzaWRlIHRoZSBMYXlvdXRUZXN0cyBkaXJlY3Rvcnkgc2hvdWxkIHJhaXNlCisgICAg
ICAgIGFuIGVycm9yLiIiIgorICAgICAgICByZXR1cm4gZmlsZW5hbWVbbGVuKHNlbGYubGF5b3V0
X3Rlc3RzX2RpcigpKSArIDE6XQorCisgICAgZGVmIHJlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgor
ICAgICAgICAiIiJBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwbGFjZSB0byBzdG9yZSB0aGUgdGVzdCBy
ZXN1bHRzLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZCgnUG9ydC5yZXN1bHRzX2Rp
cmVjdG9yeScpCisKKyAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2VsZik6CisgICAgICAgICIiIlRo
aXMgcm91dGluZSBjYW4gYmUgb3ZlcnJpZGRlbiB0byBwZXJmb3JtIGFueSBwb3J0LXNwZWNpZmlj
CisgICAgICAgIHdvcmsgdGhhdCBzaG91dWxkIGJlIGRvbmUgYXQgdGhlIGJlZ2lubmluZyBvZiBh
IHRlc3QgcnVuLiIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2hvd19odG1sX3Jlc3VsdHNf
ZmlsZShzZWxmLCByZXN1bHRzX2ZpbGVuYW1lKToKKyAgICAgICAgIiIiVGhpcyByb3V0aW5lIHNo
b3VsZCBkaXNwbGF5IHRoZSBIVE1MIGZpbGUgcG9pbnRlZCBhdCBieQorICAgICAgICByZXN1bHRz
X2ZpbGVuYW1lIGluIGEgdXNlcnMnIGJyb3dzZXIuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IoJ1BvcnQuc2hvd19odG1sX3Jlc3VsdHNfZmlsZScpCisKKyAgICBkZWYgc3Rh
cnRfZHJpdmVyKHNlbGYsIHBuZ19wYXRoLCBvcHRpb25zKToKKyAgICAgICAgIiIiU3RhcnRzIGEg
bmV3IHRlc3QgRHJpdmVyIGFuZCByZXR1cm5zIGEgaGFuZGxlIHRvIHRoZSBvYmplY3QuIiIiCisg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQuc3RhcnRfZHJpdmVyJykKKwor
ICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZik6CisgICAgICAgICIiIlN0YXJ0IGEgbGF5b3V0IHRl
c3QgaGVscGVyIGlmIG5lZWRlZCBvbiB0aGlzIHBvcnQuIFRoZSB0ZXN0IGhlbHBlcgorICAgICAg
ICBpcyB1c2VkIHRvIHJlY29uZmlndXJlIGdyYXBoaWNzIHNldHRpbmdzIGFuZCBkbyBvdGhlciB0
aGluZ3MgdGhhdAorICAgICAgICBtYXkgYmUgbmVjZXNzYXJ5IHRvIGVuc3VyZSBhIGtub3duIHRl
c3QgY29uZmlndXJhdGlvbi4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcign
UG9ydC5zdGFydF9oZWxwZXInKQorCisgICAgZGVmIHN0YXJ0X2h0dHBfc2VydmVyKHNlbGYpOgor
ICAgICAgICAiIiJTdGFydCBhIHdlYiBzZXJ2ZXIgaWYgaXQgaXMgYXZhaWxhYmxlLiBEbyBub3Ro
aW5nIGlmCisgICAgICAgIGl0IGlzbid0LiBUaGlzIHJvdXRpbmUgaXMgYWxsb3dlZCB0byAoYW5k
IG1heSkgZmFpbCBpZiBhIHNlcnZlcgorICAgICAgICBpcyBhbHJlYWR5IHJ1bm5pbmcuIiIiCisg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMudXNlX2FwYWNoZToKKyAgICAgICAgICAgIHNlbGYuX2h0
dHBfc2VydmVyID0gYXBhY2hlX2h0dHBfc2VydmVyLkxheW91dFRlc3RBcGFjaGVIdHRwZChzZWxm
LAorICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9IGh0dHBfc2VydmVyLkxp
Z2h0dHBkKHNlbGYsCisgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVj
dG9yeSkKKyAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIuc3RhcnQoKQorCisgICAgZGVmIHN0YXJ0
X3dlYnNvY2tldF9zZXJ2ZXIoc2VsZik6CisgICAgICAgICIiIlN0YXJ0IGEgd2Vic29ja2V0IHNl
cnZlciBpZiBpdCBpcyBhdmFpbGFibGUuIERvIG5vdGhpbmcgaWYKKyAgICAgICAgaXQgaXNuJ3Qu
IFRoaXMgcm91dGluZSBpcyBhbGxvd2VkIHRvIChhbmQgbWF5KSBmYWlsIGlmIGEgc2VydmVyCisg
ICAgICAgIGlzIGFscmVhZHkgcnVubmluZy4iIiIKKyAgICAgICAgc2VsZi5fd2Vic29ja2V0X3Nl
cnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoc2VsZiwKKyAgICAgICAgICAgIHNl
bGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAgICAgIHNlbGYuX3dlYnNvY2tldF9z
ZXJ2ZXIuc3RhcnQoKQorCisgICAgZGVmIHN0b3BfaGVscGVyKHNlbGYpOgorICAgICAgICAiIiJT
aHV0IGRvd24gdGhlIHRlc3QgaGVscGVyIGlmIGl0IGlzIHJ1bm5pbmcuIERvIG5vdGhpbmcgaWYK
KyAgICAgICAgaXQgaXNuJ3QsIG9yIGl0IGlzbid0IGF2YWlsYWJsZS4iIiIKKyAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5zdG9wX2hlbHBlcicpCisKKyAgICBkZWYgc3Rv
cF9odHRwX3NlcnZlcihzZWxmKToKKyAgICAgICAgIiIiU2h1dCBkb3duIHRoZSBodHRwIHNlcnZl
ciBpZiBpdCBpcyBydW5uaW5nLiBEbyBub3RoaW5nIGlmCisgICAgICAgIGl0IGlzbid0LCBvciBp
dCBpc24ndCBhdmFpbGFibGUuIiIiCisgICAgICAgIGlmIHNlbGYuX2h0dHBfc2VydmVyOgorICAg
ICAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgc3RvcF93ZWJzb2Nr
ZXRfc2VydmVyKHNlbGYpOgorICAgICAgICAiIiJTaHV0IGRvd24gdGhlIHdlYnNvY2tldCBzZXJ2
ZXIgaWYgaXQgaXMgcnVubmluZy4gRG8gbm90aGluZyBpZgorICAgICAgICBpdCBpc24ndCwgb3Ig
aXQgaXNuJ3QgYXZhaWxhYmxlLiIiIgorICAgICAgICBpZiBzZWxmLl93ZWJzb2NrZXRfc2VydmVy
OgorICAgICAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlci5zdG9wKCkKKworICAgIGRlZiB0
ZXN0X2V4cGVjdGF0aW9ucyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgdGVzdCBleHBl
Y3RhdGlvbnMgZm9yIHRoaXMgcG9ydC4KKworICAgICAgICBCYXNpY2FsbHkgdGhpcyBzdHJpbmcg
c2hvdWxkIGNvbnRhaW4gdGhlIGVxdWl2YWxlbnQgb2YgYQorICAgICAgICB0ZXN0X2V4cGVjdGF0
aW9ucyBmaWxlLiBTZWUgdGVzdF9leHBlY3RhdGlvbnMucHkgZm9yIG1vcmUgZGV0YWlscy4iIiIK
KyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC50ZXN0X2V4cGVjdGF0aW9u
cycpCisKKyAgICBkZWYgdGVzdF9iYXNlX3BsYXRmb3JtX25hbWVzKHNlbGYpOgorICAgICAgICAi
IiJSZXR1cm4gYSBsaXN0IG9mIHRoZSAnYmFzZScgcGxhdGZvcm1zIG9uIHlvdXIgcG9ydC4gVGhl
IGJhc2UKKyAgICAgICAgcGxhdGZvcm1zIHJlcHJlc2VudCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJl
cywgb3BlcmF0aW5nIHN5c3RlbXMsCisgICAgICAgIG9yIGltcGxlbWVudGF0aW9ucyAoYXMgb3Bw
b3NlZCB0byBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgYSBzaW5nbGUKKyAgICAgICAgcGxhdGZvcm0p
LiBGb3IgZXhhbXBsZSwgJ21hYycgYW5kICd3aW4nIG1pZ2h0IGJlIGRpZmZlcmVudCBiYXNlCisg
ICAgICAgIHBsYXRmb3Jtcywgd2hlcmVhc2UgJ21hYy10aWdlcicgYW5kICdtYWMtbGVvcGFyZCcg
bWlnaHQgYmUKKyAgICAgICAgZGlmZmVyZW50IHBsYXRmb3Jtcy4gVGhpcyByb3V0aW5lIGlzIHVz
ZWQgYnkgdGhlIHJlYmFzZWxpbmluZyB0b29sCisgICAgICAgIGFuZCB0aGUgZGFzaGJvYXJkcywg
YW5kIHRoZSBzdHJpbmdzIGNvcnJlc3BvbmQgdG8gdGhlIGlkZW50aWZpZXJzCisgICAgICAgIGlu
IHlvdXIgdGVzdCBleHBlY3RhdGlvbnMgKCpub3QqIG5lY2Vzc2FyaWx5IHRoZSBwbGF0Zm9ybSBu
YW1lcworICAgICAgICB0aGVtc2VsdmVzKS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcignUG9ydC5iYXNlX3Rlc3RfcGxhdGZvcm1zJykKKworICAgIGRlZiB0ZXN0X3BsYXRm
b3JtX25hbWUoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIHN0cmluZyB0aGF0IGNvcnJl
c3BvbmRzIHRvIHRoZSBnaXZlbiBwbGF0Zm9ybSBuYW1lCisgICAgICAgIGluIHRoZSB0ZXN0IGV4
cGVjdGF0aW9ucy4gVGhpcyBtYXkgYmUgdGhlIHNhbWUgYXMgbmFtZSgpLCBvciBpdAorICAgICAg
ICBtYXkgYmUgZGlmZmVyZW50LiBGb3IgZXhhbXBsZSwgY2hyb21pdW0gcmV0dXJucyAnbWFjJyBm
b3IKKyAgICAgICAgJ2Nocm9taXVtLW1hYycuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IoJ1BvcnQudGVzdF9wbGF0Zm9ybV9uYW1lJykKKworICAgIGRlZiB0ZXN0X3BsYXRm
b3JtcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiB0ZXN0IHBsYXRmb3Jt
IGlkZW50aWZpZXJzIGFzIHVzZWQgaW4gdGhlCisgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zIGFu
ZCBvbiBkYXNoYm9hcmRzLCB0aGUgcmViYXNlbGluaW5nIHRvb2wsIGV0Yy4KKworICAgICAgICBO
b3RlIHRoYXQgdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIGxpc3Qgb2Yg
cG9ydHMsCisgICAgICAgIHdoaWNoIG11c3QgYmUgZ2xvYmFsbHkgdW5pcXVlIChlLmcuLCBib3Ro
ICdjaHJvbWl1bS1tYWMnIGFuZCAnbWFjJworICAgICAgICBtaWdodCByZXR1cm4gJ21hYycgYXMg
YSB0ZXN0X3BsYXRmb3JtIG5hbWUnLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yKCdQb3J0LnBsYXRmb3JtcycpCisKKyAgICBkZWYgdmVyc2lvbihzZWxmKToKKyAgICAgICAg
IiIiUmV0dXJucyBhIHN0cmluZyBpbmRpY2F0aW5nIHRoZSB2ZXJzaW9uIG9mIGEgZ2l2ZW4gcGxh
dGZvcm0sIGUuZy4KKyAgICAgICAgJy1sZW9wYXJkJyBvciAnLXhwJy4KKworICAgICAgICBUaGlz
IGlzIHVzZWQgdG8gaGVscCBpZGVudGlmeSB0aGUgZXhhY3QgcG9ydCB3aGVuIHBhcnNpbmcgdGVz
dAorICAgICAgICBleHBlY3RhdGlvbnMsIGRldGVybWluaW5nIHNlYXJjaCBwYXRocywgYW5kIGxv
Z2dpbmcgaW5mb3JtYXRpb24uIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3Io
J1BvcnQudmVyc2lvbicpCisKKyAgICBkZWYgd2RpZmZfdGV4dChzZWxmLCBhY3R1YWxfZmlsZW5h
bWUsIGV4cGVjdGVkX2ZpbGVuYW1lKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHN0cmluZyBvZiBI
VE1MIGluZGljYXRpbmcgdGhlIHdvcmQtbGV2ZWwgZGlmZiBvZiB0aGUKKyAgICAgICAgY29udGVu
dHMgb2YgdGhlIHR3byBmaWxlbmFtZXMuIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmIHdvcmQt
bGV2ZWwKKyAgICAgICAgZGlmZmluZyBpc24ndCBhdmFpbGFibGUuIiIiCisgICAgICAgIGV4ZWN1
dGFibGUgPSBzZWxmLl9wYXRoX3RvX3dkaWZmKCkKKyAgICAgICAgY21kID0gW2V4ZWN1dGFibGUs
CisgICAgICAgICAgICAgICAnLS1zdGFydC1kZWxldGU9IyNXRElGRl9ERUwjIycsCisgICAgICAg
ICAgICAgICAnLS1lbmQtZGVsZXRlPSMjV0RJRkZfRU5EIyMnLAorICAgICAgICAgICAgICAgJy0t
c3RhcnQtaW5zZXJ0PSMjV0RJRkZfQUREIyMnLAorICAgICAgICAgICAgICAgJy0tZW5kLWluc2Vy
dD0jI1dESUZGX0VORCMjJywKKyAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1lLAorICAg
ICAgICAgICAgICAgYWN0dWFsX2ZpbGVuYW1lXQorICAgICAgICBnbG9iYWwgX3dkaWZmX2F2YWls
YWJsZQorICAgICAgICByZXN1bHQgPSAnJworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFB5
dGhvbidzIFBvcGVuIGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBhbnkgcGlwZXMgb3BlbmVkIHRvIGEK
KyAgICAgICAgICAgICMgcHJvY2VzcyB0aGF0IGNhbid0IGJlIGV4ZWN1dGVkIHRvIGJlIGxlYWtl
ZC4gIFNpbmNlIHRoaXMKKyAgICAgICAgICAgICMgY29kZSBpcyBzcGVjaWZpY2FsbHkgZGVzaWdu
ZWQgdG8gdG9sZXJhdGUgZXhlYyBmYWlsdXJlcworICAgICAgICAgICAgIyB0byBncmFjZWZ1bGx5
IGhhbmRsZSBjYXNlcyB3aGVyZSB3ZGlmZiBpcyBub3QgaW5zdGFsbGVkLAorICAgICAgICAgICAg
IyB0aGUgYnVnIHJlc3VsdHMgaW4gYSBtYXNzaXZlIGZpbGUgZGVzY3JpcHRvciBsZWFrLiBBcyBh
CisgICAgICAgICAgICAjIHdvcmthcm91bmQsIGlmIGFuIGV4ZWMgZmFpbHVyZSBpcyBldmVyIGV4
cGVyaWVuY2VkIGZvcgorICAgICAgICAgICAgIyB3ZGlmZiwgYXNzdW1lIGl0J3Mgbm90IGF2YWls
YWJsZS4gIFRoaXMgd2lsbCBsZWFrIG9uZQorICAgICAgICAgICAgIyBmaWxlIGRlc2NyaXB0b3Ig
YnV0IHRoYXQncyBiZXR0ZXIgdGhhbiBsZWFraW5nIGVhY2ggdGltZQorICAgICAgICAgICAgIyB3
ZGlmZiB3b3VsZCBiZSBydW4uCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGh0dHA6Ly9t
YWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1saXN0LworICAgICAgICAgICAgIyAgICAy
MDA4LUF1Z3VzdC81MDU3NTMuaHRtbAorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24u
b3JnL2lzc3VlMzIxMAorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJdCBhbHNvIGhhcyBh
IHRocmVhZGluZyBidWcsIHNvIHdlIGRvbid0IG91dHB1dCB3ZGlmZiBpZgorICAgICAgICAgICAg
IyB0aGUgUG9wZW4gcmFpc2VzIGEgVmFsdWVFcnJvci4KKyAgICAgICAgICAgICMgaHR0cDovL2J1
Z3MucHl0aG9uLm9yZy9pc3N1ZTEyMzYKKyAgICAgICAgICAgIGlmIF93ZGlmZl9hdmFpbGFibGU6
CisgICAgICAgICAgICAgICAgd2RpZmYgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwKKyAgICAgICAg
ICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAg
ICAgICAgICAgICAgIHdkaWZmID0gY2dpLmVzY2FwZSh3ZGlmZikKKyAgICAgICAgICAgICAgICB3
ZGlmZiA9IHdkaWZmLnJlcGxhY2UoJyMjV0RJRkZfREVMIyMnLCAnPHNwYW4gY2xhc3M9ZGVsPicp
CisgICAgICAgICAgICAgICAgd2RpZmYgPSB3ZGlmZi5yZXBsYWNlKCcjI1dESUZGX0FERCMjJywg
JzxzcGFuIGNsYXNzPWFkZD4nKQorICAgICAgICAgICAgICAgIHdkaWZmID0gd2RpZmYucmVwbGFj
ZSgnIyNXRElGRl9FTkQjIycsICc8L3NwYW4+JykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAn
PGhlYWQ+PHN0eWxlPi5kZWwgeyBiYWNrZ3JvdW5kOiAjZmFhOyB9ICcKKyAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gJy5hZGQgeyBiYWNrZ3JvdW5kOiAjYWZhOyB9PC9zdHlsZT48L2hlYWQ+Jwor
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnPHByZT4nICsgd2RpZmYgKyAnPC9wcmU+JworICAg
ICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIGlmIChlLmVycm5vID09IGVycm5v
LkVOT0VOVCBvciBlLmVycm5vID09IGVycm5vLkVBQ0NFUyBvcgorICAgICAgICAgICAgICAgIGUu
ZXJybm8gPT0gZXJybm8uRUNISUxEKToKKyAgICAgICAgICAgICAgICBfd2RpZmZfYXZhaWxhYmxl
ID0gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgZQorICAg
ICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAjCisgICAgIyBQUk9URUNURUQgUk9VVElORVMKKyAg
ICAjCisgICAgIyBUaGUgcm91dGluZXMgYmVsb3cgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHJv
dXRpbmVzIGluIHRoaXMgY2xhc3MKKyAgICAjIG9yIGFueSBvZiBpdHMgc3ViY2xhc3Nlcy4KKyAg
ICAjCisKKyAgICBkZWYgX2tpbGxfcHJvY2VzcyhzZWxmLCBwaWQpOgorICAgICAgICAiIiJGb3Jj
ZWZ1bGx5IGtpbGwgYSBwcm9jZXNzLgorCisgICAgICAgIFRoaXMgcm91dGluZSBzaG91bGQgbm90
IGJlIHVzZWQgb3IgbmVlZGVkIGdlbmVyaWNhbGx5LCBidXQgY2FuIGJlCisgICAgICAgIHVzZWQg
aW4gaGVscGVyIGZpbGVzIGxpa2UgaHR0cF9zZXJ2ZXIucHkuIiIiCisgICAgICAgIHJhaXNlIE5v
dEltcGxlbWVudGVkRXJyb3IoJ1BvcnQua2lsbF9wcm9jZXNzJykKKworICAgIGRlZiBfcGF0aF90
b19hcGFjaGUoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUg
YXBhY2hlIGJpbmFyeS4KKworICAgICAgICBUaGlzIGlzIG5lZWRlZCBvbmx5IGJ5IHBvcnRzIHRo
YXQgdXNlIHRoZSBhcGFjaGVfaHR0cF9zZXJ2ZXIgbW9kdWxlLiIiIgorICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LnBhdGhfdG9fYXBhY2hlJykKKworICAgIGRlZiBfcGF0
aF90b19hcGFjaGVfY29uZmlnX2ZpbGUoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGZ1
bGwgcGF0aCB0byB0aGUgYXBhY2hlIGJpbmFyeS4KKworICAgICAgICBUaGlzIGlzIG5lZWRlZCBv
bmx5IGJ5IHBvcnRzIHRoYXQgdXNlIHRoZSBhcGFjaGVfaHR0cF9zZXJ2ZXIgbW9kdWxlLiIiIgor
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LnBhdGhfdG9fYXBhY2hlX2Nv
bmZpZ19maWxlJykKKworICAgIGRlZiBfcGF0aF90b19kcml2ZXIoc2VsZik6CisgICAgICAgICIi
IlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdGVzdCBkcml2ZXIgKER1bXBSZW5kZXJUcmVl
KS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5wYXRoX3RvX2Ry
aXZlcicpCisKKyAgICBkZWYgX3BhdGhfdG9faGVscGVyKHNlbGYpOgorICAgICAgICAiIiJSZXR1
cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGxheW91dF90ZXN0X2hlbHBlciBiaW5hcnksIHdoaWNo
CisgICAgICAgIGlzIHVzZWQgdG8gaGVscCBjb25maWd1cmUgdGhlIHN5c3RlbSBmb3IgdGhlIHRl
c3QgcnVuLCBvciBOb25lCisgICAgICAgIGlmIG5vIGhlbHBlciBpcyBuZWVkZWQuCisKKyAgICAg
ICAgVGhpcyBpcyBsaWtlbHkgb25seSB1c2VkIGJ5IHN0YXJ0L3N0b3BfaGVscGVyKCkuIiIiCisg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQuX3BhdGhfdG9faGVscGVyJykK
KworICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5z
IHRoZSBmdWxsIHBhdGggdG8gdGhlIGltYWdlX2RpZmYgYmluYXJ5LCBvciBOb25lIGlmIGl0Cisg
ICAgICAgIGlzIG5vdCBhdmFpbGFibGUuCisKKyAgICAgICAgVGhpcyBpcyBsaWtlbHkgdXNlZCBv
bmx5IGJ5IGRpZmZfaW1hZ2UoKSIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
KCdQb3J0LnBhdGhfdG9faW1hZ2VfZGlmZicpCisKKyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGQo
c2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8gdGhlIExpZ0hUVFBkIGJpbmFy
eS4KKworICAgICAgICBUaGlzIGlzIG5lZWRlZCBvbmx5IGJ5IHBvcnRzIHRoYXQgdXNlIHRoZSBo
dHRwX3NlcnZlci5weSBtb2R1bGUuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJy
b3IoJ1BvcnQuX3BhdGhfdG9fbGlnaHR0cGQnKQorCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBk
X21vZHVsZXMoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8gdGhlIExpZ0hU
VFBkIG1vZHVsZXMgZGlyZWN0b3J5LgorCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIG9ubHkgYnkg
cG9ydHMgdGhhdCB1c2UgdGhlIGh0dHBfc2VydmVyLnB5IG1vZHVsZS4iIiIKKyAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5fcGF0aF90b19saWdodHRwZF9tb2R1bGVzJykK
KworICAgIGRlZiBfcGF0aF90b19saWdodHRwZF9waHAoc2VsZik6CisgICAgICAgICIiIlJldHVy
bnMgdGhlIHBhdGggdG8gdGhlIExpZ0hUVFBkIFBIUCBleGVjdXRhYmxlLgorCisgICAgICAgIFRo
aXMgaXMgbmVlZGVkIG9ubHkgYnkgcG9ydHMgdGhhdCB1c2UgdGhlIGh0dHBfc2VydmVyLnB5IG1v
ZHVsZS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5fcGF0aF90
b19saWdodHRwZF9waHAnKQorCisgICAgZGVmIF9wYXRoX3RvX3dkaWZmKHNlbGYpOgorICAgICAg
ICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIHdkaWZmIGJpbmFyeSwgb3IgTm9uZSBp
ZiBpdCBpcworICAgICAgICBub3QgYXZhaWxhYmxlLgorCisgICAgICAgIFRoaXMgaXMgbGlrZWx5
IHVzZWQgb25seSBieSB3ZGlmZl90ZXh0KCkiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcignUG9ydC5fcGF0aF90b193ZGlmZicpCisKKyAgICBkZWYgX3NodXRfZG93bl9odHRw
X3NlcnZlcihzZWxmLCBwaWQpOgorICAgICAgICAiIiJGb3JjZWZ1bGx5IGFuZCBzeW5jaHJvbm91
c2x5IGtpbGxzIHRoZSB3ZWIgc2VydmVyLgorCisgICAgICAgIFRoaXMgcm91dGluZSBzaG91bGQg
b25seSBiZSBjYWxsZWQgZnJvbSBodHRwX3NlcnZlci5weSBvciBpdHMKKyAgICAgICAgc3ViY2xh
c3Nlcy4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5fc2h1dF9k
b3duX2h0dHBfc2VydmVyJykKKworICAgIGRlZiBfd2Via2l0X2Jhc2VsaW5lX3BhdGgoc2VsZiwg
cGxhdGZvcm0pOgorICAgICAgICAiIiJSZXR1cm4gdGhlICBmdWxsIHBhdGggdG8gdGhlIHRvcCBv
ZiB0aGUgYmFzZWxpbmUgdHJlZSBmb3IgYQorICAgICAgICBnaXZlbiBwbGF0Zm9ybS4iIiIKKyAg
ICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ3BsYXRm
b3JtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSkKKworCitjbGFzcyBE
cml2ZXI6CisgICAgIiIiQWJzdHJhY3QgaW50ZXJmYWNlIGZvciB0aGUgRHVtcFJlbmRlclRyZWUg
aW50ZXJmYWNlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHBuZ19wYXRoLCBv
cHRpb25zKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBhIERyaXZlciB0byBzdWJzZXF1ZW50bHkg
cnVuIHRlc3RzLgorCisgICAgICAgIFR5cGljYWxseSB0aGlzIHJvdXRpbmUgd2lsbCBzcGF3biBE
dW1wUmVuZGVyVHJlZSBpbiBhIGNvbmZpZworICAgICAgICByZWFkeSBmb3Igc3Vic2VxdWVudCBp
bnB1dC4KKworICAgICAgICBwb3J0IC0gcmVmZXJlbmNlIGJhY2sgdG8gdGhlIHBvcnQgb2JqZWN0
LgorICAgICAgICBwbmdfcGF0aCAtIGFuIGFic29sdXRlIHBhdGggZm9yIHRoZSBkcml2ZXIgdG8g
d3JpdGUgYW55IGltYWdlCisgICAgICAgICAgICBkYXRhIGZvciBhIHRlc3QgKGFzIGEgUE5HKS4g
SWYgbm8gcGF0aCBpcyBwcm92aWRlZCwgdGhhdAorICAgICAgICAgICAgaW5kaWNhdGVzIHRoYXQg
cGl4ZWwgdGVzdCByZXN1bHRzIHdpbGwgbm90IGJlIGNoZWNrZWQuCisgICAgICAgIG9wdGlvbnMg
LSBhbnkgcG9ydC1zcGVjaWZpYyBkcml2ZXIgb3B0aW9ucy4iIiIKKyAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcignRHJpdmVyLl9faW5pdF9fJykKKworICAgIGRlZiBydW5fdGVzdChz
ZWxmLCB1cmksIHRpbWVvdXQsIGNoZWNrc3VtKToKKyAgICAgICAgIiIiUnVuIGEgc2luZ2xlIHRl
c3QgYW5kIHJldHVybiB0aGUgcmVzdWx0cy4KKworICAgICAgICBOb3RlIHRoYXQgaXQgaXMgb2th
eSBpZiBhIHRlc3QgdGltZXMgb3V0IG9yIGNyYXNoZXMgYW5kIGxlYXZlcworICAgICAgICB0aGUg
ZHJpdmVyIGluIGFuIGluZGV0ZXJtaW5hdGUgc3RhdGUuIFRoZSB1cHBlciBsYXllcnMgb2YgdGhl
IHByb2dyYW0KKyAgICAgICAgYXJlIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCBhbmQgZW5z
dXJpbmcgdGhpbmdzIGFyZSBva2F5LgorCisgICAgICAgIHVyaSAtIGEgZnVsbCBVUkkgZm9yIHRo
ZSBnaXZlbiB0ZXN0CisgICAgICAgIHRpbWVvdXQgLSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRv
IHdhaXQgYmVmb3JlIGFib3J0aW5nIHRoaXMgdGVzdC4KKyAgICAgICAgY2hlY2tzdW0gLSBpZiBw
cmVzZW50LCB0aGUgZXhwZWN0ZWQgY2hlY2tzdW0gZm9yIHRoZSBpbWFnZSBmb3IgdGhpcworICAg
ICAgICAgICAgdGVzdAorCisgICAgICAgIFJldHVybnMgYSB0dXBsZSBvZiB0aGUgZm9sbG93aW5n
OgorICAgICAgICAgICAgY3Jhc2ggLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBk
cml2ZXIgY3Jhc2hlZCBvbiB0aGUgdGVzdAorICAgICAgICAgICAgdGltZW91dCAtIGEgYm9vbGVh
biBpbmRpY2F0aW5nIHdoZWh0ZXIgdGhlIHRlc3QgdGltZWQgb3V0CisgICAgICAgICAgICBjaGVj
a3N1bSAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNoZWNrc3VtIG9mIHRoZSBpbWFnZSwgaWYK
KyAgICAgICAgICAgICAgICBwcmVzZW50CisgICAgICAgICAgICBvdXRwdXQgLSBhbnkgdGV4dCBv
dXRwdXQKKyAgICAgICAgICAgIGVycm9yIC0gYW55IHVuZXhwZWN0ZWQgb3IgYWRkaXRpb25hbCAo
b3IgZXJyb3IpIHRleHQgb3V0cHV0CisKKyAgICAgICAgTm90ZSB0aGF0IHRoZSBpbWFnZSBpdHNl
bGYgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gdGhlIHBhdGggdGhhdCB3YXMKKyAgICAgICAgc3BlY2lm
aWVkIGluIHRoZSBfX2luaXRfXygpIGNhbGwuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IoJ0RyaXZlci5ydW5fdGVzdCcpCisKKyAgICBkZWYgcG9sbChzZWxmKToKKyAgICAg
ICAgIiIiUmV0dXJucyBOb25lIGlmIHRoZSBEcml2ZXIgaXMgc3RpbGwgcnVubmluZy4gUmV0dXJu
cyB0aGUgcmV0dXJuY29kZQorICAgICAgICBpZiBpdCBoYXMgZXhpdGVkLiIiIgorICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdEcml2ZXIucG9sbCcpCisKKyAgICBkZWYgcmV0dXJu
Y29kZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc3lzdGVtLXNwZWNpZmljIHJldHVy
bmNvZGUgaWYgdGhlIERyaXZlciBoYXMgc3RvcHBlZCBvcgorICAgICAgICBleGl0ZWQuIiIiCisg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0RyaXZlci5yZXR1cm5jb2RlJykKKwor
ICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdE
cml2ZXIuc3RvcCcpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Jhc2UucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICAr
IExGCgpJbmRleDogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wYXRoX3V0aWxz
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGF0
aF91dGlscy5weQkocmV2aXNpb24gNTQzMjgpCisrKyBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3BhdGhfdXRpbHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMzk1ICswLDAgQEAK
LSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlRoaXMgcGFja2Fn
ZSBjb250YWlucyB1dGlsaXR5IG1ldGhvZHMgZm9yIG1hbmlwdWxhdGluZyBwYXRocyBhbmQKLWZp
bGVuYW1lcyBmb3IgdGVzdCByZXN1bHRzIGFuZCBiYXNlbGluZXMuIEl0IGFsc28gY29udGFpbnMg
d3JhcHBlcnMKLW9mIGEgZmV3IHJvdXRpbmVzIGluIHBvcnQvIHNvIHRoYXQgdGhlIHBvcnQgcGFj
a2FnZSBjYW4KLWJlIGNvbnNpZGVyZWQgYSAncHJvdGVjdGVkJyBwYWNrYWdlIC0gaS5lLiwgdGhp
cyBmaWxlIHNob3VsZCBiZQotdGhlIG9ubHkgZmlsZSB0aGF0IGV2ZXIgaW5jbHVkZXMgcG9ydC4g
VGhpcyBsZWFkcyB0bwotdXMgaW5jbHVkaW5nIGEgZmV3IHRoaW5ncyB0aGF0IGRvbid0IHJlYWxs
eSBoYXZlIGFueXRoaW5nIHRvIGRvCi0gd2l0aCBwYXRocywgdW5mb3J0dW5hdGVseS4iIiIKLQot
aW1wb3J0IGVycm5vCi1pbXBvcnQgb3MKLWltcG9ydCBzdGF0Ci1pbXBvcnQgc3lzCi0KLWltcG9y
dCBwb3J0Ci1pbXBvcnQgY2hyb21pdW1fd2luCi1pbXBvcnQgY2hyb21pdW1fbWFjCi1pbXBvcnQg
Y2hyb21pdW1fbGludXgKLQotIyBDYWNoZSBzb21lIHZhbHVlcyBzbyB3ZSBkb24ndCBoYXZlIHRv
IHJlY2FsY3VsYXRlIHRoZW0uIF9iYXNlZGlyIGlzCi0jIHVzZWQgYnkgUGF0aEZyb21CYXNlKCkg
YW5kIGNhY2hlcyB0aGUgZnVsbCAobmF0aXZlKSBwYXRoIHRvIHRoZSB0b3AKLSMgb2YgdGhlIHNv
dXJjZSB0cmVlICgvc3JjKS4gX2Jhc2VsaW5lX3NlYXJjaF9wYXRoIGlzIHVzZWQgYnkKLSMgRXhw
ZWN0ZWRCYXNlbGluZXMoKSBhbmQgY2FjaGVzIHRoZSBsaXN0IG9mIG5hdGl2ZSBwYXRocyB0byBz
ZWFyY2gKLSMgZm9yIGJhc2VsaW5lIHJlc3VsdHMuCi1fYmFzZWRpciA9IE5vbmUKLV9iYXNlbGlu
ZV9zZWFyY2hfcGF0aCA9IE5vbmUKLQotCi1jbGFzcyBQYXRoTm90Rm91bmQoRXhjZXB0aW9uKToK
LSAgICBwYXNzCi0KLQotZGVmIGxheW91dF90ZXN0c19kaXIoKToKLSAgICAiIiJSZXR1cm5zIHRo
ZSBmdWxseS1xdWFsaWZpZWQgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGlu
cHV0Ci0gICAgZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBsYXlvdXQgdGVzdC4iIiIKLSAgICByZXR1
cm4gcGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdMYXlvdXRUZXN0cycp
Ci0KLQotZGVmIGNocm9taXVtX2Jhc2VsaW5lX3BhdGgocGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIi
UmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBleHBlY3Rl
ZAotICAgIGJhc2VsaW5lIHJlc3VsdHMgZnJvbSBjaHJvbWl1bSBwb3J0cy4gSWYgfHBsYXRmb3Jt
fCBpcyBOb25lLCB0aGUKLSAgICBjdXJyZW50bHkgZXhlY3V0aW5nIHBsYXRmb3JtIGlzIHVzZWQu
Ci0KLSAgICBOb3RlOiBhbHRob3VnaCBkaXJlY3RseSByZWZlcmVuY2luZyBpbmRpdmlkdWFsIHBv
cnQvKiBmaWxlcyBpcwotICAgIHVzdWFsbHkgZGlzY291cmFnZWQsIHdlIGFsbG93IGl0IGhlcmUg
c28gdGhhdCB0aGUgcmViYXNlbGluaW5nIHRvb2wgY2FuCi0gICAgcHVsbCBiYXNlbGluZXMgZm9y
IHBsYXRmb3JtcyBvdGhlciB0aGFuIHRoZSBob3N0IHBsYXRmb3JtLiIiIgotCi0gICAgIyBOb3Jt
YWxpemUgdGhlIHBsYXRmb3JtIHN0cmluZy4KLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUo
cGxhdGZvcm0pCi0gICAgaWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21pdW0tbWFjJyk6Ci0g
ICAgICAgIHJldHVybiBjaHJvbWl1bV9tYWMuYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkKLSAgICBl
bGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLXdpbicpOgotICAgICAgICByZXR1cm4g
Y2hyb21pdW1fd2luLmJhc2VsaW5lX3BhdGgocGxhdGZvcm0pCi0gICAgZWxpZiBwbGF0Zm9ybS5z
dGFydHN3aXRoKCdjaHJvbWl1bS1saW51eCcpOgotICAgICAgICByZXR1cm4gY2hyb21pdW1fbGlu
dXguYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkKLQotICAgIHJldHVybiBwb3J0LmJhc2VsaW5lX3Bh
dGgoKQotCi0KLWRlZiB3ZWJraXRfYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSk6Ci0gICAgIiIiUmV0
dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBleHBlY3RlZAot
ICAgIGJhc2VsaW5lIHJlc3VsdHMgZnJvbSBXZWJLaXQgcG9ydHMuIiIiCi0gICAgcmV0dXJuIHBh
dGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm0nLCBwbGF0Zm9ybSkKLQotCi1kZWYgYmFz
ZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbGlz
dCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGJhc2VsaW5lcy9yZXN1bHRzIGZvciBhCi0g
ICAgZ2l2ZW4gcGxhdGZvcm0sIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuIFBhdGhzIGFyZSByZWxh
dGl2ZSB0byB0aGUgdG9wIG9mCi0gICAgdGhlIHNvdXJjZSB0cmVlLiBJZiBwYXJhbWV0ZXIgcGxh
dGZvcm0gaXMgTm9uZSwgcmV0dXJucyB0aGUgbGlzdCBmb3IgdGhlCi0gICAgY3VycmVudCBwbGF0
Zm9ybSB0aGF0IHRoZSBzY3JpcHQgaXMgcnVubmluZyBvbi4KLQotICAgIE5vdGU6IGFsdGhvdWdo
IGRpcmVjdGx5IHJlZmVyZW5jaW5nIGluZGl2aWR1YWwgcG9ydC8qIGZpbGVzIGlzCi0gICAgdXN1
YWxseSBkaXNjb3VyYWdlZCwgd2UgYWxsb3cgaXQgaGVyZSBzbyB0aGF0IHRoZSByZWJhc2VsaW5p
bmcgdG9vbCBjYW4KLSAgICBwdWxsIGJhc2VsaW5lcyBmb3IgcGxhdGZvcm1zIG90aGVyIHRoYW4g
dGhlIGhvc3QgcGxhdGZvcm0uIiIiCi0KLSAgICAjIE5vcm1hbGl6ZSB0aGUgcGxhdGZvcm0gbmFt
ZS4KLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUocGxhdGZvcm0pCi0gICAgaWYgcGxhdGZv
cm0uc3RhcnRzd2l0aCgnY2hyb21pdW0tbWFjJyk6Ci0gICAgICAgIHJldHVybiBjaHJvbWl1bV9t
YWMuYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm0pCi0gICAgZWxpZiBwbGF0Zm9ybS5zdGFy
dHN3aXRoKCdjaHJvbWl1bS13aW4nKToKLSAgICAgICAgcmV0dXJuIGNocm9taXVtX3dpbi5iYXNl
bGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybSkKLSAgICBlbGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgo
J2Nocm9taXVtLWxpbnV4Jyk6Ci0gICAgICAgIHJldHVybiBjaHJvbWl1bV9saW51eC5iYXNlbGlu
ZV9zZWFyY2hfcGF0aChwbGF0Zm9ybSkKLSAgICByZXR1cm4gcG9ydC5iYXNlbGluZV9zZWFyY2hf
cGF0aCgpCi0KLQotZGVmIGV4cGVjdGVkX2Jhc2VsaW5lcyhmaWxlbmFtZSwgc3VmZml4LCBwbGF0
Zm9ybT1Ob25lLCBhbGxfYmFzZWxpbmVzPUZhbHNlKToKLSAgICAiIiJHaXZlbiBhIHRlc3QgbmFt
ZSwgZmluZHMgd2hlcmUgdGhlIGJhc2VsaW5lIHJlc3VsdHMgYXJlIGxvY2F0ZWQuCi0KLSAgICBB
cmdzOgotICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKLSAg
ICAgICBzdWZmaXg6IGZpbGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1bHRzLCBpbmNsdWRp
bmcgZG90OyBlLmcuICcudHh0JwotICAgICAgICAgICBvciAnLnBuZycuICBUaGlzIHNob3VsZCBu
b3QgYmUgTm9uZSwgYnV0IG1heSBiZSBhbiBlbXB0eSBzdHJpbmcuCi0gICAgICAgcGxhdGZvcm06
IGxheW91dCB0ZXN0IHBsYXRmb3JtOiAnd2luJywgJ2xpbnV4JyBvciAnbWFjJy4gRGVmYXVsdHMg
dG8KLSAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCi0gICAgICAgYWxsX2Jh
c2VsaW5lczogSWYgVHJ1ZSwgcmV0dXJuIGFuIG9yZGVyZWQgbGlzdCBvZiBhbGwgYmFzZWxpbmUg
cGF0aHMKLSAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGdpdmVuIHBsYXRmb3JtLiBJZiBG
YWxzZSwgcmV0dXJuIG9ubHkgdGhlIGZpcnN0Ci0gICAgICAgICAgICAgICAgICAgICAgb25lLgot
ICAgIFJldHVybnMKLSAgICAgICBhIGxpc3Qgb2YgKCBwbGF0Zm9ybV9kaXIsIHJlc3VsdHNfZmls
ZW5hbWUgKSwgd2hlcmUKLSAgICAgICAgIHBsYXRmb3JtX2RpciAtIGFicyBwYXRoIHRvIHRoZSB0
b3Agb2YgdGhlIHJlc3VsdHMgdHJlZSAob3IgdGVzdCB0cmVlKQotICAgICAgICAgcmVzdWx0c19m
aWxlbmFtZSAtIHJlbGF0aXZlIHBhdGggZnJvbSB0b3Agb2YgdHJlZSB0byB0aGUgcmVzdWx0cyBm
aWxlCi0gICAgICAgICAgIChvcy5wYXRoLmpvaW4gb2YgdGhlIHR3byBnaXZlcyB5b3UgdGhlIGZ1
bGwgcGF0aCB0byB0aGUgZmlsZSwKLSAgICAgICAgICAgIHVubGVzcyBOb25lIHdhcyByZXR1cm5l
ZC4pCi0gICAgICBSZXR1cm4gdmFsdWVzIHdpbGwgYmUgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0
ZSBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0KLSAgICAgIChlLmcuLCAiXFwiIGZvciBwYXRoIHNl
cGFyYXRvcnMgb24gV2luZG93cykuIElmIHRoZSByZXN1bHRzIGZpbGUgaXMgbm90Ci0gICAgICBm
b3VuZCwgdGhlbiBOb25lIHdpbGwgYmUgcmV0dXJuZWQgZm9yIHRoZSBkaXJlY3RvcnksIGJ1dCB0
aGUgZXhwZWN0ZWQKLSAgICAgIHJlbGF0aXZlIHBhdGhuYW1lIHdpbGwgc3RpbGwgYmUgcmV0dXJu
ZWQuCi0gICAgIiIiCi0gICAgZ2xvYmFsIF9iYXNlbGluZV9zZWFyY2hfcGF0aAotICAgIGdsb2Jh
bCBfc2VhcmNoX3BhdGhfcGxhdGZvcm0KLSAgICB0ZXN0bmFtZSA9IG9zLnBhdGguc3BsaXRleHQo
cmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpWzBdCi0KLSAgICBiYXNlbGluZV9maWxl
bmFtZSA9IHRlc3RuYW1lICsgJy1leHBlY3RlZCcgKyBzdWZmaXgKLQotICAgIGlmIChfYmFzZWxp
bmVfc2VhcmNoX3BhdGggaXMgTm9uZSkgb3IgKF9zZWFyY2hfcGF0aF9wbGF0Zm9ybSAhPSBwbGF0
Zm9ybSk6Ci0gICAgICAgIF9iYXNlbGluZV9zZWFyY2hfcGF0aCA9IGJhc2VsaW5lX3NlYXJjaF9w
YXRoKHBsYXRmb3JtKQotICAgICAgICBfc2VhcmNoX3BhdGhfcGxhdGZvcm0gPSBwbGF0Zm9ybQot
Ci0gICAgYmFzZWxpbmVzID0gW10KLSAgICBmb3IgcGxhdGZvcm1fZGlyIGluIF9iYXNlbGluZV9z
ZWFyY2hfcGF0aDoKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBsYXRm
b3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKToKLSAgICAgICAgICAgIGJhc2VsaW5lcy5hcHBl
bmQoKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQotCi0gICAgICAgIGlmIG5vdCBh
bGxfYmFzZWxpbmVzIGFuZCBiYXNlbGluZXM6Ci0gICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVz
Ci0KLSAgICAjIElmIGl0IHdhc24ndCBmb3VuZCBpbiBhIHBsYXRmb3JtIGRpcmVjdG9yeSwgcmV0
dXJuIHRoZSBleHBlY3RlZCByZXN1bHQKLSAgICAjIGluIHRoZSB0ZXN0IGRpcmVjdG9yeSwgZXZl
biBpZiBubyBzdWNoIGZpbGUgYWN0dWFsbHkgZXhpc3RzLgotICAgIHBsYXRmb3JtX2RpciA9IGxh
eW91dF90ZXN0c19kaXIoKQotICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwbGF0
Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSk6Ci0gICAgICAgIGJhc2VsaW5lcy5hcHBlbmQo
KHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQotCi0gICAgaWYgYmFzZWxpbmVzOgot
ICAgICAgICByZXR1cm4gYmFzZWxpbmVzCi0KLSAgICByZXR1cm4gWyhOb25lLCBiYXNlbGluZV9m
aWxlbmFtZSldCi0KLQotZGVmIGV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCBzdWZmaXgpOgot
ICAgICIiIkdpdmVuIGEgdGVzdCBuYW1lLCByZXR1cm5zIGFuIGFic29sdXRlIHBhdGggdG8gaXRz
IGV4cGVjdGVkIHJlc3VsdHMuCi0KLSAgICBJZiBubyBleHBlY3RlZCByZXN1bHRzIGFyZSBmb3Vu
ZCBpbiBhbnkgb2YgdGhlIHNlYXJjaGVkIGRpcmVjdG9yaWVzLCB0aGUKLSAgICBkaXJlY3Rvcnkg
aW4gd2hpY2ggdGhlIHRlc3QgaXRzZWxmIGlzIGxvY2F0ZWQgd2lsbCBiZSByZXR1cm5lZC4gVGhl
IHJldHVybgotICAgIHZhbHVlIGlzIGluIHRoZSBmb3JtYXQgYXBwcm9wcmlhdGUgZm9yIHRoZSBw
bGF0Zm9ybSAoZS5nLiwgIlxcIiBmb3IKLSAgICBwYXRoIHNlcGFyYXRvcnMgb24gd2luZG93cyku
Ci0KLSAgICBBcmdzOgotICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0
IGZpbGUKLSAgICAgICBzdWZmaXg6IGZpbGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1bHRz
LCBpbmNsdWRpbmcgZG90OyBlLmcuICcudHh0JwotICAgICAgICAgICBvciAnLnBuZycuICBUaGlz
IHNob3VsZCBub3QgYmUgTm9uZSwgYnV0IG1heSBiZSBhbiBlbXB0eSBzdHJpbmcuCi0gICAgICAg
cGxhdGZvcm06IHRoZSBtb3N0LXNwZWNpZmljIGRpcmVjdG9yeSBuYW1lIHRvIHVzZSB0byBidWls
ZCB0aGUKLSAgICAgICAgICAgc2VhcmNoIGxpc3Qgb2YgZGlyZWN0b3JpZXMsIGUuZy4sICdjaHJv
bWl1bS13aW4nLCBvcgotICAgICAgICAgICAnY2hyb21pdW0tbWFjLWxlb3BhcmQnICh3ZSBmb2xs
b3cgdGhlIFdlYktpdCBmb3JtYXQpCi0gICAgIiIiCi0gICAgcGxhdGZvcm1fZGlyLCBiYXNlbGlu
ZV9maWxlbmFtZSA9IGV4cGVjdGVkX2Jhc2VsaW5lcyhmaWxlbmFtZSwgc3VmZml4KVswXQotICAg
IGlmIHBsYXRmb3JtX2RpcjoKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwbGF0Zm9ybV9k
aXIsIGJhc2VsaW5lX2ZpbGVuYW1lKQotICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGF5b3V0X3Rl
c3RzX2RpcigpLCBiYXNlbGluZV9maWxlbmFtZSkKLQotCi1kZWYgcmVsYXRpdmVfdGVzdF9maWxl
bmFtZShmaWxlbmFtZSk6Ci0gICAgIiIiUHJvdmlkZSB0aGUgZmlsZW5hbWUgb2YgdGhlIHRlc3Qg
cmVsYXRpdmUgdG8gdGhlIGxheW91dCB0ZXN0cwotICAgIGRpcmVjdG9yeSBhcyBhIHVuaXggc3R5
bGUgcGF0aCAoYS9iL2MpLiIiIgotICAgIHJldHVybiBfd2luX3BhdGhfdG9fdW5peChmaWxlbmFt
ZVtsZW4obGF5b3V0X3Rlc3RzX2RpcigpKSArIDE6XSkKLQotCi1kZWYgX3dpbl9wYXRoX3RvX3Vu
aXgocGF0aCk6Ci0gICAgIiIiQ29udmVydCBhIHdpbmRvd3MgcGF0aCB0byB1c2UgdW5peC1zdHls
ZSBwYXRoIHNlcGFyYXRvcnMgKGEvYi9jKS4iIiIKLSAgICByZXR1cm4gcGF0aC5yZXBsYWNlKCdc
XCcsICcvJykKLQotIwotIyBSb3V0aW5lcyB0aGF0IGFyZSBhcmd1YWJseSBwbGF0Zm9ybS1zcGVj
aWZpYyBidXQgaGF2ZSBiZWVuIG1hZGUKLSMgZ2VuZXJpYyBmb3Igbm93Ci0jCi0KLQotZGVmIGZp
bGVuYW1lX3RvX3VyaShmdWxsX3BhdGgpOgotICAgICIiIkNvbnZlcnQgYSB0ZXN0IGZpbGUgdG8g
YSBVUkkuIiIiCi0gICAgTEFZT1VUVEVTVF9IVFRQX0RJUiA9ICJodHRwL3Rlc3RzLyIKLSAgICBM
QVlPVVRURVNUX1dFQlNPQ0tFVF9ESVIgPSAid2Vic29ja2V0L3Rlc3RzLyIKLQotICAgIHJlbGF0
aXZlX3BhdGggPSBfd2luX3BhdGhfdG9fdW5peChyZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZ1bGxf
cGF0aCkpCi0gICAgcG9ydCA9IE5vbmUKLSAgICB1c2Vfc3NsID0gRmFsc2UKLQotICAgIGlmIHJl
bGF0aXZlX3BhdGguc3RhcnRzd2l0aChMQVlPVVRURVNUX0hUVFBfRElSKToKLSAgICAgICAgIyBo
dHRwL3Rlc3RzLyBydW4gb2ZmIHBvcnQgODAwMCBhbmQgc3NsLyBvZmYgODQ0MwotICAgICAgICBy
ZWxhdGl2ZV9wYXRoID0gcmVsYXRpdmVfcGF0aFtsZW4oTEFZT1VUVEVTVF9IVFRQX0RJUik6XQot
ICAgICAgICBwb3J0ID0gODAwMAotICAgIGVsaWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKExB
WU9VVFRFU1RfV0VCU09DS0VUX0RJUik6Ci0gICAgICAgICMgd2Vic29ja2V0L3Rlc3RzLyBydW4g
b2ZmIHBvcnQgODg4MCBhbmQgOTMyMwotICAgICAgICAjIE5vdGU6IHRoZSByb290IGlzIC8sIG5v
dCB3ZWJzb2NrZXQvdGVzdHMvCi0gICAgICAgIHBvcnQgPSA4ODgwCi0KLSAgICAjIE1ha2UgaHR0
cC90ZXN0cy9sb2NhbCBydW4gYXMgbG9jYWwgZmlsZXMuIFRoaXMgaXMgdG8gbWltaWMgdGhlCi0g
ICAgIyBsb2dpYyBpbiBydW4td2Via2l0LXRlc3RzLgotICAgICMgVE9ETyhqaWFubGkpOiBDb25z
aWRlciBleHRlbmRpbmcgdGhpcyB0byAibWVkaWEvIi4KLSAgICBpZiBwb3J0IGFuZCBub3QgcmVs
YXRpdmVfcGF0aC5zdGFydHN3aXRoKCJsb2NhbC8iKToKLSAgICAgICAgaWYgcmVsYXRpdmVfcGF0
aC5zdGFydHN3aXRoKCJzc2wvIik6Ci0gICAgICAgICAgICBwb3J0ICs9IDQ0MwotICAgICAgICAg
ICAgcHJvdG9jb2wgPSAiaHR0cHMiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcm90b2Nv
bCA9ICJodHRwIgotICAgICAgICByZXR1cm4gIiVzOi8vMTI3LjAuMC4xOiV1LyVzIiAlIChwcm90
b2NvbCwgcG9ydCwgcmVsYXRpdmVfcGF0aCkKLQotICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5
Z3dpbicsICd3aW4zMicpOgotICAgICAgICByZXR1cm4gImZpbGU6Ly8vIiArIGdldF9hYnNvbHV0
ZV9wYXRoKGZ1bGxfcGF0aCkKLSAgICByZXR1cm4gImZpbGU6Ly8iICsgZ2V0X2Fic29sdXRlX3Bh
dGgoZnVsbF9wYXRoKQotCi0KLWRlZiBnZXRfYWJzb2x1dGVfcGF0aChwYXRoKToKLSAgICAiIiJS
ZXR1cm5zIGFuIGFic29sdXRlIFVOSVggcGF0aC4iIiIKLSAgICByZXR1cm4gX3dpbl9wYXRoX3Rv
X3VuaXgob3MucGF0aC5hYnNwYXRoKHBhdGgpKQotCi0KLWRlZiBtYXliZV9tYWtlX2RpcmVjdG9y
eSgqcGF0aCk6Ci0gICAgIiIiQ3JlYXRlcyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpZiBpdCBk
b2Vzbid0IGFscmVhZHkgZXhpc3QuIiIiCi0gICAgdHJ5OgotICAgICAgICBvcy5tYWtlZGlycyhv
cy5wYXRoLmpvaW4oKnBhdGgpKQotICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICBpZiBl
LmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgIHJhaXNlCi0KLQotZGVmIHBhdGhf
ZnJvbV9iYXNlKCpjb21wcyk6Ci0gICAgIiIiUmV0dXJucyBhbiBhYnNvbHV0ZSBmaWxlbmFtZSBm
cm9tIGEgc2V0IG9mIGNvbXBvbmVudHMgc3BlY2lmaWVkCi0gICAgcmVsYXRpdmUgdG8gdGhlIHRv
cCBvZiB0aGUgc291cmNlIHRyZWUuIElmIHRoZSBwYXRoIGRvZXMgbm90IGV4aXN0LAotICAgIHRo
ZSBleGNlcHRpb24gUGF0aE5vdEZvdW5kIGlzIHJhaXNlZC4iIiIKLSAgICBnbG9iYWwgX2Jhc2Vk
aXIKLSAgICBpZiBfYmFzZWRpciA9PSBOb25lOgotICAgICAgICAjIFdlIGNvbXB1dGUgdGhlIHRv
cCBvZiB0aGUgc291cmNlIHRyZWUgYnkgZmluZGluZyB0aGUgYWJzb2x1dGUKLSAgICAgICAgIyBw
YXRoIG9mIHRoaXMgc291cmNlIGZpbGUsIGFuZCB0aGVuIGNsaW1iaW5nIHVwIHRocmVlIGRpcmVj
dG9yaWVzCi0gICAgICAgICMgYXMgZ2l2ZW4gaW4gc3VicGF0aC4gSWYgd2UgbW92ZSB0aGlzIGZp
bGUsIHN1YnBhdGggbmVlZHMgdG8gYmUKLSAgICAgICAgIyB1cGRhdGVkLgotICAgICAgICBwYXRo
ID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKQotICAgICAgICBzdWJwYXRoID0gb3MucGF0aC5q
b2luKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnKQotICAgICAgICBfYmFzZWRpciA9IHBhdGhbOnBh
dGguaW5kZXgoc3VicGF0aCldCi0gICAgcGF0aCA9IG9zLnBhdGguam9pbihfYmFzZWRpciwgKmNv
bXBzKQotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICAgICAgcmFpc2UgUGF0
aE5vdEZvdW5kKCdjb3VsZCBub3QgZmluZCAlcycgJSAocGF0aCkpCi0gICAgcmV0dXJuIHBhdGgK
LQotCi1kZWYgcmVtb3ZlX2RpcmVjdG9yeSgqcGF0aCk6Ci0gICAgIiIiUmVjdXJzaXZlbHkgcmVt
b3ZlcyBhIGRpcmVjdG9yeSwgZXZlbiBpZiBpdCdzIG1hcmtlZCByZWFkLW9ubHkuCi0KLSAgICBS
ZW1vdmUgdGhlIGRpcmVjdG9yeSBsb2NhdGVkIGF0ICpwYXRoLCBpZiBpdCBleGlzdHMuCi0KLSAg
ICBzaHV0aWwucm10cmVlKCkgZG9lc24ndCB3b3JrIG9uIFdpbmRvd3MgaWYgYW55IG9mIHRoZSBm
aWxlcyBvciBkaXJlY3RvcmllcwotICAgIGFyZSByZWFkLW9ubHksIHdoaWNoIHN2biByZXBvc2l0
b3JpZXMgYW5kIHNvbWUgLnN2biBmaWxlcyBhcmUuICBXZSBuZWVkIHRvCi0gICAgYmUgYWJsZSB0
byBmb3JjZSB0aGUgZmlsZXMgdG8gYmUgd3JpdGFibGUgKGkuZS4sIGRlbGV0YWJsZSkgYXMgd2Ug
dHJhdmVyc2UKLSAgICB0aGUgdHJlZS4KLQotICAgIEV2ZW4gd2l0aCBhbGwgdGhpcywgV2luZG93
cyBzdGlsbCBzb21ldGltZXMgZmFpbHMgdG8gZGVsZXRlIGEgZmlsZSwgY2l0aW5nCi0gICAgYSBw
ZXJtaXNzaW9uIGVycm9yIChtYXliZSBzb21ldGhpbmcgdG8gZG8gd2l0aCBhbnRpdmlydXMgc2Nh
bnMgb3IgZGlzawotICAgIGluZGV4aW5nKS4gIFRoZSBiZXN0IHN1Z2dlc3Rpb24gYW55IG9mIHRo
ZSB1c2VyIGZvcnVtcyBoYWQgd2FzIHRvIHdhaXQgYQotICAgIGJpdCBhbmQgdHJ5IGFnYWluLCBz
byB3ZSBkbyB0aGF0IHRvby4gIEl0J3MgaGFuZC13YXZpbmcsIGJ1dCBzb21ldGltZXMgaXQKLSAg
ICB3b3Jrcy4gOi8KLSAgICAiIiIKLSAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oKnBhdGgp
Ci0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVfcGF0aCk6Ci0gICAgICAgIHJldHVybgot
Ci0gICAgd2luMzIgPSBGYWxzZQotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAg
ICAgICB3aW4zMiA9IFRydWUKLSAgICAgICAgIyBTb21lIHBlb3BsZSBkb24ndCBoYXZlIHRoZSBB
UElzIGluc3RhbGxlZC4gSW4gdGhhdCBjYXNlIHdlJ2xsIGRvCi0gICAgICAgICMgd2l0aG91dC4K
LSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2luMzJhcGkgPSBfX2ltcG9ydF9fKCd3aW4zMmFw
aScpCi0gICAgICAgICAgICB3aW4zMmNvbiA9IF9faW1wb3J0X18oJ3dpbjMyY29uJykKLSAgICAg
ICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgd2luMzIgPSBGYWxzZQotCi0gICAg
ICAgIGRlZiByZW1vdmVfd2l0aF9yZXRyeShybWZ1bmMsIHBhdGgpOgotICAgICAgICAgICAgb3Mu
Y2htb2QocGF0aCwgc3RhdC5TX0lXUklURSkKLSAgICAgICAgICAgIGlmIHdpbjMyOgotICAgICAg
ICAgICAgICAgIHdpbjMyYXBpLlNldEZpbGVBdHRyaWJ1dGVzKHBhdGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luMzJjb24uRklMRV9BVFRSSUJVVEVfTk9S
TUFMKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiBybWZ1bmMocGF0
aCkKLSAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yLCBlOgotICAgICAgICAgICAg
ICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFDQ0VTOgotICAgICAgICAgICAgICAgICAgICByYWlz
ZQotICAgICAgICAgICAgICAgIHByaW50ICdGYWlsZWQgdG8gZGVsZXRlICVzOiB0cnlpbmcgYWdh
aW4nICUgcmVwcihwYXRoKQotICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQotICAgICAg
ICAgICAgICAgIHJldHVybiBybWZ1bmMocGF0aCkKLSAgICBlbHNlOgotCi0gICAgICAgIGRlZiBy
ZW1vdmVfd2l0aF9yZXRyeShybWZ1bmMsIHBhdGgpOgotICAgICAgICAgICAgaWYgb3MucGF0aC5p
c2xpbmsocGF0aCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9zLnJlbW92ZShwYXRoKQotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gcm1mdW5jKHBhdGgpCi0KLSAg
ICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhmaWxlX3BhdGgsIHRvcGRvd249RmFs
c2UpOgotICAgICAgICAjIEZvciBQT1NJWDogIG1ha2luZyB0aGUgZGlyZWN0b3J5IHdyaXRhYmxl
IGd1YXJhbnRlZXMgcmVtb3ZhYmlsaXR5LgotICAgICAgICAjIFdpbmRvd3Mgd2lsbCBpZ25vcmUg
dGhlIG5vbi1yZWFkLW9ubHkgYml0cyBpbiB0aGUgY2htb2QgdmFsdWUuCi0gICAgICAgIG9zLmNo
bW9kKHJvb3QsIDA3NzApCi0gICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAg
cmVtb3ZlX3dpdGhfcmV0cnkob3MucmVtb3ZlLCBvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCi0g
ICAgICAgIGZvciBuYW1lIGluIGRpcnM6Ci0gICAgICAgICAgICByZW1vdmVfd2l0aF9yZXRyeShv
cy5ybWRpciwgb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQotCi0gICAgcmVtb3ZlX3dpdGhfcmV0
cnkob3Mucm1kaXIsIGZpbGVfcGF0aCkKLQotIwotIyBXcmFwcGVycyBhcm91bmQgcG9ydC8KLSMK
LQotCi1kZWYgcGxhdGZvcm1fbmFtZShwbGF0Zm9ybT1Ob25lKToKLSAgICAiIiJSZXR1cm5zIHRo
ZSBhcHByb3ByaWF0ZSBjaHJvbWl1bSBwbGF0Zm9ybSBuYW1lIGZvciB8cGxhdGZvcm18LiBJZgot
ICAgICAgIHxwbGF0Zm9ybXwgaXMgTm9uZSwgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2hyb21p
dW0gcGxhdGZvcm0gb24gdGhlCi0gICAgICAgY3VycmVudGx5IHJ1bm5pbmcgc3lzdGVtLiBJZiB8
cGxhdGZvcm18IGlzIG9mIHRoZSBmb3JtICdjaHJvbWl1bS0qJywKLSAgICAgICBpdCBpcyByZXR1
cm5lZCB1bmNoYW5nZWQsIG90aGVyd2lzZSAnY2hyb21pdW0tJyBpcyBwcmVwZW5kZWQuIiIiCi0g
ICAgaWYgcGxhdGZvcm0gPT0gTm9uZToKLSAgICAgICAgcmV0dXJuIHBvcnQucGxhdGZvcm1fbmFt
ZSgpCi0gICAgaWYgbm90IHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLScpOgotICAgICAg
ICBwbGF0Zm9ybSA9ICJjaHJvbWl1bS0iICsgcGxhdGZvcm0KLSAgICByZXR1cm4gcGxhdGZvcm0K
LQotCi1kZWYgcGxhdGZvcm1fdmVyc2lvbigpOgotICAgIHJldHVybiBwb3J0LnBsYXRmb3JtX3Zl
cnNpb24oKQotCi0KLWRlZiBsaWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKToKLSAgICByZXR1cm4g
cG9ydC5saWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKQotCi0KLWRlZiBsaWdodHRwZF9tb2R1bGVf
cGF0aCgpOgotICAgIHJldHVybiBwb3J0LmxpZ2h0dHBkX21vZHVsZV9wYXRoKCkKLQotCi1kZWYg
bGlnaHR0cGRfcGhwX3BhdGgoKToKLSAgICByZXR1cm4gcG9ydC5saWdodHRwZF9waHBfcGF0aCgp
Ci0KLQotZGVmIHdkaWZmX3BhdGgoKToKLSAgICByZXR1cm4gcG9ydC53ZGlmZl9wYXRoKCkKLQot
Ci1kZWYgdGVzdF9zaGVsbF9wYXRoKHRhcmdldCk6Ci0gICAgcmV0dXJuIHBvcnQudGVzdF9zaGVs
bF9wYXRoKHRhcmdldCkKLQotCi1kZWYgaW1hZ2VfZGlmZl9wYXRoKHRhcmdldCk6Ci0gICAgcmV0
dXJuIHBvcnQuaW1hZ2VfZGlmZl9wYXRoKHRhcmdldCkKLQotCi1kZWYgbGF5b3V0X3Rlc3RfaGVs
cGVyX3BhdGgodGFyZ2V0KToKLSAgICByZXR1cm4gcG9ydC5sYXlvdXRfdGVzdF9oZWxwZXJfcGF0
aCh0YXJnZXQpCi0KLQotZGVmIGZ1enp5X21hdGNoX3BhdGgoKToKLSAgICByZXR1cm4gcG9ydC5m
dXp6eV9tYXRjaF9wYXRoKCkKLQotCi1kZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9w
aWQpOgotICAgIHJldHVybiBwb3J0LnNodXRfZG93bl9odHRwX3NlcnZlcihzZXJ2ZXJfcGlkKQot
Ci0KLWRlZiBraWxsX2FsbF90ZXN0X3NoZWxscygpOgotICAgIHBvcnQua2lsbF9hbGxfdGVzdF9z
aGVsbHMoKQpJbmRleDogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2Nr
ZXRfc2VydmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQkocmV2aXNpb24gNTQzMjgpCisrKyBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDggKzM5LDYgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgdXJsbGliCiAKLWltcG9y
dCBwYXRoX3V0aWxzCi1pbXBvcnQgcG9ydAogaW1wb3J0IGh0dHBfc2VydmVyCiAKIF9XU19MT0df
UFJFRklYID0gJ3B5d2Vic29ja2V0LndzLmxvZy0nCkBAIC01MSwzOSArNDksMzEgQEAKIAogCiBk
ZWYgdXJsX2lzX2FsaXZlKHVybCk6Ci0gICIiIkNoZWNrcyB0byBzZWUgaWYgd2UgZ2V0IGFuIGh0
dHAgcmVzcG9uc2UgZnJvbSB8dXJsfC4KLSAgV2UgcG9sbCB0aGUgdXJsIDUgdGltZXMgd2l0aCBh
IDEgc2Vjb25kIGRlbGF5LiAgSWYgd2UgZG9uJ3QKLSAgZ2V0IGEgcmVwbHkgaW4gdGhhdCB0aW1l
LCB3ZSBnaXZlIHVwIGFuZCBhc3N1bWUgdGhlIGh0dHBkCi0gIGRpZG4ndCBzdGFydCBwcm9wZXJs
eS4KKyAgICAiIiJDaGVja3MgdG8gc2VlIGlmIHdlIGdldCBhbiBodHRwIHJlc3BvbnNlIGZyb20g
fHVybHwuCisgICAgV2UgcG9sbCB0aGUgdXJsIDUgdGltZXMgd2l0aCBhIDEgc2Vjb25kIGRlbGF5
LiAgSWYgd2UgZG9uJ3QKKyAgICBnZXQgYSByZXBseSBpbiB0aGF0IHRpbWUsIHdlIGdpdmUgdXAg
YW5kIGFzc3VtZSB0aGUgaHR0cGQKKyAgICBkaWRuJ3Qgc3RhcnQgcHJvcGVybHkuCiAKLSAgQXJn
czoKLSAgICB1cmw6IFRoZSBVUkwgdG8gY2hlY2suCi0gIFJldHVybjoKLSAgICBUcnVlIGlmIHRo
ZSB1cmwgaXMgYWxpdmUuCi0gICIiIgotICB3YWl0X3RpbWUgPSA1Ci0gIHdoaWxlIHdhaXRfdGlt
ZSA+IDA6Ci0gICAgdHJ5OgotICAgICAgcmVzcG9uc2UgPSB1cmxsaWIudXJsb3Blbih1cmwpCi0g
ICAgICAjIFNlcnZlciBpcyB1cCBhbmQgcmVzcG9uZGluZy4KLSAgICAgIHJldHVybiBUcnVlCi0g
ICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICBwYXNzCi0gICAgd2FpdF90aW1lIC09IDEKLSAgICAj
IFdhaXQgYSBzZWNvbmQgYW5kIHRyeSBhZ2Fpbi4KLSAgICB0aW1lLnNsZWVwKDEpCisgICAgQXJn
czoKKyAgICAgIHVybDogVGhlIFVSTCB0byBjaGVjay4KKyAgICBSZXR1cm46CisgICAgICBUcnVl
IGlmIHRoZSB1cmwgaXMgYWxpdmUuCisgICAgIiIiCisgICAgd2FpdF90aW1lID0gNQorICAgIHdo
aWxlIHdhaXRfdGltZSA+IDA6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3BvbnNlID0g
dXJsbGliLnVybG9wZW4odXJsKQorICAgICAgICAgICAgIyBTZXJ2ZXIgaXMgdXAgYW5kIHJlc3Bv
bmRpbmcuCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgSU9FcnJvcjoK
KyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2FpdF90aW1lIC09IDEKKyAgICAgICAgIyBXYWl0
IGEgc2Vjb25kIGFuZCB0cnkgYWdhaW4uCisgICAgICAgIHRpbWUuc2xlZXAoMSkKIAotICByZXR1
cm4gRmFsc2UKKyAgICByZXR1cm4gRmFsc2UKIAogCi1kZWYgcmVtb3ZlX2xvZ19maWxlcyhmb2xk
ZXIsIHN0YXJ0c193aXRoKToKLSAgICBmaWxlcyA9IG9zLmxpc3RkaXIoZm9sZGVyKQotICAgIGZv
ciBmaWxlIGluIGZpbGVzOgotICAgICAgICBpZiBmaWxlLnN0YXJ0c3dpdGgoc3RhcnRzX3dpdGgp
OgotICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKGZvbGRlciwgZmlsZSkKLSAg
ICAgICAgICAgIG9zLnJlbW92ZShmdWxsX3BhdGgpCi0KLQogY2xhc3MgUHlXZWJTb2NrZXROb3RT
dGFydGVkKEV4Y2VwdGlvbik6CiAgICAgcGFzcwogCkBAIC05NCwxOCArODQsMTUgQEAKIAogY2xh
c3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIG91dHB1dF9kaXIsIHBvcnQ9X0RFRkFVTFRfV1NfUE9SVCwKLSAgICAgICAgICAgICAg
ICAgcm9vdD1Ob25lLAotICAgICAgICAgICAgICAgICB1c2VfdGxzPUZhbHNlLAotICAgICAgICAg
ICAgICAgICBwcml2YXRlX2tleT1odHRwX3NlcnZlci5MaWdodHRwZC5fcGVtX2ZpbGUsCi0gICAg
ICAgICAgICAgICAgIGNlcnRpZmljYXRlPWh0dHBfc2VydmVyLkxpZ2h0dHBkLl9wZW1fZmlsZSwK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG91dHB1dF9kaXIsIHBvcnQ9X0RFRkFV
TFRfV1NfUE9SVCwKKyAgICAgICAgICAgICAgICAgcm9vdD1Ob25lLCB1c2VfdGxzPUZhbHNlLAog
ICAgICAgICAgICAgICAgICByZWdpc3Rlcl9jeWd3aW49Tm9uZSwKICAgICAgICAgICAgICAgICAg
cGlkZmlsZT1Ob25lKToKICAgICAgICAgIiIiQXJnczoKICAgICAgICAgICBvdXRwdXRfZGlyOiB0
aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGRpcmVjdG9yeQogICAg
ICAgICAiIiIKLSAgICAgICAgaHR0cF9zZXJ2ZXIuTGlnaHR0cGQuX19pbml0X18oc2VsZiwgb3V0
cHV0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD1wb3J0
LAorICAgICAgICBodHRwX3NlcnZlci5MaWdodHRwZC5fX2luaXRfXyhzZWxmLCBwb3J0X29iaiwg
b3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD1f
REVGQVVMVF9XU19QT1JULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
b290PXJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVy
X2N5Z3dpbj1yZWdpc3Rlcl9jeWd3aW4pCiAgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRw
dXRfZGlyCkBAIC0xMTMsOCArMTAwLDggQEAKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAg
ICAgICAgc2VsZi5fcm9vdCA9IHJvb3QKICAgICAgICAgc2VsZi5fdXNlX3RscyA9IHVzZV90bHMK
LSAgICAgICAgc2VsZi5fcHJpdmF0ZV9rZXkgPSBwcml2YXRlX2tleQotICAgICAgICBzZWxmLl9j
ZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlCisgICAgICAgIHNlbGYuX3ByaXZhdGVfa2V5ID0gc2Vs
Zi5fcGVtX2ZpbGUKKyAgICAgICAgc2VsZi5fY2VydGlmaWNhdGUgPSBzZWxmLl9wZW1fZmlsZQog
ICAgICAgICBpZiBzZWxmLl9wb3J0OgogICAgICAgICAgICAgc2VsZi5fcG9ydCA9IGludChzZWxm
Ll9wb3J0KQogICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgpAQCAtMTMxLDEyICsxMTgsMTAgQEAK
ICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5fcm9vdCwgJ3dlYnNvY2tldCcsICd0
ZXN0cycpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAg
IHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKAotICAg
ICAgICAgICAgICAgICAgICAndGhpcmRfcGFydHknLCAnV2ViS2l0JywgJ0xheW91dFRlc3RzJywg
J3dlYnNvY2tldCcsCi0gICAgICAgICAgICAgICAgICAgICd0ZXN0cycpCi0gICAgICAgICAgICAg
ICAgc2VsZi5fbGF5b3V0X3Rlc3RzID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgKLSAgICAg
ICAgICAgICAgICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdMYXlvdXRUZXN0cycpCi0g
ICAgICAgICAgICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6CisgICAgICAgICAgICAg
ICAgc2VsZi5fbGF5b3V0X3Rlc3RzID0gc2VsZi5fcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2Rpcigp
CisgICAgICAgICAgICAgICAgc2VsZi5fd2ViX3NvY2tldF90ZXN0cyA9IG9zLnBhdGguam9pbihz
ZWxmLl9sYXlvdXRfdGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAnd2Vic29ja2V0JywgJ3Rl
c3RzJykKKyAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICBzZWxmLl93ZWJfc29j
a2V0X3Rlc3RzID0gTm9uZQogCiAgICAgZGVmIHN0YXJ0KHNlbGYpOgpAQCAtMTU1LDcgKzE0MCw3
IEBACiAgICAgICAgIGxvZ19maWxlX25hbWUgPSBsb2dfcHJlZml4ICsgdGltZV9zdHIKIAogICAg
ICAgICAjIFJlbW92ZSBvbGQgbG9nIGZpbGVzLiBXZSBvbmx5IG5lZWQgdG8ga2VlcCB0aGUgbGFz
dCBvbmVzLgotICAgICAgICByZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsIGxvZ19w
cmVmaXgpCisgICAgICAgIHNlbGYucmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCBs
b2dfcHJlZml4KQogCiAgICAgICAgIGVycm9yX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRw
dXRfZGlyLCBsb2dfZmlsZV9uYW1lICsgIi1lcnIudHh0IikKIApAQCAtMTYzLDExICsxNDgsMTEg
QEAKICAgICAgICAgc2VsZi5fd3NvdXQgPSBvcGVuKG91dHB1dF9sb2csICJ3IikKIAogICAgICAg
ICBweXRob25faW50ZXJwID0gc3lzLmV4ZWN1dGFibGUKLSAgICAgICAgcHl3ZWJzb2NrZXRfYmFz
ZSA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoCi0gICAgICAgICAgICAndGhpcmRfcGFydHkn
LCAnV2ViS2l0JywgJ1dlYktpdFRvb2xzJywgJ3B5d2Vic29ja2V0JykKLSAgICAgICAgcHl3ZWJz
b2NrZXRfc2NyaXB0ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgKLSAgICAgICAgICAgICd0
aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnV2ViS2l0VG9vbHMnLCAncHl3ZWJzb2NrZXQnLAotICAg
ICAgICAgICAgJ21vZF9weXdlYnNvY2tldCcsICdzdGFuZGFsb25lLnB5JykKKyAgICAgICAgcHl3
ZWJzb2NrZXRfYmFzZSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgIG9zLnBhdGguZGlybmFt
ZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZSgKKyAgICAg
ICAgICAgIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSkpLCAncHl3ZWJzb2NrZXQnKQorICAg
ICAgICBweXdlYnNvY2tldF9zY3JpcHQgPSBvcy5wYXRoLmpvaW4ocHl3ZWJzb2NrZXRfYmFzZSwg
J21vZF9weXdlYnNvY2tldCcsCisgICAgICAgICAgICAnc3RhbmRhbG9uZS5weScpCiAgICAgICAg
IHN0YXJ0X2NtZCA9IFsKICAgICAgICAgICAgIHB5dGhvbl9pbnRlcnAsIHB5d2Vic29ja2V0X3Nj
cmlwdCwKICAgICAgICAgICAgICctcCcsIHN0cihzZWxmLl9wb3J0KSwKQEAgLTE5MywxMiArMTc4
LDEyIEBACiAgICAgICAgIGVudiA9IG9zLmVudmlyb24KICAgICAgICAgaWYgc3lzLnBsYXRmb3Jt
IGluICgnY3lnd2luJywgJ3dpbjMyJyk6CiAgICAgICAgICAgICBlbnZbJ1BBVEgnXSA9ICclczsl
cycgJSAoCi0gICAgICAgICAgICAgICAgcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRf
cGFydHknLCAnY3lnd2luJywgJ2JpbicpLAorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnRfb2Jq
Ll9wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2JpbicpLAogICAgICAg
ICAgICAgICAgIGVudlsnUEFUSCddKQogCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2lu
MzInIGFuZCBzZWxmLl9yZWdpc3Rlcl9jeWd3aW46Ci0gICAgICAgICAgICBzZXR1cF9tb3VudCA9
IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsCi0gICAg
ICAgICAgICAgICAgJ3NldHVwX21vdW50LmJhdCcpCisgICAgICAgICAgICBzZXR1cF9tb3VudCA9
IHNlbGYuX3BvcnRfb2JqLl9wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLAorICAgICAgICAg
ICAgICAgICAnY3lnd2luJywgJ3NldHVwX21vdW50LmJhdCcpCiAgICAgICAgICAgICBzdWJwcm9j
ZXNzLlBvcGVuKHNldHVwX21vdW50KS53YWl0KCkKIAogICAgICAgICBlbnZbJ1BZVEhPTlBBVEgn
XSA9IChweXdlYnNvY2tldF9iYXNlICsgb3MucGF0aC5wYXRoc2VwICsKQEAgLTI1NSw3ICsyNDAs
NyBAQAogICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gZmluZCAlcyBzZXJ2ZXIgcGlkLicgJSBz
ZWxmLl9zZXJ2ZXJfbmFtZSkKIAogICAgICAgICBsb2dnaW5nLmRlYnVnKCdTaHV0dGluZyBkb3du
ICVzIHNlcnZlciAlZC4nICUgKHNlbGYuX3NlcnZlcl9uYW1lLCBwaWQpKQotICAgICAgICBwb3J0
LmtpbGxfcHJvY2VzcyhwaWQpCisgICAgICAgIHNlbGYuX3BvcnRfb2JqLl9raWxsX3Byb2Nlc3Mo
cGlkKQogCiAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CiAgICAgICAgICAgICBzZWxmLl9wcm9j
ZXNzLndhaXQoKQpJbmRleDogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9fX2lu
aXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L19faW5pdF9fLnB5CShyZXZpc2lvbiA1NDMyOCkKKysrIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI0ICsyNywyNSBA
QAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotIiIiUGxhdGZvcm0tc3BlY2lmaWMg
dXRpbGl0aWVzIGFuZCBwc2V1ZG8tY29uc3RhbnRzCisiIiJQb3J0LXNwZWNpZmljIGVudHJ5cG9p
bnRzIGZvciB0aGUgbGF5b3V0IHRlc3RzIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuIiIiCiAKLUFueSBm
dW5jdGlvbnMgd2hvc2UgaW1wbGVtZW50YXRpb25zIG9yIHZhbHVlcyBkaWZmZXIgZnJvbSBvbmUg
cGxhdGZvcm0gdG8KLWFub3RoZXIgc2hvdWxkIGJlIGRlZmluZWQgaW4gdGhlaXIgcmVzcGVjdGl2
ZSA8cGxhdGZvcm0+LnB5Ci1tb2R1bGVzLiBUaGUgYXBwcm9wcmlhdGUgb25lIG9mIHRob3NlIHdp
bGwgYmUgaW1wb3J0ZWQgaW50byB0aGlzIG1vZHVsZSB0bwotcHJvdmlkZSBjYWxsZXJzIHdpdGgg
YSBjb21tb24sIHBsYXRmb3JtLWluZGVwZW5kZW50IGludGVyZmFjZS4KIAotVGhpcyBmaWxlIHNo
b3VsZCBvbmx5IGV2ZXIgYmUgaW1wb3J0ZWQgYnkgbGF5b3V0X3BhY2thZ2UucGF0aF91dGlscy4K
LSIiIgorZGVmIGdldChwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lKToKKyAgICAiIiJSZXR1
cm5zIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlIFBvcnQgaW50ZXJmYWNlLiBJZgorICAgIHBv
cnRfbmFtZSBpcyBOb25lLCB0aGlzIHJvdXRpbmUgYXR0ZW1wdHMgdG8gZ3Vlc3MgYXQgdGhlIG1v
c3QKKyAgICBhcHByb3ByaWF0ZSBwb3J0IG9uIHRoaXMgcGxhdGZvcm0uIiIiCisgICAgcG9ydF90
b191c2UgPSBwb3J0X25hbWUKKyAgICBpZiBwb3J0X3RvX3VzZSBpcyBOb25lOgorICAgICAgICBw
b3J0X3RvX3VzZSA9ICdjaHJvbWl1bS1tYWMnCiAKLWltcG9ydCBzeXMKKyAgICBpZiBwb3J0X3Rv
X3VzZS5zdGFydHN3aXRoKCdjaHJvbWl1bS1tYWMnKToKKyAgICAgICAgaW1wb3J0IGNocm9taXVt
X21hYworICAgICAgICByZXR1cm4gY2hyb21pdW1fbWFjLkNocm9taXVtTWFjUG9ydChwb3J0X25h
bWUsIG9wdGlvbnMpCisgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdjaHJvbWl1bS1s
aW51eCcpOgorICAgICAgICBpbXBvcnQgY2hyb21pdW1fbGludXgKKyAgICAgICAgcmV0dXJuIGNo
cm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0KHBvcnRfbmFtZSwgb3B0aW9ucykKKyAgICBl
bGlmIHBvcnRfdG9fdXNlLnN0YXJ0d2l0aCgnY2hyb21pdW0td2luJyk6CisgICAgICAgIGltcG9y
dCBjaHJvbWl1bV93aW4KKyAgICAgICAgcmV0dXJuIGNocm9taXVtX3dpbi5DaHJvbWl1bVdpblBv
cnQocG9ydF9uYW1lLCBvcHRpb25zKQogCi0jIFdlIG1heSBub3Qgc3VwcG9ydCB0aGUgdmVyc2lv
biBvZiBQeXRob24gdGhhdCBhIHVzZXIgaGFzIGluc3RhbGxlZCAoQ3lnd2luCi0jIGVzcGVjaWFs
bHkgaGFzIGhhZCBwcm9ibGVtcyksIGJ1dCB3ZSdsbCBhbGxvdyB0aGUgcGxhdGZvcm0gdXRpbHMg
dG8gYmUKLSMgaW5jbHVkZWQgaW4gYW55IGNhc2Ugc28gd2UgZG9uJ3QgZ2V0IGFuIGltcG9ydCBl
cnJvci4KLWlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgotICAgIGZyb20g
Y2hyb21pdW1fd2luIGltcG9ydCAqCi1lbGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAg
ICBmcm9tIGNocm9taXVtX21hYyBpbXBvcnQgKgotZWxpZiBzeXMucGxhdGZvcm0gaW4gKCdsaW51
eCcsICdsaW51eDInLCAnZnJlZWJzZDcnLCAnb3BlbmJzZDQnKToKLSAgICBmcm9tIGNocm9taXVt
X2xpbnV4IGltcG9ydCAqCisgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigndW5zdXBwb3J0
ZWQgcG9ydDogJXMnICUgcG9ydF9uYW1lKQpJbmRleDogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5weQkocmV2aXNpb24gNTQz
MjgpCisrKyBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2Jh
c2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxNiBAQAogIiIiQmFzZSBjbGFzcyB3
aXRoIGNvbW1vbiByb3V0aW5lcyBiZXR3ZWVuIHRoZSBBcGFjaGUgYW5kIExpZ2h0dHBkIHNlcnZl
cnMuIiIiCiAKIGltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKIGltcG9ydCB0aW1lCiBpbXBvcnQg
dXJsbGliCiAKIAogY2xhc3MgSHR0cFNlcnZlckJhc2Uob2JqZWN0KToKIAorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwb3J0X29iaik6CisgICAgICAgIHNlbGYuX3BvcnRfb2JqID0gcG9ydF9vYmoK
KwogICAgIGRlZiB3YWl0X2Zvcl9hY3Rpb24oc2VsZiwgYWN0aW9uKToKICAgICAgICAgIiIiUmVw
ZWF0IHRoZSBhY3Rpb24gZm9yIDIwIHNlY29uZHMgb3IgdW50aWwgaXQgc3VjY2VlZHMuIFJldHVy
bnMKICAgICAgICAgd2hldGhlciBpdCBzdWNjZWVkZWQuIiIiCkBAIC02NSwzICs2OSwxMCBAQAog
ICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIHJldHVybiBUcnVlCisKKyAg
ICBkZWYgcmVtb3ZlX2xvZ19maWxlcyhzZWxmLCBmb2xkZXIsIHN0YXJ0c193aXRoKToKKyAgICAg
ICAgZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRlcikKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6
CisgICAgICAgICAgICBpZiBmaWxlLnN0YXJ0c3dpdGgoc3RhcnRzX3dpdGgpOgorICAgICAgICAg
ICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsIGZpbGUpCisgICAgICAgICAg
ICAgICAgb3MucmVtb3ZlKGZ1bGxfcGF0aCkKSW5kZXg6IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5CShyZXZpc2lvbiA1NDMyOCkKKysr
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMSw3ICsxMSw3IEBACiAjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKICMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogIyBk
aXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgICogTmVpdGhlciB0aGUgR29vZ2xlIG5hbWUgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICMKQEAgLTI3LDE4NCArMjcsMTIzIEBA
CiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0iIiJUaGlzIGlzIHRoZSBMaW51eCBp
bXBsZW1lbnRhdGlvbiBvZiB0aGUgcG9ydAotICAgcGFja2FnZS4gVGhpcyBmaWxlIHNob3VsZCBv
bmx5IGJlIGltcG9ydGVkIGJ5IHRoYXQgcGFja2FnZS4iIiIKKyIiIkNocm9taXVtIFdpbiBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCiAKIGltcG9ydCBvcworaW1wb3J0
IHBsYXRmb3JtCitpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwog
Ci1pbXBvcnQgcGF0aF91dGlscworaW1wb3J0IGNocm9taXVtCiAKLWRlZiBwbGF0Zm9ybV9uYW1l
KCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcGxhdGZvcm0gd2UncmUgY3VycmVu
dGx5IHJ1bm5pbmcgb24uIiIiCi0gICAgIyBXZSdyZSBub3QgcmVhZHkgZm9yIHZlcnNpb24tc3Bl
Y2lmaWMgcmVzdWx0cyB5ZXQuIFdoZW4gd2UgdW5jb21tZW50Ci0gICAgIyB0aGlzLCB3ZSBhbHNv
IG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBCYXNlbGluZVNlYXJjaFBhdGgoKQotICAgIHJldHVybiAn
Y2hyb21pdW0td2luJyArIHBsYXRmb3JtX3ZlcnNpb24oKQogCitjbGFzcyBDaHJvbWl1bVdpblBv
cnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKKyAgICAiIiJDaHJvbWl1bSBXaW4gaW1wbGVtZW50
YXRpb24gb2YgdGhlIFBvcnQgY2xhc3MuIiIiCiAKLWRlZiBwbGF0Zm9ybV92ZXJzaW9uKCk6Ci0g
ICAgIiIiUmV0dXJucyB0aGUgdmVyc2lvbiBzdHJpbmcgZm9yIHRoZSBwbGF0Zm9ybSwgZS5nLiAn
LXZpc3RhJyBvcgotICAgICctc25vd2xlb3BhcmQnLiBJZiB0aGUgcGxhdGZvcm0gZG9lcyBub3Qg
ZGlzdGluZ3Vpc2ggYmV0d2VlbgotICAgIG1pbm9yIHZlcnNpb25zLCBpdCByZXR1cm5zICcnLiIi
IgotICAgIHdpbnZlciA9IHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpCi0gICAgaWYgd2ludmVyWzBd
ID09IDYgYW5kICh3aW52ZXJbMV0gPT0gMSk6Ci0gICAgICAgIHJldHVybiAnLTcnCi0gICAgaWYg
d2ludmVyWzBdID09IDYgYW5kICh3aW52ZXJbMV0gPT0gMCk6Ci0gICAgICAgIHJldHVybiAnLXZp
c3RhJwotICAgIGlmIHdpbnZlclswXSA9PSA1IGFuZCAod2ludmVyWzFdID09IDEgb3Igd2ludmVy
WzFdID09IDIpOgotICAgICAgICByZXR1cm4gJy14cCcKLSAgICByZXR1cm4gJycKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIGlm
IHBvcnRfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLXdp
bicgKyBzZWxmLnZlcnNpb24oKQorICAgICAgICBjaHJvbWl1bS5DaHJvbWl1bVBvcnQuX19pbml0
X18oc2VsZiwgcG9ydF9uYW1lLCBvcHRpb25zKQogCisgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9w
YXRoKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9uYW1lID09ICdjaHJvbWl1bS13aW4teHAnOgor
ICAgICAgICAgICAgZGlycy5hcHBlbmQoc2VsZi5iYXNlbGluZV9wYXRoKHNlbGYuX25hbWUpKQor
ICAgICAgICBpZiBzZWxmLl9uYW1lIGluICgnY2hyb21pdW0td2luLXhwJywgJ2Nocm9taXVtLXdp
bi12aXN0YScpOgorICAgICAgICAgICAgZGlycy5hcHBlbmQoc2VsZi5iYXNlbGluZV9wYXRoKCdj
aHJvbWl1bS13aW4tdmlzdGEnKSkKKyAgICAgICAgZGlycy5hcHBlbmQoc2VsZi5iYXNlbGluZV9w
YXRoKCdjaHJvbWl1bS13aW4nKSkKKyAgICAgICAgZGlycy5hcHBlbmQoc2VsZi53ZWJraXRfYmFz
ZWxpbmVfcGF0aCgnd2luJykpCisgICAgICAgIGRpcnMuYXBwZW5kKHNlbGYud2Via2l0X2Jhc2Vs
aW5lX3BhdGgoJ21hYycpKQorICAgICAgICByZXR1cm4gZGlycwogCi1kZWYgZ2V0X251bV9jb3Jl
cygpOgotICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBjb3JlcyBvbiB0aGUgbWFjaGluZS4g
Rm9yIGh5cGVydGhyZWFkZWQgbWFjaGluZXMsCi0gICAgdGhpcyB3aWxsIGJlIGRvdWJsZSB0aGUg
bnVtYmVyIG9mIGFjdHVhbCBwcm9jZXNzb3JzLiIiIgotICAgIHJldHVybiBpbnQob3MuZW52aXJv
bi5nZXQoJ05VTUJFUl9PRl9QUk9DRVNTT1JTJywgMSkpCisgICAgZGVmIGNoZWNrX3N5c19kZXBz
KHNlbGYpOgorICAgICAgICAjIFRPRE8oZHByYW5rZSk6IGltcGxlbWVudCB0aGlzCisgICAgICAg
IHJldHVybiBUcnVlCiAKKyAgICBkZWYgZ2V0X2Fic29sdXRlX3BhdGgoc2VsZiwgZmlsZW5hbWUp
OgorICAgICAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIHBhdGggaW4gdW5peCBmb3JtYXQgZm9y
IHRoZSBnaXZlbiBmaWxlbmFtZS4iIiIKKyAgICAgICAgYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0
aChmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCiAKLWRl
ZiBiYXNlbGluZV9wYXRoKHBsYXRmb3JtPU5vbmUpOgotICAgICIiIlJldHVybnMgdGhlIHBhdGgg
cmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUgZm9yIHRoZQotICAgIGJhc2Vs
aW5lcyBmb3IgdGhlIHNwZWNpZmllZCBwbGF0Zm9ybSB2ZXJzaW9uLiBJZiB8cGxhdGZvcm18IGlz
IE5vbmUsCi0gICAgdGhlbiB0aGUgdmVyc2lvbiBjdXJyZW50bHkgaW4gdXNlIGlzIHVzZWQuIiIi
Ci0gICAgaWYgcGxhdGZvcm0gaXMgTm9uZToKLSAgICAgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybV9u
YW1lKCkKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgJ2Rh
dGEnLCAnbGF5b3V0X3Rlc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAncGxhdGZvcm0nLCBwbGF0Zm9ybSwgJ0xheW91dFRlc3RzJykKKyAgICBkZWYgbnVtX2NvcmVz
KHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KG9zLmVudmlyb24uZ2V0KCdOVU1CRVJfT0ZfUFJP
Q0VTU09SUycsIDEpKQogCisgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToKKyAgICAg
ICAgIyBXZSByZXR1cm4gJ3dpbi14cCcsIG5vdCAnY2hyb21pdW0td2luLXhwJyBoZXJlLCBmb3Ig
Y29udmVuaWVuY2UuCisgICAgICAgIHJldHVybiAnd2luJyArIHNlbGYudmVyc2lvbigpCiAKLWRl
ZiBiYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybT1Ob25lKToKLSAgICAiIiJSZXR1cm5zIHRo
ZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgYmFzZWxpbmVzL3Jlc3VsdHMsIGlu
Ci0gICAgb3JkZXIgb2YgcHJlZmVyZW5jZS4gUGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0b3Ag
b2YgdGhlIHNvdXJjZSB0cmVlLiIiIgotICAgIGRpcnMgPSBbXQotICAgIGlmIHBsYXRmb3JtIGlz
IE5vbmU6Ci0gICAgICAgIHBsYXRmb3JtID0gcGxhdGZvcm1fbmFtZSgpCisgICAgZGVmIHZlcnNp
b24oc2VsZik6CisgICAgICAgIHdpbnZlciA9IHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpCisgICAg
ICAgIGlmIHdpbnZlclswXSA9PSA2IGFuZCAod2ludmVyWzFdID09IDEpOgorICAgICAgICAgICAg
cmV0dXJuICctNycKKyAgICAgICAgaWYgd2ludmVyWzBdID09IDYgYW5kICh3aW52ZXJbMV0gPT0g
MCk6CisgICAgICAgICAgICByZXR1cm4gJy12aXN0YScKKyAgICAgICAgaWYgd2ludmVyWzBdID09
IDUgYW5kICh3aW52ZXJbMV0gPT0gMSBvciB3aW52ZXJbMV0gPT0gMik6CisgICAgICAgICAgICBy
ZXR1cm4gJy14cCcKKyAgICAgICAgcmV0dXJuICcnCiAKLSAgICBpZiBwbGF0Zm9ybSA9PSAnY2hy
b21pdW0td2luLXhwJzoKLSAgICAgICAgZGlycy5hcHBlbmQoYmFzZWxpbmVfcGF0aChwbGF0Zm9y
bSkpCi0gICAgaWYgcGxhdGZvcm0gaW4gKCdjaHJvbWl1bS13aW4teHAnLCAnY2hyb21pdW0td2lu
LXZpc3RhJyk6Ci0gICAgICAgIGRpcnMuYXBwZW5kKGJhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdp
bi12aXN0YScpKQotICAgIGRpcnMuYXBwZW5kKGJhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbicp
KQotICAgIGRpcnMuYXBwZW5kKHBhdGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3dpbicp
KQotICAgIGRpcnMuYXBwZW5kKHBhdGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycp
KQotICAgIHJldHVybiBkaXJzCisgICAgIworICAgICMgUFJPVEVDVEVEIFJPVVRJTkVTCisgICAg
IwogCisgICAgZGVmIF9idWlsZF9wYXRoKHNlbGYsICpjb21wcyk6CisgICAgICAgICMgRklYTUUo
ZHByYW5rZSk6IGFsbG93IGZvciBidWlsZHMgdW5kZXIgJ2Nocm9tZScgYXMgd2VsbC4KKyAgICAg
ICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoJ3dlYmtpdCcsIHNlbGYuX29w
dGlvbnMudGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqY29tcHMpCiAKLWRlZiB3ZGlmZl9wYXRoKCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgV0RpZmYg
ZXhlY3V0YWJsZSwgd2hvc2UgYmluYXJ5IGlzIGNoZWNrZWQgaW4gb24gV2luIiIiCi0gICAgcmV0
dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdi
aW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3ZGlmZi5leGUnKQor
ICAgIGRlZiBfbGlnaHR0cGRfcGF0aChzZWxmLCAqY29tcHMpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQnLCAnd2lu
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbXBzKQog
CisgICAgZGVmIF9raWxsX3Byb2Nlc3Moc2VsZiwgcGlkKToKKyAgICAgICAgIiIiRm9yY2VmdWxs
eSBraWxsIHRoZSBwcm9jZXNzLgogCi1kZWYgaW1hZ2VfZGlmZl9wYXRoKHRhcmdldCk6Ci0gICAg
IiIiUmV0dXJuIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBiaW5hcnkgcGF0aCBmb3IgdGhlIGltYWdl
IGNvbXBhcmUgdXRpbC4KLSAgICAgICAgIFdlIHVzZSB0aGlzIGlmIHdlIGNhbid0IGZpbmQgdGhl
IGJpbmFyeSBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbgotICAgICAgICAgaW4gcGF0aF91dGlscy4K
KyAgICAgICAgQXJnczoKKyAgICAgICAgcGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUg
a2lsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCgndGFza2tpbGwu
ZXhlJywgJy9mJywgJy9waWQnLCBzdHIocGlkKSksCisgICAgICAgICAgICAgICAgICAgICAgICBz
dGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1
YnByb2Nlc3MuUElQRSkKIAotICAgIEFyZ3M6Ci0gICAgICB0YXJnZXQ6IEJ1aWxkIHRhcmdldCBt
b2RlIChkZWJ1ZyBvciByZWxlYXNlKQotICAgICIiIgotICAgIHJldHVybiBfZmluZF9iaW5hcnko
dGFyZ2V0LCAnaW1hZ2VfZGlmZi5leGUnKQorICAgIGRlZiBfcGF0aF90b19hcGFjaGUoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCd0aGlyZF9wYXJ0
eScsICdjeWd3aW4nLCAndXNyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3NiaW4nLCAnaHR0cGQnKQogCisgICAgZGVmIF9wYXRoX3RvX2FwYWNoZV9jb25m
aWdfZmlsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmxheW91dF90
ZXN0c19kaXIoKSwgJ2h0dHAnLCAnY29uZicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J2N5Z3dpbi1odHRwZC5jb25mJykKIAotZGVmIGxheW91dF90ZXN0X2hlbHBlcl9wYXRoKHRhcmdl
dCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBiaW5hcnkgcGF0aCBmb3Ig
dGhlIGxheW91dCB0ZXN0IGhlbHBlci4KLSAgICBXZSB1c2UgdGhpcyBpZiB3ZSBjYW4ndCBmaW5k
IHRoZSBiaW5hcnkgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24KLSAgICBpbiBwYXRoX3V0aWxzLgor
ICAgIGRlZiBfcGF0aF90b19saWdodHRwZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xp
Z2h0dHBfcGF0aCgnTGlnaHRUUEQuZXhlJykKIAotICAgIEFyZ3M6Ci0gICAgICB0YXJnZXQ6IEJ1
aWxkIHRhcmdldCBtb2RlIChkZWJ1ZyBvciByZWxlYXNlKQotICAgICIiIgotICAgIHJldHVybiBf
ZmluZF9iaW5hcnkodGFyZ2V0LCAnbGF5b3V0X3Rlc3RfaGVscGVyLmV4ZScpCisgICAgZGVmIF9w
YXRoX3RvX2xpZ2h0dHBkX21vZHVsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9saWdo
dHRwX3BhdGgoJ2xpYicpCiAKKyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGRfcGhwKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fbGlnaHR0cF9wYXRoKCdwaHA1JywgJ3BocC1jZ2kuZXhlJykK
IAotZGVmIHRlc3Rfc2hlbGxfcGF0aCh0YXJnZXQpOgotICAgICIiIlJldHVybiB0aGUgcGxhdGZv
cm0tc3BlY2lmaWMgYmluYXJ5IHBhdGggZm9yIG91ciBUZXN0U2hlbGwuCi0gICAgICAgV2UgdXNl
IHRoaXMgaWYgd2UgY2FuJ3QgZmluZCB0aGUgYmluYXJ5IGluIHRoZSBkZWZhdWx0IGxvY2F0aW9u
Ci0gICAgICAgaW4gcGF0aF91dGlscy4KKyAgICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgndGVzdF9zaGVsbC5leGUnKQogCi0gICAg
QXJnczoKLSAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2Up
Ci0gICAgIiIiCi0gICAgcmV0dXJuIF9maW5kX2JpbmFyeSh0YXJnZXQsICd0ZXN0X3NoZWxsLmV4
ZScpCisgICAgZGVmIF9wYXRoX3RvX2hlbHBlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2J1aWxkX3BhdGgoJ2xheW91dF90ZXN0X2hlbHBlci5leGUnKQogCisgICAgZGVmIF9wYXRoX3Rv
X2ltYWdlX2RpZmYoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdsYXlv
dXRfdGVzdF9oZWxwZXIuZXhlJykKIAotZGVmIGFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKToKLSAg
ICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBhY2hlIiIiCi0gICAg
cGF0aCA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbics
ICJ1c3IiLCAic2JpbiIpCi0gICAgIyBEb24ndCByZXR1cm4gaHR0cGQuZXhlIHNpbmNlIHdlIHdh
bnQgdG8gdXNlIHRoaXMgZnJvbSBjeWd3aW4uCi0gICAgcmV0dXJuIG9zLnBhdGguam9pbihwYXRo
LCAiaHR0cGQiKQorICAgIGRlZiBfcGF0aF90b193ZGlmZihzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdi
aW4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2RpZmYu
ZXhlJykKIAorICAgIGRlZiBfc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlbGYsIHNlcnZlcl9waWQp
OgorICAgICAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBkIHdlYiBzZXJ2ZXIuIEJsb2NrcyB1
bnRpbCBpdCdzIGZ1bGx5CisgICAgICAgIHNodXQgZG93bi4KIAotZGVmIGFwYWNoZV9jb25maWdf
ZmlsZV9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0byBBcGFjaGUgY29uZmlnIGZp
bGUiIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgidGhpcmRfcGFydHki
LCAiV2ViS2l0IiwgIkxheW91dFRlc3RzIiwKLSAgICAgICAgImh0dHAiLCAiY29uZiIsICJjeWd3
aW4taHR0cGQuY29uZiIpCi0KLQotZGVmIGxpZ2h0dHBkX2V4ZWN1dGFibGVfcGF0aCgpOgotICAg
ICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBMaWdIVFRQZCIiIgotICAg
IHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRw
ZCcsICd3aW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMaWdodFRQ
RC5leGUnKQotCi0KLWRlZiBsaWdodHRwZF9tb2R1bGVfcGF0aCgpOgotICAgICIiIlJldHVybnMg
dGhlIGxpYnJhcnkgbW9kdWxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCi0gICAgcmV0dXJuIHBhdGhf
dXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ3dpbicsICds
aWInKQotCi0KLWRlZiBsaWdodHRwZF9waHBfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIFBI
UCBleGVjdXRhYmxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMu
cGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ3dpbicsICdwaHA1JywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGhwLWNnaS5leGUnKQotCi0K
LWRlZiBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2VydmVyX3BpZCk6Ci0gICAgIiIiU2h1dCBkb3du
IHRoZSBsaWdodHRwZCB3ZWIgc2VydmVyLiBCbG9ja3MgdW50aWwgaXQncyBmdWxseSBzaHV0IGRv
d24uCi0KLSAgICBBcmdzOgotICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhl
IHJ1bm5pbmcgc2VydmVyLgotICAgICAgICAgIFVudXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9u
IG9mIHRoZSBtZXRob2QuCi0gICAgIiIiCi0gICAgc3VicHJvY2Vzcy5Qb3BlbigoJ3Rhc2traWxs
LmV4ZScsICcvZicsICcvaW0nLCAnTGlnaHRUUEQuZXhlJyksCi0gICAgICAgICAgICAgICAgICAg
ICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1
YnByb2Nlc3MuUElQRSkud2FpdCgpCi0gICAgc3VicHJvY2Vzcy5Qb3BlbigoJ3Rhc2traWxsLmV4
ZScsICcvZicsICcvaW0nLCAnaHR0cGQuZXhlJyksCi0gICAgICAgICAgICAgICAgICAgICBzdGRv
dXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nl
c3MuUElQRSkud2FpdCgpCi0KLQotZGVmIGtpbGxfcHJvY2VzcyhwaWQpOgotICAgICIiIkZvcmNl
ZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KLQotICAgIEFyZ3M6Ci0gICAgICBwaWQ6IFRoZSBpZCBv
ZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCi0gICAgIiIiCi0gICAgc3VicHJvY2Vzcy5jYWxs
KCgndGFza2tpbGwuZXhlJywgJy9mJywgJy9waWQnLCBzdHIocGlkKSksCi0gICAgICAgICAgICAg
ICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgIHN0ZGVy
cj1zdWJwcm9jZXNzLlBJUEUpCi0KLQotZGVmIGtpbGxfYWxsX3Rlc3Rfc2hlbGxzKHNlbGYpOgot
ICAgICIiIktpbGxzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHRlc3Rfc2hlbGwgYmluYXJ5IGN1cnJl
bnRseSBydW5uaW5nLiIiIgotICAgIHN1YnByb2Nlc3MuUG9wZW4oKCd0YXNra2lsbC5leGUnLCAn
L2YnLCAnL2ltJywgJ3Rlc3Rfc2hlbGwuZXhlJyksCi0gICAgICAgICAgICAgICAgICAgICBzdGRv
dXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nl
c3MuUElQRSkud2FpdCgpCi0KLSMKLSMgUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb25zLgotIwotCi0K
LWRlZiBfZmluZF9iaW5hcnkodGFyZ2V0LCBiaW5hcnkpOgotICAgICIiIk9uIFdpbmRvd3MsIHdl
IGxvb2sgZm9yIGJpbmFyaWVzIHRoYXQgd2UgY29tcGlsZSBpbiBwb3RlbnRpYWxseQotICAgIHR3
byBwbGFjZXM6IHNyYy93ZWJraXQvJHRhcmdldCAocHJlZmVyYWJseSwgd2hpY2ggd2UgZ2V0IGlm
IHdlCi0gICAgYnVpbHQgdXNpbmcgd2Via2l0X2dsdWUuZ3lwKSwgb3Igc3JjL2Nocm9tZS8kdGFy
Z2V0IChpZiBjb21waWxlZCBzb21lCi0gICAgb3RoZXIgd2F5KS4iIiIKLSAgICB0cnk6Ci0gICAg
ICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCB0YXJnZXQsIGJp
bmFyeSkKLSAgICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6Ci0gICAgICAgIHRyeToK
LSAgICAgICAgICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCdjaHJvbWUnLCB0
YXJnZXQsIGJpbmFyeSkKLSAgICAgICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgot
ICAgICAgICAgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ2J1aWxkJywgdGFy
Z2V0LCBiaW5hcnkpCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzZXJ2ZXJfcGlkOiBUaGUg
cHJvY2VzcyBJRCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCisgICAgICAgICIiIgorICAgICAgICBz
dWJwcm9jZXNzLlBvcGVuKCgndGFza2tpbGwuZXhlJywgJy9mJywgJy9pbScsICdMaWdodFRQRC5l
eGUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisg
ICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKS53YWl0KCkKKyAg
ICAgICAgc3VicHJvY2Vzcy5Qb3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvaW0nLCAnaHR0
cGQuZXhlJyksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBF
LAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgp
CkluZGV4OiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hy
b21pdW1fbGludXgucHkJKHJldmlzaW9uIDU0MzI4KQorKysgU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9saW51eC5weQkod29ya2luZyBjb3B5KQpAQCAtMjcsMjIy
ICsyNywxMTggQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLSIiIlRoaXMgaXMg
dGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBwb3J0Ci0gICBwYWNrYWdlLiBUaGlzIGZp
bGUgc2hvdWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBwYWNrYWdlLiIiIgorIiIiQ2hyb21p
dW0gTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIKIAogaW1wb3J0
IG9zCitpbXBvcnQgcGxhdGZvcm0KIGltcG9ydCBzaWduYWwKIGltcG9ydCBzdWJwcm9jZXNzCi1p
bXBvcnQgc3lzCi1pbXBvcnQgbG9nZ2luZwogCi1pbXBvcnQgY2hyb21pdW1fd2luCi1pbXBvcnQg
cGF0aF91dGlscworaW1wb3J0IGNocm9taXVtCiAKIAotZGVmIHBsYXRmb3JtX25hbWUoKToKLSAg
ICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBwbGF0Zm9ybSB3ZSdyZSBjdXJyZW50bHkgcnVu
bmluZyBvbi4iIiIKLSAgICByZXR1cm4gJ2Nocm9taXVtLWxpbnV4JyArIHBsYXRmb3JtX3ZlcnNp
b24oKQorY2xhc3MgQ2hyb21pdW1MaW51eFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKKyAg
ICAiIiJDaHJvbWl1bSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBjbGFzcy4iIiIK
IAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lKToK
KyAgICAgICAgaWYgcG9ydF9uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBwb3J0X25hbWUgPSAn
Y2hyb21pdW0tbGludXgnCisgICAgICAgIGNocm9taXVtLkNocm9taXVtUG9ydC5fX2luaXRfXyhz
ZWxmLCBwb3J0X25hbWUsIG9wdGlvbnMpCiAKLWRlZiBwbGF0Zm9ybV92ZXJzaW9uKCk6Ci0gICAg
IiIiUmV0dXJucyB0aGUgdmVyc2lvbiBzdHJpbmcgZm9yIHRoZSBwbGF0Zm9ybSwgZS5nLiAnLXZp
c3RhJyBvcgotICAgICctc25vd2xlb3BhcmQnLiBJZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgZGlz
dGluZ3Vpc2ggYmV0d2VlbgotICAgIG1pbm9yIHZlcnNpb25zLCBpdCByZXR1cm5zICcnLiIiIgot
ICAgIHJldHVybiAnJworICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIFtzZWxmLmJhc2VsaW5lX3BhdGgoKSwKKyAgICAgICAgICAgICAgICBzZWxmLmNo
cm9taXVtX2Jhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbicpLAorICAgICAgICAgICAgICAgIHNl
bGYud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3dpbicpLAorICAgICAgICAgICAgICAgIHNlbGYud2Vi
a2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpXQogCisgICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYp
OgorICAgICAgICAjIFdlIGhhdmUgbm8gcGxhdGZvcm0tc3BlY2lmaWMgZGVwZW5kZW5jaWVzIHRv
IGNoZWNrLgorICAgICAgICByZXR1cm4gVHJ1ZQogCi1kZWYgZ2V0X251bV9jb3JlcygpOgotICAg
ICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBjb3JlcyBvbiB0aGUgbWFjaGluZS4gRm9yIGh5cGVy
dGhyZWFkZWQgbWFjaGluZXMsCi0gICAgdGhpcyB3aWxsIGJlIGRvdWJsZSB0aGUgbnVtYmVyIG9m
IGFjdHVhbCBwcm9jZXNzb3JzLiIiIgotICAgIG51bV9jb3JlcyA9IG9zLnN5c2NvbmYoIlNDX05Q
Uk9DRVNTT1JTX09OTE4iKQotICAgIGlmIGlzaW5zdGFuY2UobnVtX2NvcmVzLCBpbnQpIGFuZCBu
dW1fY29yZXMgPiAwOgotICAgICAgICByZXR1cm4gbnVtX2NvcmVzCi0gICAgcmV0dXJuIDEKKyAg
ICBkZWYgbnVtX2NvcmVzKHNlbGYpOgorICAgICAgICBudW1fY29yZXMgPSBvcy5zeXNjb25mKCJT
Q19OUFJPQ0VTU09SU19PTkxOIikKKyAgICAgICAgaWYgaXNpbnN0YW5jZShudW1fY29yZXMsIGlu
dCkgYW5kIG51bV9jb3JlcyA+IDA6CisgICAgICAgICAgICByZXR1cm4gbnVtX2NvcmVzCisgICAg
ICAgIHJldHVybiAxCiAKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1lKHNlbGYpOgorICAgICAg
ICAjIFdlIHVzZSAnbGludXgnIGluc3RlYWQgb2YgJ2Nocm9taXVtLWxpbnV4JyBpbiB0ZXN0X2V4
cGVjdGF0aW9ucy50eHQuCisgICAgICAgIHJldHVybiAnbGludXgnCiAKLWRlZiBiYXNlbGluZV9w
YXRoKHBsYXRmb3JtPU5vbmUpOgotICAgICIiIlJldHVybnMgdGhlIHBhdGggcmVsYXRpdmUgdG8g
dGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUgZm9yIHRoZQotICAgIGJhc2VsaW5lcyBmb3IgdGhl
IHNwZWNpZmllZCBwbGF0Zm9ybSB2ZXJzaW9uLiBJZiB8cGxhdGZvcm18IGlzIE5vbmUsCi0gICAg
dGhlbiB0aGUgdmVyc2lvbiBjdXJyZW50bHkgaW4gdXNlIGlzIHVzZWQuIiIiCi0gICAgaWYgcGxh
dGZvcm0gaXMgTm9uZToKLSAgICAgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybV9uYW1lKCkKLSAgICBy
ZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgJ2RhdGEnLCAnbGF5b3V0
X3Rlc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm0n
LCBwbGF0Zm9ybSwgJ0xheW91dFRlc3RzJykKKyAgICBkZWYgdmVyc2lvbihzZWxmKToKKyAgICAg
ICAgIyBXZSBkb24ndCBoYXZlIGRpZmZlcmVudCB2ZXJzaW9ucyBvbiBsaW51eC4KKyAgICAgICAg
cmV0dXJuICcnCiAKKyAgICAjCisgICAgIyBQUk9URUNURUQgTUVUSE9EUworICAgICMKIAotZGVm
IGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtPU5vbmUpOgotICAgICIiIlJldHVybnMgdGhl
IGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBiYXNlbGluZXMvcmVzdWx0cywgaW4K
LSAgICBvcmRlciBvZiBwcmVmZXJlbmNlLiBQYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIHRvcCBv
ZiB0aGUgc291cmNlIHRyZWUuIiIiCi0gICAgcmV0dXJuIFtiYXNlbGluZV9wYXRoKHBsYXRmb3Jt
KSwKLSAgICAgICAgICAgIGNocm9taXVtX3dpbi5iYXNlbGluZV9wYXRoKCdjaHJvbWl1bS13aW4n
KSwKLSAgICAgICAgICAgIHBhdGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3dpbicpLAot
ICAgICAgICAgICAgcGF0aF91dGlscy53ZWJraXRfYmFzZWxpbmVfcGF0aCgnbWFjJyldCisgICAg
ZGVmIF9idWlsZF9wYXRoKHNlbGYsICpjb21wcyk6CisgICAgICAgIHJldHVybiBzZWxmLnBhdGhf
ZnJvbV9jaHJvbWl1bV9iYXNlKCdzY29uc2J1aWxkJywgc2VsZi5fb3B0aW9ucy50YXJnZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb21wcykKIAorICAg
IGRlZiBfa2lsbF9wcm9jZXNzKHNlbGYsIHBpZCk6CisgICAgICAgICIiIkZvcmNlZnVsbHkga2ls
bCB0aGUgcHJvY2Vzcy4KIAotZGVmIGFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKToKLSAgICAiIiJS
ZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBhY2hlIiIiCi0gICAgcGF0aCA9
IG9zLnBhdGguam9pbigiL3VzciIsICJzYmluIiwgImFwYWNoZTIiKQotICAgIGlmIG9zLnBhdGgu
ZXhpc3RzKHBhdGgpOgotICAgICAgICByZXR1cm4gcGF0aAotICAgIHByaW50ICJVbmFibGUgdG8g
ZmluZSBBcGFjaGUgZXhlY3V0YWJsZSAlcyIgJSBwYXRoCi0gICAgX21pc3NpbmdfYXBhY2hlKCkK
KyAgICAgICAgQXJnczoKKyAgICAgICAgcGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUg
a2lsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxM
KQogCisgICAgZGVmIF9raWxsX2FsbF9wcm9jZXNzKHNlbGYsIHByb2Nlc3NfbmFtZSk6CisgICAg
ICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwpCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbJ2tp
bGxhbGwnLCAnLVRFUk0nLCAnLXUnLCBvcy5nZXRlbnYoJ1VTRVInKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1udWxsKQorICAgICAgICBudWxsLmNsb3Nl
KCkKIAotZGVmIGFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUg
cGF0aCB0byBBcGFjaGUgY29uZmlnIGZpbGUiIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRo
X2Zyb21fYmFzZSgidGhpcmRfcGFydHkiLCAiV2ViS2l0IiwgIkxheW91dFRlc3RzIiwKLSAgICAg
ICAgImh0dHAiLCAiY29uZiIsICJhcGFjaGUyLWRlYmlhbi1odHRwZC5jb25mIikKKyAgICBkZWYg
X3BhdGhfdG9fYXBhY2hlKHNlbGYpOgorICAgICAgICByZXR1cm4gJy91c3Ivc2Jpbi9hcGFjaGUy
JwogCisgICAgZGVmIF9wYXRoX3RvX2FwYWNoZV9jb25maWdfZmlsZShzZWxmKToKKyAgICAgICAg
cmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ2h0dHAnLCAnY29u
ZicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwYWNoZTItZGViaWFuLWh0dHBkLmNv
bmYnKQogCi1kZWYgbGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0
aGUgZXhlY3V0YWJsZSBwYXRoIHRvIHN0YXJ0IExpZ0hUVFBkIiIiCi0gICAgYmlucGF0aCA9ICIv
dXNyL3NiaW4vbGlnaHR0cGQiCi0gICAgaWYgb3MucGF0aC5leGlzdHMoYmlucGF0aCk6Ci0gICAg
ICAgIHJldHVybiBiaW5wYXRoCi0gICAgcHJpbnQgIlVuYWJsZSB0byBmaW5kIExpZ0hUVFBkIGV4
ZWN1dGFibGUgJXMiICUgYmlucGF0aAotICAgIF9taXNzaW5nX2xpZ2h0dHBkKCkKKyAgICBkZWYg
X3BhdGhfdG9fbGlnaHR0cGQoc2VsZik6CisgICAgICAgIHJldHVybiAiL3Vzci9zYmluL2xpZ2h0
dHBkIgogCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkX21vZHVsZXMoc2VsZik6CisgICAgICAg
IHJldHVybiAiL3Vzci9saWIvbGlnaHR0cGQiCiAKLWRlZiBsaWdodHRwZF9tb2R1bGVfcGF0aCgp
OgotICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxlIHBhdGggZm9yIExpZ0hUVFBkIiIi
Ci0gICAgbW9kcGF0aCA9ICIvdXNyL2xpYi9saWdodHRwZCIKLSAgICBpZiBvcy5wYXRoLmV4aXN0
cyhtb2RwYXRoKToKLSAgICAgICAgcmV0dXJuIG1vZHBhdGgKLSAgICBwcmludCAiVW5hYmxlIHRv
IGZpbmQgTGlnSFRUUGQgbW9kdWxlcyAlcyIgJSBtb2RwYXRoCi0gICAgX21pc3NpbmdfbGlnaHR0
cGQoKQorICAgIGRlZiBfcGF0aF90b19saWdodHRwZF9waHAoc2VsZik6CisgICAgICAgIHJldHVy
biAiL3Vzci9iaW4vcGhwLWNnaSIKIAorICAgIGRlZiBfcGF0aF90b19kcml2ZXIoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCd0ZXN0X3NoZWxsJykKIAotZGVmIGxpZ2h0
dHBkX3BocF9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgUEhQIGV4ZWN1dGFibGUgcGF0aCBm
b3IgTGlnSFRUUGQiIiIKLSAgICBiaW5wYXRoID0gIi91c3IvYmluL3BocC1jZ2kiCi0gICAgaWYg
b3MucGF0aC5leGlzdHMoYmlucGF0aCk6Ci0gICAgICAgIHJldHVybiBiaW5wYXRoCi0gICAgcHJp
bnQgIlVuYWJsZSB0byBmaW5kIFBIUCBDR0kgZXhlY3V0YWJsZSAlcyIgJSBiaW5wYXRoCi0gICAg
X21pc3NpbmdfbGlnaHR0cGQoKQorICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6CisgICAg
ICAgIHJldHVybiBOb25lCiAKKyAgICBkZWYgX3BhdGhfdG9faW1hZ2VfZGlmZihzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2ltYWdlX2RpZmYnKQogCi1kZWYgd2RpZmZf
cGF0aCgpOgotICAgICIiIlBhdGggdG8gdGhlIFdEaWZmIGV4ZWN1dGFibGUsIHdoaWNoIHdlIGFz
c3VtZSBpcyBhbHJlYWR5IGluc3RhbGxlZCBhbmQKLSAgICBpbiB0aGUgdXNlcidzICRQQVRILiIi
IgotICAgIHJldHVybiAnd2RpZmYnCisgICAgZGVmIF9wYXRoX3RvX3dkaWZmKHNlbGYpOgorICAg
ICAgICByZXR1cm4gJ3dkaWZmJwogCisgICAgZGVmIF9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2Vs
Ziwgc2VydmVyX3BpZCk6CisgICAgICAgICIiIlNodXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNl
cnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVsbHkKKyAgICAgICAgc2h1dCBkb3duLgogCi1kZWYg
aW1hZ2VfZGlmZl9wYXRoKHRhcmdldCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgaW1hZ2VfZGlmZiBi
aW5hcnkuCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9kZSAoZGVi
dWcgb3IgcmVsZWFzZSkiIiIKLSAgICByZXR1cm4gX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRzKHRh
cmdldCwgJ2ltYWdlX2RpZmYnKQotCi0KLWRlZiBsYXlvdXRfdGVzdF9oZWxwZXJfcGF0aCh0YXJn
ZXQpOgotICAgICIiIlBhdGggdG8gdGhlIGxheW91dF90ZXN0IGhlbHBlciBiaW5hcnksIGlmIG5l
ZWRlZCwgZW1wdHkgb3RoZXJ3aXNlIiIiCi0gICAgcmV0dXJuICcnCi0KLQotZGVmIHRlc3Rfc2hl
bGxfcGF0aCh0YXJnZXQpOgotICAgICIiIlJldHVybiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYmlu
YXJ5IHBhdGggZm9yIG91ciBUZXN0U2hlbGwuCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBC
dWlsZCB0YXJnZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkgIiIiCi0gICAgaWYgdGFyZ2V0IGlu
ICgnRGVidWcnLCAnUmVsZWFzZScpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkZWJ1Z19w
YXRoID0gX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRzKCdEZWJ1ZycsICd0ZXN0X3NoZWxsJykKLSAg
ICAgICAgICAgIHJlbGVhc2VfcGF0aCA9IF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cygnUmVsZWFz
ZScsICd0ZXN0X3NoZWxsJykKLQotICAgICAgICAgICAgZGVidWdfbXRpbWUgPSBvcy5zdGF0KGRl
YnVnX3BhdGgpLnN0X210aW1lCi0gICAgICAgICAgICByZWxlYXNlX210aW1lID0gb3Muc3RhdChy
ZWxlYXNlX3BhdGgpLnN0X210aW1lCi0KLSAgICAgICAgICAgIGlmIGRlYnVnX210aW1lID4gcmVs
ZWFzZV9tdGltZSBhbmQgdGFyZ2V0ID09ICdSZWxlYXNlJyBvciBcCi0gICAgICAgICAgICAgICBy
ZWxlYXNlX210aW1lID4gZGVidWdfbXRpbWUgYW5kIHRhcmdldCA9PSAnRGVidWcnOgotICAgICAg
ICAgICAgICAgIGxvZ2dpbmcuaW5mbygnXHgxYlszMW1XYXJuaW5nOiB5b3UgYXJlIG5vdCBydW5u
aW5nIHRoZSBtb3N0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlY2VudCB0ZXN0
X3NoZWxsIGJpbmFyeS4gWW91IG5lZWQgdG8gcGFzcyAnCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICctLWRlYnVnIG9yIG5vdCB0byBzZWxlY3QgYmV0d2VlbiBEZWJ1ZyBhbmQgJwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVsZWFzZS5ceDFiWzBtJykKLSAgICAgICAgIyBU
aGlzIHdpbGwgZmFpbCBpZiB3ZSBkb24ndCBoYXZlIGJvdGggYSBkZWJ1ZyBhbmQgcmVsZWFzZSBi
aW5hcnkuCi0gICAgICAgICMgVGhhdCdzIGZpbmUgYmVjYXVzZSwgaW4gdGhpcyBjYXNlLCB3ZSBt
dXN0IGFscmVhZHkgYmUgcnVubmluZyB0aGUKLSAgICAgICAgIyBtb3N0IHVwLXRvLWRhdGUgb25l
LgotICAgICAgICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6Ci0gICAgICAgICAgICBw
YXNzCi0KLSAgICByZXR1cm4gX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRzKHRhcmdldCwgJ3Rlc3Rf
c2hlbGwnKQotCi0KLWRlZiBmdXp6eV9tYXRjaF9wYXRoKCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBw
YXRoIHRvIHRoZSBmdXp6eSBtYXRjaGVyIGJpbmFyeS4iIiIKLSAgICByZXR1cm4gcGF0aF91dGls
cy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnZnV6enltYXRjaCcsICdmdXp6eW1hdGNo
JykKLQotCi1kZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9waWQpOgotICAgICIiIlNo
dXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVsbHkg
c2h1dCBkb3duLgotCi0gICAgQXJnczoKLSAgICAgIHNlcnZlcl9waWQ6IFRoZSBwcm9jZXNzIElE
IG9mIHRoZSBydW5uaW5nIHNlcnZlci4KLSAgICAiIiIKLSAgICAjIHNlcnZlcl9waWQgaXMgbm90
IHNldCB3aGVuICJodHRwX3NlcnZlci5weSBzdG9wIiBpcyBydW4gbWFudWFsbHkuCi0gICAgaWYg
c2VydmVyX3BpZCBpcyBOb25lOgotICAgICAgICAjIFRoaXMgaXNuJ3QgaWRlYWwsIHNpbmNlIGl0
IGNvdWxkIGNvbmZsaWN0IHdpdGggd2ViIHNlcnZlciBwcm9jZXNzZXMKLSAgICAgICAgIyBub3Qg
c3RhcnRlZCBieSBodHRwX3NlcnZlci5weSwgYnV0IGdvb2QgZW5vdWdoIGZvciBub3cuCi0gICAg
ICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ2xpZ2h0dHBkJykKLSAgICAgICAga2lsbF9hbGxfcHJvY2Vz
cygnYXBhY2hlMicpCi0gICAgZWxzZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3Mua2ls
bChzZXJ2ZXJfcGlkLCBzaWduYWwuU0lHVEVSTSkKLSAgICAgICAgICAgICNUT0RPKG1tb3NzKSBN
YXliZSB0aHJvdyBpbiBhIFNJR0tJTEwganVzdCB0byBiZSBzdXJlPwotICAgICAgICBleGNlcHQg
T1NFcnJvcjoKLSAgICAgICAgICAgICMgU29tZXRpbWVzIHdlIGdldCBhIGJhZCBQSUQgKGUuZy4g
ZnJvbSBhIHN0YWxlIGh0dHBkLnBpZCBmaWxlKSwKLSAgICAgICAgICAgICMgc28gaWYga2lsbCBm
YWlscyBvbiB0aGUgZ2l2ZW4gUElELCBqdXN0IHRyeSB0byAna2lsbGFsbCcgd2ViCi0gICAgICAg
ICAgICAjIHNlcnZlcnMuCi0gICAgICAgICAgICBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIoTm9uZSkK
LQotCi1kZWYga2lsbF9wcm9jZXNzKHBpZCk6Ci0gICAgIiIiRm9yY2VmdWxseSBraWxsIHRoZSBw
cm9jZXNzLgotCi0gICAgQXJnczoKLSAgICAgIHBpZDogVGhlIGlkIG9mIHRoZSBwcm9jZXNzIHRv
IGJlIGtpbGxlZC4KLSAgICAiIiIKLSAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0tJTEwpCi0K
LQotZGVmIGtpbGxfYWxsX3Byb2Nlc3MocHJvY2Vzc19uYW1lKToKLSAgICBudWxsID0gb3Blbihv
cy5kZXZudWxsKQotICAgIHN1YnByb2Nlc3MuY2FsbChbJ2tpbGxhbGwnLCAnLVRFUk0nLCAnLXUn
LCBvcy5nZXRlbnYoJ1VTRVInKSwKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19uYW1lXSwg
c3RkZXJyPW51bGwpCi0gICAgbnVsbC5jbG9zZSgpCi0KLQotZGVmIGtpbGxfYWxsX3Rlc3Rfc2hl
bGxzKCk6Ci0gICAgIiIiS2lsbHMgYWxsIGluc3RhbmNlcyBvZiB0aGUgdGVzdF9zaGVsbCBiaW5h
cnkgY3VycmVudGx5IHJ1bm5pbmcuIiIiCi0gICAga2lsbF9hbGxfcHJvY2VzcygndGVzdF9zaGVs
bCcpCi0KLSMKLSMgUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb25zCi0jCi0KLQotZGVmIF9taXNzaW5n
X2xpZ2h0dHBkKCk6Ci0gICAgcHJpbnQgJ1BsZWFzZSBpbnN0YWxsIHVzaW5nOiAic3VkbyBhcHQt
Z2V0IGluc3RhbGwgbGlnaHR0cGQgcGhwNS1jZ2kiJwotICAgIHByaW50ICdGb3IgY29tcGxldGUg
TGludXggYnVpbGQgcmVxdWlyZW1lbnRzLCBwbGVhc2Ugc2VlOicKLSAgICBwcmludCAnaHR0cDov
L2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGludXhCdWlsZEluc3RydWN0aW9ucycK
LSAgICBzeXMuZXhpdCgxKQotCi0KLWRlZiBfbWlzc2luZ19hcGFjaGUoKToKLSAgICBwcmludCAo
J1BsZWFzZSBpbnN0YWxsIHVzaW5nOiAic3VkbyBhcHQtZ2V0IGluc3RhbGwgYXBhY2hlMiAnCi0g
ICAgICAgICdsaWJhcGFjaGUyLW1vZC1waHA1IicpCi0gICAgcHJpbnQgJ0ZvciBjb21wbGV0ZSBM
aW51eCBidWlsZCByZXF1aXJlbWVudHMsIHBsZWFzZSBzZWU6JwotICAgIHByaW50ICdodHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS9MaW51eEJ1aWxkSW5zdHJ1Y3Rpb25zJwot
ICAgIHN5cy5leGl0KDEpCi0KLQotZGVmIF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cygqcGF0aGll
cyk6Ci0gICAgIyBGSVhNRShka2VnZWwpOiB1c2UgbGF0ZXN0IG9yIHdhcm4gaWYgbW9yZSB0aGFu
IG9uZSBmb3VuZD8KLSAgICBmb3IgZGlyIGluIFsic2NvbnNidWlsZCIsICJvdXQiLCAieGNvZGVi
dWlsZCJdOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gcGF0aF91dGlscy5wYXRo
X2Zyb21fYmFzZShkaXIsICpwYXRoaWVzKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBw
YXNzCi0gICAgcmFpc2UgcGF0aF91dGlscy5QYXRoTm90Rm91bmQoIlVuYWJsZSB0byBmaW5kICVz
IGluIGJ1aWxkIHRyZWUiICUKLSAgICAgICAgKG9zLnBhdGguam9pbigqcGF0aGllcykpKQorICAg
ICAgICBBcmdzOgorICAgICAgICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhl
IHJ1bm5pbmcgc2VydmVyLgorICAgICAgICAiIiIKKyAgICAgICAgIyBzZXJ2ZXJfcGlkIGlzIG5v
dCBzZXQgd2hlbiAiaHR0cF9zZXJ2ZXIucHkgc3RvcCIgaXMgcnVuIG1hbnVhbGx5LgorICAgICAg
ICBpZiBzZXJ2ZXJfcGlkIGlzIE5vbmU6CisgICAgICAgICAgICAjIFRPRE8obW1vc3MpIFRoaXMg
aXNuJ3QgaWRlYWwsIHNpbmNlIGl0IGNvdWxkIGNvbmZsaWN0IHdpdGgKKyAgICAgICAgICAgICMg
bGlnaHR0cGQgcHJvY2Vzc2VzIG5vdCBzdGFydGVkIGJ5IGh0dHBfc2VydmVyLnB5LAorICAgICAg
ICAgICAgIyBidXQgZ29vZCBlbm91Z2ggZm9yIG5vdy4KKyAgICAgICAgICAgIHNlbGYuX2tpbGxf
YWxsX3Byb2Nlc3MoJ2xpZ2h0dHBkJykKKyAgICAgICAgICAgIHNlbGYuX2tpbGxfYWxsX3Byb2Nl
c3MoJ2FwYWNoZTInKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgIG9zLmtpbGwoc2VydmVyX3BpZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAg
ICAgIyBUT0RPKG1tb3NzKSBNYXliZSB0aHJvdyBpbiBhIFNJR0tJTEwganVzdCB0byBiZSBzdXJl
PworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBTb21ldGlt
ZXMgd2UgZ2V0IGEgYmFkIFBJRCAoZS5nLiBmcm9tIGEgc3RhbGUgaHR0cGQucGlkCisgICAgICAg
ICAgICAgICAgIyBmaWxlKSwgc28gaWYga2lsbCBmYWlscyBvbiB0aGUgZ2l2ZW4gUElELCBqdXN0
IHRyeSB0bworICAgICAgICAgICAgICAgICMgJ2tpbGxhbGwnIHdlYiBzZXJ2ZXJzLgorICAgICAg
ICAgICAgICAgIHNlbGYuX3NodXRfZG93bl9odHRwX3NlcnZlcihOb25lKQpJbmRleDogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkJKHJl
dmlzaW9uIDU0MzI4KQorKysgU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9tYWMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE3NSArMjcsMTM2IEBACiAjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0iIiJUaGlzIGlzIHRoZSBNYWMgaW1wbGVtZW50YXRp
b24gb2YgdGhlIHBvcnQgaW50ZXJmYWNlCi0gICBwYWNrYWdlLiBUaGlzIGZpbGUgc2hvdWxkIG9u
bHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBwYWNrYWdlLiIiIgorIiIiQ2hyb21pdW0gTWFjIGltcGxl
bWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIKIAogaW1wb3J0IG9zCiBpbXBvcnQg
cGxhdGZvcm0KIGltcG9ydCBzaWduYWwKIGltcG9ydCBzdWJwcm9jZXNzCiAKLWltcG9ydCBwYXRo
X3V0aWxzCitpbXBvcnQgY2hyb21pdW0KIAogCi1kZWYgcGxhdGZvcm1fbmFtZSgpOgotICAgICIi
IlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5n
IG9uLiIiIgotICAgICMgQXQgdGhlIG1vbWVudCBhbGwgY2hyb21pdW0gbWFjIHJlc3VsdHMgYXJl
IHZlcnNpb24taW5kZXBlbmRlbnQuIEF0IHNvbWUKLSAgICAjIHBvaW50IHdlIG1heSBuZWVkIHRv
IHJldHVybiAnY2hyb21pdW0tbWFjJyArIFBsYXRmb3JtVmVyc2lvbigpCi0gICAgcmV0dXJuICdj
aHJvbWl1bS1tYWMnCitjbGFzcyBDaHJvbWl1bU1hY1BvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0
KToKKyAgICAiIiJDaHJvbWl1bSBNYWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQgY2xhc3Mu
IiIiCiAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9u
ZSk6CisgICAgICAgIGlmIHBvcnRfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcG9ydF9uYW1l
ID0gJ2Nocm9taXVtLW1hYycKKyAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Qb3J0Ll9faW5pdF9f
KHNlbGYsIHBvcnRfbmFtZSwgb3B0aW9ucykKIAotZGVmIHBsYXRmb3JtX3ZlcnNpb24oKToKLSAg
ICAiIiJSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhlIHBsYXRmb3JtLCBlLmcuICct
dmlzdGEnIG9yCi0gICAgJy1zbm93bGVvcGFyZCcuIElmIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBk
aXN0aW5ndWlzaCBiZXR3ZWVuCi0gICAgbWlub3IgdmVyc2lvbnMsIGl0IHJldHVybnMgJycuIiIi
Ci0gICAgb3NfdmVyc2lvbl9zdHJpbmcgPSBwbGF0Zm9ybS5tYWNfdmVyKClbMF0gICMgZS5nLiAi
MTAuNS42IgotICAgIGlmIG5vdCBvc192ZXJzaW9uX3N0cmluZzoKLSAgICAgICAgcmV0dXJuICct
bGVvcGFyZCcKKyAgICBkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CisgICAgICAgIHJl
dHVybiBbc2VsZi5iYXNlbGluZV9wYXRoKCksCisgICAgICAgICAgICAgICAgc2VsZi5fd2Via2l0
X2Jhc2VsaW5lX3BhdGgoJ21hYycgKyBzZWxmLnZlcnNpb24oKSksCisgICAgICAgICAgICAgICAg
c2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpXQogCi0gICAgcmVsZWFzZV92ZXJzaW9u
ID0gaW50KG9zX3ZlcnNpb25fc3RyaW5nLnNwbGl0KCcuJylbMV0pCisgICAgZGVmIGNoZWNrX3N5
c19kZXBzKHNlbGYpOgorICAgICAgICAjIFdlIGhhdmUgbm8gc3BlY2lmaWMgcGxhdGZvcm0gZGVw
ZW5kZW5jaWVzLgorICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgIyB3ZSBkb24ndCBzdXBwb3J0
ICd0aWdlcicgb3IgZWFybGllciByZWxlYXNlcwotICAgIGlmIHJlbGVhc2VfdmVyc2lvbiA9PSA1
OgotICAgICAgICByZXR1cm4gJy1sZW9wYXJkJwotICAgIGVsaWYgcmVsZWFzZV92ZXJzaW9uID09
IDY6Ci0gICAgICAgIHJldHVybiAnLXNub3dsZW9wYXJkJworICAgIGRlZiBudW1fY29yZXMoc2Vs
Zik6CisgICAgICAgIHJldHVybiBpbnQoc3VicHJvY2Vzcy5Qb3BlbihbJ3N5c2N0bCcsJy1uJywn
aHcubmNwdSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1
YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKSkKIAotICAgIHJldHVybiAnJworICAgIGRlZiB0
ZXN0X3BsYXRmb3JtX25hbWUoc2VsZik6CisgICAgICAgICMgV2UgdXNlICdtYWMnIGluc3RlYWQg
b2YgJ2Nocm9taXVtLW1hYycKKyAgICAgICAgcmV0dXJuICdtYWMnCiAKKyAgICBkZWYgdmVyc2lv
bihzZWxmKToKKyAgICAgICAgb3NfdmVyc2lvbl9zdHJpbmcgPSBwbGF0Zm9ybS5tYWNfdmVyKClb
MF0gICMgZS5nLiAiMTAuNS42IgorICAgICAgICBpZiBub3Qgb3NfdmVyc2lvbl9zdHJpbmc6Cisg
ICAgICAgICAgICByZXR1cm4gJy1sZW9wYXJkJworICAgICAgICByZWxlYXNlX3ZlcnNpb24gPSBp
bnQob3NfdmVyc2lvbl9zdHJpbmcuc3BsaXQoJy4nKVsxXSkKKyAgICAgICAgIyB3ZSBkb24ndCBz
dXBwb3J0ICd0aWdlcicgb3IgZWFybGllciByZWxlYXNlcworICAgICAgICBpZiByZWxlYXNlX3Zl
cnNpb24gPT0gNToKKyAgICAgICAgICAgIHJldHVybiAnLWxlb3BhcmQnCisgICAgICAgIGVsaWYg
cmVsZWFzZV92ZXJzaW9uID09IDY6CisgICAgICAgICAgICByZXR1cm4gJy1zbm93bGVvcGFyZCcK
KyAgICAgICAgcmV0dXJuICcnCiAKLWRlZiBnZXRfbnVtX2NvcmVzKCk6Ci0gICAgIiIiUmV0dXJu
cyB0aGUgbnVtYmVyIG9mIGNvcmVzIG9uIHRoZSBtYWNoaW5lLiBGb3IgaHlwZXJ0aHJlYWRlZCBt
YWNoaW5lcywKLSAgICB0aGlzIHdpbGwgYmUgZG91YmxlIHRoZSBudW1iZXIgb2YgYWN0dWFsIHBy
b2Nlc3NvcnMuIiIiCi0gICAgcmV0dXJuIGludChvcy5wb3BlbjIoInN5c2N0bCAtbiBody5uY3B1
IilbMV0ucmVhZCgpKQorICAgICMKKyAgICAjIFBST1RFQ1RFRCBNRVRIT0RTCisgICAgIwogCisg
ICAgZGVmIF9idWlsZF9wYXRoKHNlbGYsICpjb21wcyk6CisgICAgICAgIHJldHVybiBzZWxmLnBh
dGhfZnJvbV9jaHJvbWl1bV9iYXNlKCd4Y29kZWJ1aWxkJywgc2VsZi5fb3B0aW9ucy50YXJnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb21wcykKIAot
ZGVmIGJhc2VsaW5lX3BhdGgocGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgcGF0
aCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSBmb3IgdGhlCi0gICAgYmFz
ZWxpbmVzIGZvciB0aGUgc3BlY2lmaWVkIHBsYXRmb3JtIHZlcnNpb24uIElmIHxwbGF0Zm9ybXwg
aXMgTm9uZSwKLSAgICB0aGVuIHRoZSB2ZXJzaW9uIGN1cnJlbnRseSBpbiB1c2UgaXMgdXNlZC4i
IiIKLSAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgotICAgICAgICBwbGF0Zm9ybSA9IHBsYXRmb3Jt
X25hbWUoKQotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAn
ZGF0YScsICdsYXlvdXRfdGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdwbGF0Zm9ybScsIHBsYXRmb3JtLCAnTGF5b3V0VGVzdHMnKQorICAgIGRlZiBfbGlnaHR0
cGRfcGF0aChzZWxmLCAqY29tcHMpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fY2hy
b21pdW1fYmFzZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFjJywgKmNvbXBzKQogCi0jIFRPRE86IFdlIHNo
b3VsZCBhZGQgbGVvcGFyZCBhbmQgc25vd2xlb3BhcmQgdG8gdGhlIGxpc3Qgb2YgcGF0aHMgdG8g
Y2hlY2sKLSMgb25jZSB3ZSBzdGFydCBydW5uaW5nIHRoZSB0ZXN0cyBmcm9tIHNub3dsZW9wYXJk
LgorICAgIGRlZiBfa2lsbF9wcm9jZXNzKHNlbGYsIHBpZCk6CisgICAgICAgICIiIkZvcmNlZnVs
bHkga2lsbCB0aGUgcHJvY2Vzcy4KIAorICAgICAgICBBcmdzOgorICAgICAgICAgICAgcGlkOiBU
aGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUga2lsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAg
b3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQogCi1kZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgo
cGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0
byBzZWFyY2ggZm9yIGJhc2VsaW5lcy9yZXN1bHRzLCBpbgotICAgIG9yZGVyIG9mIHByZWZlcmVu
Y2UuIFBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4iIiIK
LSAgICByZXR1cm4gW2Jhc2VsaW5lX3BhdGgocGxhdGZvcm0pLAotICAgICAgICAgICAgcGF0aF91
dGlscy53ZWJraXRfYmFzZWxpbmVfcGF0aCgnbWFjJyArIHBsYXRmb3JtX3ZlcnNpb24oKSksCi0g
ICAgICAgICAgICBwYXRoX3V0aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnKV0KKyAgICBk
ZWYgX2tpbGxfYWxsX3Byb2Nlc3Moc2VsZiwgcHJvY2Vzc19uYW1lKToKKyAgICAgICAgIiIiS2ls
bCBhbnkgcHJvY2Vzc2VzIHJ1bm5pbmcgdW5kZXIgdGhpcyBuYW1lLiIiIgorICAgICAgICAjIE9u
IE1hYyBPUyBYIDEwLjYsIGtpbGxhbGwgaGFzIGEgbmV3IGNvbnN0cmFpbnQ6IC1TSUdOQUxOQU1F
IG9yCisgICAgICAgICMgLVNJR05BTE5VTUJFUiBtdXN0IGNvbWUgZmlyc3QuICBFeGFtcGxlIHBy
b2JsZW06CisgICAgICAgICMgICAkIGtpbGxhbGwgLXUgJFVTRVIgLVRFUk0gbGlnaHR0cGQKKyAg
ICAgICAgIyAgIGtpbGxhbGw6IGlsbGVnYWwgb3B0aW9uIC0tIFQKKyAgICAgICAgIyBVc2Ugb2Yg
dGhlIGVhcmxpZXIgLVRFUk0gcGxhY2VtZW50IGlzIGp1c3QgZmluZSBvbiAxMC41LgorICAgICAg
ICBudWxsID0gb3Blbihvcy5kZXZudWxsKQorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoWydraWxs
YWxsJywgJy1URVJNJywgJy11Jywgb3MuZ2V0ZW52KCdVU0VSJyksCisgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9jZXNzX25hbWVdLCBzdGRlcnI9bnVsbCkKKyAgICAgICAgbnVsbC5jbG9zZSgp
CiAKKyAgICBkZWYgX3BhdGhfdG9fYXBhY2hlKHNlbGYpOgorICAgICAgICByZXR1cm4gJy91c3Iv
c2Jpbi9odHRwZCcKIAotZGVmIHdkaWZmX3BhdGgoKToKLSAgICAiIiJQYXRoIHRvIHRoZSBXRGlm
ZiBleGVjdXRhYmxlLCB3aGljaCB3ZSBhc3N1bWUgaXMgYWxyZWFkeSBpbnN0YWxsZWQgYW5kCi0g
ICAgaW4gdGhlIHVzZXIncyAkUEFUSC4iIiIKLSAgICByZXR1cm4gJ3dkaWZmJworICAgIGRlZiBf
cGF0aF90b19hcGFjaGVfY29uZmlnX2ZpbGUoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRo
LmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksICdodHRwJywgJ2NvbmYnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdhcGFjaGUyLWh0dHBkLmNvbmYnKQogCisgICAgZGVmIF9wYXRo
X3RvX2xpZ2h0dHBkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGlnaHR0cF9wYXRoKCdi
aW4nLCAnbGlnaHR0cCcpCiAKLWRlZiBpbWFnZV9kaWZmX3BhdGgodGFyZ2V0KToKLSAgICAiIiJQ
YXRoIHRvIHRoZSBpbWFnZV9kaWZmIGV4ZWN1dGFibGUKKyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0
cGRfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpZ2h0dHBfcGF0aCgnbGli
JykKIAotICAgIEFyZ3M6Ci0gICAgICB0YXJnZXQ6IGJ1aWxkIHR5cGUgLSAnRGVidWcnLCdSZWxl
YXNlJyxldGMuIiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3hjb2Rl
YnVpbGQnLCB0YXJnZXQsICdpbWFnZV9kaWZmJykKKyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGRf
cGhwKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGlnaHR0cGRfcGF0aCgnYmluJywgJ3Bo
cC1jZ2knKQogCisgICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmKToKKyAgICAgICAgIyBUT0RP
KHBpbmtlcnRvbik6IG1ha2UgfHRhcmdldHwgaGFwcHkgd2l0aCBjYXNlLXNlbnNpdGl2ZSBmaWxl
CisgICAgICAgICMgc3lzdGVtcy4KKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ1Rl
c3RTaGVsbC5hcHAnLCAnQ29udGVudHMnLCAnTWFjT1MnLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ1Rlc3RTaGVsbCcpCiAKLWRlZiBsYXlvdXRfdGVzdF9oZWxwZXJfcGF0aCh0
YXJnZXQpOgotICAgICIiIlBhdGggdG8gdGhlIGxheW91dF90ZXN0X2hlbHBlciBleGVjdXRhYmxl
LCBpZiBuZWVkZWQsIGVtcHR5IG90aGVyd2lzZQorICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdsYXlvdXRfdGVzdF9oZWxwZXIn
KQogCi0gICAgQXJnczoKLSAgICAgIHRhcmdldDogYnVpbGQgdHlwZSAtICdEZWJ1ZycsJ1JlbGVh
c2UnLGV0Yy4iIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgneGNvZGVi
dWlsZCcsIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGF5
b3V0X3Rlc3RfaGVscGVyJykKKyAgICBkZWYgX3BhdGhfdG9faW1hZ2VfZGlmZihzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2ltYWdlX2RpZmYnKQogCisgICAgZGVmIF9w
YXRoX3RvX3dkaWZmKHNlbGYpOgorICAgICAgICByZXR1cm4gJ3dkaWZmJwogCi1kZWYgdGVzdF9z
aGVsbF9wYXRoKHRhcmdldCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgdGVzdF9zaGVsbCBleGVjdXRh
YmxlLgorICAgIGRlZiBfc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlbGYsIHNlcnZlcl9waWQpOgor
ICAgICAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBkIHdlYiBzZXJ2ZXIuIEJsb2NrcyB1bnRp
bCBpdCdzIGZ1bGx5CisgICAgICAgIHNodXQgZG93bi4KIAotICAgIEFyZ3M6Ci0gICAgICB0YXJn
ZXQ6IGJ1aWxkIHR5cGUgLSAnRGVidWcnLCdSZWxlYXNlJyxldGMuIiIiCi0gICAgIyBUT0RPKHBp
bmtlcnRvbik6IG1ha2UgfHRhcmdldHwgaGFwcHkgd2l0aCBjYXNlLXNlbnNpdGl2ZSBmaWxlIHN5
c3RlbXMuCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3hjb2RlYnVpbGQn
LCB0YXJnZXQsICdUZXN0U2hlbGwuYXBwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnQ29udGVudHMnLCAnTWFjT1MnLCAnVGVzdFNoZWxsJykKLQotCi1kZWYgYXBhY2hl
X2V4ZWN1dGFibGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0
byBzdGFydCBBcGFjaGUiIiIKLSAgICByZXR1cm4gb3MucGF0aC5qb2luKCIvdXNyIiwgInNiaW4i
LCAiaHR0cGQiKQotCi0KLWRlZiBhcGFjaGVfY29uZmlnX2ZpbGVfcGF0aCgpOgotICAgICIiIlJl
dHVybnMgdGhlIHBhdGggdG8gQXBhY2hlIGNvbmZpZyBmaWxlIiIiCi0gICAgcmV0dXJuIHBhdGhf
dXRpbHMucGF0aF9mcm9tX2Jhc2UoInRoaXJkX3BhcnR5IiwgIldlYktpdCIsICJMYXlvdXRUZXN0
cyIsCi0gICAgICAgICJodHRwIiwgImNvbmYiLCAiYXBhY2hlMi1odHRwZC5jb25mIikKLQotCi1k
ZWYgbGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZXhlY3V0
YWJsZSBwYXRoIHRvIHN0YXJ0IExpZ0hUVFBkIiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0
aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ21hYycsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpbicsICdsaWdodHRwZCcpCi0KLQotZGVmIGxp
Z2h0dHBkX21vZHVsZV9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbGlicmFyeSBtb2R1bGUg
cGF0aCBmb3IgTGlnSFRUUGQiIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQnLCAnbWFjJywgJ2xpYicpCi0KLQotZGVmIGxpZ2h0
dHBkX3BocF9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgUEhQIGV4ZWN1dGFibGUgcGF0aCBm
b3IgTGlnSFRUUGQiIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhp
cmRfcGFydHknLCAnbGlnaHR0cGQnLCAnbWFjJywgJ2JpbicsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3BocC1jZ2knKQotCi0KLWRlZiBzaHV0X2Rvd25faHR0cF9zZXJ2
ZXIoc2VydmVyX3BpZCk6Ci0gICAgIiIiU2h1dCBkb3duIHRoZSBsaWdodHRwZCB3ZWIgc2VydmVy
LiBCbG9ja3MgdW50aWwgaXQncyBmdWxseSBzaHV0IGRvd24uCi0KLSAgICAgIEFyZ3M6Ci0gICAg
ICAgIHNlcnZlcl9waWQ6IFRoZSBwcm9jZXNzIElEIG9mIHRoZSBydW5uaW5nIHNlcnZlci4KLSAg
ICAiIiIKLSAgICAjIHNlcnZlcl9waWQgaXMgbm90IHNldCB3aGVuICJodHRwX3NlcnZlci5weSBz
dG9wIiBpcyBydW4gbWFudWFsbHkuCi0gICAgaWYgc2VydmVyX3BpZCBpcyBOb25lOgotICAgICAg
ICAjIFRPRE8obW1vc3MpIFRoaXMgaXNuJ3QgaWRlYWwsIHNpbmNlIGl0IGNvdWxkIGNvbmZsaWN0
IHdpdGggbGlnaHR0cGQKLSAgICAgICAgIyBwcm9jZXNzZXMgbm90IHN0YXJ0ZWQgYnkgaHR0cF9z
ZXJ2ZXIucHksIGJ1dCBnb29kIGVub3VnaCBmb3Igbm93LgotICAgICAgICBraWxsX2FsbF9wcm9j
ZXNzKCdsaWdodHRwZCcpCi0gICAgICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ2h0dHBkJykKLSAgICBl
bHNlOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5raWxsKHNlcnZlcl9waWQsIHNpZ25h
bC5TSUdURVJNKQotICAgICAgICAgICAgIyBUT0RPKG1tb3NzKSBNYXliZSB0aHJvdyBpbiBhIFNJ
R0tJTEwganVzdCB0byBiZSBzdXJlPwotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAg
ICAgICMgU29tZXRpbWVzIHdlIGdldCBhIGJhZCBQSUQgKGUuZy4gZnJvbSBhIHN0YWxlIGh0dHBk
LnBpZCBmaWxlKSwKLSAgICAgICAgICAgICMgc28gaWYga2lsbCBmYWlscyBvbiB0aGUgZ2l2ZW4g
UElELCBqdXN0IHRyeSB0byAna2lsbGFsbCcgd2ViCi0gICAgICAgICAgICAjIHNlcnZlcnMuCi0g
ICAgICAgICAgICBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIoTm9uZSkKLQotCi1kZWYga2lsbF9wcm9j
ZXNzKHBpZCk6Ci0gICAgIiIiRm9yY2VmdWxseSBraWxsIHRoZSBwcm9jZXNzLgotCi0gICAgQXJn
czoKLSAgICAgIHBpZDogVGhlIGlkIG9mIHRoZSBwcm9jZXNzIHRvIGJlIGtpbGxlZC4KLSAgICAi
IiIKLSAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0tJTEwpCi0KLQotZGVmIGtpbGxfYWxsX3By
b2Nlc3MocHJvY2Vzc19uYW1lKToKLSAgICAjIE9uIE1hYyBPUyBYIDEwLjYsIGtpbGxhbGwgaGFz
IGEgbmV3IGNvbnN0cmFpbnQ6IC1TSUdOQUxOQU1FIG9yCi0gICAgIyAtU0lHTkFMTlVNQkVSIG11
c3QgY29tZSBmaXJzdC4gIEV4YW1wbGUgcHJvYmxlbToKLSAgICAjICAgJCBraWxsYWxsIC11ICRV
U0VSIC1URVJNIGxpZ2h0dHBkCi0gICAgIyAgIGtpbGxhbGw6IGlsbGVnYWwgb3B0aW9uIC0tIFQK
LSAgICAjIFVzZSBvZiB0aGUgZWFybGllciAtVEVSTSBwbGFjZW1lbnQgaXMganVzdCBmaW5lIG9u
IDEwLjUuCi0gICAgbnVsbCA9IG9wZW4ob3MuZGV2bnVsbCkKLSAgICBzdWJwcm9jZXNzLmNhbGwo
WydraWxsYWxsJywgJy1URVJNJywgJy11Jywgb3MuZ2V0ZW52KCdVU0VSJyksCi0gICAgICAgICAg
ICAgICAgICAgICBwcm9jZXNzX25hbWVdLCBzdGRlcnI9bnVsbCkKLSAgICBudWxsLmNsb3NlKCkK
LQotCi1kZWYga2lsbF9hbGxfdGVzdF9zaGVsbHMoKToKLSAgICAiIiJLaWxscyBhbGwgaW5zdGFu
Y2VzIG9mIHRoZSB0ZXN0X3NoZWxsIGJpbmFyeSBjdXJyZW50bHkgcnVubmluZy4iIiIKLSAgICBr
aWxsX2FsbF9wcm9jZXNzKCdUZXN0U2hlbGwnKQorICAgICAgICBBcmdzOgorICAgICAgICAgICAg
c2VydmVyX3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5pbmcgc2VydmVyLgorICAgICAg
ICAiIiIKKyAgICAgICAgIyBzZXJ2ZXJfcGlkIGlzIG5vdCBzZXQgd2hlbiAiaHR0cF9zZXJ2ZXIu
cHkgc3RvcCIgaXMgcnVuIG1hbnVhbGx5LgorICAgICAgICBpZiBzZXJ2ZXJfcGlkIGlzIE5vbmU6
CisgICAgICAgICAgICAjIFRPRE8obW1vc3MpIFRoaXMgaXNuJ3QgaWRlYWwsIHNpbmNlIGl0IGNv
dWxkIGNvbmZsaWN0IHdpdGgKKyAgICAgICAgICAgICMgbGlnaHR0cGQgcHJvY2Vzc2VzIG5vdCBz
dGFydGVkIGJ5IGh0dHBfc2VydmVyLnB5LAorICAgICAgICAgICAgIyBidXQgZ29vZCBlbm91Z2gg
Zm9yIG5vdy4KKyAgICAgICAgICAgIHNlbGYuX2tpbGxfYWxsX3Byb2Nlc3MoJ2xpZ2h0dHBkJykK
KyAgICAgICAgICAgIHNlbGYuX2tpbGxfYWxsX3Byb2Nlc3MoJ2h0dHBkJykKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5raWxsKHNlcnZlcl9waWQs
IHNpZ25hbC5TSUdURVJNKQorICAgICAgICAgICAgICAgICMgVE9ETyhtbW9zcykgTWF5YmUgdGhy
b3cgaW4gYSBTSUdLSUxMIGp1c3QgdG8gYmUgc3VyZT8KKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vy
cm9yOgorICAgICAgICAgICAgICAgICMgU29tZXRpbWVzIHdlIGdldCBhIGJhZCBQSUQgKGUuZy4g
ZnJvbSBhIHN0YWxlIGh0dHBkLnBpZAorICAgICAgICAgICAgICAgICMgZmlsZSksIHNvIGlmIGtp
bGwgZmFpbHMgb24gdGhlIGdpdmVuIFBJRCwganVzdCB0cnkgdG8KKyAgICAgICAgICAgICAgICAj
ICdraWxsYWxsJyB3ZWIgc2VydmVycy4KKyAgICAgICAgICAgICAgICBzZWxmLl9zaHV0X2Rvd25f
aHR0cF9zZXJ2ZXIoTm9uZSkKSW5kZXg6IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW0ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bS5weQkocmV2aXNpb24gMCkKKysrIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjU5IEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisj
IG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJDaHJvbWl1bSBp
bXBsZW1lbnRhdGlvbnMgb2YgdGhlIFBvcnQgaW50ZXJmYWNlLiIiIgorCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5
cworaW1wb3J0IHRpbWUKKworaW1wb3J0IGJhc2UKK2ltcG9ydCBodHRwX3NlcnZlcgoraW1wb3J0
IHdlYnNvY2tldF9zZXJ2ZXIKKworCitjbGFzcyBDaHJvbWl1bVBvcnQoYmFzZS5Qb3J0KToKKyAg
ICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBDaHJvbWl1bSBpbXBsZW1lbnRhdGlvbnMgb2Yg
dGhlIFBvcnQgY2xhc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9uYW1lPU5v
bmUsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIGJhc2UuUG9ydC5fX2luaXRfXyhzZWxmLCBwb3J0
X25hbWUsIG9wdGlvbnMpCisgICAgICAgIHNlbGYuX2Nocm9taXVtX2Jhc2VfZGlyID0gTm9uZQor
CisgICAgZGVmIGJhc2VsaW5lX3BhdGgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jaHJv
bWl1bV9iYXNlbGluZV9wYXRoKHNlbGYuX25hbWUpCisKKyAgICBkZWYgY2hlY2tfc3lzX2RlcHMo
c2VsZik6CisgICAgICAgIHJlc3VsdCA9IFRydWUKKyAgICAgICAgdGVzdF9zaGVsbF9iaW5hcnlf
cGF0aCA9IHNlbGYuX3BhdGhfdG9fZHJpdmVyKCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMo
dGVzdF9zaGVsbF9iaW5hcnlfcGF0aCk6CisgICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Q
b3BlbihbdGVzdF9zaGVsbF9iaW5hcnlfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnLS1jaGVjay1sYXlvdXQtdGVzdC1zeXMtZGVwcyddKQorICAgICAgICAgICAg
aWYgcHJvYy53YWl0KCkgIT0gMDoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJBYm9y
dGluZyBiZWNhdXNlIHN5c3RlbSBkZXBlbmRlbmNpZXMgY2hlY2sgIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImZhaWxlZC4iKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3Io
IlRvIG92ZXJyaWRlLCBpbnZva2Ugd2l0aCAtLW5vY2hlY2stc3lzLWRlcHMiKQorICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnaW5n
LmVycm9yKCd0ZXN0IGRyaXZlciBpcyBub3QgZm91bmQgYXQgJXMnICUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdF9zaGVsbF9iaW5hcnlfcGF0aCkKKyAgICAgICAgICAgIHJlc3VsdCA9
IEZhbHNlCisKKyAgICAgICAgaW1hZ2VfZGlmZl9wYXRoID0gc2VsZi5fcGF0aF90b19pbWFnZV9k
aWZmKCkKKyAgICAgICAgaWYgKG5vdCBvcy5wYXRoLmV4aXN0cyhpbWFnZV9kaWZmX3BhdGgpIGFu
ZCBub3QKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubm9fcGl4ZWxfdGVzdHMpOgorICAgICAg
ICAgICAgbG9nZ2luZy5lcnJvcignaW1hZ2UgZGlmZiBub3QgZm91bmQgYXQgJXMnICUgaW1hZ2Vf
ZGlmZl9wYXRoKQorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiVG8gb3ZlcnJpZGUsIGludm9r
ZSB3aXRoIC0tbm8tcGl4ZWwtdGVzdHMiKQorICAgICAgICAgICAgcmVzdWx0ID0gRmFsc2UKKwor
ICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgY29tcGFyZV90ZXh0KHNlbGYsIGFjdHVh
bF90ZXh0LCBleHBlY3RlZF90ZXh0KToKKyAgICAgICAgcmV0dXJuIGFjdHVhbF90ZXh0ICE9IGV4
cGVjdGVkX3RleHQKKworICAgIGRlZiBwYXRoX2Zyb21fY2hyb21pdW1fYmFzZShzZWxmLCAqY29t
cHMpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gcGF0aCBtYWRlIGJ5IGpv
aW5pbmcgdGhlIHRvcCBvZiB0aGUKKyAgICAgICAgQ2hyb21pdW0gc291cmNlIHRyZWUgYW5kIHRo
ZSBsaXN0IG9mIHBhdGggY29tcG9uZW50cyBpbiB8KmNvbXBzfC4iIiIKKyAgICAgICAgaWYgbm90
IHNlbGYuX2Nocm9taXVtX2Jhc2VfZGlyOgorICAgICAgICAgICAgYWJzcGF0aCA9IG9zLnBhdGgu
YWJzcGF0aChfX2ZpbGVfXykKKyAgICAgICAgICAgIHNlbGYuX2Nocm9taXVtX2Jhc2VfZGlyID0g
YWJzcGF0aFswOmFic3BhdGguZmluZCgndGhpcmRfcGFydHknKV0KKyAgICAgICAgcmV0dXJuIG9z
LnBhdGguam9pbihzZWxmLl9jaHJvbWl1bV9iYXNlX2RpciwgKmNvbXBzKQorCisgICAgZGVmIHJl
c3VsdHNfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fY2hy
b21pdW1fYmFzZSgnd2Via2l0Jywgc2VsZi5fb3B0aW9ucy50YXJnZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJl
Y3RvcnkpCisKKyAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2VsZik6CisgICAgICAgICMgRGVsZXRl
IHRoZSBkaXNrIGNhY2hlIGlmIGFueSB0byBlbnN1cmUgYSBjbGVhbiB0ZXN0IHJ1bi4KKyAgICAg
ICAgdGVzdF9zaGVsbF9iaW5hcnlfcGF0aCA9IHNlbGYuX3BhdGhfdG9fZHJpdmVyKCkKKyAgICAg
ICAgY2FjaGVkaXIgPSBvcy5wYXRoLnNwbGl0KHRlc3Rfc2hlbGxfYmluYXJ5X3BhdGgpWzBdCisg
ICAgICAgIGNhY2hlZGlyID0gb3MucGF0aC5qb2luKGNhY2hlZGlyLCAiY2FjaGUiKQorICAgICAg
ICBpZiBvcy5wYXRoLmV4aXN0cyhjYWNoZWRpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVl
KGNhY2hlZGlyKQorCisgICAgZGVmIHNob3dfcmVzdWx0c19odG1sX2ZpbGUoc2VsZiwgcmVzdWx0
c19maWxlbmFtZSk6CisgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oW3NlbGYuX3BhdGhfdG9fZHJp
dmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZW5hbWVfdG9fdXJpKHJl
c3VsdHNfZmlsZW5hbWUpXSkKKworICAgIGRlZiBzdGFydF9kcml2ZXIoc2VsZiwgaW1hZ2VfcGF0
aCwgb3B0aW9ucyk6CisgICAgICAgICIiIlN0YXJ0cyBhIG5ldyBEcml2ZXIgYW5kIHJldHVybnMg
YSBoYW5kbGUgdG8gaXQuIiIiCisgICAgICAgIHJldHVybiBDaHJvbWl1bURyaXZlcihzZWxmLCBp
bWFnZV9wYXRoLCBvcHRpb25zKQorCisgICAgZGVmIHN0YXJ0X2hlbHBlcihzZWxmKToKKyAgICAg
ICAgaGVscGVyX3BhdGggPSBzZWxmLl9wYXRoX3RvX2hlbHBlcigpCisgICAgICAgIGlmIGhlbHBl
cl9wYXRoOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RhcnRpbmcgbGF5b3V0IGhlbHBl
ciAlcyIgJSBoZWxwZXJfcGF0aCkKKyAgICAgICAgICAgIHNlbGYuX2hlbHBlciA9IHN1YnByb2Nl
c3MuUG9wZW4oW2hlbHBlcl9wYXRoXSwKKyAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNz
LlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1Ob25lKQorICAgICAgICAgICAg
aXNfcmVhZHkgPSBzZWxmLl9oZWxwZXIuc3Rkb3V0LnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlm
IG5vdCBpc19yZWFkeS5zdGFydHN3aXRoKCdyZWFkeScpOgorICAgICAgICAgICAgICAgIGxvZ2dp
bmcuZXJyb3IoImxheW91dF90ZXN0X2hlbHBlciBmYWlsZWQgdG8gYmUgcmVhZHkiKQorCisgICAg
ZGVmIHN0b3BfaGVscGVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9oZWxwZXI6CisgICAgICAg
ICAgICBsb2dnaW5nLmRlYnVnKCJTdG9wcGluZyBsYXlvdXQgdGVzdCBoZWxwZXIiKQorICAgICAg
ICAgICAgc2VsZi5faGVscGVyLnN0ZGluLndyaXRlKCJ4XG4iKQorICAgICAgICAgICAgc2VsZi5f
aGVscGVyLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX2hlbHBlci53YWl0KCkKKwor
ICAgIGRlZiB0ZXN0X2Jhc2VfcGxhdGZvcm1fbmFtZXMoc2VsZik6CisgICAgICAgIHJldHVybiAo
J2xpbnV4JywgJ21hYycsICd3aW4nKQorCisgICAgZGVmIHRlc3RfZXhwZWN0YXRpb25zKHNlbGYs
IG9wdGlvbnM9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHRlc3QgZXhwZWN0YXRpb25z
IGZvciB0aGlzIHBvcnQuCisKKyAgICAgICAgQmFzaWNhbGx5IHRoaXMgc3RyaW5nIHNob3VsZCBj
b250YWluIHRoZSBlcXVpdmFsZW50IG9mIGEKKyAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMgZmls
ZS4gU2VlIHRlc3RfZXhwZWN0YXRpb25zLnB5IGZvciBtb3JlIGRldGFpbHMuIiIiCisgICAgICAg
IGV4cGVjdGF0aW9uc19maWxlID0gc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnd2Via2l0
JywgJ3Rvb2xzJywKKyAgICAgICAgICAgICdsYXlvdXRfdGVzdHMnLCAndGVzdF9leHBlY3RhdGlv
bnMudHh0JykKKyAgICAgICAgcmV0dXJuIGZpbGUoZXhwZWN0YXRpb25zX2ZpbGUsICJyIikucmVh
ZCgpCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1lcyhzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYudGVzdF9iYXNlX3BsYXRmb3JtX25hbWVzKCkgKyAoJ3dpbi14cCcsCisgICAgICAgICAg
ICAnd2luLXZpc3RhJywgJ3dpbi03JykKKworICAgICMKKyAgICAjIFBST1RFQ1RFRCBNRVRIT0RT
CisgICAgIworICAgICMgVGhlc2Ugcm91dGluZXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IG90
aGVyIG1ldGhvZHMgaW4gdGhpcyBmaWxlCisgICAgIyBvciBhbnkgc3ViY2xhc3Nlcy4KKyAgICAj
CisKKyAgICBkZWYgX2Nocm9taXVtX2Jhc2VsaW5lX3BhdGgoc2VsZiwgcGxhdGZvcm0pOgorICAg
ICAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgorICAgICAgICAgICAgcGxhdGZvcm0gPSBzZWxmLm5h
bWUoKQorICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnd2Via2l0
JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3RzJywKKyAgICAgICAgICAgICdwbGF0Zm9ybScsIHBsYXRm
b3JtLCAnTGF5b3V0VGVzdHMnKQorCisKK2NsYXNzIENocm9taXVtRHJpdmVyKGJhc2UuRHJpdmVy
KToKKyAgICAiIiJBYnN0cmFjdCBpbnRlcmZhY2UgZm9yIHRoZSBEdW1wUmVuZGVyVHJlZSBpbnRl
cmZhY2UuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgaW1hZ2VfcGF0aCwgb3B0
aW9ucyk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX29wdGlvbnMg
PSBvcHRpb25zCisgICAgICAgIHNlbGYuX3RhcmdldCA9IHBvcnQuX29wdGlvbnMudGFyZ2V0Cisg
ICAgICAgIHNlbGYuX2ltYWdlX3BhdGggPSBpbWFnZV9wYXRoCisKKyAgICAgICAgY21kID0gW10K
KyAgICAgICAgIyBIb29rIGZvciBpbmplY3RpbmcgdmFsZ3JpbmQgb3Igb3RoZXIgcnVudGltZSBp
bnN0cnVtZW50YXRpb24sCisgICAgICAgICMgdXNlZCBieSBlLmcuIHRvb2xzL3ZhbGdyaW5kL3Zh
bGdyaW5kX3Rlc3RzLnB5LgorICAgICAgICB3cmFwcGVyID0gb3MuZW52aXJvbi5nZXQoIkJST1dT
RVJfV1JBUFBFUiIsIE5vbmUpCisgICAgICAgIGlmIHdyYXBwZXIgIT0gTm9uZToKKyAgICAgICAg
ICAgIGNtZCArPSBbd3JhcHBlcl0KKyAgICAgICAgaWYgc2VsZi5fcG9ydC5fb3B0aW9ucy53cmFw
cGVyOgorICAgICAgICAgICAgIyBUaGlzIHNwbGl0KCkgaXNuJ3QgcmVhbGx5IHdoYXQgd2Ugd2Fu
dCAtLSBpdCBpbmNvcnJlY3RseSB3aWxsCisgICAgICAgICAgICAjIHNwbGl0IHF1b3RlZCBzdHJp
bmdzIHdpdGhpbiB0aGUgd3JhcHBlciBhcmd1bWVudCAtLSBidXQgaW4KKyAgICAgICAgICAgICMg
cHJhY3RpY2UgaXQgc2hvdWxkbid0IGNvbWUgdXAgYW5kIHRoZSAtLWhlbHAgb3V0cHV0IHdhcm5z
CisgICAgICAgICAgICAjIGFib3V0IGl0IGFueXdheS4KKyAgICAgICAgICAgIGNtZCArPSBzZWxm
Ll9vcHRpb25zLndyYXBwZXIuc3BsaXQoKQorICAgICAgICBjbWQgKz0gW3BvcnQuX3BhdGhfdG9f
ZHJpdmVyKCksICctLWxheW91dC10ZXN0cyddCisgICAgICAgIGlmIG9wdGlvbnM6CisgICAgICAg
ICAgICBjbWQgKz0gb3B0aW9ucworICAgICAgICBzZWxmLl9wcm9jID0gc3VicHJvY2Vzcy5Qb3Bl
bihjbWQsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorCisgICAgZGVmIHBv
bGwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBvbGwoKQorCisgICAgZGVmIHJl
dHVybmNvZGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnJldHVybmNvZGUKKwor
ICAgIGRlZiBydW5fdGVzdChzZWxmLCB1cmksIHRpbWVvdXRtcywgY2hlY2tzdW0pOgorICAgICAg
ICBvdXRwdXQgPSBbXQorICAgICAgICBlcnJvciA9IFtdCisgICAgICAgIGNyYXNoID0gRmFsc2UK
KyAgICAgICAgdGltZW91dCA9IEZhbHNlCisgICAgICAgIGFjdHVhbF91cmkgPSBOb25lCisgICAg
ICAgIGFjdHVhbF9jaGVja3N1bSA9IE5vbmUKKworICAgICAgICBzdGFydF90aW1lID0gdGltZS50
aW1lKCkKKyAgICAgICAgY21kID0gdXJpCisgICAgICAgIGlmIHRpbWVvdXRtczoKKyAgICAgICAg
ICAgIGNtZCArPSAnICcgKyBzdHIodGltZW91dG1zKQorICAgICAgICBpZiBjaGVja3N1bToKKyAg
ICAgICAgICAgIGNtZCArPSAnICcgKyBjaGVja3N1bQorICAgICAgICBjbWQgKz0gIlxuIgorCisg
ICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUoY21kKQorICAgICAgICBsaW5lID0gc2VsZi5f
cHJvYy5zdGRvdXQucmVhZGxpbmUoKQorICAgICAgICB3aGlsZSBsaW5lLnJzdHJpcCgpICE9ICIj
RU9GIjoKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGhhdmVuJ3QgY3Jhc2hlZC4KKyAgICAg
ICAgICAgIGlmIGxpbmUgPT0gJycgYW5kIHNlbGYucG9sbCgpIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgICAgICMgVGhpcyBpcyBoZXggY29kZSAweGMwMDAwMDFkLCB3aGljaCBpcyB1c2VkIGZv
ciBhYnJ1cHQKKyAgICAgICAgICAgICAgICAjIHRlcm1pbmF0aW9uLiBUaGlzIGhhcHBlbnMgaWYg
d2UgaGl0IGN0cmwrYyBmcm9tIHRoZSBwcm9tcHQKKyAgICAgICAgICAgICAgICAjIGFuZCB3ZSBo
YXBwZW4gdG8gYmUgd2FpdGluZyBvbiB0aGUgdGVzdF9zaGVsbC4KKyAgICAgICAgICAgICAgICAj
IHNkb3lvbjogTm90IHN1cmUgZm9yIHdoaWNoIE9TIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMg
dGhlCisgICAgICAgICAgICAgICAgIyBhYm92ZSBjb2RlIGlzIHZhbGlkLiBXaGF0IHdvcmtzIGZv
ciBtZSB1bmRlciBMaW51eCB0byBkZXRlY3QKKyAgICAgICAgICAgICAgICAjIGN0cmwrYyBpcyBm
b3IgdGhlIHN1YnByb2Nlc3MgcmV0dXJuY29kZSB0byBiZSBuZWdhdGl2ZQorICAgICAgICAgICAg
ICAgICMgU0lHSU5ULiBBbmQgdGhhdCBhZ3JlZXMgd2l0aCB0aGUgc3VicHJvY2VzcyBkb2N1bWVu
dGF0aW9uLgorICAgICAgICAgICAgICAgIGlmICgtMTA3Mzc0MTUxMCA9PSBzZWxmLl9wcm9jLnJl
dHVybmNvZGUgb3IKKyAgICAgICAgICAgICAgICAgICAgLSBzaWduYWwuU0lHSU5UID09IHNlbGYu
X3Byb2MucmV0dXJuY29kZSk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50
ZXJydXB0CisgICAgICAgICAgICAgICAgY3Jhc2ggPSBUcnVlCisgICAgICAgICAgICAgICAgYnJl
YWsKKworICAgICAgICAgICAgIyBEb24ndCBpbmNsdWRlICNVUkwgbGluZXMgaW4gb3VyIG91dHB1
dAorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIjVVJMOiIpOgorICAgICAgICAgICAg
ICAgIGFjdHVhbF91cmkgPSBsaW5lLnJzdHJpcCgpWzU6XQorICAgICAgICAgICAgICAgIGlmIHVy
aSAhPSBhY3R1YWxfdXJpOgorICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmZhdGFsKCJUZXN0
IGdvdCBvdXQgb2Ygc3luYzpcbnwlc3xcbnwlc3wiICUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHVyaSwgYWN0dWFsX3VyaSkpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFz
c2VydGlvbkVycm9yKCJ0ZXN0IG91dCBvZiBzeW5jIikKKyAgICAgICAgICAgIGVsaWYgbGluZS5z
dGFydHN3aXRoKCIjTUQ1OiIpOgorICAgICAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bSA9IGxp
bmUucnN0cmlwKClbNTpdCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiI1RFU1Rf
VElNRURfT1VUIik6CisgICAgICAgICAgICAgICAgdGltZW91dCA9IFRydWUKKyAgICAgICAgICAg
ICAgICAjIFRlc3QgdGltZWQgb3V0LCBidXQgd2Ugc3RpbGwgbmVlZCB0byByZWFkIHVudGlsICNF
T0YuCisgICAgICAgICAgICBlbGlmIGFjdHVhbF91cmk6CisgICAgICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZChsaW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnJvci5h
cHBlbmQobGluZSkKKworICAgICAgICAgICAgbGluZSA9IHNlbGYuX3Byb2Muc3Rkb3V0LnJlYWRs
aW5lKCkKKworICAgICAgICByZXR1cm4gKGNyYXNoLCB0aW1lb3V0LCBhY3R1YWxfY2hlY2tzdW0s
ICcnLmpvaW4ob3V0cHV0KSwKKyAgICAgICAgICAgICAgICAnJy5qb2luKGVycm9yKSkKKworICAg
IGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jOgorICAgICAgICAgICAgc2Vs
Zi5fcHJvYy5zdGRpbi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9z
ZSgpCisgICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKKyAgICAgICAgICAgICAgICBz
ZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgpCisgICAgICAgICAgICBpZiAoc3lzLnBsYXRmb3JtIG5v
dCBpbiAoJ3dpbjMyJywgJ2N5Z3dpbicpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9w
cm9jLnBvbGwoKSk6CisgICAgICAgICAgICAgICAgIyBDbG9zaW5nIHN0ZGluL3N0ZG91dC9zdGRl
cnIgaGFuZ3Mgc29tZXRpbWVzIG9uIE9TIFguCisgICAgICAgICAgICAgICAgbnVsbCA9IG9wZW4o
b3MuZGV2bnVsbCwgInciKQorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oWyJraWxs
IiwgIi05IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihzZWxmLl9wcm9j
LnBpZCldLCBzdGRlcnI9bnVsbCkKKyAgICAgICAgICAgICAgICBudWxsLmNsb3NlKCkKClByb3Bl
cnR5IGNoYW5nZXMgb246IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW0ucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CShy
ZXZpc2lvbiA1NDMyOCkKKysrIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0
cF9zZXJ2ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUyICs0MSwyMSBAQAogaW1wb3J0IHVy
bGxpYgogCiBpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQotaW1wb3J0IHBhdGhfdXRpbHMKIAotY2xh
c3MgSHR0cGROb3RTdGFydGVkKEV4Y2VwdGlvbik6IHBhc3MKIAotZGVmIHJlbW92ZV9sb2dfZmls
ZXMoZm9sZGVyLCBzdGFydHNfd2l0aCk6Ci0gICAgZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRlcikK
LSAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAgICAgaWYgZmlsZS5zdGFydHN3aXRoKHN0YXJ0
c193aXRoKToKLSAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsIGZp
bGUpCi0gICAgICAgICAgICBvcy5yZW1vdmUoZnVsbF9wYXRoKQorY2xhc3MgSHR0cGROb3RTdGFy
dGVkKEV4Y2VwdGlvbik6CisgICAgcGFzcwogCiAKIGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVy
X2Jhc2UuSHR0cFNlcnZlckJhc2UpOgotICAgICMgV2Via2l0IHRlc3RzCi0gICAgdHJ5OgotICAg
ICAgICBfd2Via2l0X3Rlc3RzID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFy
dHknLCAnV2ViS2l0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ0xheW91dFRlc3RzJywgJ2h0dHAnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMnKQotICAgICAgICBfanNfdGVzdF9yZXNv
dXJjZSA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
TGF5b3V0VGVzdHMnLCAnZmFzdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnanMnLCAncmVzb3VyY2VzJykKLSAgICBleGNlcHQgcGF0aF91
dGlscy5QYXRoTm90Rm91bmQ6Ci0gICAgICAgIF93ZWJraXRfdGVzdHMgPSBOb25lCi0gICAgICAg
IF9qc190ZXN0X3Jlc291cmNlID0gTm9uZQogCi0gICAgIyBQYXRoIHdoZXJlIHdlIGNhbiBhY2Nl
c3MgYWxsIG9mIHRoZSB0ZXN0cwotICAgIF9hbGxfdGVzdHMgPSBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICdsYXlvdXRfdGVzdHMnKQotICAgICMgU2VsZiBnZW5l
cmF0ZWQgY2VydGlmaWNhdGUgZm9yIFNTTCBzZXJ2ZXIgKGZvciBjbGllbnQgY2VydCBnZXQKLSAg
ICAjIDxiYXNlLXBhdGg+XGNocm9tZVx0ZXN0XGRhdGFcc3NsXGNlcnRzXHJvb3RfY2FfY2VydC5j
cnQpCi0gICAgX3BlbV9maWxlID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgKLSAgICAgICAg
b3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLCAnaHR0cGQyLnBlbScp
Ci0gICAgIyBPbmUgbWFwcGluZyB3aGVyZSB3ZSBjYW4gZ2V0IHRvIGV2ZXJ5dGhpbmcKLSAgICBW
SVJUVUFMQ09ORklHID0gW3sncG9ydCc6IDgwODEsICdkb2Nyb290JzogX2FsbF90ZXN0c31dCi0K
LSAgICBpZiBfd2Via2l0X3Rlc3RzOgotICAgICAgICBWSVJUVUFMQ09ORklHLmV4dGVuZCgKLSAg
ICAgICAgICAjIFRocmVlIG1hcHBpbmdzIChvbmUgd2l0aCBTU0wgZW5hYmxlZCkgZm9yIExheW91
dFRlc3RzIGh0dHAgdGVzdHMKLSAgICAgICAgICBbeydwb3J0JzogODAwMCwgJ2RvY3Jvb3QnOiBf
d2Via2l0X3Rlc3RzfSwKLSAgICAgICAgICAgeydwb3J0JzogODA4MCwgJ2RvY3Jvb3QnOiBfd2Vi
a2l0X3Rlc3RzfSwKLSAgICAgICAgICAgeydwb3J0JzogODQ0MywgJ2RvY3Jvb3QnOiBfd2Via2l0
X3Rlc3RzLCAnc3NsY2VydCc6IF9wZW1fZmlsZX1dKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IG91dHB1dF9kaXIsIGJhY2tncm91bmQ9RmFsc2UsIHBvcnQ9Tm9uZSwKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcG9ydF9vYmosIG91dHB1dF9kaXIsIGJhY2tncm91bmQ9RmFsc2UsIHBvcnQ9Tm9u
ZSwKICAgICAgICAgICAgICAgICAgcm9vdD1Ob25lLCByZWdpc3Rlcl9jeWd3aW49Tm9uZSwgcnVu
X2JhY2tncm91bmQ9Tm9uZSk6CiAgICAgICAgICIiIkFyZ3M6CiAgICAgICAgICAgb3V0cHV0X2Rp
cjogdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdCBkaXJlY3RvcnkK
ICAgICAgICAgIiIiCisgICAgICAgICMgV2Via2l0IHRlc3RzCisgICAgICAgIGh0dHBfc2VydmVy
X2Jhc2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18oc2VsZiwgcG9ydF9vYmopCiAgICAgICAgIHNl
bGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCiAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25l
CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CkBAIC05Niw2ICs2NSwzMSBAQAogICAgICAgICBp
ZiBzZWxmLl9wb3J0OgogICAgICAgICAgICAgc2VsZi5fcG9ydCA9IGludChzZWxmLl9wb3J0KQog
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF93ZWJraXRfdGVzdHMgPSBvcy5wYXRoLmpvaW4o
c2VsZi5fcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2RpcigpLAorICAgICAgICAgICAgICAgICAnaHR0
cCcsICd0ZXN0cycpCisgICAgICAgICAgICBfd2Via2l0X3Rlc3RzID0gb3MucGF0aC5qb2luKHNl
bGYuX3BvcnRfb2JqLmxheW91dF90ZXN0c19kaXIoKSwKKyAgICAgICAgICAgICAgICAgJ2Zhc3Qn
LCAnanMnLCAncmVzb3VyY2VzJykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgX3dlYmtp
dF90ZXN0cyA9IE5vbmUKKyAgICAgICAgICAgIF9qc190ZXN0X3Jlc291cmNlID0gTm9uZQorCisg
ICAgICAgICMgU2VsZiBnZW5lcmF0ZWQgY2VydGlmaWNhdGUgZm9yIFNTTCBzZXJ2ZXIgKGZvciBj
bGllbnQgY2VydCBnZXQKKyAgICAgICAgIyA8YmFzZS1wYXRoPlxjaHJvbWVcdGVzdFxkYXRhXHNz
bFxjZXJ0c1xyb290X2NhX2NlcnQuY3J0KQorICAgICAgICBzZWxmLl9wZW1fZmlsZSA9IG9zLnBh
dGguam9pbigKKyAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19m
aWxlX18pKSwgJ2h0dHBkMi5wZW0nKQorCisgICAgICAgICMgT25lIG1hcHBpbmcgd2hlcmUgd2Ug
Y2FuIGdldCB0byBldmVyeXRoaW5nCisgICAgICAgIFZJUlRVQUxDT05GSUcgPSBbXQorCisgICAg
ICAgIGlmIF93ZWJraXRfdGVzdHM6CisgICAgICAgICAgICBWSVJUVUFMQ09ORklHLmV4dGVuZCgK
KyAgICAgICAgICAgICAgICMgVGhyZWUgbWFwcGluZ3MgKG9uZSB3aXRoIFNTTCkgZm9yIExheW91
dFRlc3RzIGh0dHAgdGVzdHMKKyAgICAgICAgICAgICAgIFt7J3BvcnQnOiA4MDAwLCAnZG9jcm9v
dCc6IF93ZWJraXRfdGVzdHN9LAorICAgICAgICAgICAgICAgIHsncG9ydCc6IDgwODAsICdkb2Ny
b290JzogX3dlYmtpdF90ZXN0c30sCisgICAgICAgICAgICAgICAgeydwb3J0JzogODQ0MywgJ2Rv
Y3Jvb3QnOiBfd2Via2l0X3Rlc3RzLAorICAgICAgICAgICAgICAgICAnc3NsY2VydCc6IHNlbGYu
X3BlbV9maWxlfV0pCisKICAgICBkZWYgaXNfcnVubmluZyhzZWxmKToKICAgICAgICAgcmV0dXJu
IHNlbGYuX3Byb2Nlc3MgIT0gTm9uZQogCkBAIC0xMDMsOSArOTcsOSBAQAogICAgICAgICBpZiBz
ZWxmLmlzX3J1bm5pbmcoKToKICAgICAgICAgICAgIHJhaXNlICdMaWdodHRwZCBhbHJlYWR5IHJ1
bm5pbmcnCiAKLSAgICAgICAgYmFzZV9jb25mX2ZpbGUgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9i
YXNlKCd0aGlyZF9wYXJ0eScsCisgICAgICAgIGJhc2VfY29uZl9maWxlID0gc2VsZi5fcG9ydF9v
YmoucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywKICAgICAgICAgICAgICdXZWJLaXRUb29s
cycsICdTY3JpcHRzJywgJ3dlYmtpdHB5JywgJ2xheW91dF90ZXN0cycsCi0gICAgICAgICAgICAn
bGF5b3V0X3BhY2thZ2UnLCAnbGlnaHR0cGQuY29uZicpCisgICAgICAgICAgICAncG9ydCcsICds
aWdodHRwZC5jb25mJykKICAgICAgICAgb3V0X2NvbmZfZmlsZSA9IG9zLnBhdGguam9pbihzZWxm
Ll9vdXRwdXRfZGlyLCAnbGlnaHR0cGQuY29uZicpCiAgICAgICAgIHRpbWVfc3RyID0gdGltZS5z
dHJmdGltZSgiJWQlYiVZLSVIJU0lUyIpCiAgICAgICAgIGFjY2Vzc19maWxlX25hbWUgPSAiYWNj
ZXNzLmxvZy0iICsgdGltZV9zdHIgKyAiLnR4dCIKQEAgLTExNCw4ICsxMDgsOCBAQAogICAgICAg
ICBlcnJvcl9sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgbG9nX2ZpbGVfbmFt
ZSkKIAogICAgICAgICAjIFJlbW92ZSBvbGQgbG9nIGZpbGVzLiBXZSBvbmx5IG5lZWQgdG8ga2Vl
cCB0aGUgbGFzdCBvbmVzLgotICAgICAgICByZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9k
aXIsICJhY2Nlc3MubG9nLSIpCi0gICAgICAgIHJlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0
X2RpciwgImVycm9yLmxvZy0iKQorICAgICAgICBzZWxmLnJlbW92ZV9sb2dfZmlsZXMoc2VsZi5f
b3V0cHV0X2RpciwgImFjY2Vzcy5sb2ctIikKKyAgICAgICAgc2VsZi5yZW1vdmVfbG9nX2ZpbGVz
KHNlbGYuX291dHB1dF9kaXIsICJlcnJvci5sb2ctIikKIAogICAgICAgICAjIFdyaXRlIG91dCB0
aGUgY29uZmlnCiAgICAgICAgIGYgPSBmaWxlKGJhc2VfY29uZl9maWxlLCAncmInKQpAQCAtMTMy
LDcgKzEyNiw3IEBACiAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAiLnBsIiAgID0+
ICIvdXNyL2Jpbi9lbnYiLFxuJwogICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIi5h
c2lzIiA9PiAiL2Jpbi9jYXQiLFxuJwogICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAg
Ii5waHAiICA9PiAiJXMiIClcblxuJykgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhdGhfdXRpbHMubGlnaHR0cGRfcGhwX3BhdGgoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0X29iai5fcGF0aF90b19saWdodHRwZF9waHAo
KSkKIAogICAgICAgICAjIFNldHVwIGxvZyBmaWxlcwogICAgICAgICBmLndyaXRlKCgnc2VydmVy
LmVycm9ybG9nID0gIiVzIlxuJwpAQCAtMTYxLDcgKzE1NSw3IEBACiAgICAgICAgICAgICAgICAg
bWFwcGluZ3MgPSBbeydwb3J0JzogODAwMCwgJ2RvY3Jvb3QnOiBzZWxmLl9yb290fSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4MDgwLCAnZG9jcm9vdCc6IHNlbGYuX3Jv
b3R9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9ydCc6IDg0NDMsICdkb2Nyb290
Jzogc2VsZi5fcm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzbGNlcnQnOiBM
aWdodHRwZC5fcGVtX2ZpbGV9XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3NsY2Vy
dCc6IHNlbGYuX3BlbV9maWxlfV0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1hcHBpbmdz
ID0gc2VsZi5WSVJUVUFMQ09ORklHCiAgICAgICAgIGZvciBtYXBwaW5nIGluIG1hcHBpbmdzOgpA
QCAtMTc2LDEyICsxNzAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICd9XG5cbicpICUgKG1h
cHBpbmdbJ3BvcnQnXSwgbWFwcGluZ1snZG9jcm9vdCddKSkKICAgICAgICAgZi5jbG9zZSgpCiAK
LSAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMubGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRo
KCkKLSAgICAgICAgbW9kdWxlX3BhdGggPSBwYXRoX3V0aWxzLmxpZ2h0dHBkX21vZHVsZV9wYXRo
KCkKKyAgICAgICAgZXhlY3V0YWJsZSA9IHNlbGYuX3BvcnRfb2JqLl9wYXRoX3RvX2xpZ2h0dHBk
KCkKKyAgICAgICAgbW9kdWxlX3BhdGggPSBzZWxmLl9wb3J0X29iai5fcGF0aF90b19saWdodHRw
ZF9tb2R1bGVzKCkKICAgICAgICAgc3RhcnRfY21kID0gW2V4ZWN1dGFibGUsCiAgICAgICAgICAg
ICAgICAgICAgICAjIE5ld2x5IHdyaXR0ZW4gY29uZmlnIGZpbGUKLSAgICAgICAgICAgICAgICAg
ICAgICctZicsIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uoc2VsZi5fb3V0cHV0X2RpciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpZ2h0
dHBkLmNvbmYnKSwKKyAgICAgICAgICAgICAgICAgICAgICctZicsIHNlbGYuX3BvcnRfb2JqLl9w
YXRoX2Zyb21fYmFzZShzZWxmLl9vdXRwdXRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpZ2h0dHBkLmNvbmYnKSwKICAgICAg
ICAgICAgICAgICAgICAgICMgV2hlcmUgaXQgY2FuIGZpbmQgaXRzIG1vZHVsZSBkeW5hbWljIGxp
YnJhcmllcwogICAgICAgICAgICAgICAgICAgICAgJy1tJywgbW9kdWxlX3BhdGhdCiAKQEAgLTIw
MywxMSArMTk3LDExIEBACiAgICAgICAgIGVudiA9IG9zLmVudmlyb24KICAgICAgICAgaWYgc3lz
LnBsYXRmb3JtIGluICgnY3lnd2luJywgJ3dpbjMyJyk6CiAgICAgICAgICAgICBlbnZbJ1BBVEgn
XSA9ICclczslcycgJSAoCi0gICAgICAgICAgICAgICAgcGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2JpbicpLAorICAgICAgICAgICAgICAgIHBvcnQu
cGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nKSwKICAgICAgICAg
ICAgICAgICBlbnZbJ1BBVEgnXSkKIAogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMy
JyBhbmQgc2VsZi5fcmVnaXN0ZXJfY3lnd2luOgotICAgICAgICAgICAgc2V0dXBfbW91bnQgPSBw
YXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLAorICAgICAg
ICAgICAgc2V0dXBfbW91bnQgPSBwb3J0LnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdj
eWd3aW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdzZXR1cF9tb3VudC5iYXQnKQogICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihzZXR1
cF9tb3VudCkud2FpdCgpCiAKQEAgLTIzNSw3ICsyMjksNyBAQAogICAgICAgICBodHRwZF9waWQg
PSBOb25lCiAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CiAgICAgICAgICAgICBodHRwZF9waWQg
PSBzZWxmLl9wcm9jZXNzLnBpZAotICAgICAgICBwYXRoX3V0aWxzLnNodXRfZG93bl9odHRwX3Nl
cnZlcihodHRwZF9waWQpCisgICAgICAgIHBvcnQuX3NodXRfZG93bl9odHRwX3NlcnZlcihodHRw
ZF9waWQpCiAKICAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKICAgICAgICAgICAgIHNlbGYuX3By
b2Nlc3Mud2FpdCgpCkluZGV4OiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Fw
YWNoZV9odHRwX3NlcnZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQkocmV2aXNpb24gNTQzMjgpCisrKyBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQko
d29ya2luZyBjb3B5KQpAQCAtMzcsMTkgKzM3LDE5IEBACiBpbXBvcnQgc3lzCiAKIGltcG9ydCBo
dHRwX3NlcnZlcl9iYXNlCi1pbXBvcnQgcGF0aF91dGlscwotaW1wb3J0IHBvcnQKIAogCiBjbGFz
cyBMYXlvdXRUZXN0QXBhY2hlSHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6
CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0X2Rpcik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnRfb2JqLCBvdXRwdXRfZGlyKToKICAgICAgICAgIiIiQXJnczoKKyAgICAgICAg
ICBwb3J0X29iajogaGFuZGxlIHRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyByb3V0aW5lcwogICAg
ICAgICAgIG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCBy
ZXN1bHQgZGlyZWN0b3J5CiAgICAgICAgICIiIgorICAgICAgICBodHRwX3NlcnZlcl9iYXNlLkh0
dHBTZXJ2ZXJCYXNlLl9faW5pdF9fKHNlbGYsIHBvcnRfb2JqKQogICAgICAgICBzZWxmLl9vdXRw
dXRfZGlyID0gb3V0cHV0X2RpcgogICAgICAgICBzZWxmLl9odHRwZF9wcm9jID0gTm9uZQotICAg
ICAgICBwYXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KG91dHB1dF9kaXIpCisgICAgICAg
IHBvcnRfb2JqLm1heWJlX21ha2VfZGlyZWN0b3J5KG91dHB1dF9kaXIpCiAKICAgICAgICAgc2Vs
Zi5tYXBwaW5ncyA9IFt7J3BvcnQnOiA4MDAwfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB7
J3BvcnQnOiA4MDgwfSwKQEAgLTU5LDE1ICs1OSwxNCBAQAogICAgICAgICAjIFRoZSB1cHN0cmVh
bSAuY29uZiBmaWxlIGFzc3VtZWQgdGhlIGV4aXN0ZW5jZSBvZiAvdG1wL1dlYktpdCBmb3IKICAg
ICAgICAgIyBwbGFjaW5nIGFwYWNoZSBmaWxlcyBsaWtlIHRoZSBsb2NrIGZpbGUgdGhlcmUuCiAg
ICAgICAgIHNlbGYuX3J1bnRpbWVfcGF0aCA9IG9zLnBhdGguam9pbigiL3RtcCIsICJXZWJLaXQi
KQotICAgICAgICBwYXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYuX3J1bnRpbWVf
cGF0aCkKKyAgICAgICAgcG9ydF9vYmoubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5fcnVudGlt
ZV9wYXRoKQogCiAgICAgICAgICMgVGhlIFBJRCByZXR1cm5lZCB3aGVuIEFwYWNoZSBpcyBzdGFy
dGVkIGdvZXMgYXdheSAoZHVlIHRvIGRyb3BwaW5nCiAgICAgICAgICMgcHJpdmlsZWdlcz8pLiBU
aGUgcHJvcGVyIGNvbnRyb2xsaW5nIFBJRCBpcyB3cml0dGVuIHRvIGEgZmlsZSBpbiB0aGUKICAg
ICAgICAgIyBhcGFjaGUgcnVudGltZSBkaXJlY3RvcnkuCiAgICAgICAgIHNlbGYuX3BpZF9maWxl
ID0gb3MucGF0aC5qb2luKHNlbGYuX3J1bnRpbWVfcGF0aCwgJ2h0dHBkLnBpZCcpCiAKLSAgICAg
ICAgdGVzdF9kaXIgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdX
ZWJLaXQnLAotICAgICAgICAgICAgJ0xheW91dFRlc3RzJykKKyAgICAgICAgdGVzdF9kaXIgPSBz
ZWxmLl9wb3J0X29iai5sYXlvdXRfdGVzdHNfZGlyKCkKICAgICAgICAganNfdGVzdF9yZXNvdXJj
ZXNfZGlyID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbih0ZXN0X2RpciwgImZhc3QiLCAianMiLAog
ICAgICAgICAgICAgInJlc291cmNlcyIpCiAgICAgICAgIG1pbWVfdHlwZXNfcGF0aCA9IHNlbGYu
X2N5Z3dpbl9zYWZlX2pvaW4odGVzdF9kaXIsICJodHRwIiwgImNvbmYiLApAQCAtNzgsNyArNzcs
NyBAQAogICAgICAgICBlcnJvcl9sb2cgPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2luKG91dHB1dF9k
aXIsICJlcnJvcl9sb2cudHh0IikKICAgICAgICAgZG9jdW1lbnRfcm9vdCA9IHNlbGYuX2N5Z3dp
bl9zYWZlX2pvaW4odGVzdF9kaXIsICJodHRwIiwgInRlc3RzIikKIAotICAgICAgICBleGVjdXRh
YmxlID0gcG9ydC5hcGFjaGVfZXhlY3V0YWJsZV9wYXRoKCkKKyAgICAgICAgZXhlY3V0YWJsZSA9
IHNlbGYuX3BvcnRfb2JqLl9wYXRoX3RvX2FwYWNoZSgpCiAgICAgICAgIGlmIHNlbGYuX2lzX2N5
Z3dpbigpOgogICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHNlbGYuX2dldF9jeWd3aW5fcGF0aChl
eGVjdXRhYmxlKQogCkBAIC05NSw3ICs5NCw4IEBACiAgICAgICAgICAgICAgICAgb3MuZW52aXJv
bi5nZXQoIlVTRVIiLCAiIikpXQogCiAgICAgICAgIGlmIHNlbGYuX2lzX2N5Z3dpbigpOgotICAg
ICAgICAgICAgY3lnYmluID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHkn
LCAnY3lnd2luJywgJ2JpbicpCisgICAgICAgICAgICBjeWdiaW4gPSBzZWxmLl9wb3J0X29iai5f
cGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsCisgICAgICAgICAgICAgICAg
J2JpbicpCiAgICAgICAgICAgICAjIE5vdCBlbnRpcmVseSBzdXJlIHdoeSwgYnV0IGZyb20gY3ln
d2luIHdlIG5lZWQgdG8gcnVuIHRoZQogICAgICAgICAgICAgIyBodHRwZCBjb21tYW5kIHRocm91
Z2ggYmFzaC4KICAgICAgICAgICAgIHNlbGYuX3N0YXJ0X2NtZCA9IFsKQEAgLTE0Niw3ICsxNDYs
NyBAQAogICAgICAgICAgIHRlc3RfZGlyOiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBMYXlvdXRUZXN0
cyBkaXJlY3RvcnkuCiAgICAgICAgICAgb3V0cHV0X2RpcjogYWJzb2x1dGUgcGF0aCB0byB0aGUg
bGF5b3V0IHRlc3QgcmVzdWx0cyBkaXJlY3RvcnkuCiAgICAgICAgICIiIgotICAgICAgICBodHRw
ZF9jb25maWcgPSBwb3J0LmFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCkKKyAgICAgICAgaHR0cGRf
Y29uZmlnID0gc2VsZi5fcG9ydF9vYmouX3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKCkKICAg
ICAgICAgaHR0cGRfY29uZmlnX2NvcHkgPSBvcy5wYXRoLmpvaW4ob3V0cHV0X2RpciwgImh0dHBk
LmNvbmYiKQogICAgICAgICBodHRwZF9jb25mID0gb3BlbihodHRwZF9jb25maWcpLnJlYWQoKQog
ICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKQEAgLTE1NiwyMiArMTU2LDExIEBACiAgICAg
ICAgICAgICAjIHBsdXMgdGhlIHJlbGF0aXZlIHBhdGhzIHRvIHRoZSAuc28gZmlsZXMgbGlzdGVk
IGluIHRoZSAuY29uZgogICAgICAgICAgICAgIyBmaWxlLiBXZSBoYXZlIGFwYWNoZS9jeWd3aW4g
Y2hlY2tlZCBpbnRvIG91ciB0cmVlIHNvCiAgICAgICAgICAgICAjIHBlb3BsZSBkb24ndCBoYXZl
IHRvIGluc3RhbGwgaXQgaW50byB0aGVpciBjeWd3aW4uCi0gICAgICAgICAgICBjeWd1c3IgPSBw
YXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAndXNyJykK
KyAgICAgICAgICAgIGN5Z3VzciA9IHNlbGYuX3BvcnRfb2JqLl9wYXRoX2Zyb21fYmFzZSgndGhp
cmRfcGFydHknLCAnY3lnd2luJywKKyAgICAgICAgICAgICAgICAndXNyJykKICAgICAgICAgICAg
IGh0dHBkX2NvbmYgPSBodHRwZF9jb25mLnJlcGxhY2UoJ1NlcnZlclJvb3QgIi91c3IiJywKICAg
ICAgICAgICAgICAgICAnU2VydmVyUm9vdCAiJXMiJyAlIHNlbGYuX2dldF9jeWd3aW5fcGF0aChj
eWd1c3IpKQogCi0gICAgICAgICMgVE9ETyhvamFuKTogSW5zdGVhZCBvZiB3cml0aW5nIGFuIGV4
dHJhIGZpbGUsIGNoZWNraW4gYSBjb25mIGZpbGUKLSAgICAgICAgIyB1cHN0cmVhbS4gT3IsIGV2
ZW4gYmV0dGVyLCB1cHN0cmVhbS9kZWxldGUgYWxsIG91ciBjaHJvbWUgaHR0cAotICAgICAgICAj
IHRlc3RzIHNvIHdlIGRvbid0IG5lZWQgdGhpcyBzcGVjaWFsLWNhc2VkIERvY3VtZW50Um9vdCBh
bmQgdGhlbgotICAgICAgICAjIGp1c3QgdXNlIHRoZSB1cHN0cmVhbQotICAgICAgICAjIGNvbmYg
ZmlsZS4KLSAgICAgICAgY2hyb21lX2RvY3VtZW50X3Jvb3QgPSBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsCi0gICAgICAgICAgICAnbGF5b3V0X3Rlc3RzJykKLSAg
ICAgICAgaWYgc2VsZi5faXNfY3lnd2luKCk6Ci0gICAgICAgICAgICBjaHJvbWVfZG9jdW1lbnRf
cm9vdCA9IHNlbGYuX2dldF9jeWd3aW5fcGF0aChjaHJvbWVfZG9jdW1lbnRfcm9vdCkKLSAgICAg
ICAgaHR0cGRfY29uZiA9IChodHRwZF9jb25mICsKLSAgICAgICAgICAgIHNlbGYuX2dldF92aXJ0
dWFsX2hvc3RfY29uZmlnKGNocm9tZV9kb2N1bWVudF9yb290LCA4MDgxKSkKLQogICAgICAgICBm
ID0gb3BlbihodHRwZF9jb25maWdfY29weSwgJ3diJykKICAgICAgICAgZi53cml0ZShodHRwZF9j
b25mKQogICAgICAgICBmLmNsb3NlKCkKQEAgLTIyNiw0ICsyMTUsNCBAQAogICAgICAgICBodHRw
ZF9waWQgPSBOb25lCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX3BpZF9maWxlKToK
ICAgICAgICAgICAgIGh0dHBkX3BpZCA9IGludChvcGVuKHNlbGYuX3BpZF9maWxlKS5yZWFkbGlu
ZSgpKQotICAgICAgICBwYXRoX3V0aWxzLnNodXRfZG93bl9odHRwX3NlcnZlcihodHRwZF9waWQp
CisgICAgICAgIHNlbGYuX3BvcnRfb2JqLl9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0cGRfcGlk
KQpJbmRleDogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX2Nocm9taXVtX3dlYmtp
dF90ZXN0cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CShyZXZpc2lvbiA1NDMyOCkKKysrIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkJKHdvcmtp
bmcgY29weSkKQEAgLTU0LDMxICs1NCwyNCBAQAogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHJlCiBp
bXBvcnQgc2h1dGlsCi1pbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUK
IGltcG9ydCB0cmFjZWJhY2sKIAoraW1wb3J0IHNpbXBsZWpzb24KKwogZnJvbSBsYXlvdXRfcGFj
a2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0
IGpzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9y
dCBtZXRlcmVkX3N0cmVhbQogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJl
cwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9zaGVsbF90aHJlYWQKIGZyb20gbGF5
b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmlsZXMKLQotaW1wb3J0IHBvcnQKLWZyb20gcG9ydCBp
bXBvcnQgYXBhY2hlX2h0dHBfc2VydmVyCi1mcm9tIHBvcnQgaW1wb3J0IGh0dHBfc2VydmVyCi1m
cm9tIHBvcnQgaW1wb3J0IHBhdGhfdXRpbHMKLWZyb20gcG9ydCBpbXBvcnQgd2Vic29ja2V0X3Nl
cnZlcgotCiBmcm9tIHRlc3RfdHlwZXMgaW1wb3J0IGZ1enp5X2ltYWdlX2RpZmYKIGZyb20gdGVz
dF90eXBlcyBpbXBvcnQgaW1hZ2VfZGlmZgogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXN0X3R5
cGVfYmFzZQogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXh0X2RpZmYKIAotc3lzLnBhdGguYXBw
ZW5kKHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JykpCi1pbXBvcnQgc2lt
cGxlanNvbgoraW1wb3J0IHBvcnQKIAogIyBJbmRpY2F0ZXMgdGhhdCB3ZSB3YW50IGRldGFpbGVk
IHByb2dyZXNzIHVwZGF0ZXMgaW4gdGhlIG91dHB1dCAocHJpbnRzCiAjIGRpcmVjdG9yeS1ieS1k
aXJlY3RvcnkgZmVlZGJhY2spLgpAQCAtOTYsMTcgKzg5LDE2IEBACiBjbGFzcyBUZXN0SW5mbzoK
ICAgICAiIiJHcm91cHMgaW5mb3JtYXRpb24gYWJvdXQgYSB0ZXN0IGZvciBlYXN5IHBhc3Npbmcg
b2YgZGF0YS4iIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgdGltZW91dCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGZpbGVuYW1lLCB0aW1lb3V0KToKICAgICAg
ICAgIiIiR2VuZXJhdGVzIHRoZSBVUkkgYW5kIHN0b3JlcyB0aGUgZmlsZW5hbWUgYW5kIHRpbWVv
dXQgZm9yIHRoaXMgdGVzdC4KICAgICAgICAgQXJnczoKICAgICAgICAgICBmaWxlbmFtZTogRnVs
bCBwYXRoIHRvIHRoZSB0ZXN0LgogICAgICAgICAgIHRpbWVvdXQ6IFRpbWVvdXQgZm9yIHJ1bm5p
bmcgdGhlIHRlc3QgaW4gVGVzdFNoZWxsLgogICAgICAgICAgICIiIgogICAgICAgICBzZWxmLmZp
bGVuYW1lID0gZmlsZW5hbWUKLSAgICAgICAgc2VsZi51cmkgPSBwYXRoX3V0aWxzLmZpbGVuYW1l
X3RvX3VyaShmaWxlbmFtZSkKKyAgICAgICAgc2VsZi51cmkgPSBwb3J0LmZpbGVuYW1lX3RvX3Vy
aShmaWxlbmFtZSkKICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAotICAgICAgICBleHBl
Y3RlZF9oYXNoX2ZpbGUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcuY2hlY2tzdW0nKQorICAgICAgICBleHBlY3RlZF9oYXNoX2ZpbGUgPSBwb3J0LmV4cGVjdGVk
X2ZpbGVuYW1lKGZpbGVuYW1lLCAnLmNoZWNrc3VtJykKICAgICAgICAgdHJ5OgogICAgICAgICAg
ICAgc2VsZi5pbWFnZV9oYXNoID0gb3BlbihleHBlY3RlZF9oYXNoX2ZpbGUsICJyIikucmVhZCgp
CiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgpAQCAtMTc1LDI0ICsxNjcsMTkgQEAKIAogICAg
IE5VTV9SRVRSWV9PTl9VTkVYUEVDVEVEX0ZBSUxVUkUgPSAxCiAKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgb3B0aW9ucywgbWV0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zLCBt
ZXRlciwgcG9ydCk6CiAgICAgICAgICIiIkluaXRpYWxpemUgdGVzdCBydW5uZXIgZGF0YSBzdHJ1
Y3R1cmVzLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgb3B0aW9uczogYSBkaWN0aW9uYXJ5
IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCiAgICAgICAgICAgbWV0ZXI6IGEgTWV0ZXJlZFN0cmVh
bSBvYmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCisgICAgICAgICAgcG9ydDogYW4gb2JqZWN0
IGltcGxlbWVudGluZyBwb3J0LXNwZWNpZmljIGhvb2tzCiAgICAgICAgICIiIgogICAgICAgICBz
ZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxmLl9tZXRlciA9IG1ldGVyCiAKLSAg
ICAgICAgaWYgb3B0aW9ucy51c2VfYXBhY2hlOgotICAgICAgICAgICAgc2VsZi5faHR0cF9zZXJ2
ZXIgPSBhcGFjaGVfaHR0cF9zZXJ2ZXIuTGF5b3V0VGVzdEFwYWNoZUh0dHBkKAotICAgICAgICAg
ICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICBzZWxmLl9odHRwX3NlcnZlciA9IGh0dHBfc2VydmVyLkxpZ2h0dHBkKG9wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnkpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAKLSAgICAgICAgc2Vs
Zi5fd2Vic29ja2V0X3NlcnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCi0gICAg
ICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQogICAgICAgICAjIGRpc2FibGUgd3Nz
IHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMuCiAgICAgICAg
ICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2Vi
U29ja2V0KAogICAgICAgICAjICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCB1c2Vf
dGxzPVRydWUsIHBvcnQ9OTMyMykKQEAgLTIwMyw4ICsxOTAsNiBAQAogICAgICAgICAjIGEgc2V0
IG9mIHRlc3QgZmlsZXMsIGFuZCB0aGUgc2FtZSB0ZXN0cyBhcyBhIGxpc3QKICAgICAgICAgc2Vs
Zi5fdGVzdF9maWxlcyA9IHNldCgpCiAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCA9IE5v
bmUKLSAgICAgICAgc2VsZi5fZmlsZV9kaXIgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3
ZWJraXQnLCAndG9vbHMnLAotICAgICAgICAgICAgJ2xheW91dF90ZXN0cycpCiAgICAgICAgIHNl
bGYuX3Jlc3VsdF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKIAogICAgICAgICAjIFRoZXNlIGFyZSB1
c2VkIGZvciAtLWxvZyBkZXRhaWxlZC1wcm9ncmVzcyB0byB0cmFjayBzdGF0dXMgYnkKQEAgLTIx
OSwxOCArMjA0LDE2IEBACiAgICAgICAgIGxvZ2dpbmcuZGVidWcoImZsdXNoaW5nIHN0ZGVyciIp
CiAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQogICAgICAgICBsb2dnaW5nLmRlYnVnKCJzdG9w
cGluZyBodHRwIHNlcnZlciIpCi0gICAgICAgICMgU3RvcCB0aGUgaHR0cCBzZXJ2ZXIuCi0gICAg
ICAgIHNlbGYuX2h0dHBfc2VydmVyLnN0b3AoKQotICAgICAgICAjIFN0b3AgdGhlIFdlYiBTb2Nr
ZXQgLyBXZWIgU29ja2V0IFNlY3VyZSBzZXJ2ZXJzLgotICAgICAgICBzZWxmLl93ZWJzb2NrZXRf
c2VydmVyLnN0b3AoKQotICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVyLlN0
b3AoKQorICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQorICAgICAgICBsb2dn
aW5nLmRlYnVnKCJzdG9wcGluZyB3ZWJzb2NrZXQgc2VydmVyIikKKyAgICAgICAgc2VsZi5fcG9y
dC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQogCiAgICAgZGVmIGdhdGhlcl9maWxlX3BhdGhzKHNl
bGYsIHBhdGhzKToKICAgICAgICAgIiIiRmluZCBhbGwgdGhlIGZpbGVzIHRvIHRlc3QuCiAKICAg
ICAgICAgQXJnczoKICAgICAgICAgICBwYXRoczogYSBsaXN0IG9mIGdsb2JzIHRvIHVzZSBpbnN0
ZWFkIG9mIHRoZSBkZWZhdWx0cy4iIiIKLSAgICAgICAgc2VsZi5fdGVzdF9maWxlcyA9IHRlc3Rf
ZmlsZXMuZ2F0aGVyX3Rlc3RfZmlsZXMocGF0aHMpCisgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMg
PSB0ZXN0X2ZpbGVzLmdhdGhlcl90ZXN0X2ZpbGVzKHNlbGYuX3BvcnQsIHBhdGhzKQogCiAgICAg
ZGVmIHBhcnNlX2V4cGVjdGF0aW9ucyhzZWxmLCBwbGF0Zm9ybSwgaXNfZGVidWdfbW9kZSk6CiAg
ICAgICAgICIiIlBhcnNlIHRoZSBleHBlY3RhdGlvbnMgZnJvbSB0aGUgdGVzdF9saXN0IGZpbGVz
IGFuZCByZXR1cm4gYSBkYXRhCkBAIC0yNDIsOSArMjI1LDEwIEBACiAgICAgICAgICAgICB0ZXN0
X2ZpbGVzID0gc2VsZi5fdGVzdF9maWxlcwogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNl
bGYuX2V4cGVjdGF0aW9ucyA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnModGVz
dF9maWxlcywKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlX2RpciwgcGxhdGZvcm0sIGlzX2Rl
YnVnX21vZGUsCi0gICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5saW50X3Rlc3RfZmlsZXMp
CisgICAgICAgICAgICBleHBlY3RhdGlvbnNfc3RyID0gc2VsZi5fcG9ydC50ZXN0X2V4cGVjdGF0
aW9ucygpCisgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9u
cy5UZXN0RXhwZWN0YXRpb25zKAorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQsIHRlc3RfZmls
ZXMsIGV4cGVjdGF0aW9uc19zdHIsCisgICAgICAgICAgICAgICAgcGxhdGZvcm0sIGlzX2RlYnVn
X21vZGUsIHNlbGYuX29wdGlvbnMubGludF90ZXN0X2ZpbGVzKQogICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX2V4cGVjdGF0aW9ucwogICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlcnI6CiAgICAg
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmxpbnRfdGVzdF9maWxlczoKQEAgLTM1OSw3ICszNDMs
OCBAQAogICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlcyA9IHNldChzZWxmLl90ZXN0X2ZpbGVz
X2xpc3QpCiAKICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IHNlbGYucGFyc2VfZXhw
ZWN0YXRpb25zKAotICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMucGxhdGZvcm1fbmFtZSgpLCBz
ZWxmLl9vcHRpb25zLnRhcmdldCA9PSAnRGVidWcnKQorICAgICAgICAgICAgICAgIHNlbGYuX3Bv
cnQudGVzdF9wbGF0Zm9ybV9uYW1lKCksCisgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy50
YXJnZXQgPT0gJ0RlYnVnJykKIAogICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlcyA9IHNldChm
aWxlcykKICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCA9IGZpbGVzCkBAIC00MjQs
OCArNDA5LDkgQEAKICAgICAgICAgaXMgdXNlZCBmb3IgbG9va2luZyB1cCB0aGUgdGltZW91dCB2
YWx1ZSAoaW4gbXMpIHRvIHVzZSBmb3IgdGhlIGdpdmVuCiAgICAgICAgIHRlc3QuIiIiCiAgICAg
ICAgIGlmIHNlbGYuX2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxlLCB0ZXN0X2V4
cGVjdGF0aW9ucy5TTE9XKToKLSAgICAgICAgICAgIHJldHVybiBUZXN0SW5mbyh0ZXN0X2ZpbGUs
IHNlbGYuX29wdGlvbnMuc2xvd190aW1lX291dF9tcykKLSAgICAgICAgcmV0dXJuIFRlc3RJbmZv
KHRlc3RfZmlsZSwgc2VsZi5fb3B0aW9ucy50aW1lX291dF9tcykKKyAgICAgICAgICAgIHJldHVy
biBUZXN0SW5mbyhzZWxmLl9wb3J0LCB0ZXN0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zKQorICAgICAgICByZXR1cm4gVGVz
dEluZm8oc2VsZi5fcG9ydCwgdGVzdF9maWxlLCBzZWxmLl9vcHRpb25zLnRpbWVfb3V0X21zKQog
CiAgICAgZGVmIF9nZXRfdGVzdF9maWxlX3F1ZXVlKHNlbGYsIHRlc3RfZmlsZXMpOgogICAgICAg
ICAiIiJDcmVhdGUgdGhlIHRocmVhZCBzYWZlIHF1ZXVlIG9mIGxpc3RzIG9mICh0ZXN0IGZpbGVu
YW1lcywgdGVzdCBVUklzKQpAQCAtNDkwLDYgKzQ3Niw3IEBACiAgICAgICAgICIiIlJldHVybnMg
dGhlIHR1cGxlIG9mIGFyZ3VtZW50cyBmb3IgdGVzdHMgYW5kIGZvciB0ZXN0X3NoZWxsLiIiIgog
ICAgICAgICBzaGVsbF9hcmdzID0gW10KICAgICAgICAgdGVzdF9hcmdzID0gdGVzdF90eXBlX2Jh
c2UuVGVzdEFyZ3VtZW50cygpCisgICAgICAgIHBuZ19wYXRoID0gTm9uZQogICAgICAgICBpZiBu
b3Qgc2VsZi5fb3B0aW9ucy5ub19waXhlbF90ZXN0czoKICAgICAgICAgICAgIHBuZ19wYXRoID0g
b3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicG5nX3Jlc3VsdCVzLnBuZyIgJSBpbmRleCkKQEAg
LTUwNiw3ICs0OTMsNyBAQAogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmdwX2ZhdWx0X2Vycm9y
X2JveDoKICAgICAgICAgICAgIHNoZWxsX2FyZ3MuYXBwZW5kKCctLWdwLWZhdWx0LWVycm9yLWJv
eCcpCiAKLSAgICAgICAgcmV0dXJuICh0ZXN0X2FyZ3MsIHNoZWxsX2FyZ3MpCisgICAgICAgIHJl
dHVybiAodGVzdF9hcmdzLCBwbmdfcGF0aCwgc2hlbGxfYXJncykKIAogICAgIGRlZiBfY29udGFp
bnNfdGVzdHMoc2VsZiwgc3ViZGlyKToKICAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiBzZWxmLl90
ZXN0X2ZpbGVzX2xpc3Q6CkBAIC01MTQsMjMgKzUwMSwxMiBAQAogICAgICAgICAgICAgICAgIHJl
dHVybiBUcnVlCiAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgZGVmIF9pbnN0YW50aWF0ZV90
ZXN0X3NoZWxsX3RocmVhZHMoc2VsZiwgdGVzdF9zaGVsbF9iaW5hcnksIHRlc3RfZmlsZXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpOgorICAg
IGRlZiBfaW5zdGFudGlhdGVfdGVzdF9zaGVsbF90aHJlYWRzKHNlbGYsIHRlc3RfZmlsZXMsIHJl
c3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiSW5zdGFudGl0YXRlcyBhbmQgc3RhcnRzIHRoZSBU
ZXN0U2hlbGxUaHJlYWQocykuCiAKICAgICAgICAgUmV0dXJuOgogICAgICAgICAgIFRoZSBsaXN0
IG9mIHRocmVhZHMuCiAgICAgICAgICIiIgotICAgICAgICB0ZXN0X3NoZWxsX2NvbW1hbmQgPSBb
dGVzdF9zaGVsbF9iaW5hcnldCi0KLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy53cmFwcGVyOgot
ICAgICAgICAgICAgIyBUaGlzIHNwbGl0KCkgaXNuJ3QgcmVhbGx5IHdoYXQgd2Ugd2FudCAtLSBp
dCBpbmNvcnJlY3RseSB3aWxsCi0gICAgICAgICAgICAjIHNwbGl0IHF1b3RlZCBzdHJpbmdzIHdp
dGhpbiB0aGUgd3JhcHBlciBhcmd1bWVudCAtLSBidXQgaW4KLSAgICAgICAgICAgICMgcHJhY3Rp
Y2UgaXQgc2hvdWxkbid0IGNvbWUgdXAgYW5kIHRoZSAtLWhlbHAgb3V0cHV0IHdhcm5zCi0gICAg
ICAgICAgICAjIGFib3V0IGl0IGFueXdheS4KLSAgICAgICAgICAgIHRlc3Rfc2hlbGxfY29tbWFu
ZCA9IChzZWxmLl9vcHRpb25zLndyYXBwZXIuc3BsaXQoKSArCi0gICAgICAgICAgICAgICAgdGVz
dF9zaGVsbF9jb21tYW5kKQotCiAgICAgICAgIGZpbGVuYW1lX3F1ZXVlID0gc2VsZi5fZ2V0X3Rl
c3RfZmlsZV9xdWV1ZSh0ZXN0X2ZpbGVzKQogCiAgICAgICAgICMgSW5zdGFudGlhdGUgVGVzdFNo
ZWxsVGhyZWFkcyBhbmQgc3RhcnQgdGhlbS4KQEAgLTUzOSwxNSArNTE1LDE2IEBACiAgICAgICAg
ICAgICAjIENyZWF0ZSBzZXBhcmF0ZSBUZXN0VHlwZXMgaW5zdGFuY2VzIGZvciBlYWNoIHRocmVh
ZC4KICAgICAgICAgICAgIHRlc3RfdHlwZXMgPSBbXQogICAgICAgICAgICAgZm9yIHQgaW4gc2Vs
Zi5fdGVzdF90eXBlczoKLSAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLmFwcGVuZCh0KHNlbGYu
X29wdGlvbnMucGxhdGZvcm0sCisgICAgICAgICAgICAgICAgdGVzdF90eXBlcy5hcHBlbmQodChz
ZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLnBsYXRmb3JtLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCiAKLSAgICAg
ICAgICAgIHRlc3RfYXJncywgc2hlbGxfYXJncyA9IHNlbGYuX2dldF90ZXN0X3NoZWxsX2FyZ3Mo
aSkKLSAgICAgICAgICAgIHRocmVhZCA9IHRlc3Rfc2hlbGxfdGhyZWFkLlRlc3RTaGVsbFRocmVh
ZChmaWxlbmFtZV9xdWV1ZSwKKyAgICAgICAgICAgIHRlc3RfYXJncywgcG5nX3BhdGgsIHNoZWxs
X2FyZ3MgPSBzZWxmLl9nZXRfdGVzdF9zaGVsbF9hcmdzKGkpCisgICAgICAgICAgICB0aHJlYWQg
PSB0ZXN0X3NoZWxsX3RocmVhZC5UZXN0U2hlbGxUaHJlYWQoc2VsZi5fcG9ydCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZV9x
dWV1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9yZXN1bHRfcXVldWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zaGVsbF9jb21tYW5kLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBuZ19wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNoZWxsX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucykKICAgICAgICAgICAgIGlm
IHNlbGYuX2lzX3NpbmdsZV90aHJlYWRlZCgpOgpAQCAtNTU4LDE5ICs1MzUsMTEgQEAKIAogICAg
ICAgICByZXR1cm4gdGhyZWFkcwogCi0gICAgZGVmIF9zdG9wX2xheW91dF90ZXN0X2hlbHBlcihz
ZWxmLCBwcm9jKToKLSAgICAgICAgIiIiU3RvcCB0aGUgbGF5b3V0IHRlc3QgaGVscGVyIGFuZCBj
bG9zZXMgaXQgZG93bi4iIiIKLSAgICAgICAgaWYgcHJvYzoKLSAgICAgICAgICAgIGxvZ2dpbmcu
ZGVidWcoIlN0b3BwaW5nIGxheW91dCB0ZXN0IGhlbHBlciIpCi0gICAgICAgICAgICBwcm9jLnN0
ZGluLndyaXRlKCJ4XG4iKQotICAgICAgICAgICAgcHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAg
ICAgICBwcm9jLndhaXQoKQotCiAgICAgZGVmIF9pc19zaW5nbGVfdGhyZWFkZWQoc2VsZik6CiAg
ICAgICAgICIiIlJldHVybnMgd2hldGhlciB3ZSBzaG91bGQgcnVuIGFsbCB0aGUgdGVzdHMgaW4g
dGhlIG1haW4gdGhyZWFkLiIiIgogICAgICAgICByZXR1cm4gaW50KHNlbGYuX29wdGlvbnMubnVt
X3Rlc3Rfc2hlbGxzKSA9PSAxCiAKLSAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCB0ZXN0X3NoZWxs
X2JpbmFyeSwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CisgICAgZGVmIF9ydW5fdGVzdHMo
c2VsZiwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlJ1bnMgdGhlIHRl
c3RzIGluIHRoZSBmaWxlX2xpc3QuCiAKICAgICAgICAgUmV0dXJuOiBBIHR1cGxlIChmYWlsdXJl
cywgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKQEAgLTU4NCw5ICs1NTMsOCBAQAogICAg
ICAgICAgICAgICBpbiB0aGUgZm9ybSB7ZmlsZW5hbWU6ZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWU6
dGVzdF9ydW5fdGltZX0KICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVj
dCB0byBwb3B1bGF0ZSB3aXRoIHRoZSByZXN1bHRzCiAgICAgICAgICIiIgotICAgICAgICB0aHJl
YWRzID0gc2VsZi5faW5zdGFudGlhdGVfdGVzdF9zaGVsbF90aHJlYWRzKHRlc3Rfc2hlbGxfYmlu
YXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpbGVfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgdGhyZWFkcyA9IHNlbGYuX2luc3RhbnRp
YXRlX3Rlc3Rfc2hlbGxfdGhyZWFkcyhmaWxlX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCiAKICAgICAg
ICAgIyBXYWl0IGZvciB0aGUgdGhyZWFkcyB0byBmaW5pc2ggYW5kIGNvbGxlY3QgdGVzdCBmYWls
dXJlcy4KICAgICAgICAgZmFpbHVyZXMgPSB7fQpAQCAtNjEyLDcgKzU4MCw3IEBACiAgICAgICAg
IGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhy
ZWFkczoKICAgICAgICAgICAgICAgICB0aHJlYWQuY2FuY2VsKCkKLSAgICAgICAgICAgIHNlbGYu
X3N0b3BfbGF5b3V0X3Rlc3RfaGVscGVyKGxheW91dF90ZXN0X2hlbHBlcl9wcm9jKQorICAgICAg
ICAgICAgc2VsZi5fcG9ydC5zdG9wX2hlbHBlcigpCiAgICAgICAgICAgICByYWlzZQogICAgICAg
ICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CiAgICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgYSBU
ZXN0U2hlbGxUaHJlYWQgZGllZCBiZWZvcmUgbm9ybWFsIGNvbXBsZXRpb24uCkBAIC02NDIsNDIg
KzYxMCwyMCBAQAogICAgICAgICBpZiBub3Qgc2VsZi5fdGVzdF9maWxlczoKICAgICAgICAgICAg
IHJldHVybiAwCiAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICB0ZXN0
X3NoZWxsX2JpbmFyeSA9IHBhdGhfdXRpbHMudGVzdF9zaGVsbF9wYXRoKHNlbGYuX29wdGlvbnMu
dGFyZ2V0KQogCiAgICAgICAgICMgU3RhcnQgdXAgYW55IGhlbHBlciBuZWVkZWQKLSAgICAgICAg
bGF5b3V0X3Rlc3RfaGVscGVyX3Byb2MgPSBOb25lCiAgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRp
b25zLm5vX3BpeGVsX3Rlc3RzOgotICAgICAgICAgICAgaGVscGVyX3BhdGggPSBwYXRoX3V0aWxz
LmxheW91dF90ZXN0X2hlbHBlcl9wYXRoKAotICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
dGFyZ2V0KQotICAgICAgICAgICAgaWYgbGVuKGhlbHBlcl9wYXRoKToKLSAgICAgICAgICAgICAg
ICBsb2dnaW5nLmRlYnVnKCJTdGFydGluZyBsYXlvdXQgaGVscGVyICVzIiAlIGhlbHBlcl9wYXRo
KQotICAgICAgICAgICAgICAgIGxheW91dF90ZXN0X2hlbHBlcl9wcm9jID0gc3VicHJvY2Vzcy5Q
b3BlbigKLSAgICAgICAgICAgICAgICAgICAgW2hlbHBlcl9wYXRoXSwgc3RkaW49c3VicHJvY2Vz
cy5QSVBFLAotICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRl
cnI9Tm9uZSkKLSAgICAgICAgICAgICAgICBpc19yZWFkeSA9IGxheW91dF90ZXN0X2hlbHBlcl9w
cm9jLnN0ZG91dC5yZWFkbGluZSgpCi0gICAgICAgICAgICAgICAgaWYgbm90IGlzX3JlYWR5LnN0
YXJ0c3dpdGgoJ3JlYWR5Jyk6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoImxh
eW91dF90ZXN0X2hlbHBlciBmYWlsZWQgdG8gYmUgcmVhZHkiKQorICAgICAgICAgICAgc2VsZi5f
cG9ydC5zdGFydF9oZWxwZXIoKQogCi0gICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgc3lzdGVtIGRl
cGVuZGVuY2llcyAodGhlbWVzLCBmb250cywgLi4uKSBhcmUgY29ycmVjdC4KLSAgICAgICAgaWYg
bm90IHNlbGYuX29wdGlvbnMubm9jaGVja19zeXNfZGVwczoKLSAgICAgICAgICAgIHByb2MgPSBz
dWJwcm9jZXNzLlBvcGVuKFt0ZXN0X3NoZWxsX2JpbmFyeSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICItLWNoZWNrLWxheW91dC10ZXN0LXN5cy1kZXBzIl0pCi0gICAgICAg
ICAgICBpZiBwcm9jLndhaXQoKSAhPSAwOgotICAgICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygi
QWJvcnRpbmcgYmVjYXVzZSBzeXN0ZW0gZGVwZW5kZW5jaWVzIGNoZWNrICIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImZhaWxlZC5cbiBUbyBvdmVycmlkZSwgaW52b2tlIHdpdGggIgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1ub2NoZWNrLXN5cy1kZXBzIikKLSAgICAg
ICAgICAgICAgICBzeXMuZXhpdCgxKQotCiAgICAgICAgIGlmIHNlbGYuX2NvbnRhaW5zX3Rlc3Rz
KHNlbGYuSFRUUF9TVUJESVIpOgotICAgICAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIuc3RhcnQo
KQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCiAKICAgICAgICAg
aWYgc2VsZi5fY29udGFpbnNfdGVzdHMoc2VsZi5XRUJTT0NLRVRfU1VCRElSKToKLSAgICAgICAg
ICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIuc3RhcnQoKQorICAgICAgICAgICAgc2VsZi5fcG9y
dC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKICAgICAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0
X3NlY3VyZV9zZXJ2ZXIuU3RhcnQoKQogCiAgICAgICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0X3Rp
bWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzID0gKAotICAgICAgICAgICAgc2VsZi5fcnVu
X3Rlc3RzKHRlc3Rfc2hlbGxfYmluYXJ5LCBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkpCisgICAgICAgICAgICBzZWxmLl9y
dW5fdGVzdHMoc2VsZi5fdGVzdF9maWxlc19saXN0LCByZXN1bHRfc3VtbWFyeSkpCiAKICAgICAg
ICAgIyBXZSBleGNsdWRlIHRoZSBjcmFzaGVzIGZyb20gdGhlIGxpc3Qgb2YgcmVzdWx0cyB0byBy
ZXRyeSwgYmVjYXVzZQogICAgICAgICAjIHdlIHdhbnQgdG8gdHJlYXQgZXZlbiBhIHBvdGVudGlh
bGx5IGZsYWt5IGNyYXNoIGFzIGFuIGVycm9yLgpAQCAtNjg5LDEwICs2MzUsMTAgQEAKICAgICAg
ICAgICAgIGxvZ2dpbmcuZGVidWcoIlJldHJ5aW5nICVkIHVuZXhwZWN0ZWQgZmFpbHVyZShzKSIg
JSBsZW4oZmFpbHVyZXMpKQogICAgICAgICAgICAgcmV0cmllcyArPSAxCiAgICAgICAgICAgICBy
ZXRyeV9zdW1tYXJ5ID0gUmVzdWx0U3VtbWFyeShzZWxmLl9leHBlY3RhdGlvbnMsIGZhaWx1cmVz
LmtleXMoKSkKLSAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0cyh0ZXN0X3NoZWxsX2JpbmFyeSwg
ZmFpbHVyZXMua2V5cygpLCByZXRyeV9zdW1tYXJ5KQorICAgICAgICAgICAgc2VsZi5fcnVuX3Rl
c3RzKGZhaWx1cmVzLmtleXMoKSwgcmV0cnlfc3VtbWFyeSkKICAgICAgICAgICAgIGZhaWx1cmVz
ID0gc2VsZi5fZ2V0X2ZhaWx1cmVzKHJldHJ5X3N1bW1hcnksIGluY2x1ZGVfY3Jhc2hlcz1UcnVl
KQogCi0gICAgICAgIHNlbGYuX3N0b3BfbGF5b3V0X3Rlc3RfaGVscGVyKGxheW91dF90ZXN0X2hl
bHBlcl9wcm9jKQorICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaGVscGVyKCkKICAgICAgICAgZW5k
X3RpbWUgPSB0aW1lLnRpbWUoKQogCiAgICAgICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3Jp
dGVyKHNlbGYuX29wdGlvbnMsICd0aW1pbmcnKQpAQCAtNzc3LDcgKzcyMyw3IEBACiAKICAgICAg
ICAgbmV4dF90ZXN0ID0gc2VsZi5fdGVzdF9maWxlc19saXN0W3NlbGYuX2N1cnJlbnRfdGVzdF9u
dW1iZXJdCiAgICAgICAgIG5leHRfZGlyID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAgICAgICAg
cGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCisgICAgICAgICAg
ICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUobmV4dF90ZXN0KSkKICAgICAgICAg
aWYgc2VsZi5fY3VycmVudF9wcm9ncmVzc19zdHIgPT0gIiI6CiAgICAgICAgICAgICBzZWxmLl9j
dXJyZW50X3Byb2dyZXNzX3N0ciA9ICIlczogIiAlIChuZXh0X2RpcikKICAgICAgICAgICAgIHNl
bGYuX2N1cnJlbnRfZGlyID0gbmV4dF9kaXIKQEAgLTgwMyw3ICs3NDksNyBAQAogCiAgICAgICAg
ICAgICBuZXh0X3Rlc3QgPSBzZWxmLl90ZXN0X2ZpbGVzX2xpc3Rbc2VsZi5fY3VycmVudF90ZXN0
X251bWJlcl0KICAgICAgICAgICAgIG5leHRfZGlyID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAg
ICAgICAgICAgIHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZShuZXh0X3Rlc3QpKQor
ICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShuZXh0X3Rl
c3QpKQogCiAgICAgICAgIGlmIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZzoKICAgICAgICAgICAg
IHJlbWFpbl9zdHIgPSAiICglZCkiICUgKHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZykKQEAgLTg3
NCw3ICs4MjAsNyBAQAogICAgICAgICAgICAgIyBOb3RlIHRoYXQgaWYgYSB0ZXN0IGNyYXNoZWQg
aW4gdGhlIG9yaWdpbmFsIHJ1biwgd2UgaWdub3JlCiAgICAgICAgICAgICAjIHdoZXRoZXIgb3Ig
bm90IGl0IGNyYXNoZWQgd2hlbiB3ZSByZXRyaWVkIGl0IChpZiB3ZSByZXRyaWVkIGl0KSwKICAg
ICAgICAgICAgICMgYW5kIGFsd2F5cyBjb25zaWRlciB0aGUgcmVzdWx0IG5vdCBmbGFreS4KLSAg
ICAgICAgICAgIHRlc3QgPSBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5h
bWUpCisgICAgICAgICAgICB0ZXN0ID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1l
KGZpbGVuYW1lKQogICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0
X2V4cGVjdGF0aW9uc19zdHJpbmcoZmlsZW5hbWUpCiAgICAgICAgICAgICBhY3R1YWwgPSBba2V5
d29yZHNbcmVzdWx0XV0KIApAQCAtOTQzLDcgKzg4OSw3IEBACiAgICAgICAgIGV4cGVjdGF0aW9u
c19maWxlLmNsb3NlKCkKIAogICAgICAgICBqc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5K
U09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcigKLSAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuYnVp
bGRlcl9uYW1lLCBzZWxmLl9vcHRpb25zLmJ1aWxkX25hbWUsCisgICAgICAgICAgICBzZWxmLl9w
b3J0LCBzZWxmLl9vcHRpb25zLmJ1aWxkZXJfbmFtZSwgc2VsZi5fb3B0aW9ucy5idWlsZF9uYW1l
LAogICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5idWlsZF9udW1iZXIsIHNlbGYuX29wdGlvbnMu
cmVzdWx0c19kaXJlY3RvcnksCiAgICAgICAgICAgICBCVUlMREVSX0JBU0VfVVJMLCBpbmRpdmlk
dWFsX3Rlc3RfdGltaW5ncywKICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucywgcmVzdWx0
X3N1bW1hcnksIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKQEAgLTExMTAsNyArMTA1Niw3IEBACiAg
ICAgICAgIHdyaXRlKHRpdGxlKQogICAgICAgICBmb3IgdGVzdF90dXBsZSBpbiB0ZXN0X2xpc3Q6
CiAgICAgICAgICAgICBmaWxlbmFtZSA9IHRlc3RfdHVwbGUuZmlsZW5hbWVbbGVuKAotICAgICAg
ICAgICAgICAgIHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RzX2RpcigpKSArIDE6XQorICAgICAgICAg
ICAgICAgIHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpKSArIDE6XQogICAgICAgICAgICAg
ZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKCdcXCcsICcvJykKICAgICAgICAgICAgIHRlc3Rf
cnVuX3RpbWUgPSByb3VuZCh0ZXN0X3R1cGxlLnRlc3RfcnVuX3RpbWUsIDEpCiAgICAgICAgICAg
ICB3cml0ZSgiICAlcyB0b29rICVzIHNlY29uZHMiICUgKGZpbGVuYW1lLCB0ZXN0X3J1bl90aW1l
KSkKQEAgLTEzMjgsNyArMTI3NCw3IEBACiAgICAgICAgICIiIlByaW50cyBvbmUgdW5leHBlY3Rl
ZCB0ZXN0IHJlc3VsdCBsaW5lLiIiIgogICAgICAgICBkZXNjID0gVGVzdEV4cGVjdGF0aW9uc0Zp
bGUuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdF1bMF0KICAgICAgICAgc2VsZi5fbWV0
ZXIud3JpdGUoIiAgJXMgLT4gdW5leHBlY3RlZCAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIChwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdCksIGRlc2MpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVu
YW1lKHRlc3QpLCBkZXNjKSkKIAogICAgIGRlZiBfd3JpdGVfcmVzdWx0c19odG1sX2ZpbGUoc2Vs
ZiwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJXcml0ZSByZXN1bHRzLmh0bWwgd2hpY2gg
aXMgYSBzdW1tYXJ5IG9mIHRlc3RzIHRoYXQgZmFpbGVkLgpAQCAtMTM2NiwxMiArMTMxMiwxMiBA
QAogICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6CiAgICAgICAgICAgICB0ZXN0
X2ZhaWx1cmVzID0gcmVzdWx0X3N1bW1hcnkuZmFpbHVyZXMuZ2V0KHRlc3RfZmlsZSwgW10pCiAg
ICAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiPHA+PGEgaHJlZj0nJXMnPiVzPC9hPjxiciAvPlxu
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGF0aF91dGlscy5maWxlbmFtZV90b191
cmkodGVzdF9maWxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2ZpbGUpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICUgKHNlbGYuX3BvcnQuZmlsZW5hbWVfdG9fdXJpKHRlc3RfZmlsZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUo
dGVzdF9maWxlKSkpCiAgICAgICAgICAgICBmb3IgZmFpbHVyZSBpbiB0ZXN0X2ZhaWx1cmVzOgog
ICAgICAgICAgICAgICAgIG91dF9maWxlLndyaXRlKCImbmJzcDsmbmJzcDslczxici8+IgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZmFpbHVyZS5yZXN1bHRfaHRtbF9vdXRwdXQo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUodGVzdF9maWxlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9maWxlKSkpCiAgICAgICAg
ICAgICBvdXRfZmlsZS53cml0ZSgiPC9wPlxuIikKIAogICAgICAgICAjIGZvb3RlcgpAQCAtMTM4
Miw4ICsxMzI4LDcgQEAKICAgICAgICAgIiIiTGF1bmNoZXMgdGhlIHRlc3Qgc2hlbGwgb3BlbiB0
byB0aGUgcmVzdWx0cy5odG1sIHBhZ2UuIiIiCiAgICAgICAgIHJlc3VsdHNfZmlsZW5hbWUgPSBv
cy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cy5odG1sIikKLSAgICAgICAgc3Vi
cHJvY2Vzcy5Qb3BlbihbcGF0aF91dGlscy50ZXN0X3NoZWxsX3BhdGgoc2VsZi5fb3B0aW9ucy50
YXJnZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLmZpbGVuYW1lX3Rv
X3VyaShyZXN1bHRzX2ZpbGVuYW1lKV0pCisgICAgICAgIHNlbGYuX3BvcnQuc2hvd19yZXN1bHRz
X2h0bWxfZmlsZShyZXN1bHRzX2ZpbGVuYW1lKQogCiAKIGRlZiBfYWRkX3RvX2RpY3Rfb2ZfbGlz
dHMoZGljdCwga2V5LCB2YWx1ZSk6CkBAIC0xNDQ0LDE5ICsxMzg5LDE5IEBACiAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICBvcHRpb25zLnRhcmdldCA9ICJSZWxlYXNlIgogCisgICAgcG9ydF9v
YmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQorCiAgICAgaWYgbm90IG9w
dGlvbnMudXNlX2FwYWNoZToKICAgICAgICAgb3B0aW9ucy51c2VfYXBhY2hlID0gc3lzLnBsYXRm
b3JtIGluICgnZGFyd2luJywgJ2xpbnV4MicpCiAKICAgICBpZiBvcHRpb25zLnJlc3VsdHNfZGly
ZWN0b3J5LnN0YXJ0c3dpdGgoIi8iKToKICAgICAgICAgIyBBc3N1bWUgaXQncyBhbiBhYnNvbHV0
ZSBwYXRoIGFuZCBub3JtYWxpemUuCi0gICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3Rvcnkg
PSBwYXRoX3V0aWxzLmdldF9hYnNvbHV0ZV9wYXRoKAorICAgICAgICBvcHRpb25zLnJlc3VsdHNf
ZGlyZWN0b3J5ID0gcG9ydF9vYmouZ2V0X2Fic29sdXRlX3BhdGgoCiAgICAgICAgICAgICBvcHRp
b25zLnJlc3VsdHNfZGlyZWN0b3J5KQogICAgIGVsc2U6CiAgICAgICAgICMgSWYgaXQncyBhIHJl
bGF0aXZlIHBhdGgsIG1ha2UgdGhlIG91dHB1dCBkaXJlY3RvcnkgcmVsYXRpdmUgdG8KICAgICAg
ICAgIyBEZWJ1ZyBvciBSZWxlYXNlLgotICAgICAgICBiYXNlZGlyID0gcGF0aF91dGlscy5wYXRo
X2Zyb21fYmFzZSgnd2Via2l0JykKLSAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSA9
IHBhdGhfdXRpbHMuZ2V0X2Fic29sdXRlX3BhdGgoCi0gICAgICAgICAgICBvcy5wYXRoLmpvaW4o
YmFzZWRpciwgb3B0aW9ucy50YXJnZXQsIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpKQorICAg
ICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5ID0gcG9ydF9vYmoucmVzdWx0c19kaXJlY3Rv
cnkoKQogCiAgICAgaWYgb3B0aW9ucy5jbG9iYmVyX29sZF9yZXN1bHRzOgogICAgICAgICAjIEp1
c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRlc3QgcmVzdWx0cyBkaXJlY3RvcmllcyBzaW5jZSB0aGUg
b3RoZXIKQEAgLTE0NjYsMTIgKzE0MTEsOSBAQAogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhw
YXRoKToKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUocGF0aCkKIAotICAgICMgRW5zdXJlIHBs
YXRmb3JtIGlzIHZhbGlkIGFuZCBmb3JjZSBpdCB0byB0aGUgZm9ybSAnY2hyb21pdW0tPHBsYXRm
b3JtPicuCi0gICAgb3B0aW9ucy5wbGF0Zm9ybSA9IHBhdGhfdXRpbHMucGxhdGZvcm1fbmFtZShv
cHRpb25zLnBsYXRmb3JtKQotCiAgICAgaWYgbm90IG9wdGlvbnMubnVtX3Rlc3Rfc2hlbGxzOgog
ICAgICAgICAjIFRPRE8ob2phbik6IEludmVzdGlnYXRlIHBlcmYvZmxha2luZXNzIGltcGFjdCBv
ZiB1c2luZyBudW1jb3JlcyArIDEuCi0gICAgICAgIG9wdGlvbnMubnVtX3Rlc3Rfc2hlbGxzID0g
cG9ydC5nZXRfbnVtX2NvcmVzKCkKKyAgICAgICAgb3B0aW9ucy5udW1fdGVzdF9zaGVsbHMgPSBw
b3J0X29iai5udW1fY29yZXMoKQogCiAgICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIo
b3B0aW9ucywgJ2NvbmZpZycpCiAgICAgd3JpdGUoIlJ1bm5pbmcgJXMgdGVzdF9zaGVsbHMgaW4g
cGFyYWxsZWwiICUgb3B0aW9ucy5udW1fdGVzdF9zaGVsbHMpCkBAIC0xNDk5LDYzICsxNDQxLDQ3
IEBACiAgICAgICAgIHBhdGhzICs9IHJlYWRfdGVzdF9maWxlcyhvcHRpb25zLnRlc3RfbGlzdCkK
IAogICAgICMgQ3JlYXRlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFk
eSBleGlzdC4KLSAgICBwYXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KG9wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnkpCisgICAgcG9ydF9vYmoubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3B0aW9u
cy5yZXN1bHRzX2RpcmVjdG9yeSkKICAgICBtZXRlci51cGRhdGUoIkdhdGhlcmluZyBmaWxlcyAu
Li4iKQogCi0gICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKG9wdGlvbnMsIG1ldGVyKQorICAg
IHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihvcHRpb25zLCBtZXRlciwgcG9ydF9vYmopCiAgICAg
dGVzdF9ydW5uZXIuZ2F0aGVyX2ZpbGVfcGF0aHMocGF0aHMpCiAKICAgICBpZiBvcHRpb25zLmxp
bnRfdGVzdF9maWxlczoKICAgICAgICAgIyBDcmVhdGluZyB0aGUgZXhwZWNhdGlvbnMgZm9yIGVh
Y2ggcGxhdGZvcm0vdGFyZ2V0IHBhaXIgZG9lcyBhbGwgdGhlCiAgICAgICAgICMgdGVzdCBsaXN0
IHBhcnNpbmcgYW5kIGVuc3VyZXMgaXQncyBjb3JyZWN0IHN5bnRheCAoZS5nLiBubyBkdXBlcyku
Ci0gICAgICAgIGZvciBwbGF0Zm9ybSBpbiBUZXN0RXhwZWN0YXRpb25zRmlsZS5QTEFURk9STVM6
CisgICAgICAgIGZvciBwbGF0Zm9ybSBpbiBwb3J0X29iai50ZXN0X3BsYXRmb3JtX25hbWVzKCk6
CiAgICAgICAgICAgICB0ZXN0X3J1bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocGxhdGZvcm0sIGlz
X2RlYnVnX21vZGU9VHJ1ZSkKICAgICAgICAgICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0
aW9ucyhwbGF0Zm9ybSwgaXNfZGVidWdfbW9kZT1GYWxzZSkKICAgICAgICAgcHJpbnQgKCJJZiB0
aGVyZSBhcmUgbm8gZmFpbCBtZXNzYWdlcywgZXJyb3JzIG9yIGV4Y2VwdGlvbnMsIHRoZW4gdGhl
ICIKICAgICAgICAgICAgICJsaW50IHN1Y2NlZWRlZC4iKQogICAgICAgICBzeXMuZXhpdCgwKQog
Ci0gICAgdHJ5OgotICAgICAgICB0ZXN0X3NoZWxsX2JpbmFyeV9wYXRoID0gcGF0aF91dGlscy50
ZXN0X3NoZWxsX3BhdGgob3B0aW9ucy50YXJnZXQpCi0gICAgZXhjZXB0IHBhdGhfdXRpbHMuUGF0
aE5vdEZvdW5kOgotICAgICAgICBwcmludCAiXG5FUlJPUjogdGVzdF9zaGVsbCBpcyBub3QgZm91
bmQuIEJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBidWlsdCIKLSAgICAgICAgcHJpbnQgIml0IGFuZCB0
aGF0IHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgYnVpbGQuIFRoaXMgc2NyaXB0IgotICAgICAg
ICBwcmludCAid2lsbCBydW4gdGhlIFJlbGVhc2Ugb25lIGJ5IGRlZmF1bHQuIFVzZSAtLWRlYnVn
IHRvIHVzZSB0aGUiCi0gICAgICAgIHByaW50ICJEZWJ1ZyBidWlsZC5cbiIKLSAgICAgICAgc3lz
LmV4aXQoMSkKKyAgICAjIENoZWNrIHRoYXQgdGhlIHN5c3RlbSBkZXBlbmRlbmNpZXMgKHRoZW1l
cywgZm9udHMsIC4uLikgYXJlIGNvcnJlY3QuCisgICAgaWYgbm90IG9wdGlvbnMubm9jaGVja19z
eXNfZGVwczoKKyAgICAgICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX3N5c19kZXBzKCk6CisgICAg
ICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIo
b3B0aW9ucywgImNvbmZpZyIpCi0gICAgd3JpdGUoIlVzaW5nIHBsYXRmb3JtICclcyciICUgb3B0
aW9ucy5wbGF0Zm9ybSkKKyAgICB3cml0ZSgiVXNpbmcgcG9ydCAnJXMnIiAlIHBvcnRfb2JqLm5h
bWUoKSkKICAgICB3cml0ZSgiUGxhY2luZyB0ZXN0IHJlc3VsdHMgaW4gJXMiICUgb3B0aW9ucy5y
ZXN1bHRzX2RpcmVjdG9yeSkKICAgICBpZiBvcHRpb25zLm5ld19iYXNlbGluZToKLSAgICAgICAg
d3JpdGUoIlBsYWNpbmcgbmV3IGJhc2VsaW5lcyBpbiAlcyIgJQotICAgICAgICAgICAgICBwYXRo
X3V0aWxzLmNocm9taXVtX2Jhc2VsaW5lX3BhdGgob3B0aW9ucy5wbGF0Zm9ybSkpCi0gICAgd3Jp
dGUoIlVzaW5nICVzIGJ1aWxkIGF0ICVzIiAlIChvcHRpb25zLnRhcmdldCwgdGVzdF9zaGVsbF9i
aW5hcnlfcGF0aCkpCisgICAgICAgIHdyaXRlKCJQbGFjaW5nIG5ldyBiYXNlbGluZXMgaW4gJXMi
ICUgcG9ydF9vYmouYmFzZWxpbmVfcGF0aCgpKQorICAgIHdyaXRlKCJVc2luZyAlcyBidWlsZCIg
JSBvcHRpb25zLnRhcmdldCkKICAgICBpZiBvcHRpb25zLm5vX3BpeGVsX3Rlc3RzOgogICAgICAg
ICB3cml0ZSgiTm90IHJ1bm5pbmcgcGl4ZWwgdGVzdHMiKQogICAgIHdyaXRlKCIiKQogCiAgICAg
bWV0ZXIudXBkYXRlKCJQYXJzaW5nIGV4cGVjdGF0aW9ucyAuLi4iKQotICAgIHRlc3RfcnVubmVy
LnBhcnNlX2V4cGVjdGF0aW9ucyhvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zLnRhcmdldCA9PSAn
RGVidWcnKQorICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0aW9ucyhwb3J0X29iai50ZXN0
X3BsYXRmb3JtX25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9ucy50YXJnZXQgPT0gJ0RlYnVnJykKIAogICAgIG1ldGVyLnVwZGF0ZSgiUHJlcGFyaW5nIHRl
c3RzIC4uLiIpCiAgICAgd3JpdGUgPSBjcmVhdGVfbG9nZ2luZ193cml0ZXIob3B0aW9ucywgImV4
cGVjdGVkIikKICAgICByZXN1bHRfc3VtbWFyeSA9IHRlc3RfcnVubmVyLnByZXBhcmVfbGlzdHNf
YW5kX3ByaW50X291dHB1dCh3cml0ZSkKIAotICAgIGlmICdjeWd3aW4nID09IHN5cy5wbGF0Zm9y
bToKLSAgICAgICAgbG9nZ2luZy53YXJuKCIjIiAqIDQwKQotICAgICAgICBsb2dnaW5nLndhcm4o
IiMgVU5FWFBFQ1RFRCBQWVRIT04gVkVSU0lPTiIpCi0gICAgICAgIGxvZ2dpbmcud2FybigiIyBU
aGlzIHNjcmlwdCBzaG91bGQgYmUgcnVuIHVzaW5nIHRoZSB2ZXJzaW9uIG9mIHB5dGhvbiIpCi0g
ICAgICAgIGxvZ2dpbmcud2FybigiIyBpbiB0aGlyZF9wYXJ0eS9weXRob25fMjQvIikKLSAgICAg
ICAgbG9nZ2luZy53YXJuKCIjIiAqIDQwKQotICAgICAgICBzeXMuZXhpdCgxKQorICAgIHBvcnRf
b2JqLnNldHVwX3Rlc3RfcnVuKCkKIAotICAgICMgRGVsZXRlIHRoZSBkaXNrIGNhY2hlIGlmIGFu
eSB0byBlbnN1cmUgYSBjbGVhbiB0ZXN0IHJ1bi4KLSAgICBjYWNoZWRpciA9IG9zLnBhdGguc3Bs
aXQodGVzdF9zaGVsbF9iaW5hcnlfcGF0aClbMF0KLSAgICBjYWNoZWRpciA9IG9zLnBhdGguam9p
bihjYWNoZWRpciwgImNhY2hlIikKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhjYWNoZWRpcik6Ci0g
ICAgICAgIHNodXRpbC5ybXRyZWUoY2FjaGVkaXIpCi0KICAgICB0ZXN0X3J1bm5lci5hZGRfdGVz
dF90eXBlKHRleHRfZGlmZi5UZXN0VGV4dERpZmYpCiAgICAgaWYgbm90IG9wdGlvbnMubm9fcGl4
ZWxfdGVzdHM6CiAgICAgICAgIHRlc3RfcnVubmVyLmFkZF90ZXN0X3R5cGUoaW1hZ2VfZGlmZi5J
bWFnZURpZmYpCkluZGV4OiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weQkocmV2aXNp
b24gNTQzMjgpCisrKyBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS90ZXN0X3NoZWxsX3RocmVhZC5weQkod29ya2luZyBjb3B5KQpAQCAtNDAsMjEgKzQwLDIyIEBA
CiBpbXBvcnQgb3MKIGltcG9ydCBRdWV1ZQogaW1wb3J0IHNpZ25hbAotaW1wb3J0IHN1YnByb2Nl
c3MKIGltcG9ydCBzeXMKIGltcG9ydCB0aHJlYWQKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0
aW1lCiAKLWZyb20gcG9ydCBpbXBvcnQgcGF0aF91dGlscwogaW1wb3J0IHRlc3RfZmFpbHVyZXMK
IAogCi1kZWYgcHJvY2Vzc19vdXRwdXQocHJvYywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0
X2FyZ3MsIHRhcmdldCwgb3V0cHV0X2Rpcik6CitkZWYgcHJvY2Vzc19vdXRwdXQocG9ydCwgdGVz
dF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIHRhcmdldCwgb3V0cHV0X2RpciwKKyAgICAg
ICAgICAgICAgICAgICBjcmFzaCwgdGltZW91dCwgdGVzdF9ydW5fdGltZSwgYWN0dWFsX2NoZWNr
c3VtLAorICAgICAgICAgICAgICAgICAgIG91dHB1dCwgZXJyb3IpOgogICAgICIiIlJlY2VpdmVz
IHRoZSBvdXRwdXQgZnJvbSBhIHRlc3Rfc2hlbGwgcHJvY2Vzcywgc3ViamVjdHMgaXQgdG8gYSBu
dW1iZXIKICAgICBvZiB0ZXN0cywgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUgdHlwZXMg
dGhlIHRlc3QgcHJvZHVjZWQuCiAKICAgICBBcmdzOgorICAgICAgcG9ydDogcG9ydC1zcGVjaWZp
YyBob29rcwogICAgICAgcHJvYzogYW4gYWN0aXZlIHRlc3Rfc2hlbGwgcHJvY2VzcwogICAgICAg
dGVzdF9pbmZvOiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSwgdXJpIGFuZCB0
aW1lb3V0CiAgICAgICB0ZXN0X3R5cGVzOiBsaXN0IG9mIHRlc3QgdHlwZXMgdG8gc3ViamVjdCB0
aGUgb3V0cHV0IHRvCkBAIC02NCw4NCArNjUsMzkgQEAKIAogICAgIFJldHVybnM6IGEgbGlzdCBv
ZiBmYWlsdXJlIG9iamVjdHMgYW5kIHRpbWVzIGZvciB0aGUgdGVzdCBiZWluZyBwcm9jZXNzZWQK
ICAgICAiIiIKLSAgICBvdXRsaW5lcyA9IFtdCi0gICAgZXh0cmFfbGluZXMgPSBbXQogICAgIGZh
aWx1cmVzID0gW10KLSAgICBjcmFzaCA9IEZhbHNlCiAKICAgICAjIFNvbWUgdGVzdCBhcmdzLCBz
dWNoIGFzIHRoZSBpbWFnZSBoYXNoLCBtYXkgYmUgYWRkZWQgb3IgY2hhbmdlZCBvbiBhCiAgICAg
IyB0ZXN0LWJ5LXRlc3QgYmFzaXMuCiAgICAgbG9jYWxfdGVzdF9hcmdzID0gY29weS5jb3B5KHRl
c3RfYXJncykKIAotICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgIGxvY2FsX3Rlc3Rf
YXJncy5oYXNoID0gYWN0dWFsX2NoZWNrc3VtCiAKLSAgICBsaW5lID0gcHJvYy5zdGRvdXQucmVh
ZGxpbmUoKQorICAgIGlmIGNyYXNoOgorICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWls
dXJlcy5GYWlsdXJlQ3Jhc2goKSkKKyAgICBpZiB0aW1lb3V0OgorICAgICAgICBmYWlsdXJlcy5h
cHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpKQogCi0gICAgIyBPbmx5IHN0YXJ0
IHNhdmluZyBvdXRwdXQgbGluZXMgb25jZSB3ZSd2ZSBsb2FkZWQgdGhlIFVSTCBmb3IgdGhlIHRl
c3QuCi0gICAgdXJsID0gTm9uZQotICAgIHRlc3Rfc3RyaW5nID0gdGVzdF9pbmZvLnVyaS5zdHJp
cCgpCisgICAgaWYgY3Jhc2g6CisgICAgICAgIGxvZ2dpbmcuZGVidWcoIlN0YWNrdHJhY2UgZm9y
ICVzOlxuJXMiICUgKHRlc3RfaW5mby5maWxlbmFtZSwgZXJyb3IpKQorICAgICAgICAjIFN0cmlw
IG9mZiAiZmlsZTovLyIgc2luY2UgUmVsYXRpdmVUZXN0RmlsZW5hbWUgZXhwZWN0cworICAgICAg
ICAjIGZpbGVzeXN0ZW0gcGF0aHMuCisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG91
dHB1dF9kaXIsIHRlc3RfaW5mby5maWxlbmFtZSkKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRo
LnNwbGl0ZXh0KGZpbGVuYW1lKVswXSArICItc3RhY2sudHh0IgorICAgICAgICBwb3J0Lm1heWJl
X21ha2VfZGlyZWN0b3J5KG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpWzBdKQorICAgICAgICBvcGVu
KGZpbGVuYW1lLCAid2IiKS53cml0ZShlcnJvcikKKyAgICBlbHNlOgorICAgICAgICBsb2dnaW5n
LmRlYnVnKCJQcmV2aW91cyB0ZXN0IG91dHB1dCBleHRyYSBsaW5lcyBhZnRlciBkdW1wOlxuJXMi
ICUKKyAgICAgICAgICAgIGVycm9yKQogCi0gICAgd2hpbGUgbGluZS5yc3RyaXAoKSAhPSAiI0VP
RiI6Ci0gICAgICAgICMgTWFrZSBzdXJlIHdlIGhhdmVuJ3QgY3Jhc2hlZC4KLSAgICAgICAgaWYg
bGluZSA9PSAnJyBhbmQgcHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBmYWls
dXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKSkKLQotICAgICAgICAgICAg
IyBUaGlzIGlzIGhleCBjb2RlIDB4YzAwMDAwMWQsIHdoaWNoIGlzIHVzZWQgZm9yIGFicnVwdAot
ICAgICAgICAgICAgIyB0ZXJtaW5hdGlvbi4gVGhpcyBoYXBwZW5zIGlmIHdlIGhpdCBjdHJsK2Mg
ZnJvbSB0aGUgcHJvbXB0IGFuZAotICAgICAgICAgICAgIyB3ZSBoYXBwZW4gdG8gYmUgd2FpdGlu
ZyBvbiB0aGUgdGVzdF9zaGVsbC4KLSAgICAgICAgICAgICMgc2RveW9uOiBOb3Qgc3VyZSBmb3Ig
d2hpY2ggT1MgYW5kIGluIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGUKLSAgICAgICAgICAgICMgYWJv
dmUgY29kZSBpcyB2YWxpZC4gV2hhdCB3b3JrcyBmb3IgbWUgdW5kZXIgTGludXggdG8gZGV0ZWN0
Ci0gICAgICAgICAgICAjIGN0cmwrYyBpcyBmb3IgdGhlIHN1YnByb2Nlc3MgcmV0dXJuY29kZSB0
byBiZSBuZWdhdGl2ZSBTSUdJTlQuCi0gICAgICAgICAgICAjIEFuZCB0aGF0IGFncmVlcyB3aXRo
IHRoZSBzdWJwcm9jZXNzIGRvY3VtZW50YXRpb24uCi0gICAgICAgICAgICBpZiAoLTEwNzM3NDE1
MTAgPT0gcHJvYy5yZXR1cm5jb2RlIG9yCi0gICAgICAgICAgICAgICAgLSBzaWduYWwuU0lHSU5U
ID09IHByb2MucmV0dXJuY29kZSk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRl
cnJ1cHQKLSAgICAgICAgICAgIGNyYXNoID0gVHJ1ZQotICAgICAgICAgICAgYnJlYWsKLQotICAg
ICAgICAjIERvbid0IGluY2x1ZGUgI1VSTCBsaW5lcyBpbiBvdXIgb3V0cHV0Ci0gICAgICAgIGlm
IGxpbmUuc3RhcnRzd2l0aCgiI1VSTDoiKToKLSAgICAgICAgICAgIHVybCA9IGxpbmUucnN0cmlw
KClbNTpdCi0gICAgICAgICAgICBpZiB1cmwgIT0gdGVzdF9zdHJpbmc6Ci0gICAgICAgICAgICAg
ICAgbG9nZ2luZy5mYXRhbCgiVGVzdCBnb3Qgb3V0IG9mIHN5bmM6XG58JXN8XG58JXN8IiAlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXJsLCB0ZXN0X3N0cmluZykpCi0gICAgICAg
ICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInRlc3Qgb3V0IG9mIHN5bmMiKQotICAgICAg
ICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiI01ENToiKToKLSAgICAgICAgICAgIGxvY2FsX3Rlc3Rf
YXJncy5oYXNoID0gbGluZS5yc3RyaXAoKVs1Ol0KLSAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dp
dGgoIiNURVNUX1RJTUVEX09VVCIpOgotICAgICAgICAgICAgIyBUZXN0IHRpbWVkIG91dCwgYnV0
IHdlIHN0aWxsIG5lZWQgdG8gcmVhZCB1bnRpbCAjRU9GLgotICAgICAgICAgICAgZmFpbHVyZXMu
YXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZVRpbWVvdXQoKSkKLSAgICAgICAgZWxpZiB1cmw6
Ci0gICAgICAgICAgICBvdXRsaW5lcy5hcHBlbmQobGluZSkKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIGV4dHJhX2xpbmVzLmFwcGVuZChsaW5lKQotCi0gICAgICAgIGxpbmUgPSBwcm9jLnN0
ZG91dC5yZWFkbGluZSgpCi0KLSAgICBlbmRfdGVzdF90aW1lID0gdGltZS50aW1lKCkKLQotICAg
IGlmIGxlbihleHRyYV9saW5lcyk6Ci0gICAgICAgIGV4dHJhID0gIiIuam9pbihleHRyYV9saW5l
cykKLSAgICAgICAgaWYgY3Jhc2g6Ci0gICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTdGFja3Ry
YWNlIGZvciAlczpcbiVzIiAlICh0ZXN0X3N0cmluZywgZXh0cmEpKQotICAgICAgICAgICAgIyBT
dHJpcCBvZmYgImZpbGU6Ly8iIHNpbmNlIFJlbGF0aXZlVGVzdEZpbGVuYW1lIGV4cGVjdHMKLSAg
ICAgICAgICAgICMgZmlsZXN5c3RlbSBwYXRocy4KLSAgICAgICAgICAgIGZpbGVuYW1lID0gb3Mu
cGF0aC5qb2luKG91dHB1dF9kaXIsCi0gICAgICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2
ZV90ZXN0X2ZpbGVuYW1lKHRlc3Rfc3RyaW5nWzc6XSkpCi0gICAgICAgICAgICBmaWxlbmFtZSA9
IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdICsgIi1zdGFjay50eHQiCi0gICAgICAgICAg
ICBwYXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KG9zLnBhdGguc3BsaXQoZmlsZW5hbWUp
WzBdKQotICAgICAgICAgICAgb3BlbihmaWxlbmFtZSwgIndiIikud3JpdGUoZXh0cmEpCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJQcmV2aW91cyB0ZXN0IG91dHB1
dCBleHRyYSBsaW5lcyBhZnRlciBkdW1wOlxuJXMiICUKLSAgICAgICAgICAgICAgICBleHRyYSkK
LQogICAgICMgQ2hlY2sgdGhlIG91dHB1dCBhbmQgc2F2ZSB0aGUgcmVzdWx0cy4KKyAgICBzdGFy
dF90aW1lID0gdGltZS50aW1lKCkKICAgICB0aW1lX2Zvcl9kaWZmcyA9IHt9CiAgICAgZm9yIHRl
c3RfdHlwZSBpbiB0ZXN0X3R5cGVzOgogICAgICAgICBzdGFydF9kaWZmX3RpbWUgPSB0aW1lLnRp
bWUoKQotICAgICAgICBuZXdfZmFpbHVyZXMgPSB0ZXN0X3R5cGUuY29tcGFyZV9vdXRwdXQodGVz
dF9pbmZvLmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvYywgJycuam9pbihvdXRsaW5lcyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF90ZXN0X2FyZ3MsIHRhcmdldCkKKyAgICAg
ICAgbmV3X2ZhaWx1cmVzID0gdGVzdF90eXBlLmNvbXBhcmVfb3V0cHV0KHBvcnQsIHRlc3RfaW5m
by5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHB1dCwgbG9jYWxfdGVzdF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0KQogICAgICAgICAjIERvbid0IGFkZCBhbnkgbW9y
ZSBmYWlsdXJlcyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBjcmFzaCwgc28gd2UgZG9uJ3QKICAgICAg
ICAgIyBkb3VibGUtcmVwb3J0IHRob3NlIHRlc3RzLiBXZSBkbyBkb3VibGUtcmVwb3J0IGZvciB0
aW1lb3V0cyBzaW5jZQogICAgICAgICAjIHdlIHN0aWxsIHdhbnQgdG8gc2VlIHRoZSB0ZXh0IGFu
ZCBpbWFnZSBvdXRwdXQuCkBAIC0xNTAsMjggKzEwNiwxMSBAQAogICAgICAgICB0aW1lX2Zvcl9k
aWZmc1t0ZXN0X3R5cGUuX19jbGFzc19fLl9fbmFtZV9fXSA9ICgKICAgICAgICAgICAgIHRpbWUu
dGltZSgpIC0gc3RhcnRfZGlmZl90aW1lKQogCi0gICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZz
ID0gdGltZS50aW1lKCkgLSBlbmRfdGVzdF90aW1lCi0gICAgdGVzdF9ydW5fdGltZSA9IGVuZF90
ZXN0X3RpbWUgLSBzdGFydF90aW1lCisgICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzID0gdGlt
ZS50aW1lKCkgLSBzdGFydF9kaWZmX3RpbWUKICAgICByZXR1cm4gVGVzdFN0YXRzKHRlc3RfaW5m
by5maWxlbmFtZSwgZmFpbHVyZXMsIHRlc3RfcnVuX3RpbWUsCiAgICAgICAgIHRvdGFsX3RpbWVf
Zm9yX2FsbF9kaWZmcywgdGltZV9mb3JfZGlmZnMpCiAKIAotZGVmIHN0YXJ0X3Rlc3Rfc2hlbGwo
Y29tbWFuZCwgYXJncyk6Ci0gICAgIiIiUmV0dXJucyB0aGUgcHJvY2VzcyBmb3IgYSBuZXcgdGVz
dF9zaGVsbCBzdGFydGVkIGluIGxheW91dC10ZXN0cyBtb2RlLgotICAgICIiIgotICAgIGNtZCA9
IFtdCi0gICAgIyBIb29rIGZvciBpbmplY3RpbmcgdmFsZ3JpbmQgb3Igb3RoZXIgcnVudGltZSBp
bnN0cnVtZW50YXRpb24sCi0gICAgIyB1c2VkIGJ5IGUuZy4gdG9vbHMvdmFsZ3JpbmQvdmFsZ3Jp
bmRfdGVzdHMucHkuCi0gICAgd3JhcHBlciA9IG9zLmVudmlyb24uZ2V0KCJCUk9XU0VSX1dSQVBQ
RVIiLCBOb25lKQotICAgIGlmIHdyYXBwZXIgIT0gTm9uZToKLSAgICAgICAgY21kICs9IFt3cmFw
cGVyXQotICAgIGNtZCArPSBjb21tYW5kICsgWyctLWxheW91dC10ZXN0cyddICsgYXJncwotICAg
IHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGNtZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
b3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9
c3VicHJvY2Vzcy5TVERPVVQpCi0KLQogY2xhc3MgVGVzdFN0YXRzOgogCiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGZpbGVuYW1lLCBmYWlsdXJlcywgdGVzdF9ydW5fdGltZSwKQEAgLTE4NiwxNyAr
MTI1LDE5IEBACiBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAg
ICIiIlRocmVhZCB3cmFwcGVyIGZvciBydW5uaW5nIGEgc2luZ2xlIHRlc3QgZmlsZS4iIiIKIAot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X3NoZWxsX2NvbW1hbmQsIHNoZWxsX2FyZ3MsIHRl
c3RfaW5mbywgdGVzdF90eXBlcywKLSAgICAgICAgdGVzdF9hcmdzLCB0YXJnZXQsIG91dHB1dF9k
aXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBpbWFnZV9wYXRoLCBzaGVsbF9hcmdz
LCB0ZXN0X2luZm8sCisgICAgICAgIHRlc3RfdHlwZXMsIHRlc3RfYXJncywgdGFyZ2V0LCBvdXRw
dXRfZGlyKToKICAgICAgICAgIiIiCiAgICAgICAgIEFyZ3M6CisgICAgICAgICAgcG9ydDogb2Jq
ZWN0IGltcGxlbWVudGluZyBwb3J0LXNwZWNpZmljIGhvb2tzCiAgICAgICAgICAgdGVzdF9pbmZv
OiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0CiAg
ICAgICAgICAgb3V0cHV0X2RpcjogRGlyZWN0b3J5IHRvIHB1dCBjcmFzaCBzdGFja3MgaW50by4K
ICAgICAgICAgICBTZWUgVGVzdFNoZWxsVGhyZWFkIGZvciBkb2N1bWVudGF0aW9uIG9mIHRoZSBy
ZW1haW5pbmcgYXJndW1lbnRzLgogICAgICAgICAiIiIKIAogICAgICAgICB0aHJlYWRpbmcuVGhy
ZWFkLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX2NvbW1hbmQgPSB0ZXN0X3NoZWxsX2Nv
bW1hbmQKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5faW1hZ2VfcGF0
aCA9IGltYWdlX3BhdGgKICAgICAgICAgc2VsZi5fc2hlbGxfYXJncyA9IHNoZWxsX2FyZ3MKICAg
ICAgICAgc2VsZi5fdGVzdF9pbmZvID0gdGVzdF9pbmZvCiAgICAgICAgIHNlbGYuX3Rlc3RfdHlw
ZXMgPSB0ZXN0X3R5cGVzCkBAIC0yMDUsMTAgKzE0NiwxOCBAQAogICAgICAgICBzZWxmLl9vdXRw
dXRfZGlyID0gb3V0cHV0X2RpcgogCiAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgcHJvYyA9
IHN0YXJ0X3Rlc3Rfc2hlbGwoc2VsZi5fY29tbWFuZCwgc2VsZi5fc2hlbGxfYXJncyArCi0gICAg
ICAgICAgICBbIi0tdGltZS1vdXQtbXM9IiArIHNlbGYuX3Rlc3RfaW5mby50aW1lb3V0LCBzZWxm
Ll90ZXN0X2luZm8udXJpXSkKLSAgICAgICAgc2VsZi5fdGVzdF9zdGF0cyA9IHByb2Nlc3Nfb3V0
cHV0KHByb2MsIHNlbGYuX3Rlc3RfaW5mbywKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMs
IHNlbGYuX3Rlc3RfYXJncywgc2VsZi5fdGFyZ2V0LCBzZWxmLl9vdXRwdXRfZGlyKQorICAgICAg
ICBkcml2ZXIgPSBzZWxmLl9wb3J0LnN0YXJ0X3Rlc3RfZHJpdmVyKHNlbGYuX2ltYWdlX3BhdGgs
CisgICAgICAgICAgICBzZWxmLl9zaGVsbF9hcmdzKQorICAgICAgICBzdGFydCA9IHRpbWUudGlt
ZSgpCisgICAgICAgIChjcmFzaCwgdGltZW91dCwgYWN0dWFsX2NoZWNrc3VtLCBvdXRwdXQsIGVy
cm9yKSA9ICBcCisgICAgICAgICAgICBkcml2ZXIucnVuX3Rlc3QodGVzdF9pbmZvLnVyaS5zdHJp
cCgpLCB0ZXN0X2luZm8udGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
X2luZm8uaW1hZ2VfaGFzaCkKKyAgICAgICAgZW5kID0gdGltZS50aW1lKCkKKyAgICAgICAgc2Vs
Zi5fdGVzdF9zdGF0cyA9IHByb2Nlc3Nfb3V0cHV0KHNlbGYuX3BvcnQsCisgICAgICAgICAgICBz
ZWxmLl90ZXN0X2luZm8sIHNlbGYuX3Rlc3RfdHlwZXMsIHNlbGYuX3Rlc3RfYXJncywKKyAgICAg
ICAgICAgIHNlbGYuX3RhcmdldCwgc2VsZi5fb3V0cHV0X2RpciwgY3Jhc2gsIHRpbWVvdXQsIGVu
ZCAtIHN0YXJ0LAorICAgICAgICAgICAgYWN0dWFsX2NoZWNrc3VtLCBvdXRwdXQsIGVycm9yKQor
ICAgICAgICBkcml2ZXIuc3RvcCgpCiAKICAgICBkZWYgZ2V0X3Rlc3Rfc3RhdHMoc2VsZik6CiAg
ICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3N0YXRzCkBAIC0yMTYsMTcgKzE2NSwxNiBAQAogCiBj
bGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgZmlsZW5hbWVfbGlzdF9xdWV1ZSwgcmVzdWx0X3F1ZXVlLCB0ZXN0X3NoZWxsX2Nv
bW1hbmQsCi0gICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMsIHRlc3RfYXJncywgc2hlbGxfYXJn
cywgb3B0aW9ucyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGZpbGVuYW1lX2xpc3Rf
cXVldWUsIHJlc3VsdF9xdWV1ZSwKKyAgICAgICAgICAgICAgICAgdGVzdF90eXBlcywgdGVzdF9h
cmdzLCBpbWFnZV9wYXRoLCBzaGVsbF9hcmdzLCBvcHRpb25zKToKICAgICAgICAgIiIiSW5pdGlh
bGl6ZSBhbGwgdGhlIGxvY2FsIHN0YXRlIGZvciB0aGlzIHRlc3Qgc2hlbGwgdGhyZWFkLgogCiAg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgcG9ydDogaW50ZXJmYWNlIHRvIHBvcnQtc3BlY2lmaWMg
aG9va3MKICAgICAgICAgICBmaWxlbmFtZV9saXN0X3F1ZXVlOiBBIHRocmVhZCBzYWZlIFF1ZXVl
IGNsYXNzIHRoYXQgY29udGFpbnMgbGlzdHMKICAgICAgICAgICAgICAgb2YgdHVwbGVzIG9mIChm
aWxlbmFtZSwgdXJpKSBwYWlycy4KICAgICAgICAgICByZXN1bHRfcXVldWU6IEEgdGhyZWFkIHNh
ZmUgUXVldWUgY2xhc3MgdGhhdCB3aWxsIGNvbnRhaW4gdHVwbGVzIG9mCiAgICAgICAgICAgICAg
ICh0ZXN0LCBmYWlsdXJlIGxpc3RzKSBmb3IgdGhlIHRlc3QgcmVzdWx0cy4KLSAgICAgICAgICB0
ZXN0X3NoZWxsX2NvbW1hbmQ6IEEgbGlzdCBzcGVjaWZ5aW5nIHRoZSBjb21tYW5kK2FyZ3MgZm9y
Ci0gICAgICAgICAgICAgIHRlc3Rfc2hlbGwKICAgICAgICAgICB0ZXN0X3R5cGVzOiBBIGxpc3Qg
b2YgVGVzdFR5cGUgb2JqZWN0cyB0byBydW4gdGhlIHRlc3Qgb3V0cHV0CiAgICAgICAgICAgICAg
IGFnYWluc3QuCiAgICAgICAgICAgdGVzdF9hcmdzOiBBIFRlc3RBcmd1bWVudHMgb2JqZWN0IHRv
IHBhc3MgdG8gZWFjaCBUZXN0VHlwZS4KQEAgLTIzNiwxMyArMTg0LDE0IEBACiAgICAgICAgICAg
ICAgIHJ1bl93ZWJraXRfdGVzdHM7IHRoZXkgYXJlIHR5cGljYWxseSBwYXNzZWQgdmlhIHRoZQog
ICAgICAgICAgICAgICBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIgY2xhc3MuIiIiCiAgICAg
ICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcG9ydCA9
IHBvcnQKICAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZSA9IGZpbGVuYW1lX2xpc3Rf
cXVldWUKICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gcmVzdWx0X3F1ZXVlCiAgICAgICAg
IHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBbXQotICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX2NvbW1h
bmQgPSB0ZXN0X3NoZWxsX2NvbW1hbmQKICAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IHRlc3Rf
dHlwZXMKICAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0gdGVzdF9hcmdzCi0gICAgICAgIHNlbGYu
X3Rlc3Rfc2hlbGxfcHJvYyA9IE5vbmUKKyAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQorICAg
ICAgICBzZWxmLl9pbWFnZV9wYXRoID0gaW1hZ2VfcGF0aAogICAgICAgICBzZWxmLl9zaGVsbF9h
cmdzID0gc2hlbGxfYXJncwogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAg
ICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCkBAIC0zNzksMTEgKzMyOCwxMSBAQAogICAgICAgICAg
ICAgICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCiAgICAgICAgICAgICAgICAgZXJy
b3Jfc3RyID0gJ1xuJy5qb2luKFsnICAnICsgZi5tZXNzYWdlKCkgZm9yIGYgaW4gZmFpbHVyZXNd
KQogICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIiVzICVzIGZhaWxlZDpcbiVzIiAlIChz
ZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jfc3RyKSkKICAgICAgICAgICAgIGVsc2U6
CiAgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLmdl
dE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMucmVsYXRp
dmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkpCiAgICAgICAg
ICAgICBzZWxmLl9yZXN1bHRfcXVldWUucHV0KChmaWxlbmFtZSwgZmFpbHVyZXMpKQogCiAgICAg
ICAgICAgICBpZiBiYXRjaF9zaXplID4gMCBhbmQgYmF0Y2hfY291bnQgPiBiYXRjaF9zaXplOgpA
QCAtNDA3LDcgKzM1Niw3IEBACiAgICAgICAgIFJldHVybjoKICAgICAgICAgICBBIGxpc3Qgb2Yg
VGVzdEZhaWx1cmUgb2JqZWN0cyBkZXNjcmliaW5nIHRoZSBlcnJvci4KICAgICAgICAgIiIiCi0g
ICAgICAgIHdvcmtlciA9IFNpbmdsZVRlc3RUaHJlYWQoc2VsZi5fdGVzdF9zaGVsbF9jb21tYW5k
LAorICAgICAgICB3b3JrZXIgPSBTaW5nbGVUZXN0VGhyZWFkKHNlbGYuX3BvcnQsIHNlbGYuX2lt
YWdlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxf
YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywKQEAgLTQzMSw3
ICszODAsNyBAQAogICAgICAgICAgICAgIyB0cmFkZW9mZiBpbiBvcmRlciB0byBhdm9pZCBsb3Np
bmcgdGhlIHJlc3Qgb2YgdGhpcyB0aHJlYWQncwogICAgICAgICAgICAgIyByZXN1bHRzLgogICAg
ICAgICAgICAgbG9nZ2luZy5lcnJvcignVGVzdCB0aHJlYWQgaHVuZzoga2lsbGluZyBhbGwgdGVz
dF9zaGVsbHMnKQotICAgICAgICAgICAgcGF0aF91dGlscy5raWxsX2FsbF90ZXN0X3NoZWxscygp
CisgICAgICAgICAgICB3b3JrZXIuX2RyaXZlci5zdG9wKCkKIAogICAgICAgICB0cnk6CiAgICAg
ICAgICAgICBzdGF0cyA9IHdvcmtlci5nZXRfdGVzdF9zdGF0cygpCkBAIC00NTQsMzMgKzQwMywy
NCBAQAogICAgICAgICAgIEEgbGlzdCBvZiBUZXN0RmFpbHVyZSBvYmplY3RzIGRlc2NyaWJpbmcg
dGhlIGVycm9yLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fZW5zdXJlX3Rlc3Rfc2hlbGxf
aXNfcnVubmluZygpCi0gICAgICAgICMgQXJncyB0byB0ZXN0X3NoZWxsIGlzIGEgc3BhY2Utc2Vw
YXJhdGVkIGxpc3Qgb2YKLSAgICAgICAgIyAidXJpIHRpbWVvdXQgcGl4ZWxfaGFzaCIKLSAgICAg
ICAgIyBUaGUgdGltZW91dCBhbmQgcGl4ZWxfaGFzaCBhcmUgb3B0aW9uYWwuICBUaGUgdGltZW91
dCBpcyB1c2VkIGlmIHRoaXMKLSAgICAgICAgIyB0ZXN0IGhhcyBhIGN1c3RvbSB0aW1lb3V0LiBU
aGUgcGl4ZWxfaGFzaCBpcyB1c2VkIHRvIGF2b2lkIGRvaW5nIGFuCi0gICAgICAgICMgaW1hZ2Ug
ZHVtcCBpZiB0aGUgY2hlY2tzdW1zIG1hdGNoLCBzbyBpdCBzaG91bGQgYmUgc2V0IHRvIGEgYmxh
bmsKLSAgICAgICAgIyB2YWx1ZSBpZiB3ZSBhcmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNlbGluZS4K
LSAgICAgICAgIyAoT3RoZXJ3aXNlLCBhbiBpbWFnZSBmcm9tIGEgcHJldmlvdXMgcnVuIHdpbGwg
YmUgY29waWVkIGludG8KLSAgICAgICAgIyB0aGUgYmFzZWxpbmUuKQorICAgICAgICAjIFRoZSBw
aXhlbF9oYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4gaW1hZ2UgZHVtcCBpZiB0aGUKKyAg
ICAgICAgIyBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBibGFuayB2
YWx1ZSBpZiB3ZQorICAgICAgICAjIGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLiAgKE90
aGVyd2lzZSwgYW4gaW1hZ2UgZnJvbSBhCisgICAgICAgICMgcHJldmlvdXMgcnVuIHdpbGwgYmUg
Y29waWVkIGludG8gdGhlIGJhc2VsaW5lLikKICAgICAgICAgaW1hZ2VfaGFzaCA9IHRlc3RfaW5m
by5pbWFnZV9oYXNoCiAgICAgICAgIGlmIGltYWdlX2hhc2ggYW5kIHNlbGYuX3Rlc3RfYXJncy5u
ZXdfYmFzZWxpbmU6CiAgICAgICAgICAgICBpbWFnZV9oYXNoID0gIiIKLSAgICAgICAgc2VsZi5f
dGVzdF9zaGVsbF9wcm9jLnN0ZGluLndyaXRlKCgiJXMgJXMgJXNcbiIgJQotICAgICAgICAgICAg
KHRlc3RfaW5mby51cmksIHRlc3RfaW5mby50aW1lb3V0LCBpbWFnZV9oYXNoKSkpCisgICAgICAg
IHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAgICAgY3Jhc2gsIHRpbWVvdXQsIGFjdHVhbF9jaGVj
a3N1bSwgb3V0cHV0LCBlcnJvciA9IFwKKyAgICAgICAgICAgc2VsZi5fZHJpdmVyLnJ1bl90ZXN0
KHRlc3RfaW5mby51cmksIHRlc3RfaW5mby50aW1lb3V0LCBpbWFnZV9oYXNoKQorICAgICAgICBl
bmQgPSB0aW1lLnRpbWUoKQogCi0gICAgICAgICMgSWYgdGhlIHRlc3Qgc2hlbGwgaXMgZGVhZCwg
dGhlIGFib3ZlIG1heSBjYXVzZSBhbiBJT0Vycm9yIGFzIHdlCi0gICAgICAgICMgdHJ5IHRvIHdy
aXRlIG9udG8gdGhlIGJyb2tlbiBwaXBlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0ZXN0IGZvcgot
ICAgICAgICAjIHRoaXMgdGVzdCBzaGVsbCBwcm9jZXNzLCB0aGFuIHRoZSB0ZXN0IHNoZWxsIGRp
ZCBub3QKLSAgICAgICAgIyBzdWNjZXNzZnVsbHkgc3RhcnQuIElmIHRoaXMgaXMgbm90IHRoZSBm
aXJzdCB0ZXN0LCB0aGVuIHRoZQotICAgICAgICAjIHByZXZpb3VzIHRlc3RzIGhhdmUgY2F1c2Vk
IHNvbWUga2luZCBvZiBkZWxheWVkIGNyYXNoLiBXZSBkb24ndAotICAgICAgICAjIHRyeSB0byBy
ZWNvdmVyIGhlcmUuCi0gICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRpbi5mbHVzaCgp
CisgICAgICAgIHN0YXRzID0gcHJvY2Vzc19vdXRwdXQoc2VsZi5fcG9ydCwgdGVzdF9pbmZvLCBz
ZWxmLl90ZXN0X3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rl
c3RfYXJncywgc2VsZi5fb3B0aW9ucy50YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwgY3Jhc2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwgZW5kIC0gc3RhcnQsIGFjdHVhbF9jaGVja3N1
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGVycm9yKQogCi0gICAg
ICAgIHN0YXRzID0gcHJvY2Vzc19vdXRwdXQoc2VsZi5fdGVzdF9zaGVsbF9wcm9jLCB0ZXN0X2lu
Zm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywgc2Vs
Zi5fdGVzdF9hcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlv
bnMudGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
cmVzdWx0c19kaXJlY3RvcnkpCi0KICAgICAgICAgc2VsZi5fdGVzdF9zdGF0cy5hcHBlbmQoc3Rh
dHMpCiAgICAgICAgIHJldHVybiBzdGF0cy5mYWlsdXJlcwogCkBAIC00ODksMjMgKzQyOSwxMiBA
QAogICAgICAgICBydW5uaW5nIHRlc3RzIHNpbmdseSwgc2luY2UgdGhvc2UgZWFjaCBzdGFydCBh
IHNlcGFyYXRlIHRlc3Qgc2hlbGwgaW4KICAgICAgICAgdGhlaXIgb3duIHRocmVhZC4KICAgICAg
ICAgIiIiCi0gICAgICAgIGlmIChub3Qgc2VsZi5fdGVzdF9zaGVsbF9wcm9jIG9yCi0gICAgICAg
ICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2MucG9sbCgpIGlzIG5vdCBOb25lKToKLSAgICAgICAg
ICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYyA9IHN0YXJ0X3Rlc3Rfc2hlbGwoc2VsZi5fdGVzdF9z
aGVsbF9jb21tYW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9zaGVsbF9hcmdzKQorICAgICAgICBpZiAobm90IHNlbGYuX2RyaXZl
ciBvciBzZWxmLl9kcml2ZXIucG9sbCgpIGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgIHNlbGYu
X2RyaXZlciA9IHNlbGYuX3BvcnQuc3RhcnRfZHJpdmVyKAorICAgICAgICAgICAgICAgIHNlbGYu
X2ltYWdlX3BhdGgsIHNlbGYuX3NoZWxsX2FyZ3MpCiAKICAgICBkZWYgX2tpbGxfdGVzdF9zaGVs
bChzZWxmKToKICAgICAgICAgIiIiS2lsbCB0aGUgdGVzdCBzaGVsbCBwcm9jZXNzIGlmIGl0J3Mg
cnVubmluZy4iIiIKLSAgICAgICAgaWYgc2VsZi5fdGVzdF9zaGVsbF9wcm9jOgotICAgICAgICAg
ICAgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYu
X3Rlc3Rfc2hlbGxfcHJvYy5zdGRvdXQuY2xvc2UoKQotICAgICAgICAgICAgaWYgc2VsZi5fdGVz
dF9zaGVsbF9wcm9jLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3By
b2Muc3RkZXJyLmNsb3NlKCkKLSAgICAgICAgICAgIGlmIChzeXMucGxhdGZvcm0gbm90IGluICgn
d2luMzInLCAnY3lnd2luJykgYW5kCi0gICAgICAgICAgICAgICAgbm90IHNlbGYuX3Rlc3Rfc2hl
bGxfcHJvYy5wb2xsKCkpOgotICAgICAgICAgICAgICAgICMgQ2xvc2luZyBzdGRpbi9zdGRvdXQv
c3RkZXJyIGhhbmdzIHNvbWV0aW1lcyBvbiBPUyBYLgotICAgICAgICAgICAgICAgIG51bGwgPSBv
cGVuKG9zLmRldm51bGwsICJ3IikKLSAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsi
a2lsbCIsICItOSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZi5f
dGVzdF9zaGVsbF9wcm9jLnBpZCldLCBzdGRlcnI9bnVsbCkKLSAgICAgICAgICAgICAgICBudWxs
LmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYyA9IE5vbmUKKyAgICAg
ICAgaWYgc2VsZi5fZHJpdmVyOgorICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnN0b3AoKQorICAg
ICAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQpJbmRleDogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkJKHJldmlzaW9uIDU0MzI4KQorKysg
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRf
cmVzdWx0c19nZW5lcmF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDkgQEAKIAog
aW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcworaW1wb3J0IHNpbXBsZWpzb24KIAogZnJvbSBsYXlv
dXRfcGFja2FnZSBpbXBvcnQganNvbl9yZXN1bHRzX2dlbmVyYXRvcgotZnJvbSBwb3J0IGltcG9y
dCBwYXRoX3V0aWxzCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9u
cwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcwogCkBAIC00NSw3ICs0
NSw3IEBACiAgICAgV09OVEZJWCA9ICJ3b250Zml4Q291bnRzIgogICAgIERFRkVSUkVEID0gImRl
ZmVycmVkQ291bnRzIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXJfbmFtZSwgYnVp
bGRfbmFtZSwgYnVpbGRfbnVtYmVyLAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBidWls
ZGVyX25hbWUsIGJ1aWxkX25hbWUsIGJ1aWxkX251bWJlciwKICAgICAgICAgcmVzdWx0c19maWxl
X2Jhc2VfcGF0aCwgYnVpbGRlcl9iYXNlX3VybCwKICAgICAgICAgdGVzdF90aW1pbmdzLCBleHBl
Y3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCBhbGxfdGVzdHMpOgogICAgICAgICAiIiJNb2RpZmll
cyB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIEdyYWJzIGl0IG9mZiB0aGUgYXJjaGl2ZSBkaXJlY3Rv
cnkKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgcmVzdWx0cy4KICAgICAgICAgICAo
c2VlIHRoZSBjb21tZW50IG9mIEpTT05SZXN1bHRzR2VuZXJhdG9yLl9faW5pdF9fIGZvciBvdGhl
ciBBcmdzKQogICAgICAgICAiIiIKLQorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAg
ICBzZWxmLl9idWlsZGVyX25hbWUgPSBidWlsZGVyX25hbWUKICAgICAgICAgc2VsZi5fYnVpbGRf
bmFtZSA9IGJ1aWxkX25hbWUKICAgICAgICAgc2VsZi5fYnVpbGRfbnVtYmVyID0gYnVpbGRfbnVt
YmVyCkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICAgICAgICAgIHRlc3QsIHRlc3RfbmFtZSwgdGVz
dHMpCiAKICAgICAgICAgIyBSZW1vdmUgdGVzdHMgdGhhdCBkb24ndCBleGlzdCBhbnltb3JlLgot
ICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4ocGF0aF91dGlscy5sYXlvdXRfdGVzdHNf
ZGlyKCksIHRlc3RfbmFtZSkKKyAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYu
X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCB0ZXN0X25hbWUpCiAgICAgICAgIGZ1bGxfcGF0aCA9
IG9zLnBhdGgubm9ybXBhdGgoZnVsbF9wYXRoKQogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlz
dHMoZnVsbF9wYXRoKToKICAgICAgICAgICAgIGRlbCB0ZXN0c1t0ZXN0X25hbWVdCkluZGV4OiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNf
Z2VuZXJhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkJKHJldmlzaW9uIDU0MzI4
KQorKysgU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9y
ZXN1bHRzX2dlbmVyYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMjksMjAgKzI5LDE2IEBACiAK
IGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKK2ltcG9ydCBzaW1wbGVqc29uCiBpbXBvcnQgc3Vi
cHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCB1cmxsaWIyCiBpbXBvcnQg
eG1sLmRvbS5taW5pZG9tCiAKLWZyb20gcG9ydCBpbXBvcnQgcGF0aF91dGlscwogZnJvbSBsYXlv
dXRfcGFja2FnZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKIAotc3lzLnBhdGguYXBwZW5kKHBh
dGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dlYktpdFRvb2xzJykpIAotaW1w
b3J0IHNpbXBsZWpzb24KIAotCiBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihvYmplY3QpOgog
CiAgICAgTUFYX05VTUJFUl9PRl9CVUlMRF9SRVNVTFRTX1RPX0xPRyA9IDc1MApAQCAtODAsNyAr
NzYsNyBAQAogCiAgICAgUkVTVUxUU19GSUxFTkFNRSA9ICJyZXN1bHRzLmpzb24iCiAKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIs
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwg
YnVpbGRfbnVtYmVyLAogICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jh
c2VfdXJsLAogICAgICAgICB0ZXN0X3RpbWluZ3MsIGZhaWx1cmVzLCBwYXNzZWRfdGVzdHMsIHNr
aXBwZWRfdGVzdHMsIGFsbF90ZXN0cyk6CiAgICAgICAgICIiIk1vZGlmaWVzIHRoZSByZXN1bHRz
Lmpzb24gZmlsZS4gR3JhYnMgaXQgb2ZmIHRoZSBhcmNoaXZlIGRpcmVjdG9yeQpAQCAtMTAwLDYg
Kzk2LDcgQEAKICAgICAgICAgICBhbGxfdGVzdHM6IExpc3Qgb2YgYWxsIHRoZSB0ZXN0cyB0aGF0
IHdlcmUgcnVuLiAgVGhpcyBzaG91bGQgbm90CiAgICAgICAgICAgICAgIGluY2x1ZGUgc2tpcHBl
ZCB0ZXN0cy4KICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAg
IHNlbGYuX2J1aWxkZXJfbmFtZSA9IGJ1aWxkZXJfbmFtZQogICAgICAgICBzZWxmLl9idWlsZF9u
YW1lID0gYnVpbGRfbmFtZQogICAgICAgICBzZWxmLl9idWlsZF9udW1iZXIgPSBidWlsZF9udW1i
ZXIKQEAgLTEyMiwyMiArMTE5LDI0IEBACiAgICAgICAgICAgICByZXN1bHRzX2ZpbGUud3JpdGUo
anNvbikKICAgICAgICAgICAgIHJlc3VsdHNfZmlsZS5jbG9zZSgpCiAKLSAgICBkZWYgX2dldF9z
dm5fcmV2aXNpb24oc2VsZiwgaW5fZGlyZWN0b3J5PU5vbmUpOgorICAgIGRlZiBfZ2V0X3N2bl9y
ZXZpc2lvbihzZWxmLCBpbl9kaXJlY3RvcnkpOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdm4g
cmV2aXNpb24gZm9yIHRoZSBnaXZlbiBkaXJlY3RvcnkuCiAKICAgICAgICAgQXJnczoKICAgICAg
ICAgICBpbl9kaXJlY3Rvcnk6IFRoZSBkaXJlY3Rvcnkgd2hlcmUgc3ZuIGlzIHRvIGJlIHJ1bi4K
ICAgICAgICAgIiIiCi0gICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzdm4iLCAi
aW5mbyIsICItLXhtbCJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1p
bl9kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9KHN5
cy5wbGF0Zm9ybSA9PSAnd2luMzInKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCi0gICAgICAgIHRyeToK
LSAgICAgICAgICAgIGRvbSA9IHhtbC5kb20ubWluaWRvbS5wYXJzZVN0cmluZyhvdXRwdXQpCi0g
ICAgICAgICAgICByZXR1cm4gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdlbnRyeScpWzBdLmdl
dEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICAncmV2aXNpb24nKQotICAgICAgICBleGNlcHQg
eG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiAiIgorICAg
ICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oaW5fZGlyZWN0b3J5LCAnLnN2bicp
KToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzdm4iLCAiaW5mbyIs
ICItLXhtbCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9aW5f
ZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD0o
c3lzLnBsYXRmb3JtID09ICd3aW4zMicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgZG9tID0geG1sLmRvbS5taW5pZG9tLnBhcnNlU3Ry
aW5nKG91dHB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9tLmdldEVsZW1lbnRzQnlUYWdO
YW1lKCdlbnRyeScpWzBdLmdldEF0dHJpYnV0ZSgKKyAgICAgICAgICAgICAgICAgICAgJ3Jldmlz
aW9uJykKKyAgICAgICAgICAgIGV4Y2VwdCB4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yOgor
ICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICByZXR1cm4gIiIKIAogICAgIGRlZiBf
Z2V0X2FyY2hpdmVkX2pzb25fcmVzdWx0cyhzZWxmKToKICAgICAgICAgIiIiUmVhZHMgb2xkIHJl
c3VsdHMgSlNPTiBmaWxlIGlmIGl0IGV4aXN0cy4KQEAgLTMwNSwxNiArMzA0LDE5IEBACiAgICAg
ICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwK
ICAgICAgICAgICAgIHNlbGYuX2J1aWxkX251bWJlciwgc2VsZi5CVUlMRF9OVU1CRVJTKQogCi0g
ICAgICAgIHBhdGhfdG9fd2Via2l0ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRf
cGFydHknLCAnV2ViS2l0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdXZWJDb3JlJykKLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19y
YXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAotICAgICAgICAgICAgc2VsZi5fZ2V0X3N2bl9y
ZXZpc2lvbihwYXRoX3RvX3dlYmtpdCksCi0gICAgICAgICAgICBzZWxmLldFQktJVF9TVk4pCisg
ICAgICAgICMgVGhlc2UgbmV4dCB0d28gYnJhbmNoZXMgdGVzdCB0byBzZWUgd2hpY2ggc291cmNl
IHJlcG9zIHdlIGNhbgorICAgICAgICAjIHB1bGwgcmV2aXNpb25zIGZyb20uCisgICAgICAgIGlm
IGhhc2F0dHIoc2VsZi5fcG9ydCwgJ3BhdGhfZnJvbV93ZWJraXRfYmFzZScpOgorICAgICAgICAg
ICAgcGF0aF90b193ZWJraXQgPSBzZWxmLl9wb3J0LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgpCisg
ICAgICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1
aWxkZXIsCisgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X3N2bl9yZXZpc2lvbihwYXRoX3RvX3dl
YmtpdCksCisgICAgICAgICAgICAgICAgc2VsZi5XRUJLSVRfU1ZOKQogCi0gICAgICAgIHBhdGhf
dG9fY2hyb21lX2Jhc2UgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCkKLSAgICAgICAgc2Vs
Zi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAotICAgICAg
ICAgICAgc2VsZi5fZ2V0X3N2bl9yZXZpc2lvbihwYXRoX3RvX2Nocm9tZV9iYXNlKSwKLSAgICAg
ICAgICAgIHNlbGYuQ0hST01FX1NWTikKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9wb3J0LCAn
cGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UnKToKKyAgICAgICAgICAgIHBhdGhfdG9fY2hyb21lID0g
c2VsZi5fcG9ydC5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgpCisgICAgICAgICAgICBzZWxmLl9p
bnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCisgICAgICAgICAg
ICAgICAgc2VsZi5fZ2V0X3N2bl9yZXZpc2lvbihwYXRoX3RvX2Nocm9tZSksCisgICAgICAgICAg
ICAgICAgc2VsZi5DSFJPTUVfU1ZOKQogCiAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX2ludG9f
cmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKICAgICAgICAgICAgIGludCh0aW1lLnRpbWUo
KSksCkluZGV4OiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90
ZXN0X2ZpbGVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL3Rlc3RfZmlsZXMucHkJKHJldmlzaW9uIDU0MzI4KQorKysgU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9maWxlcy5weQkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogCiBpbXBvcnQgZ2xvYgogaW1wb3J0IG9zCi1m
cm9tIHBvcnQgaW1wb3J0IHBhdGhfdXRpbHMKIAogIyBXaGVuIGNvbGxlY3RpbmcgdGVzdCBjYXNl
cywgd2UgaW5jbHVkZSBhbnkgZmlsZSB3aXRoIHRoZXNlIGV4dGVuc2lvbnMuCiBfc3VwcG9ydGVk
X2ZpbGVfZXh0ZW5zaW9ucyA9IHNldChbJy5odG1sJywgJy5zaHRtbCcsICcueG1sJywgJy54aHRt
bCcsICcucGwnLApAQCAtNDUsNyArNDQsNyBAQAogX3NraXBwZWRfZGlyZWN0b3JpZXMgPSBzZXQo
Wycuc3ZuJywgJ19zdm4nLCAncmVzb3VyY2VzJywgJ3NjcmlwdC10ZXN0cyddKQogCiAKLWRlZiBn
YXRoZXJfdGVzdF9maWxlcyhwYXRocyk6CitkZWYgZ2F0aGVyX3Rlc3RfZmlsZXMocG9ydCwgcGF0
aHMpOgogICAgICIiIkdlbmVyYXRlIGEgc2V0IG9mIHRlc3QgZmlsZXMgYW5kIHJldHVybiB0aGVt
LgogCiAgICAgQXJnczoKQEAgLTU3LDE0ICs1NiwxNCBAQAogICAgIGlmIHBhdGhzOgogICAgICAg
ICBmb3IgcGF0aCBpbiBwYXRoczoKICAgICAgICAgICAgICMgSWYgdGhlcmUncyBhbiAqIGluIHRo
ZSBuYW1lLCBhc3N1bWUgaXQncyBhIGdsb2IgcGF0dGVybi4KLSAgICAgICAgICAgIHBhdGggPSBv
cy5wYXRoLmpvaW4ocGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCksIHBhdGgpCisgICAgICAg
ICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCBwYXRoKQog
ICAgICAgICAgICAgaWYgcGF0aC5maW5kKCcqJykgPiAtMToKICAgICAgICAgICAgICAgICBmaWxl
bmFtZXMgPSBnbG9iLmdsb2IocGF0aCkKICAgICAgICAgICAgICAgICBwYXRoc190b193YWxrLnVw
ZGF0ZShmaWxlbmFtZXMpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHBhdGhz
X3RvX3dhbGsuYWRkKHBhdGgpCiAgICAgZWxzZToKLSAgICAgICAgcGF0aHNfdG9fd2Fsay5hZGQo
cGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCkpCisgICAgICAgIHBhdGhzX3RvX3dhbGsuYWRk
KHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpKQogCiAgICAgIyBOb3cgd2FsayBhbGwgdGhlIHBhdGhz
IHBhc3NlZCBpbiBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCBnZXQgZmlsZW5hbWVzCiAgICAgdGVz
dF9maWxlcyA9IHNldCgpCkluZGV4OiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQko
cmV2aXNpb24gNTQzMjgpCisrKyBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2
LDcgQEAKIGltcG9ydCByZQogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKLWZyb20gcG9ydCBpbXBv
cnQgcGF0aF91dGlscwogCi1zeXMucGF0aC5hcHBlbmQocGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnV2ViS2l0VG9vbHMnKSkgCiBpbXBvcnQgc2ltcGxlanNvbgogCiAjIFRl
c3QgZXhwZWN0YXRpb24gYW5kIG1vZGlmaWVyIGNvbnN0YW50cy4KQEAgLTUzLDEyICs1MCwyNiBA
QAogY2xhc3MgVGVzdEV4cGVjdGF0aW9uczoKICAgICBURVNUX0xJU1QgPSAidGVzdF9leHBlY3Rh
dGlvbnMudHh0IgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RzLCBkaXJlY3RvcnksIHBs
YXRmb3JtLCBpc19kZWJ1Z19tb2RlLCBpc19saW50X21vZGUsCi0gICAgICAgIHRlc3RzX2FyZV9w
cmVzZW50PVRydWUpOgotICAgICAgICAiIiJSZWFkcyB0aGUgdGVzdCBleHBlY3RhdGlvbnMgZmls
ZXMgZnJvbSB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiIiIgotICAgICAgICBwYXRoID0gb3MucGF0aC5q
b2luKGRpcmVjdG9yeSwgc2VsZi5URVNUX0xJU1QpCi0gICAgICAgIHNlbGYuX2V4cGVjdGVkX2Zh
aWx1cmVzID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUocGF0aCwgdGVzdHMsIHBsYXRmb3JtLAotICAg
ICAgICAgICAgaXNfZGVidWdfbW9kZSwgaXNfbGludF9tb2RlLCB0ZXN0c19hcmVfcHJlc2VudD10
ZXN0c19hcmVfcHJlc2VudCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgdGVzdHMsIGV4
cGVjdGF0aW9ucywgcGxhdGZvcm0sIGlzX2RlYnVnX21vZGUsCisgICAgICAgICAgICAgICAgICBp
c19saW50X21vZGUsIHRlc3RzX2FyZV9wcmVzZW50PVRydWUpOgorICAgICAgICAiIiJMb2FkcyBh
bmQgcGFyc2VzIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBnaXZlbiBpbiB0aGUgc3RyaW5nLgorICAg
ICAgICBBcmdzOgorICAgICAgICAgICAgcG9ydDogcmVmZXJlbmNlIHRvIHBsYXRmb3JtLXNwZWNp
ZmljIGludGVyZmFjZQorICAgICAgICAgICAgdGVzdDogbGlzdCBvZiBhbGwgb2YgdGhlIHRlc3Qg
ZmlsZXMKKyAgICAgICAgICAgIGV4cGVjdGF0aW9uczogdGVzdCBleHBlY3RhdGlvbnMgYXMgYSBz
dHJpbmcKKyAgICAgICAgICAgIHBsYXRmb3JtOiB0ZXN0IHBsYXRmb3JtIG5hbWUgdG8gdXNlIGZv
ciBwYXJzaW5nIGV4cGVjdGF0aW9ucworICAgICAgICAgICAgaXNfZGVidWdfbW9kZTogd2hldGhl
ciB0byB1c2UgdGhlIERFQlVHIG9yIFJFTEVBU0UgbW9kaWZpZXJzCisgICAgICAgICAgICAgICAg
aW4gdGhlIGV4cGVjdGF0aW9ucworICAgICAgICAgICAgaXNfbGludF9tb2RlOiBJZiBUcnVlLCBq
dXN0IHBhcnNlIHRoZSBleHBlY3RhdGlvbnMgc3RyaW5nCisgICAgICAgICAgICAgICAgbG9va2lu
ZyBmb3IgZXJyb3JzLgorICAgICAgICAgICAgdGVzdHNfYXJlX3ByZXNlbnQ6IHdoZXRoZXIgdGhl
IHRlc3QgZmlsZXMgZXhpc3QgaW4gdGhlIGZpbGUKKyAgICAgICAgICAgICAgICBzeXN0ZW0gYW5k
IGNhbiBiZSBwcm9iZWQgZm9yLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZGlzdGluZ3Vpc2hpbmcKKyAg
ICAgICAgICAgICAgICB0ZXN0IGZpbGVzIGZyb20gZGlyZWN0b3JpZXMsIGFuZCBpcyBuZWVkZWQg
YnkgdGhlIExUVEYKKyAgICAgICAgICAgICAgICBkYXNoYm9hcmQsIHdoZXJlIHRoZSBmaWxlcyBh
cmVuJ3QgYWN0dWFsbHkgbG9jYWxseSBwcmVzZW50LgorICAgICAgICAiIiIKKyAgICAgICAgc2Vs
Zi5fZXhwZWN0ZWRfZmFpbHVyZXMgPSBUZXN0RXhwZWN0YXRpb25zRmlsZShwb3J0LCBleHBlY3Rh
dGlvbnMsCisgICAgICAgICAgICB0ZXN0cywgcGxhdGZvcm0sIGlzX2RlYnVnX21vZGUsIGlzX2xp
bnRfbW9kZSwKKyAgICAgICAgICAgIHRlc3RzX2FyZV9wcmVzZW50PXRlc3RzX2FyZV9wcmVzZW50
KQogCiAgICAgIyBUT0RPKG9qYW4pOiBBbGxvdyBmb3IgcmVtb3Zpbmcgc2tpcHBlZCB0ZXN0cyB3
aGVuIGdldHRpbmcgdGhlIGxpc3Qgb2YKICAgICAjIHRlc3RzIHRvIHJ1biwgYnV0IG5vdCB3aGVu
IGdldHRpbmcgbWV0cmljcy4KQEAgLTIzMCw5ICsyNDEsNiBAQAogICAgIEVYUEVDVEFUSU9OX09S
REVSID0gKFBBU1MsIENSQVNILCBUSU1FT1VULCBNSVNTSU5HLCBJTUFHRV9QTFVTX1RFWFQsCiAg
ICAgICAgVEVYVCwgSU1BR0UsIEZBSUwsIFNLSVApCiAKLSAgICBCQVNFX1BMQVRGT1JNUyA9ICgn
bGludXgnLCAnbWFjJywgJ3dpbicpCi0gICAgUExBVEZPUk1TID0gQkFTRV9QTEFURk9STVMgKyAo
J3dpbi14cCcsICd3aW4tdmlzdGEnLCAnd2luLTcnKQotCiAgICAgQlVJTERfVFlQRVMgPSAoJ2Rl
YnVnJywgJ3JlbGVhc2UnKQogCiAgICAgTU9ESUZJRVJTID0geydza2lwJzogU0tJUCwKQEAgLTI1
MSwzNiArMjU5LDMyIEBACiAgICAgICAgICAgICAgICAgICAgICdmYWlsJzogRkFJTCwKICAgICAg
ICAgICAgICAgICAgICAgJ2ZsYWt5JzogRkxBS1l9CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
cGF0aCwgZnVsbF90ZXN0X2xpc3QsIHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlLAotICAgICAgICBp
c19saW50X21vZGUsIGV4cGVjdGF0aW9uc19hc19zdHI9Tm9uZSwgc3VwcHJlc3NfZXJyb3JzPUZh
bHNlLAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBleHBlY3RhdGlvbnMsIGZ1bGxfdGVz
dF9saXN0LCBwbGF0Zm9ybSwKKyAgICAgICAgaXNfZGVidWdfbW9kZSwgaXNfbGludF9tb2RlLCBz
dXBwcmVzc19lcnJvcnM9RmFsc2UsCiAgICAgICAgIHRlc3RzX2FyZV9wcmVzZW50PVRydWUpOgog
ICAgICAgICAiIiIKLSAgICAgICAgcGF0aDogVGhlIHBhdGggdG8gdGhlIGV4cGVjdGF0aW9uIGZp
bGUuIEFuIGVycm9yIGlzIHRocm93biBpZiBhIHRlc3QgaXMKLSAgICAgICAgICAgIGxpc3RlZCBt
b3JlIHRoYW4gb25jZS4KKyAgICAgICAgZXhwZWN0YXRpb25zOiBDb250ZW50cyBvZiB0aGUgZXhw
ZWN0YXRpb25zIGZpbGUKICAgICAgICAgZnVsbF90ZXN0X2xpc3Q6IFRoZSBsaXN0IG9mIGFsbCB0
ZXN0cyB0byBiZSBydW4gcGVuZGluZyBwcm9jZXNzaW5nIG9mCiAgICAgICAgICAgICB0aGUgZXhw
ZWN0aW9ucyBmb3IgdGhvc2UgdGVzdHMuCi0gICAgICAgIHBsYXRmb3JtOiBXaGljaCBwbGF0Zm9y
bSBmcm9tIHNlbGYuUExBVEZPUk1TIHRvIGZpbHRlciB0ZXN0cyBmb3IuCisgICAgICAgIHBsYXRm
b3JtOiBXaGljaCBwbGF0Zm9ybSBmcm9tIHBvcnQudGVzdF9wbGF0Zm9ybV9uYW1lcygpIHRvIGZp
bHRlcgorICAgICAgICAgICAgdGVzdHMgZm9yLgogICAgICAgICBpc19kZWJ1Z19tb2RlOiBXaGV0
aGVyIHdlIHRlc3RpbmcgYSB0ZXN0X3NoZWxsIGJ1aWx0IGRlYnVnIG1vZGUuCiAgICAgICAgIGlz
X2xpbnRfbW9kZTogV2hldGhlciB0aGlzIGlzIGp1c3QgbGludGluZyB0ZXN0X2V4cGVjYXRhdGlv
bnMudHh0LgotICAgICAgICBleHBlY3RhdGlvbnNfYXNfc3RyOiBDb250ZW50cyBvZiB0aGUgZXhw
ZWN0YXRpb25zIGZpbGUuIFVzZWQgaW5zdGVhZCBvZgotICAgICAgICAgICAgdGhlIHBhdGguIFRo
aXMgbWFrZXMgdW5pdHRlc3Rpbmcgc2FuZS4KICAgICAgICAgc3VwcHJlc3NfZXJyb3JzOiBXaGV0
aGVyIHRvIHN1cHByZXNzIGxpbnQgZXJyb3JzLgogICAgICAgICB0ZXN0c19hcmVfcHJlc2VudDog
V2hldGhlciB0aGUgdGVzdCBmaWxlcyBhcmUgcHJlc2VudCBpbiB0aGUgbG9jYWwKICAgICAgICAg
ICAgIGZpbGVzeXN0ZW0uIFRoZSBMVFRGIERhc2hib2FyZCB1c2VzIEZhbHNlIGhlcmUgdG8gYXZv
aWQgaGF2aW5nIHRvCiAgICAgICAgICAgICBrZWVwIGEgbG9jYWwgY29weSBvZiB0aGUgdHJlZS4K
ICAgICAgICAgIiIiCiAKLSAgICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKLSAgICAgICAgc2VsZi5f
ZXhwZWN0YXRpb25zX2FzX3N0ciA9IGV4cGVjdGF0aW9uc19hc19zdHIKKyAgICAgICAgc2VsZi5f
ZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zCiAgICAgICAgIHNlbGYuX2lzX2xpbnRfbW9kZSA9
IGlzX2xpbnRfbW9kZQogICAgICAgICBzZWxmLl90ZXN0c19hcmVfcHJlc2VudCA9IHRlc3RzX2Fy
ZV9wcmVzZW50CiAgICAgICAgIHNlbGYuX2Z1bGxfdGVzdF9saXN0ID0gZnVsbF90ZXN0X2xpc3QK
ICAgICAgICAgc2VsZi5fc3VwcHJlc3NfZXJyb3JzID0gc3VwcHJlc3NfZXJyb3JzCiAgICAgICAg
IHNlbGYuX2Vycm9ycyA9IFtdCiAgICAgICAgIHNlbGYuX25vbl9mYXRhbF9lcnJvcnMgPSBbXQot
ICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9IHNlbGYudG9fdGVzdF9wbGF0Zm9ybV9uYW1lKHBsYXRm
b3JtKQotICAgICAgICBpZiBzZWxmLl9wbGF0Zm9ybSBpcyBOb25lOgotICAgICAgICAgICAgcmFp
c2UgRXhjZXB0aW9uKCJVbmtub3duIHBsYXRmb3JtICclcyciICUgKHBsYXRmb3JtKSkKKyAgICAg
ICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQog
ICAgICAgICBzZWxmLl9pc19kZWJ1Z19tb2RlID0gaXNfZGVidWdfbW9kZQogCiAgICAgICAgICMg
TWFwcyByZWxhdGl2ZSB0ZXN0IHBhdGhzIGFzIGxpc3RlZCBpbiB0aGUgZXhwZWN0YXRpb25zIGZp
bGUgdG8gYQpAQCAtMzIwLDI4ICszMjQsMTQgQEAKICAgICAgICAgIiIiUmV0dXJucyBhbiBvYmpl
Y3QgdGhhdCBjYW4gYmUgaXRlcmF0ZWQgb3Zlci4gQWxsb3dzIGZvciBub3QgY2FyaW5nCiAgICAg
ICAgIGFib3V0IHdoZXRoZXIgd2UncmUgaXRlcmF0aW5nIG92ZXIgYSBmaWxlIG9yIGEgbmV3LWxp
bmUgc2VwYXJhdGVkCiAgICAgICAgIHN0cmluZy4iIiIKLSAgICAgICAgaWYgc2VsZi5fZXhwZWN0
YXRpb25zX2FzX3N0cjoKLSAgICAgICAgICAgIGl0ZXJhYmxlID0gW3ggKyAiXG4iIGZvciB4IGlu
Ci0gICAgICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zX2FzX3N0ci5zcGxpdCgiXG4iKV0K
LSAgICAgICAgICAgICMgU3RyaXAgZmluYWwgZW50cnkgaWYgaXQncyBlbXB0eSB0byBhdm9pZCBh
ZGRlZCBpbiBhbiBleHRyYQotICAgICAgICAgICAgIyBuZXdsaW5lLgotICAgICAgICAgICAgaWYg
aXRlcmFibGVbbGVuKGl0ZXJhYmxlKSAtIDFdID09ICJcbiI6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGl0ZXJhYmxlWzpsZW4oaXRlcmFibGUpIC0gMV0KLSAgICAgICAgICAgIHJldHVybiBpdGVy
YWJsZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIG9wZW4oc2VsZi5fcGF0aCkK
KyAgICAgICAgaXRlcmFibGUgPSBbeCArICJcbiIgZm9yIHggaW4KKyAgICAgICAgICAgIHNlbGYu
X2V4cGVjdGF0aW9ucy5zcGxpdCgiXG4iKV0KKyAgICAgICAgIyBTdHJpcCBmaW5hbCBlbnRyeSBp
ZiBpdCdzIGVtcHR5IHRvIGF2b2lkIGFkZGVkIGluIGFuIGV4dHJhCisgICAgICAgICMgbmV3bGlu
ZS4KKyAgICAgICAgaWYgaXRlcmFibGVbLTFdID09ICJcbiI6CisgICAgICAgICAgICByZXR1cm4g
aXRlcmFibGVbOi0xXQorICAgICAgICByZXR1cm4gaXRlcmFibGUKIAotICAgIGRlZiB0b190ZXN0
X3BsYXRmb3JtX25hbWUoc2VsZiwgbmFtZSk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIHRlc3Qg
ZXhwZWN0YXRpb24gcGxhdGZvcm0gdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGEKLSAgICAgICAgZ2l2
ZW4gcGxhdGZvcm0gbmFtZSwgb3IgTm9uZSBpZiB0aGVyZSBpcyBubyBtYXRjaC4iIiIKLSAgICAg
ICAgY2hyb21pdW1fcHJlZml4ID0gJ2Nocm9taXVtLScKLSAgICAgICAgbmFtZSA9IG5hbWUubG93
ZXIoKQotICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoY2hyb21pdW1fcHJlZml4KToKLSAgICAg
ICAgICAgIG5hbWUgPSBuYW1lW2xlbihjaHJvbWl1bV9wcmVmaXgpOl0KLSAgICAgICAgaWYgbmFt
ZSBpbiBzZWxmLlBMQVRGT1JNUzoKLSAgICAgICAgICAgIHJldHVybiBuYW1lCi0gICAgICAgIHJl
dHVybiBOb25lCi0KICAgICBkZWYgZ2V0X3Rlc3Rfc2V0KHNlbGYsIG1vZGlmaWVyLCBleHBlY3Rh
dGlvbj1Ob25lLCBpbmNsdWRlX3NraXBzPVRydWUpOgogICAgICAgICBpZiBleHBlY3RhdGlvbiBp
cyBOb25lOgogICAgICAgICAgICAgdGVzdHMgPSBzZWxmLl9tb2RpZmllcl90b190ZXN0c1ttb2Rp
Zmllcl0KQEAgLTM5OCw2ICszODgsOSBAQAogICAgICAgICAgIG5vCiAgICAgICAgICIiIgogCisg
ICAgICAgICMgRklYTUUoZHByYW5rZSkgLSB1cGRhdGUgdGhpcworICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEV4Y2VwdGlvbigncmVtb3ZlX3BsYXRmb3JtX2Zyb21fZmlsZScpCisKICAgICAg
ICAgbmV3X2ZpbGUgPSBzZWxmLl9wYXRoICsgJy5uZXcnCiAgICAgICAgIGxvZ2dpbmcuZGVidWco
J09yaWdpbmFsIGZpbGU6ICIlcyInLCBzZWxmLl9wYXRoKQogICAgICAgICBsb2dnaW5nLmRlYnVn
KCdOZXcgZmlsZTogIiVzIicsIG5ld19maWxlKQpAQCAtNDMwLDExICs0MjMsMTIgQEAKICAgICAg
ICAgICAgIGVsaWYgYWN0aW9uID09IEFERF9QTEFURk9STVNfRVhDRVBUX1RISVM6CiAgICAgICAg
ICAgICAgICAgcGFydHMgPSBsaW5lLnNwbGl0KCc6JykKICAgICAgICAgICAgICAgICBuZXdfb3B0
aW9ucyA9IHBhcnRzWzBdCi0gICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5QTEFURk9STVM6
Ci0gICAgICAgICAgICAgICAgICAgIHAgPSBwLnVwcGVyKCk7CisgICAgICAgICAgICAgICAgZm9y
IHAgaW4gc2VsZi5fcG9ydC50ZXN0X3BsYXRmb3JtX25hbWVzKCk6CisgICAgICAgICAgICAgICAg
ICAgIHAgPSBwLnVwcGVyKCkKICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgdGVtcCBz
b2x1dGlvbiBmb3IgcmViYXNlbGluaW5nIHRvb2wuCiAgICAgICAgICAgICAgICAgICAgICMgRG8g
bm90IGFkZCB0YWdzIFdJTi03IGFuZCBXSU4tVklTVEEgdG8gdGVzdCBleHBlY3RhdGlvbnMKLSAg
ICAgICAgICAgICAgICAgICAgIyBpZiB0aGUgb3JpZ2luYWwgbGluZSBkb2VzIG5vdCBzcGVjaWZ5
IHRoZSBwbGF0Zm9ybSBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgICMgaWYgdGhlIG9yaWdp
bmFsIGxpbmUgZG9lcyBub3Qgc3BlY2lmeSB0aGUgcGxhdGZvcm0KKyAgICAgICAgICAgICAgICAg
ICAgIyBvcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICMgVE9ETyh2aWN0b3J3KTogUmVtb3Zl
IFdJTi1WSVNUQSBhbmQgV0lOLTcgb25jZSB3ZSBoYXZlCiAgICAgICAgICAgICAgICAgICAgICMg
cmVsaWFibGUgV2luIDcgYW5kIFdpbiBWaXN0YSBidWlsZGJvdHMgc2V0dXAuCiAgICAgICAgICAg
ICAgICAgICAgIGlmIG5vdCBwIGluIChwbGF0Zm9ybS51cHBlcigpLCAnV0lOLVZJU1RBJywgJ1dJ
Ti03Jyk6CkBAIC01MTcsNyArNTExLDcgQEAKIAogICAgICAgICBoYXNfYW55X3BsYXRmb3JtID0g
RmFsc2UKICAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgotICAgICAgICAgICAgaWYgb3B0
aW9uIGluIHNlbGYuUExBVEZPUk1TOgorICAgICAgICAgICAgaWYgb3B0aW9uIGluIHNlbGYuX3Bv
cnQudGVzdF9wbGF0Zm9ybV9uYW1lcygpOgogICAgICAgICAgICAgICAgIGhhc19hbnlfcGxhdGZv
cm0gPSBUcnVlCiAgICAgICAgICAgICAgICAgaWYgbm90IG9wdGlvbiA9PSBwbGF0Zm9ybToKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFJFTU9WRV9QTEFURk9STQpAQCAtNTQ3LDcgKzU0MSw3
IEBACiAgICAgICAgIGZvciBvcHRpb24gaW4gb3B0aW9uczoKICAgICAgICAgICAgIGlmIG9wdGlv
biBpbiBzZWxmLk1PRElGSUVSUzoKICAgICAgICAgICAgICAgICBtb2RpZmllcnMuYWRkKG9wdGlv
bikKLSAgICAgICAgICAgIGVsaWYgb3B0aW9uIGluIHNlbGYuUExBVEZPUk1TOgorICAgICAgICAg
ICAgZWxpZiBvcHRpb24gaW4gc2VsZi5fcG9ydC50ZXN0X3BsYXRmb3JtX25hbWVzKCk6CiAgICAg
ICAgICAgICAgICAgaGFzX2FueV9wbGF0Zm9ybSA9IFRydWUKICAgICAgICAgICAgIGVsaWYgb3B0
aW9uLnN0YXJ0c3dpdGgoJ2J1ZycpOgogICAgICAgICAgICAgICAgIGhhc19idWdfaWQgPSBUcnVl
CkBAIC02MzIsNyArNjI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgJ2luZGVmaW5pdGVseSwg
dGhlbiBpdCBzaG91bGQgYmUganVzdCB0aW1lb3V0LicsCiAgICAgICAgICAgICAgICAgICAgIHRl
c3RfbGlzdF9wYXRoKQogCi0gICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4ocGF0
aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCksCisgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5w
YXRoLmpvaW4oc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdF9saXN0X3BhdGgpCiAgICAgICAgICAgICBmdWxsX3Bh
dGggPSBvcy5wYXRoLm5vcm1wYXRoKGZ1bGxfcGF0aCkKICAgICAgICAgICAgICMgV2ViS2l0J3Mg
d2F5IG9mIHNraXBwaW5nIHRlc3RzIGlzIHRvIGFkZCBhIC1kaXNhYmxlZCBzdWZmaXguCkBAIC02
OTUsNyArNjg5LDcgQEAKICAgICBkZWYgX2V4cGFuZF90ZXN0cyhzZWxmLCB0ZXN0X2xpc3RfcGF0
aCk6CiAgICAgICAgICIiIkNvbnZlcnQgdGhlIHRlc3Qgc3BlY2lmaWNhdGlvbiB0byBhbiBhYnNv
bHV0ZSwgbm9ybWFsaXplZAogICAgICAgICBwYXRoIGFuZCBtYWtlIHN1cmUgZGlyZWN0b3JpZXMg
ZW5kIHdpdGggdGhlIE9TIHBhdGggc2VwYXJhdG9yLiIiIgotICAgICAgICBwYXRoID0gb3MucGF0
aC5qb2luKHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RzX2RpcigpLCB0ZXN0X2xpc3RfcGF0aCkKKyAg
ICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwg
dGVzdF9saXN0X3BhdGgpCiAgICAgICAgIHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCiAg
ICAgICAgIHBhdGggPSBzZWxmLl9maXhfZGlyKHBhdGgpCiAKSW5kZXg6IFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21p
dW1fd2Via2l0X3Rlc3RzLnB5CShyZXZpc2lvbiA1NDMyOCkKKysrIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC01NCw3ICs1NCw3IEBACiBpbXBvcnQgd2ViYnJvd3NlcgogaW1wb3J0IHppcGZp
bGUKIAotZnJvbSBwb3J0IGltcG9ydCBwYXRoX3V0aWxzCitmcm9tIGxheW91dF9wYWNrYWdlIGlt
cG9ydCBwYXRoX3V0aWxzCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0
aW9ucwogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCBpbWFnZV9kaWZmCiBmcm9tIHRlc3RfdHlwZXMg
aW1wb3J0IHRleHRfZGlmZgpJbmRleDogQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIENoYW5nZUxv
ZwkocmV2aXNpb24gNTQzMjgpCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDQyIEBACiAKIDIwMTAtMDItMDMgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5v
cmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVm
YWN0b3IgdGhlIHBvcnQgcGFja2FnZSBpbnRvIGFuIG9iamVjdC1vcmllbnRlZCBzdHlsZSBhbmQg
bWVyZ2UKKyAgICAgICAgcGF0aF91dGlscyBpbnRvIGl0LiBXZSBhZGQgYSAnYmFzZScgYW5kIGEg
J2Nocm9taXVtJyBvYmplY3QgdG8gdGhlCisgICAgICAgIHBvcnQgcGFja2FnZTsgdGhpcyB3aWxs
IGFsbG93IHVzIHRvIGVhc2lseSBhZGQgbmV3IHBvcnRzIChsaWtlCisgICAgICAgIFdlYktpdCBN
YWMpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NDUxMQorCisgICAgICAgICogU2NyaXB0cy9yZWJhc2VsaW5lLWNocm9taXVtLXdlYmtpdC10ZXN0
czoKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVzdHM6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlv
dXRfcmVzdWx0c19nZW5lcmF0b3IucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4
cGVjdGF0aW9ucy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfc2hlbGxfdGhyZWFkLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvX19pbml0X18ucHk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2
ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNl
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5OgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5Ogor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGF0aF91dGlscy5w
eTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3dlYnNvY2tldF9zZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5
X2ltYWdlX2RpZmYucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
dGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHk6CisKKzIwMTAt
MDItMDMgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUnVi
YmVyLXN0YW1wZWQgYnkgRXJpYyBTaWVkZWwuCiAKICAgICAgICAgUmVuYW1lIGZpbGVzIGFzIHBh
cnQgb2YgcmVmYWN0b3JpbmcgdGhlIGxheW91dF90ZXN0cyBwYWNrYWdlLiBBbGwKQEAgLTc1LDcg
KzExMSw2IEBACiAgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90
eXBlcy90ZXN0X3R5cGVfYmFzZS5weToKICAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy90ZXN0X3R5cGVzL3RleHRfZGlmZi5weToKIAotCiAyMDEwLTAyLTAzICBDc2FiYSBP
c3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQg
YnkgRXJpYyBTZWlkZWwuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48161</attachid>
            <date>2010-02-04 13:16:18 -0800</date>
            <delta_ts>2010-02-05 15:54:35 -0800</delta_ts>
            <desc>resubmitted patch 3 of 4; not sure why the bots didn&apos;t like the last one</desc>
            <filename>bug-34511-20100204131617.patch</filename>
            <type>text/plain</type>
            <size>191266</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU0MzY0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDQyIEBACiAKIDIwMTAtMDItMDMgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgdGhlIHBvcnQgcGFja2FnZSBpbnRvIGFuIG9iamVj
dC1vcmllbnRlZCBzdHlsZSBhbmQgbWVyZ2UKKyAgICAgICAgcGF0aF91dGlscyBpbnRvIGl0LiBX
ZSBhZGQgYSAnYmFzZScgYW5kIGEgJ2Nocm9taXVtJyBvYmplY3QgdG8gdGhlCisgICAgICAgIHBv
cnQgcGFja2FnZTsgdGhpcyB3aWxsIGFsbG93IHVzIHRvIGVhc2lseSBhZGQgbmV3IHBvcnRzIChs
aWtlCisgICAgICAgIFdlYktpdCBNYWMpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNDUxMQorCisgICAgICAgICogU2NyaXB0cy9yZWJhc2VsaW5l
LWNocm9taXVtLXdlYmtpdC10ZXN0czoKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1jaHJvbWl1bS13
ZWJraXQtdGVzdHM6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRz
X2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfc2hl
bGxfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvX19pbml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5Ogor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2lu
LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9z
ZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9o
dHRwX3NlcnZlcl9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvcGF0aF91dGlscy5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVz
dHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX2Nocm9t
aXVtX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdlX2RpZmYucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5OgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2Uu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90
ZXh0X2RpZmYucHk6CisKKzIwMTAtMDItMDMgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1
bS5vcmc+CisKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgRXJpYyBTaWVkZWwuCiAKICAgICAg
ICAgUmVuYW1lIGZpbGVzIGFzIHBhcnQgb2YgcmVmYWN0b3JpbmcgdGhlIGxheW91dF90ZXN0cyBw
YWNrYWdlLiBBbGwKQEAgLTE0OCw3ICsxODQsNiBAQAogICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHk6CiAgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHk6CiAK
LQogMjAxMC0wMi0wMyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViS2l0VG9vbHMv
U2NyaXB0cy9yZWJhc2VsaW5lLWNocm9taXVtLXdlYmtpdC10ZXN0cwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9TY3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0td2Via2l0LXRlc3RzCShyZXZp
c2lvbiA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13
ZWJraXQtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTExLDcgKzExLDcgQEAKICMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgogIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCiAjIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgQ2hyb21p
dW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAjCklu
ZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVzdHMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tY2hyb21pdW0td2Via2l0LXRlc3RzCShy
ZXZpc2lvbiA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWNocm9taXVtLXdlYmtp
dC10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtMTEsNyArMTEsNyBAQAogIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CiAjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBu
YW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICMKQEAgLTMz
LDYgKzMzLDcgQEAgaW1wb3J0IHN5cwogCiBzeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKG9z
LnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIndlYmtpdHB5IiwgImxheW91dF90ZXN0cyIpKQorc3lzLnBhdGgu
YXBwZW5kKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5
cy5hcmd2WzBdKSkpKQogaW1wb3J0IHJ1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMKIAogaWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxp
bmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CShyZXZpc2lvbiA1NDM2NCkKKysrIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Vi
a2l0X3Rlc3RzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIGltcG9ydCB1cmxs
aWIKIGltcG9ydCB3ZWJicm93c2VyCiBpbXBvcnQgemlwZmlsZQogCi1mcm9tIHBvcnQgaW1wb3J0
IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHBhdGhfdXRpbHMKIGZyb20g
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiBmcm9tIHRlc3RfdHlwZXMg
aW1wb3J0IGltYWdlX2RpZmYKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGV4dF9kaWZmCkluZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fY2hyb21pdW1f
d2Via2l0X3Rlc3RzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkJKHJldmlzaW9uIDU0
MzY0KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX2No
cm9taXVtX3dlYmtpdF90ZXN0cy5weQkod29ya2luZyBjb3B5KQpAQCAtNTQsMzEgKzU0LDI0IEBA
IGltcG9ydCBRdWV1ZQogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHJlCiBpbXBvcnQgc2h1dGlsCi1p
bXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCB0cmFjZWJh
Y2sKIAoraW1wb3J0IHNpbXBsZWpzb24KKwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVz
dF9leHBlY3RhdGlvbnMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fbGF5b3V0X3Jl
c3VsdHNfZ2VuZXJhdG9yCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBtZXRlcmVkX3N0cmVh
bQogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcwogZnJvbSBsYXlvdXRf
cGFja2FnZSBpbXBvcnQgdGVzdF9zaGVsbF90aHJlYWQKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1w
b3J0IHRlc3RfZmlsZXMKLQotaW1wb3J0IHBvcnQKLWZyb20gcG9ydCBpbXBvcnQgYXBhY2hlX2h0
dHBfc2VydmVyCi1mcm9tIHBvcnQgaW1wb3J0IGh0dHBfc2VydmVyCi1mcm9tIHBvcnQgaW1wb3J0
IHBhdGhfdXRpbHMKLWZyb20gcG9ydCBpbXBvcnQgd2Vic29ja2V0X3NlcnZlcgotCiBmcm9tIHRl
c3RfdHlwZXMgaW1wb3J0IGZ1enp5X2ltYWdlX2RpZmYKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQg
aW1hZ2VfZGlmZgogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFzZQogZnJvbSB0
ZXN0X3R5cGVzIGltcG9ydCB0ZXh0X2RpZmYKIAotc3lzLnBhdGguYXBwZW5kKHBhdGhfdXRpbHMu
cGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JykpCi1pbXBvcnQgc2ltcGxlanNvbgoraW1wb3J0
IHBvcnQKIAogIyBJbmRpY2F0ZXMgdGhhdCB3ZSB3YW50IGRldGFpbGVkIHByb2dyZXNzIHVwZGF0
ZXMgaW4gdGhlIG91dHB1dCAocHJpbnRzCiAjIGRpcmVjdG9yeS1ieS1kaXJlY3RvcnkgZmVlZGJh
Y2spLgpAQCAtOTYsMTcgKzg5LDE2IEBAIFRlc3RFeHBlY3RhdGlvbnNGaWxlID0gdGVzdF9leHBl
Y3RhdGlvbnMKIGNsYXNzIFRlc3RJbmZvOgogICAgICIiIkdyb3VwcyBpbmZvcm1hdGlvbiBhYm91
dCBhIHRlc3QgZm9yIGVhc3kgcGFzc2luZyBvZiBkYXRhLiIiIgogCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIGZpbGVuYW1lLCB0aW1lb3V0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwg
ZmlsZW5hbWUsIHRpbWVvdXQpOgogICAgICAgICAiIiJHZW5lcmF0ZXMgdGhlIFVSSSBhbmQgc3Rv
cmVzIHRoZSBmaWxlbmFtZSBhbmQgdGltZW91dCBmb3IgdGhpcyB0ZXN0LgogICAgICAgICBBcmdz
OgogICAgICAgICAgIGZpbGVuYW1lOiBGdWxsIHBhdGggdG8gdGhlIHRlc3QuCiAgICAgICAgICAg
dGltZW91dDogVGltZW91dCBmb3IgcnVubmluZyB0aGUgdGVzdCBpbiBUZXN0U2hlbGwuCiAgICAg
ICAgICAgIiIiCiAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQotICAgICAgICBzZWxm
LnVyaSA9IHBhdGhfdXRpbHMuZmlsZW5hbWVfdG9fdXJpKGZpbGVuYW1lKQorICAgICAgICBzZWxm
LnVyaSA9IHBvcnQuZmlsZW5hbWVfdG9fdXJpKGZpbGVuYW1lKQogICAgICAgICBzZWxmLnRpbWVv
dXQgPSB0aW1lb3V0Ci0gICAgICAgIGV4cGVjdGVkX2hhc2hfZmlsZSA9IHBhdGhfdXRpbHMuZXhw
ZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5jaGVja3N1bScpCisgICAgICAgIGV4cGVjdGVk
X2hhc2hfZmlsZSA9IHBvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcuY2hlY2tzdW0n
KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmltYWdlX2hhc2ggPSBvcGVuKGV4cGVj
dGVkX2hhc2hfZmlsZSwgInIiKS5yZWFkKCkKICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CkBA
IC0xNzUsMjQgKzE2NywxOSBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgTlVNX1JFVFJZX09O
X1VORVhQRUNURURfRkFJTFVSRSA9IDEKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25z
LCBtZXRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIG1ldGVyLCBwb3J0KToK
ICAgICAgICAgIiIiSW5pdGlhbGl6ZSB0ZXN0IHJ1bm5lciBkYXRhIHN0cnVjdHVyZXMuCiAKICAg
ICAgICAgQXJnczoKICAgICAgICAgICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBs
aW5lIG9wdGlvbnMKICAgICAgICAgICBtZXRlcjogYSBNZXRlcmVkU3RyZWFtIG9iamVjdCB0byBy
ZWNvcmQgdXBkYXRlcyB0by4KKyAgICAgICAgICBwb3J0OiBhbiBvYmplY3QgaW1wbGVtZW50aW5n
IHBvcnQtc3BlY2lmaWMgaG9va3MKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX29wdGlvbnMg
PSBvcHRpb25zCiAgICAgICAgIHNlbGYuX21ldGVyID0gbWV0ZXIKIAotICAgICAgICBpZiBvcHRp
b25zLnVzZV9hcGFjaGU6Ci0gICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9IGFwYWNoZV9o
dHRwX3NlcnZlci5MYXlvdXRUZXN0QXBhY2hlSHR0cGQoCi0gICAgICAgICAgICAgICAgb3B0aW9u
cy5yZXN1bHRzX2RpcmVjdG9yeSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX2h0
dHBfc2VydmVyID0gaHR0cF9zZXJ2ZXIuTGlnaHR0cGQob3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9y
eSkKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKIAotICAgICAgICBzZWxmLl93ZWJzb2NrZXRf
c2VydmVyID0gd2Vic29ja2V0X3NlcnZlci5QeVdlYlNvY2tldCgKLSAgICAgICAgICAgIG9wdGlv
bnMucmVzdWx0c19kaXJlY3RvcnkpCiAgICAgICAgICMgZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVk
IHRvIGluc3RhbGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4KICAgICAgICAgIyBzZWxmLl93ZWJz
b2NrZXRfc2VjdXJlX3NlcnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCiAgICAg
ICAgICMgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIHVzZV90bHM9VHJ1ZSwgcG9y
dD05MzIzKQpAQCAtMjAzLDggKzE5MCw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICMg
YSBzZXQgb2YgdGVzdCBmaWxlcywgYW5kIHRoZSBzYW1lIHRlc3RzIGFzIGEgbGlzdAogICAgICAg
ICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KCkKICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0
ID0gTm9uZQotICAgICAgICBzZWxmLl9maWxlX2RpciA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jh
c2UoJ3dlYmtpdCcsICd0b29scycsCi0gICAgICAgICAgICAnbGF5b3V0X3Rlc3RzJykKICAgICAg
ICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gUXVldWUuUXVldWUoKQogCiAgICAgICAgICMgVGhlc2Ug
YXJlIHVzZWQgZm9yIC0tbG9nIGRldGFpbGVkLXByb2dyZXNzIHRvIHRyYWNrIHN0YXR1cyBieQpA
QCAtMjE5LDE4ICsyMDQsMTYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygiZmx1c2hpbmcgc3RkZXJyIikKICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCiAgICAg
ICAgIGxvZ2dpbmcuZGVidWcoInN0b3BwaW5nIGh0dHAgc2VydmVyIikKLSAgICAgICAgIyBTdG9w
IHRoZSBodHRwIHNlcnZlci4KLSAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIuc3RvcCgpCi0gICAg
ICAgICMgU3RvcCB0aGUgV2ViIFNvY2tldCAvIFdlYiBTb2NrZXQgU2VjdXJlIHNlcnZlcnMuCi0g
ICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIuc3RvcCgpCi0gICAgICAgICMgc2VsZi5fd2Vi
c29ja2V0X3NlY3VyZV9zZXJ2ZXIuU3RvcCgpCisgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRw
X3NlcnZlcigpCisgICAgICAgIGxvZ2dpbmcuZGVidWcoInN0b3BwaW5nIHdlYnNvY2tldCBzZXJ2
ZXIiKQorICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCiAKICAgICBk
ZWYgZ2F0aGVyX2ZpbGVfcGF0aHMoc2VsZiwgcGF0aHMpOgogICAgICAgICAiIiJGaW5kIGFsbCB0
aGUgZmlsZXMgdG8gdGVzdC4KIAogICAgICAgICBBcmdzOgogICAgICAgICAgIHBhdGhzOiBhIGxp
c3Qgb2YgZ2xvYnMgdG8gdXNlIGluc3RlYWQgb2YgdGhlIGRlZmF1bHRzLiIiIgotICAgICAgICBz
ZWxmLl90ZXN0X2ZpbGVzID0gdGVzdF9maWxlcy5nYXRoZXJfdGVzdF9maWxlcyhwYXRocykKKyAg
ICAgICAgc2VsZi5fdGVzdF9maWxlcyA9IHRlc3RfZmlsZXMuZ2F0aGVyX3Rlc3RfZmlsZXMoc2Vs
Zi5fcG9ydCwgcGF0aHMpCiAKICAgICBkZWYgcGFyc2VfZXhwZWN0YXRpb25zKHNlbGYsIHBsYXRm
b3JtLCBpc19kZWJ1Z19tb2RlKToKICAgICAgICAgIiIiUGFyc2UgdGhlIGV4cGVjdGF0aW9ucyBm
cm9tIHRoZSB0ZXN0X2xpc3QgZmlsZXMgYW5kIHJldHVybiBhIGRhdGEKQEAgLTI0Miw5ICsyMjUs
MTAgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIHRlc3RfZmlsZXMgPSBzZWxmLl90
ZXN0X2ZpbGVzCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25z
ID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9ucyh0ZXN0X2ZpbGVzLAotICAgICAg
ICAgICAgICAgIHNlbGYuX2ZpbGVfZGlyLCBwbGF0Zm9ybSwgaXNfZGVidWdfbW9kZSwKLSAgICAg
ICAgICAgICAgICBzZWxmLl9vcHRpb25zLmxpbnRfdGVzdF9maWxlcykKKyAgICAgICAgICAgIGV4
cGVjdGF0aW9uc19zdHIgPSBzZWxmLl9wb3J0LnRlc3RfZXhwZWN0YXRpb25zKCkKKyAgICAgICAg
ICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlv
bnMoCisgICAgICAgICAgICAgICAgc2VsZi5fcG9ydCwgdGVzdF9maWxlcywgZXhwZWN0YXRpb25z
X3N0ciwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybSwgaXNfZGVidWdfbW9kZSwgc2VsZi5fb3B0
aW9ucy5saW50X3Rlc3RfZmlsZXMpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0YXRp
b25zCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKICAgICAgICAgICAgIGlmIHNlbGYu
X29wdGlvbnMubGludF90ZXN0X2ZpbGVzOgpAQCAtMzU5LDcgKzM0Myw4IEBAIGNsYXNzIFRlc3RS
dW5uZXI6CiAgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KHNlbGYuX3Rlc3RfZmls
ZXNfbGlzdCkKIAogICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zID0gc2VsZi5wYXJzZV9l
eHBlY3RhdGlvbnMoCi0gICAgICAgICAgICAgICAgcGF0aF91dGlscy5wbGF0Zm9ybV9uYW1lKCks
IHNlbGYuX29wdGlvbnMudGFyZ2V0ID09ICdEZWJ1ZycpCisgICAgICAgICAgICAgICAgc2VsZi5f
cG9ydC50ZXN0X3BsYXRmb3JtX25hbWUoKSwKKyAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25z
LnRhcmdldCA9PSAnRGVidWcnKQogCiAgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0
KGZpbGVzKQogICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gZmlsZXMKQEAgLTQy
NCw4ICs0MDksOSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBpcyB1c2VkIGZvciBsb29r
aW5nIHVwIHRoZSB0aW1lb3V0IHZhbHVlIChpbiBtcykgdG8gdXNlIGZvciB0aGUgZ2l2ZW4KICAg
ICAgICAgdGVzdC4iIiIKICAgICAgICAgaWYgc2VsZi5fZXhwZWN0YXRpb25zLmhhc19tb2RpZmll
cih0ZXN0X2ZpbGUsIHRlc3RfZXhwZWN0YXRpb25zLlNMT1cpOgotICAgICAgICAgICAgcmV0dXJu
IFRlc3RJbmZvKHRlc3RfZmlsZSwgc2VsZi5fb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zKQotICAg
ICAgICByZXR1cm4gVGVzdEluZm8odGVzdF9maWxlLCBzZWxmLl9vcHRpb25zLnRpbWVfb3V0X21z
KQorICAgICAgICAgICAgcmV0dXJuIFRlc3RJbmZvKHNlbGYuX3BvcnQsIHRlc3RfZmlsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnNsb3dfdGltZV9vdXRfbXMp
CisgICAgICAgIHJldHVybiBUZXN0SW5mbyhzZWxmLl9wb3J0LCB0ZXN0X2ZpbGUsIHNlbGYuX29w
dGlvbnMudGltZV9vdXRfbXMpCiAKICAgICBkZWYgX2dldF90ZXN0X2ZpbGVfcXVldWUoc2VsZiwg
dGVzdF9maWxlcyk6CiAgICAgICAgICIiIkNyZWF0ZSB0aGUgdGhyZWFkIHNhZmUgcXVldWUgb2Yg
bGlzdHMgb2YgKHRlc3QgZmlsZW5hbWVzLCB0ZXN0IFVSSXMpCkBAIC00OTAsNiArNDc2LDcgQEAg
Y2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgIiIiUmV0dXJucyB0aGUgdHVwbGUgb2YgYXJndW1l
bnRzIGZvciB0ZXN0cyBhbmQgZm9yIHRlc3Rfc2hlbGwuIiIiCiAgICAgICAgIHNoZWxsX2FyZ3Mg
PSBbXQogICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5UZXN0QXJndW1lbnRzKCkK
KyAgICAgICAgcG5nX3BhdGggPSBOb25lCiAgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLm5v
X3BpeGVsX3Rlc3RzOgogICAgICAgICAgICAgcG5nX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5f
b3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJwbmdfcmVzdWx0JXMucG5nIiAlIGluZGV4KQpAQCAtNTA2LDcgKzQ5Myw3IEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZ3BfZmF1bHRfZXJyb3Jf
Ym94OgogICAgICAgICAgICAgc2hlbGxfYXJncy5hcHBlbmQoJy0tZ3AtZmF1bHQtZXJyb3ItYm94
JykKIAotICAgICAgICByZXR1cm4gKHRlc3RfYXJncywgc2hlbGxfYXJncykKKyAgICAgICAgcmV0
dXJuICh0ZXN0X2FyZ3MsIHBuZ19wYXRoLCBzaGVsbF9hcmdzKQogCiAgICAgZGVmIF9jb250YWlu
c190ZXN0cyhzZWxmLCBzdWJkaXIpOgogICAgICAgICBmb3IgdGVzdF9maWxlIGluIHNlbGYuX3Rl
c3RfZmlsZXNfbGlzdDoKQEAgLTUxNCwyMyArNTAxLDEyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBk
ZWYgX2luc3RhbnRpYXRlX3Rlc3Rfc2hlbGxfdGhyZWFkcyhzZWxmLCB0ZXN0X3NoZWxsX2JpbmFy
eSwgdGVzdF9maWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRfc3VtbWFyeSk6CisgICAgZGVmIF9pbnN0YW50aWF0ZV90ZXN0X3NoZWxsX3RocmVhZHMoc2Vs
ZiwgdGVzdF9maWxlcywgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJJbnN0YW50aXRhdGVz
IGFuZCBzdGFydHMgdGhlIFRlc3RTaGVsbFRocmVhZChzKS4KIAogICAgICAgICBSZXR1cm46CiAg
ICAgICAgICAgVGhlIGxpc3Qgb2YgdGhyZWFkcy4KICAgICAgICAgIiIiCi0gICAgICAgIHRlc3Rf
c2hlbGxfY29tbWFuZCA9IFt0ZXN0X3NoZWxsX2JpbmFyeV0KLQotICAgICAgICBpZiBzZWxmLl9v
cHRpb25zLndyYXBwZXI6Ci0gICAgICAgICAgICAjIFRoaXMgc3BsaXQoKSBpc24ndCByZWFsbHkg
d2hhdCB3ZSB3YW50IC0tIGl0IGluY29ycmVjdGx5IHdpbGwKLSAgICAgICAgICAgICMgc3BsaXQg
cXVvdGVkIHN0cmluZ3Mgd2l0aGluIHRoZSB3cmFwcGVyIGFyZ3VtZW50IC0tIGJ1dCBpbgotICAg
ICAgICAgICAgIyBwcmFjdGljZSBpdCBzaG91bGRuJ3QgY29tZSB1cCBhbmQgdGhlIC0taGVscCBv
dXRwdXQgd2FybnMKLSAgICAgICAgICAgICMgYWJvdXQgaXQgYW55d2F5LgotICAgICAgICAgICAg
dGVzdF9zaGVsbF9jb21tYW5kID0gKHNlbGYuX29wdGlvbnMud3JhcHBlci5zcGxpdCgpICsKLSAg
ICAgICAgICAgICAgICB0ZXN0X3NoZWxsX2NvbW1hbmQpCi0KICAgICAgICAgZmlsZW5hbWVfcXVl
dWUgPSBzZWxmLl9nZXRfdGVzdF9maWxlX3F1ZXVlKHRlc3RfZmlsZXMpCiAKICAgICAgICAgIyBJ
bnN0YW50aWF0ZSBUZXN0U2hlbGxUaHJlYWRzIGFuZCBzdGFydCB0aGVtLgpAQCAtNTM5LDE1ICs1
MTUsMTYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICMgQ3JlYXRlIHNlcGFyYXRl
IFRlc3RUeXBlcyBpbnN0YW5jZXMgZm9yIGVhY2ggdGhyZWFkLgogICAgICAgICAgICAgdGVzdF90
eXBlcyA9IFtdCiAgICAgICAgICAgICBmb3IgdCBpbiBzZWxmLl90ZXN0X3R5cGVzOgotICAgICAg
ICAgICAgICAgIHRlc3RfdHlwZXMuYXBwZW5kKHQoc2VsZi5fb3B0aW9ucy5wbGF0Zm9ybSwKKyAg
ICAgICAgICAgICAgICB0ZXN0X3R5cGVzLmFwcGVuZCh0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlv
bnMucGxhdGZvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9v
cHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKIAotICAgICAgICAgICAgdGVzdF9hcmdzLCBzaGVs
bF9hcmdzID0gc2VsZi5fZ2V0X3Rlc3Rfc2hlbGxfYXJncyhpKQotICAgICAgICAgICAgdGhyZWFk
ID0gdGVzdF9zaGVsbF90aHJlYWQuVGVzdFNoZWxsVGhyZWFkKGZpbGVuYW1lX3F1ZXVlLAorICAg
ICAgICAgICAgdGVzdF9hcmdzLCBwbmdfcGF0aCwgc2hlbGxfYXJncyA9IHNlbGYuX2dldF90ZXN0
X3NoZWxsX2FyZ3MoaSkKKyAgICAgICAgICAgIHRocmVhZCA9IHRlc3Rfc2hlbGxfdGhyZWFkLlRl
c3RTaGVsbFRocmVhZChzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lX3F1ZXVlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0X3NoZWxsX2NvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdF90eXBlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2FyZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX3BhdGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGxf
YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9vcHRpb25zKQogICAgICAgICAgICAgaWYgc2VsZi5faXNfc2luZ2xlX3RocmVh
ZGVkKCk6CkBAIC01NTgsMTkgKzUzNSwxMSBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAg
IHJldHVybiB0aHJlYWRzCiAKLSAgICBkZWYgX3N0b3BfbGF5b3V0X3Rlc3RfaGVscGVyKHNlbGYs
IHByb2MpOgotICAgICAgICAiIiJTdG9wIHRoZSBsYXlvdXQgdGVzdCBoZWxwZXIgYW5kIGNsb3Nl
cyBpdCBkb3duLiIiIgotICAgICAgICBpZiBwcm9jOgotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1
ZygiU3RvcHBpbmcgbGF5b3V0IHRlc3QgaGVscGVyIikKLSAgICAgICAgICAgIHByb2Muc3RkaW4u
d3JpdGUoInhcbiIpCi0gICAgICAgICAgICBwcm9jLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAg
IHByb2Mud2FpdCgpCi0KICAgICBkZWYgX2lzX3NpbmdsZV90aHJlYWRlZChzZWxmKToKICAgICAg
ICAgIiIiUmV0dXJucyB3aGV0aGVyIHdlIHNob3VsZCBydW4gYWxsIHRoZSB0ZXN0cyBpbiB0aGUg
bWFpbiB0aHJlYWQuIiIiCiAgICAgICAgIHJldHVybiBpbnQoc2VsZi5fb3B0aW9ucy5udW1fdGVz
dF9zaGVsbHMpID09IDEKIAotICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIHRlc3Rfc2hlbGxfYmlu
YXJ5LCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICBkZWYgX3J1bl90ZXN0cyhzZWxm
LCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiUnVucyB0aGUgdGVzdHMg
aW4gdGhlIGZpbGVfbGlzdC4KIAogICAgICAgICBSZXR1cm46IEEgdHVwbGUgKGZhaWx1cmVzLCB0
aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLApAQCAtNTg0LDkgKzU1Myw4IEBAIGNsYXNzIFRl
c3RSdW5uZXI6CiAgICAgICAgICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwg
dGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1lfQogICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6
IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKICAgICAgICAgIiIi
Ci0gICAgICAgIHRocmVhZHMgPSBzZWxmLl9pbnN0YW50aWF0ZV90ZXN0X3NoZWxsX3RocmVhZHMo
dGVzdF9zaGVsbF9iaW5hcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsZV9saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICB0aHJlYWRzID0g
c2VsZi5faW5zdGFudGlhdGVfdGVzdF9zaGVsbF90aHJlYWRzKGZpbGVfbGlzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3Vt
bWFyeSkKIAogICAgICAgICAjIFdhaXQgZm9yIHRoZSB0aHJlYWRzIHRvIGZpbmlzaCBhbmQgY29s
bGVjdCB0ZXN0IGZhaWx1cmVzLgogICAgICAgICBmYWlsdXJlcyA9IHt9CkBAIC02MTIsNyArNTgw
LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0
OgogICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgogICAgICAgICAgICAgICAgIHRo
cmVhZC5jYW5jZWwoKQotICAgICAgICAgICAgc2VsZi5fc3RvcF9sYXlvdXRfdGVzdF9oZWxwZXIo
bGF5b3V0X3Rlc3RfaGVscGVyX3Byb2MpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaGVs
cGVyKCkKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoK
ICAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciBhIFRlc3RTaGVsbFRocmVhZCBkaWVkIGJlZm9y
ZSBub3JtYWwgY29tcGxldGlvbi4KQEAgLTY0Miw0MiArNjEwLDIwIEBAIGNsYXNzIFRlc3RSdW5u
ZXI6CiAgICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0X2ZpbGVzOgogICAgICAgICAgICAgcmV0dXJu
IDAKICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIHRlc3Rfc2hlbGxf
YmluYXJ5ID0gcGF0aF91dGlscy50ZXN0X3NoZWxsX3BhdGgoc2VsZi5fb3B0aW9ucy50YXJnZXQp
CiAKICAgICAgICAgIyBTdGFydCB1cCBhbnkgaGVscGVyIG5lZWRlZAotICAgICAgICBsYXlvdXRf
dGVzdF9oZWxwZXJfcHJvYyA9IE5vbmUKICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMubm9f
cGl4ZWxfdGVzdHM6Ci0gICAgICAgICAgICBoZWxwZXJfcGF0aCA9IHBhdGhfdXRpbHMubGF5b3V0
X3Rlc3RfaGVscGVyX3BhdGgoCi0gICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy50YXJnZXQp
Ci0gICAgICAgICAgICBpZiBsZW4oaGVscGVyX3BhdGgpOgotICAgICAgICAgICAgICAgIGxvZ2dp
bmcuZGVidWcoIlN0YXJ0aW5nIGxheW91dCBoZWxwZXIgJXMiICUgaGVscGVyX3BhdGgpCi0gICAg
ICAgICAgICAgICAgbGF5b3V0X3Rlc3RfaGVscGVyX3Byb2MgPSBzdWJwcm9jZXNzLlBvcGVuKAot
ICAgICAgICAgICAgICAgICAgICBbaGVscGVyX3BhdGhdLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUs
Ci0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1Ob25l
KQotICAgICAgICAgICAgICAgIGlzX3JlYWR5ID0gbGF5b3V0X3Rlc3RfaGVscGVyX3Byb2Muc3Rk
b3V0LnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgaXNfcmVhZHkuc3RhcnRzd2l0
aCgncmVhZHknKToKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigibGF5b3V0X3Rl
c3RfaGVscGVyIGZhaWxlZCB0byBiZSByZWFkeSIpCi0KLSAgICAgICAgIyBDaGVjayB0aGF0IHRo
ZSBzeXN0ZW0gZGVwZW5kZW5jaWVzICh0aGVtZXMsIGZvbnRzLCAuLi4pIGFyZSBjb3JyZWN0Lgot
ICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5ub2NoZWNrX3N5c19kZXBzOgotICAgICAgICAg
ICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oW3Rlc3Rfc2hlbGxfYmluYXJ5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tY2hlY2stbGF5b3V0LXRlc3Qtc3lzLWRlcHMi
XSkKLSAgICAgICAgICAgIGlmIHByb2Mud2FpdCgpICE9IDA6Ci0gICAgICAgICAgICAgICAgbG9n
Z2luZy5pbmZvKCJBYm9ydGluZyBiZWNhdXNlIHN5c3RlbSBkZXBlbmRlbmNpZXMgY2hlY2sgIgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLlxuIFRvIG92ZXJyaWRlLCBpbnZv
a2Ugd2l0aCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLW5vY2hlY2stc3lzLWRl
cHMiKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBzZWxmLl9wb3J0
LnN0YXJ0X2hlbHBlcigpCiAKICAgICAgICAgaWYgc2VsZi5fY29udGFpbnNfdGVzdHMoc2VsZi5I
VFRQX1NVQkRJUik6Ci0gICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlci5zdGFydCgpCisgICAg
ICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKIAogICAgICAgICBpZiBzZWxm
Ll9jb250YWluc190ZXN0cyhzZWxmLldFQlNPQ0tFVF9TVUJESVIpOgotICAgICAgICAgICAgc2Vs
Zi5fd2Vic29ja2V0X3NlcnZlci5zdGFydCgpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0
X3dlYnNvY2tldF9zZXJ2ZXIoKQogICAgICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJl
X3NlcnZlci5TdGFydCgpCiAKICAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywg
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSAoCi0gICAgICAgICAgICBzZWxmLl9ydW5fdGVzdHMo
dGVzdF9zaGVsbF9iaW5hcnksIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KSkKKyAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0
cyhzZWxmLl90ZXN0X2ZpbGVzX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KSkKIAogICAgICAgICAjIFdl
IGV4Y2x1ZGUgdGhlIGNyYXNoZXMgZnJvbSB0aGUgbGlzdCBvZiByZXN1bHRzIHRvIHJldHJ5LCBi
ZWNhdXNlCiAgICAgICAgICMgd2Ugd2FudCB0byB0cmVhdCBldmVuIGEgcG90ZW50aWFsbHkgZmxh
a3kgY3Jhc2ggYXMgYW4gZXJyb3IuCkBAIC02ODksMTAgKzYzNSwxMCBAQCBjbGFzcyBUZXN0UnVu
bmVyOgogICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiUmV0cnlpbmcgJWQgdW5leHBlY3RlZCBm
YWlsdXJlKHMpIiAlIGxlbihmYWlsdXJlcykpCiAgICAgICAgICAgICByZXRyaWVzICs9IDEKICAg
ICAgICAgICAgIHJldHJ5X3N1bW1hcnkgPSBSZXN1bHRTdW1tYXJ5KHNlbGYuX2V4cGVjdGF0aW9u
cywgZmFpbHVyZXMua2V5cygpKQotICAgICAgICAgICAgc2VsZi5fcnVuX3Rlc3RzKHRlc3Rfc2hl
bGxfYmluYXJ5LCBmYWlsdXJlcy5rZXlzKCksIHJldHJ5X3N1bW1hcnkpCisgICAgICAgICAgICBz
ZWxmLl9ydW5fdGVzdHMoZmFpbHVyZXMua2V5cygpLCByZXRyeV9zdW1tYXJ5KQogICAgICAgICAg
ICAgZmFpbHVyZXMgPSBzZWxmLl9nZXRfZmFpbHVyZXMocmV0cnlfc3VtbWFyeSwgaW5jbHVkZV9j
cmFzaGVzPVRydWUpCiAKLSAgICAgICAgc2VsZi5fc3RvcF9sYXlvdXRfdGVzdF9oZWxwZXIobGF5
b3V0X3Rlc3RfaGVscGVyX3Byb2MpCisgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9oZWxwZXIoKQog
ICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCiAKICAgICAgICAgd3JpdGUgPSBjcmVhdGVf
bG9nZ2luZ193cml0ZXIoc2VsZi5fb3B0aW9ucywgJ3RpbWluZycpCkBAIC03NzcsNyArNzIzLDcg
QEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICBuZXh0X3Rlc3QgPSBzZWxmLl90ZXN0X2Zp
bGVzX2xpc3Rbc2VsZi5fY3VycmVudF90ZXN0X251bWJlcl0KICAgICAgICAgbmV4dF9kaXIgPSBv
cy5wYXRoLmRpcm5hbWUoCi0gICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmls
ZW5hbWUobmV4dF90ZXN0KSkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShuZXh0X3Rlc3QpKQogICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Byb2dyZXNzX3N0
ciA9PSAiIjoKICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0gIiVzOiAi
ICUgKG5leHRfZGlyKQogICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0X2RpcgpA
QCAtODAzLDcgKzc0OSw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAgICAgIG5leHRf
dGVzdCA9IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVtYmVyXQog
ICAgICAgICAgICAgbmV4dF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoCi0gICAgICAgICAgICAgICAg
cGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCisgICAgICAgICAg
ICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCiAKICAg
ICAgICAgaWYgcmVzdWx0X3N1bW1hcnkucmVtYWluaW5nOgogICAgICAgICAgICAgcmVtYWluX3N0
ciA9ICIgKCVkKSIgJSAocmVzdWx0X3N1bW1hcnkucmVtYWluaW5nKQpAQCAtODc0LDcgKzgyMCw3
IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAjIE5vdGUgdGhhdCBpZiBhIHRlc3Qg
Y3Jhc2hlZCBpbiB0aGUgb3JpZ2luYWwgcnVuLCB3ZSBpZ25vcmUKICAgICAgICAgICAgICMgd2hl
dGhlciBvciBub3QgaXQgY3Jhc2hlZCB3aGVuIHdlIHJldHJpZWQgaXQgKGlmIHdlIHJldHJpZWQg
aXQpLAogICAgICAgICAgICAgIyBhbmQgYWx3YXlzIGNvbnNpZGVyIHRoZSByZXN1bHQgbm90IGZs
YWt5LgotICAgICAgICAgICAgdGVzdCA9IHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFt
ZShmaWxlbmFtZSkKKyAgICAgICAgICAgIHRlc3QgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3Rf
ZmlsZW5hbWUoZmlsZW5hbWUpCiAgICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0
aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZyhmaWxlbmFtZSkKICAgICAgICAgICAgIGFjdHVh
bCA9IFtrZXl3b3Jkc1tyZXN1bHRdXQogCkBAIC05NDMsNyArODg5LDcgQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKICAgICAgICAgZXhwZWN0YXRpb25zX2ZpbGUuY2xvc2UoKQogCiAgICAgICAgIGpzb25f
bGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05MYXlvdXRSZXN1bHRzR2VuZXJhdG9yKAotICAg
ICAgICAgICAgc2VsZi5fb3B0aW9ucy5idWlsZGVyX25hbWUsIHNlbGYuX29wdGlvbnMuYnVpbGRf
bmFtZSwKKyAgICAgICAgICAgIHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMuYnVpbGRlcl9uYW1l
LCBzZWxmLl9vcHRpb25zLmJ1aWxkX25hbWUsCiAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmJ1
aWxkX251bWJlciwgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKICAgICAgICAgICAg
IEJVSUxERVJfQkFTRV9VUkwsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAogICAgICAgICAgICAg
c2VsZi5fZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwgc2VsZi5fdGVzdF9maWxlc19saXN0
KQpAQCAtMTExMCw3ICsxMDU2LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgd3JpdGUo
dGl0bGUpCiAgICAgICAgIGZvciB0ZXN0X3R1cGxlIGluIHRlc3RfbGlzdDoKICAgICAgICAgICAg
IGZpbGVuYW1lID0gdGVzdF90dXBsZS5maWxlbmFtZVtsZW4oCi0gICAgICAgICAgICAgICAgcGF0
aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCkpICsgMTpdCisgICAgICAgICAgICAgICAgc2VsZi5f
cG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpICsgMTpdCiAgICAgICAgICAgICBmaWxlbmFtZSA9IGZp
bGVuYW1lLnJlcGxhY2UoJ1xcJywgJy8nKQogICAgICAgICAgICAgdGVzdF9ydW5fdGltZSA9IHJv
dW5kKHRlc3RfdHVwbGUudGVzdF9ydW5fdGltZSwgMSkKICAgICAgICAgICAgIHdyaXRlKCIgICVz
IHRvb2sgJXMgc2Vjb25kcyIgJSAoZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWUpKQpAQCAtMTMyOCw3
ICsxMjc0LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgIiIiUHJpbnRzIG9uZSB1bmV4
cGVjdGVkIHRlc3QgcmVzdWx0IGxpbmUuIiIiCiAgICAgICAgIGRlc2MgPSBUZXN0RXhwZWN0YXRp
b25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlNbcmVzdWx0XVswXQogICAgICAgICBzZWxm
Ll9tZXRlci53cml0ZSgiICAlcyAtPiB1bmV4cGVjdGVkICVzXG4iICUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0KSwgZGVz
YykpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3Rf
ZmlsZW5hbWUodGVzdCksIGRlc2MpKQogCiAgICAgZGVmIF93cml0ZV9yZXN1bHRzX2h0bWxfZmls
ZShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIldyaXRlIHJlc3VsdHMuaHRtbCB3
aGljaCBpcyBhIHN1bW1hcnkgb2YgdGVzdHMgdGhhdCBmYWlsZWQuCkBAIC0xMzY2LDEyICsxMzEy
LDEyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9m
aWxlczoKICAgICAgICAgICAgIHRlc3RfZmFpbHVyZXMgPSByZXN1bHRfc3VtbWFyeS5mYWlsdXJl
cy5nZXQodGVzdF9maWxlLCBbXSkKICAgICAgICAgICAgIG91dF9maWxlLndyaXRlKCI8cD48YSBo
cmVmPSclcyc+JXM8L2E+PGJyIC8+XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAlIChw
YXRoX3V0aWxzLmZpbGVuYW1lX3RvX3VyaSh0ZXN0X2ZpbGUpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfZmlsZSkp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5fcG9ydC5maWxlbmFtZV90b191
cmkodGVzdF9maWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2ZpbGUpKSkKICAgICAgICAgICAgIGZvciBmYWls
dXJlIGluIHRlc3RfZmFpbHVyZXM6CiAgICAgICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIiZu
YnNwOyZuYnNwOyVzPGJyLz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBmYWls
dXJlLnJlc3VsdF9odG1sX291dHB1dCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2ZpbGUpKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFt
ZSh0ZXN0X2ZpbGUpKSkKICAgICAgICAgICAgIG91dF9maWxlLndyaXRlKCI8L3A+XG4iKQogCiAg
ICAgICAgICMgZm9vdGVyCkBAIC0xMzgyLDggKzEzMjgsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgog
ICAgICAgICAiIiJMYXVuY2hlcyB0aGUgdGVzdCBzaGVsbCBvcGVuIHRvIHRoZSByZXN1bHRzLmh0
bWwgcGFnZS4iIiIKICAgICAgICAgcmVzdWx0c19maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxm
Ll9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJyZXN1bHRzLmh0bWwiKQotICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFtw
YXRoX3V0aWxzLnRlc3Rfc2hlbGxfcGF0aChzZWxmLl9vcHRpb25zLnRhcmdldCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMuZmlsZW5hbWVfdG9fdXJpKHJlc3VsdHNfZmls
ZW5hbWUpXSkKKyAgICAgICAgc2VsZi5fcG9ydC5zaG93X3Jlc3VsdHNfaHRtbF9maWxlKHJlc3Vs
dHNfZmlsZW5hbWUpCiAKIAogZGVmIF9hZGRfdG9fZGljdF9vZl9saXN0cyhkaWN0LCBrZXksIHZh
bHVlKToKQEAgLTE0NDQsMTkgKzEzODksMTkgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJncyk6CiAg
ICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcHRpb25zLnRhcmdldCA9ICJSZWxlYXNlIgogCisg
ICAgcG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQorCiAgICAg
aWYgbm90IG9wdGlvbnMudXNlX2FwYWNoZToKICAgICAgICAgb3B0aW9ucy51c2VfYXBhY2hlID0g
c3lzLnBsYXRmb3JtIGluICgnZGFyd2luJywgJ2xpbnV4MicpCiAKICAgICBpZiBvcHRpb25zLnJl
c3VsdHNfZGlyZWN0b3J5LnN0YXJ0c3dpdGgoIi8iKToKICAgICAgICAgIyBBc3N1bWUgaXQncyBh
biBhYnNvbHV0ZSBwYXRoIGFuZCBub3JtYWxpemUuCi0gICAgICAgIG9wdGlvbnMucmVzdWx0c19k
aXJlY3RvcnkgPSBwYXRoX3V0aWxzLmdldF9hYnNvbHV0ZV9wYXRoKAorICAgICAgICBvcHRpb25z
LnJlc3VsdHNfZGlyZWN0b3J5ID0gcG9ydF9vYmouZ2V0X2Fic29sdXRlX3BhdGgoCiAgICAgICAg
ICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQogICAgIGVsc2U6CiAgICAgICAgICMgSWYg
aXQncyBhIHJlbGF0aXZlIHBhdGgsIG1ha2UgdGhlIG91dHB1dCBkaXJlY3RvcnkgcmVsYXRpdmUg
dG8KICAgICAgICAgIyBEZWJ1ZyBvciBSZWxlYXNlLgotICAgICAgICBiYXNlZGlyID0gcGF0aF91
dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JykKLSAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2Rp
cmVjdG9yeSA9IHBhdGhfdXRpbHMuZ2V0X2Fic29sdXRlX3BhdGgoCi0gICAgICAgICAgICBvcy5w
YXRoLmpvaW4oYmFzZWRpciwgb3B0aW9ucy50YXJnZXQsIG9wdGlvbnMucmVzdWx0c19kaXJlY3Rv
cnkpKQorICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5ID0gcG9ydF9vYmoucmVzdWx0
c19kaXJlY3RvcnkoKQogCiAgICAgaWYgb3B0aW9ucy5jbG9iYmVyX29sZF9yZXN1bHRzOgogICAg
ICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRlc3QgcmVzdWx0cyBkaXJlY3RvcmllcyBz
aW5jZSB0aGUgb3RoZXIKQEAgLTE0NjYsMTIgKzE0MTEsOSBAQCBkZWYgbWFpbihvcHRpb25zLCBh
cmdzKToKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgICAgICBzaHV0
aWwucm10cmVlKHBhdGgpCiAKLSAgICAjIEVuc3VyZSBwbGF0Zm9ybSBpcyB2YWxpZCBhbmQgZm9y
Y2UgaXQgdG8gdGhlIGZvcm0gJ2Nocm9taXVtLTxwbGF0Zm9ybT4nLgotICAgIG9wdGlvbnMucGxh
dGZvcm0gPSBwYXRoX3V0aWxzLnBsYXRmb3JtX25hbWUob3B0aW9ucy5wbGF0Zm9ybSkKLQogICAg
IGlmIG5vdCBvcHRpb25zLm51bV90ZXN0X3NoZWxsczoKICAgICAgICAgIyBUT0RPKG9qYW4pOiBJ
bnZlc3RpZ2F0ZSBwZXJmL2ZsYWtpbmVzcyBpbXBhY3Qgb2YgdXNpbmcgbnVtY29yZXMgKyAxLgot
ICAgICAgICBvcHRpb25zLm51bV90ZXN0X3NoZWxscyA9IHBvcnQuZ2V0X251bV9jb3JlcygpCisg
ICAgICAgIG9wdGlvbnMubnVtX3Rlc3Rfc2hlbGxzID0gcG9ydF9vYmoubnVtX2NvcmVzKCkKIAog
ICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsICdjb25maWcnKQogICAg
IHdyaXRlKCJSdW5uaW5nICVzIHRlc3Rfc2hlbGxzIGluIHBhcmFsbGVsIiAlIG9wdGlvbnMubnVt
X3Rlc3Rfc2hlbGxzKQpAQCAtMTQ5OSw2MiArMTQ0MSw0NiBAQCBkZWYgbWFpbihvcHRpb25zLCBh
cmdzKToKICAgICAgICAgcGF0aHMgKz0gcmVhZF90ZXN0X2ZpbGVzKG9wdGlvbnMudGVzdF9saXN0
KQogCiAgICAgIyBDcmVhdGUgdGhlIG91dHB1dCBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBhbHJl
YWR5IGV4aXN0LgotICAgIHBhdGhfdXRpbHMubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3B0aW9ucy5y
ZXN1bHRzX2RpcmVjdG9yeSkKKyAgICBwb3J0X29iai5tYXliZV9tYWtlX2RpcmVjdG9yeShvcHRp
b25zLnJlc3VsdHNfZGlyZWN0b3J5KQogICAgIG1ldGVyLnVwZGF0ZSgiR2F0aGVyaW5nIGZpbGVz
IC4uLiIpCiAKLSAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIob3B0aW9ucywgbWV0ZXIpCisg
ICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKG9wdGlvbnMsIG1ldGVyLCBwb3J0X29iaikKICAg
ICB0ZXN0X3J1bm5lci5nYXRoZXJfZmlsZV9wYXRocyhwYXRocykKIAogICAgIGlmIG9wdGlvbnMu
bGludF90ZXN0X2ZpbGVzOgogICAgICAgICAjIENyZWF0aW5nIHRoZSBleHBlY2F0aW9ucyBmb3Ig
ZWFjaCBwbGF0Zm9ybS90YXJnZXQgcGFpciBkb2VzIGFsbCB0aGUKICAgICAgICAgIyB0ZXN0IGxp
c3QgcGFyc2luZyBhbmQgZW5zdXJlcyBpdCdzIGNvcnJlY3Qgc3ludGF4IChlLmcuIG5vIGR1cGVz
KS4KLSAgICAgICAgZm9yIHBsYXRmb3JtIGluIFRlc3RFeHBlY3RhdGlvbnNGaWxlLlBMQVRGT1JN
UzoKKyAgICAgICAgZm9yIHBsYXRmb3JtIGluIHBvcnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZXMo
KToKICAgICAgICAgICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0aW9ucyhwbGF0Zm9ybSwg
aXNfZGVidWdfbW9kZT1UcnVlKQogICAgICAgICAgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0
YXRpb25zKHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlPUZhbHNlKQogICAgICAgICBwcmludCAoIklm
IHRoZXJlIGFyZSBubyBmYWlsIG1lc3NhZ2VzLCBlcnJvcnMgb3IgZXhjZXB0aW9ucywgdGhlbiB0
aGUgIgogICAgICAgICAgICAgImxpbnQgc3VjY2VlZGVkLiIpCiAgICAgICAgIHN5cy5leGl0KDAp
CiAKLSAgICB0cnk6Ci0gICAgICAgIHRlc3Rfc2hlbGxfYmluYXJ5X3BhdGggPSBwYXRoX3V0aWxz
LnRlc3Rfc2hlbGxfcGF0aChvcHRpb25zLnRhcmdldCkKLSAgICBleGNlcHQgcGF0aF91dGlscy5Q
YXRoTm90Rm91bmQ6Ci0gICAgICAgIHByaW50ICJcbkVSUk9SOiB0ZXN0X3NoZWxsIGlzIG5vdCBm
b3VuZC4gQmUgc3VyZSB0aGF0IHlvdSBoYXZlIGJ1aWx0IgotICAgICAgICBwcmludCAiaXQgYW5k
IHRoYXQgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBidWlsZC4gVGhpcyBzY3JpcHQiCi0gICAg
ICAgIHByaW50ICJ3aWxsIHJ1biB0aGUgUmVsZWFzZSBvbmUgYnkgZGVmYXVsdC4gVXNlIC0tZGVi
dWcgdG8gdXNlIHRoZSIKLSAgICAgICAgcHJpbnQgIkRlYnVnIGJ1aWxkLlxuIgotICAgICAgICBz
eXMuZXhpdCgxKQorICAgICMgQ2hlY2sgdGhhdCB0aGUgc3lzdGVtIGRlcGVuZGVuY2llcyAodGhl
bWVzLCBmb250cywgLi4uKSBhcmUgY29ycmVjdC4KKyAgICBpZiBub3Qgb3B0aW9ucy5ub2NoZWNr
X3N5c19kZXBzOgorICAgICAgICBpZiBub3QgcG9ydF9vYmouY2hlY2tfc3lzX2RlcHMoKToKKyAg
ICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRl
cihvcHRpb25zLCAiY29uZmlnIikKLSAgICB3cml0ZSgiVXNpbmcgcGxhdGZvcm0gJyVzJyIgJSBv
cHRpb25zLnBsYXRmb3JtKQorICAgIHdyaXRlKCJVc2luZyBwb3J0ICclcyciICUgcG9ydF9vYmou
bmFtZSgpKQogICAgIHdyaXRlKCJQbGFjaW5nIHRlc3QgcmVzdWx0cyBpbiAlcyIgJSBvcHRpb25z
LnJlc3VsdHNfZGlyZWN0b3J5KQogICAgIGlmIG9wdGlvbnMubmV3X2Jhc2VsaW5lOgotICAgICAg
ICB3cml0ZSgiUGxhY2luZyBuZXcgYmFzZWxpbmVzIGluICVzIiAlCi0gICAgICAgICAgICAgIHBh
dGhfdXRpbHMuY2hyb21pdW1fYmFzZWxpbmVfcGF0aChvcHRpb25zLnBsYXRmb3JtKSkKLSAgICB3
cml0ZSgiVXNpbmcgJXMgYnVpbGQgYXQgJXMiICUgKG9wdGlvbnMudGFyZ2V0LCB0ZXN0X3NoZWxs
X2JpbmFyeV9wYXRoKSkKKyAgICAgICAgd3JpdGUoIlBsYWNpbmcgbmV3IGJhc2VsaW5lcyBpbiAl
cyIgJSBwb3J0X29iai5iYXNlbGluZV9wYXRoKCkpCisgICAgd3JpdGUoIlVzaW5nICVzIGJ1aWxk
IiAlIG9wdGlvbnMudGFyZ2V0KQogICAgIGlmIG9wdGlvbnMubm9fcGl4ZWxfdGVzdHM6CiAgICAg
ICAgIHdyaXRlKCJOb3QgcnVubmluZyBwaXhlbCB0ZXN0cyIpCiAgICAgd3JpdGUoIiIpCiAKICAg
ICBtZXRlci51cGRhdGUoIlBhcnNpbmcgZXhwZWN0YXRpb25zIC4uLiIpCi0gICAgdGVzdF9ydW5u
ZXIucGFyc2VfZXhwZWN0YXRpb25zKG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMudGFyZ2V0ID09
ICdEZWJ1ZycpCisgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBvcnRfb2JqLnRl
c3RfcGxhdGZvcm1fbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cHRpb25zLnRhcmdldCA9PSAnRGVidWcnKQogCiAgICAgbWV0ZXIudXBkYXRlKCJQcmVwYXJpbmcg
dGVzdHMgLi4uIikKICAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRpb25zLCAi
ZXhwZWN0ZWQiKQogICAgIHJlc3VsdF9zdW1tYXJ5ID0gdGVzdF9ydW5uZXIucHJlcGFyZV9saXN0
c19hbmRfcHJpbnRfb3V0cHV0KHdyaXRlKQogCi0gICAgaWYgJ2N5Z3dpbicgPT0gc3lzLnBsYXRm
b3JtOgotICAgICAgICBsb2dnaW5nLndhcm4oIiMiICogNDApCi0gICAgICAgIGxvZ2dpbmcud2Fy
bigiIyBVTkVYUEVDVEVEIFBZVEhPTiBWRVJTSU9OIikKLSAgICAgICAgbG9nZ2luZy53YXJuKCIj
IFRoaXMgc2NyaXB0IHNob3VsZCBiZSBydW4gdXNpbmcgdGhlIHZlcnNpb24gb2YgcHl0aG9uIikK
LSAgICAgICAgbG9nZ2luZy53YXJuKCIjIGluIHRoaXJkX3BhcnR5L3B5dGhvbl8yNC8iKQotICAg
ICAgICBsb2dnaW5nLndhcm4oIiMiICogNDApCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICAj
IERlbGV0ZSB0aGUgZGlzayBjYWNoZSBpZiBhbnkgdG8gZW5zdXJlIGEgY2xlYW4gdGVzdCBydW4u
Ci0gICAgY2FjaGVkaXIgPSBvcy5wYXRoLnNwbGl0KHRlc3Rfc2hlbGxfYmluYXJ5X3BhdGgpWzBd
Ci0gICAgY2FjaGVkaXIgPSBvcy5wYXRoLmpvaW4oY2FjaGVkaXIsICJjYWNoZSIpCi0gICAgaWYg
b3MucGF0aC5leGlzdHMoY2FjaGVkaXIpOgotICAgICAgICBzaHV0aWwucm10cmVlKGNhY2hlZGly
KQorICAgIHBvcnRfb2JqLnNldHVwX3Rlc3RfcnVuKCkKIAogICAgIHRlc3RfcnVubmVyLmFkZF90
ZXN0X3R5cGUodGV4dF9kaWZmLlRlc3RUZXh0RGlmZikKICAgICBpZiBub3Qgb3B0aW9ucy5ub19w
aXhlbF90ZXN0czoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CShyZXZpc2lvbiA1NDM2
NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw5ICsyOSw5IEBACiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKK2ltcG9ydCBzaW1w
bGVqc29uCiAKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fcmVzdWx0c19nZW5lcmF0
b3IKLWZyb20gcG9ydCBpbXBvcnQgcGF0aF91dGlscwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBv
cnQgdGVzdF9leHBlY3RhdGlvbnMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFp
bHVyZXMKIApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRv
cihqc29uX3JlCiAgICAgV09OVEZJWCA9ICJ3b250Zml4Q291bnRzIgogICAgIERFRkVSUkVEID0g
ImRlZmVycmVkQ291bnRzIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXJfbmFtZSwg
YnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBi
dWlsZGVyX25hbWUsIGJ1aWxkX25hbWUsIGJ1aWxkX251bWJlciwKICAgICAgICAgcmVzdWx0c19m
aWxlX2Jhc2VfcGF0aCwgYnVpbGRlcl9iYXNlX3VybCwKICAgICAgICAgdGVzdF90aW1pbmdzLCBl
eHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCBhbGxfdGVzdHMpOgogICAgICAgICAiIiJNb2Rp
ZmllcyB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIEdyYWJzIGl0IG9mZiB0aGUgYXJjaGl2ZSBkaXJl
Y3RvcnkKQEAgLTU2LDcgKzU2LDcgQEAgY2xhc3MgSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0b3Io
anNvbl9yZQogICAgICAgICAgICAgICByZXN1bHRzLgogICAgICAgICAgIChzZWUgdGhlIGNvbW1l
bnQgb2YgSlNPTlJlc3VsdHNHZW5lcmF0b3IuX19pbml0X18gZm9yIG90aGVyIEFyZ3MpCiAgICAg
ICAgICIiIgotCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX2J1aWxk
ZXJfbmFtZSA9IGJ1aWxkZXJfbmFtZQogICAgICAgICBzZWxmLl9idWlsZF9uYW1lID0gYnVpbGRf
bmFtZQogICAgICAgICBzZWxmLl9idWlsZF9udW1iZXIgPSBidWlsZF9udW1iZXIKQEAgLTE1Myw3
ICsxNTMsNyBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcihqc29uX3JlCiAgICAg
ICAgICAgICB0ZXN0LCB0ZXN0X25hbWUsIHRlc3RzKQogCiAgICAgICAgICMgUmVtb3ZlIHRlc3Rz
IHRoYXQgZG9uJ3QgZXhpc3QgYW55bW9yZS4KLSAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5q
b2luKHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RzX2RpcigpLCB0ZXN0X25hbWUpCisgICAgICAgIGZ1
bGxfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwgdGVz
dF9uYW1lKQogICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKGZ1bGxfcGF0aCkK
ICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZ1bGxfcGF0aCk6CiAgICAgICAgICAgICBk
ZWwgdGVzdHNbdGVzdF9uYW1lXQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CShyZXZpc2lvbiA1NDM2NCkKKysr
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE5ICsyOSwx
NSBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCitpbXBvcnQgc2ltcGxlanNvbgogaW1w
b3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgdXJsbGliMgog
aW1wb3J0IHhtbC5kb20ubWluaWRvbQogCi1mcm9tIHBvcnQgaW1wb3J0IHBhdGhfdXRpbHMKIGZy
b20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiAKLXN5cy5wYXRoLmFw
cGVuZChwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXZWJLaXRUb29scycp
KSAKLWltcG9ydCBzaW1wbGVqc29uCi0KIAogY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3Iob2Jq
ZWN0KToKIApAQCAtODAsNyArNzYsNyBAQCBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvcihvYmpl
Y3QpOgogCiAgICAgUkVTVUxUU19GSUxFTkFNRSA9ICJyZXN1bHRzLmpzb24iCiAKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFtZSwgYnVp
bGRfbnVtYmVyLAogICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVyX2Jhc2Vf
dXJsLAogICAgICAgICB0ZXN0X3RpbWluZ3MsIGZhaWx1cmVzLCBwYXNzZWRfdGVzdHMsIHNraXBw
ZWRfdGVzdHMsIGFsbF90ZXN0cyk6CiAgICAgICAgICIiIk1vZGlmaWVzIHRoZSByZXN1bHRzLmpz
b24gZmlsZS4gR3JhYnMgaXQgb2ZmIHRoZSBhcmNoaXZlIGRpcmVjdG9yeQpAQCAtMTAwLDYgKzk2
LDcgQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0KToKICAgICAgICAgICBhbGxf
dGVzdHM6IExpc3Qgb2YgYWxsIHRoZSB0ZXN0cyB0aGF0IHdlcmUgcnVuLiAgVGhpcyBzaG91bGQg
bm90CiAgICAgICAgICAgICAgIGluY2x1ZGUgc2tpcHBlZCB0ZXN0cy4KICAgICAgICAgIiIiCisg
ICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX2J1aWxkZXJfbmFtZSA9IGJ1
aWxkZXJfbmFtZQogICAgICAgICBzZWxmLl9idWlsZF9uYW1lID0gYnVpbGRfbmFtZQogICAgICAg
ICBzZWxmLl9idWlsZF9udW1iZXIgPSBidWlsZF9udW1iZXIKQEAgLTEyMiwyMiArMTE5LDI0IEBA
IGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKG9iamVjdCk6CiAgICAgICAgICAgICByZXN1bHRz
X2ZpbGUud3JpdGUoanNvbikKICAgICAgICAgICAgIHJlc3VsdHNfZmlsZS5jbG9zZSgpCiAKLSAg
ICBkZWYgX2dldF9zdm5fcmV2aXNpb24oc2VsZiwgaW5fZGlyZWN0b3J5PU5vbmUpOgorICAgIGRl
ZiBfZ2V0X3N2bl9yZXZpc2lvbihzZWxmLCBpbl9kaXJlY3RvcnkpOgogICAgICAgICAiIiJSZXR1
cm5zIHRoZSBzdm4gcmV2aXNpb24gZm9yIHRoZSBnaXZlbiBkaXJlY3RvcnkuCiAKICAgICAgICAg
QXJnczoKICAgICAgICAgICBpbl9kaXJlY3Rvcnk6IFRoZSBkaXJlY3Rvcnkgd2hlcmUgc3ZuIGlz
IHRvIGJlIHJ1bi4KICAgICAgICAgIiIiCi0gICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuUG9w
ZW4oWyJzdm4iLCAiaW5mbyIsICItLXhtbCJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGN3ZD1pbl9kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2hlbGw9KHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCi0g
ICAgICAgIHRyeToKLSAgICAgICAgICAgIGRvbSA9IHhtbC5kb20ubWluaWRvbS5wYXJzZVN0cmlu
ZyhvdXRwdXQpCi0gICAgICAgICAgICByZXR1cm4gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdl
bnRyeScpWzBdLmdldEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICAncmV2aXNpb24nKQotICAg
ICAgICBleGNlcHQgeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvcjoKLSAgICAgICAgICAgIHJl
dHVybiAiIgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oaW5fZGlyZWN0
b3J5LCAnLnN2bicpKToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJz
dm4iLCAiaW5mbyIsICItLXhtbCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjd2Q9aW5fZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaGVsbD0oc3lzLnBsYXRmb3JtID09ICd3aW4zMicpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgp
WzBdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZG9tID0geG1sLmRvbS5taW5p
ZG9tLnBhcnNlU3RyaW5nKG91dHB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9tLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCdlbnRyeScpWzBdLmdldEF0dHJpYnV0ZSgKKyAgICAgICAgICAgICAg
ICAgICAgJ3JldmlzaW9uJykKKyAgICAgICAgICAgIGV4Y2VwdCB4bWwucGFyc2Vycy5leHBhdC5F
eHBhdEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICByZXR1cm4gIiIK
IAogICAgIGRlZiBfZ2V0X2FyY2hpdmVkX2pzb25fcmVzdWx0cyhzZWxmKToKICAgICAgICAgIiIi
UmVhZHMgb2xkIHJlc3VsdHMgSlNPTiBmaWxlIGlmIGl0IGV4aXN0cy4KQEAgLTMwNSwxNiArMzA0
LDE5IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKG9iamVjdCk6CiAgICAgICAgIHNlbGYu
X2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKICAgICAgICAg
ICAgIHNlbGYuX2J1aWxkX251bWJlciwgc2VsZi5CVUlMRF9OVU1CRVJTKQogCi0gICAgICAgIHBh
dGhfdG9fd2Via2l0ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAn
V2ViS2l0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdXZWJDb3JlJykKLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlzdChy
ZXN1bHRzX2Zvcl9idWlsZGVyLAotICAgICAgICAgICAgc2VsZi5fZ2V0X3N2bl9yZXZpc2lvbihw
YXRoX3RvX3dlYmtpdCksCi0gICAgICAgICAgICBzZWxmLldFQktJVF9TVk4pCi0KLSAgICAgICAg
cGF0aF90b19jaHJvbWVfYmFzZSA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoKQotICAgICAg
ICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxkZXIsCi0g
ICAgICAgICAgICBzZWxmLl9nZXRfc3ZuX3JldmlzaW9uKHBhdGhfdG9fY2hyb21lX2Jhc2UpLAot
ICAgICAgICAgICAgc2VsZi5DSFJPTUVfU1ZOKQorICAgICAgICAjIFRoZXNlIG5leHQgdHdvIGJy
YW5jaGVzIHRlc3QgdG8gc2VlIHdoaWNoIHNvdXJjZSByZXBvcyB3ZSBjYW4KKyAgICAgICAgIyBw
dWxsIHJldmlzaW9ucyBmcm9tLgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX3BvcnQsICdwYXRo
X2Zyb21fd2Via2l0X2Jhc2UnKToKKyAgICAgICAgICAgIHBhdGhfdG9fd2Via2l0ID0gc2VsZi5f
cG9ydC5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoKQorICAgICAgICAgICAgc2VsZi5faW5zZXJ0X2l0
ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAgICAgIHNl
bGYuX2dldF9zdm5fcmV2aXNpb24ocGF0aF90b193ZWJraXQpLAorICAgICAgICAgICAgICAgIHNl
bGYuV0VCS0lUX1NWTikKKworICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX3BvcnQsICdwYXRoX2Zy
b21fY2hyb21pdW1fYmFzZScpOgorICAgICAgICAgICAgcGF0aF90b19jaHJvbWUgPSBzZWxmLl9w
b3J0LnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCkKKyAgICAgICAgICAgIHNlbGYuX2luc2VydF9p
dGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAgICAgICBz
ZWxmLl9nZXRfc3ZuX3JldmlzaW9uKHBhdGhfdG9fY2hyb21lKSwKKyAgICAgICAgICAgICAgICBz
ZWxmLkNIUk9NRV9TVk4pCiAKICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdfbGlz
dChyZXN1bHRzX2Zvcl9idWlsZGVyLAogICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKSW5k
ZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25z
LnB5CShyZXZpc2lvbiA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMCArMzYsNyBAQCBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IHN5cwog
aW1wb3J0IHRpbWUKLWZyb20gcG9ydCBpbXBvcnQgcGF0aF91dGlscwogCi1zeXMucGF0aC5hcHBl
bmQocGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV2ViS2l0VG9vbHMnKSkg
CiBpbXBvcnQgc2ltcGxlanNvbgogCiAjIFRlc3QgZXhwZWN0YXRpb24gYW5kIG1vZGlmaWVyIGNv
bnN0YW50cy4KQEAgLTUzLDEyICs1MCwyNiBAQCBpbXBvcnQgc2ltcGxlanNvbgogY2xhc3MgVGVz
dEV4cGVjdGF0aW9uczoKICAgICBURVNUX0xJU1QgPSAidGVzdF9leHBlY3RhdGlvbnMudHh0Igog
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RzLCBkaXJlY3RvcnksIHBsYXRmb3JtLCBpc19k
ZWJ1Z19tb2RlLCBpc19saW50X21vZGUsCi0gICAgICAgIHRlc3RzX2FyZV9wcmVzZW50PVRydWUp
OgotICAgICAgICAiIiJSZWFkcyB0aGUgdGVzdCBleHBlY3RhdGlvbnMgZmlsZXMgZnJvbSB0aGUg
Z2l2ZW4gZGlyZWN0b3J5LiIiIgotICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGRpcmVjdG9y
eSwgc2VsZi5URVNUX0xJU1QpCi0gICAgICAgIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVzID0gVGVz
dEV4cGVjdGF0aW9uc0ZpbGUocGF0aCwgdGVzdHMsIHBsYXRmb3JtLAotICAgICAgICAgICAgaXNf
ZGVidWdfbW9kZSwgaXNfbGludF9tb2RlLCB0ZXN0c19hcmVfcHJlc2VudD10ZXN0c19hcmVfcHJl
c2VudCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgdGVzdHMsIGV4cGVjdGF0aW9ucywg
cGxhdGZvcm0sIGlzX2RlYnVnX21vZGUsCisgICAgICAgICAgICAgICAgICBpc19saW50X21vZGUs
IHRlc3RzX2FyZV9wcmVzZW50PVRydWUpOgorICAgICAgICAiIiJMb2FkcyBhbmQgcGFyc2VzIHRo
ZSB0ZXN0IGV4cGVjdGF0aW9ucyBnaXZlbiBpbiB0aGUgc3RyaW5nLgorICAgICAgICBBcmdzOgor
ICAgICAgICAgICAgcG9ydDogcmVmZXJlbmNlIHRvIHBsYXRmb3JtLXNwZWNpZmljIGludGVyZmFj
ZQorICAgICAgICAgICAgdGVzdDogbGlzdCBvZiBhbGwgb2YgdGhlIHRlc3QgZmlsZXMKKyAgICAg
ICAgICAgIGV4cGVjdGF0aW9uczogdGVzdCBleHBlY3RhdGlvbnMgYXMgYSBzdHJpbmcKKyAgICAg
ICAgICAgIHBsYXRmb3JtOiB0ZXN0IHBsYXRmb3JtIG5hbWUgdG8gdXNlIGZvciBwYXJzaW5nIGV4
cGVjdGF0aW9ucworICAgICAgICAgICAgaXNfZGVidWdfbW9kZTogd2hldGhlciB0byB1c2UgdGhl
IERFQlVHIG9yIFJFTEVBU0UgbW9kaWZpZXJzCisgICAgICAgICAgICAgICAgaW4gdGhlIGV4cGVj
dGF0aW9ucworICAgICAgICAgICAgaXNfbGludF9tb2RlOiBJZiBUcnVlLCBqdXN0IHBhcnNlIHRo
ZSBleHBlY3RhdGlvbnMgc3RyaW5nCisgICAgICAgICAgICAgICAgbG9va2luZyBmb3IgZXJyb3Jz
LgorICAgICAgICAgICAgdGVzdHNfYXJlX3ByZXNlbnQ6IHdoZXRoZXIgdGhlIHRlc3QgZmlsZXMg
ZXhpc3QgaW4gdGhlIGZpbGUKKyAgICAgICAgICAgICAgICBzeXN0ZW0gYW5kIGNhbiBiZSBwcm9i
ZWQgZm9yLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZGlzdGluZ3Vpc2hpbmcKKyAgICAgICAgICAgICAg
ICB0ZXN0IGZpbGVzIGZyb20gZGlyZWN0b3JpZXMsIGFuZCBpcyBuZWVkZWQgYnkgdGhlIExUVEYK
KyAgICAgICAgICAgICAgICBkYXNoYm9hcmQsIHdoZXJlIHRoZSBmaWxlcyBhcmVuJ3QgYWN0dWFs
bHkgbG9jYWxseSBwcmVzZW50LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fZXhwZWN0ZWRf
ZmFpbHVyZXMgPSBUZXN0RXhwZWN0YXRpb25zRmlsZShwb3J0LCBleHBlY3RhdGlvbnMsCisgICAg
ICAgICAgICB0ZXN0cywgcGxhdGZvcm0sIGlzX2RlYnVnX21vZGUsIGlzX2xpbnRfbW9kZSwKKyAg
ICAgICAgICAgIHRlc3RzX2FyZV9wcmVzZW50PXRlc3RzX2FyZV9wcmVzZW50KQogCiAgICAgIyBU
T0RPKG9qYW4pOiBBbGxvdyBmb3IgcmVtb3Zpbmcgc2tpcHBlZCB0ZXN0cyB3aGVuIGdldHRpbmcg
dGhlIGxpc3Qgb2YKICAgICAjIHRlc3RzIHRvIHJ1biwgYnV0IG5vdCB3aGVuIGdldHRpbmcgbWV0
cmljcy4KQEAgLTIzMCw5ICsyNDEsNiBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zRmlsZToKICAg
ICBFWFBFQ1RBVElPTl9PUkRFUiA9IChQQVNTLCBDUkFTSCwgVElNRU9VVCwgTUlTU0lORywgSU1B
R0VfUExVU19URVhULAogICAgICAgIFRFWFQsIElNQUdFLCBGQUlMLCBTS0lQKQogCi0gICAgQkFT
RV9QTEFURk9STVMgPSAoJ2xpbnV4JywgJ21hYycsICd3aW4nKQotICAgIFBMQVRGT1JNUyA9IEJB
U0VfUExBVEZPUk1TICsgKCd3aW4teHAnLCAnd2luLXZpc3RhJywgJ3dpbi03JykKLQogICAgIEJV
SUxEX1RZUEVTID0gKCdkZWJ1ZycsICdyZWxlYXNlJykKIAogICAgIE1PRElGSUVSUyA9IHsnc2tp
cCc6IFNLSVAsCkBAIC0yNTEsMzYgKzI1OSwzMiBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zRmls
ZToKICAgICAgICAgICAgICAgICAgICAgJ2ZhaWwnOiBGQUlMLAogICAgICAgICAgICAgICAgICAg
ICAnZmxha3knOiBGTEFLWX0KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBmdWxsX3Rl
c3RfbGlzdCwgcGxhdGZvcm0sIGlzX2RlYnVnX21vZGUsCi0gICAgICAgIGlzX2xpbnRfbW9kZSwg
ZXhwZWN0YXRpb25zX2FzX3N0cj1Ob25lLCBzdXBwcmVzc19lcnJvcnM9RmFsc2UsCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBvcnQsIGV4cGVjdGF0aW9ucywgZnVsbF90ZXN0X2xpc3QsIHBsYXRm
b3JtLAorICAgICAgICBpc19kZWJ1Z19tb2RlLCBpc19saW50X21vZGUsIHN1cHByZXNzX2Vycm9y
cz1GYWxzZSwKICAgICAgICAgdGVzdHNfYXJlX3ByZXNlbnQ9VHJ1ZSk6CiAgICAgICAgICIiIgot
ICAgICAgICBwYXRoOiBUaGUgcGF0aCB0byB0aGUgZXhwZWN0YXRpb24gZmlsZS4gQW4gZXJyb3Ig
aXMgdGhyb3duIGlmIGEgdGVzdCBpcwotICAgICAgICAgICAgbGlzdGVkIG1vcmUgdGhhbiBvbmNl
LgorICAgICAgICBleHBlY3RhdGlvbnM6IENvbnRlbnRzIG9mIHRoZSBleHBlY3RhdGlvbnMgZmls
ZQogICAgICAgICBmdWxsX3Rlc3RfbGlzdDogVGhlIGxpc3Qgb2YgYWxsIHRlc3RzIHRvIGJlIHJ1
biBwZW5kaW5nIHByb2Nlc3Npbmcgb2YKICAgICAgICAgICAgIHRoZSBleHBlY3Rpb25zIGZvciB0
aG9zZSB0ZXN0cy4KLSAgICAgICAgcGxhdGZvcm06IFdoaWNoIHBsYXRmb3JtIGZyb20gc2VsZi5Q
TEFURk9STVMgdG8gZmlsdGVyIHRlc3RzIGZvci4KKyAgICAgICAgcGxhdGZvcm06IFdoaWNoIHBs
YXRmb3JtIGZyb20gcG9ydC50ZXN0X3BsYXRmb3JtX25hbWVzKCkgdG8gZmlsdGVyCisgICAgICAg
ICAgICB0ZXN0cyBmb3IuCiAgICAgICAgIGlzX2RlYnVnX21vZGU6IFdoZXRoZXIgd2UgdGVzdGlu
ZyBhIHRlc3Rfc2hlbGwgYnVpbHQgZGVidWcgbW9kZS4KICAgICAgICAgaXNfbGludF9tb2RlOiBX
aGV0aGVyIHRoaXMgaXMganVzdCBsaW50aW5nIHRlc3RfZXhwZWNhdGF0aW9ucy50eHQuCi0gICAg
ICAgIGV4cGVjdGF0aW9uc19hc19zdHI6IENvbnRlbnRzIG9mIHRoZSBleHBlY3RhdGlvbnMgZmls
ZS4gVXNlZCBpbnN0ZWFkIG9mCi0gICAgICAgICAgICB0aGUgcGF0aC4gVGhpcyBtYWtlcyB1bml0
dGVzdGluZyBzYW5lLgogICAgICAgICBzdXBwcmVzc19lcnJvcnM6IFdoZXRoZXIgdG8gc3VwcHJl
c3MgbGludCBlcnJvcnMuCiAgICAgICAgIHRlc3RzX2FyZV9wcmVzZW50OiBXaGV0aGVyIHRoZSB0
ZXN0IGZpbGVzIGFyZSBwcmVzZW50IGluIHRoZSBsb2NhbAogICAgICAgICAgICAgZmlsZXN5c3Rl
bS4gVGhlIExUVEYgRGFzaGJvYXJkIHVzZXMgRmFsc2UgaGVyZSB0byBhdm9pZCBoYXZpbmcgdG8K
ICAgICAgICAgICAgIGtlZXAgYSBsb2NhbCBjb3B5IG9mIHRoZSB0cmVlLgogICAgICAgICAiIiIK
IAotICAgICAgICBzZWxmLl9wYXRoID0gcGF0aAotICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnNf
YXNfc3RyID0gZXhwZWN0YXRpb25zX2FzX3N0cgorICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMg
PSBleHBlY3RhdGlvbnMKICAgICAgICAgc2VsZi5faXNfbGludF9tb2RlID0gaXNfbGludF9tb2Rl
CiAgICAgICAgIHNlbGYuX3Rlc3RzX2FyZV9wcmVzZW50ID0gdGVzdHNfYXJlX3ByZXNlbnQKICAg
ICAgICAgc2VsZi5fZnVsbF90ZXN0X2xpc3QgPSBmdWxsX3Rlc3RfbGlzdAogICAgICAgICBzZWxm
Ll9zdXBwcmVzc19lcnJvcnMgPSBzdXBwcmVzc19lcnJvcnMKICAgICAgICAgc2VsZi5fZXJyb3Jz
ID0gW10KICAgICAgICAgc2VsZi5fbm9uX2ZhdGFsX2Vycm9ycyA9IFtdCi0gICAgICAgIHNlbGYu
X3BsYXRmb3JtID0gc2VsZi50b190ZXN0X3BsYXRmb3JtX25hbWUocGxhdGZvcm0pCi0gICAgICAg
IGlmIHNlbGYuX3BsYXRmb3JtIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
IlVua25vd24gcGxhdGZvcm0gJyVzJyIgJSAocGxhdGZvcm0pKQorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydAorICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9IHBsYXRmb3JtCiAgICAgICAgIHNlbGYu
X2lzX2RlYnVnX21vZGUgPSBpc19kZWJ1Z19tb2RlCiAKICAgICAgICAgIyBNYXBzIHJlbGF0aXZl
IHRlc3QgcGF0aHMgYXMgbGlzdGVkIGluIHRoZSBleHBlY3RhdGlvbnMgZmlsZSB0byBhCkBAIC0z
MjAsMjcgKzMyNCwxMyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zRmlsZToKICAgICAgICAgIiIi
UmV0dXJucyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgaXRlcmF0ZWQgb3Zlci4gQWxsb3dzIGZvciBu
b3QgY2FyaW5nCiAgICAgICAgIGFib3V0IHdoZXRoZXIgd2UncmUgaXRlcmF0aW5nIG92ZXIgYSBm
aWxlIG9yIGEgbmV3LWxpbmUgc2VwYXJhdGVkCiAgICAgICAgIHN0cmluZy4iIiIKLSAgICAgICAg
aWYgc2VsZi5fZXhwZWN0YXRpb25zX2FzX3N0cjoKLSAgICAgICAgICAgIGl0ZXJhYmxlID0gW3gg
KyAiXG4iIGZvciB4IGluCi0gICAgICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zX2FzX3N0
ci5zcGxpdCgiXG4iKV0KLSAgICAgICAgICAgICMgU3RyaXAgZmluYWwgZW50cnkgaWYgaXQncyBl
bXB0eSB0byBhdm9pZCBhZGRlZCBpbiBhbiBleHRyYQotICAgICAgICAgICAgIyBuZXdsaW5lLgot
ICAgICAgICAgICAgaWYgaXRlcmFibGVbbGVuKGl0ZXJhYmxlKSAtIDFdID09ICJcbiI6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGl0ZXJhYmxlWzpsZW4oaXRlcmFibGUpIC0gMV0KLSAgICAgICAg
ICAgIHJldHVybiBpdGVyYWJsZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIG9w
ZW4oc2VsZi5fcGF0aCkKLQotICAgIGRlZiB0b190ZXN0X3BsYXRmb3JtX25hbWUoc2VsZiwgbmFt
ZSk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIHRlc3QgZXhwZWN0YXRpb24gcGxhdGZvcm0gdGhh
dCB3aWxsIGJlIHVzZWQgZm9yIGEKLSAgICAgICAgZ2l2ZW4gcGxhdGZvcm0gbmFtZSwgb3IgTm9u
ZSBpZiB0aGVyZSBpcyBubyBtYXRjaC4iIiIKLSAgICAgICAgY2hyb21pdW1fcHJlZml4ID0gJ2No
cm9taXVtLScKLSAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKQotICAgICAgICBpZiBuYW1lLnN0
YXJ0c3dpdGgoY2hyb21pdW1fcHJlZml4KToKLSAgICAgICAgICAgIG5hbWUgPSBuYW1lW2xlbihj
aHJvbWl1bV9wcmVmaXgpOl0KLSAgICAgICAgaWYgbmFtZSBpbiBzZWxmLlBMQVRGT1JNUzoKLSAg
ICAgICAgICAgIHJldHVybiBuYW1lCi0gICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGl0ZXJh
YmxlID0gW3ggKyAiXG4iIGZvciB4IGluCisgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMu
c3BsaXQoIlxuIildCisgICAgICAgICMgU3RyaXAgZmluYWwgZW50cnkgaWYgaXQncyBlbXB0eSB0
byBhdm9pZCBhZGRlZCBpbiBhbiBleHRyYQorICAgICAgICAjIG5ld2xpbmUuCisgICAgICAgIGlm
IGl0ZXJhYmxlWy0xXSA9PSAiXG4iOgorICAgICAgICAgICAgcmV0dXJuIGl0ZXJhYmxlWzotMV0K
KyAgICAgICAgcmV0dXJuIGl0ZXJhYmxlCiAKICAgICBkZWYgZ2V0X3Rlc3Rfc2V0KHNlbGYsIG1v
ZGlmaWVyLCBleHBlY3RhdGlvbj1Ob25lLCBpbmNsdWRlX3NraXBzPVRydWUpOgogICAgICAgICBp
ZiBleHBlY3RhdGlvbiBpcyBOb25lOgpAQCAtMzk4LDYgKzM4OCw5IEBAIGNsYXNzIFRlc3RFeHBl
Y3RhdGlvbnNGaWxlOgogICAgICAgICAgIG5vCiAgICAgICAgICIiIgogCisgICAgICAgICMgRklY
TUUoZHByYW5rZSkgLSB1cGRhdGUgdGhpcworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEV4
Y2VwdGlvbigncmVtb3ZlX3BsYXRmb3JtX2Zyb21fZmlsZScpCisKICAgICAgICAgbmV3X2ZpbGUg
PSBzZWxmLl9wYXRoICsgJy5uZXcnCiAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ09yaWdpbmFsIGZp
bGU6ICIlcyInLCBzZWxmLl9wYXRoKQogICAgICAgICBsb2dnaW5nLmRlYnVnKCdOZXcgZmlsZTog
IiVzIicsIG5ld19maWxlKQpAQCAtNDMwLDExICs0MjMsMTIgQEAgY2xhc3MgVGVzdEV4cGVjdGF0
aW9uc0ZpbGU6CiAgICAgICAgICAgICBlbGlmIGFjdGlvbiA9PSBBRERfUExBVEZPUk1TX0VYQ0VQ
VF9USElTOgogICAgICAgICAgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgnOicpCiAgICAgICAg
ICAgICAgICAgbmV3X29wdGlvbnMgPSBwYXJ0c1swXQotICAgICAgICAgICAgICAgIGZvciBwIGlu
IHNlbGYuUExBVEZPUk1TOgotICAgICAgICAgICAgICAgICAgICBwID0gcC51cHBlcigpOworICAg
ICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuX3BvcnQudGVzdF9wbGF0Zm9ybV9uYW1lcygpOgor
ICAgICAgICAgICAgICAgICAgICBwID0gcC51cHBlcigpCiAgICAgICAgICAgICAgICAgICAgICMg
VGhpcyBpcyBhIHRlbXAgc29sdXRpb24gZm9yIHJlYmFzZWxpbmluZyB0b29sLgogICAgICAgICAg
ICAgICAgICAgICAjIERvIG5vdCBhZGQgdGFncyBXSU4tNyBhbmQgV0lOLVZJU1RBIHRvIHRlc3Qg
ZXhwZWN0YXRpb25zCi0gICAgICAgICAgICAgICAgICAgICMgaWYgdGhlIG9yaWdpbmFsIGxpbmUg
ZG9lcyBub3Qgc3BlY2lmeSB0aGUgcGxhdGZvcm0gb3B0aW9uLgorICAgICAgICAgICAgICAgICAg
ICAjIGlmIHRoZSBvcmlnaW5hbCBsaW5lIGRvZXMgbm90IHNwZWNpZnkgdGhlIHBsYXRmb3JtCisg
ICAgICAgICAgICAgICAgICAgICMgb3B0aW9uLgogICAgICAgICAgICAgICAgICAgICAjIFRPRE8o
dmljdG9ydyk6IFJlbW92ZSBXSU4tVklTVEEgYW5kIFdJTi03IG9uY2Ugd2UgaGF2ZQogICAgICAg
ICAgICAgICAgICAgICAjIHJlbGlhYmxlIFdpbiA3IGFuZCBXaW4gVmlzdGEgYnVpbGRib3RzIHNl
dHVwLgogICAgICAgICAgICAgICAgICAgICBpZiBub3QgcCBpbiAocGxhdGZvcm0udXBwZXIoKSwg
J1dJTi1WSVNUQScsICdXSU4tNycpOgpAQCAtNTE3LDcgKzUxMSw3IEBAIGNsYXNzIFRlc3RFeHBl
Y3RhdGlvbnNGaWxlOgogCiAgICAgICAgIGhhc19hbnlfcGxhdGZvcm0gPSBGYWxzZQogICAgICAg
ICBmb3Igb3B0aW9uIGluIG9wdGlvbnM6Ci0gICAgICAgICAgICBpZiBvcHRpb24gaW4gc2VsZi5Q
TEFURk9STVM6CisgICAgICAgICAgICBpZiBvcHRpb24gaW4gc2VsZi5fcG9ydC50ZXN0X3BsYXRm
b3JtX25hbWVzKCk6CiAgICAgICAgICAgICAgICAgaGFzX2FueV9wbGF0Zm9ybSA9IFRydWUKICAg
ICAgICAgICAgICAgICBpZiBub3Qgb3B0aW9uID09IHBsYXRmb3JtOgogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUkVNT1ZFX1BMQVRGT1JNCkBAIC01NDcsNyArNTQxLDcgQEAgY2xhc3MgVGVz
dEV4cGVjdGF0aW9uc0ZpbGU6CiAgICAgICAgIGZvciBvcHRpb24gaW4gb3B0aW9uczoKICAgICAg
ICAgICAgIGlmIG9wdGlvbiBpbiBzZWxmLk1PRElGSUVSUzoKICAgICAgICAgICAgICAgICBtb2Rp
ZmllcnMuYWRkKG9wdGlvbikKLSAgICAgICAgICAgIGVsaWYgb3B0aW9uIGluIHNlbGYuUExBVEZP
Uk1TOgorICAgICAgICAgICAgZWxpZiBvcHRpb24gaW4gc2VsZi5fcG9ydC50ZXN0X3BsYXRmb3Jt
X25hbWVzKCk6CiAgICAgICAgICAgICAgICAgaGFzX2FueV9wbGF0Zm9ybSA9IFRydWUKICAgICAg
ICAgICAgIGVsaWYgb3B0aW9uLnN0YXJ0c3dpdGgoJ2J1ZycpOgogICAgICAgICAgICAgICAgIGhh
c19idWdfaWQgPSBUcnVlCkBAIC02MzIsNyArNjI2LDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9u
c0ZpbGU6CiAgICAgICAgICAgICAgICAgICAgICdpbmRlZmluaXRlbHksIHRoZW4gaXQgc2hvdWxk
IGJlIGp1c3QgdGltZW91dC4nLAogICAgICAgICAgICAgICAgICAgICB0ZXN0X2xpc3RfcGF0aCkK
IAotICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHBhdGhfdXRpbHMubGF5b3V0
X3Rlc3RzX2RpcigpLAorICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYu
X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RfbGlzdF9wYXRoKQogICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5u
b3JtcGF0aChmdWxsX3BhdGgpCiAgICAgICAgICAgICAjIFdlYktpdCdzIHdheSBvZiBza2lwcGlu
ZyB0ZXN0cyBpcyB0byBhZGQgYSAtZGlzYWJsZWQgc3VmZml4LgpAQCAtNjk1LDcgKzY4OSw3IEBA
IGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNGaWxlOgogICAgIGRlZiBfZXhwYW5kX3Rlc3RzKHNlbGYs
IHRlc3RfbGlzdF9wYXRoKToKICAgICAgICAgIiIiQ29udmVydCB0aGUgdGVzdCBzcGVjaWZpY2F0
aW9uIHRvIGFuIGFic29sdXRlLCBub3JtYWxpemVkCiAgICAgICAgIHBhdGggYW5kIG1ha2Ugc3Vy
ZSBkaXJlY3RvcmllcyBlbmQgd2l0aCB0aGUgT1MgcGF0aCBzZXBhcmF0b3IuIiIiCi0gICAgICAg
IHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCksIHRlc3Rf
bGlzdF9wYXRoKQorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3BvcnQubGF5b3V0
X3Rlc3RzX2RpcigpLCB0ZXN0X2xpc3RfcGF0aCkKICAgICAgICAgcGF0aCA9IG9zLnBhdGgubm9y
bXBhdGgocGF0aCkKICAgICAgICAgcGF0aCA9IHNlbGYuX2ZpeF9kaXIocGF0aCkKIApJbmRleDog
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
dGVzdF9maWxlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5CShyZXZpc2lvbiA1NDM2
NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3Rlc3RfZmlsZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAgdW5k
ZXIgdGhhdCBkaXJlY3RvcnkuIiIiCiAKIGltcG9ydCBnbG9iCiBpbXBvcnQgb3MKLWZyb20gcG9y
dCBpbXBvcnQgcGF0aF91dGlscwogCiAjIFdoZW4gY29sbGVjdGluZyB0ZXN0IGNhc2VzLCB3ZSBp
bmNsdWRlIGFueSBmaWxlIHdpdGggdGhlc2UgZXh0ZW5zaW9ucy4KIF9zdXBwb3J0ZWRfZmlsZV9l
eHRlbnNpb25zID0gc2V0KFsnLmh0bWwnLCAnLnNodG1sJywgJy54bWwnLCAnLnhodG1sJywgJy5w
bCcsCkBAIC00NSw3ICs0NCw3IEBAIF9zdXBwb3J0ZWRfZmlsZV9leHRlbnNpb25zID0gc2V0KFsn
Lmh0bWwKIF9za2lwcGVkX2RpcmVjdG9yaWVzID0gc2V0KFsnLnN2bicsICdfc3ZuJywgJ3Jlc291
cmNlcycsICdzY3JpcHQtdGVzdHMnXSkKIAogCi1kZWYgZ2F0aGVyX3Rlc3RfZmlsZXMocGF0aHMp
OgorZGVmIGdhdGhlcl90ZXN0X2ZpbGVzKHBvcnQsIHBhdGhzKToKICAgICAiIiJHZW5lcmF0ZSBh
IHNldCBvZiB0ZXN0IGZpbGVzIGFuZCByZXR1cm4gdGhlbS4KIAogICAgIEFyZ3M6CkBAIC01Nywx
NCArNTYsMTQgQEAgZGVmIGdhdGhlcl90ZXN0X2ZpbGVzKHBhdGhzKToKICAgICBpZiBwYXRoczoK
ICAgICAgICAgZm9yIHBhdGggaW4gcGF0aHM6CiAgICAgICAgICAgICAjIElmIHRoZXJlJ3MgYW4g
KiBpbiB0aGUgbmFtZSwgYXNzdW1lIGl0J3MgYSBnbG9iIHBhdHRlcm4uCi0gICAgICAgICAgICBw
YXRoID0gb3MucGF0aC5qb2luKHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RzX2RpcigpLCBwYXRoKQor
ICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihwb3J0LmxheW91dF90ZXN0c19kaXIoKSwg
cGF0aCkKICAgICAgICAgICAgIGlmIHBhdGguZmluZCgnKicpID4gLTE6CiAgICAgICAgICAgICAg
ICAgZmlsZW5hbWVzID0gZ2xvYi5nbG9iKHBhdGgpCiAgICAgICAgICAgICAgICAgcGF0aHNfdG9f
d2Fsay51cGRhdGUoZmlsZW5hbWVzKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg
ICBwYXRoc190b193YWxrLmFkZChwYXRoKQogICAgIGVsc2U6Ci0gICAgICAgIHBhdGhzX3RvX3dh
bGsuYWRkKHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RzX2RpcigpKQorICAgICAgICBwYXRoc190b193
YWxrLmFkZChwb3J0LmxheW91dF90ZXN0c19kaXIoKSkKIAogICAgICMgTm93IHdhbGsgYWxsIHRo
ZSBwYXRocyBwYXNzZWQgaW4gb24gdGhlIGNvbW1hbmQgbGluZSBhbmQgZ2V0IGZpbGVuYW1lcwog
ICAgIHRlc3RfZmlsZXMgPSBzZXQoKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvdGVzdF9zaGVsbF90aHJlYWQucHkJKHJldmlzaW9uIDU0MzY0KQorKysgV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9z
aGVsbF90aHJlYWQucHkJKHdvcmtpbmcgY29weSkKQEAgLTQwLDIxICs0MCwyMiBAQCBpbXBvcnQg
bG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgUXVldWUKIGltcG9ydCBzaWduYWwKLWltcG9ydCBz
dWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGhyZWFkCiBpbXBvcnQgdGhyZWFkaW5nCiBp
bXBvcnQgdGltZQogCi1mcm9tIHBvcnQgaW1wb3J0IHBhdGhfdXRpbHMKIGltcG9ydCB0ZXN0X2Zh
aWx1cmVzCiAKIAotZGVmIHByb2Nlc3Nfb3V0cHV0KHByb2MsIHRlc3RfaW5mbywgdGVzdF90eXBl
cywgdGVzdF9hcmdzLCB0YXJnZXQsIG91dHB1dF9kaXIpOgorZGVmIHByb2Nlc3Nfb3V0cHV0KHBv
cnQsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzLCB0YXJnZXQsIG91dHB1dF9kaXIs
CisgICAgICAgICAgICAgICAgICAgY3Jhc2gsIHRpbWVvdXQsIHRlc3RfcnVuX3RpbWUsIGFjdHVh
bF9jaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGVycm9yKToKICAgICAiIiJS
ZWNlaXZlcyB0aGUgb3V0cHV0IGZyb20gYSB0ZXN0X3NoZWxsIHByb2Nlc3MsIHN1YmplY3RzIGl0
IHRvIGEgbnVtYmVyCiAgICAgb2YgdGVzdHMsIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBmYWlsdXJl
IHR5cGVzIHRoZSB0ZXN0IHByb2R1Y2VkLgogCiAgICAgQXJnczoKKyAgICAgIHBvcnQ6IHBvcnQt
c3BlY2lmaWMgaG9va3MKICAgICAgIHByb2M6IGFuIGFjdGl2ZSB0ZXN0X3NoZWxsIHByb2Nlc3MK
ICAgICAgIHRlc3RfaW5mbzogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUsIHVy
aSBhbmQgdGltZW91dAogICAgICAgdGVzdF90eXBlczogbGlzdCBvZiB0ZXN0IHR5cGVzIHRvIHN1
YmplY3QgdGhlIG91dHB1dCB0bwpAQCAtNjQsODQgKzY1LDM5IEBAIGRlZiBwcm9jZXNzX291dHB1
dChwcm9jLCB0ZXN0X2luZm8sIHRlc3QKIAogICAgIFJldHVybnM6IGEgbGlzdCBvZiBmYWlsdXJl
IG9iamVjdHMgYW5kIHRpbWVzIGZvciB0aGUgdGVzdCBiZWluZyBwcm9jZXNzZWQKICAgICAiIiIK
LSAgICBvdXRsaW5lcyA9IFtdCi0gICAgZXh0cmFfbGluZXMgPSBbXQogICAgIGZhaWx1cmVzID0g
W10KLSAgICBjcmFzaCA9IEZhbHNlCiAKICAgICAjIFNvbWUgdGVzdCBhcmdzLCBzdWNoIGFzIHRo
ZSBpbWFnZSBoYXNoLCBtYXkgYmUgYWRkZWQgb3IgY2hhbmdlZCBvbiBhCiAgICAgIyB0ZXN0LWJ5
LXRlc3QgYmFzaXMuCiAgICAgbG9jYWxfdGVzdF9hcmdzID0gY29weS5jb3B5KHRlc3RfYXJncykK
IAotICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotCi0gICAgbGluZSA9IHByb2Muc3Rkb3V0
LnJlYWRsaW5lKCkKKyAgICBsb2NhbF90ZXN0X2FyZ3MuaGFzaCA9IGFjdHVhbF9jaGVja3N1bQog
Ci0gICAgIyBPbmx5IHN0YXJ0IHNhdmluZyBvdXRwdXQgbGluZXMgb25jZSB3ZSd2ZSBsb2FkZWQg
dGhlIFVSTCBmb3IgdGhlIHRlc3QuCi0gICAgdXJsID0gTm9uZQotICAgIHRlc3Rfc3RyaW5nID0g
dGVzdF9pbmZvLnVyaS5zdHJpcCgpCi0KLSAgICB3aGlsZSBsaW5lLnJzdHJpcCgpICE9ICIjRU9G
IjoKLSAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGF2ZW4ndCBjcmFzaGVkLgotICAgICAgICBpZiBs
aW5lID09ICcnIGFuZCBwcm9jLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGZhaWx1
cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaCgpKQotCi0gICAgICAgICAgICAj
IFRoaXMgaXMgaGV4IGNvZGUgMHhjMDAwMDAxZCwgd2hpY2ggaXMgdXNlZCBmb3IgYWJydXB0Ci0g
ICAgICAgICAgICAjIHRlcm1pbmF0aW9uLiBUaGlzIGhhcHBlbnMgaWYgd2UgaGl0IGN0cmwrYyBm
cm9tIHRoZSBwcm9tcHQgYW5kCi0gICAgICAgICAgICAjIHdlIGhhcHBlbiB0byBiZSB3YWl0aW5n
IG9uIHRoZSB0ZXN0X3NoZWxsLgotICAgICAgICAgICAgIyBzZG95b246IE5vdCBzdXJlIGZvciB3
aGljaCBPUyBhbmQgaW4gd2hhdCBjaXJjdW1zdGFuY2VzIHRoZQotICAgICAgICAgICAgIyBhYm92
ZSBjb2RlIGlzIHZhbGlkLiBXaGF0IHdvcmtzIGZvciBtZSB1bmRlciBMaW51eCB0byBkZXRlY3QK
LSAgICAgICAgICAgICMgY3RybCtjIGlzIGZvciB0aGUgc3VicHJvY2VzcyByZXR1cm5jb2RlIHRv
IGJlIG5lZ2F0aXZlIFNJR0lOVC4KLSAgICAgICAgICAgICMgQW5kIHRoYXQgYWdyZWVzIHdpdGgg
dGhlIHN1YnByb2Nlc3MgZG9jdW1lbnRhdGlvbi4KLSAgICAgICAgICAgIGlmICgtMTA3Mzc0MTUx
MCA9PSBwcm9jLnJldHVybmNvZGUgb3IKLSAgICAgICAgICAgICAgICAtIHNpZ25hbC5TSUdJTlQg
PT0gcHJvYy5yZXR1cm5jb2RlKToKLSAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVy
cnVwdAotICAgICAgICAgICAgY3Jhc2ggPSBUcnVlCi0gICAgICAgICAgICBicmVhawotCi0gICAg
ICAgICMgRG9uJ3QgaW5jbHVkZSAjVVJMIGxpbmVzIGluIG91ciBvdXRwdXQKLSAgICAgICAgaWYg
bGluZS5zdGFydHN3aXRoKCIjVVJMOiIpOgotICAgICAgICAgICAgdXJsID0gbGluZS5yc3RyaXAo
KVs1Ol0KLSAgICAgICAgICAgIGlmIHVybCAhPSB0ZXN0X3N0cmluZzoKLSAgICAgICAgICAgICAg
ICBsb2dnaW5nLmZhdGFsKCJUZXN0IGdvdCBvdXQgb2Ygc3luYzpcbnwlc3xcbnwlc3wiICUKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cmwsIHRlc3Rfc3RyaW5nKSkKLSAgICAgICAg
ICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigidGVzdCBvdXQgb2Ygc3luYyIpCi0gICAgICAg
IGVsaWYgbGluZS5zdGFydHN3aXRoKCIjTUQ1OiIpOgotICAgICAgICAgICAgbG9jYWxfdGVzdF9h
cmdzLmhhc2ggPSBsaW5lLnJzdHJpcCgpWzU6XQotICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0
aCgiI1RFU1RfVElNRURfT1VUIik6Ci0gICAgICAgICAgICAjIFRlc3QgdGltZWQgb3V0LCBidXQg
d2Ugc3RpbGwgbmVlZCB0byByZWFkIHVudGlsICNFT0YuCi0gICAgICAgICAgICBmYWlsdXJlcy5h
cHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpKQotICAgICAgICBlbGlmIHVybDoK
LSAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZChsaW5lKQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgZXh0cmFfbGluZXMuYXBwZW5kKGxpbmUpCi0KLSAgICAgICAgbGluZSA9IHByb2Muc3Rk
b3V0LnJlYWRsaW5lKCkKLQotICAgIGVuZF90ZXN0X3RpbWUgPSB0aW1lLnRpbWUoKQotCi0gICAg
aWYgbGVuKGV4dHJhX2xpbmVzKToKLSAgICAgICAgZXh0cmEgPSAiIi5qb2luKGV4dHJhX2xpbmVz
KQotICAgICAgICBpZiBjcmFzaDoKLSAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlN0YWNrdHJh
Y2UgZm9yICVzOlxuJXMiICUgKHRlc3Rfc3RyaW5nLCBleHRyYSkpCi0gICAgICAgICAgICAjIFN0
cmlwIG9mZiAiZmlsZTovLyIgc2luY2UgUmVsYXRpdmVUZXN0RmlsZW5hbWUgZXhwZWN0cwotICAg
ICAgICAgICAgIyBmaWxlc3lzdGVtIHBhdGhzLgotICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5w
YXRoLmpvaW4ob3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUodGVzdF9zdHJpbmdbNzpdKSkKLSAgICAgICAgICAgIGZpbGVuYW1lID0g
b3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gKyAiLXN0YWNrLnR4dCIKLSAgICAgICAgICAg
IHBhdGhfdXRpbHMubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxlbmFtZSlb
MF0pCi0gICAgICAgICAgICBvcGVuKGZpbGVuYW1lLCAid2IiKS53cml0ZShleHRyYSkKLSAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlByZXZpb3VzIHRlc3Qgb3V0cHV0
IGV4dHJhIGxpbmVzIGFmdGVyIGR1bXA6XG4lcyIgJQotICAgICAgICAgICAgICAgIGV4dHJhKQor
ICAgIGlmIGNyYXNoOgorICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWls
dXJlQ3Jhc2goKSkKKyAgICBpZiB0aW1lb3V0OgorICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVz
dF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpKQorCisgICAgaWYgY3Jhc2g6CisgICAgICAgIGxv
Z2dpbmcuZGVidWcoIlN0YWNrdHJhY2UgZm9yICVzOlxuJXMiICUgKHRlc3RfaW5mby5maWxlbmFt
ZSwgZXJyb3IpKQorICAgICAgICAjIFN0cmlwIG9mZiAiZmlsZTovLyIgc2luY2UgUmVsYXRpdmVU
ZXN0RmlsZW5hbWUgZXhwZWN0cworICAgICAgICAjIGZpbGVzeXN0ZW0gcGF0aHMuCisgICAgICAg
IGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG91dHB1dF9kaXIsIHRlc3RfaW5mby5maWxlbmFtZSkK
KyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSArICItc3Rh
Y2sudHh0IgorICAgICAgICBwb3J0Lm1heWJlX21ha2VfZGlyZWN0b3J5KG9zLnBhdGguc3BsaXQo
ZmlsZW5hbWUpWzBdKQorICAgICAgICBvcGVuKGZpbGVuYW1lLCAid2IiKS53cml0ZShlcnJvcikK
KyAgICBlbHNlOgorICAgICAgICBsb2dnaW5nLmRlYnVnKCJQcmV2aW91cyB0ZXN0IG91dHB1dCBl
eHRyYSBsaW5lcyBhZnRlciBkdW1wOlxuJXMiICUKKyAgICAgICAgICAgIGVycm9yKQogCiAgICAg
IyBDaGVjayB0aGUgb3V0cHV0IGFuZCBzYXZlIHRoZSByZXN1bHRzLgorICAgIHN0YXJ0X3RpbWUg
PSB0aW1lLnRpbWUoKQogICAgIHRpbWVfZm9yX2RpZmZzID0ge30KICAgICBmb3IgdGVzdF90eXBl
IGluIHRlc3RfdHlwZXM6CiAgICAgICAgIHN0YXJ0X2RpZmZfdGltZSA9IHRpbWUudGltZSgpCi0g
ICAgICAgIG5ld19mYWlsdXJlcyA9IHRlc3RfdHlwZS5jb21wYXJlX291dHB1dCh0ZXN0X2luZm8u
ZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9jLCAnJy5qb2luKG91dGxpbmVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2FsX3Rlc3RfYXJncywgdGFyZ2V0KQorICAgICAgICBuZXdf
ZmFpbHVyZXMgPSB0ZXN0X3R5cGUuY29tcGFyZV9vdXRwdXQocG9ydCwgdGVzdF9pbmZvLmZpbGVu
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0LCBsb2NhbF90ZXN0X2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0YXJnZXQpCiAgICAgICAgICMgRG9uJ3QgYWRkIGFueSBtb3JlIGZhaWx1
cmVzIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGNyYXNoLCBzbyB3ZSBkb24ndAogICAgICAgICAjIGRv
dWJsZS1yZXBvcnQgdGhvc2UgdGVzdHMuIFdlIGRvIGRvdWJsZS1yZXBvcnQgZm9yIHRpbWVvdXRz
IHNpbmNlCiAgICAgICAgICMgd2Ugc3RpbGwgd2FudCB0byBzZWUgdGhlIHRleHQgYW5kIGltYWdl
IG91dHB1dC4KQEAgLTE1MCwyOCArMTA2LDExIEBAIGRlZiBwcm9jZXNzX291dHB1dChwcm9jLCB0
ZXN0X2luZm8sIHRlc3QKICAgICAgICAgdGltZV9mb3JfZGlmZnNbdGVzdF90eXBlLl9fY2xhc3Nf
Xy5fX25hbWVfX10gPSAoCiAgICAgICAgICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGlt
ZSkKIAotICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcyA9IHRpbWUudGltZSgpIC0gZW5kX3Rl
c3RfdGltZQotICAgIHRlc3RfcnVuX3RpbWUgPSBlbmRfdGVzdF90aW1lIC0gc3RhcnRfdGltZQor
ICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcyA9IHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90
aW1lCiAgICAgcmV0dXJuIFRlc3RTdGF0cyh0ZXN0X2luZm8uZmlsZW5hbWUsIGZhaWx1cmVzLCB0
ZXN0X3J1bl90aW1lLAogICAgICAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMsIHRpbWVfZm9y
X2RpZmZzKQogCiAKLWRlZiBzdGFydF90ZXN0X3NoZWxsKGNvbW1hbmQsIGFyZ3MpOgotICAgICIi
IlJldHVybnMgdGhlIHByb2Nlc3MgZm9yIGEgbmV3IHRlc3Rfc2hlbGwgc3RhcnRlZCBpbiBsYXlv
dXQtdGVzdHMgbW9kZS4KLSAgICAiIiIKLSAgICBjbWQgPSBbXQotICAgICMgSG9vayBmb3IgaW5q
ZWN0aW5nIHZhbGdyaW5kIG9yIG90aGVyIHJ1bnRpbWUgaW5zdHJ1bWVudGF0aW9uLAotICAgICMg
dXNlZCBieSBlLmcuIHRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kX3Rlc3RzLnB5LgotICAgIHdyYXBw
ZXIgPSBvcy5lbnZpcm9uLmdldCgiQlJPV1NFUl9XUkFQUEVSIiwgTm9uZSkKLSAgICBpZiB3cmFw
cGVyICE9IE5vbmU6Ci0gICAgICAgIGNtZCArPSBbd3JhcHBlcl0KLSAgICBjbWQgKz0gY29tbWFu
ZCArIFsnLS1sYXlvdXQtdGVzdHMnXSArIGFyZ3MKLSAgICByZXR1cm4gc3VicHJvY2Vzcy5Qb3Bl
bihjbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBF
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQotCi0K
IGNsYXNzIFRlc3RTdGF0czoKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgZmFp
bHVyZXMsIHRlc3RfcnVuX3RpbWUsCkBAIC0xODYsMTcgKzEyNSwxOSBAQCBjbGFzcyBUZXN0U3Rh
dHM6CiBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICIiIlRo
cmVhZCB3cmFwcGVyIGZvciBydW5uaW5nIGEgc2luZ2xlIHRlc3QgZmlsZS4iIiIKIAotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCB0ZXN0X3NoZWxsX2NvbW1hbmQsIHNoZWxsX2FyZ3MsIHRlc3RfaW5m
bywgdGVzdF90eXBlcywKLSAgICAgICAgdGVzdF9hcmdzLCB0YXJnZXQsIG91dHB1dF9kaXIpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBpbWFnZV9wYXRoLCBzaGVsbF9hcmdzLCB0ZXN0
X2luZm8sCisgICAgICAgIHRlc3RfdHlwZXMsIHRlc3RfYXJncywgdGFyZ2V0LCBvdXRwdXRfZGly
KToKICAgICAgICAgIiIiCiAgICAgICAgIEFyZ3M6CisgICAgICAgICAgcG9ydDogb2JqZWN0IGlt
cGxlbWVudGluZyBwb3J0LXNwZWNpZmljIGhvb2tzCiAgICAgICAgICAgdGVzdF9pbmZvOiBPYmpl
Y3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0CiAgICAgICAg
ICAgb3V0cHV0X2RpcjogRGlyZWN0b3J5IHRvIHB1dCBjcmFzaCBzdGFja3MgaW50by4KICAgICAg
ICAgICBTZWUgVGVzdFNoZWxsVGhyZWFkIGZvciBkb2N1bWVudGF0aW9uIG9mIHRoZSByZW1haW5p
bmcgYXJndW1lbnRzLgogICAgICAgICAiIiIKIAogICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9f
aW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX2NvbW1hbmQgPSB0ZXN0X3NoZWxsX2NvbW1hbmQK
KyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5faW1hZ2VfcGF0aCA9IGlt
YWdlX3BhdGgKICAgICAgICAgc2VsZi5fc2hlbGxfYXJncyA9IHNoZWxsX2FyZ3MKICAgICAgICAg
c2VsZi5fdGVzdF9pbmZvID0gdGVzdF9pbmZvCiAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSB0
ZXN0X3R5cGVzCkBAIC0yMDUsMTAgKzE0NiwxOCBAQCBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRo
cmVhZGluZy5UaHJlYWQpCiAgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCiAK
ICAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICBwcm9jID0gc3RhcnRfdGVzdF9zaGVsbChzZWxm
Ll9jb21tYW5kLCBzZWxmLl9zaGVsbF9hcmdzICsKLSAgICAgICAgICAgIFsiLS10aW1lLW91dC1t
cz0iICsgc2VsZi5fdGVzdF9pbmZvLnRpbWVvdXQsIHNlbGYuX3Rlc3RfaW5mby51cmldKQotICAg
ICAgICBzZWxmLl90ZXN0X3N0YXRzID0gcHJvY2Vzc19vdXRwdXQocHJvYywgc2VsZi5fdGVzdF9p
bmZvLAotICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywgc2VsZi5fdGVzdF9hcmdzLCBzZWxm
Ll90YXJnZXQsIHNlbGYuX291dHB1dF9kaXIpCisgICAgICAgIGRyaXZlciA9IHNlbGYuX3BvcnQu
c3RhcnRfdGVzdF9kcml2ZXIoc2VsZi5faW1hZ2VfcGF0aCwKKyAgICAgICAgICAgIHNlbGYuX3No
ZWxsX2FyZ3MpCisgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAgICAgKGNyYXNoLCB0
aW1lb3V0LCBhY3R1YWxfY2hlY2tzdW0sIG91dHB1dCwgZXJyb3IpID0gIFwKKyAgICAgICAgICAg
IGRyaXZlci5ydW5fdGVzdCh0ZXN0X2luZm8udXJpLnN0cmlwKCksIHRlc3RfaW5mby50aW1lb3V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5mby5pbWFnZV9oYXNoKQorICAg
ICAgICBlbmQgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl90ZXN0X3N0YXRzID0gcHJvY2Vz
c19vdXRwdXQoc2VsZi5fcG9ydCwKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfaW5mbywgc2VsZi5f
dGVzdF90eXBlcywgc2VsZi5fdGVzdF9hcmdzLAorICAgICAgICAgICAgc2VsZi5fdGFyZ2V0LCBz
ZWxmLl9vdXRwdXRfZGlyLCBjcmFzaCwgdGltZW91dCwgZW5kIC0gc3RhcnQsCisgICAgICAgICAg
ICBhY3R1YWxfY2hlY2tzdW0sIG91dHB1dCwgZXJyb3IpCisgICAgICAgIGRyaXZlci5zdG9wKCkK
IAogICAgIGRlZiBnZXRfdGVzdF9zdGF0cyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3Rl
c3Rfc3RhdHMKQEAgLTIxNiwxNyArMTY1LDE2IEBAIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQodGhy
ZWFkaW5nLlRocmVhZCkKIAogY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQp
OgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lX2xpc3RfcXVldWUsIHJlc3VsdF9x
dWV1ZSwgdGVzdF9zaGVsbF9jb21tYW5kLAotICAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLCB0
ZXN0X2FyZ3MsIHNoZWxsX2FyZ3MsIG9wdGlvbnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
b3J0LCBmaWxlbmFtZV9saXN0X3F1ZXVlLCByZXN1bHRfcXVldWUsCisgICAgICAgICAgICAgICAg
IHRlc3RfdHlwZXMsIHRlc3RfYXJncywgaW1hZ2VfcGF0aCwgc2hlbGxfYXJncywgb3B0aW9ucyk6
CiAgICAgICAgICIiIkluaXRpYWxpemUgYWxsIHRoZSBsb2NhbCBzdGF0ZSBmb3IgdGhpcyB0ZXN0
IHNoZWxsIHRocmVhZC4KIAogICAgICAgICBBcmdzOgorICAgICAgICAgIHBvcnQ6IGludGVyZmFj
ZSB0byBwb3J0LXNwZWNpZmljIGhvb2tzCiAgICAgICAgICAgZmlsZW5hbWVfbGlzdF9xdWV1ZTog
QSB0aHJlYWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IGNvbnRhaW5zIGxpc3RzCiAgICAgICAgICAg
ICAgIG9mIHR1cGxlcyBvZiAoZmlsZW5hbWUsIHVyaSkgcGFpcnMuCiAgICAgICAgICAgcmVzdWx0
X3F1ZXVlOiBBIHRocmVhZCBzYWZlIFF1ZXVlIGNsYXNzIHRoYXQgd2lsbCBjb250YWluIHR1cGxl
cyBvZgogICAgICAgICAgICAgICAodGVzdCwgZmFpbHVyZSBsaXN0cykgZm9yIHRoZSB0ZXN0IHJl
c3VsdHMuCi0gICAgICAgICAgdGVzdF9zaGVsbF9jb21tYW5kOiBBIGxpc3Qgc3BlY2lmeWluZyB0
aGUgY29tbWFuZCthcmdzIGZvcgotICAgICAgICAgICAgICB0ZXN0X3NoZWxsCiAgICAgICAgICAg
dGVzdF90eXBlczogQSBsaXN0IG9mIFRlc3RUeXBlIG9iamVjdHMgdG8gcnVuIHRoZSB0ZXN0IG91
dHB1dAogICAgICAgICAgICAgICBhZ2FpbnN0LgogICAgICAgICAgIHRlc3RfYXJnczogQSBUZXN0
QXJndW1lbnRzIG9iamVjdCB0byBwYXNzIHRvIGVhY2ggVGVzdFR5cGUuCkBAIC0yMzYsMTMgKzE4
NCwxNCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAg
ICAgICAgIHJ1bl93ZWJraXRfdGVzdHM7IHRoZXkgYXJlIHR5cGljYWxseSBwYXNzZWQgdmlhIHRo
ZQogICAgICAgICAgICAgICBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIgY2xhc3MuIiIiCiAg
ICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcG9y
dCA9IHBvcnQKICAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZSA9IGZpbGVuYW1lX2xp
c3RfcXVldWUKICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gcmVzdWx0X3F1ZXVlCiAgICAg
ICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBbXQotICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX2Nv
bW1hbmQgPSB0ZXN0X3NoZWxsX2NvbW1hbmQKICAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IHRl
c3RfdHlwZXMKICAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0gdGVzdF9hcmdzCi0gICAgICAgIHNl
bGYuX3Rlc3Rfc2hlbGxfcHJvYyA9IE5vbmUKKyAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQor
ICAgICAgICBzZWxmLl9pbWFnZV9wYXRoID0gaW1hZ2VfcGF0aAogICAgICAgICBzZWxmLl9zaGVs
bF9hcmdzID0gc2hlbGxfYXJncwogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAg
ICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCkBAIC0zNzksMTEgKzMyOCwxMSBAQCBjbGFzcyBU
ZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgICAgICAgICAgIyBQcmlu
dCB0aGUgZXJyb3IgbWVzc2FnZShzKS4KICAgICAgICAgICAgICAgICBlcnJvcl9zdHIgPSAnXG4n
LmpvaW4oWycgICcgKyBmLm1lc3NhZ2UoKSBmb3IgZiBpbiBmYWlsdXJlc10pCiAgICAgICAgICAg
ICAgICAgbG9nZ2luZy5kZWJ1ZygiJXMgJXMgZmFpbGVkOlxuJXMiICUgKHNlbGYuZ2V0TmFtZSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKGZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9zdHIpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAg
ICAgICBsb2dnaW5nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuZ2V0TmFtZSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVu
YW1lKGZpbGVuYW1lKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0
LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKSkKICAgICAgICAgICAgIHNlbGYuX3Jl
c3VsdF9xdWV1ZS5wdXQoKGZpbGVuYW1lLCBmYWlsdXJlcykpCiAKICAgICAgICAgICAgIGlmIGJh
dGNoX3NpemUgPiAwIGFuZCBiYXRjaF9jb3VudCA+IGJhdGNoX3NpemU6CkBAIC00MDcsNyArMzU2
LDcgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICBS
ZXR1cm46CiAgICAgICAgICAgQSBsaXN0IG9mIFRlc3RGYWlsdXJlIG9iamVjdHMgZGVzY3JpYmlu
ZyB0aGUgZXJyb3IuCiAgICAgICAgICIiIgotICAgICAgICB3b3JrZXIgPSBTaW5nbGVUZXN0VGhy
ZWFkKHNlbGYuX3Rlc3Rfc2hlbGxfY29tbWFuZCwKKyAgICAgICAgd29ya2VyID0gU2luZ2xlVGVz
dFRocmVhZChzZWxmLl9wb3J0LCBzZWxmLl9pbWFnZV9wYXRoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdF9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3Rlc3RfdHlwZXMsCkBAIC00MzEsNyArMzgwLDcgQEAgY2xhc3MgVGVzdFNoZWxsVGhy
ZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICAgICAgIyB0cmFkZW9mZiBpbiBvcmRlciB0
byBhdm9pZCBsb3NpbmcgdGhlIHJlc3Qgb2YgdGhpcyB0aHJlYWQncwogICAgICAgICAgICAgIyBy
ZXN1bHRzLgogICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignVGVzdCB0aHJlYWQgaHVuZzoga2ls
bGluZyBhbGwgdGVzdF9zaGVsbHMnKQotICAgICAgICAgICAgcGF0aF91dGlscy5raWxsX2FsbF90
ZXN0X3NoZWxscygpCisgICAgICAgICAgICB3b3JrZXIuX2RyaXZlci5zdG9wKCkKIAogICAgICAg
ICB0cnk6CiAgICAgICAgICAgICBzdGF0cyA9IHdvcmtlci5nZXRfdGVzdF9zdGF0cygpCkBAIC00
NTQsMzIgKzQwMywyMyBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6
CiAgICAgICAgICAgQSBsaXN0IG9mIFRlc3RGYWlsdXJlIG9iamVjdHMgZGVzY3JpYmluZyB0aGUg
ZXJyb3IuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9lbnN1cmVfdGVzdF9zaGVsbF9pc19y
dW5uaW5nKCkKLSAgICAgICAgIyBBcmdzIHRvIHRlc3Rfc2hlbGwgaXMgYSBzcGFjZS1zZXBhcmF0
ZWQgbGlzdCBvZgotICAgICAgICAjICJ1cmkgdGltZW91dCBwaXhlbF9oYXNoIgotICAgICAgICAj
IFRoZSB0aW1lb3V0IGFuZCBwaXhlbF9oYXNoIGFyZSBvcHRpb25hbC4gIFRoZSB0aW1lb3V0IGlz
IHVzZWQgaWYgdGhpcwotICAgICAgICAjIHRlc3QgaGFzIGEgY3VzdG9tIHRpbWVvdXQuIFRoZSBw
aXhlbF9oYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4KLSAgICAgICAgIyBpbWFnZSBkdW1w
IGlmIHRoZSBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBibGFuawot
ICAgICAgICAjIHZhbHVlIGlmIHdlIGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLgotICAg
ICAgICAjIChPdGhlcndpc2UsIGFuIGltYWdlIGZyb20gYSBwcmV2aW91cyBydW4gd2lsbCBiZSBj
b3BpZWQgaW50bwotICAgICAgICAjIHRoZSBiYXNlbGluZS4pCisgICAgICAgICMgVGhlIHBpeGVs
X2hhc2ggaXMgdXNlZCB0byBhdm9pZCBkb2luZyBhbiBpbWFnZSBkdW1wIGlmIHRoZQorICAgICAg
ICAjIGNoZWNrc3VtcyBtYXRjaCwgc28gaXQgc2hvdWxkIGJlIHNldCB0byBhIGJsYW5rIHZhbHVl
IGlmIHdlCisgICAgICAgICMgYXJlIGdlbmVyYXRpbmcgYSBuZXcgYmFzZWxpbmUuICAoT3RoZXJ3
aXNlLCBhbiBpbWFnZSBmcm9tIGEKKyAgICAgICAgIyBwcmV2aW91cyBydW4gd2lsbCBiZSBjb3Bp
ZWQgaW50byB0aGUgYmFzZWxpbmUuKQogICAgICAgICBpbWFnZV9oYXNoID0gdGVzdF9pbmZvLmlt
YWdlX2hhc2gKICAgICAgICAgaWYgaW1hZ2VfaGFzaCBhbmQgc2VsZi5fdGVzdF9hcmdzLm5ld19i
YXNlbGluZToKICAgICAgICAgICAgIGltYWdlX2hhc2ggPSAiIgotICAgICAgICBzZWxmLl90ZXN0
X3NoZWxsX3Byb2Muc3RkaW4ud3JpdGUoKCIlcyAlcyAlc1xuIiAlCi0gICAgICAgICAgICAodGVz
dF9pbmZvLnVyaSwgdGVzdF9pbmZvLnRpbWVvdXQsIGltYWdlX2hhc2gpKSkKLQotICAgICAgICAj
IElmIHRoZSB0ZXN0IHNoZWxsIGlzIGRlYWQsIHRoZSBhYm92ZSBtYXkgY2F1c2UgYW4gSU9FcnJv
ciBhcyB3ZQotICAgICAgICAjIHRyeSB0byB3cml0ZSBvbnRvIHRoZSBicm9rZW4gcGlwZS4gSWYg
dGhpcyBpcyB0aGUgZmlyc3QgdGVzdCBmb3IKLSAgICAgICAgIyB0aGlzIHRlc3Qgc2hlbGwgcHJv
Y2VzcywgdGhhbiB0aGUgdGVzdCBzaGVsbCBkaWQgbm90Ci0gICAgICAgICMgc3VjY2Vzc2Z1bGx5
IHN0YXJ0LiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgdGVzdCwgdGhlbiB0aGUKLSAgICAgICAg
IyBwcmV2aW91cyB0ZXN0cyBoYXZlIGNhdXNlZCBzb21lIGtpbmQgb2YgZGVsYXllZCBjcmFzaC4g
V2UgZG9uJ3QKLSAgICAgICAgIyB0cnkgdG8gcmVjb3ZlciBoZXJlLgotICAgICAgICBzZWxmLl90
ZXN0X3NoZWxsX3Byb2Muc3RkaW4uZmx1c2goKQotCi0gICAgICAgIHN0YXRzID0gcHJvY2Vzc19v
dXRwdXQoc2VsZi5fdGVzdF9zaGVsbF9wcm9jLCB0ZXN0X2luZm8sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywgc2VsZi5fdGVzdF9hcmdzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMudGFyZ2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisg
ICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAgICAgY3Jhc2gsIHRpbWVvdXQsIGFjdHVh
bF9jaGVja3N1bSwgb3V0cHV0LCBlcnJvciA9IFwKKyAgICAgICAgICAgc2VsZi5fZHJpdmVyLnJ1
bl90ZXN0KHRlc3RfaW5mby51cmksIHRlc3RfaW5mby50aW1lb3V0LCBpbWFnZV9oYXNoKQorICAg
ICAgICBlbmQgPSB0aW1lLnRpbWUoKQorCisgICAgICAgIHN0YXRzID0gcHJvY2Vzc19vdXRwdXQo
c2VsZi5fcG9ydCwgdGVzdF9pbmZvLCBzZWxmLl90ZXN0X3R5cGVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfYXJncywgc2VsZi5fb3B0aW9ucy50YXJnZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVj
dG9yeSwgY3Jhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwgZW5k
IC0gc3RhcnQsIGFjdHVhbF9jaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQsIGVycm9yKQogCiAgICAgICAgIHNlbGYuX3Rlc3Rfc3RhdHMuYXBwZW5kKHN0YXRz
KQogICAgICAgICByZXR1cm4gc3RhdHMuZmFpbHVyZXMKQEAgLTQ4OSwyMyArNDI5LDEyIEBAIGNs
YXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgcnVubmluZyB0
ZXN0cyBzaW5nbHksIHNpbmNlIHRob3NlIGVhY2ggc3RhcnQgYSBzZXBhcmF0ZSB0ZXN0IHNoZWxs
IGluCiAgICAgICAgIHRoZWlyIG93biB0aHJlYWQuCiAgICAgICAgICIiIgotICAgICAgICBpZiAo
bm90IHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYyBvcgotICAgICAgICAgICAgc2VsZi5fdGVzdF9zaGVs
bF9wcm9jLnBvbGwoKSBpcyBub3QgTm9uZSk6Ci0gICAgICAgICAgICBzZWxmLl90ZXN0X3NoZWxs
X3Byb2MgPSBzdGFydF90ZXN0X3NoZWxsKHNlbGYuX3Rlc3Rfc2hlbGxfY29tbWFuZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hl
bGxfYXJncykKKyAgICAgICAgaWYgKG5vdCBzZWxmLl9kcml2ZXIgb3Igc2VsZi5fZHJpdmVyLnBv
bGwoKSBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0
LnN0YXJ0X2RyaXZlcigKKyAgICAgICAgICAgICAgICBzZWxmLl9pbWFnZV9wYXRoLCBzZWxmLl9z
aGVsbF9hcmdzKQogCiAgICAgZGVmIF9raWxsX3Rlc3Rfc2hlbGwoc2VsZik6CiAgICAgICAgICIi
IktpbGwgdGhlIHRlc3Qgc2hlbGwgcHJvY2VzcyBpZiBpdCdzIHJ1bm5pbmcuIiIiCi0gICAgICAg
IGlmIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYzoKLSAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxf
cHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2Muc3Rk
b3V0LmNsb3NlKCkKLSAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRlcnI6
Ci0gICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnN0ZGVyci5jbG9zZSgpCi0g
ICAgICAgICAgICBpZiAoc3lzLnBsYXRmb3JtIG5vdCBpbiAoJ3dpbjMyJywgJ2N5Z3dpbicpIGFu
ZAotICAgICAgICAgICAgICAgIG5vdCBzZWxmLl90ZXN0X3NoZWxsX3Byb2MucG9sbCgpKToKLSAg
ICAgICAgICAgICAgICAjIENsb3Npbmcgc3RkaW4vc3Rkb3V0L3N0ZGVyciBoYW5ncyBzb21ldGlt
ZXMgb24gT1MgWC4KLSAgICAgICAgICAgICAgICBudWxsID0gb3Blbihvcy5kZXZudWxsLCAidyIp
Ci0gICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbImtpbGwiLCAiLTkiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5waWQp
XSwgc3RkZXJyPW51bGwpCi0gICAgICAgICAgICAgICAgbnVsbC5jbG9zZSgpCi0gICAgICAgICAg
ICBzZWxmLl90ZXN0X3NoZWxsX3Byb2MgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX2RyaXZlcjoK
KyAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdG9wKCkKKyAgICAgICAgICAgIHNlbGYuX2RyaXZl
ciA9IE5vbmUKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9fX2luaXRfXy5weQkocmV2aXNpb24gNTQzNjQpCisrKyBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L19faW5pdF9fLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yNywyNCArMjcsMjUgQEAKICMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAKLSIiIlBsYXRmb3JtLXNwZWNpZmljIHV0aWxpdGllcyBhbmQgcHNldWRvLWNv
bnN0YW50cworIiIiUG9ydC1zcGVjaWZpYyBlbnRyeXBvaW50cyBmb3IgdGhlIGxheW91dCB0ZXN0
cyB0ZXN0IGluZnJhc3RydWN0dXJlLiIiIgogCi1BbnkgZnVuY3Rpb25zIHdob3NlIGltcGxlbWVu
dGF0aW9ucyBvciB2YWx1ZXMgZGlmZmVyIGZyb20gb25lIHBsYXRmb3JtIHRvCi1hbm90aGVyIHNo
b3VsZCBiZSBkZWZpbmVkIGluIHRoZWlyIHJlc3BlY3RpdmUgPHBsYXRmb3JtPi5weQotbW9kdWxl
cy4gVGhlIGFwcHJvcHJpYXRlIG9uZSBvZiB0aG9zZSB3aWxsIGJlIGltcG9ydGVkIGludG8gdGhp
cyBtb2R1bGUgdG8KLXByb3ZpZGUgY2FsbGVycyB3aXRoIGEgY29tbW9uLCBwbGF0Zm9ybS1pbmRl
cGVuZGVudCBpbnRlcmZhY2UuCiAKLVRoaXMgZmlsZSBzaG91bGQgb25seSBldmVyIGJlIGltcG9y
dGVkIGJ5IGxheW91dF9wYWNrYWdlLnBhdGhfdXRpbHMuCi0iIiIKK2RlZiBnZXQocG9ydF9uYW1l
PU5vbmUsIG9wdGlvbnM9Tm9uZSk6CisgICAgIiIiUmV0dXJucyBhbiBvYmplY3QgaW1wbGVtZW50
aW5nIHRoZSBQb3J0IGludGVyZmFjZS4gSWYKKyAgICBwb3J0X25hbWUgaXMgTm9uZSwgdGhpcyBy
b3V0aW5lIGF0dGVtcHRzIHRvIGd1ZXNzIGF0IHRoZSBtb3N0CisgICAgYXBwcm9wcmlhdGUgcG9y
dCBvbiB0aGlzIHBsYXRmb3JtLiIiIgorICAgIHBvcnRfdG9fdXNlID0gcG9ydF9uYW1lCisgICAg
aWYgcG9ydF90b191c2UgaXMgTm9uZToKKyAgICAgICAgcG9ydF90b191c2UgPSAnY2hyb21pdW0t
bWFjJwogCi1pbXBvcnQgc3lzCisgICAgaWYgcG9ydF90b191c2Uuc3RhcnRzd2l0aCgnY2hyb21p
dW0tbWFjJyk6CisgICAgICAgIGltcG9ydCBjaHJvbWl1bV9tYWMKKyAgICAgICAgcmV0dXJuIGNo
cm9taXVtX21hYy5DaHJvbWl1bU1hY1BvcnQocG9ydF9uYW1lLCBvcHRpb25zKQorICAgIGVsaWYg
cG9ydF90b191c2Uuc3RhcnRzd2l0aCgnY2hyb21pdW0tbGludXgnKToKKyAgICAgICAgaW1wb3J0
IGNocm9taXVtX2xpbnV4CisgICAgICAgIHJldHVybiBjaHJvbWl1bV9saW51eC5DaHJvbWl1bUxp
bnV4UG9ydChwb3J0X25hbWUsIG9wdGlvbnMpCisgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHdp
dGgoJ2Nocm9taXVtLXdpbicpOgorICAgICAgICBpbXBvcnQgY2hyb21pdW1fd2luCisgICAgICAg
IHJldHVybiBjaHJvbWl1bV93aW4uQ2hyb21pdW1XaW5Qb3J0KHBvcnRfbmFtZSwgb3B0aW9ucykK
IAotIyBXZSBtYXkgbm90IHN1cHBvcnQgdGhlIHZlcnNpb24gb2YgUHl0aG9uIHRoYXQgYSB1c2Vy
IGhhcyBpbnN0YWxsZWQgKEN5Z3dpbgotIyBlc3BlY2lhbGx5IGhhcyBoYWQgcHJvYmxlbXMpLCBi
dXQgd2UnbGwgYWxsb3cgdGhlIHBsYXRmb3JtIHV0aWxzIHRvIGJlCi0jIGluY2x1ZGVkIGluIGFu
eSBjYXNlIHNvIHdlIGRvbid0IGdldCBhbiBpbXBvcnQgZXJyb3IuCi1pZiBzeXMucGxhdGZvcm0g
aW4gKCdjeWd3aW4nLCAnd2luMzInKToKLSAgICBmcm9tIGNocm9taXVtX3dpbiBpbXBvcnQgKgot
ZWxpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgZnJvbSBjaHJvbWl1bV9tYWMgaW1w
b3J0ICoKLWVsaWYgc3lzLnBsYXRmb3JtIGluICgnbGludXgnLCAnbGludXgyJywgJ2ZyZWVic2Q3
JywgJ29wZW5ic2Q0Jyk6Ci0gICAgZnJvbSBjaHJvbWl1bV9saW51eCBpbXBvcnQgKgorICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3Vuc3VwcG9ydGVkIHBvcnQ6ICVzJyAlIHBvcnRfbmFt
ZSkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YXBhY2hlX2h0dHBfc2VydmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5CShyZXZpc2lv
biA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNywxOSArMzcsMTkg
QEAgaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIAogaW1wb3J0IGh0dHBfc2VydmVyX2Jh
c2UKLWltcG9ydCBwYXRoX3V0aWxzCi1pbXBvcnQgcG9ydAogCiAKIGNsYXNzIExheW91dFRlc3RB
cGFjaGVIdHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKIAotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9v
YmosIG91dHB1dF9kaXIpOgogICAgICAgICAiIiJBcmdzOgorICAgICAgICAgIHBvcnRfb2JqOiBo
YW5kbGUgdG8gdGhlIHBsYXRmb3JtLXNwZWNpZmljIHJvdXRpbmVzCiAgICAgICAgICAgb3V0cHV0
X2RpcjogdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdCBkaXJlY3Rv
cnkKICAgICAgICAgIiIiCisgICAgICAgIGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2Uu
X19pbml0X18oc2VsZiwgcG9ydF9vYmopCiAgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRw
dXRfZGlyCiAgICAgICAgIHNlbGYuX2h0dHBkX3Byb2MgPSBOb25lCi0gICAgICAgIHBhdGhfdXRp
bHMubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3V0cHV0X2RpcikKKyAgICAgICAgcG9ydF9vYmoubWF5
YmVfbWFrZV9kaXJlY3Rvcnkob3V0cHV0X2RpcikKIAogICAgICAgICBzZWxmLm1hcHBpbmdzID0g
W3sncG9ydCc6IDgwMDB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9ydCc6IDgwODB9
LApAQCAtNTksMTUgKzU5LDE0IEBAIGNsYXNzIExheW91dFRlc3RBcGFjaGVIdHRwZChodHRwX3Nl
cnZlcl8KICAgICAgICAgIyBUaGUgdXBzdHJlYW0gLmNvbmYgZmlsZSBhc3N1bWVkIHRoZSBleGlz
dGVuY2Ugb2YgL3RtcC9XZWJLaXQgZm9yCiAgICAgICAgICMgcGxhY2luZyBhcGFjaGUgZmlsZXMg
bGlrZSB0aGUgbG9jayBmaWxlIHRoZXJlLgogICAgICAgICBzZWxmLl9ydW50aW1lX3BhdGggPSBv
cy5wYXRoLmpvaW4oIi90bXAiLCAiV2ViS2l0IikKLSAgICAgICAgcGF0aF91dGlscy5tYXliZV9t
YWtlX2RpcmVjdG9yeShzZWxmLl9ydW50aW1lX3BhdGgpCisgICAgICAgIHBvcnRfb2JqLm1heWJl
X21ha2VfZGlyZWN0b3J5KHNlbGYuX3J1bnRpbWVfcGF0aCkKIAogICAgICAgICAjIFRoZSBQSUQg
cmV0dXJuZWQgd2hlbiBBcGFjaGUgaXMgc3RhcnRlZCBnb2VzIGF3YXkgKGR1ZSB0byBkcm9wcGlu
ZwogICAgICAgICAjIHByaXZpbGVnZXM/KS4gVGhlIHByb3BlciBjb250cm9sbGluZyBQSUQgaXMg
d3JpdHRlbiB0byBhIGZpbGUgaW4gdGhlCiAgICAgICAgICMgYXBhY2hlIHJ1bnRpbWUgZGlyZWN0
b3J5LgogICAgICAgICBzZWxmLl9waWRfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLl9ydW50aW1l
X3BhdGgsICdodHRwZC5waWQnKQogCi0gICAgICAgIHRlc3RfZGlyID0gcGF0aF91dGlscy5wYXRo
X2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywKLSAgICAgICAgICAgICdMYXlvdXRU
ZXN0cycpCisgICAgICAgIHRlc3RfZGlyID0gc2VsZi5fcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2Rp
cigpCiAgICAgICAgIGpzX3Rlc3RfcmVzb3VyY2VzX2RpciA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pv
aW4odGVzdF9kaXIsICJmYXN0IiwgImpzIiwKICAgICAgICAgICAgICJyZXNvdXJjZXMiKQogICAg
ICAgICBtaW1lX3R5cGVzX3BhdGggPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2luKHRlc3RfZGlyLCAi
aHR0cCIsICJjb25mIiwKQEAgLTc4LDcgKzc3LDcgQEAgY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0
dHBkKGh0dHBfc2VydmVyXwogICAgICAgICBlcnJvcl9sb2cgPSBzZWxmLl9jeWd3aW5fc2FmZV9q
b2luKG91dHB1dF9kaXIsICJlcnJvcl9sb2cudHh0IikKICAgICAgICAgZG9jdW1lbnRfcm9vdCA9
IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4odGVzdF9kaXIsICJodHRwIiwgInRlc3RzIikKIAotICAg
ICAgICBleGVjdXRhYmxlID0gcG9ydC5hcGFjaGVfZXhlY3V0YWJsZV9wYXRoKCkKKyAgICAgICAg
ZXhlY3V0YWJsZSA9IHNlbGYuX3BvcnRfb2JqLl9wYXRoX3RvX2FwYWNoZSgpCiAgICAgICAgIGlm
IHNlbGYuX2lzX2N5Z3dpbigpOgogICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHNlbGYuX2dldF9j
eWd3aW5fcGF0aChleGVjdXRhYmxlKQogCkBAIC05NSw3ICs5NCw4IEBAIGNsYXNzIExheW91dFRl
c3RBcGFjaGVIdHRwZChodHRwX3NlcnZlcl8KICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uLmdl
dCgiVVNFUiIsICIiKSldCiAKICAgICAgICAgaWYgc2VsZi5faXNfY3lnd2luKCk6Ci0gICAgICAg
ICAgICBjeWdiaW4gPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdj
eWd3aW4nLCAnYmluJykKKyAgICAgICAgICAgIGN5Z2JpbiA9IHNlbGYuX3BvcnRfb2JqLl9wYXRo
X2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywKKyAgICAgICAgICAgICAgICAnYmlu
JykKICAgICAgICAgICAgICMgTm90IGVudGlyZWx5IHN1cmUgd2h5LCBidXQgZnJvbSBjeWd3aW4g
d2UgbmVlZCB0byBydW4gdGhlCiAgICAgICAgICAgICAjIGh0dHBkIGNvbW1hbmQgdGhyb3VnaCBi
YXNoLgogICAgICAgICAgICAgc2VsZi5fc3RhcnRfY21kID0gWwpAQCAtMTQ2LDcgKzE0Niw3IEBA
IGNsYXNzIExheW91dFRlc3RBcGFjaGVIdHRwZChodHRwX3NlcnZlcl8KICAgICAgICAgICB0ZXN0
X2RpcjogYWJzb2x1dGUgcGF0aCB0byB0aGUgTGF5b3V0VGVzdHMgZGlyZWN0b3J5LgogICAgICAg
ICAgIG91dHB1dF9kaXI6IGFic29sdXRlIHBhdGggdG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdHMg
ZGlyZWN0b3J5LgogICAgICAgICAiIiIKLSAgICAgICAgaHR0cGRfY29uZmlnID0gcG9ydC5hcGFj
aGVfY29uZmlnX2ZpbGVfcGF0aCgpCisgICAgICAgIGh0dHBkX2NvbmZpZyA9IHNlbGYuX3BvcnRf
b2JqLl9wYXRoX3RvX2FwYWNoZV9jb25maWdfZmlsZSgpCiAgICAgICAgIGh0dHBkX2NvbmZpZ19j
b3B5ID0gb3MucGF0aC5qb2luKG91dHB1dF9kaXIsICJodHRwZC5jb25mIikKICAgICAgICAgaHR0
cGRfY29uZiA9IG9wZW4oaHR0cGRfY29uZmlnKS5yZWFkKCkKICAgICAgICAgaWYgc2VsZi5faXNf
Y3lnd2luKCk6CkBAIC0xNTYsMjIgKzE1NiwxMSBAQCBjbGFzcyBMYXlvdXRUZXN0QXBhY2hlSHR0
cGQoaHR0cF9zZXJ2ZXJfCiAgICAgICAgICAgICAjIHBsdXMgdGhlIHJlbGF0aXZlIHBhdGhzIHRv
IHRoZSAuc28gZmlsZXMgbGlzdGVkIGluIHRoZSAuY29uZgogICAgICAgICAgICAgIyBmaWxlLiBX
ZSBoYXZlIGFwYWNoZS9jeWd3aW4gY2hlY2tlZCBpbnRvIG91ciB0cmVlIHNvCiAgICAgICAgICAg
ICAjIHBlb3BsZSBkb24ndCBoYXZlIHRvIGluc3RhbGwgaXQgaW50byB0aGVpciBjeWd3aW4uCi0g
ICAgICAgICAgICBjeWd1c3IgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0
eScsICdjeWd3aW4nLCAndXNyJykKKyAgICAgICAgICAgIGN5Z3VzciA9IHNlbGYuX3BvcnRfb2Jq
Ll9wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywKKyAgICAgICAgICAgICAg
ICAndXNyJykKICAgICAgICAgICAgIGh0dHBkX2NvbmYgPSBodHRwZF9jb25mLnJlcGxhY2UoJ1Nl
cnZlclJvb3QgIi91c3IiJywKICAgICAgICAgICAgICAgICAnU2VydmVyUm9vdCAiJXMiJyAlIHNl
bGYuX2dldF9jeWd3aW5fcGF0aChjeWd1c3IpKQogCi0gICAgICAgICMgVE9ETyhvamFuKTogSW5z
dGVhZCBvZiB3cml0aW5nIGFuIGV4dHJhIGZpbGUsIGNoZWNraW4gYSBjb25mIGZpbGUKLSAgICAg
ICAgIyB1cHN0cmVhbS4gT3IsIGV2ZW4gYmV0dGVyLCB1cHN0cmVhbS9kZWxldGUgYWxsIG91ciBj
aHJvbWUgaHR0cAotICAgICAgICAjIHRlc3RzIHNvIHdlIGRvbid0IG5lZWQgdGhpcyBzcGVjaWFs
LWNhc2VkIERvY3VtZW50Um9vdCBhbmQgdGhlbgotICAgICAgICAjIGp1c3QgdXNlIHRoZSB1cHN0
cmVhbQotICAgICAgICAjIGNvbmYgZmlsZS4KLSAgICAgICAgY2hyb21lX2RvY3VtZW50X3Jvb3Qg
PSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsCi0gICAgICAgICAg
ICAnbGF5b3V0X3Rlc3RzJykKLSAgICAgICAgaWYgc2VsZi5faXNfY3lnd2luKCk6Ci0gICAgICAg
ICAgICBjaHJvbWVfZG9jdW1lbnRfcm9vdCA9IHNlbGYuX2dldF9jeWd3aW5fcGF0aChjaHJvbWVf
ZG9jdW1lbnRfcm9vdCkKLSAgICAgICAgaHR0cGRfY29uZiA9IChodHRwZF9jb25mICsKLSAgICAg
ICAgICAgIHNlbGYuX2dldF92aXJ0dWFsX2hvc3RfY29uZmlnKGNocm9tZV9kb2N1bWVudF9yb290
LCA4MDgxKSkKLQogICAgICAgICBmID0gb3BlbihodHRwZF9jb25maWdfY29weSwgJ3diJykKICAg
ICAgICAgZi53cml0ZShodHRwZF9jb25mKQogICAgICAgICBmLmNsb3NlKCkKQEAgLTIyNiw0ICsy
MTUsNCBAQCBjbGFzcyBMYXlvdXRUZXN0QXBhY2hlSHR0cGQoaHR0cF9zZXJ2ZXJfCiAgICAgICAg
IGh0dHBkX3BpZCA9IE5vbmUKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fcGlkX2Zp
bGUpOgogICAgICAgICAgICAgaHR0cGRfcGlkID0gaW50KG9wZW4oc2VsZi5fcGlkX2ZpbGUpLnJl
YWRsaW5lKCkpCi0gICAgICAgIHBhdGhfdXRpbHMuc2h1dF9kb3duX2h0dHBfc2VydmVyKGh0dHBk
X3BpZCkKKyAgICAgICAgc2VsZi5fcG9ydF9vYmouX3NodXRfZG93bl9odHRwX3NlcnZlcihodHRw
ZF9waWQpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYzOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkFic3Ry
YWN0IGJhc2UgY2xhc3Mgb2YgUG9ydC1zcGVjaWZpYyBlbnRyeXBvaW50cyBmb3IgdGhlIGxheW91
dCB0ZXN0cwordGVzdCBpbmZyYXN0cnVjdHVyZSAodGhlIFBvcnQgYW5kIERyaXZlciBjbGFzc2Vz
KS4iIiIKKworaW1wb3J0IGNnaQoraW1wb3J0IGRpZmZsaWIKK2ltcG9ydCBlcnJubworaW1wb3J0
IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworCitpbXBvcnQgYXBhY2hlX2h0dHBf
c2VydmVyCitpbXBvcnQgaHR0cF9zZXJ2ZXIKK2ltcG9ydCB3ZWJzb2NrZXRfc2VydmVyCisKKyMg
UHl0aG9uIGJ1ZyB3b3JrYXJvdW5kLiAgU2VlIFBvcnQud2RpZmZfdGV4dCgpIGZvciBhbiBleHBs
YW5hdGlvbi4KK193ZGlmZl9hdmFpbGFibGUgPSBUcnVlCisKKworY2xhc3MgUG9ydChvYmplY3Qp
OgorICAgICIiIkFic3RyYWN0IGNsYXNzIGZvciBQb3J0LXNwZWNpZmljIGhvb2tzIGZvciB0aGUg
bGF5b3V0X3Rlc3QgcGFja2FnZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
b3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IHBvcnRf
bmFtZQorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9oZWxw
ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyID0gTm9uZQorICAgICAgICBzZWxm
Ll93ZWJraXRfYmFzZV9kaXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIg
PSBOb25lCisKKyAgICBkZWYgYmFzZWxpbmVfcGF0aChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJu
IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gc3RvcmUgbmV3IGJhc2VsaW5l
cworICAgICAgICBpbiBmb3IgdGhpcyBwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yKCdQb3J0LmJhc2VsaW5lX3BhdGgnKQorCisgICAgZGVmIGJhc2VsaW5lX3NlYXJj
aF9wYXRoKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGFic29sdXRlIHBhdGhz
IHRvIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCB1bmRlciBmb3IKKyAgICAgICAgYmFzZWxpbmVzLiBU
aGUgZGlyZWN0b3JpZXMgYXJlIHNlYXJjaGVkIGluIG9yZGVyLiIiIgorICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LmJhc2VsaW5lX3NlYXJjaF9wYXRoJykKKworICAgIGRl
ZiBjaGVja19zeXNfZGVwcyhzZWxmKToKKyAgICAgICAgIiIiSWYgdGhlIHBvcnQgbmVlZHMgdG8g
ZG8gc29tZSBydW50aW1lIGNoZWNrcyB0byBlbnN1cmUgdGhhdCB0aGUKKyAgICAgICAgdGVzdHMg
Y2FuIGJlIHJ1biBzdWNjZXNzZnVsbHksIHRoZXkgc2hvdWxkIGJlIGRvbmUgaGVyZS4KKworICAg
ICAgICBSZXR1cm5zIHdoZXRoZXIgdGhlIHN5c3RlbSBpcyBwcm9wZXJseSBjb25maWd1cmVkLiIi
IgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LmNoZWNrX3N5c19kZXBz
JykKKworICAgIGRlZiBjb21wYXJlX3RleHQoc2VsZiwgYWN0dWFsX3RleHQsIGV4cGVjdGVkX3Rl
eHQpOgorICAgICAgICAiIiJSZXR1cm4gd2hldGhlciBvciBub3QgdGhlIHR3byBzdHJpbmdzIGFy
ZSAqbm90KiBlcXVhbC4gVGhpcworICAgICAgICByb3V0aW5lIGlzIHVzZWQgdG8gZGlmZiB0ZXh0
IG91dHB1dC4KKworICAgICAgICBXaGlsZSB0aGlzIGlzIGEgZ2VuZXJpYyByb3V0aW5lLCB3ZSBp
bmNsdWRlIGl0IGluIHRoZSBQb3J0CisgICAgICAgIGludGVyZmFjZSBzbyB0aGF0IGl0IGNhbiBi
ZSBvdmVycmlkZW4gZm9yIHRlc3RpbmcgcHVycG9zZXMuIiIiCisgICAgICAgIHJldHVybiBhY3R1
YWxfdGV4dCAhPSBleHBlY3RlZF90ZXh0CisKKyAgICBkZWYgZGlmZl9pbWFnZShzZWxmLCBhY3R1
YWxfZmlsZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lLCBkaWZmX2ZpbGVuYW1lKToKKyAgICAgICAg
IiIiQ29tcGFyZSB0d28gaW1hZ2UgZmlsZXMgYW5kIHByb2R1Y2UgYSBkZWx0YSBpbWFnZSBmaWxl
LgorCisgICAgICAgIFJldHVybiAxIGlmIHRoZSB0d28gZmlsZXMgYXJlIGRpZmZlcmVudCwgMCBp
ZiB0aGV5IGFyZSB0aGUgc2FtZS4KKyAgICAgICAgQWxzbyBwcm9kdWNlIGEgZGVsdGEgaW1hZ2Ug
b2YgdGhlIHR3byBpbWFnZXMgYW5kIHdyaXRlIHRoYXQgaW50bworICAgICAgICB8ZGlmZl9maWxl
bmFtZXwuCisKKyAgICAgICAgV2hpbGUgdGhpcyBpcyBhIGdlbmVyaWMgcm91dGluZSwgd2UgaW5j
bHVkZSBpdCBpbiB0aGUgUG9ydAorICAgICAgICBpbnRlcmZhY2Ugc28gdGhhdCBpdCBjYW4gYmUg
b3ZlcnJpZGVuIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiIiIgorICAgICAgICBleGVjdXRhYmxlID0g
c2VsZi5fcGF0aF90b19pbWFnZV9kaWZmKCkKKyAgICAgICAgY21kID0gW2V4ZWN1dGFibGUsICct
LWRpZmYnLCBhY3R1YWxfZmlsZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lLAorICAgICAgICAgICAg
ICAgZGlmZl9maWxlbmFtZV0KKyAgICAgICAgcmVzdWx0ID0gMQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNhbGwoY21kKQorICAgICAgICBleGNlcHQgT1NF
cnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UIG9yIGUuZXJy
bm8gPT0gZXJybm8uRUFDQ0VTOgorICAgICAgICAgICAgICAgIF9jb21wYXJlX2F2YWlsYWJsZSA9
IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGUKKyAgICAg
ICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAjIHdvcmsgYXJvdW5kIGEgcmFjZSBj
b25kaXRpb24gaW4gUHl0aG9uIDIuNCdzIGltcGxlbWVudGF0aW9uCisgICAgICAgICAgICAjIG9m
IHN1YnByb2Nlc3MuUG9wZW4KKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dAorCisgICAgZGVmIGRpZmZfdGV4dChzZWxmLCBhY3R1YWxfdGV4dCwgZXhwZWN0ZWRfdGV4dCwK
KyAgICAgICAgICAgICAgICAgIGFjdHVhbF9maWxlbmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUpOgor
ICAgICAgICAiIiJSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRpZmYgb2YgdGhlIHR3
byB0ZXh0IHN0cmluZ3MKKyAgICAgICAgaW4gJ3VuaWZpZWQgZGlmZicgZm9ybWF0LgorCisgICAg
ICAgIFdoaWxlIHRoaXMgaXMgYSBnZW5lcmljIHJvdXRpbmUsIHdlIGluY2x1ZGUgaXQgaW4gdGhl
IFBvcnQKKyAgICAgICAgaW50ZXJmYWNlIHNvIHRoYXQgaXQgY2FuIGJlIG92ZXJyaWRlbiBmb3Ig
dGVzdGluZyBwdXJwb3Nlcy4iIiIKKyAgICAgICAgZGlmZiA9IGRpZmZsaWIudW5pZmllZF9kaWZm
KGV4cGVjdGVkX3RleHQuc3BsaXRsaW5lcyhUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFjdHVhbF90ZXh0LnNwbGl0bGluZXMoVHJ1ZSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9maWxlbmFtZSkKKyAgICAgICAgcmV0dXJuICcn
LmpvaW4oZGlmZikKKworICAgIGRlZiBleHBlY3RlZF9iYXNlbGluZXMoc2VsZiwgZmlsZW5hbWUs
IHN1ZmZpeCwgYWxsX2Jhc2VsaW5lcz1GYWxzZSk6CisgICAgICAgICIiIkdpdmVuIGEgdGVzdCBu
YW1lLCBmaW5kcyB3aGVyZSB0aGUgYmFzZWxpbmUgcmVzdWx0cyBhcmUgbG9jYXRlZC4KKworICAg
ICAgICBBcmdzOgorICAgICAgICBmaWxlbmFtZTogYWJzb2x1dGUgZmlsZW5hbWUgdG8gdGVzdCBm
aWxlCisgICAgICAgIHN1ZmZpeDogZmlsZSBzdWZmaXggb2YgdGhlIGV4cGVjdGVkIHJlc3VsdHMs
IGluY2x1ZGluZyBkb3Q7IGUuZy4KKyAgICAgICAgICAgICcudHh0JyBvciAnLnBuZycuICBUaGlz
IHNob3VsZCBub3QgYmUgTm9uZSwgYnV0IG1heSBiZSBhbiBlbXB0eQorICAgICAgICAgICAgc3Ry
aW5nLgorICAgICAgICBhbGxfYmFzZWxpbmVzOiBJZiBUcnVlLCByZXR1cm4gYW4gb3JkZXJlZCBs
aXN0IG9mIGFsbCBiYXNlbGluZSBwYXRocworICAgICAgICAgICAgZm9yIHRoZSBnaXZlbiBwbGF0
Zm9ybS4gSWYgRmFsc2UsIHJldHVybiBvbmx5IHRoZSBmaXJzdCBvbmUuCisgICAgICAgIFJldHVy
bnMKKyAgICAgICAgYSBsaXN0IG9mICggcGxhdGZvcm1fZGlyLCByZXN1bHRzX2ZpbGVuYW1lICks
IHdoZXJlCisgICAgICAgICAgICBwbGF0Zm9ybV9kaXIgLSBhYnMgcGF0aCB0byB0aGUgdG9wIG9m
IHRoZSByZXN1bHRzIHRyZWUgKG9yIHRlc3QKKyAgICAgICAgICAgICAgICB0cmVlKQorICAgICAg
ICAgICAgcmVzdWx0c19maWxlbmFtZSAtIHJlbGF0aXZlIHBhdGggZnJvbSB0b3Agb2YgdHJlZSB0
byB0aGUgcmVzdWx0cworICAgICAgICAgICAgICAgIGZpbGUKKyAgICAgICAgICAgIChvcy5wYXRo
LmpvaW4gb2YgdGhlIHR3byBnaXZlcyB5b3UgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSwKKyAg
ICAgICAgICAgICAgICB1bmxlc3MgTm9uZSB3YXMgcmV0dXJuZWQuKQorICAgICAgICBSZXR1cm4g
dmFsdWVzIHdpbGwgYmUgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0ZSBmb3IgdGhlIGN1cnJlbnQK
KyAgICAgICAgcGxhdGZvcm0gKGUuZy4sICJcXCIgZm9yIHBhdGggc2VwYXJhdG9ycyBvbiBXaW5k
b3dzKS4gSWYgdGhlIHJlc3VsdHMKKyAgICAgICAgZmlsZSBpcyBub3QgZm91bmQsIHRoZW4gTm9u
ZSB3aWxsIGJlIHJldHVybmVkIGZvciB0aGUgZGlyZWN0b3J5LAorICAgICAgICBidXQgdGhlIGV4
cGVjdGVkIHJlbGF0aXZlIHBhdGhuYW1lIHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQuCisKKyAgICAg
ICAgVGhpcyByb3V0aW5lIGlzIGdlbmVyaWMgYnV0IGxpdmVzIGhlcmUgc2luY2UgaXQgaXMgdXNl
ZCBpbgorICAgICAgICBjb25qdW5jdGlvbiB3aXRoIHRoZSBvdGhlciBiYXNlbGluZSBhbmQgZmls
ZW5hbWUgcm91dGluZXMgdGhhdCBhcmUKKyAgICAgICAgcGxhdGZvcm0gc3BlY2lmaWMuCisgICAg
ICAgICIiIgorICAgICAgICB0ZXN0bmFtZSA9IG9zLnBhdGguc3BsaXRleHQoc2VsZi5yZWxhdGl2
ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSlbMF0KKworICAgICAgICBiYXNlbGluZV9maWxlbmFt
ZSA9IHRlc3RuYW1lICsgJy1leHBlY3RlZCcgKyBzdWZmaXgKKworICAgICAgICBiYXNlbGluZV9z
ZWFyY2hfcGF0aCA9IHNlbGYuYmFzZWxpbmVfc2VhcmNoX3BhdGgoKQorCisgICAgICAgIGJhc2Vs
aW5lcyA9IFtdCisgICAgICAgIGZvciBwbGF0Zm9ybV9kaXIgaW4gYmFzZWxpbmVfc2VhcmNoX3Bh
dGg6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGxhdGZvcm1f
ZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpOgorICAgICAgICAgICAgICAgIGJhc2VsaW5lcy5hcHBl
bmQoKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQorCisgICAgICAgICAgICBpZiBu
b3QgYWxsX2Jhc2VsaW5lcyBhbmQgYmFzZWxpbmVzOgorICAgICAgICAgICAgICAgIHJldHVybiBi
YXNlbGluZXMKKworICAgICAgICAjIElmIGl0IHdhc24ndCBmb3VuZCBpbiBhIHBsYXRmb3JtIGRp
cmVjdG9yeSwgcmV0dXJuIHRoZSBleHBlY3RlZAorICAgICAgICAjIHJlc3VsdCBpbiB0aGUgdGVz
dCBkaXJlY3RvcnksIGV2ZW4gaWYgbm8gc3VjaCBmaWxlIGFjdHVhbGx5IGV4aXN0cy4KKyAgICAg
ICAgcGxhdGZvcm1fZGlyID0gc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkKKyAgICAgICAgaWYgb3Mu
cGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUp
KToKKyAgICAgICAgICAgIGJhc2VsaW5lcy5hcHBlbmQoKHBsYXRmb3JtX2RpciwgYmFzZWxpbmVf
ZmlsZW5hbWUpKQorCisgICAgICAgIGlmIGJhc2VsaW5lczoKKyAgICAgICAgICAgIHJldHVybiBi
YXNlbGluZXMKKworICAgICAgICByZXR1cm4gWyhOb25lLCBiYXNlbGluZV9maWxlbmFtZSldCisK
KyAgICBkZWYgZXhwZWN0ZWRfZmlsZW5hbWUoc2VsZiwgZmlsZW5hbWUsIHN1ZmZpeCk6CisgICAg
ICAgICIiIkdpdmVuIGEgdGVzdCBuYW1lLCByZXR1cm5zIGFuIGFic29sdXRlIHBhdGggdG8gaXRz
IGV4cGVjdGVkIHJlc3VsdHMuCisKKyAgICAgICAgSWYgbm8gZXhwZWN0ZWQgcmVzdWx0cyBhcmUg
Zm91bmQgaW4gYW55IG9mIHRoZSBzZWFyY2hlZCBkaXJlY3RvcmllcywKKyAgICAgICAgdGhlIGRp
cmVjdG9yeSBpbiB3aGljaCB0aGUgdGVzdCBpdHNlbGYgaXMgbG9jYXRlZCB3aWxsIGJlIHJldHVy
bmVkLgorICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGluIHRoZSBmb3JtYXQgYXBwcm9wcmlh
dGUgZm9yIHRoZSBwbGF0Zm9ybQorICAgICAgICAoZS5nLiwgIlxcIiBmb3IgcGF0aCBzZXBhcmF0
b3JzIG9uIHdpbmRvd3MpLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgIGZpbGVuYW1lOiBhYnNv
bHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKKyAgICAgICAgc3VmZml4OiBmaWxlIHN1ZmZpeCBv
ZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cywgaW5jbHVkaW5nIGRvdDsgZS5nLiAnLnR4dCcKKyAgICAg
ICAgICAgIG9yICcucG5nJy4gIFRoaXMgc2hvdWxkIG5vdCBiZSBOb25lLCBidXQgbWF5IGJlIGFu
IGVtcHR5IHN0cmluZy4KKyAgICAgICAgcGxhdGZvcm06IHRoZSBtb3N0LXNwZWNpZmljIGRpcmVj
dG9yeSBuYW1lIHRvIHVzZSB0byBidWlsZCB0aGUKKyAgICAgICAgICAgIHNlYXJjaCBsaXN0IG9m
IGRpcmVjdG9yaWVzLCBlLmcuLCAnY2hyb21pdW0td2luJywgb3IKKyAgICAgICAgICAgICdjaHJv
bWl1bS1tYWMtbGVvcGFyZCcgKHdlIGZvbGxvdyB0aGUgV2ViS2l0IGZvcm1hdCkKKworICAgICAg
ICBUaGlzIHJvdXRpbmUgaXMgZ2VuZXJpYyBidXQgaXMgaW1wbGVtZW50ZWQgaGVyZSB0byBsaXZl
IGFsb25nc2lkZQorICAgICAgICB0aGUgb3RoZXIgYmFzZWxpbmUgYW5kIGZpbGVuYW1lIG1hbmlw
dWxhdGlvbiByb3V0aW5lcy4KKyAgICAgICAgIiIiCisgICAgICAgIHBsYXRmb3JtX2RpciwgYmFz
ZWxpbmVfZmlsZW5hbWUgPSBzZWxmLmV4cGVjdGVkX2Jhc2VsaW5lcygKKyAgICAgICAgICAgIGZp
bGVuYW1lLCBzdWZmaXgpWzBdCisgICAgICAgIGlmIHBsYXRmb3JtX2RpcjoKKyAgICAgICAgICAg
IHJldHVybiBvcy5wYXRoLmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkKKyAg
ICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgYmFzZWxp
bmVfZmlsZW5hbWUpCisKKyAgICBkZWYgZmlsZW5hbWVfdG9fdXJpKHNlbGYsIGZpbGVuYW1lKToK
KyAgICAgICAgIiIiQ29udmVydCBhIHRlc3QgZmlsZSB0byBhIFVSSS4iIiIKKyAgICAgICAgTEFZ
T1VUVEVTVF9IVFRQX0RJUiA9ICJodHRwL3Rlc3RzLyIKKyAgICAgICAgTEFZT1VUVEVTVF9XRUJT
T0NLRVRfRElSID0gIndlYnNvY2tldC90ZXN0cy8iCisKKyAgICAgICAgcmVsYXRpdmVfcGF0aCA9
IHNlbGYucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgcG9ydCA9IE5v
bmUKKyAgICAgICAgdXNlX3NzbCA9IEZhbHNlCisKKyAgICAgICAgaWYgcmVsYXRpdmVfcGF0aC5z
dGFydHN3aXRoKExBWU9VVFRFU1RfSFRUUF9ESVIpOgorICAgICAgICAgICAgIyBodHRwL3Rlc3Rz
LyBydW4gb2ZmIHBvcnQgODAwMCBhbmQgc3NsLyBvZmYgODQ0MworICAgICAgICAgICAgcmVsYXRp
dmVfcGF0aCA9IHJlbGF0aXZlX3BhdGhbbGVuKExBWU9VVFRFU1RfSFRUUF9ESVIpOl0KKyAgICAg
ICAgICAgIHBvcnQgPSA4MDAwCisgICAgICAgIGVsaWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRo
KExBWU9VVFRFU1RfV0VCU09DS0VUX0RJUik6CisgICAgICAgICAgICAjIHdlYnNvY2tldC90ZXN0
cy8gcnVuIG9mZiBwb3J0IDg4ODAgYW5kIDkzMjMKKyAgICAgICAgICAgICMgTm90ZTogdGhlIHJv
b3QgaXMgLywgbm90IHdlYnNvY2tldC90ZXN0cy8KKyAgICAgICAgICAgIHBvcnQgPSA4ODgwCisK
KyAgICAgICAgIyBNYWtlIGh0dHAvdGVzdHMvbG9jYWwgcnVuIGFzIGxvY2FsIGZpbGVzLiBUaGlz
IGlzIHRvIG1pbWljIHRoZQorICAgICAgICAjIGxvZ2ljIGluIHJ1bi13ZWJraXQtdGVzdHMuCisg
ICAgICAgICMKKyAgICAgICAgIyBUT0RPKGRwcmFua2UpOiByZW1vdmUgdGhlIG1lZGlhIHJlZmVy
ZW5jZSBhbmQgdGhlIFNTTCByZWZlcmVuY2U/CisgICAgICAgIGlmIChwb3J0IGFuZCBub3QgcmVs
YXRpdmVfcGF0aC5zdGFydHN3aXRoKCJsb2NhbC8iKSBhbmQKKyAgICAgICAgICAgIG5vdCByZWxh
dGl2ZV9wYXRoLnN0YXJ0c3dpdGgoIm1lZGlhLyIpKToKKyAgICAgICAgICAgIGlmIHJlbGF0aXZl
X3BhdGguc3RhcnRzd2l0aCgic3NsLyIpOgorICAgICAgICAgICAgICAgIHBvcnQgKz0gNDQzCisg
ICAgICAgICAgICAgICAgcHJvdG9jb2wgPSAiaHR0cHMiCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHByb3RvY29sID0gImh0dHAiCisgICAgICAgICAgICByZXR1cm4gIiVzOi8v
MTI3LjAuMC4xOiV1LyVzIiAlIChwcm90b2NvbCwgcG9ydCwgcmVsYXRpdmVfcGF0aCkKKworICAg
ICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKKyAgICAgICAgICAg
IHJldHVybiAiZmlsZTovLy8iICsgc2VsZi5nZXRfYWJzb2x1dGVfcGF0aChmaWxlbmFtZSkKKyAg
ICAgICAgcmV0dXJuICJmaWxlOi8vIiArIHNlbGYuZ2V0X2Fic29sdXRlX3BhdGgoZmlsZW5hbWUp
CisKKyAgICBkZWYgZ2V0X2Fic29sdXRlX3BhdGgoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAi
IiJSZXR1cm4gdGhlIGFic29sdXRlIHBhdGggaW4gdW5peCBmb3JtYXQgZm9yIHRoZSBnaXZlbiBm
aWxlbmFtZS4KKworICAgICAgICBUaGlzIHJvdXRpbmUgZXhpc3RzIHNvIHRoYXQgcGxhdGZvcm1z
IHRoYXQgZG9uJ3QgdXNlIHVuaXggZmlsZW5hbWVzCisgICAgICAgIGNhbiBjb252ZXJ0IGFjY29y
ZGluZ2x5LiIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKQorCisg
ICAgZGVmIGxheW91dF90ZXN0c19kaXIoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgYWJz
b2x1dGUgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkuIiIiCisg
ICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnTGF5b3V0VGVzdHMnKQor
CisgICAgZGVmIG1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYsICpwYXRoKToKKyAgICAgICAgIiIi
Q3JlYXRlcyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9p
bigqcGF0aCkpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgaWYgZS5l
cnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBu
YW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHBvcnQgKGUuZy4s
ICdtYWMnLCAnY2hyb21pdW0td2luLXhwJykuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgaXMg
ZGlmZmVyZW50IGZyb20gdGhlIHRlc3RfcGxhdGZvcm1fbmFtZSgpLCB3aGljaAorICAgICAgICBt
YXkgYmUgZGlmZmVyZW50IChlLmcuLCAnd2luLXhwJyBpbnN0ZWFkIG9mICdjaHJvbWl1bS13aW4t
eHAnLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIG51bV9jb3Jlcyhz
ZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgY29yZXMvY3B1cyBhdmFpbGFi
bGUgb24gdGhpcyBtYWNoaW5lLgorCisgICAgICAgIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGRl
dGVybWluZSB0aGUgZGVmYXVsdCBhbW91bnQgb2YgcGFyYWxsZWxpc20KKyAgICAgICAgdXNlZCBi
eSBydW4tY2hyb21pdW0td2Via2l0LXRlc3RzLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yKCdQb3J0Lm51bV9jb3JlcycpCisKKyAgICBkZWYgcGF0aF9mcm9tX3dlYmtpdF9i
YXNlKHNlbGYsICpjb21wcyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byBw
YXRoIG1hZGUgYnkgam9pbmluZyB0aGUgdG9wIG9mIHRoZQorICAgICAgICBXZWJLaXQgc291cmNl
IHRyZWUgYW5kIHRoZSBsaXN0IG9mIHBhdGggY29tcG9uZW50cyBpbiB8KmNvbXBzfC4iIiIKKyAg
ICAgICAgaWYgbm90IHNlbGYuX3dlYmtpdF9iYXNlX2RpcjoKKyAgICAgICAgICAgIGFic3BhdGgg
PSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCisgICAgICAgICAgICBzZWxmLl93ZWJraXRfYmFz
ZV9kaXIgPSBhYnNwYXRoWzA6YWJzcGF0aC5maW5kKCdXZWJLaXRUb29scycpXQorICAgICAgICBy
ZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuX3dlYmtpdF9iYXNlX2RpciwgKmNvbXBzKQorCisgICAg
ZGVmIHJlbW92ZV9kaXJlY3Rvcnkoc2VsZiwgKnBhdGgpOgorICAgICAgICAiIiJSZWN1cnNpdmVs
eSByZW1vdmVzIGEgZGlyZWN0b3J5LCBldmVuIGlmIGl0J3MgbWFya2VkIHJlYWQtb25seS4KKwor
ICAgICAgICBSZW1vdmUgdGhlIGRpcmVjdG9yeSBsb2NhdGVkIGF0ICpwYXRoLCBpZiBpdCBleGlz
dHMuCisKKyAgICAgICAgc2h1dGlsLnJtdHJlZSgpIGRvZXNuJ3Qgd29yayBvbiBXaW5kb3dzIGlm
IGFueSBvZiB0aGUgZmlsZXMKKyAgICAgICAgb3IgZGlyZWN0b3JpZXMgYXJlIHJlYWQtb25seSwg
d2hpY2ggc3ZuIHJlcG9zaXRvcmllcyBhbmQKKyAgICAgICAgc29tZSAuc3ZuIGZpbGVzIGFyZS4g
IFdlIG5lZWQgdG8gYmUgYWJsZSB0byBmb3JjZSB0aGUgZmlsZXMKKyAgICAgICAgdG8gYmUgd3Jp
dGFibGUgKGkuZS4sIGRlbGV0YWJsZSkgYXMgd2UgdHJhdmVyc2UgdGhlIHRyZWUuCisKKyAgICAg
ICAgRXZlbiB3aXRoIGFsbCB0aGlzLCBXaW5kb3dzIHN0aWxsIHNvbWV0aW1lcyBmYWlscyB0byBk
ZWxldGUgYSBmaWxlLAorICAgICAgICBjaXRpbmcgYSBwZXJtaXNzaW9uIGVycm9yIChtYXliZSBz
b21ldGhpbmcgdG8gZG8gd2l0aCBhbnRpdmlydXMKKyAgICAgICAgc2NhbnMgb3IgZGlzayBpbmRl
eGluZykuICBUaGUgYmVzdCBzdWdnZXN0aW9uIGFueSBvZiB0aGUgdXNlcgorICAgICAgICBmb3J1
bXMgaGFkIHdhcyB0byB3YWl0IGEgYml0IGFuZCB0cnkgYWdhaW4sIHNvIHdlIGRvIHRoYXQgdG9v
LgorICAgICAgICBJdCdzIGhhbmQtd2F2aW5nLCBidXQgc29tZXRpbWVzIGl0IHdvcmtzLiA6Lwor
ICAgICAgICAiIiIKKyAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKCpwYXRoKQorICAg
ICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKKyAgICAgICAgICAgIHJldHVy
bgorCisgICAgICAgIHdpbjMyID0gRmFsc2UKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3
aW4zMic6CisgICAgICAgICAgICB3aW4zMiA9IFRydWUKKyAgICAgICAgICAgICMgU29tZSBwZW9w
bGUgZG9uJ3QgaGF2ZSB0aGUgQVBJcyBpbnN0YWxsZWQuIEluIHRoYXQgY2FzZSB3ZSdsbCBkbwor
ICAgICAgICAgICAgIyB3aXRob3V0LgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg
IHdpbjMyYXBpID0gX19pbXBvcnRfXygnd2luMzJhcGknKQorICAgICAgICAgICAgICAgIHdpbjMy
Y29uID0gX19pbXBvcnRfXygnd2luMzJjb24nKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVy
cm9yOgorICAgICAgICAgICAgICAgIHdpbjMyID0gRmFsc2UKKworICAgICAgICAgICAgZGVmIHJl
bW92ZV93aXRoX3JldHJ5KHJtZnVuYywgcGF0aCk6CisgICAgICAgICAgICAgICAgb3MuY2htb2Qo
cGF0aCwgc3RhdC5TX0lXUklURSkKKyAgICAgICAgICAgICAgICBpZiB3aW4zMjoKKyAgICAgICAg
ICAgICAgICAgICAgd2luMzJhcGkuU2V0RmlsZUF0dHJpYnV0ZXMocGF0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW4zMmNvbi5GSUxFX0FUVFJJQlVU
RV9OT1JNQUwpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcm1mdW5jKHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3Is
IGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFDQ0VTOgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ0Zh
aWxlZCB0byBkZWxldGUgJXM6IHRyeWluZyBhZ2FpbicgJSByZXByKHBhdGgpCisgICAgICAgICAg
ICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm1m
dW5jKHBhdGgpCisgICAgICAgIGVsc2U6CisKKyAgICAgICAgICAgIGRlZiByZW1vdmVfd2l0aF9y
ZXRyeShybWZ1bmMsIHBhdGgpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHBh
dGgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3MucmVtb3ZlKHBhdGgpCisgICAgICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJtZnVuYyhwYXRoKQor
CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGZpbGVfcGF0aCwgdG9w
ZG93bj1GYWxzZSk6CisgICAgICAgICAgICAjIEZvciBQT1NJWDogIG1ha2luZyB0aGUgZGlyZWN0
b3J5IHdyaXRhYmxlIGd1YXJhbnRlZXMKKyAgICAgICAgICAgICMgcmVtb3ZhYmlsaXR5LiBXaW5k
b3dzIHdpbGwgaWdub3JlIHRoZSBub24tcmVhZC1vbmx5CisgICAgICAgICAgICAjIGJpdHMgaW4g
dGhlIGNobW9kIHZhbHVlLgorICAgICAgICAgICAgb3MuY2htb2Qocm9vdCwgMDc3MCkKKyAgICAg
ICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIHJlbW92ZV93aXRoX3Jl
dHJ5KG9zLnJlbW92ZSwgb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorICAgICAgICAgICAgZm9y
IG5hbWUgaW4gZGlyczoKKyAgICAgICAgICAgICAgICByZW1vdmVfd2l0aF9yZXRyeShvcy5ybWRp
ciwgb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorCisgICAgICAgIHJlbW92ZV93aXRoX3JldHJ5
KG9zLnJtZGlyLCBmaWxlX3BhdGgpCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1lKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHJlbGF0aXZlX3Rlc3RfZmls
ZW5hbWUoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJSZWxhdGl2ZSB1bml4LXN0eWxlIHBh
dGggZm9yIGEgZmlsZW5hbWUgdW5kZXIgdGhlIExheW91dFRlc3RzCisgICAgICAgIGRpcmVjdG9y
eS4gRmlsZW5hbWVzIG91dHNpZGUgdGhlIExheW91dFRlc3RzIGRpcmVjdG9yeSBzaG91bGQgcmFp
c2UKKyAgICAgICAgYW4gZXJyb3IuIiIiCisgICAgICAgIHJldHVybiBmaWxlbmFtZVtsZW4oc2Vs
Zi5sYXlvdXRfdGVzdHNfZGlyKCkpICsgMTpdCisKKyAgICBkZWYgcmVzdWx0c19kaXJlY3Rvcnko
c2VsZik6CisgICAgICAgICIiIkFic29sdXRlIHBhdGggdG8gdGhlIHBsYWNlIHRvIHN0b3JlIHRo
ZSB0ZXN0IHJlc3VsdHMuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkKCdQb3J0LnJl
c3VsdHNfZGlyZWN0b3J5JykKKworICAgIGRlZiBzZXR1cF90ZXN0X3J1bihzZWxmKToKKyAgICAg
ICAgIiIiVGhpcyByb3V0aW5lIGNhbiBiZSBvdmVycmlkZGVuIHRvIHBlcmZvcm0gYW55IHBvcnQt
c3BlY2lmaWMKKyAgICAgICAgd29yayB0aGF0IHNob3V1bGQgYmUgZG9uZSBhdCB0aGUgYmVnaW5u
aW5nIG9mIGEgdGVzdCBydW4uIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBzaG93X2h0bWxf
cmVzdWx0c19maWxlKHNlbGYsIHJlc3VsdHNfZmlsZW5hbWUpOgorICAgICAgICAiIiJUaGlzIHJv
dXRpbmUgc2hvdWxkIGRpc3BsYXkgdGhlIEhUTUwgZmlsZSBwb2ludGVkIGF0IGJ5CisgICAgICAg
IHJlc3VsdHNfZmlsZW5hbWUgaW4gYSB1c2VycycgYnJvd3Nlci4iIiIKKyAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5zaG93X2h0bWxfcmVzdWx0c19maWxlJykKKworICAg
IGRlZiBzdGFydF9kcml2ZXIoc2VsZiwgcG5nX3BhdGgsIG9wdGlvbnMpOgorICAgICAgICAiIiJT
dGFydHMgYSBuZXcgdGVzdCBEcml2ZXIgYW5kIHJldHVybnMgYSBoYW5kbGUgdG8gdGhlIG9iamVj
dC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5zdGFydF9kcml2
ZXInKQorCisgICAgZGVmIHN0YXJ0X2hlbHBlcihzZWxmKToKKyAgICAgICAgIiIiU3RhcnQgYSBs
YXlvdXQgdGVzdCBoZWxwZXIgaWYgbmVlZGVkIG9uIHRoaXMgcG9ydC4gVGhlIHRlc3QgaGVscGVy
CisgICAgICAgIGlzIHVzZWQgdG8gcmVjb25maWd1cmUgZ3JhcGhpY3Mgc2V0dGluZ3MgYW5kIGRv
IG90aGVyIHRoaW5ncyB0aGF0CisgICAgICAgIG1heSBiZSBuZWNlc3NhcnkgdG8gZW5zdXJlIGEg
a25vd24gdGVzdCBjb25maWd1cmF0aW9uLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yKCdQb3J0LnN0YXJ0X2hlbHBlcicpCisKKyAgICBkZWYgc3RhcnRfaHR0cF9zZXJ2ZXIo
c2VsZik6CisgICAgICAgICIiIlN0YXJ0IGEgd2ViIHNlcnZlciBpZiBpdCBpcyBhdmFpbGFibGUu
IERvIG5vdGhpbmcgaWYKKyAgICAgICAgaXQgaXNuJ3QuIFRoaXMgcm91dGluZSBpcyBhbGxvd2Vk
IHRvIChhbmQgbWF5KSBmYWlsIGlmIGEgc2VydmVyCisgICAgICAgIGlzIGFscmVhZHkgcnVubmlu
Zy4iIiIKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy51c2VfYXBhY2hlOgorICAgICAgICAgICAg
c2VsZi5faHR0cF9zZXJ2ZXIgPSBhcGFjaGVfaHR0cF9zZXJ2ZXIuTGF5b3V0VGVzdEFwYWNoZUh0
dHBkKHNlbGYsCisgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9y
eSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyID0gaHR0cF9z
ZXJ2ZXIuTGlnaHR0cGQoc2VsZiwKKyAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3Vs
dHNfZGlyZWN0b3J5KQorICAgICAgICBzZWxmLl9odHRwX3NlcnZlci5zdGFydCgpCisKKyAgICBk
ZWYgc3RhcnRfd2Vic29ja2V0X3NlcnZlcihzZWxmKToKKyAgICAgICAgIiIiU3RhcnQgYSB3ZWJz
b2NrZXQgc2VydmVyIGlmIGl0IGlzIGF2YWlsYWJsZS4gRG8gbm90aGluZyBpZgorICAgICAgICBp
dCBpc24ndC4gVGhpcyByb3V0aW5lIGlzIGFsbG93ZWQgdG8gKGFuZCBtYXkpIGZhaWwgaWYgYSBz
ZXJ2ZXIKKyAgICAgICAgaXMgYWxyZWFkeSBydW5uaW5nLiIiIgorICAgICAgICBzZWxmLl93ZWJz
b2NrZXRfc2VydmVyID0gd2Vic29ja2V0X3NlcnZlci5QeVdlYlNvY2tldChzZWxmLAorICAgICAg
ICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5fd2Vi
c29ja2V0X3NlcnZlci5zdGFydCgpCisKKyAgICBkZWYgc3RvcF9oZWxwZXIoc2VsZik6CisgICAg
ICAgICIiIlNodXQgZG93biB0aGUgdGVzdCBoZWxwZXIgaWYgaXQgaXMgcnVubmluZy4gRG8gbm90
aGluZyBpZgorICAgICAgICBpdCBpc24ndCwgb3IgaXQgaXNuJ3QgYXZhaWxhYmxlLiIiIgorICAg
ICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LnN0b3BfaGVscGVyJykKKworICAg
IGRlZiBzdG9wX2h0dHBfc2VydmVyKHNlbGYpOgorICAgICAgICAiIiJTaHV0IGRvd24gdGhlIGh0
dHAgc2VydmVyIGlmIGl0IGlzIHJ1bm5pbmcuIERvIG5vdGhpbmcgaWYKKyAgICAgICAgaXQgaXNu
J3QsIG9yIGl0IGlzbid0IGF2YWlsYWJsZS4iIiIKKyAgICAgICAgaWYgc2VsZi5faHR0cF9zZXJ2
ZXI6CisgICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlci5zdG9wKCkKKworICAgIGRlZiBzdG9w
X3dlYnNvY2tldF9zZXJ2ZXIoc2VsZik6CisgICAgICAgICIiIlNodXQgZG93biB0aGUgd2Vic29j
a2V0IHNlcnZlciBpZiBpdCBpcyBydW5uaW5nLiBEbyBub3RoaW5nIGlmCisgICAgICAgIGl0IGlz
bid0LCBvciBpdCBpc24ndCBhdmFpbGFibGUuIiIiCisgICAgICAgIGlmIHNlbGYuX3dlYnNvY2tl
dF9zZXJ2ZXI6CisgICAgICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyLnN0b3AoKQorCisg
ICAgZGVmIHRlc3RfZXhwZWN0YXRpb25zKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSB0
ZXN0IGV4cGVjdGF0aW9ucyBmb3IgdGhpcyBwb3J0LgorCisgICAgICAgIEJhc2ljYWxseSB0aGlz
IHN0cmluZyBzaG91bGQgY29udGFpbiB0aGUgZXF1aXZhbGVudCBvZiBhCisgICAgICAgIHRlc3Rf
ZXhwZWN0YXRpb25zIGZpbGUuIFNlZSB0ZXN0X2V4cGVjdGF0aW9ucy5weSBmb3IgbW9yZSBkZXRh
aWxzLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LnRlc3RfZXhw
ZWN0YXRpb25zJykKKworICAgIGRlZiB0ZXN0X2Jhc2VfcGxhdGZvcm1fbmFtZXMoc2VsZik6Cisg
ICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgdGhlICdiYXNlJyBwbGF0Zm9ybXMgb24geW91ciBw
b3J0LiBUaGUgYmFzZQorICAgICAgICBwbGF0Zm9ybXMgcmVwcmVzZW50IGRpZmZlcmVudCBhcmNo
aXRlY3R1cmVzLCBvcGVyYXRpbmcgc3lzdGVtcywKKyAgICAgICAgb3IgaW1wbGVtZW50YXRpb25z
IChhcyBvcHBvc2VkIHRvIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBhIHNpbmdsZQorICAgICAgICBw
bGF0Zm9ybSkuIEZvciBleGFtcGxlLCAnbWFjJyBhbmQgJ3dpbicgbWlnaHQgYmUgZGlmZmVyZW50
IGJhc2UKKyAgICAgICAgcGxhdGZvcm1zLCB3aGVyZWFzZSAnbWFjLXRpZ2VyJyBhbmQgJ21hYy1s
ZW9wYXJkJyBtaWdodCBiZQorICAgICAgICBkaWZmZXJlbnQgcGxhdGZvcm1zLiBUaGlzIHJvdXRp
bmUgaXMgdXNlZCBieSB0aGUgcmViYXNlbGluaW5nIHRvb2wKKyAgICAgICAgYW5kIHRoZSBkYXNo
Ym9hcmRzLCBhbmQgdGhlIHN0cmluZ3MgY29ycmVzcG9uZCB0byB0aGUgaWRlbnRpZmllcnMKKyAg
ICAgICAgaW4geW91ciB0ZXN0IGV4cGVjdGF0aW9ucyAoKm5vdCogbmVjZXNzYXJpbHkgdGhlIHBs
YXRmb3JtIG5hbWVzCisgICAgICAgIHRoZW1zZWx2ZXMpLiIiIgorICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yKCdQb3J0LmJhc2VfdGVzdF9wbGF0Zm9ybXMnKQorCisgICAgZGVmIHRl
c3RfcGxhdGZvcm1fbmFtZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc3RyaW5nIHRo
YXQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIHBsYXRmb3JtIG5hbWUKKyAgICAgICAgaW4gdGhl
IHRlc3QgZXhwZWN0YXRpb25zLiBUaGlzIG1heSBiZSB0aGUgc2FtZSBhcyBuYW1lKCksIG9yIGl0
CisgICAgICAgIG1heSBiZSBkaWZmZXJlbnQuIEZvciBleGFtcGxlLCBjaHJvbWl1bSByZXR1cm5z
ICdtYWMnIGZvcgorICAgICAgICAnY2hyb21pdW0tbWFjJy4iIiIKKyAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcignUG9ydC50ZXN0X3BsYXRmb3JtX25hbWUnKQorCisgICAgZGVmIHRl
c3RfcGxhdGZvcm1zKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIHRlc3Qg
cGxhdGZvcm0gaWRlbnRpZmllcnMgYXMgdXNlZCBpbiB0aGUKKyAgICAgICAgdGVzdF9leHBlY3Rh
dGlvbnMgYW5kIG9uIGRhc2hib2FyZHMsIHRoZSByZWJhc2VsaW5pbmcgdG9vbCwgZXRjLgorCisg
ICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUg
bGlzdCBvZiBwb3J0cywKKyAgICAgICAgd2hpY2ggbXVzdCBiZSBnbG9iYWxseSB1bmlxdWUgKGUu
Zy4sIGJvdGggJ2Nocm9taXVtLW1hYycgYW5kICdtYWMnCisgICAgICAgIG1pZ2h0IHJldHVybiAn
bWFjJyBhcyBhIHRlc3RfcGxhdGZvcm0gbmFtZScuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IoJ1BvcnQucGxhdGZvcm1zJykKKworICAgIGRlZiB2ZXJzaW9uKHNlbGYpOgor
ICAgICAgICAiIiJSZXR1cm5zIGEgc3RyaW5nIGluZGljYXRpbmcgdGhlIHZlcnNpb24gb2YgYSBn
aXZlbiBwbGF0Zm9ybSwgZS5nLgorICAgICAgICAnLWxlb3BhcmQnIG9yICcteHAnLgorCisgICAg
ICAgIFRoaXMgaXMgdXNlZCB0byBoZWxwIGlkZW50aWZ5IHRoZSBleGFjdCBwb3J0IHdoZW4gcGFy
c2luZyB0ZXN0CisgICAgICAgIGV4cGVjdGF0aW9ucywgZGV0ZXJtaW5pbmcgc2VhcmNoIHBhdGhz
LCBhbmQgbG9nZ2luZyBpbmZvcm1hdGlvbi4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcignUG9ydC52ZXJzaW9uJykKKworICAgIGRlZiB3ZGlmZl90ZXh0KHNlbGYsIGFjdHVh
bF9maWxlbmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUpOgorICAgICAgICAiIiJSZXR1cm5zIGEgc3Ry
aW5nIG9mIEhUTUwgaW5kaWNhdGluZyB0aGUgd29yZC1sZXZlbCBkaWZmIG9mIHRoZQorICAgICAg
ICBjb250ZW50cyBvZiB0aGUgdHdvIGZpbGVuYW1lcy4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcg
aWYgd29yZC1sZXZlbAorICAgICAgICBkaWZmaW5nIGlzbid0IGF2YWlsYWJsZS4iIiIKKyAgICAg
ICAgZXhlY3V0YWJsZSA9IHNlbGYuX3BhdGhfdG9fd2RpZmYoKQorICAgICAgICBjbWQgPSBbZXhl
Y3V0YWJsZSwKKyAgICAgICAgICAgICAgICctLXN0YXJ0LWRlbGV0ZT0jI1dESUZGX0RFTCMjJywK
KyAgICAgICAgICAgICAgICctLWVuZC1kZWxldGU9IyNXRElGRl9FTkQjIycsCisgICAgICAgICAg
ICAgICAnLS1zdGFydC1pbnNlcnQ9IyNXRElGRl9BREQjIycsCisgICAgICAgICAgICAgICAnLS1l
bmQtaW5zZXJ0PSMjV0RJRkZfRU5EIyMnLAorICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZW5h
bWUsCisgICAgICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWVdCisgICAgICAgIGdsb2JhbCBfd2Rp
ZmZfYXZhaWxhYmxlCisgICAgICAgIHJlc3VsdCA9ICcnCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICMgUHl0aG9uJ3MgUG9wZW4gaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGFueSBwaXBlcyBvcGVu
ZWQgdG8gYQorICAgICAgICAgICAgIyBwcm9jZXNzIHRoYXQgY2FuJ3QgYmUgZXhlY3V0ZWQgdG8g
YmUgbGVha2VkLiAgU2luY2UgdGhpcworICAgICAgICAgICAgIyBjb2RlIGlzIHNwZWNpZmljYWxs
eSBkZXNpZ25lZCB0byB0b2xlcmF0ZSBleGVjIGZhaWx1cmVzCisgICAgICAgICAgICAjIHRvIGdy
YWNlZnVsbHkgaGFuZGxlIGNhc2VzIHdoZXJlIHdkaWZmIGlzIG5vdCBpbnN0YWxsZWQsCisgICAg
ICAgICAgICAjIHRoZSBidWcgcmVzdWx0cyBpbiBhIG1hc3NpdmUgZmlsZSBkZXNjcmlwdG9yIGxl
YWsuIEFzIGEKKyAgICAgICAgICAgICMgd29ya2Fyb3VuZCwgaWYgYW4gZXhlYyBmYWlsdXJlIGlz
IGV2ZXIgZXhwZXJpZW5jZWQgZm9yCisgICAgICAgICAgICAjIHdkaWZmLCBhc3N1bWUgaXQncyBu
b3QgYXZhaWxhYmxlLiAgVGhpcyB3aWxsIGxlYWsgb25lCisgICAgICAgICAgICAjIGZpbGUgZGVz
Y3JpcHRvciBidXQgdGhhdCdzIGJldHRlciB0aGFuIGxlYWtpbmcgZWFjaCB0aW1lCisgICAgICAg
ICAgICAjIHdkaWZmIHdvdWxkIGJlIHJ1bi4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMg
aHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWxpc3QvCisgICAgICAgICAg
ICAjICAgIDIwMDgtQXVndXN0LzUwNTc1My5odG1sCisgICAgICAgICAgICAjIGh0dHA6Ly9idWdz
LnB5dGhvbi5vcmcvaXNzdWUzMjEwCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIEl0IGFs
c28gaGFzIGEgdGhyZWFkaW5nIGJ1Zywgc28gd2UgZG9uJ3Qgb3V0cHV0IHdkaWZmIGlmCisgICAg
ICAgICAgICAjIHRoZSBQb3BlbiByYWlzZXMgYSBWYWx1ZUVycm9yLgorICAgICAgICAgICAgIyBo
dHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTIzNgorICAgICAgICAgICAgaWYgX3dkaWZmX2F2
YWlsYWJsZToKKyAgICAgICAgICAgICAgICB3ZGlmZiA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLAor
ICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgp
WzBdCisgICAgICAgICAgICAgICAgd2RpZmYgPSBjZ2kuZXNjYXBlKHdkaWZmKQorICAgICAgICAg
ICAgICAgIHdkaWZmID0gd2RpZmYucmVwbGFjZSgnIyNXRElGRl9ERUwjIycsICc8c3BhbiBjbGFz
cz1kZWw+JykKKyAgICAgICAgICAgICAgICB3ZGlmZiA9IHdkaWZmLnJlcGxhY2UoJyMjV0RJRkZf
QUREIyMnLCAnPHNwYW4gY2xhc3M9YWRkPicpCisgICAgICAgICAgICAgICAgd2RpZmYgPSB3ZGlm
Zi5yZXBsYWNlKCcjI1dESUZGX0VORCMjJywgJzwvc3Bhbj4nKQorICAgICAgICAgICAgICAgIHJl
c3VsdCA9ICc8aGVhZD48c3R5bGU+LmRlbCB7IGJhY2tncm91bmQ6ICNmYWE7IH0gJworICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSAnLmFkZCB7IGJhY2tncm91bmQ6ICNhZmE7IH08L3N0eWxlPjwv
aGVhZD4nCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICc8cHJlPicgKyB3ZGlmZiArICc8L3By
ZT4nCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgaWYgKGUuZXJybm8g
PT0gZXJybm8uRU5PRU5UIG9yIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTIG9yCisgICAgICAgICAg
ICAgICAgZS5lcnJubyA9PSBlcnJuby5FQ0hJTEQpOgorICAgICAgICAgICAgICAgIF93ZGlmZl9h
dmFpbGFibGUgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlz
ZSBlCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICMKKyAgICAjIFBST1RFQ1RFRCBST1VU
SU5FUworICAgICMKKyAgICAjIFRoZSByb3V0aW5lcyBiZWxvdyBzaG91bGQgb25seSBiZSBjYWxs
ZWQgYnkgcm91dGluZXMgaW4gdGhpcyBjbGFzcworICAgICMgb3IgYW55IG9mIGl0cyBzdWJjbGFz
c2VzLgorICAgICMKKworICAgIGRlZiBfa2lsbF9wcm9jZXNzKHNlbGYsIHBpZCk6CisgICAgICAg
ICIiIkZvcmNlZnVsbHkga2lsbCBhIHByb2Nlc3MuCisKKyAgICAgICAgVGhpcyByb3V0aW5lIHNo
b3VsZCBub3QgYmUgdXNlZCBvciBuZWVkZWQgZ2VuZXJpY2FsbHksIGJ1dCBjYW4gYmUKKyAgICAg
ICAgdXNlZCBpbiBoZWxwZXIgZmlsZXMgbGlrZSBodHRwX3NlcnZlci5weS4iIiIKKyAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5raWxsX3Byb2Nlc3MnKQorCisgICAgZGVm
IF9wYXRoX3RvX2FwYWNoZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRo
IHRvIHRoZSBhcGFjaGUgYmluYXJ5LgorCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIG9ubHkgYnkg
cG9ydHMgdGhhdCB1c2UgdGhlIGFwYWNoZV9odHRwX3NlcnZlciBtb2R1bGUuIiIiCisgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQucGF0aF90b19hcGFjaGUnKQorCisgICAg
ZGVmIF9wYXRoX3RvX2FwYWNoZV9jb25maWdfZmlsZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJu
cyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBhcGFjaGUgYmluYXJ5LgorCisgICAgICAgIFRoaXMgaXMg
bmVlZGVkIG9ubHkgYnkgcG9ydHMgdGhhdCB1c2UgdGhlIGFwYWNoZV9odHRwX3NlcnZlciBtb2R1
bGUuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQucGF0aF90b19h
cGFjaGVfY29uZmlnX2ZpbGUnKQorCisgICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmKToKKyAg
ICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0ZXN0IGRyaXZlciAoRHVtcFJl
bmRlclRyZWUpLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LnBh
dGhfdG9fZHJpdmVyJykKKworICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6CisgICAgICAg
ICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgbGF5b3V0X3Rlc3RfaGVscGVyIGJpbmFy
eSwgd2hpY2gKKyAgICAgICAgaXMgdXNlZCB0byBoZWxwIGNvbmZpZ3VyZSB0aGUgc3lzdGVtIGZv
ciB0aGUgdGVzdCBydW4sIG9yIE5vbmUKKyAgICAgICAgaWYgbm8gaGVscGVyIGlzIG5lZWRlZC4K
KworICAgICAgICBUaGlzIGlzIGxpa2VseSBvbmx5IHVzZWQgYnkgc3RhcnQvc3RvcF9oZWxwZXIo
KS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5fcGF0aF90b19o
ZWxwZXInKQorCisgICAgZGVmIF9wYXRoX3RvX2ltYWdlX2RpZmYoc2VsZik6CisgICAgICAgICIi
IlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgaW1hZ2VfZGlmZiBiaW5hcnksIG9yIE5vbmUg
aWYgaXQKKyAgICAgICAgaXMgbm90IGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIGlzIGxpa2Vs
eSB1c2VkIG9ubHkgYnkgZGlmZl9pbWFnZSgpIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IoJ1BvcnQucGF0aF90b19pbWFnZV9kaWZmJykKKworICAgIGRlZiBfcGF0aF90b19s
aWdodHRwZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgTGlnSFRU
UGQgYmluYXJ5LgorCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIG9ubHkgYnkgcG9ydHMgdGhhdCB1
c2UgdGhlIGh0dHBfc2VydmVyLnB5IG1vZHVsZS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcignUG9ydC5fcGF0aF90b19saWdodHRwZCcpCisKKyAgICBkZWYgX3BhdGhfdG9f
bGlnaHR0cGRfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0byB0
aGUgTGlnSFRUUGQgbW9kdWxlcyBkaXJlY3RvcnkuCisKKyAgICAgICAgVGhpcyBpcyBuZWVkZWQg
b25seSBieSBwb3J0cyB0aGF0IHVzZSB0aGUgaHR0cF9zZXJ2ZXIucHkgbW9kdWxlLiIiIgorICAg
ICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0Ll9wYXRoX3RvX2xpZ2h0dHBkX21v
ZHVsZXMnKQorCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkX3BocChzZWxmKToKKyAgICAgICAg
IiIiUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgTGlnSFRUUGQgUEhQIGV4ZWN1dGFibGUuCisKKyAg
ICAgICAgVGhpcyBpcyBuZWVkZWQgb25seSBieSBwb3J0cyB0aGF0IHVzZSB0aGUgaHR0cF9zZXJ2
ZXIucHkgbW9kdWxlLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0
Ll9wYXRoX3RvX2xpZ2h0dHBkX3BocCcpCisKKyAgICBkZWYgX3BhdGhfdG9fd2RpZmYoc2VsZik6
CisgICAgICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgd2RpZmYgYmluYXJ5LCBv
ciBOb25lIGlmIGl0IGlzCisgICAgICAgIG5vdCBhdmFpbGFibGUuCisKKyAgICAgICAgVGhpcyBp
cyBsaWtlbHkgdXNlZCBvbmx5IGJ5IHdkaWZmX3RleHQoKSIiIgorICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yKCdQb3J0Ll9wYXRoX3RvX3dkaWZmJykKKworICAgIGRlZiBfc2h1dF9k
b3duX2h0dHBfc2VydmVyKHNlbGYsIHBpZCk6CisgICAgICAgICIiIkZvcmNlZnVsbHkgYW5kIHN5
bmNocm9ub3VzbHkga2lsbHMgdGhlIHdlYiBzZXJ2ZXIuCisKKyAgICAgICAgVGhpcyByb3V0aW5l
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIGh0dHBfc2VydmVyLnB5IG9yIGl0cworICAgICAg
ICBzdWJjbGFzc2VzLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0
Ll9zaHV0X2Rvd25faHR0cF9zZXJ2ZXInKQorCisgICAgZGVmIF93ZWJraXRfYmFzZWxpbmVfcGF0
aChzZWxmLCBwbGF0Zm9ybSk6CisgICAgICAgICIiIlJldHVybiB0aGUgIGZ1bGwgcGF0aCB0byB0
aGUgdG9wIG9mIHRoZSBiYXNlbGluZSB0cmVlIGZvciBhCisgICAgICAgIGdpdmVuIHBsYXRmb3Jt
LiIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2Rpcigp
LCAncGxhdGZvcm0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtKQorCisK
K2NsYXNzIERyaXZlcjoKKyAgICAiIiJBYnN0cmFjdCBpbnRlcmZhY2UgZm9yIHRoZSBEdW1wUmVu
ZGVyVHJlZSBpbnRlcmZhY2UuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgcG5n
X3BhdGgsIG9wdGlvbnMpOgorICAgICAgICAiIiJJbml0aWFsaXplIGEgRHJpdmVyIHRvIHN1YnNl
cXVlbnRseSBydW4gdGVzdHMuCisKKyAgICAgICAgVHlwaWNhbGx5IHRoaXMgcm91dGluZSB3aWxs
IHNwYXduIER1bXBSZW5kZXJUcmVlIGluIGEgY29uZmlnCisgICAgICAgIHJlYWR5IGZvciBzdWJz
ZXF1ZW50IGlucHV0LgorCisgICAgICAgIHBvcnQgLSByZWZlcmVuY2UgYmFjayB0byB0aGUgcG9y
dCBvYmplY3QuCisgICAgICAgIHBuZ19wYXRoIC0gYW4gYWJzb2x1dGUgcGF0aCBmb3IgdGhlIGRy
aXZlciB0byB3cml0ZSBhbnkgaW1hZ2UKKyAgICAgICAgICAgIGRhdGEgZm9yIGEgdGVzdCAoYXMg
YSBQTkcpLiBJZiBubyBwYXRoIGlzIHByb3ZpZGVkLCB0aGF0CisgICAgICAgICAgICBpbmRpY2F0
ZXMgdGhhdCBwaXhlbCB0ZXN0IHJlc3VsdHMgd2lsbCBub3QgYmUgY2hlY2tlZC4KKyAgICAgICAg
b3B0aW9ucyAtIGFueSBwb3J0LXNwZWNpZmljIGRyaXZlciBvcHRpb25zLiIiIgorICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdEcml2ZXIuX19pbml0X18nKQorCisgICAgZGVmIHJ1
bl90ZXN0KHNlbGYsIHVyaSwgdGltZW91dCwgY2hlY2tzdW0pOgorICAgICAgICAiIiJSdW4gYSBz
aW5nbGUgdGVzdCBhbmQgcmV0dXJuIHRoZSByZXN1bHRzLgorCisgICAgICAgIE5vdGUgdGhhdCBp
dCBpcyBva2F5IGlmIGEgdGVzdCB0aW1lcyBvdXQgb3IgY3Jhc2hlcyBhbmQgbGVhdmVzCisgICAg
ICAgIHRoZSBkcml2ZXIgaW4gYW4gaW5kZXRlcm1pbmF0ZSBzdGF0ZS4gVGhlIHVwcGVyIGxheWVy
cyBvZiB0aGUgcHJvZ3JhbQorICAgICAgICBhcmUgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVw
IGFuZCBlbnN1cmluZyB0aGluZ3MgYXJlIG9rYXkuCisKKyAgICAgICAgdXJpIC0gYSBmdWxsIFVS
SSBmb3IgdGhlIGdpdmVuIHRlc3QKKyAgICAgICAgdGltZW91dCAtIG51bWJlciBvZiBtaWxsaXNl
Y29uZHMgdG8gd2FpdCBiZWZvcmUgYWJvcnRpbmcgdGhpcyB0ZXN0LgorICAgICAgICBjaGVja3N1
bSAtIGlmIHByZXNlbnQsIHRoZSBleHBlY3RlZCBjaGVja3N1bSBmb3IgdGhlIGltYWdlIGZvciB0
aGlzCisgICAgICAgICAgICB0ZXN0CisKKyAgICAgICAgUmV0dXJucyBhIHR1cGxlIG9mIHRoZSBm
b2xsb3dpbmc6CisgICAgICAgICAgICBjcmFzaCAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRo
ZXIgdGhlIGRyaXZlciBjcmFzaGVkIG9uIHRoZSB0ZXN0CisgICAgICAgICAgICB0aW1lb3V0IC0g
YSBib29sZWFuIGluZGljYXRpbmcgd2hlaHRlciB0aGUgdGVzdCB0aW1lZCBvdXQKKyAgICAgICAg
ICAgIGNoZWNrc3VtIC0gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2hlY2tzdW0gb2YgdGhlIGlt
YWdlLCBpZgorICAgICAgICAgICAgICAgIHByZXNlbnQKKyAgICAgICAgICAgIG91dHB1dCAtIGFu
eSB0ZXh0IG91dHB1dAorICAgICAgICAgICAgZXJyb3IgLSBhbnkgdW5leHBlY3RlZCBvciBhZGRp
dGlvbmFsIChvciBlcnJvcikgdGV4dCBvdXRwdXQKKworICAgICAgICBOb3RlIHRoYXQgdGhlIGlt
YWdlIGl0c2VsZiBzaG91bGQgYmUgd3JpdHRlbiB0byB0aGUgcGF0aCB0aGF0IHdhcworICAgICAg
ICBzcGVjaWZpZWQgaW4gdGhlIF9faW5pdF9fKCkgY2FsbC4iIiIKKyAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcignRHJpdmVyLnJ1bl90ZXN0JykKKworICAgIGRlZiBwb2xsKHNlbGYp
OgorICAgICAgICAiIiJSZXR1cm5zIE5vbmUgaWYgdGhlIERyaXZlciBpcyBzdGlsbCBydW5uaW5n
LiBSZXR1cm5zIHRoZSByZXR1cm5jb2RlCisgICAgICAgIGlmIGl0IGhhcyBleGl0ZWQuIiIiCisg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0RyaXZlci5wb2xsJykKKworICAgIGRl
ZiByZXR1cm5jb2RlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzeXN0ZW0tc3BlY2lm
aWMgcmV0dXJuY29kZSBpZiB0aGUgRHJpdmVyIGhhcyBzdG9wcGVkIG9yCisgICAgICAgIGV4aXRl
ZC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignRHJpdmVyLnJldHVybmNv
ZGUnKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVk
RXJyb3IoJ0RyaXZlci5zdG9wJykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkJKHJldmlz
aW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1OSBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQ2hyb21pdW0gaW1wbGVtZW50YXRpb25z
IG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcwor
aW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1l
CisKK2ltcG9ydCBiYXNlCitpbXBvcnQgaHR0cF9zZXJ2ZXIKK2ltcG9ydCB3ZWJzb2NrZXRfc2Vy
dmVyCisKKworY2xhc3MgQ2hyb21pdW1Qb3J0KGJhc2UuUG9ydCk6CisgICAgIiIiQWJzdHJhY3Qg
YmFzZSBjbGFzcyBmb3IgQ2hyb21pdW0gaW1wbGVtZW50YXRpb25zIG9mIHRoZSBQb3J0IGNsYXNz
LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5v
bmUpOgorICAgICAgICBiYXNlLlBvcnQuX19pbml0X18oc2VsZiwgcG9ydF9uYW1lLCBvcHRpb25z
KQorICAgICAgICBzZWxmLl9jaHJvbWl1bV9iYXNlX2RpciA9IE5vbmUKKworICAgIGRlZiBiYXNl
bGluZV9wYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2hyb21pdW1fYmFzZWxpbmVf
cGF0aChzZWxmLl9uYW1lKQorCisgICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYpOgorICAgICAg
ICByZXN1bHQgPSBUcnVlCisgICAgICAgIHRlc3Rfc2hlbGxfYmluYXJ5X3BhdGggPSBzZWxmLl9w
YXRoX3RvX2RyaXZlcigpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRlc3Rfc2hlbGxfYmlu
YXJ5X3BhdGgpOgorICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oW3Rlc3Rfc2hl
bGxfYmluYXJ5X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0t
Y2hlY2stbGF5b3V0LXRlc3Qtc3lzLWRlcHMnXSkKKyAgICAgICAgICAgIGlmIHByb2Mud2FpdCgp
ICE9IDA6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiQWJvcnRpbmcgYmVjYXVzZSBz
eXN0ZW0gZGVwZW5kZW5jaWVzIGNoZWNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJmYWlsZWQuIikKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJUbyBvdmVycmlkZSwg
aW52b2tlIHdpdGggLS1ub2NoZWNrLXN5cy1kZXBzIikKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigndGVzdCBk
cml2ZXIgaXMgbm90IGZvdW5kIGF0ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3Rfc2hlbGxfYmluYXJ5X3BhdGgpCisgICAgICAgICAgICByZXN1bHQgPSBGYWxzZQorCisgICAg
ICAgIGltYWdlX2RpZmZfcGF0aCA9IHNlbGYuX3BhdGhfdG9faW1hZ2VfZGlmZigpCisgICAgICAg
IGlmIChub3Qgb3MucGF0aC5leGlzdHMoaW1hZ2VfZGlmZl9wYXRoKSBhbmQgbm90CisgICAgICAg
ICAgICBzZWxmLl9vcHRpb25zLm5vX3BpeGVsX3Rlc3RzKToKKyAgICAgICAgICAgIGxvZ2dpbmcu
ZXJyb3IoJ2ltYWdlIGRpZmYgbm90IGZvdW5kIGF0ICVzJyAlIGltYWdlX2RpZmZfcGF0aCkKKyAg
ICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIlRvIG92ZXJyaWRlLCBpbnZva2Ugd2l0aCAtLW5vLXBp
eGVsLXRlc3RzIikKKyAgICAgICAgICAgIHJlc3VsdCA9IEZhbHNlCisKKyAgICAgICAgcmV0dXJu
IHJlc3VsdAorCisgICAgZGVmIGNvbXBhcmVfdGV4dChzZWxmLCBhY3R1YWxfdGV4dCwgZXhwZWN0
ZWRfdGV4dCk6CisgICAgICAgIHJldHVybiBhY3R1YWxfdGV4dCAhPSBleHBlY3RlZF90ZXh0CisK
KyAgICBkZWYgcGF0aF9mcm9tX2Nocm9taXVtX2Jhc2Uoc2VsZiwgKmNvbXBzKToKKyAgICAgICAg
IiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHBhdGggbWFkZSBieSBqb2luaW5nIHRoZSB0b3Ag
b2YgdGhlCisgICAgICAgIENocm9taXVtIHNvdXJjZSB0cmVlIGFuZCB0aGUgbGlzdCBvZiBwYXRo
IGNvbXBvbmVudHMgaW4gfCpjb21wc3wuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9jaHJvbWl1
bV9iYXNlX2RpcjoKKyAgICAgICAgICAgIGFic3BhdGggPSBvcy5wYXRoLmFic3BhdGgoX19maWxl
X18pCisgICAgICAgICAgICBzZWxmLl9jaHJvbWl1bV9iYXNlX2RpciA9IGFic3BhdGhbMDphYnNw
YXRoLmZpbmQoJ3RoaXJkX3BhcnR5JyldCisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2Vs
Zi5fY2hyb21pdW1fYmFzZV9kaXIsICpjb21wcykKKworICAgIGRlZiByZXN1bHRzX2RpcmVjdG9y
eShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoJ3dl
YmtpdCcsIHNlbGYuX29wdGlvbnMudGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorCisgICAg
ZGVmIHNldHVwX3Rlc3RfcnVuKHNlbGYpOgorICAgICAgICAjIERlbGV0ZSB0aGUgZGlzayBjYWNo
ZSBpZiBhbnkgdG8gZW5zdXJlIGEgY2xlYW4gdGVzdCBydW4uCisgICAgICAgIHRlc3Rfc2hlbGxf
YmluYXJ5X3BhdGggPSBzZWxmLl9wYXRoX3RvX2RyaXZlcigpCisgICAgICAgIGNhY2hlZGlyID0g
b3MucGF0aC5zcGxpdCh0ZXN0X3NoZWxsX2JpbmFyeV9wYXRoKVswXQorICAgICAgICBjYWNoZWRp
ciA9IG9zLnBhdGguam9pbihjYWNoZWRpciwgImNhY2hlIikKKyAgICAgICAgaWYgb3MucGF0aC5l
eGlzdHMoY2FjaGVkaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShjYWNoZWRpcikKKwor
ICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNfZmlsZW5hbWUpOgor
ICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFtzZWxmLl9wYXRoX3RvX2RyaXZlcigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVuYW1lX3RvX3VyaShyZXN1bHRzX2ZpbGVuYW1l
KV0pCisKKyAgICBkZWYgc3RhcnRfZHJpdmVyKHNlbGYsIGltYWdlX3BhdGgsIG9wdGlvbnMpOgor
ICAgICAgICAiIiJTdGFydHMgYSBuZXcgRHJpdmVyIGFuZCByZXR1cm5zIGEgaGFuZGxlIHRvIGl0
LiIiIgorICAgICAgICByZXR1cm4gQ2hyb21pdW1Ecml2ZXIoc2VsZiwgaW1hZ2VfcGF0aCwgb3B0
aW9ucykKKworICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZik6CisgICAgICAgIGhlbHBlcl9wYXRo
ID0gc2VsZi5fcGF0aF90b19oZWxwZXIoKQorICAgICAgICBpZiBoZWxwZXJfcGF0aDoKKyAgICAg
ICAgICAgIGxvZ2dpbmcuZGVidWcoIlN0YXJ0aW5nIGxheW91dCBoZWxwZXIgJXMiICUgaGVscGVy
X3BhdGgpCisgICAgICAgICAgICBzZWxmLl9oZWxwZXIgPSBzdWJwcm9jZXNzLlBvcGVuKFtoZWxw
ZXJfcGF0aF0sCisgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9
c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9Tm9uZSkKKyAgICAgICAgICAgIGlzX3JlYWR5ID0gc2Vs
Zi5faGVscGVyLnN0ZG91dC5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3QgaXNfcmVhZHku
c3RhcnRzd2l0aCgncmVhZHknKToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJsYXlv
dXRfdGVzdF9oZWxwZXIgZmFpbGVkIHRvIGJlIHJlYWR5IikKKworICAgIGRlZiBzdG9wX2hlbHBl
cihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faGVscGVyOgorICAgICAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygiU3RvcHBpbmcgbGF5b3V0IHRlc3QgaGVscGVyIikKKyAgICAgICAgICAgIHNlbGYuX2hl
bHBlci5zdGRpbi53cml0ZSgieFxuIikKKyAgICAgICAgICAgIHNlbGYuX2hlbHBlci5zdGRpbi5j
bG9zZSgpCisgICAgICAgICAgICBzZWxmLl9oZWxwZXIud2FpdCgpCisKKyAgICBkZWYgdGVzdF9i
YXNlX3BsYXRmb3JtX25hbWVzKHNlbGYpOgorICAgICAgICByZXR1cm4gKCdsaW51eCcsICdtYWMn
LCAnd2luJykKKworICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9ucyhzZWxmLCBvcHRpb25zPU5vbmUp
OgorICAgICAgICAiIiJSZXR1cm5zIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBmb3IgdGhpcyBwb3J0
LgorCisgICAgICAgIEJhc2ljYWxseSB0aGlzIHN0cmluZyBzaG91bGQgY29udGFpbiB0aGUgZXF1
aXZhbGVudCBvZiBhCisgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zIGZpbGUuIFNlZSB0ZXN0X2V4
cGVjdGF0aW9ucy5weSBmb3IgbW9yZSBkZXRhaWxzLiIiIgorICAgICAgICBleHBlY3RhdGlvbnNf
ZmlsZSA9IHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoJ3dlYmtpdCcsICd0b29scycsCisg
ICAgICAgICAgICAnbGF5b3V0X3Rlc3RzJywgJ3Rlc3RfZXhwZWN0YXRpb25zLnR4dCcpCisgICAg
ICAgIHJldHVybiBmaWxlKGV4cGVjdGF0aW9uc19maWxlLCAiciIpLnJlYWQoKQorCisgICAgZGVm
IHRlc3RfcGxhdGZvcm1fbmFtZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRlc3RfYmFz
ZV9wbGF0Zm9ybV9uYW1lcygpICsgKCd3aW4teHAnLAorICAgICAgICAgICAgJ3dpbi12aXN0YScs
ICd3aW4tNycpCisKKyAgICAjCisgICAgIyBQUk9URUNURUQgTUVUSE9EUworICAgICMKKyAgICAj
IFRoZXNlIHJvdXRpbmVzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSBvdGhlciBtZXRob2RzIGlu
IHRoaXMgZmlsZQorICAgICMgb3IgYW55IHN1YmNsYXNzZXMuCisgICAgIworCisgICAgZGVmIF9j
aHJvbWl1bV9iYXNlbGluZV9wYXRoKHNlbGYsIHBsYXRmb3JtKToKKyAgICAgICAgaWYgcGxhdGZv
cm0gaXMgTm9uZToKKyAgICAgICAgICAgIHBsYXRmb3JtID0gc2VsZi5uYW1lKCkKKyAgICAgICAg
cmV0dXJuIHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoJ3dlYmtpdCcsICdkYXRhJywgJ2xh
eW91dF90ZXN0cycsCisgICAgICAgICAgICAncGxhdGZvcm0nLCBwbGF0Zm9ybSwgJ0xheW91dFRl
c3RzJykKKworCitjbGFzcyBDaHJvbWl1bURyaXZlcihiYXNlLkRyaXZlcik6CisgICAgIiIiQWJz
dHJhY3QgaW50ZXJmYWNlIGZvciB0aGUgRHVtcFJlbmRlclRyZWUgaW50ZXJmYWNlLiIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGltYWdlX3BhdGgsIG9wdGlvbnMpOgorICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAg
ICAgICBzZWxmLl90YXJnZXQgPSBwb3J0Ll9vcHRpb25zLnRhcmdldAorICAgICAgICBzZWxmLl9p
bWFnZV9wYXRoID0gaW1hZ2VfcGF0aAorCisgICAgICAgIGNtZCA9IFtdCisgICAgICAgICMgSG9v
ayBmb3IgaW5qZWN0aW5nIHZhbGdyaW5kIG9yIG90aGVyIHJ1bnRpbWUgaW5zdHJ1bWVudGF0aW9u
LAorICAgICAgICAjIHVzZWQgYnkgZS5nLiB0b29scy92YWxncmluZC92YWxncmluZF90ZXN0cy5w
eS4KKyAgICAgICAgd3JhcHBlciA9IG9zLmVudmlyb24uZ2V0KCJCUk9XU0VSX1dSQVBQRVIiLCBO
b25lKQorICAgICAgICBpZiB3cmFwcGVyICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gW3dy
YXBwZXJdCisgICAgICAgIGlmIHNlbGYuX3BvcnQuX29wdGlvbnMud3JhcHBlcjoKKyAgICAgICAg
ICAgICMgVGhpcyBzcGxpdCgpIGlzbid0IHJlYWxseSB3aGF0IHdlIHdhbnQgLS0gaXQgaW5jb3Jy
ZWN0bHkgd2lsbAorICAgICAgICAgICAgIyBzcGxpdCBxdW90ZWQgc3RyaW5ncyB3aXRoaW4gdGhl
IHdyYXBwZXIgYXJndW1lbnQgLS0gYnV0IGluCisgICAgICAgICAgICAjIHByYWN0aWNlIGl0IHNo
b3VsZG4ndCBjb21lIHVwIGFuZCB0aGUgLS1oZWxwIG91dHB1dCB3YXJucworICAgICAgICAgICAg
IyBhYm91dCBpdCBhbnl3YXkuCisgICAgICAgICAgICBjbWQgKz0gc2VsZi5fb3B0aW9ucy53cmFw
cGVyLnNwbGl0KCkKKyAgICAgICAgY21kICs9IFtwb3J0Ll9wYXRoX3RvX2RyaXZlcigpLCAnLS1s
YXlvdXQtdGVzdHMnXQorICAgICAgICBpZiBvcHRpb25zOgorICAgICAgICAgICAgY21kICs9IG9w
dGlvbnMKKyAgICAgICAgc2VsZi5fcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRpbj1z
dWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKworICAgIGRlZiBwb2xsKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fcHJvYy5wb2xsKCkKKworICAgIGRlZiByZXR1cm5jb2RlKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5yZXR1cm5jb2RlCisKKyAgICBkZWYgcnVuX3Rl
c3Qoc2VsZiwgdXJpLCB0aW1lb3V0bXMsIGNoZWNrc3VtKToKKyAgICAgICAgb3V0cHV0ID0gW10K
KyAgICAgICAgZXJyb3IgPSBbXQorICAgICAgICBjcmFzaCA9IEZhbHNlCisgICAgICAgIHRpbWVv
dXQgPSBGYWxzZQorICAgICAgICBhY3R1YWxfdXJpID0gTm9uZQorICAgICAgICBhY3R1YWxfY2hl
Y2tzdW0gPSBOb25lCisKKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAg
IGNtZCA9IHVyaQorICAgICAgICBpZiB0aW1lb3V0bXM6CisgICAgICAgICAgICBjbWQgKz0gJyAn
ICsgc3RyKHRpbWVvdXRtcykKKyAgICAgICAgaWYgY2hlY2tzdW06CisgICAgICAgICAgICBjbWQg
Kz0gJyAnICsgY2hlY2tzdW0KKyAgICAgICAgY21kICs9ICJcbiIKKworICAgICAgICBzZWxmLl9w
cm9jLnN0ZGluLndyaXRlKGNtZCkKKyAgICAgICAgbGluZSA9IHNlbGYuX3Byb2Muc3Rkb3V0LnJl
YWRsaW5lKCkKKyAgICAgICAgd2hpbGUgbGluZS5yc3RyaXAoKSAhPSAiI0VPRiI6CisgICAgICAg
ICAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlbid0IGNyYXNoZWQuCisgICAgICAgICAgICBpZiBsaW5l
ID09ICcnIGFuZCBzZWxmLnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIFRo
aXMgaXMgaGV4IGNvZGUgMHhjMDAwMDAxZCwgd2hpY2ggaXMgdXNlZCBmb3IgYWJydXB0CisgICAg
ICAgICAgICAgICAgIyB0ZXJtaW5hdGlvbi4gVGhpcyBoYXBwZW5zIGlmIHdlIGhpdCBjdHJsK2Mg
ZnJvbSB0aGUgcHJvbXB0CisgICAgICAgICAgICAgICAgIyBhbmQgd2UgaGFwcGVuIHRvIGJlIHdh
aXRpbmcgb24gdGhlIHRlc3Rfc2hlbGwuCisgICAgICAgICAgICAgICAgIyBzZG95b246IE5vdCBz
dXJlIGZvciB3aGljaCBPUyBhbmQgaW4gd2hhdCBjaXJjdW1zdGFuY2VzIHRoZQorICAgICAgICAg
ICAgICAgICMgYWJvdmUgY29kZSBpcyB2YWxpZC4gV2hhdCB3b3JrcyBmb3IgbWUgdW5kZXIgTGlu
dXggdG8gZGV0ZWN0CisgICAgICAgICAgICAgICAgIyBjdHJsK2MgaXMgZm9yIHRoZSBzdWJwcm9j
ZXNzIHJldHVybmNvZGUgdG8gYmUgbmVnYXRpdmUKKyAgICAgICAgICAgICAgICAjIFNJR0lOVC4g
QW5kIHRoYXQgYWdyZWVzIHdpdGggdGhlIHN1YnByb2Nlc3MgZG9jdW1lbnRhdGlvbi4KKyAgICAg
ICAgICAgICAgICBpZiAoLTEwNzM3NDE1MTAgPT0gc2VsZi5fcHJvYy5yZXR1cm5jb2RlIG9yCisg
ICAgICAgICAgICAgICAgICAgIC0gc2lnbmFsLlNJR0lOVCA9PSBzZWxmLl9wcm9jLnJldHVybmNv
ZGUpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorICAgICAg
ICAgICAgICAgIGNyYXNoID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAg
ICAgICMgRG9uJ3QgaW5jbHVkZSAjVVJMIGxpbmVzIGluIG91ciBvdXRwdXQKKyAgICAgICAgICAg
IGlmIGxpbmUuc3RhcnRzd2l0aCgiI1VSTDoiKToKKyAgICAgICAgICAgICAgICBhY3R1YWxfdXJp
ID0gbGluZS5yc3RyaXAoKVs1Ol0KKyAgICAgICAgICAgICAgICBpZiB1cmkgIT0gYWN0dWFsX3Vy
aToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5mYXRhbCgiVGVzdCBnb3Qgb3V0IG9mIHN5
bmM6XG58JXN8XG58JXN8IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cmks
IGFjdHVhbF91cmkpKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigi
dGVzdCBvdXQgb2Ygc3luYyIpCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiI01E
NToiKToKKyAgICAgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSBsaW5lLnJzdHJpcCgpWzU6
XQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoIiNURVNUX1RJTUVEX09VVCIpOgor
ICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBUcnVlCisgICAgICAgICAgICAgICAgIyBUZXN0IHRp
bWVkIG91dCwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gcmVhZCB1bnRpbCAjRU9GLgorICAgICAgICAg
ICAgZWxpZiBhY3R1YWxfdXJpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQobGluZSkK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyb3IuYXBwZW5kKGxpbmUpCisK
KyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9wcm9jLnN0ZG91dC5yZWFkbGluZSgpCisKKyAgICAg
ICAgcmV0dXJuIChjcmFzaCwgdGltZW91dCwgYWN0dWFsX2NoZWNrc3VtLCAnJy5qb2luKG91dHB1
dCksCisgICAgICAgICAgICAgICAgJycuam9pbihlcnJvcikpCisKKyAgICBkZWYgc3RvcChzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5fcHJvYzoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4u
Y2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2UoKQorICAgICAgICAg
ICAgaWYgc2VsZi5fcHJvYy5zdGRlcnI6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRl
cnIuY2xvc2UoKQorICAgICAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSBub3QgaW4gKCd3aW4zMics
ICdjeWd3aW4nKSBhbmQKKyAgICAgICAgICAgICAgICBub3Qgc2VsZi5fcHJvYy5wb2xsKCkpOgor
ICAgICAgICAgICAgICAgICMgQ2xvc2luZyBzdGRpbi9zdGRvdXQvc3RkZXJyIGhhbmdzIHNvbWV0
aW1lcyBvbiBPUyBYLgorICAgICAgICAgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3
IikKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsia2lsbCIsICItOSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZi5fcHJvYy5waWQpXSwgc3RkZXJy
PW51bGwpCisgICAgICAgICAgICAgICAgbnVsbC5jbG9zZSgpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
LnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbGludXgu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bV9saW51eC5weQkocmV2aXNpb24gNTQzNjQpCisrKyBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0yNywyMjIgKzI3LDExOCBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIAotIiIiVGhpcyBpcyB0aGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIHBv
cnQKLSAgIHBhY2thZ2UuIFRoaXMgZmlsZSBzaG91bGQgb25seSBiZSBpbXBvcnRlZCBieSB0aGF0
IHBhY2thZ2UuIiIiCisiIiJDaHJvbWl1bSBNYWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQg
aW50ZXJmYWNlLiIiIgogCiBpbXBvcnQgb3MKK2ltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IHNpZ25h
bAogaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKLWltcG9ydCBsb2dnaW5nCiAKLWltcG9y
dCBjaHJvbWl1bV93aW4KLWltcG9ydCBwYXRoX3V0aWxzCitpbXBvcnQgY2hyb21pdW0KIAogCi1k
ZWYgcGxhdGZvcm1fbmFtZSgpOgotICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBsYXRm
b3JtIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIG9uLiIiIgotICAgIHJldHVybiAnY2hyb21pdW0t
bGludXgnICsgcGxhdGZvcm1fdmVyc2lvbigpCi0KLQotZGVmIHBsYXRmb3JtX3ZlcnNpb24oKToK
LSAgICAiIiJSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhlIHBsYXRmb3JtLCBlLmcu
ICctdmlzdGEnIG9yCi0gICAgJy1zbm93bGVvcGFyZCcuIElmIHRoZSBwbGF0Zm9ybSBkb2VzIG5v
dCBkaXN0aW5ndWlzaCBiZXR3ZWVuCi0gICAgbWlub3IgdmVyc2lvbnMsIGl0IHJldHVybnMgJycu
IiIiCi0gICAgcmV0dXJuICcnCi0KLQotZGVmIGdldF9udW1fY29yZXMoKToKLSAgICAiIiJSZXR1
cm5zIHRoZSBudW1iZXIgb2YgY29yZXMgb24gdGhlIG1hY2hpbmUuIEZvciBoeXBlcnRocmVhZGVk
IG1hY2hpbmVzLAotICAgIHRoaXMgd2lsbCBiZSBkb3VibGUgdGhlIG51bWJlciBvZiBhY3R1YWwg
cHJvY2Vzc29ycy4iIiIKLSAgICBudW1fY29yZXMgPSBvcy5zeXNjb25mKCJTQ19OUFJPQ0VTU09S
U19PTkxOIikKLSAgICBpZiBpc2luc3RhbmNlKG51bV9jb3JlcywgaW50KSBhbmQgbnVtX2NvcmVz
ID4gMDoKLSAgICAgICAgcmV0dXJuIG51bV9jb3JlcwotICAgIHJldHVybiAxCi0KLQotZGVmIGJh
c2VsaW5lX3BhdGgocGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgcGF0aCByZWxh
dGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSBmb3IgdGhlCi0gICAgYmFzZWxpbmVz
IGZvciB0aGUgc3BlY2lmaWVkIHBsYXRmb3JtIHZlcnNpb24uIElmIHxwbGF0Zm9ybXwgaXMgTm9u
ZSwKLSAgICB0aGVuIHRoZSB2ZXJzaW9uIGN1cnJlbnRseSBpbiB1c2UgaXMgdXNlZC4iIiIKLSAg
ICBpZiBwbGF0Zm9ybSBpcyBOb25lOgotICAgICAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUo
KQotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScs
ICdsYXlvdXRfdGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdw
bGF0Zm9ybScsIHBsYXRmb3JtLCAnTGF5b3V0VGVzdHMnKQotCi0KLWRlZiBiYXNlbGluZV9zZWFy
Y2hfcGF0aChwbGF0Zm9ybT1Ob25lKToKLSAgICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIGRpcmVj
dG9yaWVzIHRvIHNlYXJjaCBmb3IgYmFzZWxpbmVzL3Jlc3VsdHMsIGluCi0gICAgb3JkZXIgb2Yg
cHJlZmVyZW5jZS4gUGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0
cmVlLiIiIgotICAgIHJldHVybiBbYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSksCi0gICAgICAgICAg
ICBjaHJvbWl1bV93aW4uYmFzZWxpbmVfcGF0aCgnY2hyb21pdW0td2luJyksCi0gICAgICAgICAg
ICBwYXRoX3V0aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCd3aW4nKSwKLSAgICAgICAgICAgIHBh
dGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpXQotCi0KLWRlZiBhcGFjaGVfZXhl
Y3V0YWJsZV9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZXhlY3V0YWJsZSBwYXRoIHRvIHN0
YXJ0IEFwYWNoZSIiIgotICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oIi91c3IiLCAic2JpbiIsICJh
cGFjaGUyIikKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICAgICAgcmV0dXJuIHBh
dGgKLSAgICBwcmludCAiVW5hYmxlIHRvIGZpbmUgQXBhY2hlIGV4ZWN1dGFibGUgJXMiICUgcGF0
aAotICAgIF9taXNzaW5nX2FwYWNoZSgpCi0KLQotZGVmIGFwYWNoZV9jb25maWdfZmlsZV9wYXRo
KCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0byBBcGFjaGUgY29uZmlnIGZpbGUiIiIKLSAg
ICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgidGhpcmRfcGFydHkiLCAiV2ViS2l0
IiwgIkxheW91dFRlc3RzIiwKLSAgICAgICAgImh0dHAiLCAiY29uZiIsICJhcGFjaGUyLWRlYmlh
bi1odHRwZC5jb25mIikKLQotCi1kZWYgbGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCk6Ci0gICAg
IiIiUmV0dXJucyB0aGUgZXhlY3V0YWJsZSBwYXRoIHRvIHN0YXJ0IExpZ0hUVFBkIiIiCi0gICAg
YmlucGF0aCA9ICIvdXNyL3NiaW4vbGlnaHR0cGQiCi0gICAgaWYgb3MucGF0aC5leGlzdHMoYmlu
cGF0aCk6Ci0gICAgICAgIHJldHVybiBiaW5wYXRoCi0gICAgcHJpbnQgIlVuYWJsZSB0byBmaW5k
IExpZ0hUVFBkIGV4ZWN1dGFibGUgJXMiICUgYmlucGF0aAotICAgIF9taXNzaW5nX2xpZ2h0dHBk
KCkKLQotCi1kZWYgbGlnaHR0cGRfbW9kdWxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBs
aWJyYXJ5IG1vZHVsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgotICAgIG1vZHBhdGggPSAiL3Vzci9s
aWIvbGlnaHR0cGQiCi0gICAgaWYgb3MucGF0aC5leGlzdHMobW9kcGF0aCk6Ci0gICAgICAgIHJl
dHVybiBtb2RwYXRoCi0gICAgcHJpbnQgIlVuYWJsZSB0byBmaW5kIExpZ0hUVFBkIG1vZHVsZXMg
JXMiICUgbW9kcGF0aAotICAgIF9taXNzaW5nX2xpZ2h0dHBkKCkKLQotCi1kZWYgbGlnaHR0cGRf
cGhwX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBQSFAgZXhlY3V0YWJsZSBwYXRoIGZvciBM
aWdIVFRQZCIiIgotICAgIGJpbnBhdGggPSAiL3Vzci9iaW4vcGhwLWNnaSIKLSAgICBpZiBvcy5w
YXRoLmV4aXN0cyhiaW5wYXRoKToKLSAgICAgICAgcmV0dXJuIGJpbnBhdGgKLSAgICBwcmludCAi
VW5hYmxlIHRvIGZpbmQgUEhQIENHSSBleGVjdXRhYmxlICVzIiAlIGJpbnBhdGgKLSAgICBfbWlz
c2luZ19saWdodHRwZCgpCi0KLQotZGVmIHdkaWZmX3BhdGgoKToKLSAgICAiIiJQYXRoIHRvIHRo
ZSBXRGlmZiBleGVjdXRhYmxlLCB3aGljaCB3ZSBhc3N1bWUgaXMgYWxyZWFkeSBpbnN0YWxsZWQg
YW5kCi0gICAgaW4gdGhlIHVzZXIncyAkUEFUSC4iIiIKLSAgICByZXR1cm4gJ3dkaWZmJwotCi0K
LWRlZiBpbWFnZV9kaWZmX3BhdGgodGFyZ2V0KToKLSAgICAiIiJQYXRoIHRvIHRoZSBpbWFnZV9k
aWZmIGJpbmFyeS4KLQotICAgIEFyZ3M6Ci0gICAgICB0YXJnZXQ6IEJ1aWxkIHRhcmdldCBtb2Rl
IChkZWJ1ZyBvciByZWxlYXNlKSIiIgotICAgIHJldHVybiBfcGF0aF9mcm9tX2J1aWxkX3Jlc3Vs
dHModGFyZ2V0LCAnaW1hZ2VfZGlmZicpCi0KLQotZGVmIGxheW91dF90ZXN0X2hlbHBlcl9wYXRo
KHRhcmdldCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgbGF5b3V0X3Rlc3QgaGVscGVyIGJpbmFyeSwg
aWYgbmVlZGVkLCBlbXB0eSBvdGhlcndpc2UiIiIKLSAgICByZXR1cm4gJycKLQotCi1kZWYgdGVz
dF9zaGVsbF9wYXRoKHRhcmdldCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBwbGF0Zm9ybS1zcGVjaWZp
YyBiaW5hcnkgcGF0aCBmb3Igb3VyIFRlc3RTaGVsbC4KLQotICAgIEFyZ3M6Ci0gICAgICB0YXJn
ZXQ6IEJ1aWxkIHRhcmdldCBtb2RlIChkZWJ1ZyBvciByZWxlYXNlKSAiIiIKLSAgICBpZiB0YXJn
ZXQgaW4gKCdEZWJ1ZycsICdSZWxlYXNlJyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRl
YnVnX3BhdGggPSBfcGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHMoJ0RlYnVnJywgJ3Rlc3Rfc2hlbGwn
KQotICAgICAgICAgICAgcmVsZWFzZV9wYXRoID0gX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRzKCdS
ZWxlYXNlJywgJ3Rlc3Rfc2hlbGwnKQotCi0gICAgICAgICAgICBkZWJ1Z19tdGltZSA9IG9zLnN0
YXQoZGVidWdfcGF0aCkuc3RfbXRpbWUKLSAgICAgICAgICAgIHJlbGVhc2VfbXRpbWUgPSBvcy5z
dGF0KHJlbGVhc2VfcGF0aCkuc3RfbXRpbWUKLQotICAgICAgICAgICAgaWYgZGVidWdfbXRpbWUg
PiByZWxlYXNlX210aW1lIGFuZCB0YXJnZXQgPT0gJ1JlbGVhc2UnIG9yIFwKLSAgICAgICAgICAg
ICAgIHJlbGVhc2VfbXRpbWUgPiBkZWJ1Z19tdGltZSBhbmQgdGFyZ2V0ID09ICdEZWJ1Zyc6Ci0g
ICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdceDFiWzMxbVdhcm5pbmc6IHlvdSBhcmUgbm90
IHJ1bm5pbmcgdGhlIG1vc3QgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVjZW50
IHRlc3Rfc2hlbGwgYmluYXJ5LiBZb3UgbmVlZCB0byBwYXNzICcKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJy0tZGVidWcgb3Igbm90IHRvIHNlbGVjdCBiZXR3ZWVuIERlYnVnIGFuZCAn
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWxlYXNlLlx4MWJbMG0nKQotICAgICAg
ICAjIFRoaXMgd2lsbCBmYWlsIGlmIHdlIGRvbid0IGhhdmUgYm90aCBhIGRlYnVnIGFuZCByZWxl
YXNlIGJpbmFyeS4KLSAgICAgICAgIyBUaGF0J3MgZmluZSBiZWNhdXNlLCBpbiB0aGlzIGNhc2Us
IHdlIG11c3QgYWxyZWFkeSBiZSBydW5uaW5nIHRoZQotICAgICAgICAjIG1vc3QgdXAtdG8tZGF0
ZSBvbmUuCi0gICAgICAgIGV4Y2VwdCBwYXRoX3V0aWxzLlBhdGhOb3RGb3VuZDoKLSAgICAgICAg
ICAgIHBhc3MKLQotICAgIHJldHVybiBfcGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHModGFyZ2V0LCAn
dGVzdF9zaGVsbCcpCi0KLQotZGVmIGZ1enp5X21hdGNoX3BhdGgoKToKLSAgICAiIiJSZXR1cm4g
dGhlIHBhdGggdG8gdGhlIGZ1enp5IG1hdGNoZXIgYmluYXJ5LiIiIgotICAgIHJldHVybiBwYXRo
X3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdmdXp6eW1hdGNoJywgJ2Z1enp5
bWF0Y2gnKQotCi0KLWRlZiBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2VydmVyX3BpZCk6Ci0gICAg
IiIiU2h1dCBkb3duIHRoZSBsaWdodHRwZCB3ZWIgc2VydmVyLiBCbG9ja3MgdW50aWwgaXQncyBm
dWxseSBzaHV0IGRvd24uCi0KLSAgICBBcmdzOgotICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nl
c3MgSUQgb2YgdGhlIHJ1bm5pbmcgc2VydmVyLgotICAgICIiIgotICAgICMgc2VydmVyX3BpZCBp
cyBub3Qgc2V0IHdoZW4gImh0dHBfc2VydmVyLnB5IHN0b3AiIGlzIHJ1biBtYW51YWxseS4KLSAg
ICBpZiBzZXJ2ZXJfcGlkIGlzIE5vbmU6Ci0gICAgICAgICMgVGhpcyBpc24ndCBpZGVhbCwgc2lu
Y2UgaXQgY291bGQgY29uZmxpY3Qgd2l0aCB3ZWIgc2VydmVyIHByb2Nlc3NlcwotICAgICAgICAj
IG5vdCBzdGFydGVkIGJ5IGh0dHBfc2VydmVyLnB5LCBidXQgZ29vZCBlbm91Z2ggZm9yIG5vdy4K
LSAgICAgICAga2lsbF9hbGxfcHJvY2VzcygnbGlnaHR0cGQnKQotICAgICAgICBraWxsX2FsbF9w
cm9jZXNzKCdhcGFjaGUyJykKLSAgICBlbHNlOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBv
cy5raWxsKHNlcnZlcl9waWQsIHNpZ25hbC5TSUdURVJNKQotICAgICAgICAgICAgI1RPRE8obW1v
c3MpIE1heWJlIHRocm93IGluIGEgU0lHS0lMTCBqdXN0IHRvIGJlIHN1cmU/Ci0gICAgICAgIGV4
Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgIyBTb21ldGltZXMgd2UgZ2V0IGEgYmFkIFBJRCAo
ZS5nLiBmcm9tIGEgc3RhbGUgaHR0cGQucGlkIGZpbGUpLAotICAgICAgICAgICAgIyBzbyBpZiBr
aWxsIGZhaWxzIG9uIHRoZSBnaXZlbiBQSUQsIGp1c3QgdHJ5IHRvICdraWxsYWxsJyB3ZWIKLSAg
ICAgICAgICAgICMgc2VydmVycy4KLSAgICAgICAgICAgIHNodXRfZG93bl9odHRwX3NlcnZlcihO
b25lKQotCi0KLWRlZiBraWxsX3Byb2Nlc3MocGlkKToKLSAgICAiIiJGb3JjZWZ1bGx5IGtpbGwg
dGhlIHByb2Nlc3MuCi0KLSAgICBBcmdzOgotICAgICAgcGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nl
c3MgdG8gYmUga2lsbGVkLgotICAgICIiIgotICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lM
TCkKLQotCi1kZWYga2lsbF9hbGxfcHJvY2Vzcyhwcm9jZXNzX25hbWUpOgotICAgIG51bGwgPSBv
cGVuKG9zLmRldm51bGwpCi0gICAgc3VicHJvY2Vzcy5jYWxsKFsna2lsbGFsbCcsICctVEVSTScs
ICctdScsIG9zLmdldGVudignVVNFUicpLAotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX25h
bWVdLCBzdGRlcnI9bnVsbCkKLSAgICBudWxsLmNsb3NlKCkKLQotCi1kZWYga2lsbF9hbGxfdGVz
dF9zaGVsbHMoKToKLSAgICAiIiJLaWxscyBhbGwgaW5zdGFuY2VzIG9mIHRoZSB0ZXN0X3NoZWxs
IGJpbmFyeSBjdXJyZW50bHkgcnVubmluZy4iIiIKLSAgICBraWxsX2FsbF9wcm9jZXNzKCd0ZXN0
X3NoZWxsJykKLQotIwotIyBQcml2YXRlIGhlbHBlciBmdW5jdGlvbnMKLSMKLQotCi1kZWYgX21p
c3NpbmdfbGlnaHR0cGQoKToKLSAgICBwcmludCAnUGxlYXNlIGluc3RhbGwgdXNpbmc6ICJzdWRv
IGFwdC1nZXQgaW5zdGFsbCBsaWdodHRwZCBwaHA1LWNnaSInCi0gICAgcHJpbnQgJ0ZvciBjb21w
bGV0ZSBMaW51eCBidWlsZCByZXF1aXJlbWVudHMsIHBsZWFzZSBzZWU6JwotICAgIHByaW50ICdo
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS9MaW51eEJ1aWxkSW5zdHJ1Y3Rp
b25zJwotICAgIHN5cy5leGl0KDEpCi0KLQotZGVmIF9taXNzaW5nX2FwYWNoZSgpOgotICAgIHBy
aW50ICgnUGxlYXNlIGluc3RhbGwgdXNpbmc6ICJzdWRvIGFwdC1nZXQgaW5zdGFsbCBhcGFjaGUy
ICcKLSAgICAgICAgJ2xpYmFwYWNoZTItbW9kLXBocDUiJykKLSAgICBwcmludCAnRm9yIGNvbXBs
ZXRlIExpbnV4IGJ1aWxkIHJlcXVpcmVtZW50cywgcGxlYXNlIHNlZTonCi0gICAgcHJpbnQgJ2h0
dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS93aWtpL0xpbnV4QnVpbGRJbnN0cnVjdGlv
bnMnCi0gICAgc3lzLmV4aXQoMSkKLQotCi1kZWYgX3BhdGhfZnJvbV9idWlsZF9yZXN1bHRzKCpw
YXRoaWVzKToKLSAgICAjIEZJWE1FKGRrZWdlbCk6IHVzZSBsYXRlc3Qgb3Igd2FybiBpZiBtb3Jl
IHRoYW4gb25lIGZvdW5kPwotICAgIGZvciBkaXIgaW4gWyJzY29uc2J1aWxkIiwgIm91dCIsICJ4
Y29kZWJ1aWxkIl06Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBwYXRoX3V0aWxz
LnBhdGhfZnJvbV9iYXNlKGRpciwgKnBhdGhpZXMpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAg
ICAgIHBhc3MKLSAgICByYWlzZSBwYXRoX3V0aWxzLlBhdGhOb3RGb3VuZCgiVW5hYmxlIHRvIGZp
bmQgJXMgaW4gYnVpbGQgdHJlZSIgJQotICAgICAgICAob3MucGF0aC5qb2luKCpwYXRoaWVzKSkp
CitjbGFzcyBDaHJvbWl1bUxpbnV4UG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgorICAgICIi
IkNocm9taXVtIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGNsYXNzLiIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgorICAg
ICAgICBpZiBwb3J0X25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHBvcnRfbmFtZSA9ICdjaHJv
bWl1bS1saW51eCcKKyAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Qb3J0Ll9faW5pdF9fKHNlbGYs
IHBvcnRfbmFtZSwgb3B0aW9ucykKKworICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChzZWxm
KToKKyAgICAgICAgcmV0dXJuIFtzZWxmLmJhc2VsaW5lX3BhdGgoKSwKKyAgICAgICAgICAgICAg
ICBzZWxmLmNocm9taXVtX2Jhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbicpLAorICAgICAgICAg
ICAgICAgIHNlbGYud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3dpbicpLAorICAgICAgICAgICAgICAg
IHNlbGYud2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpXQorCisgICAgZGVmIGNoZWNrX3N5c19k
ZXBzKHNlbGYpOgorICAgICAgICAjIFdlIGhhdmUgbm8gcGxhdGZvcm0tc3BlY2lmaWMgZGVwZW5k
ZW5jaWVzIHRvIGNoZWNrLgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIG51bV9jb3Jl
cyhzZWxmKToKKyAgICAgICAgbnVtX2NvcmVzID0gb3Muc3lzY29uZigiU0NfTlBST0NFU1NPUlNf
T05MTiIpCisgICAgICAgIGlmIGlzaW5zdGFuY2UobnVtX2NvcmVzLCBpbnQpIGFuZCBudW1fY29y
ZXMgPiAwOgorICAgICAgICAgICAgcmV0dXJuIG51bV9jb3JlcworICAgICAgICByZXR1cm4gMQor
CisgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToKKyAgICAgICAgIyBXZSB1c2UgJ2xp
bnV4JyBpbnN0ZWFkIG9mICdjaHJvbWl1bS1saW51eCcgaW4gdGVzdF9leHBlY3RhdGlvbnMudHh0
LgorICAgICAgICByZXR1cm4gJ2xpbnV4JworCisgICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAg
ICAgICMgV2UgZG9uJ3QgaGF2ZSBkaWZmZXJlbnQgdmVyc2lvbnMgb24gbGludXguCisgICAgICAg
IHJldHVybiAnJworCisgICAgIworICAgICMgUFJPVEVDVEVEIE1FVEhPRFMKKyAgICAjCisKKyAg
ICBkZWYgX2J1aWxkX3BhdGgoc2VsZiwgKmNvbXBzKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0
aF9mcm9tX2Nocm9taXVtX2Jhc2UoJ3Njb25zYnVpbGQnLCBzZWxmLl9vcHRpb25zLnRhcmdldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbXBzKQorCisg
ICAgZGVmIF9raWxsX3Byb2Nlc3Moc2VsZiwgcGlkKToKKyAgICAgICAgIiIiRm9yY2VmdWxseSBr
aWxsIHRoZSBwcm9jZXNzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgIHBpZDogVGhlIGlkIG9m
IHRoZSBwcm9jZXNzIHRvIGJlIGtpbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIG9zLmtpbGwo
cGlkLCBzaWduYWwuU0lHS0lMTCkKKworICAgIGRlZiBfa2lsbF9hbGxfcHJvY2VzcyhzZWxmLCBw
cm9jZXNzX25hbWUpOgorICAgICAgICBudWxsID0gb3Blbihvcy5kZXZudWxsKQorICAgICAgICBz
dWJwcm9jZXNzLmNhbGwoWydraWxsYWxsJywgJy1URVJNJywgJy11Jywgb3MuZ2V0ZW52KCdVU0VS
JyksCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX25hbWVdLCBzdGRlcnI9bnVsbCkK
KyAgICAgICAgbnVsbC5jbG9zZSgpCisKKyAgICBkZWYgX3BhdGhfdG9fYXBhY2hlKHNlbGYpOgor
ICAgICAgICByZXR1cm4gJy91c3Ivc2Jpbi9hcGFjaGUyJworCisgICAgZGVmIF9wYXRoX3RvX2Fw
YWNoZV9jb25maWdfZmlsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxm
LmxheW91dF90ZXN0c19kaXIoKSwgJ2h0dHAnLCAnY29uZicsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2FwYWNoZTItZGViaWFuLWh0dHBkLmNvbmYnKQorCisgICAgZGVmIF9wYXRoX3Rv
X2xpZ2h0dHBkKHNlbGYpOgorICAgICAgICByZXR1cm4gIi91c3Ivc2Jpbi9saWdodHRwZCIKKwor
ICAgIGRlZiBfcGF0aF90b19saWdodHRwZF9tb2R1bGVzKHNlbGYpOgorICAgICAgICByZXR1cm4g
Ii91c3IvbGliL2xpZ2h0dHBkIgorCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkX3BocChzZWxm
KToKKyAgICAgICAgcmV0dXJuICIvdXNyL2Jpbi9waHAtY2dpIgorCisgICAgZGVmIF9wYXRoX3Rv
X2RyaXZlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ3Rlc3Rfc2hl
bGwnKQorCisgICAgZGVmIF9wYXRoX3RvX2hlbHBlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIE5v
bmUKKworICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fYnVpbGRfcGF0aCgnaW1hZ2VfZGlmZicpCisKKyAgICBkZWYgX3BhdGhfdG9fd2RpZmYo
c2VsZik6CisgICAgICAgIHJldHVybiAnd2RpZmYnCisKKyAgICBkZWYgX3NodXRfZG93bl9odHRw
X3NlcnZlcihzZWxmLCBzZXJ2ZXJfcGlkKToKKyAgICAgICAgIiIiU2h1dCBkb3duIHRoZSBsaWdo
dHRwZCB3ZWIgc2VydmVyLiBCbG9ja3MgdW50aWwgaXQncyBmdWxseQorICAgICAgICBzaHV0IGRv
d24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHNlcnZlcl9waWQ6IFRoZSBwcm9jZXNz
IElEIG9mIHRoZSBydW5uaW5nIHNlcnZlci4KKyAgICAgICAgIiIiCisgICAgICAgICMgc2VydmVy
X3BpZCBpcyBub3Qgc2V0IHdoZW4gImh0dHBfc2VydmVyLnB5IHN0b3AiIGlzIHJ1biBtYW51YWxs
eS4KKyAgICAgICAgaWYgc2VydmVyX3BpZCBpcyBOb25lOgorICAgICAgICAgICAgIyBUT0RPKG1t
b3NzKSBUaGlzIGlzbid0IGlkZWFsLCBzaW5jZSBpdCBjb3VsZCBjb25mbGljdCB3aXRoCisgICAg
ICAgICAgICAjIGxpZ2h0dHBkIHByb2Nlc3NlcyBub3Qgc3RhcnRlZCBieSBodHRwX3NlcnZlci5w
eSwKKyAgICAgICAgICAgICMgYnV0IGdvb2QgZW5vdWdoIGZvciBub3cuCisgICAgICAgICAgICBz
ZWxmLl9raWxsX2FsbF9wcm9jZXNzKCdsaWdodHRwZCcpCisgICAgICAgICAgICBzZWxmLl9raWxs
X2FsbF9wcm9jZXNzKCdhcGFjaGUyJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICBvcy5raWxsKHNlcnZlcl9waWQsIHNpZ25hbC5TSUdURVJNKQorICAg
ICAgICAgICAgICAgICMgVE9ETyhtbW9zcykgTWF5YmUgdGhyb3cgaW4gYSBTSUdLSUxMIGp1c3Qg
dG8gYmUgc3VyZT8KKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAg
ICMgU29tZXRpbWVzIHdlIGdldCBhIGJhZCBQSUQgKGUuZy4gZnJvbSBhIHN0YWxlIGh0dHBkLnBp
ZAorICAgICAgICAgICAgICAgICMgZmlsZSksIHNvIGlmIGtpbGwgZmFpbHMgb24gdGhlIGdpdmVu
IFBJRCwganVzdCB0cnkgdG8KKyAgICAgICAgICAgICAgICAjICdraWxsYWxsJyB3ZWIgc2VydmVy
cy4KKyAgICAgICAgICAgICAgICBzZWxmLl9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoTm9uZSkKSW5k
ZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fbWFjLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5CShyZXZpc2lvbiA1NDM2NCkKKysrIFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNzUgKzI3LDEzNiBAQAogIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KIAotIiIiVGhpcyBpcyB0aGUgTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBw
b3J0IGludGVyZmFjZQotICAgcGFja2FnZS4gVGhpcyBmaWxlIHNob3VsZCBvbmx5IGJlIGltcG9y
dGVkIGJ5IHRoYXQgcGFja2FnZS4iIiIKKyIiIkNocm9taXVtIE1hYyBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCiAKIGltcG9ydCBvcwogaW1wb3J0IHBsYXRmb3JtCiBp
bXBvcnQgc2lnbmFsCiBpbXBvcnQgc3VicHJvY2VzcwogCi1pbXBvcnQgcGF0aF91dGlscworaW1w
b3J0IGNocm9taXVtCiAKIAotZGVmIHBsYXRmb3JtX25hbWUoKToKLSAgICAiIiJSZXR1cm5zIHRo
ZSBuYW1lIG9mIHRoZSBwbGF0Zm9ybSB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBvbi4iIiIKLSAg
ICAjIEF0IHRoZSBtb21lbnQgYWxsIGNocm9taXVtIG1hYyByZXN1bHRzIGFyZSB2ZXJzaW9uLWlu
ZGVwZW5kZW50LiBBdCBzb21lCi0gICAgIyBwb2ludCB3ZSBtYXkgbmVlZCB0byByZXR1cm4gJ2No
cm9taXVtLW1hYycgKyBQbGF0Zm9ybVZlcnNpb24oKQotICAgIHJldHVybiAnY2hyb21pdW0tbWFj
JworY2xhc3MgQ2hyb21pdW1NYWNQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CisgICAgIiIi
Q2hyb21pdW0gTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGNsYXNzLiIiIgogCi0KLWRl
ZiBwbGF0Zm9ybV92ZXJzaW9uKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgdmVyc2lvbiBzdHJpbmcg
Zm9yIHRoZSBwbGF0Zm9ybSwgZS5nLiAnLXZpc3RhJyBvcgotICAgICctc25vd2xlb3BhcmQnLiBJ
ZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbgotICAgIG1pbm9yIHZl
cnNpb25zLCBpdCByZXR1cm5zICcnLiIiIgotICAgIG9zX3ZlcnNpb25fc3RyaW5nID0gcGxhdGZv
cm0ubWFjX3ZlcigpWzBdICAjIGUuZy4gIjEwLjUuNiIKLSAgICBpZiBub3Qgb3NfdmVyc2lvbl9z
dHJpbmc6Ci0gICAgICAgIHJldHVybiAnLWxlb3BhcmQnCi0KLSAgICByZWxlYXNlX3ZlcnNpb24g
PSBpbnQob3NfdmVyc2lvbl9zdHJpbmcuc3BsaXQoJy4nKVsxXSkKLQotICAgICMgd2UgZG9uJ3Qg
c3VwcG9ydCAndGlnZXInIG9yIGVhcmxpZXIgcmVsZWFzZXMKLSAgICBpZiByZWxlYXNlX3ZlcnNp
b24gPT0gNToKLSAgICAgICAgcmV0dXJuICctbGVvcGFyZCcKLSAgICBlbGlmIHJlbGVhc2VfdmVy
c2lvbiA9PSA2OgotICAgICAgICByZXR1cm4gJy1zbm93bGVvcGFyZCcKLQotICAgIHJldHVybiAn
JwotCi0KLWRlZiBnZXRfbnVtX2NvcmVzKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbnVtYmVyIG9m
IGNvcmVzIG9uIHRoZSBtYWNoaW5lLiBGb3IgaHlwZXJ0aHJlYWRlZCBtYWNoaW5lcywKLSAgICB0
aGlzIHdpbGwgYmUgZG91YmxlIHRoZSBudW1iZXIgb2YgYWN0dWFsIHByb2Nlc3NvcnMuIiIiCi0g
ICAgcmV0dXJuIGludChvcy5wb3BlbjIoInN5c2N0bCAtbiBody5uY3B1IilbMV0ucmVhZCgpKQot
Ci0KLWRlZiBiYXNlbGluZV9wYXRoKHBsYXRmb3JtPU5vbmUpOgotICAgICIiIlJldHVybnMgdGhl
IHBhdGggcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUgZm9yIHRoZQotICAg
IGJhc2VsaW5lcyBmb3IgdGhlIHNwZWNpZmllZCBwbGF0Zm9ybSB2ZXJzaW9uLiBJZiB8cGxhdGZv
cm18IGlzIE5vbmUsCi0gICAgdGhlbiB0aGUgdmVyc2lvbiBjdXJyZW50bHkgaW4gdXNlIGlzIHVz
ZWQuIiIiCi0gICAgaWYgcGxhdGZvcm0gaXMgTm9uZToKLSAgICAgICAgcGxhdGZvcm0gPSBwbGF0
Zm9ybV9uYW1lKCkKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0
JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAncGxhdGZvcm0nLCBwbGF0Zm9ybSwgJ0xheW91dFRlc3RzJykKLQotIyBUT0RPOiBX
ZSBzaG91bGQgYWRkIGxlb3BhcmQgYW5kIHNub3dsZW9wYXJkIHRvIHRoZSBsaXN0IG9mIHBhdGhz
IHRvIGNoZWNrCi0jIG9uY2Ugd2Ugc3RhcnQgcnVubmluZyB0aGUgdGVzdHMgZnJvbSBzbm93bGVv
cGFyZC4KLQotCi1kZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm09Tm9uZSk6Ci0gICAg
IiIiUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGJhc2VsaW5l
cy9yZXN1bHRzLCBpbgotICAgIG9yZGVyIG9mIHByZWZlcmVuY2UuIFBhdGhzIGFyZSByZWxhdGl2
ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4iIiIKLSAgICByZXR1cm4gW2Jhc2VsaW5l
X3BhdGgocGxhdGZvcm0pLAotICAgICAgICAgICAgcGF0aF91dGlscy53ZWJraXRfYmFzZWxpbmVf
cGF0aCgnbWFjJyArIHBsYXRmb3JtX3ZlcnNpb24oKSksCi0gICAgICAgICAgICBwYXRoX3V0aWxz
LndlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnKV0KLQotCi1kZWYgd2RpZmZfcGF0aCgpOgotICAg
ICIiIlBhdGggdG8gdGhlIFdEaWZmIGV4ZWN1dGFibGUsIHdoaWNoIHdlIGFzc3VtZSBpcyBhbHJl
YWR5IGluc3RhbGxlZCBhbmQKLSAgICBpbiB0aGUgdXNlcidzICRQQVRILiIiIgotICAgIHJldHVy
biAnd2RpZmYnCi0KLQotZGVmIGltYWdlX2RpZmZfcGF0aCh0YXJnZXQpOgotICAgICIiIlBhdGgg
dG8gdGhlIGltYWdlX2RpZmYgZXhlY3V0YWJsZQotCi0gICAgQXJnczoKLSAgICAgIHRhcmdldDog
YnVpbGQgdHlwZSAtICdEZWJ1ZycsJ1JlbGVhc2UnLGV0Yy4iIiIKLSAgICByZXR1cm4gcGF0aF91
dGlscy5wYXRoX2Zyb21fYmFzZSgneGNvZGVidWlsZCcsIHRhcmdldCwgJ2ltYWdlX2RpZmYnKQot
Ci0KLWRlZiBsYXlvdXRfdGVzdF9oZWxwZXJfcGF0aCh0YXJnZXQpOgotICAgICIiIlBhdGggdG8g
dGhlIGxheW91dF90ZXN0X2hlbHBlciBleGVjdXRhYmxlLCBpZiBuZWVkZWQsIGVtcHR5IG90aGVy
d2lzZQotCi0gICAgQXJnczoKLSAgICAgIHRhcmdldDogYnVpbGQgdHlwZSAtICdEZWJ1ZycsJ1Jl
bGVhc2UnLGV0Yy4iIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgneGNv
ZGVidWlsZCcsIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
bGF5b3V0X3Rlc3RfaGVscGVyJykKLQotCi1kZWYgdGVzdF9zaGVsbF9wYXRoKHRhcmdldCk6Ci0g
ICAgIiIiUGF0aCB0byB0aGUgdGVzdF9zaGVsbCBleGVjdXRhYmxlLgotCi0gICAgQXJnczoKLSAg
ICAgIHRhcmdldDogYnVpbGQgdHlwZSAtICdEZWJ1ZycsJ1JlbGVhc2UnLGV0Yy4iIiIKLSAgICAj
IFRPRE8ocGlua2VydG9uKTogbWFrZSB8dGFyZ2V0fCBoYXBweSB3aXRoIGNhc2Utc2Vuc2l0aXZl
IGZpbGUgc3lzdGVtcy4KLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgneGNv
ZGVidWlsZCcsIHRhcmdldCwgJ1Rlc3RTaGVsbC5hcHAnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdDb250ZW50cycsICdNYWNPUycsICdUZXN0U2hlbGwnKQotCi0KLWRl
ZiBhcGFjaGVfZXhlY3V0YWJsZV9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZXhlY3V0YWJs
ZSBwYXRoIHRvIHN0YXJ0IEFwYWNoZSIiIgotICAgIHJldHVybiBvcy5wYXRoLmpvaW4oIi91c3Ii
LCAic2JpbiIsICJodHRwZCIpCi0KLQotZGVmIGFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCk6Ci0g
ICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0byBBcGFjaGUgY29uZmlnIGZpbGUiIiIKLSAgICByZXR1
cm4gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgidGhpcmRfcGFydHkiLCAiV2ViS2l0IiwgIkxh
eW91dFRlc3RzIiwKLSAgICAgICAgImh0dHAiLCAiY29uZiIsICJhcGFjaGUyLWh0dHBkLmNvbmYi
KQotCi0KLWRlZiBsaWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRo
ZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgTGlnSFRUUGQiIiIKLSAgICByZXR1cm4gcGF0aF91
dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQnLCAnbWFjJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmluJywgJ2xpZ2h0dHBkJykKLQot
Ci1kZWYgbGlnaHR0cGRfbW9kdWxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBsaWJyYXJ5
IG1vZHVsZSBwYXRoIGZvciBMaWdIVFRQZCIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhf
ZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICdtYWMnLCAnbGliJykKLQotCi1k
ZWYgbGlnaHR0cGRfcGhwX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBQSFAgZXhlY3V0YWJs
ZSBwYXRoIGZvciBMaWdIVFRQZCIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9i
YXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICdtYWMnLCAnYmluJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAncGhwLWNnaScpCi0KLQotZGVmIHNodXRfZG93bl9o
dHRwX3NlcnZlcihzZXJ2ZXJfcGlkKToKLSAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBkIHdl
YiBzZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1bGx5IHNodXQgZG93bi4KLQotICAgICAgQXJn
czoKLSAgICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5pbmcgc2Vy
dmVyLgotICAgICIiIgotICAgICMgc2VydmVyX3BpZCBpcyBub3Qgc2V0IHdoZW4gImh0dHBfc2Vy
dmVyLnB5IHN0b3AiIGlzIHJ1biBtYW51YWxseS4KLSAgICBpZiBzZXJ2ZXJfcGlkIGlzIE5vbmU6
Ci0gICAgICAgICMgVE9ETyhtbW9zcykgVGhpcyBpc24ndCBpZGVhbCwgc2luY2UgaXQgY291bGQg
Y29uZmxpY3Qgd2l0aCBsaWdodHRwZAotICAgICAgICAjIHByb2Nlc3NlcyBub3Qgc3RhcnRlZCBi
eSBodHRwX3NlcnZlci5weSwgYnV0IGdvb2QgZW5vdWdoIGZvciBub3cuCi0gICAgICAgIGtpbGxf
YWxsX3Byb2Nlc3MoJ2xpZ2h0dHBkJykKLSAgICAgICAga2lsbF9hbGxfcHJvY2VzcygnaHR0cGQn
KQotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLmtpbGwoc2VydmVyX3Bp
ZCwgc2lnbmFsLlNJR1RFUk0pCi0gICAgICAgICAgICAjIFRPRE8obW1vc3MpIE1heWJlIHRocm93
IGluIGEgU0lHS0lMTCBqdXN0IHRvIGJlIHN1cmU/Ci0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgot
ICAgICAgICAgICAgIyBTb21ldGltZXMgd2UgZ2V0IGEgYmFkIFBJRCAoZS5nLiBmcm9tIGEgc3Rh
bGUgaHR0cGQucGlkIGZpbGUpLAotICAgICAgICAgICAgIyBzbyBpZiBraWxsIGZhaWxzIG9uIHRo
ZSBnaXZlbiBQSUQsIGp1c3QgdHJ5IHRvICdraWxsYWxsJyB3ZWIKLSAgICAgICAgICAgICMgc2Vy
dmVycy4KLSAgICAgICAgICAgIHNodXRfZG93bl9odHRwX3NlcnZlcihOb25lKQotCi0KLWRlZiBr
aWxsX3Byb2Nlc3MocGlkKToKLSAgICAiIiJGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3MuCi0K
LSAgICBBcmdzOgotICAgICAgcGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUga2lsbGVk
LgotICAgICIiIgotICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKLQotCi1kZWYga2ls
bF9hbGxfcHJvY2Vzcyhwcm9jZXNzX25hbWUpOgotICAgICMgT24gTWFjIE9TIFggMTAuNiwga2ls
bGFsbCBoYXMgYSBuZXcgY29uc3RyYWludDogLVNJR05BTE5BTUUgb3IKLSAgICAjIC1TSUdOQUxO
VU1CRVIgbXVzdCBjb21lIGZpcnN0LiAgRXhhbXBsZSBwcm9ibGVtOgotICAgICMgICAkIGtpbGxh
bGwgLXUgJFVTRVIgLVRFUk0gbGlnaHR0cGQKLSAgICAjICAga2lsbGFsbDogaWxsZWdhbCBvcHRp
b24gLS0gVAotICAgICMgVXNlIG9mIHRoZSBlYXJsaWVyIC1URVJNIHBsYWNlbWVudCBpcyBqdXN0
IGZpbmUgb24gMTAuNS4KLSAgICBudWxsID0gb3Blbihvcy5kZXZudWxsKQotICAgIHN1YnByb2Nl
c3MuY2FsbChbJ2tpbGxhbGwnLCAnLVRFUk0nLCAnLXUnLCBvcy5nZXRlbnYoJ1VTRVInKSwKLSAg
ICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1udWxsKQotICAgIG51bGwu
Y2xvc2UoKQotCi0KLWRlZiBraWxsX2FsbF90ZXN0X3NoZWxscygpOgotICAgICIiIktpbGxzIGFs
bCBpbnN0YW5jZXMgb2YgdGhlIHRlc3Rfc2hlbGwgYmluYXJ5IGN1cnJlbnRseSBydW5uaW5nLiIi
IgotICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ1Rlc3RTaGVsbCcpCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgorICAgICAgICBpZiBwb3J0X25hbWUg
aXMgTm9uZToKKyAgICAgICAgICAgIHBvcnRfbmFtZSA9ICdjaHJvbWl1bS1tYWMnCisgICAgICAg
IGNocm9taXVtLkNocm9taXVtUG9ydC5fX2luaXRfXyhzZWxmLCBwb3J0X25hbWUsIG9wdGlvbnMp
CisKKyAgICBkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CisgICAgICAgIHJldHVybiBb
c2VsZi5iYXNlbGluZV9wYXRoKCksCisgICAgICAgICAgICAgICAgc2VsZi5fd2Via2l0X2Jhc2Vs
aW5lX3BhdGgoJ21hYycgKyBzZWxmLnZlcnNpb24oKSksCisgICAgICAgICAgICAgICAgc2VsZi5f
d2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpXQorCisgICAgZGVmIGNoZWNrX3N5c19kZXBzKHNl
bGYpOgorICAgICAgICAjIFdlIGhhdmUgbm8gc3BlY2lmaWMgcGxhdGZvcm0gZGVwZW5kZW5jaWVz
LgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIG51bV9jb3JlcyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuIGludChzdWJwcm9jZXNzLlBvcGVuKFsnc3lzY3RsJywnLW4nLCdody5uY3B1J10s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5Q
SVBFKS5zdGRvdXQucmVhZCgpKQorCisgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToK
KyAgICAgICAgIyBXZSB1c2UgJ21hYycgaW5zdGVhZCBvZiAnY2hyb21pdW0tbWFjJworICAgICAg
ICByZXR1cm4gJ21hYycKKworICAgIGRlZiB2ZXJzaW9uKHNlbGYpOgorICAgICAgICBvc192ZXJz
aW9uX3N0cmluZyA9IHBsYXRmb3JtLm1hY192ZXIoKVswXSAgIyBlLmcuICIxMC41LjYiCisgICAg
ICAgIGlmIG5vdCBvc192ZXJzaW9uX3N0cmluZzoKKyAgICAgICAgICAgIHJldHVybiAnLWxlb3Bh
cmQnCisgICAgICAgIHJlbGVhc2VfdmVyc2lvbiA9IGludChvc192ZXJzaW9uX3N0cmluZy5zcGxp
dCgnLicpWzFdKQorICAgICAgICAjIHdlIGRvbid0IHN1cHBvcnQgJ3RpZ2VyJyBvciBlYXJsaWVy
IHJlbGVhc2VzCisgICAgICAgIGlmIHJlbGVhc2VfdmVyc2lvbiA9PSA1OgorICAgICAgICAgICAg
cmV0dXJuICctbGVvcGFyZCcKKyAgICAgICAgZWxpZiByZWxlYXNlX3ZlcnNpb24gPT0gNjoKKyAg
ICAgICAgICAgIHJldHVybiAnLXNub3dsZW9wYXJkJworICAgICAgICByZXR1cm4gJycKKworICAg
ICMKKyAgICAjIFBST1RFQ1RFRCBNRVRIT0RTCisgICAgIworCisgICAgZGVmIF9idWlsZF9wYXRo
KHNlbGYsICpjb21wcyk6CisgICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV9jaHJvbWl1bV9i
YXNlKCd4Y29kZWJ1aWxkJywgc2VsZi5fb3B0aW9ucy50YXJnZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb21wcykKKworICAgIGRlZiBfbGlnaHR0cGRf
cGF0aChzZWxmLCAqY29tcHMpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fY2hyb21p
dW1fYmFzZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnbWFjJywgKmNvbXBzKQorCisgICAgZGVmIF9raWxsX3By
b2Nlc3Moc2VsZiwgcGlkKToKKyAgICAgICAgIiIiRm9yY2VmdWxseSBraWxsIHRoZSBwcm9jZXNz
LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2Vz
cyB0byBiZSBraWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFs
LlNJR0tJTEwpCisKKyAgICBkZWYgX2tpbGxfYWxsX3Byb2Nlc3Moc2VsZiwgcHJvY2Vzc19uYW1l
KToKKyAgICAgICAgIiIiS2lsbCBhbnkgcHJvY2Vzc2VzIHJ1bm5pbmcgdW5kZXIgdGhpcyBuYW1l
LiIiIgorICAgICAgICAjIE9uIE1hYyBPUyBYIDEwLjYsIGtpbGxhbGwgaGFzIGEgbmV3IGNvbnN0
cmFpbnQ6IC1TSUdOQUxOQU1FIG9yCisgICAgICAgICMgLVNJR05BTE5VTUJFUiBtdXN0IGNvbWUg
Zmlyc3QuICBFeGFtcGxlIHByb2JsZW06CisgICAgICAgICMgICAkIGtpbGxhbGwgLXUgJFVTRVIg
LVRFUk0gbGlnaHR0cGQKKyAgICAgICAgIyAgIGtpbGxhbGw6IGlsbGVnYWwgb3B0aW9uIC0tIFQK
KyAgICAgICAgIyBVc2Ugb2YgdGhlIGVhcmxpZXIgLVRFUk0gcGxhY2VtZW50IGlzIGp1c3QgZmlu
ZSBvbiAxMC41LgorICAgICAgICBudWxsID0gb3Blbihvcy5kZXZudWxsKQorICAgICAgICBzdWJw
cm9jZXNzLmNhbGwoWydraWxsYWxsJywgJy1URVJNJywgJy11Jywgb3MuZ2V0ZW52KCdVU0VSJyks
CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX25hbWVdLCBzdGRlcnI9bnVsbCkKKyAg
ICAgICAgbnVsbC5jbG9zZSgpCisKKyAgICBkZWYgX3BhdGhfdG9fYXBhY2hlKHNlbGYpOgorICAg
ICAgICByZXR1cm4gJy91c3Ivc2Jpbi9odHRwZCcKKworICAgIGRlZiBfcGF0aF90b19hcGFjaGVf
Y29uZmlnX2ZpbGUoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5sYXlv
dXRfdGVzdHNfZGlyKCksICdodHRwJywgJ2NvbmYnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdhcGFjaGUyLWh0dHBkLmNvbmYnKQorCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGlnaHR0cF9wYXRoKCdiaW4nLCAnbGlnaHR0cCcp
CisKKyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGRfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2xpZ2h0dHBfcGF0aCgnbGliJykKKworICAgIGRlZiBfcGF0aF90b19saWdodHRw
ZF9waHAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9saWdodHRwZF9wYXRoKCdiaW4nLCAn
cGhwLWNnaScpCisKKyAgICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYpOgorICAgICAgICAjIFRP
RE8ocGlua2VydG9uKTogbWFrZSB8dGFyZ2V0fCBoYXBweSB3aXRoIGNhc2Utc2Vuc2l0aXZlIGZp
bGUKKyAgICAgICAgIyBzeXN0ZW1zLgorICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgn
VGVzdFNoZWxsLmFwcCcsICdDb250ZW50cycsICdNYWNPUycsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnVGVzdFNoZWxsJykKKworICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdsYXlvdXRfdGVzdF9oZWxwZXIn
KQorCisgICAgZGVmIF9wYXRoX3RvX2ltYWdlX2RpZmYoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9idWlsZF9wYXRoKCdpbWFnZV9kaWZmJykKKworICAgIGRlZiBfcGF0aF90b193ZGlmZihz
ZWxmKToKKyAgICAgICAgcmV0dXJuICd3ZGlmZicKKworICAgIGRlZiBfc2h1dF9kb3duX2h0dHBf
c2VydmVyKHNlbGYsIHNlcnZlcl9waWQpOgorICAgICAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0
dHBkIHdlYiBzZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1bGx5CisgICAgICAgIHNodXQgZG93
bi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nlc3Mg
SUQgb2YgdGhlIHJ1bm5pbmcgc2VydmVyLgorICAgICAgICAiIiIKKyAgICAgICAgIyBzZXJ2ZXJf
cGlkIGlzIG5vdCBzZXQgd2hlbiAiaHR0cF9zZXJ2ZXIucHkgc3RvcCIgaXMgcnVuIG1hbnVhbGx5
LgorICAgICAgICBpZiBzZXJ2ZXJfcGlkIGlzIE5vbmU6CisgICAgICAgICAgICAjIFRPRE8obW1v
c3MpIFRoaXMgaXNuJ3QgaWRlYWwsIHNpbmNlIGl0IGNvdWxkIGNvbmZsaWN0IHdpdGgKKyAgICAg
ICAgICAgICMgbGlnaHR0cGQgcHJvY2Vzc2VzIG5vdCBzdGFydGVkIGJ5IGh0dHBfc2VydmVyLnB5
LAorICAgICAgICAgICAgIyBidXQgZ29vZCBlbm91Z2ggZm9yIG5vdy4KKyAgICAgICAgICAgIHNl
bGYuX2tpbGxfYWxsX3Byb2Nlc3MoJ2xpZ2h0dHBkJykKKyAgICAgICAgICAgIHNlbGYuX2tpbGxf
YWxsX3Byb2Nlc3MoJ2h0dHBkJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICBvcy5raWxsKHNlcnZlcl9waWQsIHNpZ25hbC5TSUdURVJNKQorICAgICAg
ICAgICAgICAgICMgVE9ETyhtbW9zcykgTWF5YmUgdGhyb3cgaW4gYSBTSUdLSUxMIGp1c3QgdG8g
YmUgc3VyZT8KKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMg
U29tZXRpbWVzIHdlIGdldCBhIGJhZCBQSUQgKGUuZy4gZnJvbSBhIHN0YWxlIGh0dHBkLnBpZAor
ICAgICAgICAgICAgICAgICMgZmlsZSksIHNvIGlmIGtpbGwgZmFpbHMgb24gdGhlIGdpdmVuIFBJ
RCwganVzdCB0cnkgdG8KKyAgICAgICAgICAgICAgICAjICdraWxsYWxsJyB3ZWIgc2VydmVycy4K
KyAgICAgICAgICAgICAgICBzZWxmLl9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoTm9uZSkKSW5kZXg6
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1f
d2luLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5CShyZXZpc2lvbiA1NDM2NCkKKysrIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0yNywxODQgKzI3LDEyMyBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIAotIiIiVGhpcyBpcyB0aGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIHBv
cnQKLSAgIHBhY2thZ2UuIFRoaXMgZmlsZSBzaG91bGQgb25seSBiZSBpbXBvcnRlZCBieSB0aGF0
IHBhY2thZ2UuIiIiCisiIiJDaHJvbWl1bSBXaW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQg
aW50ZXJmYWNlLiIiIgogCiBpbXBvcnQgb3MKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IHNpZ25h
bAogaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKIAotaW1wb3J0IHBhdGhfdXRpbHMKK2lt
cG9ydCBjaHJvbWl1bQogCi1kZWYgcGxhdGZvcm1fbmFtZSgpOgotICAgICIiIlJldHVybnMgdGhl
IG5hbWUgb2YgdGhlIHBsYXRmb3JtIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIG9uLiIiIgotICAg
ICMgV2UncmUgbm90IHJlYWR5IGZvciB2ZXJzaW9uLXNwZWNpZmljIHJlc3VsdHMgeWV0LiBXaGVu
IHdlIHVuY29tbWVudAotICAgICMgdGhpcywgd2UgYWxzbyBuZWVkIHRvIGFkZCBpdCB0byB0aGUg
QmFzZWxpbmVTZWFyY2hQYXRoKCkKLSAgICByZXR1cm4gJ2Nocm9taXVtLXdpbicgKyBwbGF0Zm9y
bV92ZXJzaW9uKCkKLQotCi1kZWYgcGxhdGZvcm1fdmVyc2lvbigpOgotICAgICIiIlJldHVybnMg
dGhlIHZlcnNpb24gc3RyaW5nIGZvciB0aGUgcGxhdGZvcm0sIGUuZy4gJy12aXN0YScgb3IKLSAg
ICAnLXNub3dsZW9wYXJkJy4gSWYgdGhlIHBsYXRmb3JtIGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJl
dHdlZW4KLSAgICBtaW5vciB2ZXJzaW9ucywgaXQgcmV0dXJucyAnJy4iIiIKLSAgICB3aW52ZXIg
PSBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKQotICAgIGlmIHdpbnZlclswXSA9PSA2IGFuZCAod2lu
dmVyWzFdID09IDEpOgotICAgICAgICByZXR1cm4gJy03JwotICAgIGlmIHdpbnZlclswXSA9PSA2
IGFuZCAod2ludmVyWzFdID09IDApOgotICAgICAgICByZXR1cm4gJy12aXN0YScKLSAgICBpZiB3
aW52ZXJbMF0gPT0gNSBhbmQgKHdpbnZlclsxXSA9PSAxIG9yIHdpbnZlclsxXSA9PSAyKToKLSAg
ICAgICAgcmV0dXJuICcteHAnCi0gICAgcmV0dXJuICcnCi0KLQotZGVmIGdldF9udW1fY29yZXMo
KToKLSAgICAiIiJSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29yZXMgb24gdGhlIG1hY2hpbmUuIEZv
ciBoeXBlcnRocmVhZGVkIG1hY2hpbmVzLAotICAgIHRoaXMgd2lsbCBiZSBkb3VibGUgdGhlIG51
bWJlciBvZiBhY3R1YWwgcHJvY2Vzc29ycy4iIiIKLSAgICByZXR1cm4gaW50KG9zLmVudmlyb24u
Z2V0KCdOVU1CRVJfT0ZfUFJPQ0VTU09SUycsIDEpKQotCi0KLWRlZiBiYXNlbGluZV9wYXRoKHBs
YXRmb3JtPU5vbmUpOgotICAgICIiIlJldHVybnMgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHRv
cCBvZiB0aGUgc291cmNlIHRyZWUgZm9yIHRoZQotICAgIGJhc2VsaW5lcyBmb3IgdGhlIHNwZWNp
ZmllZCBwbGF0Zm9ybSB2ZXJzaW9uLiBJZiB8cGxhdGZvcm18IGlzIE5vbmUsCi0gICAgdGhlbiB0
aGUgdmVyc2lvbiBjdXJyZW50bHkgaW4gdXNlIGlzIHVzZWQuIiIiCi0gICAgaWYgcGxhdGZvcm0g
aXMgTm9uZToKLSAgICAgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybV9uYW1lKCkKLSAgICByZXR1cm4g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3Rz
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm0nLCBwbGF0
Zm9ybSwgJ0xheW91dFRlc3RzJykKLQotCi1kZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZv
cm09Tm9uZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFy
Y2ggZm9yIGJhc2VsaW5lcy9yZXN1bHRzLCBpbgotICAgIG9yZGVyIG9mIHByZWZlcmVuY2UuIFBh
dGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4iIiIKLSAgICBk
aXJzID0gW10KLSAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgotICAgICAgICBwbGF0Zm9ybSA9IHBs
YXRmb3JtX25hbWUoKQotCi0gICAgaWYgcGxhdGZvcm0gPT0gJ2Nocm9taXVtLXdpbi14cCc6Ci0g
ICAgICAgIGRpcnMuYXBwZW5kKGJhc2VsaW5lX3BhdGgocGxhdGZvcm0pKQotICAgIGlmIHBsYXRm
b3JtIGluICgnY2hyb21pdW0td2luLXhwJywgJ2Nocm9taXVtLXdpbi12aXN0YScpOgotICAgICAg
ICBkaXJzLmFwcGVuZChiYXNlbGluZV9wYXRoKCdjaHJvbWl1bS13aW4tdmlzdGEnKSkKLSAgICBk
aXJzLmFwcGVuZChiYXNlbGluZV9wYXRoKCdjaHJvbWl1bS13aW4nKSkKLSAgICBkaXJzLmFwcGVu
ZChwYXRoX3V0aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCd3aW4nKSkKLSAgICBkaXJzLmFwcGVu
ZChwYXRoX3V0aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnKSkKLSAgICByZXR1cm4gZGly
cwotCi0KLWRlZiB3ZGlmZl9wYXRoKCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgV0RpZmYgZXhlY3V0
YWJsZSwgd2hvc2UgYmluYXJ5IGlzIGNoZWNrZWQgaW4gb24gV2luIiIiCi0gICAgcmV0dXJuIHBh
dGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3ZGlmZi5leGUnKQotCi0KLWRl
ZiBpbWFnZV9kaWZmX3BhdGgodGFyZ2V0KToKLSAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNw
ZWNpZmljIGJpbmFyeSBwYXRoIGZvciB0aGUgaW1hZ2UgY29tcGFyZSB1dGlsLgotICAgICAgICAg
V2UgdXNlIHRoaXMgaWYgd2UgY2FuJ3QgZmluZCB0aGUgYmluYXJ5IGluIHRoZSBkZWZhdWx0IGxv
Y2F0aW9uCi0gICAgICAgICBpbiBwYXRoX3V0aWxzLgotCi0gICAgQXJnczoKLSAgICAgIHRhcmdl
dDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2UpCi0gICAgIiIiCi0gICAgcmV0
dXJuIF9maW5kX2JpbmFyeSh0YXJnZXQsICdpbWFnZV9kaWZmLmV4ZScpCi0KLQotZGVmIGxheW91
dF90ZXN0X2hlbHBlcl9wYXRoKHRhcmdldCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBwbGF0Zm9ybS1z
cGVjaWZpYyBiaW5hcnkgcGF0aCBmb3IgdGhlIGxheW91dCB0ZXN0IGhlbHBlci4KLSAgICBXZSB1
c2UgdGhpcyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBiaW5hcnkgaW4gdGhlIGRlZmF1bHQgbG9jYXRp
b24KLSAgICBpbiBwYXRoX3V0aWxzLgotCi0gICAgQXJnczoKLSAgICAgIHRhcmdldDogQnVpbGQg
dGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2UpCi0gICAgIiIiCi0gICAgcmV0dXJuIF9maW5k
X2JpbmFyeSh0YXJnZXQsICdsYXlvdXRfdGVzdF9oZWxwZXIuZXhlJykKLQotCi1kZWYgdGVzdF9z
aGVsbF9wYXRoKHRhcmdldCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBi
aW5hcnkgcGF0aCBmb3Igb3VyIFRlc3RTaGVsbC4KLSAgICAgICBXZSB1c2UgdGhpcyBpZiB3ZSBj
YW4ndCBmaW5kIHRoZSBiaW5hcnkgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24KLSAgICAgICBpbiBw
YXRoX3V0aWxzLgotCi0gICAgQXJnczoKLSAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUg
KGRlYnVnIG9yIHJlbGVhc2UpCi0gICAgIiIiCi0gICAgcmV0dXJuIF9maW5kX2JpbmFyeSh0YXJn
ZXQsICd0ZXN0X3NoZWxsLmV4ZScpCi0KLQotZGVmIGFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKToK
LSAgICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBhY2hlIiIiCi0g
ICAgcGF0aCA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dp
bicsICJ1c3IiLCAic2JpbiIpCi0gICAgIyBEb24ndCByZXR1cm4gaHR0cGQuZXhlIHNpbmNlIHdl
IHdhbnQgdG8gdXNlIHRoaXMgZnJvbSBjeWd3aW4uCi0gICAgcmV0dXJuIG9zLnBhdGguam9pbihw
YXRoLCAiaHR0cGQiKQotCi0KLWRlZiBhcGFjaGVfY29uZmlnX2ZpbGVfcGF0aCgpOgotICAgICIi
IlJldHVybnMgdGhlIHBhdGggdG8gQXBhY2hlIGNvbmZpZyBmaWxlIiIiCi0gICAgcmV0dXJuIHBh
dGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoInRoaXJkX3BhcnR5IiwgIldlYktpdCIsICJMYXlvdXRU
ZXN0cyIsCi0gICAgICAgICJodHRwIiwgImNvbmYiLCAiY3lnd2luLWh0dHBkLmNvbmYiKQotCi0K
LWRlZiBsaWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBleGVj
dXRhYmxlIHBhdGggdG8gc3RhcnQgTGlnSFRUUGQiIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5w
YXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnbGlnaHR0cGQnLCAnd2luJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGlnaHRUUEQuZXhlJykKLQotCi1kZWYgbGln
aHR0cGRfbW9kdWxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBsaWJyYXJ5IG1vZHVsZSBw
YXRoIGZvciBMaWdIVFRQZCIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNl
KCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICd3aW4nLCAnbGliJykKLQotCi1kZWYgbGlnaHR0
cGRfcGhwX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBQSFAgZXhlY3V0YWJsZSBwYXRoIGZv
ciBMaWdIVFRQZCIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGly
ZF9wYXJ0eScsICdsaWdodHRwZCcsICd3aW4nLCAncGhwNScsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3BocC1jZ2kuZXhlJykKLQotCi1kZWYgc2h1dF9kb3duX2h0dHBf
c2VydmVyKHNlcnZlcl9waWQpOgotICAgICIiIlNodXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNl
cnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVsbHkgc2h1dCBkb3duLgotCi0gICAgQXJnczoKLSAg
ICAgIHNlcnZlcl9waWQ6IFRoZSBwcm9jZXNzIElEIG9mIHRoZSBydW5uaW5nIHNlcnZlci4KLSAg
ICAgICAgICBVbnVzZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWV0aG9kLgotICAg
ICIiIgotICAgIHN1YnByb2Nlc3MuUG9wZW4oKCd0YXNra2lsbC5leGUnLCAnL2YnLCAnL2ltJywg
J0xpZ2h0VFBELmV4ZScpLAotICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3Mu
UElQRSwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpLndhaXQo
KQotICAgIHN1YnByb2Nlc3MuUG9wZW4oKCd0YXNra2lsbC5leGUnLCAnL2YnLCAnL2ltJywgJ2h0
dHBkLmV4ZScpLAotICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwK
LSAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpLndhaXQoKQotCi0K
LWRlZiBraWxsX3Byb2Nlc3MocGlkKToKLSAgICAiIiJGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nl
c3MuCi0KLSAgICBBcmdzOgotICAgICAgcGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUg
a2lsbGVkLgotICAgICIiIgotICAgIHN1YnByb2Nlc3MuY2FsbCgoJ3Rhc2traWxsLmV4ZScsICcv
ZicsICcvcGlkJywgc3RyKHBpZCkpLAotICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJv
Y2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQot
Ci0KLWRlZiBraWxsX2FsbF90ZXN0X3NoZWxscyhzZWxmKToKLSAgICAiIiJLaWxscyBhbGwgaW5z
dGFuY2VzIG9mIHRoZSB0ZXN0X3NoZWxsIGJpbmFyeSBjdXJyZW50bHkgcnVubmluZy4iIiIKLSAg
ICBzdWJwcm9jZXNzLlBvcGVuKCgndGFza2tpbGwuZXhlJywgJy9mJywgJy9pbScsICd0ZXN0X3No
ZWxsLmV4ZScpLAotICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwK
LSAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpLndhaXQoKQotCi0j
Ci0jIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucy4KLSMKLQotCi1kZWYgX2ZpbmRfYmluYXJ5KHRh
cmdldCwgYmluYXJ5KToKLSAgICAiIiJPbiBXaW5kb3dzLCB3ZSBsb29rIGZvciBiaW5hcmllcyB0
aGF0IHdlIGNvbXBpbGUgaW4gcG90ZW50aWFsbHkKLSAgICB0d28gcGxhY2VzOiBzcmMvd2Via2l0
LyR0YXJnZXQgKHByZWZlcmFibHksIHdoaWNoIHdlIGdldCBpZiB3ZQotICAgIGJ1aWx0IHVzaW5n
IHdlYmtpdF9nbHVlLmd5cCksIG9yIHNyYy9jaHJvbWUvJHRhcmdldCAoaWYgY29tcGlsZWQgc29t
ZQotICAgIG90aGVyIHdheSkuIiIiCi0gICAgdHJ5OgotICAgICAgICByZXR1cm4gcGF0aF91dGls
cy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JywgdGFyZ2V0LCBiaW5hcnkpCi0gICAgZXhjZXB0IHBh
dGhfdXRpbHMuUGF0aE5vdEZvdW5kOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnY2hyb21lJywgdGFyZ2V0LCBiaW5hcnkpCi0gICAg
ICAgIGV4Y2VwdCBwYXRoX3V0aWxzLlBhdGhOb3RGb3VuZDoKLSAgICAgICAgICAgIHJldHVybiBw
YXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCdidWlsZCcsIHRhcmdldCwgYmluYXJ5KQorCitjbGFz
cyBDaHJvbWl1bVdpblBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKKyAgICAiIiJDaHJvbWl1
bSBXaW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQgY2xhc3MuIiIiCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIGlmIHBv
cnRfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLXdpbicg
KyBzZWxmLnZlcnNpb24oKQorICAgICAgICBjaHJvbWl1bS5DaHJvbWl1bVBvcnQuX19pbml0X18o
c2VsZiwgcG9ydF9uYW1lLCBvcHRpb25zKQorCisgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRo
KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9uYW1lID09ICdjaHJvbWl1bS13aW4teHAnOgorICAg
ICAgICAgICAgZGlycy5hcHBlbmQoc2VsZi5iYXNlbGluZV9wYXRoKHNlbGYuX25hbWUpKQorICAg
ICAgICBpZiBzZWxmLl9uYW1lIGluICgnY2hyb21pdW0td2luLXhwJywgJ2Nocm9taXVtLXdpbi12
aXN0YScpOgorICAgICAgICAgICAgZGlycy5hcHBlbmQoc2VsZi5iYXNlbGluZV9wYXRoKCdjaHJv
bWl1bS13aW4tdmlzdGEnKSkKKyAgICAgICAgZGlycy5hcHBlbmQoc2VsZi5iYXNlbGluZV9wYXRo
KCdjaHJvbWl1bS13aW4nKSkKKyAgICAgICAgZGlycy5hcHBlbmQoc2VsZi53ZWJraXRfYmFzZWxp
bmVfcGF0aCgnd2luJykpCisgICAgICAgIGRpcnMuYXBwZW5kKHNlbGYud2Via2l0X2Jhc2VsaW5l
X3BhdGgoJ21hYycpKQorICAgICAgICByZXR1cm4gZGlycworCisgICAgZGVmIGNoZWNrX3N5c19k
ZXBzKHNlbGYpOgorICAgICAgICAjIFRPRE8oZHByYW5rZSk6IGltcGxlbWVudCB0aGlzCisgICAg
ICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZ2V0X2Fic29sdXRlX3BhdGgoc2VsZiwgZmlsZW5h
bWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIHBhdGggaW4gdW5peCBmb3JtYXQg
Zm9yIHRoZSBnaXZlbiBmaWxlbmFtZS4iIiIKKyAgICAgICAgYWJzcGF0aCA9IG9zLnBhdGguYWJz
cGF0aChmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCisK
KyAgICBkZWYgbnVtX2NvcmVzKHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KG9zLmVudmlyb24u
Z2V0KCdOVU1CRVJfT0ZfUFJPQ0VTU09SUycsIDEpKQorCisgICAgZGVmIHRlc3RfcGxhdGZvcm1f
bmFtZShzZWxmKToKKyAgICAgICAgIyBXZSByZXR1cm4gJ3dpbi14cCcsIG5vdCAnY2hyb21pdW0t
d2luLXhwJyBoZXJlLCBmb3IgY29udmVuaWVuY2UuCisgICAgICAgIHJldHVybiAnd2luJyArIHNl
bGYudmVyc2lvbigpCisKKyAgICBkZWYgdmVyc2lvbihzZWxmKToKKyAgICAgICAgd2ludmVyID0g
c3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkKKyAgICAgICAgaWYgd2ludmVyWzBdID09IDYgYW5kICh3
aW52ZXJbMV0gPT0gMSk6CisgICAgICAgICAgICByZXR1cm4gJy03JworICAgICAgICBpZiB3aW52
ZXJbMF0gPT0gNiBhbmQgKHdpbnZlclsxXSA9PSAwKToKKyAgICAgICAgICAgIHJldHVybiAnLXZp
c3RhJworICAgICAgICBpZiB3aW52ZXJbMF0gPT0gNSBhbmQgKHdpbnZlclsxXSA9PSAxIG9yIHdp
bnZlclsxXSA9PSAyKToKKyAgICAgICAgICAgIHJldHVybiAnLXhwJworICAgICAgICByZXR1cm4g
JycKKworICAgICMKKyAgICAjIFBST1RFQ1RFRCBST1VUSU5FUworICAgICMKKworICAgIGRlZiBf
YnVpbGRfcGF0aChzZWxmLCAqY29tcHMpOgorICAgICAgICAjIEZJWE1FKGRwcmFua2UpOiBhbGxv
dyBmb3IgYnVpbGRzIHVuZGVyICdjaHJvbWUnIGFzIHdlbGwuCisgICAgICAgIHJldHVybiBzZWxm
LnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCd3ZWJraXQnLCBzZWxmLl9vcHRpb25zLnRhcmdldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbXBzKQorCisg
ICAgZGVmIF9saWdodHRwZF9wYXRoKHNlbGYsICpjb21wcyk6CisgICAgICAgIHJldHVybiBzZWxm
LnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICd3aW4n
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29tcHMpCisK
KyAgICBkZWYgX2tpbGxfcHJvY2VzcyhzZWxmLCBwaWQpOgorICAgICAgICAiIiJGb3JjZWZ1bGx5
IGtpbGwgdGhlIHByb2Nlc3MuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgcGlkOiBUaGUgaWQg
b2YgdGhlIHByb2Nlc3MgdG8gYmUga2lsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc3VicHJv
Y2Vzcy5jYWxsKCgndGFza2tpbGwuZXhlJywgJy9mJywgJy9waWQnLCBzdHIocGlkKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKworICAgIGRlZiBfcGF0aF90b19h
cGFjaGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNl
KCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAndXNyJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3NiaW4nLCAnaHR0cGQnKQorCisgICAgZGVmIF9wYXRoX3Rv
X2FwYWNoZV9jb25maWdfZmlsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihz
ZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ2h0dHAnLCAnY29uZicsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2N5Z3dpbi1odHRwZC5jb25mJykKKworICAgIGRlZiBfcGF0aF90b19saWdo
dHRwZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpZ2h0dHBfcGF0aCgnTGlnaHRUUEQu
ZXhlJykKKworICAgIGRlZiBfcGF0aF90b19saWdodHRwZF9tb2R1bGVzKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fbGlnaHR0cF9wYXRoKCdsaWInKQorCisgICAgZGVmIF9wYXRoX3RvX2xp
Z2h0dHBkX3BocChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpZ2h0dHBfcGF0aCgncGhw
NScsICdwaHAtY2dpLmV4ZScpCisKKyAgICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgndGVzdF9zaGVsbC5leGUnKQorCisgICAgZGVm
IF9wYXRoX3RvX2hlbHBlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgo
J2xheW91dF90ZXN0X2hlbHBlci5leGUnKQorCisgICAgZGVmIF9wYXRoX3RvX2ltYWdlX2RpZmYo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdsYXlvdXRfdGVzdF9oZWxw
ZXIuZXhlJykKKworICAgIGRlZiBfcGF0aF90b193ZGlmZihzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdi
aW4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2RpZmYu
ZXhlJykKKworICAgIGRlZiBfc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlbGYsIHNlcnZlcl9waWQp
OgorICAgICAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBkIHdlYiBzZXJ2ZXIuIEJsb2NrcyB1
bnRpbCBpdCdzIGZ1bGx5CisgICAgICAgIHNodXQgZG93bi4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5pbmcgc2VydmVy
LgorICAgICAgICAiIiIKKyAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbigoJ3Rhc2traWxsLmV4ZScs
ICcvZicsICcvaW0nLCAnTGlnaHRUUEQuZXhlJyksCisgICAgICAgICAgICAgICAgICAgICAgICBz
dGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1
YnByb2Nlc3MuUElQRSkud2FpdCgpCisgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oKCd0YXNra2ls
bC5leGUnLCAnL2YnLCAnL2ltJywgJ2h0dHBkLmV4ZScpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVy
cj1zdWJwcm9jZXNzLlBJUEUpLndhaXQoKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5
CShyZXZpc2lvbiA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTQxLDUyICs0MSwy
MSBAQCBpbXBvcnQgdGltZQogaW1wb3J0IHVybGxpYgogCiBpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFz
ZQotaW1wb3J0IHBhdGhfdXRpbHMKIAotY2xhc3MgSHR0cGROb3RTdGFydGVkKEV4Y2VwdGlvbik6
IHBhc3MKIAotZGVmIHJlbW92ZV9sb2dfZmlsZXMoZm9sZGVyLCBzdGFydHNfd2l0aCk6Ci0gICAg
ZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRlcikKLSAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAg
ICAgaWYgZmlsZS5zdGFydHN3aXRoKHN0YXJ0c193aXRoKToKLSAgICAgICAgICAgIGZ1bGxfcGF0
aCA9IG9zLnBhdGguam9pbihmb2xkZXIsIGZpbGUpCi0gICAgICAgICAgICBvcy5yZW1vdmUoZnVs
bF9wYXRoKQorY2xhc3MgSHR0cGROb3RTdGFydGVkKEV4Y2VwdGlvbik6CisgICAgcGFzcwogCiAK
IGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgotICAgICMg
V2Via2l0IHRlc3RzCi0gICAgdHJ5OgotICAgICAgICBfd2Via2l0X3Rlc3RzID0gcGF0aF91dGls
cy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3RzJywgJ2h0dHAn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVz
dHMnKQotICAgICAgICBfanNfdGVzdF9yZXNvdXJjZSA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jh
c2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMnLCAnZmFzdCcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnanMnLCAncmVz
b3VyY2VzJykKLSAgICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6Ci0gICAgICAgIF93
ZWJraXRfdGVzdHMgPSBOb25lCi0gICAgICAgIF9qc190ZXN0X3Jlc291cmNlID0gTm9uZQotCi0g
ICAgIyBQYXRoIHdoZXJlIHdlIGNhbiBhY2Nlc3MgYWxsIG9mIHRoZSB0ZXN0cwotICAgIF9hbGxf
dGVzdHMgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICdsYXlv
dXRfdGVzdHMnKQotICAgICMgU2VsZiBnZW5lcmF0ZWQgY2VydGlmaWNhdGUgZm9yIFNTTCBzZXJ2
ZXIgKGZvciBjbGllbnQgY2VydCBnZXQKLSAgICAjIDxiYXNlLXBhdGg+XGNocm9tZVx0ZXN0XGRh
dGFcc3NsXGNlcnRzXHJvb3RfY2FfY2VydC5jcnQpCi0gICAgX3BlbV9maWxlID0gcGF0aF91dGls
cy5wYXRoX2Zyb21fYmFzZSgKLSAgICAgICAgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0
aChfX2ZpbGVfXykpLCAnaHR0cGQyLnBlbScpCi0gICAgIyBPbmUgbWFwcGluZyB3aGVyZSB3ZSBj
YW4gZ2V0IHRvIGV2ZXJ5dGhpbmcKLSAgICBWSVJUVUFMQ09ORklHID0gW3sncG9ydCc6IDgwODEs
ICdkb2Nyb290JzogX2FsbF90ZXN0c31dCi0KLSAgICBpZiBfd2Via2l0X3Rlc3RzOgotICAgICAg
ICBWSVJUVUFMQ09ORklHLmV4dGVuZCgKLSAgICAgICAgICAjIFRocmVlIG1hcHBpbmdzIChvbmUg
d2l0aCBTU0wgZW5hYmxlZCkgZm9yIExheW91dFRlc3RzIGh0dHAgdGVzdHMKLSAgICAgICAgICBb
eydwb3J0JzogODAwMCwgJ2RvY3Jvb3QnOiBfd2Via2l0X3Rlc3RzfSwKLSAgICAgICAgICAgeydw
b3J0JzogODA4MCwgJ2RvY3Jvb3QnOiBfd2Via2l0X3Rlc3RzfSwKLSAgICAgICAgICAgeydwb3J0
JzogODQ0MywgJ2RvY3Jvb3QnOiBfd2Via2l0X3Rlc3RzLCAnc3NsY2VydCc6IF9wZW1fZmlsZX1d
KQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dF9kaXIsIGJhY2tncm91bmQ9RmFsc2Us
IHBvcnQ9Tm9uZSwKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG91dHB1dF9kaXIs
IGJhY2tncm91bmQ9RmFsc2UsIHBvcnQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgcm9vdD1Ob25l
LCByZWdpc3Rlcl9jeWd3aW49Tm9uZSwgcnVuX2JhY2tncm91bmQ9Tm9uZSk6CiAgICAgICAgICIi
IkFyZ3M6CiAgICAgICAgICAgb3V0cHV0X2RpcjogdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGxh
eW91dCB0ZXN0IHJlc3VsdCBkaXJlY3RvcnkKICAgICAgICAgIiIiCisgICAgICAgICMgV2Via2l0
IHRlc3RzCisgICAgICAgIGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18o
c2VsZiwgcG9ydF9vYmopCiAgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCiAg
ICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CkBA
IC05Niw2ICs2NSwzMSBAQCBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2
CiAgICAgICAgIGlmIHNlbGYuX3BvcnQ6CiAgICAgICAgICAgICBzZWxmLl9wb3J0ID0gaW50KHNl
bGYuX3BvcnQpCiAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX3dlYmtpdF90ZXN0cyA9IG9z
LnBhdGguam9pbihzZWxmLl9wb3J0X29iai5sYXlvdXRfdGVzdHNfZGlyKCksCisgICAgICAgICAg
ICAgICAgICdodHRwJywgJ3Rlc3RzJykKKyAgICAgICAgICAgIF93ZWJraXRfdGVzdHMgPSBvcy5w
YXRoLmpvaW4oc2VsZi5fcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2RpcigpLAorICAgICAgICAgICAg
ICAgICAnZmFzdCcsICdqcycsICdyZXNvdXJjZXMnKQorICAgICAgICBleGNlcHQ6CisgICAgICAg
ICAgICBfd2Via2l0X3Rlc3RzID0gTm9uZQorICAgICAgICAgICAgX2pzX3Rlc3RfcmVzb3VyY2Ug
PSBOb25lCisKKyAgICAgICAgIyBTZWxmIGdlbmVyYXRlZCBjZXJ0aWZpY2F0ZSBmb3IgU1NMIHNl
cnZlciAoZm9yIGNsaWVudCBjZXJ0IGdldAorICAgICAgICAjIDxiYXNlLXBhdGg+XGNocm9tZVx0
ZXN0XGRhdGFcc3NsXGNlcnRzXHJvb3RfY2FfY2VydC5jcnQpCisgICAgICAgIHNlbGYuX3BlbV9m
aWxlID0gb3MucGF0aC5qb2luKAorICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgu
YWJzcGF0aChfX2ZpbGVfXykpLCAnaHR0cGQyLnBlbScpCisKKyAgICAgICAgIyBPbmUgbWFwcGlu
ZyB3aGVyZSB3ZSBjYW4gZ2V0IHRvIGV2ZXJ5dGhpbmcKKyAgICAgICAgVklSVFVBTENPTkZJRyA9
IFtdCisKKyAgICAgICAgaWYgX3dlYmtpdF90ZXN0czoKKyAgICAgICAgICAgIFZJUlRVQUxDT05G
SUcuZXh0ZW5kKAorICAgICAgICAgICAgICAgIyBUaHJlZSBtYXBwaW5ncyAob25lIHdpdGggU1NM
KSBmb3IgTGF5b3V0VGVzdHMgaHR0cCB0ZXN0cworICAgICAgICAgICAgICAgW3sncG9ydCc6IDgw
MDAsICdkb2Nyb290JzogX3dlYmtpdF90ZXN0c30sCisgICAgICAgICAgICAgICAgeydwb3J0Jzog
ODA4MCwgJ2RvY3Jvb3QnOiBfd2Via2l0X3Rlc3RzfSwKKyAgICAgICAgICAgICAgICB7J3BvcnQn
OiA4NDQzLCAnZG9jcm9vdCc6IF93ZWJraXRfdGVzdHMsCisgICAgICAgICAgICAgICAgICdzc2xj
ZXJ0Jzogc2VsZi5fcGVtX2ZpbGV9XSkKKwogICAgIGRlZiBpc19ydW5uaW5nKHNlbGYpOgogICAg
ICAgICByZXR1cm4gc2VsZi5fcHJvY2VzcyAhPSBOb25lCiAKQEAgLTEwMyw5ICs5Nyw5IEBAIGNs
YXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnYKICAgICAgICAgaWYgc2VsZi5p
c19ydW5uaW5nKCk6CiAgICAgICAgICAgICByYWlzZSAnTGlnaHR0cGQgYWxyZWFkeSBydW5uaW5n
JwogCi0gICAgICAgIGJhc2VfY29uZl9maWxlID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgn
dGhpcmRfcGFydHknLAorICAgICAgICBiYXNlX2NvbmZfZmlsZSA9IHNlbGYuX3BvcnRfb2JqLnBh
dGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsCiAgICAgICAgICAgICAnV2ViS2l0VG9vbHMnLCAn
U2NyaXB0cycsICd3ZWJraXRweScsICdsYXlvdXRfdGVzdHMnLAotICAgICAgICAgICAgJ2xheW91
dF9wYWNrYWdlJywgJ2xpZ2h0dHBkLmNvbmYnKQorICAgICAgICAgICAgJ3BvcnQnLCAnbGlnaHR0
cGQuY29uZicpCiAgICAgICAgIG91dF9jb25mX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0
cHV0X2RpciwgJ2xpZ2h0dHBkLmNvbmYnKQogICAgICAgICB0aW1lX3N0ciA9IHRpbWUuc3RyZnRp
bWUoIiVkJWIlWS0lSCVNJVMiKQogICAgICAgICBhY2Nlc3NfZmlsZV9uYW1lID0gImFjY2Vzcy5s
b2ctIiArIHRpbWVfc3RyICsgIi50eHQiCkBAIC0xMTQsOCArMTA4LDggQEAgY2xhc3MgTGlnaHR0
cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydgogICAgICAgICBlcnJvcl9sb2cgPSBvcy5wYXRo
LmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgbG9nX2ZpbGVfbmFtZSkKIAogICAgICAgICAjIFJlbW92
ZSBvbGQgbG9nIGZpbGVzLiBXZSBvbmx5IG5lZWQgdG8ga2VlcCB0aGUgbGFzdCBvbmVzLgotICAg
ICAgICByZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsICJhY2Nlc3MubG9nLSIpCi0g
ICAgICAgIHJlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgImVycm9yLmxvZy0iKQor
ICAgICAgICBzZWxmLnJlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgImFjY2Vzcy5s
b2ctIikKKyAgICAgICAgc2VsZi5yZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsICJl
cnJvci5sb2ctIikKIAogICAgICAgICAjIFdyaXRlIG91dCB0aGUgY29uZmlnCiAgICAgICAgIGYg
PSBmaWxlKGJhc2VfY29uZl9maWxlLCAncmInKQpAQCAtMTMyLDcgKzEyNiw3IEBAIGNsYXNzIExp
Z2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnYKICAgICAgICAgICAgICAgICAgJyAgICAg
ICAgICAgICAgICIucGwiICAgPT4gIi91c3IvYmluL2VudiIsXG4nCiAgICAgICAgICAgICAgICAg
ICcgICAgICAgICAgICAgICAiLmFzaXMiID0+ICIvYmluL2NhdCIsXG4nCiAgICAgICAgICAgICAg
ICAgICcgICAgICAgICAgICAgICAiLnBocCIgID0+ICIlcyIgKVxuXG4nKSAlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF91dGlscy5saWdodHRwZF9waHBfcGF0aCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnRfb2JqLl9w
YXRoX3RvX2xpZ2h0dHBkX3BocCgpKQogCiAgICAgICAgICMgU2V0dXAgbG9nIGZpbGVzCiAgICAg
ICAgIGYud3JpdGUoKCdzZXJ2ZXIuZXJyb3Jsb2cgPSAiJXMiXG4nCkBAIC0xNjEsNyArMTU1LDcg
QEAgY2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydgogICAgICAgICAgICAg
ICAgIG1hcHBpbmdzID0gW3sncG9ydCc6IDgwMDAsICdkb2Nyb290Jzogc2VsZi5fcm9vdH0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MCwgJ2RvY3Jvb3QnOiBzZWxm
Ll9yb290fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnZG9j
cm9vdCc6IHNlbGYuX3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc2xjZXJ0
JzogTGlnaHR0cGQuX3BlbV9maWxlfV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nz
bGNlcnQnOiBzZWxmLl9wZW1fZmlsZX1dCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtYXBw
aW5ncyA9IHNlbGYuVklSVFVBTENPTkZJRwogICAgICAgICBmb3IgbWFwcGluZyBpbiBtYXBwaW5n
czoKQEAgLTE3NiwxMiArMTcwLDEyIEBAIGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2Uu
SHR0cFNlcnYKICAgICAgICAgICAgICAgICAgICAgICd9XG5cbicpICUgKG1hcHBpbmdbJ3BvcnQn
XSwgbWFwcGluZ1snZG9jcm9vdCddKSkKICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgZXhl
Y3V0YWJsZSA9IHBhdGhfdXRpbHMubGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCkKLSAgICAgICAg
bW9kdWxlX3BhdGggPSBwYXRoX3V0aWxzLmxpZ2h0dHBkX21vZHVsZV9wYXRoKCkKKyAgICAgICAg
ZXhlY3V0YWJsZSA9IHNlbGYuX3BvcnRfb2JqLl9wYXRoX3RvX2xpZ2h0dHBkKCkKKyAgICAgICAg
bW9kdWxlX3BhdGggPSBzZWxmLl9wb3J0X29iai5fcGF0aF90b19saWdodHRwZF9tb2R1bGVzKCkK
ICAgICAgICAgc3RhcnRfY21kID0gW2V4ZWN1dGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAj
IE5ld2x5IHdyaXR0ZW4gY29uZmlnIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICctZicsIHBh
dGhfdXRpbHMucGF0aF9mcm9tX2Jhc2Uoc2VsZi5fb3V0cHV0X2RpciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpZ2h0dHBkLmNvbmYnKSwK
KyAgICAgICAgICAgICAgICAgICAgICctZicsIHNlbGYuX3BvcnRfb2JqLl9wYXRoX2Zyb21fYmFz
ZShzZWxmLl9vdXRwdXRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2xpZ2h0dHBkLmNvbmYnKSwKICAgICAgICAgICAgICAgICAg
ICAgICMgV2hlcmUgaXQgY2FuIGZpbmQgaXRzIG1vZHVsZSBkeW5hbWljIGxpYnJhcmllcwogICAg
ICAgICAgICAgICAgICAgICAgJy1tJywgbW9kdWxlX3BhdGhdCiAKQEAgLTIwMywxMSArMTk3LDEx
IEBAIGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnYKICAgICAgICAgZW52
ID0gb3MuZW52aXJvbgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2lu
MzInKToKICAgICAgICAgICAgIGVudlsnUEFUSCddID0gJyVzOyVzJyAlICgKLSAgICAgICAgICAg
ICAgICBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAn
YmluJyksCisgICAgICAgICAgICAgICAgcG9ydC5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHkn
LCAnY3lnd2luJywgJ2JpbicpLAogICAgICAgICAgICAgICAgIGVudlsnUEFUSCddKQogCiAgICAg
ICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCBzZWxmLl9yZWdpc3Rlcl9jeWd3aW46
Ci0gICAgICAgICAgICBzZXR1cF9tb3VudCA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3Ro
aXJkX3BhcnR5JywgJ2N5Z3dpbicsCisgICAgICAgICAgICBzZXR1cF9tb3VudCA9IHBvcnQucGF0
aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NldHVwX21vdW50LmJhdCcpCiAgICAg
ICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKHNldHVwX21vdW50KS53YWl0KCkKIApAQCAtMjM1LDcg
KzIyOSw3IEBAIGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnYKICAgICAg
ICAgaHR0cGRfcGlkID0gTm9uZQogICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgogICAgICAgICAg
ICAgaHR0cGRfcGlkID0gc2VsZi5fcHJvY2Vzcy5waWQKLSAgICAgICAgcGF0aF91dGlscy5zaHV0
X2Rvd25faHR0cF9zZXJ2ZXIoaHR0cGRfcGlkKQorICAgICAgICBwb3J0Ll9zaHV0X2Rvd25faHR0
cF9zZXJ2ZXIoaHR0cGRfcGlkKQogCiAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CiAgICAgICAg
ICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2
ZXJfYmFzZS5weQkocmV2aXNpb24gNTQzNjQpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2Jhc2UucHkJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDEyICszMCwxNiBAQAogIiIiQmFzZSBjbGFzcyB3aXRoIGNvbW1vbiByb3V0aW5lcyBi
ZXR3ZWVuIHRoZSBBcGFjaGUgYW5kIExpZ2h0dHBkIHNlcnZlcnMuIiIiCiAKIGltcG9ydCBsb2dn
aW5nCitpbXBvcnQgb3MKIGltcG9ydCB0aW1lCiBpbXBvcnQgdXJsbGliCiAKIAogY2xhc3MgSHR0
cFNlcnZlckJhc2Uob2JqZWN0KToKIAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaik6
CisgICAgICAgIHNlbGYuX3BvcnRfb2JqID0gcG9ydF9vYmoKKwogICAgIGRlZiB3YWl0X2Zvcl9h
Y3Rpb24oc2VsZiwgYWN0aW9uKToKICAgICAgICAgIiIiUmVwZWF0IHRoZSBhY3Rpb24gZm9yIDIw
IHNlY29uZHMgb3IgdW50aWwgaXQgc3VjY2VlZHMuIFJldHVybnMKICAgICAgICAgd2hldGhlciBp
dCBzdWNjZWVkZWQuIiIiCkBAIC02NSwzICs2OSwxMCBAQCBjbGFzcyBIdHRwU2VydmVyQmFzZShv
YmplY3QpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIHJldHVybiBU
cnVlCisKKyAgICBkZWYgcmVtb3ZlX2xvZ19maWxlcyhzZWxmLCBmb2xkZXIsIHN0YXJ0c193aXRo
KToKKyAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRlcikKKyAgICAgICAgZm9yIGZpbGUg
aW4gZmlsZXM6CisgICAgICAgICAgICBpZiBmaWxlLnN0YXJ0c3dpdGgoc3RhcnRzX3dpdGgpOgor
ICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsIGZpbGUpCisg
ICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZ1bGxfcGF0aCkKSW5kZXg6IFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGF0aF91dGlscy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3BhdGhf
dXRpbHMucHkJKHJldmlzaW9uIDU0MzY0KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9wYXRoX3V0aWxzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM5
NSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJU
aGlzIHBhY2thZ2UgY29udGFpbnMgdXRpbGl0eSBtZXRob2RzIGZvciBtYW5pcHVsYXRpbmcgcGF0
aHMgYW5kCi1maWxlbmFtZXMgZm9yIHRlc3QgcmVzdWx0cyBhbmQgYmFzZWxpbmVzLiBJdCBhbHNv
IGNvbnRhaW5zIHdyYXBwZXJzCi1vZiBhIGZldyByb3V0aW5lcyBpbiBwb3J0LyBzbyB0aGF0IHRo
ZSBwb3J0IHBhY2thZ2UgY2FuCi1iZSBjb25zaWRlcmVkIGEgJ3Byb3RlY3RlZCcgcGFja2FnZSAt
IGkuZS4sIHRoaXMgZmlsZSBzaG91bGQgYmUKLXRoZSBvbmx5IGZpbGUgdGhhdCBldmVyIGluY2x1
ZGVzIHBvcnQuIFRoaXMgbGVhZHMgdG8KLXVzIGluY2x1ZGluZyBhIGZldyB0aGluZ3MgdGhhdCBk
b24ndCByZWFsbHkgaGF2ZSBhbnl0aGluZyB0byBkbwotIHdpdGggcGF0aHMsIHVuZm9ydHVuYXRl
bHkuIiIiCi0KLWltcG9ydCBlcnJubwotaW1wb3J0IG9zCi1pbXBvcnQgc3RhdAotaW1wb3J0IHN5
cwotCi1pbXBvcnQgcG9ydAotaW1wb3J0IGNocm9taXVtX3dpbgotaW1wb3J0IGNocm9taXVtX21h
YwotaW1wb3J0IGNocm9taXVtX2xpbnV4Ci0KLSMgQ2FjaGUgc29tZSB2YWx1ZXMgc28gd2UgZG9u
J3QgaGF2ZSB0byByZWNhbGN1bGF0ZSB0aGVtLiBfYmFzZWRpciBpcwotIyB1c2VkIGJ5IFBhdGhG
cm9tQmFzZSgpIGFuZCBjYWNoZXMgdGhlIGZ1bGwgKG5hdGl2ZSkgcGF0aCB0byB0aGUgdG9wCi0j
IG9mIHRoZSBzb3VyY2UgdHJlZSAoL3NyYykuIF9iYXNlbGluZV9zZWFyY2hfcGF0aCBpcyB1c2Vk
IGJ5Ci0jIEV4cGVjdGVkQmFzZWxpbmVzKCkgYW5kIGNhY2hlcyB0aGUgbGlzdCBvZiBuYXRpdmUg
cGF0aHMgdG8gc2VhcmNoCi0jIGZvciBiYXNlbGluZSByZXN1bHRzLgotX2Jhc2VkaXIgPSBOb25l
Ci1fYmFzZWxpbmVfc2VhcmNoX3BhdGggPSBOb25lCi0KLQotY2xhc3MgUGF0aE5vdEZvdW5kKEV4
Y2VwdGlvbik6Ci0gICAgcGFzcwotCi0KLWRlZiBsYXlvdXRfdGVzdHNfZGlyKCk6Ci0gICAgIiIi
UmV0dXJucyB0aGUgZnVsbHktcXVhbGlmaWVkIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWlu
aW5nIHRoZSBpbnB1dAotICAgIGRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgbGF5b3V0IHRlc3QuIiIi
Ci0gICAgcmV0dXJuIHBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnTGF5
b3V0VGVzdHMnKQotCi0KLWRlZiBjaHJvbWl1bV9iYXNlbGluZV9wYXRoKHBsYXRmb3JtPU5vbmUp
OgotICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5p
bmcgZXhwZWN0ZWQKLSAgICBiYXNlbGluZSByZXN1bHRzIGZyb20gY2hyb21pdW0gcG9ydHMuIElm
IHxwbGF0Zm9ybXwgaXMgTm9uZSwgdGhlCi0gICAgY3VycmVudGx5IGV4ZWN1dGluZyBwbGF0Zm9y
bSBpcyB1c2VkLgotCi0gICAgTm90ZTogYWx0aG91Z2ggZGlyZWN0bHkgcmVmZXJlbmNpbmcgaW5k
aXZpZHVhbCBwb3J0LyogZmlsZXMgaXMKLSAgICB1c3VhbGx5IGRpc2NvdXJhZ2VkLCB3ZSBhbGxv
dyBpdCBoZXJlIHNvIHRoYXQgdGhlIHJlYmFzZWxpbmluZyB0b29sIGNhbgotICAgIHB1bGwgYmFz
ZWxpbmVzIGZvciBwbGF0Zm9ybXMgb3RoZXIgdGhhbiB0aGUgaG9zdCBwbGF0Zm9ybS4iIiIKLQot
ICAgICMgTm9ybWFsaXplIHRoZSBwbGF0Zm9ybSBzdHJpbmcuCi0gICAgcGxhdGZvcm0gPSBwbGF0
Zm9ybV9uYW1lKHBsYXRmb3JtKQotICAgIGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVt
LW1hYycpOgotICAgICAgICByZXR1cm4gY2hyb21pdW1fbWFjLmJhc2VsaW5lX3BhdGgocGxhdGZv
cm0pCi0gICAgZWxpZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdjaHJvbWl1bS13aW4nKToKLSAgICAg
ICAgcmV0dXJuIGNocm9taXVtX3dpbi5iYXNlbGluZV9wYXRoKHBsYXRmb3JtKQotICAgIGVsaWYg
cGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21pdW0tbGludXgnKToKLSAgICAgICAgcmV0dXJuIGNo
cm9taXVtX2xpbnV4LmJhc2VsaW5lX3BhdGgocGxhdGZvcm0pCi0KLSAgICByZXR1cm4gcG9ydC5i
YXNlbGluZV9wYXRoKCkKLQotCi1kZWYgd2Via2l0X2Jhc2VsaW5lX3BhdGgocGxhdGZvcm0pOgot
ICAgICIiIlJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcg
ZXhwZWN0ZWQKLSAgICBiYXNlbGluZSByZXN1bHRzIGZyb20gV2ViS2l0IHBvcnRzLiIiIgotICAg
IHJldHVybiBwYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0JywgJ0xheW91dFRl
c3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJywgcGxhdGZvcm0pCi0K
LQotZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtPU5vbmUpOgotICAgICIiIlJldHVy
bnMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBiYXNlbGluZXMvcmVzdWx0
cyBmb3IgYQotICAgIGdpdmVuIHBsYXRmb3JtLCBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLiBQYXRo
cyBhcmUgcmVsYXRpdmUgdG8gdGhlIHRvcCBvZgotICAgIHRoZSBzb3VyY2UgdHJlZS4gSWYgcGFy
YW1ldGVyIHBsYXRmb3JtIGlzIE5vbmUsIHJldHVybnMgdGhlIGxpc3QgZm9yIHRoZQotICAgIGN1
cnJlbnQgcGxhdGZvcm0gdGhhdCB0aGUgc2NyaXB0IGlzIHJ1bm5pbmcgb24uCi0KLSAgICBOb3Rl
OiBhbHRob3VnaCBkaXJlY3RseSByZWZlcmVuY2luZyBpbmRpdmlkdWFsIHBvcnQvKiBmaWxlcyBp
cwotICAgIHVzdWFsbHkgZGlzY291cmFnZWQsIHdlIGFsbG93IGl0IGhlcmUgc28gdGhhdCB0aGUg
cmViYXNlbGluaW5nIHRvb2wgY2FuCi0gICAgcHVsbCBiYXNlbGluZXMgZm9yIHBsYXRmb3JtcyBv
dGhlciB0aGFuIHRoZSBob3N0IHBsYXRmb3JtLiIiIgotCi0gICAgIyBOb3JtYWxpemUgdGhlIHBs
YXRmb3JtIG5hbWUuCi0gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybV9uYW1lKHBsYXRmb3JtKQotICAg
IGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLW1hYycpOgotICAgICAgICByZXR1cm4g
Y2hyb21pdW1fbWFjLmJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtKQotICAgIGVsaWYgcGxh
dGZvcm0uc3RhcnRzd2l0aCgnY2hyb21pdW0td2luJyk6Ci0gICAgICAgIHJldHVybiBjaHJvbWl1
bV93aW4uYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm0pCi0gICAgZWxpZiBwbGF0Zm9ybS5z
dGFydHN3aXRoKCdjaHJvbWl1bS1saW51eCcpOgotICAgICAgICByZXR1cm4gY2hyb21pdW1fbGlu
dXguYmFzZWxpbmVfc2VhcmNoX3BhdGgocGxhdGZvcm0pCi0gICAgcmV0dXJuIHBvcnQuYmFzZWxp
bmVfc2VhcmNoX3BhdGgoKQotCi0KLWRlZiBleHBlY3RlZF9iYXNlbGluZXMoZmlsZW5hbWUsIHN1
ZmZpeCwgcGxhdGZvcm09Tm9uZSwgYWxsX2Jhc2VsaW5lcz1GYWxzZSk6Ci0gICAgIiIiR2l2ZW4g
YSB0ZXN0IG5hbWUsIGZpbmRzIHdoZXJlIHRoZSBiYXNlbGluZSByZXN1bHRzIGFyZSBsb2NhdGVk
LgotCi0gICAgQXJnczoKLSAgICAgICBmaWxlbmFtZTogYWJzb2x1dGUgZmlsZW5hbWUgdG8gdGVz
dCBmaWxlCi0gICAgICAgc3VmZml4OiBmaWxlIHN1ZmZpeCBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0
cywgaW5jbHVkaW5nIGRvdDsgZS5nLiAnLnR4dCcKLSAgICAgICAgICAgb3IgJy5wbmcnLiAgVGhp
cyBzaG91bGQgbm90IGJlIE5vbmUsIGJ1dCBtYXkgYmUgYW4gZW1wdHkgc3RyaW5nLgotICAgICAg
IHBsYXRmb3JtOiBsYXlvdXQgdGVzdCBwbGF0Zm9ybTogJ3dpbicsICdsaW51eCcgb3IgJ21hYycu
IERlZmF1bHRzIHRvCi0gICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IHBsYXRmb3JtLgotICAg
ICAgIGFsbF9iYXNlbGluZXM6IElmIFRydWUsIHJldHVybiBhbiBvcmRlcmVkIGxpc3Qgb2YgYWxs
IGJhc2VsaW5lIHBhdGhzCi0gICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBnaXZlbiBwbGF0
Zm9ybS4gSWYgRmFsc2UsIHJldHVybiBvbmx5IHRoZSBmaXJzdAotICAgICAgICAgICAgICAgICAg
ICAgIG9uZS4KLSAgICBSZXR1cm5zCi0gICAgICAgYSBsaXN0IG9mICggcGxhdGZvcm1fZGlyLCBy
ZXN1bHRzX2ZpbGVuYW1lICksIHdoZXJlCi0gICAgICAgICBwbGF0Zm9ybV9kaXIgLSBhYnMgcGF0
aCB0byB0aGUgdG9wIG9mIHRoZSByZXN1bHRzIHRyZWUgKG9yIHRlc3QgdHJlZSkKLSAgICAgICAg
IHJlc3VsdHNfZmlsZW5hbWUgLSByZWxhdGl2ZSBwYXRoIGZyb20gdG9wIG9mIHRyZWUgdG8gdGhl
IHJlc3VsdHMgZmlsZQotICAgICAgICAgICAob3MucGF0aC5qb2luIG9mIHRoZSB0d28gZ2l2ZXMg
eW91IHRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUsCi0gICAgICAgICAgICB1bmxlc3MgTm9uZSB3
YXMgcmV0dXJuZWQuKQotICAgICAgUmV0dXJuIHZhbHVlcyB3aWxsIGJlIGluIHRoZSBmb3JtYXQg
YXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtCi0gICAgICAoZS5nLiwgIlxcIiBm
b3IgcGF0aCBzZXBhcmF0b3JzIG9uIFdpbmRvd3MpLiBJZiB0aGUgcmVzdWx0cyBmaWxlIGlzIG5v
dAotICAgICAgZm91bmQsIHRoZW4gTm9uZSB3aWxsIGJlIHJldHVybmVkIGZvciB0aGUgZGlyZWN0
b3J5LCBidXQgdGhlIGV4cGVjdGVkCi0gICAgICByZWxhdGl2ZSBwYXRobmFtZSB3aWxsIHN0aWxs
IGJlIHJldHVybmVkLgotICAgICIiIgotICAgIGdsb2JhbCBfYmFzZWxpbmVfc2VhcmNoX3BhdGgK
LSAgICBnbG9iYWwgX3NlYXJjaF9wYXRoX3BsYXRmb3JtCi0gICAgdGVzdG5hbWUgPSBvcy5wYXRo
LnNwbGl0ZXh0KHJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKVswXQotCi0gICAgYmFz
ZWxpbmVfZmlsZW5hbWUgPSB0ZXN0bmFtZSArICctZXhwZWN0ZWQnICsgc3VmZml4Ci0KLSAgICBp
ZiAoX2Jhc2VsaW5lX3NlYXJjaF9wYXRoIGlzIE5vbmUpIG9yIChfc2VhcmNoX3BhdGhfcGxhdGZv
cm0gIT0gcGxhdGZvcm0pOgotICAgICAgICBfYmFzZWxpbmVfc2VhcmNoX3BhdGggPSBiYXNlbGlu
ZV9zZWFyY2hfcGF0aChwbGF0Zm9ybSkKLSAgICAgICAgX3NlYXJjaF9wYXRoX3BsYXRmb3JtID0g
cGxhdGZvcm0KLQotICAgIGJhc2VsaW5lcyA9IFtdCi0gICAgZm9yIHBsYXRmb3JtX2RpciBpbiBf
YmFzZWxpbmVfc2VhcmNoX3BhdGg6Ci0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGgu
am9pbihwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSk6Ci0gICAgICAgICAgICBiYXNl
bGluZXMuYXBwZW5kKChwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSkKLQotICAgICAg
ICBpZiBub3QgYWxsX2Jhc2VsaW5lcyBhbmQgYmFzZWxpbmVzOgotICAgICAgICAgICAgcmV0dXJu
IGJhc2VsaW5lcwotCi0gICAgIyBJZiBpdCB3YXNuJ3QgZm91bmQgaW4gYSBwbGF0Zm9ybSBkaXJl
Y3RvcnksIHJldHVybiB0aGUgZXhwZWN0ZWQgcmVzdWx0Ci0gICAgIyBpbiB0aGUgdGVzdCBkaXJl
Y3RvcnksIGV2ZW4gaWYgbm8gc3VjaCBmaWxlIGFjdHVhbGx5IGV4aXN0cy4KLSAgICBwbGF0Zm9y
bV9kaXIgPSBsYXlvdXRfdGVzdHNfZGlyKCkKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRo
LmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpOgotICAgICAgICBiYXNlbGlu
ZXMuYXBwZW5kKChwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKSkKLQotICAgIGlmIGJh
c2VsaW5lczoKLSAgICAgICAgcmV0dXJuIGJhc2VsaW5lcwotCi0gICAgcmV0dXJuIFsoTm9uZSwg
YmFzZWxpbmVfZmlsZW5hbWUpXQotCi0KLWRlZiBleHBlY3RlZF9maWxlbmFtZShmaWxlbmFtZSwg
c3VmZml4KToKLSAgICAiIiJHaXZlbiBhIHRlc3QgbmFtZSwgcmV0dXJucyBhbiBhYnNvbHV0ZSBw
YXRoIHRvIGl0cyBleHBlY3RlZCByZXN1bHRzLgotCi0gICAgSWYgbm8gZXhwZWN0ZWQgcmVzdWx0
cyBhcmUgZm91bmQgaW4gYW55IG9mIHRoZSBzZWFyY2hlZCBkaXJlY3RvcmllcywgdGhlCi0gICAg
ZGlyZWN0b3J5IGluIHdoaWNoIHRoZSB0ZXN0IGl0c2VsZiBpcyBsb2NhdGVkIHdpbGwgYmUgcmV0
dXJuZWQuIFRoZSByZXR1cm4KLSAgICB2YWx1ZSBpcyBpbiB0aGUgZm9ybWF0IGFwcHJvcHJpYXRl
IGZvciB0aGUgcGxhdGZvcm0gKGUuZy4sICJcXCIgZm9yCi0gICAgcGF0aCBzZXBhcmF0b3JzIG9u
IHdpbmRvd3MpLgotCi0gICAgQXJnczoKLSAgICAgICBmaWxlbmFtZTogYWJzb2x1dGUgZmlsZW5h
bWUgdG8gdGVzdCBmaWxlCi0gICAgICAgc3VmZml4OiBmaWxlIHN1ZmZpeCBvZiB0aGUgZXhwZWN0
ZWQgcmVzdWx0cywgaW5jbHVkaW5nIGRvdDsgZS5nLiAnLnR4dCcKLSAgICAgICAgICAgb3IgJy5w
bmcnLiAgVGhpcyBzaG91bGQgbm90IGJlIE5vbmUsIGJ1dCBtYXkgYmUgYW4gZW1wdHkgc3RyaW5n
LgotICAgICAgIHBsYXRmb3JtOiB0aGUgbW9zdC1zcGVjaWZpYyBkaXJlY3RvcnkgbmFtZSB0byB1
c2UgdG8gYnVpbGQgdGhlCi0gICAgICAgICAgIHNlYXJjaCBsaXN0IG9mIGRpcmVjdG9yaWVzLCBl
LmcuLCAnY2hyb21pdW0td2luJywgb3IKLSAgICAgICAgICAgJ2Nocm9taXVtLW1hYy1sZW9wYXJk
JyAod2UgZm9sbG93IHRoZSBXZWJLaXQgZm9ybWF0KQotICAgICIiIgotICAgIHBsYXRmb3JtX2Rp
ciwgYmFzZWxpbmVfZmlsZW5hbWUgPSBleHBlY3RlZF9iYXNlbGluZXMoZmlsZW5hbWUsIHN1ZmZp
eClbMF0KLSAgICBpZiBwbGF0Zm9ybV9kaXI6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4o
cGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkKLSAgICByZXR1cm4gb3MucGF0aC5qb2lu
KGxheW91dF90ZXN0c19kaXIoKSwgYmFzZWxpbmVfZmlsZW5hbWUpCi0KLQotZGVmIHJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpOgotICAgICIiIlByb3ZpZGUgdGhlIGZpbGVuYW1lIG9m
IHRoZSB0ZXN0IHJlbGF0aXZlIHRvIHRoZSBsYXlvdXQgdGVzdHMKLSAgICBkaXJlY3RvcnkgYXMg
YSB1bml4IHN0eWxlIHBhdGggKGEvYi9jKS4iIiIKLSAgICByZXR1cm4gX3dpbl9wYXRoX3RvX3Vu
aXgoZmlsZW5hbWVbbGVuKGxheW91dF90ZXN0c19kaXIoKSkgKyAxOl0pCi0KLQotZGVmIF93aW5f
cGF0aF90b191bml4KHBhdGgpOgotICAgICIiIkNvbnZlcnQgYSB3aW5kb3dzIHBhdGggdG8gdXNl
IHVuaXgtc3R5bGUgcGF0aCBzZXBhcmF0b3JzIChhL2IvYykuIiIiCi0gICAgcmV0dXJuIHBhdGgu
cmVwbGFjZSgnXFwnLCAnLycpCi0KLSMKLSMgUm91dGluZXMgdGhhdCBhcmUgYXJndWFibHkgcGxh
dGZvcm0tc3BlY2lmaWMgYnV0IGhhdmUgYmVlbiBtYWRlCi0jIGdlbmVyaWMgZm9yIG5vdwotIwot
Ci0KLWRlZiBmaWxlbmFtZV90b191cmkoZnVsbF9wYXRoKToKLSAgICAiIiJDb252ZXJ0IGEgdGVz
dCBmaWxlIHRvIGEgVVJJLiIiIgotICAgIExBWU9VVFRFU1RfSFRUUF9ESVIgPSAiaHR0cC90ZXN0
cy8iCi0gICAgTEFZT1VUVEVTVF9XRUJTT0NLRVRfRElSID0gIndlYnNvY2tldC90ZXN0cy8iCi0K
LSAgICByZWxhdGl2ZV9wYXRoID0gX3dpbl9wYXRoX3RvX3VuaXgocmVsYXRpdmVfdGVzdF9maWxl
bmFtZShmdWxsX3BhdGgpKQotICAgIHBvcnQgPSBOb25lCi0gICAgdXNlX3NzbCA9IEZhbHNlCi0K
LSAgICBpZiByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoTEFZT1VUVEVTVF9IVFRQX0RJUik6Ci0g
ICAgICAgICMgaHR0cC90ZXN0cy8gcnVuIG9mZiBwb3J0IDgwMDAgYW5kIHNzbC8gb2ZmIDg0NDMK
LSAgICAgICAgcmVsYXRpdmVfcGF0aCA9IHJlbGF0aXZlX3BhdGhbbGVuKExBWU9VVFRFU1RfSFRU
UF9ESVIpOl0KLSAgICAgICAgcG9ydCA9IDgwMDAKLSAgICBlbGlmIHJlbGF0aXZlX3BhdGguc3Rh
cnRzd2l0aChMQVlPVVRURVNUX1dFQlNPQ0tFVF9ESVIpOgotICAgICAgICAjIHdlYnNvY2tldC90
ZXN0cy8gcnVuIG9mZiBwb3J0IDg4ODAgYW5kIDkzMjMKLSAgICAgICAgIyBOb3RlOiB0aGUgcm9v
dCBpcyAvLCBub3Qgd2Vic29ja2V0L3Rlc3RzLwotICAgICAgICBwb3J0ID0gODg4MAotCi0gICAg
IyBNYWtlIGh0dHAvdGVzdHMvbG9jYWwgcnVuIGFzIGxvY2FsIGZpbGVzLiBUaGlzIGlzIHRvIG1p
bWljIHRoZQotICAgICMgbG9naWMgaW4gcnVuLXdlYmtpdC10ZXN0cy4KLSAgICAjIFRPRE8oamlh
bmxpKTogQ29uc2lkZXIgZXh0ZW5kaW5nIHRoaXMgdG8gIm1lZGlhLyIuCi0gICAgaWYgcG9ydCBh
bmQgbm90IHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0aCgibG9jYWwvIik6Ci0gICAgICAgIGlmIHJl
bGF0aXZlX3BhdGguc3RhcnRzd2l0aCgic3NsLyIpOgotICAgICAgICAgICAgcG9ydCArPSA0NDMK
LSAgICAgICAgICAgIHByb3RvY29sID0gImh0dHBzIgotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgcHJvdG9jb2wgPSAiaHR0cCIKLSAgICAgICAgcmV0dXJuICIlczovLzEyNy4wLjAuMToldS8l
cyIgJSAocHJvdG9jb2wsIHBvcnQsIHJlbGF0aXZlX3BhdGgpCi0KLSAgICBpZiBzeXMucGxhdGZv
cm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKLSAgICAgICAgcmV0dXJuICJmaWxlOi8vLyIgKyBn
ZXRfYWJzb2x1dGVfcGF0aChmdWxsX3BhdGgpCi0gICAgcmV0dXJuICJmaWxlOi8vIiArIGdldF9h
YnNvbHV0ZV9wYXRoKGZ1bGxfcGF0aCkKLQotCi1kZWYgZ2V0X2Fic29sdXRlX3BhdGgocGF0aCk6
Ci0gICAgIiIiUmV0dXJucyBhbiBhYnNvbHV0ZSBVTklYIHBhdGguIiIiCi0gICAgcmV0dXJuIF93
aW5fcGF0aF90b191bml4KG9zLnBhdGguYWJzcGF0aChwYXRoKSkKLQotCi1kZWYgbWF5YmVfbWFr
ZV9kaXJlY3RvcnkoKnBhdGgpOgotICAgICIiIkNyZWF0ZXMgdGhlIHNwZWNpZmllZCBkaXJlY3Rv
cnkgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LiIiIgotICAgIHRyeToKLSAgICAgICAgb3Mu
bWFrZWRpcnMob3MucGF0aC5qb2luKCpwYXRoKSkKLSAgICBleGNlcHQgT1NFcnJvciwgZToKLSAg
ICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICByYWlzZQotCi0K
LWRlZiBwYXRoX2Zyb21fYmFzZSgqY29tcHMpOgotICAgICIiIlJldHVybnMgYW4gYWJzb2x1dGUg
ZmlsZW5hbWUgZnJvbSBhIHNldCBvZiBjb21wb25lbnRzIHNwZWNpZmllZAotICAgIHJlbGF0aXZl
IHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLiBJZiB0aGUgcGF0aCBkb2VzIG5vdCBleGlz
dCwKLSAgICB0aGUgZXhjZXB0aW9uIFBhdGhOb3RGb3VuZCBpcyByYWlzZWQuIiIiCi0gICAgZ2xv
YmFsIF9iYXNlZGlyCi0gICAgaWYgX2Jhc2VkaXIgPT0gTm9uZToKLSAgICAgICAgIyBXZSBjb21w
dXRlIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlIGJ5IGZpbmRpbmcgdGhlIGFic29sdXRlCi0g
ICAgICAgICMgcGF0aCBvZiB0aGlzIHNvdXJjZSBmaWxlLCBhbmQgdGhlbiBjbGltYmluZyB1cCB0
aHJlZSBkaXJlY3RvcmllcwotICAgICAgICAjIGFzIGdpdmVuIGluIHN1YnBhdGguIElmIHdlIG1v
dmUgdGhpcyBmaWxlLCBzdWJwYXRoIG5lZWRzIHRvIGJlCi0gICAgICAgICMgdXBkYXRlZC4KLSAg
ICAgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKLSAgICAgICAgc3VicGF0aCA9
IG9zLnBhdGguam9pbigndGhpcmRfcGFydHknLCAnV2ViS2l0JykKLSAgICAgICAgX2Jhc2VkaXIg
PSBwYXRoWzpwYXRoLmluZGV4KHN1YnBhdGgpXQotICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oX2Jh
c2VkaXIsICpjb21wcykKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6Ci0gICAgICAg
IHJhaXNlIFBhdGhOb3RGb3VuZCgnY291bGQgbm90IGZpbmQgJXMnICUgKHBhdGgpKQotICAgIHJl
dHVybiBwYXRoCi0KLQotZGVmIHJlbW92ZV9kaXJlY3RvcnkoKnBhdGgpOgotICAgICIiIlJlY3Vy
c2l2ZWx5IHJlbW92ZXMgYSBkaXJlY3RvcnksIGV2ZW4gaWYgaXQncyBtYXJrZWQgcmVhZC1vbmx5
LgotCi0gICAgUmVtb3ZlIHRoZSBkaXJlY3RvcnkgbG9jYXRlZCBhdCAqcGF0aCwgaWYgaXQgZXhp
c3RzLgotCi0gICAgc2h1dGlsLnJtdHJlZSgpIGRvZXNuJ3Qgd29yayBvbiBXaW5kb3dzIGlmIGFu
eSBvZiB0aGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMKLSAgICBhcmUgcmVhZC1vbmx5LCB3aGljaCBz
dm4gcmVwb3NpdG9yaWVzIGFuZCBzb21lIC5zdm4gZmlsZXMgYXJlLiAgV2UgbmVlZCB0bwotICAg
IGJlIGFibGUgdG8gZm9yY2UgdGhlIGZpbGVzIHRvIGJlIHdyaXRhYmxlIChpLmUuLCBkZWxldGFi
bGUpIGFzIHdlIHRyYXZlcnNlCi0gICAgdGhlIHRyZWUuCi0KLSAgICBFdmVuIHdpdGggYWxsIHRo
aXMsIFdpbmRvd3Mgc3RpbGwgc29tZXRpbWVzIGZhaWxzIHRvIGRlbGV0ZSBhIGZpbGUsIGNpdGlu
ZwotICAgIGEgcGVybWlzc2lvbiBlcnJvciAobWF5YmUgc29tZXRoaW5nIHRvIGRvIHdpdGggYW50
aXZpcnVzIHNjYW5zIG9yIGRpc2sKLSAgICBpbmRleGluZykuICBUaGUgYmVzdCBzdWdnZXN0aW9u
IGFueSBvZiB0aGUgdXNlciBmb3J1bXMgaGFkIHdhcyB0byB3YWl0IGEKLSAgICBiaXQgYW5kIHRy
eSBhZ2Fpbiwgc28gd2UgZG8gdGhhdCB0b28uICBJdCdzIGhhbmQtd2F2aW5nLCBidXQgc29tZXRp
bWVzIGl0Ci0gICAgd29ya3MuIDovCi0gICAgIiIiCi0gICAgZmlsZV9wYXRoID0gb3MucGF0aC5q
b2luKCpwYXRoKQotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlX3BhdGgpOgotICAgICAg
ICByZXR1cm4KLQotICAgIHdpbjMyID0gRmFsc2UKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dp
bjMyJzoKLSAgICAgICAgd2luMzIgPSBUcnVlCi0gICAgICAgICMgU29tZSBwZW9wbGUgZG9uJ3Qg
aGF2ZSB0aGUgQVBJcyBpbnN0YWxsZWQuIEluIHRoYXQgY2FzZSB3ZSdsbCBkbwotICAgICAgICAj
IHdpdGhvdXQuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpbjMyYXBpID0gX19pbXBvcnRf
Xygnd2luMzJhcGknKQotICAgICAgICAgICAgd2luMzJjb24gPSBfX2ltcG9ydF9fKCd3aW4zMmNv
bicpCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHdpbjMyID0gRmFs
c2UKLQotICAgICAgICBkZWYgcmVtb3ZlX3dpdGhfcmV0cnkocm1mdW5jLCBwYXRoKToKLSAgICAg
ICAgICAgIG9zLmNobW9kKHBhdGgsIHN0YXQuU19JV1JJVEUpCi0gICAgICAgICAgICBpZiB3aW4z
MjoKLSAgICAgICAgICAgICAgICB3aW4zMmFwaS5TZXRGaWxlQXR0cmlidXRlcyhwYXRoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbjMyY29uLkZJTEVfQVRU
UklCVVRFX05PUk1BTCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXR1cm4g
cm1mdW5jKHBhdGgpCi0gICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciwgZToKLSAg
ICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVBQ0NFUzoKLSAgICAgICAgICAgICAg
ICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICBwcmludCAnRmFpbGVkIHRvIGRlbGV0ZSAlczog
dHJ5aW5nIGFnYWluJyAlIHJlcHIocGF0aCkKLSAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAu
MSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcm1mdW5jKHBhdGgpCi0gICAgZWxzZToKLQotICAg
ICAgICBkZWYgcmVtb3ZlX3dpdGhfcmV0cnkocm1mdW5jLCBwYXRoKToKLSAgICAgICAgICAgIGlm
IG9zLnBhdGguaXNsaW5rKHBhdGgpOgotICAgICAgICAgICAgICAgIHJldHVybiBvcy5yZW1vdmUo
cGF0aCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJtZnVuYyhw
YXRoKQotCi0gICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZmlsZV9wYXRoLCB0
b3Bkb3duPUZhbHNlKToKLSAgICAgICAgIyBGb3IgUE9TSVg6ICBtYWtpbmcgdGhlIGRpcmVjdG9y
eSB3cml0YWJsZSBndWFyYW50ZWVzIHJlbW92YWJpbGl0eS4KLSAgICAgICAgIyBXaW5kb3dzIHdp
bGwgaWdub3JlIHRoZSBub24tcmVhZC1vbmx5IGJpdHMgaW4gdGhlIGNobW9kIHZhbHVlLgotICAg
ICAgICBvcy5jaG1vZChyb290LCAwNzcwKQotICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKLSAg
ICAgICAgICAgIHJlbW92ZV93aXRoX3JldHJ5KG9zLnJlbW92ZSwgb3MucGF0aC5qb2luKHJvb3Qs
IG5hbWUpKQotICAgICAgICBmb3IgbmFtZSBpbiBkaXJzOgotICAgICAgICAgICAgcmVtb3ZlX3dp
dGhfcmV0cnkob3Mucm1kaXIsIG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKLQotICAgIHJlbW92
ZV93aXRoX3JldHJ5KG9zLnJtZGlyLCBmaWxlX3BhdGgpCi0KLSMKLSMgV3JhcHBlcnMgYXJvdW5k
IHBvcnQvCi0jCi0KLQotZGVmIHBsYXRmb3JtX25hbWUocGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIi
UmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgY2hyb21pdW0gcGxhdGZvcm0gbmFtZSBmb3IgfHBsYXRm
b3JtfC4gSWYKLSAgICAgICB8cGxhdGZvcm18IGlzIE5vbmUsIHJldHVybnMgdGhlIG5hbWUgb2Yg
dGhlIGNocm9taXVtIHBsYXRmb3JtIG9uIHRoZQotICAgICAgIGN1cnJlbnRseSBydW5uaW5nIHN5
c3RlbS4gSWYgfHBsYXRmb3JtfCBpcyBvZiB0aGUgZm9ybSAnY2hyb21pdW0tKicsCi0gICAgICAg
aXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLCBvdGhlcndpc2UgJ2Nocm9taXVtLScgaXMgcHJlcGVu
ZGVkLiIiIgotICAgIGlmIHBsYXRmb3JtID09IE5vbmU6Ci0gICAgICAgIHJldHVybiBwb3J0LnBs
YXRmb3JtX25hbWUoKQotICAgIGlmIG5vdCBwbGF0Zm9ybS5zdGFydHN3aXRoKCdjaHJvbWl1bS0n
KToKLSAgICAgICAgcGxhdGZvcm0gPSAiY2hyb21pdW0tIiArIHBsYXRmb3JtCi0gICAgcmV0dXJu
IHBsYXRmb3JtCi0KLQotZGVmIHBsYXRmb3JtX3ZlcnNpb24oKToKLSAgICByZXR1cm4gcG9ydC5w
bGF0Zm9ybV92ZXJzaW9uKCkKLQotCi1kZWYgbGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCk6Ci0g
ICAgcmV0dXJuIHBvcnQubGlnaHR0cGRfZXhlY3V0YWJsZV9wYXRoKCkKLQotCi1kZWYgbGlnaHR0
cGRfbW9kdWxlX3BhdGgoKToKLSAgICByZXR1cm4gcG9ydC5saWdodHRwZF9tb2R1bGVfcGF0aCgp
Ci0KLQotZGVmIGxpZ2h0dHBkX3BocF9wYXRoKCk6Ci0gICAgcmV0dXJuIHBvcnQubGlnaHR0cGRf
cGhwX3BhdGgoKQotCi0KLWRlZiB3ZGlmZl9wYXRoKCk6Ci0gICAgcmV0dXJuIHBvcnQud2RpZmZf
cGF0aCgpCi0KLQotZGVmIHRlc3Rfc2hlbGxfcGF0aCh0YXJnZXQpOgotICAgIHJldHVybiBwb3J0
LnRlc3Rfc2hlbGxfcGF0aCh0YXJnZXQpCi0KLQotZGVmIGltYWdlX2RpZmZfcGF0aCh0YXJnZXQp
OgotICAgIHJldHVybiBwb3J0LmltYWdlX2RpZmZfcGF0aCh0YXJnZXQpCi0KLQotZGVmIGxheW91
dF90ZXN0X2hlbHBlcl9wYXRoKHRhcmdldCk6Ci0gICAgcmV0dXJuIHBvcnQubGF5b3V0X3Rlc3Rf
aGVscGVyX3BhdGgodGFyZ2V0KQotCi0KLWRlZiBmdXp6eV9tYXRjaF9wYXRoKCk6Ci0gICAgcmV0
dXJuIHBvcnQuZnV6enlfbWF0Y2hfcGF0aCgpCi0KLQotZGVmIHNodXRfZG93bl9odHRwX3NlcnZl
cihzZXJ2ZXJfcGlkKToKLSAgICByZXR1cm4gcG9ydC5zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2Vy
dmVyX3BpZCkKLQotCi1kZWYga2lsbF9hbGxfdGVzdF9zaGVsbHMoKToKLSAgICBwb3J0LmtpbGxf
YWxsX3Rlc3Rfc2hlbGxzKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIu
cHkJKHJldmlzaW9uIDU0MzY0KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4
ICszOSw2IEBAIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRpbWUKIGltcG9ydCB1cmxsaWIKIAot
aW1wb3J0IHBhdGhfdXRpbHMKLWltcG9ydCBwb3J0CiBpbXBvcnQgaHR0cF9zZXJ2ZXIKIAogX1dT
X0xPR19QUkVGSVggPSAncHl3ZWJzb2NrZXQud3MubG9nLScKQEAgLTUxLDM3ICs0OSwyOSBAQCBf
REVGQVVMVF9XU1NfUE9SVCA9IDkzMjMKIAogCiBkZWYgdXJsX2lzX2FsaXZlKHVybCk6Ci0gICIi
IkNoZWNrcyB0byBzZWUgaWYgd2UgZ2V0IGFuIGh0dHAgcmVzcG9uc2UgZnJvbSB8dXJsfC4KLSAg
V2UgcG9sbCB0aGUgdXJsIDUgdGltZXMgd2l0aCBhIDEgc2Vjb25kIGRlbGF5LiAgSWYgd2UgZG9u
J3QKLSAgZ2V0IGEgcmVwbHkgaW4gdGhhdCB0aW1lLCB3ZSBnaXZlIHVwIGFuZCBhc3N1bWUgdGhl
IGh0dHBkCi0gIGRpZG4ndCBzdGFydCBwcm9wZXJseS4KLQotICBBcmdzOgotICAgIHVybDogVGhl
IFVSTCB0byBjaGVjay4KLSAgUmV0dXJuOgotICAgIFRydWUgaWYgdGhlIHVybCBpcyBhbGl2ZS4K
LSAgIiIiCi0gIHdhaXRfdGltZSA9IDUKLSAgd2hpbGUgd2FpdF90aW1lID4gMDoKLSAgICB0cnk6
Ci0gICAgICByZXNwb25zZSA9IHVybGxpYi51cmxvcGVuKHVybCkKLSAgICAgICMgU2VydmVyIGlz
IHVwIGFuZCByZXNwb25kaW5nLgotICAgICAgcmV0dXJuIFRydWUKLSAgICBleGNlcHQgSU9FcnJv
cjoKLSAgICAgIHBhc3MKLSAgICB3YWl0X3RpbWUgLT0gMQotICAgICMgV2FpdCBhIHNlY29uZCBh
bmQgdHJ5IGFnYWluLgotICAgIHRpbWUuc2xlZXAoMSkKLQotICByZXR1cm4gRmFsc2UKLQotCi1k
ZWYgcmVtb3ZlX2xvZ19maWxlcyhmb2xkZXIsIHN0YXJ0c193aXRoKToKLSAgICBmaWxlcyA9IG9z
Lmxpc3RkaXIoZm9sZGVyKQotICAgIGZvciBmaWxlIGluIGZpbGVzOgotICAgICAgICBpZiBmaWxl
LnN0YXJ0c3dpdGgoc3RhcnRzX3dpdGgpOgotICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0
aC5qb2luKGZvbGRlciwgZmlsZSkKLSAgICAgICAgICAgIG9zLnJlbW92ZShmdWxsX3BhdGgpCisg
ICAgIiIiQ2hlY2tzIHRvIHNlZSBpZiB3ZSBnZXQgYW4gaHR0cCByZXNwb25zZSBmcm9tIHx1cmx8
LgorICAgIFdlIHBvbGwgdGhlIHVybCA1IHRpbWVzIHdpdGggYSAxIHNlY29uZCBkZWxheS4gIElm
IHdlIGRvbid0CisgICAgZ2V0IGEgcmVwbHkgaW4gdGhhdCB0aW1lLCB3ZSBnaXZlIHVwIGFuZCBh
c3N1bWUgdGhlIGh0dHBkCisgICAgZGlkbid0IHN0YXJ0IHByb3Blcmx5LgorCisgICAgQXJnczoK
KyAgICAgIHVybDogVGhlIFVSTCB0byBjaGVjay4KKyAgICBSZXR1cm46CisgICAgICBUcnVlIGlm
IHRoZSB1cmwgaXMgYWxpdmUuCisgICAgIiIiCisgICAgd2FpdF90aW1lID0gNQorICAgIHdoaWxl
IHdhaXRfdGltZSA+IDA6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3BvbnNlID0gdXJs
bGliLnVybG9wZW4odXJsKQorICAgICAgICAgICAgIyBTZXJ2ZXIgaXMgdXAgYW5kIHJlc3BvbmRp
bmcuCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAg
ICAgICAgICAgIHBhc3MKKyAgICAgICAgd2FpdF90aW1lIC09IDEKKyAgICAgICAgIyBXYWl0IGEg
c2Vjb25kIGFuZCB0cnkgYWdhaW4uCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgIHJldHVy
biBGYWxzZQogCiAKIGNsYXNzIFB5V2ViU29ja2V0Tm90U3RhcnRlZChFeGNlcHRpb24pOgpAQCAt
OTQsMTggKzg0LDE1IEBAIGNsYXNzIFB5V2ViU29ja2V0Tm90Rm91bmQoRXhjZXB0aW9uKToKIAog
Y2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIG91dHB1dF9kaXIsIHBvcnQ9X0RFRkFVTFRfV1NfUE9SVCwKLSAgICAgICAgICAg
ICAgICAgcm9vdD1Ob25lLAotICAgICAgICAgICAgICAgICB1c2VfdGxzPUZhbHNlLAotICAgICAg
ICAgICAgICAgICBwcml2YXRlX2tleT1odHRwX3NlcnZlci5MaWdodHRwZC5fcGVtX2ZpbGUsCi0g
ICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlPWh0dHBfc2VydmVyLkxpZ2h0dHBkLl9wZW1fZmls
ZSwKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG91dHB1dF9kaXIsIHBvcnQ9X0RF
RkFVTFRfV1NfUE9SVCwKKyAgICAgICAgICAgICAgICAgcm9vdD1Ob25lLCB1c2VfdGxzPUZhbHNl
LAogICAgICAgICAgICAgICAgICByZWdpc3Rlcl9jeWd3aW49Tm9uZSwKICAgICAgICAgICAgICAg
ICAgcGlkZmlsZT1Ob25lKToKICAgICAgICAgIiIiQXJnczoKICAgICAgICAgICBvdXRwdXRfZGly
OiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGRpcmVjdG9yeQog
ICAgICAgICAiIiIKLSAgICAgICAgaHR0cF9zZXJ2ZXIuTGlnaHR0cGQuX19pbml0X18oc2VsZiwg
b3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD1w
b3J0LAorICAgICAgICBodHRwX3NlcnZlci5MaWdodHRwZC5fX2luaXRfXyhzZWxmLCBwb3J0X29i
aiwgb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9y
dD1fREVGQVVMVF9XU19QT1JULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByb290PXJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lz
dGVyX2N5Z3dpbj1yZWdpc3Rlcl9jeWd3aW4pCiAgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBv
dXRwdXRfZGlyCkBAIC0xMTMsOCArMTAwLDggQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2
ZXIuTGlnaHR0cGQpOgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9y
b290ID0gcm9vdAogICAgICAgICBzZWxmLl91c2VfdGxzID0gdXNlX3RscwotICAgICAgICBzZWxm
Ll9wcml2YXRlX2tleSA9IHByaXZhdGVfa2V5Ci0gICAgICAgIHNlbGYuX2NlcnRpZmljYXRlID0g
Y2VydGlmaWNhdGUKKyAgICAgICAgc2VsZi5fcHJpdmF0ZV9rZXkgPSBzZWxmLl9wZW1fZmlsZQor
ICAgICAgICBzZWxmLl9jZXJ0aWZpY2F0ZSA9IHNlbGYuX3BlbV9maWxlCiAgICAgICAgIGlmIHNl
bGYuX3BvcnQ6CiAgICAgICAgICAgICBzZWxmLl9wb3J0ID0gaW50KHNlbGYuX3BvcnQpCiAgICAg
ICAgIGlmIHNlbGYuX3VzZV90bHM6CkBAIC0xMzEsMTIgKzExOCwxMCBAQCBjbGFzcyBQeVdlYlNv
Y2tldChodHRwX3NlcnZlci5MaWdodHRwZCk6CiAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2lu
KHNlbGYuX3Jvb3QsICd3ZWJzb2NrZXQnLCAndGVzdHMnKSkKICAgICAgICAgZWxzZToKICAgICAg
ICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzID0gcGF0
aF91dGlscy5wYXRoX2Zyb21fYmFzZSgKLSAgICAgICAgICAgICAgICAgICAgJ3RoaXJkX3BhcnR5
JywgJ1dlYktpdCcsICdMYXlvdXRUZXN0cycsICd3ZWJzb2NrZXQnLAotICAgICAgICAgICAgICAg
ICAgICAndGVzdHMnKQotICAgICAgICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0cyA9IHBhdGhf
dXRpbHMucGF0aF9mcm9tX2Jhc2UoCi0gICAgICAgICAgICAgICAgICAgICd0aGlyZF9wYXJ0eScs
ICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMnKQotICAgICAgICAgICAgZXhjZXB0IHBhdGhfdXRpbHMu
UGF0aE5vdEZvdW5kOgorICAgICAgICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0cyA9IHNlbGYu
X3BvcnRfb2JqLmxheW91dF90ZXN0c19kaXIoKQorICAgICAgICAgICAgICAgIHNlbGYuX3dlYl9z
b2NrZXRfdGVzdHMgPSBvcy5wYXRoLmpvaW4oc2VsZi5fbGF5b3V0X3Rlc3RzLAorICAgICAgICAg
ICAgICAgICAgICAgJ3dlYnNvY2tldCcsICd0ZXN0cycpCisgICAgICAgICAgICBleGNlcHQ6CiAg
ICAgICAgICAgICAgICAgc2VsZi5fd2ViX3NvY2tldF90ZXN0cyA9IE5vbmUKIAogICAgIGRlZiBz
dGFydChzZWxmKToKQEAgLTE1NSw3ICsxNDAsNyBAQCBjbGFzcyBQeVdlYlNvY2tldChodHRwX3Nl
cnZlci5MaWdodHRwZCk6CiAgICAgICAgIGxvZ19maWxlX25hbWUgPSBsb2dfcHJlZml4ICsgdGlt
ZV9zdHIKIAogICAgICAgICAjIFJlbW92ZSBvbGQgbG9nIGZpbGVzLiBXZSBvbmx5IG5lZWQgdG8g
a2VlcCB0aGUgbGFzdCBvbmVzLgotICAgICAgICByZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1
dF9kaXIsIGxvZ19wcmVmaXgpCisgICAgICAgIHNlbGYucmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9v
dXRwdXRfZGlyLCBsb2dfcHJlZml4KQogCiAgICAgICAgIGVycm9yX2xvZyA9IG9zLnBhdGguam9p
bihzZWxmLl9vdXRwdXRfZGlyLCBsb2dfZmlsZV9uYW1lICsgIi1lcnIudHh0IikKIApAQCAtMTYz
LDExICsxNDgsMTEgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgog
ICAgICAgICBzZWxmLl93c291dCA9IG9wZW4ob3V0cHV0X2xvZywgInciKQogCiAgICAgICAgIHB5
dGhvbl9pbnRlcnAgPSBzeXMuZXhlY3V0YWJsZQotICAgICAgICBweXdlYnNvY2tldF9iYXNlID0g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgKLSAgICAgICAgICAgICd0aGlyZF9wYXJ0eScsICdX
ZWJLaXQnLCAnV2ViS2l0VG9vbHMnLCAncHl3ZWJzb2NrZXQnKQotICAgICAgICBweXdlYnNvY2tl
dF9zY3JpcHQgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKAotICAgICAgICAgICAgJ3RoaXJk
X3BhcnR5JywgJ1dlYktpdCcsICdXZWJLaXRUb29scycsICdweXdlYnNvY2tldCcsCi0gICAgICAg
ICAgICAnbW9kX3B5d2Vic29ja2V0JywgJ3N0YW5kYWxvbmUucHknKQorICAgICAgICBweXdlYnNv
Y2tldF9iYXNlID0gb3MucGF0aC5qb2luKAorICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKG9z
LnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKAorICAgICAgICAg
ICAgb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpKSksICdweXdlYnNvY2tldCcpCisgICAgICAg
IHB5d2Vic29ja2V0X3NjcmlwdCA9IG9zLnBhdGguam9pbihweXdlYnNvY2tldF9iYXNlLCAnbW9k
X3B5d2Vic29ja2V0JywKKyAgICAgICAgICAgICdzdGFuZGFsb25lLnB5JykKICAgICAgICAgc3Rh
cnRfY21kID0gWwogICAgICAgICAgICAgcHl0aG9uX2ludGVycCwgcHl3ZWJzb2NrZXRfc2NyaXB0
LAogICAgICAgICAgICAgJy1wJywgc3RyKHNlbGYuX3BvcnQpLApAQCAtMTkzLDEyICsxNzgsMTIg
QEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICBlbnYg
PSBvcy5lbnZpcm9uCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4z
MicpOgogICAgICAgICAgICAgZW52WydQQVRIJ10gPSAnJXM7JXMnICUgKAotICAgICAgICAgICAg
ICAgIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdi
aW4nKSwKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0X29iai5fcGF0aF9mcm9tX2Jhc2UoJ3Ro
aXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nKSwKICAgICAgICAgICAgICAgICBlbnZbJ1BBVEgn
XSkKIAogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgc2VsZi5fcmVnaXN0
ZXJfY3lnd2luOgotICAgICAgICAgICAgc2V0dXBfbW91bnQgPSBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLAotICAgICAgICAgICAgICAgICdzZXR1cF9t
b3VudC5iYXQnKQorICAgICAgICAgICAgc2V0dXBfbW91bnQgPSBzZWxmLl9wb3J0X29iai5fcGF0
aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywKKyAgICAgICAgICAgICAgICAgJ2N5Z3dpbicsICdz
ZXR1cF9tb3VudC5iYXQnKQogICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihzZXR1cF9tb3Vu
dCkud2FpdCgpCiAKICAgICAgICAgZW52WydQWVRIT05QQVRIJ10gPSAocHl3ZWJzb2NrZXRfYmFz
ZSArIG9zLnBhdGgucGF0aHNlcCArCkBAIC0yNTUsNyArMjQwLDcgQEAgY2xhc3MgUHlXZWJTb2Nr
ZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gZmlu
ZCAlcyBzZXJ2ZXIgcGlkLicgJSBzZWxmLl9zZXJ2ZXJfbmFtZSkKIAogICAgICAgICBsb2dnaW5n
LmRlYnVnKCdTaHV0dGluZyBkb3duICVzIHNlcnZlciAlZC4nICUgKHNlbGYuX3NlcnZlcl9uYW1l
LCBwaWQpKQotICAgICAgICBwb3J0LmtpbGxfcHJvY2VzcyhwaWQpCisgICAgICAgIHNlbGYuX3Bv
cnRfb2JqLl9raWxsX3Byb2Nlc3MocGlkKQogCiAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CiAg
ICAgICAgICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9mdXp6eV9pbWFnZV9kaWZmLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rl
c3RfdHlwZXMvZnV6enlfaW1hZ2VfZGlmZi5weQkocmV2aXNpb24gNTQzNjQpCisrKyBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdl
X2RpZmYucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE2ICszNSwxNCBAQCBpbXBvcnQgZXJybm8K
IGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKLWltcG9ydCBzdWJwcm9j
ZXNzCiAKLWZyb20gcG9ydCBpbXBvcnQgcGF0aF91dGlscwogZnJvbSBsYXlvdXRfcGFja2FnZSBp
bXBvcnQgdGVzdF9mYWlsdXJlcwogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFz
ZQogCiAKIGNsYXNzIEZ1enp5SW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6
CiAKLSAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgZmlsZW5hbWUsIHByb2MsIG91dHB1dCwg
dGVzdF9hcmdzLCB0YXJnZXQpOgorICAgIGRlZiBjb21wYXJlX291dHB1dChzZWxmLCBmaWxlbmFt
ZSwgb3V0cHV0LCB0ZXN0X2FyZ3MsIHRhcmdldCk6CiAgICAgICAgICIiIkltcGxlbWVudGF0aW9u
IG9mIENvbXBhcmVPdXRwdXQgdGhhdCBjaGVja3MgdGhlIG91dHB1dCBpbWFnZSBhbmQKICAgICAg
ICAgY2hlY2tzdW0gYWdhaW5zdCB0aGUgZXhwZWN0ZWQgZmlsZXMgZnJvbSB0aGUgTGF5b3V0VGVz
dCBkaXJlY3RvcnkuCiAgICAgICAgICIiIgpAQCAtNTQsNyArNTIsNyBAQCBjbGFzcyBGdXp6eUlt
YWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0CiAgICAgICAgIGlmIHRlc3RfYXJncy5oYXNoIGlz
IE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZXMKIAotICAgICAgICBleHBlY3RlZF9w
bmdfZmlsZSA9IHBhdGhfdXRpbHMuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykK
KyAgICAgICAgZXhwZWN0ZWRfcG5nX2ZpbGUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1l
KGZpbGVuYW1lLCAnLnBuZycpCiAKICAgICAgICAgaWYgdGVzdF9hcmdzLnNob3dfc291cmNlczoK
ICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX3BuZ19maWxl
KQpAQCAtNjQsOCArNjIsNyBAQCBjbGFzcyBGdXp6eUltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5U
ZXN0CiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlz
c2luZ0ltYWdlKHNlbGYpKQogCiAgICAgICAgICMgUnVuIHRoZSBmdXp6eW1hdGNoZXIKLSAgICAg
ICAgciA9IHN1YnByb2Nlc3MuY2FsbChbcGF0aF91dGlscy5mdXp6eV9tYXRjaF9wYXRoKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hcmdzLnBuZ19wYXRoLCBleHBlY3RlZF9w
bmdfZmlsZV0pCisgICAgICAgIHIgPSBwb3J0LmZ1enp5X2RpZmYodGVzdF9hcmdzLnBuZ19wYXRo
LCBleHBlY3RlZF9wbmdfZmlsZSkKICAgICAgICAgaWYgciAhPSAwOgogICAgICAgICAgICAgZmFp
bHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUZ1enp5RmFpbHVyZShzZWxmKSkKIApJ
bmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBl
cy9pbWFnZV9kaWZmLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weQkocmV2aXNpb24gNTQzNjQp
CisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVz
L2ltYWdlX2RpZmYucHkJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDcgQEAgaW1wb3J0IGVy
cm5vCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3Vi
cHJvY2VzcwogCi1mcm9tIHBvcnQgaW1wb3J0IHBhdGhfdXRpbHMKIGZyb20gbGF5b3V0X3BhY2th
Z2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBl
X2Jhc2UKIApAQCAtODQsNyArODIsNyBAQCBjbGFzcyBJbWFnZURpZmYodGVzdF90eXBlX2Jhc2Uu
VGVzdFR5cGVCCiAgICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZGF0YShmaWxlbmFtZSwgcG5n
X2RhdGEsICIucG5nIikKICAgICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGZpbGVuYW1l
LCBjaGVja3N1bSwgIi5jaGVja3N1bSIpCiAKLSAgICBkZWYgX2NyZWF0ZV9pbWFnZV9kaWZmKHNl
bGYsIGZpbGVuYW1lLCB0YXJnZXQpOgorICAgIGRlZiBfY3JlYXRlX2ltYWdlX2RpZmYoc2VsZiwg
cG9ydCwgZmlsZW5hbWUsIHRhcmdldCk6CiAgICAgICAgICIiIkNyZWF0ZXMgdGhlIHZpc3VhbCBk
aWZmIG9mIHRoZSBleHBlY3RlZC9hY3R1YWwgUE5Hcy4KIAogICAgICAgICBBcmdzOgpAQCAtOTgs
MzIgKzk2LDE0IEBAIGNsYXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUIKICAg
ICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwK
ICAgICAgICAgICBzZWxmLkZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCArICcucG5nJykKIAotICAg
ICAgICBnbG9iYWwgX2NvbXBhcmVfYXZhaWxhYmxlCi0gICAgICAgIGNtZCA9ICcnCi0KICAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMuaW1hZ2VfZGlmZl9w
YXRoKHRhcmdldCkKLSAgICAgICAgICAgIGNtZCA9IFtleGVjdXRhYmxlLCAnLS1kaWZmJywgYWN0
dWFsX2ZpbGVuYW1lLCBleHBlY3RlZF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICBkaWZm
X2ZpbGVuYW1lXQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgX2Nv
bXBhcmVfYXZhaWxhYmxlID0gVHJ1ZQorICAgICAgICAgICAgcmVzdWx0ID0gcG9ydC5kaWZmX2lt
YWdlKGFjdHVhbF9maWxlbmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGlmZl9maWxlbmFtZSkKKyAgICAgICAgZXhjZXB0IFZhbHVl
RXJyb3I6CiAgICAgICAgICAgICBfY29tcGFyZV9hdmFpbGFibGUgPSBGYWxzZQogCi0gICAgICAg
IHJlc3VsdCA9IDEKLSAgICAgICAgaWYgX2NvbXBhcmVfYXZhaWxhYmxlOgotICAgICAgICAgICAg
dHJ5OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2FsbChjbWQpCi0gICAg
ICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09
IGVycm5vLkVOT0VOVCBvciBlLmVycm5vID09IGVycm5vLkVBQ0NFUzoKLSAgICAgICAgICAgICAg
ICAgICAgX2NvbXBhcmVfYXZhaWxhYmxlID0gRmFsc2UKLSAgICAgICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgICAgICByYWlzZSBlCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJv
cjoKLSAgICAgICAgICAgICAgICAjIHdvcmsgYXJvdW5kIGEgcmFjZSBjb25kaXRpb24gaW4gUHl0
aG9uIDIuNCdzIGltcGxlbWVudGF0aW9uCi0gICAgICAgICAgICAgICAgIyBvZiBzdWJwcm9jZXNz
LlBvcGVuCi0gICAgICAgICAgICAgICAgcGFzcwotCiAgICAgICAgIGdsb2JhbCBfY29tcGFyZV9t
c2dfcHJpbnRlZAotCiAgICAgICAgIGlmIG5vdCBfY29tcGFyZV9hdmFpbGFibGUgYW5kIG5vdCBf
Y29tcGFyZV9tc2dfcHJpbnRlZDoKICAgICAgICAgICAgIF9jb21wYXJlX21zZ19wcmludGVkID0g
VHJ1ZQogICAgICAgICAgICAgcHJpbnQoJ2ltYWdlX2RpZmYgbm90IGZvdW5kLiBNYWtlIHN1cmUg
eW91IGhhdmUgYSAnICsgdGFyZ2V0ICsKQEAgLTEzMSw3ICsxMTEsNyBAQCBjbGFzcyBJbWFnZURp
ZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCCiAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0g
ICAgZGVmIGNvbXBhcmVfb3V0cHV0KHNlbGYsIGZpbGVuYW1lLCBwcm9jLCBvdXRwdXQsIHRlc3Rf
YXJncywgdGFyZ2V0KToKKyAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgcG9ydCwgZmlsZW5h
bWUsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgogICAgICAgICAiIiJJbXBsZW1lbnRhdGlv
biBvZiBDb21wYXJlT3V0cHV0IHRoYXQgY2hlY2tzIHRoZSBvdXRwdXQgaW1hZ2UgYW5kCiAgICAg
ICAgIGNoZWNrc3VtIGFnYWluc3QgdGhlIGV4cGVjdGVkIGZpbGVzIGZyb20gdGhlIExheW91dFRl
c3QgZGlyZWN0b3J5LgogICAgICAgICAiIiIKQEAgLTE0OCw5ICsxMjgsOSBAQCBjbGFzcyBJbWFn
ZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCCiAgICAgICAgICAgICByZXR1cm4gZmFpbHVy
ZXMKIAogICAgICAgICAjIENvbXBhcmUgaGFzaGVzLgotICAgICAgICBleHBlY3RlZF9oYXNoX2Zp
bGUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLAorICAgICAgICBleHBl
Y3RlZF9oYXNoX2ZpbGUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcuY2hlY2tzdW0nKQotICAgICAgICBleHBlY3RlZF9wbmdfZmlsZSA9IHBhdGhfdXRpbHMuZXhw
ZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykKKyAgICAgICAgZXhwZWN0ZWRfcG5nX2Zp
bGUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnBuZycpCiAKICAg
ICAgICAgaWYgdGVzdF9hcmdzLnNob3dfc291cmNlczoKICAgICAgICAgICAgIGxvZ2dpbmcuZGVi
dWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX2hhc2hfZmlsZSkKQEAgLTE2Niw4ICsxNDYsOSBAQCBj
bGFzcyBJbWFnZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCCiAKICAgICAgICAgaWYgbm90
IG9zLnBhdGguaXNmaWxlKGV4cGVjdGVkX3BuZ19maWxlKToKICAgICAgICAgICAgICMgUmVwb3J0
IGEgbWlzc2luZyBleHBlY3RlZCBQTkcgZmlsZS4KLSAgICAgICAgICAgIHNlbGYud3JpdGVfb3V0
cHV0X2ZpbGVzKGZpbGVuYW1lLCAnJywgJy5jaGVja3N1bScsIHRlc3RfYXJncy5oYXNoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaGFzaCwgZGlmZj1GYWxz
ZSwgd2RpZmY9RmFsc2UpCisgICAgICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcyhwb3J0
LCBmaWxlbmFtZSwgJycsICcuY2hlY2tzdW0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdF9hcmdzLmhhc2gsIGV4cGVjdGVkX2hhc2gsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWZmPUZhbHNlLCB3ZGlmZj1GYWxzZSkKICAgICAgICAgICAg
IHNlbGYuX2NvcHlfb3V0cHV0X3BuZyhmaWxlbmFtZSwgdGVzdF9hcmdzLnBuZ19wYXRoLCAnLWFj
dHVhbC5wbmcnKQogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFp
bHVyZU1pc3NpbmdJbWFnZShzZWxmKSkKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlcwpAQCAt
MTc2LDE0ICsxNTcsMTUgQEAgY2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBl
QgogICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCiAKIAotICAgICAgICBzZWxmLndyaXRlX291
dHB1dF9maWxlcyhmaWxlbmFtZSwgJycsICcuY2hlY2tzdW0nLCB0ZXN0X2FyZ3MuaGFzaCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaGFzaCwgZGlmZj1GYWxzZSwg
d2RpZmY9RmFsc2UpCisgICAgICAgIHNlbGYud3JpdGVfb3V0cHV0X2ZpbGVzKHBvcnQsIGZpbGVu
YW1lLCAnJywgJy5jaGVja3N1bScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3RfYXJncy5oYXNoLCBleHBlY3RlZF9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkaWZmPUZhbHNlLCB3ZGlmZj1GYWxzZSkKICAgICAgICAgc2VsZi5fY29weV9vdXRwdXRf
cG5nKGZpbGVuYW1lLCB0ZXN0X2FyZ3MucG5nX3BhdGgsICctYWN0dWFsLnBuZycpCiAgICAgICAg
IHNlbGYuX2NvcHlfb3V0cHV0X3BuZyhmaWxlbmFtZSwgZXhwZWN0ZWRfcG5nX2ZpbGUsICctZXhw
ZWN0ZWQucG5nJykKIAogICAgICAgICAjIEV2ZW4gdGhvdWdoIHdlIG9ubHkgdXNlIHJlc3VsdCBp
biBvbmUgY29kZXBhdGggYmVsb3cgYnV0IHdlCiAgICAgICAgICMgc3RpbGwgbmVlZCB0byBjYWxs
IENyZWF0ZUltYWdlRGlmZiBmb3Igb3RoZXIgY29kZXBhdGhzLgotICAgICAgICByZXN1bHQgPSBz
ZWxmLl9jcmVhdGVfaW1hZ2VfZGlmZihmaWxlbmFtZSwgdGFyZ2V0KQorICAgICAgICByZXN1bHQg
PSBzZWxmLl9jcmVhdGVfaW1hZ2VfZGlmZihwb3J0LCBmaWxlbmFtZSwgdGFyZ2V0KQogICAgICAg
ICBpZiBleHBlY3RlZF9oYXNoID09ICcnOgogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRl
c3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZUhhc2goc2VsZikpCiAgICAgICAgIGVsaWYg
dGVzdF9hcmdzLmhhc2ggIT0gZXhwZWN0ZWRfaGFzaDoKQEAgLTE5Niw3ICsxNzgsNyBAQCBjbGFz
cyBJbWFnZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCCiAKICAgICAgICAgcmV0dXJuIGZh
aWx1cmVzCiAKLSAgICBkZWYgZGlmZl9maWxlcyhzZWxmLCBmaWxlMSwgZmlsZTIpOgorICAgIGRl
ZiBkaWZmX2ZpbGVzKHNlbGYsIHBvcnQsIGZpbGUxLCBmaWxlMik6CiAgICAgICAgICIiIkRpZmYg
dHdvIGltYWdlIGZpbGVzLgogCiAgICAgICAgIEFyZ3M6CkBAIC0yMDgsMTcgKzE5MCw4IEBAIGNs
YXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUIKICAgICAgICAgIiIiCiAKICAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMuaW1hZ2VfZGlm
Zl9wYXRoKCdEZWJ1ZycpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAg
ICBsb2dnaW5nLndhcm4oJ0ZhaWxlZCB0byBmaW5kIGltYWdlIGRpZmYgZXhlY3V0YWJsZS4nKQot
ICAgICAgICAgICAgcmV0dXJuIFRydWUKLQotICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwgZmls
ZTEsIGZpbGUyXQotICAgICAgICByZXN1bHQgPSAxCi0gICAgICAgIHRyeToKLSAgICAgICAgICAg
IHJlc3VsdCA9IHN1YnByb2Nlc3MuY2FsbChjbWQpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBl
OgotICAgICAgICAgICAgbG9nZ2luZy53YXJuKCdGYWlsZWQgdG8gY29tcGFyZSBpbWFnZSBkaWZm
OiAlcycsIGUpCisgICAgICAgICAgICByZXN1bHQgPSBwb3J0LmRpZmZfaW1hZ2UoZmlsZTEsIGZp
bGUyKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKICAgICAgICAgICAgIHJldHVybiBU
cnVlCiAKICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSAxCkluZGV4OiBXZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlwZV9iYXNlLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rl
c3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkJKHJldmlzaW9uIDU0MzY0KQorKysgV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXN0X3R5cGVfYmFz
ZS5weQkod29ya2luZyBjb3B5KQpAQCAtMzMsMTMgKzMzLDkgQEAgQWxzbyBkZWZpbmVzIHRoZSBU
ZXN0QXJndW1lbnRzICJzdHJ1Y3QiIAogIiIiCiAKIGltcG9ydCBjZ2kKLWltcG9ydCBkaWZmbGli
CiBpbXBvcnQgZXJybm8KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MucGF0aAotaW1wb3J0IHN1
YnByb2Nlc3MKLQotZnJvbSBwb3J0IGltcG9ydCBwYXRoX3V0aWxzCiAKIAogY2xhc3MgVGVzdEFy
Z3VtZW50cyhvYmplY3QpOgpAQCAtNzQsNyArNzAsNyBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2Jq
ZWN0KToKICAgICBGSUxFTkFNRV9TVUZGSVhfV0RJRkYgPSAiLXdkaWZmLmh0bWwiCiAgICAgRklM
RU5BTUVfU1VGRklYX0NPTVBBUkUgPSAiLWRpZmYucG5nIgogCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBsYXRmb3JtLCByb290X291dHB1dF9kaXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
b3J0LCBwbGF0Zm9ybSwgcm9vdF9vdXRwdXRfZGlyKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSBh
IFRlc3RUeXBlQmFzZSBvYmplY3QuCiAKICAgICAgICAgQXJnczoKQEAgLTgzLDE0ICs3OSwxNSBA
QCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAgICAgICByb290X291dHB1dF9kaXI6
IFRoZSB1bml4IHN0eWxlIHBhdGggdG8gdGhlIG91dHB1dCBkaXIuCiAgICAgICAgICIiIgogICAg
ICAgICBzZWxmLl9yb290X291dHB1dF9kaXIgPSByb290X291dHB1dF9kaXIKKyAgICAgICAgc2Vs
Zi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQogCiAgICAg
ZGVmIF9tYWtlX291dHB1dF9kaXJlY3Rvcnkoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICAiIiJD
cmVhdGVzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IChpZiBuZWVkZWQpIGZvciBhIGdpdmVuIHRlc3QK
ICAgICAgICAgZmlsZW5hbWUuIiIiCiAgICAgICAgIG91dHB1dF9maWxlbmFtZSA9IG9zLnBhdGgu
am9pbihzZWxmLl9yb290X291dHB1dF9kaXIsCi0gICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0
aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKQotICAgICAgICBwYXRoX3V0aWxzLm1heWJlX21h
a2VfZGlyZWN0b3J5KG9zLnBhdGguc3BsaXQob3V0cHV0X2ZpbGVuYW1lKVswXSkKKyAgICAgICAg
ICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCisgICAgICAg
IHNlbGYuX3BvcnQubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxpdChvdXRwdXRfZmls
ZW5hbWUpWzBdKQogCiAgICAgZGVmIF9zYXZlX2Jhc2VsaW5lX2RhdGEoc2VsZiwgZmlsZW5hbWUs
IGRhdGEsIG1vZGlmaWVyKToKICAgICAgICAgIiIiU2F2ZXMgYSBuZXcgYmFzZWxpbmUgZmlsZSBp
bnRvIHRoZSBwbGF0Zm9ybSBkaXJlY3RvcnkuCkBAIC0xMDQsMTMgKzEwMSwxMyBAQCBjbGFzcyBU
ZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAgICAgICBtb2RpZmllcjogdHlwZSBvZiB0aGUgcmVz
dWx0IGZpbGUsIGUuZy4gIi50eHQiIG9yICIucG5nIgogICAgICAgICAiIiIKICAgICAgICAgcmVs
YXRpdmVfZGlyID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAgICAgICAgcGF0aF91dGlscy5yZWxh
dGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVs
YXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCiAgICAgICAgIG91dHB1dF9kaXIgPSBvcy5w
YXRoLmpvaW4oCi0gICAgICAgICAgICBwYXRoX3V0aWxzLmNocm9taXVtX2Jhc2VsaW5lX3BhdGgo
c2VsZi5fcGxhdGZvcm0pLCByZWxhdGl2ZV9kaXIpCisgICAgICAgICAgICBzZWxmLl9wb3J0LmNo
cm9taXVtX2Jhc2VsaW5lX3BhdGgoc2VsZi5fcGxhdGZvcm0pLCByZWxhdGl2ZV9kaXIpCiAgICAg
ICAgIG91dHB1dF9maWxlID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLnNwbGl0ZXh0KGZpbGVu
YW1lKVswXSArCiAgICAgICAgICAgICBzZWxmLkZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCArIG1v
ZGlmaWVyKQogCi0gICAgICAgIHBhdGhfdXRpbHMubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3V0cHV0
X2RpcikKKyAgICAgICAgc2VsZi5fcG9ydC5tYXliZV9tYWtlX2RpcmVjdG9yeShvdXRwdXRfZGly
KQogICAgICAgICBvdXRwdXRfcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRfZGlyLCBvdXRwdXRf
ZmlsZSkKICAgICAgICAgbG9nZ2luZy5kZWJ1Zygnd3JpdGluZyBuZXcgYmFzZWxpbmUgdG8gIiVz
IicgJSAob3V0cHV0X3BhdGgpKQogICAgICAgICBvcGVuKG91dHB1dF9wYXRoLCAid2IiKS53cml0
ZShkYXRhKQpAQCAtMTMwLDEwICsxMjcsMTAgQEAgY2xhc3MgVGVzdFR5cGVCYXNlKG9iamVjdCk6
CiAgICAgICAgICAgVGhlIGFic29sdXRlIHdpbmRvd3MgcGF0aCB0byB0aGUgb3V0cHV0IGZpbGVu
YW1lCiAgICAgICAgICIiIgogICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4o
c2VsZi5fcm9vdF9vdXRwdXRfZGlyLAotICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90
ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVf
dGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCiAgICAgICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0
KG91dHB1dF9maWxlbmFtZSlbMF0gKyBtb2RpZmllcgogCi0gICAgZGVmIGNvbXBhcmVfb3V0cHV0
KHNlbGYsIGZpbGVuYW1lLCBwcm9jLCBvdXRwdXQsIHRlc3RfYXJncywgdGFyZ2V0KToKKyAgICBk
ZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgcG9ydCwgZmlsZW5hbWUsIG91dHB1dCwgdGVzdF9hcmdz
LCB0YXJnZXQpOgogICAgICAgICAiIiJNZXRob2QgdGhhdCBjb21wYXJlcyB0aGUgb3V0cHV0IGZy
b20gdGhlIHRlc3Qgd2l0aCB0aGUKICAgICAgICAgZXhwZWN0ZWQgdmFsdWUuCiAKQEAgLTE0MSw3
ICsxMzgsNiBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKIAogICAgICAgICBBcmdzOgog
ICAgICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKLSAgICAg
ICAgICBwcm9jOiBhIHJlZmVyZW5jZSB0byB0aGUgdGVzdF9zaGVsbCBwcm9jZXNzCiAgICAgICAg
ICAgb3V0cHV0OiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHRlc3QKICAg
ICAgICAgICB0ZXN0X2FyZ3M6IGEgVGVzdEFyZ3VtZW50cyBvYmplY3QgaG9sZGluZyBvcHRpb25h
bCBhZGRpdGlvbmFsCiAgICAgICAgICAgICAgIGFyZ3VtZW50cwpAQCAtMTUyLDggKzE0OCw4IEBA
IGNsYXNzIFRlc3RUeXBlQmFzZShvYmplY3QpOgogICAgICAgICAiIiIKICAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWQKIAotICAgIGRlZiB3cml0ZV9vdXRwdXRfZmlsZXMoc2VsZiwgZmlsZW5h
bWUsIHRlc3RfdHlwZSwgZmlsZV90eXBlLCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBleHBlY3RlZCwgZGlmZj1UcnVlLCB3ZGlmZj1GYWxzZSk6CisgICAgZGVmIHdyaXRlX291
dHB1dF9maWxlcyhzZWxmLCBwb3J0LCBmaWxlbmFtZSwgdGVzdF90eXBlLCBmaWxlX3R5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGV4cGVjdGVkLCBkaWZmPVRydWUsIHdk
aWZmPUZhbHNlKToKICAgICAgICAgIiIiV3JpdGVzIHRoZSB0ZXN0IG91dHB1dCwgdGhlIGV4cGVj
dGVkIG91dHB1dCBhbmQgb3B0aW9uYWxseSB0aGUgZGlmZgogICAgICAgICBiZXR3ZWVuIHRoZSB0
d28gdG8gZmlsZXMgaW4gdGhlIHJlc3VsdHMgZGlyZWN0b3J5LgogCkBAIC0xODYsODEgKzE4Miwx
NSBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybgogCiAg
ICAgICAgIGlmIGRpZmY6Ci0gICAgICAgICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYo
ZXhwZWN0ZWQuc3BsaXRsaW5lcyhUcnVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXQuc3BsaXRsaW5lcyhUcnVlKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWUpCi0KKyAgICAgICAgICAgIGRp
ZmYgPSBwb3J0LmRpZmZfdGV4dChleHBlY3RlZCwgb3V0cHV0LCBleHBlY3RlZF9maWxlbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWUpCiAgICAg
ICAgICAgICBkaWZmX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoZmlsZW5hbWUsCiAg
ICAgICAgICAgICAgICAgdGVzdF90eXBlICsgc2VsZi5GSUxFTkFNRV9TVUZGSVhfRElGRiArIGZp
bGVfdHlwZSkKLSAgICAgICAgICAgIG9wZW4oZGlmZl9maWxlbmFtZSwgIndiIikud3JpdGUoJycu
am9pbihkaWZmKSkKKyAgICAgICAgICAgIG9wZW4oZGlmZl9maWxlbmFtZSwgIndiIikud3JpdGUo
ZGlmZikKIAogICAgICAgICBpZiB3ZGlmZjoKICAgICAgICAgICAgICMgU2hlbGwgb3V0IHRvIHdk
aWZmIHRvIGdldCBjb2xvcmVkIGlubGluZSBkaWZmcy4KLSAgICAgICAgICAgIGV4ZWN1dGFibGUg
PSBwYXRoX3V0aWxzLndkaWZmX3BhdGgoKQotICAgICAgICAgICAgY21kID0gW2V4ZWN1dGFibGUs
Ci0gICAgICAgICAgICAgICAgICAgJy0tc3RhcnQtZGVsZXRlPSMjV0RJRkZfREVMIyMnLAotICAg
ICAgICAgICAgICAgICAgICctLWVuZC1kZWxldGU9IyNXRElGRl9FTkQjIycsCi0gICAgICAgICAg
ICAgICAgICAgJy0tc3RhcnQtaW5zZXJ0PSMjV0RJRkZfQUREIyMnLAotICAgICAgICAgICAgICAg
ICAgICctLWVuZC1pbnNlcnQ9IyNXRElGRl9FTkQjIycsCi0gICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWRfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgYWN0dWFsX2ZpbGVuYW1lXQotICAg
ICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3R5cGUgKyBzZWxmLkZJTEVOQU1FX1NVRkZJWF9X
RElGRikKLQotICAgICAgICAgICAgZ2xvYmFsIF93ZGlmZl9hdmFpbGFibGUKLQotICAgICAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgICAgICMgUHl0aG9uJ3MgUG9wZW4gaGFzIGEgYnVnIHRoYXQg
Y2F1c2VzIGFueSBwaXBlcyBvcGVuZWQgdG8gYQotICAgICAgICAgICAgICAgICMgcHJvY2VzcyB0
aGF0IGNhbid0IGJlIGV4ZWN1dGVkIHRvIGJlIGxlYWtlZC4gIFNpbmNlIHRoaXMKLSAgICAgICAg
ICAgICAgICAjIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHRvbGVyYXRlIGV4ZWMg
ZmFpbHVyZXMKLSAgICAgICAgICAgICAgICAjIHRvIGdyYWNlZnVsbHkgaGFuZGxlIGNhc2VzIHdo
ZXJlIHdkaWZmIGlzIG5vdCBpbnN0YWxsZWQsCi0gICAgICAgICAgICAgICAgIyB0aGUgYnVnIHJl
c3VsdHMgaW4gYSBtYXNzaXZlIGZpbGUgZGVzY3JpcHRvciBsZWFrLiBBcyBhCi0gICAgICAgICAg
ICAgICAgIyB3b3JrYXJvdW5kLCBpZiBhbiBleGVjIGZhaWx1cmUgaXMgZXZlciBleHBlcmllbmNl
ZCBmb3IKLSAgICAgICAgICAgICAgICAjIHdkaWZmLCBhc3N1bWUgaXQncyBub3QgYXZhaWxhYmxl
LiAgVGhpcyB3aWxsIGxlYWsgb25lCi0gICAgICAgICAgICAgICAgIyBmaWxlIGRlc2NyaXB0b3Ig
YnV0IHRoYXQncyBiZXR0ZXIgdGhhbiBsZWFraW5nIGVhY2ggdGltZQotICAgICAgICAgICAgICAg
ICMgd2RpZmYgd291bGQgYmUgcnVuLgotICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAg
ICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1saXN0LwotICAgICAg
ICAgICAgICAgICMgICAgMjAwOC1BdWd1c3QvNTA1NzUzLmh0bWwKLSAgICAgICAgICAgICAgICAj
IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzMjEwCi0gICAgICAgICAgICAgICAgIwotICAg
ICAgICAgICAgICAgICMgSXQgYWxzbyBoYXMgYSB0aHJlYWRpbmcgYnVnLCBzbyB3ZSBkb24ndCBv
dXRwdXQgd2RpZmYgaWYKLSAgICAgICAgICAgICAgICAjIHRoZSBQb3BlbiByYWlzZXMgYSBWYWx1
ZUVycm9yLgotICAgICAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEy
MzYKLSAgICAgICAgICAgICAgICBpZiBfd2RpZmZfYXZhaWxhYmxlOgotICAgICAgICAgICAgICAg
ICAgICB3ZGlmZiA9IHN1YnByb2Nlc3MuUG9wZW4oCi0gICAgICAgICAgICAgICAgICAgICAgICBj
bWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KLSAgICAgICAgICAg
ICAgICAgICAgd2RpZmZfZmFpbGVkID0gRmFsc2UKLQotICAgICAgICAgICAgZXhjZXB0IE9TRXJy
b3IsIGU6Ci0gICAgICAgICAgICAgICAgaWYgKGUuZXJybm8gPT0gZXJybm8uRU5PRU5UIG9yIGUu
ZXJybm8gPT0gZXJybm8uRUFDQ0VTIG9yCi0gICAgICAgICAgICAgICAgICAgIGUuZXJybm8gPT0g
ZXJybm8uRUNISUxEKToKLSAgICAgICAgICAgICAgICAgICAgX3dkaWZmX2F2YWlsYWJsZSA9IEZh
bHNlCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgZQot
ICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgd2RpZmZf
ZmFpbGVkID0gVHJ1ZQotCi0gICAgICAgICAgICBvdXQgPSBvcGVuKGZpbGVuYW1lLCAnd2InKQot
Ci0gICAgICAgICAgICBpZiBub3QgX3dkaWZmX2F2YWlsYWJsZToKLSAgICAgICAgICAgICAgICBv
dXQud3JpdGUoCi0gICAgICAgICAgICAgICAgICAgICJ3ZGlmZiBub3QgaW5zdGFsbGVkLjxici8+
ICIKLSAgICAgICAgICAgICAgICAgICAgIklmIHlvdSdyZSBydW5uaW5nIE9TIFgsIHlvdSBjYW4g
aW5zdGFsbCB2aWEgbWFjcG9ydHMuIgotICAgICAgICAgICAgICAgICAgICAiPGJyLz4iCi0gICAg
ICAgICAgICAgICAgICAgICJJZiBydW5uaW5nIFVidW50dSBsaW51eCwgeW91IGNhbiBydW4gIgot
ICAgICAgICAgICAgICAgICAgICAiJ3N1ZG8gYXB0LWdldCBpbnN0YWxsIHdkaWZmJy4iKQotICAg
ICAgICAgICAgZWxpZiB3ZGlmZl9mYWlsZWQ6Ci0gICAgICAgICAgICAgICAgb3V0LndyaXRlKCd3
ZGlmZiBmYWlsZWQgZHVlIHRvIHJ1bm5pbmcgd2l0aCBtdWx0aXBsZSAnCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICd0ZXN0X3NoZWxscyBpbiBwYXJhbGxlbC4nKQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICB3ZGlmZiA9IGNnaS5lc2NhcGUod2RpZmYpCi0gICAgICAgICAg
ICAgICAgd2RpZmYgPSB3ZGlmZi5yZXBsYWNlKCcjI1dESUZGX0RFTCMjJywgJzxzcGFuIGNsYXNz
PWRlbD4nKQotICAgICAgICAgICAgICAgIHdkaWZmID0gd2RpZmYucmVwbGFjZSgnIyNXRElGRl9B
REQjIycsICc8c3BhbiBjbGFzcz1hZGQ+JykKLSAgICAgICAgICAgICAgICB3ZGlmZiA9IHdkaWZm
LnJlcGxhY2UoJyMjV0RJRkZfRU5EIyMnLCAnPC9zcGFuPicpCi0gICAgICAgICAgICAgICAgb3V0
LndyaXRlKCc8aGVhZD48c3R5bGU+LmRlbCB7IGJhY2tncm91bmQ6ICNmYWE7IH0gJykKLSAgICAg
ICAgICAgICAgICBvdXQud3JpdGUoJy5hZGQgeyBiYWNrZ3JvdW5kOiAjYWZhOyB9PC9zdHlsZT48
L2hlYWQ+JykKLSAgICAgICAgICAgICAgICBvdXQud3JpdGUoJzxwcmU+JyArIHdkaWZmICsgJzwv
cHJlPicpCi0KLSAgICAgICAgICAgIG91dC5jbG9zZSgpCisgICAgICAgICAgICB3ZGlmZiA9IHBv
cnQud2RpZmZfdGV4dChleHBlY3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVuYW1lKQorICAgICAg
ICAgICAgZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwgdGVzdF90eXBl
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5GSUxF
TkFNRV9TVUZGSVhfV0RJRkYpCisgICAgICAgICAgICBvdXQgPSBvcGVuKGZpbGVuYW1lLCAnd2In
KS53cml0ZSh3ZGlmZikKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5CShy
ZXZpc2lvbiA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2
IEBAIGltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcy5wYXRoCiAKLWZyb20g
cG9ydCBpbXBvcnQgcGF0aF91dGlscwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9m
YWlsdXJlcwogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFzZQogCkBAIC02MSw4
ICs2MCw4IEBAIGNsYXNzIFRlc3RUZXh0RGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHkKICAgICAg
ICAgIiIiR2l2ZW4gdGhlIGZpbGVuYW1lIG9mIHRoZSB0ZXN0LCByZWFkIHRoZSBleHBlY3RlZCBv
dXRwdXQgZnJvbSBhIGZpbGUKICAgICAgICAgYW5kIG5vcm1hbGl6ZSB0aGUgdGV4dC4gIFJldHVy
bnMgYSBzdHJpbmcgd2l0aCB0aGUgZXhwZWN0ZWQgdGV4dCwgb3IgJycKICAgICAgICAgaWYgdGhl
IGV4cGVjdGVkIG91dHB1dCBmaWxlIHdhcyBub3QgZm91bmQuIiIiCi0gICAgICAgICMgUmVhZCB0
aGUgcGxhdGZvcm0tc3BlY2lmaWMgZXhwZWN0ZWQgdGV4dC4KLSAgICAgICAgZXhwZWN0ZWRfZmls
ZW5hbWUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnR4dCcpCisg
ICAgICAgICMgUmVhZCB0aGUgcG9ydC1zcGVjaWZpYyBleHBlY3RlZCB0ZXh0LgorICAgICAgICBl
eHBlY3RlZF9maWxlbmFtZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUs
ICcudHh0JykKICAgICAgICAgaWYgc2hvd19zb3VyY2VzOgogICAgICAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygnVXNpbmcgJXMnICUgZXhwZWN0ZWRfZmlsZW5hbWUpCiAKQEAgLTc5LDcgKzc4LDcgQEAg
Y2xhc3MgVGVzdFRleHREaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeQogICAgICAgICAjIE5vcm1h
bGl6ZSBsaW5lIGVuZGluZ3MKICAgICAgICAgcmV0dXJuIHRleHQuc3RyaXAoIlxyXG4iKS5yZXBs
YWNlKCJcclxuIiwgIlxuIikgKyAiXG4iCiAKLSAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwg
ZmlsZW5hbWUsIHByb2MsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgorICAgIGRlZiBjb21w
YXJlX291dHB1dChzZWxmLCBwb3J0LCBmaWxlbmFtZSwgb3V0cHV0LCB0ZXN0X2FyZ3MsIHRhcmdl
dCk6CiAgICAgICAgICIiIkltcGxlbWVudGF0aW9uIG9mIENvbXBhcmVPdXRwdXQgdGhhdCBjaGVj
a3MgdGhlIG91dHB1dCB0ZXh0IGFnYWluc3QKICAgICAgICAgdGhlIGV4cGVjdGVkIHRleHQgZnJv
bSB0aGUgTGF5b3V0VGVzdCBkaXJlY3RvcnkuIiIiCiAgICAgICAgIGZhaWx1cmVzID0gW10KQEAg
LTk1LDEwICs5NCwxMCBAQCBjbGFzcyBUZXN0VGV4dERpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3RfYXJncy5zaG93X3NvdXJjZXMpCiAKICAgICAgICAgIyBXcml0ZSBvdXRwdXQgZmlsZXMgZm9y
IG5ldyB0ZXN0cywgdG9vLgotICAgICAgICBpZiBvdXRwdXQgIT0gZXhwZWN0ZWQ6CisgICAgICAg
IGlmIHBvcnQuY29tcGFyZV90ZXh0KG91dHB1dCwgZXhwZWN0ZWQpOgogICAgICAgICAgICAgIyBU
ZXh0IGRvZXNuJ3QgbWF0Y2gsIHdyaXRlIG91dHB1dCBmaWxlcy4KLSAgICAgICAgICAgIHNlbGYu
d3JpdGVfb3V0cHV0X2ZpbGVzKGZpbGVuYW1lLCAiIiwgIi50eHQiLCBvdXRwdXQsIGV4cGVjdGVk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZj1UcnVlLCB3ZGlmZj1U
cnVlKQorICAgICAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMocG9ydCwgZmlsZW5hbWUs
ICIiLCAiLnR4dCIsIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4cGVjdGVkLCBkaWZmPVRydWUsIHdkaWZmPVRydWUpCiAKICAgICAgICAgICAgIGlmIGV4cGVj
dGVkID09ICcnOgogICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVz
LkZhaWx1cmVNaXNzaW5nUmVzdWx0KHNlbGYpKQpAQCAtMTA3LDcgKzEwNiw3IEBAIGNsYXNzIFRl
c3RUZXh0RGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHkKIAogICAgICAgICByZXR1cm4gZmFpbHVy
ZXMKIAotICAgIGRlZiBkaWZmX2ZpbGVzKHNlbGYsIGZpbGUxLCBmaWxlMik6CisgICAgZGVmIGRp
ZmZfZmlsZXMoc2VsZiwgcG9ydCwgZmlsZTEsIGZpbGUyKToKICAgICAgICAgIiIiRGlmZiB0d28g
dGV4dCBmaWxlcy4KIAogICAgICAgICBBcmdzOgpAQCAtMTE4LDUgKzExNyw1IEBAIGNsYXNzIFRl
c3RUZXh0RGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHkKICAgICAgICAgICBGYWxzZSBvdGhlcndp
c2UuCiAgICAgICAgICIiIgogCi0gICAgICAgIHJldHVybiAoc2VsZi5nZXRfbm9ybWFsaXplZF90
ZXh0KGZpbGUxKSAhPQotICAgICAgICAgICAgICAgIHNlbGYuZ2V0X25vcm1hbGl6ZWRfdGV4dChm
aWxlMikpCisgICAgICAgIHJldHVybiBwb3J0LmNvbXBhcmVfdGV4dChzZWxmLmdldF9ub3JtYWxp
emVkX3RleHQoZmlsZTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuZ2V0X25vcm1hbGl6ZWRfdGV4dChmaWxlMikpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48271</attachid>
            <date>2010-02-05 15:54:41 -0800</date>
            <delta_ts>2010-02-05 16:09:10 -0800</delta_ts>
            <desc>patch 3 of 4 - revised w/ feedback from tony and eric</desc>
            <filename>bug-34511-20100205155440.patch</filename>
            <type>text/plain</type>
            <size>192817</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU0MzY0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDQyIEBACiAKIDIwMTAtMDItMDMgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgdGhlIHBvcnQgcGFja2FnZSBpbnRvIGFuIG9iamVj
dC1vcmllbnRlZCBzdHlsZSBhbmQgbWVyZ2UKKyAgICAgICAgcGF0aF91dGlscyBpbnRvIGl0LiBX
ZSBhZGQgYSAnYmFzZScgYW5kIGEgJ2Nocm9taXVtJyBvYmplY3QgdG8gdGhlCisgICAgICAgIHBv
cnQgcGFja2FnZTsgdGhpcyB3aWxsIGFsbG93IHVzIHRvIGVhc2lseSBhZGQgbmV3IHBvcnRzIChs
aWtlCisgICAgICAgIFdlYktpdCBNYWMpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNDUxMQorCisgICAgICAgICogU2NyaXB0cy9yZWJhc2VsaW5l
LWNocm9taXVtLXdlYmtpdC10ZXN0czoKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1jaHJvbWl1bS13
ZWJraXQtdGVzdHM6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRz
X2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3Rfc2hl
bGxfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvX19pbml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xpbnV4LnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5Ogor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2lu
LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9z
ZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9o
dHRwX3NlcnZlcl9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvcGF0aF91dGlscy5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVz
dHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX2Nocm9t
aXVtX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy90ZXN0X3R5cGVzL2Z1enp5X2ltYWdlX2RpZmYucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5OgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2Uu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90
ZXh0X2RpZmYucHk6CisKKzIwMTAtMDItMDMgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1
bS5vcmc+CisKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgRXJpYyBTaWVkZWwuCiAKICAgICAg
ICAgUmVuYW1lIGZpbGVzIGFzIHBhcnQgb2YgcmVmYWN0b3JpbmcgdGhlIGxheW91dF90ZXN0cyBw
YWNrYWdlLiBBbGwKQEAgLTE0OCw3ICsxODQsNiBAQAogICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHk6CiAgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90ZXh0X2RpZmYucHk6CiAK
LQogMjAxMC0wMi0wMyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViS2l0VG9vbHMv
U2NyaXB0cy9yZWJhc2VsaW5lLWNocm9taXVtLXdlYmtpdC10ZXN0cwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9TY3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0td2Via2l0LXRlc3RzCShyZXZp
c2lvbiA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13
ZWJraXQtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTExLDcgKzExLDcgQEAKICMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgogIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCiAjIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgQ2hyb21p
dW0gbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAjCklu
ZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVzdHMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tY2hyb21pdW0td2Via2l0LXRlc3RzCShy
ZXZpc2lvbiA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWNocm9taXVtLXdlYmtp
dC10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtMTEsNyArMTEsNyBAQAogIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CiAjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKICMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBDaHJvbWl1bSBu
YW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICMKQEAgLTMz
LDYgKzMzLDcgQEAgaW1wb3J0IHN5cwogCiBzeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKG9z
LnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIndlYmtpdHB5IiwgImxheW91dF90ZXN0cyIpKQorc3lzLnBhdGgu
YXBwZW5kKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5
cy5hcmd2WzBdKSkpKQogaW1wb3J0IHJ1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMKIAogaWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxp
bmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CShyZXZpc2lvbiA1NDM2NCkKKysrIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Vi
a2l0X3Rlc3RzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIGltcG9ydCB1cmxs
aWIKIGltcG9ydCB3ZWJicm93c2VyCiBpbXBvcnQgemlwZmlsZQogCi1mcm9tIHBvcnQgaW1wb3J0
IHBhdGhfdXRpbHMKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHBhdGhfdXRpbHMKIGZyb20g
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiBmcm9tIHRlc3RfdHlwZXMg
aW1wb3J0IGltYWdlX2RpZmYKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQgdGV4dF9kaWZmCkluZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fY2hyb21pdW1f
d2Via2l0X3Rlc3RzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkJKHJldmlzaW9uIDU0
MzY0KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX2No
cm9taXVtX3dlYmtpdF90ZXN0cy5weQkod29ya2luZyBjb3B5KQpAQCAtNTQsMzEgKzU0LDI0IEBA
IGltcG9ydCBRdWV1ZQogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHJlCiBpbXBvcnQgc2h1dGlsCi1p
bXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCB0cmFjZWJh
Y2sKIAoraW1wb3J0IHNpbXBsZWpzb24KKwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVz
dF9leHBlY3RhdGlvbnMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fbGF5b3V0X3Jl
c3VsdHNfZ2VuZXJhdG9yCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBtZXRlcmVkX3N0cmVh
bQogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcwogZnJvbSBsYXlvdXRf
cGFja2FnZSBpbXBvcnQgdGVzdF9zaGVsbF90aHJlYWQKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1w
b3J0IHRlc3RfZmlsZXMKLQotaW1wb3J0IHBvcnQKLWZyb20gcG9ydCBpbXBvcnQgYXBhY2hlX2h0
dHBfc2VydmVyCi1mcm9tIHBvcnQgaW1wb3J0IGh0dHBfc2VydmVyCi1mcm9tIHBvcnQgaW1wb3J0
IHBhdGhfdXRpbHMKLWZyb20gcG9ydCBpbXBvcnQgd2Vic29ja2V0X3NlcnZlcgotCiBmcm9tIHRl
c3RfdHlwZXMgaW1wb3J0IGZ1enp5X2ltYWdlX2RpZmYKIGZyb20gdGVzdF90eXBlcyBpbXBvcnQg
aW1hZ2VfZGlmZgogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFzZQogZnJvbSB0
ZXN0X3R5cGVzIGltcG9ydCB0ZXh0X2RpZmYKIAotc3lzLnBhdGguYXBwZW5kKHBhdGhfdXRpbHMu
cGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JykpCi1pbXBvcnQgc2ltcGxlanNvbgoraW1wb3J0
IHBvcnQKIAogIyBJbmRpY2F0ZXMgdGhhdCB3ZSB3YW50IGRldGFpbGVkIHByb2dyZXNzIHVwZGF0
ZXMgaW4gdGhlIG91dHB1dCAocHJpbnRzCiAjIGRpcmVjdG9yeS1ieS1kaXJlY3RvcnkgZmVlZGJh
Y2spLgpAQCAtOTYsMTcgKzg5LDE2IEBAIFRlc3RFeHBlY3RhdGlvbnNGaWxlID0gdGVzdF9leHBl
Y3RhdGlvbnMKIGNsYXNzIFRlc3RJbmZvOgogICAgICIiIkdyb3VwcyBpbmZvcm1hdGlvbiBhYm91
dCBhIHRlc3QgZm9yIGVhc3kgcGFzc2luZyBvZiBkYXRhLiIiIgogCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIGZpbGVuYW1lLCB0aW1lb3V0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwg
ZmlsZW5hbWUsIHRpbWVvdXQpOgogICAgICAgICAiIiJHZW5lcmF0ZXMgdGhlIFVSSSBhbmQgc3Rv
cmVzIHRoZSBmaWxlbmFtZSBhbmQgdGltZW91dCBmb3IgdGhpcyB0ZXN0LgogICAgICAgICBBcmdz
OgogICAgICAgICAgIGZpbGVuYW1lOiBGdWxsIHBhdGggdG8gdGhlIHRlc3QuCiAgICAgICAgICAg
dGltZW91dDogVGltZW91dCBmb3IgcnVubmluZyB0aGUgdGVzdCBpbiBUZXN0U2hlbGwuCiAgICAg
ICAgICAgIiIiCiAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQotICAgICAgICBzZWxm
LnVyaSA9IHBhdGhfdXRpbHMuZmlsZW5hbWVfdG9fdXJpKGZpbGVuYW1lKQorICAgICAgICBzZWxm
LnVyaSA9IHBvcnQuZmlsZW5hbWVfdG9fdXJpKGZpbGVuYW1lKQogICAgICAgICBzZWxmLnRpbWVv
dXQgPSB0aW1lb3V0Ci0gICAgICAgIGV4cGVjdGVkX2hhc2hfZmlsZSA9IHBhdGhfdXRpbHMuZXhw
ZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5jaGVja3N1bScpCisgICAgICAgIGV4cGVjdGVk
X2hhc2hfZmlsZSA9IHBvcnQuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcuY2hlY2tzdW0n
KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmltYWdlX2hhc2ggPSBvcGVuKGV4cGVj
dGVkX2hhc2hfZmlsZSwgInIiKS5yZWFkKCkKICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CkBA
IC0xNzUsMjQgKzE2NywxOCBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgTlVNX1JFVFJZX09O
X1VORVhQRUNURURfRkFJTFVSRSA9IDEKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25z
LCBtZXRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIG1ldGVyKToK
ICAgICAgICAgIiIiSW5pdGlhbGl6ZSB0ZXN0IHJ1bm5lciBkYXRhIHN0cnVjdHVyZXMuCiAKICAg
ICAgICAgQXJnczoKKyAgICAgICAgICBwb3J0OiBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQt
c3BlY2lmaWMKICAgICAgICAgICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5l
IG9wdGlvbnMKICAgICAgICAgICBtZXRlcjogYSBNZXRlcmVkU3RyZWFtIG9iamVjdCB0byByZWNv
cmQgdXBkYXRlcyB0by4KICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAg
ICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX21ldGVyID0gbWV0
ZXIKIAotICAgICAgICBpZiBvcHRpb25zLnVzZV9hcGFjaGU6Ci0gICAgICAgICAgICBzZWxmLl9o
dHRwX3NlcnZlciA9IGFwYWNoZV9odHRwX3NlcnZlci5MYXlvdXRUZXN0QXBhY2hlSHR0cGQoCi0g
ICAgICAgICAgICAgICAgb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyID0gaHR0cF9zZXJ2ZXIuTGlnaHR0cGQob3B0
aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKLQotICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVy
ID0gd2Vic29ja2V0X3NlcnZlci5QeVdlYlNvY2tldCgKLSAgICAgICAgICAgIG9wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnkpCiAgICAgICAgICMgZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRvIGlu
c3RhbGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4KICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRf
c2VjdXJlX3NlcnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCiAgICAgICAgICMg
ICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIHVzZV90bHM9VHJ1ZSwgcG9ydD05MzIz
KQpAQCAtMjAzLDggKzE4OSw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICMgYSBzZXQg
b2YgdGVzdCBmaWxlcywgYW5kIHRoZSBzYW1lIHRlc3RzIGFzIGEgbGlzdAogICAgICAgICBzZWxm
Ll90ZXN0X2ZpbGVzID0gc2V0KCkKICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gTm9u
ZQotICAgICAgICBzZWxmLl9maWxlX2RpciA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3dl
YmtpdCcsICd0b29scycsCi0gICAgICAgICAgICAnbGF5b3V0X3Rlc3RzJykKICAgICAgICAgc2Vs
Zi5fcmVzdWx0X3F1ZXVlID0gUXVldWUuUXVldWUoKQogCiAgICAgICAgICMgVGhlc2UgYXJlIHVz
ZWQgZm9yIC0tbG9nIGRldGFpbGVkLXByb2dyZXNzIHRvIHRyYWNrIHN0YXR1cyBieQpAQCAtMjE5
LDIwICsyMDMsMTggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgbG9nZ2luZy5kZWJ1Zygi
Zmx1c2hpbmcgc3RkZXJyIikKICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCiAgICAgICAgIGxv
Z2dpbmcuZGVidWcoInN0b3BwaW5nIGh0dHAgc2VydmVyIikKLSAgICAgICAgIyBTdG9wIHRoZSBo
dHRwIHNlcnZlci4KLSAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIuc3RvcCgpCi0gICAgICAgICMg
U3RvcCB0aGUgV2ViIFNvY2tldCAvIFdlYiBTb2NrZXQgU2VjdXJlIHNlcnZlcnMuCi0gICAgICAg
IHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIuc3RvcCgpCi0gICAgICAgICMgc2VsZi5fd2Vic29ja2V0
X3NlY3VyZV9zZXJ2ZXIuU3RvcCgpCisgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3NlcnZl
cigpCisgICAgICAgIGxvZ2dpbmcuZGVidWcoInN0b3BwaW5nIHdlYnNvY2tldCBzZXJ2ZXIiKQor
ICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCiAKICAgICBkZWYgZ2F0
aGVyX2ZpbGVfcGF0aHMoc2VsZiwgcGF0aHMpOgogICAgICAgICAiIiJGaW5kIGFsbCB0aGUgZmls
ZXMgdG8gdGVzdC4KIAogICAgICAgICBBcmdzOgogICAgICAgICAgIHBhdGhzOiBhIGxpc3Qgb2Yg
Z2xvYnMgdG8gdXNlIGluc3RlYWQgb2YgdGhlIGRlZmF1bHRzLiIiIgotICAgICAgICBzZWxmLl90
ZXN0X2ZpbGVzID0gdGVzdF9maWxlcy5nYXRoZXJfdGVzdF9maWxlcyhwYXRocykKKyAgICAgICAg
c2VsZi5fdGVzdF9maWxlcyA9IHRlc3RfZmlsZXMuZ2F0aGVyX3Rlc3RfZmlsZXMoc2VsZi5fcG9y
dCwgcGF0aHMpCiAKLSAgICBkZWYgcGFyc2VfZXhwZWN0YXRpb25zKHNlbGYsIHBsYXRmb3JtLCBp
c19kZWJ1Z19tb2RlKToKKyAgICBkZWYgcGFyc2VfZXhwZWN0YXRpb25zKHNlbGYsIHRlc3RfcGxh
dGZvcm1fbmFtZSwgaXNfZGVidWdfbW9kZSk6CiAgICAgICAgICIiIlBhcnNlIHRoZSBleHBlY3Rh
dGlvbnMgZnJvbSB0aGUgdGVzdF9saXN0IGZpbGVzIGFuZCByZXR1cm4gYSBkYXRhCiAgICAgICAg
IHN0cnVjdHVyZSBob2xkaW5nIHRoZW0uIFRocm93cyBhbiBlcnJvciBpZiB0aGUgdGVzdF9saXN0
IGZpbGVzIGhhdmUKICAgICAgICAgaW52YWxpZCBzeW50YXguIiIiCkBAIC0yNDIsOSArMjI0LDEw
IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICB0ZXN0X2ZpbGVzID0gc2VsZi5fdGVz
dF9maWxlcwogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9
IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnModGVzdF9maWxlcywKLSAgICAgICAg
ICAgICAgICBzZWxmLl9maWxlX2RpciwgcGxhdGZvcm0sIGlzX2RlYnVnX21vZGUsCi0gICAgICAg
ICAgICAgICAgc2VsZi5fb3B0aW9ucy5saW50X3Rlc3RfZmlsZXMpCisgICAgICAgICAgICBleHBl
Y3RhdGlvbnNfc3RyID0gc2VsZi5fcG9ydC50ZXN0X2V4cGVjdGF0aW9ucygpCisgICAgICAgICAg
ICBzZWxmLl9leHBlY3RhdGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25z
KAorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQsIHRlc3RfZmlsZXMsIGV4cGVjdGF0aW9uc19z
dHIsIHRlc3RfcGxhdGZvcm1fbmFtZSwKKyAgICAgICAgICAgICAgICBpc19kZWJ1Z19tb2RlLCBz
ZWxmLl9vcHRpb25zLmxpbnRfdGVzdF9maWxlcykKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9l
eHBlY3RhdGlvbnMKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgogICAgICAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy5saW50X3Rlc3RfZmlsZXM6CkBAIC0zNTksNyArMzQyLDggQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgPSBzZXQoc2VsZi5f
dGVzdF9maWxlc19saXN0KQogCiAgICAgICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMgPSBzZWxm
LnBhcnNlX2V4cGVjdGF0aW9ucygKLSAgICAgICAgICAgICAgICBwYXRoX3V0aWxzLnBsYXRmb3Jt
X25hbWUoKSwgc2VsZi5fb3B0aW9ucy50YXJnZXQgPT0gJ0RlYnVnJykKKyAgICAgICAgICAgICAg
ICBzZWxmLl9wb3J0LnRlc3RfcGxhdGZvcm1fbmFtZSgpLAorICAgICAgICAgICAgICAgIHNlbGYu
X29wdGlvbnMudGFyZ2V0ID09ICdEZWJ1ZycpCiAKICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmls
ZXMgPSBzZXQoZmlsZXMpCiAgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBmaWxl
cwpAQCAtNDI0LDggKzQwOCw5IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIGlzIHVzZWQg
Zm9yIGxvb2tpbmcgdXAgdGhlIHRpbWVvdXQgdmFsdWUgKGluIG1zKSB0byB1c2UgZm9yIHRoZSBn
aXZlbgogICAgICAgICB0ZXN0LiIiIgogICAgICAgICBpZiBzZWxmLl9leHBlY3RhdGlvbnMuaGFz
X21vZGlmaWVyKHRlc3RfZmlsZSwgdGVzdF9leHBlY3RhdGlvbnMuU0xPVyk6Ci0gICAgICAgICAg
ICByZXR1cm4gVGVzdEluZm8odGVzdF9maWxlLCBzZWxmLl9vcHRpb25zLnNsb3dfdGltZV9vdXRf
bXMpCi0gICAgICAgIHJldHVybiBUZXN0SW5mbyh0ZXN0X2ZpbGUsIHNlbGYuX29wdGlvbnMudGlt
ZV9vdXRfbXMpCisgICAgICAgICAgICByZXR1cm4gVGVzdEluZm8oc2VsZi5fcG9ydCwgdGVzdF9m
aWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2xvd190aW1l
X291dF9tcykKKyAgICAgICAgcmV0dXJuIFRlc3RJbmZvKHNlbGYuX3BvcnQsIHRlc3RfZmlsZSwg
c2VsZi5fb3B0aW9ucy50aW1lX291dF9tcykKIAogICAgIGRlZiBfZ2V0X3Rlc3RfZmlsZV9xdWV1
ZShzZWxmLCB0ZXN0X2ZpbGVzKToKICAgICAgICAgIiIiQ3JlYXRlIHRoZSB0aHJlYWQgc2FmZSBx
dWV1ZSBvZiBsaXN0cyBvZiAodGVzdCBmaWxlbmFtZXMsIHRlc3QgVVJJcykKQEAgLTQ5MCw2ICs0
NzUsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSB0dXBsZSBv
ZiBhcmd1bWVudHMgZm9yIHRlc3RzIGFuZCBmb3IgdGVzdF9zaGVsbC4iIiIKICAgICAgICAgc2hl
bGxfYXJncyA9IFtdCiAgICAgICAgIHRlc3RfYXJncyA9IHRlc3RfdHlwZV9iYXNlLlRlc3RBcmd1
bWVudHMoKQorICAgICAgICBwbmdfcGF0aCA9IE5vbmUKICAgICAgICAgaWYgbm90IHNlbGYuX29w
dGlvbnMubm9fcGl4ZWxfdGVzdHM6CiAgICAgICAgICAgICBwbmdfcGF0aCA9IG9zLnBhdGguam9p
bihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInBuZ19yZXN1bHQlcy5wbmciICUgaW5kZXgpCkBAIC01MDYsNyArNDky
LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ncF9mYXVs
dF9lcnJvcl9ib3g6CiAgICAgICAgICAgICBzaGVsbF9hcmdzLmFwcGVuZCgnLS1ncC1mYXVsdC1l
cnJvci1ib3gnKQogCi0gICAgICAgIHJldHVybiAodGVzdF9hcmdzLCBzaGVsbF9hcmdzKQorICAg
ICAgICByZXR1cm4gdGVzdF9hcmdzLCBwbmdfcGF0aCwgc2hlbGxfYXJncwogCiAgICAgZGVmIF9j
b250YWluc190ZXN0cyhzZWxmLCBzdWJkaXIpOgogICAgICAgICBmb3IgdGVzdF9maWxlIGluIHNl
bGYuX3Rlc3RfZmlsZXNfbGlzdDoKQEAgLTUxNCwyMyArNTAwLDEyIEBAIGNsYXNzIFRlc3RSdW5u
ZXI6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAK
LSAgICBkZWYgX2luc3RhbnRpYXRlX3Rlc3Rfc2hlbGxfdGhyZWFkcyhzZWxmLCB0ZXN0X3NoZWxs
X2JpbmFyeSwgdGVzdF9maWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHRfc3VtbWFyeSk6CisgICAgZGVmIF9pbnN0YW50aWF0ZV90ZXN0X3NoZWxsX3RocmVh
ZHMoc2VsZiwgdGVzdF9maWxlcywgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJJbnN0YW50
aXRhdGVzIGFuZCBzdGFydHMgdGhlIFRlc3RTaGVsbFRocmVhZChzKS4KIAogICAgICAgICBSZXR1
cm46CiAgICAgICAgICAgVGhlIGxpc3Qgb2YgdGhyZWFkcy4KICAgICAgICAgIiIiCi0gICAgICAg
IHRlc3Rfc2hlbGxfY29tbWFuZCA9IFt0ZXN0X3NoZWxsX2JpbmFyeV0KLQotICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLndyYXBwZXI6Ci0gICAgICAgICAgICAjIFRoaXMgc3BsaXQoKSBpc24ndCBy
ZWFsbHkgd2hhdCB3ZSB3YW50IC0tIGl0IGluY29ycmVjdGx5IHdpbGwKLSAgICAgICAgICAgICMg
c3BsaXQgcXVvdGVkIHN0cmluZ3Mgd2l0aGluIHRoZSB3cmFwcGVyIGFyZ3VtZW50IC0tIGJ1dCBp
bgotICAgICAgICAgICAgIyBwcmFjdGljZSBpdCBzaG91bGRuJ3QgY29tZSB1cCBhbmQgdGhlIC0t
aGVscCBvdXRwdXQgd2FybnMKLSAgICAgICAgICAgICMgYWJvdXQgaXQgYW55d2F5LgotICAgICAg
ICAgICAgdGVzdF9zaGVsbF9jb21tYW5kID0gKHNlbGYuX29wdGlvbnMud3JhcHBlci5zcGxpdCgp
ICsKLSAgICAgICAgICAgICAgICB0ZXN0X3NoZWxsX2NvbW1hbmQpCi0KICAgICAgICAgZmlsZW5h
bWVfcXVldWUgPSBzZWxmLl9nZXRfdGVzdF9maWxlX3F1ZXVlKHRlc3RfZmlsZXMpCiAKICAgICAg
ICAgIyBJbnN0YW50aWF0ZSBUZXN0U2hlbGxUaHJlYWRzIGFuZCBzdGFydCB0aGVtLgpAQCAtNTM5
LDE1ICs1MTQsMTYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICMgQ3JlYXRlIHNl
cGFyYXRlIFRlc3RUeXBlcyBpbnN0YW5jZXMgZm9yIGVhY2ggdGhyZWFkLgogICAgICAgICAgICAg
dGVzdF90eXBlcyA9IFtdCiAgICAgICAgICAgICBmb3IgdCBpbiBzZWxmLl90ZXN0X3R5cGVzOgot
ICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMuYXBwZW5kKHQoc2VsZi5fb3B0aW9ucy5wbGF0Zm9y
bSwKKyAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLmFwcGVuZCh0KHNlbGYuX3BvcnQsIHNlbGYu
X29wdGlvbnMucGxhdGZvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKIAotICAgICAgICAgICAgdGVzdF9hcmdz
LCBzaGVsbF9hcmdzID0gc2VsZi5fZ2V0X3Rlc3Rfc2hlbGxfYXJncyhpKQotICAgICAgICAgICAg
dGhyZWFkID0gdGVzdF9zaGVsbF90aHJlYWQuVGVzdFNoZWxsVGhyZWFkKGZpbGVuYW1lX3F1ZXVl
LAorICAgICAgICAgICAgdGVzdF9hcmdzLCBwbmdfcGF0aCwgc2hlbGxfYXJncyA9IHNlbGYuX2dl
dF90ZXN0X3NoZWxsX2FyZ3MoaSkKKyAgICAgICAgICAgIHRocmVhZCA9IHRlc3Rfc2hlbGxfdGhy
ZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lX3F1ZXVlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3Vs
dF9xdWV1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXN0X3NoZWxsX2NvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF90eXBlcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2FyZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX3BhdGgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2hlbGxfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9vcHRpb25zKQogICAgICAgICAgICAgaWYgc2VsZi5faXNfc2luZ2xl
X3RocmVhZGVkKCk6CkBAIC01NTgsMTkgKzUzNCwxMSBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAg
ICAgICAgIHJldHVybiB0aHJlYWRzCiAKLSAgICBkZWYgX3N0b3BfbGF5b3V0X3Rlc3RfaGVscGVy
KHNlbGYsIHByb2MpOgotICAgICAgICAiIiJTdG9wIHRoZSBsYXlvdXQgdGVzdCBoZWxwZXIgYW5k
IGNsb3NlcyBpdCBkb3duLiIiIgotICAgICAgICBpZiBwcm9jOgotICAgICAgICAgICAgbG9nZ2lu
Zy5kZWJ1ZygiU3RvcHBpbmcgbGF5b3V0IHRlc3QgaGVscGVyIikKLSAgICAgICAgICAgIHByb2Mu
c3RkaW4ud3JpdGUoInhcbiIpCi0gICAgICAgICAgICBwcm9jLnN0ZGluLmNsb3NlKCkKLSAgICAg
ICAgICAgIHByb2Mud2FpdCgpCi0KICAgICBkZWYgX2lzX3NpbmdsZV90aHJlYWRlZChzZWxmKToK
ICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHdlIHNob3VsZCBydW4gYWxsIHRoZSB0ZXN0cyBp
biB0aGUgbWFpbiB0aHJlYWQuIiIiCiAgICAgICAgIHJldHVybiBpbnQoc2VsZi5fb3B0aW9ucy5u
dW1fdGVzdF9zaGVsbHMpID09IDEKIAotICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIHRlc3Rfc2hl
bGxfYmluYXJ5LCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICBkZWYgX3J1bl90ZXN0
cyhzZWxmLCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiUnVucyB0aGUg
dGVzdHMgaW4gdGhlIGZpbGVfbGlzdC4KIAogICAgICAgICBSZXR1cm46IEEgdHVwbGUgKGZhaWx1
cmVzLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLApAQCAtNTg0LDkgKzU1Miw4IEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxl
bmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1lfQogICAgICAgICAgICAgcmVzdWx0X3N1
bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKICAgICAg
ICAgIiIiCi0gICAgICAgIHRocmVhZHMgPSBzZWxmLl9pbnN0YW50aWF0ZV90ZXN0X3NoZWxsX3Ro
cmVhZHModGVzdF9zaGVsbF9iaW5hcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmlsZV9saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICB0aHJl
YWRzID0gc2VsZi5faW5zdGFudGlhdGVfdGVzdF9zaGVsbF90aHJlYWRzKGZpbGVfbGlzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRfc3VtbWFyeSkKIAogICAgICAgICAjIFdhaXQgZm9yIHRoZSB0aHJlYWRzIHRvIGZpbmlzaCBh
bmQgY29sbGVjdCB0ZXN0IGZhaWx1cmVzLgogICAgICAgICBmYWlsdXJlcyA9IHt9CkBAIC02MTIs
NyArNTc5LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50
ZXJydXB0OgogICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgogICAgICAgICAgICAg
ICAgIHRocmVhZC5jYW5jZWwoKQotICAgICAgICAgICAgc2VsZi5fc3RvcF9sYXlvdXRfdGVzdF9o
ZWxwZXIobGF5b3V0X3Rlc3RfaGVscGVyX3Byb2MpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0
b3BfaGVscGVyKCkKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhy
ZWFkczoKICAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciBhIFRlc3RTaGVsbFRocmVhZCBkaWVk
IGJlZm9yZSBub3JtYWwgY29tcGxldGlvbi4KQEAgLTY0Miw0MiArNjA5LDIwIEBAIGNsYXNzIFRl
c3RSdW5uZXI6CiAgICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0X2ZpbGVzOgogICAgICAgICAgICAg
cmV0dXJuIDAKICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIHRlc3Rf
c2hlbGxfYmluYXJ5ID0gcGF0aF91dGlscy50ZXN0X3NoZWxsX3BhdGgoc2VsZi5fb3B0aW9ucy50
YXJnZXQpCiAKICAgICAgICAgIyBTdGFydCB1cCBhbnkgaGVscGVyIG5lZWRlZAotICAgICAgICBs
YXlvdXRfdGVzdF9oZWxwZXJfcHJvYyA9IE5vbmUKICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlv
bnMubm9fcGl4ZWxfdGVzdHM6Ci0gICAgICAgICAgICBoZWxwZXJfcGF0aCA9IHBhdGhfdXRpbHMu
bGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgoCi0gICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy50
YXJnZXQpCi0gICAgICAgICAgICBpZiBsZW4oaGVscGVyX3BhdGgpOgotICAgICAgICAgICAgICAg
IGxvZ2dpbmcuZGVidWcoIlN0YXJ0aW5nIGxheW91dCBoZWxwZXIgJXMiICUgaGVscGVyX3BhdGgp
Ci0gICAgICAgICAgICAgICAgbGF5b3V0X3Rlc3RfaGVscGVyX3Byb2MgPSBzdWJwcm9jZXNzLlBv
cGVuKAotICAgICAgICAgICAgICAgICAgICBbaGVscGVyX3BhdGhdLCBzdGRpbj1zdWJwcm9jZXNz
LlBJUEUsCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVy
cj1Ob25lKQotICAgICAgICAgICAgICAgIGlzX3JlYWR5ID0gbGF5b3V0X3Rlc3RfaGVscGVyX3By
b2Muc3Rkb3V0LnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgaXNfcmVhZHkuc3Rh
cnRzd2l0aCgncmVhZHknKToKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigibGF5
b3V0X3Rlc3RfaGVscGVyIGZhaWxlZCB0byBiZSByZWFkeSIpCi0KLSAgICAgICAgIyBDaGVjayB0
aGF0IHRoZSBzeXN0ZW0gZGVwZW5kZW5jaWVzICh0aGVtZXMsIGZvbnRzLCAuLi4pIGFyZSBjb3Jy
ZWN0LgotICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5ub2NoZWNrX3N5c19kZXBzOgotICAg
ICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oW3Rlc3Rfc2hlbGxfYmluYXJ5LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tY2hlY2stbGF5b3V0LXRlc3Qtc3lz
LWRlcHMiXSkKLSAgICAgICAgICAgIGlmIHByb2Mud2FpdCgpICE9IDA6Ci0gICAgICAgICAgICAg
ICAgbG9nZ2luZy5pbmZvKCJBYm9ydGluZyBiZWNhdXNlIHN5c3RlbSBkZXBlbmRlbmNpZXMgY2hl
Y2sgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLlxuIFRvIG92ZXJyaWRl
LCBpbnZva2Ugd2l0aCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLW5vY2hlY2st
c3lzLWRlcHMiKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBzZWxm
Ll9wb3J0LnN0YXJ0X2hlbHBlcigpCiAKICAgICAgICAgaWYgc2VsZi5fY29udGFpbnNfdGVzdHMo
c2VsZi5IVFRQX1NVQkRJUik6Ci0gICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlci5zdGFydCgp
CisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKIAogICAgICAgICBp
ZiBzZWxmLl9jb250YWluc190ZXN0cyhzZWxmLldFQlNPQ0tFVF9TVUJESVIpOgotICAgICAgICAg
ICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlci5zdGFydCgpCisgICAgICAgICAgICBzZWxmLl9wb3J0
LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQogICAgICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRf
c2VjdXJlX3NlcnZlci5TdGFydCgpCiAKICAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGlt
aW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSAoCi0gICAgICAgICAgICBzZWxmLl9ydW5f
dGVzdHModGVzdF9zaGVsbF9iaW5hcnksIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KSkKKyAgICAgICAgICAgIHNlbGYuX3J1
bl90ZXN0cyhzZWxmLl90ZXN0X2ZpbGVzX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KSkKIAogICAgICAg
ICAjIFdlIGV4Y2x1ZGUgdGhlIGNyYXNoZXMgZnJvbSB0aGUgbGlzdCBvZiByZXN1bHRzIHRvIHJl
dHJ5LCBiZWNhdXNlCiAgICAgICAgICMgd2Ugd2FudCB0byB0cmVhdCBldmVuIGEgcG90ZW50aWFs
bHkgZmxha3kgY3Jhc2ggYXMgYW4gZXJyb3IuCkBAIC02ODksMTAgKzYzNCwxMCBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiUmV0cnlpbmcgJWQgdW5leHBl
Y3RlZCBmYWlsdXJlKHMpIiAlIGxlbihmYWlsdXJlcykpCiAgICAgICAgICAgICByZXRyaWVzICs9
IDEKICAgICAgICAgICAgIHJldHJ5X3N1bW1hcnkgPSBSZXN1bHRTdW1tYXJ5KHNlbGYuX2V4cGVj
dGF0aW9ucywgZmFpbHVyZXMua2V5cygpKQotICAgICAgICAgICAgc2VsZi5fcnVuX3Rlc3RzKHRl
c3Rfc2hlbGxfYmluYXJ5LCBmYWlsdXJlcy5rZXlzKCksIHJldHJ5X3N1bW1hcnkpCisgICAgICAg
ICAgICBzZWxmLl9ydW5fdGVzdHMoZmFpbHVyZXMua2V5cygpLCByZXRyeV9zdW1tYXJ5KQogICAg
ICAgICAgICAgZmFpbHVyZXMgPSBzZWxmLl9nZXRfZmFpbHVyZXMocmV0cnlfc3VtbWFyeSwgaW5j
bHVkZV9jcmFzaGVzPVRydWUpCiAKLSAgICAgICAgc2VsZi5fc3RvcF9sYXlvdXRfdGVzdF9oZWxw
ZXIobGF5b3V0X3Rlc3RfaGVscGVyX3Byb2MpCisgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9oZWxw
ZXIoKQogICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCiAKICAgICAgICAgd3JpdGUgPSBj
cmVhdGVfbG9nZ2luZ193cml0ZXIoc2VsZi5fb3B0aW9ucywgJ3RpbWluZycpCkBAIC03NzcsNyAr
NzIyLDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICBuZXh0X3Rlc3QgPSBzZWxmLl90
ZXN0X2ZpbGVzX2xpc3Rbc2VsZi5fY3VycmVudF90ZXN0X251bWJlcl0KICAgICAgICAgbmV4dF9k
aXIgPSBvcy5wYXRoLmRpcm5hbWUoCi0gICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUobmV4dF90ZXN0KSkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVf
dGVzdF9maWxlbmFtZShuZXh0X3Rlc3QpKQogICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Byb2dy
ZXNzX3N0ciA9PSAiIjoKICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfcHJvZ3Jlc3Nfc3RyID0g
IiVzOiAiICUgKG5leHRfZGlyKQogICAgICAgICAgICAgc2VsZi5fY3VycmVudF9kaXIgPSBuZXh0
X2RpcgpAQCAtODAzLDcgKzc0OCw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAgICAg
IG5leHRfdGVzdCA9IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdFtzZWxmLl9jdXJyZW50X3Rlc3RfbnVt
YmVyXQogICAgICAgICAgICAgbmV4dF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoCi0gICAgICAgICAg
ICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkpCisgICAg
ICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKG5leHRfdGVzdCkp
CiAKICAgICAgICAgaWYgcmVzdWx0X3N1bW1hcnkucmVtYWluaW5nOgogICAgICAgICAgICAgcmVt
YWluX3N0ciA9ICIgKCVkKSIgJSAocmVzdWx0X3N1bW1hcnkucmVtYWluaW5nKQpAQCAtODc0LDcg
KzgxOSw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAjIE5vdGUgdGhhdCBpZiBh
IHRlc3QgY3Jhc2hlZCBpbiB0aGUgb3JpZ2luYWwgcnVuLCB3ZSBpZ25vcmUKICAgICAgICAgICAg
ICMgd2hldGhlciBvciBub3QgaXQgY3Jhc2hlZCB3aGVuIHdlIHJldHJpZWQgaXQgKGlmIHdlIHJl
dHJpZWQgaXQpLAogICAgICAgICAgICAgIyBhbmQgYWx3YXlzIGNvbnNpZGVyIHRoZSByZXN1bHQg
bm90IGZsYWt5LgotICAgICAgICAgICAgdGVzdCA9IHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgICAgIHRlc3QgPSBzZWxmLl9wb3J0LnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpCiAgICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4
cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZyhmaWxlbmFtZSkKICAgICAgICAgICAg
IGFjdHVhbCA9IFtrZXl3b3Jkc1tyZXN1bHRdXQogCkBAIC05NDMsNyArODg4LDcgQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKICAgICAgICAgZXhwZWN0YXRpb25zX2ZpbGUuY2xvc2UoKQogCiAgICAgICAg
IGpzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05MYXlvdXRSZXN1bHRzR2VuZXJhdG9y
KAotICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5idWlsZGVyX25hbWUsIHNlbGYuX29wdGlvbnMu
YnVpbGRfbmFtZSwKKyAgICAgICAgICAgIHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMuYnVpbGRl
cl9uYW1lLCBzZWxmLl9vcHRpb25zLmJ1aWxkX25hbWUsCiAgICAgICAgICAgICBzZWxmLl9vcHRp
b25zLmJ1aWxkX251bWJlciwgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKICAgICAg
ICAgICAgIEJVSUxERVJfQkFTRV9VUkwsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAogICAgICAg
ICAgICAgc2VsZi5fZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwgc2VsZi5fdGVzdF9maWxl
c19saXN0KQpAQCAtMTExMCw3ICsxMDU1LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAg
d3JpdGUodGl0bGUpCiAgICAgICAgIGZvciB0ZXN0X3R1cGxlIGluIHRlc3RfbGlzdDoKICAgICAg
ICAgICAgIGZpbGVuYW1lID0gdGVzdF90dXBsZS5maWxlbmFtZVtsZW4oCi0gICAgICAgICAgICAg
ICAgcGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCkpICsgMTpdCisgICAgICAgICAgICAgICAg
c2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpICsgMTpdCiAgICAgICAgICAgICBmaWxlbmFt
ZSA9IGZpbGVuYW1lLnJlcGxhY2UoJ1xcJywgJy8nKQogICAgICAgICAgICAgdGVzdF9ydW5fdGlt
ZSA9IHJvdW5kKHRlc3RfdHVwbGUudGVzdF9ydW5fdGltZSwgMSkKICAgICAgICAgICAgIHdyaXRl
KCIgICVzIHRvb2sgJXMgc2Vjb25kcyIgJSAoZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWUpKQpAQCAt
MTMyOCw3ICsxMjczLDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgIiIiUHJpbnRzIG9u
ZSB1bmV4cGVjdGVkIHRlc3QgcmVzdWx0IGxpbmUuIiIiCiAgICAgICAgIGRlc2MgPSBUZXN0RXhw
ZWN0YXRpb25zRmlsZS5FWFBFQ1RBVElPTl9ERVNDUklQVElPTlNbcmVzdWx0XVswXQogICAgICAg
ICBzZWxmLl9tZXRlci53cml0ZSgiICAlcyAtPiB1bmV4cGVjdGVkICVzXG4iICUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0
KSwgZGVzYykpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0LnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUodGVzdCksIGRlc2MpKQogCiAgICAgZGVmIF93cml0ZV9yZXN1bHRzX2h0
bWxfZmlsZShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIldyaXRlIHJlc3VsdHMu
aHRtbCB3aGljaCBpcyBhIHN1bW1hcnkgb2YgdGVzdHMgdGhhdCBmYWlsZWQuCkBAIC0xMzY2LDEy
ICsxMzExLDEyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4g
dGVzdF9maWxlczoKICAgICAgICAgICAgIHRlc3RfZmFpbHVyZXMgPSByZXN1bHRfc3VtbWFyeS5m
YWlsdXJlcy5nZXQodGVzdF9maWxlLCBbXSkKICAgICAgICAgICAgIG91dF9maWxlLndyaXRlKCI8
cD48YSBocmVmPSclcyc+JXM8L2E+PGJyIC8+XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAlIChwYXRoX3V0aWxzLmZpbGVuYW1lX3RvX3VyaSh0ZXN0X2ZpbGUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGF0aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3Rf
ZmlsZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5fcG9ydC5maWxlbmFt
ZV90b191cmkodGVzdF9maWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2ZpbGUpKSkKICAgICAgICAgICAgIGZv
ciBmYWlsdXJlIGluIHRlc3RfZmFpbHVyZXM6CiAgICAgICAgICAgICAgICAgb3V0X2ZpbGUud3Jp
dGUoIiZuYnNwOyZuYnNwOyVzPGJyLz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JSBmYWlsdXJlLnJlc3VsdF9odG1sX291dHB1dCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2ZpbGUpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZSh0ZXN0X2ZpbGUpKSkKICAgICAgICAgICAgIG91dF9maWxlLndyaXRlKCI8L3A+XG4i
KQogCiAgICAgICAgICMgZm9vdGVyCkBAIC0xMzgyLDggKzEzMjcsNyBAQCBjbGFzcyBUZXN0UnVu
bmVyOgogICAgICAgICAiIiJMYXVuY2hlcyB0aGUgdGVzdCBzaGVsbCBvcGVuIHRvIHRoZSByZXN1
bHRzLmh0bWwgcGFnZS4iIiIKICAgICAgICAgcmVzdWx0c19maWxlbmFtZSA9IG9zLnBhdGguam9p
bihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJyZXN1bHRzLmh0bWwiKQotICAgICAgICBzdWJwcm9jZXNzLlBv
cGVuKFtwYXRoX3V0aWxzLnRlc3Rfc2hlbGxfcGF0aChzZWxmLl9vcHRpb25zLnRhcmdldCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMuZmlsZW5hbWVfdG9fdXJpKHJlc3Vs
dHNfZmlsZW5hbWUpXSkKKyAgICAgICAgc2VsZi5fcG9ydC5zaG93X3Jlc3VsdHNfaHRtbF9maWxl
KHJlc3VsdHNfZmlsZW5hbWUpCiAKIAogZGVmIF9hZGRfdG9fZGljdF9vZl9saXN0cyhkaWN0LCBr
ZXksIHZhbHVlKToKQEAgLTE0NDQsMTkgKzEzODgsMTkgQEAgZGVmIG1haW4ob3B0aW9ucywgYXJn
cyk6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcHRpb25zLnRhcmdldCA9ICJSZWxlYXNl
IgogCisgICAgcG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQor
CiAgICAgaWYgbm90IG9wdGlvbnMudXNlX2FwYWNoZToKICAgICAgICAgb3B0aW9ucy51c2VfYXBh
Y2hlID0gc3lzLnBsYXRmb3JtIGluICgnZGFyd2luJywgJ2xpbnV4MicpCiAKICAgICBpZiBvcHRp
b25zLnJlc3VsdHNfZGlyZWN0b3J5LnN0YXJ0c3dpdGgoIi8iKToKICAgICAgICAgIyBBc3N1bWUg
aXQncyBhbiBhYnNvbHV0ZSBwYXRoIGFuZCBub3JtYWxpemUuCi0gICAgICAgIG9wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnkgPSBwYXRoX3V0aWxzLmdldF9hYnNvbHV0ZV9wYXRoKAorICAgICAgICBv
cHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5ID0gcG9ydF9vYmouZ2V0X2Fic29sdXRlX3BhdGgoCiAg
ICAgICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQogICAgIGVsc2U6CiAgICAgICAg
ICMgSWYgaXQncyBhIHJlbGF0aXZlIHBhdGgsIG1ha2UgdGhlIG91dHB1dCBkaXJlY3RvcnkgcmVs
YXRpdmUgdG8KICAgICAgICAgIyBEZWJ1ZyBvciBSZWxlYXNlLgotICAgICAgICBiYXNlZGlyID0g
cGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgnd2Via2l0JykKLSAgICAgICAgb3B0aW9ucy5yZXN1
bHRzX2RpcmVjdG9yeSA9IHBhdGhfdXRpbHMuZ2V0X2Fic29sdXRlX3BhdGgoCi0gICAgICAgICAg
ICBvcy5wYXRoLmpvaW4oYmFzZWRpciwgb3B0aW9ucy50YXJnZXQsIG9wdGlvbnMucmVzdWx0c19k
aXJlY3RvcnkpKQorICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5ID0gcG9ydF9vYmou
cmVzdWx0c19kaXJlY3RvcnkoKQogCiAgICAgaWYgb3B0aW9ucy5jbG9iYmVyX29sZF9yZXN1bHRz
OgogICAgICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRlc3QgcmVzdWx0cyBkaXJlY3Rv
cmllcyBzaW5jZSB0aGUgb3RoZXIKQEAgLTE0NjYsMTIgKzE0MTAsOSBAQCBkZWYgbWFpbihvcHRp
b25zLCBhcmdzKToKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgICAg
ICBzaHV0aWwucm10cmVlKHBhdGgpCiAKLSAgICAjIEVuc3VyZSBwbGF0Zm9ybSBpcyB2YWxpZCBh
bmQgZm9yY2UgaXQgdG8gdGhlIGZvcm0gJ2Nocm9taXVtLTxwbGF0Zm9ybT4nLgotICAgIG9wdGlv
bnMucGxhdGZvcm0gPSBwYXRoX3V0aWxzLnBsYXRmb3JtX25hbWUob3B0aW9ucy5wbGF0Zm9ybSkK
LQogICAgIGlmIG5vdCBvcHRpb25zLm51bV90ZXN0X3NoZWxsczoKICAgICAgICAgIyBUT0RPKG9q
YW4pOiBJbnZlc3RpZ2F0ZSBwZXJmL2ZsYWtpbmVzcyBpbXBhY3Qgb2YgdXNpbmcgbnVtY29yZXMg
KyAxLgotICAgICAgICBvcHRpb25zLm51bV90ZXN0X3NoZWxscyA9IHBvcnQuZ2V0X251bV9jb3Jl
cygpCisgICAgICAgIG9wdGlvbnMubnVtX3Rlc3Rfc2hlbGxzID0gcG9ydF9vYmoubnVtX2NvcmVz
KCkKIAogICAgIHdyaXRlID0gY3JlYXRlX2xvZ2dpbmdfd3JpdGVyKG9wdGlvbnMsICdjb25maWcn
KQogICAgIHdyaXRlKCJSdW5uaW5nICVzIHRlc3Rfc2hlbGxzIGluIHBhcmFsbGVsIiAlIG9wdGlv
bnMubnVtX3Rlc3Rfc2hlbGxzKQpAQCAtMTQ5OSw2MiArMTQ0MCw0NiBAQCBkZWYgbWFpbihvcHRp
b25zLCBhcmdzKToKICAgICAgICAgcGF0aHMgKz0gcmVhZF90ZXN0X2ZpbGVzKG9wdGlvbnMudGVz
dF9saXN0KQogCiAgICAgIyBDcmVhdGUgdGhlIG91dHB1dCBkaXJlY3RvcnkgaWYgaXQgZG9lc24n
dCBhbHJlYWR5IGV4aXN0LgotICAgIHBhdGhfdXRpbHMubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3B0
aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKKyAgICBwb3J0X29iai5tYXliZV9tYWtlX2RpcmVjdG9y
eShvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQogICAgIG1ldGVyLnVwZGF0ZSgiR2F0aGVyaW5n
IGZpbGVzIC4uLiIpCiAKLSAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIob3B0aW9ucywgbWV0
ZXIpCisgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnRfb2JqLCBvcHRpb25zLCBtZXRl
cikKICAgICB0ZXN0X3J1bm5lci5nYXRoZXJfZmlsZV9wYXRocyhwYXRocykKIAogICAgIGlmIG9w
dGlvbnMubGludF90ZXN0X2ZpbGVzOgogICAgICAgICAjIENyZWF0aW5nIHRoZSBleHBlY2F0aW9u
cyBmb3IgZWFjaCBwbGF0Zm9ybS90YXJnZXQgcGFpciBkb2VzIGFsbCB0aGUKICAgICAgICAgIyB0
ZXN0IGxpc3QgcGFyc2luZyBhbmQgZW5zdXJlcyBpdCdzIGNvcnJlY3Qgc3ludGF4IChlLmcuIG5v
IGR1cGVzKS4KLSAgICAgICAgZm9yIHBsYXRmb3JtIGluIFRlc3RFeHBlY3RhdGlvbnNGaWxlLlBM
QVRGT1JNUzoKKyAgICAgICAgZm9yIHBsYXRmb3JtIGluIHBvcnRfb2JqLnRlc3RfcGxhdGZvcm1f
bmFtZXMoKToKICAgICAgICAgICAgIHRlc3RfcnVubmVyLnBhcnNlX2V4cGVjdGF0aW9ucyhwbGF0
Zm9ybSwgaXNfZGVidWdfbW9kZT1UcnVlKQogICAgICAgICAgICAgdGVzdF9ydW5uZXIucGFyc2Vf
ZXhwZWN0YXRpb25zKHBsYXRmb3JtLCBpc19kZWJ1Z19tb2RlPUZhbHNlKQogICAgICAgICBwcmlu
dCAoIklmIHRoZXJlIGFyZSBubyBmYWlsIG1lc3NhZ2VzLCBlcnJvcnMgb3IgZXhjZXB0aW9ucywg
dGhlbiB0aGUgIgogICAgICAgICAgICAgImxpbnQgc3VjY2VlZGVkLiIpCiAgICAgICAgIHN5cy5l
eGl0KDApCiAKLSAgICB0cnk6Ci0gICAgICAgIHRlc3Rfc2hlbGxfYmluYXJ5X3BhdGggPSBwYXRo
X3V0aWxzLnRlc3Rfc2hlbGxfcGF0aChvcHRpb25zLnRhcmdldCkKLSAgICBleGNlcHQgcGF0aF91
dGlscy5QYXRoTm90Rm91bmQ6Ci0gICAgICAgIHByaW50ICJcbkVSUk9SOiB0ZXN0X3NoZWxsIGlz
IG5vdCBmb3VuZC4gQmUgc3VyZSB0aGF0IHlvdSBoYXZlIGJ1aWx0IgotICAgICAgICBwcmludCAi
aXQgYW5kIHRoYXQgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBidWlsZC4gVGhpcyBzY3JpcHQi
Ci0gICAgICAgIHByaW50ICJ3aWxsIHJ1biB0aGUgUmVsZWFzZSBvbmUgYnkgZGVmYXVsdC4gVXNl
IC0tZGVidWcgdG8gdXNlIHRoZSIKLSAgICAgICAgcHJpbnQgIkRlYnVnIGJ1aWxkLlxuIgotICAg
ICAgICBzeXMuZXhpdCgxKQorICAgICMgQ2hlY2sgdGhhdCB0aGUgc3lzdGVtIGRlcGVuZGVuY2ll
cyAodGhlbWVzLCBmb250cywgLi4uKSBhcmUgY29ycmVjdC4KKyAgICBpZiBub3Qgb3B0aW9ucy5u
b2NoZWNrX3N5c19kZXBzOgorICAgICAgICBpZiBub3QgcG9ydF9vYmouY2hlY2tfc3lzX2RlcHMo
KToKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5n
X3dyaXRlcihvcHRpb25zLCAiY29uZmlnIikKLSAgICB3cml0ZSgiVXNpbmcgcGxhdGZvcm0gJyVz
JyIgJSBvcHRpb25zLnBsYXRmb3JtKQorICAgIHdyaXRlKCJVc2luZyBwb3J0ICclcyciICUgcG9y
dF9vYmoubmFtZSgpKQogICAgIHdyaXRlKCJQbGFjaW5nIHRlc3QgcmVzdWx0cyBpbiAlcyIgJSBv
cHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQogICAgIGlmIG9wdGlvbnMubmV3X2Jhc2VsaW5lOgot
ICAgICAgICB3cml0ZSgiUGxhY2luZyBuZXcgYmFzZWxpbmVzIGluICVzIiAlCi0gICAgICAgICAg
ICAgIHBhdGhfdXRpbHMuY2hyb21pdW1fYmFzZWxpbmVfcGF0aChvcHRpb25zLnBsYXRmb3JtKSkK
LSAgICB3cml0ZSgiVXNpbmcgJXMgYnVpbGQgYXQgJXMiICUgKG9wdGlvbnMudGFyZ2V0LCB0ZXN0
X3NoZWxsX2JpbmFyeV9wYXRoKSkKKyAgICAgICAgd3JpdGUoIlBsYWNpbmcgbmV3IGJhc2VsaW5l
cyBpbiAlcyIgJSBwb3J0X29iai5iYXNlbGluZV9wYXRoKCkpCisgICAgd3JpdGUoIlVzaW5nICVz
IGJ1aWxkIiAlIG9wdGlvbnMudGFyZ2V0KQogICAgIGlmIG9wdGlvbnMubm9fcGl4ZWxfdGVzdHM6
CiAgICAgICAgIHdyaXRlKCJOb3QgcnVubmluZyBwaXhlbCB0ZXN0cyIpCiAgICAgd3JpdGUoIiIp
CiAKICAgICBtZXRlci51cGRhdGUoIlBhcnNpbmcgZXhwZWN0YXRpb25zIC4uLiIpCi0gICAgdGVz
dF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMudGFy
Z2V0ID09ICdEZWJ1ZycpCisgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBvcnRf
b2JqLnRlc3RfcGxhdGZvcm1fbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25zLnRhcmdldCA9PSAnRGVidWcnKQogCiAgICAgbWV0ZXIudXBkYXRlKCJQcmVw
YXJpbmcgdGVzdHMgLi4uIikKICAgICB3cml0ZSA9IGNyZWF0ZV9sb2dnaW5nX3dyaXRlcihvcHRp
b25zLCAiZXhwZWN0ZWQiKQogICAgIHJlc3VsdF9zdW1tYXJ5ID0gdGVzdF9ydW5uZXIucHJlcGFy
ZV9saXN0c19hbmRfcHJpbnRfb3V0cHV0KHdyaXRlKQogCi0gICAgaWYgJ2N5Z3dpbicgPT0gc3lz
LnBsYXRmb3JtOgotICAgICAgICBsb2dnaW5nLndhcm4oIiMiICogNDApCi0gICAgICAgIGxvZ2dp
bmcud2FybigiIyBVTkVYUEVDVEVEIFBZVEhPTiBWRVJTSU9OIikKLSAgICAgICAgbG9nZ2luZy53
YXJuKCIjIFRoaXMgc2NyaXB0IHNob3VsZCBiZSBydW4gdXNpbmcgdGhlIHZlcnNpb24gb2YgcHl0
aG9uIikKLSAgICAgICAgbG9nZ2luZy53YXJuKCIjIGluIHRoaXJkX3BhcnR5L3B5dGhvbl8yNC8i
KQotICAgICAgICBsb2dnaW5nLndhcm4oIiMiICogNDApCi0gICAgICAgIHN5cy5leGl0KDEpCi0K
LSAgICAjIERlbGV0ZSB0aGUgZGlzayBjYWNoZSBpZiBhbnkgdG8gZW5zdXJlIGEgY2xlYW4gdGVz
dCBydW4uCi0gICAgY2FjaGVkaXIgPSBvcy5wYXRoLnNwbGl0KHRlc3Rfc2hlbGxfYmluYXJ5X3Bh
dGgpWzBdCi0gICAgY2FjaGVkaXIgPSBvcy5wYXRoLmpvaW4oY2FjaGVkaXIsICJjYWNoZSIpCi0g
ICAgaWYgb3MucGF0aC5leGlzdHMoY2FjaGVkaXIpOgotICAgICAgICBzaHV0aWwucm10cmVlKGNh
Y2hlZGlyKQorICAgIHBvcnRfb2JqLnNldHVwX3Rlc3RfcnVuKCkKIAogICAgIHRlc3RfcnVubmVy
LmFkZF90ZXN0X3R5cGUodGV4dF9kaWZmLlRlc3RUZXh0RGlmZikKICAgICBpZiBub3Qgb3B0aW9u
cy5ub19waXhlbF90ZXN0czoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CShyZXZpc2lv
biA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw5ICsyOSw5IEBACiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKK2ltcG9y
dCBzaW1wbGVqc29uCiAKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fcmVzdWx0c19n
ZW5lcmF0b3IKLWZyb20gcG9ydCBpbXBvcnQgcGF0aF91dGlscwogZnJvbSBsYXlvdXRfcGFja2Fn
ZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRl
c3RfZmFpbHVyZXMKIApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dl
bmVyYXRvcihqc29uX3JlCiAgICAgV09OVEZJWCA9ICJ3b250Zml4Q291bnRzIgogICAgIERFRkVS
UkVEID0gImRlZmVycmVkQ291bnRzIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXJf
bmFtZSwgYnVpbGRfbmFtZSwgYnVpbGRfbnVtYmVyLAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
b3J0LCBidWlsZGVyX25hbWUsIGJ1aWxkX25hbWUsIGJ1aWxkX251bWJlciwKICAgICAgICAgcmVz
dWx0c19maWxlX2Jhc2VfcGF0aCwgYnVpbGRlcl9iYXNlX3VybCwKICAgICAgICAgdGVzdF90aW1p
bmdzLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCBhbGxfdGVzdHMpOgogICAgICAgICAi
IiJNb2RpZmllcyB0aGUgcmVzdWx0cy5qc29uIGZpbGUuIEdyYWJzIGl0IG9mZiB0aGUgYXJjaGl2
ZSBkaXJlY3RvcnkKQEAgLTU2LDcgKzU2LDcgQEAgY2xhc3MgSlNPTkxheW91dFJlc3VsdHNHZW5l
cmF0b3IoanNvbl9yZQogICAgICAgICAgICAgICByZXN1bHRzLgogICAgICAgICAgIChzZWUgdGhl
IGNvbW1lbnQgb2YgSlNPTlJlc3VsdHNHZW5lcmF0b3IuX19pbml0X18gZm9yIG90aGVyIEFyZ3Mp
CiAgICAgICAgICIiIgotCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYu
X2J1aWxkZXJfbmFtZSA9IGJ1aWxkZXJfbmFtZQogICAgICAgICBzZWxmLl9idWlsZF9uYW1lID0g
YnVpbGRfbmFtZQogICAgICAgICBzZWxmLl9idWlsZF9udW1iZXIgPSBidWlsZF9udW1iZXIKQEAg
LTE1Myw3ICsxNTMsNyBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcihqc29uX3Jl
CiAgICAgICAgICAgICB0ZXN0LCB0ZXN0X25hbWUsIHRlc3RzKQogCiAgICAgICAgICMgUmVtb3Zl
IHRlc3RzIHRoYXQgZG9uJ3QgZXhpc3QgYW55bW9yZS4KLSAgICAgICAgZnVsbF9wYXRoID0gb3Mu
cGF0aC5qb2luKHBhdGhfdXRpbHMubGF5b3V0X3Rlc3RzX2RpcigpLCB0ZXN0X25hbWUpCisgICAg
ICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIo
KSwgdGVzdF9uYW1lKQogICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKGZ1bGxf
cGF0aCkKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZ1bGxfcGF0aCk6CiAgICAgICAg
ICAgICBkZWwgdGVzdHNbdGVzdF9uYW1lXQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CShyZXZpc2lvbiA1NDM2
NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE5
ICsyOSwxNSBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCitpbXBvcnQgc2ltcGxlanNv
bgogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgdXJs
bGliMgogaW1wb3J0IHhtbC5kb20ubWluaWRvbQogCi1mcm9tIHBvcnQgaW1wb3J0IHBhdGhfdXRp
bHMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiAKLXN5cy5w
YXRoLmFwcGVuZChwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdXZWJL
aXQnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXZWJLaXRU
b29scycpKSAKLWltcG9ydCBzaW1wbGVqc29uCi0KIAogY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0
b3Iob2JqZWN0KToKIApAQCAtODAsNyArNzYsNyBAQCBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRv
cihvYmplY3QpOgogCiAgICAgUkVTVUxUU19GSUxFTkFNRSA9ICJyZXN1bHRzLmpzb24iCiAKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcl9uYW1lLCBidWlsZF9uYW1lLCBidWlsZF9udW1i
ZXIsCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGJ1aWxkZXJfbmFtZSwgYnVpbGRfbmFt
ZSwgYnVpbGRfbnVtYmVyLAogICAgICAgICByZXN1bHRzX2ZpbGVfYmFzZV9wYXRoLCBidWlsZGVy
X2Jhc2VfdXJsLAogICAgICAgICB0ZXN0X3RpbWluZ3MsIGZhaWx1cmVzLCBwYXNzZWRfdGVzdHMs
IHNraXBwZWRfdGVzdHMsIGFsbF90ZXN0cyk6CiAgICAgICAgICIiIk1vZGlmaWVzIHRoZSByZXN1
bHRzLmpzb24gZmlsZS4gR3JhYnMgaXQgb2ZmIHRoZSBhcmNoaXZlIGRpcmVjdG9yeQpAQCAtMTAw
LDYgKzk2LDcgQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3Iob2JqZWN0KToKICAgICAgICAg
ICBhbGxfdGVzdHM6IExpc3Qgb2YgYWxsIHRoZSB0ZXN0cyB0aGF0IHdlcmUgcnVuLiAgVGhpcyBz
aG91bGQgbm90CiAgICAgICAgICAgICAgIGluY2x1ZGUgc2tpcHBlZCB0ZXN0cy4KICAgICAgICAg
IiIiCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX2J1aWxkZXJfbmFt
ZSA9IGJ1aWxkZXJfbmFtZQogICAgICAgICBzZWxmLl9idWlsZF9uYW1lID0gYnVpbGRfbmFtZQog
ICAgICAgICBzZWxmLl9idWlsZF9udW1iZXIgPSBidWlsZF9udW1iZXIKQEAgLTEyMiwyMiArMTE5
LDI0IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKG9iamVjdCk6CiAgICAgICAgICAgICBy
ZXN1bHRzX2ZpbGUud3JpdGUoanNvbikKICAgICAgICAgICAgIHJlc3VsdHNfZmlsZS5jbG9zZSgp
CiAKLSAgICBkZWYgX2dldF9zdm5fcmV2aXNpb24oc2VsZiwgaW5fZGlyZWN0b3J5PU5vbmUpOgor
ICAgIGRlZiBfZ2V0X3N2bl9yZXZpc2lvbihzZWxmLCBpbl9kaXJlY3RvcnkpOgogICAgICAgICAi
IiJSZXR1cm5zIHRoZSBzdm4gcmV2aXNpb24gZm9yIHRoZSBnaXZlbiBkaXJlY3RvcnkuCiAKICAg
ICAgICAgQXJnczoKICAgICAgICAgICBpbl9kaXJlY3Rvcnk6IFRoZSBkaXJlY3Rvcnkgd2hlcmUg
c3ZuIGlzIHRvIGJlIHJ1bi4KICAgICAgICAgIiIiCi0gICAgICAgIG91dHB1dCA9IHN1YnByb2Nl
c3MuUG9wZW4oWyJzdm4iLCAiaW5mbyIsICItLXhtbCJdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN3ZD1pbl9kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2hlbGw9KHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgp
WzBdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRvbSA9IHhtbC5kb20ubWluaWRvbS5wYXJz
ZVN0cmluZyhvdXRwdXQpCi0gICAgICAgICAgICByZXR1cm4gZG9tLmdldEVsZW1lbnRzQnlUYWdO
YW1lKCdlbnRyeScpWzBdLmdldEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICAncmV2aXNpb24n
KQotICAgICAgICBleGNlcHQgeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvcjoKLSAgICAgICAg
ICAgIHJldHVybiAiIgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oaW5f
ZGlyZWN0b3J5LCAnLnN2bicpKToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuUG9w
ZW4oWyJzdm4iLCAiaW5mbyIsICItLXhtbCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjd2Q9aW5fZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaGVsbD0oc3lzLnBsYXRmb3JtID09ICd3aW4zMicpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5p
Y2F0ZSgpWzBdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZG9tID0geG1sLmRv
bS5taW5pZG9tLnBhcnNlU3RyaW5nKG91dHB1dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9t
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdlbnRyeScpWzBdLmdldEF0dHJpYnV0ZSgKKyAgICAgICAg
ICAgICAgICAgICAgJ3JldmlzaW9uJykKKyAgICAgICAgICAgIGV4Y2VwdCB4bWwucGFyc2Vycy5l
eHBhdC5FeHBhdEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICByZXR1
cm4gIiIKIAogICAgIGRlZiBfZ2V0X2FyY2hpdmVkX2pzb25fcmVzdWx0cyhzZWxmKToKICAgICAg
ICAgIiIiUmVhZHMgb2xkIHJlc3VsdHMgSlNPTiBmaWxlIGlmIGl0IGV4aXN0cy4KQEAgLTMwNSwx
NiArMzA0LDE5IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yKG9iamVjdCk6CiAgICAgICAg
IHNlbGYuX2luc2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKICAg
ICAgICAgICAgIHNlbGYuX2J1aWxkX251bWJlciwgc2VsZi5CVUlMRF9OVU1CRVJTKQogCi0gICAg
ICAgIHBhdGhfdG9fd2Via2l0ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFy
dHknLCAnV2ViS2l0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdXZWJDb3JlJykKLSAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19yYXdf
bGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAotICAgICAgICAgICAgc2VsZi5fZ2V0X3N2bl9yZXZp
c2lvbihwYXRoX3RvX3dlYmtpdCksCi0gICAgICAgICAgICBzZWxmLldFQktJVF9TVk4pCi0KLSAg
ICAgICAgcGF0aF90b19jaHJvbWVfYmFzZSA9IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoKQot
ICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9pbnRvX3Jhd19saXN0KHJlc3VsdHNfZm9yX2J1aWxk
ZXIsCi0gICAgICAgICAgICBzZWxmLl9nZXRfc3ZuX3JldmlzaW9uKHBhdGhfdG9fY2hyb21lX2Jh
c2UpLAotICAgICAgICAgICAgc2VsZi5DSFJPTUVfU1ZOKQorICAgICAgICAjIFRoZXNlIG5leHQg
dHdvIGJyYW5jaGVzIHRlc3QgdG8gc2VlIHdoaWNoIHNvdXJjZSByZXBvcyB3ZSBjYW4KKyAgICAg
ICAgIyBwdWxsIHJldmlzaW9ucyBmcm9tLgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX3BvcnQs
ICdwYXRoX2Zyb21fd2Via2l0X2Jhc2UnKToKKyAgICAgICAgICAgIHBhdGhfdG9fd2Via2l0ID0g
c2VsZi5fcG9ydC5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoKQorICAgICAgICAgICAgc2VsZi5faW5z
ZXJ0X2l0ZW1faW50b19yYXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAorICAgICAgICAgICAg
ICAgIHNlbGYuX2dldF9zdm5fcmV2aXNpb24ocGF0aF90b193ZWJraXQpLAorICAgICAgICAgICAg
ICAgIHNlbGYuV0VCS0lUX1NWTikKKworICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX3BvcnQsICdw
YXRoX2Zyb21fY2hyb21pdW1fYmFzZScpOgorICAgICAgICAgICAgcGF0aF90b19jaHJvbWUgPSBz
ZWxmLl9wb3J0LnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCkKKyAgICAgICAgICAgIHNlbGYuX2lu
c2VydF9pdGVtX2ludG9fcmF3X2xpc3QocmVzdWx0c19mb3JfYnVpbGRlciwKKyAgICAgICAgICAg
ICAgICBzZWxmLl9nZXRfc3ZuX3JldmlzaW9uKHBhdGhfdG9fY2hyb21lKSwKKyAgICAgICAgICAg
ICAgICBzZWxmLkNIUk9NRV9TVk4pCiAKICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1faW50b19y
YXdfbGlzdChyZXN1bHRzX2Zvcl9idWlsZGVyLAogICAgICAgICAgICAgaW50KHRpbWUudGltZSgp
KSwKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0
YXRpb25zLnB5CShyZXZpc2lvbiA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsNyBAQCBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0
IHN5cwogaW1wb3J0IHRpbWUKLWZyb20gcG9ydCBpbXBvcnQgcGF0aF91dGlscwogCi1zeXMucGF0
aC5hcHBlbmQocGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnV2ViS2l0
JywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV2ViS2l0VG9v
bHMnKSkgCiBpbXBvcnQgc2ltcGxlanNvbgogCiAjIFRlc3QgZXhwZWN0YXRpb24gYW5kIG1vZGlm
aWVyIGNvbnN0YW50cy4KQEAgLTUzLDEyICs1MCwyOCBAQCBpbXBvcnQgc2ltcGxlanNvbgogY2xh
c3MgVGVzdEV4cGVjdGF0aW9uczoKICAgICBURVNUX0xJU1QgPSAidGVzdF9leHBlY3RhdGlvbnMu
dHh0IgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RzLCBkaXJlY3RvcnksIHBsYXRmb3Jt
LCBpc19kZWJ1Z19tb2RlLCBpc19saW50X21vZGUsCi0gICAgICAgIHRlc3RzX2FyZV9wcmVzZW50
PVRydWUpOgotICAgICAgICAiIiJSZWFkcyB0aGUgdGVzdCBleHBlY3RhdGlvbnMgZmlsZXMgZnJv
bSB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiIiIgotICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGRp
cmVjdG9yeSwgc2VsZi5URVNUX0xJU1QpCi0gICAgICAgIHNlbGYuX2V4cGVjdGVkX2ZhaWx1cmVz
ID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUocGF0aCwgdGVzdHMsIHBsYXRmb3JtLAotICAgICAgICAg
ICAgaXNfZGVidWdfbW9kZSwgaXNfbGludF9tb2RlLCB0ZXN0c19hcmVfcHJlc2VudD10ZXN0c19h
cmVfcHJlc2VudCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgdGVzdHMsIGV4cGVjdGF0
aW9ucywgdGVzdF9wbGF0Zm9ybV9uYW1lLAorICAgICAgICAgICAgICAgICBpc19kZWJ1Z19tb2Rl
LCBpc19saW50X21vZGUsIHRlc3RzX2FyZV9wcmVzZW50PVRydWUpOgorICAgICAgICAiIiJMb2Fk
cyBhbmQgcGFyc2VzIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBnaXZlbiBpbiB0aGUgc3RyaW5nLgor
ICAgICAgICBBcmdzOgorICAgICAgICAgICAgcG9ydDogaGFuZGxlIHRvIG9iamVjdCBjb250YWlu
aW5nIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgIHRlc3Q6IGxp
c3Qgb2YgYWxsIG9mIHRoZSB0ZXN0IGZpbGVzCisgICAgICAgICAgICBleHBlY3RhdGlvbnM6IHRl
c3QgZXhwZWN0YXRpb25zIGFzIGEgc3RyaW5nCisgICAgICAgICAgICB0ZXN0X3BsYXRmb3JtX25h
bWU6IG5hbWUgb2YgdGhlIHBsYXRmb3JtIHRvIG1hdGNoIGV4cGVjdGF0aW9ucworICAgICAgICAg
ICAgICAgIGFnYWluc3QuIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBkaWZmZXJlbnQgdGhhbgorICAg
ICAgICAgICAgICAgIHBvcnQudGVzdF9wbGF0Zm9ybV9uYW1lKCkgd2hlbiBpc19saW50X21vZGUg
aXMgVHJ1ZS4KKyAgICAgICAgICAgIGlzX2RlYnVnX21vZGU6IHdoZXRoZXIgdG8gdXNlIHRoZSBE
RUJVRyBvciBSRUxFQVNFIG1vZGlmaWVycworICAgICAgICAgICAgICAgIGluIHRoZSBleHBlY3Rh
dGlvbnMKKyAgICAgICAgICAgIGlzX2xpbnRfbW9kZTogSWYgVHJ1ZSwganVzdCBwYXJzZSB0aGUg
ZXhwZWN0YXRpb25zIHN0cmluZworICAgICAgICAgICAgICAgIGxvb2tpbmcgZm9yIGVycm9ycy4K
KyAgICAgICAgICAgIHRlc3RzX2FyZV9wcmVzZW50OiB3aGV0aGVyIHRoZSB0ZXN0IGZpbGVzIGV4
aXN0IGluIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgc3lzdGVtIGFuZCBjYW4gYmUgcHJvYmVk
IGZvci4gVGhpcyBpcyB1c2VmdWwgZm9yIGRpc3Rpbmd1aXNoaW5nCisgICAgICAgICAgICAgICAg
dGVzdCBmaWxlcyBmcm9tIGRpcmVjdG9yaWVzLCBhbmQgaXMgbmVlZGVkIGJ5IHRoZSBMVFRGCisg
ICAgICAgICAgICAgICAgZGFzaGJvYXJkLCB3aGVyZSB0aGUgZmlsZXMgYXJlbid0IGFjdHVhbGx5
IGxvY2FsbHkgcHJlc2VudC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2V4cGVjdGVkX2Zh
aWx1cmVzID0gVGVzdEV4cGVjdGF0aW9uc0ZpbGUocG9ydCwgZXhwZWN0YXRpb25zLAorICAgICAg
ICAgICAgdGVzdHMsIHRlc3RfcGxhdGZvcm1fbmFtZSwgaXNfZGVidWdfbW9kZSwgaXNfbGludF9t
b2RlLAorICAgICAgICAgICAgdGVzdHNfYXJlX3ByZXNlbnQ9dGVzdHNfYXJlX3ByZXNlbnQpCiAK
ICAgICAjIFRPRE8ob2phbik6IEFsbG93IGZvciByZW1vdmluZyBza2lwcGVkIHRlc3RzIHdoZW4g
Z2V0dGluZyB0aGUgbGlzdCBvZgogICAgICMgdGVzdHMgdG8gcnVuLCBidXQgbm90IHdoZW4gZ2V0
dGluZyBtZXRyaWNzLgpAQCAtMjMwLDkgKzI0Myw2IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnNG
aWxlOgogICAgIEVYUEVDVEFUSU9OX09SREVSID0gKFBBU1MsIENSQVNILCBUSU1FT1VULCBNSVNT
SU5HLCBJTUFHRV9QTFVTX1RFWFQsCiAgICAgICAgVEVYVCwgSU1BR0UsIEZBSUwsIFNLSVApCiAK
LSAgICBCQVNFX1BMQVRGT1JNUyA9ICgnbGludXgnLCAnbWFjJywgJ3dpbicpCi0gICAgUExBVEZP
Uk1TID0gQkFTRV9QTEFURk9STVMgKyAoJ3dpbi14cCcsICd3aW4tdmlzdGEnLCAnd2luLTcnKQot
CiAgICAgQlVJTERfVFlQRVMgPSAoJ2RlYnVnJywgJ3JlbGVhc2UnKQogCiAgICAgTU9ESUZJRVJT
ID0geydza2lwJzogU0tJUCwKQEAgLTI1MSwzNyArMjYxLDM0IEBAIGNsYXNzIFRlc3RFeHBlY3Rh
dGlvbnNGaWxlOgogICAgICAgICAgICAgICAgICAgICAnZmFpbCc6IEZBSUwsCiAgICAgICAgICAg
ICAgICAgICAgICdmbGFreSc6IEZMQUtZfQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgs
IGZ1bGxfdGVzdF9saXN0LCBwbGF0Zm9ybSwgaXNfZGVidWdfbW9kZSwKLSAgICAgICAgaXNfbGlu
dF9tb2RlLCBleHBlY3RhdGlvbnNfYXNfc3RyPU5vbmUsIHN1cHByZXNzX2Vycm9ycz1GYWxzZSwK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgZXhwZWN0YXRpb25zLCBmdWxsX3Rlc3RfbGlz
dCwgdGVzdF9wbGF0Zm9ybV9uYW1lLAorICAgICAgICBpc19kZWJ1Z19tb2RlLCBpc19saW50X21v
ZGUsIHN1cHByZXNzX2Vycm9ycz1GYWxzZSwKICAgICAgICAgdGVzdHNfYXJlX3ByZXNlbnQ9VHJ1
ZSk6CiAgICAgICAgICIiIgotICAgICAgICBwYXRoOiBUaGUgcGF0aCB0byB0aGUgZXhwZWN0YXRp
b24gZmlsZS4gQW4gZXJyb3IgaXMgdGhyb3duIGlmIGEgdGVzdCBpcwotICAgICAgICAgICAgbGlz
dGVkIG1vcmUgdGhhbiBvbmNlLgorICAgICAgICBleHBlY3RhdGlvbnM6IENvbnRlbnRzIG9mIHRo
ZSBleHBlY3RhdGlvbnMgZmlsZQogICAgICAgICBmdWxsX3Rlc3RfbGlzdDogVGhlIGxpc3Qgb2Yg
YWxsIHRlc3RzIHRvIGJlIHJ1biBwZW5kaW5nIHByb2Nlc3Npbmcgb2YKICAgICAgICAgICAgIHRo
ZSBleHBlY3Rpb25zIGZvciB0aG9zZSB0ZXN0cy4KLSAgICAgICAgcGxhdGZvcm06IFdoaWNoIHBs
YXRmb3JtIGZyb20gc2VsZi5QTEFURk9STVMgdG8gZmlsdGVyIHRlc3RzIGZvci4KKyAgICAgICAg
dGVzdF9wbGF0Zm9ybV9uYW1lOiBuYW1lIG9mIHRoZSBwbGF0Zm9ybSB0byBtYXRjaCBleHBlY3Rh
dGlvbnMKKyAgICAgICAgICAgIGFnYWluc3QuIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBkaWZmZXJl
bnQgdGhhbgorICAgICAgICAgICAgcG9ydC50ZXN0X3BsYXRmb3JtX25hbWUoKSB3aGVuIGlzX2xp
bnRfbW9kZSBpcyBUcnVlLgogICAgICAgICBpc19kZWJ1Z19tb2RlOiBXaGV0aGVyIHdlIHRlc3Rp
bmcgYSB0ZXN0X3NoZWxsIGJ1aWx0IGRlYnVnIG1vZGUuCiAgICAgICAgIGlzX2xpbnRfbW9kZTog
V2hldGhlciB0aGlzIGlzIGp1c3QgbGludGluZyB0ZXN0X2V4cGVjYXRhdGlvbnMudHh0LgotICAg
ICAgICBleHBlY3RhdGlvbnNfYXNfc3RyOiBDb250ZW50cyBvZiB0aGUgZXhwZWN0YXRpb25zIGZp
bGUuIFVzZWQgaW5zdGVhZCBvZgotICAgICAgICAgICAgdGhlIHBhdGguIFRoaXMgbWFrZXMgdW5p
dHRlc3Rpbmcgc2FuZS4KICAgICAgICAgc3VwcHJlc3NfZXJyb3JzOiBXaGV0aGVyIHRvIHN1cHBy
ZXNzIGxpbnQgZXJyb3JzLgogICAgICAgICB0ZXN0c19hcmVfcHJlc2VudDogV2hldGhlciB0aGUg
dGVzdCBmaWxlcyBhcmUgcHJlc2VudCBpbiB0aGUgbG9jYWwKICAgICAgICAgICAgIGZpbGVzeXN0
ZW0uIFRoZSBMVFRGIERhc2hib2FyZCB1c2VzIEZhbHNlIGhlcmUgdG8gYXZvaWQgaGF2aW5nIHRv
CiAgICAgICAgICAgICBrZWVwIGEgbG9jYWwgY29weSBvZiB0aGUgdHJlZS4KICAgICAgICAgIiIi
CiAKLSAgICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKLSAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25z
X2FzX3N0ciA9IGV4cGVjdGF0aW9uc19hc19zdHIKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQK
KyAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zCisgICAgICAgIHNlbGYu
X2Z1bGxfdGVzdF9saXN0ID0gZnVsbF90ZXN0X2xpc3QKKyAgICAgICAgc2VsZi5fdGVzdF9wbGF0
Zm9ybV9uYW1lID0gdGVzdF9wbGF0Zm9ybV9uYW1lCisgICAgICAgIHNlbGYuX2lzX2RlYnVnX21v
ZGUgPSBpc19kZWJ1Z19tb2RlCiAgICAgICAgIHNlbGYuX2lzX2xpbnRfbW9kZSA9IGlzX2xpbnRf
bW9kZQogICAgICAgICBzZWxmLl90ZXN0c19hcmVfcHJlc2VudCA9IHRlc3RzX2FyZV9wcmVzZW50
Ci0gICAgICAgIHNlbGYuX2Z1bGxfdGVzdF9saXN0ID0gZnVsbF90ZXN0X2xpc3QKICAgICAgICAg
c2VsZi5fc3VwcHJlc3NfZXJyb3JzID0gc3VwcHJlc3NfZXJyb3JzCiAgICAgICAgIHNlbGYuX2Vy
cm9ycyA9IFtdCiAgICAgICAgIHNlbGYuX25vbl9mYXRhbF9lcnJvcnMgPSBbXQotICAgICAgICBz
ZWxmLl9wbGF0Zm9ybSA9IHNlbGYudG9fdGVzdF9wbGF0Zm9ybV9uYW1lKHBsYXRmb3JtKQotICAg
ICAgICBpZiBzZWxmLl9wbGF0Zm9ybSBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKCJVbmtub3duIHBsYXRmb3JtICclcyciICUgKHBsYXRmb3JtKSkKLSAgICAgICAgc2VsZi5f
aXNfZGVidWdfbW9kZSA9IGlzX2RlYnVnX21vZGUKIAogICAgICAgICAjIE1hcHMgcmVsYXRpdmUg
dGVzdCBwYXRocyBhcyBsaXN0ZWQgaW4gdGhlIGV4cGVjdGF0aW9ucyBmaWxlIHRvIGEKICAgICAg
ICAgIyBsaXN0IG9mIG1hcHMgY29udGFpbmluZyBtb2RpZmllcnMgYW5kIGV4cGVjdGF0aW9ucyBm
b3IgZWFjaCB0aW1lCkBAIC0zMjAsMjcgKzMyNywxMyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25z
RmlsZToKICAgICAgICAgIiIiUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgaXRlcmF0ZWQg
b3Zlci4gQWxsb3dzIGZvciBub3QgY2FyaW5nCiAgICAgICAgIGFib3V0IHdoZXRoZXIgd2UncmUg
aXRlcmF0aW5nIG92ZXIgYSBmaWxlIG9yIGEgbmV3LWxpbmUgc2VwYXJhdGVkCiAgICAgICAgIHN0
cmluZy4iIiIKLSAgICAgICAgaWYgc2VsZi5fZXhwZWN0YXRpb25zX2FzX3N0cjoKLSAgICAgICAg
ICAgIGl0ZXJhYmxlID0gW3ggKyAiXG4iIGZvciB4IGluCi0gICAgICAgICAgICAgICAgc2VsZi5f
ZXhwZWN0YXRpb25zX2FzX3N0ci5zcGxpdCgiXG4iKV0KLSAgICAgICAgICAgICMgU3RyaXAgZmlu
YWwgZW50cnkgaWYgaXQncyBlbXB0eSB0byBhdm9pZCBhZGRlZCBpbiBhbiBleHRyYQotICAgICAg
ICAgICAgIyBuZXdsaW5lLgotICAgICAgICAgICAgaWYgaXRlcmFibGVbbGVuKGl0ZXJhYmxlKSAt
IDFdID09ICJcbiI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhYmxlWzpsZW4oaXRlcmFi
bGUpIC0gMV0KLSAgICAgICAgICAgIHJldHVybiBpdGVyYWJsZQotICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgcmV0dXJuIG9wZW4oc2VsZi5fcGF0aCkKLQotICAgIGRlZiB0b190ZXN0X3BsYXRm
b3JtX25hbWUoc2VsZiwgbmFtZSk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIHRlc3QgZXhwZWN0
YXRpb24gcGxhdGZvcm0gdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGEKLSAgICAgICAgZ2l2ZW4gcGxh
dGZvcm0gbmFtZSwgb3IgTm9uZSBpZiB0aGVyZSBpcyBubyBtYXRjaC4iIiIKLSAgICAgICAgY2hy
b21pdW1fcHJlZml4ID0gJ2Nocm9taXVtLScKLSAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKQot
ICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoY2hyb21pdW1fcHJlZml4KToKLSAgICAgICAgICAg
IG5hbWUgPSBuYW1lW2xlbihjaHJvbWl1bV9wcmVmaXgpOl0KLSAgICAgICAgaWYgbmFtZSBpbiBz
ZWxmLlBMQVRGT1JNUzoKLSAgICAgICAgICAgIHJldHVybiBuYW1lCi0gICAgICAgIHJldHVybiBO
b25lCisgICAgICAgIGl0ZXJhYmxlID0gW3ggKyAiXG4iIGZvciB4IGluCisgICAgICAgICAgICBz
ZWxmLl9leHBlY3RhdGlvbnMuc3BsaXQoIlxuIildCisgICAgICAgICMgU3RyaXAgZmluYWwgZW50
cnkgaWYgaXQncyBlbXB0eSB0byBhdm9pZCBhZGRlZCBpbiBhbiBleHRyYQorICAgICAgICAjIG5l
d2xpbmUuCisgICAgICAgIGlmIGl0ZXJhYmxlWy0xXSA9PSAiXG4iOgorICAgICAgICAgICAgcmV0
dXJuIGl0ZXJhYmxlWzotMV0KKyAgICAgICAgcmV0dXJuIGl0ZXJhYmxlCiAKICAgICBkZWYgZ2V0
X3Rlc3Rfc2V0KHNlbGYsIG1vZGlmaWVyLCBleHBlY3RhdGlvbj1Ob25lLCBpbmNsdWRlX3NraXBz
PVRydWUpOgogICAgICAgICBpZiBleHBlY3RhdGlvbiBpcyBOb25lOgpAQCAtMzk4LDYgKzM5MSwx
MiBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zRmlsZToKICAgICAgICAgICBubwogICAgICAgICAi
IiIKIAorICAgICAgICAjIEZJWE1FIC0gcmVtb3ZlX3BsYXRmb3JtX2Zyb20gZmlsZSB3b3JrZWQg
Ynkgd3JpdGluZyBhIG5ldworICAgICAgICAjIHRlc3RfZXhwZWN0YXRpb25zLnR4dCBmaWxlIG92
ZXIgdGhlIG9sZCBvbmUuIE5vdyB0aGF0IHdlJ3JlIGp1c3QKKyAgICAgICAgIyBwYXJzaW5nIHN0
cmluZ3MsIHdlIG5lZWQgdG8gY2hhbmdlIHRoaXMgdG8gcmV0dXJuIHRoZSBuZXcKKyAgICAgICAg
IyBleHBlY3RhdGlvbnMgc3RyaW5nLgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEV4Y2Vw
dGlvbigncmVtb3ZlX3BsYXRmb3JtX2Zyb21fZmlsZScpCisKICAgICAgICAgbmV3X2ZpbGUgPSBz
ZWxmLl9wYXRoICsgJy5uZXcnCiAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ09yaWdpbmFsIGZpbGU6
ICIlcyInLCBzZWxmLl9wYXRoKQogICAgICAgICBsb2dnaW5nLmRlYnVnKCdOZXcgZmlsZTogIiVz
IicsIG5ld19maWxlKQpAQCAtNDMwLDExICs0MjksMTIgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9u
c0ZpbGU6CiAgICAgICAgICAgICBlbGlmIGFjdGlvbiA9PSBBRERfUExBVEZPUk1TX0VYQ0VQVF9U
SElTOgogICAgICAgICAgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgnOicpCiAgICAgICAgICAg
ICAgICAgbmV3X29wdGlvbnMgPSBwYXJ0c1swXQotICAgICAgICAgICAgICAgIGZvciBwIGluIHNl
bGYuUExBVEZPUk1TOgotICAgICAgICAgICAgICAgICAgICBwID0gcC51cHBlcigpOworICAgICAg
ICAgICAgICAgIGZvciBwIGluIHNlbGYuX3BvcnQudGVzdF9wbGF0Zm9ybV9uYW1lcygpOgorICAg
ICAgICAgICAgICAgICAgICBwID0gcC51cHBlcigpCiAgICAgICAgICAgICAgICAgICAgICMgVGhp
cyBpcyBhIHRlbXAgc29sdXRpb24gZm9yIHJlYmFzZWxpbmluZyB0b29sLgogICAgICAgICAgICAg
ICAgICAgICAjIERvIG5vdCBhZGQgdGFncyBXSU4tNyBhbmQgV0lOLVZJU1RBIHRvIHRlc3QgZXhw
ZWN0YXRpb25zCi0gICAgICAgICAgICAgICAgICAgICMgaWYgdGhlIG9yaWdpbmFsIGxpbmUgZG9l
cyBub3Qgc3BlY2lmeSB0aGUgcGxhdGZvcm0gb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICAj
IGlmIHRoZSBvcmlnaW5hbCBsaW5lIGRvZXMgbm90IHNwZWNpZnkgdGhlIHBsYXRmb3JtCisgICAg
ICAgICAgICAgICAgICAgICMgb3B0aW9uLgogICAgICAgICAgICAgICAgICAgICAjIFRPRE8odmlj
dG9ydyk6IFJlbW92ZSBXSU4tVklTVEEgYW5kIFdJTi03IG9uY2Ugd2UgaGF2ZQogICAgICAgICAg
ICAgICAgICAgICAjIHJlbGlhYmxlIFdpbiA3IGFuZCBXaW4gVmlzdGEgYnVpbGRib3RzIHNldHVw
LgogICAgICAgICAgICAgICAgICAgICBpZiBub3QgcCBpbiAocGxhdGZvcm0udXBwZXIoKSwgJ1dJ
Ti1WSVNUQScsICdXSU4tNycpOgpAQCAtNTE3LDcgKzUxNyw3IEBAIGNsYXNzIFRlc3RFeHBlY3Rh
dGlvbnNGaWxlOgogCiAgICAgICAgIGhhc19hbnlfcGxhdGZvcm0gPSBGYWxzZQogICAgICAgICBm
b3Igb3B0aW9uIGluIG9wdGlvbnM6Ci0gICAgICAgICAgICBpZiBvcHRpb24gaW4gc2VsZi5QTEFU
Rk9STVM6CisgICAgICAgICAgICBpZiBvcHRpb24gaW4gc2VsZi5fcG9ydC50ZXN0X3BsYXRmb3Jt
X25hbWVzKCk6CiAgICAgICAgICAgICAgICAgaGFzX2FueV9wbGF0Zm9ybSA9IFRydWUKICAgICAg
ICAgICAgICAgICBpZiBub3Qgb3B0aW9uID09IHBsYXRmb3JtOgogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUkVNT1ZFX1BMQVRGT1JNCkBAIC01NDcsNyArNTQ3LDcgQEAgY2xhc3MgVGVzdEV4
cGVjdGF0aW9uc0ZpbGU6CiAgICAgICAgIGZvciBvcHRpb24gaW4gb3B0aW9uczoKICAgICAgICAg
ICAgIGlmIG9wdGlvbiBpbiBzZWxmLk1PRElGSUVSUzoKICAgICAgICAgICAgICAgICBtb2RpZmll
cnMuYWRkKG9wdGlvbikKLSAgICAgICAgICAgIGVsaWYgb3B0aW9uIGluIHNlbGYuUExBVEZPUk1T
OgorICAgICAgICAgICAgZWxpZiBvcHRpb24gaW4gc2VsZi5fcG9ydC50ZXN0X3BsYXRmb3JtX25h
bWVzKCk6CiAgICAgICAgICAgICAgICAgaGFzX2FueV9wbGF0Zm9ybSA9IFRydWUKICAgICAgICAg
ICAgIGVsaWYgb3B0aW9uLnN0YXJ0c3dpdGgoJ2J1ZycpOgogICAgICAgICAgICAgICAgIGhhc19i
dWdfaWQgPSBUcnVlCkBAIC01OTAsNyArNTkwLDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc0Zp
bGU6CiAgICAgICAgICAgb3B0aW9uczogbGlzdCBvZiBvcHRpb25zCiAgICAgICAgICIiIgogICAg
ICAgICBmb3Igb3B0IGluIG9wdGlvbnM6Ci0gICAgICAgICAgICBpZiBzZWxmLl9wbGF0Zm9ybS5z
dGFydHN3aXRoKG9wdCk6CisgICAgICAgICAgICBpZiBzZWxmLl90ZXN0X3BsYXRmb3JtX25hbWUu
c3RhcnRzd2l0aChvcHQpOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJl
dHVybiBGYWxzZQogCkBAIC02MzIsNyArNjMyLDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc0Zp
bGU6CiAgICAgICAgICAgICAgICAgICAgICdpbmRlZmluaXRlbHksIHRoZW4gaXQgc2hvdWxkIGJl
IGp1c3QgdGltZW91dC4nLAogICAgICAgICAgICAgICAgICAgICB0ZXN0X2xpc3RfcGF0aCkKIAot
ICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHBhdGhfdXRpbHMubGF5b3V0X3Rl
c3RzX2RpcigpLAorICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3Bv
cnQubGF5b3V0X3Rlc3RzX2RpcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3RfbGlzdF9wYXRoKQogICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5ub3Jt
cGF0aChmdWxsX3BhdGgpCiAgICAgICAgICAgICAjIFdlYktpdCdzIHdheSBvZiBza2lwcGluZyB0
ZXN0cyBpcyB0byBhZGQgYSAtZGlzYWJsZWQgc3VmZml4LgpAQCAtNjYyLDcgKzY2Miw3IEBAIGNs
YXNzIFRlc3RFeHBlY3RhdGlvbnNGaWxlOgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAg
ICAgICBidWlsZF90eXBlID0gJ1JFTEVBU0UnCiAgICAgICAgICAgICBwcmludCAiXG5GQUlMVVJF
UyBGT1IgUExBVEZPUk06ICVzLCBCVUlMRF9UWVBFOiAlcyIgXAotICAgICAgICAgICAgICAgICUg
KHNlbGYuX3BsYXRmb3JtLnVwcGVyKCksIGJ1aWxkX3R5cGUpCisgICAgICAgICAgICAgICAgJSAo
c2VsZi5fdGVzdF9wbGF0Zm9ybV9uYW1lLnVwcGVyKCksIGJ1aWxkX3R5cGUpCiAKICAgICAgICAg
ICAgIGZvciBlcnJvciBpbiBzZWxmLl9ub25fZmF0YWxfZXJyb3JzOgogICAgICAgICAgICAgICAg
IGxvZ2dpbmcuZXJyb3IoZXJyb3IpCkBAIC02OTUsNyArNjk1LDcgQEAgY2xhc3MgVGVzdEV4cGVj
dGF0aW9uc0ZpbGU6CiAgICAgZGVmIF9leHBhbmRfdGVzdHMoc2VsZiwgdGVzdF9saXN0X3BhdGgp
OgogICAgICAgICAiIiJDb252ZXJ0IHRoZSB0ZXN0IHNwZWNpZmljYXRpb24gdG8gYW4gYWJzb2x1
dGUsIG5vcm1hbGl6ZWQKICAgICAgICAgcGF0aCBhbmQgbWFrZSBzdXJlIGRpcmVjdG9yaWVzIGVu
ZCB3aXRoIHRoZSBPUyBwYXRoIHNlcGFyYXRvci4iIiIKLSAgICAgICAgcGF0aCA9IG9zLnBhdGgu
am9pbihwYXRoX3V0aWxzLmxheW91dF90ZXN0c19kaXIoKSwgdGVzdF9saXN0X3BhdGgpCisgICAg
ICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIHRl
c3RfbGlzdF9wYXRoKQogICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKQogICAg
ICAgICBwYXRoID0gc2VsZi5fZml4X2RpcihwYXRoKQogCkluZGV4OiBXZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2ZpbGVzLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3Rlc3RfZmlsZXMucHkJKHJldmlzaW9uIDU0MzY0KQorKysgV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9maWxl
cy5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQCB1bmRlciB0aGF0IGRpcmVjdG9y
eS4iIiIKIAogaW1wb3J0IGdsb2IKIGltcG9ydCBvcwotZnJvbSBwb3J0IGltcG9ydCBwYXRoX3V0
aWxzCiAKICMgV2hlbiBjb2xsZWN0aW5nIHRlc3QgY2FzZXMsIHdlIGluY2x1ZGUgYW55IGZpbGUg
d2l0aCB0aGVzZSBleHRlbnNpb25zLgogX3N1cHBvcnRlZF9maWxlX2V4dGVuc2lvbnMgPSBzZXQo
WycuaHRtbCcsICcuc2h0bWwnLCAnLnhtbCcsICcueGh0bWwnLCAnLnBsJywKQEAgLTQ1LDcgKzQ0
LDcgQEAgX3N1cHBvcnRlZF9maWxlX2V4dGVuc2lvbnMgPSBzZXQoWycuaHRtbAogX3NraXBwZWRf
ZGlyZWN0b3JpZXMgPSBzZXQoWycuc3ZuJywgJ19zdm4nLCAncmVzb3VyY2VzJywgJ3NjcmlwdC10
ZXN0cyddKQogCiAKLWRlZiBnYXRoZXJfdGVzdF9maWxlcyhwYXRocyk6CitkZWYgZ2F0aGVyX3Rl
c3RfZmlsZXMocG9ydCwgcGF0aHMpOgogICAgICIiIkdlbmVyYXRlIGEgc2V0IG9mIHRlc3QgZmls
ZXMgYW5kIHJldHVybiB0aGVtLgogCiAgICAgQXJnczoKQEAgLTU3LDE0ICs1NiwxNCBAQCBkZWYg
Z2F0aGVyX3Rlc3RfZmlsZXMocGF0aHMpOgogICAgIGlmIHBhdGhzOgogICAgICAgICBmb3IgcGF0
aCBpbiBwYXRoczoKICAgICAgICAgICAgICMgSWYgdGhlcmUncyBhbiAqIGluIHRoZSBuYW1lLCBh
c3N1bWUgaXQncyBhIGdsb2IgcGF0dGVybi4KLSAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpv
aW4ocGF0aF91dGlscy5sYXlvdXRfdGVzdHNfZGlyKCksIHBhdGgpCisgICAgICAgICAgICBwYXRo
ID0gb3MucGF0aC5qb2luKHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCBwYXRoKQogICAgICAgICAg
ICAgaWYgcGF0aC5maW5kKCcqJykgPiAtMToKICAgICAgICAgICAgICAgICBmaWxlbmFtZXMgPSBn
bG9iLmdsb2IocGF0aCkKICAgICAgICAgICAgICAgICBwYXRoc190b193YWxrLnVwZGF0ZShmaWxl
bmFtZXMpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHBhdGhzX3RvX3dhbGsu
YWRkKHBhdGgpCiAgICAgZWxzZToKLSAgICAgICAgcGF0aHNfdG9fd2Fsay5hZGQocGF0aF91dGls
cy5sYXlvdXRfdGVzdHNfZGlyKCkpCisgICAgICAgIHBhdGhzX3RvX3dhbGsuYWRkKHBvcnQubGF5
b3V0X3Rlc3RzX2RpcigpKQogCiAgICAgIyBOb3cgd2FsayBhbGwgdGhlIHBhdGhzIHBhc3NlZCBp
biBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCBnZXQgZmlsZW5hbWVzCiAgICAgdGVzdF9maWxlcyA9
IHNldCgpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3No
ZWxsX3RocmVhZC5weQkocmV2aXNpb24gNTQzNjQpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X3NoZWxsX3RocmVhZC5weQko
d29ya2luZyBjb3B5KQpAQCAtNDAsMjEgKzQwLDIyIEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQg
b3MKIGltcG9ydCBRdWV1ZQogaW1wb3J0IHNpZ25hbAotaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9y
dCBzeXMKIGltcG9ydCB0aHJlYWQKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiAKLWZy
b20gcG9ydCBpbXBvcnQgcGF0aF91dGlscwogaW1wb3J0IHRlc3RfZmFpbHVyZXMKIAogCi1kZWYg
cHJvY2Vzc19vdXRwdXQocHJvYywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIHRh
cmdldCwgb3V0cHV0X2Rpcik6CitkZWYgcHJvY2Vzc19vdXRwdXQocG9ydCwgdGVzdF9pbmZvLCB0
ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIHRhcmdldCwgb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAg
ICAgICBjcmFzaCwgdGltZW91dCwgdGVzdF9ydW5fdGltZSwgYWN0dWFsX2NoZWNrc3VtLAorICAg
ICAgICAgICAgICAgICAgIG91dHB1dCwgZXJyb3IpOgogICAgICIiIlJlY2VpdmVzIHRoZSBvdXRw
dXQgZnJvbSBhIHRlc3Rfc2hlbGwgcHJvY2Vzcywgc3ViamVjdHMgaXQgdG8gYSBudW1iZXIKICAg
ICBvZiB0ZXN0cywgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUgdHlwZXMgdGhlIHRlc3Qg
cHJvZHVjZWQuCiAKICAgICBBcmdzOgorICAgICAgcG9ydDogcG9ydC1zcGVjaWZpYyBob29rcwog
ICAgICAgcHJvYzogYW4gYWN0aXZlIHRlc3Rfc2hlbGwgcHJvY2VzcwogICAgICAgdGVzdF9pbmZv
OiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0CiAg
ICAgICB0ZXN0X3R5cGVzOiBsaXN0IG9mIHRlc3QgdHlwZXMgdG8gc3ViamVjdCB0aGUgb3V0cHV0
IHRvCkBAIC02NCw4NCArNjUsMzkgQEAgZGVmIHByb2Nlc3Nfb3V0cHV0KHByb2MsIHRlc3RfaW5m
bywgdGVzdAogCiAgICAgUmV0dXJuczogYSBsaXN0IG9mIGZhaWx1cmUgb2JqZWN0cyBhbmQgdGlt
ZXMgZm9yIHRoZSB0ZXN0IGJlaW5nIHByb2Nlc3NlZAogICAgICIiIgotICAgIG91dGxpbmVzID0g
W10KLSAgICBleHRyYV9saW5lcyA9IFtdCiAgICAgZmFpbHVyZXMgPSBbXQotICAgIGNyYXNoID0g
RmFsc2UKIAogICAgICMgU29tZSB0ZXN0IGFyZ3MsIHN1Y2ggYXMgdGhlIGltYWdlIGhhc2gsIG1h
eSBiZSBhZGRlZCBvciBjaGFuZ2VkIG9uIGEKICAgICAjIHRlc3QtYnktdGVzdCBiYXNpcy4KICAg
ICBsb2NhbF90ZXN0X2FyZ3MgPSBjb3B5LmNvcHkodGVzdF9hcmdzKQogCi0gICAgc3RhcnRfdGlt
ZSA9IHRpbWUudGltZSgpCi0KLSAgICBsaW5lID0gcHJvYy5zdGRvdXQucmVhZGxpbmUoKQorICAg
IGxvY2FsX3Rlc3RfYXJncy5oYXNoID0gYWN0dWFsX2NoZWNrc3VtCiAKLSAgICAjIE9ubHkgc3Rh
cnQgc2F2aW5nIG91dHB1dCBsaW5lcyBvbmNlIHdlJ3ZlIGxvYWRlZCB0aGUgVVJMIGZvciB0aGUg
dGVzdC4KLSAgICB1cmwgPSBOb25lCi0gICAgdGVzdF9zdHJpbmcgPSB0ZXN0X2luZm8udXJpLnN0
cmlwKCkKLQotICAgIHdoaWxlIGxpbmUucnN0cmlwKCkgIT0gIiNFT0YiOgotICAgICAgICAjIE1h
a2Ugc3VyZSB3ZSBoYXZlbid0IGNyYXNoZWQuCi0gICAgICAgIGlmIGxpbmUgPT0gJycgYW5kIHBy
b2MucG9sbCgpIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3Rf
ZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkpCi0KLSAgICAgICAgICAgICMgVGhpcyBpcyBoZXggY29k
ZSAweGMwMDAwMDFkLCB3aGljaCBpcyB1c2VkIGZvciBhYnJ1cHQKLSAgICAgICAgICAgICMgdGVy
bWluYXRpb24uIFRoaXMgaGFwcGVucyBpZiB3ZSBoaXQgY3RybCtjIGZyb20gdGhlIHByb21wdCBh
bmQKLSAgICAgICAgICAgICMgd2UgaGFwcGVuIHRvIGJlIHdhaXRpbmcgb24gdGhlIHRlc3Rfc2hl
bGwuCi0gICAgICAgICAgICAjIHNkb3lvbjogTm90IHN1cmUgZm9yIHdoaWNoIE9TIGFuZCBpbiB3
aGF0IGNpcmN1bXN0YW5jZXMgdGhlCi0gICAgICAgICAgICAjIGFib3ZlIGNvZGUgaXMgdmFsaWQu
IFdoYXQgd29ya3MgZm9yIG1lIHVuZGVyIExpbnV4IHRvIGRldGVjdAotICAgICAgICAgICAgIyBj
dHJsK2MgaXMgZm9yIHRoZSBzdWJwcm9jZXNzIHJldHVybmNvZGUgdG8gYmUgbmVnYXRpdmUgU0lH
SU5ULgotICAgICAgICAgICAgIyBBbmQgdGhhdCBhZ3JlZXMgd2l0aCB0aGUgc3VicHJvY2VzcyBk
b2N1bWVudGF0aW9uLgotICAgICAgICAgICAgaWYgKC0xMDczNzQxNTEwID09IHByb2MucmV0dXJu
Y29kZSBvcgotICAgICAgICAgICAgICAgIC0gc2lnbmFsLlNJR0lOVCA9PSBwcm9jLnJldHVybmNv
ZGUpOgotICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0Ci0gICAgICAgICAg
ICBjcmFzaCA9IFRydWUKLSAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgIyBEb24ndCBpbmNs
dWRlICNVUkwgbGluZXMgaW4gb3VyIG91dHB1dAotICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgo
IiNVUkw6Iik6Ci0gICAgICAgICAgICB1cmwgPSBsaW5lLnJzdHJpcCgpWzU6XQotICAgICAgICAg
ICAgaWYgdXJsICE9IHRlc3Rfc3RyaW5nOgotICAgICAgICAgICAgICAgIGxvZ2dpbmcuZmF0YWwo
IlRlc3QgZ290IG91dCBvZiBzeW5jOlxufCVzfFxufCVzfCIgJQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHVybCwgdGVzdF9zdHJpbmcpKQotICAgICAgICAgICAgICAgIHJhaXNlIEFz
c2VydGlvbkVycm9yKCJ0ZXN0IG91dCBvZiBzeW5jIikKLSAgICAgICAgZWxpZiBsaW5lLnN0YXJ0
c3dpdGgoIiNNRDU6Iik6Ci0gICAgICAgICAgICBsb2NhbF90ZXN0X2FyZ3MuaGFzaCA9IGxpbmUu
cnN0cmlwKClbNTpdCi0gICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCIjVEVTVF9USU1FRF9P
VVQiKToKLSAgICAgICAgICAgICMgVGVzdCB0aW1lZCBvdXQsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRv
IHJlYWQgdW50aWwgI0VPRi4KLSAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1
cmVzLkZhaWx1cmVUaW1lb3V0KCkpCi0gICAgICAgIGVsaWYgdXJsOgotICAgICAgICAgICAgb3V0
bGluZXMuYXBwZW5kKGxpbmUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBleHRyYV9saW5l
cy5hcHBlbmQobGluZSkKLQotICAgICAgICBsaW5lID0gcHJvYy5zdGRvdXQucmVhZGxpbmUoKQot
Ci0gICAgZW5kX3Rlc3RfdGltZSA9IHRpbWUudGltZSgpCi0KLSAgICBpZiBsZW4oZXh0cmFfbGlu
ZXMpOgotICAgICAgICBleHRyYSA9ICIiLmpvaW4oZXh0cmFfbGluZXMpCi0gICAgICAgIGlmIGNy
YXNoOgotICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RhY2t0cmFjZSBmb3IgJXM6XG4lcyIg
JSAodGVzdF9zdHJpbmcsIGV4dHJhKSkKLSAgICAgICAgICAgICMgU3RyaXAgb2ZmICJmaWxlOi8v
IiBzaW5jZSBSZWxhdGl2ZVRlc3RGaWxlbmFtZSBleHBlY3RzCi0gICAgICAgICAgICAjIGZpbGVz
eXN0ZW0gcGF0aHMuCi0gICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvdXRwdXRf
ZGlyLAotICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0
ZXN0X3N0cmluZ1s3Ol0pKQotICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0
KGZpbGVuYW1lKVswXSArICItc3RhY2sudHh0IgotICAgICAgICAgICAgcGF0aF91dGlscy5tYXli
ZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKVswXSkKLSAgICAgICAgICAg
IG9wZW4oZmlsZW5hbWUsICJ3YiIpLndyaXRlKGV4dHJhKQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgbG9nZ2luZy5kZWJ1ZygiUHJldmlvdXMgdGVzdCBvdXRwdXQgZXh0cmEgbGluZXMgYWZ0
ZXIgZHVtcDpcbiVzIiAlCi0gICAgICAgICAgICAgICAgZXh0cmEpCisgICAgaWYgY3Jhc2g6Cisg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaCgpKQorICAg
IGlmIHRpbWVvdXQ6CisgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1
cmVUaW1lb3V0KCkpCisKKyAgICBpZiBjcmFzaDoKKyAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3Rh
Y2t0cmFjZSBmb3IgJXM6XG4lcyIgJSAodGVzdF9pbmZvLmZpbGVuYW1lLCBlcnJvcikpCisgICAg
ICAgICMgU3RyaXAgb2ZmICJmaWxlOi8vIiBzaW5jZSBSZWxhdGl2ZVRlc3RGaWxlbmFtZSBleHBl
Y3RzCisgICAgICAgICMgZmlsZXN5c3RlbSBwYXRocy4KKyAgICAgICAgZmlsZW5hbWUgPSBvcy5w
YXRoLmpvaW4ob3V0cHV0X2RpciwgdGVzdF9pbmZvLmZpbGVuYW1lKQorICAgICAgICBmaWxlbmFt
ZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdICsgIi1zdGFjay50eHQiCisgICAgICAg
IHBvcnQubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxlbmFtZSlbMF0pCisg
ICAgICAgIG9wZW4oZmlsZW5hbWUsICJ3YiIpLndyaXRlKGVycm9yKQorICAgIGVsc2U6CisgICAg
ICAgIGxvZ2dpbmcuZGVidWcoIlByZXZpb3VzIHRlc3Qgb3V0cHV0IGV4dHJhIGxpbmVzIGFmdGVy
IGR1bXA6XG4lcyIgJQorICAgICAgICAgICAgZXJyb3IpCiAKICAgICAjIENoZWNrIHRoZSBvdXRw
dXQgYW5kIHNhdmUgdGhlIHJlc3VsdHMuCisgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAg
ICAgdGltZV9mb3JfZGlmZnMgPSB7fQogICAgIGZvciB0ZXN0X3R5cGUgaW4gdGVzdF90eXBlczoK
ICAgICAgICAgc3RhcnRfZGlmZl90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgbmV3X2ZhaWx1
cmVzID0gdGVzdF90eXBlLmNvbXBhcmVfb3V0cHV0KHRlc3RfaW5mby5maWxlbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2MsICcnLmpvaW4o
b3V0bGluZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9jYWxfdGVzdF9hcmdzLCB0YXJnZXQpCisgICAgICAgIG5ld19mYWlsdXJlcyA9IHRlc3Rf
dHlwZS5jb21wYXJlX291dHB1dChwb3J0LCB0ZXN0X2luZm8uZmlsZW5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGxvY2FsX3Rlc3Rf
YXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRh
cmdldCkKICAgICAgICAgIyBEb24ndCBhZGQgYW55IG1vcmUgZmFpbHVyZXMgaWYgd2UgYWxyZWFk
eSBoYXZlIGEgY3Jhc2gsIHNvIHdlIGRvbid0CiAgICAgICAgICMgZG91YmxlLXJlcG9ydCB0aG9z
ZSB0ZXN0cy4gV2UgZG8gZG91YmxlLXJlcG9ydCBmb3IgdGltZW91dHMgc2luY2UKICAgICAgICAg
IyB3ZSBzdGlsbCB3YW50IHRvIHNlZSB0aGUgdGV4dCBhbmQgaW1hZ2Ugb3V0cHV0LgpAQCAtMTUw
LDI4ICsxMDYsMTEgQEAgZGVmIHByb2Nlc3Nfb3V0cHV0KHByb2MsIHRlc3RfaW5mbywgdGVzdAog
ICAgICAgICB0aW1lX2Zvcl9kaWZmc1t0ZXN0X3R5cGUuX19jbGFzc19fLl9fbmFtZV9fXSA9ICgK
ICAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90aW1lKQogCi0gICAgdG90YWxf
dGltZV9mb3JfYWxsX2RpZmZzID0gdGltZS50aW1lKCkgLSBlbmRfdGVzdF90aW1lCi0gICAgdGVz
dF9ydW5fdGltZSA9IGVuZF90ZXN0X3RpbWUgLSBzdGFydF90aW1lCisgICAgdG90YWxfdGltZV9m
b3JfYWxsX2RpZmZzID0gdGltZS50aW1lKCkgLSBzdGFydF9kaWZmX3RpbWUKICAgICByZXR1cm4g
VGVzdFN0YXRzKHRlc3RfaW5mby5maWxlbmFtZSwgZmFpbHVyZXMsIHRlc3RfcnVuX3RpbWUsCiAg
ICAgICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcywgdGltZV9mb3JfZGlmZnMpCiAKIAotZGVm
IHN0YXJ0X3Rlc3Rfc2hlbGwoY29tbWFuZCwgYXJncyk6Ci0gICAgIiIiUmV0dXJucyB0aGUgcHJv
Y2VzcyBmb3IgYSBuZXcgdGVzdF9zaGVsbCBzdGFydGVkIGluIGxheW91dC10ZXN0cyBtb2RlLgot
ICAgICIiIgotICAgIGNtZCA9IFtdCi0gICAgIyBIb29rIGZvciBpbmplY3RpbmcgdmFsZ3JpbmQg
b3Igb3RoZXIgcnVudGltZSBpbnN0cnVtZW50YXRpb24sCi0gICAgIyB1c2VkIGJ5IGUuZy4gdG9v
bHMvdmFsZ3JpbmQvdmFsZ3JpbmRfdGVzdHMucHkuCi0gICAgd3JhcHBlciA9IG9zLmVudmlyb24u
Z2V0KCJCUk9XU0VSX1dSQVBQRVIiLCBOb25lKQotICAgIGlmIHdyYXBwZXIgIT0gTm9uZToKLSAg
ICAgICAgY21kICs9IFt3cmFwcGVyXQotICAgIGNtZCArPSBjb21tYW5kICsgWyctLWxheW91dC10
ZXN0cyddICsgYXJncwotICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGNtZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0KLQogY2xhc3MgVGVzdFN0YXRz
OgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBmYWlsdXJlcywgdGVzdF9ydW5f
dGltZSwKQEAgLTE4NiwxNyArMTI1LDE5IEBAIGNsYXNzIFRlc3RTdGF0czoKIGNsYXNzIFNpbmds
ZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgIiIiVGhyZWFkIHdyYXBwZXIgZm9y
IHJ1bm5pbmcgYSBzaW5nbGUgdGVzdCBmaWxlLiIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IHRlc3Rfc2hlbGxfY29tbWFuZCwgc2hlbGxfYXJncywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLAot
ICAgICAgICB0ZXN0X2FyZ3MsIHRhcmdldCwgb3V0cHV0X2Rpcik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnQsIGltYWdlX3BhdGgsIHNoZWxsX2FyZ3MsIHRlc3RfaW5mbywKKyAgICAgICAg
dGVzdF90eXBlcywgdGVzdF9hcmdzLCB0YXJnZXQsIG91dHB1dF9kaXIpOgogICAgICAgICAiIiIK
ICAgICAgICAgQXJnczoKKyAgICAgICAgICBwb3J0OiBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQt
c3BlY2lmaWMgaG9va3MKICAgICAgICAgICB0ZXN0X2luZm86IE9iamVjdCBjb250YWluaW5nIHRo
ZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKICAgICAgICAgICBvdXRwdXRfZGlyOiBE
aXJlY3RvcnkgdG8gcHV0IGNyYXNoIHN0YWNrcyBpbnRvLgogICAgICAgICAgIFNlZSBUZXN0U2hl
bGxUaHJlYWQgZm9yIGRvY3VtZW50YXRpb24gb2YgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuCiAg
ICAgICAgICIiIgogCiAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKLSAg
ICAgICAgc2VsZi5fY29tbWFuZCA9IHRlc3Rfc2hlbGxfY29tbWFuZAorICAgICAgICBzZWxmLl9w
b3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9pbWFnZV9wYXRoID0gaW1hZ2VfcGF0aAogICAgICAg
ICBzZWxmLl9zaGVsbF9hcmdzID0gc2hlbGxfYXJncwogICAgICAgICBzZWxmLl90ZXN0X2luZm8g
PSB0ZXN0X2luZm8KICAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IHRlc3RfdHlwZXMKQEAgLTIw
NSwxMCArMTQ2LDE4IEBAIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCkK
ICAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKIAogICAgIGRlZiBydW4oc2Vs
Zik6Ci0gICAgICAgIHByb2MgPSBzdGFydF90ZXN0X3NoZWxsKHNlbGYuX2NvbW1hbmQsIHNlbGYu
X3NoZWxsX2FyZ3MgKwotICAgICAgICAgICAgWyItLXRpbWUtb3V0LW1zPSIgKyBzZWxmLl90ZXN0
X2luZm8udGltZW91dCwgc2VsZi5fdGVzdF9pbmZvLnVyaV0pCi0gICAgICAgIHNlbGYuX3Rlc3Rf
c3RhdHMgPSBwcm9jZXNzX291dHB1dChwcm9jLCBzZWxmLl90ZXN0X2luZm8sCi0gICAgICAgICAg
ICBzZWxmLl90ZXN0X3R5cGVzLCBzZWxmLl90ZXN0X2FyZ3MsIHNlbGYuX3RhcmdldCwgc2VsZi5f
b3V0cHV0X2RpcikKKyAgICAgICAgZHJpdmVyID0gc2VsZi5fcG9ydC5zdGFydF90ZXN0X2RyaXZl
cihzZWxmLl9pbWFnZV9wYXRoLAorICAgICAgICAgICAgc2VsZi5fc2hlbGxfYXJncykKKyAgICAg
ICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICBjcmFzaCwgdGltZW91dCwgYWN0dWFsX2No
ZWNrc3VtLCBvdXRwdXQsIGVycm9yID0gXAorICAgICAgICAgICAgZHJpdmVyLnJ1bl90ZXN0KHRl
c3RfaW5mby51cmkuc3RyaXAoKSwgdGVzdF9pbmZvLnRpbWVvdXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdF9pbmZvLmltYWdlX2hhc2gpCisgICAgICAgIGVuZCA9IHRpbWUudGlt
ZSgpCisgICAgICAgIHNlbGYuX3Rlc3Rfc3RhdHMgPSBwcm9jZXNzX291dHB1dChzZWxmLl9wb3J0
LAorICAgICAgICAgICAgc2VsZi5fdGVzdF9pbmZvLCBzZWxmLl90ZXN0X3R5cGVzLCBzZWxmLl90
ZXN0X2FyZ3MsCisgICAgICAgICAgICBzZWxmLl90YXJnZXQsIHNlbGYuX291dHB1dF9kaXIsIGNy
YXNoLCB0aW1lb3V0LCBlbmQgLSBzdGFydCwKKyAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bSwg
b3V0cHV0LCBlcnJvcikKKyAgICAgICAgZHJpdmVyLnN0b3AoKQogCiAgICAgZGVmIGdldF90ZXN0
X3N0YXRzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9zdGF0cwpAQCAtMjE2LDE3
ICsxNjUsMTYgQEAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKQogCiBj
bGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgZmlsZW5hbWVfbGlzdF9xdWV1ZSwgcmVzdWx0X3F1ZXVlLCB0ZXN0X3NoZWxsX2Nv
bW1hbmQsCi0gICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMsIHRlc3RfYXJncywgc2hlbGxfYXJn
cywgb3B0aW9ucyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGZpbGVuYW1lX2xpc3Rf
cXVldWUsIHJlc3VsdF9xdWV1ZSwKKyAgICAgICAgICAgICAgICAgdGVzdF90eXBlcywgdGVzdF9h
cmdzLCBpbWFnZV9wYXRoLCBzaGVsbF9hcmdzLCBvcHRpb25zKToKICAgICAgICAgIiIiSW5pdGlh
bGl6ZSBhbGwgdGhlIGxvY2FsIHN0YXRlIGZvciB0aGlzIHRlc3Qgc2hlbGwgdGhyZWFkLgogCiAg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgcG9ydDogaW50ZXJmYWNlIHRvIHBvcnQtc3BlY2lmaWMg
aG9va3MKICAgICAgICAgICBmaWxlbmFtZV9saXN0X3F1ZXVlOiBBIHRocmVhZCBzYWZlIFF1ZXVl
IGNsYXNzIHRoYXQgY29udGFpbnMgbGlzdHMKICAgICAgICAgICAgICAgb2YgdHVwbGVzIG9mIChm
aWxlbmFtZSwgdXJpKSBwYWlycy4KICAgICAgICAgICByZXN1bHRfcXVldWU6IEEgdGhyZWFkIHNh
ZmUgUXVldWUgY2xhc3MgdGhhdCB3aWxsIGNvbnRhaW4gdHVwbGVzIG9mCiAgICAgICAgICAgICAg
ICh0ZXN0LCBmYWlsdXJlIGxpc3RzKSBmb3IgdGhlIHRlc3QgcmVzdWx0cy4KLSAgICAgICAgICB0
ZXN0X3NoZWxsX2NvbW1hbmQ6IEEgbGlzdCBzcGVjaWZ5aW5nIHRoZSBjb21tYW5kK2FyZ3MgZm9y
Ci0gICAgICAgICAgICAgIHRlc3Rfc2hlbGwKICAgICAgICAgICB0ZXN0X3R5cGVzOiBBIGxpc3Qg
b2YgVGVzdFR5cGUgb2JqZWN0cyB0byBydW4gdGhlIHRlc3Qgb3V0cHV0CiAgICAgICAgICAgICAg
IGFnYWluc3QuCiAgICAgICAgICAgdGVzdF9hcmdzOiBBIFRlc3RBcmd1bWVudHMgb2JqZWN0IHRv
IHBhc3MgdG8gZWFjaCBUZXN0VHlwZS4KQEAgLTIzNiwxMyArMTg0LDE0IEBAIGNsYXNzIFRlc3RT
aGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgICAgICAgcnVuX3dlYmtpdF90
ZXN0czsgdGhleSBhcmUgdHlwaWNhbGx5IHBhc3NlZCB2aWEgdGhlCiAgICAgICAgICAgICAgIHJ1
bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lciBjbGFzcy4iIiIKICAgICAgICAgdGhyZWFkaW5nLlRo
cmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBz
ZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlID0gZmlsZW5hbWVfbGlzdF9xdWV1ZQogICAgICAgICBz
ZWxmLl9yZXN1bHRfcXVldWUgPSByZXN1bHRfcXVldWUKICAgICAgICAgc2VsZi5fZmlsZW5hbWVf
bGlzdCA9IFtdCi0gICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfY29tbWFuZCA9IHRlc3Rfc2hlbGxf
Y29tbWFuZAogICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gdGVzdF90eXBlcwogICAgICAgICBz
ZWxmLl90ZXN0X2FyZ3MgPSB0ZXN0X2FyZ3MKLSAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9wcm9j
ID0gTm9uZQorICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2ltYWdl
X3BhdGggPSBpbWFnZV9wYXRoCiAgICAgICAgIHNlbGYuX3NoZWxsX2FyZ3MgPSBzaGVsbF9hcmdz
CiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX2NhbmNlbGVk
ID0gRmFsc2UKQEAgLTM3OSwxMSArMzI4LDExIEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJl
YWRpbmcuVGhyZWFkKToKICAgICAgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBtZXNzYWdl
KHMpLgogICAgICAgICAgICAgICAgIGVycm9yX3N0ciA9ICdcbicuam9pbihbJyAgJyArIGYubWVz
c2FnZSgpIGZvciBmIGluIGZhaWx1cmVzXSkKICAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVn
KCIlcyAlcyBmYWlsZWQ6XG4lcyIgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKGZpbGVuYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X3N0cikpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWco
IiVzICVzIHBhc3NlZCIgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXRoX3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxl
bmFtZShmaWxlbmFtZSkpKQogICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlLnB1dCgoZmls
ZW5hbWUsIGZhaWx1cmVzKSkKIAogICAgICAgICAgICAgaWYgYmF0Y2hfc2l6ZSA+IDAgYW5kIGJh
dGNoX2NvdW50ID4gYmF0Y2hfc2l6ZToKQEAgLTQwNyw3ICszNTYsNyBAQCBjbGFzcyBUZXN0U2hl
bGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgIFJldHVybjoKICAgICAgICAgICBB
IGxpc3Qgb2YgVGVzdEZhaWx1cmUgb2JqZWN0cyBkZXNjcmliaW5nIHRoZSBlcnJvci4KICAgICAg
ICAgIiIiCi0gICAgICAgIHdvcmtlciA9IFNpbmdsZVRlc3RUaHJlYWQoc2VsZi5fdGVzdF9zaGVs
bF9jb21tYW5kLAorICAgICAgICB3b3JrZXIgPSBTaW5nbGVUZXN0VGhyZWFkKHNlbGYuX3BvcnQs
IHNlbGYuX2ltYWdlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fc2hlbGxfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2lu
Zm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywK
QEAgLTQzMSw3ICszODAsNyBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVh
ZCk6CiAgICAgICAgICAgICAjIHRyYWRlb2ZmIGluIG9yZGVyIHRvIGF2b2lkIGxvc2luZyB0aGUg
cmVzdCBvZiB0aGlzIHRocmVhZCdzCiAgICAgICAgICAgICAjIHJlc3VsdHMuCiAgICAgICAgICAg
ICBsb2dnaW5nLmVycm9yKCdUZXN0IHRocmVhZCBodW5nOiBraWxsaW5nIGFsbCB0ZXN0X3NoZWxs
cycpCi0gICAgICAgICAgICBwYXRoX3V0aWxzLmtpbGxfYWxsX3Rlc3Rfc2hlbGxzKCkKKyAgICAg
ICAgICAgIHdvcmtlci5fZHJpdmVyLnN0b3AoKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAg
IHN0YXRzID0gd29ya2VyLmdldF90ZXN0X3N0YXRzKCkKQEAgLTQ1NCwzMiArNDAzLDIzIEBAIGNs
YXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgICBBIGxpc3Qg
b2YgVGVzdEZhaWx1cmUgb2JqZWN0cyBkZXNjcmliaW5nIHRoZSBlcnJvci4KICAgICAgICAgIiIi
CiAgICAgICAgIHNlbGYuX2Vuc3VyZV90ZXN0X3NoZWxsX2lzX3J1bm5pbmcoKQotICAgICAgICAj
IEFyZ3MgdG8gdGVzdF9zaGVsbCBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mCi0gICAgICAg
ICMgInVyaSB0aW1lb3V0IHBpeGVsX2hhc2giCi0gICAgICAgICMgVGhlIHRpbWVvdXQgYW5kIHBp
eGVsX2hhc2ggYXJlIG9wdGlvbmFsLiAgVGhlIHRpbWVvdXQgaXMgdXNlZCBpZiB0aGlzCi0gICAg
ICAgICMgdGVzdCBoYXMgYSBjdXN0b20gdGltZW91dC4gVGhlIHBpeGVsX2hhc2ggaXMgdXNlZCB0
byBhdm9pZCBkb2luZyBhbgotICAgICAgICAjIGltYWdlIGR1bXAgaWYgdGhlIGNoZWNrc3VtcyBt
YXRjaCwgc28gaXQgc2hvdWxkIGJlIHNldCB0byBhIGJsYW5rCi0gICAgICAgICMgdmFsdWUgaWYg
d2UgYXJlIGdlbmVyYXRpbmcgYSBuZXcgYmFzZWxpbmUuCi0gICAgICAgICMgKE90aGVyd2lzZSwg
YW4gaW1hZ2UgZnJvbSBhIHByZXZpb3VzIHJ1biB3aWxsIGJlIGNvcGllZCBpbnRvCi0gICAgICAg
ICMgdGhlIGJhc2VsaW5lLikKKyAgICAgICAgIyBUaGUgcGl4ZWxfaGFzaCBpcyB1c2VkIHRvIGF2
b2lkIGRvaW5nIGFuIGltYWdlIGR1bXAgaWYgdGhlCisgICAgICAgICMgY2hlY2tzdW1zIG1hdGNo
LCBzbyBpdCBzaG91bGQgYmUgc2V0IHRvIGEgYmxhbmsgdmFsdWUgaWYgd2UKKyAgICAgICAgIyBh
cmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNlbGluZS4gIChPdGhlcndpc2UsIGFuIGltYWdlIGZyb20g
YQorICAgICAgICAjIHByZXZpb3VzIHJ1biB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSBiYXNlbGlu
ZS4pCiAgICAgICAgIGltYWdlX2hhc2ggPSB0ZXN0X2luZm8uaW1hZ2VfaGFzaAogICAgICAgICBp
ZiBpbWFnZV9oYXNoIGFuZCBzZWxmLl90ZXN0X2FyZ3MubmV3X2Jhc2VsaW5lOgogICAgICAgICAg
ICAgaW1hZ2VfaGFzaCA9ICIiCi0gICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRpbi53
cml0ZSgoIiVzICVzICVzXG4iICUKLSAgICAgICAgICAgICh0ZXN0X2luZm8udXJpLCB0ZXN0X2lu
Zm8udGltZW91dCwgaW1hZ2VfaGFzaCkpKQotCi0gICAgICAgICMgSWYgdGhlIHRlc3Qgc2hlbGwg
aXMgZGVhZCwgdGhlIGFib3ZlIG1heSBjYXVzZSBhbiBJT0Vycm9yIGFzIHdlCi0gICAgICAgICMg
dHJ5IHRvIHdyaXRlIG9udG8gdGhlIGJyb2tlbiBwaXBlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0
ZXN0IGZvcgotICAgICAgICAjIHRoaXMgdGVzdCBzaGVsbCBwcm9jZXNzLCB0aGFuIHRoZSB0ZXN0
IHNoZWxsIGRpZCBub3QKLSAgICAgICAgIyBzdWNjZXNzZnVsbHkgc3RhcnQuIElmIHRoaXMgaXMg
bm90IHRoZSBmaXJzdCB0ZXN0LCB0aGVuIHRoZQotICAgICAgICAjIHByZXZpb3VzIHRlc3RzIGhh
dmUgY2F1c2VkIHNvbWUga2luZCBvZiBkZWxheWVkIGNyYXNoLiBXZSBkb24ndAotICAgICAgICAj
IHRyeSB0byByZWNvdmVyIGhlcmUuCi0gICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRp
bi5mbHVzaCgpCi0KLSAgICAgICAgc3RhdHMgPSBwcm9jZXNzX291dHB1dChzZWxmLl90ZXN0X3No
ZWxsX3Byb2MsIHRlc3RfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll90ZXN0X3R5cGVzLCBzZWxmLl90ZXN0X2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fb3B0aW9ucy50YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkKKyAgICAgICAgc3RhcnQgPSB0aW1l
LnRpbWUoKQorICAgICAgICBjcmFzaCwgdGltZW91dCwgYWN0dWFsX2NoZWNrc3VtLCBvdXRwdXQs
IGVycm9yID0gXAorICAgICAgICAgICBzZWxmLl9kcml2ZXIucnVuX3Rlc3QodGVzdF9pbmZvLnVy
aSwgdGVzdF9pbmZvLnRpbWVvdXQsIGltYWdlX2hhc2gpCisgICAgICAgIGVuZCA9IHRpbWUudGlt
ZSgpCisKKyAgICAgICAgc3RhdHMgPSBwcm9jZXNzX291dHB1dChzZWxmLl9wb3J0LCB0ZXN0X2lu
Zm8sIHNlbGYuX3Rlc3RfdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fdGVzdF9hcmdzLCBzZWxmLl9vcHRpb25zLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCBjcmFzaCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LCBlbmQgLSBzdGFydCwgYWN0dWFsX2No
ZWNrc3VtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgZXJyb3IpCiAK
ICAgICAgICAgc2VsZi5fdGVzdF9zdGF0cy5hcHBlbmQoc3RhdHMpCiAgICAgICAgIHJldHVybiBz
dGF0cy5mYWlsdXJlcwpAQCAtNDg5LDIzICs0MjksMTIgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFk
KHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICBydW5uaW5nIHRlc3RzIHNpbmdseSwgc2luY2Ug
dGhvc2UgZWFjaCBzdGFydCBhIHNlcGFyYXRlIHRlc3Qgc2hlbGwgaW4KICAgICAgICAgdGhlaXIg
b3duIHRocmVhZC4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIChub3Qgc2VsZi5fdGVzdF9zaGVs
bF9wcm9jIG9yCi0gICAgICAgICAgICBzZWxmLl90ZXN0X3NoZWxsX3Byb2MucG9sbCgpIGlzIG5v
dCBOb25lKToKLSAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYyA9IHN0YXJ0X3Rlc3Rf
c2hlbGwoc2VsZi5fdGVzdF9zaGVsbF9jb21tYW5kLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbF9hcmdzKQorICAgICAgICBp
ZiAobm90IHNlbGYuX2RyaXZlciBvciBzZWxmLl9kcml2ZXIucG9sbCgpIGlzIG5vdCBOb25lKToK
KyAgICAgICAgICAgIHNlbGYuX2RyaXZlciA9IHNlbGYuX3BvcnQuc3RhcnRfZHJpdmVyKAorICAg
ICAgICAgICAgICAgIHNlbGYuX2ltYWdlX3BhdGgsIHNlbGYuX3NoZWxsX2FyZ3MpCiAKICAgICBk
ZWYgX2tpbGxfdGVzdF9zaGVsbChzZWxmKToKICAgICAgICAgIiIiS2lsbCB0aGUgdGVzdCBzaGVs
bCBwcm9jZXNzIGlmIGl0J3MgcnVubmluZy4iIiIKLSAgICAgICAgaWYgc2VsZi5fdGVzdF9zaGVs
bF9wcm9jOgotICAgICAgICAgICAgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnN0ZGluLmNsb3NlKCkK
LSAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5zdGRvdXQuY2xvc2UoKQotICAgICAg
ICAgICAgaWYgc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBz
ZWxmLl90ZXN0X3NoZWxsX3Byb2Muc3RkZXJyLmNsb3NlKCkKLSAgICAgICAgICAgIGlmIChzeXMu
cGxhdGZvcm0gbm90IGluICgnd2luMzInLCAnY3lnd2luJykgYW5kCi0gICAgICAgICAgICAgICAg
bm90IHNlbGYuX3Rlc3Rfc2hlbGxfcHJvYy5wb2xsKCkpOgotICAgICAgICAgICAgICAgICMgQ2xv
c2luZyBzdGRpbi9zdGRvdXQvc3RkZXJyIGhhbmdzIHNvbWV0aW1lcyBvbiBPUyBYLgotICAgICAg
ICAgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3IikKLSAgICAgICAgICAgICAgICBz
dWJwcm9jZXNzLlBvcGVuKFsia2lsbCIsICItOSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIoc2VsZi5fdGVzdF9zaGVsbF9wcm9jLnBpZCldLCBzdGRlcnI9bnVsbCkKLSAg
ICAgICAgICAgICAgICBudWxsLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2hlbGxf
cHJvYyA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fZHJpdmVyOgorICAgICAgICAgICAgc2VsZi5f
ZHJpdmVyLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQpJbmRleDogV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9fX2luaXRfXy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L19faW5pdF9fLnB5CShyZXZpc2lvbiA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDI0ICsyNywyNSBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotIiIiUGxh
dGZvcm0tc3BlY2lmaWMgdXRpbGl0aWVzIGFuZCBwc2V1ZG8tY29uc3RhbnRzCisiIiJQb3J0LXNw
ZWNpZmljIGVudHJ5cG9pbnRzIGZvciB0aGUgbGF5b3V0IHRlc3RzIHRlc3QgaW5mcmFzdHJ1Y3R1
cmUuIiIiCiAKLUFueSBmdW5jdGlvbnMgd2hvc2UgaW1wbGVtZW50YXRpb25zIG9yIHZhbHVlcyBk
aWZmZXIgZnJvbSBvbmUgcGxhdGZvcm0gdG8KLWFub3RoZXIgc2hvdWxkIGJlIGRlZmluZWQgaW4g
dGhlaXIgcmVzcGVjdGl2ZSA8cGxhdGZvcm0+LnB5Ci1tb2R1bGVzLiBUaGUgYXBwcm9wcmlhdGUg
b25lIG9mIHRob3NlIHdpbGwgYmUgaW1wb3J0ZWQgaW50byB0aGlzIG1vZHVsZSB0bwotcHJvdmlk
ZSBjYWxsZXJzIHdpdGggYSBjb21tb24sIHBsYXRmb3JtLWluZGVwZW5kZW50IGludGVyZmFjZS4K
IAotVGhpcyBmaWxlIHNob3VsZCBvbmx5IGV2ZXIgYmUgaW1wb3J0ZWQgYnkgbGF5b3V0X3BhY2th
Z2UucGF0aF91dGlscy4KLSIiIgorZGVmIGdldChwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25l
KToKKyAgICAiIiJSZXR1cm5zIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlIFBvcnQgaW50ZXJm
YWNlLiBJZgorICAgIHBvcnRfbmFtZSBpcyBOb25lLCB0aGlzIHJvdXRpbmUgYXR0ZW1wdHMgdG8g
Z3Vlc3MgYXQgdGhlIG1vc3QKKyAgICBhcHByb3ByaWF0ZSBwb3J0IG9uIHRoaXMgcGxhdGZvcm0u
IiIiCisgICAgcG9ydF90b191c2UgPSBwb3J0X25hbWUKKyAgICBpZiBwb3J0X3RvX3VzZSBpcyBO
b25lOgorICAgICAgICBwb3J0X3RvX3VzZSA9ICdjaHJvbWl1bS1tYWMnCiAKLWltcG9ydCBzeXMK
KyAgICBpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdjaHJvbWl1bS1tYWMnKToKKyAgICAgICAg
aW1wb3J0IGNocm9taXVtX21hYworICAgICAgICByZXR1cm4gY2hyb21pdW1fbWFjLkNocm9taXVt
TWFjUG9ydChwb3J0X25hbWUsIG9wdGlvbnMpCisgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3
aXRoKCdjaHJvbWl1bS1saW51eCcpOgorICAgICAgICBpbXBvcnQgY2hyb21pdW1fbGludXgKKyAg
ICAgICAgcmV0dXJuIGNocm9taXVtX2xpbnV4LkNocm9taXVtTGludXhQb3J0KHBvcnRfbmFtZSwg
b3B0aW9ucykKKyAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0d2l0aCgnY2hyb21pdW0td2luJyk6
CisgICAgICAgIGltcG9ydCBjaHJvbWl1bV93aW4KKyAgICAgICAgcmV0dXJuIGNocm9taXVtX3dp
bi5DaHJvbWl1bVdpblBvcnQocG9ydF9uYW1lLCBvcHRpb25zKQogCi0jIFdlIG1heSBub3Qgc3Vw
cG9ydCB0aGUgdmVyc2lvbiBvZiBQeXRob24gdGhhdCBhIHVzZXIgaGFzIGluc3RhbGxlZCAoQ3ln
d2luCi0jIGVzcGVjaWFsbHkgaGFzIGhhZCBwcm9ibGVtcyksIGJ1dCB3ZSdsbCBhbGxvdyB0aGUg
cGxhdGZvcm0gdXRpbHMgdG8gYmUKLSMgaW5jbHVkZWQgaW4gYW55IGNhc2Ugc28gd2UgZG9uJ3Qg
Z2V0IGFuIGltcG9ydCBlcnJvci4KLWlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4z
MicpOgotICAgIGZyb20gY2hyb21pdW1fd2luIGltcG9ydCAqCi1lbGlmIHN5cy5wbGF0Zm9ybSA9
PSAnZGFyd2luJzoKLSAgICBmcm9tIGNocm9taXVtX21hYyBpbXBvcnQgKgotZWxpZiBzeXMucGxh
dGZvcm0gaW4gKCdsaW51eCcsICdsaW51eDInLCAnZnJlZWJzZDcnLCAnb3BlbmJzZDQnKToKLSAg
ICBmcm9tIGNocm9taXVtX2xpbnV4IGltcG9ydCAqCisgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF
cnJvcigndW5zdXBwb3J0ZWQgcG9ydDogJXMnICUgcG9ydF9uYW1lKQpJbmRleDogV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkJKHJldmlzaW9uIDU0MzY0KQorKysgV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2
ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE5ICszNywxOSBAQCBpbXBvcnQgc3VicHJvY2Vz
cwogaW1wb3J0IHN5cwogCiBpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQotaW1wb3J0IHBhdGhfdXRp
bHMKLWltcG9ydCBwb3J0CiAKIAogY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2Vy
dmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1
dF9kaXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgb3V0cHV0X2Rpcik6CiAg
ICAgICAgICIiIkFyZ3M6CisgICAgICAgICAgcG9ydF9vYmo6IGhhbmRsZSB0byB0aGUgcGxhdGZv
cm0tc3BlY2lmaWMgcm91dGluZXMKICAgICAgICAgICBvdXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUg
cGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGRpcmVjdG9yeQogICAgICAgICAiIiIKKyAg
ICAgICAgaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZS5fX2luaXRfXyhzZWxmLCBwb3J0
X29iaikKICAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKICAgICAgICAgc2Vs
Zi5faHR0cGRfcHJvYyA9IE5vbmUKLSAgICAgICAgcGF0aF91dGlscy5tYXliZV9tYWtlX2RpcmVj
dG9yeShvdXRwdXRfZGlyKQorICAgICAgICBwb3J0X29iai5tYXliZV9tYWtlX2RpcmVjdG9yeShv
dXRwdXRfZGlyKQogCiAgICAgICAgIHNlbGYubWFwcGluZ3MgPSBbeydwb3J0JzogODAwMH0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MH0sCkBAIC01OSwxNSArNTksMTQg
QEAgY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVyXwogICAgICAgICAjIFRo
ZSB1cHN0cmVhbSAuY29uZiBmaWxlIGFzc3VtZWQgdGhlIGV4aXN0ZW5jZSBvZiAvdG1wL1dlYktp
dCBmb3IKICAgICAgICAgIyBwbGFjaW5nIGFwYWNoZSBmaWxlcyBsaWtlIHRoZSBsb2NrIGZpbGUg
dGhlcmUuCiAgICAgICAgIHNlbGYuX3J1bnRpbWVfcGF0aCA9IG9zLnBhdGguam9pbigiL3RtcCIs
ICJXZWJLaXQiKQotICAgICAgICBwYXRoX3V0aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYu
X3J1bnRpbWVfcGF0aCkKKyAgICAgICAgcG9ydF9vYmoubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2Vs
Zi5fcnVudGltZV9wYXRoKQogCiAgICAgICAgICMgVGhlIFBJRCByZXR1cm5lZCB3aGVuIEFwYWNo
ZSBpcyBzdGFydGVkIGdvZXMgYXdheSAoZHVlIHRvIGRyb3BwaW5nCiAgICAgICAgICMgcHJpdmls
ZWdlcz8pLiBUaGUgcHJvcGVyIGNvbnRyb2xsaW5nIFBJRCBpcyB3cml0dGVuIHRvIGEgZmlsZSBp
biB0aGUKICAgICAgICAgIyBhcGFjaGUgcnVudGltZSBkaXJlY3RvcnkuCiAgICAgICAgIHNlbGYu
X3BpZF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3J1bnRpbWVfcGF0aCwgJ2h0dHBkLnBpZCcp
CiAKLSAgICAgICAgdGVzdF9kaXIgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9w
YXJ0eScsICdXZWJLaXQnLAotICAgICAgICAgICAgJ0xheW91dFRlc3RzJykKKyAgICAgICAgdGVz
dF9kaXIgPSBzZWxmLl9wb3J0X29iai5sYXlvdXRfdGVzdHNfZGlyKCkKICAgICAgICAganNfdGVz
dF9yZXNvdXJjZXNfZGlyID0gc2VsZi5fY3lnd2luX3NhZmVfam9pbih0ZXN0X2RpciwgImZhc3Qi
LCAianMiLAogICAgICAgICAgICAgInJlc291cmNlcyIpCiAgICAgICAgIG1pbWVfdHlwZXNfcGF0
aCA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4odGVzdF9kaXIsICJodHRwIiwgImNvbmYiLApAQCAt
NzgsNyArNzcsNyBAQCBjbGFzcyBMYXlvdXRUZXN0QXBhY2hlSHR0cGQoaHR0cF9zZXJ2ZXJfCiAg
ICAgICAgIGVycm9yX2xvZyA9IHNlbGYuX2N5Z3dpbl9zYWZlX2pvaW4ob3V0cHV0X2RpciwgImVy
cm9yX2xvZy50eHQiKQogICAgICAgICBkb2N1bWVudF9yb290ID0gc2VsZi5fY3lnd2luX3NhZmVf
am9pbih0ZXN0X2RpciwgImh0dHAiLCAidGVzdHMiKQogCi0gICAgICAgIGV4ZWN1dGFibGUgPSBw
b3J0LmFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKQorICAgICAgICBleGVjdXRhYmxlID0gc2VsZi5f
cG9ydF9vYmouX3BhdGhfdG9fYXBhY2hlKCkKICAgICAgICAgaWYgc2VsZi5faXNfY3lnd2luKCk6
CiAgICAgICAgICAgICBleGVjdXRhYmxlID0gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGV4ZWN1dGFi
bGUpCiAKQEAgLTk1LDcgKzk0LDggQEAgY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBf
c2VydmVyXwogICAgICAgICAgICAgICAgIG9zLmVudmlyb24uZ2V0KCJVU0VSIiwgIiIpKV0KIAog
ICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKLSAgICAgICAgICAgIGN5Z2JpbiA9IHBhdGhf
dXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nKQorICAg
ICAgICAgICAgY3lnYmluID0gc2VsZi5fcG9ydF9vYmouX3BhdGhfZnJvbV9iYXNlKCd0aGlyZF9w
YXJ0eScsICdjeWd3aW4nLAorICAgICAgICAgICAgICAgICdiaW4nKQogICAgICAgICAgICAgIyBO
b3QgZW50aXJlbHkgc3VyZSB3aHksIGJ1dCBmcm9tIGN5Z3dpbiB3ZSBuZWVkIHRvIHJ1biB0aGUK
ICAgICAgICAgICAgICMgaHR0cGQgY29tbWFuZCB0aHJvdWdoIGJhc2guCiAgICAgICAgICAgICBz
ZWxmLl9zdGFydF9jbWQgPSBbCkBAIC0xNDYsNyArMTQ2LDcgQEAgY2xhc3MgTGF5b3V0VGVzdEFw
YWNoZUh0dHBkKGh0dHBfc2VydmVyXwogICAgICAgICAgIHRlc3RfZGlyOiBhYnNvbHV0ZSBwYXRo
IHRvIHRoZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkuCiAgICAgICAgICAgb3V0cHV0X2RpcjogYWJz
b2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0cyBkaXJlY3RvcnkuCiAgICAgICAg
ICIiIgotICAgICAgICBodHRwZF9jb25maWcgPSBwb3J0LmFwYWNoZV9jb25maWdfZmlsZV9wYXRo
KCkKKyAgICAgICAgaHR0cGRfY29uZmlnID0gc2VsZi5fcG9ydF9vYmouX3BhdGhfdG9fYXBhY2hl
X2NvbmZpZ19maWxlKCkKICAgICAgICAgaHR0cGRfY29uZmlnX2NvcHkgPSBvcy5wYXRoLmpvaW4o
b3V0cHV0X2RpciwgImh0dHBkLmNvbmYiKQogICAgICAgICBodHRwZF9jb25mID0gb3BlbihodHRw
ZF9jb25maWcpLnJlYWQoKQogICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKQEAgLTE1Niwy
MiArMTU2LDExIEBAIGNsYXNzIExheW91dFRlc3RBcGFjaGVIdHRwZChodHRwX3NlcnZlcl8KICAg
ICAgICAgICAgICMgcGx1cyB0aGUgcmVsYXRpdmUgcGF0aHMgdG8gdGhlIC5zbyBmaWxlcyBsaXN0
ZWQgaW4gdGhlIC5jb25mCiAgICAgICAgICAgICAjIGZpbGUuIFdlIGhhdmUgYXBhY2hlL2N5Z3dp
biBjaGVja2VkIGludG8gb3VyIHRyZWUgc28KICAgICAgICAgICAgICMgcGVvcGxlIGRvbid0IGhh
dmUgdG8gaW5zdGFsbCBpdCBpbnRvIHRoZWlyIGN5Z3dpbi4KLSAgICAgICAgICAgIGN5Z3VzciA9
IHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICd1c3In
KQorICAgICAgICAgICAgY3lndXNyID0gc2VsZi5fcG9ydF9vYmouX3BhdGhfZnJvbV9iYXNlKCd0
aGlyZF9wYXJ0eScsICdjeWd3aW4nLAorICAgICAgICAgICAgICAgICd1c3InKQogICAgICAgICAg
ICAgaHR0cGRfY29uZiA9IGh0dHBkX2NvbmYucmVwbGFjZSgnU2VydmVyUm9vdCAiL3VzciInLAog
ICAgICAgICAgICAgICAgICdTZXJ2ZXJSb290ICIlcyInICUgc2VsZi5fZ2V0X2N5Z3dpbl9wYXRo
KGN5Z3VzcikpCiAKLSAgICAgICAgIyBUT0RPKG9qYW4pOiBJbnN0ZWFkIG9mIHdyaXRpbmcgYW4g
ZXh0cmEgZmlsZSwgY2hlY2tpbiBhIGNvbmYgZmlsZQotICAgICAgICAjIHVwc3RyZWFtLiBPciwg
ZXZlbiBiZXR0ZXIsIHVwc3RyZWFtL2RlbGV0ZSBhbGwgb3VyIGNocm9tZSBodHRwCi0gICAgICAg
ICMgdGVzdHMgc28gd2UgZG9uJ3QgbmVlZCB0aGlzIHNwZWNpYWwtY2FzZWQgRG9jdW1lbnRSb290
IGFuZCB0aGVuCi0gICAgICAgICMganVzdCB1c2UgdGhlIHVwc3RyZWFtCi0gICAgICAgICMgY29u
ZiBmaWxlLgotICAgICAgICBjaHJvbWVfZG9jdW1lbnRfcm9vdCA9IHBhdGhfdXRpbHMucGF0aF9m
cm9tX2Jhc2UoJ3dlYmtpdCcsICdkYXRhJywKLSAgICAgICAgICAgICdsYXlvdXRfdGVzdHMnKQot
ICAgICAgICBpZiBzZWxmLl9pc19jeWd3aW4oKToKLSAgICAgICAgICAgIGNocm9tZV9kb2N1bWVu
dF9yb290ID0gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGNocm9tZV9kb2N1bWVudF9yb290KQotICAg
ICAgICBodHRwZF9jb25mID0gKGh0dHBkX2NvbmYgKwotICAgICAgICAgICAgc2VsZi5fZ2V0X3Zp
cnR1YWxfaG9zdF9jb25maWcoY2hyb21lX2RvY3VtZW50X3Jvb3QsIDgwODEpKQotCiAgICAgICAg
IGYgPSBvcGVuKGh0dHBkX2NvbmZpZ19jb3B5LCAnd2InKQogICAgICAgICBmLndyaXRlKGh0dHBk
X2NvbmYpCiAgICAgICAgIGYuY2xvc2UoKQpAQCAtMjI2LDQgKzIxNSw0IEBAIGNsYXNzIExheW91
dFRlc3RBcGFjaGVIdHRwZChodHRwX3NlcnZlcl8KICAgICAgICAgaHR0cGRfcGlkID0gTm9uZQog
ICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9waWRfZmlsZSk6CiAgICAgICAgICAgICBo
dHRwZF9waWQgPSBpbnQob3BlbihzZWxmLl9waWRfZmlsZSkucmVhZGxpbmUoKSkKLSAgICAgICAg
cGF0aF91dGlscy5zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0cGRfcGlkKQorICAgICAgICBzZWxm
Ll9wb3J0X29iai5fc2h1dF9kb3duX2h0dHBfc2VydmVyKGh0dHBkX3BpZCkKSW5kZXg6IFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jh
c2UucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Jhc2UucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjM5IEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBvZiBQ
b3J0LXNwZWNpZmljIGVudHJ5cG9pbnRzIGZvciB0aGUgbGF5b3V0IHRlc3RzCit0ZXN0IGluZnJh
c3RydWN0dXJlICh0aGUgUG9ydCBhbmQgRHJpdmVyIGNsYXNzZXMpLiIiIgorCitpbXBvcnQgY2dp
CitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9j
ZXNzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBhcGFjaGVfaHR0cF9zZXJ2ZXIKK2ltcG9ydCBodHRw
X3NlcnZlcgoraW1wb3J0IHdlYnNvY2tldF9zZXJ2ZXIKKworIyBQeXRob24gYnVnIHdvcmthcm91
bmQuICBTZWUgUG9ydC53ZGlmZl90ZXh0KCkgZm9yIGFuIGV4cGxhbmF0aW9uLgorX3dkaWZmX2F2
YWlsYWJsZSA9IFRydWUKKworCitjbGFzcyBQb3J0KG9iamVjdCk6CisgICAgIiIiQWJzdHJhY3Qg
Y2xhc3MgZm9yIFBvcnQtc3BlY2lmaWMgaG9va3MgZm9yIHRoZSBsYXlvdXRfdGVzdCBwYWNrYWdl
LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZT1Ob25lLCBvcHRp
b25zPU5vbmUpOgorICAgICAgICBzZWxmLl9uYW1lID0gcG9ydF9uYW1lCisgICAgICAgIHNlbGYu
X29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX2hlbHBlciA9IE5vbmUKKyAgICAgICAg
c2VsZi5faHR0cF9zZXJ2ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dlYmtpdF9iYXNlX2RpciA9
IE5vbmUKKyAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlciA9IE5vbmUKKworICAgIGRlZiBi
YXNlbGluZV9wYXRoKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIHBhdGgg
dG8gdGhlIGRpcmVjdG9yeSB0byBzdG9yZSBuZXcgYmFzZWxpbmVzCisgICAgICAgIGluIGZvciB0
aGlzIHBvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQuYmFz
ZWxpbmVfcGF0aCcpCisKKyAgICBkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CisgICAg
ICAgICIiIlJldHVybiBhIGxpc3Qgb2YgYWJzb2x1dGUgcGF0aHMgdG8gZGlyZWN0b3JpZXMgdG8g
c2VhcmNoIHVuZGVyIGZvcgorICAgICAgICBiYXNlbGluZXMuIFRoZSBkaXJlY3RvcmllcyBhcmUg
c2VhcmNoZWQgaW4gb3JkZXIuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3Io
J1BvcnQuYmFzZWxpbmVfc2VhcmNoX3BhdGgnKQorCisgICAgZGVmIGNoZWNrX3N5c19kZXBzKHNl
bGYpOgorICAgICAgICAiIiJJZiB0aGUgcG9ydCBuZWVkcyB0byBkbyBzb21lIHJ1bnRpbWUgY2hl
Y2tzIHRvIGVuc3VyZSB0aGF0IHRoZQorICAgICAgICB0ZXN0cyBjYW4gYmUgcnVuIHN1Y2Nlc3Nm
dWxseSwgdGhleSBzaG91bGQgYmUgZG9uZSBoZXJlLgorCisgICAgICAgIFJldHVybnMgd2hldGhl
ciB0aGUgc3lzdGVtIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuIiIiCisgICAgICAgIHJhaXNlIE5v
dEltcGxlbWVudGVkRXJyb3IoJ1BvcnQuY2hlY2tfc3lzX2RlcHMnKQorCisgICAgZGVmIGNvbXBh
cmVfdGV4dChzZWxmLCBhY3R1YWxfdGV4dCwgZXhwZWN0ZWRfdGV4dCk6CisgICAgICAgICIiIlJl
dHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgdHdvIHN0cmluZ3MgYXJlICpub3QqIGVxdWFsLiBUaGlz
CisgICAgICAgIHJvdXRpbmUgaXMgdXNlZCB0byBkaWZmIHRleHQgb3V0cHV0LgorCisgICAgICAg
IFdoaWxlIHRoaXMgaXMgYSBnZW5lcmljIHJvdXRpbmUsIHdlIGluY2x1ZGUgaXQgaW4gdGhlIFBv
cnQKKyAgICAgICAgaW50ZXJmYWNlIHNvIHRoYXQgaXQgY2FuIGJlIG92ZXJyaWRlbiBmb3IgdGVz
dGluZyBwdXJwb3Nlcy4iIiIKKyAgICAgICAgcmV0dXJuIGFjdHVhbF90ZXh0ICE9IGV4cGVjdGVk
X3RleHQKKworICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGFjdHVhbF9maWxlbmFtZSwgZXhwZWN0
ZWRfZmlsZW5hbWUsIGRpZmZfZmlsZW5hbWUpOgorICAgICAgICAiIiJDb21wYXJlIHR3byBpbWFn
ZSBmaWxlcyBhbmQgcHJvZHVjZSBhIGRlbHRhIGltYWdlIGZpbGUuCisKKyAgICAgICAgUmV0dXJu
IDEgaWYgdGhlIHR3byBmaWxlcyBhcmUgZGlmZmVyZW50LCAwIGlmIHRoZXkgYXJlIHRoZSBzYW1l
LgorICAgICAgICBBbHNvIHByb2R1Y2UgYSBkZWx0YSBpbWFnZSBvZiB0aGUgdHdvIGltYWdlcyBh
bmQgd3JpdGUgdGhhdCBpbnRvCisgICAgICAgIHxkaWZmX2ZpbGVuYW1lfC4KKworICAgICAgICBX
aGlsZSB0aGlzIGlzIGEgZ2VuZXJpYyByb3V0aW5lLCB3ZSBpbmNsdWRlIGl0IGluIHRoZSBQb3J0
CisgICAgICAgIGludGVyZmFjZSBzbyB0aGF0IGl0IGNhbiBiZSBvdmVycmlkZW4gZm9yIHRlc3Rp
bmcgcHVycG9zZXMuIiIiCisgICAgICAgIGV4ZWN1dGFibGUgPSBzZWxmLl9wYXRoX3RvX2ltYWdl
X2RpZmYoKQorICAgICAgICBjbWQgPSBbZXhlY3V0YWJsZSwgJy0tZGlmZicsIGFjdHVhbF9maWxl
bmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUsCisgICAgICAgICAgICAgICBkaWZmX2ZpbGVuYW1lXQor
ICAgICAgICByZXN1bHQgPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHN1
YnByb2Nlc3MuY2FsbChjbWQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAg
ICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQgb3IgZS5lcnJubyA9PSBlcnJuby5FQUNDRVM6
CisgICAgICAgICAgICAgICAgX2NvbXBhcmVfYXZhaWxhYmxlID0gRmFsc2UKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJv
cjoKKyAgICAgICAgICAgICMgd29yayBhcm91bmQgYSByYWNlIGNvbmRpdGlvbiBpbiBQeXRob24g
Mi40J3MgaW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgICMgb2Ygc3VicHJvY2Vzcy5Qb3Blbgor
ICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgZGlmZl90
ZXh0KHNlbGYsIGFjdHVhbF90ZXh0LCBleHBlY3RlZF90ZXh0LAorICAgICAgICAgICAgICAgICAg
YWN0dWFsX2ZpbGVuYW1lLCBleHBlY3RlZF9maWxlbmFtZSk6CisgICAgICAgICIiIlJldHVybnMg
YSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGlmZiBvZiB0aGUgdHdvIHRleHQgc3RyaW5ncworICAg
ICAgICBpbiAndW5pZmllZCBkaWZmJyBmb3JtYXQuCisKKyAgICAgICAgV2hpbGUgdGhpcyBpcyBh
IGdlbmVyaWMgcm91dGluZSwgd2UgaW5jbHVkZSBpdCBpbiB0aGUgUG9ydAorICAgICAgICBpbnRl
cmZhY2Ugc28gdGhhdCBpdCBjYW4gYmUgb3ZlcnJpZGVuIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiIi
IgorICAgICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoZXhwZWN0ZWRfdGV4dC5zcGxp
dGxpbmVzKFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFs
X3RleHQuc3BsaXRsaW5lcyhUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdGVkX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWN0dWFsX2ZpbGVuYW1lKQorICAgICAgICByZXR1cm4gJycuam9pbihkaWZmKQorCisgICAg
ZGVmIGV4cGVjdGVkX2Jhc2VsaW5lcyhzZWxmLCBmaWxlbmFtZSwgc3VmZml4LCBhbGxfYmFzZWxp
bmVzPUZhbHNlKToKKyAgICAgICAgIiIiR2l2ZW4gYSB0ZXN0IG5hbWUsIGZpbmRzIHdoZXJlIHRo
ZSBiYXNlbGluZSByZXN1bHRzIGFyZSBsb2NhdGVkLgorCisgICAgICAgIEFyZ3M6CisgICAgICAg
IGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKKyAgICAgICAgc3VmZml4
OiBmaWxlIHN1ZmZpeCBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cywgaW5jbHVkaW5nIGRvdDsgZS5n
LgorICAgICAgICAgICAgJy50eHQnIG9yICcucG5nJy4gIFRoaXMgc2hvdWxkIG5vdCBiZSBOb25l
LCBidXQgbWF5IGJlIGFuIGVtcHR5CisgICAgICAgICAgICBzdHJpbmcuCisgICAgICAgIGFsbF9i
YXNlbGluZXM6IElmIFRydWUsIHJldHVybiBhbiBvcmRlcmVkIGxpc3Qgb2YgYWxsIGJhc2VsaW5l
IHBhdGhzCisgICAgICAgICAgICBmb3IgdGhlIGdpdmVuIHBsYXRmb3JtLiBJZiBGYWxzZSwgcmV0
dXJuIG9ubHkgdGhlIGZpcnN0IG9uZS4KKyAgICAgICAgUmV0dXJucworICAgICAgICBhIGxpc3Qg
b2YgKCBwbGF0Zm9ybV9kaXIsIHJlc3VsdHNfZmlsZW5hbWUgKSwgd2hlcmUKKyAgICAgICAgICAg
IHBsYXRmb3JtX2RpciAtIGFicyBwYXRoIHRvIHRoZSB0b3Agb2YgdGhlIHJlc3VsdHMgdHJlZSAo
b3IgdGVzdAorICAgICAgICAgICAgICAgIHRyZWUpCisgICAgICAgICAgICByZXN1bHRzX2ZpbGVu
YW1lIC0gcmVsYXRpdmUgcGF0aCBmcm9tIHRvcCBvZiB0cmVlIHRvIHRoZSByZXN1bHRzCisgICAg
ICAgICAgICAgICAgZmlsZQorICAgICAgICAgICAgKG9zLnBhdGguam9pbiBvZiB0aGUgdHdvIGdp
dmVzIHlvdSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlLAorICAgICAgICAgICAgICAgIHVubGVz
cyBOb25lIHdhcyByZXR1cm5lZC4pCisgICAgICAgIFJldHVybiB2YWx1ZXMgd2lsbCBiZSBpbiB0
aGUgZm9ybWF0IGFwcHJvcHJpYXRlIGZvciB0aGUgY3VycmVudAorICAgICAgICBwbGF0Zm9ybSAo
ZS5nLiwgIlxcIiBmb3IgcGF0aCBzZXBhcmF0b3JzIG9uIFdpbmRvd3MpLiBJZiB0aGUgcmVzdWx0
cworICAgICAgICBmaWxlIGlzIG5vdCBmb3VuZCwgdGhlbiBOb25lIHdpbGwgYmUgcmV0dXJuZWQg
Zm9yIHRoZSBkaXJlY3RvcnksCisgICAgICAgIGJ1dCB0aGUgZXhwZWN0ZWQgcmVsYXRpdmUgcGF0
aG5hbWUgd2lsbCBzdGlsbCBiZSByZXR1cm5lZC4KKworICAgICAgICBUaGlzIHJvdXRpbmUgaXMg
Z2VuZXJpYyBidXQgbGl2ZXMgaGVyZSBzaW5jZSBpdCBpcyB1c2VkIGluCisgICAgICAgIGNvbmp1
bmN0aW9uIHdpdGggdGhlIG90aGVyIGJhc2VsaW5lIGFuZCBmaWxlbmFtZSByb3V0aW5lcyB0aGF0
IGFyZQorICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpYy4KKyAgICAgICAgIiIiCisgICAgICAgIHRl
c3RuYW1lID0gb3MucGF0aC5zcGxpdGV4dChzZWxmLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmls
ZW5hbWUpKVswXQorCisgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lID0gdGVzdG5hbWUgKyAnLWV4
cGVjdGVkJyArIHN1ZmZpeAorCisgICAgICAgIGJhc2VsaW5lX3NlYXJjaF9wYXRoID0gc2VsZi5i
YXNlbGluZV9zZWFyY2hfcGF0aCgpCisKKyAgICAgICAgYmFzZWxpbmVzID0gW10KKyAgICAgICAg
Zm9yIHBsYXRmb3JtX2RpciBpbiBiYXNlbGluZV9zZWFyY2hfcGF0aDoKKyAgICAgICAgICAgIGlm
IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVu
YW1lKSk6CisgICAgICAgICAgICAgICAgYmFzZWxpbmVzLmFwcGVuZCgocGxhdGZvcm1fZGlyLCBi
YXNlbGluZV9maWxlbmFtZSkpCisKKyAgICAgICAgICAgIGlmIG5vdCBhbGxfYmFzZWxpbmVzIGFu
ZCBiYXNlbGluZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lcworCisgICAgICAg
ICMgSWYgaXQgd2Fzbid0IGZvdW5kIGluIGEgcGxhdGZvcm0gZGlyZWN0b3J5LCByZXR1cm4gdGhl
IGV4cGVjdGVkCisgICAgICAgICMgcmVzdWx0IGluIHRoZSB0ZXN0IGRpcmVjdG9yeSwgZXZlbiBp
ZiBubyBzdWNoIGZpbGUgYWN0dWFsbHkgZXhpc3RzLgorICAgICAgICBwbGF0Zm9ybV9kaXIgPSBz
ZWxmLmxheW91dF90ZXN0c19kaXIoKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRo
LmpvaW4ocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpOgorICAgICAgICAgICAgYmFz
ZWxpbmVzLmFwcGVuZCgocGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSkpCisKKyAgICAg
ICAgaWYgYmFzZWxpbmVzOgorICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lcworCisgICAgICAg
IHJldHVybiBbKE5vbmUsIGJhc2VsaW5lX2ZpbGVuYW1lKV0KKworICAgIGRlZiBleHBlY3RlZF9m
aWxlbmFtZShzZWxmLCBmaWxlbmFtZSwgc3VmZml4KToKKyAgICAgICAgIiIiR2l2ZW4gYSB0ZXN0
IG5hbWUsIHJldHVybnMgYW4gYWJzb2x1dGUgcGF0aCB0byBpdHMgZXhwZWN0ZWQgcmVzdWx0cy4K
KworICAgICAgICBJZiBubyBleHBlY3RlZCByZXN1bHRzIGFyZSBmb3VuZCBpbiBhbnkgb2YgdGhl
IHNlYXJjaGVkIGRpcmVjdG9yaWVzLAorICAgICAgICB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRo
ZSB0ZXN0IGl0c2VsZiBpcyBsb2NhdGVkIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICAgIFRoZSBy
ZXR1cm4gdmFsdWUgaXMgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0ZSBmb3IgdGhlIHBsYXRmb3Jt
CisgICAgICAgIChlLmcuLCAiXFwiIGZvciBwYXRoIHNlcGFyYXRvcnMgb24gd2luZG93cykuCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgZmlsZW5hbWU6IGFic29sdXRlIGZpbGVuYW1lIHRvIHRl
c3QgZmlsZQorICAgICAgICBzdWZmaXg6IGZpbGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1
bHRzLCBpbmNsdWRpbmcgZG90OyBlLmcuICcudHh0JworICAgICAgICAgICAgb3IgJy5wbmcnLiAg
VGhpcyBzaG91bGQgbm90IGJlIE5vbmUsIGJ1dCBtYXkgYmUgYW4gZW1wdHkgc3RyaW5nLgorICAg
ICAgICBwbGF0Zm9ybTogdGhlIG1vc3Qtc3BlY2lmaWMgZGlyZWN0b3J5IG5hbWUgdG8gdXNlIHRv
IGJ1aWxkIHRoZQorICAgICAgICAgICAgc2VhcmNoIGxpc3Qgb2YgZGlyZWN0b3JpZXMsIGUuZy4s
ICdjaHJvbWl1bS13aW4nLCBvcgorICAgICAgICAgICAgJ2Nocm9taXVtLW1hYy1sZW9wYXJkJyAo
d2UgZm9sbG93IHRoZSBXZWJLaXQgZm9ybWF0KQorCisgICAgICAgIFRoaXMgcm91dGluZSBpcyBn
ZW5lcmljIGJ1dCBpcyBpbXBsZW1lbnRlZCBoZXJlIHRvIGxpdmUgYWxvbmdzaWRlCisgICAgICAg
IHRoZSBvdGhlciBiYXNlbGluZSBhbmQgZmlsZW5hbWUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLgor
ICAgICAgICAiIiIKKyAgICAgICAgcGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFtZSA9IHNl
bGYuZXhwZWN0ZWRfYmFzZWxpbmVzKAorICAgICAgICAgICAgZmlsZW5hbWUsIHN1ZmZpeClbMF0K
KyAgICAgICAgaWYgcGxhdGZvcm1fZGlyOgorICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9p
bihwbGF0Zm9ybV9kaXIsIGJhc2VsaW5lX2ZpbGVuYW1lKQorICAgICAgICByZXR1cm4gb3MucGF0
aC5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCBiYXNlbGluZV9maWxlbmFtZSkKKworICAg
IGRlZiBmaWxlbmFtZV90b191cmkoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJDb252ZXJ0
IGEgdGVzdCBmaWxlIHRvIGEgVVJJLiIiIgorICAgICAgICBMQVlPVVRURVNUX0hUVFBfRElSID0g
Imh0dHAvdGVzdHMvIgorICAgICAgICBMQVlPVVRURVNUX1dFQlNPQ0tFVF9ESVIgPSAid2Vic29j
a2V0L3Rlc3RzLyIKKworICAgICAgICByZWxhdGl2ZV9wYXRoID0gc2VsZi5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKGZpbGVuYW1lKQorICAgICAgICBwb3J0ID0gTm9uZQorICAgICAgICB1c2Vfc3Ns
ID0gRmFsc2UKKworICAgICAgICBpZiByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoTEFZT1VUVEVT
VF9IVFRQX0RJUik6CisgICAgICAgICAgICAjIGh0dHAvdGVzdHMvIHJ1biBvZmYgcG9ydCA4MDAw
IGFuZCBzc2wvIG9mZiA4NDQzCisgICAgICAgICAgICByZWxhdGl2ZV9wYXRoID0gcmVsYXRpdmVf
cGF0aFtsZW4oTEFZT1VUVEVTVF9IVFRQX0RJUik6XQorICAgICAgICAgICAgcG9ydCA9IDgwMDAK
KyAgICAgICAgZWxpZiByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoTEFZT1VUVEVTVF9XRUJTT0NL
RVRfRElSKToKKyAgICAgICAgICAgICMgd2Vic29ja2V0L3Rlc3RzLyBydW4gb2ZmIHBvcnQgODg4
MCBhbmQgOTMyMworICAgICAgICAgICAgIyBOb3RlOiB0aGUgcm9vdCBpcyAvLCBub3Qgd2Vic29j
a2V0L3Rlc3RzLworICAgICAgICAgICAgcG9ydCA9IDg4ODAKKworICAgICAgICAjIE1ha2UgaHR0
cC90ZXN0cy9sb2NhbCBydW4gYXMgbG9jYWwgZmlsZXMuIFRoaXMgaXMgdG8gbWltaWMgdGhlCisg
ICAgICAgICMgbG9naWMgaW4gcnVuLXdlYmtpdC10ZXN0cy4KKyAgICAgICAgIworICAgICAgICAj
IFRPRE8oZHByYW5rZSk6IHJlbW92ZSB0aGUgbWVkaWEgcmVmZXJlbmNlIGFuZCB0aGUgU1NMIHJl
ZmVyZW5jZT8KKyAgICAgICAgaWYgKHBvcnQgYW5kIG5vdCByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dp
dGgoImxvY2FsLyIpIGFuZAorICAgICAgICAgICAgbm90IHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0
aCgibWVkaWEvIikpOgorICAgICAgICAgICAgaWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKCJz
c2wvIik6CisgICAgICAgICAgICAgICAgcG9ydCArPSA0NDMKKyAgICAgICAgICAgICAgICBwcm90
b2NvbCA9ICJodHRwcyIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvdG9j
b2wgPSAiaHR0cCIKKyAgICAgICAgICAgIHJldHVybiAiJXM6Ly8xMjcuMC4wLjE6JXUvJXMiICUg
KHByb3RvY29sLCBwb3J0LCByZWxhdGl2ZV9wYXRoKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9y
bSBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgorICAgICAgICAgICAgcmV0dXJuICJmaWxlOi8vLyIg
KyBzZWxmLmdldF9hYnNvbHV0ZV9wYXRoKGZpbGVuYW1lKQorICAgICAgICByZXR1cm4gImZpbGU6
Ly8iICsgc2VsZi5nZXRfYWJzb2x1dGVfcGF0aChmaWxlbmFtZSkKKworICAgIGRlZiBnZXRfYWJz
b2x1dGVfcGF0aChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgYWJzb2x1
dGUgcGF0aCBpbiB1bml4IGZvcm1hdCBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lLgorCisgICAgICAg
IFRoaXMgcm91dGluZSBleGlzdHMgc28gdGhhdCBwbGF0Zm9ybXMgdGhhdCBkb24ndCB1c2UgdW5p
eCBmaWxlbmFtZXMKKyAgICAgICAgY2FuIGNvbnZlcnQgYWNjb3JkaW5nbHkuIiIiCisgICAgICAg
IHJldHVybiBvcy5wYXRoLmFic3BhdGgoZmlsZW5hbWUpCisKKyAgICBkZWYgbGF5b3V0X3Rlc3Rz
X2RpcihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB0
b3Agb2YgdGhlIExheW91dFRlc3RzIGRpcmVjdG9yeS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYu
cGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdMYXlvdXRUZXN0cycpCisKKyAgICBkZWYgbWF5YmVfbWFr
ZV9kaXJlY3Rvcnkoc2VsZiwgKnBhdGgpOgorICAgICAgICAiIiJDcmVhdGVzIHRoZSBzcGVjaWZp
ZWQgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4iIiIKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKCpwYXRoKSkKKyAgICAgICAg
ZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElT
VDoKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAg
ICIiIlJldHVybiB0aGUgbmFtZSBvZiB0aGUgcG9ydCAoZS5nLiwgJ21hYycsICdjaHJvbWl1bS13
aW4teHAnKS4KKworICAgICAgICBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUg
dGVzdF9wbGF0Zm9ybV9uYW1lKCksIHdoaWNoCisgICAgICAgIG1heSBiZSBkaWZmZXJlbnQgKGUu
Zy4sICd3aW4teHAnIGluc3RlYWQgb2YgJ2Nocm9taXVtLXdpbi14cCcuIiIiCisgICAgICAgIHJl
dHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgbnVtX2NvcmVzKHNlbGYpOgorICAgICAgICAiIiJS
ZXR1cm4gdGhlIG51bWJlciBvZiBjb3Jlcy9jcHVzIGF2YWlsYWJsZSBvbiB0aGlzIG1hY2hpbmUu
CisKKyAgICAgICAgVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0
IGFtb3VudCBvZiBwYXJhbGxlbGlzbQorICAgICAgICB1c2VkIGJ5IHJ1bi1jaHJvbWl1bS13ZWJr
aXQtdGVzdHMuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQubnVt
X2NvcmVzJykKKworICAgIGRlZiBwYXRoX2Zyb21fd2Via2l0X2Jhc2Uoc2VsZiwgKmNvbXBzKToK
KyAgICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHBhdGggbWFkZSBieSBqb2luaW5n
IHRoZSB0b3Agb2YgdGhlCisgICAgICAgIFdlYktpdCBzb3VyY2UgdHJlZSBhbmQgdGhlIGxpc3Qg
b2YgcGF0aCBjb21wb25lbnRzIGluIHwqY29tcHN8LiIiIgorICAgICAgICBpZiBub3Qgc2VsZi5f
d2Via2l0X2Jhc2VfZGlyOgorICAgICAgICAgICAgYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aChf
X2ZpbGVfXykKKyAgICAgICAgICAgIHNlbGYuX3dlYmtpdF9iYXNlX2RpciA9IGFic3BhdGhbMDph
YnNwYXRoLmZpbmQoJ1dlYktpdFRvb2xzJyldCisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4o
c2VsZi5fd2Via2l0X2Jhc2VfZGlyLCAqY29tcHMpCisKKyAgICBkZWYgcmVtb3ZlX2RpcmVjdG9y
eShzZWxmLCAqcGF0aCk6CisgICAgICAgICIiIlJlY3Vyc2l2ZWx5IHJlbW92ZXMgYSBkaXJlY3Rv
cnksIGV2ZW4gaWYgaXQncyBtYXJrZWQgcmVhZC1vbmx5LgorCisgICAgICAgIFJlbW92ZSB0aGUg
ZGlyZWN0b3J5IGxvY2F0ZWQgYXQgKnBhdGgsIGlmIGl0IGV4aXN0cy4KKworICAgICAgICBzaHV0
aWwucm10cmVlKCkgZG9lc24ndCB3b3JrIG9uIFdpbmRvd3MgaWYgYW55IG9mIHRoZSBmaWxlcwor
ICAgICAgICBvciBkaXJlY3RvcmllcyBhcmUgcmVhZC1vbmx5LCB3aGljaCBzdm4gcmVwb3NpdG9y
aWVzIGFuZAorICAgICAgICBzb21lIC5zdm4gZmlsZXMgYXJlLiAgV2UgbmVlZCB0byBiZSBhYmxl
IHRvIGZvcmNlIHRoZSBmaWxlcworICAgICAgICB0byBiZSB3cml0YWJsZSAoaS5lLiwgZGVsZXRh
YmxlKSBhcyB3ZSB0cmF2ZXJzZSB0aGUgdHJlZS4KKworICAgICAgICBFdmVuIHdpdGggYWxsIHRo
aXMsIFdpbmRvd3Mgc3RpbGwgc29tZXRpbWVzIGZhaWxzIHRvIGRlbGV0ZSBhIGZpbGUsCisgICAg
ICAgIGNpdGluZyBhIHBlcm1pc3Npb24gZXJyb3IgKG1heWJlIHNvbWV0aGluZyB0byBkbyB3aXRo
IGFudGl2aXJ1cworICAgICAgICBzY2FucyBvciBkaXNrIGluZGV4aW5nKS4gIFRoZSBiZXN0IHN1
Z2dlc3Rpb24gYW55IG9mIHRoZSB1c2VyCisgICAgICAgIGZvcnVtcyBoYWQgd2FzIHRvIHdhaXQg
YSBiaXQgYW5kIHRyeSBhZ2Fpbiwgc28gd2UgZG8gdGhhdCB0b28uCisgICAgICAgIEl0J3MgaGFu
ZC13YXZpbmcsIGJ1dCBzb21ldGltZXMgaXQgd29ya3MuIDovCisgICAgICAgICIiIgorICAgICAg
ICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oKnBhdGgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRo
LmV4aXN0cyhmaWxlX3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd2luMzIg
PSBGYWxzZQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAg
IHdpbjMyID0gVHJ1ZQorICAgICAgICAgICAgIyBTb21lIHBlb3BsZSBkb24ndCBoYXZlIHRoZSBB
UElzIGluc3RhbGxlZC4gSW4gdGhhdCBjYXNlIHdlJ2xsIGRvCisgICAgICAgICAgICAjIHdpdGhv
dXQuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2luMzJhcGkgPSBfX2ltcG9y
dF9fKCd3aW4zMmFwaScpCisgICAgICAgICAgICAgICAgd2luMzJjb24gPSBfX2ltcG9ydF9fKCd3
aW4zMmNvbicpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAg
ICAgd2luMzIgPSBGYWxzZQorCisgICAgICAgICAgICBkZWYgcmVtb3ZlX3dpdGhfcmV0cnkocm1m
dW5jLCBwYXRoKToKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChwYXRoLCBzdGF0LlNfSVdSSVRF
KQorICAgICAgICAgICAgICAgIGlmIHdpbjMyOgorICAgICAgICAgICAgICAgICAgICB3aW4zMmFw
aS5TZXRGaWxlQXR0cmlidXRlcyhwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpbjMyY29uLkZJTEVfQVRUUklCVVRFX05PUk1BTCkKKyAgICAgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBybWZ1bmMocGF0aCkKKyAg
ICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciwgZToKKyAgICAgICAgICAgICAg
ICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQUNDRVM6CisgICAgICAgICAgICAgICAgICAgICAg
ICByYWlzZQorICAgICAgICAgICAgICAgICAgICBwcmludCAnRmFpbGVkIHRvIGRlbGV0ZSAlczog
dHJ5aW5nIGFnYWluJyAlIHJlcHIocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVl
cCgwLjEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBybWZ1bmMocGF0aCkKKyAgICAgICAg
ZWxzZToKKworICAgICAgICAgICAgZGVmIHJlbW92ZV93aXRoX3JldHJ5KHJtZnVuYywgcGF0aCk6
CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcm1mdW5jKHBhdGgpCisKKyAgICAgICAgZm9yIHJvb3Qs
IGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZmlsZV9wYXRoLCB0b3Bkb3duPUZhbHNlKToKKyAgICAg
ICAgICAgICMgRm9yIFBPU0lYOiAgbWFraW5nIHRoZSBkaXJlY3Rvcnkgd3JpdGFibGUgZ3VhcmFu
dGVlcworICAgICAgICAgICAgIyByZW1vdmFiaWxpdHkuIFdpbmRvd3Mgd2lsbCBpZ25vcmUgdGhl
IG5vbi1yZWFkLW9ubHkKKyAgICAgICAgICAgICMgYml0cyBpbiB0aGUgY2htb2QgdmFsdWUuCisg
ICAgICAgICAgICBvcy5jaG1vZChyb290LCAwNzcwKQorICAgICAgICAgICAgZm9yIG5hbWUgaW4g
ZmlsZXM6CisgICAgICAgICAgICAgICAgcmVtb3ZlX3dpdGhfcmV0cnkob3MucmVtb3ZlLCBvcy5w
YXRoLmpvaW4ocm9vdCwgbmFtZSkpCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBkaXJzOgorICAg
ICAgICAgICAgICAgIHJlbW92ZV93aXRoX3JldHJ5KG9zLnJtZGlyLCBvcy5wYXRoLmpvaW4ocm9v
dCwgbmFtZSkpCisKKyAgICAgICAgcmVtb3ZlX3dpdGhfcmV0cnkob3Mucm1kaXIsIGZpbGVfcGF0
aCkKKworICAgIGRlZiB0ZXN0X3BsYXRmb3JtX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9uYW1lCisKKyAgICBkZWYgcmVsYXRpdmVfdGVzdF9maWxlbmFtZShzZWxmLCBmaWxlbmFt
ZSk6CisgICAgICAgICIiIlJlbGF0aXZlIHVuaXgtc3R5bGUgcGF0aCBmb3IgYSBmaWxlbmFtZSB1
bmRlciB0aGUgTGF5b3V0VGVzdHMKKyAgICAgICAgZGlyZWN0b3J5LiBGaWxlbmFtZXMgb3V0c2lk
ZSB0aGUgTGF5b3V0VGVzdHMgZGlyZWN0b3J5IHNob3VsZCByYWlzZQorICAgICAgICBhbiBlcnJv
ci4iIiIKKyAgICAgICAgcmV0dXJuIGZpbGVuYW1lW2xlbihzZWxmLmxheW91dF90ZXN0c19kaXIo
KSkgKyAxOl0KKworICAgIGRlZiByZXN1bHRzX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgIiIi
QWJzb2x1dGUgcGF0aCB0byB0aGUgcGxhY2UgdG8gc3RvcmUgdGhlIHRlc3QgcmVzdWx0cy4iIiIK
KyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWQoJ1BvcnQucmVzdWx0c19kaXJlY3RvcnknKQor
CisgICAgZGVmIHNldHVwX3Rlc3RfcnVuKHNlbGYpOgorICAgICAgICAiIiJUaGlzIHJvdXRpbmUg
Y2FuIGJlIG92ZXJyaWRkZW4gdG8gcGVyZm9ybSBhbnkgcG9ydC1zcGVjaWZpYworICAgICAgICB3
b3JrIHRoYXQgc2hvdXVsZCBiZSBkb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSB0ZXN0IHJ1bi4i
IiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIHNob3dfaHRtbF9yZXN1bHRzX2ZpbGUoc2VsZiwg
cmVzdWx0c19maWxlbmFtZSk6CisgICAgICAgICIiIlRoaXMgcm91dGluZSBzaG91bGQgZGlzcGxh
eSB0aGUgSFRNTCBmaWxlIHBvaW50ZWQgYXQgYnkKKyAgICAgICAgcmVzdWx0c19maWxlbmFtZSBp
biBhIHVzZXJzJyBicm93c2VyLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
KCdQb3J0LnNob3dfaHRtbF9yZXN1bHRzX2ZpbGUnKQorCisgICAgZGVmIHN0YXJ0X2RyaXZlcihz
ZWxmLCBwbmdfcGF0aCwgb3B0aW9ucyk6CisgICAgICAgICIiIlN0YXJ0cyBhIG5ldyB0ZXN0IERy
aXZlciBhbmQgcmV0dXJucyBhIGhhbmRsZSB0byB0aGUgb2JqZWN0LiIiIgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LnN0YXJ0X2RyaXZlcicpCisKKyAgICBkZWYgc3Rh
cnRfaGVscGVyKHNlbGYpOgorICAgICAgICAiIiJTdGFydCBhIGxheW91dCB0ZXN0IGhlbHBlciBp
ZiBuZWVkZWQgb24gdGhpcyBwb3J0LiBUaGUgdGVzdCBoZWxwZXIKKyAgICAgICAgaXMgdXNlZCB0
byByZWNvbmZpZ3VyZSBncmFwaGljcyBzZXR0aW5ncyBhbmQgZG8gb3RoZXIgdGhpbmdzIHRoYXQK
KyAgICAgICAgbWF5IGJlIG5lY2Vzc2FyeSB0byBlbnN1cmUgYSBrbm93biB0ZXN0IGNvbmZpZ3Vy
YXRpb24uIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQuc3RhcnRf
aGVscGVyJykKKworICAgIGRlZiBzdGFydF9odHRwX3NlcnZlcihzZWxmKToKKyAgICAgICAgIiIi
U3RhcnQgYSB3ZWIgc2VydmVyIGlmIGl0IGlzIGF2YWlsYWJsZS4gRG8gbm90aGluZyBpZgorICAg
ICAgICBpdCBpc24ndC4gVGhpcyByb3V0aW5lIGlzIGFsbG93ZWQgdG8gKGFuZCBtYXkpIGZhaWwg
aWYgYSBzZXJ2ZXIKKyAgICAgICAgaXMgYWxyZWFkeSBydW5uaW5nLiIiIgorICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLnVzZV9hcGFjaGU6CisgICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9
IGFwYWNoZV9odHRwX3NlcnZlci5MYXlvdXRUZXN0QXBhY2hlSHR0cGQoc2VsZiwKKyAgICAgICAg
ICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIgPSBodHRwX3NlcnZlci5MaWdodHRwZChzZWxm
LAorICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisgICAg
ICAgIHNlbGYuX2h0dHBfc2VydmVyLnN0YXJ0KCkKKworICAgIGRlZiBzdGFydF93ZWJzb2NrZXRf
c2VydmVyKHNlbGYpOgorICAgICAgICAiIiJTdGFydCBhIHdlYnNvY2tldCBzZXJ2ZXIgaWYgaXQg
aXMgYXZhaWxhYmxlLiBEbyBub3RoaW5nIGlmCisgICAgICAgIGl0IGlzbid0LiBUaGlzIHJvdXRp
bmUgaXMgYWxsb3dlZCB0byAoYW5kIG1heSkgZmFpbCBpZiBhIHNlcnZlcgorICAgICAgICBpcyBh
bHJlYWR5IHJ1bm5pbmcuIiIiCisgICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIgPSB3ZWJz
b2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KHNlbGYsCisgICAgICAgICAgICBzZWxmLl9vcHRpb25z
LnJlc3VsdHNfZGlyZWN0b3J5KQorICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyLnN0YXJ0
KCkKKworICAgIGRlZiBzdG9wX2hlbHBlcihzZWxmKToKKyAgICAgICAgIiIiU2h1dCBkb3duIHRo
ZSB0ZXN0IGhlbHBlciBpZiBpdCBpcyBydW5uaW5nLiBEbyBub3RoaW5nIGlmCisgICAgICAgIGl0
IGlzbid0LCBvciBpdCBpc24ndCBhdmFpbGFibGUuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IoJ1BvcnQuc3RvcF9oZWxwZXInKQorCisgICAgZGVmIHN0b3BfaHR0cF9zZXJ2
ZXIoc2VsZik6CisgICAgICAgICIiIlNodXQgZG93biB0aGUgaHR0cCBzZXJ2ZXIgaWYgaXQgaXMg
cnVubmluZy4gRG8gbm90aGluZyBpZgorICAgICAgICBpdCBpc24ndCwgb3IgaXQgaXNuJ3QgYXZh
aWxhYmxlLiIiIgorICAgICAgICBpZiBzZWxmLl9odHRwX3NlcnZlcjoKKyAgICAgICAgICAgIHNl
bGYuX2h0dHBfc2VydmVyLnN0b3AoKQorCisgICAgZGVmIHN0b3Bfd2Vic29ja2V0X3NlcnZlcihz
ZWxmKToKKyAgICAgICAgIiIiU2h1dCBkb3duIHRoZSB3ZWJzb2NrZXQgc2VydmVyIGlmIGl0IGlz
IHJ1bm5pbmcuIERvIG5vdGhpbmcgaWYKKyAgICAgICAgaXQgaXNuJ3QsIG9yIGl0IGlzbid0IGF2
YWlsYWJsZS4iIiIKKyAgICAgICAgaWYgc2VsZi5fd2Vic29ja2V0X3NlcnZlcjoKKyAgICAgICAg
ICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF9leHBlY3Rh
dGlvbnMoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIHRlc3QgZXhwZWN0YXRpb25zIGZv
ciB0aGlzIHBvcnQuCisKKyAgICAgICAgQmFzaWNhbGx5IHRoaXMgc3RyaW5nIHNob3VsZCBjb250
YWluIHRoZSBlcXVpdmFsZW50IG9mIGEKKyAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMgZmlsZS4g
U2VlIHRlc3RfZXhwZWN0YXRpb25zLnB5IGZvciBtb3JlIGRldGFpbHMuIiIiCisgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQudGVzdF9leHBlY3RhdGlvbnMnKQorCisgICAg
ZGVmIHRlc3RfYmFzZV9wbGF0Zm9ybV9uYW1lcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEg
bGlzdCBvZiB0aGUgJ2Jhc2UnIHBsYXRmb3JtcyBvbiB5b3VyIHBvcnQuIFRoZSBiYXNlCisgICAg
ICAgIHBsYXRmb3JtcyByZXByZXNlbnQgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMsIG9wZXJhdGlu
ZyBzeXN0ZW1zLAorICAgICAgICBvciBpbXBsZW1lbnRhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZGlm
ZmVyZW50IHZlcnNpb25zIG9mIGEgc2luZ2xlCisgICAgICAgIHBsYXRmb3JtKS4gRm9yIGV4YW1w
bGUsICdtYWMnIGFuZCAnd2luJyBtaWdodCBiZSBkaWZmZXJlbnQgYmFzZQorICAgICAgICBwbGF0
Zm9ybXMsIHdoZXJlYXNlICdtYWMtdGlnZXInIGFuZCAnbWFjLWxlb3BhcmQnIG1pZ2h0IGJlCisg
ICAgICAgIGRpZmZlcmVudCBwbGF0Zm9ybXMuIFRoaXMgcm91dGluZSBpcyB1c2VkIGJ5IHRoZSBy
ZWJhc2VsaW5pbmcgdG9vbAorICAgICAgICBhbmQgdGhlIGRhc2hib2FyZHMsIGFuZCB0aGUgc3Ry
aW5ncyBjb3JyZXNwb25kIHRvIHRoZSBpZGVudGlmaWVycworICAgICAgICBpbiB5b3VyIHRlc3Qg
ZXhwZWN0YXRpb25zICgqbm90KiBuZWNlc3NhcmlseSB0aGUgcGxhdGZvcm0gbmFtZXMKKyAgICAg
ICAgdGhlbXNlbHZlcykuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1Bv
cnQuYmFzZV90ZXN0X3BsYXRmb3JtcycpCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1lKHNl
bGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0
aGUgZ2l2ZW4gcGxhdGZvcm0gbmFtZQorICAgICAgICBpbiB0aGUgdGVzdCBleHBlY3RhdGlvbnMu
IFRoaXMgbWF5IGJlIHRoZSBzYW1lIGFzIG5hbWUoKSwgb3IgaXQKKyAgICAgICAgbWF5IGJlIGRp
ZmZlcmVudC4gRm9yIGV4YW1wbGUsIGNocm9taXVtIHJldHVybnMgJ21hYycgZm9yCisgICAgICAg
ICdjaHJvbWl1bS1tYWMnLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQ
b3J0LnRlc3RfcGxhdGZvcm1fbmFtZScpCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybXMoc2VsZik6
CisgICAgICAgICIiIlJldHVybnMgdGhlIGxpc3Qgb2YgdGVzdCBwbGF0Zm9ybSBpZGVudGlmaWVy
cyBhcyB1c2VkIGluIHRoZQorICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucyBhbmQgb24gZGFzaGJv
YXJkcywgdGhlIHJlYmFzZWxpbmluZyB0b29sLCBldGMuCisKKyAgICAgICAgTm90ZSB0aGF0IHRo
aXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBsaXN0IG9mIHBvcnRzLAorICAg
ICAgICB3aGljaCBtdXN0IGJlIGdsb2JhbGx5IHVuaXF1ZSAoZS5nLiwgYm90aCAnY2hyb21pdW0t
bWFjJyBhbmQgJ21hYycKKyAgICAgICAgbWlnaHQgcmV0dXJuICdtYWMnIGFzIGEgdGVzdF9wbGF0
Zm9ybSBuYW1lJy4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5w
bGF0Zm9ybXMnKQorCisgICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAgICIiIlJldHVybnMg
YSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgdmVyc2lvbiBvZiBhIGdpdmVuIHBsYXRmb3JtLCBlLmcu
CisgICAgICAgICctbGVvcGFyZCcgb3IgJy14cCcuCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIHRv
IGhlbHAgaWRlbnRpZnkgdGhlIGV4YWN0IHBvcnQgd2hlbiBwYXJzaW5nIHRlc3QKKyAgICAgICAg
ZXhwZWN0YXRpb25zLCBkZXRlcm1pbmluZyBzZWFyY2ggcGF0aHMsIGFuZCBsb2dnaW5nIGluZm9y
bWF0aW9uLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LnZlcnNp
b24nKQorCisgICAgZGVmIHdkaWZmX3RleHQoc2VsZiwgYWN0dWFsX2ZpbGVuYW1lLCBleHBlY3Rl
ZF9maWxlbmFtZSk6CisgICAgICAgICIiIlJldHVybnMgYSBzdHJpbmcgb2YgSFRNTCBpbmRpY2F0
aW5nIHRoZSB3b3JkLWxldmVsIGRpZmYgb2YgdGhlCisgICAgICAgIGNvbnRlbnRzIG9mIHRoZSB0
d28gZmlsZW5hbWVzLiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB3b3JkLWxldmVsCisgICAg
ICAgIGRpZmZpbmcgaXNuJ3QgYXZhaWxhYmxlLiIiIgorICAgICAgICBleGVjdXRhYmxlID0gc2Vs
Zi5fcGF0aF90b193ZGlmZigpCisgICAgICAgIGNtZCA9IFtleGVjdXRhYmxlLAorICAgICAgICAg
ICAgICAgJy0tc3RhcnQtZGVsZXRlPSMjV0RJRkZfREVMIyMnLAorICAgICAgICAgICAgICAgJy0t
ZW5kLWRlbGV0ZT0jI1dESUZGX0VORCMjJywKKyAgICAgICAgICAgICAgICctLXN0YXJ0LWluc2Vy
dD0jI1dESUZGX0FERCMjJywKKyAgICAgICAgICAgICAgICctLWVuZC1pbnNlcnQ9IyNXRElGRl9F
TkQjIycsCisgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSwKKyAgICAgICAgICAgICAg
IGFjdHVhbF9maWxlbmFtZV0KKyAgICAgICAgZ2xvYmFsIF93ZGlmZl9hdmFpbGFibGUKKyAgICAg
ICAgcmVzdWx0ID0gJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBQeXRob24ncyBQb3Bl
biBoYXMgYSBidWcgdGhhdCBjYXVzZXMgYW55IHBpcGVzIG9wZW5lZCB0byBhCisgICAgICAgICAg
ICAjIHByb2Nlc3MgdGhhdCBjYW4ndCBiZSBleGVjdXRlZCB0byBiZSBsZWFrZWQuICBTaW5jZSB0
aGlzCisgICAgICAgICAgICAjIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHRvbGVy
YXRlIGV4ZWMgZmFpbHVyZXMKKyAgICAgICAgICAgICMgdG8gZ3JhY2VmdWxseSBoYW5kbGUgY2Fz
ZXMgd2hlcmUgd2RpZmYgaXMgbm90IGluc3RhbGxlZCwKKyAgICAgICAgICAgICMgdGhlIGJ1ZyBy
ZXN1bHRzIGluIGEgbWFzc2l2ZSBmaWxlIGRlc2NyaXB0b3IgbGVhay4gQXMgYQorICAgICAgICAg
ICAgIyB3b3JrYXJvdW5kLCBpZiBhbiBleGVjIGZhaWx1cmUgaXMgZXZlciBleHBlcmllbmNlZCBm
b3IKKyAgICAgICAgICAgICMgd2RpZmYsIGFzc3VtZSBpdCdzIG5vdCBhdmFpbGFibGUuICBUaGlz
IHdpbGwgbGVhayBvbmUKKyAgICAgICAgICAgICMgZmlsZSBkZXNjcmlwdG9yIGJ1dCB0aGF0J3Mg
YmV0dGVyIHRoYW4gbGVha2luZyBlYWNoIHRpbWUKKyAgICAgICAgICAgICMgd2RpZmYgd291bGQg
YmUgcnVuLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBodHRwOi8vbWFpbC5weXRob24u
b3JnL3BpcGVybWFpbC9weXRob24tbGlzdC8KKyAgICAgICAgICAgICMgICAgMjAwOC1BdWd1c3Qv
NTA1NzUzLmh0bWwKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTMy
MTAKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSXQgYWxzbyBoYXMgYSB0aHJlYWRpbmcg
YnVnLCBzbyB3ZSBkb24ndCBvdXRwdXQgd2RpZmYgaWYKKyAgICAgICAgICAgICMgdGhlIFBvcGVu
IHJhaXNlcyBhIFZhbHVlRXJyb3IuCisgICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5v
cmcvaXNzdWUxMjM2CisgICAgICAgICAgICBpZiBfd2RpZmZfYXZhaWxhYmxlOgorICAgICAgICAg
ICAgICAgIHdkaWZmID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsCisgICAgICAgICAgICAgICAgICAg
IHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgICAg
ICB3ZGlmZiA9IGNnaS5lc2NhcGUod2RpZmYpCisgICAgICAgICAgICAgICAgd2RpZmYgPSB3ZGlm
Zi5yZXBsYWNlKCcjI1dESUZGX0RFTCMjJywgJzxzcGFuIGNsYXNzPWRlbD4nKQorICAgICAgICAg
ICAgICAgIHdkaWZmID0gd2RpZmYucmVwbGFjZSgnIyNXRElGRl9BREQjIycsICc8c3BhbiBjbGFz
cz1hZGQ+JykKKyAgICAgICAgICAgICAgICB3ZGlmZiA9IHdkaWZmLnJlcGxhY2UoJyMjV0RJRkZf
RU5EIyMnLCAnPC9zcGFuPicpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJzxoZWFkPjxzdHls
ZT4uZGVsIHsgYmFja2dyb3VuZDogI2ZhYTsgfSAnCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9
ICcuYWRkIHsgYmFja2dyb3VuZDogI2FmYTsgfTwvc3R5bGU+PC9oZWFkPicKKyAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gJzxwcmU+JyArIHdkaWZmICsgJzwvcHJlPicKKyAgICAgICAgZXhjZXB0
IE9TRXJyb3IsIGU6CisgICAgICAgICAgICBpZiAoZS5lcnJubyA9PSBlcnJuby5FTk9FTlQgb3Ig
ZS5lcnJubyA9PSBlcnJuby5FQUNDRVMgb3IKKyAgICAgICAgICAgICAgICBlLmVycm5vID09IGVy
cm5vLkVDSElMRCk6CisgICAgICAgICAgICAgICAgX3dkaWZmX2F2YWlsYWJsZSA9IEZhbHNlCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgcmV0dXJu
IHJlc3VsdAorCisgICAgIworICAgICMgUFJPVEVDVEVEIFJPVVRJTkVTCisgICAgIworICAgICMg
VGhlIHJvdXRpbmVzIGJlbG93IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSByb3V0aW5lcyBpbiB0
aGlzIGNsYXNzCisgICAgIyBvciBhbnkgb2YgaXRzIHN1YmNsYXNzZXMuCisgICAgIworCisgICAg
ZGVmIF9raWxsX3Byb2Nlc3Moc2VsZiwgcGlkKToKKyAgICAgICAgIiIiRm9yY2VmdWxseSBraWxs
IGEgcHJvY2Vzcy4KKworICAgICAgICBUaGlzIHJvdXRpbmUgc2hvdWxkIG5vdCBiZSB1c2VkIG9y
IG5lZWRlZCBnZW5lcmljYWxseSwgYnV0IGNhbiBiZQorICAgICAgICB1c2VkIGluIGhlbHBlciBm
aWxlcyBsaWtlIGh0dHBfc2VydmVyLnB5LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yKCdQb3J0LmtpbGxfcHJvY2VzcycpCisKKyAgICBkZWYgX3BhdGhfdG9fYXBhY2hlKHNl
bGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGFwYWNoZSBiaW5h
cnkuCisKKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgb25seSBieSBwb3J0cyB0aGF0IHVzZSB0aGUg
YXBhY2hlX2h0dHBfc2VydmVyIG1vZHVsZS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcignUG9ydC5wYXRoX3RvX2FwYWNoZScpCisKKyAgICBkZWYgX3BhdGhfdG9fYXBhY2hl
X2NvbmZpZ19maWxlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8g
dGhlIGFwYWNoZSBiaW5hcnkuCisKKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgb25seSBieSBwb3J0
cyB0aGF0IHVzZSB0aGUgYXBhY2hlX2h0dHBfc2VydmVyIG1vZHVsZS4iIiIKKyAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5wYXRoX3RvX2FwYWNoZV9jb25maWdfZmlsZScp
CisKKyAgICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRo
ZSBmdWxsIHBhdGggdG8gdGhlIHRlc3QgZHJpdmVyIChEdW1wUmVuZGVyVHJlZSkuIiIiCisgICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQucGF0aF90b19kcml2ZXInKQorCisg
ICAgZGVmIF9wYXRoX3RvX2hlbHBlcihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZnVs
bCBwYXRoIHRvIHRoZSBsYXlvdXRfdGVzdF9oZWxwZXIgYmluYXJ5LCB3aGljaAorICAgICAgICBp
cyB1c2VkIHRvIGhlbHAgY29uZmlndXJlIHRoZSBzeXN0ZW0gZm9yIHRoZSB0ZXN0IHJ1biwgb3Ig
Tm9uZQorICAgICAgICBpZiBubyBoZWxwZXIgaXMgbmVlZGVkLgorCisgICAgICAgIFRoaXMgaXMg
bGlrZWx5IG9ubHkgdXNlZCBieSBzdGFydC9zdG9wX2hlbHBlcigpLiIiIgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0Ll9wYXRoX3RvX2hlbHBlcicpCisKKyAgICBkZWYg
X3BhdGhfdG9faW1hZ2VfZGlmZihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBw
YXRoIHRvIHRoZSBpbWFnZV9kaWZmIGJpbmFyeSwgb3IgTm9uZSBpZiBpdAorICAgICAgICBpcyBu
b3QgYXZhaWxhYmxlLgorCisgICAgICAgIFRoaXMgaXMgbGlrZWx5IHVzZWQgb25seSBieSBkaWZm
X2ltYWdlKCkiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5wYXRo
X3RvX2ltYWdlX2RpZmYnKQorCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkKHNlbGYpOgorICAg
ICAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBMaWdIVFRQZCBiaW5hcnkuCisKKyAgICAg
ICAgVGhpcyBpcyBuZWVkZWQgb25seSBieSBwb3J0cyB0aGF0IHVzZSB0aGUgaHR0cF9zZXJ2ZXIu
cHkgbW9kdWxlLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0Ll9w
YXRoX3RvX2xpZ2h0dHBkJykKKworICAgIGRlZiBfcGF0aF90b19saWdodHRwZF9tb2R1bGVzKHNl
bGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBMaWdIVFRQZCBtb2R1bGVz
IGRpcmVjdG9yeS4KKworICAgICAgICBUaGlzIGlzIG5lZWRlZCBvbmx5IGJ5IHBvcnRzIHRoYXQg
dXNlIHRoZSBodHRwX3NlcnZlci5weSBtb2R1bGUuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IoJ1BvcnQuX3BhdGhfdG9fbGlnaHR0cGRfbW9kdWxlcycpCisKKyAgICBkZWYg
X3BhdGhfdG9fbGlnaHR0cGRfcGhwKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXRo
IHRvIHRoZSBMaWdIVFRQZCBQSFAgZXhlY3V0YWJsZS4KKworICAgICAgICBUaGlzIGlzIG5lZWRl
ZCBvbmx5IGJ5IHBvcnRzIHRoYXQgdXNlIHRoZSBodHRwX3NlcnZlci5weSBtb2R1bGUuIiIiCisg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQuX3BhdGhfdG9fbGlnaHR0cGRf
cGhwJykKKworICAgIGRlZiBfcGF0aF90b193ZGlmZihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJu
cyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB3ZGlmZiBiaW5hcnksIG9yIE5vbmUgaWYgaXQgaXMKKyAg
ICAgICAgbm90IGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIGlzIGxpa2VseSB1c2VkIG9ubHkg
Ynkgd2RpZmZfdGV4dCgpIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1Bv
cnQuX3BhdGhfdG9fd2RpZmYnKQorCisgICAgZGVmIF9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2Vs
ZiwgcGlkKToKKyAgICAgICAgIiIiRm9yY2VmdWxseSBhbmQgc3luY2hyb25vdXNseSBraWxscyB0
aGUgd2ViIHNlcnZlci4KKworICAgICAgICBUaGlzIHJvdXRpbmUgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGZyb20gaHR0cF9zZXJ2ZXIucHkgb3IgaXRzCisgICAgICAgIHN1YmNsYXNzZXMuIiIiCisg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BvcnQuX3NodXRfZG93bl9odHRwX3Nl
cnZlcicpCisKKyAgICBkZWYgX3dlYmtpdF9iYXNlbGluZV9wYXRoKHNlbGYsIHBsYXRmb3JtKToK
KyAgICAgICAgIiIiUmV0dXJuIHRoZSAgZnVsbCBwYXRoIHRvIHRoZSB0b3Agb2YgdGhlIGJhc2Vs
aW5lIHRyZWUgZm9yIGEKKyAgICAgICAgZ2l2ZW4gcGxhdGZvcm0uIiIiCisgICAgICAgIHJldHVy
biBvcy5wYXRoLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksICdwbGF0Zm9ybScsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0pCisKKworY2xhc3MgRHJpdmVyOgorICAg
ICIiIkFic3RyYWN0IGludGVyZmFjZSBmb3IgdGhlIER1bXBSZW5kZXJUcmVlIGludGVyZmFjZS4i
IiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBwbmdfcGF0aCwgb3B0aW9ucyk6Cisg
ICAgICAgICIiIkluaXRpYWxpemUgYSBEcml2ZXIgdG8gc3Vic2VxdWVudGx5IHJ1biB0ZXN0cy4K
KworICAgICAgICBUeXBpY2FsbHkgdGhpcyByb3V0aW5lIHdpbGwgc3Bhd24gRHVtcFJlbmRlclRy
ZWUgaW4gYSBjb25maWcKKyAgICAgICAgcmVhZHkgZm9yIHN1YnNlcXVlbnQgaW5wdXQuCisKKyAg
ICAgICAgcG9ydCAtIHJlZmVyZW5jZSBiYWNrIHRvIHRoZSBwb3J0IG9iamVjdC4KKyAgICAgICAg
cG5nX3BhdGggLSBhbiBhYnNvbHV0ZSBwYXRoIGZvciB0aGUgZHJpdmVyIHRvIHdyaXRlIGFueSBp
bWFnZQorICAgICAgICAgICAgZGF0YSBmb3IgYSB0ZXN0IChhcyBhIFBORykuIElmIG5vIHBhdGgg
aXMgcHJvdmlkZWQsIHRoYXQKKyAgICAgICAgICAgIGluZGljYXRlcyB0aGF0IHBpeGVsIHRlc3Qg
cmVzdWx0cyB3aWxsIG5vdCBiZSBjaGVja2VkLgorICAgICAgICBvcHRpb25zIC0gYW55IHBvcnQt
c3BlY2lmaWMgZHJpdmVyIG9wdGlvbnMuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVk
RXJyb3IoJ0RyaXZlci5fX2luaXRfXycpCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdXJpLCB0
aW1lb3V0LCBjaGVja3N1bSk6CisgICAgICAgICIiIlJ1biBhIHNpbmdsZSB0ZXN0IGFuZCByZXR1
cm4gdGhlIHJlc3VsdHMuCisKKyAgICAgICAgTm90ZSB0aGF0IGl0IGlzIG9rYXkgaWYgYSB0ZXN0
IHRpbWVzIG91dCBvciBjcmFzaGVzIGFuZCBsZWF2ZXMKKyAgICAgICAgdGhlIGRyaXZlciBpbiBh
biBpbmRldGVybWluYXRlIHN0YXRlLiBUaGUgdXBwZXIgbGF5ZXJzIG9mIHRoZSBwcm9ncmFtCisg
ICAgICAgIGFyZSByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAgYW5kIGVuc3VyaW5nIHRoaW5n
cyBhcmUgb2theS4KKworICAgICAgICB1cmkgLSBhIGZ1bGwgVVJJIGZvciB0aGUgZ2l2ZW4gdGVz
dAorICAgICAgICB0aW1lb3V0IC0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9y
ZSBhYm9ydGluZyB0aGlzIHRlc3QuCisgICAgICAgIGNoZWNrc3VtIC0gaWYgcHJlc2VudCwgdGhl
IGV4cGVjdGVkIGNoZWNrc3VtIGZvciB0aGUgaW1hZ2UgZm9yIHRoaXMKKyAgICAgICAgICAgIHRl
c3QKKworICAgICAgICBSZXR1cm5zIGEgdHVwbGUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAg
ICAgIGNyYXNoIC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZHJpdmVyIGNyYXNo
ZWQgb24gdGhlIHRlc3QKKyAgICAgICAgICAgIHRpbWVvdXQgLSBhIGJvb2xlYW4gaW5kaWNhdGlu
ZyB3aGVodGVyIHRoZSB0ZXN0IHRpbWVkIG91dAorICAgICAgICAgICAgY2hlY2tzdW0gLSBhIHN0
cmluZyBjb250YWluaW5nIHRoZSBjaGVja3N1bSBvZiB0aGUgaW1hZ2UsIGlmCisgICAgICAgICAg
ICAgICAgcHJlc2VudAorICAgICAgICAgICAgb3V0cHV0IC0gYW55IHRleHQgb3V0cHV0CisgICAg
ICAgICAgICBlcnJvciAtIGFueSB1bmV4cGVjdGVkIG9yIGFkZGl0aW9uYWwgKG9yIGVycm9yKSB0
ZXh0IG91dHB1dAorCisgICAgICAgIE5vdGUgdGhhdCB0aGUgaW1hZ2UgaXRzZWxmIHNob3VsZCBi
ZSB3cml0dGVuIHRvIHRoZSBwYXRoIHRoYXQgd2FzCisgICAgICAgIHNwZWNpZmllZCBpbiB0aGUg
X19pbml0X18oKSBjYWxsLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdE
cml2ZXIucnVuX3Rlc3QnKQorCisgICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgICIiIlJldHVy
bnMgTm9uZSBpZiB0aGUgRHJpdmVyIGlzIHN0aWxsIHJ1bm5pbmcuIFJldHVybnMgdGhlIHJldHVy
bmNvZGUKKyAgICAgICAgaWYgaXQgaGFzIGV4aXRlZC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcignRHJpdmVyLnBvbGwnKQorCisgICAgZGVmIHJldHVybmNvZGUoc2VsZik6
CisgICAgICAgICIiIlJldHVybnMgdGhlIHN5c3RlbS1zcGVjaWZpYyByZXR1cm5jb2RlIGlmIHRo
ZSBEcml2ZXIgaGFzIHN0b3BwZWQgb3IKKyAgICAgICAgZXhpdGVkLiIiIgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdEcml2ZXIucmV0dXJuY29kZScpCisKKyAgICBkZWYgc3Rv
cChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignRHJpdmVyLnN0b3An
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9iYXNlLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW0ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjU5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisiIiJDaHJvbWl1bSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFBvcnQgaW50ZXJm
YWNlLiIiIgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBv
cnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworaW1wb3J0IGJhc2UKK2lt
cG9ydCBodHRwX3NlcnZlcgoraW1wb3J0IHdlYnNvY2tldF9zZXJ2ZXIKKworCitjbGFzcyBDaHJv
bWl1bVBvcnQoYmFzZS5Qb3J0KToKKyAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBDaHJv
bWl1bSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFBvcnQgY2xhc3MuIiIiCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIGJhc2Uu
UG9ydC5fX2luaXRfXyhzZWxmLCBwb3J0X25hbWUsIG9wdGlvbnMpCisgICAgICAgIHNlbGYuX2No
cm9taXVtX2Jhc2VfZGlyID0gTm9uZQorCisgICAgZGVmIGJhc2VsaW5lX3BhdGgoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9jaHJvbWl1bV9iYXNlbGluZV9wYXRoKHNlbGYuX25hbWUpCisK
KyAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IFRydWUKKyAg
ICAgICAgdGVzdF9zaGVsbF9iaW5hcnlfcGF0aCA9IHNlbGYuX3BhdGhfdG9fZHJpdmVyKCkKKyAg
ICAgICAgaWYgb3MucGF0aC5leGlzdHModGVzdF9zaGVsbF9iaW5hcnlfcGF0aCk6CisgICAgICAg
ICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihbdGVzdF9zaGVsbF9iaW5hcnlfcGF0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1jaGVjay1sYXlvdXQtdGVzdC1z
eXMtZGVwcyddKQorICAgICAgICAgICAgaWYgcHJvYy53YWl0KCkgIT0gMDoKKyAgICAgICAgICAg
ICAgICBsb2dnaW5nLmVycm9yKCJBYm9ydGluZyBiZWNhdXNlIHN5c3RlbSBkZXBlbmRlbmNpZXMg
Y2hlY2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZC4iKQorICAgICAg
ICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIlRvIG92ZXJyaWRlLCBpbnZva2Ugd2l0aCAtLW5vY2hl
Y2stc3lzLWRlcHMiKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZhbHNlCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCd0ZXN0IGRyaXZlciBpcyBub3QgZm91bmQg
YXQgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zaGVsbF9iaW5hcnlfcGF0
aCkKKyAgICAgICAgICAgIHJlc3VsdCA9IEZhbHNlCisKKyAgICAgICAgaW1hZ2VfZGlmZl9wYXRo
ID0gc2VsZi5fcGF0aF90b19pbWFnZV9kaWZmKCkKKyAgICAgICAgaWYgKG5vdCBvcy5wYXRoLmV4
aXN0cyhpbWFnZV9kaWZmX3BhdGgpIGFuZCBub3QKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
bm9fcGl4ZWxfdGVzdHMpOgorICAgICAgICAgICAgbG9nZ2luZy5lcnJvcignaW1hZ2UgZGlmZiBu
b3QgZm91bmQgYXQgJXMnICUgaW1hZ2VfZGlmZl9wYXRoKQorICAgICAgICAgICAgbG9nZ2luZy5l
cnJvcigiVG8gb3ZlcnJpZGUsIGludm9rZSB3aXRoIC0tbm8tcGl4ZWwtdGVzdHMiKQorICAgICAg
ICAgICAgcmVzdWx0ID0gRmFsc2UKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYg
Y29tcGFyZV90ZXh0KHNlbGYsIGFjdHVhbF90ZXh0LCBleHBlY3RlZF90ZXh0KToKKyAgICAgICAg
cmV0dXJuIGFjdHVhbF90ZXh0ICE9IGV4cGVjdGVkX3RleHQKKworICAgIGRlZiBwYXRoX2Zyb21f
Y2hyb21pdW1fYmFzZShzZWxmLCAqY29tcHMpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmdWxs
IHBhdGggdG8gcGF0aCBtYWRlIGJ5IGpvaW5pbmcgdGhlIHRvcCBvZiB0aGUKKyAgICAgICAgQ2hy
b21pdW0gc291cmNlIHRyZWUgYW5kIHRoZSBsaXN0IG9mIHBhdGggY29tcG9uZW50cyBpbiB8KmNv
bXBzfC4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nocm9taXVtX2Jhc2VfZGlyOgorICAgICAg
ICAgICAgYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKKyAgICAgICAgICAgIHNl
bGYuX2Nocm9taXVtX2Jhc2VfZGlyID0gYWJzcGF0aFswOmFic3BhdGguZmluZCgndGhpcmRfcGFy
dHknKV0KKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLl9jaHJvbWl1bV9iYXNlX2Rp
ciwgKmNvbXBzKQorCisgICAgZGVmIHJlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFzZSgnd2Via2l0Jywgc2VsZi5fb3B0aW9u
cy50YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCisKKyAgICBkZWYgc2V0dXBfdGVzdF9ydW4o
c2VsZik6CisgICAgICAgICMgRGVsZXRlIHRoZSBkaXNrIGNhY2hlIGlmIGFueSB0byBlbnN1cmUg
YSBjbGVhbiB0ZXN0IHJ1bi4KKyAgICAgICAgdGVzdF9zaGVsbF9iaW5hcnlfcGF0aCA9IHNlbGYu
X3BhdGhfdG9fZHJpdmVyKCkKKyAgICAgICAgY2FjaGVkaXIgPSBvcy5wYXRoLnNwbGl0KHRlc3Rf
c2hlbGxfYmluYXJ5X3BhdGgpWzBdCisgICAgICAgIGNhY2hlZGlyID0gb3MucGF0aC5qb2luKGNh
Y2hlZGlyLCAiY2FjaGUiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjYWNoZWRpcik6Cisg
ICAgICAgICAgICBzaHV0aWwucm10cmVlKGNhY2hlZGlyKQorCisgICAgZGVmIHNob3dfcmVzdWx0
c19odG1sX2ZpbGUoc2VsZiwgcmVzdWx0c19maWxlbmFtZSk6CisgICAgICAgIHN1YnByb2Nlc3Mu
UG9wZW4oW3NlbGYuX3BhdGhfdG9fZHJpdmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuZmlsZW5hbWVfdG9fdXJpKHJlc3VsdHNfZmlsZW5hbWUpXSkKKworICAgIGRlZiBzdGFy
dF9kcml2ZXIoc2VsZiwgaW1hZ2VfcGF0aCwgb3B0aW9ucyk6CisgICAgICAgICIiIlN0YXJ0cyBh
IG5ldyBEcml2ZXIgYW5kIHJldHVybnMgYSBoYW5kbGUgdG8gaXQuIiIiCisgICAgICAgIHJldHVy
biBDaHJvbWl1bURyaXZlcihzZWxmLCBpbWFnZV9wYXRoLCBvcHRpb25zKQorCisgICAgZGVmIHN0
YXJ0X2hlbHBlcihzZWxmKToKKyAgICAgICAgaGVscGVyX3BhdGggPSBzZWxmLl9wYXRoX3RvX2hl
bHBlcigpCisgICAgICAgIGlmIGhlbHBlcl9wYXRoOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1
ZygiU3RhcnRpbmcgbGF5b3V0IGhlbHBlciAlcyIgJSBoZWxwZXJfcGF0aCkKKyAgICAgICAgICAg
IHNlbGYuX2hlbHBlciA9IHN1YnByb2Nlc3MuUG9wZW4oW2hlbHBlcl9wYXRoXSwKKyAgICAgICAg
ICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0
ZGVycj1Ob25lKQorICAgICAgICAgICAgaXNfcmVhZHkgPSBzZWxmLl9oZWxwZXIuc3Rkb3V0LnJl
YWRsaW5lKCkKKyAgICAgICAgICAgIGlmIG5vdCBpc19yZWFkeS5zdGFydHN3aXRoKCdyZWFkeScp
OgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoImxheW91dF90ZXN0X2hlbHBlciBmYWls
ZWQgdG8gYmUgcmVhZHkiKQorCisgICAgZGVmIHN0b3BfaGVscGVyKHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLl9oZWxwZXI6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTdG9wcGluZyBsYXlv
dXQgdGVzdCBoZWxwZXIiKQorICAgICAgICAgICAgc2VsZi5faGVscGVyLnN0ZGluLndyaXRlKCJ4
XG4iKQorICAgICAgICAgICAgc2VsZi5faGVscGVyLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAg
IHNlbGYuX2hlbHBlci53YWl0KCkKKworICAgIGRlZiB0ZXN0X2Jhc2VfcGxhdGZvcm1fbmFtZXMo
c2VsZik6CisgICAgICAgIHJldHVybiAoJ2xpbnV4JywgJ21hYycsICd3aW4nKQorCisgICAgZGVm
IHRlc3RfZXhwZWN0YXRpb25zKHNlbGYsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgICIiIlJldHVy
bnMgdGhlIHRlc3QgZXhwZWN0YXRpb25zIGZvciB0aGlzIHBvcnQuCisKKyAgICAgICAgQmFzaWNh
bGx5IHRoaXMgc3RyaW5nIHNob3VsZCBjb250YWluIHRoZSBlcXVpdmFsZW50IG9mIGEKKyAgICAg
ICAgdGVzdF9leHBlY3RhdGlvbnMgZmlsZS4gU2VlIHRlc3RfZXhwZWN0YXRpb25zLnB5IGZvciBt
b3JlIGRldGFpbHMuIiIiCisgICAgICAgIGV4cGVjdGF0aW9uc19maWxlID0gc2VsZi5wYXRoX2Zy
b21fY2hyb21pdW1fYmFzZSgnd2Via2l0JywgJ3Rvb2xzJywKKyAgICAgICAgICAgICdsYXlvdXRf
dGVzdHMnLCAndGVzdF9leHBlY3RhdGlvbnMudHh0JykKKyAgICAgICAgcmV0dXJuIGZpbGUoZXhw
ZWN0YXRpb25zX2ZpbGUsICJyIikucmVhZCgpCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1l
cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVzdF9iYXNlX3BsYXRmb3JtX25hbWVzKCkg
KyAoJ3dpbi14cCcsCisgICAgICAgICAgICAnd2luLXZpc3RhJywgJ3dpbi03JykKKworICAgICMK
KyAgICAjIFBST1RFQ1RFRCBNRVRIT0RTCisgICAgIworICAgICMgVGhlc2Ugcm91dGluZXMgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGJ5IG90aGVyIG1ldGhvZHMgaW4gdGhpcyBmaWxlCisgICAgIyBv
ciBhbnkgc3ViY2xhc3Nlcy4KKyAgICAjCisKKyAgICBkZWYgX2Nocm9taXVtX2Jhc2VsaW5lX3Bh
dGgoc2VsZiwgcGxhdGZvcm0pOgorICAgICAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgorICAgICAg
ICAgICAgcGxhdGZvcm0gPSBzZWxmLm5hbWUoKQorICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zy
b21fY2hyb21pdW1fYmFzZSgnd2Via2l0JywgJ2RhdGEnLCAnbGF5b3V0X3Rlc3RzJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybScsIHBsYXRmb3JtLCAnTGF5b3V0VGVzdHMnKQorCisKK2NsYXNzIENo
cm9taXVtRHJpdmVyKGJhc2UuRHJpdmVyKToKKyAgICAiIiJBYnN0cmFjdCBpbnRlcmZhY2UgZm9y
IHRoZSBEdW1wUmVuZGVyVHJlZSBpbnRlcmZhY2UuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcG9ydCwgaW1hZ2VfcGF0aCwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0
CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3RhcmdldCA9
IHBvcnQuX29wdGlvbnMudGFyZ2V0CisgICAgICAgIHNlbGYuX2ltYWdlX3BhdGggPSBpbWFnZV9w
YXRoCisKKyAgICAgICAgY21kID0gW10KKyAgICAgICAgIyBIb29rIGZvciBpbmplY3RpbmcgdmFs
Z3JpbmQgb3Igb3RoZXIgcnVudGltZSBpbnN0cnVtZW50YXRpb24sCisgICAgICAgICMgdXNlZCBi
eSBlLmcuIHRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kX3Rlc3RzLnB5LgorICAgICAgICB3cmFwcGVy
ID0gb3MuZW52aXJvbi5nZXQoIkJST1dTRVJfV1JBUFBFUiIsIE5vbmUpCisgICAgICAgIGlmIHdy
YXBwZXIgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSBbd3JhcHBlcl0KKyAgICAgICAgaWYg
c2VsZi5fcG9ydC5fb3B0aW9ucy53cmFwcGVyOgorICAgICAgICAgICAgIyBUaGlzIHNwbGl0KCkg
aXNuJ3QgcmVhbGx5IHdoYXQgd2Ugd2FudCAtLSBpdCBpbmNvcnJlY3RseSB3aWxsCisgICAgICAg
ICAgICAjIHNwbGl0IHF1b3RlZCBzdHJpbmdzIHdpdGhpbiB0aGUgd3JhcHBlciBhcmd1bWVudCAt
LSBidXQgaW4KKyAgICAgICAgICAgICMgcHJhY3RpY2UgaXQgc2hvdWxkbid0IGNvbWUgdXAgYW5k
IHRoZSAtLWhlbHAgb3V0cHV0IHdhcm5zCisgICAgICAgICAgICAjIGFib3V0IGl0IGFueXdheS4K
KyAgICAgICAgICAgIGNtZCArPSBzZWxmLl9vcHRpb25zLndyYXBwZXIuc3BsaXQoKQorICAgICAg
ICBjbWQgKz0gW3BvcnQuX3BhdGhfdG9fZHJpdmVyKCksICctLWxheW91dC10ZXN0cyddCisgICAg
ICAgIGlmIG9wdGlvbnM6CisgICAgICAgICAgICBjbWQgKz0gb3B0aW9ucworICAgICAgICBzZWxm
Ll9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQ
RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nl
c3MuU1RET1VUKQorCisgICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9w
cm9jLnBvbGwoKQorCisgICAgZGVmIHJldHVybmNvZGUoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9wcm9jLnJldHVybmNvZGUKKworICAgIGRlZiBydW5fdGVzdChzZWxmLCB1cmksIHRpbWVv
dXRtcywgY2hlY2tzdW0pOgorICAgICAgICBvdXRwdXQgPSBbXQorICAgICAgICBlcnJvciA9IFtd
CisgICAgICAgIGNyYXNoID0gRmFsc2UKKyAgICAgICAgdGltZW91dCA9IEZhbHNlCisgICAgICAg
IGFjdHVhbF91cmkgPSBOb25lCisgICAgICAgIGFjdHVhbF9jaGVja3N1bSA9IE5vbmUKKworICAg
ICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgY21kID0gdXJpCisgICAgICAg
IGlmIHRpbWVvdXRtczoKKyAgICAgICAgICAgIGNtZCArPSAnICcgKyBzdHIodGltZW91dG1zKQor
ICAgICAgICBpZiBjaGVja3N1bToKKyAgICAgICAgICAgIGNtZCArPSAnICcgKyBjaGVja3N1bQor
ICAgICAgICBjbWQgKz0gIlxuIgorCisgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUoY21k
KQorICAgICAgICBsaW5lID0gc2VsZi5fcHJvYy5zdGRvdXQucmVhZGxpbmUoKQorICAgICAgICB3
aGlsZSBsaW5lLnJzdHJpcCgpICE9ICIjRU9GIjoKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHdl
IGhhdmVuJ3QgY3Jhc2hlZC4KKyAgICAgICAgICAgIGlmIGxpbmUgPT0gJycgYW5kIHNlbGYucG9s
bCgpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBoZXggY29kZSAweGMw
MDAwMDFkLCB3aGljaCBpcyB1c2VkIGZvciBhYnJ1cHQKKyAgICAgICAgICAgICAgICAjIHRlcm1p
bmF0aW9uLiBUaGlzIGhhcHBlbnMgaWYgd2UgaGl0IGN0cmwrYyBmcm9tIHRoZSBwcm9tcHQKKyAg
ICAgICAgICAgICAgICAjIGFuZCB3ZSBoYXBwZW4gdG8gYmUgd2FpdGluZyBvbiB0aGUgdGVzdF9z
aGVsbC4KKyAgICAgICAgICAgICAgICAjIHNkb3lvbjogTm90IHN1cmUgZm9yIHdoaWNoIE9TIGFu
ZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgdGhlCisgICAgICAgICAgICAgICAgIyBhYm92ZSBjb2Rl
IGlzIHZhbGlkLiBXaGF0IHdvcmtzIGZvciBtZSB1bmRlciBMaW51eCB0byBkZXRlY3QKKyAgICAg
ICAgICAgICAgICAjIGN0cmwrYyBpcyBmb3IgdGhlIHN1YnByb2Nlc3MgcmV0dXJuY29kZSB0byBi
ZSBuZWdhdGl2ZQorICAgICAgICAgICAgICAgICMgU0lHSU5ULiBBbmQgdGhhdCBhZ3JlZXMgd2l0
aCB0aGUgc3VicHJvY2VzcyBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgICAgIGlmICgtMTA3
Mzc0MTUxMCA9PSBzZWxmLl9wcm9jLnJldHVybmNvZGUgb3IKKyAgICAgICAgICAgICAgICAgICAg
LSBzaWduYWwuU0lHSU5UID09IHNlbGYuX3Byb2MucmV0dXJuY29kZSk6CisgICAgICAgICAgICAg
ICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgICAgICAgICAgY3Jhc2ggPSBU
cnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgIyBEb24ndCBpbmNsdWRl
ICNVUkwgbGluZXMgaW4gb3VyIG91dHB1dAorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRo
KCIjVVJMOiIpOgorICAgICAgICAgICAgICAgIGFjdHVhbF91cmkgPSBsaW5lLnJzdHJpcCgpWzU6
XQorICAgICAgICAgICAgICAgIGlmIHVyaSAhPSBhY3R1YWxfdXJpOgorICAgICAgICAgICAgICAg
ICAgICBsb2dnaW5nLmZhdGFsKCJUZXN0IGdvdCBvdXQgb2Ygc3luYzpcbnwlc3xcbnwlc3wiICUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVyaSwgYWN0dWFsX3VyaSkpCisgICAg
ICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJ0ZXN0IG91dCBvZiBzeW5jIikK
KyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCIjTUQ1OiIpOgorICAgICAgICAgICAg
ICAgIGFjdHVhbF9jaGVja3N1bSA9IGxpbmUucnN0cmlwKClbNTpdCisgICAgICAgICAgICBlbGlm
IGxpbmUuc3RhcnRzd2l0aCgiI1RFU1RfVElNRURfT1VUIik6CisgICAgICAgICAgICAgICAgdGlt
ZW91dCA9IFRydWUKKyAgICAgICAgICAgICAgICAjIFRlc3QgdGltZWQgb3V0LCBidXQgd2Ugc3Rp
bGwgbmVlZCB0byByZWFkIHVudGlsICNFT0YuCisgICAgICAgICAgICBlbGlmIGFjdHVhbF91cmk6
CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChsaW5lKQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBlcnJvci5hcHBlbmQobGluZSkKKworICAgICAgICAgICAgbGluZSA9
IHNlbGYuX3Byb2Muc3Rkb3V0LnJlYWRsaW5lKCkKKworICAgICAgICByZXR1cm4gKGNyYXNoLCB0
aW1lb3V0LCBhY3R1YWxfY2hlY2tzdW0sICcnLmpvaW4ob3V0cHV0KSwKKyAgICAgICAgICAgICAg
ICAnJy5qb2luKGVycm9yKSkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBpZiBzZWxm
Ll9wcm9jOgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCisgICAgICAgICAg
ICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCisgICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0
ZGVycjoKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgpCisgICAgICAg
ICAgICBpZiAoc3lzLnBsYXRmb3JtIG5vdCBpbiAoJ3dpbjMyJywgJ2N5Z3dpbicpIGFuZAorICAg
ICAgICAgICAgICAgIG5vdCBzZWxmLl9wcm9jLnBvbGwoKSk6CisgICAgICAgICAgICAgICAgIyBD
bG9zaW5nIHN0ZGluL3N0ZG91dC9zdGRlcnIgaGFuZ3Mgc29tZXRpbWVzIG9uIE9TIFguCisgICAg
ICAgICAgICAgICAgbnVsbCA9IG9wZW4ob3MuZGV2bnVsbCwgInciKQorICAgICAgICAgICAgICAg
IHN1YnByb2Nlc3MuUG9wZW4oWyJraWxsIiwgIi05IiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cihzZWxmLl9wcm9jLnBpZCldLCBzdGRlcnI9bnVsbCkKKyAgICAgICAgICAg
ICAgICBudWxsLmNsb3NlKCkKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9saW51eC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2xp
bnV4LnB5CShyZXZpc2lvbiA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbGludXgucHkJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDIyMiArMjcsMTE4IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0iIiJUaGlz
IGlzIHRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcG9ydAotICAgcGFja2FnZS4gVGhp
cyBmaWxlIHNob3VsZCBvbmx5IGJlIGltcG9ydGVkIGJ5IHRoYXQgcGFja2FnZS4iIiIKKyIiIkNo
cm9taXVtIE1hYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCiAKIGlt
cG9ydCBvcworaW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3VicHJvY2Vz
cwotaW1wb3J0IHN5cwotaW1wb3J0IGxvZ2dpbmcKIAotaW1wb3J0IGNocm9taXVtX3dpbgotaW1w
b3J0IHBhdGhfdXRpbHMKK2ltcG9ydCBjaHJvbWl1bQogCiAKLWRlZiBwbGF0Zm9ybV9uYW1lKCk6
Ci0gICAgIiIiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcGxhdGZvcm0gd2UncmUgY3VycmVudGx5
IHJ1bm5pbmcgb24uIiIiCi0gICAgcmV0dXJuICdjaHJvbWl1bS1saW51eCcgKyBwbGF0Zm9ybV92
ZXJzaW9uKCkKLQotCi1kZWYgcGxhdGZvcm1fdmVyc2lvbigpOgotICAgICIiIlJldHVybnMgdGhl
IHZlcnNpb24gc3RyaW5nIGZvciB0aGUgcGxhdGZvcm0sIGUuZy4gJy12aXN0YScgb3IKLSAgICAn
LXNub3dsZW9wYXJkJy4gSWYgdGhlIHBsYXRmb3JtIGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdl
ZW4KLSAgICBtaW5vciB2ZXJzaW9ucywgaXQgcmV0dXJucyAnJy4iIiIKLSAgICByZXR1cm4gJycK
LQotCi1kZWYgZ2V0X251bV9jb3JlcygpOgotICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBj
b3JlcyBvbiB0aGUgbWFjaGluZS4gRm9yIGh5cGVydGhyZWFkZWQgbWFjaGluZXMsCi0gICAgdGhp
cyB3aWxsIGJlIGRvdWJsZSB0aGUgbnVtYmVyIG9mIGFjdHVhbCBwcm9jZXNzb3JzLiIiIgotICAg
IG51bV9jb3JlcyA9IG9zLnN5c2NvbmYoIlNDX05QUk9DRVNTT1JTX09OTE4iKQotICAgIGlmIGlz
aW5zdGFuY2UobnVtX2NvcmVzLCBpbnQpIGFuZCBudW1fY29yZXMgPiAwOgotICAgICAgICByZXR1
cm4gbnVtX2NvcmVzCi0gICAgcmV0dXJuIDEKLQotCi1kZWYgYmFzZWxpbmVfcGF0aChwbGF0Zm9y
bT1Ob25lKToKLSAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2Yg
dGhlIHNvdXJjZSB0cmVlIGZvciB0aGUKLSAgICBiYXNlbGluZXMgZm9yIHRoZSBzcGVjaWZpZWQg
cGxhdGZvcm0gdmVyc2lvbi4gSWYgfHBsYXRmb3JtfCBpcyBOb25lLAotICAgIHRoZW4gdGhlIHZl
cnNpb24gY3VycmVudGx5IGluIHVzZSBpcyB1c2VkLiIiIgotICAgIGlmIHBsYXRmb3JtIGlzIE5v
bmU6Ci0gICAgICAgIHBsYXRmb3JtID0gcGxhdGZvcm1fbmFtZSgpCi0gICAgcmV0dXJuIHBhdGhf
dXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICdkYXRhJywgJ2xheW91dF90ZXN0cycsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJywgcGxhdGZvcm0s
ICdMYXlvdXRUZXN0cycpCi0KLQotZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRmb3JtPU5v
bmUpOgotICAgICIiIlJldHVybnMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZv
ciBiYXNlbGluZXMvcmVzdWx0cywgaW4KLSAgICBvcmRlciBvZiBwcmVmZXJlbmNlLiBQYXRocyBh
cmUgcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUuIiIiCi0gICAgcmV0dXJu
IFtiYXNlbGluZV9wYXRoKHBsYXRmb3JtKSwKLSAgICAgICAgICAgIGNocm9taXVtX3dpbi5iYXNl
bGluZV9wYXRoKCdjaHJvbWl1bS13aW4nKSwKLSAgICAgICAgICAgIHBhdGhfdXRpbHMud2Via2l0
X2Jhc2VsaW5lX3BhdGgoJ3dpbicpLAotICAgICAgICAgICAgcGF0aF91dGlscy53ZWJraXRfYmFz
ZWxpbmVfcGF0aCgnbWFjJyldCi0KLQotZGVmIGFwYWNoZV9leGVjdXRhYmxlX3BhdGgoKToKLSAg
ICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBhY2hlIiIiCi0gICAg
cGF0aCA9IG9zLnBhdGguam9pbigiL3VzciIsICJzYmluIiwgImFwYWNoZTIiKQotICAgIGlmIG9z
LnBhdGguZXhpc3RzKHBhdGgpOgotICAgICAgICByZXR1cm4gcGF0aAotICAgIHByaW50ICJVbmFi
bGUgdG8gZmluZSBBcGFjaGUgZXhlY3V0YWJsZSAlcyIgJSBwYXRoCi0gICAgX21pc3NpbmdfYXBh
Y2hlKCkKLQotCi1kZWYgYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5z
IHRoZSBwYXRoIHRvIEFwYWNoZSBjb25maWcgZmlsZSIiIgotICAgIHJldHVybiBwYXRoX3V0aWxz
LnBhdGhfZnJvbV9iYXNlKCJ0aGlyZF9wYXJ0eSIsICJXZWJLaXQiLCAiTGF5b3V0VGVzdHMiLAot
ICAgICAgICAiaHR0cCIsICJjb25mIiwgImFwYWNoZTItZGViaWFuLWh0dHBkLmNvbmYiKQotCi0K
LWRlZiBsaWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBleGVj
dXRhYmxlIHBhdGggdG8gc3RhcnQgTGlnSFRUUGQiIiIKLSAgICBiaW5wYXRoID0gIi91c3Ivc2Jp
bi9saWdodHRwZCIKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhiaW5wYXRoKToKLSAgICAgICAgcmV0
dXJuIGJpbnBhdGgKLSAgICBwcmludCAiVW5hYmxlIHRvIGZpbmQgTGlnSFRUUGQgZXhlY3V0YWJs
ZSAlcyIgJSBiaW5wYXRoCi0gICAgX21pc3NpbmdfbGlnaHR0cGQoKQotCi0KLWRlZiBsaWdodHRw
ZF9tb2R1bGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxlIHBhdGgg
Zm9yIExpZ0hUVFBkIiIiCi0gICAgbW9kcGF0aCA9ICIvdXNyL2xpYi9saWdodHRwZCIKLSAgICBp
ZiBvcy5wYXRoLmV4aXN0cyhtb2RwYXRoKToKLSAgICAgICAgcmV0dXJuIG1vZHBhdGgKLSAgICBw
cmludCAiVW5hYmxlIHRvIGZpbmQgTGlnSFRUUGQgbW9kdWxlcyAlcyIgJSBtb2RwYXRoCi0gICAg
X21pc3NpbmdfbGlnaHR0cGQoKQotCi0KLWRlZiBsaWdodHRwZF9waHBfcGF0aCgpOgotICAgICIi
IlJldHVybnMgdGhlIFBIUCBleGVjdXRhYmxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCi0gICAgYmlu
cGF0aCA9ICIvdXNyL2Jpbi9waHAtY2dpIgotICAgIGlmIG9zLnBhdGguZXhpc3RzKGJpbnBhdGgp
OgotICAgICAgICByZXR1cm4gYmlucGF0aAotICAgIHByaW50ICJVbmFibGUgdG8gZmluZCBQSFAg
Q0dJIGV4ZWN1dGFibGUgJXMiICUgYmlucGF0aAotICAgIF9taXNzaW5nX2xpZ2h0dHBkKCkKLQot
Ci1kZWYgd2RpZmZfcGF0aCgpOgotICAgICIiIlBhdGggdG8gdGhlIFdEaWZmIGV4ZWN1dGFibGUs
IHdoaWNoIHdlIGFzc3VtZSBpcyBhbHJlYWR5IGluc3RhbGxlZCBhbmQKLSAgICBpbiB0aGUgdXNl
cidzICRQQVRILiIiIgotICAgIHJldHVybiAnd2RpZmYnCi0KLQotZGVmIGltYWdlX2RpZmZfcGF0
aCh0YXJnZXQpOgotICAgICIiIlBhdGggdG8gdGhlIGltYWdlX2RpZmYgYmluYXJ5LgotCi0gICAg
QXJnczoKLSAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1vZGUgKGRlYnVnIG9yIHJlbGVhc2Up
IiIiCi0gICAgcmV0dXJuIF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cyh0YXJnZXQsICdpbWFnZV9k
aWZmJykKLQotCi1kZWYgbGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgodGFyZ2V0KToKLSAgICAiIiJQ
YXRoIHRvIHRoZSBsYXlvdXRfdGVzdCBoZWxwZXIgYmluYXJ5LCBpZiBuZWVkZWQsIGVtcHR5IG90
aGVyd2lzZSIiIgotICAgIHJldHVybiAnJwotCi0KLWRlZiB0ZXN0X3NoZWxsX3BhdGgodGFyZ2V0
KToKLSAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRoIGZvciBv
dXIgVGVzdFNoZWxsLgotCi0gICAgQXJnczoKLSAgICAgIHRhcmdldDogQnVpbGQgdGFyZ2V0IG1v
ZGUgKGRlYnVnIG9yIHJlbGVhc2UpICIiIgotICAgIGlmIHRhcmdldCBpbiAoJ0RlYnVnJywgJ1Jl
bGVhc2UnKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVidWdfcGF0aCA9IF9wYXRoX2Zy
b21fYnVpbGRfcmVzdWx0cygnRGVidWcnLCAndGVzdF9zaGVsbCcpCi0gICAgICAgICAgICByZWxl
YXNlX3BhdGggPSBfcGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHMoJ1JlbGVhc2UnLCAndGVzdF9zaGVs
bCcpCi0KLSAgICAgICAgICAgIGRlYnVnX210aW1lID0gb3Muc3RhdChkZWJ1Z19wYXRoKS5zdF9t
dGltZQotICAgICAgICAgICAgcmVsZWFzZV9tdGltZSA9IG9zLnN0YXQocmVsZWFzZV9wYXRoKS5z
dF9tdGltZQotCi0gICAgICAgICAgICBpZiBkZWJ1Z19tdGltZSA+IHJlbGVhc2VfbXRpbWUgYW5k
IHRhcmdldCA9PSAnUmVsZWFzZScgb3IgXAotICAgICAgICAgICAgICAgcmVsZWFzZV9tdGltZSA+
IGRlYnVnX210aW1lIGFuZCB0YXJnZXQgPT0gJ0RlYnVnJzoKLSAgICAgICAgICAgICAgICBsb2dn
aW5nLmluZm8oJ1x4MWJbMzFtV2FybmluZzogeW91IGFyZSBub3QgcnVubmluZyB0aGUgbW9zdCAn
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWNlbnQgdGVzdF9zaGVsbCBiaW5hcnku
IFlvdSBuZWVkIHRvIHBhc3MgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1kZWJ1
ZyBvciBub3QgdG8gc2VsZWN0IGJldHdlZW4gRGVidWcgYW5kICcKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ1JlbGVhc2UuXHgxYlswbScpCi0gICAgICAgICMgVGhpcyB3aWxsIGZhaWwg
aWYgd2UgZG9uJ3QgaGF2ZSBib3RoIGEgZGVidWcgYW5kIHJlbGVhc2UgYmluYXJ5LgotICAgICAg
ICAjIFRoYXQncyBmaW5lIGJlY2F1c2UsIGluIHRoaXMgY2FzZSwgd2UgbXVzdCBhbHJlYWR5IGJl
IHJ1bm5pbmcgdGhlCi0gICAgICAgICMgbW9zdCB1cC10by1kYXRlIG9uZS4KLSAgICAgICAgZXhj
ZXB0IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kOgotICAgICAgICAgICAgcGFzcwotCi0gICAgcmV0
dXJuIF9wYXRoX2Zyb21fYnVpbGRfcmVzdWx0cyh0YXJnZXQsICd0ZXN0X3NoZWxsJykKLQotCi1k
ZWYgZnV6enlfbWF0Y2hfcGF0aCgpOgotICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgZnV6
enkgbWF0Y2hlciBiaW5hcnkuIiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jh
c2UoJ3RoaXJkX3BhcnR5JywgJ2Z1enp5bWF0Y2gnLCAnZnV6enltYXRjaCcpCi0KLQotZGVmIHNo
dXRfZG93bl9odHRwX3NlcnZlcihzZXJ2ZXJfcGlkKToKLSAgICAiIiJTaHV0IGRvd24gdGhlIGxp
Z2h0dHBkIHdlYiBzZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1bGx5IHNodXQgZG93bi4KLQot
ICAgIEFyZ3M6Ci0gICAgICBzZXJ2ZXJfcGlkOiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgcnVubmlu
ZyBzZXJ2ZXIuCi0gICAgIiIiCi0gICAgIyBzZXJ2ZXJfcGlkIGlzIG5vdCBzZXQgd2hlbiAiaHR0
cF9zZXJ2ZXIucHkgc3RvcCIgaXMgcnVuIG1hbnVhbGx5LgotICAgIGlmIHNlcnZlcl9waWQgaXMg
Tm9uZToKLSAgICAgICAgIyBUaGlzIGlzbid0IGlkZWFsLCBzaW5jZSBpdCBjb3VsZCBjb25mbGlj
dCB3aXRoIHdlYiBzZXJ2ZXIgcHJvY2Vzc2VzCi0gICAgICAgICMgbm90IHN0YXJ0ZWQgYnkgaHR0
cF9zZXJ2ZXIucHksIGJ1dCBnb29kIGVub3VnaCBmb3Igbm93LgotICAgICAgICBraWxsX2FsbF9w
cm9jZXNzKCdsaWdodHRwZCcpCi0gICAgICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ2FwYWNoZTInKQot
ICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLmtpbGwoc2VydmVyX3BpZCwg
c2lnbmFsLlNJR1RFUk0pCi0gICAgICAgICAgICAjVE9ETyhtbW9zcykgTWF5YmUgdGhyb3cgaW4g
YSBTSUdLSUxMIGp1c3QgdG8gYmUgc3VyZT8KLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAg
ICAgICAgICAjIFNvbWV0aW1lcyB3ZSBnZXQgYSBiYWQgUElEIChlLmcuIGZyb20gYSBzdGFsZSBo
dHRwZC5waWQgZmlsZSksCi0gICAgICAgICAgICAjIHNvIGlmIGtpbGwgZmFpbHMgb24gdGhlIGdp
dmVuIFBJRCwganVzdCB0cnkgdG8gJ2tpbGxhbGwnIHdlYgotICAgICAgICAgICAgIyBzZXJ2ZXJz
LgotICAgICAgICAgICAgc2h1dF9kb3duX2h0dHBfc2VydmVyKE5vbmUpCi0KLQotZGVmIGtpbGxf
cHJvY2VzcyhwaWQpOgotICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KLQotICAg
IEFyZ3M6Ci0gICAgICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCi0g
ICAgIiIiCi0gICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQotCi0KLWRlZiBraWxsX2Fs
bF9wcm9jZXNzKHByb2Nlc3NfbmFtZSk6Ci0gICAgbnVsbCA9IG9wZW4ob3MuZGV2bnVsbCkKLSAg
ICBzdWJwcm9jZXNzLmNhbGwoWydraWxsYWxsJywgJy1URVJNJywgJy11Jywgb3MuZ2V0ZW52KCdV
U0VSJyksCi0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1udWxsKQot
ICAgIG51bGwuY2xvc2UoKQotCi0KLWRlZiBraWxsX2FsbF90ZXN0X3NoZWxscygpOgotICAgICIi
IktpbGxzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHRlc3Rfc2hlbGwgYmluYXJ5IGN1cnJlbnRseSBy
dW5uaW5nLiIiIgotICAgIGtpbGxfYWxsX3Byb2Nlc3MoJ3Rlc3Rfc2hlbGwnKQotCi0jCi0jIFBy
aXZhdGUgaGVscGVyIGZ1bmN0aW9ucwotIwotCi0KLWRlZiBfbWlzc2luZ19saWdodHRwZCgpOgot
ICAgIHByaW50ICdQbGVhc2UgaW5zdGFsbCB1c2luZzogInN1ZG8gYXB0LWdldCBpbnN0YWxsIGxp
Z2h0dHBkIHBocDUtY2dpIicKLSAgICBwcmludCAnRm9yIGNvbXBsZXRlIExpbnV4IGJ1aWxkIHJl
cXVpcmVtZW50cywgcGxlYXNlIHNlZTonCi0gICAgcHJpbnQgJ2h0dHA6Ly9jb2RlLmdvb2dsZS5j
b20vcC9jaHJvbWl1bS93aWtpL0xpbnV4QnVpbGRJbnN0cnVjdGlvbnMnCi0gICAgc3lzLmV4aXQo
MSkKLQotCi1kZWYgX21pc3NpbmdfYXBhY2hlKCk6Ci0gICAgcHJpbnQgKCdQbGVhc2UgaW5zdGFs
bCB1c2luZzogInN1ZG8gYXB0LWdldCBpbnN0YWxsIGFwYWNoZTIgJwotICAgICAgICAnbGliYXBh
Y2hlMi1tb2QtcGhwNSInKQotICAgIHByaW50ICdGb3IgY29tcGxldGUgTGludXggYnVpbGQgcmVx
dWlyZW1lbnRzLCBwbGVhc2Ugc2VlOicKLSAgICBwcmludCAnaHR0cDovL2NvZGUuZ29vZ2xlLmNv
bS9wL2Nocm9taXVtL3dpa2kvTGludXhCdWlsZEluc3RydWN0aW9ucycKLSAgICBzeXMuZXhpdCgx
KQotCi0KLWRlZiBfcGF0aF9mcm9tX2J1aWxkX3Jlc3VsdHMoKnBhdGhpZXMpOgotICAgICMgRklY
TUUoZGtlZ2VsKTogdXNlIGxhdGVzdCBvciB3YXJuIGlmIG1vcmUgdGhhbiBvbmUgZm91bmQ/Ci0g
ICAgZm9yIGRpciBpbiBbInNjb25zYnVpbGQiLCAib3V0IiwgInhjb2RlYnVpbGQiXToKLSAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoZGly
LCAqcGF0aGllcykKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotICAgIHJhaXNl
IHBhdGhfdXRpbHMuUGF0aE5vdEZvdW5kKCJVbmFibGUgdG8gZmluZCAlcyBpbiBidWlsZCB0cmVl
IiAlCi0gICAgICAgIChvcy5wYXRoLmpvaW4oKnBhdGhpZXMpKSkKK2NsYXNzIENocm9taXVtTGlu
dXhQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CisgICAgIiIiQ2hyb21pdW0gTGludXggaW1w
bGVtZW50YXRpb24gb2YgdGhlIFBvcnQgY2xhc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIGlmIHBvcnRfbmFtZSBp
cyBOb25lOgorICAgICAgICAgICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLWxpbnV4JworICAgICAg
ICBjaHJvbWl1bS5DaHJvbWl1bVBvcnQuX19pbml0X18oc2VsZiwgcG9ydF9uYW1lLCBvcHRpb25z
KQorCisgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4g
W3NlbGYuYmFzZWxpbmVfcGF0aCgpLAorICAgICAgICAgICAgICAgIHNlbGYuY2hyb21pdW1fYmFz
ZWxpbmVfcGF0aCgnY2hyb21pdW0td2luJyksCisgICAgICAgICAgICAgICAgc2VsZi53ZWJraXRf
YmFzZWxpbmVfcGF0aCgnd2luJyksCisgICAgICAgICAgICAgICAgc2VsZi53ZWJraXRfYmFzZWxp
bmVfcGF0aCgnbWFjJyldCisKKyAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZik6CisgICAgICAg
ICMgV2UgaGF2ZSBubyBwbGF0Zm9ybS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgdG8gY2hlY2suCisg
ICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgbnVtX2NvcmVzKHNlbGYpOgorICAgICAgICBu
dW1fY29yZXMgPSBvcy5zeXNjb25mKCJTQ19OUFJPQ0VTU09SU19PTkxOIikKKyAgICAgICAgaWYg
aXNpbnN0YW5jZShudW1fY29yZXMsIGludCkgYW5kIG51bV9jb3JlcyA+IDA6CisgICAgICAgICAg
ICByZXR1cm4gbnVtX2NvcmVzCisgICAgICAgIHJldHVybiAxCisKKyAgICBkZWYgdGVzdF9wbGF0
Zm9ybV9uYW1lKHNlbGYpOgorICAgICAgICAjIFdlIHVzZSAnbGludXgnIGluc3RlYWQgb2YgJ2No
cm9taXVtLWxpbnV4JyBpbiB0ZXN0X2V4cGVjdGF0aW9ucy50eHQuCisgICAgICAgIHJldHVybiAn
bGludXgnCisKKyAgICBkZWYgdmVyc2lvbihzZWxmKToKKyAgICAgICAgIyBXZSBkb24ndCBoYXZl
IGRpZmZlcmVudCB2ZXJzaW9ucyBvbiBsaW51eC4KKyAgICAgICAgcmV0dXJuICcnCisKKyAgICAj
CisgICAgIyBQUk9URUNURUQgTUVUSE9EUworICAgICMKKworICAgIGRlZiBfYnVpbGRfcGF0aChz
ZWxmLCAqY29tcHMpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fY2hyb21pdW1fYmFz
ZSgnc2NvbnNidWlsZCcsIHNlbGYuX29wdGlvbnMudGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqY29tcHMpCisKKyAgICBkZWYgX2tpbGxfcHJvY2Vz
cyhzZWxmLCBwaWQpOgorICAgICAgICAiIiJGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3MuCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgcGlkOiBUaGUgaWQgb2YgdGhlIHByb2Nlc3MgdG8gYmUg
a2lsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxM
KQorCisgICAgZGVmIF9raWxsX2FsbF9wcm9jZXNzKHNlbGYsIHByb2Nlc3NfbmFtZSk6CisgICAg
ICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwpCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbJ2tp
bGxhbGwnLCAnLVRFUk0nLCAnLXUnLCBvcy5nZXRlbnYoJ1VTRVInKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1udWxsKQorICAgICAgICBudWxsLmNsb3Nl
KCkKKworICAgIGRlZiBfcGF0aF90b19hcGFjaGUoc2VsZik6CisgICAgICAgIHJldHVybiAnL3Vz
ci9zYmluL2FwYWNoZTInCisKKyAgICBkZWYgX3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKHNl
bGYpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2Rpcigp
LCAnaHR0cCcsICdjb25mJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBhY2hlMi1k
ZWJpYW4taHR0cGQuY29uZicpCisKKyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGQoc2VsZik6Cisg
ICAgICAgIHJldHVybiAiL3Vzci9zYmluL2xpZ2h0dHBkIgorCisgICAgZGVmIF9wYXRoX3RvX2xp
Z2h0dHBkX21vZHVsZXMoc2VsZik6CisgICAgICAgIHJldHVybiAiL3Vzci9saWIvbGlnaHR0cGQi
CisKKyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGRfcGhwKHNlbGYpOgorICAgICAgICByZXR1cm4g
Ii91c3IvYmluL3BocC1jZ2kiCisKKyAgICBkZWYgX3BhdGhfdG9fZHJpdmVyKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgndGVzdF9zaGVsbCcpCisKKyAgICBkZWYgX3Bh
dGhfdG9faGVscGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9wYXRo
X3RvX2ltYWdlX2RpZmYoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdp
bWFnZV9kaWZmJykKKworICAgIGRlZiBfcGF0aF90b193ZGlmZihzZWxmKToKKyAgICAgICAgcmV0
dXJuICd3ZGlmZicKKworICAgIGRlZiBfc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlbGYsIHNlcnZl
cl9waWQpOgorICAgICAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBkIHdlYiBzZXJ2ZXIuIEJs
b2NrcyB1bnRpbCBpdCdzIGZ1bGx5CisgICAgICAgIHNodXQgZG93bi4KKworICAgICAgICBBcmdz
OgorICAgICAgICAgICAgc2VydmVyX3BpZDogVGhlIHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5pbmcg
c2VydmVyLgorICAgICAgICAiIiIKKyAgICAgICAgIyBzZXJ2ZXJfcGlkIGlzIG5vdCBzZXQgd2hl
biAiaHR0cF9zZXJ2ZXIucHkgc3RvcCIgaXMgcnVuIG1hbnVhbGx5LgorICAgICAgICBpZiBzZXJ2
ZXJfcGlkIGlzIE5vbmU6CisgICAgICAgICAgICAjIFRPRE8obW1vc3MpIFRoaXMgaXNuJ3QgaWRl
YWwsIHNpbmNlIGl0IGNvdWxkIGNvbmZsaWN0IHdpdGgKKyAgICAgICAgICAgICMgbGlnaHR0cGQg
cHJvY2Vzc2VzIG5vdCBzdGFydGVkIGJ5IGh0dHBfc2VydmVyLnB5LAorICAgICAgICAgICAgIyBi
dXQgZ29vZCBlbm91Z2ggZm9yIG5vdy4KKyAgICAgICAgICAgIHNlbGYuX2tpbGxfYWxsX3Byb2Nl
c3MoJ2xpZ2h0dHBkJykKKyAgICAgICAgICAgIHNlbGYuX2tpbGxfYWxsX3Byb2Nlc3MoJ2FwYWNo
ZTInKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9z
LmtpbGwoc2VydmVyX3BpZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAgICAgIyBUT0RP
KG1tb3NzKSBNYXliZSB0aHJvdyBpbiBhIFNJR0tJTEwganVzdCB0byBiZSBzdXJlPworICAgICAg
ICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBTb21ldGltZXMgd2UgZ2V0
IGEgYmFkIFBJRCAoZS5nLiBmcm9tIGEgc3RhbGUgaHR0cGQucGlkCisgICAgICAgICAgICAgICAg
IyBmaWxlKSwgc28gaWYga2lsbCBmYWlscyBvbiB0aGUgZ2l2ZW4gUElELCBqdXN0IHRyeSB0bwor
ICAgICAgICAgICAgICAgICMgJ2tpbGxhbGwnIHdlYiBzZXJ2ZXJzLgorICAgICAgICAgICAgICAg
IHNlbGYuX3NodXRfZG93bl9odHRwX3NlcnZlcihOb25lKQpJbmRleDogV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9tYWMucHkJKHJldmlzaW9uIDU0MzY0KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDE3NSArMjcsMTM2IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0iIiJU
aGlzIGlzIHRoZSBNYWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBvcnQgaW50ZXJmYWNlCi0gICBw
YWNrYWdlLiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW1wb3J0ZWQgYnkgdGhhdCBwYWNrYWdl
LiIiIgorIiIiQ2hyb21pdW0gTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFj
ZS4iIiIKIAogaW1wb3J0IG9zCiBpbXBvcnQgcGxhdGZvcm0KIGltcG9ydCBzaWduYWwKIGltcG9y
dCBzdWJwcm9jZXNzCiAKLWltcG9ydCBwYXRoX3V0aWxzCitpbXBvcnQgY2hyb21pdW0KIAogCi1k
ZWYgcGxhdGZvcm1fbmFtZSgpOgotICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBsYXRm
b3JtIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIG9uLiIiIgotICAgICMgQXQgdGhlIG1vbWVudCBh
bGwgY2hyb21pdW0gbWFjIHJlc3VsdHMgYXJlIHZlcnNpb24taW5kZXBlbmRlbnQuIEF0IHNvbWUK
LSAgICAjIHBvaW50IHdlIG1heSBuZWVkIHRvIHJldHVybiAnY2hyb21pdW0tbWFjJyArIFBsYXRm
b3JtVmVyc2lvbigpCi0gICAgcmV0dXJuICdjaHJvbWl1bS1tYWMnCitjbGFzcyBDaHJvbWl1bU1h
Y1BvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKKyAgICAiIiJDaHJvbWl1bSBNYWMgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIFBvcnQgY2xhc3MuIiIiCiAKLQotZGVmIHBsYXRmb3JtX3ZlcnNpb24o
KToKLSAgICAiIiJSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhlIHBsYXRmb3JtLCBl
LmcuICctdmlzdGEnIG9yCi0gICAgJy1zbm93bGVvcGFyZCcuIElmIHRoZSBwbGF0Zm9ybSBkb2Vz
IG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuCi0gICAgbWlub3IgdmVyc2lvbnMsIGl0IHJldHVybnMg
JycuIiIiCi0gICAgb3NfdmVyc2lvbl9zdHJpbmcgPSBwbGF0Zm9ybS5tYWNfdmVyKClbMF0gICMg
ZS5nLiAiMTAuNS42IgotICAgIGlmIG5vdCBvc192ZXJzaW9uX3N0cmluZzoKLSAgICAgICAgcmV0
dXJuICctbGVvcGFyZCcKLQotICAgIHJlbGVhc2VfdmVyc2lvbiA9IGludChvc192ZXJzaW9uX3N0
cmluZy5zcGxpdCgnLicpWzFdKQotCi0gICAgIyB3ZSBkb24ndCBzdXBwb3J0ICd0aWdlcicgb3Ig
ZWFybGllciByZWxlYXNlcwotICAgIGlmIHJlbGVhc2VfdmVyc2lvbiA9PSA1OgotICAgICAgICBy
ZXR1cm4gJy1sZW9wYXJkJwotICAgIGVsaWYgcmVsZWFzZV92ZXJzaW9uID09IDY6Ci0gICAgICAg
IHJldHVybiAnLXNub3dsZW9wYXJkJwotCi0gICAgcmV0dXJuICcnCi0KLQotZGVmIGdldF9udW1f
Y29yZXMoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29yZXMgb24gdGhlIG1hY2hp
bmUuIEZvciBoeXBlcnRocmVhZGVkIG1hY2hpbmVzLAotICAgIHRoaXMgd2lsbCBiZSBkb3VibGUg
dGhlIG51bWJlciBvZiBhY3R1YWwgcHJvY2Vzc29ycy4iIiIKLSAgICByZXR1cm4gaW50KG9zLnBv
cGVuMigic3lzY3RsIC1uIGh3Lm5jcHUiKVsxXS5yZWFkKCkpCi0KLQotZGVmIGJhc2VsaW5lX3Bh
dGgocGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0
aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSBmb3IgdGhlCi0gICAgYmFzZWxpbmVzIGZvciB0aGUg
c3BlY2lmaWVkIHBsYXRmb3JtIHZlcnNpb24uIElmIHxwbGF0Zm9ybXwgaXMgTm9uZSwKLSAgICB0
aGVuIHRoZSB2ZXJzaW9uIGN1cnJlbnRseSBpbiB1c2UgaXMgdXNlZC4iIiIKLSAgICBpZiBwbGF0
Zm9ybSBpcyBOb25lOgotICAgICAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUoKQotICAgIHJl
dHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICdsYXlvdXRf
dGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybScs
IHBsYXRmb3JtLCAnTGF5b3V0VGVzdHMnKQotCi0jIFRPRE86IFdlIHNob3VsZCBhZGQgbGVvcGFy
ZCBhbmQgc25vd2xlb3BhcmQgdG8gdGhlIGxpc3Qgb2YgcGF0aHMgdG8gY2hlY2sKLSMgb25jZSB3
ZSBzdGFydCBydW5uaW5nIHRoZSB0ZXN0cyBmcm9tIHNub3dsZW9wYXJkLgotCi0KLWRlZiBiYXNl
bGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybT1Ob25lKToKLSAgICAiIiJSZXR1cm5zIHRoZSBsaXN0
IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgYmFzZWxpbmVzL3Jlc3VsdHMsIGluCi0gICAg
b3JkZXIgb2YgcHJlZmVyZW5jZS4gUGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhl
IHNvdXJjZSB0cmVlLiIiIgotICAgIHJldHVybiBbYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSksCi0g
ICAgICAgICAgICBwYXRoX3V0aWxzLndlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnICsgcGxhdGZv
cm1fdmVyc2lvbigpKSwKLSAgICAgICAgICAgIHBhdGhfdXRpbHMud2Via2l0X2Jhc2VsaW5lX3Bh
dGgoJ21hYycpXQotCi0KLWRlZiB3ZGlmZl9wYXRoKCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgV0Rp
ZmYgZXhlY3V0YWJsZSwgd2hpY2ggd2UgYXNzdW1lIGlzIGFscmVhZHkgaW5zdGFsbGVkIGFuZAot
ICAgIGluIHRoZSB1c2VyJ3MgJFBBVEguIiIiCi0gICAgcmV0dXJuICd3ZGlmZicKLQotCi1kZWYg
aW1hZ2VfZGlmZl9wYXRoKHRhcmdldCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgaW1hZ2VfZGlmZiBl
eGVjdXRhYmxlCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBidWlsZCB0eXBlIC0gJ0RlYnVn
JywnUmVsZWFzZScsZXRjLiIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNl
KCd4Y29kZWJ1aWxkJywgdGFyZ2V0LCAnaW1hZ2VfZGlmZicpCi0KLQotZGVmIGxheW91dF90ZXN0
X2hlbHBlcl9wYXRoKHRhcmdldCk6Ci0gICAgIiIiUGF0aCB0byB0aGUgbGF5b3V0X3Rlc3RfaGVs
cGVyIGV4ZWN1dGFibGUsIGlmIG5lZWRlZCwgZW1wdHkgb3RoZXJ3aXNlCi0KLSAgICBBcmdzOgot
ICAgICAgdGFyZ2V0OiBidWlsZCB0eXBlIC0gJ0RlYnVnJywnUmVsZWFzZScsZXRjLiIiIgotICAg
IHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd4Y29kZWJ1aWxkJywgdGFyZ2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXRfdGVzdF9oZWxwZXIn
KQotCi0KLWRlZiB0ZXN0X3NoZWxsX3BhdGgodGFyZ2V0KToKLSAgICAiIiJQYXRoIHRvIHRoZSB0
ZXN0X3NoZWxsIGV4ZWN1dGFibGUuCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBidWlsZCB0
eXBlIC0gJ0RlYnVnJywnUmVsZWFzZScsZXRjLiIiIgotICAgICMgVE9ETyhwaW5rZXJ0b24pOiBt
YWtlIHx0YXJnZXR8IGhhcHB5IHdpdGggY2FzZS1zZW5zaXRpdmUgZmlsZSBzeXN0ZW1zLgotICAg
IHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd4Y29kZWJ1aWxkJywgdGFyZ2V0LCAn
VGVzdFNoZWxsLmFwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nv
bnRlbnRzJywgJ01hY09TJywgJ1Rlc3RTaGVsbCcpCi0KLQotZGVmIGFwYWNoZV9leGVjdXRhYmxl
X3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBleGVjdXRhYmxlIHBhdGggdG8gc3RhcnQgQXBh
Y2hlIiIiCi0gICAgcmV0dXJuIG9zLnBhdGguam9pbigiL3VzciIsICJzYmluIiwgImh0dHBkIikK
LQotCi1kZWYgYXBhY2hlX2NvbmZpZ19maWxlX3BhdGgoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBw
YXRoIHRvIEFwYWNoZSBjb25maWcgZmlsZSIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhf
ZnJvbV9iYXNlKCJ0aGlyZF9wYXJ0eSIsICJXZWJLaXQiLCAiTGF5b3V0VGVzdHMiLAotICAgICAg
ICAiaHR0cCIsICJjb25mIiwgImFwYWNoZTItaHR0cGQuY29uZiIpCi0KLQotZGVmIGxpZ2h0dHBk
X2V4ZWN1dGFibGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0
byBzdGFydCBMaWdIVFRQZCIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNl
KCd0aGlyZF9wYXJ0eScsICdsaWdodHRwZCcsICdtYWMnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdiaW4nLCAnbGlnaHR0cGQnKQotCi0KLWRlZiBsaWdodHRwZF9tb2R1
bGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxlIHBhdGggZm9yIExp
Z0hUVFBkIiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3Bh
cnR5JywgJ2xpZ2h0dHBkJywgJ21hYycsICdsaWInKQotCi0KLWRlZiBsaWdodHRwZF9waHBfcGF0
aCgpOgotICAgICIiIlJldHVybnMgdGhlIFBIUCBleGVjdXRhYmxlIHBhdGggZm9yIExpZ0hUVFBk
IiIiCi0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5Jywg
J2xpZ2h0dHBkJywgJ21hYycsICdiaW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdwaHAtY2dpJykKLQotCi1kZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9w
aWQpOgotICAgICIiIlNodXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVu
dGlsIGl0J3MgZnVsbHkgc2h1dCBkb3duLgotCi0gICAgICBBcmdzOgotICAgICAgICBzZXJ2ZXJf
cGlkOiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCi0gICAgIiIiCi0gICAg
IyBzZXJ2ZXJfcGlkIGlzIG5vdCBzZXQgd2hlbiAiaHR0cF9zZXJ2ZXIucHkgc3RvcCIgaXMgcnVu
IG1hbnVhbGx5LgotICAgIGlmIHNlcnZlcl9waWQgaXMgTm9uZToKLSAgICAgICAgIyBUT0RPKG1t
b3NzKSBUaGlzIGlzbid0IGlkZWFsLCBzaW5jZSBpdCBjb3VsZCBjb25mbGljdCB3aXRoIGxpZ2h0
dHBkCi0gICAgICAgICMgcHJvY2Vzc2VzIG5vdCBzdGFydGVkIGJ5IGh0dHBfc2VydmVyLnB5LCBi
dXQgZ29vZCBlbm91Z2ggZm9yIG5vdy4KLSAgICAgICAga2lsbF9hbGxfcHJvY2VzcygnbGlnaHR0
cGQnKQotICAgICAgICBraWxsX2FsbF9wcm9jZXNzKCdodHRwZCcpCi0gICAgZWxzZToKLSAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgb3Mua2lsbChzZXJ2ZXJfcGlkLCBzaWduYWwuU0lHVEVSTSkK
LSAgICAgICAgICAgICMgVE9ETyhtbW9zcykgTWF5YmUgdGhyb3cgaW4gYSBTSUdLSUxMIGp1c3Qg
dG8gYmUgc3VyZT8KLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAjIFNvbWV0
aW1lcyB3ZSBnZXQgYSBiYWQgUElEIChlLmcuIGZyb20gYSBzdGFsZSBodHRwZC5waWQgZmlsZSks
Ci0gICAgICAgICAgICAjIHNvIGlmIGtpbGwgZmFpbHMgb24gdGhlIGdpdmVuIFBJRCwganVzdCB0
cnkgdG8gJ2tpbGxhbGwnIHdlYgotICAgICAgICAgICAgIyBzZXJ2ZXJzLgotICAgICAgICAgICAg
c2h1dF9kb3duX2h0dHBfc2VydmVyKE5vbmUpCi0KLQotZGVmIGtpbGxfcHJvY2VzcyhwaWQpOgot
ICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KLQotICAgIEFyZ3M6Ci0gICAgICBw
aWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCi0gICAgIiIiCi0gICAgb3Mu
a2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQotCi0KLWRlZiBraWxsX2FsbF9wcm9jZXNzKHByb2Nl
c3NfbmFtZSk6Ci0gICAgIyBPbiBNYWMgT1MgWCAxMC42LCBraWxsYWxsIGhhcyBhIG5ldyBjb25z
dHJhaW50OiAtU0lHTkFMTkFNRSBvcgotICAgICMgLVNJR05BTE5VTUJFUiBtdXN0IGNvbWUgZmly
c3QuICBFeGFtcGxlIHByb2JsZW06Ci0gICAgIyAgICQga2lsbGFsbCAtdSAkVVNFUiAtVEVSTSBs
aWdodHRwZAotICAgICMgICBraWxsYWxsOiBpbGxlZ2FsIG9wdGlvbiAtLSBUCi0gICAgIyBVc2Ug
b2YgdGhlIGVhcmxpZXIgLVRFUk0gcGxhY2VtZW50IGlzIGp1c3QgZmluZSBvbiAxMC41LgotICAg
IG51bGwgPSBvcGVuKG9zLmRldm51bGwpCi0gICAgc3VicHJvY2Vzcy5jYWxsKFsna2lsbGFsbCcs
ICctVEVSTScsICctdScsIG9zLmdldGVudignVVNFUicpLAotICAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzc19uYW1lXSwgc3RkZXJyPW51bGwpCi0gICAgbnVsbC5jbG9zZSgpCi0KLQotZGVmIGtp
bGxfYWxsX3Rlc3Rfc2hlbGxzKCk6Ci0gICAgIiIiS2lsbHMgYWxsIGluc3RhbmNlcyBvZiB0aGUg
dGVzdF9zaGVsbCBiaW5hcnkgY3VycmVudGx5IHJ1bm5pbmcuIiIiCi0gICAga2lsbF9hbGxfcHJv
Y2VzcygnVGVzdFNoZWxsJykKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9uYW1lPU5vbmUs
IG9wdGlvbnM9Tm9uZSk6CisgICAgICAgIGlmIHBvcnRfbmFtZSBpcyBOb25lOgorICAgICAgICAg
ICAgcG9ydF9uYW1lID0gJ2Nocm9taXVtLW1hYycKKyAgICAgICAgY2hyb21pdW0uQ2hyb21pdW1Q
b3J0Ll9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZSwgb3B0aW9ucykKKworICAgIGRlZiBiYXNlbGlu
ZV9zZWFyY2hfcGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLmJhc2VsaW5lX3BhdGgo
KSwKKyAgICAgICAgICAgICAgICBzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCgnbWFjJyArIHNl
bGYudmVyc2lvbigpKSwKKyAgICAgICAgICAgICAgICBzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0
aCgnbWFjJyldCisKKyAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZik6CisgICAgICAgICMgV2Ug
aGF2ZSBubyBzcGVjaWZpYyBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMuCisgICAgICAgIHJldHVybiBU
cnVlCisKKyAgICBkZWYgbnVtX2NvcmVzKHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KHN1YnBy
b2Nlc3MuUG9wZW4oWydzeXNjdGwnLCctbicsJ2h3Lm5jcHUnXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkp
CisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1lKHNlbGYpOgorICAgICAgICAjIFdlIHVzZSAn
bWFjJyBpbnN0ZWFkIG9mICdjaHJvbWl1bS1tYWMnCisgICAgICAgIHJldHVybiAnbWFjJworCisg
ICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAgIG9zX3ZlcnNpb25fc3RyaW5nID0gcGxhdGZv
cm0ubWFjX3ZlcigpWzBdICAjIGUuZy4gIjEwLjUuNiIKKyAgICAgICAgaWYgbm90IG9zX3ZlcnNp
b25fc3RyaW5nOgorICAgICAgICAgICAgcmV0dXJuICctbGVvcGFyZCcKKyAgICAgICAgcmVsZWFz
ZV92ZXJzaW9uID0gaW50KG9zX3ZlcnNpb25fc3RyaW5nLnNwbGl0KCcuJylbMV0pCisgICAgICAg
ICMgd2UgZG9uJ3Qgc3VwcG9ydCAndGlnZXInIG9yIGVhcmxpZXIgcmVsZWFzZXMKKyAgICAgICAg
aWYgcmVsZWFzZV92ZXJzaW9uID09IDU6CisgICAgICAgICAgICByZXR1cm4gJy1sZW9wYXJkJwor
ICAgICAgICBlbGlmIHJlbGVhc2VfdmVyc2lvbiA9PSA2OgorICAgICAgICAgICAgcmV0dXJuICct
c25vd2xlb3BhcmQnCisgICAgICAgIHJldHVybiAnJworCisgICAgIworICAgICMgUFJPVEVDVEVE
IE1FVEhPRFMKKyAgICAjCisKKyAgICBkZWYgX2J1aWxkX3BhdGgoc2VsZiwgKmNvbXBzKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoJ3hjb2RlYnVpbGQnLCBz
ZWxmLl9vcHRpb25zLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKmNvbXBzKQorCisgICAgZGVmIF9saWdodHRwZF9wYXRoKHNlbGYsICpjb21wcyk6
CisgICAgICAgIHJldHVybiBzZWxmLnBhdGhfZnJvbV9jaHJvbWl1bV9iYXNlKCd0aGlyZF9wYXJ0
eScsICdsaWdodHRwZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdtYWMnLCAqY29tcHMpCisKKyAgICBkZWYgX2tpbGxfcHJvY2VzcyhzZWxmLCBwaWQpOgor
ICAgICAgICAiIiJGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3MuCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICAgIHBpZDogVGhlIGlkIG9mIHRoZSBwcm9jZXNzIHRvIGJlIGtpbGxlZC4KKyAg
ICAgICAgIiIiCisgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKKworICAgIGRl
ZiBfa2lsbF9hbGxfcHJvY2VzcyhzZWxmLCBwcm9jZXNzX25hbWUpOgorICAgICAgICAiIiJLaWxs
IGFueSBwcm9jZXNzZXMgcnVubmluZyB1bmRlciB0aGlzIG5hbWUuIiIiCisgICAgICAgICMgT24g
TWFjIE9TIFggMTAuNiwga2lsbGFsbCBoYXMgYSBuZXcgY29uc3RyYWludDogLVNJR05BTE5BTUUg
b3IKKyAgICAgICAgIyAtU0lHTkFMTlVNQkVSIG11c3QgY29tZSBmaXJzdC4gIEV4YW1wbGUgcHJv
YmxlbToKKyAgICAgICAgIyAgICQga2lsbGFsbCAtdSAkVVNFUiAtVEVSTSBsaWdodHRwZAorICAg
ICAgICAjICAga2lsbGFsbDogaWxsZWdhbCBvcHRpb24gLS0gVAorICAgICAgICAjIFVzZSBvZiB0
aGUgZWFybGllciAtVEVSTSBwbGFjZW1lbnQgaXMganVzdCBmaW5lIG9uIDEwLjUuCisgICAgICAg
IG51bGwgPSBvcGVuKG9zLmRldm51bGwpCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbJ2tpbGxh
bGwnLCAnLVRFUk0nLCAnLXUnLCBvcy5nZXRlbnYoJ1VTRVInKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHByb2Nlc3NfbmFtZV0sIHN0ZGVycj1udWxsKQorICAgICAgICBudWxsLmNsb3NlKCkK
KworICAgIGRlZiBfcGF0aF90b19hcGFjaGUoc2VsZik6CisgICAgICAgIHJldHVybiAnL3Vzci9z
YmluL2h0dHBkJworCisgICAgZGVmIF9wYXRoX3RvX2FwYWNoZV9jb25maWdfZmlsZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ2h0
dHAnLCAnY29uZicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwYWNoZTItaHR0cGQu
Y29uZicpCisKKyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGQoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLl9saWdodHRwX3BhdGgoJ2JpbicsICdsaWdodHRwJykKKworICAgIGRlZiBfcGF0aF90
b19saWdodHRwZF9tb2R1bGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGlnaHR0cF9w
YXRoKCdsaWInKQorCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkX3BocChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2xpZ2h0dHBkX3BhdGgoJ2JpbicsICdwaHAtY2dpJykKKworICAgIGRl
ZiBfcGF0aF90b19kcml2ZXIoc2VsZik6CisgICAgICAgICMgVE9ETyhwaW5rZXJ0b24pOiBtYWtl
IHx0YXJnZXR8IGhhcHB5IHdpdGggY2FzZS1zZW5zaXRpdmUgZmlsZQorICAgICAgICAjIHN5c3Rl
bXMuCisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdUZXN0U2hlbGwuYXBwJywgJ0Nv
bnRlbnRzJywgJ01hY09TJywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUZXN0
U2hlbGwnKQorCisgICAgZGVmIF9wYXRoX3RvX2hlbHBlcihzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2J1aWxkX3BhdGgoJ2xheW91dF90ZXN0X2hlbHBlcicpCisKKyAgICBkZWYgX3BhdGhf
dG9faW1hZ2VfZGlmZihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2lt
YWdlX2RpZmYnKQorCisgICAgZGVmIF9wYXRoX3RvX3dkaWZmKHNlbGYpOgorICAgICAgICByZXR1
cm4gJ3dkaWZmJworCisgICAgZGVmIF9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2VsZiwgc2VydmVy
X3BpZCk6CisgICAgICAgICIiIlNodXQgZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxv
Y2tzIHVudGlsIGl0J3MgZnVsbHkKKyAgICAgICAgc2h1dCBkb3duLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgICBzZXJ2ZXJfcGlkOiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgcnVubmluZyBz
ZXJ2ZXIuCisgICAgICAgICIiIgorICAgICAgICAjIHNlcnZlcl9waWQgaXMgbm90IHNldCB3aGVu
ICJodHRwX3NlcnZlci5weSBzdG9wIiBpcyBydW4gbWFudWFsbHkuCisgICAgICAgIGlmIHNlcnZl
cl9waWQgaXMgTm9uZToKKyAgICAgICAgICAgICMgVE9ETyhtbW9zcykgVGhpcyBpc24ndCBpZGVh
bCwgc2luY2UgaXQgY291bGQgY29uZmxpY3Qgd2l0aAorICAgICAgICAgICAgIyBsaWdodHRwZCBw
cm9jZXNzZXMgbm90IHN0YXJ0ZWQgYnkgaHR0cF9zZXJ2ZXIucHksCisgICAgICAgICAgICAjIGJ1
dCBnb29kIGVub3VnaCBmb3Igbm93LgorICAgICAgICAgICAgc2VsZi5fa2lsbF9hbGxfcHJvY2Vz
cygnbGlnaHR0cGQnKQorICAgICAgICAgICAgc2VsZi5fa2lsbF9hbGxfcHJvY2VzcygnaHR0cGQn
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmtp
bGwoc2VydmVyX3BpZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAgICAgIyBUT0RPKG1t
b3NzKSBNYXliZSB0aHJvdyBpbiBhIFNJR0tJTEwganVzdCB0byBiZSBzdXJlPworICAgICAgICAg
ICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBTb21ldGltZXMgd2UgZ2V0IGEg
YmFkIFBJRCAoZS5nLiBmcm9tIGEgc3RhbGUgaHR0cGQucGlkCisgICAgICAgICAgICAgICAgIyBm
aWxlKSwgc28gaWYga2lsbCBmYWlscyBvbiB0aGUgZ2l2ZW4gUElELCBqdXN0IHRyeSB0bworICAg
ICAgICAgICAgICAgICMgJ2tpbGxhbGwnIHdlYiBzZXJ2ZXJzLgorICAgICAgICAgICAgICAgIHNl
bGYuX3NodXRfZG93bl9odHRwX3NlcnZlcihOb25lKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV93aW4ucHkJKHJldmlzaW9uIDU0MzY0KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDE4NCArMjcsMTIzIEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0iIiJUaGlz
IGlzIHRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcG9ydAotICAgcGFja2FnZS4gVGhp
cyBmaWxlIHNob3VsZCBvbmx5IGJlIGltcG9ydGVkIGJ5IHRoYXQgcGFja2FnZS4iIiIKKyIiIkNo
cm9taXVtIFdpbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCiAKIGlt
cG9ydCBvcworaW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3VicHJvY2Vz
cwotaW1wb3J0IHN5cwogCi1pbXBvcnQgcGF0aF91dGlscworaW1wb3J0IGNocm9taXVtCiAKLWRl
ZiBwbGF0Zm9ybV9uYW1lKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcGxhdGZv
cm0gd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgb24uIiIiCi0gICAgIyBXZSdyZSBub3QgcmVhZHkg
Zm9yIHZlcnNpb24tc3BlY2lmaWMgcmVzdWx0cyB5ZXQuIFdoZW4gd2UgdW5jb21tZW50Ci0gICAg
IyB0aGlzLCB3ZSBhbHNvIG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBCYXNlbGluZVNlYXJjaFBhdGgo
KQotICAgIHJldHVybiAnY2hyb21pdW0td2luJyArIHBsYXRmb3JtX3ZlcnNpb24oKQotCi0KLWRl
ZiBwbGF0Zm9ybV92ZXJzaW9uKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgdmVyc2lvbiBzdHJpbmcg
Zm9yIHRoZSBwbGF0Zm9ybSwgZS5nLiAnLXZpc3RhJyBvcgotICAgICctc25vd2xlb3BhcmQnLiBJ
ZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbgotICAgIG1pbm9yIHZl
cnNpb25zLCBpdCByZXR1cm5zICcnLiIiIgotICAgIHdpbnZlciA9IHN5cy5nZXR3aW5kb3dzdmVy
c2lvbigpCi0gICAgaWYgd2ludmVyWzBdID09IDYgYW5kICh3aW52ZXJbMV0gPT0gMSk6Ci0gICAg
ICAgIHJldHVybiAnLTcnCi0gICAgaWYgd2ludmVyWzBdID09IDYgYW5kICh3aW52ZXJbMV0gPT0g
MCk6Ci0gICAgICAgIHJldHVybiAnLXZpc3RhJwotICAgIGlmIHdpbnZlclswXSA9PSA1IGFuZCAo
d2ludmVyWzFdID09IDEgb3Igd2ludmVyWzFdID09IDIpOgotICAgICAgICByZXR1cm4gJy14cCcK
LSAgICByZXR1cm4gJycKLQotCi1kZWYgZ2V0X251bV9jb3JlcygpOgotICAgICIiIlJldHVybnMg
dGhlIG51bWJlciBvZiBjb3JlcyBvbiB0aGUgbWFjaGluZS4gRm9yIGh5cGVydGhyZWFkZWQgbWFj
aGluZXMsCi0gICAgdGhpcyB3aWxsIGJlIGRvdWJsZSB0aGUgbnVtYmVyIG9mIGFjdHVhbCBwcm9j
ZXNzb3JzLiIiIgotICAgIHJldHVybiBpbnQob3MuZW52aXJvbi5nZXQoJ05VTUJFUl9PRl9QUk9D
RVNTT1JTJywgMSkpCi0KLQotZGVmIGJhc2VsaW5lX3BhdGgocGxhdGZvcm09Tm9uZSk6Ci0gICAg
IiIiUmV0dXJucyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJl
ZSBmb3IgdGhlCi0gICAgYmFzZWxpbmVzIGZvciB0aGUgc3BlY2lmaWVkIHBsYXRmb3JtIHZlcnNp
b24uIElmIHxwbGF0Zm9ybXwgaXMgTm9uZSwKLSAgICB0aGVuIHRoZSB2ZXJzaW9uIGN1cnJlbnRs
eSBpbiB1c2UgaXMgdXNlZC4iIiIKLSAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgotICAgICAgICBw
bGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUoKQotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCd3ZWJraXQnLCAnZGF0YScsICdsYXlvdXRfdGVzdHMnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybScsIHBsYXRmb3JtLCAnTGF5b3V0VGVzdHMn
KQotCi0KLWRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChwbGF0Zm9ybT1Ob25lKToKLSAgICAiIiJS
ZXR1cm5zIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgYmFzZWxpbmVzL3Jl
c3VsdHMsIGluCi0gICAgb3JkZXIgb2YgcHJlZmVyZW5jZS4gUGF0aHMgYXJlIHJlbGF0aXZlIHRv
IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLiIiIgotICAgIGRpcnMgPSBbXQotICAgIGlmIHBs
YXRmb3JtIGlzIE5vbmU6Ci0gICAgICAgIHBsYXRmb3JtID0gcGxhdGZvcm1fbmFtZSgpCi0KLSAg
ICBpZiBwbGF0Zm9ybSA9PSAnY2hyb21pdW0td2luLXhwJzoKLSAgICAgICAgZGlycy5hcHBlbmQo
YmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkpCi0gICAgaWYgcGxhdGZvcm0gaW4gKCdjaHJvbWl1bS13
aW4teHAnLCAnY2hyb21pdW0td2luLXZpc3RhJyk6Ci0gICAgICAgIGRpcnMuYXBwZW5kKGJhc2Vs
aW5lX3BhdGgoJ2Nocm9taXVtLXdpbi12aXN0YScpKQotICAgIGRpcnMuYXBwZW5kKGJhc2VsaW5l
X3BhdGgoJ2Nocm9taXVtLXdpbicpKQotICAgIGRpcnMuYXBwZW5kKHBhdGhfdXRpbHMud2Via2l0
X2Jhc2VsaW5lX3BhdGgoJ3dpbicpKQotICAgIGRpcnMuYXBwZW5kKHBhdGhfdXRpbHMud2Via2l0
X2Jhc2VsaW5lX3BhdGgoJ21hYycpKQotICAgIHJldHVybiBkaXJzCi0KLQotZGVmIHdkaWZmX3Bh
dGgoKToKLSAgICAiIiJQYXRoIHRvIHRoZSBXRGlmZiBleGVjdXRhYmxlLCB3aG9zZSBiaW5hcnkg
aXMgY2hlY2tlZCBpbiBvbiBXaW4iIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21f
YmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2JpbicsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3dkaWZmLmV4ZScpCi0KLQotZGVmIGltYWdlX2RpZmZfcGF0aCh0
YXJnZXQpOgotICAgICIiIlJldHVybiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYmluYXJ5IHBhdGgg
Zm9yIHRoZSBpbWFnZSBjb21wYXJlIHV0aWwuCi0gICAgICAgICBXZSB1c2UgdGhpcyBpZiB3ZSBj
YW4ndCBmaW5kIHRoZSBiaW5hcnkgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24KLSAgICAgICAgIGlu
IHBhdGhfdXRpbHMuCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9k
ZSAoZGVidWcgb3IgcmVsZWFzZSkKLSAgICAiIiIKLSAgICByZXR1cm4gX2ZpbmRfYmluYXJ5KHRh
cmdldCwgJ2ltYWdlX2RpZmYuZXhlJykKLQotCi1kZWYgbGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgo
dGFyZ2V0KToKLSAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRo
IGZvciB0aGUgbGF5b3V0IHRlc3QgaGVscGVyLgotICAgIFdlIHVzZSB0aGlzIGlmIHdlIGNhbid0
IGZpbmQgdGhlIGJpbmFyeSBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbgotICAgIGluIHBhdGhfdXRp
bHMuCi0KLSAgICBBcmdzOgotICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9kZSAoZGVidWcg
b3IgcmVsZWFzZSkKLSAgICAiIiIKLSAgICByZXR1cm4gX2ZpbmRfYmluYXJ5KHRhcmdldCwgJ2xh
eW91dF90ZXN0X2hlbHBlci5leGUnKQotCi0KLWRlZiB0ZXN0X3NoZWxsX3BhdGgodGFyZ2V0KToK
LSAgICAiIiJSZXR1cm4gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJpbmFyeSBwYXRoIGZvciBvdXIg
VGVzdFNoZWxsLgotICAgICAgIFdlIHVzZSB0aGlzIGlmIHdlIGNhbid0IGZpbmQgdGhlIGJpbmFy
eSBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbgotICAgICAgIGluIHBhdGhfdXRpbHMuCi0KLSAgICBB
cmdzOgotICAgICAgdGFyZ2V0OiBCdWlsZCB0YXJnZXQgbW9kZSAoZGVidWcgb3IgcmVsZWFzZSkK
LSAgICAiIiIKLSAgICByZXR1cm4gX2ZpbmRfYmluYXJ5KHRhcmdldCwgJ3Rlc3Rfc2hlbGwuZXhl
JykKLQotCi1kZWYgYXBhY2hlX2V4ZWN1dGFibGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhl
IGV4ZWN1dGFibGUgcGF0aCB0byBzdGFydCBBcGFjaGUiIiIKLSAgICBwYXRoID0gcGF0aF91dGls
cy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgInVzciIsICJzYmluIikK
LSAgICAjIERvbid0IHJldHVybiBodHRwZC5leGUgc2luY2Ugd2Ugd2FudCB0byB1c2UgdGhpcyBm
cm9tIGN5Z3dpbi4KLSAgICByZXR1cm4gb3MucGF0aC5qb2luKHBhdGgsICJodHRwZCIpCi0KLQot
ZGVmIGFwYWNoZV9jb25maWdfZmlsZV9wYXRoKCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0
byBBcGFjaGUgY29uZmlnIGZpbGUiIiIKLSAgICByZXR1cm4gcGF0aF91dGlscy5wYXRoX2Zyb21f
YmFzZSgidGhpcmRfcGFydHkiLCAiV2ViS2l0IiwgIkxheW91dFRlc3RzIiwKLSAgICAgICAgImh0
dHAiLCAiY29uZiIsICJjeWd3aW4taHR0cGQuY29uZiIpCi0KLQotZGVmIGxpZ2h0dHBkX2V4ZWN1
dGFibGVfcGF0aCgpOgotICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgcGF0aCB0byBzdGFy
dCBMaWdIVFRQZCIiIgotICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGly
ZF9wYXJ0eScsICdsaWdodHRwZCcsICd3aW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdMaWdodFRQRC5leGUnKQotCi0KLWRlZiBsaWdodHRwZF9tb2R1bGVfcGF0aCgp
OgotICAgICIiIlJldHVybnMgdGhlIGxpYnJhcnkgbW9kdWxlIHBhdGggZm9yIExpZ0hUVFBkIiIi
Ci0gICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xp
Z2h0dHBkJywgJ3dpbicsICdsaWInKQotCi0KLWRlZiBsaWdodHRwZF9waHBfcGF0aCgpOgotICAg
ICIiIlJldHVybnMgdGhlIFBIUCBleGVjdXRhYmxlIHBhdGggZm9yIExpZ0hUVFBkIiIiCi0gICAg
cmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBk
JywgJ3dpbicsICdwaHA1JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
cGhwLWNnaS5leGUnKQotCi0KLWRlZiBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2VydmVyX3BpZCk6
Ci0gICAgIiIiU2h1dCBkb3duIHRoZSBsaWdodHRwZCB3ZWIgc2VydmVyLiBCbG9ja3MgdW50aWwg
aXQncyBmdWxseSBzaHV0IGRvd24uCi0KLSAgICBBcmdzOgotICAgICAgc2VydmVyX3BpZDogVGhl
IHByb2Nlc3MgSUQgb2YgdGhlIHJ1bm5pbmcgc2VydmVyLgotICAgICAgICAgIFVudXNlZCBpbiB0
aGlzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZXRob2QuCi0gICAgIiIiCi0gICAgc3VicHJvY2Vz
cy5Qb3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvaW0nLCAnTGlnaHRUUEQuZXhlJyksCi0g
ICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAg
ICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCi0gICAgc3VicHJvY2Vzcy5Q
b3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvaW0nLCAnaHR0cGQuZXhlJyksCi0gICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAg
ICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCi0KLQotZGVmIGtpbGxfcHJvY2Vzcyhw
aWQpOgotICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KLQotICAgIEFyZ3M6Ci0g
ICAgICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBiZSBraWxsZWQuCi0gICAgIiIiCi0g
ICAgc3VicHJvY2Vzcy5jYWxsKCgndGFza2tpbGwuZXhlJywgJy9mJywgJy9waWQnLCBzdHIocGlk
KSksCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAg
ICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0KLQotZGVmIGtpbGxfYWxsX3Rl
c3Rfc2hlbGxzKHNlbGYpOgotICAgICIiIktpbGxzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHRlc3Rf
c2hlbGwgYmluYXJ5IGN1cnJlbnRseSBydW5uaW5nLiIiIgotICAgIHN1YnByb2Nlc3MuUG9wZW4o
KCd0YXNra2lsbC5leGUnLCAnL2YnLCAnL2ltJywgJ3Rlc3Rfc2hlbGwuZXhlJyksCi0gICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAg
ICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCi0KLSMKLSMgUHJpdmF0ZSBoZWxwZXIg
ZnVuY3Rpb25zLgotIwotCi0KLWRlZiBfZmluZF9iaW5hcnkodGFyZ2V0LCBiaW5hcnkpOgotICAg
ICIiIk9uIFdpbmRvd3MsIHdlIGxvb2sgZm9yIGJpbmFyaWVzIHRoYXQgd2UgY29tcGlsZSBpbiBw
b3RlbnRpYWxseQotICAgIHR3byBwbGFjZXM6IHNyYy93ZWJraXQvJHRhcmdldCAocHJlZmVyYWJs
eSwgd2hpY2ggd2UgZ2V0IGlmIHdlCi0gICAgYnVpbHQgdXNpbmcgd2Via2l0X2dsdWUuZ3lwKSwg
b3Igc3JjL2Nocm9tZS8kdGFyZ2V0IChpZiBjb21waWxlZCBzb21lCi0gICAgb3RoZXIgd2F5KS4i
IiIKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd3
ZWJraXQnLCB0YXJnZXQsIGJpbmFyeSkKLSAgICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91
bmQ6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKCdjaHJvbWUnLCB0YXJnZXQsIGJpbmFyeSkKLSAgICAgICAgZXhjZXB0IHBhdGhfdXRp
bHMuUGF0aE5vdEZvdW5kOgotICAgICAgICAgICAgcmV0dXJuIHBhdGhfdXRpbHMucGF0aF9mcm9t
X2Jhc2UoJ2J1aWxkJywgdGFyZ2V0LCBiaW5hcnkpCisKK2NsYXNzIENocm9taXVtV2luUG9ydChj
aHJvbWl1bS5DaHJvbWl1bVBvcnQpOgorICAgICIiIkNocm9taXVtIFdpbiBpbXBsZW1lbnRhdGlv
biBvZiB0aGUgUG9ydCBjbGFzcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X25h
bWU9Tm9uZSwgb3B0aW9ucz1Ob25lKToKKyAgICAgICAgaWYgcG9ydF9uYW1lIGlzIE5vbmU6Cisg
ICAgICAgICAgICBwb3J0X25hbWUgPSAnY2hyb21pdW0td2luJyArIHNlbGYudmVyc2lvbigpCisg
ICAgICAgIGNocm9taXVtLkNocm9taXVtUG9ydC5fX2luaXRfXyhzZWxmLCBwb3J0X25hbWUsIG9w
dGlvbnMpCisKKyAgICBkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CisgICAgICAgIGlm
IHNlbGYuX25hbWUgPT0gJ2Nocm9taXVtLXdpbi14cCc6CisgICAgICAgICAgICBkaXJzLmFwcGVu
ZChzZWxmLmJhc2VsaW5lX3BhdGgoc2VsZi5fbmFtZSkpCisgICAgICAgIGlmIHNlbGYuX25hbWUg
aW4gKCdjaHJvbWl1bS13aW4teHAnLCAnY2hyb21pdW0td2luLXZpc3RhJyk6CisgICAgICAgICAg
ICBkaXJzLmFwcGVuZChzZWxmLmJhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbi12aXN0YScpKQor
ICAgICAgICBkaXJzLmFwcGVuZChzZWxmLmJhc2VsaW5lX3BhdGgoJ2Nocm9taXVtLXdpbicpKQor
ICAgICAgICBkaXJzLmFwcGVuZChzZWxmLndlYmtpdF9iYXNlbGluZV9wYXRoKCd3aW4nKSkKKyAg
ICAgICAgZGlycy5hcHBlbmQoc2VsZi53ZWJraXRfYmFzZWxpbmVfcGF0aCgnbWFjJykpCisgICAg
ICAgIHJldHVybiBkaXJzCisKKyAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZik6CisgICAgICAg
ICMgVE9ETyhkcHJhbmtlKTogaW1wbGVtZW50IHRoaXMKKyAgICAgICAgcmV0dXJuIFRydWUKKwor
ICAgIGRlZiBnZXRfYWJzb2x1dGVfcGF0aChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIlJl
dHVybiB0aGUgYWJzb2x1dGUgcGF0aCBpbiB1bml4IGZvcm1hdCBmb3IgdGhlIGdpdmVuIGZpbGVu
YW1lLiIiIgorICAgICAgICBhYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKQorICAg
ICAgICByZXR1cm4gcGF0aC5yZXBsYWNlKCdcXCcsICcvJykKKworICAgIGRlZiBudW1fY29yZXMo
c2VsZik6CisgICAgICAgIHJldHVybiBpbnQob3MuZW52aXJvbi5nZXQoJ05VTUJFUl9PRl9QUk9D
RVNTT1JTJywgMSkpCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1lKHNlbGYpOgorICAgICAg
ICAjIFdlIHJldHVybiAnd2luLXhwJywgbm90ICdjaHJvbWl1bS13aW4teHAnIGhlcmUsIGZvciBj
b252ZW5pZW5jZS4KKyAgICAgICAgcmV0dXJuICd3aW4nICsgc2VsZi52ZXJzaW9uKCkKKworICAg
IGRlZiB2ZXJzaW9uKHNlbGYpOgorICAgICAgICB3aW52ZXIgPSBzeXMuZ2V0d2luZG93c3ZlcnNp
b24oKQorICAgICAgICBpZiB3aW52ZXJbMF0gPT0gNiBhbmQgKHdpbnZlclsxXSA9PSAxKToKKyAg
ICAgICAgICAgIHJldHVybiAnLTcnCisgICAgICAgIGlmIHdpbnZlclswXSA9PSA2IGFuZCAod2lu
dmVyWzFdID09IDApOgorICAgICAgICAgICAgcmV0dXJuICctdmlzdGEnCisgICAgICAgIGlmIHdp
bnZlclswXSA9PSA1IGFuZCAod2ludmVyWzFdID09IDEgb3Igd2ludmVyWzFdID09IDIpOgorICAg
ICAgICAgICAgcmV0dXJuICcteHAnCisgICAgICAgIHJldHVybiAnJworCisgICAgIworICAgICMg
UFJPVEVDVEVEIFJPVVRJTkVTCisgICAgIworCisgICAgZGVmIF9idWlsZF9wYXRoKHNlbGYsICpj
b21wcyk6CisgICAgICAgICMgRklYTUUoZHByYW5rZSk6IGFsbG93IGZvciBidWlsZHMgdW5kZXIg
J2Nocm9tZScgYXMgd2VsbC4KKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX2Nocm9taXVt
X2Jhc2UoJ3dlYmtpdCcsIHNlbGYuX29wdGlvbnMudGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqY29tcHMpCisKKyAgICBkZWYgX2xpZ2h0dHBkX3Bh
dGgoc2VsZiwgKmNvbXBzKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX2Nocm9taXVt
X2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2xpZ2h0dHBkJywgJ3dpbicsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb21wcykKKworICAgIGRlZiBfa2lsbF9wcm9j
ZXNzKHNlbGYsIHBpZCk6CisgICAgICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4K
KworICAgICAgICBBcmdzOgorICAgICAgICBwaWQ6IFRoZSBpZCBvZiB0aGUgcHJvY2VzcyB0byBi
ZSBraWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoKCd0YXNra2ls
bC5leGUnLCAnL2YnLCAnL3BpZCcsIHN0cihwaWQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9
c3VicHJvY2Vzcy5QSVBFKQorCisgICAgZGVmIF9wYXRoX3RvX2FwYWNoZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYucGF0aF9mcm9tX2Nocm9taXVtX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5
Z3dpbicsICd1c3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnc2JpbicsICdodHRwZCcpCisKKyAgICBkZWYgX3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxl
KHNlbGYpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2Rp
cigpLCAnaHR0cCcsICdjb25mJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3lnd2lu
LWh0dHBkLmNvbmYnKQorCisgICAgZGVmIF9wYXRoX3RvX2xpZ2h0dHBkKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fbGlnaHR0cF9wYXRoKCdMaWdodFRQRC5leGUnKQorCisgICAgZGVmIF9w
YXRoX3RvX2xpZ2h0dHBkX21vZHVsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9saWdo
dHRwX3BhdGgoJ2xpYicpCisKKyAgICBkZWYgX3BhdGhfdG9fbGlnaHR0cGRfcGhwKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fbGlnaHR0cF9wYXRoKCdwaHA1JywgJ3BocC1jZ2kuZXhlJykK
KworICAgIGRlZiBfcGF0aF90b19kcml2ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9i
dWlsZF9wYXRoKCd0ZXN0X3NoZWxsLmV4ZScpCisKKyAgICBkZWYgX3BhdGhfdG9faGVscGVyKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnbGF5b3V0X3Rlc3RfaGVscGVy
LmV4ZScpCisKKyAgICBkZWYgX3BhdGhfdG9faW1hZ2VfZGlmZihzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2xheW91dF90ZXN0X2hlbHBlci5leGUnKQorCisgICAgZGVm
IF9wYXRoX3RvX3dkaWZmKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fY2hy
b21pdW1fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2luJywgJ2JpbicsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3ZGlmZi5leGUnKQorCisgICAgZGVmIF9z
aHV0X2Rvd25faHR0cF9zZXJ2ZXIoc2VsZiwgc2VydmVyX3BpZCk6CisgICAgICAgICIiIlNodXQg
ZG93biB0aGUgbGlnaHR0cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVsbHkKKyAg
ICAgICAgc2h1dCBkb3duLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzZXJ2ZXJfcGlk
OiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCisgICAgICAgICIiIgorICAg
ICAgICBzdWJwcm9jZXNzLlBvcGVuKCgndGFza2tpbGwuZXhlJywgJy9mJywgJy9pbScsICdMaWdo
dFRQRC5leGUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJ
UEUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKS53YWl0
KCkKKyAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbigoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvaW0n
LCAnaHR0cGQuZXhlJyksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vz
cy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSku
d2FpdCgpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2h0dHBfc2VydmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkJKHJldmlzaW9uIDU0MzY0KQor
KysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3Nl
cnZlci5weQkod29ya2luZyBjb3B5KQpAQCAtNDEsNTIgKzQxLDIxIEBAIGltcG9ydCB0aW1lCiBp
bXBvcnQgdXJsbGliCiAKIGltcG9ydCBodHRwX3NlcnZlcl9iYXNlCi1pbXBvcnQgcGF0aF91dGls
cwogCi1jbGFzcyBIdHRwZE5vdFN0YXJ0ZWQoRXhjZXB0aW9uKTogcGFzcwogCi1kZWYgcmVtb3Zl
X2xvZ19maWxlcyhmb2xkZXIsIHN0YXJ0c193aXRoKToKLSAgICBmaWxlcyA9IG9zLmxpc3RkaXIo
Zm9sZGVyKQotICAgIGZvciBmaWxlIGluIGZpbGVzOgotICAgICAgICBpZiBmaWxlLnN0YXJ0c3dp
dGgoc3RhcnRzX3dpdGgpOgotICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKGZv
bGRlciwgZmlsZSkKLSAgICAgICAgICAgIG9zLnJlbW92ZShmdWxsX3BhdGgpCitjbGFzcyBIdHRw
ZE5vdFN0YXJ0ZWQoRXhjZXB0aW9uKToKKyAgICBwYXNzCiAKIAogY2xhc3MgTGlnaHR0cGQoaHR0
cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6Ci0gICAgIyBXZWJraXQgdGVzdHMKLSAgICB0
cnk6Ci0gICAgICAgIF93ZWJraXRfdGVzdHMgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0
aGlyZF9wYXJ0eScsICdXZWJLaXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnTGF5b3V0VGVzdHMnLCAnaHR0cCcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cycpCi0gICAgICAgIF9qc190
ZXN0X3Jlc291cmNlID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAn
V2ViS2l0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdMYXlvdXRUZXN0cycsICdmYXN0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqcycsICdyZXNvdXJjZXMnKQotICAgIGV4Y2Vw
dCBwYXRoX3V0aWxzLlBhdGhOb3RGb3VuZDoKLSAgICAgICAgX3dlYmtpdF90ZXN0cyA9IE5vbmUK
LSAgICAgICAgX2pzX3Rlc3RfcmVzb3VyY2UgPSBOb25lCi0KLSAgICAjIFBhdGggd2hlcmUgd2Ug
Y2FuIGFjY2VzcyBhbGwgb2YgdGhlIHRlc3RzCi0gICAgX2FsbF90ZXN0cyA9IHBhdGhfdXRpbHMu
cGF0aF9mcm9tX2Jhc2UoJ3dlYmtpdCcsICdkYXRhJywgJ2xheW91dF90ZXN0cycpCi0gICAgIyBT
ZWxmIGdlbmVyYXRlZCBjZXJ0aWZpY2F0ZSBmb3IgU1NMIHNlcnZlciAoZm9yIGNsaWVudCBjZXJ0
IGdldAotICAgICMgPGJhc2UtcGF0aD5cY2hyb21lXHRlc3RcZGF0YVxzc2xcY2VydHNccm9vdF9j
YV9jZXJ0LmNydCkKLSAgICBfcGVtX2ZpbGUgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKAot
ICAgICAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksICdodHRw
ZDIucGVtJykKLSAgICAjIE9uZSBtYXBwaW5nIHdoZXJlIHdlIGNhbiBnZXQgdG8gZXZlcnl0aGlu
ZwotICAgIFZJUlRVQUxDT05GSUcgPSBbeydwb3J0JzogODA4MSwgJ2RvY3Jvb3QnOiBfYWxsX3Rl
c3RzfV0KLQotICAgIGlmIF93ZWJraXRfdGVzdHM6Ci0gICAgICAgIFZJUlRVQUxDT05GSUcuZXh0
ZW5kKAotICAgICAgICAgICMgVGhyZWUgbWFwcGluZ3MgKG9uZSB3aXRoIFNTTCBlbmFibGVkKSBm
b3IgTGF5b3V0VGVzdHMgaHR0cCB0ZXN0cwotICAgICAgICAgIFt7J3BvcnQnOiA4MDAwLCAnZG9j
cm9vdCc6IF93ZWJraXRfdGVzdHN9LAotICAgICAgICAgICB7J3BvcnQnOiA4MDgwLCAnZG9jcm9v
dCc6IF93ZWJraXRfdGVzdHN9LAotICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnZG9jcm9vdCc6
IF93ZWJraXRfdGVzdHMsICdzc2xjZXJ0JzogX3BlbV9maWxlfV0pCiAKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgb3V0cHV0X2RpciwgYmFja2dyb3VuZD1GYWxzZSwgcG9ydD1Ob25lLAorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgb3V0cHV0X2RpciwgYmFja2dyb3VuZD1GYWxzZSwg
cG9ydD1Ob25lLAogICAgICAgICAgICAgICAgICByb290PU5vbmUsIHJlZ2lzdGVyX2N5Z3dpbj1O
b25lLCBydW5fYmFja2dyb3VuZD1Ob25lKToKICAgICAgICAgIiIiQXJnczoKICAgICAgICAgICBv
dXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGRp
cmVjdG9yeQogICAgICAgICAiIiIKKyAgICAgICAgIyBXZWJraXQgdGVzdHMKKyAgICAgICAgaHR0
cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZS5fX2luaXRfXyhzZWxmLCBwb3J0X29iaikKICAg
ICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKICAgICAgICAgc2VsZi5fcHJvY2Vz
cyA9IE5vbmUKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKQEAgLTk2LDYgKzY1LDMxIEBAIGNs
YXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnYKICAgICAgICAgaWYgc2VsZi5f
cG9ydDoKICAgICAgICAgICAgIHNlbGYuX3BvcnQgPSBpbnQoc2VsZi5fcG9ydCkKIAorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBfd2Via2l0X3Rlc3RzID0gb3MucGF0aC5qb2luKHNlbGYuX3Bv
cnRfb2JqLmxheW91dF90ZXN0c19kaXIoKSwKKyAgICAgICAgICAgICAgICAgJ2h0dHAnLCAndGVz
dHMnKQorICAgICAgICAgICAgX3dlYmtpdF90ZXN0cyA9IG9zLnBhdGguam9pbihzZWxmLl9wb3J0
X29iai5sYXlvdXRfdGVzdHNfZGlyKCksCisgICAgICAgICAgICAgICAgICdmYXN0JywgJ2pzJywg
J3Jlc291cmNlcycpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIF93ZWJraXRfdGVzdHMg
PSBOb25lCisgICAgICAgICAgICBfanNfdGVzdF9yZXNvdXJjZSA9IE5vbmUKKworICAgICAgICAj
IFNlbGYgZ2VuZXJhdGVkIGNlcnRpZmljYXRlIGZvciBTU0wgc2VydmVyIChmb3IgY2xpZW50IGNl
cnQgZ2V0CisgICAgICAgICMgPGJhc2UtcGF0aD5cY2hyb21lXHRlc3RcZGF0YVxzc2xcY2VydHNc
cm9vdF9jYV9jZXJ0LmNydCkKKyAgICAgICAgc2VsZi5fcGVtX2ZpbGUgPSBvcy5wYXRoLmpvaW4o
CisgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSks
ICdodHRwZDIucGVtJykKKworICAgICAgICAjIE9uZSBtYXBwaW5nIHdoZXJlIHdlIGNhbiBnZXQg
dG8gZXZlcnl0aGluZworICAgICAgICBWSVJUVUFMQ09ORklHID0gW10KKworICAgICAgICBpZiBf
d2Via2l0X3Rlc3RzOgorICAgICAgICAgICAgVklSVFVBTENPTkZJRy5leHRlbmQoCisgICAgICAg
ICAgICAgICAjIFRocmVlIG1hcHBpbmdzIChvbmUgd2l0aCBTU0wpIGZvciBMYXlvdXRUZXN0cyBo
dHRwIHRlc3RzCisgICAgICAgICAgICAgICBbeydwb3J0JzogODAwMCwgJ2RvY3Jvb3QnOiBfd2Vi
a2l0X3Rlc3RzfSwKKyAgICAgICAgICAgICAgICB7J3BvcnQnOiA4MDgwLCAnZG9jcm9vdCc6IF93
ZWJraXRfdGVzdHN9LAorICAgICAgICAgICAgICAgIHsncG9ydCc6IDg0NDMsICdkb2Nyb290Jzog
X3dlYmtpdF90ZXN0cywKKyAgICAgICAgICAgICAgICAgJ3NzbGNlcnQnOiBzZWxmLl9wZW1fZmls
ZX1dKQorCiAgICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9w
cm9jZXNzICE9IE5vbmUKIApAQCAtMTAzLDkgKzk3LDkgQEAgY2xhc3MgTGlnaHR0cGQoaHR0cF9z
ZXJ2ZXJfYmFzZS5IdHRwU2VydgogICAgICAgICBpZiBzZWxmLmlzX3J1bm5pbmcoKToKICAgICAg
ICAgICAgIHJhaXNlICdMaWdodHRwZCBhbHJlYWR5IHJ1bm5pbmcnCiAKLSAgICAgICAgYmFzZV9j
b25mX2ZpbGUgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsCisgICAg
ICAgIGJhc2VfY29uZl9maWxlID0gc2VsZi5fcG9ydF9vYmoucGF0aF9mcm9tX2Jhc2UoJ3RoaXJk
X3BhcnR5JywKICAgICAgICAgICAgICdXZWJLaXRUb29scycsICdTY3JpcHRzJywgJ3dlYmtpdHB5
JywgJ2xheW91dF90ZXN0cycsCi0gICAgICAgICAgICAnbGF5b3V0X3BhY2thZ2UnLCAnbGlnaHR0
cGQuY29uZicpCisgICAgICAgICAgICAncG9ydCcsICdsaWdodHRwZC5jb25mJykKICAgICAgICAg
b3V0X2NvbmZfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCAnbGlnaHR0cGQu
Y29uZicpCiAgICAgICAgIHRpbWVfc3RyID0gdGltZS5zdHJmdGltZSgiJWQlYiVZLSVIJU0lUyIp
CiAgICAgICAgIGFjY2Vzc19maWxlX25hbWUgPSAiYWNjZXNzLmxvZy0iICsgdGltZV9zdHIgKyAi
LnR4dCIKQEAgLTExNCw4ICsxMDgsOCBAQCBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNl
Lkh0dHBTZXJ2CiAgICAgICAgIGVycm9yX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRf
ZGlyLCBsb2dfZmlsZV9uYW1lKQogCiAgICAgICAgICMgUmVtb3ZlIG9sZCBsb2cgZmlsZXMuIFdl
IG9ubHkgbmVlZCB0byBrZWVwIHRoZSBsYXN0IG9uZXMuCi0gICAgICAgIHJlbW92ZV9sb2dfZmls
ZXMoc2VsZi5fb3V0cHV0X2RpciwgImFjY2Vzcy5sb2ctIikKLSAgICAgICAgcmVtb3ZlX2xvZ19m
aWxlcyhzZWxmLl9vdXRwdXRfZGlyLCAiZXJyb3IubG9nLSIpCisgICAgICAgIHNlbGYucmVtb3Zl
X2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCAiYWNjZXNzLmxvZy0iKQorICAgICAgICBzZWxm
LnJlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgImVycm9yLmxvZy0iKQogCiAgICAg
ICAgICMgV3JpdGUgb3V0IHRoZSBjb25maWcKICAgICAgICAgZiA9IGZpbGUoYmFzZV9jb25mX2Zp
bGUsICdyYicpCkBAIC0xMzIsNyArMTI2LDcgQEAgY2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJf
YmFzZS5IdHRwU2VydgogICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIi5wbCIgICA9
PiAiL3Vzci9iaW4vZW52IixcbicKICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICIu
YXNpcyIgPT4gIi9iaW4vY2F0IixcbicKICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAg
ICIucGhwIiAgPT4gIiVzIiApXG5cbicpICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXRoX3V0aWxzLmxpZ2h0dHBkX3BocF9wYXRoKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydF9vYmouX3BhdGhfdG9fbGlnaHR0cGRfcGhw
KCkpCiAKICAgICAgICAgIyBTZXR1cCBsb2cgZmlsZXMKICAgICAgICAgZi53cml0ZSgoJ3NlcnZl
ci5lcnJvcmxvZyA9ICIlcyJcbicKQEAgLTE2MSw3ICsxNTUsNyBAQCBjbGFzcyBMaWdodHRwZCho
dHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2CiAgICAgICAgICAgICAgICAgbWFwcGluZ3MgPSBbeydw
b3J0JzogODAwMCwgJ2RvY3Jvb3QnOiBzZWxmLl9yb290fSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7J3BvcnQnOiA4MDgwLCAnZG9jcm9vdCc6IHNlbGYuX3Jvb3R9LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsncG9ydCc6IDg0NDMsICdkb2Nyb290Jzogc2VsZi5fcm9vdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzbGNlcnQnOiBMaWdodHRwZC5fcGVtX2Zp
bGV9XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3NsY2VydCc6IHNlbGYuX3BlbV9m
aWxlfV0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1hcHBpbmdzID0gc2VsZi5WSVJUVUFM
Q09ORklHCiAgICAgICAgIGZvciBtYXBwaW5nIGluIG1hcHBpbmdzOgpAQCAtMTc2LDEyICsxNzAs
MTIgQEAgY2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydgogICAgICAgICAg
ICAgICAgICAgICAgJ31cblxuJykgJSAobWFwcGluZ1sncG9ydCddLCBtYXBwaW5nWydkb2Nyb290
J10pKQogICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICBleGVjdXRhYmxlID0gcGF0aF91dGls
cy5saWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKQotICAgICAgICBtb2R1bGVfcGF0aCA9IHBhdGhf
dXRpbHMubGlnaHR0cGRfbW9kdWxlX3BhdGgoKQorICAgICAgICBleGVjdXRhYmxlID0gc2VsZi5f
cG9ydF9vYmouX3BhdGhfdG9fbGlnaHR0cGQoKQorICAgICAgICBtb2R1bGVfcGF0aCA9IHNlbGYu
X3BvcnRfb2JqLl9wYXRoX3RvX2xpZ2h0dHBkX21vZHVsZXMoKQogICAgICAgICBzdGFydF9jbWQg
PSBbZXhlY3V0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICMgTmV3bHkgd3JpdHRlbiBjb25m
aWcgZmlsZQotICAgICAgICAgICAgICAgICAgICAgJy1mJywgcGF0aF91dGlscy5wYXRoX2Zyb21f
YmFzZShzZWxmLl9vdXRwdXRfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnbGlnaHR0cGQuY29uZicpLAorICAgICAgICAgICAgICAgICAg
ICAgJy1mJywgc2VsZi5fcG9ydF9vYmouX3BhdGhfZnJvbV9iYXNlKHNlbGYuX291dHB1dF9kaXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnbGlnaHR0cGQuY29uZicpLAogICAgICAgICAgICAgICAgICAgICAgIyBXaGVyZSBpdCBjYW4g
ZmluZCBpdHMgbW9kdWxlIGR5bmFtaWMgbGlicmFyaWVzCiAgICAgICAgICAgICAgICAgICAgICAn
LW0nLCBtb2R1bGVfcGF0aF0KIApAQCAtMjAzLDExICsxOTcsMTEgQEAgY2xhc3MgTGlnaHR0cGQo
aHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydgogICAgICAgICBlbnYgPSBvcy5lbnZpcm9uCiAgICAg
ICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3aW4zMicpOgogICAgICAgICAgICAg
ZW52WydQQVRIJ10gPSAnJXM7JXMnICUgKAotICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMucGF0
aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nKSwKKyAgICAgICAgICAg
ICAgICBwb3J0LnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLCAnYmluJyks
CiAgICAgICAgICAgICAgICAgZW52WydQQVRIJ10pCiAKICAgICAgICAgaWYgc3lzLnBsYXRmb3Jt
ID09ICd3aW4zMicgYW5kIHNlbGYuX3JlZ2lzdGVyX2N5Z3dpbjoKLSAgICAgICAgICAgIHNldHVw
X21vdW50ID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFzZSgndGhpcmRfcGFydHknLCAnY3lnd2lu
JywKKyAgICAgICAgICAgIHNldHVwX21vdW50ID0gcG9ydC5wYXRoX2Zyb21fYmFzZSgndGhpcmRf
cGFydHknLCAnY3lnd2luJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnc2V0dXBfbW91bnQuYmF0JykKICAgICAgICAgICAgIHN1YnByb2Nlc3Mu
UG9wZW4oc2V0dXBfbW91bnQpLndhaXQoKQogCkBAIC0yMzUsNyArMjI5LDcgQEAgY2xhc3MgTGln
aHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydgogICAgICAgICBodHRwZF9waWQgPSBOb25l
CiAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CiAgICAgICAgICAgICBodHRwZF9waWQgPSBzZWxm
Ll9wcm9jZXNzLnBpZAotICAgICAgICBwYXRoX3V0aWxzLnNodXRfZG93bl9odHRwX3NlcnZlciho
dHRwZF9waWQpCisgICAgICAgIHBvcnQuX3NodXRfZG93bl9odHRwX3NlcnZlcihodHRwZF9waWQp
CiAKICAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKICAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mu
d2FpdCgpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2h0dHBfc2VydmVyX2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5CShyZXZpc2lv
biA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvaHR0cF9zZXJ2ZXJfYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE2IEBA
CiAiIiJCYXNlIGNsYXNzIHdpdGggY29tbW9uIHJvdXRpbmVzIGJldHdlZW4gdGhlIEFwYWNoZSBh
bmQgTGlnaHR0cGQgc2VydmVycy4iIiIKIAogaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcwogaW1w
b3J0IHRpbWUKIGltcG9ydCB1cmxsaWIKIAogCiBjbGFzcyBIdHRwU2VydmVyQmFzZShvYmplY3Qp
OgogCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqKToKKyAgICAgICAgc2VsZi5fcG9y
dF9vYmogPSBwb3J0X29iagorCiAgICAgZGVmIHdhaXRfZm9yX2FjdGlvbihzZWxmLCBhY3Rpb24p
OgogICAgICAgICAiIiJSZXBlYXQgdGhlIGFjdGlvbiBmb3IgMjAgc2Vjb25kcyBvciB1bnRpbCBp
dCBzdWNjZWVkcy4gUmV0dXJucwogICAgICAgICB3aGV0aGVyIGl0IHN1Y2NlZWRlZC4iIiIKQEAg
LTY1LDMgKzY5LDEwIEBAIGNsYXNzIEh0dHBTZXJ2ZXJCYXNlKG9iamVjdCk6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiByZW1v
dmVfbG9nX2ZpbGVzKHNlbGYsIGZvbGRlciwgc3RhcnRzX3dpdGgpOgorICAgICAgICBmaWxlcyA9
IG9zLmxpc3RkaXIoZm9sZGVyKQorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAg
ICAgIGlmIGZpbGUuc3RhcnRzd2l0aChzdGFydHNfd2l0aCk6CisgICAgICAgICAgICAgICAgZnVs
bF9wYXRoID0gb3MucGF0aC5qb2luKGZvbGRlciwgZmlsZSkKKyAgICAgICAgICAgICAgICBvcy5y
ZW1vdmUoZnVsbF9wYXRoKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9wYXRoX3V0aWxzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcGF0aF91dGlscy5weQkocmV2aXNpb24g
NTQzNjQpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3BhdGhfdXRpbHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMzk1ICswLDAgQEAKLSMhL3Vzci9i
aW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwot
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0j
IGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0j
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlRoaXMgcGFja2FnZSBjb250YWlu
cyB1dGlsaXR5IG1ldGhvZHMgZm9yIG1hbmlwdWxhdGluZyBwYXRocyBhbmQKLWZpbGVuYW1lcyBm
b3IgdGVzdCByZXN1bHRzIGFuZCBiYXNlbGluZXMuIEl0IGFsc28gY29udGFpbnMgd3JhcHBlcnMK
LW9mIGEgZmV3IHJvdXRpbmVzIGluIHBvcnQvIHNvIHRoYXQgdGhlIHBvcnQgcGFja2FnZSBjYW4K
LWJlIGNvbnNpZGVyZWQgYSAncHJvdGVjdGVkJyBwYWNrYWdlIC0gaS5lLiwgdGhpcyBmaWxlIHNo
b3VsZCBiZQotdGhlIG9ubHkgZmlsZSB0aGF0IGV2ZXIgaW5jbHVkZXMgcG9ydC4gVGhpcyBsZWFk
cyB0bwotdXMgaW5jbHVkaW5nIGEgZmV3IHRoaW5ncyB0aGF0IGRvbid0IHJlYWxseSBoYXZlIGFu
eXRoaW5nIHRvIGRvCi0gd2l0aCBwYXRocywgdW5mb3J0dW5hdGVseS4iIiIKLQotaW1wb3J0IGVy
cm5vCi1pbXBvcnQgb3MKLWltcG9ydCBzdGF0Ci1pbXBvcnQgc3lzCi0KLWltcG9ydCBwb3J0Ci1p
bXBvcnQgY2hyb21pdW1fd2luCi1pbXBvcnQgY2hyb21pdW1fbWFjCi1pbXBvcnQgY2hyb21pdW1f
bGludXgKLQotIyBDYWNoZSBzb21lIHZhbHVlcyBzbyB3ZSBkb24ndCBoYXZlIHRvIHJlY2FsY3Vs
YXRlIHRoZW0uIF9iYXNlZGlyIGlzCi0jIHVzZWQgYnkgUGF0aEZyb21CYXNlKCkgYW5kIGNhY2hl
cyB0aGUgZnVsbCAobmF0aXZlKSBwYXRoIHRvIHRoZSB0b3AKLSMgb2YgdGhlIHNvdXJjZSB0cmVl
ICgvc3JjKS4gX2Jhc2VsaW5lX3NlYXJjaF9wYXRoIGlzIHVzZWQgYnkKLSMgRXhwZWN0ZWRCYXNl
bGluZXMoKSBhbmQgY2FjaGVzIHRoZSBsaXN0IG9mIG5hdGl2ZSBwYXRocyB0byBzZWFyY2gKLSMg
Zm9yIGJhc2VsaW5lIHJlc3VsdHMuCi1fYmFzZWRpciA9IE5vbmUKLV9iYXNlbGluZV9zZWFyY2hf
cGF0aCA9IE5vbmUKLQotCi1jbGFzcyBQYXRoTm90Rm91bmQoRXhjZXB0aW9uKToKLSAgICBwYXNz
Ci0KLQotZGVmIGxheW91dF90ZXN0c19kaXIoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBmdWxseS1x
dWFsaWZpZWQgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGlucHV0Ci0gICAg
ZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBsYXlvdXQgdGVzdC4iIiIKLSAgICByZXR1cm4gcGF0aF9m
cm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdMYXlvdXRUZXN0cycpCi0KLQotZGVm
IGNocm9taXVtX2Jhc2VsaW5lX3BhdGgocGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIiUmV0dXJucyB0
aGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBleHBlY3RlZAotICAgIGJh
c2VsaW5lIHJlc3VsdHMgZnJvbSBjaHJvbWl1bSBwb3J0cy4gSWYgfHBsYXRmb3JtfCBpcyBOb25l
LCB0aGUKLSAgICBjdXJyZW50bHkgZXhlY3V0aW5nIHBsYXRmb3JtIGlzIHVzZWQuCi0KLSAgICBO
b3RlOiBhbHRob3VnaCBkaXJlY3RseSByZWZlcmVuY2luZyBpbmRpdmlkdWFsIHBvcnQvKiBmaWxl
cyBpcwotICAgIHVzdWFsbHkgZGlzY291cmFnZWQsIHdlIGFsbG93IGl0IGhlcmUgc28gdGhhdCB0
aGUgcmViYXNlbGluaW5nIHRvb2wgY2FuCi0gICAgcHVsbCBiYXNlbGluZXMgZm9yIHBsYXRmb3Jt
cyBvdGhlciB0aGFuIHRoZSBob3N0IHBsYXRmb3JtLiIiIgotCi0gICAgIyBOb3JtYWxpemUgdGhl
IHBsYXRmb3JtIHN0cmluZy4KLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUocGxhdGZvcm0p
Ci0gICAgaWYgcGxhdGZvcm0uc3RhcnRzd2l0aCgnY2hyb21pdW0tbWFjJyk6Ci0gICAgICAgIHJl
dHVybiBjaHJvbWl1bV9tYWMuYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSkKLSAgICBlbGlmIHBsYXRm
b3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLXdpbicpOgotICAgICAgICByZXR1cm4gY2hyb21pdW1f
d2luLmJhc2VsaW5lX3BhdGgocGxhdGZvcm0pCi0gICAgZWxpZiBwbGF0Zm9ybS5zdGFydHN3aXRo
KCdjaHJvbWl1bS1saW51eCcpOgotICAgICAgICByZXR1cm4gY2hyb21pdW1fbGludXguYmFzZWxp
bmVfcGF0aChwbGF0Zm9ybSkKLQotICAgIHJldHVybiBwb3J0LmJhc2VsaW5lX3BhdGgoKQotCi0K
LWRlZiB3ZWJraXRfYmFzZWxpbmVfcGF0aChwbGF0Zm9ybSk6Ci0gICAgIiIiUmV0dXJucyB0aGUg
ZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBleHBlY3RlZAotICAgIGJhc2Vs
aW5lIHJlc3VsdHMgZnJvbSBXZWJLaXQgcG9ydHMuIiIiCi0gICAgcmV0dXJuIHBhdGhfZnJvbV9i
YXNlKCd0aGlyZF9wYXJ0eScsICdXZWJLaXQnLCAnTGF5b3V0VGVzdHMnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAncGxhdGZvcm0nLCBwbGF0Zm9ybSkKLQotCi1kZWYgYmFzZWxpbmVfc2Vh
cmNoX3BhdGgocGxhdGZvcm09Tm9uZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBkaXJl
Y3RvcmllcyB0byBzZWFyY2ggZm9yIGJhc2VsaW5lcy9yZXN1bHRzIGZvciBhCi0gICAgZ2l2ZW4g
cGxhdGZvcm0sIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuIFBhdGhzIGFyZSByZWxhdGl2ZSB0byB0
aGUgdG9wIG9mCi0gICAgdGhlIHNvdXJjZSB0cmVlLiBJZiBwYXJhbWV0ZXIgcGxhdGZvcm0gaXMg
Tm9uZSwgcmV0dXJucyB0aGUgbGlzdCBmb3IgdGhlCi0gICAgY3VycmVudCBwbGF0Zm9ybSB0aGF0
IHRoZSBzY3JpcHQgaXMgcnVubmluZyBvbi4KLQotICAgIE5vdGU6IGFsdGhvdWdoIGRpcmVjdGx5
IHJlZmVyZW5jaW5nIGluZGl2aWR1YWwgcG9ydC8qIGZpbGVzIGlzCi0gICAgdXN1YWxseSBkaXNj
b3VyYWdlZCwgd2UgYWxsb3cgaXQgaGVyZSBzbyB0aGF0IHRoZSByZWJhc2VsaW5pbmcgdG9vbCBj
YW4KLSAgICBwdWxsIGJhc2VsaW5lcyBmb3IgcGxhdGZvcm1zIG90aGVyIHRoYW4gdGhlIGhvc3Qg
cGxhdGZvcm0uIiIiCi0KLSAgICAjIE5vcm1hbGl6ZSB0aGUgcGxhdGZvcm0gbmFtZS4KLSAgICBw
bGF0Zm9ybSA9IHBsYXRmb3JtX25hbWUocGxhdGZvcm0pCi0gICAgaWYgcGxhdGZvcm0uc3RhcnRz
d2l0aCgnY2hyb21pdW0tbWFjJyk6Ci0gICAgICAgIHJldHVybiBjaHJvbWl1bV9tYWMuYmFzZWxp
bmVfc2VhcmNoX3BhdGgocGxhdGZvcm0pCi0gICAgZWxpZiBwbGF0Zm9ybS5zdGFydHN3aXRoKCdj
aHJvbWl1bS13aW4nKToKLSAgICAgICAgcmV0dXJuIGNocm9taXVtX3dpbi5iYXNlbGluZV9zZWFy
Y2hfcGF0aChwbGF0Zm9ybSkKLSAgICBlbGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVt
LWxpbnV4Jyk6Ci0gICAgICAgIHJldHVybiBjaHJvbWl1bV9saW51eC5iYXNlbGluZV9zZWFyY2hf
cGF0aChwbGF0Zm9ybSkKLSAgICByZXR1cm4gcG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCgpCi0K
LQotZGVmIGV4cGVjdGVkX2Jhc2VsaW5lcyhmaWxlbmFtZSwgc3VmZml4LCBwbGF0Zm9ybT1Ob25l
LCBhbGxfYmFzZWxpbmVzPUZhbHNlKToKLSAgICAiIiJHaXZlbiBhIHRlc3QgbmFtZSwgZmluZHMg
d2hlcmUgdGhlIGJhc2VsaW5lIHJlc3VsdHMgYXJlIGxvY2F0ZWQuCi0KLSAgICBBcmdzOgotICAg
ICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKLSAgICAgICBzdWZm
aXg6IGZpbGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1bHRzLCBpbmNsdWRpbmcgZG90OyBl
LmcuICcudHh0JwotICAgICAgICAgICBvciAnLnBuZycuICBUaGlzIHNob3VsZCBub3QgYmUgTm9u
ZSwgYnV0IG1heSBiZSBhbiBlbXB0eSBzdHJpbmcuCi0gICAgICAgcGxhdGZvcm06IGxheW91dCB0
ZXN0IHBsYXRmb3JtOiAnd2luJywgJ2xpbnV4JyBvciAnbWFjJy4gRGVmYXVsdHMgdG8KLSAgICAg
ICAgICAgICAgICAgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCi0gICAgICAgYWxsX2Jhc2VsaW5lczog
SWYgVHJ1ZSwgcmV0dXJuIGFuIG9yZGVyZWQgbGlzdCBvZiBhbGwgYmFzZWxpbmUgcGF0aHMKLSAg
ICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGdpdmVuIHBsYXRmb3JtLiBJZiBGYWxzZSwgcmV0
dXJuIG9ubHkgdGhlIGZpcnN0Ci0gICAgICAgICAgICAgICAgICAgICAgb25lLgotICAgIFJldHVy
bnMKLSAgICAgICBhIGxpc3Qgb2YgKCBwbGF0Zm9ybV9kaXIsIHJlc3VsdHNfZmlsZW5hbWUgKSwg
d2hlcmUKLSAgICAgICAgIHBsYXRmb3JtX2RpciAtIGFicyBwYXRoIHRvIHRoZSB0b3Agb2YgdGhl
IHJlc3VsdHMgdHJlZSAob3IgdGVzdCB0cmVlKQotICAgICAgICAgcmVzdWx0c19maWxlbmFtZSAt
IHJlbGF0aXZlIHBhdGggZnJvbSB0b3Agb2YgdHJlZSB0byB0aGUgcmVzdWx0cyBmaWxlCi0gICAg
ICAgICAgIChvcy5wYXRoLmpvaW4gb2YgdGhlIHR3byBnaXZlcyB5b3UgdGhlIGZ1bGwgcGF0aCB0
byB0aGUgZmlsZSwKLSAgICAgICAgICAgIHVubGVzcyBOb25lIHdhcyByZXR1cm5lZC4pCi0gICAg
ICBSZXR1cm4gdmFsdWVzIHdpbGwgYmUgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0ZSBmb3IgdGhl
IGN1cnJlbnQgcGxhdGZvcm0KLSAgICAgIChlLmcuLCAiXFwiIGZvciBwYXRoIHNlcGFyYXRvcnMg
b24gV2luZG93cykuIElmIHRoZSByZXN1bHRzIGZpbGUgaXMgbm90Ci0gICAgICBmb3VuZCwgdGhl
biBOb25lIHdpbGwgYmUgcmV0dXJuZWQgZm9yIHRoZSBkaXJlY3RvcnksIGJ1dCB0aGUgZXhwZWN0
ZWQKLSAgICAgIHJlbGF0aXZlIHBhdGhuYW1lIHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQuCi0gICAg
IiIiCi0gICAgZ2xvYmFsIF9iYXNlbGluZV9zZWFyY2hfcGF0aAotICAgIGdsb2JhbCBfc2VhcmNo
X3BhdGhfcGxhdGZvcm0KLSAgICB0ZXN0bmFtZSA9IG9zLnBhdGguc3BsaXRleHQocmVsYXRpdmVf
dGVzdF9maWxlbmFtZShmaWxlbmFtZSkpWzBdCi0KLSAgICBiYXNlbGluZV9maWxlbmFtZSA9IHRl
c3RuYW1lICsgJy1leHBlY3RlZCcgKyBzdWZmaXgKLQotICAgIGlmIChfYmFzZWxpbmVfc2VhcmNo
X3BhdGggaXMgTm9uZSkgb3IgKF9zZWFyY2hfcGF0aF9wbGF0Zm9ybSAhPSBwbGF0Zm9ybSk6Ci0g
ICAgICAgIF9iYXNlbGluZV9zZWFyY2hfcGF0aCA9IGJhc2VsaW5lX3NlYXJjaF9wYXRoKHBsYXRm
b3JtKQotICAgICAgICBfc2VhcmNoX3BhdGhfcGxhdGZvcm0gPSBwbGF0Zm9ybQotCi0gICAgYmFz
ZWxpbmVzID0gW10KLSAgICBmb3IgcGxhdGZvcm1fZGlyIGluIF9iYXNlbGluZV9zZWFyY2hfcGF0
aDoKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBsYXRmb3JtX2Rpciwg
YmFzZWxpbmVfZmlsZW5hbWUpKToKLSAgICAgICAgICAgIGJhc2VsaW5lcy5hcHBlbmQoKHBsYXRm
b3JtX2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQotCi0gICAgICAgIGlmIG5vdCBhbGxfYmFzZWxp
bmVzIGFuZCBiYXNlbGluZXM6Ci0gICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVzCi0KLSAgICAj
IElmIGl0IHdhc24ndCBmb3VuZCBpbiBhIHBsYXRmb3JtIGRpcmVjdG9yeSwgcmV0dXJuIHRoZSBl
eHBlY3RlZCByZXN1bHQKLSAgICAjIGluIHRoZSB0ZXN0IGRpcmVjdG9yeSwgZXZlbiBpZiBubyBz
dWNoIGZpbGUgYWN0dWFsbHkgZXhpc3RzLgotICAgIHBsYXRmb3JtX2RpciA9IGxheW91dF90ZXN0
c19kaXIoKQotICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwbGF0Zm9ybV9kaXIs
IGJhc2VsaW5lX2ZpbGVuYW1lKSk6Ci0gICAgICAgIGJhc2VsaW5lcy5hcHBlbmQoKHBsYXRmb3Jt
X2RpciwgYmFzZWxpbmVfZmlsZW5hbWUpKQotCi0gICAgaWYgYmFzZWxpbmVzOgotICAgICAgICBy
ZXR1cm4gYmFzZWxpbmVzCi0KLSAgICByZXR1cm4gWyhOb25lLCBiYXNlbGluZV9maWxlbmFtZSld
Ci0KLQotZGVmIGV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCBzdWZmaXgpOgotICAgICIiIkdp
dmVuIGEgdGVzdCBuYW1lLCByZXR1cm5zIGFuIGFic29sdXRlIHBhdGggdG8gaXRzIGV4cGVjdGVk
IHJlc3VsdHMuCi0KLSAgICBJZiBubyBleHBlY3RlZCByZXN1bHRzIGFyZSBmb3VuZCBpbiBhbnkg
b2YgdGhlIHNlYXJjaGVkIGRpcmVjdG9yaWVzLCB0aGUKLSAgICBkaXJlY3RvcnkgaW4gd2hpY2gg
dGhlIHRlc3QgaXRzZWxmIGlzIGxvY2F0ZWQgd2lsbCBiZSByZXR1cm5lZC4gVGhlIHJldHVybgot
ICAgIHZhbHVlIGlzIGluIHRoZSBmb3JtYXQgYXBwcm9wcmlhdGUgZm9yIHRoZSBwbGF0Zm9ybSAo
ZS5nLiwgIlxcIiBmb3IKLSAgICBwYXRoIHNlcGFyYXRvcnMgb24gd2luZG93cykuCi0KLSAgICBB
cmdzOgotICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0IGZpbGUKLSAg
ICAgICBzdWZmaXg6IGZpbGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1bHRzLCBpbmNsdWRp
bmcgZG90OyBlLmcuICcudHh0JwotICAgICAgICAgICBvciAnLnBuZycuICBUaGlzIHNob3VsZCBu
b3QgYmUgTm9uZSwgYnV0IG1heSBiZSBhbiBlbXB0eSBzdHJpbmcuCi0gICAgICAgcGxhdGZvcm06
IHRoZSBtb3N0LXNwZWNpZmljIGRpcmVjdG9yeSBuYW1lIHRvIHVzZSB0byBidWlsZCB0aGUKLSAg
ICAgICAgICAgc2VhcmNoIGxpc3Qgb2YgZGlyZWN0b3JpZXMsIGUuZy4sICdjaHJvbWl1bS13aW4n
LCBvcgotICAgICAgICAgICAnY2hyb21pdW0tbWFjLWxlb3BhcmQnICh3ZSBmb2xsb3cgdGhlIFdl
YktpdCBmb3JtYXQpCi0gICAgIiIiCi0gICAgcGxhdGZvcm1fZGlyLCBiYXNlbGluZV9maWxlbmFt
ZSA9IGV4cGVjdGVkX2Jhc2VsaW5lcyhmaWxlbmFtZSwgc3VmZml4KVswXQotICAgIGlmIHBsYXRm
b3JtX2RpcjoKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwbGF0Zm9ybV9kaXIsIGJhc2Vs
aW5lX2ZpbGVuYW1lKQotICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGF5b3V0X3Rlc3RzX2Rpcigp
LCBiYXNlbGluZV9maWxlbmFtZSkKLQotCi1kZWYgcmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxl
bmFtZSk6Ci0gICAgIiIiUHJvdmlkZSB0aGUgZmlsZW5hbWUgb2YgdGhlIHRlc3QgcmVsYXRpdmUg
dG8gdGhlIGxheW91dCB0ZXN0cwotICAgIGRpcmVjdG9yeSBhcyBhIHVuaXggc3R5bGUgcGF0aCAo
YS9iL2MpLiIiIgotICAgIHJldHVybiBfd2luX3BhdGhfdG9fdW5peChmaWxlbmFtZVtsZW4obGF5
b3V0X3Rlc3RzX2RpcigpKSArIDE6XSkKLQotCi1kZWYgX3dpbl9wYXRoX3RvX3VuaXgocGF0aCk6
Ci0gICAgIiIiQ29udmVydCBhIHdpbmRvd3MgcGF0aCB0byB1c2UgdW5peC1zdHlsZSBwYXRoIHNl
cGFyYXRvcnMgKGEvYi9jKS4iIiIKLSAgICByZXR1cm4gcGF0aC5yZXBsYWNlKCdcXCcsICcvJykK
LQotIwotIyBSb3V0aW5lcyB0aGF0IGFyZSBhcmd1YWJseSBwbGF0Zm9ybS1zcGVjaWZpYyBidXQg
aGF2ZSBiZWVuIG1hZGUKLSMgZ2VuZXJpYyBmb3Igbm93Ci0jCi0KLQotZGVmIGZpbGVuYW1lX3Rv
X3VyaShmdWxsX3BhdGgpOgotICAgICIiIkNvbnZlcnQgYSB0ZXN0IGZpbGUgdG8gYSBVUkkuIiIi
Ci0gICAgTEFZT1VUVEVTVF9IVFRQX0RJUiA9ICJodHRwL3Rlc3RzLyIKLSAgICBMQVlPVVRURVNU
X1dFQlNPQ0tFVF9ESVIgPSAid2Vic29ja2V0L3Rlc3RzLyIKLQotICAgIHJlbGF0aXZlX3BhdGgg
PSBfd2luX3BhdGhfdG9fdW5peChyZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZ1bGxfcGF0aCkpCi0g
ICAgcG9ydCA9IE5vbmUKLSAgICB1c2Vfc3NsID0gRmFsc2UKLQotICAgIGlmIHJlbGF0aXZlX3Bh
dGguc3RhcnRzd2l0aChMQVlPVVRURVNUX0hUVFBfRElSKToKLSAgICAgICAgIyBodHRwL3Rlc3Rz
LyBydW4gb2ZmIHBvcnQgODAwMCBhbmQgc3NsLyBvZmYgODQ0MwotICAgICAgICByZWxhdGl2ZV9w
YXRoID0gcmVsYXRpdmVfcGF0aFtsZW4oTEFZT1VUVEVTVF9IVFRQX0RJUik6XQotICAgICAgICBw
b3J0ID0gODAwMAotICAgIGVsaWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKExBWU9VVFRFU1Rf
V0VCU09DS0VUX0RJUik6Ci0gICAgICAgICMgd2Vic29ja2V0L3Rlc3RzLyBydW4gb2ZmIHBvcnQg
ODg4MCBhbmQgOTMyMwotICAgICAgICAjIE5vdGU6IHRoZSByb290IGlzIC8sIG5vdCB3ZWJzb2Nr
ZXQvdGVzdHMvCi0gICAgICAgIHBvcnQgPSA4ODgwCi0KLSAgICAjIE1ha2UgaHR0cC90ZXN0cy9s
b2NhbCBydW4gYXMgbG9jYWwgZmlsZXMuIFRoaXMgaXMgdG8gbWltaWMgdGhlCi0gICAgIyBsb2dp
YyBpbiBydW4td2Via2l0LXRlc3RzLgotICAgICMgVE9ETyhqaWFubGkpOiBDb25zaWRlciBleHRl
bmRpbmcgdGhpcyB0byAibWVkaWEvIi4KLSAgICBpZiBwb3J0IGFuZCBub3QgcmVsYXRpdmVfcGF0
aC5zdGFydHN3aXRoKCJsb2NhbC8iKToKLSAgICAgICAgaWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3
aXRoKCJzc2wvIik6Ci0gICAgICAgICAgICBwb3J0ICs9IDQ0MwotICAgICAgICAgICAgcHJvdG9j
b2wgPSAiaHR0cHMiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcm90b2NvbCA9ICJodHRw
IgotICAgICAgICByZXR1cm4gIiVzOi8vMTI3LjAuMC4xOiV1LyVzIiAlIChwcm90b2NvbCwgcG9y
dCwgcmVsYXRpdmVfcGF0aCkKLQotICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5Z3dpbicsICd3
aW4zMicpOgotICAgICAgICByZXR1cm4gImZpbGU6Ly8vIiArIGdldF9hYnNvbHV0ZV9wYXRoKGZ1
bGxfcGF0aCkKLSAgICByZXR1cm4gImZpbGU6Ly8iICsgZ2V0X2Fic29sdXRlX3BhdGgoZnVsbF9w
YXRoKQotCi0KLWRlZiBnZXRfYWJzb2x1dGVfcGF0aChwYXRoKToKLSAgICAiIiJSZXR1cm5zIGFu
IGFic29sdXRlIFVOSVggcGF0aC4iIiIKLSAgICByZXR1cm4gX3dpbl9wYXRoX3RvX3VuaXgob3Mu
cGF0aC5hYnNwYXRoKHBhdGgpKQotCi0KLWRlZiBtYXliZV9tYWtlX2RpcmVjdG9yeSgqcGF0aCk6
Ci0gICAgIiIiQ3JlYXRlcyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFs
cmVhZHkgZXhpc3QuIiIiCi0gICAgdHJ5OgotICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpv
aW4oKnBhdGgpKQotICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICBpZiBlLmVycm5vICE9
IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgIHJhaXNlCi0KLQotZGVmIHBhdGhfZnJvbV9iYXNl
KCpjb21wcyk6Ci0gICAgIiIiUmV0dXJucyBhbiBhYnNvbHV0ZSBmaWxlbmFtZSBmcm9tIGEgc2V0
IG9mIGNvbXBvbmVudHMgc3BlY2lmaWVkCi0gICAgcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUg
c291cmNlIHRyZWUuIElmIHRoZSBwYXRoIGRvZXMgbm90IGV4aXN0LAotICAgIHRoZSBleGNlcHRp
b24gUGF0aE5vdEZvdW5kIGlzIHJhaXNlZC4iIiIKLSAgICBnbG9iYWwgX2Jhc2VkaXIKLSAgICBp
ZiBfYmFzZWRpciA9PSBOb25lOgotICAgICAgICAjIFdlIGNvbXB1dGUgdGhlIHRvcCBvZiB0aGUg
c291cmNlIHRyZWUgYnkgZmluZGluZyB0aGUgYWJzb2x1dGUKLSAgICAgICAgIyBwYXRoIG9mIHRo
aXMgc291cmNlIGZpbGUsIGFuZCB0aGVuIGNsaW1iaW5nIHVwIHRocmVlIGRpcmVjdG9yaWVzCi0g
ICAgICAgICMgYXMgZ2l2ZW4gaW4gc3VicGF0aC4gSWYgd2UgbW92ZSB0aGlzIGZpbGUsIHN1YnBh
dGggbmVlZHMgdG8gYmUKLSAgICAgICAgIyB1cGRhdGVkLgotICAgICAgICBwYXRoID0gb3MucGF0
aC5hYnNwYXRoKF9fZmlsZV9fKQotICAgICAgICBzdWJwYXRoID0gb3MucGF0aC5qb2luKCd0aGly
ZF9wYXJ0eScsICdXZWJLaXQnKQotICAgICAgICBfYmFzZWRpciA9IHBhdGhbOnBhdGguaW5kZXgo
c3VicGF0aCldCi0gICAgcGF0aCA9IG9zLnBhdGguam9pbihfYmFzZWRpciwgKmNvbXBzKQotICAg
IGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICAgICAgcmFpc2UgUGF0aE5vdEZvdW5k
KCdjb3VsZCBub3QgZmluZCAlcycgJSAocGF0aCkpCi0gICAgcmV0dXJuIHBhdGgKLQotCi1kZWYg
cmVtb3ZlX2RpcmVjdG9yeSgqcGF0aCk6Ci0gICAgIiIiUmVjdXJzaXZlbHkgcmVtb3ZlcyBhIGRp
cmVjdG9yeSwgZXZlbiBpZiBpdCdzIG1hcmtlZCByZWFkLW9ubHkuCi0KLSAgICBSZW1vdmUgdGhl
IGRpcmVjdG9yeSBsb2NhdGVkIGF0ICpwYXRoLCBpZiBpdCBleGlzdHMuCi0KLSAgICBzaHV0aWwu
cm10cmVlKCkgZG9lc24ndCB3b3JrIG9uIFdpbmRvd3MgaWYgYW55IG9mIHRoZSBmaWxlcyBvciBk
aXJlY3RvcmllcwotICAgIGFyZSByZWFkLW9ubHksIHdoaWNoIHN2biByZXBvc2l0b3JpZXMgYW5k
IHNvbWUgLnN2biBmaWxlcyBhcmUuICBXZSBuZWVkIHRvCi0gICAgYmUgYWJsZSB0byBmb3JjZSB0
aGUgZmlsZXMgdG8gYmUgd3JpdGFibGUgKGkuZS4sIGRlbGV0YWJsZSkgYXMgd2UgdHJhdmVyc2UK
LSAgICB0aGUgdHJlZS4KLQotICAgIEV2ZW4gd2l0aCBhbGwgdGhpcywgV2luZG93cyBzdGlsbCBz
b21ldGltZXMgZmFpbHMgdG8gZGVsZXRlIGEgZmlsZSwgY2l0aW5nCi0gICAgYSBwZXJtaXNzaW9u
IGVycm9yIChtYXliZSBzb21ldGhpbmcgdG8gZG8gd2l0aCBhbnRpdmlydXMgc2NhbnMgb3IgZGlz
awotICAgIGluZGV4aW5nKS4gIFRoZSBiZXN0IHN1Z2dlc3Rpb24gYW55IG9mIHRoZSB1c2VyIGZv
cnVtcyBoYWQgd2FzIHRvIHdhaXQgYQotICAgIGJpdCBhbmQgdHJ5IGFnYWluLCBzbyB3ZSBkbyB0
aGF0IHRvby4gIEl0J3MgaGFuZC13YXZpbmcsIGJ1dCBzb21ldGltZXMgaXQKLSAgICB3b3Jrcy4g
Oi8KLSAgICAiIiIKLSAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oKnBhdGgpCi0gICAgaWYg
bm90IG9zLnBhdGguZXhpc3RzKGZpbGVfcGF0aCk6Ci0gICAgICAgIHJldHVybgotCi0gICAgd2lu
MzIgPSBGYWxzZQotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICB3aW4z
MiA9IFRydWUKLSAgICAgICAgIyBTb21lIHBlb3BsZSBkb24ndCBoYXZlIHRoZSBBUElzIGluc3Rh
bGxlZC4gSW4gdGhhdCBjYXNlIHdlJ2xsIGRvCi0gICAgICAgICMgd2l0aG91dC4KLSAgICAgICAg
dHJ5OgotICAgICAgICAgICAgd2luMzJhcGkgPSBfX2ltcG9ydF9fKCd3aW4zMmFwaScpCi0gICAg
ICAgICAgICB3aW4zMmNvbiA9IF9faW1wb3J0X18oJ3dpbjMyY29uJykKLSAgICAgICAgZXhjZXB0
IEltcG9ydEVycm9yOgotICAgICAgICAgICAgd2luMzIgPSBGYWxzZQotCi0gICAgICAgIGRlZiBy
ZW1vdmVfd2l0aF9yZXRyeShybWZ1bmMsIHBhdGgpOgotICAgICAgICAgICAgb3MuY2htb2QocGF0
aCwgc3RhdC5TX0lXUklURSkKLSAgICAgICAgICAgIGlmIHdpbjMyOgotICAgICAgICAgICAgICAg
IHdpbjMyYXBpLlNldEZpbGVBdHRyaWJ1dGVzKHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2luMzJjb24uRklMRV9BVFRSSUJVVEVfTk9STUFMKQotICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiBybWZ1bmMocGF0aCkKLSAgICAg
ICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yLCBlOgotICAgICAgICAgICAgICAgIGlmIGUu
ZXJybm8gIT0gZXJybm8uRUFDQ0VTOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAg
ICAgICAgICAgIHByaW50ICdGYWlsZWQgdG8gZGVsZXRlICVzOiB0cnlpbmcgYWdhaW4nICUgcmVw
cihwYXRoKQotICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQotICAgICAgICAgICAgICAg
IHJldHVybiBybWZ1bmMocGF0aCkKLSAgICBlbHNlOgotCi0gICAgICAgIGRlZiByZW1vdmVfd2l0
aF9yZXRyeShybWZ1bmMsIHBhdGgpOgotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0
aCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9zLnJlbW92ZShwYXRoKQotICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gcm1mdW5jKHBhdGgpCi0KLSAgICBmb3Igcm9v
dCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhmaWxlX3BhdGgsIHRvcGRvd249RmFsc2UpOgotICAg
ICAgICAjIEZvciBQT1NJWDogIG1ha2luZyB0aGUgZGlyZWN0b3J5IHdyaXRhYmxlIGd1YXJhbnRl
ZXMgcmVtb3ZhYmlsaXR5LgotICAgICAgICAjIFdpbmRvd3Mgd2lsbCBpZ25vcmUgdGhlIG5vbi1y
ZWFkLW9ubHkgYml0cyBpbiB0aGUgY2htb2QgdmFsdWUuCi0gICAgICAgIG9zLmNobW9kKHJvb3Qs
IDA3NzApCi0gICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAgcmVtb3ZlX3dp
dGhfcmV0cnkob3MucmVtb3ZlLCBvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCi0gICAgICAgIGZv
ciBuYW1lIGluIGRpcnM6Ci0gICAgICAgICAgICByZW1vdmVfd2l0aF9yZXRyeShvcy5ybWRpciwg
b3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQotCi0gICAgcmVtb3ZlX3dpdGhfcmV0cnkob3Mucm1k
aXIsIGZpbGVfcGF0aCkKLQotIwotIyBXcmFwcGVycyBhcm91bmQgcG9ydC8KLSMKLQotCi1kZWYg
cGxhdGZvcm1fbmFtZShwbGF0Zm9ybT1Ob25lKToKLSAgICAiIiJSZXR1cm5zIHRoZSBhcHByb3By
aWF0ZSBjaHJvbWl1bSBwbGF0Zm9ybSBuYW1lIGZvciB8cGxhdGZvcm18LiBJZgotICAgICAgIHxw
bGF0Zm9ybXwgaXMgTm9uZSwgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2hyb21pdW0gcGxhdGZv
cm0gb24gdGhlCi0gICAgICAgY3VycmVudGx5IHJ1bm5pbmcgc3lzdGVtLiBJZiB8cGxhdGZvcm18
IGlzIG9mIHRoZSBmb3JtICdjaHJvbWl1bS0qJywKLSAgICAgICBpdCBpcyByZXR1cm5lZCB1bmNo
YW5nZWQsIG90aGVyd2lzZSAnY2hyb21pdW0tJyBpcyBwcmVwZW5kZWQuIiIiCi0gICAgaWYgcGxh
dGZvcm0gPT0gTm9uZToKLSAgICAgICAgcmV0dXJuIHBvcnQucGxhdGZvcm1fbmFtZSgpCi0gICAg
aWYgbm90IHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLScpOgotICAgICAgICBwbGF0Zm9y
bSA9ICJjaHJvbWl1bS0iICsgcGxhdGZvcm0KLSAgICByZXR1cm4gcGxhdGZvcm0KLQotCi1kZWYg
cGxhdGZvcm1fdmVyc2lvbigpOgotICAgIHJldHVybiBwb3J0LnBsYXRmb3JtX3ZlcnNpb24oKQot
Ci0KLWRlZiBsaWdodHRwZF9leGVjdXRhYmxlX3BhdGgoKToKLSAgICByZXR1cm4gcG9ydC5saWdo
dHRwZF9leGVjdXRhYmxlX3BhdGgoKQotCi0KLWRlZiBsaWdodHRwZF9tb2R1bGVfcGF0aCgpOgot
ICAgIHJldHVybiBwb3J0LmxpZ2h0dHBkX21vZHVsZV9wYXRoKCkKLQotCi1kZWYgbGlnaHR0cGRf
cGhwX3BhdGgoKToKLSAgICByZXR1cm4gcG9ydC5saWdodHRwZF9waHBfcGF0aCgpCi0KLQotZGVm
IHdkaWZmX3BhdGgoKToKLSAgICByZXR1cm4gcG9ydC53ZGlmZl9wYXRoKCkKLQotCi1kZWYgdGVz
dF9zaGVsbF9wYXRoKHRhcmdldCk6Ci0gICAgcmV0dXJuIHBvcnQudGVzdF9zaGVsbF9wYXRoKHRh
cmdldCkKLQotCi1kZWYgaW1hZ2VfZGlmZl9wYXRoKHRhcmdldCk6Ci0gICAgcmV0dXJuIHBvcnQu
aW1hZ2VfZGlmZl9wYXRoKHRhcmdldCkKLQotCi1kZWYgbGF5b3V0X3Rlc3RfaGVscGVyX3BhdGgo
dGFyZ2V0KToKLSAgICByZXR1cm4gcG9ydC5sYXlvdXRfdGVzdF9oZWxwZXJfcGF0aCh0YXJnZXQp
Ci0KLQotZGVmIGZ1enp5X21hdGNoX3BhdGgoKToKLSAgICByZXR1cm4gcG9ydC5mdXp6eV9tYXRj
aF9wYXRoKCkKLQotCi1kZWYgc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlcnZlcl9waWQpOgotICAg
IHJldHVybiBwb3J0LnNodXRfZG93bl9odHRwX3NlcnZlcihzZXJ2ZXJfcGlkKQotCi0KLWRlZiBr
aWxsX2FsbF90ZXN0X3NoZWxscygpOgotICAgIHBvcnQua2lsbF9hbGxfdGVzdF9zaGVsbHMoKQpJ
bmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJz
b2NrZXRfc2VydmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQkocmV2aXNpb24gNTQzNjQp
CisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNv
Y2tldF9zZXJ2ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDYgQEAgaW1wb3J0IHRl
bXBmaWxlCiBpbXBvcnQgdGltZQogaW1wb3J0IHVybGxpYgogCi1pbXBvcnQgcGF0aF91dGlscwot
aW1wb3J0IHBvcnQKIGltcG9ydCBodHRwX3NlcnZlcgogCiBfV1NfTE9HX1BSRUZJWCA9ICdweXdl
YnNvY2tldC53cy5sb2ctJwpAQCAtNTEsMzcgKzQ5LDI5IEBAIF9ERUZBVUxUX1dTU19QT1JUID0g
OTMyMwogCiAKIGRlZiB1cmxfaXNfYWxpdmUodXJsKToKLSAgIiIiQ2hlY2tzIHRvIHNlZSBpZiB3
ZSBnZXQgYW4gaHR0cCByZXNwb25zZSBmcm9tIHx1cmx8LgotICBXZSBwb2xsIHRoZSB1cmwgNSB0
aW1lcyB3aXRoIGEgMSBzZWNvbmQgZGVsYXkuICBJZiB3ZSBkb24ndAotICBnZXQgYSByZXBseSBp
biB0aGF0IHRpbWUsIHdlIGdpdmUgdXAgYW5kIGFzc3VtZSB0aGUgaHR0cGQKLSAgZGlkbid0IHN0
YXJ0IHByb3Blcmx5LgotCi0gIEFyZ3M6Ci0gICAgdXJsOiBUaGUgVVJMIHRvIGNoZWNrLgotICBS
ZXR1cm46Ci0gICAgVHJ1ZSBpZiB0aGUgdXJsIGlzIGFsaXZlLgotICAiIiIKLSAgd2FpdF90aW1l
ID0gNQotICB3aGlsZSB3YWl0X3RpbWUgPiAwOgotICAgIHRyeToKLSAgICAgIHJlc3BvbnNlID0g
dXJsbGliLnVybG9wZW4odXJsKQotICAgICAgIyBTZXJ2ZXIgaXMgdXAgYW5kIHJlc3BvbmRpbmcu
Ci0gICAgICByZXR1cm4gVHJ1ZQotICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgcGFzcwotICAg
IHdhaXRfdGltZSAtPSAxCi0gICAgIyBXYWl0IGEgc2Vjb25kIGFuZCB0cnkgYWdhaW4uCi0gICAg
dGltZS5zbGVlcCgxKQotCi0gIHJldHVybiBGYWxzZQotCi0KLWRlZiByZW1vdmVfbG9nX2ZpbGVz
KGZvbGRlciwgc3RhcnRzX3dpdGgpOgotICAgIGZpbGVzID0gb3MubGlzdGRpcihmb2xkZXIpCi0g
ICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0gICAgICAgIGlmIGZpbGUuc3RhcnRzd2l0aChzdGFydHNf
d2l0aCk6Ci0gICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oZm9sZGVyLCBmaWxl
KQotICAgICAgICAgICAgb3MucmVtb3ZlKGZ1bGxfcGF0aCkKKyAgICAiIiJDaGVja3MgdG8gc2Vl
IGlmIHdlIGdldCBhbiBodHRwIHJlc3BvbnNlIGZyb20gfHVybHwuCisgICAgV2UgcG9sbCB0aGUg
dXJsIDUgdGltZXMgd2l0aCBhIDEgc2Vjb25kIGRlbGF5LiAgSWYgd2UgZG9uJ3QKKyAgICBnZXQg
YSByZXBseSBpbiB0aGF0IHRpbWUsIHdlIGdpdmUgdXAgYW5kIGFzc3VtZSB0aGUgaHR0cGQKKyAg
ICBkaWRuJ3Qgc3RhcnQgcHJvcGVybHkuCisKKyAgICBBcmdzOgorICAgICAgdXJsOiBUaGUgVVJM
IHRvIGNoZWNrLgorICAgIFJldHVybjoKKyAgICAgIFRydWUgaWYgdGhlIHVybCBpcyBhbGl2ZS4K
KyAgICAiIiIKKyAgICB3YWl0X3RpbWUgPSA1CisgICAgd2hpbGUgd2FpdF90aW1lID4gMDoKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIudXJsb3Blbih1cmwpCisg
ICAgICAgICAgICAjIFNlcnZlciBpcyB1cCBhbmQgcmVzcG9uZGluZy4KKyAgICAgICAgICAgIHJl
dHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAg
ICAgICB3YWl0X3RpbWUgLT0gMQorICAgICAgICAjIFdhaXQgYSBzZWNvbmQgYW5kIHRyeSBhZ2Fp
bi4KKyAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgcmV0dXJuIEZhbHNlCiAKIAogY2xhc3Mg
UHlXZWJTb2NrZXROb3RTdGFydGVkKEV4Y2VwdGlvbik6CkBAIC05NCwxOCArODQsMTUgQEAgY2xh
c3MgUHlXZWJTb2NrZXROb3RGb3VuZChFeGNlcHRpb24pOgogCiBjbGFzcyBQeVdlYlNvY2tldCho
dHRwX3NlcnZlci5MaWdodHRwZCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0X2Rp
ciwgcG9ydD1fREVGQVVMVF9XU19QT1JULAotICAgICAgICAgICAgICAgICByb290PU5vbmUsCi0g
ICAgICAgICAgICAgICAgIHVzZV90bHM9RmFsc2UsCi0gICAgICAgICAgICAgICAgIHByaXZhdGVf
a2V5PWh0dHBfc2VydmVyLkxpZ2h0dHBkLl9wZW1fZmlsZSwKLSAgICAgICAgICAgICAgICAgY2Vy
dGlmaWNhdGU9aHR0cF9zZXJ2ZXIuTGlnaHR0cGQuX3BlbV9maWxlLAorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwb3J0X29iaiwgb3V0cHV0X2RpciwgcG9ydD1fREVGQVVMVF9XU19QT1JULAorICAg
ICAgICAgICAgICAgICByb290PU5vbmUsIHVzZV90bHM9RmFsc2UsCiAgICAgICAgICAgICAgICAg
IHJlZ2lzdGVyX2N5Z3dpbj1Ob25lLAogICAgICAgICAgICAgICAgICBwaWRmaWxlPU5vbmUpOgog
ICAgICAgICAiIiJBcmdzOgogICAgICAgICAgIG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBwYXRo
IHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgZGlyZWN0b3J5CiAgICAgICAgICIiIgotICAgICAg
ICBodHRwX3NlcnZlci5MaWdodHRwZC5fX2luaXRfXyhzZWxmLCBvdXRwdXRfZGlyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0PXBvcnQsCisgICAgICAgIGh0dHBf
c2VydmVyLkxpZ2h0dHBkLl9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBvdXRwdXRfZGlyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0PV9ERUZBVUxUX1dTX1BPUlQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Q9cm9vdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfY3lnd2luPXJlZ2lzdGVy
X2N5Z3dpbikKICAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKQEAgLTExMyw4
ICsxMDAsOCBAQCBjbGFzcyBQeVdlYlNvY2tldChodHRwX3NlcnZlci5MaWdodHRwZCk6CiAgICAg
ICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CiAgICAgICAg
IHNlbGYuX3VzZV90bHMgPSB1c2VfdGxzCi0gICAgICAgIHNlbGYuX3ByaXZhdGVfa2V5ID0gcHJp
dmF0ZV9rZXkKLSAgICAgICAgc2VsZi5fY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZQorICAgICAg
ICBzZWxmLl9wcml2YXRlX2tleSA9IHNlbGYuX3BlbV9maWxlCisgICAgICAgIHNlbGYuX2NlcnRp
ZmljYXRlID0gc2VsZi5fcGVtX2ZpbGUKICAgICAgICAgaWYgc2VsZi5fcG9ydDoKICAgICAgICAg
ICAgIHNlbGYuX3BvcnQgPSBpbnQoc2VsZi5fcG9ydCkKICAgICAgICAgaWYgc2VsZi5fdXNlX3Rs
czoKQEAgLTEzMSwxMiArMTE4LDEwIEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxp
Z2h0dHBkKToKICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5fcm9vdCwgJ3dlYnNv
Y2tldCcsICd0ZXN0cycpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgICAgIHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMgPSBwYXRoX3V0aWxzLnBhdGhfZnJvbV9i
YXNlKAotICAgICAgICAgICAgICAgICAgICAndGhpcmRfcGFydHknLCAnV2ViS2l0JywgJ0xheW91
dFRlc3RzJywgJ3dlYnNvY2tldCcsCi0gICAgICAgICAgICAgICAgICAgICd0ZXN0cycpCi0gICAg
ICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzID0gcGF0aF91dGlscy5wYXRoX2Zyb21fYmFz
ZSgKLSAgICAgICAgICAgICAgICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdMYXlvdXRU
ZXN0cycpCi0gICAgICAgICAgICBleGNlcHQgcGF0aF91dGlscy5QYXRoTm90Rm91bmQ6CisgICAg
ICAgICAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzID0gc2VsZi5fcG9ydF9vYmoubGF5b3V0X3Rl
c3RzX2RpcigpCisgICAgICAgICAgICAgICAgc2VsZi5fd2ViX3NvY2tldF90ZXN0cyA9IG9zLnBh
dGguam9pbihzZWxmLl9sYXlvdXRfdGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAnd2Vic29j
a2V0JywgJ3Rlc3RzJykKKyAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICBzZWxm
Ll93ZWJfc29ja2V0X3Rlc3RzID0gTm9uZQogCiAgICAgZGVmIHN0YXJ0KHNlbGYpOgpAQCAtMTU1
LDcgKzE0MCw3IEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKICAg
ICAgICAgbG9nX2ZpbGVfbmFtZSA9IGxvZ19wcmVmaXggKyB0aW1lX3N0cgogCiAgICAgICAgICMg
UmVtb3ZlIG9sZCBsb2cgZmlsZXMuIFdlIG9ubHkgbmVlZCB0byBrZWVwIHRoZSBsYXN0IG9uZXMu
Ci0gICAgICAgIHJlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgbG9nX3ByZWZpeCkK
KyAgICAgICAgc2VsZi5yZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsIGxvZ19wcmVm
aXgpCiAKICAgICAgICAgZXJyb3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIs
IGxvZ19maWxlX25hbWUgKyAiLWVyci50eHQiKQogCkBAIC0xNjMsMTEgKzE0OCwxMiBAQCBjbGFz
cyBQeVdlYlNvY2tldChodHRwX3NlcnZlci5MaWdodHRwZCk6CiAgICAgICAgIHNlbGYuX3dzb3V0
ID0gb3BlbihvdXRwdXRfbG9nLCAidyIpCiAKICAgICAgICAgcHl0aG9uX2ludGVycCA9IHN5cy5l
eGVjdXRhYmxlCi0gICAgICAgIHB5d2Vic29ja2V0X2Jhc2UgPSBwYXRoX3V0aWxzLnBhdGhfZnJv
bV9iYXNlKAotICAgICAgICAgICAgJ3RoaXJkX3BhcnR5JywgJ1dlYktpdCcsICdXZWJLaXRUb29s
cycsICdweXdlYnNvY2tldCcpCi0gICAgICAgIHB5d2Vic29ja2V0X3NjcmlwdCA9IHBhdGhfdXRp
bHMucGF0aF9mcm9tX2Jhc2UoCi0gICAgICAgICAgICAndGhpcmRfcGFydHknLCAnV2ViS2l0Jywg
J1dlYktpdFRvb2xzJywgJ3B5d2Vic29ja2V0JywKLSAgICAgICAgICAgICdtb2RfcHl3ZWJzb2Nr
ZXQnLCAnc3RhbmRhbG9uZS5weScpCisgICAgICAgIHB5d2Vic29ja2V0X2Jhc2UgPSBvcy5wYXRo
LmpvaW4oCisgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBh
dGguZGlybmFtZSgKKyAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUo
CisgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpKSksICdweXdlYnNvY2tl
dCcpCisgICAgICAgIHB5d2Vic29ja2V0X3NjcmlwdCA9IG9zLnBhdGguam9pbihweXdlYnNvY2tl
dF9iYXNlLCAnbW9kX3B5d2Vic29ja2V0JywKKyAgICAgICAgICAgICdzdGFuZGFsb25lLnB5JykK
ICAgICAgICAgc3RhcnRfY21kID0gWwogICAgICAgICAgICAgcHl0aG9uX2ludGVycCwgcHl3ZWJz
b2NrZXRfc2NyaXB0LAogICAgICAgICAgICAgJy1wJywgc3RyKHNlbGYuX3BvcnQpLApAQCAtMTkz
LDEyICsxNzksMTIgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgog
ICAgICAgICBlbnYgPSBvcy5lbnZpcm9uCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2N5
Z3dpbicsICd3aW4zMicpOgogICAgICAgICAgICAgZW52WydQQVRIJ10gPSAnJXM7JXMnICUgKAot
ICAgICAgICAgICAgICAgIHBhdGhfdXRpbHMucGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5Jywg
J2N5Z3dpbicsICdiaW4nKSwKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0X29iai5fcGF0aF9m
cm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywgJ2N5Z3dpbicsICdiaW4nKSwKICAgICAgICAgICAgICAg
ICBlbnZbJ1BBVEgnXSkKIAogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQg
c2VsZi5fcmVnaXN0ZXJfY3lnd2luOgotICAgICAgICAgICAgc2V0dXBfbW91bnQgPSBwYXRoX3V0
aWxzLnBhdGhfZnJvbV9iYXNlKCd0aGlyZF9wYXJ0eScsICdjeWd3aW4nLAotICAgICAgICAgICAg
ICAgICdzZXR1cF9tb3VudC5iYXQnKQorICAgICAgICAgICAgc2V0dXBfbW91bnQgPSBzZWxmLl9w
b3J0X29iai5fcGF0aF9mcm9tX2Jhc2UoJ3RoaXJkX3BhcnR5JywKKyAgICAgICAgICAgICAgICAg
J2N5Z3dpbicsICdzZXR1cF9tb3VudC5iYXQnKQogICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3Bl
bihzZXR1cF9tb3VudCkud2FpdCgpCiAKICAgICAgICAgZW52WydQWVRIT05QQVRIJ10gPSAocHl3
ZWJzb2NrZXRfYmFzZSArIG9zLnBhdGgucGF0aHNlcCArCkBAIC0yNTUsNyArMjQxLDcgQEAgY2xh
c3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICAgICAgICAgICdG
YWlsZWQgdG8gZmluZCAlcyBzZXJ2ZXIgcGlkLicgJSBzZWxmLl9zZXJ2ZXJfbmFtZSkKIAogICAg
ICAgICBsb2dnaW5nLmRlYnVnKCdTaHV0dGluZyBkb3duICVzIHNlcnZlciAlZC4nICUgKHNlbGYu
X3NlcnZlcl9uYW1lLCBwaWQpKQotICAgICAgICBwb3J0LmtpbGxfcHJvY2VzcyhwaWQpCisgICAg
ICAgIHNlbGYuX3BvcnRfb2JqLl9raWxsX3Byb2Nlc3MocGlkKQogCiAgICAgICAgIGlmIHNlbGYu
X3Byb2Nlc3M6CiAgICAgICAgICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQpJbmRleDogV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9mdXp6eV9pbWFn
ZV9kaWZmLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvZnV6enlfaW1hZ2VfZGlmZi5weQkocmV2aXNpb24gNTQzNjQp
CisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVz
L2Z1enp5X2ltYWdlX2RpZmYucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE2ICszNSwxNCBAQCBp
bXBvcnQgZXJybm8KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKLWlt
cG9ydCBzdWJwcm9jZXNzCiAKLWZyb20gcG9ydCBpbXBvcnQgcGF0aF91dGlscwogZnJvbSBsYXlv
dXRfcGFja2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcwogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCB0
ZXN0X3R5cGVfYmFzZQogCiAKIGNsYXNzIEZ1enp5SW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRl
c3RUeXBlQmFzZSk6CiAKLSAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgZmlsZW5hbWUsIHBy
b2MsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgorICAgIGRlZiBjb21wYXJlX291dHB1dChz
ZWxmLCBmaWxlbmFtZSwgb3V0cHV0LCB0ZXN0X2FyZ3MsIHRhcmdldCk6CiAgICAgICAgICIiIklt
cGxlbWVudGF0aW9uIG9mIENvbXBhcmVPdXRwdXQgdGhhdCBjaGVja3MgdGhlIG91dHB1dCBpbWFn
ZSBhbmQKICAgICAgICAgY2hlY2tzdW0gYWdhaW5zdCB0aGUgZXhwZWN0ZWQgZmlsZXMgZnJvbSB0
aGUgTGF5b3V0VGVzdCBkaXJlY3RvcnkuCiAgICAgICAgICIiIgpAQCAtNTQsNyArNTIsNyBAQCBj
bGFzcyBGdXp6eUltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0CiAgICAgICAgIGlmIHRlc3Rf
YXJncy5oYXNoIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZXMKIAotICAgICAg
ICBleHBlY3RlZF9wbmdfZmlsZSA9IHBhdGhfdXRpbHMuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5h
bWUsICcucG5nJykKKyAgICAgICAgZXhwZWN0ZWRfcG5nX2ZpbGUgPSBzZWxmLl9wb3J0LmV4cGVj
dGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAnLnBuZycpCiAKICAgICAgICAgaWYgdGVzdF9hcmdzLnNo
b3dfc291cmNlczoKICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVj
dGVkX3BuZ19maWxlKQpAQCAtNjQsOCArNjIsNyBAQCBjbGFzcyBGdXp6eUltYWdlRGlmZih0ZXN0
X3R5cGVfYmFzZS5UZXN0CiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJl
cy5GYWlsdXJlTWlzc2luZ0ltYWdlKHNlbGYpKQogCiAgICAgICAgICMgUnVuIHRoZSBmdXp6eW1h
dGNoZXIKLSAgICAgICAgciA9IHN1YnByb2Nlc3MuY2FsbChbcGF0aF91dGlscy5mdXp6eV9tYXRj
aF9wYXRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hcmdzLnBuZ19wYXRo
LCBleHBlY3RlZF9wbmdfZmlsZV0pCisgICAgICAgIHIgPSBwb3J0LmZ1enp5X2RpZmYodGVzdF9h
cmdzLnBuZ19wYXRoLCBleHBlY3RlZF9wbmdfZmlsZSkKICAgICAgICAgaWYgciAhPSAwOgogICAg
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUZ1enp5RmFpbHVy
ZShzZWxmKSkKIApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weQkocmV2
aXNpb24gNTQzNjQpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDcg
QEAgaW1wb3J0IGVycm5vCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGls
Ci1pbXBvcnQgc3VicHJvY2VzcwogCi1mcm9tIHBvcnQgaW1wb3J0IHBhdGhfdXRpbHMKIGZyb20g
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gdGVzdF90eXBlcyBpbXBv
cnQgdGVzdF90eXBlX2Jhc2UKIApAQCAtODQsNyArODIsNyBAQCBjbGFzcyBJbWFnZURpZmYodGVz
dF90eXBlX2Jhc2UuVGVzdFR5cGVCCiAgICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZGF0YShm
aWxlbmFtZSwgcG5nX2RhdGEsICIucG5nIikKICAgICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9k
YXRhKGZpbGVuYW1lLCBjaGVja3N1bSwgIi5jaGVja3N1bSIpCiAKLSAgICBkZWYgX2NyZWF0ZV9p
bWFnZV9kaWZmKHNlbGYsIGZpbGVuYW1lLCB0YXJnZXQpOgorICAgIGRlZiBfY3JlYXRlX2ltYWdl
X2RpZmYoc2VsZiwgcG9ydCwgZmlsZW5hbWUsIHRhcmdldCk6CiAgICAgICAgICIiIkNyZWF0ZXMg
dGhlIHZpc3VhbCBkaWZmIG9mIHRoZSBleHBlY3RlZC9hY3R1YWwgUE5Hcy4KIAogICAgICAgICBB
cmdzOgpAQCAtOTgsMzIgKzk2LDE0IEBAIGNsYXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5U
ZXN0VHlwZUIKICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFt
ZShmaWxlbmFtZSwKICAgICAgICAgICBzZWxmLkZJTEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCArICcu
cG5nJykKIAotICAgICAgICBnbG9iYWwgX2NvbXBhcmVfYXZhaWxhYmxlCi0gICAgICAgIGNtZCA9
ICcnCi0KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRpbHMu
aW1hZ2VfZGlmZl9wYXRoKHRhcmdldCkKLSAgICAgICAgICAgIGNtZCA9IFtleGVjdXRhYmxlLCAn
LS1kaWZmJywgYWN0dWFsX2ZpbGVuYW1lLCBleHBlY3RlZF9maWxlbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICBkaWZmX2ZpbGVuYW1lXQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAg
ICAgICAgICAgX2NvbXBhcmVfYXZhaWxhYmxlID0gVHJ1ZQorICAgICAgICAgICAgcmVzdWx0ID0g
cG9ydC5kaWZmX2ltYWdlKGFjdHVhbF9maWxlbmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZl9maWxlbmFtZSkKKyAgICAgICAg
ZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICBfY29tcGFyZV9hdmFpbGFibGUgPSBGYWxz
ZQogCi0gICAgICAgIHJlc3VsdCA9IDEKLSAgICAgICAgaWYgX2NvbXBhcmVfYXZhaWxhYmxlOgot
ICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2Fs
bChjbWQpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgICAgICAgICBp
ZiBlLmVycm5vID09IGVycm5vLkVOT0VOVCBvciBlLmVycm5vID09IGVycm5vLkVBQ0NFUzoKLSAg
ICAgICAgICAgICAgICAgICAgX2NvbXBhcmVfYXZhaWxhYmxlID0gRmFsc2UKLSAgICAgICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBlCi0gICAgICAgICAgICBleGNl
cHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAjIHdvcmsgYXJvdW5kIGEgcmFjZSBjb25k
aXRpb24gaW4gUHl0aG9uIDIuNCdzIGltcGxlbWVudGF0aW9uCi0gICAgICAgICAgICAgICAgIyBv
ZiBzdWJwcm9jZXNzLlBvcGVuCi0gICAgICAgICAgICAgICAgcGFzcwotCiAgICAgICAgIGdsb2Jh
bCBfY29tcGFyZV9tc2dfcHJpbnRlZAotCiAgICAgICAgIGlmIG5vdCBfY29tcGFyZV9hdmFpbGFi
bGUgYW5kIG5vdCBfY29tcGFyZV9tc2dfcHJpbnRlZDoKICAgICAgICAgICAgIF9jb21wYXJlX21z
Z19wcmludGVkID0gVHJ1ZQogICAgICAgICAgICAgcHJpbnQoJ2ltYWdlX2RpZmYgbm90IGZvdW5k
LiBNYWtlIHN1cmUgeW91IGhhdmUgYSAnICsgdGFyZ2V0ICsKQEAgLTEzMSw3ICsxMTEsNyBAQCBj
bGFzcyBJbWFnZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCCiAKICAgICAgICAgcmV0dXJu
IHJlc3VsdAogCi0gICAgZGVmIGNvbXBhcmVfb3V0cHV0KHNlbGYsIGZpbGVuYW1lLCBwcm9jLCBv
dXRwdXQsIHRlc3RfYXJncywgdGFyZ2V0KToKKyAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwg
cG9ydCwgZmlsZW5hbWUsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgogICAgICAgICAiIiJJ
bXBsZW1lbnRhdGlvbiBvZiBDb21wYXJlT3V0cHV0IHRoYXQgY2hlY2tzIHRoZSBvdXRwdXQgaW1h
Z2UgYW5kCiAgICAgICAgIGNoZWNrc3VtIGFnYWluc3QgdGhlIGV4cGVjdGVkIGZpbGVzIGZyb20g
dGhlIExheW91dFRlc3QgZGlyZWN0b3J5LgogICAgICAgICAiIiIKQEAgLTE0OCw5ICsxMjgsOSBA
QCBjbGFzcyBJbWFnZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCCiAgICAgICAgICAgICBy
ZXR1cm4gZmFpbHVyZXMKIAogICAgICAgICAjIENvbXBhcmUgaGFzaGVzLgotICAgICAgICBleHBl
Y3RlZF9oYXNoX2ZpbGUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLAor
ICAgICAgICBleHBlY3RlZF9oYXNoX2ZpbGUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1l
KGZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICcuY2hlY2tzdW0nKQotICAgICAgICBleHBlY3RlZF9wbmdfZmlsZSA9IHBh
dGhfdXRpbHMuZXhwZWN0ZWRfZmlsZW5hbWUoZmlsZW5hbWUsICcucG5nJykKKyAgICAgICAgZXhw
ZWN0ZWRfcG5nX2ZpbGUgPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1lLCAn
LnBuZycpCiAKICAgICAgICAgaWYgdGVzdF9hcmdzLnNob3dfc291cmNlczoKICAgICAgICAgICAg
IGxvZ2dpbmcuZGVidWcoJ1VzaW5nICVzJyAlIGV4cGVjdGVkX2hhc2hfZmlsZSkKQEAgLTE2Niw4
ICsxNDYsOSBAQCBjbGFzcyBJbWFnZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCCiAKICAg
ICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGV4cGVjdGVkX3BuZ19maWxlKToKICAgICAgICAg
ICAgICMgUmVwb3J0IGEgbWlzc2luZyBleHBlY3RlZCBQTkcgZmlsZS4KLSAgICAgICAgICAgIHNl
bGYud3JpdGVfb3V0cHV0X2ZpbGVzKGZpbGVuYW1lLCAnJywgJy5jaGVja3N1bScsIHRlc3RfYXJn
cy5oYXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaGFz
aCwgZGlmZj1GYWxzZSwgd2RpZmY9RmFsc2UpCisgICAgICAgICAgICBzZWxmLndyaXRlX291dHB1
dF9maWxlcyhwb3J0LCBmaWxlbmFtZSwgJycsICcuY2hlY2tzdW0nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdF9hcmdzLmhhc2gsIGV4cGVjdGVkX2hhc2gsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmPUZhbHNlLCB3ZGlmZj1GYWxzZSkK
ICAgICAgICAgICAgIHNlbGYuX2NvcHlfb3V0cHV0X3BuZyhmaWxlbmFtZSwgdGVzdF9hcmdzLnBu
Z19wYXRoLCAnLWFjdHVhbC5wbmcnKQogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3Rf
ZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZShzZWxmKSkKICAgICAgICAgICAgIHJldHVybiBm
YWlsdXJlcwpAQCAtMTc2LDE0ICsxNTcsMTUgQEAgY2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9i
YXNlLlRlc3RUeXBlQgogICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmVzCiAKIAotICAgICAgICBz
ZWxmLndyaXRlX291dHB1dF9maWxlcyhmaWxlbmFtZSwgJycsICcuY2hlY2tzdW0nLCB0ZXN0X2Fy
Z3MuaGFzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaGFzaCwg
ZGlmZj1GYWxzZSwgd2RpZmY9RmFsc2UpCisgICAgICAgIHNlbGYud3JpdGVfb3V0cHV0X2ZpbGVz
KHBvcnQsIGZpbGVuYW1lLCAnJywgJy5jaGVja3N1bScsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3RfYXJncy5oYXNoLCBleHBlY3RlZF9oYXNoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaWZmPUZhbHNlLCB3ZGlmZj1GYWxzZSkKICAgICAgICAgc2VsZi5f
Y29weV9vdXRwdXRfcG5nKGZpbGVuYW1lLCB0ZXN0X2FyZ3MucG5nX3BhdGgsICctYWN0dWFsLnBu
ZycpCiAgICAgICAgIHNlbGYuX2NvcHlfb3V0cHV0X3BuZyhmaWxlbmFtZSwgZXhwZWN0ZWRfcG5n
X2ZpbGUsICctZXhwZWN0ZWQucG5nJykKIAogICAgICAgICAjIEV2ZW4gdGhvdWdoIHdlIG9ubHkg
dXNlIHJlc3VsdCBpbiBvbmUgY29kZXBhdGggYmVsb3cgYnV0IHdlCiAgICAgICAgICMgc3RpbGwg
bmVlZCB0byBjYWxsIENyZWF0ZUltYWdlRGlmZiBmb3Igb3RoZXIgY29kZXBhdGhzLgotICAgICAg
ICByZXN1bHQgPSBzZWxmLl9jcmVhdGVfaW1hZ2VfZGlmZihmaWxlbmFtZSwgdGFyZ2V0KQorICAg
ICAgICByZXN1bHQgPSBzZWxmLl9jcmVhdGVfaW1hZ2VfZGlmZihwb3J0LCBmaWxlbmFtZSwgdGFy
Z2V0KQogICAgICAgICBpZiBleHBlY3RlZF9oYXNoID09ICcnOgogICAgICAgICAgICAgZmFpbHVy
ZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZUhhc2goc2VsZikpCiAg
ICAgICAgIGVsaWYgdGVzdF9hcmdzLmhhc2ggIT0gZXhwZWN0ZWRfaGFzaDoKQEAgLTE5Niw3ICsx
NzgsNyBAQCBjbGFzcyBJbWFnZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCCiAKICAgICAg
ICAgcmV0dXJuIGZhaWx1cmVzCiAKLSAgICBkZWYgZGlmZl9maWxlcyhzZWxmLCBmaWxlMSwgZmls
ZTIpOgorICAgIGRlZiBkaWZmX2ZpbGVzKHNlbGYsIHBvcnQsIGZpbGUxLCBmaWxlMik6CiAgICAg
ICAgICIiIkRpZmYgdHdvIGltYWdlIGZpbGVzLgogCiAgICAgICAgIEFyZ3M6CkBAIC0yMDgsMTcg
KzE5MCw4IEBAIGNsYXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUIKICAgICAg
ICAgIiIiCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHBhdGhfdXRp
bHMuaW1hZ2VfZGlmZl9wYXRoKCdEZWJ1ZycpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6
Ci0gICAgICAgICAgICBsb2dnaW5nLndhcm4oJ0ZhaWxlZCB0byBmaW5kIGltYWdlIGRpZmYgZXhl
Y3V0YWJsZS4nKQotICAgICAgICAgICAgcmV0dXJuIFRydWUKLQotICAgICAgICBjbWQgPSBbZXhl
Y3V0YWJsZSwgZmlsZTEsIGZpbGUyXQotICAgICAgICByZXN1bHQgPSAxCi0gICAgICAgIHRyeToK
LSAgICAgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2FsbChjbWQpCi0gICAgICAgIGV4Y2Vw
dCBPU0Vycm9yLCBlOgotICAgICAgICAgICAgbG9nZ2luZy53YXJuKCdGYWlsZWQgdG8gY29tcGFy
ZSBpbWFnZSBkaWZmOiAlcycsIGUpCisgICAgICAgICAgICByZXN1bHQgPSBwb3J0LmRpZmZfaW1h
Z2UoZmlsZTEsIGZpbGUyKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKICAgICAgICAg
ICAgIHJldHVybiBUcnVlCiAKICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSAxCkluZGV4OiBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL3Rlc3RfdHlw
ZV9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGVzdF90eXBlX2Jhc2UucHkJKHJldmlzaW9uIDU0MzY0KQor
KysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy90
ZXN0X3R5cGVfYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMzMsMTMgKzMzLDkgQEAgQWxzbyBk
ZWZpbmVzIHRoZSBUZXN0QXJndW1lbnRzICJzdHJ1Y3QiIAogIiIiCiAKIGltcG9ydCBjZ2kKLWlt
cG9ydCBkaWZmbGliCiBpbXBvcnQgZXJybm8KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MucGF0
aAotaW1wb3J0IHN1YnByb2Nlc3MKLQotZnJvbSBwb3J0IGltcG9ydCBwYXRoX3V0aWxzCiAKIAog
Y2xhc3MgVGVzdEFyZ3VtZW50cyhvYmplY3QpOgpAQCAtNzQsNyArNzAsNyBAQCBjbGFzcyBUZXN0
VHlwZUJhc2Uob2JqZWN0KToKICAgICBGSUxFTkFNRV9TVUZGSVhfV0RJRkYgPSAiLXdkaWZmLmh0
bWwiCiAgICAgRklMRU5BTUVfU1VGRklYX0NPTVBBUkUgPSAiLWRpZmYucG5nIgogCi0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBsYXRmb3JtLCByb290X291dHB1dF9kaXIpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwb3J0LCBwbGF0Zm9ybSwgcm9vdF9vdXRwdXRfZGlyKToKICAgICAgICAgIiIi
SW5pdGlhbGl6ZSBhIFRlc3RUeXBlQmFzZSBvYmplY3QuCiAKICAgICAgICAgQXJnczoKQEAgLTgz
LDE0ICs3OSwxNSBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAgICAgICByb290
X291dHB1dF9kaXI6IFRoZSB1bml4IHN0eWxlIHBhdGggdG8gdGhlIG91dHB1dCBkaXIuCiAgICAg
ICAgICIiIgogICAgICAgICBzZWxmLl9yb290X291dHB1dF9kaXIgPSByb290X291dHB1dF9kaXIK
KyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0
Zm9ybQogCiAgICAgZGVmIF9tYWtlX291dHB1dF9kaXJlY3Rvcnkoc2VsZiwgZmlsZW5hbWUpOgog
ICAgICAgICAiIiJDcmVhdGVzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IChpZiBuZWVkZWQpIGZvciBh
IGdpdmVuIHRlc3QKICAgICAgICAgZmlsZW5hbWUuIiIiCiAgICAgICAgIG91dHB1dF9maWxlbmFt
ZSA9IG9zLnBhdGguam9pbihzZWxmLl9yb290X291dHB1dF9kaXIsCi0gICAgICAgICAgICBwYXRo
X3V0aWxzLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKQotICAgICAgICBwYXRoX3V0
aWxzLm1heWJlX21ha2VfZGlyZWN0b3J5KG9zLnBhdGguc3BsaXQob3V0cHV0X2ZpbGVuYW1lKVsw
XSkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFt
ZSkpCisgICAgICAgIHNlbGYuX3BvcnQubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxp
dChvdXRwdXRfZmlsZW5hbWUpWzBdKQogCiAgICAgZGVmIF9zYXZlX2Jhc2VsaW5lX2RhdGEoc2Vs
ZiwgZmlsZW5hbWUsIGRhdGEsIG1vZGlmaWVyKToKICAgICAgICAgIiIiU2F2ZXMgYSBuZXcgYmFz
ZWxpbmUgZmlsZSBpbnRvIHRoZSBwbGF0Zm9ybSBkaXJlY3RvcnkuCkBAIC0xMDQsMTMgKzEwMSwx
MyBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAgICAgICBtb2RpZmllcjogdHlw
ZSBvZiB0aGUgcmVzdWx0IGZpbGUsIGUuZy4gIi50eHQiIG9yICIucG5nIgogICAgICAgICAiIiIK
ICAgICAgICAgcmVsYXRpdmVfZGlyID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAgICAgICAgcGF0
aF91dGlscy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkKKyAgICAgICAgICAgIHNl
bGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCiAgICAgICAgIG91dHB1
dF9kaXIgPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgICAgICBwYXRoX3V0aWxzLmNocm9taXVtX2Jh
c2VsaW5lX3BhdGgoc2VsZi5fcGxhdGZvcm0pLCByZWxhdGl2ZV9kaXIpCisgICAgICAgICAgICBz
ZWxmLl9wb3J0LmNocm9taXVtX2Jhc2VsaW5lX3BhdGgoc2VsZi5fcGxhdGZvcm0pLCByZWxhdGl2
ZV9kaXIpCiAgICAgICAgIG91dHB1dF9maWxlID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLnNw
bGl0ZXh0KGZpbGVuYW1lKVswXSArCiAgICAgICAgICAgICBzZWxmLkZJTEVOQU1FX1NVRkZJWF9F
WFBFQ1RFRCArIG1vZGlmaWVyKQogCi0gICAgICAgIHBhdGhfdXRpbHMubWF5YmVfbWFrZV9kaXJl
Y3Rvcnkob3V0cHV0X2RpcikKKyAgICAgICAgc2VsZi5fcG9ydC5tYXliZV9tYWtlX2RpcmVjdG9y
eShvdXRwdXRfZGlyKQogICAgICAgICBvdXRwdXRfcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRf
ZGlyLCBvdXRwdXRfZmlsZSkKICAgICAgICAgbG9nZ2luZy5kZWJ1Zygnd3JpdGluZyBuZXcgYmFz
ZWxpbmUgdG8gIiVzIicgJSAob3V0cHV0X3BhdGgpKQogICAgICAgICBvcGVuKG91dHB1dF9wYXRo
LCAid2IiKS53cml0ZShkYXRhKQpAQCAtMTMwLDEwICsxMjcsMTAgQEAgY2xhc3MgVGVzdFR5cGVC
YXNlKG9iamVjdCk6CiAgICAgICAgICAgVGhlIGFic29sdXRlIHdpbmRvd3MgcGF0aCB0byB0aGUg
b3V0cHV0IGZpbGVuYW1lCiAgICAgICAgICIiIgogICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBv
cy5wYXRoLmpvaW4oc2VsZi5fcm9vdF9vdXRwdXRfZGlyLAotICAgICAgICAgICAgcGF0aF91dGls
cy5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkKKyAgICAgICAgICAgIHNlbGYuX3Bv
cnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpCiAgICAgICAgIHJldHVybiBvcy5w
YXRoLnNwbGl0ZXh0KG91dHB1dF9maWxlbmFtZSlbMF0gKyBtb2RpZmllcgogCi0gICAgZGVmIGNv
bXBhcmVfb3V0cHV0KHNlbGYsIGZpbGVuYW1lLCBwcm9jLCBvdXRwdXQsIHRlc3RfYXJncywgdGFy
Z2V0KToKKyAgICBkZWYgY29tcGFyZV9vdXRwdXQoc2VsZiwgcG9ydCwgZmlsZW5hbWUsIG91dHB1
dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgogICAgICAgICAiIiJNZXRob2QgdGhhdCBjb21wYXJlcyB0
aGUgb3V0cHV0IGZyb20gdGhlIHRlc3Qgd2l0aCB0aGUKICAgICAgICAgZXhwZWN0ZWQgdmFsdWUu
CiAKQEAgLTE0MSw3ICsxMzgsNiBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKIAogICAg
ICAgICBBcmdzOgogICAgICAgICAgIGZpbGVuYW1lOiBhYnNvbHV0ZSBmaWxlbmFtZSB0byB0ZXN0
IGZpbGUKLSAgICAgICAgICBwcm9jOiBhIHJlZmVyZW5jZSB0byB0aGUgdGVzdF9zaGVsbCBwcm9j
ZXNzCiAgICAgICAgICAgb3V0cHV0OiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBvdXRwdXQgb2Yg
dGhlIHRlc3QKICAgICAgICAgICB0ZXN0X2FyZ3M6IGEgVGVzdEFyZ3VtZW50cyBvYmplY3QgaG9s
ZGluZyBvcHRpb25hbCBhZGRpdGlvbmFsCiAgICAgICAgICAgICAgIGFyZ3VtZW50cwpAQCAtMTUy
LDggKzE0OCw4IEBAIGNsYXNzIFRlc3RUeXBlQmFzZShvYmplY3QpOgogICAgICAgICAiIiIKICAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWQKIAotICAgIGRlZiB3cml0ZV9vdXRwdXRfZmlsZXMo
c2VsZiwgZmlsZW5hbWUsIHRlc3RfdHlwZSwgZmlsZV90eXBlLCBvdXRwdXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHBlY3RlZCwgZGlmZj1UcnVlLCB3ZGlmZj1GYWxzZSk6CisgICAg
ZGVmIHdyaXRlX291dHB1dF9maWxlcyhzZWxmLCBwb3J0LCBmaWxlbmFtZSwgdGVzdF90eXBlLCBm
aWxlX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGV4cGVjdGVkLCBk
aWZmPVRydWUsIHdkaWZmPUZhbHNlKToKICAgICAgICAgIiIiV3JpdGVzIHRoZSB0ZXN0IG91dHB1
dCwgdGhlIGV4cGVjdGVkIG91dHB1dCBhbmQgb3B0aW9uYWxseSB0aGUgZGlmZgogICAgICAgICBi
ZXR3ZWVuIHRoZSB0d28gdG8gZmlsZXMgaW4gdGhlIHJlc3VsdHMgZGlyZWN0b3J5LgogCkBAIC0x
ODYsODEgKzE4MiwxNSBAQCBjbGFzcyBUZXN0VHlwZUJhc2Uob2JqZWN0KToKICAgICAgICAgICAg
IHJldHVybgogCiAgICAgICAgIGlmIGRpZmY6Ci0gICAgICAgICAgICBkaWZmID0gZGlmZmxpYi51
bmlmaWVkX2RpZmYoZXhwZWN0ZWQuc3BsaXRsaW5lcyhUcnVlKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuc3BsaXRsaW5lcyhUcnVlKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfZmlsZW5hbWUpCi0KKyAg
ICAgICAgICAgIGRpZmYgPSBwb3J0LmRpZmZfdGV4dChleHBlY3RlZCwgb3V0cHV0LCBleHBlY3Rl
ZF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfZmls
ZW5hbWUpCiAgICAgICAgICAgICBkaWZmX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUo
ZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgdGVzdF90eXBlICsgc2VsZi5GSUxFTkFNRV9TVUZG
SVhfRElGRiArIGZpbGVfdHlwZSkKLSAgICAgICAgICAgIG9wZW4oZGlmZl9maWxlbmFtZSwgIndi
Iikud3JpdGUoJycuam9pbihkaWZmKSkKKyAgICAgICAgICAgIG9wZW4oZGlmZl9maWxlbmFtZSwg
IndiIikud3JpdGUoZGlmZikKIAogICAgICAgICBpZiB3ZGlmZjoKICAgICAgICAgICAgICMgU2hl
bGwgb3V0IHRvIHdkaWZmIHRvIGdldCBjb2xvcmVkIGlubGluZSBkaWZmcy4KLSAgICAgICAgICAg
IGV4ZWN1dGFibGUgPSBwYXRoX3V0aWxzLndkaWZmX3BhdGgoKQotICAgICAgICAgICAgY21kID0g
W2V4ZWN1dGFibGUsCi0gICAgICAgICAgICAgICAgICAgJy0tc3RhcnQtZGVsZXRlPSMjV0RJRkZf
REVMIyMnLAotICAgICAgICAgICAgICAgICAgICctLWVuZC1kZWxldGU9IyNXRElGRl9FTkQjIycs
Ci0gICAgICAgICAgICAgICAgICAgJy0tc3RhcnQtaW5zZXJ0PSMjV0RJRkZfQUREIyMnLAotICAg
ICAgICAgICAgICAgICAgICctLWVuZC1pbnNlcnQ9IyNXRElGRl9FTkQjIycsCi0gICAgICAgICAg
ICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgYWN0dWFsX2Zp
bGVuYW1lXQotICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxl
bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3R5cGUgKyBzZWxmLkZJTEVO
QU1FX1NVRkZJWF9XRElGRikKLQotICAgICAgICAgICAgZ2xvYmFsIF93ZGlmZl9hdmFpbGFibGUK
LQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgUHl0aG9uJ3MgUG9wZW4gaGFz
IGEgYnVnIHRoYXQgY2F1c2VzIGFueSBwaXBlcyBvcGVuZWQgdG8gYQotICAgICAgICAgICAgICAg
ICMgcHJvY2VzcyB0aGF0IGNhbid0IGJlIGV4ZWN1dGVkIHRvIGJlIGxlYWtlZC4gIFNpbmNlIHRo
aXMKLSAgICAgICAgICAgICAgICAjIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHRv
bGVyYXRlIGV4ZWMgZmFpbHVyZXMKLSAgICAgICAgICAgICAgICAjIHRvIGdyYWNlZnVsbHkgaGFu
ZGxlIGNhc2VzIHdoZXJlIHdkaWZmIGlzIG5vdCBpbnN0YWxsZWQsCi0gICAgICAgICAgICAgICAg
IyB0aGUgYnVnIHJlc3VsdHMgaW4gYSBtYXNzaXZlIGZpbGUgZGVzY3JpcHRvciBsZWFrLiBBcyBh
Ci0gICAgICAgICAgICAgICAgIyB3b3JrYXJvdW5kLCBpZiBhbiBleGVjIGZhaWx1cmUgaXMgZXZl
ciBleHBlcmllbmNlZCBmb3IKLSAgICAgICAgICAgICAgICAjIHdkaWZmLCBhc3N1bWUgaXQncyBu
b3QgYXZhaWxhYmxlLiAgVGhpcyB3aWxsIGxlYWsgb25lCi0gICAgICAgICAgICAgICAgIyBmaWxl
IGRlc2NyaXB0b3IgYnV0IHRoYXQncyBiZXR0ZXIgdGhhbiBsZWFraW5nIGVhY2ggdGltZQotICAg
ICAgICAgICAgICAgICMgd2RpZmYgd291bGQgYmUgcnVuLgotICAgICAgICAgICAgICAgICMKLSAg
ICAgICAgICAgICAgICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1s
aXN0LwotICAgICAgICAgICAgICAgICMgICAgMjAwOC1BdWd1c3QvNTA1NzUzLmh0bWwKLSAgICAg
ICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzMjEwCi0gICAgICAgICAg
ICAgICAgIwotICAgICAgICAgICAgICAgICMgSXQgYWxzbyBoYXMgYSB0aHJlYWRpbmcgYnVnLCBz
byB3ZSBkb24ndCBvdXRwdXQgd2RpZmYgaWYKLSAgICAgICAgICAgICAgICAjIHRoZSBQb3BlbiBy
YWlzZXMgYSBWYWx1ZUVycm9yLgotICAgICAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9u
Lm9yZy9pc3N1ZTEyMzYKLSAgICAgICAgICAgICAgICBpZiBfd2RpZmZfYXZhaWxhYmxlOgotICAg
ICAgICAgICAgICAgICAgICB3ZGlmZiA9IHN1YnByb2Nlc3MuUG9wZW4oCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0K
LSAgICAgICAgICAgICAgICAgICAgd2RpZmZfZmFpbGVkID0gRmFsc2UKLQotICAgICAgICAgICAg
ZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgaWYgKGUuZXJybm8gPT0gZXJybm8u
RU5PRU5UIG9yIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTIG9yCi0gICAgICAgICAgICAgICAgICAg
IGUuZXJybm8gPT0gZXJybm8uRUNISUxEKToKLSAgICAgICAgICAgICAgICAgICAgX3dkaWZmX2F2
YWlsYWJsZSA9IEZhbHNlCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgZQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgICAg
ICAgICAgd2RpZmZfZmFpbGVkID0gVHJ1ZQotCi0gICAgICAgICAgICBvdXQgPSBvcGVuKGZpbGVu
YW1lLCAnd2InKQotCi0gICAgICAgICAgICBpZiBub3QgX3dkaWZmX2F2YWlsYWJsZToKLSAgICAg
ICAgICAgICAgICBvdXQud3JpdGUoCi0gICAgICAgICAgICAgICAgICAgICJ3ZGlmZiBub3QgaW5z
dGFsbGVkLjxici8+ICIKLSAgICAgICAgICAgICAgICAgICAgIklmIHlvdSdyZSBydW5uaW5nIE9T
IFgsIHlvdSBjYW4gaW5zdGFsbCB2aWEgbWFjcG9ydHMuIgotICAgICAgICAgICAgICAgICAgICAi
PGJyLz4iCi0gICAgICAgICAgICAgICAgICAgICJJZiBydW5uaW5nIFVidW50dSBsaW51eCwgeW91
IGNhbiBydW4gIgotICAgICAgICAgICAgICAgICAgICAiJ3N1ZG8gYXB0LWdldCBpbnN0YWxsIHdk
aWZmJy4iKQotICAgICAgICAgICAgZWxpZiB3ZGlmZl9mYWlsZWQ6Ci0gICAgICAgICAgICAgICAg
b3V0LndyaXRlKCd3ZGlmZiBmYWlsZWQgZHVlIHRvIHJ1bm5pbmcgd2l0aCBtdWx0aXBsZSAnCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X3NoZWxscyBpbiBwYXJhbGxlbC4nKQotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB3ZGlmZiA9IGNnaS5lc2NhcGUod2RpZmYp
Ci0gICAgICAgICAgICAgICAgd2RpZmYgPSB3ZGlmZi5yZXBsYWNlKCcjI1dESUZGX0RFTCMjJywg
JzxzcGFuIGNsYXNzPWRlbD4nKQotICAgICAgICAgICAgICAgIHdkaWZmID0gd2RpZmYucmVwbGFj
ZSgnIyNXRElGRl9BREQjIycsICc8c3BhbiBjbGFzcz1hZGQ+JykKLSAgICAgICAgICAgICAgICB3
ZGlmZiA9IHdkaWZmLnJlcGxhY2UoJyMjV0RJRkZfRU5EIyMnLCAnPC9zcGFuPicpCi0gICAgICAg
ICAgICAgICAgb3V0LndyaXRlKCc8aGVhZD48c3R5bGU+LmRlbCB7IGJhY2tncm91bmQ6ICNmYWE7
IH0gJykKLSAgICAgICAgICAgICAgICBvdXQud3JpdGUoJy5hZGQgeyBiYWNrZ3JvdW5kOiAjYWZh
OyB9PC9zdHlsZT48L2hlYWQ+JykKLSAgICAgICAgICAgICAgICBvdXQud3JpdGUoJzxwcmU+JyAr
IHdkaWZmICsgJzwvcHJlPicpCi0KLSAgICAgICAgICAgIG91dC5jbG9zZSgpCisgICAgICAgICAg
ICB3ZGlmZiA9IHBvcnQud2RpZmZfdGV4dChleHBlY3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVu
YW1lKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFt
ZSwgdGVzdF90eXBlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5GSUxFTkFNRV9TVUZGSVhfV0RJRkYpCisgICAgICAgICAgICBvdXQgPSBvcGVuKGZp
bGVuYW1lLCAnd2InKS53cml0ZSh3ZGlmZikKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4
dF9kaWZmLnB5CShyZXZpc2lvbiA1NDM2NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvdGV4dF9kaWZmLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw3ICszNyw2IEBAIGltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcy5w
YXRoCiAKLWZyb20gcG9ydCBpbXBvcnQgcGF0aF91dGlscwogZnJvbSBsYXlvdXRfcGFja2FnZSBp
bXBvcnQgdGVzdF9mYWlsdXJlcwogZnJvbSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFz
ZQogCkBAIC02MSw4ICs2MCw4IEBAIGNsYXNzIFRlc3RUZXh0RGlmZih0ZXN0X3R5cGVfYmFzZS5U
ZXN0VHkKICAgICAgICAgIiIiR2l2ZW4gdGhlIGZpbGVuYW1lIG9mIHRoZSB0ZXN0LCByZWFkIHRo
ZSBleHBlY3RlZCBvdXRwdXQgZnJvbSBhIGZpbGUKICAgICAgICAgYW5kIG5vcm1hbGl6ZSB0aGUg
dGV4dC4gIFJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgZXhwZWN0ZWQgdGV4dCwgb3IgJycKICAg
ICAgICAgaWYgdGhlIGV4cGVjdGVkIG91dHB1dCBmaWxlIHdhcyBub3QgZm91bmQuIiIiCi0gICAg
ICAgICMgUmVhZCB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZXhwZWN0ZWQgdGV4dC4KLSAgICAgICAg
ZXhwZWN0ZWRfZmlsZW5hbWUgPSBwYXRoX3V0aWxzLmV4cGVjdGVkX2ZpbGVuYW1lKGZpbGVuYW1l
LCAnLnR4dCcpCisgICAgICAgICMgUmVhZCB0aGUgcG9ydC1zcGVjaWZpYyBleHBlY3RlZCB0ZXh0
LgorICAgICAgICBleHBlY3RlZF9maWxlbmFtZSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfZmlsZW5h
bWUoZmlsZW5hbWUsICcudHh0JykKICAgICAgICAgaWYgc2hvd19zb3VyY2VzOgogICAgICAgICAg
ICAgbG9nZ2luZy5kZWJ1ZygnVXNpbmcgJXMnICUgZXhwZWN0ZWRfZmlsZW5hbWUpCiAKQEAgLTc5
LDcgKzc4LDcgQEAgY2xhc3MgVGVzdFRleHREaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeQogICAg
ICAgICAjIE5vcm1hbGl6ZSBsaW5lIGVuZGluZ3MKICAgICAgICAgcmV0dXJuIHRleHQuc3RyaXAo
IlxyXG4iKS5yZXBsYWNlKCJcclxuIiwgIlxuIikgKyAiXG4iCiAKLSAgICBkZWYgY29tcGFyZV9v
dXRwdXQoc2VsZiwgZmlsZW5hbWUsIHByb2MsIG91dHB1dCwgdGVzdF9hcmdzLCB0YXJnZXQpOgor
ICAgIGRlZiBjb21wYXJlX291dHB1dChzZWxmLCBwb3J0LCBmaWxlbmFtZSwgb3V0cHV0LCB0ZXN0
X2FyZ3MsIHRhcmdldCk6CiAgICAgICAgICIiIkltcGxlbWVudGF0aW9uIG9mIENvbXBhcmVPdXRw
dXQgdGhhdCBjaGVja3MgdGhlIG91dHB1dCB0ZXh0IGFnYWluc3QKICAgICAgICAgdGhlIGV4cGVj
dGVkIHRleHQgZnJvbSB0aGUgTGF5b3V0VGVzdCBkaXJlY3RvcnkuIiIiCiAgICAgICAgIGZhaWx1
cmVzID0gW10KQEAgLTk1LDEwICs5NCwxMCBAQCBjbGFzcyBUZXN0VGV4dERpZmYodGVzdF90eXBl
X2Jhc2UuVGVzdFR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3RfYXJncy5zaG93X3NvdXJjZXMpCiAKICAgICAgICAgIyBXcml0ZSBvdXRw
dXQgZmlsZXMgZm9yIG5ldyB0ZXN0cywgdG9vLgotICAgICAgICBpZiBvdXRwdXQgIT0gZXhwZWN0
ZWQ6CisgICAgICAgIGlmIHBvcnQuY29tcGFyZV90ZXh0KG91dHB1dCwgZXhwZWN0ZWQpOgogICAg
ICAgICAgICAgIyBUZXh0IGRvZXNuJ3QgbWF0Y2gsIHdyaXRlIG91dHB1dCBmaWxlcy4KLSAgICAg
ICAgICAgIHNlbGYud3JpdGVfb3V0cHV0X2ZpbGVzKGZpbGVuYW1lLCAiIiwgIi50eHQiLCBvdXRw
dXQsIGV4cGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZj1U
cnVlLCB3ZGlmZj1UcnVlKQorICAgICAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMocG9y
dCwgZmlsZW5hbWUsICIiLCAiLnR4dCIsIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cGVjdGVkLCBkaWZmPVRydWUsIHdkaWZmPVRydWUpCiAKICAgICAgICAg
ICAgIGlmIGV4cGVjdGVkID09ICcnOgogICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0
ZXN0X2ZhaWx1cmVzLkZhaWx1cmVNaXNzaW5nUmVzdWx0KHNlbGYpKQpAQCAtMTA3LDcgKzEwNiw3
IEBAIGNsYXNzIFRlc3RUZXh0RGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHkKIAogICAgICAgICBy
ZXR1cm4gZmFpbHVyZXMKIAotICAgIGRlZiBkaWZmX2ZpbGVzKHNlbGYsIGZpbGUxLCBmaWxlMik6
CisgICAgZGVmIGRpZmZfZmlsZXMoc2VsZiwgcG9ydCwgZmlsZTEsIGZpbGUyKToKICAgICAgICAg
IiIiRGlmZiB0d28gdGV4dCBmaWxlcy4KIAogICAgICAgICBBcmdzOgpAQCAtMTE4LDUgKzExNyw1
IEBAIGNsYXNzIFRlc3RUZXh0RGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHkKICAgICAgICAgICBG
YWxzZSBvdGhlcndpc2UuCiAgICAgICAgICIiIgogCi0gICAgICAgIHJldHVybiAoc2VsZi5nZXRf
bm9ybWFsaXplZF90ZXh0KGZpbGUxKSAhPQotICAgICAgICAgICAgICAgIHNlbGYuZ2V0X25vcm1h
bGl6ZWRfdGV4dChmaWxlMikpCisgICAgICAgIHJldHVybiBwb3J0LmNvbXBhcmVfdGV4dChzZWxm
LmdldF9ub3JtYWxpemVkX3RleHQoZmlsZTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuZ2V0X25vcm1hbGl6ZWRfdGV4dChmaWxlMikpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48273</attachid>
            <date>2010-02-05 16:06:17 -0800</date>
            <delta_ts>2010-02-05 16:29:31 -0800</delta_ts>
            <desc>patch 4 of 4 - add WebKit Mac implementation, test implementation, and a simple test driver</desc>
            <filename>bug-34511-20100205160616.patch</filename>
            <type>text/plain</type>
            <size>27539</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU0NDQ5KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDItMDMgIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGEgc2ltcGxlIHRlc3QgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBXZWJL
aXQgTWFjIGltcGxlbWVudGF0aW9uCisgICAgICAgIGZvciB0aGUgbGF5b3V0X3Rlc3RzL3BvcnQg
cGFja2FnZS4gQWxzbyBhZGQgYSBzaW1wbGUgdGVzdCBkcml2ZXIgb2YKKyAgICAgICAgdGhhdCBp
bnRlcmZhY2UuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM0NTExCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9kcml2
ZXJfdGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9fX2luaXRfXy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L21hYy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC90ZXN0LnB5OiBBZGRlZC4KKwogMjAxMC0wMi0wMyAgRGlyayBQcmFua2Ug
IDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNpZWRl
bC4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RyaXZl
cl90ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2RyaXZlcl90ZXN0LnB5CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvZHJpdmVyX3Rlc3QucHkJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyIiIlNpbXBsZSB0ZXN0IGNsaWVudCBmb3IgdGhlIHBvcnQvRHJpdmVyIGludGVyZmFjZS4iIiIK
KworaW1wb3J0IG9zCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBwb3J0CisKKworZGVmIHJ1bl90
ZXN0cyhwb3J0LCBvcHRpb25zLCB0ZXN0cyk6CisgICAgIyB8aW1hZ2VfcGF0aHwgaXMgYSBwYXRo
IHRvIHRoZSBpbWFnZSBjYXB0dXJlIGZyb20gdGhlIGRyaXZlci4KKyAgICBpbWFnZV9wYXRoID0g
J2ltYWdlX3Jlc3VsdC5wbmcnCisgICAgZHJpdmVyID0gcG9ydC5zdGFydF9kcml2ZXIoaW1hZ2Vf
cGF0aCwgTm9uZSkKKyAgICBmb3IgdCBpbiB0ZXN0czoKKyAgICAgICAgdXJpID0gcG9ydC5maWxl
bmFtZV90b191cmkob3MucGF0aC5qb2luKHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCB0KSkKKyAg
ICAgICAgcHJpbnQgInVyaTogIiArIHVyaQorICAgICAgICBjcmFzaCwgdGltZW91dCwgY2hlY2tz
dW0sIG91dHB1dCwgZXJyID0gXAorICAgICAgICAgICAgZHJpdmVyLnJ1bl90ZXN0KHVyaSwgaW50
KG9wdGlvbnMudGltZW91dCksIE5vbmUpCisgICAgICAgIHByaW50ICJjcmFzaDogICAgICAgICAi
ICsgc3RyKGNyYXNoKQorICAgICAgICBwcmludCAidGltZW91dDogICAgICAgIiArIHN0cih0aW1l
b3V0KQorICAgICAgICBwcmludCAiY2hlY2tzdW06ICAgICAgIiArIHN0cihjaGVja3N1bSkKKyAg
ICAgICAgcHJpbnQgJ3N0ZG91dDogIiIiJworICAgICAgICBwcmludCAnJy5qb2luKG91dHB1dCkK
KyAgICAgICAgcHJpbnQgJyIiIicKKyAgICAgICAgcHJpbnQgJ3N0ZGVycjogIiIiJworICAgICAg
ICBwcmludCAnJy5qb2luKGVycikKKyAgICAgICAgcHJpbnQgJyIiIicKKyAgICAgICAgcHJpbnQK
KworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG9wdHBhcnNlciA9IG9wdHBhcnNl
Lk9wdGlvblBhcnNlcigpCisgICAgb3B0cGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcG9ydCcs
IGFjdGlvbj0nc3RvcmUnLCBkZWZhdWx0PSdtYWMnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICdQbGF0Zm9ybSB0byB0ZXN0IChlLmcuLCAibWFjIiwgImNocm9taXVtLW1hYyIsIGV0Yy4nKQor
ICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCctdCcsICctLXRhcmdldCcsIGFjdGlvbj0nc3RvcmUn
LCBkZWZhdWx0PSdSZWxlYXNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYnVpbGQgdHlw
ZSAoIkRlYnVnIiBvciAiUmVsZWFzZSIpJykKKyAgICBvcHRwYXJzZXIuYWRkX29wdGlvbignJywg
Jy0tdGltZW91dCcsIGFjdGlvbj0nc3RvcmUnLCBkZWZhdWx0PScyMDAwJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAndGVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoMjAwMCBieSBkZWZh
dWx0KScpCisgICAgb3B0cGFyc2VyLmFkZF9vcHRpb24oJycsICctLXdyYXBwZXInLCBhY3Rpb249
J3N0b3JlJykKKyAgICBvcHRwYXJzZXIuYWRkX29wdGlvbignJywgJy0tbm8tcGl4ZWwtdGVzdHMn
LCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9
RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZGlzYWJsZSBwaXhlbC10by1w
aXhlbCBQTkcgY29tcGFyaXNvbnMnKQorICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRwYXJzZXIucGFy
c2VfYXJncygpCisgICAgcCA9IHBvcnQuZ2V0KG9wdGlvbnMucG9ydCwgb3B0aW9ucykKKyAgICBy
dW5fdGVzdHMocCwgb3B0aW9ucywgYXJncykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2RyaXZlcl90ZXN0LnB5Cl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvX19pbml0X18ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9fX2luaXRfXy5w
eQkocmV2aXNpb24gNTQ0NDkpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCwxMyBA
QCBkZWYgZ2V0KHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUpOgogICAgIGlmIHBvcnRfdG9f
dXNlIGlzIE5vbmU6CiAgICAgICAgIHBvcnRfdG9fdXNlID0gJ2Nocm9taXVtLW1hYycKIAotICAg
IGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLW1hYycpOgorICAgIGlmIHBvcnRf
dG9fdXNlID09ICd0ZXN0JzoKKyAgICAgICAgaW1wb3J0IHRlc3QKKyAgICAgICAgcmV0dXJuIHRl
c3QuVGVzdFBvcnQocG9ydF9uYW1lLCBvcHRpb25zKQorICAgIGVsaWYgcG9ydF90b191c2Uuc3Rh
cnRzd2l0aCgnbWFjJyk6CisgICAgICAgIGltcG9ydCBtYWMKKyAgICAgICAgcmV0dXJuIG1hYy5N
YWNQb3J0KHBvcnRfbmFtZSwgb3B0aW9ucykKKyAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dp
dGgoJ2Nocm9taXVtLW1hYycpOgogICAgICAgICBpbXBvcnQgY2hyb21pdW1fbWFjCiAgICAgICAg
IHJldHVybiBjaHJvbWl1bV9tYWMuQ2hyb21pdW1NYWNQb3J0KHBvcnRfbmFtZSwgb3B0aW9ucykK
ICAgICBlbGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ2Nocm9taXVtLWxpbnV4Jyk6CkluZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L21hYy5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyOSBAQAor
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBt
ZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIldlYktpdCBNYWMgaW1wbGVtZW50
YXRpb24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlLiIiIgorCitpbXBvcnQgZmNudGwKK2ltcG9ydCBv
cworaW1wb3J0IHBkYgoraW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc2ln
bmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB3
ZWJicm93c2VyCisKK2ltcG9ydCBiYXNlCisKKworY2xhc3MgTWFjUG9ydChiYXNlLlBvcnQpOgor
ICAgICIiIldlYktpdCBNYWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQgY2xhc3MuIiIiCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSk6Cisg
ICAgICAgIGlmIHBvcnRfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcG9ydF9uYW1lID0gJ21h
YycgKyBwb3J0LnZlcnNpb24oKQorICAgICAgICBiYXNlLlBvcnQuX19pbml0X18oc2VsZiwgcG9y
dF9uYW1lLCBvcHRpb25zKQorCisgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgor
ICAgICAgICBkaXJzID0gW10KKyAgICAgICAgaWYgc2VsZi5fbmFtZSA9PSAnbWFjLXRpZ2VyJzoK
KyAgICAgICAgICAgIGRpcnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKHNlbGYu
X25hbWUpKQorICAgICAgICBpZiBzZWxmLl9uYW1lIGluICgnbWFjLXRpZ2VyJywgJ21hYy1sZW9w
YXJkJyk6CisgICAgICAgICAgICBkaXJzLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0
aCgnbWFjLWxlb3BhcmQnKSkKKyAgICAgICAgaWYgc2VsZi5fbmFtZSBpbiAoJ21hYy10aWdlcics
ICdtYWMtbGVvcGFyZCcsICdtYWMtc25vd2xlb3BhcmQnKToKKyAgICAgICAgICAgIGRpcnMuYXBw
ZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMtc25vd2xlb3BhcmQnKSkKKyAgICAg
ICAgZGlycy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYycpKQorICAgICAg
ICByZXR1cm4gZGlycworCisgICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYpOgorICAgICAgICAj
IFRoZXJlIGFyZSBubyBwbGF0Zm9ybS1zcGVjaWZpYyBjaGVja3Mgd2UgbmVlZCB0byBkby4KKyAg
ICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBudW1fY29yZXMoc2VsZik6CisgICAgICAgIHJl
dHVybiBpbnQob3MucG9wZW4yKCJzeXNjdGwgLW4gaHcubmNwdSIpWzFdLnJlYWQoKSkKKworICAg
IGRlZiByZXN1bHRzX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgcmV0dXJuICgnL3RtcC9ydW4t
Y2hyb21pdW0td2Via2l0LXRlc3RzLScgKworICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
cmVzdWx0c19kaXJlY3RvcnkpCisKKyAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2VsZik6CisgICAg
ICAgICMgVGhpcyBwb3J0IGRvZXNuJ3QgcmVxdWlyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlv
bi4KKyAgICAgICAgcGFzcworCisgICAgZGVmIHNob3dfcmVzdWx0c19odG1sX2ZpbGUoc2VsZiwg
cmVzdWx0c19maWxlbmFtZSk6CisgICAgICAgIHVyaSA9IHNlbGYuZmlsZW5hbWVfdG9fdXJpKHJl
c3VsdHNfZmlsZW5hbWUpCisgICAgICAgIHdlYmJyb3dzZXIub3Blbih1cmksIG5ldz0xKQorCisg
ICAgZGVmIHN0YXJ0X2RyaXZlcihzZWxmLCBpbWFnZV9wYXRoLCBvcHRpb25zKToKKyAgICAgICAg
IiIiU3RhcnRzIGEgbmV3IERyaXZlciBhbmQgcmV0dXJucyBhIGhhbmRsZSB0byBpdC4iIiIKKyAg
ICAgICAgcmV0dXJuIE1hY0RyaXZlcihzZWxmLCBpbWFnZV9wYXRoLCBvcHRpb25zKQorCisgICAg
ZGVmIHN0YXJ0X2hlbHBlcihzZWxmKToKKyAgICAgICAgIyBUaGlzIHBvcnQgZG9lc24ndCB1c2Ug
YSBoZWxwZXIgcHJvY2Vzcy4KKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3BfaGVscGVyKHNl
bGYpOgorICAgICAgICAjIFRoaXMgcG9ydCBkb2Vzbid0IHVzZSBhIGhlbHBlciBwcm9jZXNzLgor
ICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9iYXNlX3BsYXRmb3JtX25hbWVzKHNlbGYpOgor
ICAgICAgICAjIEF0IHRoZSBtb21lbnQgd2UgZG9uJ3QgdXNlIHRlc3QgcGxhdGZvcm0gbmFtZXMs
IGJ1dCB3ZSBoYXZlCisgICAgICAgICMgdG8gcmV0dXJuIHNvbWV0aGluZy4KKyAgICAgICAgcmV0
dXJuICgnbWFjJywpCisKKyAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnMoc2VsZik6CisgICAgICAg
ICMKKyAgICAgICAgIyBUaGUgV2ViS2l0IG1hYyBwb3J0IHVzZXMgJ1NraXBwZWQnIGZpbGVzIGF0
IHRoZSBtb21lbnQuIEVhY2gKKyAgICAgICAgIyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBmaWxl
cyBvciBkaXJlY3RvcmllcyB0byBiZSBza2lwcGVkIGR1cmluZworICAgICAgICAjIHRoZSB0ZXN0
IHJ1bi4gVGhlIHRvdGFsIGxpc3Qgb2YgdGVzdHMgdG8gc2tpcHBlZCBpcyBnaXZlbiBieSB0aGUK
KyAgICAgICAgIyBjb250ZW50cyBvZiB0aGUgZ2VuZXJpYyBTa2lwcGVkIGZpbGUgZm91bmQgaW4g
cGxhdGZvcm0vWCBwbHVzCisgICAgICAgICMgYSB2ZXJzaW9uLXNwZWNpZmljIGZpbGUgZm91bmQg
aW4gcGxhdGZvcm0vWC12ZXJzaW9uLiBEdXBsaWNhdGUKKyAgICAgICAgIyBlbnRyaWVzIGFyZSBh
bGxvd2VkLiBUaGlzIHJvdXRpbmUgcmVhZHMgdGhvc2UgZmlsZXMgYW5kIHR1cm5zCisgICAgICAg
ICMgY29udGVudHMgaW50byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IHRlc3RfZXhwZWN0YXRpb25z
LgorICAgICAgICBleHBlY3RhdGlvbnMgPSBbXQorICAgICAgICBza2lwcGVkX2ZpbGVzID0gW10K
KyAgICAgICAgaWYgc2VsZi5fbmFtZSBpbiAoJ21hYy10aWdlcicsICdtYWMtbGVvcGFyZCcsICdt
YWMtc25vd2xlb3BhcmQnKToKKyAgICAgICAgICAgIHNraXBwZWRfZmlsZXMuYXBwZW5kKG9zLnBh
dGguam9pbigKKyAgICAgICAgICAgICAgICBzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChzZWxm
Ll9uYW1lKSwgJ1NraXBwZWQnKSkKKyAgICAgICAgc2tpcHBlZF9maWxlcy5hcHBlbmQob3MucGF0
aC5qb2luKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMnKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTa2lwcGVkJykpCisgICAgICAgIGZvciBmaWxl
bmFtZSBpbiBza2lwcGVkX2ZpbGVzOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmls
ZW5hbWUpOgorICAgICAgICAgICAgICAgIGYgPSBmaWxlKGZpbGVuYW1lKQorICAgICAgICAgICAg
ICAgIGZvciBsIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIGwgPSBsLnN0
cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGwuc3RhcnRzd2l0aCgnIycpIGFuZCBs
ZW4obCk6CisgICAgICAgICAgICAgICAgICAgICAgICBsID0gJ0JVR19TS0lQUEVEIFNLSVAgOiAn
ICsgbCArICcgPSBGQUlMJworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbCBub3QgaW4gZXhw
ZWN0YXRpb25zOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBl
bmQobCkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIFRPRE8gLSBmaWd1
cmUgb3V0IGhvdyB0byBjaGVjayBmb3IgdGhlc2UgZHluYW1pY2FsbHkKKyAgICAgICAgZXhwZWN0
YXRpb25zLmFwcGVuZCgnQlVHX1NLSVBQRUQgU0tJUCA6IGZhc3Qvd2NzcyA9IEZBSUwnKQorICAg
ICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKCdCVUdfU0tJUFBFRCBTS0lQIDogZmFzdC94aHRtbG1w
ID0gRkFJTCcpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoJ0JVR19TS0lQUEVEIFNLSVAg
OiBodHRwL3Rlc3RzL3dtbCA9IEZBSUwnKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKCdC
VUdfU0tJUFBFRCBTS0lQIDogbWF0aG1sID0gRkFJTCcpCisgICAgICAgIGV4cGVjdGF0aW9ucy5h
cHBlbmQoJ0JVR19TS0lQUEVEIFNLSVAgOiBwbGF0Zm9ybS9jaHJvbWl1bSA9IEZBSUwnKQorICAg
ICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKCdCVUdfU0tJUFBFRCBTS0lQIDogcGxhdGZvcm0vZ3Rr
ID0gRkFJTCcpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoJ0JVR19TS0lQUEVEIFNLSVAg
OiBwbGF0Zm9ybS9xdCA9IEZBSUwnKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKCdCVUdf
U0tJUFBFRCBTS0lQIDogcGxhdGZvcm0vd2luID0gRkFJTCcpCisgICAgICAgIGV4cGVjdGF0aW9u
cy5hcHBlbmQoJ0JVR19TS0lQUEVEIFNLSVAgOiB3bWwgPSBGQUlMJykKKworICAgICAgICAjIFRP
RE8gLSBmaWd1cmUgb3V0IGhvdyB0byBoYW5kbGUgd2ViYXJjaGl2ZSB0ZXN0cworICAgICAgICBl
eHBlY3RhdGlvbnMuYXBwZW5kKCdCVUdfU0tJUFBFRCBTS0lQIDogd2ViYXJjaGl2ZSA9IFBBU1Mn
KQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKCdCVUdfU0tJUFBFRCBTS0lQIDogc3ZnL3dl
YmFyY2hpdmUgPSBQQVNTJykKKyAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZCgnQlVHX1NLSVBQ
RUQgU0tJUCA6IGh0dHAvdGVzdHMvd2ViYXJjaGl2ZSA9IFBBU1MnKQorICAgICAgICBleHBlY3Rh
dGlvbnMuYXBwZW5kKCdCVUdfU0tJUFBFRCBTS0lQIDogc3ZnL2N1c3RvbS8nCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2ltYWdlLXdpdGgtcHJlZml4LWluLXdlYmFyY2hpdmUuc3ZnID0g
UEFTUycpCisKKyAgICAgICAgZXhwZWN0YXRpb25zX3N0ciA9ICdcbicuam9pbihleHBlY3RhdGlv
bnMpCisgICAgICAgIHJldHVybiBleHBlY3RhdGlvbnNfc3RyCisKKyAgICBkZWYgdGVzdF9wbGF0
Zm9ybV9uYW1lKHNlbGYpOgorICAgICAgICAjIEF0IHRoZSBtb21lbnQgd2UgZG9uJ3QgdXNlIHRl
c3QgcGxhdGZvcm0gbmFtZXMsIGJ1dCB3ZSBoYXZlCisgICAgICAgICMgdG8gcmV0dXJuIHNvbWV0
aGluZy4KKyAgICAgICAgcmV0dXJuICdtYWMnCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1l
cyhzZWxmKToKKyAgICAgICAgIyBBdCB0aGUgbW9tZW50IHdlIGRvbid0IHVzZSB0ZXN0IHBsYXRm
b3JtIG5hbWVzLCBidXQgd2UgaGF2ZQorICAgICAgICAjIHRvIHJldHVybiBzb21ldGhpbmcuCisg
ICAgICAgIHJldHVybiAoJ21hYycsKQorCisgICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAg
IG9zX3ZlcnNpb25fc3RyaW5nID0gcGxhdGZvcm0ubWFjX3ZlcigpWzBdICAjIGUuZy4gIjEwLjUu
NiIKKyAgICAgICAgaWYgbm90IG9zX3ZlcnNpb25fc3RyaW5nOgorICAgICAgICAgICAgcmV0dXJu
ICctbGVvcGFyZCcKKyAgICAgICAgcmVsZWFzZV92ZXJzaW9uID0gaW50KG9zX3ZlcnNpb25fc3Ry
aW5nLnNwbGl0KCcuJylbMV0pCisgICAgICAgIGlmIHJlbGVhc2VfdmVyc2lvbiA9PSA0OgorICAg
ICAgICAgICAgcmV0dXJuICctdGlnZXInCisgICAgICAgIGVsaWYgcmVsZWFzZV92ZXJzaW9uID09
IDU6CisgICAgICAgICAgICByZXR1cm4gJy1sZW9wYXJkJworICAgICAgICBlbGlmIHJlbGVhc2Vf
dmVyc2lvbiA9PSA2OgorICAgICAgICAgICAgcmV0dXJuICctc25vd2xlb3BhcmQnCisgICAgICAg
IHJldHVybiAnJworCisgICAgIworICAgICMgUFJPVEVDVEVEIE1FVEhPRFMKKyAgICAjCisKKyAg
ICBkZWYgX2J1aWxkX3BhdGgoc2VsZiwgKmNvbXBzKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0
aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJLaXRCdWlsZCcsIHNlbGYuX29wdGlvbnMudGFyZ2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbXBzKQorCisgICAg
ZGVmIF9raWxsX3Byb2Nlc3Moc2VsZiwgcGlkKToKKyAgICAgICAgIiIiRm9yY2VmdWxseSBraWxs
IHRoZSBwcm9jZXNzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgIHBpZDogVGhlIGlkIG9mIHRo
ZSBwcm9jZXNzIHRvIGJlIGtpbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIG9zLmtpbGwocGlk
LCBzaWduYWwuU0lHS0lMTCkKKworICAgIGRlZiBfa2lsbF9hbGxfcHJvY2VzcyhzZWxmLCBwcm9j
ZXNzX25hbWUpOgorICAgICAgICAjIE9uIE1hYyBPUyBYIDEwLjYsIGtpbGxhbGwgaGFzIGEgbmV3
IGNvbnN0cmFpbnQ6IC1TSUdOQUxOQU1FIG9yCisgICAgICAgICMgLVNJR05BTE5VTUJFUiBtdXN0
IGNvbWUgZmlyc3QuICBFeGFtcGxlIHByb2JsZW06CisgICAgICAgICMgICAkIGtpbGxhbGwgLXUg
JFVTRVIgLVRFUk0gbGlnaHR0cGQKKyAgICAgICAgIyAgIGtpbGxhbGw6IGlsbGVnYWwgb3B0aW9u
IC0tIFQKKyAgICAgICAgIyBVc2Ugb2YgdGhlIGVhcmxpZXIgLVRFUk0gcGxhY2VtZW50IGlzIGp1
c3QgZmluZSBvbiAxMC41LgorICAgICAgICBudWxsID0gb3Blbihvcy5kZXZudWxsKQorICAgICAg
ICBzdWJwcm9jZXNzLmNhbGwoWydraWxsYWxsJywgJy1URVJNJywgJy11Jywgb3MuZ2V0ZW52KCdV
U0VSJyksCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX25hbWVdLCBzdGRlcnI9bnVs
bCkKKyAgICAgICAgbnVsbC5jbG9zZSgpCisKKyAgICBkZWYgX3BhdGhfdG9fYXBhY2hlKHNlbGYp
OgorICAgICAgICByZXR1cm4gJy91c3Ivc2Jpbi9odHRwZCcKKworICAgIGRlZiBfcGF0aF90b19h
cGFjaGVfY29uZmlnX2ZpbGUoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2Vs
Zi5sYXlvdXRfdGVzdHNfZGlyKCksICdodHRwJywgJ2NvbmYnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdhcGFjaGUyLWh0dHBkLmNvbmYnKQorCisgICAgZGVmIF9wYXRoX3RvX2RyaXZl
cihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ0R1bXBSZW5kZXJUcmVl
JykKKworICAgIGRlZiBfcGF0aF90b19oZWxwZXIoc2VsZik6CisgICAgICAgIHJldHVybiBOb25l
CisKKyAgICBkZWYgX3BhdGhfdG9faW1hZ2VfZGlmZihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2J1aWxkX3BhdGgoJ2ltYWdlX2RpZmYnKQorCisgICAgZGVmIF9wYXRoX3RvX3dkaWZmKHNl
bGYpOgorICAgICAgICByZXR1cm4gJ3dkaWZmJworCisgICAgZGVmIF9zaHV0X2Rvd25faHR0cF9z
ZXJ2ZXIoc2VsZiwgc2VydmVyX3BpZCk6CisgICAgICAgICIiIlNodXQgZG93biB0aGUgbGlnaHR0
cGQgd2ViIHNlcnZlci4gQmxvY2tzIHVudGlsIGl0J3MgZnVsbHkKKyAgICAgICAgc2h1dCBkb3du
LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzZXJ2ZXJfcGlkOiBUaGUgcHJvY2VzcyBJ
RCBvZiB0aGUgcnVubmluZyBzZXJ2ZXIuCisgICAgICAgICIiIgorICAgICAgICAjIHNlcnZlcl9w
aWQgaXMgbm90IHNldCB3aGVuICJodHRwX3NlcnZlci5weSBzdG9wIiBpcyBydW4gbWFudWFsbHku
CisgICAgICAgIGlmIHNlcnZlcl9waWQgaXMgTm9uZToKKyAgICAgICAgICAgICMgVE9ETyhtbW9z
cykgVGhpcyBpc24ndCBpZGVhbCwgc2luY2UgaXQgY291bGQgY29uZmxpY3Qgd2l0aAorICAgICAg
ICAgICAgIyBsaWdodHRwZCBwcm9jZXNzZXMgbm90IHN0YXJ0ZWQgYnkgaHR0cF9zZXJ2ZXIucHks
CisgICAgICAgICAgICAjIGJ1dCBnb29kIGVub3VnaCBmb3Igbm93LgorICAgICAgICAgICAgc2Vs
Zi5fa2lsbF9hbGxfcHJvY2VzcygnaHR0cGQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIG9zLmtpbGwoc2VydmVyX3BpZCwgc2lnbmFsLlNJR1RFUk0p
CisgICAgICAgICAgICAgICAgIyBUT0RPKG1tb3NzKSBNYXliZSB0aHJvdyBpbiBhIFNJR0tJTEwg
anVzdCB0byBiZSBzdXJlPworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAg
ICAgICAgIyBTb21ldGltZXMgd2UgZ2V0IGEgYmFkIFBJRCAoZS5nLiBmcm9tIGEgc3RhbGUgaHR0
cGQucGlkCisgICAgICAgICAgICAgICAgIyBmaWxlKSwgc28gaWYga2lsbCBmYWlscyBvbiB0aGUg
Z2l2ZW4gUElELCBqdXN0IHRyeSB0bworICAgICAgICAgICAgICAgICMgJ2tpbGxhbGwnIHdlYiBz
ZXJ2ZXJzLgorICAgICAgICAgICAgICAgIHNlbGYuX3NodXRfZG93bl9odHRwX3NlcnZlcihOb25l
KQorCisKK2NsYXNzIE1hY0RyaXZlcihiYXNlLkRyaXZlcik6CisgICAgIiIiaW1wbGVtZW50YXRp
b24gb2YgdGhlIER1bXBSZW5kZXJUcmVlIGludGVyZmFjZS4iIiIKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwb3J0LCBpbWFnZV9wYXRoLCBkcml2ZXJfb3B0aW9ucyk6CisgICAgICAgIHNlbGYu
X3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX2RyaXZlcl9vcHRpb25zID0gZHJpdmVyX29wdGlv
bnMKKyAgICAgICAgc2VsZi5fdGFyZ2V0ID0gcG9ydC5fb3B0aW9ucy50YXJnZXQKKyAgICAgICAg
c2VsZi5faW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKKyAgICAgICAgc2VsZi5fc3Rkb3V0X2ZkID0g
Tm9uZQorICAgICAgICBzZWxmLl9jbWQgPSBOb25lCisgICAgICAgIHNlbGYuX2VudiA9IE5vbmUK
KyAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcmVhZF9idWZmZXIgPSAn
JworCisgICAgICAgIGNtZCA9IFtdCisgICAgICAgICMgSG9vayBmb3IgaW5qZWN0aW5nIHZhbGdy
aW5kIG9yIG90aGVyIHJ1bnRpbWUgaW5zdHJ1bWVudGF0aW9uLAorICAgICAgICAjIHVzZWQgYnkg
ZS5nLiB0b29scy92YWxncmluZC92YWxncmluZF90ZXN0cy5weS4KKyAgICAgICAgd3JhcHBlciA9
IG9zLmVudmlyb24uZ2V0KCJCUk9XU0VSX1dSQVBQRVIiLCBOb25lKQorICAgICAgICBpZiB3cmFw
cGVyICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gW3dyYXBwZXJdCisgICAgICAgIGlmIHNl
bGYuX3BvcnQuX29wdGlvbnMud3JhcHBlcjoKKyAgICAgICAgICAgICMgVGhpcyBzcGxpdCgpIGlz
bid0IHJlYWxseSB3aGF0IHdlIHdhbnQgLS0gaXQgaW5jb3JyZWN0bHkgd2lsbAorICAgICAgICAg
ICAgIyBzcGxpdCBxdW90ZWQgc3RyaW5ncyB3aXRoaW4gdGhlIHdyYXBwZXIgYXJndW1lbnQgLS0g
YnV0IGluCisgICAgICAgICAgICAjIHByYWN0aWNlIGl0IHNob3VsZG4ndCBjb21lIHVwIGFuZCB0
aGUgLS1oZWxwIG91dHB1dCB3YXJucworICAgICAgICAgICAgIyBhYm91dCBpdCBhbnl3YXkuCisg
ICAgICAgICAgICBjbWQgKz0gc2VsZi5fb3B0aW9ucy53cmFwcGVyLnNwbGl0KCkKKyAgICAgICAg
Y21kICs9IFsnYXJjaCcsICctaTM4NicsIHBvcnQuX3BhdGhfdG9fZHJpdmVyKCksICctJ10KKyAg
ICAgICAgaWYgbm90IHNlbGYuX3BvcnQuX29wdGlvbnMubm9fcGl4ZWxfdGVzdHM6CisgICAgICAg
ICAgICBjbWQuYXBwZW5kKCctLXBpeGVsLXRlc3RzJykKKworICAgICAgICAjaWYgZHJpdmVyX29w
dGlvbnM6CisgICAgICAgICMgICAgY21kICs9IGRyaXZlcl9vcHRpb25zCisgICAgICAgIGVudiA9
IG9zLmVudmlyb24KKyAgICAgICAgZW52WydEWUxEX0ZSQU1FV09SS19QQVRIJ10gPSBzZWxmLl9w
b3J0LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgKKyAgICAgICAgICAgICdXZWJLaXRCdWlsZCcsIHBv
cnQuX29wdGlvbnMudGFyZ2V0KQorICAgICAgICBzZWxmLl9jbWQgPSBjbWQKKyAgICAgICAgc2Vs
Zi5fZW52ID0gZW52CisgICAgICAgIHNlbGYucmVzdGFydCgpCisKKyAgICBkZWYgcG9sbChzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucG9sbCgpCisKKyAgICBkZWYgcmVzdGFydChz
ZWxmKToKKyAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgc2VsZi5fcHJvYyA9IHN1YnByb2Nl
c3MuUG9wZW4oc2VsZi5fY21kLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1zZWxmLl9lbnYpCisKKyAg
ICBkZWYgcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucmV0dXJu
Y29kZQorCisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHVyaSwgdGltZW91dG1zLCBpbWFnZV9oYXNo
KToKKyAgICAgICAgb3V0cHV0ID0gW10KKyAgICAgICAgZXJyb3IgPSBbXQorICAgICAgICBpbWFn
ZSA9ICcnCisgICAgICAgIGNyYXNoID0gRmFsc2UKKyAgICAgICAgdGltZW91dCA9IEZhbHNlCisg
ICAgICAgIGFjdHVhbF91cmkgPSBOb25lCisgICAgICAgIGFjdHVhbF9pbWFnZV9oYXNoID0gTm9u
ZQorCisgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJmaWxlOi8vLyIpOgorICAgICAgICAgICAg
Y21kID0gdXJpWzc6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gdXJpCisKKyAg
ICAgICAgaWYgaW1hZ2VfaGFzaDoKKyAgICAgICAgICAgIGNtZCArPSAiJyIgKyBpbWFnZV9oYXNo
CisgICAgICAgIGNtZCArPSAiXG4iCisKKyAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi53cml0ZShj
bWQpCisgICAgICAgIHNlbGYuX3N0ZG91dF9mZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygp
CisgICAgICAgIGZsID0gZmNudGwuZmNudGwoc2VsZi5fc3Rkb3V0X2ZkLCBmY250bC5GX0dFVEZM
KQorICAgICAgICBmY250bC5mY250bChzZWxmLl9zdGRvdXRfZmQsIGZjbnRsLkZfU0VURkwsIGZs
IHwgb3MuT19OT05CTE9DSykKKworICAgICAgICBzdG9wX3RpbWUgPSB0aW1lLnRpbWUoKSArIChp
bnQodGltZW91dG1zKSAvIDEwMDAuMCkKKyAgICAgICAgcmVzcCA9ICcnCisgICAgICAgICh0aW1l
b3V0LCBsaW5lKSA9IHNlbGYuX3JlYWRfbGluZSh0aW1lb3V0LCBzdG9wX3RpbWUpCisgICAgICAg
IHJlc3AgKz0gbGluZQorICAgICAgICBoYXZlX3NlZW5fY29udGVudF90eXBlID0gRmFsc2UKKyAg
ICAgICAgd2hpbGUgbm90IHRpbWVvdXQgYW5kIGxpbmUucnN0cmlwKCkgIT0gIiNFT0YiOgorICAg
ICAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGF2ZW4ndCBjcmFzaGVkLgorICAgICAgICAgICAgaWYg
bGluZSA9PSAnJyBhbmQgc2VsZi5wb2xsKCkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
IyBUaGlzIGlzIGhleCBjb2RlIDB4YzAwMDAwMWQsIHdoaWNoIGlzIHVzZWQgZm9yIGFicnVwdAor
ICAgICAgICAgICAgICAgICMgdGVybWluYXRpb24uIFRoaXMgaGFwcGVucyBpZiB3ZSBoaXQgY3Ry
bCtjIGZyb20gdGhlIHByb21wdAorICAgICAgICAgICAgICAgICMgYW5kIHdlIGhhcHBlbiB0byBi
ZSB3YWl0aW5nIG9uIHRoZSB0ZXN0X3NoZWxsLgorICAgICAgICAgICAgICAgICMgc2RveW9uOiBO
b3Qgc3VyZSBmb3Igd2hpY2ggT1MgYW5kIGluIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGUKKyAgICAg
ICAgICAgICAgICAjIGFib3ZlIGNvZGUgaXMgdmFsaWQuIFdoYXQgd29ya3MgZm9yIG1lIHVuZGVy
IExpbnV4IHRvIGRldGVjdAorICAgICAgICAgICAgICAgICMgY3RybCtjIGlzIGZvciB0aGUgc3Vi
cHJvY2VzcyByZXR1cm5jb2RlIHRvIGJlIG5lZ2F0aXZlCisgICAgICAgICAgICAgICAgIyBTSUdJ
TlQuIEFuZCB0aGF0IGFncmVlcyB3aXRoIHRoZSBzdWJwcm9jZXNzIGRvY3VtZW50YXRpb24uCisg
ICAgICAgICAgICAgICAgaWYgKC0xMDczNzQxNTEwID09IHNlbGYucmV0dXJuY29kZSgpIG9yCisg
ICAgICAgICAgICAgICAgICAgIC0gc2lnbmFsLlNJR0lOVCA9PSBzZWxmLnJldHVybmNvZGUoKSk6
CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgICAg
ICAgICAgY3Jhc2ggPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAg
ZWxpZiAobGluZS5zdGFydHN3aXRoKCdDb250ZW50LVR5cGU6JykgYW5kIG5vdAorICAgICAgICAg
ICAgICAgICAgaGF2ZV9zZWVuX2NvbnRlbnRfdHlwZSk6CisgICAgICAgICAgICAgICAgaGF2ZV9z
ZWVuX2NvbnRlbnRfdHlwZSA9IFRydWUKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQobGluZSkKKworICAgICAgICAg
ICAgKHRpbWVvdXQsIGxpbmUpID0gc2VsZi5fcmVhZF9saW5lKHRpbWVvdXQsIHN0b3BfdGltZSkK
KyAgICAgICAgICAgIHJlc3AgKz0gbGluZQorCisgICAgICAgICMgTm93IHJlYWQgYSBzZWNvbmQg
YmxvY2sgb2YgdGV4dCBmb3IgdGhlIG9wdGlvbmFsIGltYWdlIGRhdGEKKyAgICAgICAgaW1hZ2Vf
bGVuZ3RoID0gMAorICAgICAgICAodGltZW91dCwgbGluZSkgPSBzZWxmLl9yZWFkX2xpbmUodGlt
ZW91dCwgc3RvcF90aW1lKQorICAgICAgICByZXNwICs9IGxpbmUKKyAgICAgICAgSEFTSF9IRUFE
RVIgPSAnQWN0dWFsSGFzaDogJworICAgICAgICBMRU5HVEhfSEVBREVSID0gJ0NvbnRlbnQtTGVu
Z3RoOiAnCisgICAgICAgIHdoaWxlIG5vdCB0aW1lb3V0IGFuZCBub3QgY3Jhc2ggYW5kIGxpbmUu
cnN0cmlwKCkgIT0gIiNFT0YiOgorICAgICAgICAgICAgaWYgbGluZSA9PSAnJyBhbmQgc2VsZi5w
b2xsKCkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgKC0xMDczNzQxNTEwID09IHNl
bGYucmV0dXJuY29kZSgpIG9yCisgICAgICAgICAgICAgICAgICAgIC0gc2lnbmFsLlNJR0lOVCA9
PSBzZWxmLnJldHVybmNvZGUoKSk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJk
SW50ZXJydXB0CisgICAgICAgICAgICAgICAgY3Jhc2ggPSBUcnVlCisgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKEhBU0hfSEVBREVSKToKKyAg
ICAgICAgICAgICAgICBhY3R1YWxfaW1hZ2VfaGFzaCA9IGxpbmVbbGVuKEhBU0hfSEVBREVSKTpd
LnN0cmlwKCkKKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdDb250ZW50LVR5cGU6
Jyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dp
dGgoTEVOR1RIX0hFQURFUik6CisgICAgICAgICAgICAgICAgaW1hZ2VfbGVuZ3RoID0gaW50KGxp
bmVbbGVuKExFTkdUSF9IRUFERVIpOl0pCisgICAgICAgICAgICBlbGlmIGltYWdlX2xlbmd0aDoK
KyAgICAgICAgICAgICAgICBpbWFnZSArPSBsaW5lCisKKyAgICAgICAgICAgICh0aW1lb3V0LCBs
aW5lKSA9IHNlbGYuX3JlYWRfbGluZSh0aW1lb3V0LCBzdG9wX3RpbWUsIGltYWdlX2xlbmd0aCkK
KyAgICAgICAgICAgIHJlc3AgKz0gbGluZQorCisgICAgICAgIGlmIHRpbWVvdXQ6CisgICAgICAg
ICAgICBzZWxmLnJlc3RhcnQoKQorCisgICAgICAgIGlmIHNlbGYuX2ltYWdlX3BhdGggYW5kIGxl
bihzZWxmLl9pbWFnZV9wYXRoKToKKyAgICAgICAgICAgIGltYWdlX2ZpbGUgPSBmaWxlKHNlbGYu
X2ltYWdlX3BhdGgsICJ3YiIpCisgICAgICAgICAgICBpbWFnZV9maWxlLndyaXRlKGltYWdlKQor
ICAgICAgICAgICAgaW1hZ2VfZmlsZS5jbG9zZSgpCisKKyAgICAgICAgcmV0dXJuIChjcmFzaCwg
dGltZW91dCwgYWN0dWFsX2ltYWdlX2hhc2gsCisgICAgICAgICAgICAgICAgJycuam9pbihvdXRw
dXQpLCAnJy5qb2luKGVycm9yKSkKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3Aoc2VsZik6
CisgICAgICAgIGlmIHNlbGYuX3Byb2M6CisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLmNs
b3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgICAg
IGlmIHNlbGYuX3Byb2Muc3RkZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJy
LmNsb3NlKCkKKyAgICAgICAgICAgIGlmIChzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzInLCAn
Y3lnd2luJykgYW5kCisgICAgICAgICAgICAgICAgbm90IHNlbGYuX3Byb2MucG9sbCgpKToKKyAg
ICAgICAgICAgICAgICAjIENsb3Npbmcgc3RkaW4vc3Rkb3V0L3N0ZGVyciBoYW5ncyBzb21ldGlt
ZXMgb24gT1MgWC4KKyAgICAgICAgICAgICAgICBudWxsID0gb3Blbihvcy5kZXZudWxsLCAidyIp
CisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbImtpbGwiLCAiLTkiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYuX3Byb2MucGlkKV0sIHN0ZGVycj1u
dWxsKQorICAgICAgICAgICAgICAgIG51bGwuY2xvc2UoKQorCisgICAgZGVmIF9yZWFkX2xpbmUo
c2VsZiwgdGltZW91dCwgc3RvcF90aW1lLCBpbWFnZV9sZW5ndGg9MCk6CisgICAgICAgIG5vdyA9
IHRpbWUudGltZSgpCisgICAgICAgIHJlYWRfZmRzID0gW10KKworICAgICAgICAjIGZpcnN0IGNo
ZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgbGluZSBhbHJlYWR5IHJlYWQgb3IgaWYgd2UndmUKKyAg
ICAgICAgIyByZWFkIHRoZSBlbnRpcmUgaW1hZ2UKKyAgICAgICAgaWYgaW1hZ2VfbGVuZ3RoIGFu
ZCBsZW4oc2VsZi5fcmVhZF9idWZmZXIpID49IGltYWdlX2xlbmd0aDoKKyAgICAgICAgICAgIG91
dCA9IHNlbGYuX3JlYWRfYnVmZmVyWzA6aW1hZ2VfbGVuZ3RoXQorICAgICAgICAgICAgc2VsZi5f
cmVhZF9idWZmZXIgPSBzZWxmLl9yZWFkX2J1ZmZlcltpbWFnZV9sZW5ndGg6XQorICAgICAgICAg
ICAgcmV0dXJuICh0aW1lb3V0LCBvdXQpCisKKyAgICAgICAgaWR4ID0gc2VsZi5fcmVhZF9idWZm
ZXIuZmluZCgnXG4nKQorICAgICAgICBpZiBub3QgaW1hZ2VfbGVuZ3RoIGFuZCBpZHggIT0gLTE6
CisgICAgICAgICAgICBvdXQgPSBzZWxmLl9yZWFkX2J1ZmZlclswOmlkeCArIDFdCisgICAgICAg
ICAgICBzZWxmLl9yZWFkX2J1ZmZlciA9IHNlbGYuX3JlYWRfYnVmZmVyW2lkeCArIDE6XQorICAg
ICAgICAgICAgcmV0dXJuICh0aW1lb3V0LCBvdXQpCisKKyAgICAgICAgIyBJZiB3ZSd2ZSB0aW1l
ZCBvdXQsIHJldHVybiBqdXN0IHdoYXQgd2UgaGF2ZSwgaWYgYW55dGhpbmcKKyAgICAgICAgaWYg
dGltZW91dCBvciBub3cgPj0gc3RvcF90aW1lOgorICAgICAgICAgICAgb3V0ID0gc2VsZi5fcmVh
ZF9idWZmZXIKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfYnVmZmVyID0gJycKKyAgICAgICAgICAg
IHJldHVybiAoVHJ1ZSwgb3V0KQorCisgICAgICAgIChyZWFkX2Zkcywgd3JpdGVfZmRzLCBlcnJf
ZmRzKSA9IHNlbGVjdC5zZWxlY3QoCisgICAgICAgICAgICBbc2VsZi5fc3Rkb3V0X2ZkXSwgW10s
IFtdLCBzdG9wX3RpbWUgLSBub3cpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRpbWVv
dXQgb3IgbGVuKHJlYWRfZmRzKSA9PSAxOgorICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfYnVm
ZmVyICs9IHNlbGYuX3Byb2Muc3Rkb3V0LnJlYWQoKQorICAgICAgICBleGNlcHQgSU9FcnJvciwg
ZToKKyAgICAgICAgICAgIHJlYWQgPSBbXQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9saW5l
KHRpbWVvdXQsIHN0b3BfdGltZSkKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5Cl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkJKHJldmlzaW9uIDApCisr
KyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMg
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisj
ICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworIiIiRHVtbXkgUG9ydCBpbXBsZW1lbnRhdGlvbiB1c2VkIGZvciB0ZXN0aW5nLiIi
IgorCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCisKK2ltcG9ydCBiYXNlCisKKworY2xhc3MgVGVz
dFBvcnQoYmFzZS5Qb3J0KToKKyAgICAiIiJUZXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0
IGludGVyZmFjZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X25hbWU9Tm9uZSwg
b3B0aW9ucz1Ob25lKToKKyAgICAgICAgYmFzZS5Qb3J0Ll9faW5pdF9fKHNlbGYsIHBvcnRfbmFt
ZSwgb3B0aW9ucykKKworICAgIGRlZiBiYXNlX3BsYXRmb3JtcyhzZWxmKToKKyAgICAgICAgcmV0
dXJuICgndGVzdCcsKQorCisgICAgZGVmIGJhc2VsaW5lX3BhdGgoc2VsZik6CisgICAgICAgIGN1
cmRpciA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKKyAgICAgICAgc2VsZi50b3BkaXIgPSBj
dXJkaXJbMDpjdXJkaXIuaW5kZXgoIldlYktpdFRvb2xzIildCisgICAgICAgIHJldHVybiBvcy5w
YXRoLmpvaW4oc2VsZi50b3BkaXIsICdMYXlvdXRUZXN0cycsICdwbGF0Zm9ybScsICd0ZXN0JykK
KworICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtz
ZWxmLmJhc2VsaW5lX3BhdGgoKV0KKworICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmKToKKyAg
ICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGFjdHVhbF9maWxl
bmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUsIGRpZmZfZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4g
RmFsc2UKKworICAgIGRlZiBjb21wYXJlX3RleHQoc2VsZiwgYWN0dWFsX3RleHQsIGV4cGVjdGVk
X3RleHQpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBkaWZmX3RleHQoc2VsZiwg
YWN0dWFsX3RleHQsIGV4cGVjdGVkX3RleHQsCisgICAgICAgICAgICAgICAgICBhY3R1YWxfZmls
ZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lKToKKyAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYg
bmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBudW1fY29y
ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBpbnQob3MucG9wZW4yKCJzeXNjdGwgLW4gaHcubmNw
dSIpWzFdLnJlYWQoKSkKKworICAgIGRlZiBvcHRpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fb3B0aW9ucworCisgICAgZGVmIHJlc3VsdHNfZGlyZWN0b3J5KHNlbGYpOgorICAgICAg
ICByZXR1cm4gJy90bXAnICsgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeQorCisgICAg
ZGVmIHNldHVwX3Rlc3RfcnVuKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2hvd19y
ZXN1bHRzX2h0bWxfZmlsZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHBhc3MKKworICAgIGRl
ZiBzdGFydF9kcml2ZXIoc2VsZiwgaW1hZ2VfcGF0aCwgb3B0aW9ucyk6CisgICAgICAgIHJldHVy
biBUZXN0RHJpdmVyKGltYWdlX3BhdGgsIG9wdGlvbnMsIHNlbGYpCisKKyAgICBkZWYgc3RhcnRf
aHR0cF9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydF93ZWJzb2Nr
ZXRfc2VydmVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RhcnRfaGVscGVyKHNl
bGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcF9odHRwX3NlcnZlcihzZWxmKToKKyAg
ICAgICAgcGFzcworCisgICAgZGVmIHN0b3Bfd2Vic29ja2V0X3NlcnZlcihzZWxmKToKKyAgICAg
ICAgcGFzcworCisgICAgZGVmIHN0b3BfaGVscGVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAg
ICBkZWYgdGVzdF9leHBlY3RhdGlvbnMoc2VsZik6CisgICAgICAgIHJldHVybiAnJworCisgICAg
ZGVmIHRlc3RfYmFzZV9wbGF0Zm9ybV9uYW1lcyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgndGVz
dCcsKQorCisgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
ICd0ZXN0JworCisgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZXMoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLnRlc3RfYmFzZV9wbGF0Zm9ybV9uYW1lcygpCisKKyAgICBkZWYgdmVyc2lvbigp
OgorICAgICAgICByZXR1cm4gJycKKworICAgIGRlZiB3ZGlmZl90ZXh0KHNlbGYsIGFjdHVhbF9m
aWxlbmFtZSwgZXhwZWN0ZWRfZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gJycKKworCitjbGFz
cyBUZXN0RHJpdmVyKGJhc2UuRHJpdmVyKToKKyAgICAiIiJUZXN0L0R1bW15IGltcGxlbWVudGF0
aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBpbnRlcmZhY2UuIiIiCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgaW1hZ2VfcGF0aCwgdGVzdF9kcml2ZXJfb3B0aW9ucywgcG9ydCk6CisgICAgICAg
IHNlbGYuX2RyaXZlcl9vcHRpb25zID0gdGVzdF9kcml2ZXJfb3B0aW9ucworICAgICAgICBzZWxm
Ll9pbWFnZV9wYXRoID0gaW1hZ2VfcGF0aAorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorCisg
ICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcmV0dXJu
Y29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBydW5fdGVzdChzZWxmLCB1
cmksIHRpbWVvdXRtcywgaW1hZ2VfaGFzaCk6CisgICAgICAgIHJldHVybiAoRmFsc2UsIEZhbHNl
LCBpbWFnZV9oYXNoLCAnJywgTm9uZSkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBw
YXNzCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQog
ICArIExGCgo=
</data>
<flag name="review"
          id="30920"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>