<?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>127094</bug_id>
          
          <creation_ts>2014-01-16 03:01:49 -0800</creation_ts>
          <short_desc>Integrate WP python server into WebKit test framework</short_desc>
          <delta_ts>2015-02-02 06:04:32 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>ap</cc>
    
    <cc>bjonesbe</cc>
    
    <cc>commit-queue</cc>
    
    <cc>glenn</cc>
    
    <cc>james</cc>
    
    <cc>lforschler</cc>
    
    <cc>matthew_hanson</cc>
    
    <cc>mike</cc>
    
    <cc>rniwa</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>968677</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-01-16 03:01:49 -0800</bug_when>
    <thetext>Some Web Platform tests (for instance https://github.com/w3c/web-platform-tests/tree/master/XMLHttpRequest) require interaction with WP python server (https://github.com/w3c/wptserve).
This server should be used to serve the LayoutTests/imported/w3c tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969883</commentid>
    <comment_count>1</comment_count>
      <attachid>221665</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-01-20 09:28:36 -0800</bug_when>
    <thetext>Created attachment 221665
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969889</commentid>
    <comment_count>2</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-01-20 09:36:16 -0800</bug_when>
    <thetext>First patch implements the support as follows:
- The wpt server is started for all tests inside imported/w3c
- The doc_root of the server is set to imported/w3c
- A specific route is added to serve LayoutTests/resources scripts for all urls starting as /resource/*.
- Running the server reuses as much as possible the web-platform-test serve.py script

I needed to make some small modifications to wptserver and serve.py.
Once stabilized, I hope they can be upstreamed to the respective projects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969899</commentid>
    <comment_count>3</comment_count>
    <who name="James Graham">james</who>
    <bug_when>2014-01-20 10:10:41 -0800</bug_when>
    <thetext>&gt; I needed to make some small modifications to wptserver and serve.py.
&gt; Once stabilized, I hope they can be upstreamed to the respective projects

It would be great if you could make a PR on github for these asap, even if they are not stable yet. That way we can make sure that this work goes in a direction that works for everyone, rather than having nasty surprises later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970190</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-01-21 00:05:09 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; I needed to make some small modifications to wptserver and serve.py.
&gt; &gt; Once stabilized, I hope they can be upstreamed to the respective projects
&gt; 
&gt; It would be great if you could make a PR on github for these asap, even if they are not stable yet. That way we can make sure that this work goes in a direction that works for everyone, rather than having nasty surprises later.

Done:
https://github.com/w3c/web-platform-tests/pull/540
https://github.com/w3c/wptserve/pull/3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973026</commentid>
    <comment_count>5</comment_count>
      <attachid>222470</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-01-28 11:49:05 -0800</bug_when>
    <thetext>Created attachment 222470
Functional version

The patch only contains webkit specific files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973264</commentid>
    <comment_count>6</comment_count>
      <attachid>222470</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-28 19:38:13 -0800</bug_when>
    <thetext>Comment on attachment 222470
Functional version

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

We should probably auto-install wptserve in third_party directory.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:77
&gt; +        self._needs_wpt = None

We should probably use the full name &quot;wptserve&quot; or web_platform_test_server.  I would prefer using the full name.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:212
&gt; +            self._printer.write_update(&apos;Starting WPT server ...&apos;)

Can we either call it &quot;wptserve&quot; or &quot;Web Platform Test Server&quot;?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:225
&gt; +                self._printer.write_update(&apos;Stopping WPT server ...&apos;)

Ditto.

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:292
&gt; +    option_group_definitions.append((&quot;Web Platform Tests Options&quot;, [

Nit: &quot;Web Platform Test Server Options&quot;

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:293
&gt; +        optparse.make_option(&quot;--wpt-dir&quot;, type=&quot;string&quot;, default=os.path.join(&quot;imported&quot;, &quot;w3c&quot;),

We should probably use &quot;--wptserve&quot; or &quot;--wpts&quot; as the prefix.

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:294
&gt; +            help=(&quot;set web platform server document root, relative to LayoutTests directory&quot;)),

Nit: Please capitalize &quot;set&quot; and ditto for other help texts.

&gt; Tools/Scripts/webkitpy/layout_tests/servers/wpt/launcher.py:1
&gt; +&quot;&quot;&quot;Script to set up and launch web platform test servers in the context of WebKit framework.&quot;&quot;&quot;

We don&apos;t add these comments to new files.  It should be self-explanatory from the file name.
For that reason, I would prefer naming it web_platform_test_server instead of wpt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973989</commentid>
    <comment_count>7</comment_count>
      <attachid>222731</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-01-30 14:06:38 -0800</bug_when>
    <thetext>Created attachment 222731
Added auto-install and unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978763</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-02-10 00:04:10 -0800</bug_when>
    <thetext>ping review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980687</commentid>
    <comment_count>9</comment_count>
      <attachid>224176</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-02-14 00:56:38 -0800</bug_when>
    <thetext>Created attachment 224176
fixed default websocket handlers path</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016668</commentid>
    <comment_count>10</comment_count>
      <attachid>233360</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-06-19 08:09:07 -0700</bug_when>
    <thetext>Created attachment 233360
WIP: Removed wptserve autoinstall and direct use of imported W3C repo wptserve</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035389</commentid>
    <comment_count>11</comment_count>
      <attachid>238156</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-09-16 00:13:36 -0700</bug_when>
    <thetext>Created attachment 238156
some clean up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037465</commentid>
    <comment_count>12</comment_count>
      <attachid>238712</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-09-26 06:34:45 -0700</bug_when>
    <thetext>Created attachment 238712
updated according bug 134763 discussions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056714</commentid>
    <comment_count>13</comment_count>
      <attachid>238712</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-12-17 20:04:27 -0800</bug_when>
    <thetext>Comment on attachment 238712
updated according bug 134763 discussions

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

&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:1
&gt; +#  Copyright (c) 2014, Canon Inc. All rights reserved.

Isn&apos;t this copyrighted by someone else since you&apos;re copying code from serve.py?
Also, what&apos;s the license of serve.py?  Is that BSD?

&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:35
&gt; +sys.path.insert(1, &quot;.&quot;)
&gt; +import serve as WebPlatformTestServer

Can&apos;t we use imp.load_module instead since we&apos;re loading one module?

&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:51
&gt; +    # Wait until:
&gt; +    # 1. user presses enter (in case script executed in command line)
&gt; +    # 2. the master process sends enter (regular stop command)
&gt; +    # 3. the master process is stopped (and stdin is closed)

It seems like this comment just repeats what the code below says, and it&apos;s also somewhat inaccurate.
I&apos;d prefer leaving it out instead.

&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:44
&gt; +    def __init__(self, port_obj, name, output_dir, pidfile=None):
&gt; +        &quot;&quot;&quot;Args:
&gt; +          output_dir: the absolute path to the layout test result directory
&gt; +        &quot;&quot;&quot;

Instead of adding a comment like that, rename output_dir to layout_test_results_dir or something.

&gt; Tools/Scripts/webkitpy/port/base.py:911
&gt; +        &quot;&quot;&quot;Start a web server. Raise an error if it can&apos;t start or is already running.
&gt; +
&gt; +        Ports can stub this out if they don&apos;t need a web server to be running.&quot;&quot;&quot;

We don&apos;t normally add comments like this. Please remove it.

&gt; Tools/Scripts/webkitpy/port/base.py:950
&gt; +        &quot;&quot;&quot;Shut down the web platform test server if it is running. Do nothing if it isn&apos;t.&quot;&quot;&quot;

Ditto.

&gt; Tools/Scripts/webkitpy/port/driver.py:161
&gt; +        self.web_platform_test_dir = self._port.web_platform_test_server_doc_root() + &quot;/&quot;
&gt; +

Why do we need to manually append &apos;/&apos;?

&gt; Tools/Scripts/webkitpy/port/driver.py:236
&gt; +    # Any change to WPT_BASE_URL should be synced with LayoutTests/imported/w3c/resources/config.json
&gt; +    WPT_BASE_URL = &quot;http://localhost:8800/&quot;

Can we read this value out of config.json instead?

&gt; Tools/Scripts/webkitpy/port/driver.py:402
&gt; +        elif self.is_http_test(driver_input.test_name) or  self.is_web_platform_test(driver_input.test_name):

There are two spaces after or.

&gt; Tools/Scripts/webkitpy/port/driver_unittest.py:89
&gt; +

Superflous change here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056789</commentid>
    <comment_count>14</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-12-18 09:29:22 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Comment on attachment 238712 [details]
&gt; updated according bug 134763 discussions
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=238712&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:1
&gt; &gt; +#  Copyright (c) 2014, Canon Inc. All rights reserved.
&gt; 
&gt; Isn&apos;t this copyrighted by someone else since you&apos;re copying code from
&gt; serve.py?
&gt; Also, what&apos;s the license of serve.py?  Is that BSD?

Thanks for the review.

The license is BSD: http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html

Concerning the copyright, I am not sure what should be done.
There is no copyright in the original serve.py and I read somewhere that all new source/script files added to WebKit should have copyright. I can make an explicit reference to the fact that most code is borrowed from W3C serve.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056905</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-12-18 14:53:25 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt;
&gt; The license is BSD:
&gt; http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html
&gt; 
&gt; Concerning the copyright, I am not sure what should be done.
&gt; There is no copyright in the original serve.py and I read somewhere that all
&gt; new source/script files added to WebKit should have copyright. I can make an
&gt; explicit reference to the fact that most code is borrowed from W3C serve.py.

Cam we ask James Graham &lt;james@hoppipolla.co.uk&gt; about that?  As I understand it, he is the primary author of WPT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057034</commentid>
    <comment_count>16</comment_count>
    <who name="James Graham">james</who>
    <bug_when>2014-12-19 08:19:34 -0800</bug_when>
    <thetext>I suggest we add some text like

# This Source Code Form is subject to the terms of the 3-cluase BSD License
# http://www.w3.org/Consortium/Legal/2008/03-bsd-license.html

to the top of the files upstream. Would that be sufficient to meet your requirements?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057064</commentid>
    <comment_count>17</comment_count>
      <attachid>238712</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-12-19 10:39:02 -0800</bug_when>
    <thetext>Comment on attachment 238712
updated according bug 134763 discussions

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:35
&gt;&gt; +import serve as WebPlatformTestServer
&gt; 
&gt; Can&apos;t we use imp.load_module instead since we&apos;re loading one module?

WebPlatformTestServer is using other modules located in wpt tools folder.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:51
&gt;&gt; +    # 3. the master process is stopped (and stdin is closed)
&gt; 
&gt; It seems like this comment just repeats what the code below says, and it&apos;s also somewhat inaccurate.
&gt; I&apos;d prefer leaving it out instead.

OK

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:44
&gt;&gt; +        &quot;&quot;&quot;
&gt; 
&gt; Instead of adding a comment like that, rename output_dir to layout_test_results_dir or something.

OK to remove the comment, output_dir is clear as name anyway.

&gt;&gt; Tools/Scripts/webkitpy/port/base.py:911
&gt;&gt; +        Ports can stub this out if they don&apos;t need a web server to be running.&quot;&quot;&quot;
&gt; 
&gt; We don&apos;t normally add comments like this. Please remove it.

OK

&gt;&gt; Tools/Scripts/webkitpy/port/base.py:950
&gt;&gt; +        &quot;&quot;&quot;Shut down the web platform test server if it is running. Do nothing if it isn&apos;t.&quot;&quot;&quot;
&gt; 
&gt; Ditto.

OK

&gt;&gt; Tools/Scripts/webkitpy/port/driver.py:161
&gt;&gt; +
&gt; 
&gt; Why do we need to manually append &apos;/&apos;?

To be consistent with other dir variables, like HTTP_DIR and HTTP_LOCAL_DIR
I will refactor the code to make the addition in port itself using TEST_PATH_SEPARATOR.

&gt;&gt; Tools/Scripts/webkitpy/port/driver.py:236
&gt;&gt; +    WPT_BASE_URL = &quot;http://localhost:8800/&quot;
&gt; 
&gt; Can we read this value out of config.json instead?

Will do that.

&gt;&gt; Tools/Scripts/webkitpy/port/driver.py:402
&gt;&gt; +        elif self.is_http_test(driver_input.test_name) or  self.is_web_platform_test(driver_input.test_name):
&gt; 
&gt; There are two spaces after or.

OK

&gt;&gt; Tools/Scripts/webkitpy/port/driver_unittest.py:89
&gt;&gt; +
&gt; 
&gt; Superflous change here.

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057080</commentid>
    <comment_count>18</comment_count>
      <attachid>243556</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-12-19 10:59:03 -0800</bug_when>
    <thetext>Created attachment 243556
Updated according review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057580</commentid>
    <comment_count>19</comment_count>
      <attachid>243671</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-12-23 06:47:27 -0800</bug_when>
    <thetext>Created attachment 243671
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057581</commentid>
    <comment_count>20</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-12-23 06:49:34 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Created attachment 243671 [details]
&gt; Patch

Updated style and fixed unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057785</commentid>
    <comment_count>21</comment_count>
      <attachid>243671</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-12-24 16:31:28 -0800</bug_when>
    <thetext>Comment on attachment 243671
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:42
&gt; +    config_wk_filename = port_obj.path_from_webkit_base(&quot;LayoutTests&quot;, &quot;imported&quot;, &quot;w3c&quot;, &quot;resources&quot;, &quot;config.json&quot;)

I would call this config_wk_filepath instead since this is a file path, not just a file name.

&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:79
&gt; +    def _set_start_cmd(self, port_obj):
&gt; +        file_path = self._filesystem.abspath(self._filesystem.split(__file__)[0])
&gt; +        self._start_cmd = [&quot;python&quot;, self._filesystem.join(file_path, &quot;web_platform_test_launcher.py&quot;)]
&gt; +        self._cwd = port_obj.path_from_webkit_base(&quot;LayoutTests&quot;, self._doc_root)

I don&apos;t think there&apos;s any point in separating this method.
Also, please give _cmd a more descriptive name such as doc_root_path.

&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:86
&gt; +        for f in self._resources_files_to_copy:
&gt; +            webkit_filename = self._filesystem.join(self._layout_root, &quot;resources&quot;, f)
&gt; +            if self._filesystem.isfile(webkit_filename):
&gt; +                self._filesystem.copyfile(webkit_filename, self._filesystem.join(self._doc_root, &quot;resources&quot;, f))

Why do we need to do this?  How can WPT tests depend on WebKit files?
What happens to stale files if run-webkit-tests is killed in the middle of running tests?

&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:90
&gt; +        config_wk_filename = self._filesystem.join(self._layout_root, &quot;imported&quot;, &quot;w3c&quot;, &quot;resources&quot;, &quot;config.json&quot;)
&gt; +        if self._filesystem.isfile(config_wk_filename):
&gt; +            self._filesystem.copyfile(config_wk_filename, self._filesystem.join(self._doc_root, &quot;config.json&quot;))

Can we either refer to ../resources/config.json in web_platform_test_launcher.py
or copy it into the directory when we import the tests?

&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:103
&gt; +    def _prepare_config(self):

This function does a lot more than preparing the config.json. We should rename to reflect what it does.

&gt; Tools/Scripts/webkitpy/port/driver.py:163
&gt; +        self.web_platform_test_dir = self._port.web_platform_test_server_doc_root()

We should be consistent in naming.  web_platform_test_dir or web_platform_test_server_doc_root.

&gt; Tools/Scripts/webkitpy/port/driver.py:164
&gt; +        self.web_platform_test_base_url = self._port.web_platform_test_server_base_url()

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057925</commentid>
    <comment_count>22</comment_count>
      <attachid>243671</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-12-26 14:09:38 -0800</bug_when>
    <thetext>Comment on attachment 243671
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:86
&gt;&gt; +                self._filesystem.copyfile(webkit_filename, self._filesystem.join(self._doc_root, &quot;resources&quot;, f))
&gt; 
&gt; Why do we need to do this?  How can WPT tests depend on WebKit files?
&gt; What happens to stale files if run-webkit-tests is killed in the middle of running tests?

WPT tests rely on testharness.js, testharnessreport.js and testharness.css.
testharnessreport.js is specific to WebKit (use of window.testRunner API).
Since tests are served through WPT server, we need to have these files within the server root dir.
More information is available at bug 134763.

If rwt gets killed, the files will remain until rwt is launched again and files will get overwritten/deleted.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:90
&gt;&gt; +            self._filesystem.copyfile(config_wk_filename, self._filesystem.join(self._doc_root, &quot;config.json&quot;))
&gt; 
&gt; Can we either refer to ../resources/config.json in web_platform_test_launcher.py
&gt; or copy it into the directory when we import the tests?

We can do that at import time but this would duplicate files in the repo.
Copying the file is also consistent with testharness files handling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058126</commentid>
    <comment_count>23</comment_count>
      <attachid>243671</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-12-29 12:06:45 -0800</bug_when>
    <thetext>Comment on attachment 243671
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:42
&gt;&gt; +    config_wk_filename = port_obj.path_from_webkit_base(&quot;LayoutTests&quot;, &quot;imported&quot;, &quot;w3c&quot;, &quot;resources&quot;, &quot;config.json&quot;)
&gt; 
&gt; I would call this config_wk_filepath instead since this is a file path, not just a file name.

OK

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:103
&gt;&gt; +    def _prepare_config(self):
&gt; 
&gt; This function does a lot more than preparing the config.json. We should rename to reflect what it does.

_prepare_config is a bit misleading as it conflicts with config.json
Since it is an overriden method and called from the HttpServerBase source code, we cannot easily rename it.

&gt;&gt; Tools/Scripts/webkitpy/port/driver.py:163
&gt;&gt; +        self.web_platform_test_dir = self._port.web_platform_test_server_doc_root()
&gt; 
&gt; We should be consistent in naming.  web_platform_test_dir or web_platform_test_server_doc_root.

OK

&gt;&gt; Tools/Scripts/webkitpy/port/driver.py:164
&gt;&gt; +        self.web_platform_test_base_url = self._port.web_platform_test_server_base_url()
&gt; 
&gt; Ditto.

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058127</commentid>
    <comment_count>24</comment_count>
      <attachid>243806</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-12-29 12:08:52 -0800</bug_when>
    <thetext>Created attachment 243806
Improving variable names</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059370</commentid>
    <comment_count>25</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-01-07 04:36:49 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; Created attachment 243806 [details]
&gt; Improving variable names

Ping review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060816</commentid>
    <comment_count>26</comment_count>
      <attachid>244510</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-01-13 06:36:57 -0800</bug_when>
    <thetext>Created attachment 244510
Updating SSL support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064019</commentid>
    <comment_count>27</comment_count>
      <attachid>244510</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-25 11:48:09 -0800</bug_when>
    <thetext>Comment on attachment 244510
Updating SSL support

Rejecting attachment 244510 from commit-queue.

youennf@gmail.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/contributors.json by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064205</commentid>
    <comment_count>28</comment_count>
      <attachid>244510</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-26 11:35:15 -0800</bug_when>
    <thetext>Comment on attachment 244510
Updating SSL support

Rejecting attachment 244510 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 244510, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in Tools/ChangeLog contains OOPS!.

Full output: http://webkit-queues.appspot.com/results/6605731331571712</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064210</commentid>
    <comment_count>29</comment_count>
      <attachid>245361</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-01-26 11:48:55 -0800</bug_when>
    <thetext>Created attachment 245361
fixing change log</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064225</commentid>
    <comment_count>30</comment_count>
      <attachid>245361</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-26 12:41:23 -0800</bug_when>
    <thetext>Comment on attachment 245361
fixing change log

Clearing flags on attachment: 245361

Committed r179134: &lt;http://trac.webkit.org/changeset/179134&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064226</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-26 12:41:31 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065847</commentid>
    <comment_count>32</comment_count>
      <attachid>245361</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-31 12:29:51 -0800</bug_when>
    <thetext>Comment on attachment 245361
fixing change log

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

&gt; LayoutTests/imported/w3c/resources/config.json:3
&gt; +          &quot;https&quot;:[8443],

Doesn&apos;t this conflict with Apache https port?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066083</commentid>
    <comment_count>33</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-02-02 06:04:32 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; Comment on attachment 245361 [details]
&gt; fixing change log
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=245361&amp;action=review
&gt; 
&gt; &gt; LayoutTests/imported/w3c/resources/config.json:3
&gt; &gt; +          &quot;https&quot;:[8443],
&gt; 
&gt; Doesn&apos;t this conflict with Apache https port?

Thanks, good catch.
Yes, the config should be changed.
A similar issue may arise with wpt websocket server.
I filed bug 141157 to capture this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221665</attachid>
            <date>2014-01-20 09:28:36 -0800</date>
            <delta_ts>2014-01-28 11:48:59 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-127094-20140120182831.patch</filename>
            <type>text/plain</type>
            <size>1150426</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxODYyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWNlY2M1YTRkZTViZjc0YTI5YzI4MTg5MDc4ZDUxODdm
Mjk3MzM3Zi4uYzQ5OWQyOTQ0Y2Q2NDg5YWZlMmI5NjhhYWQwZmI3NzhiYjM4MzgxMSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3
MTcgQEAKKzIwMTQtMDEtMjAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5mQGdtYWlsLmNvbT4KKwor
ICAgICAgICBJbnRlZ3JhdGUgV1AgcHl0aG9uIHNlcnZlciBpbnRvIFdlYktpdCB0ZXN0IGZyYW1l
d29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3
MDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBBZGRlZCB0aGUgcHl0aG9uIHNlcnZlciBmcm9tIHdlYiBwbGF0Zm9ybSB0ZXN0cyBpbiB3
ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlIChzZXJ2ZS5weSBtYWluIHNjcmlwdCBhbmQgc3Bl
Y2lmaWMgd3B0c2VydmUgYW5kIHB5d2Vic29ja2V0IG1vZHVsZXMpCisgICAgICAgIEFkZGVkIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd3B0L2xhdW5jaGVyLnB5IHRvIHNl
dHVwIGNvcnJlY3RseSB0aGUgc2VydmVycyBhbmQgbGF1bmNoIHRoZW0gdGhyb3Ugc2VydmUucHkg
bWFpbiBzY3JpcHQgCisgICAgICAgIEFkZGVkIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3NlcnZlcnMvd3B0X3NlcnZlci5weSB0byBtYW5hZ2Ugc3RhcnQgYW5kIHN0b3Agb2Ygd3B0IHNl
cnZlciBzZXBhcmF0ZSBwcm9jZXNzCisgICAgICAgIFVwZGF0ZWQgU2NyaXB0cy93ZWJraXRweS9w
b3J0L2RyaXZlci5weSB0byBnZW5lcmF0ZSB1cmxzIHBvaW50aW5nIHRvIHdwdCBzZXJ2ZXIgZm9y
IGFsbCB0ZXN0cyBpbiBpbXBvcnRlZC93M2MKKyAgICAgICAgVXBkYXRlZCBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5IGFuZCBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkgdG8gc3Rh
cnQgd3B0IHNlcnZlciBmb3IgaW1wb3J0ZWQvdzNjIHRlc3RzCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHk6
CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKExheW91dFRl
c3RSdW5uZXIucnVuX3Rlc3RzKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuc3RhcnRfc2Vy
dmVyc193aXRoX2xvY2spOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5zdG9wX3NlcnZlcnNf
d2l0aF9sb2NrKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250
cm9sbGVycy9tYW5hZ2VyLnB5OgorICAgICAgICAoTWFuYWdlci5fX2luaXRfXyk6CisgICAgICAg
IChNYW5hZ2VyLl9pc193cHRfdGVzdCk6CisgICAgICAgIChNYW5hZ2VyLl90ZXN0X3JlcXVpcmVz
X2xvY2spOgorICAgICAgICAoTWFuYWdlci5fcnVuX3Rlc3RzKToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dwdC9fX2luaXRfXy5weTogQWRkZWQuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93cHQvbGF1bmNo
ZXIucHk6IEFkZGVkLgorICAgICAgICAoV1BUTGF1bmNoZXIpOgorICAgICAgICAoV1BUTGF1bmNo
ZXIuX19pbml0X18pOgorICAgICAgICAoV1BUTGF1bmNoZXIuc3RhcnQpOgorICAgICAgICAoRXh0
ZXJuYWxSZXNvdXJjZUhhbmRsZXIpOgorICAgICAgICAoRXh0ZXJuYWxSZXNvdXJjZUhhbmRsZXIu
X19pbml0X18pOgorICAgICAgICAoRXh0ZXJuYWxSZXNvdXJjZUhhbmRsZXIuX19jYWxsX18pOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd3B0X3NlcnZl
ci5weTogQWRkZWQuCisgICAgICAgICh0byk6CisgICAgICAgIChXUFRIdHRwZCk6CisgICAgICAg
IChXUFRIdHRwZC5fX2luaXRfXyk6CisgICAgICAgIChXUFRIdHRwZC5fcHJlcGFyZV9jb25maWcp
OgorICAgICAgICAoV1BUSHR0cGQuX3NwYXduX3Byb2Nlc3MpOgorICAgICAgICAoV1BUSHR0cGQu
X3N0b3BfcnVubmluZ19zZXJ2ZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9i
YXNlLnB5OgorICAgICAgICAoUG9ydC5fX2luaXRfXyk6CisgICAgICAgIChQb3J0LnRvLnN0YXJ0
X3dwdF9zZXJ2ZXIpOgorICAgICAgICAoUG9ydC50by5zdG9wX3dwdF9zZXJ2ZXIpOgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChEcml2ZXIpOgor
ICAgICAgICAoRHJpdmVyLmlzX3dwdF90ZXN0KToKKyAgICAgICAgKERyaXZlci50ZXN0X3RvX3Vy
aSk6CisgICAgICAgIChEcml2ZXIudXJpX3RvX3Rlc3QpOgorICAgICAgICAoRHJpdmVyLl9jb21t
YW5kX2Zyb21fZHJpdmVyX2lucHV0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvd3B0c2VydmUvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS9zZXJ2ZS5weTogQWRkZWQuCisgICAgICAgIChkZWZh
dWx0X2xvZ2dlcik6CisgICAgICAgIChvcGVuX3NvY2tldCk6CisgICAgICAgIChnZXRfcG9ydCk6
CisgICAgICAgIChTZXJ2ZXJQcm9jKToKKyAgICAgICAgKFNlcnZlclByb2MuX19pbml0X18pOgor
ICAgICAgICAoU2VydmVyUHJvYy5zdGFydCk6CisgICAgICAgIChTZXJ2ZXJQcm9jLmNyZWF0ZV9k
YWVtb24pOgorICAgICAgICAoU2VydmVyUHJvYy53YWl0KToKKyAgICAgICAgKFNlcnZlclByb2Mu
a2lsbCk6CisgICAgICAgIChjaGVja19zdWJkb21haW5zKToKKyAgICAgICAgKGdldF9zdWJkb21h
aW5zKToKKyAgICAgICAgKHN0YXJ0X3NlcnZlcnMpOgorICAgICAgICAoc3RhcnRfaHR0cF9zZXJ2
ZXIpOgorICAgICAgICAoc3RhcnRfaHR0cHNfc2VydmVyKToKKyAgICAgICAgKFdlYlNvY2tldERh
ZW1vbik6CisgICAgICAgIChXZWJTb2NrZXREYWVtb24uX19pbml0X18pOgorICAgICAgICAoV2Vi
U29ja2V0RGFlbW9uLnN0YXJ0KToKKyAgICAgICAgKFdlYlNvY2tldERhZW1vbi5zdG9wKToKKyAg
ICAgICAgKHN0YXJ0X3dzX3NlcnZlcik6CisgICAgICAgIChzdGFydF93c3Nfc2VydmVyKToKKyAg
ICAgICAgKGdldF9wb3J0cyk6CisgICAgICAgIChub3JtYWxpc2VfY29uZmlnKToKKyAgICAgICAg
KHN0YXJ0KToKKyAgICAgICAgKGl0ZXJfcHJvY3MpOgorICAgICAgICAobWVyZ2VfanNvbik6Cisg
ICAgICAgIChsb2FkX2NvbmZpZyk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL0NPUFlJ
Tkc6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2
ZS90b29scy9weXdlYnNvY2tldC9zcmMvTUFOSUZFU1QuaW46IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMv
UkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0
c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvYWJvcnRfaGFuZHNoYWtlX3dzaC5w
eTogQWRkZWQuCisgICAgICAgICh3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSk6CisgICAg
ICAgICh3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9hYm9y
dF93c2gucHk6IEFkZGVkLgorICAgICAgICAod2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2Up
OgorICAgICAgICAod2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1w
bGUvYXJyYXlidWZmZXJfYmVuY2htYXJrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBs
ZS9iZW5jaF93c2gucHk6IEFkZGVkLgorICAgICAgICAod2ViX3NvY2tldF9kb19leHRyYV9oYW5k
c2hha2UpOgorICAgICAgICAod2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3Jj
L2V4YW1wbGUvYmVuY2htYXJrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9iZW5j
aG1hcmtfaGVscGVyX3dzaC5weTogQWRkZWQuCisgICAgICAgICh3ZWJfc29ja2V0X2RvX2V4dHJh
X2hhbmRzaGFrZSk6CisgICAgICAgICh3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEpOgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tl
dC9zcmMvZXhhbXBsZS9jbG9zZV93c2gucHk6IEFkZGVkLgorICAgICAgICAod2ViX3NvY2tldF9k
b19leHRyYV9oYW5kc2hha2UpOgorICAgICAgICAod2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKToK
KyAgICAgICAgKHdlYl9zb2NrZXRfcGFzc2l2ZV9jbG9zaW5nX2hhbmRzaGFrZSk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0
L3NyYy9leGFtcGxlL2NvbnNvbGUuaHRtbDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2Vj
aG9fY2xpZW50LnB5OiBBZGRlZC4KKyAgICAgICAgKENsaWVudEhhbmRzaGFrZUVycm9yKToKKyAg
ICAgICAgKF9idWlsZF9tZXRob2RfbGluZSk6CisgICAgICAgIChfb3JpZ2luX2hlYWRlcik6Cisg
ICAgICAgIChfZm9ybWF0X2hvc3RfaGVhZGVyKToKKyAgICAgICAgKF9yZWNlaXZlX2J5dGVzKToK
KyAgICAgICAgKF9nZXRfbWFuZGF0b3J5X2hlYWRlcik6CisgICAgICAgIChfdmFsaWRhdGVfbWFu
ZGF0b3J5X2hlYWRlcik6CisgICAgICAgIChfVExTU29ja2V0KToKKyAgICAgICAgKF9UTFNTb2Nr
ZXQuX19pbml0X18pOgorICAgICAgICAoX1RMU1NvY2tldC5zZW5kKToKKyAgICAgICAgKF9UTFNT
b2NrZXQuc2VuZGFsbCk6CisgICAgICAgIChfVExTU29ja2V0LnJlY3YpOgorICAgICAgICAoX1RM
U1NvY2tldC5jbG9zZSk6CisgICAgICAgIChfVExTU29ja2V0LmdldHBlZXJuYW1lKToKKyAgICAg
ICAgKENsaWVudEhhbmRzaGFrZUJhc2UpOgorICAgICAgICAoQ2xpZW50SGFuZHNoYWtlQmFzZS5m
b3IpOgorICAgICAgICAoQ2xpZW50SGFuZHNoYWtlQmFzZS5fX2luaXRfXyk6CisgICAgICAgIChD
bGllbnRIYW5kc2hha2VCYXNlLl9yZWFkX2ZpZWxkcyk6CisgICAgICAgIChDbGllbnRIYW5kc2hh
a2VCYXNlLl9yZWFkX25hbWUpOgorICAgICAgICAoQ2xpZW50SGFuZHNoYWtlQmFzZS5fc2tpcF9z
cGFjZXMpOgorICAgICAgICAoQ2xpZW50SGFuZHNoYWtlQmFzZS5fcmVhZF92YWx1ZSk6CisgICAg
ICAgIChfZ2V0X3Blcm1lc3NhZ2VfZGVmbGF0ZV9mcmFtZXIpOgorICAgICAgICAoQ2xpZW50SGFu
ZHNoYWtlUHJvY2Vzc29yKToKKyAgICAgICAgKENsaWVudEhhbmRzaGFrZVByb2Nlc3Nvci5fX2lu
aXRfXyk6CisgICAgICAgIChDbGllbnRIYW5kc2hha2VQcm9jZXNzb3IuaGFuZHNoYWtlKToKKyAg
ICAgICAgKENsaWVudEhhbmRzaGFrZVByb2Nlc3Nvckh5YmkwMCk6CisgICAgICAgIChDbGllbnRI
YW5kc2hha2VQcm9jZXNzb3JIeWJpMDAuX19pbml0X18pOgorICAgICAgICAoQ2xpZW50SGFuZHNo
YWtlUHJvY2Vzc29ySHliaTAwLmhhbmRzaGFrZSk6CisgICAgICAgIChDbGllbnRIYW5kc2hha2VQ
cm9jZXNzb3JIeWJpMDAuX2dlbmVyYXRlX3NlY193ZWJzb2NrZXRfa2V5KToKKyAgICAgICAgKENs
aWVudEhhbmRzaGFrZVByb2Nlc3Nvckh5YmkwMC5fZ2VuZXJhdGVfa2V5Myk6CisgICAgICAgIChD
bGllbnRDb25uZWN0aW9uKToKKyAgICAgICAgKENsaWVudENvbm5lY3Rpb24uX19pbml0X18pOgor
ICAgICAgICAoQ2xpZW50Q29ubmVjdGlvbi53cml0ZSk6CisgICAgICAgIChDbGllbnRDb25uZWN0
aW9uLnJlYWQpOgorICAgICAgICAoQ2xpZW50Q29ubmVjdGlvbi5nZXRfcmVtb3RlX2FkZHIpOgor
ICAgICAgICAoQ2xpZW50UmVxdWVzdCk6CisgICAgICAgIChDbGllbnRSZXF1ZXN0Lmp1c3QpOgor
ICAgICAgICAoQ2xpZW50UmVxdWVzdC5fX2luaXRfXyk6CisgICAgICAgIChfaW1wb3J0X3NzbCk6
CisgICAgICAgIChfaW1wb3J0X3B5b3BlbnNzbCk6CisgICAgICAgIChFY2hvQ2xpZW50KToKKyAg
ICAgICAgKEVjaG9DbGllbnQuX19pbml0X18pOgorICAgICAgICAoRWNob0NsaWVudC5ydW4pOgor
ICAgICAgICAoRWNob0NsaWVudC5fZG9fY2xvc2luZ19oYW5kc2hha2UpOgorICAgICAgICAobWFp
bik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xz
L3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2VjaG9fbm9leHRfd3NoLnB5OiBBZGRlZC4KKyAgICAg
ICAgKHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKToKKyAgICAgICAgKHdlYl9zb2NrZXRf
dHJhbnNmZXJfZGF0YSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2VjaG9fd3NoLnB5OiBBZGRlZC4K
KyAgICAgICAgKHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKToKKyAgICAgICAgKHdlYl9z
b2NrZXRfdHJhbnNmZXJfZGF0YSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2V2ZW50c291cmNlLmNn
aTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZl
L3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2V2ZW50c291cmNlLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdl
YnNvY2tldC9zcmMvZXhhbXBsZS9oYW5kbGVyX21hcC50eHQ6IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMv
ZXhhbXBsZS9oc3RzX3dzaC5weTogQWRkZWQuCisgICAgICAgICh3ZWJfc29ja2V0X2RvX2V4dHJh
X2hhbmRzaGFrZSk6CisgICAgICAgICh3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEpOgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tl
dC9zcmMvZXhhbXBsZS9pbnRlcm5hbF9lcnJvcl93c2gucHk6IEFkZGVkLgorICAgICAgICAod2Vi
X3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UpOgorICAgICAgICAod2ViX3NvY2tldF90cmFuc2Zl
cl9kYXRhKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUv
dG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvb3JpZ2luX2NoZWNrX3dzaC5weTogQWRkZWQu
CisgICAgICAgICh3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSk6CisgICAgICAgICh3ZWJf
c29ja2V0X3RyYW5zZmVyX2RhdGEpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9weXdlYnNvY2tldC5j
b25mOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2Vy
dmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvdXRpbC5qczogQWRkZWQuCisgICAgICAg
IChxdWV1ZUxvZyk6CisgICAgICAgIChhZGRUb0xvZyk6CisgICAgICAgIChnZXRUaW1lU3RhbXAp
OgorICAgICAgICAoZm9ybWF0UmVzdWx0SW5LaUIpOgorICAgICAgICAoY2FsY3VsYXRlU3BlZWRJ
bktCKToKKyAgICAgICAgKGNhbGN1bGF0ZUFuZExvZ1Jlc3VsdCk6CisgICAgICAgIChmaWxsQXJy
YXlCdWZmZXIpOgorICAgICAgICAodmVyaWZ5QXJyYXlCdWZmZXIpOgorICAgICAgICAoLnJlYWRl
ci5vbmVycm9yKToKKyAgICAgICAgKC5yZWFkZXIub25sb2FkZW5kKToKKyAgICAgICAgKHZlcmlm
eUJsb2IpOgorICAgICAgICAodmVyaWZ5QWNrbm93bGVkZ2VtZW50KToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4
YW1wbGUveGhyX2JlbmNobWFyay5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNv
Y2tldC9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvX3N0
cmVhbV9iYXNlLnB5OiBBZGRlZC4KKyAgICAgICAgKENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0
aW9uKToKKyAgICAgICAgKEludmFsaWRGcmFtZUV4Y2VwdGlvbik6CisgICAgICAgIChCYWRPcGVy
YXRpb25FeGNlcHRpb24pOgorICAgICAgICAoVW5zdXBwb3J0ZWRGcmFtZUV4Y2VwdGlvbik6Cisg
ICAgICAgIChJbnZhbGlkVVRGOEV4Y2VwdGlvbik6CisgICAgICAgIChTdHJlYW1CYXNlKToKKyAg
ICAgICAgKFN0cmVhbUJhc2UuX19pbml0X18pOgorICAgICAgICAoU3RyZWFtQmFzZS5fcmVhZCk6
CisgICAgICAgIChTdHJlYW1CYXNlLl9yZWFkLm9mKToKKyAgICAgICAgKFN0cmVhbUJhc2UuX3dy
aXRlKToKKyAgICAgICAgKFN0cmVhbUJhc2UucmVjZWl2ZV9ieXRlcyk6CisgICAgICAgIChTdHJl
YW1CYXNlLl9yZWFkX3VudGlsKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9fc3RyZWFt
X2hpeGllNzUucHk6IEFkZGVkLgorICAgICAgICAoZm9yKToKKyAgICAgICAgKFN0cmVhbUhpeGll
NzUpOgorICAgICAgICAoU3RyZWFtSGl4aWU3NS5mb3IpOgorICAgICAgICAoU3RyZWFtSGl4aWU3
NS5fX2luaXRfXyk6CisgICAgICAgIChTdHJlYW1IaXhpZTc1LnNlbmRfbWVzc2FnZSk6CisgICAg
ICAgIChTdHJlYW1IaXhpZTc1Ll9yZWFkX3BheWxvYWRfbGVuZ3RoX2hpeGllNzUpOgorICAgICAg
ICAoU3RyZWFtSGl4aWU3NS5yZWNlaXZlX21lc3NhZ2UpOgorICAgICAgICAoU3RyZWFtSGl4aWU3
NS5fc2VuZF9jbG9zaW5nX2hhbmRzaGFrZSk6CisgICAgICAgIChTdHJlYW1IaXhpZTc1LmNsb3Nl
X2Nvbm5lY3Rpb24pOgorICAgICAgICAoU3RyZWFtSGl4aWU3NS5zZW5kX3BpbmcpOgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tl
dC9zcmMvbW9kX3B5d2Vic29ja2V0L19zdHJlYW1faHliaS5weTogQWRkZWQuCisgICAgICAgIChG
cmFtZSk6CisgICAgICAgIChGcmFtZS5fX2luaXRfXyk6CisgICAgICAgIChjcmVhdGVfbGVuZ3Ro
X2hlYWRlcik6CisgICAgICAgIChjcmVhdGVfaGVhZGVyKToKKyAgICAgICAgKF9idWlsZF9mcmFt
ZSk6CisgICAgICAgIChfZmlsdGVyX2FuZF9mb3JtYXRfZnJhbWVfb2JqZWN0KToKKyAgICAgICAg
KGNyZWF0ZV9iaW5hcnlfZnJhbWUpOgorICAgICAgICAoY3JlYXRlX3RleHRfZnJhbWUpOgorICAg
ICAgICAocGFyc2VfZnJhbWUpOgorICAgICAgICAoRnJhZ21lbnRlZEZyYW1lQnVpbGRlcik6Cisg
ICAgICAgIChGcmFnbWVudGVkRnJhbWVCdWlsZGVyLnRvKToKKyAgICAgICAgKEZyYWdtZW50ZWRG
cmFtZUJ1aWxkZXIuX19pbml0X18pOgorICAgICAgICAoRnJhZ21lbnRlZEZyYW1lQnVpbGRlci5i
dWlsZCk6CisgICAgICAgIChfY3JlYXRlX2NvbnRyb2xfZnJhbWUpOgorICAgICAgICAoY3JlYXRl
X3BpbmdfZnJhbWUpOgorICAgICAgICAoY3JlYXRlX3BvbmdfZnJhbWUpOgorICAgICAgICAoY3Jl
YXRlX2Nsb3NlX2ZyYW1lKToKKyAgICAgICAgKGNyZWF0ZV9jbG9zaW5nX2hhbmRzaGFrZV9ib2R5
KToKKyAgICAgICAgKFN0cmVhbU9wdGlvbnMpOgorICAgICAgICAoU3RyZWFtT3B0aW9ucy5fX2lu
aXRfXyk6CisgICAgICAgIChTdHJlYW0pOgorICAgICAgICAoU3RyZWFtLmZvcik6CisgICAgICAg
IChTdHJlYW0uX19pbml0X18pOgorICAgICAgICAoU3RyZWFtLl9yZWNlaXZlX2ZyYW1lKToKKyAg
ICAgICAgKFN0cmVhbS5fcmVjZWl2ZV9mcmFtZS5fcmVjZWl2ZV9ieXRlcyk6CisgICAgICAgIChT
dHJlYW0uX3JlY2VpdmVfZnJhbWVfYXNfZnJhbWVfb2JqZWN0KToKKyAgICAgICAgKFN0cmVhbS5y
ZWNlaXZlX2ZpbHRlcmVkX2ZyYW1lKToKKyAgICAgICAgKFN0cmVhbS5zZW5kX21lc3NhZ2UpOgor
ICAgICAgICAoU3RyZWFtLl9nZXRfbWVzc2FnZV9mcm9tX2ZyYW1lKToKKyAgICAgICAgKFN0cmVh
bS5fcHJvY2Vzc19jbG9zZV9tZXNzYWdlKToKKyAgICAgICAgKFN0cmVhbS5fcHJvY2Vzc19waW5n
X21lc3NhZ2UpOgorICAgICAgICAoU3RyZWFtLl9wcm9jZXNzX3BvbmdfbWVzc2FnZSk6CisgICAg
ICAgIChTdHJlYW0ucmVjZWl2ZV9tZXNzYWdlKToKKyAgICAgICAgKFN0cmVhbS5fc2VuZF9jbG9z
aW5nX2hhbmRzaGFrZSk6CisgICAgICAgIChTdHJlYW0uY2xvc2VfY29ubmVjdGlvbik6CisgICAg
ICAgIChTdHJlYW0uc2VuZF9waW5nKToKKyAgICAgICAgKFN0cmVhbS5fc2VuZF9wb25nKToKKyAg
ICAgICAgKFN0cmVhbS5nZXRfbGFzdF9yZWNlaXZlZF9vcGNvZGUpOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9k
X3B5d2Vic29ja2V0L2NvbW1vbi5weTogQWRkZWQuCisgICAgICAgIChpc19jb250cm9sX29wY29k
ZSk6CisgICAgICAgIChFeHRlbnNpb25QYXJhbWV0ZXIpOgorICAgICAgICAoRXh0ZW5zaW9uUGFy
YW1ldGVyLl9faW5pdF9fKToKKyAgICAgICAgKEV4dGVuc2lvblBhcmFtZXRlci5uYW1lKToKKyAg
ICAgICAgKEV4dGVuc2lvblBhcmFtZXRlci5hZGRfcGFyYW1ldGVyKToKKyAgICAgICAgKEV4dGVu
c2lvblBhcmFtZXRlci5nZXRfcGFyYW1ldGVycyk6CisgICAgICAgIChFeHRlbnNpb25QYXJhbWV0
ZXIuZ2V0X3BhcmFtZXRlcl9uYW1lcyk6CisgICAgICAgIChFeHRlbnNpb25QYXJhbWV0ZXIuaGFz
X3BhcmFtZXRlcik6CisgICAgICAgIChFeHRlbnNpb25QYXJhbWV0ZXIuZ2V0X3BhcmFtZXRlcl92
YWx1ZSk6CisgICAgICAgIChFeHRlbnNpb25QYXJzaW5nRXhjZXB0aW9uKToKKyAgICAgICAgKEV4
dGVuc2lvblBhcnNpbmdFeGNlcHRpb24uX19pbml0X18pOgorICAgICAgICAoX3BhcnNlX2V4dGVu
c2lvbl9wYXJhbSk6CisgICAgICAgIChfcGFyc2VfZXh0ZW5zaW9uKToKKyAgICAgICAgKHBhcnNl
X2V4dGVuc2lvbnMpOgorICAgICAgICAoZm9ybWF0X2V4dGVuc2lvbik6CisgICAgICAgIChmb3Jt
YXRfZXh0ZW5zaW9ucyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvZGlzcGF0Y2gucHk6
IEFkZGVkLgorICAgICAgICAoRGlzcGF0Y2hFeGNlcHRpb24pOgorICAgICAgICAoRGlzcGF0Y2hF
eGNlcHRpb24uX19pbml0X18pOgorICAgICAgICAoX2RlZmF1bHRfcGFzc2l2ZV9jbG9zaW5nX2hh
bmRzaGFrZV9oYW5kbGVyKToKKyAgICAgICAgKF9ub3JtYWxpemVfcGF0aCk6CisgICAgICAgIChf
Y3JlYXRlX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKToKKyAgICAgICAgKF9jcmVhdGVfcGF0
aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIuY29udmVydGVyKToKKyAgICAgICAgKF9lbnVtZXJhdGVf
aGFuZGxlcl9maWxlX3BhdGhzKToKKyAgICAgICAgKF9IYW5kbGVyU3VpdGUpOgorICAgICAgICAo
X0hhbmRsZXJTdWl0ZS5fX2luaXRfXyk6CisgICAgICAgIChfc291cmNlX2hhbmRsZXJfZmlsZSk6
CisgICAgICAgIChfZXh0cmFjdF9oYW5kbGVyKToKKyAgICAgICAgKERpc3BhdGNoZXIpOgorICAg
ICAgICAoRGlzcGF0Y2hlci5tYWludGFpbnMpOgorICAgICAgICAoRGlzcGF0Y2hlci5fX2luaXRf
Xyk6CisgICAgICAgIChEaXNwYXRjaGVyLmFkZF9yZXNvdXJjZV9wYXRoX2FsaWFzKToKKyAgICAg
ICAgKERpc3BhdGNoZXIuc291cmNlX3dhcm5pbmdzKToKKyAgICAgICAgKERpc3BhdGNoZXIuZG9f
ZXh0cmFfaGFuZHNoYWtlKToKKyAgICAgICAgKERpc3BhdGNoZXIudHJhbnNmZXJfZGF0YSk6Cisg
ICAgICAgIChEaXNwYXRjaGVyLnBhc3NpdmVfY2xvc2luZ19oYW5kc2hha2UpOgorICAgICAgICAo
RGlzcGF0Y2hlci5nZXRfaGFuZGxlcl9zdWl0ZSk6CisgICAgICAgIChEaXNwYXRjaGVyLl9zb3Vy
Y2VfaGFuZGxlcl9maWxlc19pbl9kaXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2V4
dGVuc2lvbnMucHk6IEFkZGVkLgorICAgICAgICAoRXh0ZW5zaW9uUHJvY2Vzc29ySW50ZXJmYWNl
KToKKyAgICAgICAgKEV4dGVuc2lvblByb2Nlc3NvckludGVyZmFjZS5fX2luaXRfXyk6CisgICAg
ICAgIChFeHRlbnNpb25Qcm9jZXNzb3JJbnRlcmZhY2UucmVxdWVzdCk6CisgICAgICAgIChFeHRl
bnNpb25Qcm9jZXNzb3JJbnRlcmZhY2UubmFtZSk6CisgICAgICAgIChFeHRlbnNpb25Qcm9jZXNz
b3JJbnRlcmZhY2UuY2hlY2tfY29uc2lzdGVuY3lfd2l0aF9vdGhlcl9wcm9jZXNzb3JzKToKKyAg
ICAgICAgKEV4dGVuc2lvblByb2Nlc3NvckludGVyZmFjZS5zZXRfYWN0aXZlKToKKyAgICAgICAg
KEV4dGVuc2lvblByb2Nlc3NvckludGVyZmFjZS5pc19hY3RpdmUpOgorICAgICAgICAoRXh0ZW5z
aW9uUHJvY2Vzc29ySW50ZXJmYWNlLl9nZXRfZXh0ZW5zaW9uX3Jlc3BvbnNlX2ludGVybmFsKToK
KyAgICAgICAgKEV4dGVuc2lvblByb2Nlc3NvckludGVyZmFjZS5nZXRfZXh0ZW5zaW9uX3Jlc3Bv
bnNlKToKKyAgICAgICAgKEV4dGVuc2lvblByb2Nlc3NvckludGVyZmFjZS5fc2V0dXBfc3RyZWFt
X29wdGlvbnNfaW50ZXJuYWwpOgorICAgICAgICAoRXh0ZW5zaW9uUHJvY2Vzc29ySW50ZXJmYWNl
LnNldHVwX3N0cmVhbV9vcHRpb25zKToKKyAgICAgICAgKF9sb2dfb3V0Z29pbmdfY29tcHJlc3Np
b25fcmF0aW8pOgorICAgICAgICAoX2xvZ19pbmNvbWluZ19jb21wcmVzc2lvbl9yYXRpbyk6Cisg
ICAgICAgIChfcGFyc2Vfd2luZG93X2JpdHMpOgorICAgICAgICAoX0F2ZXJhZ2VSYXRpb0NhbGN1
bGF0b3IpOgorICAgICAgICAoX0F2ZXJhZ2VSYXRpb0NhbGN1bGF0b3IuX19pbml0X18pOgorICAg
ICAgICAoX0F2ZXJhZ2VSYXRpb0NhbGN1bGF0b3IuYWRkX29yaWdpbmFsX2J5dGVzKToKKyAgICAg
ICAgKF9BdmVyYWdlUmF0aW9DYWxjdWxhdG9yLmFkZF9yZXN1bHRfYnl0ZXMpOgorICAgICAgICAo
X0F2ZXJhZ2VSYXRpb0NhbGN1bGF0b3IuZ2V0X2F2ZXJhZ2VfcmF0aW8pOgorICAgICAgICAoRGVm
bGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yKToKKyAgICAgICAgKERlZmxhdGVGcmFtZUV4dGVu
c2lvblByb2Nlc3Nvci5fX2luaXRfXyk6CisgICAgICAgIChEZWZsYXRlRnJhbWVFeHRlbnNpb25Q
cm9jZXNzb3IubmFtZSk6CisgICAgICAgIChEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3Iu
X2dldF9leHRlbnNpb25fcmVzcG9uc2VfaW50ZXJuYWwpOgorICAgICAgICAoRGVmbGF0ZUZyYW1l
RXh0ZW5zaW9uUHJvY2Vzc29yLl9zZXR1cF9zdHJlYW1fb3B0aW9uc19pbnRlcm5hbCk6CisgICAg
ICAgIChEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IuX3NldHVwX3N0cmVhbV9vcHRpb25z
X2ludGVybmFsLl9PdXRnb2luZ0ZpbHRlcik6CisgICAgICAgIChEZWZsYXRlRnJhbWVFeHRlbnNp
b25Qcm9jZXNzb3IuX3NldHVwX3N0cmVhbV9vcHRpb25zX2ludGVybmFsLl9PdXRnb2luZ0ZpbHRl
ci5fX2luaXRfXyk6CisgICAgICAgIChEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IuX3Nl
dHVwX3N0cmVhbV9vcHRpb25zX2ludGVybmFsLl9PdXRnb2luZ0ZpbHRlci5maWx0ZXIpOgorICAg
ICAgICAoRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yLl9zZXR1cF9zdHJlYW1fb3B0aW9u
c19pbnRlcm5hbC5fSW5jb21pbmdGaWx0ZXIpOgorICAgICAgICAoRGVmbGF0ZUZyYW1lRXh0ZW5z
aW9uUHJvY2Vzc29yLl9zZXR1cF9zdHJlYW1fb3B0aW9uc19pbnRlcm5hbC5fSW5jb21pbmdGaWx0
ZXIuX19pbml0X18pOgorICAgICAgICAoRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yLl9z
ZXR1cF9zdHJlYW1fb3B0aW9uc19pbnRlcm5hbC5fSW5jb21pbmdGaWx0ZXIuZmlsdGVyKToKKyAg
ICAgICAgKERlZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nlc3Nvci5zZXRfcmVzcG9uc2Vfd2luZG93
X2JpdHMpOgorICAgICAgICAoRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yLnNldF9yZXNw
b25zZV9ub19jb250ZXh0X3Rha2VvdmVyKToKKyAgICAgICAgKERlZmxhdGVGcmFtZUV4dGVuc2lv
blByb2Nlc3Nvci5zZXRfYmZpbmFsKToKKyAgICAgICAgKERlZmxhdGVGcmFtZUV4dGVuc2lvblBy
b2Nlc3Nvci5lbmFibGVfb3V0Z29pbmdfY29tcHJlc3Npb24pOgorICAgICAgICAoRGVmbGF0ZUZy
YW1lRXh0ZW5zaW9uUHJvY2Vzc29yLmRpc2FibGVfb3V0Z29pbmdfY29tcHJlc3Npb24pOgorICAg
ICAgICAoRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yLl9vdXRnb2luZ19maWx0ZXIpOgor
ICAgICAgICAoRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yLl9pbmNvbWluZ19maWx0ZXIp
OgorICAgICAgICAoX3BhcnNlX2NvbXByZXNzaW9uX21ldGhvZCk6CisgICAgICAgIChfY3JlYXRl
X2FjY2VwdGVkX21ldGhvZF9kZXNjKToKKyAgICAgICAgKENvbXByZXNzaW9uRXh0ZW5zaW9uUHJv
Y2Vzc29yQmFzZSk6CisgICAgICAgIChDb21wcmVzc2lvbkV4dGVuc2lvblByb2Nlc3NvckJhc2Uu
Zm9yKToKKyAgICAgICAgKENvbXByZXNzaW9uRXh0ZW5zaW9uUHJvY2Vzc29yQmFzZS5fX2luaXRf
Xyk6CisgICAgICAgIChDb21wcmVzc2lvbkV4dGVuc2lvblByb2Nlc3NvckJhc2UubmFtZSk6Cisg
ICAgICAgIChDb21wcmVzc2lvbkV4dGVuc2lvblByb2Nlc3NvckJhc2UuX2xvb2t1cF9jb21wcmVz
c2lvbl9wcm9jZXNzb3IpOgorICAgICAgICAoQ29tcHJlc3Npb25FeHRlbnNpb25Qcm9jZXNzb3JC
YXNlLl9nZXRfY29tcHJlc3Npb25fcHJvY2Vzc29yX3Jlc3BvbnNlKToKKyAgICAgICAgKENvbXBy
ZXNzaW9uRXh0ZW5zaW9uUHJvY2Vzc29yQmFzZS5fZ2V0X2V4dGVuc2lvbl9yZXNwb25zZV9pbnRl
cm5hbCk6CisgICAgICAgIChDb21wcmVzc2lvbkV4dGVuc2lvblByb2Nlc3NvckJhc2UuX3NldHVw
X3N0cmVhbV9vcHRpb25zX2ludGVybmFsKToKKyAgICAgICAgKENvbXByZXNzaW9uRXh0ZW5zaW9u
UHJvY2Vzc29yQmFzZS5zZXRfY29tcHJlc3Npb25fcHJvY2Vzc29yX2hvb2spOgorICAgICAgICAo
Q29tcHJlc3Npb25FeHRlbnNpb25Qcm9jZXNzb3JCYXNlLmdldF9jb21wcmVzc2lvbl9wcm9jZXNz
b3IpOgorICAgICAgICAoUGVyRnJhbWVDb21wcmVzc0V4dGVuc2lvblByb2Nlc3Nvcik6CisgICAg
ICAgIChQZXJGcmFtZUNvbXByZXNzRXh0ZW5zaW9uUHJvY2Vzc29yLl9faW5pdF9fKToKKyAgICAg
ICAgKFBlckZyYW1lQ29tcHJlc3NFeHRlbnNpb25Qcm9jZXNzb3IubmFtZSk6CisgICAgICAgIChQ
ZXJGcmFtZUNvbXByZXNzRXh0ZW5zaW9uUHJvY2Vzc29yLl9sb29rdXBfY29tcHJlc3Npb25fcHJv
Y2Vzc29yKToKKyAgICAgICAgKFBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vzc29yKToK
KyAgICAgICAgKFBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vzc29yLl9faW5pdF9fKToK
KyAgICAgICAgKFBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vzc29yLm5hbWUpOgorICAg
ICAgICAoUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3IuX2dldF9leHRlbnNpb25f
cmVzcG9uc2VfaW50ZXJuYWwpOgorICAgICAgICAoUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Q
cm9jZXNzb3IuX3NldHVwX3N0cmVhbV9vcHRpb25zX2ludGVybmFsKToKKyAgICAgICAgKFBlck1l
c3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vzc29yLnNldF9jMnNfbWF4X3dpbmRvd19iaXRzKToK
KyAgICAgICAgKFBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vzc29yLnNldF9jMnNfbWF4
X3dpbmRvd19iaXRzLmFkZHMpOgorICAgICAgICAoUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Q
cm9jZXNzb3Iuc2V0X2Myc19ub19jb250ZXh0X3Rha2VvdmVyKToKKyAgICAgICAgKFBlck1lc3Nh
Z2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vzc29yLnNldF9jMnNfbm9fY29udGV4dF90YWtlb3Zlci5h
ZGRzKToKKyAgICAgICAgKFBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vzc29yLnNldF9i
ZmluYWwpOgorICAgICAgICAoUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3IuZW5h
YmxlX291dGdvaW5nX2NvbXByZXNzaW9uKToKKyAgICAgICAgKFBlck1lc3NhZ2VEZWZsYXRlRXh0
ZW5zaW9uUHJvY2Vzc29yLmRpc2FibGVfb3V0Z29pbmdfY29tcHJlc3Npb24pOgorICAgICAgICAo
X1Blck1lc3NhZ2VEZWZsYXRlRnJhbWVyKToKKyAgICAgICAgKF9QZXJNZXNzYWdlRGVmbGF0ZUZy
YW1lci5fX2luaXRfXyk6CisgICAgICAgIChfUGVyTWVzc2FnZURlZmxhdGVGcmFtZXIuc2V0X2Jm
aW5hbCk6CisgICAgICAgIChfUGVyTWVzc2FnZURlZmxhdGVGcmFtZXIuc2V0X2NvbXByZXNzX291
dGdvaW5nX2VuYWJsZWQpOgorICAgICAgICAoX1Blck1lc3NhZ2VEZWZsYXRlRnJhbWVyLl9wcm9j
ZXNzX2luY29taW5nX21lc3NhZ2UpOgorICAgICAgICAoX1Blck1lc3NhZ2VEZWZsYXRlRnJhbWVy
Ll9wcm9jZXNzX291dGdvaW5nX21lc3NhZ2UpOgorICAgICAgICAoX1Blck1lc3NhZ2VEZWZsYXRl
RnJhbWVyLl9wcm9jZXNzX2luY29taW5nX2ZyYW1lKToKKyAgICAgICAgKF9QZXJNZXNzYWdlRGVm
bGF0ZUZyYW1lci5fcHJvY2Vzc19vdXRnb2luZ19mcmFtZSk6CisgICAgICAgIChfUGVyTWVzc2Fn
ZURlZmxhdGVGcmFtZXIuc2V0dXBfc3RyZWFtX29wdGlvbnMpOgorICAgICAgICAoX1Blck1lc3Nh
Z2VEZWZsYXRlRnJhbWVyLnNldHVwX3N0cmVhbV9vcHRpb25zLl9PdXRnb2luZ01lc3NhZ2VGaWx0
ZXIpOgorICAgICAgICAoX1Blck1lc3NhZ2VEZWZsYXRlRnJhbWVyLnNldHVwX3N0cmVhbV9vcHRp
b25zLl9PdXRnb2luZ01lc3NhZ2VGaWx0ZXIuX19pbml0X18pOgorICAgICAgICAoX1Blck1lc3Nh
Z2VEZWZsYXRlRnJhbWVyLnNldHVwX3N0cmVhbV9vcHRpb25zLl9PdXRnb2luZ01lc3NhZ2VGaWx0
ZXIuZmlsdGVyKToKKyAgICAgICAgKF9QZXJNZXNzYWdlRGVmbGF0ZUZyYW1lci5zZXR1cF9zdHJl
YW1fb3B0aW9ucy5fSW5jb21pbmdNZXNzYWdlRmlsdGVyKToKKyAgICAgICAgKF9QZXJNZXNzYWdl
RGVmbGF0ZUZyYW1lci5zZXR1cF9zdHJlYW1fb3B0aW9ucy5fSW5jb21pbmdNZXNzYWdlRmlsdGVy
Ll9faW5pdF9fKToKKyAgICAgICAgKF9QZXJNZXNzYWdlRGVmbGF0ZUZyYW1lci5zZXR1cF9zdHJl
YW1fb3B0aW9ucy5fSW5jb21pbmdNZXNzYWdlRmlsdGVyLmRlY29tcHJlc3NfbmV4dF9tZXNzYWdl
KToKKyAgICAgICAgKF9QZXJNZXNzYWdlRGVmbGF0ZUZyYW1lci5zZXR1cF9zdHJlYW1fb3B0aW9u
cy5fSW5jb21pbmdNZXNzYWdlRmlsdGVyLmZpbHRlcik6CisgICAgICAgIChfUGVyTWVzc2FnZURl
ZmxhdGVGcmFtZXIuc2V0dXBfc3RyZWFtX29wdGlvbnMuX091dGdvaW5nRnJhbWVGaWx0ZXIpOgor
ICAgICAgICAoX1Blck1lc3NhZ2VEZWZsYXRlRnJhbWVyLnNldHVwX3N0cmVhbV9vcHRpb25zLl9P
dXRnb2luZ0ZyYW1lRmlsdGVyLl9faW5pdF9fKToKKyAgICAgICAgKF9QZXJNZXNzYWdlRGVmbGF0
ZUZyYW1lci5zZXR1cF9zdHJlYW1fb3B0aW9ucy5fT3V0Z29pbmdGcmFtZUZpbHRlci5zZXRfY29t
cHJlc3Npb25fYml0KToKKyAgICAgICAgKF9QZXJNZXNzYWdlRGVmbGF0ZUZyYW1lci5zZXR1cF9z
dHJlYW1fb3B0aW9ucy5fT3V0Z29pbmdGcmFtZUZpbHRlci5maWx0ZXIpOgorICAgICAgICAoX1Bl
ck1lc3NhZ2VEZWZsYXRlRnJhbWVyLnNldHVwX3N0cmVhbV9vcHRpb25zLl9JbmNvbWluZ0ZyYW1l
RmlsdGVyKToKKyAgICAgICAgKF9QZXJNZXNzYWdlRGVmbGF0ZUZyYW1lci5zZXR1cF9zdHJlYW1f
b3B0aW9ucy5fSW5jb21pbmdGcmFtZUZpbHRlci5fX2luaXRfXyk6CisgICAgICAgIChfUGVyTWVz
c2FnZURlZmxhdGVGcmFtZXIuc2V0dXBfc3RyZWFtX29wdGlvbnMuX0luY29taW5nRnJhbWVGaWx0
ZXIuZmlsdGVyKToKKyAgICAgICAgKFBlck1lc3NhZ2VDb21wcmVzc0V4dGVuc2lvblByb2Nlc3Nv
cik6CisgICAgICAgIChQZXJNZXNzYWdlQ29tcHJlc3NFeHRlbnNpb25Qcm9jZXNzb3IuX19pbml0
X18pOgorICAgICAgICAoUGVyTWVzc2FnZUNvbXByZXNzRXh0ZW5zaW9uUHJvY2Vzc29yLm5hbWUp
OgorICAgICAgICAoUGVyTWVzc2FnZUNvbXByZXNzRXh0ZW5zaW9uUHJvY2Vzc29yLl9sb29rdXBf
Y29tcHJlc3Npb25fcHJvY2Vzc29yKToKKyAgICAgICAgKE11eEV4dGVuc2lvblByb2Nlc3Nvcik6
CisgICAgICAgIChNdXhFeHRlbnNpb25Qcm9jZXNzb3IuX19pbml0X18pOgorICAgICAgICAoTXV4
RXh0ZW5zaW9uUHJvY2Vzc29yLm5hbWUpOgorICAgICAgICAoTXV4RXh0ZW5zaW9uUHJvY2Vzc29y
LmNoZWNrX2NvbnNpc3RlbmN5X3dpdGhfb3RoZXJfcHJvY2Vzc29ycyk6CisgICAgICAgIChNdXhF
eHRlbnNpb25Qcm9jZXNzb3IuX2dldF9leHRlbnNpb25fcmVzcG9uc2VfaW50ZXJuYWwpOgorICAg
ICAgICAoTXV4RXh0ZW5zaW9uUHJvY2Vzc29yLl9zZXR1cF9zdHJlYW1fb3B0aW9uc19pbnRlcm5h
bCk6CisgICAgICAgIChNdXhFeHRlbnNpb25Qcm9jZXNzb3Iuc2V0X3F1b3RhKToKKyAgICAgICAg
KE11eEV4dGVuc2lvblByb2Nlc3Nvci5xdW90YSk6CisgICAgICAgIChNdXhFeHRlbnNpb25Qcm9j
ZXNzb3Iuc2V0X2V4dGVuc2lvbnMpOgorICAgICAgICAoTXV4RXh0ZW5zaW9uUHJvY2Vzc29yLmV4
dGVuc2lvbnMpOgorICAgICAgICAoZ2V0X2V4dGVuc2lvbl9wcm9jZXNzb3IpOgorICAgICAgICAo
Z2V0X2V4dGVuc2lvbl9wcm9jZXNzb3IuaXMpOgorICAgICAgICAoaXNfY29tcHJlc3Npb25fZXh0
ZW5zaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUv
dG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9mYXN0X21hc2tpbmcuaTogQWRk
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xz
L3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19faW5pdF9fLnB5OiBB
ZGRlZC4KKyAgICAgICAgKHRyeSk6CisgICAgICAgIChkb19oYW5kc2hha2UpOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9z
cmMvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS9fYmFzZS5weTogQWRkZWQuCisgICAgICAgIChB
Ym9ydGVkQnlVc2VyRXhjZXB0aW9uKToKKyAgICAgICAgKEhhbmRzaGFrZUV4Y2VwdGlvbik6Cisg
ICAgICAgIChIYW5kc2hha2VFeGNlcHRpb24uX19pbml0X18pOgorICAgICAgICAoVmVyc2lvbkV4
Y2VwdGlvbik6CisgICAgICAgIChWZXJzaW9uRXhjZXB0aW9uLl9faW5pdF9fKToKKyAgICAgICAg
KGdldF9kZWZhdWx0X3BvcnQpOgorICAgICAgICAodmFsaWRhdGVfc3VicHJvdG9jb2wpOgorICAg
ICAgICAocGFyc2VfaG9zdF9oZWFkZXIpOgorICAgICAgICAoZm9ybWF0X2hlYWRlcik6CisgICAg
ICAgIChnZXRfbWFuZGF0b3J5X2hlYWRlcik6CisgICAgICAgICh2YWxpZGF0ZV9tYW5kYXRvcnlf
aGVhZGVyKToKKyAgICAgICAgKGNoZWNrX3JlcXVlc3RfbGluZSk6CisgICAgICAgIChwYXJzZV90
b2tlbl9saXN0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2Vy
dmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvaHliaS5w
eTogQWRkZWQuCisgICAgICAgIChjb21wdXRlX2FjY2VwdCk6CisgICAgICAgIChIYW5kc2hha2Vy
KToKKyAgICAgICAgKEhhbmRzaGFrZXIuX19pbml0X18pOgorICAgICAgICAoSGFuZHNoYWtlci5f
dmFsaWRhdGVfY29ubmVjdGlvbl9oZWFkZXIpOgorICAgICAgICAoSGFuZHNoYWtlci5kb19oYW5k
c2hha2UpOgorICAgICAgICAoSGFuZHNoYWtlci5fZ2V0X29yaWdpbik6CisgICAgICAgIChIYW5k
c2hha2VyLl9jaGVja192ZXJzaW9uKToKKyAgICAgICAgKEhhbmRzaGFrZXIuX3NldF9wcm90b2Nv
bCk6CisgICAgICAgIChIYW5kc2hha2VyLl9wYXJzZV9leHRlbnNpb25zKToKKyAgICAgICAgKEhh
bmRzaGFrZXIuX3ZhbGlkYXRlX2tleSk6CisgICAgICAgIChIYW5kc2hha2VyLl9nZXRfa2V5KToK
KyAgICAgICAgKEhhbmRzaGFrZXIuX2NyZWF0ZV9zdHJlYW0pOgorICAgICAgICAoSGFuZHNoYWtl
ci5fY3JlYXRlX2hhbmRzaGFrZV9yZXNwb25zZSk6CisgICAgICAgIChIYW5kc2hha2VyLl9zZW5k
X2hhbmRzaGFrZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNl
cnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL2h5Ymkw
MC5weTogQWRkZWQuCisgICAgICAgIChfdmFsaWRhdGVfc3VicHJvdG9jb2wpOgorICAgICAgICAo
X2NoZWNrX2hlYWRlcl9saW5lcyk6CisgICAgICAgIChfYnVpbGRfbG9jYXRpb24pOgorICAgICAg
ICAoSGFuZHNoYWtlcik6CisgICAgICAgIChIYW5kc2hha2VyLl9faW5pdF9fKToKKyAgICAgICAg
KEhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKToKKyAgICAgICAgKEhhbmRzaGFrZXIuX3NldF9yZXNv
dXJjZSk6CisgICAgICAgIChIYW5kc2hha2VyLl9zZXRfc3VicHJvdG9jb2wpOgorICAgICAgICAo
SGFuZHNoYWtlci5fc2V0X2xvY2F0aW9uKToKKyAgICAgICAgKEhhbmRzaGFrZXIuX3NldF9vcmln
aW4pOgorICAgICAgICAoSGFuZHNoYWtlci5fc2V0X3Byb3RvY29sX3ZlcnNpb24pOgorICAgICAg
ICAoSGFuZHNoYWtlci5fc2V0X2NoYWxsZW5nZV9yZXNwb25zZSk6CisgICAgICAgIChIYW5kc2hh
a2VyLl9nZXRfa2V5X3ZhbHVlKToKKyAgICAgICAgKEhhbmRzaGFrZXIuX2dldF9jaGFsbGVuZ2Up
OgorICAgICAgICAoSGFuZHNoYWtlci5fc2VuZF9oYW5kc2hha2UpOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9k
X3B5d2Vic29ja2V0L2hlYWRlcnBhcnNlcmhhbmRsZXIucHk6IEFkZGVkLgorICAgICAgICAoQXBh
Y2hlTG9nSGFuZGxlcik6CisgICAgICAgIChBcGFjaGVMb2dIYW5kbGVyLl9faW5pdF9fKToKKyAg
ICAgICAgKEFwYWNoZUxvZ0hhbmRsZXIuZW1pdCk6CisgICAgICAgIChfY29uZmlndXJlX2xvZ2dp
bmcpOgorICAgICAgICAoX3BhcnNlX29wdGlvbik6CisgICAgICAgIChfY3JlYXRlX2Rpc3BhdGNo
ZXIpOgorICAgICAgICAoaGVhZGVycGFyc2VyaGFuZGxlcik6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3
ZWJzb2NrZXQvaHR0cF9oZWFkZXJfdXRpbC5weTogQWRkZWQuCisgICAgICAgIChfaXNfY2hhcik6
CisgICAgICAgIChfaXNfY3RsKToKKyAgICAgICAgKFBhcnNpbmdTdGF0ZSk6CisgICAgICAgIChQ
YXJzaW5nU3RhdGUuX19pbml0X18pOgorICAgICAgICAocGVlayk6CisgICAgICAgIChjb25zdW1l
KToKKyAgICAgICAgKGNvbnN1bWVfc3RyaW5nKToKKyAgICAgICAgKGNvbnN1bWVfbHdzKToKKyAg
ICAgICAgKGNvbnN1bWVfbHdzZXMpOgorICAgICAgICAoY29uc3VtZV90b2tlbik6CisgICAgICAg
IChjb25zdW1lX3Rva2VuX29yX3F1b3RlZF9zdHJpbmcpOgorICAgICAgICAocXVvdGVfaWZfbmVj
ZXNzYXJ5KToKKyAgICAgICAgKHBhcnNlX3VyaSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2Nr
ZXQvbWVtb3JpemluZ2ZpbGUucHk6IEFkZGVkLgorICAgICAgICAoTWVtb3JpemluZ0ZpbGUpOgor
ICAgICAgICAoTWVtb3JpemluZ0ZpbGUuX19pbml0X18pOgorICAgICAgICAoTWVtb3JpemluZ0Zp
bGUuX19nZXRhdHRyaWJ1dGVfXyk6CisgICAgICAgIChNZW1vcml6aW5nRmlsZS5yZWFkbGluZSk6
CisgICAgICAgIChNZW1vcml6aW5nRmlsZS5nZXRfbWVtb3JpemVkX2xpbmVzKToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQv
c3JjL21vZF9weXdlYnNvY2tldC9tc2d1dGlsLnB5OiBBZGRlZC4KKyAgICAgICAgKGNsb3NlX2Nv
bm5lY3Rpb24pOgorICAgICAgICAoc2VuZF9tZXNzYWdlKToKKyAgICAgICAgKHJlY2VpdmVfbWVz
c2FnZSk6CisgICAgICAgIChzZW5kX3BpbmcpOgorICAgICAgICAoTWVzc2FnZVJlY2VpdmVyKToK
KyAgICAgICAgKE1lc3NhZ2VSZWNlaXZlci5yZWNlaXZlcyk6CisgICAgICAgIChNZXNzYWdlUmVj
ZWl2ZXIucHJvdmlkZXMpOgorICAgICAgICAoTWVzc2FnZVJlY2VpdmVyLnNob3VsZCk6CisgICAg
ICAgIChNZXNzYWdlUmVjZWl2ZXIuX19pbml0X18pOgorICAgICAgICAoTWVzc2FnZVJlY2VpdmVy
LnJ1bik6CisgICAgICAgIChNZXNzYWdlUmVjZWl2ZXIucmVjZWl2ZSk6CisgICAgICAgIChNZXNz
YWdlUmVjZWl2ZXIucmVjZWl2ZV9ub3dhaXQpOgorICAgICAgICAoTWVzc2FnZVJlY2VpdmVyLnN0
b3ApOgorICAgICAgICAoTWVzc2FnZVNlbmRlcik6CisgICAgICAgIChNZXNzYWdlU2VuZGVyLnNl
bmRzKToKKyAgICAgICAgKE1lc3NhZ2VTZW5kZXIucHJvdmlkZXMpOgorICAgICAgICAoTWVzc2Fn
ZVNlbmRlci5zaG91bGQpOgorICAgICAgICAoTWVzc2FnZVNlbmRlci5fX2luaXRfXyk6CisgICAg
ICAgIChNZXNzYWdlU2VuZGVyLnJ1bik6CisgICAgICAgIChNZXNzYWdlU2VuZGVyLnNlbmQpOgor
ICAgICAgICAoTWVzc2FnZVNlbmRlci5zZW5kX25vd2FpdCk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3
ZWJzb2NrZXQvbXV4LnB5OiBBZGRlZC4KKyAgICAgICAgKE11eFVuZXhwZWN0ZWRFeGNlcHRpb24p
OgorICAgICAgICAoTXV4Tm90SW1wbGVtZW50ZWRFeGNlcHRpb24pOgorICAgICAgICAoTG9naWNh
bENvbm5lY3Rpb25DbG9zZWRFeGNlcHRpb24pOgorICAgICAgICAoUGh5c2ljYWxDb25uZWN0aW9u
RXJyb3IpOgorICAgICAgICAoUGh5c2ljYWxDb25uZWN0aW9uRXJyb3IuX19pbml0X18pOgorICAg
ICAgICAoTG9naWNhbENoYW5uZWxFcnJvcik6CisgICAgICAgIChMb2dpY2FsQ2hhbm5lbEVycm9y
Ll9faW5pdF9fKToKKyAgICAgICAgKF9lbmNvZGVfY2hhbm5lbF9pZCk6CisgICAgICAgIChfZW5j
b2RlX251bWJlcik6CisgICAgICAgIChfY3JlYXRlX2FkZF9jaGFubmVsX3Jlc3BvbnNlKToKKyAg
ICAgICAgKF9jcmVhdGVfZHJvcF9jaGFubmVsKToKKyAgICAgICAgKF9jcmVhdGVfZmxvd19jb250
cm9sKToKKyAgICAgICAgKF9jcmVhdGVfbmV3X2NoYW5uZWxfc2xvdCk6CisgICAgICAgIChfY3Jl
YXRlX2ZhbGxiYWNrX25ld19jaGFubmVsX3Nsb3QpOgorICAgICAgICAoX3BhcnNlX3JlcXVlc3Rf
dGV4dCk6CisgICAgICAgIChfQ29udHJvbEJsb2NrKToKKyAgICAgICAgKF9Db250cm9sQmxvY2su
X19pbml0X18pOgorICAgICAgICAoX011eEZyYW1lUGF5bG9hZFBhcnNlcik6CisgICAgICAgIChf
TXV4RnJhbWVQYXlsb2FkUGFyc2VyLnRoYXQpOgorICAgICAgICAoX011eEZyYW1lUGF5bG9hZFBh
cnNlci5fX2luaXRfXyk6CisgICAgICAgIChfTXV4RnJhbWVQYXlsb2FkUGFyc2VyLnJlYWRfY2hh
bm5lbF9pZCk6CisgICAgICAgIChfTXV4RnJhbWVQYXlsb2FkUGFyc2VyLnJlYWRfaW5uZXJfZnJh
bWUpOgorICAgICAgICAoX011eEZyYW1lUGF5bG9hZFBhcnNlci5fcmVhZF9udW1iZXIpOgorICAg
ICAgICAoX011eEZyYW1lUGF5bG9hZFBhcnNlci5fcmVhZF9zaXplX2FuZF9jb250ZW50cyk6Cisg
ICAgICAgIChfTXV4RnJhbWVQYXlsb2FkUGFyc2VyLl9yZWFkX2FkZF9jaGFubmVsX3JlcXVlc3Qp
OgorICAgICAgICAoX011eEZyYW1lUGF5bG9hZFBhcnNlci5fcmVhZF9hZGRfY2hhbm5lbF9yZXNw
b25zZSk6CisgICAgICAgIChfTXV4RnJhbWVQYXlsb2FkUGFyc2VyLl9yZWFkX2Zsb3dfY29udHJv
bCk6CisgICAgICAgIChfTXV4RnJhbWVQYXlsb2FkUGFyc2VyLl9yZWFkX2Ryb3BfY2hhbm5lbCk6
CisgICAgICAgIChfTXV4RnJhbWVQYXlsb2FkUGFyc2VyLl9yZWFkX25ld19jaGFubmVsX3Nsb3Qp
OgorICAgICAgICAoX011eEZyYW1lUGF5bG9hZFBhcnNlci5yZWFkX2NvbnRyb2xfYmxvY2tzKToK
KyAgICAgICAgKF9NdXhGcmFtZVBheWxvYWRQYXJzZXIucmVtYWluaW5nX2RhdGEpOgorICAgICAg
ICAoX0xvZ2ljYWxSZXF1ZXN0KToKKyAgICAgICAgKF9Mb2dpY2FsUmVxdWVzdC5fX2luaXRfXyk6
CisgICAgICAgIChfTG9naWNhbFJlcXVlc3QuaXNfaHR0cHMpOgorICAgICAgICAoX0xvZ2ljYWxD
b25uZWN0aW9uKToKKyAgICAgICAgKF9Mb2dpY2FsQ29ubmVjdGlvbi5fX2luaXRfXyk6CisgICAg
ICAgIChfTG9naWNhbENvbm5lY3Rpb24uZ2V0X2xvY2FsX2FkZHIpOgorICAgICAgICAoX0xvZ2lj
YWxDb25uZWN0aW9uLmdldF9yZW1vdGVfYWRkcik6CisgICAgICAgIChfTG9naWNhbENvbm5lY3Rp
b24uZ2V0X21lbW9yaXplZF9saW5lcyk6CisgICAgICAgIChfTG9naWNhbENvbm5lY3Rpb24ud3Jp
dGUpOgorICAgICAgICAoX0xvZ2ljYWxDb25uZWN0aW9uLndyaXRlX2NvbnRyb2xfZGF0YSk6Cisg
ICAgICAgIChfTG9naWNhbENvbm5lY3Rpb24ub25fd3JpdGVfZGF0YV9kb25lKToKKyAgICAgICAg
KF9Mb2dpY2FsQ29ubmVjdGlvbi5vbl93cml0ZXJfZG9uZSk6CisgICAgICAgIChfTG9naWNhbENv
bm5lY3Rpb24uYXBwZW5kX2ZyYW1lX2RhdGEpOgorICAgICAgICAoX0xvZ2ljYWxDb25uZWN0aW9u
LnJlYWQpOgorICAgICAgICAoX0xvZ2ljYWxDb25uZWN0aW9uLnNldF9yZWFkX3N0YXRlKToKKyAg
ICAgICAgKF9Jbm5lck1lc3NhZ2UpOgorICAgICAgICAoX0lubmVyTWVzc2FnZS5fX2luaXRfXyk6
CisgICAgICAgIChfSW5uZXJNZXNzYWdlQnVpbGRlcik6CisgICAgICAgIChfSW5uZXJNZXNzYWdl
QnVpbGRlci50aGF0KToKKyAgICAgICAgKF9Jbm5lck1lc3NhZ2VCdWlsZGVyLl9faW5pdF9fKToK
KyAgICAgICAgKF9Jbm5lck1lc3NhZ2VCdWlsZGVyLl9oYW5kbGVfZmlyc3QpOgorICAgICAgICAo
X0lubmVyTWVzc2FnZUJ1aWxkZXIuX3Byb2Nlc3NfZmlyc3RfZnJhZ21lbnRlZF9jb250cm9sKToK
KyAgICAgICAgKF9Jbm5lck1lc3NhZ2VCdWlsZGVyLl9wcm9jZXNzX2ZpcnN0X2ZyYWdtZW50ZWRf
bWVzc2FnZSk6CisgICAgICAgIChfSW5uZXJNZXNzYWdlQnVpbGRlci5faGFuZGxlX2ZyYWdtZW50
ZWRfY29udHJvbCk6CisgICAgICAgIChfSW5uZXJNZXNzYWdlQnVpbGRlci5fcmVhc3NlbWJsZV9m
cmFnbWVudGVkX2NvbnRyb2wpOgorICAgICAgICAoX0lubmVyTWVzc2FnZUJ1aWxkZXIuX2hhbmRs
ZV9mcmFnbWVudGVkX21lc3NhZ2UpOgorICAgICAgICAoX0lubmVyTWVzc2FnZUJ1aWxkZXIuX3Jl
YXNzZW1ibGVfZnJhZ21lbnRlZF9tZXNzYWdlKToKKyAgICAgICAgKF9Jbm5lck1lc3NhZ2VCdWls
ZGVyLmJ1aWxkKToKKyAgICAgICAgKF9Mb2dpY2FsU3RyZWFtKToKKyAgICAgICAgKF9Mb2dpY2Fs
U3RyZWFtLmludGVycHJldHMpOgorICAgICAgICAoX0xvZ2ljYWxTdHJlYW0uX19pbml0X18pOgor
ICAgICAgICAoX0xvZ2ljYWxTdHJlYW0uX2NyZWF0ZV9pbm5lcl9mcmFtZSk6CisgICAgICAgIChf
TG9naWNhbFN0cmVhbS5fd3JpdGVfaW5uZXJfZnJhbWUpOgorICAgICAgICAoX0xvZ2ljYWxTdHJl
YW0ucmVwbGVuaXNoX3NlbmRfcXVvdGEpOgorICAgICAgICAoX0xvZ2ljYWxTdHJlYW0uY29uc3Vt
ZV9yZWNlaXZlX3F1b3RhKToKKyAgICAgICAgKF9Mb2dpY2FsU3RyZWFtLnNlbmRfbWVzc2FnZSk6
CisgICAgICAgIChfTG9naWNhbFN0cmVhbS5fcmVjZWl2ZV9mcmFtZSk6CisgICAgICAgIChfTG9n
aWNhbFN0cmVhbS5fZ2V0X21lc3NhZ2VfZnJvbV9mcmFtZSk6CisgICAgICAgIChfTG9naWNhbFN0
cmVhbS5yZWNlaXZlX21lc3NhZ2UpOgorICAgICAgICAoX0xvZ2ljYWxTdHJlYW0uX3NlbmRfY2xv
c2luZ19oYW5kc2hha2UpOgorICAgICAgICAoX0xvZ2ljYWxTdHJlYW0uc2VuZF9waW5nKToKKyAg
ICAgICAgKF9Mb2dpY2FsU3RyZWFtLl9zZW5kX3BvbmcpOgorICAgICAgICAoX0xvZ2ljYWxTdHJl
YW0uY2xvc2VfY29ubmVjdGlvbik6CisgICAgICAgIChfTG9naWNhbFN0cmVhbS5zdG9wX3NlbmRp
bmcpOgorICAgICAgICAoX091dGdvaW5nRGF0YSk6CisgICAgICAgIChfT3V0Z29pbmdEYXRhLl9f
aW5pdF9fKToKKyAgICAgICAgKF9QaHlzaWNhbENvbm5lY3Rpb25Xcml0ZXIpOgorICAgICAgICAo
X1BoeXNpY2FsQ29ubmVjdGlvbldyaXRlci5fX2luaXRfXyk6CisgICAgICAgIChfUGh5c2ljYWxD
b25uZWN0aW9uV3JpdGVyLnB1dF9vdXRnb2luZ19kYXRhKToKKyAgICAgICAgKF9QaHlzaWNhbENv
bm5lY3Rpb25Xcml0ZXIuX3dyaXRlX2RhdGEpOgorICAgICAgICAoX1BoeXNpY2FsQ29ubmVjdGlv
bldyaXRlci5ydW4pOgorICAgICAgICAoX1BoeXNpY2FsQ29ubmVjdGlvbldyaXRlci5zdG9wKToK
KyAgICAgICAgKF9QaHlzaWNhbENvbm5lY3Rpb25SZWFkZXIpOgorICAgICAgICAoX1BoeXNpY2Fs
Q29ubmVjdGlvblJlYWRlci5fX2luaXRfXyk6CisgICAgICAgIChfUGh5c2ljYWxDb25uZWN0aW9u
UmVhZGVyLnJ1bik6CisgICAgICAgIChfV29ya2VyKToKKyAgICAgICAgKF9Xb3JrZXIuX19pbml0
X18pOgorICAgICAgICAoX1dvcmtlci5ydW4pOgorICAgICAgICAoX011eEhhbmRzaGFrZXIpOgor
ICAgICAgICAoX011eEhhbmRzaGFrZXIuX19pbml0X18pOgorICAgICAgICAoX011eEhhbmRzaGFr
ZXIuX2NyZWF0ZV9zdHJlYW0pOgorICAgICAgICAoX011eEhhbmRzaGFrZXIuX2NyZWF0ZV9oYW5k
c2hha2VfcmVzcG9uc2UpOgorICAgICAgICAoX011eEhhbmRzaGFrZXIuX3NlbmRfaGFuZHNoYWtl
KToKKyAgICAgICAgKF9Mb2dpY2FsQ2hhbm5lbERhdGEpOgorICAgICAgICAoX0xvZ2ljYWxDaGFu
bmVsRGF0YS5fX2luaXRfXyk6CisgICAgICAgIChfSGFuZHNoYWtlRGVsdGFCYXNlKToKKyAgICAg
ICAgKF9IYW5kc2hha2VEZWx0YUJhc2UudGhhdCk6CisgICAgICAgIChfSGFuZHNoYWtlRGVsdGFC
YXNlLl9faW5pdF9fKToKKyAgICAgICAgKF9IYW5kc2hha2VEZWx0YUJhc2UuY3JlYXRlX2hlYWRl
cnMpOgorICAgICAgICAoX011eEhhbmRsZXIpOgorICAgICAgICAoX011eEhhbmRsZXIuYXJlKToK
KyAgICAgICAgKF9NdXhIYW5kbGVyLl9faW5pdF9fKToKKyAgICAgICAgKF9NdXhIYW5kbGVyLnN0
YXJ0KToKKyAgICAgICAgKF9NdXhIYW5kbGVyLmFkZF9jaGFubmVsX3Nsb3RzKToKKyAgICAgICAg
KF9NdXhIYW5kbGVyLndhaXRfdW50aWxfZG9uZSk6CisgICAgICAgIChfTXV4SGFuZGxlci5ub3Rp
Znlfd3JpdGVfZGF0YV9kb25lKToKKyAgICAgICAgKF9NdXhIYW5kbGVyLnNlbmRfY29udHJvbF9k
YXRhKToKKyAgICAgICAgKF9NdXhIYW5kbGVyLnNlbmRfZGF0YSk6CisgICAgICAgIChfTXV4SGFu
ZGxlci5fc2VuZF9kcm9wX2NoYW5uZWwpOgorICAgICAgICAoX011eEhhbmRsZXIuX3NlbmRfZXJy
b3JfYWRkX2NoYW5uZWxfcmVzcG9uc2UpOgorICAgICAgICAoX011eEhhbmRsZXIuX2NyZWF0ZV9s
b2dpY2FsX3JlcXVlc3QpOgorICAgICAgICAoX011eEhhbmRsZXIuX2RvX2hhbmRzaGFrZV9mb3Jf
bG9naWNhbF9yZXF1ZXN0KToKKyAgICAgICAgKF9NdXhIYW5kbGVyLl9hZGRfbG9naWNhbF9jaGFu
bmVsKToKKyAgICAgICAgKF9NdXhIYW5kbGVyLl9wcm9jZXNzX2FkZF9jaGFubmVsX3JlcXVlc3Qp
OgorICAgICAgICAoX011eEhhbmRsZXIuX3Byb2Nlc3NfZmxvd19jb250cm9sKToKKyAgICAgICAg
KF9NdXhIYW5kbGVyLl9wcm9jZXNzX2Ryb3BfY2hhbm5lbCk6CisgICAgICAgIChfTXV4SGFuZGxl
ci5fcHJvY2Vzc19jb250cm9sX2Jsb2Nrcyk6CisgICAgICAgIChfTXV4SGFuZGxlci5fcHJvY2Vz
c19sb2dpY2FsX2ZyYW1lKToKKyAgICAgICAgKF9NdXhIYW5kbGVyLmRpc3BhdGNoX21lc3NhZ2Up
OgorICAgICAgICAoX011eEhhbmRsZXIubm90aWZ5X3dvcmtlcl9kb25lKToKKyAgICAgICAgKF9N
dXhIYW5kbGVyLm5vdGlmeV9yZWFkZXJfZG9uZSk6CisgICAgICAgIChfTXV4SGFuZGxlci5ub3Rp
Znlfd3JpdGVyX2RvbmUpOgorICAgICAgICAoX011eEhhbmRsZXIuZmFpbF9waHlzaWNhbF9jb25u
ZWN0aW9uKToKKyAgICAgICAgKF9NdXhIYW5kbGVyLmZhaWxfbG9naWNhbF9jaGFubmVsKToKKyAg
ICAgICAgKHVzZV9tdXgpOgorICAgICAgICAoc3RhcnQpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vi
c29ja2V0L3N0YW5kYWxvbmUucHk6IEFkZGVkLgorICAgICAgICAoX1N0YW5kYWxvbmVDb25uZWN0
aW9uKToKKyAgICAgICAgKF9TdGFuZGFsb25lQ29ubmVjdGlvbi5fX2luaXRfXyk6CisgICAgICAg
IChfU3RhbmRhbG9uZUNvbm5lY3Rpb24uZ2V0X2xvY2FsX2FkZHIpOgorICAgICAgICAoX1N0YW5k
YWxvbmVDb25uZWN0aW9uLmdldF9yZW1vdGVfYWRkcik6CisgICAgICAgIChfU3RhbmRhbG9uZUNv
bm5lY3Rpb24ud3JpdGUpOgorICAgICAgICAoX1N0YW5kYWxvbmVDb25uZWN0aW9uLnJlYWQpOgor
ICAgICAgICAoX1N0YW5kYWxvbmVDb25uZWN0aW9uLmdldF9tZW1vcml6ZWRfbGluZXMpOgorICAg
ICAgICAoX1N0YW5kYWxvbmVSZXF1ZXN0KToKKyAgICAgICAgKF9TdGFuZGFsb25lUmVxdWVzdC5f
X2luaXRfXyk6CisgICAgICAgIChfU3RhbmRhbG9uZVJlcXVlc3QuZ2V0X3VyaSk6CisgICAgICAg
IChfU3RhbmRhbG9uZVJlcXVlc3QuZ2V0X3VucGFyc2VkX3VyaSk6CisgICAgICAgIChfU3RhbmRh
bG9uZVJlcXVlc3QuZ2V0X21ldGhvZCk6CisgICAgICAgIChfU3RhbmRhbG9uZVJlcXVlc3QuZ2V0
X3Byb3RvY29sKToKKyAgICAgICAgKF9TdGFuZGFsb25lUmVxdWVzdC5pc19odHRwcyk6CisgICAg
ICAgIChfaW1wb3J0X3NzbCk6CisgICAgICAgIChfaW1wb3J0X3B5b3BlbnNzbCk6CisgICAgICAg
IChfU3RhbmRhbG9uZVNTTENvbm5lY3Rpb24pOgorICAgICAgICAoX1N0YW5kYWxvbmVTU0xDb25u
ZWN0aW9uLmZvcik6CisgICAgICAgIChfU3RhbmRhbG9uZVNTTENvbm5lY3Rpb24uX19pbml0X18p
OgorICAgICAgICAoX1N0YW5kYWxvbmVTU0xDb25uZWN0aW9uLl9fZ2V0YXR0cmlidXRlX18pOgor
ICAgICAgICAoX1N0YW5kYWxvbmVTU0xDb25uZWN0aW9uLl9fc2V0YXR0cl9fKToKKyAgICAgICAg
KF9TdGFuZGFsb25lU1NMQ29ubmVjdGlvbi5tYWtlZmlsZSk6CisgICAgICAgIChfU3RhbmRhbG9u
ZVNTTENvbm5lY3Rpb24uc2h1dGRvd24pOgorICAgICAgICAoX1N0YW5kYWxvbmVTU0xDb25uZWN0
aW9uLnJlY3YpOgorICAgICAgICAoX2FsaWFzX2hhbmRsZXJzKToKKyAgICAgICAgKFdlYlNvY2tl
dFNlcnZlcik6CisgICAgICAgIChXZWJTb2NrZXRTZXJ2ZXIuX19pbml0X18pOgorICAgICAgICAo
V2ViU29ja2V0U2VydmVyLl9jcmVhdGVfc29ja2V0cyk6CisgICAgICAgIChXZWJTb2NrZXRTZXJ2
ZXIuc2VydmVyX2JpbmQpOgorICAgICAgICAoV2ViU29ja2V0U2VydmVyLnNlcnZlcl9hY3RpdmF0
ZSk6CisgICAgICAgIChXZWJTb2NrZXRTZXJ2ZXIuc2VydmVyX2Nsb3NlKToKKyAgICAgICAgKFdl
YlNvY2tldFNlcnZlci5maWxlbm8pOgorICAgICAgICAoV2ViU29ja2V0U2VydmVyLmhhbmRsZV9l
cnJvcik6CisgICAgICAgIChXZWJTb2NrZXRTZXJ2ZXIuZ2V0X3JlcXVlc3QpOgorICAgICAgICAo
V2ViU29ja2V0U2VydmVyLmdldF9yZXF1ZXN0LmRlZmF1bHRfY2FsbGJhY2spOgorICAgICAgICAo
V2ViU29ja2V0U2VydmVyLnNlcnZlX2ZvcmV2ZXIpOgorICAgICAgICAoV2ViU29ja2V0U2VydmVy
LnNodXRkb3duKToKKyAgICAgICAgKFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyKToKKyAgICAgICAg
KFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyLnNldHVwKToKKyAgICAgICAgKFdlYlNvY2tldFJlcXVl
c3RIYW5kbGVyLnNldHVwLlNvY2tldFNlcnZlcik6CisgICAgICAgIChXZWJTb2NrZXRSZXF1ZXN0
SGFuZGxlci5fX2luaXRfXyk6CisgICAgICAgIChXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5feGhy
X3NlbmRfYmVuY2htYXJrX2hlbHBlcik6CisgICAgICAgIChXZWJTb2NrZXRSZXF1ZXN0SGFuZGxl
ci5feGhyX3JlY2VpdmVfYmVuY2htYXJrX2hlbHBlcik6CisgICAgICAgIChXZWJTb2NrZXRSZXF1
ZXN0SGFuZGxlci5wYXJzZV9yZXF1ZXN0KToKKyAgICAgICAgKFdlYlNvY2tldFJlcXVlc3RIYW5k
bGVyLmxvZ19yZXF1ZXN0KToKKyAgICAgICAgKFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyLmxvZ19l
cnJvcik6CisgICAgICAgIChXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5pc19jZ2kpOgorICAgICAg
ICAoX2dldF9sb2dnZXJfZnJvbV9jbGFzcyk6CisgICAgICAgIChfY29uZmlndXJlX2xvZ2dpbmcp
OgorICAgICAgICAoX2J1aWxkX29wdGlvbl9wYXJzZXIpOgorICAgICAgICAoVGhyZWFkTW9uaXRv
cik6CisgICAgICAgIChUaHJlYWRNb25pdG9yLl9faW5pdF9fKToKKyAgICAgICAgKFRocmVhZE1v
bml0b3IucnVuKToKKyAgICAgICAgKF9wYXJzZV9hcmdzX2FuZF9jb25maWcpOgorICAgICAgICAo
X21haW4pOgorICAgICAgICAoX21haW4uaWYpOgorICAgICAgICAoX21haW4uaWYuX19jaGVja19z
Y3JpcHQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90
b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L3N0cmVhbS5weTogQWRkZWQuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vi
c29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvdXRpbC5weTogQWRkZWQuCisgICAgICAgIChnZXRf
c3RhY2tfdHJhY2UpOgorICAgICAgICAocHJlcGVuZF9tZXNzYWdlX3RvX2V4Y2VwdGlvbik6Cisg
ICAgICAgIChfX3RyYW5zbGF0ZV9pbnRlcnApOgorICAgICAgICAoZ2V0X3NjcmlwdF9pbnRlcnAp
OgorICAgICAgICAod3JhcF9wb3BlbjNfZm9yX3dpbik6CisgICAgICAgICh3cmFwX3BvcGVuM19m
b3Jfd2luLl9fd3JhcF9wb3BlbjMpOgorICAgICAgICAoaGV4aWZ5KToKKyAgICAgICAgKGdldF9j
bGFzc19sb2dnZXIpOgorICAgICAgICAoTm9vcE1hc2tlcik6CisgICAgICAgIChOb29wTWFza2Vy
Ll9faW5pdF9fKToKKyAgICAgICAgKE5vb3BNYXNrZXIubWFzayk6CisgICAgICAgIChSZXBlYXRl
ZFhvck1hc2tlcik6CisgICAgICAgIChSZXBlYXRlZFhvck1hc2tlci5fX2luaXRfXyk6CisgICAg
ICAgIChSZXBlYXRlZFhvck1hc2tlci5fbWFza191c2luZ19zd2lnKToKKyAgICAgICAgKFJlcGVh
dGVkWG9yTWFza2VyLl9tYXNrX3VzaW5nX2FycmF5KToKKyAgICAgICAgKF9EZWZsYXRlcik6Cisg
ICAgICAgIChfRGVmbGF0ZXIuX19pbml0X18pOgorICAgICAgICAoX0RlZmxhdGVyLmNvbXByZXNz
KToKKyAgICAgICAgKF9EZWZsYXRlci5jb21wcmVzc19hbmRfZmx1c2gpOgorICAgICAgICAoX0Rl
ZmxhdGVyLmNvbXByZXNzX2FuZF9maW5pc2gpOgorICAgICAgICAoX0luZmxhdGVyKToKKyAgICAg
ICAgKF9JbmZsYXRlci5fX2luaXRfXyk6CisgICAgICAgIChfSW5mbGF0ZXIuZGVjb21wcmVzcyk6
CisgICAgICAgIChfSW5mbGF0ZXIuYXBwZW5kKToKKyAgICAgICAgKF9JbmZsYXRlci5yZXNldCk6
CisgICAgICAgIChfUkZDMTk3OURlZmxhdGVyKToKKyAgICAgICAgKF9SRkMxOTc5RGVmbGF0ZXIu
dGhhdCk6CisgICAgICAgIChfUkZDMTk3OURlZmxhdGVyLl9faW5pdF9fKToKKyAgICAgICAgKF9S
RkMxOTc5RGVmbGF0ZXIuZmlsdGVyKToKKyAgICAgICAgKF9SRkMxOTc5SW5mbGF0ZXIpOgorICAg
ICAgICAoX1JGQzE5NzlJbmZsYXRlci5mb3IpOgorICAgICAgICAoX1JGQzE5NzlJbmZsYXRlci5f
X2luaXRfXyk6CisgICAgICAgIChfUkZDMTk3OUluZmxhdGVyLmZpbHRlcik6CisgICAgICAgIChE
ZWZsYXRlU29ja2V0KToKKyAgICAgICAgKERlZmxhdGVTb2NrZXQuZm9yKToKKyAgICAgICAgKERl
ZmxhdGVTb2NrZXQuX19pbml0X18pOgorICAgICAgICAoRGVmbGF0ZVNvY2tldC5yZWN2KToKKyAg
ICAgICAgKERlZmxhdGVTb2NrZXQuc2VuZGFsbCk6CisgICAgICAgIChEZWZsYXRlU29ja2V0LnNl
bmQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29s
cy9weXdlYnNvY2tldC9zcmMvc2V0dXAucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9fX2lu
aXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L2NlcnQvY2FjZXJ0LnBlbTogQWRkZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5
d2Vic29ja2V0L3NyYy90ZXN0L2NlcnQvY2VydC5wZW06IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVz
dC9jZXJ0L2NsaWVudF9jZXJ0LnAxMjogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L2NlcnQva2V5
LnBlbTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNl
cnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L2NsaWVudF9mb3JfdGVzdGluZy5weTogQWRk
ZWQuCisgICAgICAgIChmb3IpOgorICAgICAgICAoX21ldGhvZF9saW5lKToKKyAgICAgICAgKF9z
ZWNfb3JpZ2luX2hlYWRlcik6CisgICAgICAgIChfb3JpZ2luX2hlYWRlcik6CisgICAgICAgIChf
Zm9ybWF0X2hvc3RfaGVhZGVyKToKKyAgICAgICAgKHJlY2VpdmVfYnl0ZXMpOgorICAgICAgICAo
X3JlYWRfZmllbGRzKToKKyAgICAgICAgKF9yZWFkX25hbWUpOgorICAgICAgICAoX3NraXBfc3Bh
Y2VzKToKKyAgICAgICAgKF9yZWFkX3ZhbHVlKToKKyAgICAgICAgKHJlYWRfZnJhbWVfaGVhZGVy
KToKKyAgICAgICAgKF9UTFNTb2NrZXQpOgorICAgICAgICAoX1RMU1NvY2tldC5fX2luaXRfXyk6
CisgICAgICAgIChfVExTU29ja2V0LnNlbmQpOgorICAgICAgICAoX1RMU1NvY2tldC5yZWN2KToK
KyAgICAgICAgKF9UTFNTb2NrZXQuY2xvc2UpOgorICAgICAgICAoSHR0cFN0YXR1c0V4Y2VwdGlv
bik6CisgICAgICAgIChIdHRwU3RhdHVzRXhjZXB0aW9uLl9faW5pdF9fKToKKyAgICAgICAgKFdl
YlNvY2tldEhhbmRzaGFrZSk6CisgICAgICAgIChXZWJTb2NrZXRIYW5kc2hha2UuX19pbml0X18p
OgorICAgICAgICAoV2ViU29ja2V0SGFuZHNoYWtlLmhhbmRzaGFrZSk6CisgICAgICAgIChXZWJT
b2NrZXRIeWJpMDBIYW5kc2hha2UpOgorICAgICAgICAoV2ViU29ja2V0SHliaTAwSGFuZHNoYWtl
Ll9faW5pdF9fKToKKyAgICAgICAgKFdlYlNvY2tldEh5YmkwMEhhbmRzaGFrZS5oYW5kc2hha2Up
OgorICAgICAgICAoV2ViU29ja2V0SHliaTAwSGFuZHNoYWtlLl9nZW5lcmF0ZV9zZWNfd2Vic29j
a2V0X2tleSk6CisgICAgICAgIChXZWJTb2NrZXRIeWJpMDBIYW5kc2hha2UuX2dlbmVyYXRlX2tl
eTMpOgorICAgICAgICAoV2ViU29ja2V0SGl4aWU3NUhhbmRzaGFrZSk6CisgICAgICAgIChXZWJT
b2NrZXRIaXhpZTc1SGFuZHNoYWtlLl9faW5pdF9fKToKKyAgICAgICAgKFdlYlNvY2tldEhpeGll
NzVIYW5kc2hha2UuX3NraXBfaGVhZGVycyk6CisgICAgICAgIChXZWJTb2NrZXRIaXhpZTc1SGFu
ZHNoYWtlLmhhbmRzaGFrZSk6CisgICAgICAgIChXZWJTb2NrZXRTdHJlYW0pOgorICAgICAgICAo
V2ViU29ja2V0U3RyZWFtLl9faW5pdF9fKToKKyAgICAgICAgKFdlYlNvY2tldFN0cmVhbS5fbWFz
a19oeWJpKToKKyAgICAgICAgKFdlYlNvY2tldFN0cmVhbS5zZW5kX2ZyYW1lX29mX2FyYml0cmFy
eV9ieXRlcyk6CisgICAgICAgIChXZWJTb2NrZXRTdHJlYW0uc2VuZF9kYXRhKToKKyAgICAgICAg
KFdlYlNvY2tldFN0cmVhbS5zZW5kX2JpbmFyeSk6CisgICAgICAgIChXZWJTb2NrZXRTdHJlYW0u
c2VuZF90ZXh0KToKKyAgICAgICAgKFdlYlNvY2tldFN0cmVhbS5fYXNzZXJ0X3JlY2VpdmVfZGF0
YSk6CisgICAgICAgIChXZWJTb2NrZXRTdHJlYW0uYXNzZXJ0X3JlY2VpdmVfYmluYXJ5KToKKyAg
ICAgICAgKFdlYlNvY2tldFN0cmVhbS5hc3NlcnRfcmVjZWl2ZV90ZXh0KToKKyAgICAgICAgKFdl
YlNvY2tldFN0cmVhbS5fYnVpbGRfY2xvc2VfZnJhbWUpOgorICAgICAgICAoV2ViU29ja2V0U3Ry
ZWFtLnNlbmRfY2xvc2UpOgorICAgICAgICAoV2ViU29ja2V0U3RyZWFtLmFzc2VydF9yZWNlaXZl
X2Nsb3NlKToKKyAgICAgICAgKFdlYlNvY2tldFN0cmVhbUhpeGllNzUpOgorICAgICAgICAoV2Vi
U29ja2V0U3RyZWFtSGl4aWU3NS5fX2luaXRfXyk6CisgICAgICAgIChXZWJTb2NrZXRTdHJlYW1I
aXhpZTc1LnNlbmRfZnJhbWVfb2ZfYXJiaXRyYXJ5X2J5dGVzKToKKyAgICAgICAgKFdlYlNvY2tl
dFN0cmVhbUhpeGllNzUuc2VuZF9kYXRhKToKKyAgICAgICAgKFdlYlNvY2tldFN0cmVhbUhpeGll
NzUuc2VuZF9iaW5hcnkpOgorICAgICAgICAoV2ViU29ja2V0U3RyZWFtSGl4aWU3NS5zZW5kX3Rl
eHQpOgorICAgICAgICAoV2ViU29ja2V0U3RyZWFtSGl4aWU3NS5hc3NlcnRfcmVjZWl2ZV9iaW5h
cnkpOgorICAgICAgICAoV2ViU29ja2V0U3RyZWFtSGl4aWU3NS5hc3NlcnRfcmVjZWl2ZV90ZXh0
KToKKyAgICAgICAgKFdlYlNvY2tldFN0cmVhbUhpeGllNzUuc2VuZF9jbG9zZSk6CisgICAgICAg
IChXZWJTb2NrZXRTdHJlYW1IaXhpZTc1LmFzc2VydF9yZWNlaXZlX2Nsb3NlKToKKyAgICAgICAg
KENsaWVudE9wdGlvbnMpOgorICAgICAgICAoQ2xpZW50T3B0aW9ucy5fX2luaXRfXyk6CisgICAg
ICAgIChDbGllbnRPcHRpb25zLmVuYWJsZV9kZWZsYXRlX2ZyYW1lKToKKyAgICAgICAgKENsaWVu
dE9wdGlvbnMuZW5hYmxlX211eCk6CisgICAgICAgIChjb25uZWN0X3NvY2tldF93aXRoX3JldHJ5
KToKKyAgICAgICAgKENsaWVudCk6CisgICAgICAgIChDbGllbnQuX19pbml0X18pOgorICAgICAg
ICAoQ2xpZW50LmNvbm5lY3QpOgorICAgICAgICAoQ2xpZW50LnNlbmRfZnJhbWVfb2ZfYXJiaXRy
YXJ5X2J5dGVzKToKKyAgICAgICAgKENsaWVudC5zZW5kX21lc3NhZ2UpOgorICAgICAgICAoQ2xp
ZW50LmFzc2VydF9yZWNlaXZlKToKKyAgICAgICAgKENsaWVudC5zZW5kX2Nsb3NlKToKKyAgICAg
ICAgKENsaWVudC5hc3NlcnRfcmVjZWl2ZV9jbG9zZSk6CisgICAgICAgIChDbGllbnQuY2xvc2Vf
c29ja2V0KToKKyAgICAgICAgKENsaWVudC5hc3NlcnRfY29ubmVjdGlvbl9jbG9zZWQpOgorICAg
ICAgICAoY3JlYXRlX2NsaWVudCk6CisgICAgICAgIChjcmVhdGVfY2xpZW50X2h5YmkwMCk6Cisg
ICAgICAgIChjcmVhdGVfY2xpZW50X2hpeGllNzUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9lbmR0b2Vu
ZF93aXRoX2V4dGVybmFsX3NlcnZlci5weTogQWRkZWQuCisgICAgICAgIChFbmRUb0VuZFRlc3RX
aXRoRXh0ZXJuYWxTZXJ2ZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9tb2NrLnB5OiBBZGRlZC4KKyAg
ICAgICAgKF9Nb2NrQ29ubkJhc2UpOgorICAgICAgICAoX01vY2tDb25uQmFzZS5vZik6CisgICAg
ICAgIChfTW9ja0Nvbm5CYXNlLl9faW5pdF9fKToKKyAgICAgICAgKF9Nb2NrQ29ubkJhc2Uud3Jp
dGUpOgorICAgICAgICAoX01vY2tDb25uQmFzZS53cml0dGVuX2RhdGEpOgorICAgICAgICAoTW9j
a0Nvbm4pOgorICAgICAgICAoTW9ja0Nvbm4uX19pbml0X18pOgorICAgICAgICAoTW9ja0Nvbm4u
cmVhZGxpbmUpOgorICAgICAgICAoTW9ja0Nvbm4ucmVhZCk6CisgICAgICAgIChNb2NrQ29ubi5f
cmVhZF91cF90byk6CisgICAgICAgIChNb2NrQmxvY2tpbmdDb25uKToKKyAgICAgICAgKE1vY2tC
bG9ja2luZ0Nvbm4uX19pbml0X18pOgorICAgICAgICAoTW9ja0Jsb2NraW5nQ29ubi5yZWFkbGlu
ZSk6CisgICAgICAgIChNb2NrQmxvY2tpbmdDb25uLnJlYWQpOgorICAgICAgICAoTW9ja0Jsb2Nr
aW5nQ29ubi5wdXRfYnl0ZXMpOgorICAgICAgICAoTW9ja1RhYmxlKToKKyAgICAgICAgKE1vY2tU
YWJsZS5fX2luaXRfXyk6CisgICAgICAgIChNb2NrVGFibGUuX19nZXRpdGVtX18pOgorICAgICAg
ICAoTW9ja1RhYmxlLl9fc2V0aXRlbV9fKToKKyAgICAgICAgKE1vY2tUYWJsZS5nZXQpOgorICAg
ICAgICAoTW9ja1JlcXVlc3QpOgorICAgICAgICAoTW9ja1JlcXVlc3QuX19pbml0X18pOgorICAg
ICAgICAoTW9ja1JlcXVlc3QuaXNfaHR0cHMpOgorICAgICAgICAoTW9ja0Rpc3BhdGNoZXIpOgor
ICAgICAgICAoTW9ja0Rpc3BhdGNoZXIuX19pbml0X18pOgorICAgICAgICAoTW9ja0Rpc3BhdGNo
ZXIuZG9fZXh0cmFfaGFuZHNoYWtlKToKKyAgICAgICAgKE1vY2tEaXNwYXRjaGVyLnRyYW5zZmVy
X2RhdGEpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90
b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9tdXhfY2xpZW50X2Zvcl90ZXN0aW5nLnB5OiBBZGRl
ZC4KKyAgICAgICAgKF9Db250cm9sQmxvY2spOgorICAgICAgICAoX0NvbnRyb2xCbG9jay5fX2lu
aXRfXyk6CisgICAgICAgIChfcGFyc2VfaGFuZHNoYWtlX3Jlc3BvbnNlKToKKyAgICAgICAgKF9w
YXJzZV9jaGFubmVsX2lkKToKKyAgICAgICAgKF9wYXJzZV9udW1iZXIpOgorICAgICAgICAoX3Bh
cnNlX3NpemVfYW5kX2NvbnRlbnRzKToKKyAgICAgICAgKF9wYXJzZV9jb250cm9sX2Jsb2Nrcyk6
CisgICAgICAgIChfZW5jb2RlX2NoYW5uZWxfaWQpOgorICAgICAgICAoX2VuY29kZV9udW1iZXIp
OgorICAgICAgICAoX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1ZXN0KToKKyAgICAgICAgKF9jcmVh
dGVfZmxvd19jb250cm9sKToKKyAgICAgICAgKF9NdXhSZWFkZXJUaHJlYWQpOgorICAgICAgICAo
X011eFJlYWRlclRocmVhZC5fX2luaXRfXyk6CisgICAgICAgIChfTXV4UmVhZGVyVGhyZWFkLl9y
ZWNlaXZlX21lc3NhZ2UpOgorICAgICAgICAoX011eFJlYWRlclRocmVhZC5yZXF1ZXN0X3N0b3Ap
OgorICAgICAgICAoX011eFJlYWRlclRocmVhZC5ydW4pOgorICAgICAgICAoX0lubmVyRnJhbWUp
OgorICAgICAgICAoX0lubmVyRnJhbWUuX19pbml0X18pOgorICAgICAgICAoX0xvZ2ljYWxDaGFu
bmVsRGF0YSk6CisgICAgICAgIChfTG9naWNhbENoYW5uZWxEYXRhLl9faW5pdF9fKToKKyAgICAg
ICAgKE11eENsaWVudCk6CisgICAgICAgIChNdXhDbGllbnQuaXMpOgorICAgICAgICAoTXV4Q2xp
ZW50LmZyb20pOgorICAgICAgICAoTXV4Q2xpZW50Ll9faW5pdF9fKToKKyAgICAgICAgKE11eENs
aWVudC5fcGFyc2VfaW5uZXJfZnJhbWUpOgorICAgICAgICAoTXV4Q2xpZW50Ll9wcm9jZXNzX211
eF9jb250cm9sX2Jsb2Nrcyk6CisgICAgICAgIChNdXhDbGllbnQuX2Rpc3BhdGNoX2ZyYW1lKToK
KyAgICAgICAgKE11eENsaWVudC5fcHJvY2Vzc19jb250cm9sX21lc3NhZ2UpOgorICAgICAgICAo
TXV4Q2xpZW50Ll9ub3RpZnlfcmVhZGVyX2RvbmUpOgorICAgICAgICAoTXV4Q2xpZW50Ll9hc3Nl
cnRfY2hhbm5lbF9zbG90X2F2YWlsYWJsZSk6CisgICAgICAgIChNdXhDbGllbnQuX2Fzc2VydF9z
ZW5kX3F1b3RhX2F2YWlsYWJsZSk6CisgICAgICAgIChNdXhDbGllbnQuY29ubmVjdCk6CisgICAg
ICAgIChNdXhDbGllbnQuYWRkX2NoYW5uZWwpOgorICAgICAgICAoTXV4Q2xpZW50Ll9jaGVja19s
b2dpY2FsX2NoYW5uZWxfaXNfb3BlbmVkKToKKyAgICAgICAgKE11eENsaWVudC5kcm9wX2NoYW5u
ZWwpOgorICAgICAgICAoTXV4Q2xpZW50LnNlbmRfZmxvd19jb250cm9sKToKKyAgICAgICAgKE11
eENsaWVudC5zZW5kX21lc3NhZ2UpOgorICAgICAgICAoTXV4Q2xpZW50LmFzc2VydF9yZWNlaXZl
KToKKyAgICAgICAgKE11eENsaWVudC5zZW5kX2Nsb3NlKToKKyAgICAgICAgKE11eENsaWVudC5h
c3NlcnRfcmVjZWl2ZV9jbG9zZSk6CisgICAgICAgIChNdXhDbGllbnQuc2VuZF9waHlzaWNhbF9j
b25uZWN0aW9uX2Nsb3NlKToKKyAgICAgICAgKE11eENsaWVudC5hc3NlcnRfcGh5c2ljYWxfY29u
bmVjdGlvbl9yZWNlaXZlX2Nsb3NlKToKKyAgICAgICAgKE11eENsaWVudC5jbG9zZV9zb2NrZXQp
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9w
eXdlYnNvY2tldC9zcmMvdGVzdC9ydW5fYWxsLnB5OiBBZGRlZC4KKyAgICAgICAgKF9saXN0X3Rl
c3RfbW9kdWxlcyk6CisgICAgICAgIChfc3VpdGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9zZXRfc3lz
X3BhdGgucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93
cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0X2Rpc3BhdGNoLnB5OiBBZGRl
ZC4KKyAgICAgICAgKERpc3BhdGNoZXJUZXN0KToKKyAgICAgICAgKERpc3BhdGNoZXJUZXN0LnRl
c3Rfbm9ybWFsaXplX3BhdGgpOgorICAgICAgICAoRGlzcGF0Y2hlclRlc3QudGVzdF9jb252ZXJ0
ZXIpOgorICAgICAgICAoRGlzcGF0Y2hlclRlc3QudGVzdF9lbnVtZXJhdGVfaGFuZGxlcl9maWxl
X3BhdGhzKToKKyAgICAgICAgKERpc3BhdGNoZXJUZXN0LnRlc3Rfc291cmNlX2hhbmRsZXJfZmls
ZSk6CisgICAgICAgIChEaXNwYXRjaGVyVGVzdC50ZXN0X3NvdXJjZV9oYW5kbGVyX2ZpbGUud2Vi
X3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UpOgorICAgICAgICAoRGlzcGF0Y2hlclRlc3QudGVz
dF9zb3VyY2VfaGFuZGxlcl9maWxlLndlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSk6CisgICAgICAg
IChEaXNwYXRjaGVyVGVzdC50ZXN0X3NvdXJjZV93YXJuaW5ncyk6CisgICAgICAgIChEaXNwYXRj
aGVyVGVzdC50ZXN0X2RvX2V4dHJhX2hhbmRzaGFrZSk6CisgICAgICAgIChEaXNwYXRjaGVyVGVz
dC50ZXN0X2Fib3J0X2V4dHJhX2hhbmRzaGFrZSk6CisgICAgICAgIChEaXNwYXRjaGVyVGVzdC50
ZXN0X3RyYW5zZmVyX2RhdGEpOgorICAgICAgICAoRGlzcGF0Y2hlclRlc3QudGVzdF90cmFuc2Zl
cl9kYXRhX25vX2hhbmRsZXIpOgorICAgICAgICAoRGlzcGF0Y2hlclRlc3QudGVzdF90cmFuc2Zl
cl9kYXRhX2hhbmRsZXJfZXhjZXB0aW9uKToKKyAgICAgICAgKERpc3BhdGNoZXJUZXN0LnRlc3Rf
YWJvcnRfdHJhbnNmZXJfZGF0YSk6CisgICAgICAgIChEaXNwYXRjaGVyVGVzdC50ZXN0X3NjYW5f
ZGlyKToKKyAgICAgICAgKERpc3BhdGNoZXJUZXN0LnRlc3Rfc2Nhbl9zdWJfZGlyKToKKyAgICAg
ICAgKERpc3BhdGNoZXJUZXN0LnRlc3Rfc2Nhbl9zdWJfZGlyX2FzX3Jvb3QpOgorICAgICAgICAo
RGlzcGF0Y2hlclRlc3QudGVzdF9zY2FuX2Rpcl9tdXN0X3VuZGVyX3Jvb3QpOgorICAgICAgICAo
RGlzcGF0Y2hlclRlc3QudGVzdF9yZXNvdXJjZV9wYXRoX2FsaWFzKToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rl
c3QvdGVzdF9lbmR0b2VuZC5weTogQWRkZWQuCisgICAgICAgIChfZWNob19jaGVja19wcm9jZWR1
cmUpOgorICAgICAgICAoX2VjaG9fY2hlY2tfcHJvY2VkdXJlX3dpdGhfYmluYXJ5KToKKyAgICAg
ICAgKF9lY2hvX2NoZWNrX3Byb2NlZHVyZV93aXRoX2dvb2RieWUpOgorICAgICAgICAoX2VjaG9f
Y2hlY2tfcHJvY2VkdXJlX3dpdGhfY29kZV9hbmRfcmVhc29uKToKKyAgICAgICAgKF91bm1hc2tl
ZF9mcmFtZV9jaGVja19wcm9jZWR1cmUpOgorICAgICAgICAoX211eF9lY2hvX2NoZWNrX3Byb2Nl
ZHVyZSk6CisgICAgICAgIChFbmRUb0VuZFRlc3RCYXNlKToKKyAgICAgICAgKEVuZFRvRW5kVGVz
dEJhc2UuZm9yKToKKyAgICAgICAgKEVuZFRvRW5kVGVzdEJhc2Uuc2V0VXApOgorICAgICAgICAo
RW5kVG9FbmRUZXN0QmFzZS5fcnVuX3B5dGhvbl9jb21tYW5kKToKKyAgICAgICAgKEVuZFRvRW5k
VGVzdEJhc2UuX3J1bl9zZXJ2ZXIpOgorICAgICAgICAoRW5kVG9FbmRUZXN0QmFzZS5fa2lsbF9w
cm9jZXNzKToKKyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QpOgorICAgICAgICAoRW5kVG9FbmRI
eUJpVGVzdC5zZXRVcCk6CisgICAgICAgIChFbmRUb0VuZEh5QmlUZXN0Ll9ydW5fdGVzdF93aXRo
X2NsaWVudF9vcHRpb25zKToKKyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QuX3J1bl90ZXN0KToK
KyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QuX3J1bl9kZWZsYXRlX2ZyYW1lX3Rlc3QpOgorICAg
ICAgICAoRW5kVG9FbmRIeUJpVGVzdC5fcnVuX3Blcm1lc3NhZ2VfZGVmbGF0ZV90ZXN0KToKKyAg
ICAgICAgKEVuZFRvRW5kSHlCaVRlc3QuX3J1bl9jbG9zZV93aXRoX2NvZGVfYW5kX3JlYXNvbl90
ZXN0KToKKyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QuX3J1bl9odHRwX2ZhbGxiYWNrX3Rlc3Qp
OgorICAgICAgICAoRW5kVG9FbmRIeUJpVGVzdC5fcnVuX211eF90ZXN0KToKKyAgICAgICAgKEVu
ZFRvRW5kSHlCaVRlc3QudGVzdF9lY2hvKToKKyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QudGVz
dF9lY2hvX2JpbmFyeSk6CisgICAgICAgIChFbmRUb0VuZEh5QmlUZXN0LnRlc3RfZWNob19zZXJ2
ZXJfY2xvc2UpOgorICAgICAgICAoRW5kVG9FbmRIeUJpVGVzdC50ZXN0X3VubWFza2VkX2ZyYW1l
KToKKyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QudGVzdF9lY2hvX2RlZmxhdGVfZnJhbWUpOgor
ICAgICAgICAoRW5kVG9FbmRIeUJpVGVzdC50ZXN0X2VjaG9fZGVmbGF0ZV9mcmFtZV9zZXJ2ZXJf
Y2xvc2UpOgorICAgICAgICAoRW5kVG9FbmRIeUJpVGVzdC50ZXN0X2VjaG9fcGVybWVzc2FnZV9k
ZWZsYXRlKToKKyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QudGVzdF9lY2hvX3Blcm1lc3NhZ2Vf
ZGVmbGF0ZS50ZXN0X2Z1bmN0aW9uKToKKyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QudGVzdF9l
Y2hvX3Blcm1lc3NhZ2VfZGVmbGF0ZS5yZXNwb25zZV9jaGVja2VyKToKKyAgICAgICAgKEVuZFRv
RW5kSHlCaVRlc3QudGVzdF9lY2hvX3Blcm1lc3NhZ2VfZGVmbGF0ZV90d29fZnJhbWVzKToKKyAg
ICAgICAgKEVuZFRvRW5kSHlCaVRlc3QudGVzdF9lY2hvX3Blcm1lc3NhZ2VfZGVmbGF0ZV90d29f
ZnJhbWVzLnRlc3RfZnVuY3Rpb24pOgorICAgICAgICAoRW5kVG9FbmRIeUJpVGVzdC50ZXN0X2Vj
aG9fcGVybWVzc2FnZV9kZWZsYXRlX3R3b19mcmFtZXMucmVzcG9uc2VfY2hlY2tlcik6CisgICAg
ICAgIChFbmRUb0VuZEh5QmlUZXN0LnRlc3RfZWNob19wZXJtZXNzYWdlX2RlZmxhdGVfdHdvX21l
c3NhZ2VzKToKKyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QudGVzdF9lY2hvX3Blcm1lc3NhZ2Vf
ZGVmbGF0ZV90d29fbWVzc2FnZXMudGVzdF9mdW5jdGlvbik6CisgICAgICAgIChFbmRUb0VuZEh5
QmlUZXN0LnRlc3RfZWNob19wZXJtZXNzYWdlX2RlZmxhdGVfdHdvX21lc3NhZ2VzLnJlc3BvbnNl
X2NoZWNrZXIpOgorICAgICAgICAoRW5kVG9FbmRIeUJpVGVzdC50ZXN0X2VjaG9fcGVybWVzc2Fn
ZV9kZWZsYXRlX3R3b19tc2dzX3MyY19ub19jb250ZXh0X3Rha2VvdmVyKToKKyAgICAgICAgKEVu
ZFRvRW5kSHlCaVRlc3QudGVzdF9lY2hvX3Blcm1lc3NhZ2VfZGVmbGF0ZV90d29fbXNnc19zMmNf
bm9fY29udGV4dF90YWtlb3Zlci50ZXN0X2Z1bmN0aW9uKToKKyAgICAgICAgKEVuZFRvRW5kSHlC
aVRlc3QudGVzdF9lY2hvX3Blcm1lc3NhZ2VfZGVmbGF0ZV90d29fbXNnc19zMmNfbm9fY29udGV4
dF90YWtlb3Zlci5yZXNwb25zZV9jaGVja2VyKToKKyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3Qu
dGVzdF9lY2hvX3Blcm1lc3NhZ2VfZGVmbGF0ZV9wcmVmZXJlbmNlKToKKyAgICAgICAgKEVuZFRv
RW5kSHlCaVRlc3QudGVzdF9lY2hvX3Blcm1lc3NhZ2VfZGVmbGF0ZV9wcmVmZXJlbmNlLnRlc3Rf
ZnVuY3Rpb24pOgorICAgICAgICAoRW5kVG9FbmRIeUJpVGVzdC50ZXN0X2VjaG9fcGVybWVzc2Fn
ZV9kZWZsYXRlX3ByZWZlcmVuY2UucmVzcG9uc2VfY2hlY2tlcik6CisgICAgICAgIChFbmRUb0Vu
ZEh5QmlUZXN0LnRlc3RfZWNob19wZXJtZXNzYWdlX2RlZmxhdGVfd2l0aF9wYXJhbWV0ZXJzKToK
KyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QudGVzdF9lY2hvX3Blcm1lc3NhZ2VfZGVmbGF0ZV93
aXRoX3BhcmFtZXRlcnMudGVzdF9mdW5jdGlvbik6CisgICAgICAgIChFbmRUb0VuZEh5QmlUZXN0
LnRlc3RfZWNob19wZXJtZXNzYWdlX2RlZmxhdGVfd2l0aF9wYXJhbWV0ZXJzLnJlc3BvbnNlX2No
ZWNrZXIpOgorICAgICAgICAoRW5kVG9FbmRIeUJpVGVzdC50ZXN0X2VjaG9fcGVybWVzc2FnZV9k
ZWZsYXRlX3dpdGhfYmFkX3MyY19tYXhfd2luZG93X2JpdHMpOgorICAgICAgICAoRW5kVG9FbmRI
eUJpVGVzdC50ZXN0X2VjaG9fcGVybWVzc2FnZV9kZWZsYXRlX3dpdGhfYmFkX3MyY19tYXhfd2lu
ZG93X2JpdHMudGVzdF9mdW5jdGlvbik6CisgICAgICAgIChFbmRUb0VuZEh5QmlUZXN0LnRlc3Rf
ZWNob19wZXJtZXNzYWdlX2RlZmxhdGVfd2l0aF9iYWRfczJjX21heF93aW5kb3dfYml0cy5yZXNw
b25zZV9jaGVja2VyKToKKyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QudGVzdF9lY2hvX3Blcm1l
c3NhZ2VfZGVmbGF0ZV93aXRoX3VuZGVmaW5lZF9wYXJhbWV0ZXIpOgorICAgICAgICAoRW5kVG9F
bmRIeUJpVGVzdC50ZXN0X2VjaG9fcGVybWVzc2FnZV9kZWZsYXRlX3dpdGhfdW5kZWZpbmVkX3Bh
cmFtZXRlci50ZXN0X2Z1bmN0aW9uKToKKyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QudGVzdF9l
Y2hvX3Blcm1lc3NhZ2VfZGVmbGF0ZV93aXRoX3VuZGVmaW5lZF9wYXJhbWV0ZXIucmVzcG9uc2Vf
Y2hlY2tlcik6CisgICAgICAgIChFbmRUb0VuZEh5QmlUZXN0LnRlc3RfZWNob19jbG9zZV93aXRo
X2NvZGVfYW5kX3JlYXNvbik6CisgICAgICAgIChFbmRUb0VuZEh5QmlUZXN0LnRlc3RfZWNob19j
bG9zZV93aXRoX2VtcHR5X2JvZHkpOgorICAgICAgICAoRW5kVG9FbmRIeUJpVGVzdC50ZXN0X211
eF9lY2hvKToKKyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QudGVzdF9jbG9zZV9vbl9wcm90b2Nv
bF9lcnJvcik6CisgICAgICAgIChFbmRUb0VuZEh5QmlUZXN0LnRlc3RfY2xvc2Vfb25fcHJvdG9j
b2xfZXJyb3IudGVzdF9mdW5jdGlvbik6CisgICAgICAgIChFbmRUb0VuZEh5QmlUZXN0LnRlc3Rf
Y2xvc2Vfb25fdW5zdXBwb3J0ZWRfZnJhbWUpOgorICAgICAgICAoRW5kVG9FbmRIeUJpVGVzdC50
ZXN0X2Nsb3NlX29uX3Vuc3VwcG9ydGVkX2ZyYW1lLnRlc3RfZnVuY3Rpb24pOgorICAgICAgICAo
RW5kVG9FbmRIeUJpVGVzdC50ZXN0X2Nsb3NlX29uX2ludmFsaWRfZnJhbWUpOgorICAgICAgICAo
RW5kVG9FbmRIeUJpVGVzdC50ZXN0X2Nsb3NlX29uX2ludmFsaWRfZnJhbWUudGVzdF9mdW5jdGlv
bik6CisgICAgICAgIChFbmRUb0VuZEh5QmlUZXN0LnRlc3RfY2xvc2Vfb25faW50ZXJuYWxfZW5k
cG9pbnRfZXJyb3IpOgorICAgICAgICAoRW5kVG9FbmRIeUJpVGVzdC50ZXN0X2Nsb3NlX29uX2lu
dGVybmFsX2VuZHBvaW50X2Vycm9yLnRlc3RfZnVuY3Rpb24pOgorICAgICAgICAoRW5kVG9FbmRI
eUJpVGVzdC50ZXN0X2Fic29sdXRlX3VyaSk6CisgICAgICAgIChFbmRUb0VuZEh5QmlUZXN0LnRl
c3Rfb3JpZ2luX2NoZWNrKToKKyAgICAgICAgKEVuZFRvRW5kSHlCaVRlc3QudGVzdF92ZXJzaW9u
X2NoZWNrKToKKyAgICAgICAgKEVuZFRvRW5kSHlCaTAwVGVzdCk6CisgICAgICAgIChFbmRUb0Vu
ZEh5QmkwMFRlc3Quc2V0VXApOgorICAgICAgICAoRW5kVG9FbmRIeUJpMDBUZXN0Ll9ydW5fdGVz
dCk6CisgICAgICAgIChFbmRUb0VuZEh5QmkwMFRlc3QudGVzdF9lY2hvKToKKyAgICAgICAgKEVu
ZFRvRW5kSHlCaTAwVGVzdC50ZXN0X2VjaG9fc2VydmVyX2Nsb3NlKToKKyAgICAgICAgKEVuZFRv
RW5kVGVzdFdpdGhFY2hvQ2xpZW50KToKKyAgICAgICAgKEVuZFRvRW5kVGVzdFdpdGhFY2hvQ2xp
ZW50LnNldFVwKToKKyAgICAgICAgKEVuZFRvRW5kVGVzdFdpdGhFY2hvQ2xpZW50Ll9jaGVja19l
eGFtcGxlX2VjaG9fY2xpZW50X3Jlc3VsdCk6CisgICAgICAgIChFbmRUb0VuZFRlc3RXaXRoRWNo
b0NsaWVudC50ZXN0X2V4YW1wbGVfZWNob19jbGllbnQpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0
X2V4dGVuc2lvbnMucHk6IEFkZGVkLgorICAgICAgICAoRXh0ZW5zaW9uc1Rlc3QpOgorICAgICAg
ICAoRXh0ZW5zaW9uc1Rlc3QubWV0aG9kcyk6CisgICAgICAgIChFeHRlbnNpb25zVGVzdC50ZXN0
X3BhcnNlX3dpbmRvd19iaXRzKToKKyAgICAgICAgKENvbXByZXNzaW9uTWV0aG9kUGFyYW1ldGVy
UGFyc2VyVGVzdCk6CisgICAgICAgIChDb21wcmVzc2lvbk1ldGhvZFBhcmFtZXRlclBhcnNlclRl
c3QudGVzdF9wYXJzZV9tZXRob2Rfc2ltcGxlKToKKyAgICAgICAgKENvbXByZXNzaW9uTWV0aG9k
UGFyYW1ldGVyUGFyc2VyVGVzdC50ZXN0X3BhcnNlX21ldGhvZF93aXRoX3BhcmFtZXRlcik6Cisg
ICAgICAgIChDb21wcmVzc2lvbk1ldGhvZFBhcmFtZXRlclBhcnNlclRlc3QudGVzdF9wYXJzZV9t
ZXRob2Rfd2l0aF9xdW90ZWRfcGFyYW1ldGVyKToKKyAgICAgICAgKENvbXByZXNzaW9uTWV0aG9k
UGFyYW1ldGVyUGFyc2VyVGVzdC50ZXN0X3BhcnNlX21ldGhvZF9tdWx0aXBsZSk6CisgICAgICAg
IChDb21wcmVzc2lvbk1ldGhvZFBhcmFtZXRlclBhcnNlclRlc3QudGVzdF9wYXJzZV9tZXRob2Rf
bXVsdGlwbGVfbWV0aG9kc193aXRoX3F1b3RlZF9wYXJhbWV0ZXIpOgorICAgICAgICAoQ29tcHJl
c3Npb25NZXRob2RQYXJhbWV0ZXJQYXJzZXJUZXN0LnRlc3RfY3JlYXRlX21ldGhvZF9kZXNjX3Np
bXBsZSk6CisgICAgICAgIChDb21wcmVzc2lvbk1ldGhvZFBhcmFtZXRlclBhcnNlclRlc3QudGVz
dF9jcmVhdGVfbWV0aG9kX2Rlc2Nfd2l0aF9wYXJhbWV0ZXJzKToKKyAgICAgICAgKERlZmxhdGVG
cmFtZUV4dGVuc2lvblByb2Nlc3NvclBhcnNpbmdUZXN0KToKKyAgICAgICAgKERlZmxhdGVGcmFt
ZUV4dGVuc2lvblByb2Nlc3NvclBhcnNpbmdUZXN0LnRlc3RfcmVnaXN0cnkpOgorICAgICAgICAo
RGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yUGFyc2luZ1Rlc3QudGVzdF9taW5pbWFsX29m
ZmVyKToKKyAgICAgICAgKERlZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nlc3NvclBhcnNpbmdUZXN0
LnRlc3Rfb2ZmZXJfd2l0aF9tYXhfd2luZG93X2JpdHMpOgorICAgICAgICAoRGVmbGF0ZUZyYW1l
RXh0ZW5zaW9uUHJvY2Vzc29yUGFyc2luZ1Rlc3QudGVzdF9vZmZlcl93aXRoX291dF9vZl9yYW5n
ZV9tYXhfd2luZG93X2JpdHMpOgorICAgICAgICAoRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vz
c29yUGFyc2luZ1Rlc3QudGVzdF9vZmZlcl93aXRoX21heF93aW5kb3dfYml0c193aXRob3V0X3Zh
bHVlKToKKyAgICAgICAgKERlZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nlc3NvclBhcnNpbmdUZXN0
LnRlc3Rfb2ZmZXJfd2l0aF9ub19jb250ZXh0X3Rha2VvdmVyKToKKyAgICAgICAgKERlZmxhdGVG
cmFtZUV4dGVuc2lvblByb2Nlc3NvclBhcnNpbmdUZXN0LnRlc3Rfb2ZmZXJfd2l0aF9ub19jb250
ZXh0X3Rha2VvdmVyX3dpdGhfdmFsdWUpOgorICAgICAgICAoRGVmbGF0ZUZyYW1lRXh0ZW5zaW9u
UHJvY2Vzc29yUGFyc2luZ1Rlc3QudGVzdF9vZmZlcl93aXRoX3Vua25vd25fcGFyYW1ldGVyKToK
KyAgICAgICAgKFBlckZyYW1lQ29tcHJlc3NFeHRlbnNpb25Qcm9jZXNzb3JUZXN0KToKKyAgICAg
ICAgKFBlckZyYW1lQ29tcHJlc3NFeHRlbnNpb25Qcm9jZXNzb3JUZXN0LnRlc3RfcmVnaXN0cnkp
OgorICAgICAgICAoUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3JQYXJzaW5nVGVz
dCk6CisgICAgICAgIChQZXJNZXNzYWdlRGVmbGF0ZUV4dGVuc2lvblByb2Nlc3NvclBhcnNpbmdU
ZXN0LnRlc3RfcmVnaXN0cnkpOgorICAgICAgICAoUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Q
cm9jZXNzb3JQYXJzaW5nVGVzdC50ZXN0X21pbmltYWxfb2ZmZXIpOgorICAgICAgICAoUGVyTWVz
c2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3JQYXJzaW5nVGVzdC50ZXN0X29mZmVyX3dpdGhf
bWF4X3dpbmRvd19iaXRzKToKKyAgICAgICAgKFBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJv
Y2Vzc29yUGFyc2luZ1Rlc3QudGVzdF9vZmZlcl93aXRoX291dF9vZl9yYW5nZV9tYXhfd2luZG93
X2JpdHMpOgorICAgICAgICAoUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3JQYXJz
aW5nVGVzdC50ZXN0X29mZmVyX3dpdGhfbWF4X3dpbmRvd19iaXRzX3dpdGhvdXRfdmFsdWUpOgor
ICAgICAgICAoUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3JQYXJzaW5nVGVzdC50
ZXN0X29mZmVyX3dpdGhfbm9fY29udGV4dF90YWtlb3Zlcik6CisgICAgICAgIChQZXJNZXNzYWdl
RGVmbGF0ZUV4dGVuc2lvblByb2Nlc3NvclBhcnNpbmdUZXN0LnRlc3Rfb2ZmZXJfd2l0aF9ub19j
b250ZXh0X3Rha2VvdmVyX3dpdGhfdmFsdWUpOgorICAgICAgICAoUGVyTWVzc2FnZURlZmxhdGVF
eHRlbnNpb25Qcm9jZXNzb3JQYXJzaW5nVGVzdC50ZXN0X29mZmVyX3dpdGhfdW5rbm93bl9wYXJh
bWV0ZXIpOgorICAgICAgICAoUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3JCdWls
ZGluZ1Rlc3QpOgorICAgICAgICAoUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3JC
dWlsZGluZ1Rlc3QudGVzdF9yZXNwb25zZV93aXRoX21heF93aW5kb3dfYml0cyk6CisgICAgICAg
IChQZXJNZXNzYWdlRGVmbGF0ZUV4dGVuc2lvblByb2Nlc3NvckJ1aWxkaW5nVGVzdC50ZXN0X3Jl
c3BvbnNlX3dpdGhfbWF4X3dpbmRvd19iaXRzX3dpdGhvdXRfY2xpZW50X3Blcm1pc3Npb24pOgor
ICAgICAgICAoUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3JCdWlsZGluZ1Rlc3Qu
dGVzdF9yZXNwb25zZV93aXRoX3RydWVfZm9yX25vX2NvbnRleHRfdGFrZW92ZXIpOgorICAgICAg
ICAoUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3JCdWlsZGluZ1Rlc3QudGVzdF9y
ZXNwb25zZV93aXRoX2ZhbHNlX2Zvcl9ub19jb250ZXh0X3Rha2VvdmVyKToKKyAgICAgICAgKFBl
ck1lc3NhZ2VDb21wcmVzc0V4dGVuc2lvblByb2Nlc3NvclRlc3QpOgorICAgICAgICAoUGVyTWVz
c2FnZUNvbXByZXNzRXh0ZW5zaW9uUHJvY2Vzc29yVGVzdC50ZXN0X3JlZ2lzdHJ5KToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2Nr
ZXQvc3JjL3Rlc3QvdGVzdF9oYW5kc2hha2UucHk6IEFkZGVkLgorICAgICAgICAoVmFsaWRhdGVT
dWJwcm90b2NvbFRlc3QpOgorICAgICAgICAoVmFsaWRhdGVTdWJwcm90b2NvbFRlc3QudGVzdF92
YWxpZGF0ZV9zdWJwcm90b2NvbCk6CisgICAgICAgIChFeHRlbnNpb25zUGFyc2VyVGVzdCk6Cisg
ICAgICAgIChFeHRlbnNpb25zUGFyc2VyVGVzdC5fdmVyaWZ5X2V4dGVuc2lvbl9saXN0KToKKyAg
ICAgICAgKEV4dGVuc2lvbnNQYXJzZXJUZXN0LnRlc3RfcGFyc2UpOgorICAgICAgICAoRXh0ZW5z
aW9uc1BhcnNlclRlc3QudGVzdF9wYXJzZV93aXRoX2FsbG93X3F1b3RlZF9zdHJpbmcpOgorICAg
ICAgICAoRXh0ZW5zaW9uc1BhcnNlclRlc3QudGVzdF9wYXJzZV9yZWR1bmRhbnRfZGF0YSk6Cisg
ICAgICAgIChFeHRlbnNpb25zUGFyc2VyVGVzdC50ZXN0X3BhcnNlX3JlZHVuZGFudF9kYXRhX3dp
dGhfYWxsb3dfcXVvdGVkX3N0cmluZyk6CisgICAgICAgIChFeHRlbnNpb25zUGFyc2VyVGVzdC50
ZXN0X3BhcnNlX2JhZF9kYXRhKToKKyAgICAgICAgKEZvcm1hdEV4dGVuc2lvbnNUZXN0KToKKyAg
ICAgICAgKEZvcm1hdEV4dGVuc2lvbnNUZXN0LnRlc3RfZm9ybWF0X2V4dGVuc2lvbnMpOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNv
Y2tldC9zcmMvdGVzdC90ZXN0X2hhbmRzaGFrZV9oeWJpLnB5OiBBZGRlZC4KKyAgICAgICAgKFJl
cXVlc3REZWZpbml0aW9uKToKKyAgICAgICAgKFJlcXVlc3REZWZpbml0aW9uLmZvcik6CisgICAg
ICAgIChSZXF1ZXN0RGVmaW5pdGlvbi5fX2luaXRfXyk6CisgICAgICAgIChfY3JlYXRlX2dvb2Rf
cmVxdWVzdF9kZWYpOgorICAgICAgICAoX2NyZWF0ZV9yZXF1ZXN0KToKKyAgICAgICAgKF9jcmVh
dGVfaGFuZHNoYWtlcik6CisgICAgICAgIChTdWJwcm90b2NvbENob29zaW5nRGlzcGF0Y2hlcik6
CisgICAgICAgIChTdWJwcm90b2NvbENob29zaW5nRGlzcGF0Y2hlci5fX2luaXRfXyk6CisgICAg
ICAgIChTdWJwcm90b2NvbENob29zaW5nRGlzcGF0Y2hlci5kb19leHRyYV9oYW5kc2hha2UpOgor
ICAgICAgICAoU3VicHJvdG9jb2xDaG9vc2luZ0Rpc3BhdGNoZXIudHJhbnNmZXJfZGF0YSk6Cisg
ICAgICAgIChIYW5kc2hha2VBYm9ydGVkRXhjZXB0aW9uKToKKyAgICAgICAgKEFib3J0aW5nRGlz
cGF0Y2hlcik6CisgICAgICAgIChBYm9ydGluZ0Rpc3BhdGNoZXIuZG9fZXh0cmFfaGFuZHNoYWtl
KToKKyAgICAgICAgKEFib3J0aW5nRGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKToKKyAgICAgICAg
KEFib3J0ZWRCeVVzZXJEaXNwYXRjaGVyKToKKyAgICAgICAgKEFib3J0ZWRCeVVzZXJEaXNwYXRj
aGVyLmRvX2V4dHJhX2hhbmRzaGFrZSk6CisgICAgICAgIChBYm9ydGVkQnlVc2VyRGlzcGF0Y2hl
ci50cmFuc2Zlcl9kYXRhKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0KToKKyAgICAgICAgKEhh
bmRzaGFrZXJUZXN0LnRlc3RfZG9faGFuZHNoYWtlKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0
LnRlc3RfZG9faGFuZHNoYWtlX3dpdGhfZXh0cmFfaGVhZGVycyk6CisgICAgICAgIChIYW5kc2hh
a2VyVGVzdC50ZXN0X2RvX2hhbmRzaGFrZV93aXRoX2NhcGl0YWxpemVkX3ZhbHVlKToKKyAgICAg
ICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfZG9faGFuZHNoYWtlX3dpdGhfbXVsdGlwbGVfY29ubmVj
dGlvbl92YWx1ZXMpOgorICAgICAgICAoSGFuZHNoYWtlclRlc3QudGVzdF9hYm9ydGluZ19oYW5k
c2hha2UpOgorICAgICAgICAoSGFuZHNoYWtlclRlc3QudGVzdF9kb19oYW5kc2hha2Vfd2l0aF9w
cm90b2NvbCk6CisgICAgICAgIChIYW5kc2hha2VyVGVzdC50ZXN0X2RvX2hhbmRzaGFrZV9wcm90
b2NvbF9ub3RfaW5fcmVxdWVzdF9idXRfaW5fcmVzcG9uc2UpOgorICAgICAgICAoSGFuZHNoYWtl
clRlc3QudGVzdF9kb19oYW5kc2hha2Vfd2l0aF9wcm90b2NvbF9ub19wcm90b2NvbF9zZWxlY3Rp
b24pOgorICAgICAgICAoSGFuZHNoYWtlclRlc3QudGVzdF9kb19oYW5kc2hha2Vfd2l0aF9leHRl
bnNpb25zKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfZG9faGFuZHNoYWtlX3dpdGhf
cGVyZnJhbWVfY29tcHJlc3MpOgorICAgICAgICAoSGFuZHNoYWtlclRlc3QudGVzdF9kb19oYW5k
c2hha2Vfd2l0aF9wZXJtZXNzYWdlX2NvbXByZXNzKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0
LnRlc3RfZG9faGFuZHNoYWtlX3dpdGhfcXVvdGVkX2V4dGVuc2lvbnMpOgorICAgICAgICAoSGFu
ZHNoYWtlclRlc3QudGVzdF9kb19oYW5kc2hha2Vfd2l0aF9vcHRpb25hbF9oZWFkZXJzKToKKyAg
ICAgICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfYWJvcnRfZXh0cmFfaGFuZHNoYWtlKToKKyAgICAg
ICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfZG9faGFuZHNoYWtlX3dpdGhfbXV4X2FuZF9kZWZsYXRl
X2ZyYW1lKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfZG9faGFuZHNoYWtlX3dpdGhf
ZGVmbGF0ZV9mcmFtZV9hbmRfbXV4KToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfZG9f
aGFuZHNoYWtlX3dpdGhfcGVybWVzc2FnZV9jb21wcmVzc19hbmRfbXV4KToKKyAgICAgICAgKEhh
bmRzaGFrZXJUZXN0LnRlc3RfZG9faGFuZHNoYWtlX3dpdGhfbXV4X2FuZF9wZXJtZXNzYWdlX2Nv
bXByZXNzKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfYmFkX3JlcXVlc3RzKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJz
b2NrZXQvc3JjL3Rlc3QvdGVzdF9oYW5kc2hha2VfaHliaTAwLnB5OiBBZGRlZC4KKyAgICAgICAg
KF9jcmVhdGVfcmVxdWVzdCk6CisgICAgICAgIChfY3JlYXRlX2dldF9tZW1vcml6ZWRfbGluZXMp
OgorICAgICAgICAoX2NyZWF0ZV9nZXRfbWVtb3JpemVkX2xpbmVzLmdldF9tZW1vcml6ZWRfbGlu
ZXMpOgorICAgICAgICAoX2NyZWF0ZV9yZXF1ZXN0c193aXRoX2xpbmVzKToKKyAgICAgICAgKEh5
QmkwMEhhbmRzaGFrZXJUZXN0KToKKyAgICAgICAgKEh5QmkwMEhhbmRzaGFrZXJUZXN0LnRlc3Rf
Z29vZF9yZXF1ZXN0X2RlZmF1bHRfcG9ydCk6CisgICAgICAgIChIeUJpMDBIYW5kc2hha2VyVGVz
dC50ZXN0X2dvb2RfcmVxdWVzdF9jYXBpdGFsaXplZF9oZWFkZXJfdmFsdWVzKToKKyAgICAgICAg
KEh5QmkwMEhhbmRzaGFrZXJUZXN0LnRlc3RfZ29vZF9yZXF1ZXN0X2Nhc2VfbWl4ZWRfaGVhZGVy
X25hbWVzKToKKyAgICAgICAgKEh5QmkwMEhhbmRzaGFrZXJUZXN0LnRlc3RfZ29vZF9yZXF1ZXN0
X3NlY3VyZV9kZWZhdWx0X3BvcnQpOgorICAgICAgICAoSHlCaTAwSGFuZHNoYWtlclRlc3QudGVz
dF9nb29kX3JlcXVlc3Rfbm9uZGVmYXVsdF9wb3J0KToKKyAgICAgICAgKEh5QmkwMEhhbmRzaGFr
ZXJUZXN0LnRlc3RfZ29vZF9yZXF1ZXN0X3NlY3VyZV9ub25fZGVmYXVsdF9wb3J0KToKKyAgICAg
ICAgKEh5QmkwMEhhbmRzaGFrZXJUZXN0LnRlc3RfZ29vZF9yZXF1ZXN0X2RlZmF1bHRfbm9fcHJv
dG9jb2wpOgorICAgICAgICAoSHlCaTAwSGFuZHNoYWtlclRlc3QudGVzdF9nb29kX3JlcXVlc3Rf
b3B0aW9uYWxfaGVhZGVycyk6CisgICAgICAgIChIeUJpMDBIYW5kc2hha2VyVGVzdC50ZXN0X2dv
b2RfcmVxdWVzdF93aXRoX25vbnByaW50YWJsZV9rZXkpOgorICAgICAgICAoSHlCaTAwSGFuZHNo
YWtlclRlc3QudGVzdF9nb29kX3JlcXVlc3Rfd2l0aF9xdWVyeV9wYXJ0KToKKyAgICAgICAgKEh5
QmkwMEhhbmRzaGFrZXJUZXN0LnRlc3RfYmFkX3JlcXVlc3RzKToKKyAgICAgICAgKEh5QmkwMFZh
bGlkYXRlU3VicHJvdG9jb2xUZXN0KToKKyAgICAgICAgKEh5QmkwMFZhbGlkYXRlU3VicHJvdG9j
b2xUZXN0LnRlc3RfdmFsaWRhdGVfc3VicHJvdG9jb2wpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0
X2hhbmRzaGFrZV9oeWJpMDgucHk6IEFkZGVkLgorICAgICAgICAoX2NyZWF0ZV9nb29kX3JlcXVl
c3RfZGVmKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0KToKKyAgICAgICAgKEhhbmRzaGFrZXJU
ZXN0LnRlc3RfZG9faGFuZHNoYWtlKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfZG9f
aGFuZHNoYWtlX3dpdGhfY2FwaXRhbGl6ZWRfdmFsdWUpOgorICAgICAgICAoSGFuZHNoYWtlclRl
c3QudGVzdF9kb19oYW5kc2hha2Vfd2l0aF9tdWx0aXBsZV9jb25uZWN0aW9uX3ZhbHVlcyk6Cisg
ICAgICAgIChIYW5kc2hha2VyVGVzdC50ZXN0X2Fib3J0aW5nX2hhbmRzaGFrZSk6CisgICAgICAg
IChIYW5kc2hha2VyVGVzdC50ZXN0X2RvX2hhbmRzaGFrZV93aXRoX3Byb3RvY29sKToKKyAgICAg
ICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfZG9faGFuZHNoYWtlX3Byb3RvY29sX25vdF9pbl9yZXF1
ZXN0X2J1dF9pbl9yZXNwb25zZSk6CisgICAgICAgIChIYW5kc2hha2VyVGVzdC50ZXN0X2RvX2hh
bmRzaGFrZV93aXRoX3Byb3RvY29sX25vX3Byb3RvY29sX3NlbGVjdGlvbik6CisgICAgICAgIChI
YW5kc2hha2VyVGVzdC50ZXN0X2RvX2hhbmRzaGFrZV93aXRoX2V4dGVuc2lvbnMpOgorICAgICAg
ICAoSGFuZHNoYWtlclRlc3QudGVzdF9kb19oYW5kc2hha2Vfd2l0aF9xdW90ZWRfZXh0ZW5zaW9u
cyk6CisgICAgICAgIChIYW5kc2hha2VyVGVzdC50ZXN0X2RvX2hhbmRzaGFrZV93aXRoX29wdGlv
bmFsX2hlYWRlcnMpOgorICAgICAgICAoSGFuZHNoYWtlclRlc3QudGVzdF9hYm9ydF9leHRyYV9o
YW5kc2hha2UpOgorICAgICAgICAoSGFuZHNoYWtlclRlc3QudGVzdF9iYWRfcmVxdWVzdHMpOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdl
YnNvY2tldC9zcmMvdGVzdC90ZXN0X2h0dHBfaGVhZGVyX3V0aWwucHk6IEFkZGVkLgorICAgICAg
ICAoVW5pdFRlc3QpOgorICAgICAgICAoVW5pdFRlc3QudGVzdF9wYXJzZV9yZWxhdGl2ZV91cmkp
OgorICAgICAgICAoVW5pdFRlc3QudGVzdF9wYXJzZV9hYnNvbHV0ZV91cmkpOgorICAgICAgICAo
VW5pdFRlc3QudGVzdF9wYXJzZV9pbnZhbGlkX3VyaSk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3Rf
bWVtb3JpemluZ2ZpbGUucHk6IEFkZGVkLgorICAgICAgICAoVXRpbFRlc3QpOgorICAgICAgICAo
VXRpbFRlc3QuY2hlY2spOgorICAgICAgICAoVXRpbFRlc3QuY2hlY2tfd2l0aF9zaXplKToKKyAg
ICAgICAgKFV0aWxUZXN0LnRlc3RfZ2V0X21lbW9yaXplZF9saW5lcyk6CisgICAgICAgIChVdGls
VGVzdC50ZXN0X2dldF9tZW1vcml6ZWRfbGluZXNfbGltaXRfbWVtb3JpemVkX2xpbmVzKToKKyAg
ICAgICAgKFV0aWxUZXN0LnRlc3RfZ2V0X21lbW9yaXplZF9saW5lc19lbXB0eV9maWxlKToKKyAg
ICAgICAgKFV0aWxUZXN0LnRlc3RfZ2V0X21lbW9yaXplZF9saW5lc193aXRoX3NpemUpOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNv
Y2tldC9zcmMvdGVzdC90ZXN0X21vY2sucHk6IEFkZGVkLgorICAgICAgICAoTW9ja0Nvbm5UZXN0
KToKKyAgICAgICAgKE1vY2tDb25uVGVzdC5zZXRVcCk6CisgICAgICAgIChNb2NrQ29ublRlc3Qu
dGVzdF9yZWFkbGluZSk6CisgICAgICAgIChNb2NrQ29ublRlc3QudGVzdF9yZWFkKToKKyAgICAg
ICAgKE1vY2tDb25uVGVzdC50ZXN0X3JlYWRfYW5kX3JlYWRsaW5lKToKKyAgICAgICAgKE1vY2tD
b25uVGVzdC50ZXN0X3dyaXRlKToKKyAgICAgICAgKE1vY2tCbG9ja2luZ0Nvbm5UZXN0KToKKyAg
ICAgICAgKE1vY2tCbG9ja2luZ0Nvbm5UZXN0LnRlc3RfcmVhZCk6CisgICAgICAgIChNb2NrQmxv
Y2tpbmdDb25uVGVzdC50ZXN0X3JlYWQuTGluZVJlYWRlcik6CisgICAgICAgIChNb2NrQmxvY2tp
bmdDb25uVGVzdC50ZXN0X3JlYWQuTGluZVJlYWRlci50aGF0KToKKyAgICAgICAgKE1vY2tCbG9j
a2luZ0Nvbm5UZXN0LnRlc3RfcmVhZC5MaW5lUmVhZGVyLl9faW5pdF9fKToKKyAgICAgICAgKE1v
Y2tCbG9ja2luZ0Nvbm5UZXN0LnRlc3RfcmVhZC5MaW5lUmVhZGVyLnJ1bik6CisgICAgICAgIChN
b2NrVGFibGVUZXN0KToKKyAgICAgICAgKE1vY2tUYWJsZVRlc3QudGVzdF9jcmVhdGVfZnJvbV9k
aWN0KToKKyAgICAgICAgKE1vY2tUYWJsZVRlc3QudGVzdF9jcmVhdGVfZnJvbV9saXN0KToKKyAg
ICAgICAgKE1vY2tUYWJsZVRlc3QudGVzdF9jcmVhdGVfZnJvbV90dXBsZSk6CisgICAgICAgIChN
b2NrVGFibGVUZXN0LnRlc3Rfc2V0X2FuZF9nZXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0X21z
Z3V0aWwucHk6IEFkZGVkLgorICAgICAgICAoX21hc2tfaHliaSk6CisgICAgICAgIChfaW5zdGFs
bF9leHRlbnNpb25fcHJvY2Vzc29yKToKKyAgICAgICAgKF9jcmVhdGVfcmVxdWVzdF9mcm9tX3Jh
d2RhdGEpOgorICAgICAgICAoX2NyZWF0ZV9yZXF1ZXN0KToKKyAgICAgICAgKF9jcmVhdGVfYmxv
Y2tpbmdfcmVxdWVzdCk6CisgICAgICAgIChfY3JlYXRlX3JlcXVlc3RfaGl4aWU3NSk6CisgICAg
ICAgIChfY3JlYXRlX2Jsb2NraW5nX3JlcXVlc3RfaGl4aWU3NSk6CisgICAgICAgIChCYXNpY01l
c3NhZ2VUZXN0KToKKyAgICAgICAgKEJhc2ljTWVzc2FnZVRlc3QudGVzdF9zZW5kX21lc3NhZ2Up
OgorICAgICAgICAoQmFzaWNNZXNzYWdlVGVzdC50ZXN0X3NlbmRfbWVkaXVtX21lc3NhZ2UpOgor
ICAgICAgICAoQmFzaWNNZXNzYWdlVGVzdC50ZXN0X3NlbmRfbGFyZ2VfbWVzc2FnZSk6CisgICAg
ICAgIChCYXNpY01lc3NhZ2VUZXN0LnRlc3Rfc2VuZF9tZXNzYWdlX3VuaWNvZGUpOgorICAgICAg
ICAoQmFzaWNNZXNzYWdlVGVzdC50ZXN0X3NlbmRfbWVzc2FnZV9mcmFnbWVudHMpOgorICAgICAg
ICAoQmFzaWNNZXNzYWdlVGVzdC50ZXN0X3NlbmRfZnJhZ21lbnRzX2ltbWVkaWF0ZV96ZXJvX3Rl
cm1pbmF0aW9uKToKKyAgICAgICAgKEJhc2ljTWVzc2FnZVRlc3QudGVzdF9yZWNlaXZlX21lc3Nh
Z2UpOgorICAgICAgICAoQmFzaWNNZXNzYWdlVGVzdC50ZXN0X3JlY2VpdmVfbWVkaXVtX21lc3Nh
Z2UpOgorICAgICAgICAoQmFzaWNNZXNzYWdlVGVzdC50ZXN0X3JlY2VpdmVfbGFyZ2VfbWVzc2Fn
ZSk6CisgICAgICAgIChCYXNpY01lc3NhZ2VUZXN0LnRlc3RfcmVjZWl2ZV9sZW5ndGhfbm90X2Vu
Y29kZWRfdXNpbmdfbWluaW1hbF9udW1iZXJfb2ZfYnl0ZXMpOgorICAgICAgICAoQmFzaWNNZXNz
YWdlVGVzdC50ZXN0X3JlY2VpdmVfbWVzc2FnZV91bmljb2RlKToKKyAgICAgICAgKEJhc2ljTWVz
c2FnZVRlc3QudGVzdF9yZWNlaXZlX21lc3NhZ2VfZXJyb25lb3VzX3VuaWNvZGUpOgorICAgICAg
ICAoQmFzaWNNZXNzYWdlVGVzdC50ZXN0X3JlY2VpdmVfZnJhZ21lbnRzKToKKyAgICAgICAgKEJh
c2ljTWVzc2FnZVRlc3QudGVzdF9yZWNlaXZlX2ZyYWdtZW50c191bmljb2RlKToKKyAgICAgICAg
KEJhc2ljTWVzc2FnZVRlc3QudGVzdF9yZWNlaXZlX2ZyYWdtZW50c19pbW1lZGlhdGVfemVyb190
ZXJtaW5hdGlvbik6CisgICAgICAgIChCYXNpY01lc3NhZ2VUZXN0LnRlc3RfcmVjZWl2ZV9mcmFn
bWVudHNfZHVwbGljYXRlX3N0YXJ0KToKKyAgICAgICAgKEJhc2ljTWVzc2FnZVRlc3QudGVzdF9y
ZWNlaXZlX2ZyYWdtZW50c19pbnRlcm1lZGlhdGVfYnV0X25vdF9zdGFydGVkKToKKyAgICAgICAg
KEJhc2ljTWVzc2FnZVRlc3QudGVzdF9yZWNlaXZlX2ZyYWdtZW50c19lbmRfYnV0X25vdF9zdGFy
dGVkKToKKyAgICAgICAgKEJhc2ljTWVzc2FnZVRlc3QudGVzdF9yZWNlaXZlX21lc3NhZ2VfZGlz
Y2FyZCk6CisgICAgICAgIChCYXNpY01lc3NhZ2VUZXN0LnRlc3RfcmVjZWl2ZV9jbG9zZSk6Cisg
ICAgICAgIChCYXNpY01lc3NhZ2VUZXN0LnRlc3Rfc2VuZF9sb25nZXN0X2Nsb3NlKToKKyAgICAg
ICAgKEJhc2ljTWVzc2FnZVRlc3QudGVzdF9zZW5kX2Nsb3NlX3Rvb19sb25nKToKKyAgICAgICAg
KEJhc2ljTWVzc2FnZVRlc3QudGVzdF9zZW5kX2Nsb3NlX2luY29uc2lzdGVudF9jb2RlX2FuZF9y
ZWFzb24pOgorICAgICAgICAoQmFzaWNNZXNzYWdlVGVzdC50ZXN0X3NlbmRfcGluZyk6CisgICAg
ICAgIChCYXNpY01lc3NhZ2VUZXN0LnRlc3Rfc2VuZF9sb25nZXN0X3BpbmcpOgorICAgICAgICAo
QmFzaWNNZXNzYWdlVGVzdC50ZXN0X3NlbmRfcGluZ190b29fbG9uZyk6CisgICAgICAgIChCYXNp
Y01lc3NhZ2VUZXN0LnRlc3RfcmVjZWl2ZV9waW5nKToKKyAgICAgICAgKEJhc2ljTWVzc2FnZVRl
c3QudGVzdF9yZWNlaXZlX3BpbmcuaGFuZGxlcik6CisgICAgICAgIChCYXNpY01lc3NhZ2VUZXN0
LnRlc3RfcmVjZWl2ZV9sb25nZXN0X3BpbmcpOgorICAgICAgICAoQmFzaWNNZXNzYWdlVGVzdC50
ZXN0X3JlY2VpdmVfcGluZ190b29fbG9uZyk6CisgICAgICAgIChCYXNpY01lc3NhZ2VUZXN0LnRl
c3RfcmVjZWl2ZV9wb25nKToKKyAgICAgICAgKEJhc2ljTWVzc2FnZVRlc3QudGVzdF9yZWNlaXZl
X3BvbmcuaGFuZGxlcik6CisgICAgICAgIChCYXNpY01lc3NhZ2VUZXN0LnRlc3RfcmVjZWl2ZV91
bnNvbGljaXRlZF9wb25nKToKKyAgICAgICAgKEJhc2ljTWVzc2FnZVRlc3QudGVzdF9waW5nX2Nh
bm5vdF9iZV9mcmFnbWVudGVkKToKKyAgICAgICAgKEJhc2ljTWVzc2FnZVRlc3QudGVzdF9waW5n
X3dpdGhfdG9vX2xvbmdfcGF5bG9hZCk6CisgICAgICAgIChEZWZsYXRlRnJhbWVUZXN0KToKKyAg
ICAgICAgKERlZmxhdGVGcmFtZVRlc3QudGVzdF9zZW5kX21lc3NhZ2UpOgorICAgICAgICAoRGVm
bGF0ZUZyYW1lVGVzdC50ZXN0X3NlbmRfbWVzc2FnZV9iZmluYWwpOgorICAgICAgICAoRGVmbGF0
ZUZyYW1lVGVzdC50ZXN0X3NlbmRfbWVzc2FnZV9jb21wX2JpdCk6CisgICAgICAgIChEZWZsYXRl
RnJhbWVUZXN0LnRlc3Rfc2VuZF9tZXNzYWdlX25vX2NvbnRleHRfdGFrZW92ZXJfcGFyYW1ldGVy
KToKKyAgICAgICAgKERlZmxhdGVGcmFtZVRlc3QudGVzdF9iYWRfcmVxdWVzdF9wYXJhbWV0ZXJz
KToKKyAgICAgICAgKERlZmxhdGVGcmFtZVRlc3QudGVzdF9yZXNwb25zZV9wYXJhbWV0ZXJzKToK
KyAgICAgICAgKERlZmxhdGVGcmFtZVRlc3QudGVzdF9yZWNlaXZlX21lc3NhZ2UpOgorICAgICAg
ICAoRGVmbGF0ZUZyYW1lVGVzdC50ZXN0X3JlY2VpdmVfbWVzc2FnZV9jbGllbnRfdXNpbmdfc21h
bGxlcl93aW5kb3cpOgorICAgICAgICAoRGVmbGF0ZUZyYW1lVGVzdC50ZXN0X3JlY2VpdmVfbWVz
c2FnZV9jb21wX2JpdCk6CisgICAgICAgIChQZXJNZXNzYWdlRGVmbGF0ZVRlc3QpOgorICAgICAg
ICAoUGVyTWVzc2FnZURlZmxhdGVUZXN0LnRlc3Rfc2VuZF9tZXNzYWdlKToKKyAgICAgICAgKFBl
ck1lc3NhZ2VEZWZsYXRlVGVzdC50ZXN0X3NlbmRfbWVzc2FnZV91c2luZ19zbWFsbF93aW5kb3cp
OgorICAgICAgICAoUGVyTWVzc2FnZURlZmxhdGVUZXN0LnRlc3RfcmVjZWl2ZV9tZXNzYWdlX2Rl
ZmxhdGUpOgorICAgICAgICAoUGVyTWVzc2FnZUNvbXByZXNzVGVzdCk6CisgICAgICAgIChQZXJN
ZXNzYWdlQ29tcHJlc3NUZXN0LnRlc3RfZGVmbGF0ZV9yZXNwb25zZV9wYXJhbWV0ZXJzKToKKyAg
ICAgICAgKFBlck1lc3NhZ2VDb21wcmVzc1Rlc3QudGVzdF9kZWZsYXRlX3Jlc3BvbnNlX3BhcmFt
ZXRlcnMuX2NvbXByZXNzaW9uX3Byb2Nlc3Nvcl9ob29rKToKKyAgICAgICAgKFBlck1lc3NhZ2VD
b21wcmVzc1Rlc3QudGVzdF9zZW5kX21lc3NhZ2VfZGVmbGF0ZV9lbXB0eSk6CisgICAgICAgIChQ
ZXJNZXNzYWdlQ29tcHJlc3NUZXN0LnRlc3Rfc2VuZF9tZXNzYWdlX2RlZmxhdGVfbnVsbF9jaGFy
YWN0ZXIpOgorICAgICAgICAoUGVyTWVzc2FnZUNvbXByZXNzVGVzdC50ZXN0X3NlbmRfbWVzc2Fn
ZV9kZWZsYXRlKToKKyAgICAgICAgKFBlck1lc3NhZ2VDb21wcmVzc1Rlc3QudGVzdF9zZW5kX21l
c3NhZ2VfZGVmbGF0ZV9mcmFnbWVudGVkKToKKyAgICAgICAgKFBlck1lc3NhZ2VDb21wcmVzc1Rl
c3QudGVzdF9zZW5kX21lc3NhZ2VfZGVmbGF0ZV9mcmFnbWVudGVkX2JmaW5hbCk6CisgICAgICAg
IChQZXJNZXNzYWdlQ29tcHJlc3NUZXN0LnRlc3RfcmVjZWl2ZV9tZXNzYWdlX2RlZmxhdGUpOgor
ICAgICAgICAoUGVyTWVzc2FnZUNvbXByZXNzVGVzdC50ZXN0X3JlY2VpdmVfbWVzc2FnZV9kZWZs
YXRlX3JhbmRvbV9zZWN0aW9uKToKKyAgICAgICAgKFBlck1lc3NhZ2VDb21wcmVzc1Rlc3QudGVz
dF9yZWNlaXZlX21lc3NhZ2VfZGVmbGF0ZV9taXhlZF9idHlwZSk6CisgICAgICAgIChQZXJGcmFt
ZUNvbXByZXNzVGVzdCk6CisgICAgICAgIChQZXJGcmFtZUNvbXByZXNzVGVzdC50ZXN0X3NlbmRf
bWVzc2FnZV9kZWZsYXRlKToKKyAgICAgICAgKFBlckZyYW1lQ29tcHJlc3NUZXN0LnRlc3RfcmVj
ZWl2ZV9tZXNzYWdlX3ZhcmlvdXNfYnR5cGUpOgorICAgICAgICAoTWVzc2FnZVRlc3RIaXhpZTc1
KToKKyAgICAgICAgKE1lc3NhZ2VUZXN0SGl4aWU3NS50ZXN0X3NlbmRfbWVzc2FnZSk6CisgICAg
ICAgIChNZXNzYWdlVGVzdEhpeGllNzUudGVzdF9zZW5kX21lc3NhZ2VfdW5pY29kZSk6CisgICAg
ICAgIChNZXNzYWdlVGVzdEhpeGllNzUudGVzdF9yZWNlaXZlX21lc3NhZ2UpOgorICAgICAgICAo
TWVzc2FnZVRlc3RIaXhpZTc1LnRlc3RfcmVjZWl2ZV9tZXNzYWdlX3VuaWNvZGUpOgorICAgICAg
ICAoTWVzc2FnZVRlc3RIaXhpZTc1LnRlc3RfcmVjZWl2ZV9tZXNzYWdlX2Vycm9uZW91c191bmlj
b2RlKToKKyAgICAgICAgKE1lc3NhZ2VUZXN0SGl4aWU3NS50ZXN0X3JlY2VpdmVfbWVzc2FnZV9k
aXNjYXJkKToKKyAgICAgICAgKE1lc3NhZ2VSZWNlaXZlclRlc3QpOgorICAgICAgICAoTWVzc2Fn
ZVJlY2VpdmVyVGVzdC51c2luZyk6CisgICAgICAgIChNZXNzYWdlUmVjZWl2ZXJUZXN0LnRlc3Rf
cXVldWUpOgorICAgICAgICAoTWVzc2FnZVJlY2VpdmVyVGVzdC50ZXN0X29ubWVzc2FnZSk6Cisg
ICAgICAgIChNZXNzYWdlUmVjZWl2ZXJUZXN0LnRlc3Rfb25tZXNzYWdlLm9ubWVzc2FnZV9oYW5k
bGVyKToKKyAgICAgICAgKE1lc3NhZ2VSZWNlaXZlckhpeGllNzVUZXN0KToKKyAgICAgICAgKE1l
c3NhZ2VSZWNlaXZlckhpeGllNzVUZXN0LnVzaW5nKToKKyAgICAgICAgKE1lc3NhZ2VSZWNlaXZl
ckhpeGllNzVUZXN0LnRlc3RfcXVldWUpOgorICAgICAgICAoTWVzc2FnZVJlY2VpdmVySGl4aWU3
NVRlc3QudGVzdF9vbm1lc3NhZ2UpOgorICAgICAgICAoTWVzc2FnZVJlY2VpdmVySGl4aWU3NVRl
c3QudGVzdF9vbm1lc3NhZ2Uub25tZXNzYWdlX2hhbmRsZXIpOgorICAgICAgICAoTWVzc2FnZVNl
bmRlclRlc3QpOgorICAgICAgICAoTWVzc2FnZVNlbmRlclRlc3QudXNpbmcpOgorICAgICAgICAo
TWVzc2FnZVNlbmRlclRlc3QudGVzdF9zZW5kKToKKyAgICAgICAgKE1lc3NhZ2VTZW5kZXJUZXN0
LnRlc3Rfc2VuZF9ub3dhaXQpOgorICAgICAgICAoTWVzc2FnZVNlbmRlclRlc3QudGVzdF9zZW5k
X25vd2FpdC53cml0ZSk6CisgICAgICAgIChNZXNzYWdlU2VuZGVySGl4aWU3NVRlc3QpOgorICAg
ICAgICAoTWVzc2FnZVNlbmRlckhpeGllNzVUZXN0LnVzaW5nKToKKyAgICAgICAgKE1lc3NhZ2VT
ZW5kZXJIaXhpZTc1VGVzdC50ZXN0X3NlbmQpOgorICAgICAgICAoTWVzc2FnZVNlbmRlckhpeGll
NzVUZXN0LnRlc3Rfc2VuZF9ub3dhaXQpOgorICAgICAgICAoTWVzc2FnZVNlbmRlckhpeGllNzVU
ZXN0LnRlc3Rfc2VuZF9ub3dhaXQud3JpdGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0X211eC5w
eTogQWRkZWQuCisgICAgICAgIChfT3V0Z29pbmdDaGFubmVsRGF0YSk6CisgICAgICAgIChfT3V0
Z29pbmdDaGFubmVsRGF0YS5fX2luaXRfXyk6CisgICAgICAgIChfTW9ja011eENvbm5lY3Rpb24p
OgorICAgICAgICAoX01vY2tNdXhDb25uZWN0aW9uLm9mKToKKyAgICAgICAgKF9Nb2NrTXV4Q29u
bmVjdGlvbi5fX2luaXRfXyk6CisgICAgICAgIChfTW9ja011eENvbm5lY3Rpb24ud3JpdGUpOgor
ICAgICAgICAoX01vY2tNdXhDb25uZWN0aW9uLndyaXRlLl9yZWNlaXZlX2J5dGVzKToKKyAgICAg
ICAgKF9Nb2NrTXV4Q29ubmVjdGlvbi5vbl9kYXRhX21lc3NhZ2UpOgorICAgICAgICAoX01vY2tN
dXhDb25uZWN0aW9uLmdldF93cml0dGVuX2NvbnRyb2xfYmxvY2tzKToKKyAgICAgICAgKF9Nb2Nr
TXV4Q29ubmVjdGlvbi5nZXRfd3JpdHRlbl9tZXNzYWdlcyk6CisgICAgICAgIChfTW9ja011eENv
bm5lY3Rpb24uZ2V0X3dyaXR0ZW5fY29udHJvbF9tZXNzYWdlcyk6CisgICAgICAgIChfRmFpbE9u
V3JpdGVDb25uZWN0aW9uKToKKyAgICAgICAgKF9GYWlsT25Xcml0ZUNvbm5lY3Rpb24ub25fZGF0
YV9tZXNzYWdlKToKKyAgICAgICAgKF9DaGFubmVsRXZlbnQpOgorICAgICAgICAoX0NoYW5uZWxF
dmVudC5fX2luaXRfXyk6CisgICAgICAgIChfTXV4TW9ja0Rpc3BhdGNoZXIpOgorICAgICAgICAo
X011eE1vY2tEaXNwYXRjaGVyLm9mKToKKyAgICAgICAgKF9NdXhNb2NrRGlzcGF0Y2hlci5fX2lu
aXRfXyk6CisgICAgICAgIChfTXV4TW9ja0Rpc3BhdGNoZXIuZG9fZXh0cmFfaGFuZHNoYWtlKToK
KyAgICAgICAgKF9NdXhNb2NrRGlzcGF0Y2hlci5fZG9fZWNobyk6CisgICAgICAgIChfTXV4TW9j
a0Rpc3BhdGNoZXIuX2RvX3BpbmcpOgorICAgICAgICAoX011eE1vY2tEaXNwYXRjaGVyLl9kb19w
aW5nX3doaWxlX2hlbGxvX3dvcmxkKToKKyAgICAgICAgKF9NdXhNb2NrRGlzcGF0Y2hlci5fZG9f
dHdvX3Bpbmdfd2hpbGVfaGVsbG9fd29ybGQpOgorICAgICAgICAoX011eE1vY2tEaXNwYXRjaGVy
LnRyYW5zZmVyX2RhdGEpOgorICAgICAgICAoX2NyZWF0ZV9tb2NrX3JlcXVlc3QpOgorICAgICAg
ICAoX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1ZXN0X2ZyYW1lKToKKyAgICAgICAgKF9jcmVhdGVf
ZHJvcF9jaGFubmVsX2ZyYW1lKToKKyAgICAgICAgKF9jcmVhdGVfZmxvd19jb250cm9sX2ZyYW1l
KToKKyAgICAgICAgKF9jcmVhdGVfbG9naWNhbF9mcmFtZSk6CisgICAgICAgIChfY3JlYXRlX3Jl
cXVlc3RfaGVhZGVyKToKKyAgICAgICAgKE11eFRlc3QpOgorICAgICAgICAoTXV4VGVzdC50ZXN0
X2NoYW5uZWxfaWRfZGVjb2RlKToKKyAgICAgICAgKE11eFRlc3QudGVzdF9jaGFubmVsX2lkX2Vu
Y29kZSk6CisgICAgICAgIChNdXhUZXN0LnRlc3RfcmVhZF9tdWx0aXBsZV9jb250cm9sX2Jsb2Nr
cyk6CisgICAgICAgIChNdXhUZXN0LnRlc3RfcmVhZF9hZGRfY2hhbm5lbF9yZXF1ZXN0KToKKyAg
ICAgICAgKE11eFRlc3QudGVzdF9yZWFkX2Ryb3BfY2hhbm5lbCk6CisgICAgICAgIChNdXhUZXN0
LnRlc3RfcmVhZF9mbG93X2NvbnRyb2wpOgorICAgICAgICAoTXV4VGVzdC50ZXN0X3JlYWRfbmV3
X2NoYW5uZWxfc2xvdCk6CisgICAgICAgIChNdXhUZXN0LnRlc3RfcmVhZF9pbnZhbGlkX251bWJl
cl9maWVsZF9pbl9jb250cm9sX2Jsb2NrKToKKyAgICAgICAgKE11eFRlc3QudGVzdF9yZWFkX2lu
dmFsaWRfc2l6ZV9hbmRfY29udGVudHMpOgorICAgICAgICAoTXV4VGVzdC50ZXN0X2NyZWF0ZV9h
ZGRfY2hhbm5lbF9yZXNwb25zZSk6CisgICAgICAgIChNdXhUZXN0LnRlc3RfY3JlYXRlX2Ryb3Bf
Y2hhbm5lbCk6CisgICAgICAgIChNdXhUZXN0LnRlc3RfcGFyc2VfcmVxdWVzdF90ZXh0KToKKyAg
ICAgICAgKE11eEhhbmRsZXJUZXN0KToKKyAgICAgICAgKE11eEhhbmRsZXJUZXN0LnRlc3RfYWRk
X2NoYW5uZWwpOgorICAgICAgICAoTXV4SGFuZGxlclRlc3QudGVzdF9waHlzaWNhbF9jb25uZWN0
aW9uX3dyaXRlX2ZhaWx1cmUpOgorICAgICAgICAoTXV4SGFuZGxlclRlc3QudGVzdF9zZW5kX2Js
b2NrZWQpOgorICAgICAgICAoTXV4SGFuZGxlclRlc3QudGVzdF9hZGRfY2hhbm5lbF9kZWx0YV9l
bmNvZGluZyk6CisgICAgICAgIChNdXhIYW5kbGVyVGVzdC50ZXN0X2FkZF9jaGFubmVsX2RlbHRh
X2VuY29kaW5nX292ZXJyaWRlKToKKyAgICAgICAgKE11eEhhbmRsZXJUZXN0LnRlc3RfYWRkX2No
YW5uZWxfZGVsdGFfYWZ0ZXJfaWRlbnRpdHkpOgorICAgICAgICAoTXV4SGFuZGxlclRlc3QudGVz
dF9hZGRfY2hhbm5lbF9kZWx0YV9yZW1vdmVfaGVhZGVyKToKKyAgICAgICAgKE11eEhhbmRsZXJU
ZXN0LnRlc3RfYWRkX2NoYW5uZWxfZGVsdGFfZW5jb2RpbmdfcGVybWVzc2FnZV9jb21wcmVzcyk6
CisgICAgICAgIChNdXhIYW5kbGVyVGVzdC50ZXN0X2FkZF9jaGFubmVsX2RlbHRhX2VuY29kaW5n
X3JlbW92ZV9leHRlbnNpb25zKToKKyAgICAgICAgKE11eEhhbmRsZXJUZXN0LnRlc3RfYWRkX2No
YW5uZWxfaW52YWxpZF9lbmNvZGluZyk6CisgICAgICAgIChNdXhIYW5kbGVyVGVzdC50ZXN0X2Fk
ZF9jaGFubmVsX2luY29tcGxldGVfaGFuZHNoYWtlKToKKyAgICAgICAgKE11eEhhbmRsZXJUZXN0
LnRlc3RfYWRkX2NoYW5uZWxfZHVwbGljYXRlX2NoYW5uZWxfaWQpOgorICAgICAgICAoTXV4SGFu
ZGxlclRlc3QudGVzdF9yZWNlaXZlX2Ryb3BfY2hhbm5lbCk6CisgICAgICAgIChNdXhIYW5kbGVy
VGVzdC50ZXN0X3JlY2VpdmVfcGluZ19mcmFtZSk6CisgICAgICAgIChNdXhIYW5kbGVyVGVzdC50
ZXN0X3JlY2VpdmVfZnJhZ21lbnRlZF9waW5nKToKKyAgICAgICAgKE11eEhhbmRsZXJUZXN0LnRl
c3RfcmVjZWl2ZV9mcmFnbWVudGVkX3Bpbmdfd2hpbGVfcmVjZWl2aW5nX2ZyYWdtZW50ZWRfbWVz
c2FnZSk6CisgICAgICAgIChNdXhIYW5kbGVyVGVzdC50ZXN0X3JlY2VpdmVfdHdvX3Bpbmdfd2hp
bGVfcmVjZWl2aW5nX2ZyYWdtZW50ZWRfbWVzc2FnZSk6CisgICAgICAgIChNdXhIYW5kbGVyVGVz
dC50ZXN0X3JlY2VpdmVfbWVzc2FnZV93aGlsZV9yZWNlaXZpbmdfZnJhZ21lbnRlZF9waW5nKToK
KyAgICAgICAgKE11eEhhbmRsZXJUZXN0LnRlc3Rfc2VuZF9waW5nKToKKyAgICAgICAgKE11eEhh
bmRsZXJUZXN0LnRlc3Rfc2VuZF9mcmFnbWVudGVkX3BpbmcpOgorICAgICAgICAoTXV4SGFuZGxl
clRlc3QudGVzdF9zZW5kX2ZyYWdtZW50ZWRfcGluZ193aGlsZV9zZW5kaW5nX2ZyYWdtZW50ZWRf
bWVzc2FnZSk6CisgICAgICAgIChNdXhIYW5kbGVyVGVzdC50ZXN0X3NlbmRfZnJhZ21lbnRlZF90
d29fcGluZ193aGlsZV9zZW5kaW5nX2ZyYWdtZW50ZWRfbWVzc2FnZSk6CisgICAgICAgIChNdXhI
YW5kbGVyVGVzdC50ZXN0X3NlbmRfZHJvcF9jaGFubmVsKToKKyAgICAgICAgKE11eEhhbmRsZXJU
ZXN0LnRlc3RfdHdvX2Zsb3dfY29udHJvbCk6CisgICAgICAgIChNdXhIYW5kbGVyVGVzdC50ZXN0
X25vX3NlbmRfcXVvdGFfb25fc2VydmVyKToKKyAgICAgICAgKE11eEhhbmRsZXJUZXN0LnRlc3Rf
bm9fc2VuZF9xdW90YV9vbl9zZXJ2ZXJfZm9yX3Blcm1lc3NhZ2VfZXh0cmFfY29zdCk6CisgICAg
ICAgIChNdXhIYW5kbGVyVGVzdC50ZXN0X3F1b3RhX3Zpb2xhdGlvbl9ieV9jbGllbnQpOgorICAg
ICAgICAoTXV4SGFuZGxlclRlc3QudGVzdF9jb25zdW1lX3F1b3RhX2VtcHR5X21lc3NhZ2UpOgor
ICAgICAgICAoTXV4SGFuZGxlclRlc3QudGVzdF9jb25zdW1lX3F1b3RhX2ZyYWdtZW50ZWRfbWVz
c2FnZSk6CisgICAgICAgIChNdXhIYW5kbGVyVGVzdC50ZXN0X2ZyYWdtZW50ZWRfY29udHJvbF9t
ZXNzYWdlKToKKyAgICAgICAgKE11eEhhbmRsZXJUZXN0LnRlc3RfY2hhbm5lbF9zbG90X3Zpb2xh
dGlvbl9ieV9jbGllbnQpOgorICAgICAgICAoTXV4SGFuZGxlclRlc3QudGVzdF9xdW90YV9vdmVy
Zmxvd19ieV9jbGllbnQpOgorICAgICAgICAoTXV4SGFuZGxlclRlc3QudGVzdF9pbnZhbGlkX2Vu
Y2Fwc3VsYXRlZF9tZXNzYWdlKToKKyAgICAgICAgKE11eEhhbmRsZXJUZXN0LnRlc3RfY2hhbm5l
bF9pZF90cnVuY2F0ZWQpOgorICAgICAgICAoTXV4SGFuZGxlclRlc3QudGVzdF9pbm5lcl9mcmFt
ZV90cnVuY2F0ZWQpOgorICAgICAgICAoTXV4SGFuZGxlclRlc3QudGVzdF91bmtub3duX211eF9v
cGNvZGUpOgorICAgICAgICAoTXV4SGFuZGxlclRlc3QudGVzdF9pbnZhbGlkX211eF9jb250cm9s
X2Jsb2NrKToKKyAgICAgICAgKE11eEhhbmRsZXJUZXN0LnRlc3RfcGVybWVzc2FnZV9jb21wcmVz
cyk6CisgICAgICAgIChNdXhIYW5kbGVyVGVzdC50ZXN0X3Blcm1lc3NhZ2VfY29tcHJlc3NfZnJh
Z21lbnRlZF9tZXNzYWdlKToKKyAgICAgICAgKE11eEhhbmRsZXJUZXN0LnRlc3RfcmVjZWl2ZV9i
YWRfZnJhZ21lbnRlZF9tZXNzYWdlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdF9zdHJlYW0ucHk6
IEFkZGVkLgorICAgICAgICAoU3RyZWFtVGVzdCk6CisgICAgICAgIChTdHJlYW1UZXN0LnRlc3Rf
Y3JlYXRlX2hlYWRlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3Rfc3RyZWFtX2hpeGllNzUucHk6
IEFkZGVkLgorICAgICAgICAoU3RyZWFtSGl4aWU3NVRlc3QpOgorICAgICAgICAoU3RyZWFtSGl4
aWU3NVRlc3QudGVzdF9wYXlsb2FkX2xlbmd0aCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3RfdXRp
bC5weTogQWRkZWQuCisgICAgICAgIChVdGlsVGVzdCk6CisgICAgICAgIChVdGlsVGVzdC50ZXN0
X2dldF9zdGFja190cmFjZSk6CisgICAgICAgIChVdGlsVGVzdC50ZXN0X3ByZXBlbmRfbWVzc2Fn
ZV90b19leGNlcHRpb24pOgorICAgICAgICAoVXRpbFRlc3QudGVzdF9nZXRfc2NyaXB0X2ludGVy
cCk6CisgICAgICAgIChVdGlsVGVzdC50ZXN0X2hleGlmeSk6CisgICAgICAgIChSZXBlYXRlZFhv
ck1hc2tlclRlc3QpOgorICAgICAgICAoUmVwZWF0ZWRYb3JNYXNrZXJUZXN0LnRlc3RfbWFzayk6
CisgICAgICAgIChSZXBlYXRlZFhvck1hc2tlclRlc3QudGVzdF9tYXNrX3R3aWNlKToKKyAgICAg
ICAgKFJlcGVhdGVkWG9yTWFza2VyVGVzdC50ZXN0X21hc2tfbGFyZ2VfZGF0YSk6CisgICAgICAg
IChnZXRfcmFuZG9tX3NlY3Rpb24pOgorICAgICAgICAoSW5mbGF0ZXJEZWZsYXRlclRlc3QpOgor
ICAgICAgICAoSW5mbGF0ZXJEZWZsYXRlclRlc3QudGVzdF9pbmZsYXRlX2RlZmxhdGVfZGVmYXVs
dCk6CisgICAgICAgIChJbmZsYXRlckRlZmxhdGVyVGVzdC50ZXN0X3JhbmRvbV9zZWN0aW9uKToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3
ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdGRhdGEvUkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rl
c3QvdGVzdGRhdGEvaGFuZGxlcnMvYWJvcnRfYnlfdXNlcl93c2gucHk6IEFkZGVkLgorICAgICAg
ICAod2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UpOgorICAgICAgICAod2ViX3NvY2tldF90
cmFuc2Zlcl9kYXRhKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0
c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvYmxhbmtf
d3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0
c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvb3JpZ2lu
X2NoZWNrX3dzaC5weTogQWRkZWQuCisgICAgICAgICh3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRz
aGFrZSk6CisgICAgICAgICh3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMv
dGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZXhjZXB0aW9uX2luX3RyYW5zZmVyX3dzaC5weTog
QWRkZWQuCisgICAgICAgICh3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSk6CisgICAgICAg
ICh3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9o
YW5kbGVycy9zdWIvbm9fd3NoX2F0X3RoZV9lbmQucHk6IEFkZGVkLgorICAgICAgICAod2ViX3Nv
Y2tldF9kb19leHRyYV9oYW5kc2hha2UpOgorICAgICAgICAod2ViX3NvY2tldF90cmFuc2Zlcl9k
YXRhKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9v
bHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL25vbl9jYWxsYWJs
ZV93c2gucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93
cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIv
cGxhaW5fd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNo
YWtlKToKKyAgICAgICAgKHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90
ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi93cm9uZ19oYW5kc2hha2Vfc2lnX3dzaC5weTogQWRk
ZWQuCisgICAgICAgIChub193ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSk6CisgICAgICAg
ICh3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9o
YW5kbGVycy9zdWIvd3JvbmdfdHJhbnNmZXJfc2lnX3dzaC5weTogQWRkZWQuCisgICAgICAgICh3
ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSk6CisgICAgICAgIChub193ZWJfc29ja2V0X3Ry
YW5zZmVyX2RhdGEpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRz
ZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9oZWxsby5wbDogQWRkZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dw
dHNlcnZlL1JFQURNRS5tZDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL2RvY3MvTWFrZWZpbGU6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2
ZS9kb2NzL2NvbmYucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS9kb2NzL2hhbmRsZXJzLnJzdDogQWRkZWQuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNl
cnZlL2RvY3MvaW5kZXgucnN0OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvZG9jcy9pbnRyb2R1Y3Rpb24ucnN0OiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9v
bHMvd3B0c2VydmUvZG9jcy9tYWtlLmJhdDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL2RvY3MvcGlwZXMucnN0OiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9v
bHMvd3B0c2VydmUvZG9jcy9yZXF1ZXN0LnJzdDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL2RvY3MvcmVzcG9uc2Uu
cnN0OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2Vy
dmUvdG9vbHMvd3B0c2VydmUvZG9jcy9yb3V0ZXIucnN0OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvZG9jcy9zZXJ2
ZXIucnN0OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0
c2VydmUvdG9vbHMvd3B0c2VydmUvZG9jcy9zdGFzaC5yc3Q6IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS9zZXR1cC5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZl
L3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1bmN0aW9uYWwvYmFzZS5weTogQWRkZWQuCisgICAgICAg
IChSZXF1ZXN0KToKKyAgICAgICAgKFJlcXVlc3QuX19pbml0X18pOgorICAgICAgICAoUmVxdWVz
dC5nZXRfbWV0aG9kKToKKyAgICAgICAgKFJlcXVlc3QuYWRkX2RhdGEpOgorICAgICAgICAoVGVz
dFVzaW5nU2VydmVyKToKKyAgICAgICAgKFRlc3RVc2luZ1NlcnZlci5zZXRVcCk6CisgICAgICAg
IChUZXN0VXNpbmdTZXJ2ZXIudGVhckRvd24pOgorICAgICAgICAoVGVzdFVzaW5nU2VydmVyLmFi
c191cmwpOgorICAgICAgICAoVGVzdFVzaW5nU2VydmVyLnJlcXVlc3QpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9m
dW5jdGlvbmFsL2RvY3Jvb3QvZG9jdW1lbnQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rp
b25hbC9kb2Nyb290L3N1Yi50eHQ6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL2RvY3Jv
b3Qvc3ViX2hlYWRlcnMudHh0OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC9kb2Nyb290
L3N1Yl9wYXJhbXMudHh0OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC9kb2Nyb290L3Rl
c3QuYXNpczogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1bmN0aW9uYWwvZG9jcm9vdC90ZXN0X3N0cmlu
Zy5weTogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC9kb2Ny
b290L3Rlc3RfdHVwbGVfMi5weTogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVzdHMv
ZnVuY3Rpb25hbC9kb2Nyb290L3Rlc3RfdHVwbGVfMy5weTogQWRkZWQuCisgICAgICAgIChtYWlu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMv
d3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC90ZXN0X2Nvb2tpZXMucHk6IEFkZGVkLgorICAgICAg
ICAoVGVzdFJlc3BvbnNlU2V0Q29va2llKToKKyAgICAgICAgKFRlc3RSZXNwb25zZVNldENvb2tp
ZS50ZXN0X25hbWVfdmFsdWUpOgorICAgICAgICAoVGVzdFJlc3BvbnNlU2V0Q29va2llLnRlc3Rf
bmFtZV92YWx1ZS5oYW5kbGVyKToKKyAgICAgICAgKFRlc3RSZXNwb25zZVNldENvb2tpZS50ZXN0
X3Vuc2V0KToKKyAgICAgICAgKFRlc3RSZXNwb25zZVNldENvb2tpZS50ZXN0X3Vuc2V0LmhhbmRs
ZXIpOgorICAgICAgICAoVGVzdFJlc3BvbnNlU2V0Q29va2llLnRlc3RfZGVsZXRlKToKKyAgICAg
ICAgKFRlc3RSZXNwb25zZVNldENvb2tpZS50ZXN0X2RlbGV0ZS5oYW5kbGVyKToKKyAgICAgICAg
KFRlc3RSZXF1ZXN0Q29va2llcyk6CisgICAgICAgIChUZXN0UmVxdWVzdENvb2tpZXMudGVzdF9z
ZXRfY29va2llKToKKyAgICAgICAgKFRlc3RSZXF1ZXN0Q29va2llcy50ZXN0X3NldF9jb29raWUu
aGFuZGxlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZl
L3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1bmN0aW9uYWwvdGVzdF9oYW5kbGVycy5weTogQWRkZWQu
CisgICAgICAgIChUZXN0RmlsZUhhbmRsZXIpOgorICAgICAgICAoVGVzdEZpbGVIYW5kbGVyLnRl
c3RfR0VUKToKKyAgICAgICAgKFRlc3RGaWxlSGFuZGxlci50ZXN0X3JhbmdlKToKKyAgICAgICAg
KFRlc3RGaWxlSGFuZGxlci50ZXN0X3JhbmdlX25vX2VuZCk6CisgICAgICAgIChUZXN0RmlsZUhh
bmRsZXIudGVzdF9yYW5nZV9ub19zdGFydCk6CisgICAgICAgIChUZXN0RmlsZUhhbmRsZXIudGVz
dF9tdWx0aXBsZV9yYW5nZXMpOgorICAgICAgICAoVGVzdEZpbGVIYW5kbGVyLnRlc3RfcmFuZ2Vf
aW52YWxpZCk6CisgICAgICAgIChUZXN0RnVuY3Rpb25IYW5kbGVyKToKKyAgICAgICAgKFRlc3RG
dW5jdGlvbkhhbmRsZXIudGVzdF9zdHJpbmdfcnYpOgorICAgICAgICAoVGVzdEZ1bmN0aW9uSGFu
ZGxlci50ZXN0X3N0cmluZ19ydi5oYW5kbGVyKToKKyAgICAgICAgKFRlc3RGdW5jdGlvbkhhbmRs
ZXIudGVzdF90dXBsZV8yX3J2KToKKyAgICAgICAgKFRlc3RGdW5jdGlvbkhhbmRsZXIudGVzdF90
dXBsZV8yX3J2LmhhbmRsZXIpOgorICAgICAgICAoVGVzdEZ1bmN0aW9uSGFuZGxlci50ZXN0X3R1
cGxlXzNfcnYpOgorICAgICAgICAoVGVzdEZ1bmN0aW9uSGFuZGxlci50ZXN0X3R1cGxlXzNfcnYu
aGFuZGxlcik6CisgICAgICAgIChUZXN0RnVuY3Rpb25IYW5kbGVyLnRlc3RfdHVwbGVfM19ydl8x
KToKKyAgICAgICAgKFRlc3RGdW5jdGlvbkhhbmRsZXIudGVzdF90dXBsZV8zX3J2XzEuaGFuZGxl
cik6CisgICAgICAgIChUZXN0SlNPTkhhbmRsZXIpOgorICAgICAgICAoVGVzdEpTT05IYW5kbGVy
LnRlc3RfanNvbl8wKToKKyAgICAgICAgKFRlc3RKU09OSGFuZGxlci50ZXN0X2pzb25fMC5oYW5k
bGVyKToKKyAgICAgICAgKFRlc3RKU09OSGFuZGxlci50ZXN0X2pzb25fdHVwbGVfMik6CisgICAg
ICAgIChUZXN0SlNPTkhhbmRsZXIudGVzdF9qc29uX3R1cGxlXzIuaGFuZGxlcik6CisgICAgICAg
IChUZXN0SlNPTkhhbmRsZXIudGVzdF9qc29uX3R1cGxlXzMpOgorICAgICAgICAoVGVzdEpTT05I
YW5kbGVyLnRlc3RfanNvbl90dXBsZV8zLmhhbmRsZXIpOgorICAgICAgICAoVGVzdFB5dGhvbkhh
bmRsZXIpOgorICAgICAgICAoVGVzdFB5dGhvbkhhbmRsZXIudGVzdF9zdHJpbmcpOgorICAgICAg
ICAoVGVzdFB5dGhvbkhhbmRsZXIudGVzdF90dXBsZV8yKToKKyAgICAgICAgKFRlc3RQeXRob25I
YW5kbGVyLnRlc3RfdHVwbGVfMyk6CisgICAgICAgIChUZXN0RGlyZWN0b3J5SGFuZGxlcik6Cisg
ICAgICAgIChUZXN0RGlyZWN0b3J5SGFuZGxlci50ZXN0X2RpcmVjdG9yeSk6CisgICAgICAgIChU
ZXN0QXNJc0hhbmRsZXIpOgorICAgICAgICAoVGVzdEFzSXNIYW5kbGVyLnRlc3RfYXNfaXMpOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRz
ZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL3Rlc3RfcGlwZXMucHk6IEFkZGVkLgorICAgICAgICAoVGVz
dFN0YXR1cyk6CisgICAgICAgIChUZXN0U3RhdHVzLnRlc3Rfc3RhdHVzKToKKyAgICAgICAgKFRl
c3RIZWFkZXIpOgorICAgICAgICAoVGVzdEhlYWRlci50ZXN0X25vdF9zZXQpOgorICAgICAgICAo
VGVzdEhlYWRlci50ZXN0X3NldCk6CisgICAgICAgIChUZXN0SGVhZGVyLnRlc3RfbXVsdGlwbGUp
OgorICAgICAgICAoVGVzdEhlYWRlci50ZXN0X211bHRpcGxlX3NhbWUpOgorICAgICAgICAoVGVz
dEhlYWRlci50ZXN0X211bHRpcGxlX2FwcGVuZCk6CisgICAgICAgIChUZXN0U2xpY2UpOgorICAg
ICAgICAoVGVzdFNsaWNlLnRlc3RfYm90aF9ib3VuZHMpOgorICAgICAgICAoVGVzdFNsaWNlLnRl
c3Rfbm9fdXBwZXIpOgorICAgICAgICAoVGVzdFNsaWNlLnRlc3Rfbm9fbG93ZXIpOgorICAgICAg
ICAoVGVzdFN1Yik6CisgICAgICAgIChUZXN0U3ViLnRlc3Rfc3ViX2NvbmZpZyk6CisgICAgICAg
IChUZXN0U3ViLnRlc3Rfc3ViX2hlYWRlcnMpOgorICAgICAgICAoVGVzdFN1Yi50ZXN0X3N1Yl9w
YXJhbXMpOgorICAgICAgICAoVGVzdFRyaWNrbGUpOgorICAgICAgICAoVGVzdFRyaWNrbGUudGVz
dF90cmlja2xlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2Vy
dmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC90ZXN0X3JlcXVlc3QucHk6IEFkZGVk
LgorICAgICAgICAoVGVzdElucHV0RmlsZSk6CisgICAgICAgIChUZXN0SW5wdXRGaWxlLnRlc3Rf
c2Vlayk6CisgICAgICAgIChUZXN0SW5wdXRGaWxlLnRlc3Rfc2Vlay5oYW5kbGVyKToKKyAgICAg
ICAgKFRlc3RJbnB1dEZpbGUudGVzdF9pdGVyKToKKyAgICAgICAgKFRlc3RJbnB1dEZpbGUudGVz
dF9pdGVyLmhhbmRsZXIpOgorICAgICAgICAoVGVzdFJlcXVlc3QpOgorICAgICAgICAoVGVzdFJl
cXVlc3QudGVzdF9ib2R5KToKKyAgICAgICAgKFRlc3RSZXF1ZXN0LnRlc3RfYm9keS5oYW5kbGVy
KToKKyAgICAgICAgKFRlc3RSZXF1ZXN0LnRlc3Rfcm91dGVfbWF0Y2gpOgorICAgICAgICAoVGVz
dFJlcXVlc3QudGVzdF9yb3V0ZV9tYXRjaC5oYW5kbGVyKToKKyAgICAgICAgKFRlc3RBdXRoKToK
KyAgICAgICAgKFRlc3RBdXRoLnRlc3RfYXV0aCk6CisgICAgICAgIChUZXN0QXV0aC50ZXN0X2F1
dGguaGFuZGxlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNl
cnZlL3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1bmN0aW9uYWwvdGVzdF9yZXNwb25zZS5weTogQWRk
ZWQuCisgICAgICAgIChzZW5kX2JvZHlfYXNfaGVhZGVyKToKKyAgICAgICAgKFRlc3RSZXNwb25z
ZSk6CisgICAgICAgIChUZXN0UmVzcG9uc2UudGVzdF9oZWFkX3dpdGhvdXRfYm9keSk6CisgICAg
ICAgIChUZXN0UmVzcG9uc2UudGVzdF9oZWFkX3dpdGhvdXRfYm9keS5oYW5kbGVyKToKKyAgICAg
ICAgKFRlc3RSZXNwb25zZS50ZXN0X2hlYWRfd2l0aF9ib2R5KToKKyAgICAgICAgKFRlc3RSZXNw
b25zZS50ZXN0X2hlYWRfd2l0aF9ib2R5LmhhbmRsZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFs
L3Rlc3Rfc2VydmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RGaWxlSGFuZGxlcik6CisgICAg
ICAgIChUZXN0RmlsZUhhbmRsZXIudGVzdF9ub3RfaGFuZGxlZCk6CisgICAgICAgIChUZXN0UmV3
cml0ZXIpOgorICAgICAgICAoVGVzdFJld3JpdGVyLnRlc3RfcmV3cml0ZSk6CisgICAgICAgIChU
ZXN0UmV3cml0ZXIudGVzdF9yZXdyaXRlLmhhbmRsZXIpOgorICAgICAgICAoVGVzdFJlcXVlc3RI
YW5kbGVyKToKKyAgICAgICAgKFRlc3RSZXF1ZXN0SGFuZGxlci50ZXN0X2V4Y2VwdGlvbik6Cisg
ICAgICAgIChUZXN0UmVxdWVzdEhhbmRsZXIudGVzdF9leGNlcHRpb24uaGFuZGxlcik6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZl
L3Rlc3RzL2Z1bmN0aW9uYWwvdGVzdF9zdGFzaC5weTogQWRkZWQuCisgICAgICAgIChUZXN0UmVz
cG9uc2VTZXRDb29raWUpOgorICAgICAgICAoVGVzdFJlc3BvbnNlU2V0Q29va2llLnRlc3RfcHV0
X3Rha2UpOgorICAgICAgICAoVGVzdFJlc3BvbnNlU2V0Q29va2llLnRlc3RfcHV0X3Rha2UuaGFu
ZGxlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rv
b2xzL3dwdHNlcnZlL3dwdHNlcnZlL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUv
Y29uc3RhbnRzLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvaGFuZGxlcnMucHk6IEFkZGVkLgor
ICAgICAgICAoZ3Vlc3NfY29udGVudF90eXBlKToKKyAgICAgICAgKERpcmVjdG9yeUhhbmRsZXIp
OgorICAgICAgICAoRGlyZWN0b3J5SGFuZGxlci5fX2NhbGxfXyk6CisgICAgICAgIChEaXJlY3Rv
cnlIYW5kbGVyLnNlcnZlX2RpcmVjdG9yeSk6CisgICAgICAgIChsaXN0X2l0ZW1zKToKKyAgICAg
ICAgKEZpbGVIYW5kbGVyKToKKyAgICAgICAgKEZpbGVIYW5kbGVyLl9fY2FsbF9fKToKKyAgICAg
ICAgKEZpbGVIYW5kbGVyLnNlcnZlX2ZpbGUpOgorICAgICAgICAoRmlsZUhhbmRsZXIuZ2V0X2hl
YWRlcnMpOgorICAgICAgICAoRmlsZUhhbmRsZXIubG9hZF9oZWFkZXJzKToKKyAgICAgICAgKEZp
bGVIYW5kbGVyLmdldF9kYXRhKToKKyAgICAgICAgKEZpbGVIYW5kbGVyLnNldF9yZXNwb25zZV9t
dWx0aXBhcnQpOgorICAgICAgICAoRmlsZUhhbmRsZXIuZ2V0X3JhbmdlX2RhdGEpOgorICAgICAg
ICAoRmlsZUhhbmRsZXIuZGVmYXVsdF9oZWFkZXJzKToKKyAgICAgICAgKHB5dGhvbl9zY3JpcHRf
aGFuZGxlcik6CisgICAgICAgIChGdW5jdGlvbkhhbmRsZXIpOgorICAgICAgICAoRnVuY3Rpb25I
YW5kbGVyLmlubmVyKToKKyAgICAgICAgKGpzb25faGFuZGxlcik6CisgICAgICAgIChqc29uX2hh
bmRsZXIuaW5uZXIpOgorICAgICAgICAoYXNfaXNfaGFuZGxlcik6CisgICAgICAgIChFcnJvckhh
bmRsZXIpOgorICAgICAgICAoRXJyb3JIYW5kbGVyLl9faW5pdF9fKToKKyAgICAgICAgKEVycm9y
SGFuZGxlci5fX2NhbGxfXyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3BpcGVzLnB5OiBBZGRlZC4KKyAgICAg
ICAgKHJlc29sdmVfY29udGVudCk6CisgICAgICAgIChQaXBlbGluZSk6CisgICAgICAgIChQaXBl
bGluZS5fX2luaXRfXyk6CisgICAgICAgIChQaXBlbGluZS5wYXJzZSk6CisgICAgICAgIChQaXBl
bGluZS5fX2NhbGxfXyk6CisgICAgICAgIChQaXBlVG9rZW5pemVyKToKKyAgICAgICAgKFBpcGVU
b2tlbml6ZXIuX19pbml0X18pOgorICAgICAgICAoUGlwZVRva2VuaXplci5fX2luaXRfXy5jYW4p
OgorICAgICAgICAoUGlwZVRva2VuaXplci50b2tlbml6ZSk6CisgICAgICAgIChQaXBlVG9rZW5p
emVyLmdldF9jaGFyKToKKyAgICAgICAgKFBpcGVUb2tlbml6ZXIuZnVuY19uYW1lX3N0YXRlKToK
KyAgICAgICAgKFBpcGVUb2tlbml6ZXIuYXJndW1lbnRfc3RhdGUpOgorICAgICAgICAoUGlwZVRv
a2VuaXplci5nZXRfZXNjYXBlKToKKyAgICAgICAgKHBpcGUpOgorICAgICAgICAocGlwZS5fX2lu
aXRfXyk6CisgICAgICAgIChwaXBlLl9fY2FsbF9fKToKKyAgICAgICAgKHBpcGUuX19jYWxsX18u
aW5uZXIpOgorICAgICAgICAob3B0KToKKyAgICAgICAgKG9wdC5fX2luaXRfXyk6CisgICAgICAg
IChvcHQuX19jYWxsX18pOgorICAgICAgICAobnVsbGFibGUpOgorICAgICAgICAobnVsbGFibGUu
aW5uZXIpOgorICAgICAgICAoYm9vbGVhbik6CisgICAgICAgIChzdGF0dXMpOgorICAgICAgICAo
aGVhZGVyKToKKyAgICAgICAgKHRyaWNrbGUpOgorICAgICAgICAodHJpY2tsZS5wYXJzZV9kZWxh
eXMpOgorICAgICAgICAodHJpY2tsZS5zbGVlcCk6CisgICAgICAgICh0cmlja2xlLnNsZWVwLmlu
bmVyKToKKyAgICAgICAgKHRyaWNrbGUuYWRkX2NvbnRlbnQpOgorICAgICAgICAoc2xpY2UpOgor
ICAgICAgICAoUmVwbGFjZW1lbnRUb2tlbml6ZXIpOgorICAgICAgICAoUmVwbGFjZW1lbnRUb2tl
bml6ZXIuaWRlbnQpOgorICAgICAgICAoUmVwbGFjZW1lbnRUb2tlbml6ZXIuaW5kZXgpOgorICAg
ICAgICAoUmVwbGFjZW1lbnRUb2tlbml6ZXIudG9rZW5pemUpOgorICAgICAgICAoRmlyc3RXcmFw
cGVyKToKKyAgICAgICAgKEZpcnN0V3JhcHBlci5fX2luaXRfXyk6CisgICAgICAgIChGaXJzdFdy
YXBwZXIuX19nZXRpdGVtX18pOgorICAgICAgICAoc3ViKToKKyAgICAgICAgKHN1Yi5jb25maWdf
cmVwbGFjZW1lbnQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRz
ZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9yYW5nZXMucHk6IEFkZGVkLgorICAgICAgICAo
UmFuZ2VQYXJzZXIpOgorICAgICAgICAoUmFuZ2VQYXJzZXIuX19jYWxsX18pOgorICAgICAgICAo
UmFuZ2VQYXJzZXIuY29hbGVzY2VfcmFuZ2VzKToKKyAgICAgICAgKFJhbmdlKToKKyAgICAgICAg
KFJhbmdlLl9faW5pdF9fKToKKyAgICAgICAgKFJhbmdlLl9fcmVwcl9fKToKKyAgICAgICAgKFJh
bmdlLl9fbHRfXyk6CisgICAgICAgIChSYW5nZS5fX2d0X18pOgorICAgICAgICAoUmFuZ2UuX19l
cV9fKToKKyAgICAgICAgKFJhbmdlLl9hYnMpOgorICAgICAgICAoUmFuZ2UuY29hbGVzY2UpOgor
ICAgICAgICAoUmFuZ2UuaGVhZGVyX3ZhbHVlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvcmVxdWVzdC5weTog
QWRkZWQuCisgICAgICAgIChTZXJ2ZXIpOgorICAgICAgICAoU2VydmVyLl9faW5pdF9fKToKKyAg
ICAgICAgKElucHV0RmlsZSk6CisgICAgICAgIChJbnB1dEZpbGUuX19pbml0X18pOgorICAgICAg
ICAoSW5wdXRGaWxlLl9idWZfcG9zaXRpb24pOgorICAgICAgICAoSW5wdXRGaWxlLnJlYWQpOgor
ICAgICAgICAoSW5wdXRGaWxlLnRlbGwpOgorICAgICAgICAoSW5wdXRGaWxlLnNlZWspOgorICAg
ICAgICAoSW5wdXRGaWxlLnJlYWRsaW5lKToKKyAgICAgICAgKElucHV0RmlsZS5yZWFkbGluZXMp
OgorICAgICAgICAoSW5wdXRGaWxlLm5leHQpOgorICAgICAgICAoSW5wdXRGaWxlLl9faXRlcl9f
KToKKyAgICAgICAgKFJlcXVlc3QpOgorICAgICAgICAoUmVxdWVzdC5fX2luaXRfXyk6CisgICAg
ICAgIChSZXF1ZXN0Ll9fcmVwcl9fKToKKyAgICAgICAgKFJlcXVlc3QuR0VUKToKKyAgICAgICAg
KFJlcXVlc3QuUE9TVCk6CisgICAgICAgIChSZXF1ZXN0LmNvb2tpZXMpOgorICAgICAgICAoUmVx
dWVzdC5oZWFkZXJzKToKKyAgICAgICAgKFJlcXVlc3QuYm9keSk6CisgICAgICAgIChSZXF1ZXN0
LmF1dGgpOgorICAgICAgICAoUmVxdWVzdC5maWxlc3lzdGVtX3BhdGgpOgorICAgICAgICAoUmVx
dWVzdEhlYWRlcnMpOgorICAgICAgICAoUmVxdWVzdEhlYWRlcnMuX19pbml0X18pOgorICAgICAg
ICAoUmVxdWVzdEhlYWRlcnMuX19nZXRpdGVtX18pOgorICAgICAgICAoUmVxdWVzdEhlYWRlcnMu
X19zZXRpdGVtX18pOgorICAgICAgICAoUmVxdWVzdEhlYWRlcnMuZ2V0KToKKyAgICAgICAgKFJl
cXVlc3RIZWFkZXJzLmdldF9saXN0KToKKyAgICAgICAgKFJlcXVlc3RIZWFkZXJzLl9fY29udGFp
bnNfXyk6CisgICAgICAgIChSZXF1ZXN0SGVhZGVycy5pdGVyaXRlbXMpOgorICAgICAgICAoUmVx
dWVzdEhlYWRlcnMuaXRlcnZhbHVlcyk6CisgICAgICAgIChDb29raWVWYWx1ZSk6CisgICAgICAg
IChDb29raWVWYWx1ZS5fX2luaXRfXyk6CisgICAgICAgIChDb29raWVWYWx1ZS5fX3N0cl9fKToK
KyAgICAgICAgKENvb2tpZVZhbHVlLl9fcmVwcl9fKToKKyAgICAgICAgKENvb2tpZVZhbHVlLl9f
ZXFfXyk6CisgICAgICAgIChNdWx0aURpY3QpOgorICAgICAgICAoTXVsdGlEaWN0Ll9faW5pdF9f
KToKKyAgICAgICAgKE11bHRpRGljdC5fX3NldGl0ZW1fXyk6CisgICAgICAgIChNdWx0aURpY3Qu
YWRkKToKKyAgICAgICAgKE11bHRpRGljdC5fX2dldGl0ZW1fXyk6CisgICAgICAgIChNdWx0aURp
Y3QuZmlyc3QpOgorICAgICAgICAoTXVsdGlEaWN0Lmxhc3QpOgorICAgICAgICAoTXVsdGlEaWN0
LmdldF9saXN0KToKKyAgICAgICAgKE11bHRpRGljdC5mcm9tX2ZpZWxkX3N0b3JhZ2UpOgorICAg
ICAgICAoQ29va2llcyk6CisgICAgICAgIChDb29raWVzLl9faW5pdF9fKToKKyAgICAgICAgKENv
b2tpZXMuX19nZXRpdGVtX18pOgorICAgICAgICAoQXV0aGVudGljYXRpb24pOgorICAgICAgICAo
QXV0aGVudGljYXRpb24uX19pbml0X18pOgorICAgICAgICAoQXV0aGVudGljYXRpb24uZGVjb2Rl
X2Jhc2ljKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUv
dG9vbHMvd3B0c2VydmUvd3B0c2VydmUvcmVzcG9uc2UucHk6IEFkZGVkLgorICAgICAgICAoUmVz
cG9uc2UpOgorICAgICAgICAoUmVzcG9uc2UuX19pbml0X18pOgorICAgICAgICAoUmVzcG9uc2Uu
c3RhdHVzKToKKyAgICAgICAgKFJlc3BvbnNlLnNldF9jb29raWUpOgorICAgICAgICAoUmVzcG9u
c2Uuc2V0X2Nvb2tpZS5tYXliZV9zZXQpOgorICAgICAgICAoUmVzcG9uc2UudW5zZXRfY29va2ll
KToKKyAgICAgICAgKFJlc3BvbnNlLmRlbGV0ZV9jb29raWUpOgorICAgICAgICAoUmVzcG9uc2Uu
aXRlcl9jb250ZW50KToKKyAgICAgICAgKFJlc3BvbnNlLndyaXRlX3N0YXR1c19oZWFkZXJzKToK
KyAgICAgICAgKFJlc3BvbnNlLndyaXRlX2NvbnRlbnQpOgorICAgICAgICAoUmVzcG9uc2Uud3Jp
dGUpOgorICAgICAgICAoUmVzcG9uc2Uuc2V0X2Vycm9yKToKKyAgICAgICAgKE11bHRpcGFydENv
bnRlbnQpOgorICAgICAgICAoTXVsdGlwYXJ0Q29udGVudC5fX2luaXRfXyk6CisgICAgICAgIChN
dWx0aXBhcnRDb250ZW50Ll9fY2FsbF9fKToKKyAgICAgICAgKE11bHRpcGFydENvbnRlbnQuYXBw
ZW5kX3BhcnQpOgorICAgICAgICAoTXVsdGlwYXJ0Q29udGVudC5fX2l0ZXJfXyk6CisgICAgICAg
IChNdWx0aXBhcnRQYXJ0KToKKyAgICAgICAgKE11bHRpcGFydFBhcnQuX19pbml0X18pOgorICAg
ICAgICAoTXVsdGlwYXJ0UGFydC5fX3N0cl9fKToKKyAgICAgICAgKFJlc3BvbnNlSGVhZGVycyk6
CisgICAgICAgIChSZXNwb25zZUhlYWRlcnMuX19pbml0X18pOgorICAgICAgICAoUmVzcG9uc2VI
ZWFkZXJzLnNldCk6CisgICAgICAgIChSZXNwb25zZUhlYWRlcnMuYXBwZW5kKToKKyAgICAgICAg
KFJlc3BvbnNlSGVhZGVycy5nZXQpOgorICAgICAgICAoUmVzcG9uc2VIZWFkZXJzLl9fZ2V0aXRl
bV9fKToKKyAgICAgICAgKFJlc3BvbnNlSGVhZGVycy5fX2RlbGl0ZW1fXyk6CisgICAgICAgIChS
ZXNwb25zZUhlYWRlcnMuX19jb250YWluc19fKToKKyAgICAgICAgKFJlc3BvbnNlSGVhZGVycy5f
X3NldGl0ZW1fXyk6CisgICAgICAgIChSZXNwb25zZUhlYWRlcnMuX19pdGVyX18pOgorICAgICAg
ICAoUmVzcG9uc2VIZWFkZXJzLml0ZW1zKToKKyAgICAgICAgKFJlc3BvbnNlSGVhZGVycy51cGRh
dGUpOgorICAgICAgICAoUmVzcG9uc2VIZWFkZXJzLl9fcmVwcl9fKToKKyAgICAgICAgKFJlc3Bv
bnNlV3JpdGVyKToKKyAgICAgICAgKFJlc3BvbnNlV3JpdGVyLl9faW5pdF9fKToKKyAgICAgICAg
KFJlc3BvbnNlV3JpdGVyLndyaXRlX3N0YXR1cyk6CisgICAgICAgIChSZXNwb25zZVdyaXRlci53
cml0ZV9oZWFkZXIpOgorICAgICAgICAoUmVzcG9uc2VXcml0ZXIud3JpdGVfZGVmYXVsdF9oZWFk
ZXJzKToKKyAgICAgICAgKFJlc3BvbnNlV3JpdGVyLmVuZF9oZWFkZXJzKToKKyAgICAgICAgKFJl
c3BvbnNlV3JpdGVyLndyaXRlX2NvbnRlbnQpOgorICAgICAgICAoUmVzcG9uc2VXcml0ZXIud3Jp
dGUpOgorICAgICAgICAoUmVzcG9uc2VXcml0ZXIuZW5jb2RlKToKKyAgICAgICAgKFJlc3BvbnNl
V3JpdGVyLmZsdXNoKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0
c2VydmUvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvcm91dGVyLnB5OiBBZGRlZC4KKyAgICAgICAg
KFJvdXRlVG9rZW5pemVyKToKKyAgICAgICAgKFJvdXRlVG9rZW5pemVyLmxpdGVyYWwpOgorICAg
ICAgICAoUm91dGVUb2tlbml6ZXIuc2xhc2gpOgorICAgICAgICAoUm91dGVUb2tlbml6ZXIuZ3Jv
dXApOgorICAgICAgICAoUm91dGVUb2tlbml6ZXIuc3Rhcik6CisgICAgICAgIChSb3V0ZVRva2Vu
aXplci5zY2FuKToKKyAgICAgICAgKFJvdXRlQ29tcGlsZXIpOgorICAgICAgICAoUm91dGVDb21w
aWxlci5fX2luaXRfXyk6CisgICAgICAgIChSb3V0ZUNvbXBpbGVyLnJlc2V0KToKKyAgICAgICAg
KFJvdXRlQ29tcGlsZXIuY29tcGlsZSk6CisgICAgICAgIChSb3V0ZUNvbXBpbGVyLnByb2Nlc3Nf
bGl0ZXJhbCk6CisgICAgICAgIChSb3V0ZUNvbXBpbGVyLnByb2Nlc3Nfc2xhc2gpOgorICAgICAg
ICAoUm91dGVDb21waWxlci5wcm9jZXNzX2dyb3VwKToKKyAgICAgICAgKFJvdXRlQ29tcGlsZXIu
cHJvY2Vzc19zdGFyKToKKyAgICAgICAgKGNvbXBpbGVfcGF0aF9tYXRjaCk6CisgICAgICAgIChS
b3V0ZXIpOgorICAgICAgICAoUm91dGVyLl9faW5pdF9fKToKKyAgICAgICAgKFJvdXRlci5yZWdp
c3Rlcik6CisgICAgICAgIChSb3V0ZXIuZ2V0X2hhbmRsZXIpOgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9yb3V0
ZXMucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRz
ZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9zZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAo
b2YpOgorICAgICAgICAoUmVxdWVzdFJld3JpdGVyKToKKyAgICAgICAgKFJlcXVlc3RSZXdyaXRl
ci5fX2luaXRfXyk6CisgICAgICAgIChSZXF1ZXN0UmV3cml0ZXIucmVnaXN0ZXIpOgorICAgICAg
ICAoUmVxdWVzdFJld3JpdGVyLnJld3JpdGUpOgorICAgICAgICAoV2ViVGVzdFNlcnZlcik6Cisg
ICAgICAgIChXZWJUZXN0U2VydmVyLl9faW5pdF9fKToKKyAgICAgICAgKFdlYlRlc3RTZXJ2ZXIu
X19pbml0X18udG8pOgorICAgICAgICAoV2ViVGVzdFNlcnZlci5oYW5kbGVfZXJyb3IpOgorICAg
ICAgICAoV2ViVGVzdFJlcXVlc3RIYW5kbGVyKToKKyAgICAgICAgKFdlYlRlc3RSZXF1ZXN0SGFu
ZGxlci5oYW5kbGVfb25lX3JlcXVlc3QpOgorICAgICAgICAoV2ViVGVzdFJlcXVlc3RIYW5kbGVy
LmdldF9yZXF1ZXN0X2xpbmUpOgorICAgICAgICAoV2ViVGVzdEh0dHBkKToKKyAgICAgICAgKFdl
YlRlc3RIdHRwZC50byk6CisgICAgICAgIChXZWJUZXN0SHR0cGQud2hpY2gpOgorICAgICAgICAo
V2ViVGVzdEh0dHBkLl9faW5pdF9fKToKKyAgICAgICAgKFdlYlRlc3RIdHRwZC5zdGFydCk6Cisg
ICAgICAgIChXZWJUZXN0SHR0cGQuc3RvcCk6CisgICAgICAgIChXZWJUZXN0SHR0cGQuZ2V0X3Vy
bCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xz
L3dwdHNlcnZlL3dwdHNlcnZlL3N0YXNoLnB5OiBBZGRlZC4KKyAgICAgICAgKFN0YXNoKToKKyAg
ICAgICAgKFN0YXNoLl9faW5pdF9fKToKKyAgICAgICAgKFN0YXNoLnB1dCk6CisgICAgICAgIChT
dGFzaC50YWtlKToKKyAgICAgICAgKFBhdGhTdGFzaCk6CisgICAgICAgIChQYXRoU3Rhc2guX19p
bml0X18pOgorICAgICAgICAoUGF0aFN0YXNoLl9fc2V0aXRlbV9fKToKKyAgICAgICAgKFBhdGhT
dGFzaC5fX2dldGl0ZW1fXyk6CisgICAgICAgIChTdGFzaEVycm9yKToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUv
dXRpbHMucHk6IEFkZGVkLgorICAgICAgICAoaW52ZXJ0X2RpY3QpOgorICAgICAgICAoSFRUUEV4
Y2VwdGlvbik6CisgICAgICAgIChIVFRQRXhjZXB0aW9uLl9faW5pdF9fKToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvd3B0c2Vy
dmUvd3B0c2VydmUucHk6IEFkZGVkLgorICAgICAgICAoYWJzX3BhdGgpOgorICAgICAgICAocGFy
c2VfYXJncyk6CisgICAgICAgIChtYWluKToKKwogMjAxNC0wMS0xMiAgU2VyZ2lvIENvcnJlaWEg
IDxzZXJnaW8uY29ycmVpYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFtFRkxdW1dLMl0gTWFr
ZSBBUEkgdGVzdHMgd29yayBhZ2FpbgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVu
bmVyLnB5CmluZGV4IGRjMDllYWQwYjU1MjEyZmI4NmM3N2ZlNTk3MjQ5MzdmYmJiMmE5NDYuLjBm
ZTkzYmQ1ZDM2MDAxZDYyZTk3NDFjYWMyNmY5ZmIxZWU0MzQ4OWEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1
bm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKQEAgLTc0LDE2ICs3NCwxOCBAQCBjbGFzcyBMYXlv
dXRUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3Rlc3RfaW5wdXRzID0gW10KICAg
ICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IE5vbmUKICAgICAgICAgc2VsZi5fbmVlZHNfd2Vic29j
a2V0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fbmVlZHNfd3B0ID0gTm9uZQogICAgICAgICBzZWxm
Ll9yZXRyeWluZyA9IEZhbHNlCiAKICAgICAgICAgc2VsZi5fY3VycmVudF9ydW5fcmVzdWx0cyA9
IE5vbmUKICAgICAgICAgc2VsZi5fcmVtYWluaW5nX2xvY2tlZF9zaGFyZHMgPSBbXQogICAgICAg
ICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gRmFsc2UKIAotICAgIGRlZiBydW5fdGVzdHMoc2VsZiwg
ZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9fc2tpcCwgbnVtX3dvcmtlcnMsIG5l
ZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIHJldHJ5aW5nKToKKyAgICBkZWYgcnVuX3Rlc3Rz
KHNlbGYsIGV4cGVjdGF0aW9ucywgdGVzdF9pbnB1dHMsIHRlc3RzX3RvX3NraXAsIG51bV93b3Jr
ZXJzLCBuZWVkc19odHRwLCBuZWVkc193ZWJzb2NrZXRzLCBuZWVkc193cHQsIHJldHJ5aW5nKToK
ICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zCiAgICAgICAgIHNlbGYu
X3Rlc3RfaW5wdXRzID0gdGVzdF9pbnB1dHMKICAgICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IG5l
ZWRzX2h0dHAKKyAgICAgICAgc2VsZi5fbmVlZHNfd3B0ID0gbmVlZHNfd3B0CiAgICAgICAgIHNl
bGYuX25lZWRzX3dlYnNvY2tldHMgPSBuZWVkc193ZWJzb2NrZXRzCiAgICAgICAgIHNlbGYuX3Jl
dHJ5aW5nID0gcmV0cnlpbmcKIApAQCAtMjA2LDYgKzIwOCw5IEBAIGNsYXNzIExheW91dFRlc3RS
dW5uZXIob2JqZWN0KToKICAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2Vic29ja2V0czoKICAgICAg
ICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdGFydGluZyBXZWJTb2NrZXQgc2Vy
dmVyIC4uLicpCiAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIo
KQorICAgICAgICBpZiBzZWxmLl9uZWVkc193cHQ6CisgICAgICAgICAgICBzZWxmLl9wcmludGVy
LndyaXRlX3VwZGF0ZSgnU3RhcnRpbmcgV1BUIHNlcnZlciAuLi4nKQorICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5zdGFydF93cHRfc2VydmVyKCkKICAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9jayA9
IFRydWUKIAogICAgIGRlZiBzdG9wX3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgpAQCAtMjE2LDYg
KzIyMSw5IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgICAgIGlm
IHNlbGYuX25lZWRzX3dlYnNvY2tldHM6CiAgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53
cml0ZV91cGRhdGUoJ1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKICAgICAgICAgICAg
ICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgICAgICBpZiBz
ZWxmLl9uZWVkc193cHQ6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRh
dGUoJ1N0b3BwaW5nIFdQVCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0
LnN0b3Bfd3B0X3NlcnZlcigpCiAgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0
ZSgnUmVsZWFzaW5nIHNlcnZlciBsb2NrIC4uLicpCiAgICAgICAgICAgICBzZWxmLl9wb3J0LnJl
bGVhc2VfaHR0cF9sb2NrKCkKICAgICAgICAgICAgIHNlbGYuX2hhc19odHRwX2xvY2sgPSBGYWxz
ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJv
bGxlcnMvbWFuYWdlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2Nv
bnRyb2xsZXJzL21hbmFnZXIucHkKaW5kZXggZTFhMDhlYWYyNTRkNzIwZWFiNzNlNDk3ZWYyNmI0
MmRiZmNkMzI2Ni4uMmM2MDUxYjY2MDViNWNmYzljNjNhMDNhZjQ2ZGVhODY0YTFkMGQ0ZSAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bWFuYWdlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250
cm9sbGVycy9tYW5hZ2VyLnB5CkBAIC03OSw2ICs3OSw3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0
KToKICAgICAgICAgc2VsZi5IVFRQX1NVQkRJUiA9ICdodHRwJyArIHBvcnQuVEVTVF9QQVRIX1NF
UEFSQVRPUgogICAgICAgICBzZWxmLlBFUkZfU1VCRElSID0gJ3BlcmYnCiAgICAgICAgIHNlbGYu
V0VCU09DS0VUX1NVQkRJUiA9ICd3ZWJzb2NrZXQnICsgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9S
CisgICAgICAgIHNlbGYuV1BUX1NVQkRJUiA9ICdpbXBvcnRlZCcgKyBwb3J0LlRFU1RfUEFUSF9T
RVBBUkFUT1IgKyAidzNjIiAgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IKICAgICAgICAgc2Vs
Zi5MQVlPVVRfVEVTVFNfRElSRUNUT1JZID0gJ0xheW91dFRlc3RzJwogCiAgICAgICAgICMgZGlz
YWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRvIGluc3RhbGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4K
QEAgLTk4LDYgKzk5LDkgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgIGRlZiBfaXNfd2Vi
c29ja2V0X3Rlc3Qoc2VsZiwgdGVzdCk6CiAgICAgICAgIHJldHVybiBzZWxmLldFQlNPQ0tFVF9T
VUJESVIgaW4gdGVzdAogCisgICAgZGVmIF9pc193cHRfdGVzdChzZWxmLCB0ZXN0KToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuV1BUX1NVQkRJUiBpbiB0ZXN0CisKICAgICBkZWYgX2h0dHBfdGVzdHMo
c2VsZiwgdGVzdF9uYW1lcyk6CiAgICAgICAgIHJldHVybiBzZXQodGVzdCBmb3IgdGVzdCBpbiB0
ZXN0X25hbWVzIGlmIHNlbGYuX2lzX2h0dHBfdGVzdCh0ZXN0KSkKIApAQCAtMTMxLDcgKzEzNSw3
IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgcnVubmluZyBtdWx0aXBsZSBjb3Bp
ZXMgb2YgTlJXVHMuIFBlcmYgdGVzdHMgYXJlIGxvY2tlZAogICAgICAgICBiZWNhdXNlIGhlYXZ5
IGxvYWQgY2F1c2VkIGJ5IHJ1bm5pbmcgb3RoZXIgdGVzdHMgaW4gcGFyYWxsZWwKICAgICAgICAg
bWlnaHQgY2F1c2Ugc29tZSBvZiB0aGVtIHRvIHRpbWVvdXQuIiIiCi0gICAgICAgIHJldHVybiBz
ZWxmLl9pc19odHRwX3Rlc3QodGVzdF9maWxlKSBvciBzZWxmLl9pc19wZXJmX3Rlc3QodGVzdF9m
aWxlKQorICAgICAgICByZXR1cm4gc2VsZi5faXNfaHR0cF90ZXN0KHRlc3RfZmlsZSkgb3Igc2Vs
Zi5faXNfcGVyZl90ZXN0KHRlc3RfZmlsZSkgb3Igc2VsZi5faXNfd3B0X3Rlc3QodGVzdF9maWxl
KQogCiAgICAgZGVmIF90ZXN0X2lzX3Nsb3coc2VsZiwgdGVzdF9maWxlKToKICAgICAgICAgcmV0
dXJuIHNlbGYuX2V4cGVjdGF0aW9ucy5tb2RlbCgpLmhhc19tb2RpZmllcih0ZXN0X2ZpbGUsIHRl
c3RfZXhwZWN0YXRpb25zLlNMT1cpCkBAIC0yNDYsNiArMjUwLDcgQEAgY2xhc3MgTWFuYWdlcihv
YmplY3QpOgogCiAgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgdGVzdHNfdG9fcnVuLCB0ZXN0c190
b19za2lwLCByZXBlYXRfZWFjaCwgaXRlcmF0aW9ucywgbnVtX3dvcmtlcnMsIHJldHJ5aW5nKToK
ICAgICAgICAgbmVlZHNfaHR0cCA9IGFueShzZWxmLl9pc19odHRwX3Rlc3QodGVzdCkgZm9yIHRl
c3QgaW4gdGVzdHNfdG9fcnVuKQorICAgICAgICBuZWVkc193cHQgPSBhbnkoc2VsZi5faXNfd3B0
X3Rlc3QodGVzdCkgZm9yIHRlc3QgaW4gdGVzdHNfdG9fcnVuKQogICAgICAgICBuZWVkc193ZWJz
b2NrZXRzID0gYW55KHNlbGYuX2lzX3dlYnNvY2tldF90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRl
c3RzX3RvX3J1bikKIAogICAgICAgICB0ZXN0X2lucHV0cyA9IFtdCkBAIC0yNTMsNyArMjU4LDcg
QEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHNf
dG9fcnVuOgogICAgICAgICAgICAgICAgIGZvciBfIGluIHhyYW5nZShyZXBlYXRfZWFjaCk6CiAg
ICAgICAgICAgICAgICAgICAgIHRlc3RfaW5wdXRzLmFwcGVuZChzZWxmLl90ZXN0X2lucHV0X2Zv
cl9maWxlKHRlc3QpKQotICAgICAgICByZXR1cm4gc2VsZi5fcnVubmVyLnJ1bl90ZXN0cyhzZWxm
Ll9leHBlY3RhdGlvbnMsIHRlc3RfaW5wdXRzLCB0ZXN0c190b19za2lwLCBudW1fd29ya2Vycywg
bmVlZHNfaHR0cCwgbmVlZHNfd2Vic29ja2V0cywgcmV0cnlpbmcpCisgICAgICAgIHJldHVybiBz
ZWxmLl9ydW5uZXIucnVuX3Rlc3RzKHNlbGYuX2V4cGVjdGF0aW9ucywgdGVzdF9pbnB1dHMsIHRl
c3RzX3RvX3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19odHRwLCBuZWVkc193ZWJzb2NrZXRzLCBu
ZWVkc193cHQsIHJldHJ5aW5nKQogCiAgICAgZGVmIF9jbGVhbl91cF9ydW4oc2VsZik6CiAgICAg
ICAgIF9sb2cuZGVidWcoIkZsdXNoaW5nIHN0ZG91dCIpCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dwdC9fX2luaXRfXy5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd3B0L19faW5pdF9fLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmVmNjViZWU1YmI3N2U5NmViYzdjZDljNDc2NDA2OTBmYmRhOGFjMTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJz
L3dwdC9fX2luaXRfXy5weQpAQCAtMCwwICsxIEBACisjIFJlcXVpcmVkIGZvciBQeXRob24gdG8g
c2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd3B0L2xhdW5jaGVyLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93cHQvbGF1bmNoZXIu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzA2OWRlNmVjZTYzNTMzZWUxN2MzMTc4MTUwNzcxYmQ0ZTk4YWJlMAot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Nl
cnZlcnMvd3B0L2xhdW5jaGVyLnB5CkBAIC0wLDAgKzEsODYgQEAKKyIiIlNjcmlwdCB0byBzZXQg
dXAgYW5kIGxhdW5jaCB3ZWIgcGxhdGZvcm0gdGVzdCBzZXJ2ZXJzIGluIHRoZSBjb250ZXh0IG9m
IFdlYktpdCBmcmFtZXdvcmsuIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBv
cnQgb3MKK2ltcG9ydCBzaWduYWwKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1l
X18pCitsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworcGF0aF9yb290ID0gb3MucGF0
aC5hYnNwYXRoKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdKQord3B0c2VydmVfYmFzZV9wYXRo
ID0gb3MucGF0aC5qb2luKHBhdGhfcm9vdCwgIi4uIiwgIi4uIiwgIi4uIiwgInRoaXJkcGFydHki
LCAid3B0c2VydmUiKQord3B0c2VydmVyX3BhdGggPSBvcy5wYXRoLmpvaW4od3B0c2VydmVfYmFz
ZV9wYXRoLCAidG9vbHMiLCAid3B0c2VydmUiLCAid3B0c2VydmUiKQorCitzeXMucGF0aC5pbnNl
cnQoMSwgd3B0c2VydmVyX3BhdGgpCitmcm9tIGhhbmRsZXJzIGltcG9ydCBGaWxlSGFuZGxlcgor
ZnJvbSB1dGlscyBpbXBvcnQgSFRUUEV4Y2VwdGlvbgorCitzeXMucGF0aC5pbnNlcnQoMSwgd3B0
c2VydmVfYmFzZV9wYXRoKQoraW1wb3J0IHNlcnZlIGFzIFdQVFNlcnZlcgorCitjbGFzcyBXUFRM
YXVuY2hlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3ZWJraXRfYmFzZSwgb3V0
cHV0X2RpciwgaHR0cF9wb3J0ID0gTm9uZSwgd3NfcG9ydCA9IE5vbmUsIHJlc291cmNlc19wYXRo
ID0gTm9uZSk6CisgICAgICAgIHNlbGYuaHR0cF9wb3J0ID0gaHR0cF9wb3J0IGlmIGh0dHBfcG9y
dCBlbHNlIDgwODAgCisgICAgICAgIHNlbGYud3NfcG9ydCA9IHdzX3BvcnQgaWYgd3NfcG9ydCBl
bHNlIDQ5MDAwCisKKyAgICAgICAgc2VsZi53cHRzZXJ2ZV9jb25maWcgPSB7CisgICAgICAgICAg
ICAiaG9zdCI6ICJsb2NhbGhvc3QiLAorICAgICAgICAgICAgInBvcnRzIjp7CisgICAgICAgICAg
ICAgICAgImh0dHAiOltzZWxmLmh0dHBfcG9ydCwgImF1dG8iXSwKKyAgICAgICAgICAgICAgICAi
aHR0cHMiOlsiYXV0byJdLAorICAgICAgICAgICAgICAgICJ3cyI6W3NlbGYud3NfcG9ydF19LAor
ICAgICAgICAgICAgImNoZWNrX3N1YmRvbWFpbnMiOiBGYWxzZSwKKyAgICAgICAgICAgICJsb2df
bGV2ZWwiOiJkZWJ1ZyJ9CisKKyAgICAgICAgc2VsZi5odHRwX2RvY19yb290ID0gb3MucGF0aC5q
b2luKHdlYmtpdF9iYXNlLCAiTGF5b3V0VGVzdHMiLCAiaW1wb3J0ZWQiLCAidzNjIikKKyAgICAg
ICAgc2VsZi53c19kb2Nfcm9vdCA9IHNlbGYuaHR0cF9kb2Nfcm9vdAorCisgICAgICAgIHNlbGYu
aHR0cF9yZXdyaXRlcyA9IFdQVFNlcnZlci5yZXdyaXRlcworCisgICAgICAgIHNlbGYuaHR0cF9y
b3V0ZXMgPSBXUFRTZXJ2ZXIucm91dGVzCisgICAgICAgIHNlbGYucmVzb3VyY2VzX3BhdGggPSBy
ZXNvdXJjZXNfcGF0aCBpZiByZXNvdXJjZXNfcGF0aCBlbHNlIG9zLnBhdGguam9pbih3ZWJraXRf
YmFzZSwgIkxheW91dFRlc3RzIiwgInJlc291cmNlcyIpCisgICAgICAgIHNlbGYuaHR0cF9yb3V0
ZXMuaW5zZXJ0KDMsCisgICAgICAgICAgICAgICgiR0VUIiwgIi9yZXNvdXJjZXMvKiIsIEV4dGVy
bmFsUmVzb3VyY2VIYW5kbGVyKCIvcmVzb3VyY2VzLyIsIHNlbGYucmVzb3VyY2VzX3BhdGgpKSkK
KyAgICAgICAgICAgICAKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIFdQVFNlcnZlci5y
b3V0ZXMgPSBzZWxmLmh0dHBfcm91dGVzCisgICAgICAgIFdQVFNlcnZlci5yZXdyaXRlcyA9IHNl
bGYuaHR0cF9yZXdyaXRlcworICAgICAgICBXUFRTZXJ2ZXIuaHR0cF9kb2Nfcm9vdCA9IHNlbGYu
aHR0cF9kb2Nfcm9vdAorICAgICAgICBXUFRTZXJ2ZXIud3NfZG9jX3Jvb3QgPSBzZWxmLndzX2Rv
Y19yb290CisKKyAgICAgICAgV1BUU2VydmVyLmxvZ2dlciA9IFdQVFNlcnZlci5kZWZhdWx0X2xv
Z2dlcihzZWxmLndwdHNlcnZlX2NvbmZpZ1sibG9nX2xldmVsIl0pCisgICAgICAgIGNvbmZpZ18s
IHN0YXJ0ZWRfc2VydmVycyA9IFdQVFNlcnZlci5zdGFydChzZWxmLndwdHNlcnZlX2NvbmZpZykK
KworICAgICAgICBmb3IgcHJvdG9jb2wsIHNlcnZlcnMgaW4gc3RhcnRlZF9zZXJ2ZXJzLml0ZW1z
KCk6CisgICAgICAgICAgICBmb3IgcG9ydCwgcHJvY2VzcyBpbiBzZXJ2ZXJzOgorICAgICAgICAg
ICAgICAgIGxvZ2dlci5pbmZvKCIlcywgcG9ydDolZCwgcGlkOiVkIiAlIChwcm90b2NvbCwgcG9y
dCwgcHJvY2Vzcy5wcm9jLnBpZCkgKQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAg
ICBjID0gc3lzLnN0ZGluLnJlYWQoMSkKKyAgICAgICAgICAgIGV4aXQoMCkKKworY2xhc3MgRXh0
ZXJuYWxSZXNvdXJjZUhhbmRsZXIoRmlsZUhhbmRsZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBhbGlhcywgcmVzb3VyY2VfcGF0aCk6CisgICAgICAgIEZpbGVIYW5kbGVyLl9faW5pdF9fKHNl
bGYpCisgICAgICAgIHNlbGYuYWxpYXMgPSBhbGlhcworICAgICAgICBzZWxmLnJlc291cmNlX3Bh
dGggPSByZXNvdXJjZV9wYXRoCisgICAgICAgIAorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCByZXF1
ZXN0LCByZXNwb25zZSk6CisgICAgICAgIHJlbGF0aXZlX3BhdGggPSByZXF1ZXN0LnVybF9wYXJ0
cy5wYXRoCisgICAgICAgIGlmIHJlbGF0aXZlX3BhdGguc3RhcnRzd2l0aChzZWxmLmFsaWFzKToK
KyAgICAgICAgICAgIHJlbGF0aXZlX3BhdGggPSByZWxhdGl2ZV9wYXRoW2xlbihzZWxmLmFsaWFz
KTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBIVFRQRXhjZXB0aW9uKDQwNCkK
KyAgICAgICAgaWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKCIvIik6CisgICAgICAgICAgICBy
ZWxhdGl2ZV9wYXRoID0gcmVsYXRpdmVfcGF0aFsxOl0KKyAgICAgICAgcGF0aCA9IG9zLnBhdGgu
am9pbihzZWxmLnJlc291cmNlX3BhdGgsIHJlbGF0aXZlX3BhdGgpCisgICAgICAgIHJldHVybiBz
ZWxmLnNlcnZlX2ZpbGUocGF0aCwgcmVxdWVzdCwgcmVzcG9uc2UpCisKK2lmIF9fbmFtZV9fID09
ICJfX21haW5fXyI6CisgICAgaWYgKGxlbihzeXMuYXJndikgPT0gMyk6CisgICAgICAgIGxhdW5j
aGVyID0gV1BUTGF1bmNoZXIoc3lzLmFyZ3ZbMV0sIHN5cy5hcmd2WzJdKQorICAgIGVsc2U6Cisg
ICAgICAgIGxhdW5jaGVyID0gV1BUTGF1bmNoZXIoc3lzLmFyZ3ZbMV0sIHN5cy5hcmd2WzJdLCBz
eXMuYXJndlszXSwgc3lzLmFyZ3ZbNF0sIHN5cy5hcmd2WzVdKQorICAgIGxhdW5jaGVyLnN0YXJ0
KCkKKwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2Vy
dmVycy93cHRfc2VydmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
c2VydmVycy93cHRfc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzNjE4NjBkM2Y1ZmMxY2EyOGQ5NGIy
OGZkMjZkOTZiNTAzMWRiYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dwdF9zZXJ2ZXIucHkKQEAgLTAsMCArMSw2MyBAQAor
IiIiQSBjbGFzcyB0byBzdGFydC9zdG9wIHRoZSB3ZWIgcGxhdGZvcm0gdGVzdCBzZXJ2ZXJzIHVz
ZWQgYnkgbGF5b3V0IHRlc3RzLiIiIgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2lt
cG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBodHRwX3NlcnZlcl9iYXNlCisKK19sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworcGF0aF9yb290ID0gb3MucGF0aC5hYnNw
YXRoKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdKQorCisKK2NsYXNzIFdQVEh0dHBkKGh0dHBf
c2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
X29iaiwgb3V0cHV0X2RpciwgcGlkZmlsZT1Ob25lKToKKyAgICAgICAgIiIiQXJnczoKKyAgICAg
ICAgICBvdXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3QgcmVz
dWx0IGRpcmVjdG9yeQorICAgICAgICAiIiIKKyAgICAgICAgaHR0cF9zZXJ2ZXJfYmFzZS5IdHRw
U2VydmVyQmFzZS5fX2luaXRfXyhzZWxmLCBwb3J0X29iaikKKyAgICAgICAgc2VsZi5fb3V0cHV0
X2RpciA9IG91dHB1dF9kaXIKKyAgICAgICAgc2VsZi5fd2Via2l0X2Jhc2UgPSBwb3J0X29iai5w
YXRoX2Zyb21fd2Via2l0X2Jhc2UoKQorCisgICAgICAgIHNlbGYuX25hbWUgPSAnd3B0JworCisg
ICAgICAgIHNlbGYuX2xvZ19maWxlX25hbWUgPSAnd3B0X3Byb2Nlc3NfbG9nLm91dC50eHQnCisg
ICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQorCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25l
CisgICAgICAgIHNlbGYuX3BpZF9maWxlID0gcGlkZmlsZQorICAgICAgICBpZiBub3Qgc2VsZi5f
cGlkX2ZpbGU6CisgICAgICAgICAgICBzZWxmLl9waWRfZmlsZSA9IHNlbGYuX2ZpbGVzeXN0ZW0u
am9pbihzZWxmLl9ydW50aW1lX3BhdGgsICclcy5waWQnICUgc2VsZi5fbmFtZSkKKworICAgIGRl
ZiBfcHJlcGFyZV9jb25maWcoc2VsZik6CisgICAgICAgIG91dHB1dF9sb2cgPSBzZWxmLl9maWxl
c3lzdGVtLmpvaW4oc2VsZi5fb3V0cHV0X2Rpciwgc2VsZi5fbG9nX2ZpbGVfbmFtZSkKKyAgICAg
ICAgc2VsZi5fd3NvdXQgPSBzZWxmLl9maWxlc3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0
aW5nKG91dHB1dF9sb2cpCisKKyAgICAgICAgc2VsZi5fc3RhcnRfY21kID0gWyJweXRob24iLCJs
YXVuY2hlci5weSIsIHNlbGYuX3dlYmtpdF9iYXNlLCBzZWxmLl9vdXRwdXRfZGlyXQorICAgICAg
ICBzZWxmLl9jd2QgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4ocGF0aF9yb290LCAid3B0IikKKwor
ICAgIGRlZiBfc3Bhd25fcHJvY2VzcyhzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRp
bmcgJXMgc2VydmVyLCBjbWQ9IiVzIicgJSAoc2VsZi5fbmFtZSwgc2VsZi5fc3RhcnRfY21kKSkK
KyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5fc3RhcnRfY21k
LCBjd2Q9c2VsZi5fY3dkLCBzaGVsbD1GYWxzZSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRv
dXQ9c2VsZi5fd3NvdXQsIHN0ZGVycj1zZWxmLl9leGVjdXRpdmUuU1RET1VUKQorICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShzZWxmLl9waWRfZmlsZSwgc3RyKHNlbGYu
X3Byb2Nlc3MucGlkKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Nlc3MucGlkCisKKyAgICBk
ZWYgX3N0b3BfcnVubmluZ19zZXJ2ZXIoc2VsZik6CisgICAgICAgIF9sb2cuZGVidWcoJ1N0b3Bw
aW5nICVzIHNlcnZlcicgJSAoc2VsZi5fbmFtZSkpCisgICAgICAgIGlmIHNlbGYuX3BpZCBhbmQg
bm90IHNlbGYuX2V4ZWN1dGl2ZS5jaGVja19ydW5uaW5nX3BpZChzZWxmLl9waWQpOgorICAgICAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUoc2VsZi5fcGlkX2ZpbGUpCisgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKKyAgICAgICAgICAgIHNlbGYuX3By
b2Nlc3MuY29tbXVuaWNhdGUoaW5wdXQ9J2VcbicpCisgICAgICAgIGlmIHNlbGYuX3dzb3V0Ogor
ICAgICAgICAgICAgc2VsZi5fd3NvdXQuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fd3NvdXQg
PSBOb25lCisgICAgICAgIGlmIHNlbGYuX2V4ZWN1dGl2ZS5jaGVja19ydW5uaW5nX3BpZChzZWxm
Ll9waWQpOgorICAgICAgICAgICAgcmFpc2UgaHR0cF9zZXJ2ZXJfYmFzZS5TZXJ2ZXJFcnJvcign
RmFpbGVkIHRvIHN0b3AgJXM6IHBsZWFzZSBnbyB0byB3cHQgbG9nIGZpbGUgdG8gZ2V0IHRoZSBQ
SUQgbGlzdCcgJSAoc2VsZi5fbmFtZSkpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3Zl
KHNlbGYuX3BpZF9maWxlKQorCisKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKaW5kZXgg
MTY3NWVmODljZjBjODgzNGE2MmM4ZDc0ZjEwYjIxZDVjODMwODgxYS4uY2YwMDkxZTgxOWJkY2Y0
NDI0ZWViM2FjNjMwODFiMTA0OTFjYTZkYSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkKQEAgLTY1LDYgKzY1LDcgQEAgZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJv
Y2VzcwogZnJvbSB3ZWJraXRweS5wb3J0LmZhY3RvcnkgaW1wb3J0IFBvcnRGYWN0b3J5CiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBhcGFjaGVfaHR0cF9zZXJ2ZXIK
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyCitm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCB3cHRfc2VydmVyCiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCB3ZWJzb2NrZXRfc2VydmVyCiAK
IF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKQEAgLTEyMiw2ICsxMjMsNyBAQCBj
bGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2hlbHBlciA9IE5vbmUKICAgICAgICAg
c2VsZi5faHR0cF9zZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIg
PSBOb25lCisgICAgICAgIHNlbGYuX3dwdF9zZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX2lt
YWdlX2RpZmZlciA9IE5vbmUKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0
b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzICAjIG92ZXJyaWRhYmxlIGZvciB0ZXN0
aW5nCiAgICAgICAgIHNlbGYuX2h0dHBfbG9jayA9IE5vbmUgICMgRklYTUU6IFdoeSBkb2VzIHRo
aXMgbGl2ZSBvbiB0aGUgcG9ydCBvYmplY3Q/CkBAIC05MzQsNiArOTM2LDE1IEBAIGNsYXNzIFBv
cnQob2JqZWN0KToKICAgICAgICAgc2VydmVyLnN0YXJ0KCkKICAgICAgICAgc2VsZi5fd2Vic29j
a2V0X3NlcnZlciA9IHNlcnZlcgogCisgICAgZGVmIHN0YXJ0X3dwdF9zZXJ2ZXIoc2VsZiwgYWRk
aXRpb25hbF9kaXJzPU5vbmUsIG51bWJlcl9vZl9zZXJ2ZXJzPU5vbmUpOgorICAgICAgICAiIiJT
dGFydCBhIHdlYiBzZXJ2ZXIuIFJhaXNlIGFuIGVycm9yIGlmIGl0IGNhbid0IHN0YXJ0IG9yIGlz
IGFscmVhZHkgcnVubmluZy4KKworICAgICAgICBQb3J0cyBjYW4gc3R1YiB0aGlzIG91dCBpZiB0
aGV5IGRvbid0IG5lZWQgYSB3ZWIgc2VydmVyIHRvIGJlIHJ1bm5pbmcuIiIiCisgICAgICAgIGFz
c2VydCBub3Qgc2VsZi5fd3B0X3NlcnZlciwgJ0FscmVhZHkgcnVubmluZyBhbiBodHRwIHNlcnZl
ci4nCisKKyAgICAgICAgc2VsZi5fd3B0X3NlcnZlciA9IHdwdF9zZXJ2ZXIuV1BUSHR0cGQoc2Vs
Ziwgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgpKQorICAgICAgICBzZWxmLl93cHRfc2VydmVyLnN0
YXJ0KCkKKwogICAgIGRlZiBodHRwX3NlcnZlcl9zdXBwb3J0c19pcHY2KHNlbGYpOgogICAgICAg
ICAjIEN5Z3dpbiBpcyB0aGUgb25seSBwbGF0Zm9ybSB0byBzdGlsbCB1c2UgQXBhY2hlIDEuMywg
d2hpY2ggb25seSBzdXBwb3J0cyBJUFY0LgogICAgICAgICAjIE9uY2UgaXQgbW92ZXMgdG8gQXBh
Y2hlIDIsIHdlIGNhbiBkcm9wIHRoaXMgbWV0aG9kIGFsdG9nZXRoZXIuCkBAIC05NjMsNiArOTc0
LDEyIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX3dlYnNvY2tldF9z
ZXJ2ZXIuc3RvcCgpCiAgICAgICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyID0gTm9uZQog
CisgICAgZGVmIHN0b3Bfd3B0X3NlcnZlcihzZWxmKToKKyAgICAgICAgIiIiU2h1dCBkb3duIHRo
ZSB3cHQgc2VydmVyIGlmIGl0IGlzIHJ1bm5pbmcuIERvIG5vdGhpbmcgaWYgaXQgaXNuJ3QuIiIi
CisgICAgICAgIGlmIHNlbGYuX3dwdF9zZXJ2ZXI6CisgICAgICAgICAgICBzZWxmLl93cHRfc2Vy
dmVyLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5fd3B0X3NlcnZlciA9IE5vbmUKKwogICAgIGRl
ZiByZWxlYXNlX2h0dHBfbG9jayhzZWxmKToKICAgICAgICAgaWYgc2VsZi5faHR0cF9sb2NrOgog
ICAgICAgICAgICAgc2VsZi5faHR0cF9sb2NrLmNsZWFudXBfaHR0cF9sb2NrKCkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CmluZGV4IGM1OGU5YWVhZDU2ZGJlMTE0YzVhMzE2NmY1
Zjk1ZDk1YmE5NDZhNWUuLjcxY2Y3ZDNlODI5YzY2ZDFiMDljYmU2ZDM5Y2RlNGZlMjFkOTkzMTcg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQpAQCAtMjI1LDEyICsyMjUsMTkg
QEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICBIVFRQX0RJUiA9ICJodHRwL3Rlc3RzLyIK
ICAgICBIVFRQX0xPQ0FMX0RJUiA9ICJodHRwL3Rlc3RzL2xvY2FsLyIKKyAgICBXUFRfRElSID0g
ImltcG9ydGVkL3czYy8iCiAKICAgICBkZWYgaXNfaHR0cF90ZXN0KHNlbGYsIHRlc3RfbmFtZSk6
CiAgICAgICAgIHJldHVybiB0ZXN0X25hbWUuc3RhcnRzd2l0aChzZWxmLkhUVFBfRElSKSBhbmQg
bm90IHRlc3RfbmFtZS5zdGFydHN3aXRoKHNlbGYuSFRUUF9MT0NBTF9ESVIpCiAKKyAgICBkZWYg
aXNfd3B0X3Rlc3Qoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgcmV0dXJuIHRlc3RfbmFtZS5z
dGFydHN3aXRoKHNlbGYuV1BUX0RJUikKKwogICAgIGRlZiB0ZXN0X3RvX3VyaShzZWxmLCB0ZXN0
X25hbWUpOgogICAgICAgICAiIiJDb252ZXJ0IGEgdGVzdCBuYW1lIHRvIGEgVVJJLiIiIgorICAg
ICAgICBpZiBzZWxmLmlzX3dwdF90ZXN0KHRlc3RfbmFtZSk6CisgICAgICAgICAgICByZXR1cm4g
Imh0dHA6Ly8xMjcuMC4wLjE6ODA4MC8iICsgdGVzdF9uYW1lW2xlbihzZWxmLldQVF9ESVIpOl0K
KwogICAgICAgICBpZiBub3Qgc2VsZi5pc19odHRwX3Rlc3QodGVzdF9uYW1lKToKICAgICAgICAg
ICAgIHJldHVybiBwYXRoLmFic3BhdGhfdG9fdXJpKHNlbGYuX3BvcnQuaG9zdC5wbGF0Zm9ybSwg
c2VsZi5fcG9ydC5hYnNwYXRoX2Zvcl90ZXN0KHRlc3RfbmFtZSkpCiAKQEAgLTI1NCw3ICsyNjEs
OSBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgICAgIGlmIG5vdCBwcmVmaXguZW5k
c3dpdGgoJy8nKToKICAgICAgICAgICAgICAgICBwcmVmaXggKz0gJy8nCiAgICAgICAgICAgICBy
ZXR1cm4gdXJpW2xlbihwcmVmaXgpOl0KLSAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImh0dHA6
Ly8iKToKKyAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImh0dHA6Ly8xMjcuMC4wLjE6ODA4MCIp
OgorICAgICAgICAgICAgcmV0dXJuIHVyaS5yZXBsYWNlKCdodHRwOi8vMTI3LjAuMC4xOjgwODAv
Jywgc2VsZi5XUFRfRElSKQorICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cDovLzEyNy4w
LjAuMTo4MDAwIik6CiAgICAgICAgICAgICByZXR1cm4gdXJpLnJlcGxhY2UoJ2h0dHA6Ly8xMjcu
MC4wLjE6ODAwMC8nLCBzZWxmLkhUVFBfRElSKQogICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgi
aHR0cHM6Ly8iKToKICAgICAgICAgICAgIHJldHVybiB1cmkucmVwbGFjZSgnaHR0cHM6Ly8xMjcu
MC4wLjE6ODQ0My8nLCBzZWxmLkhUVFBfRElSKQpAQCAtMzgyLDcgKzM5MSw3IEBAIGNsYXNzIERy
aXZlcihvYmplY3QpOgogICAgICAgICAjIEZJWE1FOiBwZXJmb3JtYW5jZSB0ZXN0cyBwYXNzIGlu
IGZ1bGwgVVJMcyBpbnN0ZWFkIG9mIHRlc3QgbmFtZXMuCiAgICAgICAgIGlmIGRyaXZlcl9pbnB1
dC50ZXN0X25hbWUuc3RhcnRzd2l0aCgnaHR0cDovLycpIG9yIGRyaXZlcl9pbnB1dC50ZXN0X25h
bWUuc3RhcnRzd2l0aCgnaHR0cHM6Ly8nKSAgb3IgZHJpdmVyX2lucHV0LnRlc3RfbmFtZSA9PSAo
J2Fib3V0OmJsYW5rJyk6CiAgICAgICAgICAgICBjb21tYW5kID0gZHJpdmVyX2lucHV0LnRlc3Rf
bmFtZQotICAgICAgICBlbGlmIHNlbGYuaXNfaHR0cF90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25h
bWUpOgorICAgICAgICBlbGlmIHNlbGYuaXNfaHR0cF90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25h
bWUpIG9yICBzZWxmLmlzX3dwdF90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpOgogICAgICAg
ICAgICAgY29tbWFuZCA9IHNlbGYudGVzdF90b191cmkoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkK
ICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvbW1hbmQgPSBzZWxmLl9wb3J0LmFic3BhdGhf
Zm9yX3Rlc3QoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS9fX2luaXRfXy5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
Mzc2YmYyYmVhMmI2YWY1Y2U3OWQzZTNkMzNjNzNhZGVjNDM0ZjE4Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL19faW5pdF9fLnB5
CkBAIC0wLDAgKzEsMTMgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBk
aXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCisjIEtlZXAgdGhpcyBmaWxlIGZyZWUgb2YgYW55
IGNvZGUgb3IgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBjb3VsZAorIyBjYXVzZSBlaXRoZXIgYW4g
ZXJyb3IgdG8gb2NjdXIgb3IgYSBsb2cgbWVzc2FnZSB0byBiZSBsb2dnZWQuCisjIFRoaXMgZW5z
dXJlcyB0aGF0IGNhbGxpbmcgY29kZSBjYW4gaW1wb3J0IGluaXRpYWxpemF0aW9uIGNvZGUgZnJv
bQorIyB3ZWJraXRweSBiZWZvcmUgYW55IGVycm9ycyBvciBsb2cgbWVzc2FnZXMgZHVlIHRvIGNv
ZGUgaW4gdGhpcyBmaWxlLgorIyBJbml0aWFsaXphdGlvbiBjb2RlIGNhbiBpbmNsdWRlIHRoaW5n
cyBsaWtlIHZlcnNpb24tY2hlY2tpbmcgY29kZSBhbmQKKyMgbG9nZ2luZyBjb25maWd1cmF0aW9u
IGNvZGUuCisjCisjIFdlIGRvIG5vdCBleGVjdXRlIGFueSB2ZXJzaW9uLWNoZWNraW5nIGNvZGUg
b3IgbG9nZ2luZyBjb25maWd1cmF0aW9uCisjIGNvZGUgaW4gdGhpcyBmaWxlIHNvIHRoYXQgY2Fs
bGVycyBjYW4gb3B0LWluIGFzIHRoZXkgd2FudC4gIFRoaXMgYWxzbworIyBhbGxvd3MgZGlmZmVy
ZW50IGNhbGxlcnMgdG8gY2hvb3NlIGRpZmZlcmVudCBpbml0aWFsaXphdGlvbiBjb2RlLAorIyBh
cyBuZWNlc3NhcnkuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvd3B0c2VydmUvc2VydmUucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
d3B0c2VydmUvc2VydmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWZiMmE0MDcyMGFkNzRhZDJjNzJjMzlhYjZm
NTdkOTgyNDJmM2E0NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS9zZXJ2ZS5weQpAQCAtMCwwICsxLDMwNSBAQAorICMgLSotIGNv
ZGluZzogdXRmLTggLSotCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitp
bXBvcnQganNvbgoraW1wb3J0IHNvY2tldAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHRocmVhZGlu
ZworZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIEV2ZW50Citmcm9tIGNvbGxl
Y3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoraW1wb3J0IHVybGxpYjIKK2ltcG9ydCB1dWlkCitp
bXBvcnQgYXJncGFyc2UKKworcmVwb19yb290ID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguc3Bs
aXQoX19maWxlX18pWzBdKQorCitzeXMucGF0aC5pbnNlcnQoMSwgb3MucGF0aC5qb2luKHJlcG9f
cm9vdCwgInRvb2xzIiwgIndwdHNlcnZlIikpCitmcm9tIHdwdHNlcnZlIGltcG9ydCBzZXJ2ZXIg
YXMgd3B0c2VydmUsIGhhbmRsZXJzCitmcm9tIHdwdHNlcnZlLnJvdXRlciBpbXBvcnQgYW55X21l
dGhvZAorc3lzLnBhdGguaW5zZXJ0KDEsIG9zLnBhdGguam9pbihyZXBvX3Jvb3QsICJ0b29scyIs
ICJweXdlYnNvY2tldCIsICJzcmMiKSkKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBzdGFu
ZGFsb25lIGFzIHB5d2Vic29ja2V0CisKK2h0dHBfZG9jX3Jvb3QgPSByZXBvX3Jvb3QKK3dzX2Rv
Y19yb290ID0gcmVwb19yb290CisKK3JvdXRlcyA9IFsoYW55X21ldGhvZCwgIi90b29scy8qIiwg
aGFuZGxlcnMuRXJyb3JIYW5kbGVyKDQwNCkpLAorICAgICAgICAgIChhbnlfbWV0aG9kLCAiL3Nl
cnZlLnB5IiwgaGFuZGxlcnMuRXJyb3JIYW5kbGVyKDQwNCkpLAorICAgICAgICAgIChhbnlfbWV0
aG9kLCAiKi5weSIsIGhhbmRsZXJzLnB5dGhvbl9zY3JpcHRfaGFuZGxlciksCisgICAgICAgICAg
KCJHRVQiLCAiKi5hc2lzIiwgaGFuZGxlcnMuYXNfaXNfaGFuZGxlciksCisgICAgICAgICAgKCJH
RVQiLCAiKiIsIGhhbmRsZXJzLmZpbGVfaGFuZGxlciksCisgICAgICAgICAgXQorCityZXdyaXRl
cyA9IFsoIkdFVCIsICIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyIsICIvcmVzb3VyY2VzL3dl
YmlkbDIvbGliL3dlYmlkbDIuanMiKV0KKworc3ViZG9tYWlucyA9IFt1Ind3dyIsCisgICAgICAg
ICAgICAgIHUid3d3MSIsCisgICAgICAgICAgICAgIHUid3d3MiIsCisgICAgICAgICAgICAgIHUi
5aSp5rCX44Gu6Imv44GE5pelIiwKKyAgICAgICAgICAgICAgdSLDqWzDqHZlIl0KKworbG9nZ2Vy
ID0gTm9uZQorCitkZWYgZGVmYXVsdF9sb2dnZXIobGV2ZWwpOgorICAgIGxvZ2dlciA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCJ3ZWItcGxhdGZvcm0tdGVzdHMiKQorICAgIGxvZ2dpbmcuYmFzaWNDb25m
aWcobGV2ZWw9Z2V0YXR0cihsb2dnaW5nLCBsZXZlbC51cHBlcigpKSkKKyAgICByZXR1cm4gbG9n
Z2VyCisKK2RlZiBvcGVuX3NvY2tldChwb3J0KToKKyAgICBzb2NrID0gc29ja2V0LnNvY2tldChz
b2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgIGlmIHBvcnQgIT0gMDoKKyAg
ICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VB
RERSLCAxKQorICAgIHNvY2suYmluZCgoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgIHNvY2subGlz
dGVuKDUpCisgICAgcmV0dXJuIHNvY2sKKworZGVmIGdldF9wb3J0KCk6CisgICAgZnJlZV9zb2Nr
ZXQgPSBvcGVuX3NvY2tldCgwKQorICAgIHBvcnQgPSBmcmVlX3NvY2tldC5nZXRzb2NrbmFtZSgp
WzFdCisgICAgbG9nZ2VyLmRlYnVnKCJHb2luZyB0byB1c2UgcG9ydCAlcyIgJSBwb3J0KQorICAg
IGZyZWVfc29ja2V0LmNsb3NlKCkKKyAgICByZXR1cm4gcG9ydAorCisKK2NsYXNzIFNlcnZlclBy
b2Mob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucHJvYyA9
IE5vbmUKKyAgICAgICAgc2VsZi5kYWVtb24gPSBOb25lCisgICAgICAgIHNlbGYuc3RvcCA9IEV2
ZW50KCkKKworICAgIGRlZiBzdGFydChzZWxmLCBpbml0X2Z1bmMsIGNvbmZpZywgcG9ydCk6Cisg
ICAgICAgIHNlbGYucHJvYyA9IFByb2Nlc3ModGFyZ2V0PXNlbGYuY3JlYXRlX2RhZW1vbiwgYXJn
cz0oaW5pdF9mdW5jLCBjb25maWcsIHBvcnQpKQorICAgICAgICBzZWxmLnByb2MuZGFlbW9uID0g
VHJ1ZQorICAgICAgICBzZWxmLnByb2Muc3RhcnQoKQorCisgICAgZGVmIGNyZWF0ZV9kYWVtb24o
c2VsZiwgaW5pdF9mdW5jLCBjb25maWcsIHBvcnQpOgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBzZWxmLmRhZW1vbiA9IGluaXRfZnVuYyhjb25maWcsIHBvcnQpCisgICAgICAgIGV4Y2VwdCBz
b2NrZXQuZXJyb3I6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlNvY2tldCBlcnJvciBvbiBw
b3J0ICVzIiAlIHBvcnQpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGlmIHNlbGYuZGFl
bW9uOgorICAgICAgICAgICAgc2VsZi5kYWVtb24uc3RhcnQoYmxvY2s9RmFsc2UpCisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zdG9wLndhaXQoKQorICAgICAgICAgICAg
ZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRl
ZiB3YWl0KHNlbGYpOgorICAgICAgICBzZWxmLnN0b3Auc2V0KCkKKyAgICAgICAgc2VsZi5wcm9j
LmpvaW4oKQorCisgICAgZGVmIGtpbGwoc2VsZik6CisgICAgICAgIHNlbGYuc3RvcC5zZXQoKQor
ICAgICAgICBzZWxmLnByb2MudGVybWluYXRlKCkKKyAgICAgICAgc2VsZi5wcm9jLmpvaW4oKQor
CitkZWYgY2hlY2tfc3ViZG9tYWlucyhjb25maWcsIHN1YmRvbWFpbnMpOgorICAgIHBvcnQgPSBn
ZXRfcG9ydCgpCisgICAgd3JhcHBlciA9IFNlcnZlclByb2MoKQorICAgIHdyYXBwZXIuc3RhcnQo
c3RhcnRfaHR0cF9zZXJ2ZXIsIGNvbmZpZywgcG9ydCkKKworICAgIHJ2ID0ge30KKworICAgIGZv
ciBzdWJkb21haW4sIChwdW55Y29kZSwgaG9zdCkgaW4gc3ViZG9tYWlucy5pdGVyaXRlbXMoKToK
KyAgICAgICAgZG9tYWluID0gIiVzLiVzIiAlIChwdW55Y29kZSwgaG9zdCkKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgdXJsbGliMi51cmxvcGVuKCJodHRwOi8vJXM6JWQvIiAlIChkb21haW4s
IHBvcnQpKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBpZiBj
b25maWdbImV4dGVybmFsX2RvbWFpbiJdOgorICAgICAgICAgICAgICAgIGV4dGVybmFsID0gIiVz
LiVzIiAlIChwdW55Y29kZSwgY29uZmlnWyJleHRlcm5hbF9kb21haW4iXSkKKyAgICAgICAgICAg
ICAgICBsb2dnZXIud2FybmluZygiVXNpbmcgZXh0ZXJuYWwgc2VydmVyICVzIGZvciBzdWJkb21h
aW4gJXMiICUgKGV4dGVybmFsLCBzdWJkb21haW4pKQorICAgICAgICAgICAgICAgIHJ2W3N1YmRv
bWFpbl0gPSBleHRlcm5hbAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dn
ZXIuY3JpdGljYWwoIkZhaWxlZCBwcm9iaW5nIGRvbWFpbiAlcyBhbmQgbm8gZXh0ZXJuYWwgZmFs
bGJhY2sgY29uZmlndXJlZC4gWW91IG1heSBuZWVkIHRvIGVkaXQgL2V0Yy9ob3N0cyBvciBzaW1p
bGFyLiIgJSBkb21haW4pCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJ2W3N1YmRvbWFpbl0gPSAiJXMuJXMiICUgKHB1bnljb2RlLCBob3N0
KQorCisgICAgd3JhcHBlci53YWl0KCkKKworICAgIHJldHVybiBydgorCitkZWYgZ2V0X3N1YmRv
bWFpbnMoY29uZmlnKToKKyAgICAjVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRsZCBpcyBhc2NpaS1v
bmx5IG9yIGFscmVhZHkgaW4gcHVueWNvZGUKKyAgICBob3N0ID0gY29uZmlnWyJob3N0Il0KKyAg
ICByZXR1cm4ge3N1YmRvbWFpbjogKHN1YmRvbWFpbi5lbmNvZGUoImlkbmEiKSwgaG9zdCkKKyAg
ICAgICAgICAgIGZvciBzdWJkb21haW4gaW4gc3ViZG9tYWluc30KKworZGVmIHN0YXJ0X3NlcnZl
cnMoY29uZmlnLCBwb3J0cyk6CisgICAgc2VydmVycyA9IGRlZmF1bHRkaWN0KGxpc3QpCisKKyAg
ICBob3N0ID0gY29uZmlnWyJob3N0Il0KKworICAgIGZvciBzY2hlbWUsIHBvcnRzIGluIHBvcnRz
Lml0ZXJpdGVtcygpOgorICAgICAgICBhc3NlcnQgbGVuKHBvcnRzKSA9PSB7Imh0dHAiOjJ9Lmdl
dChzY2hlbWUsIDEpCisKKyAgICAgICAgZm9yIHBvcnQgIGluIHBvcnRzOgorICAgICAgICAgICAg
aW5pdF9mdW5jID0geyJodHRwIjpzdGFydF9odHRwX3NlcnZlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAiaHR0cHMiOnN0YXJ0X2h0dHBzX3NlcnZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAid3MiOnN0YXJ0X3dzX3NlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAid3Nz
IjpzdGFydF93c3Nfc2VydmVyfVtzY2hlbWVdCisKKyAgICAgICAgICAgIHNlcnZlcl9wcm9jID0g
U2VydmVyUHJvYygpCisgICAgICAgICAgICBzZXJ2ZXJfcHJvYy5zdGFydChpbml0X2Z1bmMsIGNv
bmZpZywgcG9ydCkKKworICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlN0YXJ0ZWQgc2VydmVyIGF0
ICVzOi8vJXM6JXMiICUgKHNjaGVtZSwgY29uZmlnWyJob3N0Il0sIHBvcnQpKQorICAgICAgICAg
ICAgc2VydmVyc1tzY2hlbWVdLmFwcGVuZCgocG9ydCwgc2VydmVyX3Byb2MpKQorCisgICAgcmV0
dXJuIHNlcnZlcnMKKworZGVmIHN0YXJ0X2h0dHBfc2VydmVyKGNvbmZpZywgcG9ydCk6CisgICAg
cmV0dXJuIHdwdHNlcnZlLldlYlRlc3RIdHRwZChob3N0PWNvbmZpZ1siaG9zdCJdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD1wb3J0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG9jX3Jvb3Q9aHR0cF9kb2Nfcm9vdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJvdXRlcyA9IHJvdXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJld3JpdGVzPXJld3JpdGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uZmlnPWNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVz
ZV9zc2w9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0
ZT1Ob25lKQorCitkZWYgc3RhcnRfaHR0cHNfc2VydmVyKGNvbmZpZywgcG9ydCk6CisgICAgcmV0
dXJuCisKK2NsYXNzIFdlYlNvY2tldERhZW1vbihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBob3N0LCBwb3J0LCBkb2Nfcm9vdCwgaGFuZGxlcnNfcm9vdCwgbG9nX2xldmVsKToKKyAg
ICAgICAgc2VsZi5ob3N0ID0gaG9zdAorICAgICAgICBvcHRzLCBhcmdzICA9IHB5d2Vic29ja2V0
Ll9wYXJzZV9hcmdzX2FuZF9jb25maWcoWyItSCIsIGhvc3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1wIiwgcG9ydCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWQi
LCBkb2Nfcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiLXciLCBoYW5kbGVyc19yb290LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWxvZy1sZXZlbCIsIGxvZ19s
ZXZlbF0pCisgICAgICAgIG9wdHMuY2dpX2RpcmVjdG9yaWVzID0gW10KKyAgICAgICAgb3B0cy5p
c19leGVjdXRhYmxlX21ldGhvZCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBweXdlYnNv
Y2tldC5XZWJTb2NrZXRTZXJ2ZXIob3B0cykKKyAgICAgICAgcG9ydHMgPSBbaXRlbVswXS5nZXRz
b2NrbmFtZSgpWzFdIGZvciBpdGVtIGluIHNlbGYuc2VydmVyLl9zb2NrZXRzXQorICAgICAgICBh
c3NlcnQgYWxsKGl0ZW0gPT0gcG9ydHNbMF0gZm9yIGl0ZW0gaW4gcG9ydHMpCisgICAgICAgIHNl
bGYucG9ydCA9IHBvcnRzWzBdCisgICAgICAgIHNlbGYuc3RhcnRlZCA9IEZhbHNlCisgICAgICAg
IHNlbGYuc2VydmVyX3RocmVhZCA9IE5vbmUKKworICAgIGRlZiBzdGFydChzZWxmLCBibG9jaz1G
YWxzZSk6CisgICAgICAgIGxvZ2dlci5pbmZvKCJTdGFydGluZyB3ZWJzb2NrZXRzIHNlcnZlciBv
biAlczolcyIgJSAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQorICAgICAgICBzZWxmLnN0YXJ0ZWQg
PSBUcnVlCisgICAgICAgIGlmIGJsb2NrOgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc2VydmVf
Zm9yZXZlcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNlcnZlcl90aHJlYWQg
PSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnNlcnZlci5zZXJ2ZV9mb3JldmVyKQorICAg
ICAgICAgICAgc2VsZi5zZXJ2ZXJfdGhyZWFkLnNldERhZW1vbihUcnVlKSAgIyBkb24ndCBoYW5n
IG9uIGV4aXQKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX3RocmVhZC5zdGFydCgpCisKKyAgICBk
ZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN0b3BzIHRoZSBzZXJ2ZXIuCisK
KyAgICAgICAgSWYgdGhlIHNlcnZlciBpcyBub3QgcnVubmluZywgdGhpcyBtZXRob2QgaGFzIG5v
IGVmZmVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuc3RhcnRlZDoKKyAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5zaHV0ZG93bigpCisgICAgICAg
ICAgICAgICAgc2VsZi5zZXJ2ZXIuc2VydmVyX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxm
LnNlcnZlcl90aHJlYWQuam9pbigpCisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfdGhyZWFk
ID0gTm9uZQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTdG9wcGVkIHdlYnNvY2tldHMg
c2VydmVyIG9uICVzOiVzIiAlIChzZWxmLmhvc3QsIHNlbGYucG9ydCkpCisgICAgICAgICAgICBl
eGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAg
c2VsZi5zdGFydGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCisKK2RlZiBz
dGFydF93c19zZXJ2ZXIoY29uZmlnLCBwb3J0KToKKyAgICByZXR1cm4gV2ViU29ja2V0RGFlbW9u
KGNvbmZpZ1siaG9zdCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHBvcnQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NfZG9jX3Jvb3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcy5wYXRoLmpvaW4od3NfZG9jX3Jvb3QsICJ3ZWJzb2NrZXRzIiwgImhhbmRs
ZXJzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVidWciKQorCitkZWYgc3RhcnRf
d3NzX3NlcnZlcihjb25maWcsIHBvcnQpOgorICAgIHJldHVybgorCitkZWYgZ2V0X3BvcnRzKGNv
bmZpZyk6CisgICAgcnYgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgIGZvciBzY2hlbWUsIHBvcnRz
IGluIGNvbmZpZ1sicG9ydHMiXS5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGksIHBvcnQgaW4g
ZW51bWVyYXRlKHBvcnRzKToKKyAgICAgICAgICAgIGlmIHBvcnQgPT0gImF1dG8iOgorICAgICAg
ICAgICAgICAgIHBvcnQgPSBnZXRfcG9ydCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHBvcnQgPSBwb3J0CisgICAgICAgICAgICBydltzY2hlbWVdLmFwcGVuZChwb3J0KQor
ICAgIHJldHVybiBydgorCitkZWYgbm9ybWFsaXNlX2NvbmZpZyhjb25maWcsIGRvbWFpbnMsIHBv
cnRzKToKKyAgICBwb3J0c18gPSB7fQorICAgIGZvciBzY2hlbWUsIHBvcnRzX3VzZWQgaW4gcG9y
dHMuaXRlcml0ZW1zKCk6CisgICAgICAgIHBvcnRzX1tzY2hlbWVdID0gcG9ydHNfdXNlZAorCisg
ICAgZG9tYWluc18gPSBkb21haW5zLmNvcHkoKQorICAgIGRvbWFpbnNfWyIiXSA9IGNvbmZpZ1si
aG9zdCJdCisKKyAgICByZXR1cm4geyJob3N0Ijpjb25maWdbImhvc3QiXSwKKyAgICAgICAgICAg
ICJkb21haW5zIjpkb21haW5zXywKKyAgICAgICAgICAgICJwb3J0cyI6IHBvcnRzX30KKworZGVm
IHN0YXJ0KGNvbmZpZyk6CisgICAgcG9ydHMgPSBnZXRfcG9ydHMoY29uZmlnKQorICAgIGRvbWFp
bnMgPSBnZXRfc3ViZG9tYWlucyhjb25maWcpCisgICAgaWYgY29uZmlnWyJjaGVja19zdWJkb21h
aW5zIl06CisgICAgICAgIGRvbWFpbnMgPSBjaGVja19zdWJkb21haW5zKGNvbmZpZywgZG9tYWlu
cykKKworICAgIGNvbmZpZ18gPSBub3JtYWxpc2VfY29uZmlnKGNvbmZpZywgZG9tYWlucywgcG9y
dHMpCisKKyAgICBzZXJ2ZXJzID0gc3RhcnRfc2VydmVycyhjb25maWdfLCBwb3J0cykKKworICAg
IHJldHVybiBjb25maWdfLCBzZXJ2ZXJzCisKKworZGVmIGl0ZXJfcHJvY3Moc2VydmVycyk6Cisg
ICAgZm9yIHNlcnZlcnMgaW4gc2VydmVycy52YWx1ZXMoKToKKyAgICAgICAgZm9yIHBvcnQsIHNl
cnZlciBpbiBzZXJ2ZXJzOgorICAgICAgICAgICAgeWllbGQgc2VydmVyLnByb2MKKworZGVmIG1l
cmdlX2pzb24oYmFzZV9vYmosIG92ZXJyaWRlX29iaik6CisgICAgcnYgPSB7fQorICAgIGZvciBr
ZXksIHZhbHVlIGluIGJhc2Vfb2JqLml0ZXJpdGVtcygpOgorICAgICAgICBpZiBrZXkgbm90IGlu
IG92ZXJyaWRlX29iajoKKyAgICAgICAgICAgIHJ2W2tleV0gPSB2YWx1ZQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisgICAgICAgICAgICAg
ICAgcnZba2V5XSA9IG1lcmdlX2pzb24odmFsdWUsIG92ZXJyaWRlX29ialtrZXldKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBydltrZXldID0gb3ZlcnJpZGVfb2JqW2tleV0K
KyAgICByZXR1cm4gcnYKKworZGVmIGxvYWRfY29uZmlnKGRlZmF1bHRfcGF0aCwgb3ZlcnJpZGVf
cGF0aD1Ob25lKToKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZWZhdWx0X3BhdGgpOgorICAgICAg
ICB3aXRoIG9wZW4oZGVmYXVsdF9wYXRoKSBhcyBmOgorICAgICAgICAgICAgYmFzZV9vYmogPSBq
c29uLmxvYWQoZikKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDb25maWcg
cGF0aCAlcyBkb2VzIG5vdCBleGlzdCIgJSBkZWZhdWx0X3BhdGgpCisKKyAgICBpZiBvcy5wYXRo
LmV4aXN0cyhvdmVycmlkZV9wYXRoKToKKyAgICAgICAgd2l0aCBvcGVuKG92ZXJyaWRlX3BhdGgp
IGFzIGY6CisgICAgICAgICAgICBvdmVycmlkZV9vYmogPSBqc29uLmxvYWQoZikKKyAgICBlbHNl
OgorICAgICAgICBvdmVycmlkZV9vYmogPSB7fQorICAgIHJldHVybiBtZXJnZV9qc29uKGJhc2Vf
b2JqLCBvdmVycmlkZV9vYmopCisKK2RlZiBtYWluKCk6CisgICAgZ2xvYmFsIGxvZ2dlcgorCisg
ICAgY29uZmlnID0gbG9hZF9jb25maWcoImNvbmZpZy5kZWZhdWx0Lmpzb24iLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICJjb25maWcuanNvbiIpCisKKyAgICBsb2dnZXIgPSBkZWZhdWx0X2xv
Z2dlcihjb25maWdbImxvZ19sZXZlbCJdKQorCisgICAgY29uZmlnXywgc2VydmVycyA9IHN0YXJ0
KGNvbmZpZykKKworICAgIHRyeToKKyAgICAgICAgd2hpbGUgYW55KGl0ZW0uaXNfYWxpdmUoKSBm
b3IgaXRlbSBpbiBpdGVyX3Byb2NzKHNlcnZlcnMpKToKKyAgICAgICAgICAgIGZvciBpdGVtIGlu
IGl0ZXJfcHJvY3Moc2VydmVycyk6CisgICAgICAgICAgICAgICAgaXRlbS5qb2luKDEpCisgICAg
ZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBsb2dnZXIuaW5mbygiU2h1dHRpbmcg
ZG93biIpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3
ZWJzb2NrZXQvc3JjL0NPUFlJTkcgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
d3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTg5ZDAy
ZTRjZDA5MjM3ODA2ZjdkZjhiZWFlY2M2OTE1MjczNDI4ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tl
dC9zcmMvQ09QWUlORwpAQCAtMCwwICsxLDI4IEBACitDb3B5cmlnaHQgMjAxMiwgR29vZ2xlIElu
Yy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0
OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgoraW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJp
YnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMv
cHl3ZWJzb2NrZXQvc3JjL01BTklGRVNULmluIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9NQU5JRkVTVC5pbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xOTI1Njg4MmM1NmZlYjcyODEyYzk5YzhhODM3OTk3OWU2M2U0YTBjCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xz
L3B5d2Vic29ja2V0L3NyYy9NQU5JRkVTVC5pbgpAQCAtMCwwICsxLDYgQEAKK2luY2x1ZGUgQ09Q
WUlORworaW5jbHVkZSBNQU5JRkVTVC5pbgoraW5jbHVkZSBSRUFETUUKK3JlY3Vyc2l2ZS1pbmNs
dWRlIGV4YW1wbGUgKi5weQorcmVjdXJzaXZlLWluY2x1ZGUgbW9kX3B5d2Vic29ja2V0ICoucHkK
K3JlY3Vyc2l2ZS1pbmNsdWRlIHRlc3QgKi5weQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9SRUFETUUg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJz
b2NrZXQvc3JjL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOGM3NThmNWVlZjRjNzMxODkyNjQxZGUzMzNl
NWQ3NWQxMGEzZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9SRUFETUUKQEAgLTAsMCAr
MSwxNyBAQAorSU5TVEFMTAorCitUbyBpbnN0YWxsIHRoaXMgcGFja2FnZSB0byB0aGUgc3lzdGVt
LCBydW4gdGhpczoKKyQgcHl0aG9uIHNldHVwLnB5IGJ1aWxkCiskIHN1ZG8gcHl0aG9uIHNldHVw
LnB5IGluc3RhbGwKKworVG8gaW5zdGFsbCB0aGlzIHBhY2thZ2UgYXMgYSBub3JtYWwgdXNlciwg
cnVuIHRoaXMgaW5zdGVhZDoKKyQgcHl0aG9uIHNldHVwLnB5IGJ1aWxkCiskIHB5dGhvbiBzZXR1
cC5weSBpbnN0YWxsIC0tdXNlcgorCitMQVVOQ0gKKworVG8gdXNlIHB5d2Vic29ja2V0IGFzIEFw
YWNoZSBtb2R1bGUsIHJ1biB0aGlzIHRvIHJlYWQgdGhlIGRvY3VtZW50OgorJCBweWRvYyBtb2Rf
cHl3ZWJzb2NrZXQKKworVG8gdXNlIHB5d2Vic29ja2V0IGFzIHN0YW5kYWxvbmUgc2VydmVyLCBy
dW4gdGhpcyB0byByZWFkIHRoZSBkb2N1bWVudDoKKyQgcHlkb2MgbW9kX3B5d2Vic29ja2V0LnN0
YW5kYWxvbmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93
cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9hYm9ydF9oYW5kc2hha2Vfd3No
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5
d2Vic29ja2V0L3NyYy9leGFtcGxlL2Fib3J0X2hhbmRzaGFrZV93c2gucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDA4MDIzYTFmZTkxZTJmMjk3N2IxNjNmOTc3ZGFlNjg1MDAwOWFhNAotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdl
YnNvY2tldC9zcmMvZXhhbXBsZS9hYm9ydF9oYW5kc2hha2Vfd3NoLnB5CkBAIC0wLDAgKzEsNDMg
QEAKKyMgQ29weXJpZ2h0IDIwMTIsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBoYW5k
c2hha2UKKworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6Cisg
ICAgcmFpc2UgaGFuZHNoYWtlLkFib3J0ZWRCeVVzZXJFeGNlcHRpb24oCisgICAgICAgICJBYm9y
dGVkIGluIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlIikKKworCitkZWYgd2ViX3NvY2tl
dF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHBhc3MKKworCisjIHZpOnN0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2
ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9hYm9ydF93c2gucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4
YW1wbGUvYWJvcnRfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiYmYwMDVmNmEzN2M2MDllMTZhYmRlNGRm
OTQwMjQyNjhkMGRhZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvYWJvcnRf
d3NoLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMgQ29weXJpZ2h0IDIwMTIsIEdvb2dsZSBJbmMuCisj
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
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2Zyb20gbW9kX3B5
d2Vic29ja2V0IGltcG9ydCBoYW5kc2hha2UKKworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9o
YW5kc2hha2UocmVxdWVzdCk6CisgICAgcGFzcworCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVy
X2RhdGEocmVxdWVzdCk6CisgICAgcmFpc2UgaGFuZHNoYWtlLkFib3J0ZWRCeVVzZXJFeGNlcHRp
b24oCisgICAgICAgICJBYm9ydGVkIGluIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSIpCisKKwor
IyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvYXJyYXlidWZm
ZXJfYmVuY2htYXJrLmh0bWwgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0
c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvYXJyYXlidWZmZXJfYmVuY2htYXJr
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODY5Y2Q3ZTFlZTY1M2Q1OWYwNGI4MDJmZjM0YzhkMDgxMzE3Y2E4
OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93
cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9hcnJheWJ1ZmZlcl9iZW5jaG1h
cmsuaHRtbApAQCAtMCwwICsxLDEzNCBAQAorPCEtLQorQ29weXJpZ2h0IDIwMTMsIEdvb2dsZSBJ
bmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21l
dDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKK2luIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3Ry
aWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKK2NvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
K0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0+
CisKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+QXJyYXlCdWZmZXIgYmVuY2htYXJrPC90aXRsZT4K
KzxzY3JpcHQgc3JjPSJ1dGlsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2YXIgUFJJTlRfU0la
RSA9IHRydWU7CisKKy8vIEluaXRpYWwgc2l6ZSBvZiBhcnJheXMuCit2YXIgU1RBUlRfU0laRSA9
IDEwICogMTAyNDsKKy8vIFN0b3BzIGJlbmNobWFyayB3aGVuIHRoZSBzaXplIG9mIGFuIGFycmF5
IGV4Y2VlZHMgdGhpcyB0aHJlc2hvbGQuCit2YXIgU1RPUF9USFJFU0hPTEQgPSAxMDAwMDAgKiAx
MDI0OworLy8gSWYgdGhlIHNpemUgb2YgZWFjaCBhcnJheSBpcyBzbWFsbCwgd3JpdGUvcmVhZCB0
aGUgYXJyYXkgbXVsdGlwbGUgdGltZXMKKy8vIHVudGlsIHRoZSBzdW0gb2Ygc2l6ZXMgcmVhY2hl
cyB0aGlzIHRocmVzaG9sZC4KK3ZhciBNSU5fVE9UQUwgPSAxMDAwMDAgKiAxMDI0OwordmFyIE1V
TFRJUExJRVJTID0gWzUsIDJdOworCisvLyBSZXBlYXQgYmVuY2htYXJrIGZvciBzZXZlcmFsIHRp
bWVzIHRvIG1lYXN1cmUgcGVyZm9ybWFuY2Ugb2Ygb3B0aW1pemVkCisvLyAoc3VjaCBhcyBKSVQp
IHJ1bi4KK3ZhciBSRVBFQVRfRk9SX1dBUk1VUCA9IDM7CisKK2Z1bmN0aW9uIHdyaXRlQmVuY2ht
YXJrKHNpemUsIG1pblRvdGFsKSB7CisgIHZhciB0b3RhbFNpemUgPSAwOworICB3aGlsZSAodG90
YWxTaXplIDwgbWluVG90YWwpIHsKKyAgICB2YXIgYXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZm
ZXIoc2l6ZSk7CisKKyAgICAvLyBXcml0ZSAnYSdzLgorICAgIGZpbGxBcnJheUJ1ZmZlcihhcnJh
eUJ1ZmZlciwgMHg2MSk7CisKKyAgICB0b3RhbFNpemUgKz0gc2l6ZTsKKyAgfQorICByZXR1cm4g
dG90YWxTaXplOworfQorCitmdW5jdGlvbiByZWFkQmVuY2htYXJrKHNpemUsIG1pblRvdGFsKSB7
CisgIHZhciB0b3RhbFNpemUgPSAwOworICB3aGlsZSAodG90YWxTaXplIDwgbWluVG90YWwpIHsK
KyAgICB2YXIgYXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc2l6ZSk7CisKKyAgICBpZiAo
IXZlcmlmeUFycmF5QnVmZmVyKGFycmF5QnVmZmVyLCAweDAwKSkgeworICAgICAgcXVldWVMb2co
J1ZlcmlmaWNhdGlvbiBmYWlsZWQnKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB0
b3RhbFNpemUgKz0gc2l6ZTsKKyAgfQorICByZXR1cm4gdG90YWxTaXplOworfQorCitmdW5jdGlv
biBydW5CZW5jaG1hcmsoYmVuY2htYXJrRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAg
c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBzdG9wVGhyZXNob2xkLAorICAgICAgICAgICAg
ICAgICAgICAgIG1pblRvdGFsLAorICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXJzLAor
ICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXJJbmRleCkgeworICB3aGlsZSAoc2l6ZSA8
PSBzdG9wVGhyZXNob2xkKSB7CisgICAgdmFyIG1heFNwZWVkID0gMDsKKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgUkVQRUFUX0ZPUl9XQVJNVVA7ICsraSkgeworICAgICAgdmFyIHN0YXJ0VGlt
ZUluTXMgPSBnZXRUaW1lU3RhbXAoKTsKKworICAgICAgdmFyIHRvdGFsU2l6ZSA9IGJlbmNobWFy
a0Z1bmN0aW9uKHNpemUsIG1pblRvdGFsKTsKKworICAgICAgbWF4U3BlZWQgPSBNYXRoLm1heCht
YXhTcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlU3BlZWRJbktCKHRv
dGFsU2l6ZSwgc3RhcnRUaW1lSW5NcykpOworICAgIH0KKyAgICBxdWV1ZUxvZyhmb3JtYXRSZXN1
bHRJbktpQihzaXplLCBtYXhTcGVlZCwgUFJJTlRfU0laRSkpOworCisgICAgc2l6ZSAqPSBtdWx0
aXBsaWVyc1ttdWx0aXBsaWVySW5kZXhdOworICAgIG11bHRpcGxpZXJJbmRleCA9IChtdWx0aXBs
aWVySW5kZXggKyAxKSAlIG11bHRpcGxpZXJzLmxlbmd0aDsKKyAgfQorfQorCitmdW5jdGlvbiBy
dW5CZW5jaG1hcmtzKCkgeworICBxdWV1ZUxvZygnTWVzc2FnZSBzaXplIGluIEtpQiwgU3BlZWQg
aW4ga0IvcycpOworCisgIHF1ZXVlTG9nKCdXcml0ZSBiZW5jaG1hcmsnKTsKKyAgcnVuQmVuY2ht
YXJrKAorICAgICAgd3JpdGVCZW5jaG1hcmssIFNUQVJUX1NJWkUsIFNUT1BfVEhSRVNIT0xELCBN
SU5fVE9UQUwsIE1VTFRJUExJRVJTLCAwKTsKKyAgcXVldWVMb2coJ0ZpbmlzaGVkJyk7CisKKyAg
cXVldWVMb2coJ1JlYWQgYmVuY2htYXJrJyk7CisgIHJ1bkJlbmNobWFyaygKKyAgICAgIHJlYWRC
ZW5jaG1hcmssIFNUQVJUX1NJWkUsIFNUT1BfVEhSRVNIT0xELCBNSU5fVE9UQUwsIE1VTFRJUExJ
RVJTLCAwKTsKKyAgYWRkVG9Mb2coJ0ZpbmlzaGVkJyk7Cit9CisKK2Z1bmN0aW9uIGluaXQoKSB7
CisgIGxvZ0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2cnKTsKKworICBxdWV1ZUxv
Zyh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKTsKKworICBhZGRUb0xv
ZygnU3RhcnRlZC4uLicpOworCisgIHNldFRpbWVvdXQocnVuQmVuY2htYXJrcywgMCk7Cit9CisK
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJpbml0KCkiPgorPHRleHRhcmVhCisg
ICAgaWQ9ImxvZyIgcm93cz0iNTAiIHN0eWxlPSJ3aWR0aDogMTAwJSIgcmVhZG9ubHk+PC90ZXh0
YXJlYT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9iZW5j
aF93c2gucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9v
bHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvYmVuY2hfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwNjdj
YTdkODk1NWZjMTYzZDUwMDFjZDg4MTJlNmFlMjBjMTYyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2Nr
ZXQvc3JjL2V4YW1wbGUvYmVuY2hfd3NoLnB5CkBAIC0wLDAgKzEsNjAgQEAKKyMgQ29weXJpZ2h0
IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisKKyIiIkEgc2ltcGxlIGxvYWQgdGVzdGVyIGZvciBXZWJTb2NrZXQgY2xpZW50cy4K
KworQSBjbGllbnQgcHJvZ3JhbSBzZW5kcyBhIG1lc3NhZ2UgZm9ybWF0dGVkIGFzICI8dGltZT4g
PGNvdW50PiA8bWVzc2FnZT4iIHRvCit0aGlzIGhhbmRsZXIuIFRoaXMgaGFuZGxlciBzdGFydHMg
c2VuZGluZyB0b3RhbCA8Y291bnQ+IFdlYlNvY2tldCBtZXNzYWdlcworY29udGFpbmluZyA8bWVz
c2FnZT4gZXZlcnkgPHRpbWU+IHNlY29uZHMuIDx0aW1lPiBjYW4gYmUgYSBmbG9hdGluZyBwb2lu
dAordmFsdWUuIDxjb3VudD4gbXVzdCBiZSBhbiBpbnRlZ2VyIHZhbHVlLgorIiIiCisKKworaW1w
b3J0IHRpbWUKKworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6
CisgICAgcGFzcyAgIyBBbHdheXMgYWNjZXB0LgorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVy
X2RhdGEocmVxdWVzdCk6CisgICAgbGluZSA9IHJlcXVlc3Qud3Nfc3RyZWFtLnJlY2VpdmVfbWVz
c2FnZSgpCisgICAgcGFydHMgPSBsaW5lLnNwbGl0KCcgJykKKyAgICBpZiBsZW4ocGFydHMpICE9
IDM6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0JhZCBwYXJhbWV0ZXIgZm9ybWF0JykKKyAg
ICB3YWl0ID0gZmxvYXQocGFydHNbMF0pCisgICAgY291bnQgPSBpbnQocGFydHNbMV0pCisgICAg
bWVzc2FnZSA9IHBhcnRzWzJdCisgICAgZm9yIGkgaW4geHJhbmdlKGNvdW50KToKKyAgICAgICAg
cmVxdWVzdC53c19zdHJlYW0uc2VuZF9tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgIHRpbWUuc2xl
ZXAod2FpdCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhh
bXBsZS9iZW5jaG1hcmsuaHRtbCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93
cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9iZW5jaG1hcmsuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41MjNiODZmNzgwMWE4MjNjN2NjNjM2YjkyODkyYzliY2M3OTI2MTQ1Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rv
b2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2JlbmNobWFyay5odG1sCkBAIC0wLDAgKzEsMzEy
IEBACis8IS0tCitDb3B5cmlnaHQgMjAxMywgR29vZ2xlIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2
ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgoraW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KK3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKworPGh0bWw+Cis8aGVhZD4KKzx0
aXRsZT5XZWJTb2NrZXQgYmVuY2htYXJrPC90aXRsZT4KKzxzY3JpcHQgc3JjPSJ1dGlsLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+CisvLyBOYW1lc3BhY2UgZm9yIGhvbGRpbmcgZ2xvYmFscy4KK3Zh
ciBiZW5jaG1hcmsgPSB7fTsKKwordmFyIFBSSU5UX1NJWkUgPSB0cnVlOworCit2YXIgU0VORF9Q
QVJBTUVURVIgPSB7CisgIG51bVNvY2tldHM6IDEsCisgIC8vIEluaXRpYWwgc2l6ZSBvZiBtZXNz
YWdlcy4KKyAgc3RhcnRTaXplOiAxMCAqIDEwMjQsCisgIC8vIFN0b3BzIGJlbmNobWFyayB3aGVu
IHRoZSBzaXplIG9mIG1lc3NhZ2UgZXhjZWVkcyB0aGlzIHRocmVzaG9sZC4KKyAgc3RvcFRocmVz
aG9sZDogMTAwMDAwICogMTAyNCwKKyAgLy8gSWYgdGhlIHNpemUgb2YgZWFjaCBtZXNzYWdlIGlz
IHNtYWxsLCBzZW5kL3JlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgdW50aWwKKyAgLy8gdGhlIHN1
bSBvZiBzaXplcyByZWFjaGVzIHRoaXMgdGhyZXNob2xkLgorICBtaW5Ub3RhbDogMTAwMDAwICog
MTAyNCwKKyAgbXVsdGlwbGllcnM6IFs1LCAyXSwKK307CisKK3ZhciBSRUNFSVZFX1BBUkFNRVRF
UiA9IHsKKyAgbnVtU29ja2V0czogMSwKKyAgc3RhcnRTaXplOiAxMCAqIDEwMjQsCisgIHN0b3BU
aHJlc2hvbGQ6IDEwMDAwMCAqIDEwMjQsCisgIG1pblRvdGFsOiAxMDAwMDAgKiAxMDI0LAorICBt
dWx0aXBsaWVyczogWzUsIDJdLAorfTsKKwordmFyIHNvY2tldHMgPSBbXTsKK3ZhciBudW1Fc3Rh
Ymxpc2hlZFNvY2tldHMgPSAwOworCit2YXIgYWRkcmVzc0JveCA9IG51bGw7CisKK3ZhciB0aW1l
cklEID0gbnVsbDsKKworYmVuY2htYXJrLnN0YXJ0VGltZUluTXMgPSAwOworCit2YXIgdG90YWxT
aXplID0gMDsKK3ZhciB0b3RhbFJlcGxpZWQgPSAwOworCitmdW5jdGlvbiBkZXN0cm95U29ja2V0
KHNvY2tldCkgeworICBzb2NrZXQub25vcGVuID0gZnVuY3Rpb24oKSB7fTsKKyAgc29ja2V0Lm9u
bWVzc2FnZSA9IGZ1bmN0aW9uKCkge307CisgIHNvY2tldC5vbmVycm9yID0gZnVuY3Rpb24oKSB7
fTsKKyAgc29ja2V0Lm9uY2xvc2UgPSBmdW5jdGlvbigpIHt9OworICBzb2NrZXQuY2xvc2UoKTsK
K30KKworZnVuY3Rpb24gZGVzdHJveUFsbFNvY2tldHMoKSB7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgc29ja2V0cy5sZW5ndGg7ICsraSkgeworICAgIGRlc3Ryb3lTb2NrZXQoc29ja2V0c1tpXSk7
CisgIH0KKyAgc29ja2V0cyA9IFtdOworfQorCitmdW5jdGlvbiBidWlsZFNlbmRCZW5jaG1hcmtG
dW5jdGlvbihzaXplLCBtdWx0aXBsaWVySW5kZXgsIHBhcmFtZXRlcikgeworICBpZiAoc2l6ZSA+
IHBhcmFtZXRlci5zdG9wVGhyZXNob2xkKSB7CisgICAgYWRkVG9Mb2coJ0ZpbmlzaGVkJyk7Cisg
ICAgZGVzdHJveUFsbFNvY2tldHMoKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7fTsKKyAgfQor
CisgIHZhciBvbk1lc3NhZ2VIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpZiAoIXZl
cmlmeUFja25vd2xlZGdlbWVudChldmVudC5kYXRhLCBzaXplKSkgeworICAgICAgZGVzdHJveUFs
bFNvY2tldHMoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0b3RhbFJlcGxpZWQgKz0g
c2l6ZTsKKworICAgIGlmICh0b3RhbFJlcGxpZWQgPCB0b3RhbFNpemUpIHsKKyAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjYWxjdWxhdGVBbmRMb2dSZXN1bHQoc2l6ZSwgYmVuY2htYXJrLnN0
YXJ0VGltZUluTXMsIHRvdGFsU2l6ZSwgUFJJTlRfU0laRSk7CisKKyAgICB0aW1lcklEID0gc2V0
VGltZW91dCgKKyAgICAgICAgYnVpbGRTZW5kQmVuY2htYXJrRnVuY3Rpb24oCisgICAgICAgICAg
ICBzaXplICogcGFyYW1ldGVyLm11bHRpcGxpZXJzW211bHRpcGxpZXJJbmRleF0sCisgICAgICAg
ICAgICAobXVsdGlwbGllckluZGV4ICsgMSkgJSBwYXJhbWV0ZXIubXVsdGlwbGllcnMubGVuZ3Ro
LAorICAgICAgICAgICAgcGFyYW1ldGVyKSwKKyAgICAgICAgMCk7CisgIH07CisKKyAgcmV0dXJu
IGZ1bmN0aW9uKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc29ja2V0cy5sZW5ndGg7ICsr
aSkgeworICAgICAgdmFyIHNvY2tldCA9IHNvY2tldHNbaV07CisgICAgICBzb2NrZXQub25tZXNz
YWdlID0gb25NZXNzYWdlSGFuZGxlcjsKKyAgICB9CisKKyAgICBiZW5jaG1hcmsuc3RhcnRUaW1l
SW5NcyA9IGdldFRpbWVTdGFtcCgpOworCisgICAgdG90YWxSZXBsaWVkID0gMDsKKworICAgIHRv
dGFsU2l6ZSA9IDA7CisKKyAgICB2YXIgc29ja2V0SW5kZXggPSAwOworICAgIHdoaWxlICh0b3Rh
bFNpemUgPCBwYXJhbWV0ZXIubWluVG90YWwpIHsKKyAgICAgIHZhciBidWZmZXIgPSBuZXcgQXJy
YXlCdWZmZXIoc2l6ZSk7CisKKyAgICAgIGZpbGxBcnJheUJ1ZmZlcihidWZmZXIsIDB4NjEpOwor
CisgICAgICBzb2NrZXRzW3NvY2tldEluZGV4XS5zZW5kKGJ1ZmZlcik7CisgICAgICBzb2NrZXRJ
bmRleCA9IChzb2NrZXRJbmRleCArIDEpICUgc29ja2V0cy5sZW5ndGg7CisKKyAgICAgIHRvdGFs
U2l6ZSArPSBzaXplOworICAgIH0KKyAgfTsKK30KKworZnVuY3Rpb24gYnVpbGRSZWNlaXZlQmVu
Y2htYXJrRnVuY3Rpb24oc2l6ZSwgbXVsdGlwbGllckluZGV4LCBwYXJhbWV0ZXIpIHsKKyAgaWYg
KHNpemUgPiBwYXJhbWV0ZXIuc3RvcFRocmVzaG9sZCkgeworICAgIGFkZFRvTG9nKCdGaW5pc2hl
ZCcpOworICAgIGRlc3Ryb3lBbGxTb2NrZXRzKCk7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkge307
CisgIH0KKworICB2YXIgb25NZXNzYWdlSGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
dmFyIGJ5dGVzUmVjZWl2ZWQgPSBldmVudC5kYXRhLmJ5dGVMZW5ndGg7CisgICAgaWYgKGJ5dGVz
UmVjZWl2ZWQgIT0gc2l6ZSkgeworICAgICAgYWRkVG9Mb2coJ0V4cGVjdGVkICcgKyBzaXplICsg
J0IgYnV0IHJlY2VpdmVkICcgKyBieXRlc1JlY2VpdmVkICsgJ0InKTsKKyAgICAgIGRlc3Ryb3lB
bGxTb2NrZXRzKCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2ZXJpZnlBcnJh
eUJ1ZmZlcihldmVudC5kYXRhLCAweDYxKSkgeworICAgICAgYWRkVG9Mb2coJ1Jlc3BvbnNlIHZl
cmlmaWNhdGlvbiBmYWlsZWQnKTsKKyAgICAgIGRlc3Ryb3lBbGxTb2NrZXRzKCk7CisgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgdG90YWxSZXBsaWVkICs9IGJ5dGVzUmVjZWl2ZWQ7CisKKyAg
ICBpZiAodG90YWxSZXBsaWVkIDwgdG90YWxTaXplKSB7CisgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY2FsY3VsYXRlQW5kTG9nUmVzdWx0KHNpemUsIGJlbmNobWFyay5zdGFydFRpbWVJbk1z
LCB0b3RhbFNpemUsIFBSSU5UX1NJWkUpOworCisgICAgdGltZXJJRCA9IHNldFRpbWVvdXQoCisg
ICAgICAgIGJ1aWxkUmVjZWl2ZUJlbmNobWFya0Z1bmN0aW9uKAorICAgICAgICAgICAgc2l6ZSAq
IHBhcmFtZXRlci5tdWx0aXBsaWVyc1ttdWx0aXBsaWVySW5kZXhdLAorICAgICAgICAgICAgKG11
bHRpcGxpZXJJbmRleCArIDEpICUgcGFyYW1ldGVyLm11bHRpcGxpZXJzLmxlbmd0aCwKKyAgICAg
ICAgICAgIHBhcmFtZXRlciksCisgICAgICAgIDApOworICB9OworCisgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvY2tldHMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgIHZhciBzb2NrZXQgPSBzb2NrZXRzW2ldOworICAgICAgc29ja2V0LmJpbmFyeVR5cGUgPSAn
YXJyYXlidWZmZXInOworICAgICAgc29ja2V0Lm9ubWVzc2FnZSA9IG9uTWVzc2FnZUhhbmRsZXI7
CisgICAgfQorCisgICAgYmVuY2htYXJrLnN0YXJ0VGltZUluTXMgPSBnZXRUaW1lU3RhbXAoKTsK
KworICAgIHRvdGFsUmVwbGllZCA9IDA7CisKKyAgICB0b3RhbFNpemUgPSAwOworCisgICAgdmFy
IHNvY2tldEluZGV4ID0gMDsKKyAgICB3aGlsZSAodG90YWxTaXplIDwgcGFyYW1ldGVyLm1pblRv
dGFsKSB7CisgICAgICBzb2NrZXRzW3NvY2tldEluZGV4XS5zZW5kKHNpemUpOworICAgICAgc29j
a2V0SW5kZXggPSAoc29ja2V0SW5kZXggKyAxKSAlIHNvY2tldHMubGVuZ3RoOworCisgICAgICB0
b3RhbFNpemUgKz0gc2l6ZTsKKyAgICB9CisgIH07Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVNvY2tl
dCgpIHsKKyAgLy8gVE9ETyh0eW9zaGlubyk6IEFkZCBUQ1Agd2FybSB1cC4KKworICBpZiAoISgn
V2ViU29ja2V0JyBpbiB3aW5kb3cpKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgdmFyIHVybCA9
IGFkZHJlc3NCb3gudmFsdWU7CisKKyAgYWRkVG9Mb2coJ0Nvbm5lY3QgJyArIHVybCk7CisKKyAg
dmFyIHNvY2tldCA9IG5ldyBXZWJTb2NrZXQodXJsKTsKKyAgc29ja2V0Lm9ubWVzc2FnZSA9IGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgYWRkVG9Mb2coJ1VuZXhwZWN0ZWQgbWVzc2FnZSByZWNlaXZl
ZC4gQWJvcnRpbmcuJyk7CisgIH07CisgIHNvY2tldC5vbmVycm9yID0gZnVuY3Rpb24oKSB7Cisg
ICAgYWRkVG9Mb2coJ0Vycm9yJyk7CisgIH07CisgIHNvY2tldC5vbmNsb3NlID0gZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICBhZGRUb0xvZygnQ2xvc2VkJyk7CisgIH07CisgIHJldHVybiBzb2NrZXQ7
Cit9CisKK2Z1bmN0aW9uIHN0YXJ0QmVuY2htYXJrKHJ1bm5lciwgbnVtU29ja2V0cykgeworICBj
bGVhclRpbWVvdXQodGltZXJJRCk7CisgIGRlc3Ryb3lBbGxTb2NrZXRzKCk7CisKKyAgbnVtRXN0
YWJsaXNoZWRTb2NrZXRzID0gMDsKKworICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVNvY2tldHM7
ICsraSkgeworICAgIHZhciBzb2NrZXQgPSBjcmVhdGVTb2NrZXQoKTsKKyAgICBzb2NrZXQub25v
cGVuID0gZnVuY3Rpb24oKSB7CisgICAgICBhZGRUb0xvZygnT3BlbmVkJyk7CisKKyAgICAgICsr
bnVtRXN0YWJsaXNoZWRTb2NrZXRzOworCisgICAgICBpZiAobnVtRXN0YWJsaXNoZWRTb2NrZXRz
ID09IHNvY2tldHMubGVuZ3RoKSB7CisgICAgICAgIHNldFRpbWVvdXQocnVubmVyLCAwKTsKKyAg
ICAgIH0KKyAgICB9OworICAgIHNvY2tldHMucHVzaChzb2NrZXQpOworICB9Cit9CisKK2Z1bmN0
aW9uIHNlbmRCZW5jaG1hcmsoKSB7CisgIGFkZFRvTG9nKCdTZW5kIGJlbmNobWFyaycpOworICBh
ZGRUb0xvZygnTWVzc2FnZSBzaXplIGluIEtpQiwgU3BlZWQgaW4ga0IvcycpOworCisgIHZhciBy
dW5uZXIgPSBidWlsZFNlbmRCZW5jaG1hcmtGdW5jdGlvbigKKyAgICAgIFNFTkRfUEFSQU1FVEVS
LnN0YXJ0U2l6ZSwKKyAgICAgIDAsCisgICAgICBTRU5EX1BBUkFNRVRFUik7CisKKyAgc3RhcnRC
ZW5jaG1hcmsocnVubmVyLCBTRU5EX1BBUkFNRVRFUi5udW1Tb2NrZXRzKTsKK30KKworZnVuY3Rp
b24gcmVjZWl2ZUJlbmNobWFyaygpIHsKKyAgYWRkVG9Mb2coJ1JlY2VpdmUgYmVuY2htYXJrJyk7
CisgIGFkZFRvTG9nKCdNZXNzYWdlIHNpemUgaW4gS2lCLCBTcGVlZCBpbiBrQi9zJyk7CisKKyAg
dmFyIHJ1bm5lciA9IGJ1aWxkUmVjZWl2ZUJlbmNobWFya0Z1bmN0aW9uKAorICAgICAgUkVDRUlW
RV9QQVJBTUVURVIuc3RhcnRTaXplLAorICAgICAgMCwKKyAgICAgIFJFSUNFVkVfUEFSQU1FVEVS
KTsKKworICBzdGFydEJlbmNobWFyayhydW5uZXIsIFJFQ0VJVkVfUEFSQU1FVEVSLm51bVNvY2tl
dHMpOworfQorCitmdW5jdGlvbiBzdG9wKCkgeworICBhZGRUb0xvZygnU3RvcHBlZCcpOworICBk
ZXN0cm95QWxsU29ja2V0cygpOworfQorCitmdW5jdGlvbiBpbml0KCkgeworICBhZGRyZXNzQm94
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkZHJlc3MnKTsKKyAgbG9nQm94ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZycpOworCisgIHZhciBzY2hlbWUgPSB3aW5kb3cubG9jYXRp
b24ucHJvdG9jb2wgPT0gJ2h0dHBzOicgPyAnd3NzOi8vJyA6ICd3czovLyc7CisgIHZhciBkZWZh
dWx0QWRkcmVzcyA9IHNjaGVtZSArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy9iZW5jaG1hcmtf
aGVscGVyJzsKKworICBhZGRyZXNzQm94LnZhbHVlID0gZGVmYXVsdEFkZHJlc3M7CisKKyAgYWRk
VG9Mb2cod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSk7CisKKyAgaWYg
KCEoJ1dlYlNvY2tldCcgaW4gd2luZG93KSkgeworICAgIGFkZFRvTG9nKCdXZWJTb2NrZXQgaXMg
bm90IGF2YWlsYWJsZScpOworICB9Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0iaW5pdCgpIj4KKworPGRpdiBpZD0iYmVuY2htYXJrX2RpdiI+CisgIHVybCA8aW5wdXQgdHlw
ZT0idGV4dCIgaWQ9ImFkZHJlc3MiIHNpemU9IjQwIj4KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIg
dmFsdWU9InNlbmQiIG9uY2xpY2s9InNlbmRCZW5jaG1hcmsoKSI+CisgIDxpbnB1dCB0eXBlPSJi
dXR0b24iIHZhbHVlPSJyZWNlaXZlIiBvbmNsaWNrPSJyZWNlaXZlQmVuY2htYXJrKCkiPgorICA8
aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0ic3RvcCIgb25jbGljaz0ic3RvcCgpIj4KKzwvZGl2
PgorCis8ZGl2IGlkPSJsb2dfZGl2Ij4KKyAgPHRleHRhcmVhCisgICAgICBpZD0ibG9nIiByb3dz
PSIyMCIgc3R5bGU9IndpZHRoOiAxMDAlIiByZWFkb25seT48L3RleHRhcmVhPgorPC9kaXY+CisK
K05vdGU6IEVmZmVjdCBvZiBSVFQgYW5kIHRpbWUgc3BlbnQgZm9yIEFycmF5QnVmZmVyIGNyZWF0
aW9uIGFyZSBub3QgZWxpbWluYXRlZC4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29j
a2V0L3NyYy9leGFtcGxlL2JlbmNobWFya19oZWxwZXJfd3NoLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxl
L2JlbmNobWFya19oZWxwZXJfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyMjdmZWE2NjEyNGJiM2Y4OWQw
ZDJhMWZjODM2MjBkYzU5NTNkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUv
YmVuY2htYXJrX2hlbHBlcl93c2gucHkKQEAgLTAsMCArMSw2MCBAQAorIyBDb3B5cmlnaHQgMjAx
MywgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKworIiIiSGFuZGxlciBmb3IgYmVuY2htYXJrLmh0bWwuIiIiCisKKworZGVmIHdlYl9zb2Nr
ZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgICMgVHVybiBvZmYgY29tcHJlc3Np
b24uCisgICAgcmVxdWVzdC53c19leHRlbnNpb25fcHJvY2Vzc29ycyA9IFtdCisKKworZGVmIHdl
Yl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBkYXRhID0gJycKKworICAgIHdo
aWxlIFRydWU6CisgICAgICAgIGxpbmUgPSByZXF1ZXN0LndzX3N0cmVhbS5yZWNlaXZlX21lc3Nh
Z2UoKQorICAgICAgICBpZiBsaW5lIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAg
ICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIHVuaWNvZGUpOgorICAgICAgICAgICAgIyBSZXNwb25k
IHdpdGggYSBiaW5hcnkgZGF0YSBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcy4KKyAg
ICAgICAgICAgIHNpemUgPSBpbnQobGluZSkKKyAgICAgICAgICAgIGlmIGxlbihkYXRhKSA8IHNp
emU6CisgICAgICAgICAgICAgICAgZGF0YSA9ICdhJyAqIHNpemUKKyAgICAgICAgICAgIHJlcXVl
c3Qud3Nfc3RyZWFtLnNlbmRfbWVzc2FnZShkYXRhLCBiaW5hcnk9VHJ1ZSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICMgT3RoZXJ3aXNlLCBqdXN0IGFjay4KKyAgICAgICAgICAgIGlmIGxp
bmUgIT0gJ2EnICogbGVuKGxpbmUpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAg
ICAgcmVxdWVzdC53c19zdHJlYW0uc2VuZF9tZXNzYWdlKHN0cihsZW4obGluZSkpKTsKKworCisj
IHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9jbG9zZV93c2gu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3
ZWJzb2NrZXQvc3JjL2V4YW1wbGUvY2xvc2Vfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2YjA4Mzg0MDgx
MjQ1Mzk3OTc2NTdkNDBkNjQyNzhmMWE2NDgxYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3Jj
L2V4YW1wbGUvY2xvc2Vfd3NoLnB5CkBAIC0wLDAgKzEsNjkgQEAKKyMgQ29weXJpZ2h0IDIwMTIs
IEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisj
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CitpbXBvcnQgc3RydWN0CisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zy
b20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBzdHJlYW0KKworCitkZWYgd2ViX3NvY2tldF9kb19l
eHRyYV9oYW5kc2hha2UocmVxdWVzdCk6CisgICAgcGFzcworCisKK2RlZiB3ZWJfc29ja2V0X3Ry
YW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgbGluZSA9IHJl
cXVlc3Qud3Nfc3RyZWFtLnJlY2VpdmVfbWVzc2FnZSgpCisgICAgICAgIGlmIGxpbmUgaXMgTm9u
ZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBjb2RlLCByZWFzb24gPSBsaW5lLnNwbGl0
KCcgJywgMSkKKyAgICAgICAgaWYgY29kZSBpcyBOb25lIG9yIHJlYXNvbiBpcyBOb25lOgorICAg
ICAgICAgICAgcmV0dXJuCisgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3NlX2Nvbm5lY3Rp
b24oaW50KGNvZGUpLCByZWFzb24pCisgICAgICAgICMgY2xvc2VfY29ubmVjdGlvbigpIGluaXRp
YXRlcyBjbG9zaW5nIGhhbmRzaGFrZS4gSXQgdmFsaWRhdGVzIGNvZGUKKyAgICAgICAgIyBhbmQg
cmVhc29uLiBJZiB5b3Ugd2FudCB0byBzZW5kIGEgYnJva2VuIGNsb3NlIGZyYW1lIGZvciBhIHRl
c3QsCisgICAgICAgICMgZm9sbG93aW5nIGNvZGUgd2lsbCBiZSB1c2VmdWwuCisgICAgICAgICMg
PiBkYXRhID0gc3RydWN0LnBhY2soJyFIJywgaW50KGNvZGUpKSArIHJlYXNvbi5lbmNvZGUoJ1VU
Ri04JykKKyAgICAgICAgIyA+IHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZShzdHJlYW0uY3JlYXRl
X2Nsb3NlX2ZyYW1lKGRhdGEpKQorICAgICAgICAjID4gIyBTdXBwcmVzcyB0byByZS1yZXNwb25k
IGNsaWVudCByZXNwb25kaW5nIGNsb3NlIGZyYW1lLgorICAgICAgICAjID4gcmFpc2UgRXhjZXB0
aW9uKCJjdXN0b21pemVkIHNlcnZlciBpbml0aWF0ZWQgY2xvc2luZyBoYW5kc2hha2UiKQorCisK
K2RlZiB3ZWJfc29ja2V0X3Bhc3NpdmVfY2xvc2luZ19oYW5kc2hha2UocmVxdWVzdCk6CisgICAg
IyBTaW1wbHkgZWNobyBhIGNsb3NlIHN0YXR1cyBjb2RlCisgICAgY29kZSwgcmVhc29uID0gcmVx
dWVzdC53c19jbG9zZV9jb2RlLCByZXF1ZXN0LndzX2Nsb3NlX3JlYXNvbgorCisgICAgIyBweXdl
YnNvY2tldCBzZXRzIHBzZXVkbyBjb2RlIGZvciByZWNlaXZpbmcgYW4gZW1wdHkgYm9keSBjbG9z
ZSBmcmFtZS4KKyAgICBpZiBjb2RlID09IGNvbW1vbi5TVEFUVVNfTk9fU1RBVFVTX1JFQ0VJVkVE
OgorICAgICAgICBjb2RlID0gTm9uZQorICAgICAgICByZWFzb24gPSAnJworICAgIHJldHVybiBj
b2RlLCByZWFzb24KKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMv
ZXhhbXBsZS9jb25zb2xlLmh0bWwgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
d3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvY29uc29sZS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNhNDZiZmRhZjU0MGY2ZWY0N2E0ZmI2NTc2MTFjZTAxMTFiMDgyZGEKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9v
bHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvY29uc29sZS5odG1sCkBAIC0wLDAgKzEsMzEzIEBA
Cis8IS0tCitDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQu
CisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgoraW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
K3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKworPCEtLQorQSBzaW1wbGUgY29uc29s
ZSBmb3IgdGVzdGluZyBXZWJTb2NrZXQgc2VydmVyLgorCitUeXBlIGFuIGFkZHJlc3MgaW50byB0
aGUgdG9wIHRleHQgaW5wdXQgYW5kIGNsaWNrIGNvbm5lY3QgdG8gZXN0YWJsaXNoCitXZWJTb2Nr
ZXQuIFRoZW4sIHR5cGUgc29tZSBtZXNzYWdlIGludG8gdGhlIGJvdHRvbSB0ZXh0IGlucHV0IGFu
ZCBjbGljayBzZW5kCit0byBzZW5kIHRoZSBtZXNzYWdlLiBSZWNlaXZlZC9zZW50IG1lc3NhZ2Vz
IGFuZCBjb25uZWN0aW9uIHN0YXRlIHdpbGwgYmUgc2hvd24KK29uIHRoZSBtaWRkbGUgdGV4dGFy
ZWEuCistLT4KKworPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5XZWJTb2NrZXQgY29uc29sZTwvdGl0
bGU+Cis8c2NyaXB0PgordmFyIHNvY2tldCA9IG51bGw7CisKK3ZhciBzaG93VGltZVN0YW1wID0g
ZmFsc2U7CisKK3ZhciBhZGRyZXNzQm94ID0gbnVsbDsKK3ZhciBwcm90b2NvbHNCb3ggPSBudWxs
OwordmFyIGxvZ0JveCA9IG51bGw7Cit2YXIgbWVzc2FnZUJveCA9IG51bGw7Cit2YXIgZmlsZUJv
eCA9IG51bGw7Cit2YXIgY29kZUJveCA9IG51bGw7Cit2YXIgcmVhc29uQm94ID0gbnVsbDsKKwor
ZnVuY3Rpb24gZ2V0VGltZVN0YW1wKCkgeworICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7
Cit9CisKK2Z1bmN0aW9uIGFkZFRvTG9nKGxvZykgeworICBpZiAoc2hvd1RpbWVTdGFtcCkgewor
ICAgIGxvZ0JveC52YWx1ZSArPSAnWycgKyBnZXRUaW1lU3RhbXAoKSArICddICc7CisgIH0KKyAg
bG9nQm94LnZhbHVlICs9IGxvZyArICdcbicKKyAgLy8gTGFyZ2UgZW5vdWdoIHRvIGtlZXAgc2hv
d2luZyB0aGUgbGF0ZXN0IG1lc3NhZ2UuCisgIGxvZ0JveC5zY3JvbGxUb3AgPSAxMDAwMDAwOwor
fQorCitmdW5jdGlvbiBzZXRiaW5hcnl0eXBlKGJpbmFyeVR5cGUpIHsKKyAgaWYgKCFzb2NrZXQp
IHsKKyAgICBhZGRUb0xvZygnTm90IGNvbm5lY3RlZCcpOworICAgIHJldHVybjsKKyAgfQorCisg
IHNvY2tldC5iaW5hcnlUeXBlID0gYmluYXJ5VHlwZTsKKyAgYWRkVG9Mb2coJ1NldCBiaW5hcnlU
eXBlIHRvICcgKyBiaW5hcnlUeXBlKTsKK30KKworZnVuY3Rpb24gc2VuZCgpIHsKKyAgaWYgKCFz
b2NrZXQpIHsKKyAgICBhZGRUb0xvZygnTm90IGNvbm5lY3RlZCcpOworICAgIHJldHVybjsKKyAg
fQorCisgIHNvY2tldC5zZW5kKG1lc3NhZ2VCb3gudmFsdWUpOworICBhZGRUb0xvZygnPiAnICsg
bWVzc2FnZUJveC52YWx1ZSk7CisgIG1lc3NhZ2VCb3gudmFsdWUgPSAnJzsKK30KKworZnVuY3Rp
b24gc2VuZGZpbGUoKSB7CisgIGlmICghc29ja2V0KSB7CisgICAgYWRkVG9Mb2coJ05vdCBjb25u
ZWN0ZWQnKTsKKyAgICByZXR1cm47CisgIH0KKworICB2YXIgZmlsZXMgPSBmaWxlQm94LmZpbGVz
OworCisgIGlmIChmaWxlcy5sZW5ndGggPT0gMCkgeworICAgIGFkZFRvTG9nKCdGaWxlIG5vdCBz
ZWxlY3RlZCcpOworICAgIHJldHVybjsKKyAgfQorCisgIHNvY2tldC5zZW5kKGZpbGVzWzBdKTsK
KyAgYWRkVG9Mb2coJz4gU2VuZCAnICsgZmlsZXNbMF0ubmFtZSk7Cit9CisKK2Z1bmN0aW9uIHBh
cnNlUHJvdG9jb2xzKHByb3RvY29sc1RleHQpIHsKKyAgdmFyIHByb3RvY29scyA9IHByb3RvY29s
c1RleHQuc3BsaXQoJywnKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm90b2NvbHMubGVuZ3Ro
OyArK2kpIHsKKyAgICBwcm90b2NvbHNbaV0gPSBwcm90b2NvbHNbaV0udHJpbSgpOworICB9CisK
KyAgaWYgKHByb3RvY29scy5sZW5ndGggPT0gMCkgeworICAgIC8vIERvbid0IHBhc3MuCisgICAg
cHJvdG9jb2xzID0gbnVsbDsKKyAgfSBlbHNlIGlmIChwcm90b2NvbHMubGVuZ3RoID09IDEpIHsK
KyAgICBpZiAocHJvdG9jb2xzWzBdLmxlbmd0aCA9PSAwKSB7CisgICAgICAvLyBEb24ndCBwYXNz
LgorICAgICAgcHJvdG9jb2xzID0gbnVsbDsKKyAgICB9IGVsc2UgeworICAgICAgLy8gUGFzcyBh
cyBhIHN0cmluZy4KKyAgICAgIHByb3RvY29scyA9IHByb3RvY29sc1swXTsKKyAgICB9CisgIH0K
KworICByZXR1cm4gcHJvdG9jb2xzOworfQorCitmdW5jdGlvbiBjb25uZWN0KCkgeworICB2YXIg
dXJsID0gYWRkcmVzc0JveC52YWx1ZTsKKyAgdmFyIHByb3RvY29scyA9IHBhcnNlUHJvdG9jb2xz
KHByb3RvY29sc0JveC52YWx1ZSk7CisKKyAgaWYgKCdXZWJTb2NrZXQnIGluIHdpbmRvdykgewor
ICAgIGlmIChwcm90b2NvbHMpIHsKKyAgICAgIHNvY2tldCA9IG5ldyBXZWJTb2NrZXQodXJsLCBw
cm90b2NvbHMpOworICAgIH0gZWxzZSB7CisgICAgICBzb2NrZXQgPSBuZXcgV2ViU29ja2V0KHVy
bCk7CisgICAgfQorICB9IGVsc2UgaWYgKCdNb3pXZWJTb2NrZXQnIGluIHdpbmRvdykgeworICAg
IHNvY2tldCA9IG5ldyBNb3pXZWJTb2NrZXQodXJsKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm47
CisgIH0KKworICBzb2NrZXQub25vcGVuID0gZnVuY3Rpb24gKCkgeworICAgIGlmICgoJ3Byb3Rv
Y29sJyBpbiBzb2NrZXQpICYmIHNvY2tldC5wcm90b2NvbCkgeworICAgICAgYWRkVG9Mb2coJ09w
ZW5lZCAocHJvdG9jb2wgPSAnICsgc29ja2V0LnByb3RvY29sICsgJyknKTsKKyAgICB9IGVsc2Ug
eworICAgICAgYWRkVG9Mb2coJ09wZW5lZCcpOworICAgIH0KKyAgfTsKKyAgc29ja2V0Lm9ubWVz
c2FnZSA9IGZ1bmN0aW9uIChldmVudCkgeworICAgIGlmICgoJ0FycmF5QnVmZmVyJyBpbiB3aW5k
b3cpICYmIChldmVudC5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7CisgICAgICBhZGRU
b0xvZygnPCBSZWNlaXZlZCBhbiBBcnJheUJ1ZmZlciBvZiAnICsgZXZlbnQuZGF0YS5ieXRlTGVu
Z3RoICsKKyAgICAgICAgICAgICAgICcgYnl0ZXMnKQorICAgIH0gZWxzZSBpZiAoKCdCbG9iJyBp
biB3aW5kb3cpICYmIChldmVudC5kYXRhIGluc3RhbmNlb2YgQmxvYikpIHsKKyAgICAgIGFkZFRv
TG9nKCc8IFJlY2VpdmVkIGEgQmxvYiBvZiAnICsgZXZlbnQuZGF0YS5zaXplICsgJyBieXRlcycp
CisgICAgfSBlbHNlIHsKKyAgICAgIGFkZFRvTG9nKCc8ICcgKyBldmVudC5kYXRhKTsKKyAgICB9
CisgIH07CisgIHNvY2tldC5vbmVycm9yID0gZnVuY3Rpb24gKCkgeworICAgIGFkZFRvTG9nKCdF
cnJvcicpOworICB9OworICBzb2NrZXQub25jbG9zZSA9IGZ1bmN0aW9uIChldmVudCkgeworICAg
IHZhciBsb2dNZXNzYWdlID0gJ0Nsb3NlZCAoJzsKKyAgICBpZiAoKGFyZ3VtZW50cy5sZW5ndGgg
PT0gMSkgJiYgKCdDbG9zZUV2ZW50JyBpbiB3aW5kb3cpICYmCisgICAgICAgIChldmVudCBpbnN0
YW5jZW9mIENsb3NlRXZlbnQpKSB7CisgICAgICBsb2dNZXNzYWdlICs9ICd3YXNDbGVhbiA9ICcg
KyBldmVudC53YXNDbGVhbjsKKyAgICAgIC8vIGNvZGUgYW5kIHJlYXNvbiBhcmUgcHJlc2VudCBv
bmx5IGZvcgorICAgICAgLy8gZHJhZnQtaWV0Zi1oeWJpLXRoZXdlYnNvY2tldHByb3RvY29sLTA2
IGFuZCBsYXRlcgorICAgICAgaWYgKCdjb2RlJyBpbiBldmVudCkgeworICAgICAgICBsb2dNZXNz
YWdlICs9ICcsIGNvZGUgPSAnICsgZXZlbnQuY29kZTsKKyAgICAgIH0KKyAgICAgIGlmICgncmVh
c29uJyBpbiBldmVudCkgeworICAgICAgICBsb2dNZXNzYWdlICs9ICcsIHJlYXNvbiA9ICcgKyBl
dmVudC5yZWFzb247CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3NhZ2UgKz0g
J0Nsb3NlRXZlbnQgaXMgbm90IGF2YWlsYWJsZSc7CisgICAgfQorICAgIGFkZFRvTG9nKGxvZ01l
c3NhZ2UgKyAnKScpOworICB9OworCisgIGlmIChwcm90b2NvbHMpIHsKKyAgICBhZGRUb0xvZygn
Q29ubmVjdCAnICsgdXJsICsgJyAocHJvdG9jb2xzID0gJyArIHByb3RvY29scyArICcpJyk7Cisg
IH0gZWxzZSB7CisgICAgYWRkVG9Mb2coJ0Nvbm5lY3QgJyArIHVybCk7CisgIH0KK30KKworZnVu
Y3Rpb24gY2xvc2VTb2NrZXQoKSB7CisgIGlmICghc29ja2V0KSB7CisgICAgYWRkVG9Mb2coJ05v
dCBjb25uZWN0ZWQnKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoY29kZUJveC52YWx1ZSB8
fCByZWFzb25Cb3gudmFsdWUpIHsKKyAgICBzb2NrZXQuY2xvc2UoY29kZUJveC52YWx1ZSwgcmVh
c29uQm94LnZhbHVlKTsKKyAgfSBlbHNlIHsKKyAgICBzb2NrZXQuY2xvc2UoKTsKKyAgfQorfQor
CitmdW5jdGlvbiBwcmludFN0YXRlKCkgeworICBpZiAoIXNvY2tldCkgeworICAgIGFkZFRvTG9n
KCdOb3QgY29ubmVjdGVkJyk7CisgICAgcmV0dXJuOworICB9CisKKyAgYWRkVG9Mb2coCisgICAg
ICAndXJsID0gJyArIHNvY2tldC51cmwgKworICAgICAgJywgcmVhZHlTdGF0ZSA9ICcgKyBzb2Nr
ZXQucmVhZHlTdGF0ZSArCisgICAgICAnLCBidWZmZXJlZEFtb3VudCA9ICcgKyBzb2NrZXQuYnVm
ZmVyZWRBbW91bnQpOworfQorCitmdW5jdGlvbiBpbml0KCkgeworICB2YXIgc2NoZW1lID0gd2lu
ZG93LmxvY2F0aW9uLnByb3RvY29sID09ICdodHRwczonID8gJ3dzczovLycgOiAnd3M6Ly8nOwor
ICB2YXIgZGVmYXVsdEFkZHJlc3MgPSBzY2hlbWUgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArICcv
ZWNobyc7CisKKyAgYWRkcmVzc0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGRyZXNz
Jyk7CisgIHByb3RvY29sc0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm90b2NvbHMn
KTsKKyAgbG9nQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZycpOworICBtZXNzYWdl
Qm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lc3NhZ2UnKTsKKyAgZmlsZUJveCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlJyk7CisgIGNvZGVCb3ggPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnY29kZScpOworICByZWFzb25Cb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgncmVhc29uJyk7CisKKyAgYWRkcmVzc0JveC52YWx1ZSA9IGRlZmF1bHRBZGRyZXNzOworCisg
IGlmICgnTW96V2ViU29ja2V0JyBpbiB3aW5kb3cpIHsKKyAgICBhZGRUb0xvZygnVXNlIE1veldl
YlNvY2tldCcpOworICB9IGVsc2UgaWYgKCEoJ1dlYlNvY2tldCcgaW4gd2luZG93KSkgeworICAg
IGFkZFRvTG9nKCdXZWJTb2NrZXQgaXMgbm90IGF2YWlsYWJsZScpOworICB9Cit9Cis8L3Njcmlw
dD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Citmb3JtIHsKKyAgbWFyZ2luOiAwcHg7Cit9CisK
KyNjb25uZWN0X2RpdiwgI2xvZ19kaXYsICNzZW5kX2RpdiwgI3NlbmRmaWxlX2RpdiwgI2Nsb3Nl
X2RpdiwgI3ByaW50c3RhdGVfZGl2IHsKKyAgcGFkZGluZzogNXB4OworICBtYXJnaW46IDVweDsK
KyAgYm9yZGVyLXdpZHRoOiAwcHggMHB4IDBweCAxMHB4OworICBib3JkZXItc3R5bGU6IHNvbGlk
OworICBib3JkZXItY29sb3I6IHNpbHZlcjsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBv
bmxvYWQ9ImluaXQoKSI+CisKKzxkaXY+CisKKzxkaXYgaWQ9ImNvbm5lY3RfZGl2Ij4KKyAgPGZv
cm0gYWN0aW9uPSIjIiBvbnN1Ym1pdD0iY29ubmVjdCgpOyByZXR1cm4gZmFsc2U7Ij4KKyAgICB1
cmwgPGlucHV0IHR5cGU9InRleHQiIGlkPSJhZGRyZXNzIiBzaXplPSI0MCI+CisgICAgPGlucHV0
IHR5cGU9InN1Ym1pdCIgdmFsdWU9ImNvbm5lY3QiPgorICAgIDxici8+CisgICAgcHJvdG9jb2xz
IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icHJvdG9jb2xzIiBzaXplPSIyMCI+CisgIDwvZm9ybT4K
KzwvZGl2PgorCis8ZGl2IGlkPSJsb2dfZGl2Ij4KKyAgPHRleHRhcmVhIGlkPSJsb2ciIHJvd3M9
IjEwIiBjb2xzPSI0MCIgcmVhZG9ubHk+PC90ZXh0YXJlYT4KKyAgPGJyLz4KKyAgPGlucHV0IHR5
cGU9ImNoZWNrYm94IgorICAgICAgICAgbmFtZT0ic2hvd3RpbWVzdGFtcCIKKyAgICAgICAgIHZh
bHVlPSJzaG93dGltZXN0YW1wIgorICAgICAgICAgb25jbGljaz0ic2hvd1RpbWVTdGFtcCA9IHRo
aXMuY2hlY2tlZCI+U2hvdyB0aW1lIHN0YW1wCis8L2Rpdj4KKworPGRpdiBpZD0ic2VuZF9kaXYi
PgorICA8Zm9ybSBhY3Rpb249IiMiIG9uc3VibWl0PSJzZW5kKCk7IHJldHVybiBmYWxzZTsiPgor
ICAgIGRhdGEgPGlucHV0IHR5cGU9InRleHQiIGlkPSJtZXNzYWdlIiBzaXplPSI0MCI+CisgICAg
PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9InNlbmQiPgorICA8L2Zvcm0+Cis8L2Rpdj4KKwor
PGRpdiBpZD0ic2VuZGZpbGVfZGl2Ij4KKyAgPGZvcm0gYWN0aW9uPSIjIiBvbnN1Ym1pdD0ic2Vu
ZGZpbGUoKTsgcmV0dXJuIGZhbHNlOyI+CisgICAgPGlucHV0IHR5cGU9ImZpbGUiIGlkPSJmaWxl
IiBzaXplPSI0MCI+CisgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9InNlbmQgZmlsZSI+
CisgIDwvZm9ybT4KKworICBTZXQgYmluYXJ5VHlwZQorICA8aW5wdXQgdHlwZT0icmFkaW8iCisg
ICAgICAgICBuYW1lPSJiaW5hcnl0eXBlIgorICAgICAgICAgdmFsdWU9ImJsb2IiCisgICAgICAg
ICBvbmNsaWNrPSJzZXRiaW5hcnl0eXBlKCdibG9iJykiIGNoZWNrZWQ+YmxvYgorICA8aW5wdXQg
dHlwZT0icmFkaW8iCisgICAgICAgICBuYW1lPSJiaW5hcnl0eXBlIgorICAgICAgICAgdmFsdWU9
ImFycmF5YnVmZmVyIgorICAgICAgICAgb25jbGljaz0ic2V0YmluYXJ5dHlwZSgnYXJyYXlidWZm
ZXInKSI+YXJyYXlidWZmZXIKKzwvZGl2PgorCis8ZGl2IGlkPSJjbG9zZV9kaXYiPgorICA8Zm9y
bSBhY3Rpb249IiMiIG9uc3VibWl0PSJjbG9zZVNvY2tldCgpOyByZXR1cm4gZmFsc2U7Ij4KKyAg
ICBjb2RlIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iY29kZSIgc2l6ZT0iMTAiPgorICAgIHJlYXNv
biA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InJlYXNvbiIgc2l6ZT0iMjAiPgorICAgIDxpbnB1dCB0
eXBlPSJzdWJtaXQiIHZhbHVlPSJjbG9zZSI+CisgIDwvZm9ybT4KKzwvZGl2PgorCis8ZGl2IGlk
PSJwcmludHN0YXRlX2RpdiI+CisgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJwcmludCBz
dGF0ZSIgb25jbGljaz0icHJpbnRTdGF0ZSgpOyI+Cis8L2Rpdj4KKworPC9kaXY+CisKKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9lY2hvX2NsaWVudC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNv
Y2tldC9zcmMvZXhhbXBsZS9lY2hvX2NsaWVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNzdmZDFkNWFmMzU1
NGE1M2Q3NDQ1MzM0YjlhMjk2YmZlM2FlYzYxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9l
eGFtcGxlL2VjaG9fY2xpZW50LnB5CkBAIC0wLDAgKzEsMTEyOCBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjCisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJl
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
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJTaW1wbGUgV2ViU29ja2V0IGNsaWVu
dCBuYW1lZCBlY2hvX2NsaWVudCBqdXN0IGJlY2F1c2Ugb2YgaGlzdG9yaWNhbCByZWFzb24uCisK
K21vZF9weXdlYnNvY2tldCBkaXJlY3RvcnkgbXVzdCBiZSBpbiBQWVRIT05QQVRILgorCitFeGFt
cGxlIFVzYWdlOgorCisjIHNlcnZlciBzZXR1cAorICUgY2QgJHB5d2Vic29ja2V0CisgJSBQWVRI
T05QQVRIPSRjd2Qvc3JjIHB5dGhvbiAuL21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5IC1w
IDg4ODAgXAorICAgIC1kICRjd2Qvc3JjL2V4YW1wbGUKKworIyBydW4gY2xpZW50CisgJSBQWVRI
T05QQVRIPSRjd2Qvc3JjIHB5dGhvbiAuL3NyYy9leGFtcGxlL2VjaG9fY2xpZW50LnB5IC1wIDg4
ODAgXAorICAgICAtcyBsb2NhbGhvc3QgXAorICAgICAtbyBodHRwOi8vbG9jYWxob3N0IC1yIC9l
Y2hvIC1tIHRlc3QKKworb3IKKworIyBydW4gZWNobyBjbGllbnQgdG8gdGVzdCBJRVRGIEh5Qmkg
MDAgcHJvdG9jb2wKKyBydW4gd2l0aCAtLXByb3RvY29sLXZlcnNpb249aHliaTAwCisiIiIKKwor
CitpbXBvcnQgYmFzZTY0CitpbXBvcnQgY29kZWNzCitpbXBvcnQgbG9nZ2luZworZnJvbSBvcHRw
YXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCitpbXBvcnQgb3MKK2ltcG9ydCByYW5kb20KK2ltcG9y
dCByZQoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworCitmcm9tIG1v
ZF9weXdlYnNvY2tldCBpbXBvcnQgY29tbW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5leHRlbnNp
b25zIGltcG9ydCBEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IKK2Zyb20gbW9kX3B5d2Vi
c29ja2V0LmV4dGVuc2lvbnMgaW1wb3J0IFBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vz
c29yCitmcm9tIG1vZF9weXdlYnNvY2tldC5leHRlbnNpb25zIGltcG9ydCBfUGVyTWVzc2FnZURl
ZmxhdGVGcmFtZXIKK2Zyb20gbW9kX3B5d2Vic29ja2V0LmV4dGVuc2lvbnMgaW1wb3J0IF9wYXJz
ZV93aW5kb3dfYml0cworZnJvbSBtb2RfcHl3ZWJzb2NrZXQuc3RyZWFtIGltcG9ydCBTdHJlYW0K
K2Zyb20gbW9kX3B5d2Vic29ja2V0LnN0cmVhbSBpbXBvcnQgU3RyZWFtSGl4aWU3NQorZnJvbSBt
b2RfcHl3ZWJzb2NrZXQuc3RyZWFtIGltcG9ydCBTdHJlYW1PcHRpb25zCitmcm9tIG1vZF9weXdl
YnNvY2tldCBpbXBvcnQgdXRpbAorCisKK19USU1FT1VUX1NFQyA9IDEwCitfVU5ERUZJTkVEX1BP
UlQgPSAtMQorCitfVVBHUkFERV9IRUFERVIgPSAnVXBncmFkZTogd2Vic29ja2V0XHJcbicKK19V
UEdSQURFX0hFQURFUl9ISVhJRTc1ID0gJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nCitfQ09OTkVD
VElPTl9IRUFERVIgPSAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisKKyMgU3BlY2lhbCBtZXNz
YWdlIHRoYXQgdGVsbHMgdGhlIGVjaG8gc2VydmVyIHRvIHN0YXJ0IGNsb3NpbmcgaGFuZHNoYWtl
CitfR09PREJZRV9NRVNTQUdFID0gJ0dvb2RieWUnCisKK19QUk9UT0NPTF9WRVJTSU9OX0hZQkkx
MyA9ICdoeWJpMTMnCitfUFJPVE9DT0xfVkVSU0lPTl9IWUJJMDggPSAnaHliaTA4JworX1BST1RP
Q09MX1ZFUlNJT05fSFlCSTAwID0gJ2h5YmkwMCcKK19QUk9UT0NPTF9WRVJTSU9OX0hJWElFNzUg
PSAnaGl4aWU3NScKKworIyBDb25zdGFudHMgZm9yIHRoZSAtLXRsc19tb2R1bGUgZmxhZy4KK19U
TFNfQllfU1RBTkRBUkRfTU9EVUxFID0gJ3NzbCcKK19UTFNfQllfUFlPUEVOU1NMID0gJ3B5b3Bl
bnNzbCcKKworIyBWYWx1ZXMgdXNlZCBieSB0aGUgLS10bHMtdmVyc2lvbiBmbGFnLgorX1RMU19W
RVJTSU9OX1NTTDIzID0gJ3NzbDIzJworX1RMU19WRVJTSU9OX1NTTDMgPSAnc3NsMycKK19UTFNf
VkVSU0lPTl9UTFMxID0gJ3RsczEnCisKKworY2xhc3MgQ2xpZW50SGFuZHNoYWtlRXJyb3IoRXhj
ZXB0aW9uKToKKyAgICBwYXNzCisKKworZGVmIF9idWlsZF9tZXRob2RfbGluZShyZXNvdXJjZSk6
CisgICAgcmV0dXJuICdHRVQgJXMgSFRUUC8xLjFcclxuJyAlIHJlc291cmNlCisKKworZGVmIF9v
cmlnaW5faGVhZGVyKGhlYWRlciwgb3JpZ2luKToKKyAgICAjIDQuMSAxMy4gY29uY2F0ZW5hdGlv
biBvZiB0aGUgc3RyaW5nICJPcmlnaW46IiwgYSBVKzAwMjAgU1BBQ0UgY2hhcmFjdGVyLAorICAg
ICMgYW5kIHRoZSAvb3JpZ2luLyB2YWx1ZSwgY29udmVydGVkIHRvIEFTQ0lJIGxvd2VyY2FzZSwg
dG8gL2ZpZWxkcy8uCisgICAgcmV0dXJuICclczogJXNcclxuJyAlIChoZWFkZXIsIG9yaWdpbi5s
b3dlcigpKQorCisKK2RlZiBfZm9ybWF0X2hvc3RfaGVhZGVyKGhvc3QsIHBvcnQsIHNlY3VyZSk6
CisgICAgIyA0LjEgOS4gTGV0IC9ob3N0cG9ydC8gYmUgYW4gZW1wdHkgc3RyaW5nLgorICAgICMg
NC4xIDEwLiBBcHBlbmQgdGhlIC9ob3N0LyB2YWx1ZSwgY29udmVydGVkIHRvIEFTQ0lJIGxvd2Vy
Y2FzZSwgdG8KKyAgICAjIC9ob3N0cG9ydC8KKyAgICBob3N0cG9ydCA9IGhvc3QubG93ZXIoKQor
ICAgICMgNC4xIDExLiBJZiAvc2VjdXJlLyBpcyBmYWxzZSwgYW5kIC9wb3J0LyBpcyBub3QgODAs
IG9yIGlmIC9zZWN1cmUvCisgICAgIyBpcyB0cnVlLCBhbmQgL3BvcnQvIGlzIG5vdCA0NDMsIHRo
ZW4gYXBwZW5kIGEgVSswMDNBIENPTE9OIGNoYXJhY3RlcgorICAgICMgKDopIGZvbGxvd2VkIGJ5
IHRoZSB2YWx1ZSBvZiAvcG9ydC8sIGV4cHJlc3NlZCBhcyBhIGJhc2UtdGVuIGludGVnZXIsCisg
ICAgIyB0byAvaG9zdHBvcnQvCisgICAgaWYgKChub3Qgc2VjdXJlIGFuZCBwb3J0ICE9IGNvbW1v
bi5ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVCkgb3IKKyAgICAgICAgKHNlY3VyZSBhbmQgcG9ydCAh
PSBjb21tb24uREVGQVVMVF9XRUJfU09DS0VUX1NFQ1VSRV9QT1JUKSk6CisgICAgICAgIGhvc3Rw
b3J0ICs9ICc6JyArIHN0cihwb3J0KQorICAgICMgNC4xIDEyLiBjb25jYXRlbmF0aW9uIG9mIHRo
ZSBzdHJpbmcgIkhvc3Q6IiwgYSBVKzAwMjAgU1BBQ0UKKyAgICAjIGNoYXJhY3RlciwgYW5kIC9o
b3N0cG9ydC8sIHRvIC9maWVsZHMvLgorICAgIHJldHVybiAnJXM6ICVzXHJcbicgJSAoY29tbW9u
LkhPU1RfSEVBREVSLCBob3N0cG9ydCkKKworCitkZWYgX3JlY2VpdmVfYnl0ZXMoc29ja2V0LCBs
ZW5ndGgpOgorICAgIGJ5dGVzID0gW10KKyAgICByZW1haW5pbmcgPSBsZW5ndGgKKyAgICB3aGls
ZSByZW1haW5pbmcgPiAwOgorICAgICAgICByZWNlaXZlZF9ieXRlcyA9IHNvY2tldC5yZWN2KHJl
bWFpbmluZykKKyAgICAgICAgaWYgbm90IHJlY2VpdmVkX2J5dGVzOgorICAgICAgICAgICAgcmFp
c2UgSU9FcnJvcigKKyAgICAgICAgICAgICAgICAnQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIHJl
Y2VpdmluZyByZXF1ZXN0ZWQgbGVuZ3RoICcKKyAgICAgICAgICAgICAgICAnKHJlcXVlc3RlZCAl
ZCBieXRlcyBidXQgcmVjZWl2ZWQgb25seSAlZCBieXRlcyknICUKKyAgICAgICAgICAgICAgICAo
bGVuZ3RoLCBsZW5ndGggLSByZW1haW5pbmcpKQorICAgICAgICBieXRlcy5hcHBlbmQocmVjZWl2
ZWRfYnl0ZXMpCisgICAgICAgIHJlbWFpbmluZyAtPSBsZW4ocmVjZWl2ZWRfYnl0ZXMpCisgICAg
cmV0dXJuICcnLmpvaW4oYnl0ZXMpCisKKworZGVmIF9nZXRfbWFuZGF0b3J5X2hlYWRlcihmaWVs
ZHMsIG5hbWUpOgorICAgICIiIkdldHMgdGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIgc3BlY2lmaWVk
IGJ5IG5hbWUgZnJvbSBmaWVsZHMuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhhdCB0
aGVyZSdzIG9ubHkgb25lIGhlYWRlciB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZQorICAgIGluIGZp
ZWxkcy4gT3RoZXJ3aXNlLCByYWlzZXMgYW4gQ2xpZW50SGFuZHNoYWtlRXJyb3IuCisgICAgIiIi
CisKKyAgICB2YWx1ZXMgPSBmaWVsZHMuZ2V0KG5hbWUubG93ZXIoKSkKKyAgICBpZiB2YWx1ZXMg
aXMgTm9uZSBvciBsZW4odmFsdWVzKSA9PSAwOgorICAgICAgICByYWlzZSBDbGllbnRIYW5kc2hh
a2VFcnJvcigKKyAgICAgICAgICAgICclcyBoZWFkZXIgbm90IGZvdW5kOiAlcicgJSAobmFtZSwg
dmFsdWVzKSkKKyAgICBpZiBsZW4odmFsdWVzKSA+IDE6CisgICAgICAgIHJhaXNlIENsaWVudEhh
bmRzaGFrZUVycm9yKAorICAgICAgICAgICAgJ011bHRpcGxlICVzIGhlYWRlcnMgZm91bmQ6ICVy
JyAlIChuYW1lLCB2YWx1ZXMpKQorICAgIHJldHVybiB2YWx1ZXNbMF0KKworCitkZWYgX3ZhbGlk
YXRlX21hbmRhdG9yeV9oZWFkZXIoZmllbGRzLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4cGVjdGVkX3ZhbHVlLCBjYXNlX3NlbnNpdGl2ZT1GYWxzZSk6CisgICAgIiIi
R2V0cyBhbmQgdmFsaWRhdGVzIHRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyIHNwZWNpZmllZCBieSBu
YW1lIGZyb20KKyAgICBmaWVsZHMuCisKKyAgICBJZiBleHBlY3RlZF92YWx1ZSBpcyBzcGVjaWZp
ZWQsIGNvbXBhcmVzIGV4cGVjdGVkIHZhbHVlIGFuZCBhY3R1YWwgdmFsdWUKKyAgICBhbmQgcmFp
c2VzIGFuIENsaWVudEhhbmRzaGFrZUVycm9yIG9uIGZhaWx1cmUuIFlvdSBjYW4gc3BlY2lmeSBj
YXNlCisgICAgc2Vuc2l0aXZlbmVzcyBpbiB0aGlzIGNvbXBhcmlzb24gYnkgY2FzZV9zZW5zaXRp
dmUgcGFyYW1ldGVyLiBUaGlzIGZ1bmN0aW9uCisgICAgZXhwZWN0cyB0aGF0IHRoZXJlJ3Mgb25s
eSBvbmUgaGVhZGVyIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGluIGZpZWxkcy4KKyAgICBPdGhl
cndpc2UsIHJhaXNlcyBhbiBDbGllbnRIYW5kc2hha2VFcnJvci4KKyAgICAiIiIKKworICAgIHZh
bHVlID0gX2dldF9tYW5kYXRvcnlfaGVhZGVyKGZpZWxkcywgbmFtZSkKKworICAgIGlmICgoY2Fz
ZV9zZW5zaXRpdmUgYW5kIHZhbHVlICE9IGV4cGVjdGVkX3ZhbHVlKSBvcgorICAgICAgICAobm90
IGNhc2Vfc2Vuc2l0aXZlIGFuZCB2YWx1ZS5sb3dlcigpICE9IGV4cGVjdGVkX3ZhbHVlLmxvd2Vy
KCkpKToKKyAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3IoCisgICAgICAgICAgICAn
SWxsZWdhbCB2YWx1ZSBmb3IgaGVhZGVyICVzOiAlciAoZXhwZWN0ZWQpIHZzICVyIChhY3R1YWwp
JyAlCisgICAgICAgICAgICAobmFtZSwgZXhwZWN0ZWRfdmFsdWUsIHZhbHVlKSkKKworCitjbGFz
cyBfVExTU29ja2V0KG9iamVjdCk6CisgICAgIiIiV3JhcHBlciBmb3IgYSBUTFMgY29ubmVjdGlv
bi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICByYXdfc29j
a2V0LCB0bHNfbW9kdWxlLCB0bHNfdmVyc2lvbiwgZGlzYWJsZV90bHNfY29tcHJlc3Npb24pOgor
ICAgICAgICBzZWxmLl9sb2dnZXIgPSB1dGlsLmdldF9jbGFzc19sb2dnZXIoc2VsZikKKworICAg
ICAgICBpZiB0bHNfbW9kdWxlID09IF9UTFNfQllfU1RBTkRBUkRfTU9EVUxFOgorICAgICAgICAg
ICAgaWYgdGxzX3ZlcnNpb24gPT0gX1RMU19WRVJTSU9OX1NTTDIzOgorICAgICAgICAgICAgICAg
IHZlcnNpb24gPSBzc2wuUFJPVE9DT0xfU1NMdjIzCisgICAgICAgICAgICBlbGlmIHRsc192ZXJz
aW9uID09IF9UTFNfVkVSU0lPTl9TU0wzOgorICAgICAgICAgICAgICAgIHZlcnNpb24gPSBzc2wu
UFJPVE9DT0xfU1NMdjMKKyAgICAgICAgICAgIGVsaWYgdGxzX3ZlcnNpb24gPT0gX1RMU19WRVJT
SU9OX1RMUzE6CisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHNzbC5QUk9UT0NPTF9UTFN2MQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAg
ICAgICAgICAgICAgICAgICAnSW52YWxpZCAtLXRscy12ZXJzaW9uIGZsYWc6ICVyJyAlIHRsc192
ZXJzaW9uKQorCisgICAgICAgICAgICBpZiBkaXNhYmxlX3Rsc19jb21wcmVzc2lvbjoKKyAgICAg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnLS1kaXNh
YmxlLXRscy1jb21wcmVzc2lvbiBpcyBub3QgYXZhaWxhYmxlIGZvciBzc2wgJworICAgICAgICAg
ICAgICAgICAgICAnbW9kdWxlJykKKworICAgICAgICAgICAgc2VsZi5fdGxzX3NvY2tldCA9IHNz
bC53cmFwX3NvY2tldChyYXdfc29ja2V0LCBzc2xfdmVyc2lvbj12ZXJzaW9uKQorCisgICAgICAg
ICAgICAjIFByaW50IGNpcGhlciBpbiB1c2UuIEhhbmRzaGFrZSBpcyBkb25lIG9uIHdyYXBfc29j
a2V0IGNhbGwuCisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygiQ2lwaGVyOiAlcyIsIHNl
bGYuX3Rsc19zb2NrZXQuY2lwaGVyKCkpCisgICAgICAgIGVsaWYgdGxzX21vZHVsZSA9PSBfVExT
X0JZX1BZT1BFTlNTTDoKKyAgICAgICAgICAgIGlmIHRsc192ZXJzaW9uID09IF9UTFNfVkVSU0lP
Tl9TU0wyMzoKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gT3BlblNTTC5TU0wuU1NMdjIzX01F
VEhPRAorICAgICAgICAgICAgZWxpZiB0bHNfdmVyc2lvbiA9PSBfVExTX1ZFUlNJT05fU1NMMzoK
KyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gT3BlblNTTC5TU0wuU1NMdjNfTUVUSE9ECisgICAg
ICAgICAgICBlbGlmIHRsc192ZXJzaW9uID09IF9UTFNfVkVSU0lPTl9UTFMxOgorICAgICAgICAg
ICAgICAgIHZlcnNpb24gPSBPcGVuU1NMLlNTTC5UTFN2MV9NRVRIT0QKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAg
ICAgJ0ludmFsaWQgLS10bHMtdmVyc2lvbiBmbGFnOiAlcicgJSB0bHNfdmVyc2lvbikKKworICAg
ICAgICAgICAgY29udGV4dCA9IE9wZW5TU0wuU1NMLkNvbnRleHQodmVyc2lvbikKKworICAgICAg
ICAgICAgaWYgZGlzYWJsZV90bHNfY29tcHJlc3Npb246CisgICAgICAgICAgICAgICAgIyBPUF9O
T19DT01QUkVTU0lPTiBpcyBub3QgZGVmaW5lZCBpbiBPcGVuU1NMIG1vZHVsZS4KKyAgICAgICAg
ICAgICAgICBjb250ZXh0LnNldF9vcHRpb25zKDB4MDAwMjAwMDApCisKKyAgICAgICAgICAgIHNl
bGYuX3Rsc19zb2NrZXQgPSBPcGVuU1NMLlNTTC5Db25uZWN0aW9uKGNvbnRleHQsIHJhd19zb2Nr
ZXQpCisgICAgICAgICAgICAjIENsaWVudCBtb2RlLgorICAgICAgICAgICAgc2VsZi5fdGxzX3Nv
Y2tldC5zZXRfY29ubmVjdF9zdGF0ZSgpCisgICAgICAgICAgICBzZWxmLl90bHNfc29ja2V0LnNl
dGJsb2NraW5nKFRydWUpCisKKyAgICAgICAgICAgICMgRG8gaGFuZHNoYWtlIG5vdyAobm90IG5l
Y2Vzc2FyeSkuCisgICAgICAgICAgICBzZWxmLl90bHNfc29ja2V0LmRvX2hhbmRzaGFrZSgpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBUTFMgc3VwcG9y
dCBtb2R1bGUgaXMgYXZhaWxhYmxlJykKKworICAgIGRlZiBzZW5kKHNlbGYsIGRhdGEpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fdGxzX3NvY2tldC53cml0ZShkYXRhKQorCisgICAgZGVmIHNlbmRh
bGwoc2VsZiwgZGF0YSk6CisgICAgICAgIHJldHVybiBzZWxmLl90bHNfc29ja2V0LnNlbmRhbGwo
ZGF0YSkKKworICAgIGRlZiByZWN2KHNlbGYsIHNpemU9LTEpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fdGxzX3NvY2tldC5yZWFkKHNpemUpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLl90bHNfc29ja2V0LmNsb3NlKCkKKworICAgIGRlZiBnZXRwZWVybmFtZShz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rsc19zb2NrZXQuZ2V0cGVlcm5hbWUoKQorCisK
K2NsYXNzIENsaWVudEhhbmRzaGFrZUJhc2Uob2JqZWN0KToKKyAgICAiIiJBIGJhc2UgY2xhc3Mg
Zm9yIFdlYlNvY2tldCBvcGVuaW5nIGhhbmRzaGFrZSBwcm9jZXNzb3JzIGZvciBlYWNoCisgICAg
cHJvdG9jb2wgdmVyc2lvbi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAg
ICAgICAgc2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisKKyAgICBk
ZWYgX3JlYWRfZmllbGRzKHNlbGYpOgorICAgICAgICAjIDQuMSAzMi4gbGV0IC9maWVsZHMvIGJl
IGEgbGlzdCBvZiBuYW1lLXZhbHVlIHBhaXJzLCBpbml0aWFsbHkgZW1wdHkuCisgICAgICAgIGZp
ZWxkcyA9IHt9CisgICAgICAgIHdoaWxlIFRydWU6ICAjICJGaWVsZCIKKyAgICAgICAgICAgICMg
NC4xIDMzLiBsZXQgL25hbWUvIGFuZCAvdmFsdWUvIGJlIGVtcHR5IGJ5dGUgYXJyYXlzCisgICAg
ICAgICAgICBuYW1lID0gJycKKyAgICAgICAgICAgIHZhbHVlID0gJycKKyAgICAgICAgICAgICMg
NC4xIDM0LiByZWFkIC9uYW1lLworICAgICAgICAgICAgbmFtZSA9IHNlbGYuX3JlYWRfbmFtZSgp
CisgICAgICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgICAgICMgNC4xIDM1LiByZWFkIHNwYWNlcworICAgICAgICAgICAgIyBUT0RPKHR5b3No
aW5vKTogU2tpcCBvbmx5IG9uZSBzcGFjZSBhcyBkZXNjcmliZWQgaW4gdGhlIHNwZWMuCisgICAg
ICAgICAgICBjaCA9IHNlbGYuX3NraXBfc3BhY2VzKCkKKyAgICAgICAgICAgICMgNC4xIDM2LiBy
ZWFkIC92YWx1ZS8KKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5fcmVhZF92YWx1ZShjaCkKKyAg
ICAgICAgICAgICMgNC4xIDM3LiByZWFkIGEgYnl0ZSBmcm9tIHRoZSBzZXJ2ZXIKKyAgICAgICAg
ICAgIGNoID0gX3JlY2VpdmVfYnl0ZXMoc2VsZi5fc29ja2V0LCAxKQorICAgICAgICAgICAgaWYg
Y2ggIT0gJ1xuJzogICMgMHgwQQorICAgICAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFr
ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgTEYgYnV0IGZvdW5kICVyIHdo
aWxlIHJlYWRpbmcgdmFsdWUgJXIgZm9yICcKKyAgICAgICAgICAgICAgICAgICAgJ2hlYWRlciAl
cicgJSAoY2gsIHZhbHVlLCBuYW1lKSkKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1Zygn
UmVjZWl2ZWQgJXIgaGVhZGVyJywgbmFtZSkKKyAgICAgICAgICAgICMgNC4xIDM4LiBhcHBlbmQg
YW4gZW50cnkgdG8gdGhlIC9maWVsZHMvIGxpc3QgdGhhdCBoYXMgdGhlIG5hbWUKKyAgICAgICAg
ICAgICMgZ2l2ZW4gYnkgdGhlIHN0cmluZyBvYnRhaW5lZCBieSBpbnRlcnByZXRpbmcgdGhlIC9u
YW1lLyBieXRlCisgICAgICAgICAgICAjIGFycmF5IGFzIGEgVVRGLTggc3RyZWFtIGFuZCB0aGUg
dmFsdWUgZ2l2ZW4gYnkgdGhlIHN0cmluZworICAgICAgICAgICAgIyBvYnRhaW5lZCBieSBpbnRl
cnByZXRpbmcgdGhlIC92YWx1ZS8gYnl0ZSBhcnJheSBhcyBhIFVURi04IGJ5dGUKKyAgICAgICAg
ICAgICMgc3RyZWFtLgorICAgICAgICAgICAgZmllbGRzLnNldGRlZmF1bHQobmFtZSwgW10pLmFw
cGVuZCh2YWx1ZSkKKyAgICAgICAgICAgICMgNC4xIDM5LiByZXR1cm4gdG8gdGhlICJGaWVsZCIg
c3RlcCBhYm92ZQorICAgICAgICByZXR1cm4gZmllbGRzCisKKyAgICBkZWYgX3JlYWRfbmFtZShz
ZWxmKToKKyAgICAgICAgIyA0LjEgMzMuIGxldCAvbmFtZS8gYmUgZW1wdHkgYnl0ZSBhcnJheXMK
KyAgICAgICAgbmFtZSA9ICcnCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAjIDQu
MSAzNC4gcmVhZCBhIGJ5dGUgZnJvbSB0aGUgc2VydmVyCisgICAgICAgICAgICBjaCA9IF9yZWNl
aXZlX2J5dGVzKHNlbGYuX3NvY2tldCwgMSkKKyAgICAgICAgICAgIGlmIGNoID09ICdccic6ICAj
IDB4MEQKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZWxpZiBjaCA9
PSAnXG4nOiAgIyAweDBBCisgICAgICAgICAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJy
b3IoCisgICAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIExGIHdoZW4gcmVhZGluZyBoZWFk
ZXIgbmFtZSAlcicgJSBuYW1lKQorICAgICAgICAgICAgZWxpZiBjaCA9PSAnOic6ICAjIDB4M0EK
KyAgICAgICAgICAgICAgICByZXR1cm4gbmFtZQorICAgICAgICAgICAgZWxpZiBjaCA+PSAnQScg
YW5kIGNoIDw9ICdaJzogICMgUmFuZ2UgMHgzMSB0byAweDVBCisgICAgICAgICAgICAgICAgY2gg
PSBjaHIob3JkKGNoKSArIDB4MjApCisgICAgICAgICAgICAgICAgbmFtZSArPSBjaAorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuYW1lICs9IGNoCisKKyAgICBkZWYgX3NraXBf
c3BhY2VzKHNlbGYpOgorICAgICAgICAjIDQuMSAzNS4gcmVhZCBhIGJ5dGUgZnJvbSB0aGUgc2Vy
dmVyCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjaCA9IF9yZWNlaXZlX2J5dGVz
KHNlbGYuX3NvY2tldCwgMSkKKyAgICAgICAgICAgIGlmIGNoID09ICcgJzogICMgMHgyMAorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZXR1cm4gY2gKKworICAgIGRlZiBf
cmVhZF92YWx1ZShzZWxmLCBjaCk6CisgICAgICAgICMgNC4xIDMzLiBsZXQgL3ZhbHVlLyBiZSBl
bXB0eSBieXRlIGFycmF5cworICAgICAgICB2YWx1ZSA9ICcnCisgICAgICAgICMgNC4xIDM2LiBy
ZWFkIGEgYnl0ZSBmcm9tIHNlcnZlci4KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAg
IGlmIGNoID09ICdccic6ICAjIDB4MEQKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAg
ICAgICAgICAgIGVsaWYgY2ggPT0gJ1xuJzogICMgMHgwQQorICAgICAgICAgICAgICAgIHJhaXNl
IENsaWVudEhhbmRzaGFrZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBM
RiB3aGVuIHJlYWRpbmcgaGVhZGVyIHZhbHVlICVyJyAlIHZhbHVlKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSBjaAorICAgICAgICAgICAgY2ggPSBfcmVjZWl2
ZV9ieXRlcyhzZWxmLl9zb2NrZXQsIDEpCisKKworZGVmIF9nZXRfcGVybWVzc2FnZV9kZWZsYXRl
X2ZyYW1lcihleHRlbnNpb25fcmVzcG9uc2UpOgorICAgICIiIlZhbGlkYXRlIHRoZSByZXNwb25z
ZSBhbmQgcmV0dXJuIGEgZnJhbWVyIG9iamVjdCB1c2luZyB0aGUgcGFyYW1ldGVycyBpbgorICAg
IHRoZSByZXNwb25zZS4gVGhpcyBtZXRob2QgZG9lc24ndCBhY2NlcHQgdGhlIHMyY18uKiBwYXJh
bWV0ZXJzLgorICAgICIiIgorCisgICAgYzJzX21heF93aW5kb3dfYml0cyA9IE5vbmUKKyAgICBj
MnNfbm9fY29udGV4dF90YWtlb3ZlciA9IE5vbmUKKworICAgIGMyc19tYXhfd2luZG93X2JpdHNf
bmFtZSA9ICgKKyAgICAgICAgICAgIFBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vzc29y
LgorICAgICAgICAgICAgICAgICAgICBfQzJTX01BWF9XSU5ET1dfQklUU19QQVJBTSkKKyAgICBj
MnNfbm9fY29udGV4dF90YWtlb3Zlcl9uYW1lID0gKAorICAgICAgICAgICAgUGVyTWVzc2FnZURl
ZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3IuCisgICAgICAgICAgICAgICAgICAgIF9DMlNfTk9fQ09O
VEVYVF9UQUtFT1ZFUl9QQVJBTSkKKworICAgICMgV2UgZGlkbid0IHNlbmQgYW55IHMyY18uKiBw
YXJhbWV0ZXIuIEhhbmRsZSB0aG9zZSBwYXJhbWV0ZXJzIGFzIGludmFsaWQKKyAgICAjIGlmIGZv
dW5kIGluIHRoZSByZXNwb25zZS4KKworICAgIGZvciBwYXJhbV9uYW1lLCBwYXJhbV92YWx1ZSBp
biBleHRlbnNpb25fcmVzcG9uc2UuZ2V0X3BhcmFtZXRlcnMoKToKKyAgICAgICAgaWYgcGFyYW1f
bmFtZSA9PSBjMnNfbWF4X3dpbmRvd19iaXRzX25hbWU6CisgICAgICAgICAgICBpZiBjMnNfbWF4
X3dpbmRvd19iaXRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIENsaWVudEhh
bmRzaGFrZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpcGxlICVzIGZvdW5k
JyAlIGMyc19tYXhfd2luZG93X2JpdHNfbmFtZSkKKworICAgICAgICAgICAgcGFyc2VkX3ZhbHVl
ID0gX3BhcnNlX3dpbmRvd19iaXRzKHBhcmFtX3ZhbHVlKQorICAgICAgICAgICAgaWYgcGFyc2Vk
X3ZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJy
b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAnQmFkICVzOiAlcicgJQorICAgICAgICAgICAg
ICAgICAgICAgICAgKGMyc19tYXhfd2luZG93X2JpdHNfbmFtZSwgcGFyYW1fdmFsdWUpKQorICAg
ICAgICAgICAgYzJzX21heF93aW5kb3dfYml0cyA9IHBhcnNlZF92YWx1ZQorICAgICAgICBlbGlm
IHBhcmFtX25hbWUgPT0gYzJzX25vX2NvbnRleHRfdGFrZW92ZXJfbmFtZToKKyAgICAgICAgICAg
IGlmIGMyc19ub19jb250ZXh0X3Rha2VvdmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAg
IHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgJ011
bHRpcGxlICVzIGZvdW5kJyAlIGMyc19ub19jb250ZXh0X3Rha2VvdmVyX25hbWUpCisKKyAgICAg
ICAgICAgIGlmIHBhcmFtX3ZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNl
IENsaWVudEhhbmRzaGFrZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgJ0JhZCAlczog
SGFzIHZhbHVlICVyJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAoYzJzX25vX2NvbnRleHRf
dGFrZW92ZXJfbmFtZSwgcGFyYW1fdmFsdWUpKQorICAgICAgICAgICAgYzJzX25vX2NvbnRleHRf
dGFrZW92ZXIgPSBUcnVlCisKKyAgICBpZiBjMnNfbm9fY29udGV4dF90YWtlb3ZlciBpcyBOb25l
OgorICAgICAgICBjMnNfbm9fY29udGV4dF90YWtlb3ZlciA9IEZhbHNlCisKKyAgICByZXR1cm4g
X1Blck1lc3NhZ2VEZWZsYXRlRnJhbWVyKGMyc19tYXhfd2luZG93X2JpdHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjMnNfbm9fY29udGV4dF90YWtlb3ZlcikKKworCitj
bGFzcyBDbGllbnRIYW5kc2hha2VQcm9jZXNzb3IoQ2xpZW50SGFuZHNoYWtlQmFzZSk6CisgICAg
IiIiV2ViU29ja2V0IG9wZW5pbmcgaGFuZHNoYWtlIHByb2Nlc3NvciBmb3IKKyAgICBkcmFmdC1p
ZXRmLWh5YmktdGhld2Vic29ja2V0cHJvdG9jb2wtMDYgYW5kIGxhdGVyLgorICAgICIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2tldCwgb3B0aW9ucyk6CisgICAgICAgIHN1cGVyKENs
aWVudEhhbmRzaGFrZVByb2Nlc3Nvciwgc2VsZikuX19pbml0X18oKQorCisgICAgICAgIHNlbGYu
X3NvY2tldCA9IHNvY2tldAorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworCisgICAg
ICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgZGVm
IGhhbmRzaGFrZShzZWxmKToKKyAgICAgICAgIiIiUGVyZm9ybXMgb3BlbmluZyBoYW5kc2hha2Ug
b24gdGhlIHNwZWNpZmllZCBzb2NrZXQuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAg
Q2xpZW50SGFuZHNoYWtlRXJyb3I6IGhhbmRzaGFrZSBmYWlsZWQuCisgICAgICAgICIiIgorCisg
ICAgICAgIHJlcXVlc3RfbGluZSA9IF9idWlsZF9tZXRob2RfbGluZShzZWxmLl9vcHRpb25zLnJl
c291cmNlKQorICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ0NsaWVudFwncyBvcGVuaW5nIGhh
bmRzaGFrZSBSZXF1ZXN0LUxpbmU6ICVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cXVlc3RfbGluZSkKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwocmVxdWVzdF9saW5lKQor
CisgICAgICAgIGZpZWxkcyA9IFtdCisgICAgICAgIGZpZWxkcy5hcHBlbmQoX2Zvcm1hdF9ob3N0
X2hlYWRlcigKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VydmVyX2hvc3QsCisgICAgICAg
ICAgICBzZWxmLl9vcHRpb25zLnNlcnZlcl9wb3J0LAorICAgICAgICAgICAgc2VsZi5fb3B0aW9u
cy51c2VfdGxzKSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChfVVBHUkFERV9IRUFERVIpCisgICAg
ICAgIGZpZWxkcy5hcHBlbmQoX0NPTk5FQ1RJT05fSEVBREVSKQorICAgICAgICBpZiBzZWxmLl9v
cHRpb25zLm9yaWdpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMu
cHJvdG9jb2xfdmVyc2lvbiA9PSBfUFJPVE9DT0xfVkVSU0lPTl9IWUJJMDg6CisgICAgICAgICAg
ICAgICAgZmllbGRzLmFwcGVuZChfb3JpZ2luX2hlYWRlcigKKyAgICAgICAgICAgICAgICAgICAg
Y29tbW9uLlNFQ19XRUJTT0NLRVRfT1JJR0lOX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi5fb3B0aW9ucy5vcmlnaW4pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBmaWVsZHMuYXBwZW5kKF9vcmlnaW5faGVhZGVyKGNvbW1vbi5PUklHSU5fSEVBREVSLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5v
cmlnaW4pKQorCisgICAgICAgIG9yaWdpbmFsX2tleSA9IG9zLnVyYW5kb20oMTYpCisgICAgICAg
IHNlbGYuX2tleSA9IGJhc2U2NC5iNjRlbmNvZGUob3JpZ2luYWxfa2V5KQorICAgICAgICBzZWxm
Ll9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAnJXM6ICVyICglcyknLAorICAgICAgICAgICAg
Y29tbW9uLlNFQ19XRUJTT0NLRVRfS0VZX0hFQURFUiwKKyAgICAgICAgICAgIHNlbGYuX2tleSwK
KyAgICAgICAgICAgIHV0aWwuaGV4aWZ5KG9yaWdpbmFsX2tleSkpCisgICAgICAgIGZpZWxkcy5h
cHBlbmQoCisgICAgICAgICAgICAnJXM6ICVzXHJcbicgJSAoY29tbW9uLlNFQ19XRUJTT0NLRVRf
S0VZX0hFQURFUiwgc2VsZi5fa2V5KSkKKworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnZlcnNp
b25faGVhZGVyID4gMDoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJyVzOiAlZFxyXG4nICUg
KGNvbW1vbi5TRUNfV0VCU09DS0VUX1ZFUlNJT05fSEVBREVSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy52ZXJzaW9uX2hlYWRlcikpCisg
ICAgICAgIGVsaWYgc2VsZi5fb3B0aW9ucy5wcm90b2NvbF92ZXJzaW9uID09IF9QUk9UT0NPTF9W
RVJTSU9OX0hZQkkwODoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJyVzOiAlZFxyXG4nICUg
KGNvbW1vbi5TRUNfV0VCU09DS0VUX1ZFUlNJT05fSEVBREVSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uLlZFUlNJT05fSFlCSTA4KSkKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJyVzOiAlZFxyXG4nICUgKGNvbW1vbi5T
RUNfV0VCU09DS0VUX1ZFUlNJT05fSEVBREVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29tbW9uLlZFUlNJT05fSFlCSV9MQVRFU1QpKQorCisgICAgICAgIGV4
dGVuc2lvbnNfdG9fcmVxdWVzdCA9IFtdCisKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5kZWZs
YXRlX2ZyYW1lOgorICAgICAgICAgICAgZXh0ZW5zaW9uc190b19yZXF1ZXN0LmFwcGVuZCgKKyAg
ICAgICAgICAgICAgICBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVyKGNvbW1vbi5ERUZMQVRFX0ZS
QU1FX0VYVEVOU0lPTikpCisKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy51c2VfcGVybWVzc2Fn
ZV9kZWZsYXRlOgorICAgICAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFt
ZXRlcigKKyAgICAgICAgICAgICAgICAgICAgY29tbW9uLlBFUk1FU1NBR0VfREVGTEFURV9FWFRF
TlNJT04pCisgICAgICAgICAgICAjIEFjY2VwdCB0aGUgYzJzX21heF93aW5kb3dfYml0cyBleHRl
bnNpb24gcGFyYW1ldGVyIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICBleHRlbnNpb24uYWRkX3Bh
cmFtZXRlcigKKyAgICAgICAgICAgICAgICAgICAgUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Q
cm9jZXNzb3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0MyU19NQVhfV0lORE9XX0JJ
VFNfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgIE5vbmUpCisgICAgICAgICAgICBleHRlbnNp
b25zX3RvX3JlcXVlc3QuYXBwZW5kKGV4dGVuc2lvbikKKworICAgICAgICBpZiBsZW4oZXh0ZW5z
aW9uc190b19yZXF1ZXN0KSAhPSAwOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZCgKKyAgICAg
ICAgICAgICAgICAnJXM6ICVzXHJcbicgJQorICAgICAgICAgICAgICAgIChjb21tb24uU0VDX1dF
QlNPQ0tFVF9FWFRFTlNJT05TX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgY29tbW9uLmZvcm1h
dF9leHRlbnNpb25zKGV4dGVuc2lvbnNfdG9fcmVxdWVzdCkpKQorCisgICAgICAgIGZvciBmaWVs
ZCBpbiBmaWVsZHM6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbChmaWVsZCkKKwor
ICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbCgnXHJcbicpCisKKyAgICAgICAgc2VsZi5fbG9n
Z2VyLmRlYnVnKCdTZW50IGNsaWVudFwncyBvcGVuaW5nIGhhbmRzaGFrZSBoZWFkZXJzOiAlcics
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMpCisgICAgICAgIHNlbGYuX2xvZ2dl
ci5kZWJ1ZygnU3RhcnQgcmVhZGluZyBTdGF0dXMtTGluZScpCisKKyAgICAgICAgc3RhdHVzX2xp
bmUgPSAnJworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgY2ggPSBfcmVjZWl2ZV9i
eXRlcyhzZWxmLl9zb2NrZXQsIDEpCisgICAgICAgICAgICBzdGF0dXNfbGluZSArPSBjaAorICAg
ICAgICAgICAgaWYgY2ggPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAg
IG0gPSByZS5tYXRjaCgnSFRUUC9cXGQrXC5cXGQrIChcXGRcXGRcXGQpIC4qXHJcbicsIHN0YXR1
c19saW5lKQorICAgICAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBDbGllbnRI
YW5kc2hha2VFcnJvcigKKyAgICAgICAgICAgICAgICAnV3Jvbmcgc3RhdHVzIGxpbmUgZm9ybWF0
OiAlcicgJSBzdGF0dXNfbGluZSkKKyAgICAgICAgc3RhdHVzX2NvZGUgPSBtLmdyb3VwKDEpCisg
ICAgICAgIGlmIHN0YXR1c19jb2RlICE9ICcxMDEnOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2Vy
LmRlYnVnKCdVbmV4cGVjdGVkIHN0YXR1cyBjb2RlICVzIHdpdGggZm9sbG93aW5nICcKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVhZGVyczogJXInLCBzdGF0dXNfY29kZSwgc2Vs
Zi5fcmVhZF9maWVsZHMoKSkKKyAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9y
KAorICAgICAgICAgICAgICAgICdFeHBlY3RlZCBIVFRQIHN0YXR1cyBjb2RlIDEwMSBidXQgZm91
bmQgJXInICUgc3RhdHVzX2NvZGUpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdSZWNl
aXZlZCB2YWxpZCBTdGF0dXMtTGluZScpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnU3Rh
cnQgcmVhZGluZyBoZWFkZXJzIHVudGlsIHdlIHNlZSBhbiBlbXB0eSBsaW5lJykKKworICAgICAg
ICBmaWVsZHMgPSBzZWxmLl9yZWFkX2ZpZWxkcygpCisKKyAgICAgICAgY2ggPSBfcmVjZWl2ZV9i
eXRlcyhzZWxmLl9zb2NrZXQsIDEpCisgICAgICAgIGlmIGNoICE9ICdcbic6ICAjIDB4MEEKKyAg
ICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKAorICAgICAgICAgICAgICAgICdF
eHBlY3RlZCBMRiBidXQgZm91bmQgJXIgd2hpbGUgcmVhZGluZyB2YWx1ZSAlciBmb3IgaGVhZGVy
ICcKKyAgICAgICAgICAgICAgICAnbmFtZSAlcicgJSAoY2gsIHZhbHVlLCBuYW1lKSkKKworICAg
ICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1JlY2VpdmVkIGFuIGVtcHR5IGxpbmUnKQorICAgICAg
ICBzZWxmLl9sb2dnZXIuZGVidWcoJ1NlcnZlclwncyBvcGVuaW5nIGhhbmRzaGFrZSBoZWFkZXJz
OiAlcicsIGZpZWxkcykKKworICAgICAgICBfdmFsaWRhdGVfbWFuZGF0b3J5X2hlYWRlcigKKyAg
ICAgICAgICAgIGZpZWxkcywKKyAgICAgICAgICAgIGNvbW1vbi5VUEdSQURFX0hFQURFUiwKKyAg
ICAgICAgICAgIGNvbW1vbi5XRUJTT0NLRVRfVVBHUkFERV9UWVBFLAorICAgICAgICAgICAgRmFs
c2UpCisKKyAgICAgICAgX3ZhbGlkYXRlX21hbmRhdG9yeV9oZWFkZXIoCisgICAgICAgICAgICBm
aWVsZHMsCisgICAgICAgICAgICBjb21tb24uQ09OTkVDVElPTl9IRUFERVIsCisgICAgICAgICAg
ICBjb21tb24uVVBHUkFERV9DT05ORUNUSU9OX1RZUEUsCisgICAgICAgICAgICBGYWxzZSkKKwor
ICAgICAgICBhY2NlcHQgPSBfZ2V0X21hbmRhdG9yeV9oZWFkZXIoCisgICAgICAgICAgICBmaWVs
ZHMsIGNvbW1vbi5TRUNfV0VCU09DS0VUX0FDQ0VQVF9IRUFERVIpCisKKyAgICAgICAgIyBWYWxp
ZGF0ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiaW5hcnlfYWNjZXB0ID0gYmFzZTY0LmI2
NGRlY29kZShhY2NlcHQpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGU6CisgICAgICAgICAg
ICByYWlzZSBIYW5kc2hha2VFcnJvcigKKyAgICAgICAgICAgICAgICAnSWxsZWdhbCB2YWx1ZSBm
b3IgaGVhZGVyICVzOiAlcicgJQorICAgICAgICAgICAgICAgIChjb21tb24uU0VDX1dFQlNPQ0tF
VF9BQ0NFUFRfSEVBREVSLCBhY2NlcHQpKQorCisgICAgICAgIGlmIGxlbihiaW5hcnlfYWNjZXB0
KSAhPSAyMDoKKyAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKAorICAgICAg
ICAgICAgICAgICdEZWNvZGVkIHZhbHVlIG9mICVzIGlzIG5vdCAyMC1ieXRlIGxvbmcnICUKKyAg
ICAgICAgICAgICAgICBjb21tb24uU0VDX1dFQlNPQ0tFVF9BQ0NFUFRfSEVBREVSKQorCisgICAg
ICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICdSZXNwb25zZSBmb3IgY2hhbGxl
bmdlIDogJXIgKCVzKScsCisgICAgICAgICAgICBhY2NlcHQsIHV0aWwuaGV4aWZ5KGJpbmFyeV9h
Y2NlcHQpKQorCisgICAgICAgIGJpbmFyeV9leHBlY3RlZF9hY2NlcHQgPSB1dGlsLnNoYTFfaGFz
aCgKKyAgICAgICAgICAgIHNlbGYuX2tleSArIGNvbW1vbi5XRUJTT0NLRVRfQUNDRVBUX1VVSUQp
LmRpZ2VzdCgpCisgICAgICAgIGV4cGVjdGVkX2FjY2VwdCA9IGJhc2U2NC5iNjRlbmNvZGUoYmlu
YXJ5X2V4cGVjdGVkX2FjY2VwdCkKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAg
ICAgICAgICAnRXhwZWN0ZWQgcmVzcG9uc2UgZm9yIGNoYWxsZW5nZTogJXIgKCVzKScsCisgICAg
ICAgICAgICBleHBlY3RlZF9hY2NlcHQsIHV0aWwuaGV4aWZ5KGJpbmFyeV9leHBlY3RlZF9hY2Nl
cHQpKQorCisgICAgICAgIGlmIGFjY2VwdCAhPSBleHBlY3RlZF9hY2NlcHQ6CisgICAgICAgICAg
ICByYWlzZSBDbGllbnRIYW5kc2hha2VFcnJvcigKKyAgICAgICAgICAgICAgICAnSW52YWxpZCAl
cyBoZWFkZXI6ICVyIChleHBlY3RlZDogJXMpJyAlCisgICAgICAgICAgICAgICAgKGNvbW1vbi5T
RUNfV0VCU09DS0VUX0FDQ0VQVF9IRUFERVIsIGFjY2VwdCwgZXhwZWN0ZWRfYWNjZXB0KSkKKwor
ICAgICAgICBkZWZsYXRlX2ZyYW1lX2FjY2VwdGVkID0gRmFsc2UKKyAgICAgICAgcGVybWVzc2Fn
ZV9kZWZsYXRlX2FjY2VwdGVkID0gRmFsc2UKKworICAgICAgICBleHRlbnNpb25zX2hlYWRlciA9
IGZpZWxkcy5nZXQoCisgICAgICAgICAgICBjb21tb24uU0VDX1dFQlNPQ0tFVF9FWFRFTlNJT05T
X0hFQURFUi5sb3dlcigpKQorICAgICAgICBhY2NlcHRlZF9leHRlbnNpb25zID0gW10KKyAgICAg
ICAgaWYgZXh0ZW5zaW9uc19oZWFkZXIgaXMgbm90IE5vbmUgYW5kIGxlbihleHRlbnNpb25zX2hl
YWRlcikgIT0gMDoKKyAgICAgICAgICAgIGFjY2VwdGVkX2V4dGVuc2lvbnMgPSBjb21tb24ucGFy
c2VfZXh0ZW5zaW9ucyhleHRlbnNpb25zX2hlYWRlclswXSkKKworICAgICAgICAjIFRPRE8oYmFz
aGkpOiBTdXBwb3J0IHRoZSBuZXcgc3R5bGUgcGVyZnJhbWUgY29tcHJlc3Npb24gZXh0ZW5zaW9u
LgorICAgICAgICBmb3IgZXh0ZW5zaW9uIGluIGFjY2VwdGVkX2V4dGVuc2lvbnM6CisgICAgICAg
ICAgICBleHRlbnNpb25fbmFtZSA9IGV4dGVuc2lvbi5uYW1lKCkKKyAgICAgICAgICAgIGlmIChl
eHRlbnNpb25fbmFtZSA9PSBjb21tb24uREVGTEFURV9GUkFNRV9FWFRFTlNJT04gYW5kCisgICAg
ICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5kZWZsYXRlX2ZyYW1lKToKKyAgICAgICAgICAgICAg
ICBkZWZsYXRlX2ZyYW1lX2FjY2VwdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHByb2Nlc3Nv
ciA9IERlZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nlc3NvcihleHRlbnNpb24pCisgICAgICAgICAg
ICAgICAgdW51c2VkX2V4dGVuc2lvbl9yZXNwb25zZSA9IHByb2Nlc3Nvci5nZXRfZXh0ZW5zaW9u
X3Jlc3BvbnNlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmRlZmxhdGVfZnJhbWUg
PSBwcm9jZXNzb3IKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxpZiAo
ZXh0ZW5zaW9uX25hbWUgPT0gY29tbW9uLlBFUk1FU1NBR0VfREVGTEFURV9FWFRFTlNJT04gYW5k
CisgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnVzZV9wZXJtZXNzYWdlX2RlZmxhdGUp
OgorICAgICAgICAgICAgICAgIHBlcm1lc3NhZ2VfZGVmbGF0ZV9hY2NlcHRlZCA9IFRydWUKKwor
ICAgICAgICAgICAgICAgIGZyYW1lciA9IF9nZXRfcGVybWVzc2FnZV9kZWZsYXRlX2ZyYW1lcihl
eHRlbnNpb24pCisgICAgICAgICAgICAgICAgZnJhbWVyLnNldF9jb21wcmVzc19vdXRnb2luZ19l
bmFibGVkKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy51c2VfcGVybWVzc2Fn
ZV9kZWZsYXRlID0gZnJhbWVyCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAg
ICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3IoCisgICAgICAgICAgICAgICAgJ1VuZXhwZWN0
ZWQgZXh0ZW5zaW9uICVyJyAlIGV4dGVuc2lvbl9uYW1lKQorCisgICAgICAgIGlmIChzZWxmLl9v
cHRpb25zLmRlZmxhdGVfZnJhbWUgYW5kIG5vdCBkZWZsYXRlX2ZyYW1lX2FjY2VwdGVkKToKKyAg
ICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKAorICAgICAgICAgICAgICAgICdS
ZXF1ZXN0ZWQgJXMsIGJ1dCB0aGUgc2VydmVyIHJlamVjdGVkIGl0JyAlCisgICAgICAgICAgICAg
ICAgY29tbW9uLkRFRkxBVEVfRlJBTUVfRVhURU5TSU9OKQorCisgICAgICAgIGlmIChzZWxmLl9v
cHRpb25zLnVzZV9wZXJtZXNzYWdlX2RlZmxhdGUgYW5kCisgICAgICAgICAgICBub3QgcGVybWVz
c2FnZV9kZWZsYXRlX2FjY2VwdGVkKToKKyAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFr
ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnUmVxdWVzdGVkICVzLCBidXQgdGhlIHNlcnZl
ciByZWplY3RlZCBpdCcgJQorICAgICAgICAgICAgICAgICAgICBjb21tb24uUEVSTUVTU0FHRV9E
RUZMQVRFX0VYVEVOU0lPTikKKworICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBIYW5kbGUgU2Vj
LVdlYlNvY2tldC1Qcm90b2NvbAorICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBIYW5kbGUgQ29v
a2llLCBldGMuCisKKworY2xhc3MgQ2xpZW50SGFuZHNoYWtlUHJvY2Vzc29ySHliaTAwKENsaWVu
dEhhbmRzaGFrZUJhc2UpOgorICAgICIiIldlYlNvY2tldCBvcGVuaW5nIGhhbmRzaGFrZSBwcm9j
ZXNzb3IgZm9yCisgICAgZHJhZnQtaWV0Zi1oeWJpLXRoZXdlYnNvY2tldHByb3RvY29sLTAwIChl
cXVpdmFsZW50IHRvCisgICAgZHJhZnQtaGl4aWUtdGhld2Vic29ja2V0cHJvdG9jb2wtNzYpLgor
ICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2tldCwgb3B0aW9ucyk6CisgICAg
ICAgIHN1cGVyKENsaWVudEhhbmRzaGFrZVByb2Nlc3Nvckh5YmkwMCwgc2VsZikuX19pbml0X18o
KQorCisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldAorICAgICAgICBzZWxmLl9vcHRpb25z
ID0gb3B0aW9ucworCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dl
cihzZWxmKQorCisgICAgICAgIGlmIChzZWxmLl9vcHRpb25zLmRlZmxhdGVfZnJhbWUgb3IKKyAg
ICAgICAgICAgIHNlbGYuX29wdGlvbnMudXNlX3Blcm1lc3NhZ2VfZGVmbGF0ZSk6CisgICAgICAg
ICAgICBsb2dnaW5nLmNyaXRpY2FsKCdIeUJpIDAwIGRvZXNuXCd0IHN1cHBvcnQgZXh0ZW5zaW9u
cy4nKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGRlZiBoYW5kc2hha2Uoc2VsZik6
CisgICAgICAgICIiIlBlcmZvcm1zIG9wZW5pbmcgaGFuZHNoYWtlIG9uIHRoZSBzcGVjaWZpZWQg
c29ja2V0LgorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIENsaWVudEhhbmRzaGFrZUVy
cm9yOiBoYW5kc2hha2UgZmFpbGVkLgorICAgICAgICAiIiIKKworICAgICAgICAjIDQuMSA1LiBz
ZW5kIHJlcXVlc3QgbGluZS4KKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoX2J1aWxkX21l
dGhvZF9saW5lKHNlbGYuX29wdGlvbnMucmVzb3VyY2UpKQorICAgICAgICAjIDQuMSA2LiBMZXQg
L2ZpZWxkcy8gYmUgYW4gZW1wdHkgbGlzdCBvZiBzdHJpbmdzLgorICAgICAgICBmaWVsZHMgPSBb
XQorICAgICAgICAjIDQuMSA3LiBBZGQgdGhlIHN0cmluZyAiVXBncmFkZTogV2ViU29ja2V0IiB0
byAvZmllbGRzLy4KKyAgICAgICAgZmllbGRzLmFwcGVuZChfVVBHUkFERV9IRUFERVJfSElYSUU3
NSkKKyAgICAgICAgIyA0LjEgOC4gQWRkIHRoZSBzdHJpbmcgIkNvbm5lY3Rpb246IFVwZ3JhZGUi
IHRvIC9maWVsZHMvLgorICAgICAgICBmaWVsZHMuYXBwZW5kKF9DT05ORUNUSU9OX0hFQURFUikK
KyAgICAgICAgIyA0LjEgOS0xMi4gQWRkIEhvc3Q6IGZpZWxkIHRvIC9maWVsZHMvLgorICAgICAg
ICBmaWVsZHMuYXBwZW5kKF9mb3JtYXRfaG9zdF9oZWFkZXIoCisgICAgICAgICAgICBzZWxmLl9v
cHRpb25zLnNlcnZlcl9ob3N0LAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9y
dCwKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMudXNlX3RscykpCisgICAgICAgICMgNC4xIDEz
LiBBZGQgT3JpZ2luOiBmaWVsZCB0byAvZmllbGRzLy4KKyAgICAgICAgaWYgbm90IHNlbGYuX29w
dGlvbnMub3JpZ2luOgorICAgICAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3IoCisg
ICAgICAgICAgICAgICAgJ1NwZWNpZnkgdGhlIG9yaWdpbiBvZiB0aGUgY29ubmVjdGlvbiBieSAt
LW9yaWdpbiBmbGFnJykKKyAgICAgICAgZmllbGRzLmFwcGVuZChfb3JpZ2luX2hlYWRlcihjb21t
b24uT1JJR0lOX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zLm9yaWdpbikpCisgICAgICAgICMgVE9ETzogNC4xIDE0IEFkZCBTZWMtV2Vi
U29ja2V0LVByb3RvY29sOiBmaWVsZCB0byAvZmllbGRzLy4KKyAgICAgICAgIyBUT0RPOiA0LjEg
MTUgQWRkIGNvb2tpZSBoZWFkZXJzIHRvIC9maWVsZHMvLgorCisgICAgICAgICMgNC4xIDE2LTIz
LiBBZGQgU2VjLVdlYlNvY2tldC1LZXk8bj4gdG8gL2ZpZWxkcy8uCisgICAgICAgIHNlbGYuX251
bWJlcjEsIGtleTEgPSBzZWxmLl9nZW5lcmF0ZV9zZWNfd2Vic29ja2V0X2tleSgpCisgICAgICAg
IHNlbGYuX2xvZ2dlci5kZWJ1ZygnTnVtYmVyMTogJWQnLCBzZWxmLl9udW1iZXIxKQorICAgICAg
ICBmaWVsZHMuYXBwZW5kKCclczogJXNcclxuJyAlIChjb21tb24uU0VDX1dFQlNPQ0tFVF9LRVkx
X0hFQURFUiwga2V5MSkpCisgICAgICAgIHNlbGYuX251bWJlcjIsIGtleTIgPSBzZWxmLl9nZW5l
cmF0ZV9zZWNfd2Vic29ja2V0X2tleSgpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnTnVt
YmVyMjogJWQnLCBzZWxmLl9udW1iZXIyKQorICAgICAgICBmaWVsZHMuYXBwZW5kKCclczogJXNc
clxuJyAlIChjb21tb24uU0VDX1dFQlNPQ0tFVF9LRVkyX0hFQURFUiwga2V5MikpCisKKyAgICAg
ICAgZmllbGRzLmFwcGVuZCgnJXM6IDBcclxuJyAlIGNvbW1vbi5TRUNfV0VCU09DS0VUX0RSQUZU
X0hFQURFUikKKworICAgICAgICAjIDQuMSAyNC4gRm9yIGVhY2ggc3RyaW5nIGluIC9maWVsZHMv
LCBpbiBhIHJhbmRvbSBvcmRlcjogc2VuZCB0aGUKKyAgICAgICAgIyBzdHJpbmcsIGVuY29kZWQg
YXMgVVRGLTgsIGZvbGxvd2VkIGJ5IGEgVVRGLTggZW5jb2RlZCBVKzAwMEQgQ0FSUklBR0UKKyAg
ICAgICAgIyBSRVRVUk4gVSswMDBBIExJTkUgRkVFRCBjaGFyYWN0ZXIgcGFpciAoQ1JMRikuCisg
ICAgICAgIHJhbmRvbS5zaHVmZmxlKGZpZWxkcykKKyAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxk
czoKKyAgICAgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kYWxsKGZpZWxkKQorICAgICAgICAjIDQu
MSAyNS4gc2VuZCBhIFVURi04LWVuY29kZWQgVSswMDBEIENBUlJJQUdFIFJFVFVSTiBVKzAwMEEg
TElORSBGRUVECisgICAgICAgICMgY2hhcmFjdGVyIHBhaXIgKENSTEYpLgorICAgICAgICBzZWxm
Ll9zb2NrZXQuc2VuZGFsbCgnXHJcbicpCisgICAgICAgICMgNC4xIDI2LiBsZXQgL2tleTMvIGJl
IGEgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgZWlnaHQgcmFuZG9tIGJ5dGVzIChvcgorICAgICAgICAj
IGVxdWl2YWxlbnRseSwgYSByYW5kb20gNjQgYml0IGludGVnZXIgZW5jb2RlZCBpbiBhIGJpZy1l
bmRpYW4gb3JkZXIpLgorICAgICAgICBzZWxmLl9rZXkzID0gc2VsZi5fZ2VuZXJhdGVfa2V5Mygp
CisgICAgICAgICMgNC4xIDI3LiBzZW5kIC9rZXkzLyB0byB0aGUgc2VydmVyLgorICAgICAgICBz
ZWxmLl9zb2NrZXQuc2VuZGFsbChzZWxmLl9rZXkzKQorICAgICAgICBzZWxmLl9sb2dnZXIuZGVi
dWcoCisgICAgICAgICAgICAnS2V5MzogJXIgKCVzKScsIHNlbGYuX2tleTMsIHV0aWwuaGV4aWZ5
KHNlbGYuX2tleTMpKQorCisgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdTZW50IGhhbmRzaGFr
ZScpCisKKyAgICAgICAgIyA0LjEgMjguIFJlYWQgYnl0ZXMgZnJvbSB0aGUgc2VydmVyIHVudGls
IGVpdGhlciB0aGUgY29ubmVjdGlvbgorICAgICAgICAjIGNsb3Nlcywgb3IgYSAweDBBIGJ5dGUg
aXMgcmVhZC4gbGV0IC9maWVsZC8gYmUgdGhlc2UgYnl0ZXMsIGluY2x1ZGluZworICAgICAgICAj
IHRoZSAweDBBIGJ5dGVzLgorICAgICAgICBmaWVsZCA9ICcnCisgICAgICAgIHdoaWxlIFRydWU6
CisgICAgICAgICAgICBjaCA9IF9yZWNlaXZlX2J5dGVzKHNlbGYuX3NvY2tldCwgMSkKKyAgICAg
ICAgICAgIGZpZWxkICs9IGNoCisgICAgICAgICAgICBpZiBjaCA9PSAnXG4nOgorICAgICAgICAg
ICAgICAgIGJyZWFrCisgICAgICAgICMgaWYgL2ZpZWxkLyBpcyBub3QgYXQgbGVhc3Qgc2V2ZW4g
Ynl0ZXMgbG9uZywgb3IgaWYgdGhlIGxhc3QKKyAgICAgICAgIyB0d28gYnl0ZXMgYXJlbid0IDB4
MEQgYW5kIDB4MEEgcmVzcGVjdGl2ZWx5LCBvciBpZiBpdCBkb2VzIG5vdAorICAgICAgICAjIGNv
bnRhaW4gYXQgbGVhc3QgdHdvIDB4MjAgYnl0ZXMsIHRoZW4gZmFpbCB0aGUgV2ViU29ja2V0IGNv
bm5lY3Rpb24KKyAgICAgICAgIyBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgICAgIGlmIGxl
bihmaWVsZCkgPCA3IG9yIG5vdCBmaWVsZC5lbmRzd2l0aCgnXHJcbicpOgorICAgICAgICAgICAg
cmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3IoJ1dyb25nIHN0YXR1cyBsaW5lOiAlcicgJSBmaWVs
ZCkKKyAgICAgICAgbSA9IHJlLm1hdGNoKCdbXiBdKiAoW14gXSopIC4qJywgZmllbGQpCisgICAg
ICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9y
KAorICAgICAgICAgICAgICAgICdObyBIVFRQIHN0YXR1cyBjb2RlIGZvdW5kIGluIHN0YXR1cyBs
aW5lOiAlcicgJSBmaWVsZCkKKyAgICAgICAgIyA0LjEgMjkuIGxldCAvY29kZS8gYmUgdGhlIHN1
YnN0cmluZyBvZiAvZmllbGQvIHRoYXQgc3RhcnRzIGZyb20gdGhlCisgICAgICAgICMgYnl0ZSBh
ZnRlciB0aGUgZmlyc3QgMHgyMCBieXRlLCBhbmQgZW5kcyB3aXRoIHRoZSBieXRlIGJlZm9yZSB0
aGUKKyAgICAgICAgIyBzZWNvbmQgMHgyMCBieXRlLgorICAgICAgICBjb2RlID0gbS5ncm91cCgx
KQorICAgICAgICAjIDQuMSAzMC4gaWYgL2NvZGUvIGlzIG5vdCB0aHJlZSBieXRlcyBsb25nLCBv
ciBpZiBhbnkgb2YgdGhlIGJ5dGVzIGluCisgICAgICAgICMgL2NvZGUvIGFyZSBub3QgaW4gdGhl
IHJhbmdlIDB4MzAgdG8gMHg5MCwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQKKyAgICAgICAgIyBj
b25uZWN0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAgICAgaWYgbm90IHJlLm1hdGNo
KCdbMC05XVswLTldWzAtOV0nLCBjb2RlKToKKyAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRz
aGFrZUVycm9yKAorICAgICAgICAgICAgICAgICdIVFRQIHN0YXR1cyBjb2RlICVyIGlzIG5vdCB0
aHJlZSBkaWdpdCBpbiBzdGF0dXMgbGluZTogJXInICUKKyAgICAgICAgICAgICAgICAoY29kZSwg
ZmllbGQpKQorICAgICAgICAjIDQuMSAzMS4gaWYgL2NvZGUvLCBpbnRlcnByZXRlZCBhcyBVVEYt
OCwgaXMgIjEwMSIsIHRoZW4gbW92ZSB0byB0aGUKKyAgICAgICAgIyBuZXh0IHN0ZXAuCisgICAg
ICAgIGlmIGNvZGUgIT0gJzEwMSc6CisgICAgICAgICAgICByYWlzZSBDbGllbnRIYW5kc2hha2VF
cnJvcigKKyAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgSFRUUCBzdGF0dXMgY29kZSAxMDEgYnV0
IGZvdW5kICVyIGluIHN0YXR1cyBsaW5lOiAnCisgICAgICAgICAgICAgICAgJyVyJyAlIChjb2Rl
LCBmaWVsZCkpCisgICAgICAgICMgNC4xIDMyLTM5LiByZWFkIGZpZWxkcyBpbnRvIC9maWVsZHMv
CisgICAgICAgIGZpZWxkcyA9IHNlbGYuX3JlYWRfZmllbGRzKCkKKyAgICAgICAgIyA0LjEgNDAu
IF9GaWVsZHMgcHJvY2Vzc2luZ18KKyAgICAgICAgIyByZWFkIGEgYnl0ZSBmcm9tIHNlcnZlcgor
ICAgICAgICBjaCA9IF9yZWNlaXZlX2J5dGVzKHNlbGYuX3NvY2tldCwgMSkKKyAgICAgICAgaWYg
Y2ggIT0gJ1xuJzogICMgMHgwQQorICAgICAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJy
b3IoJ0V4cGVjdGVkIExGIGJ1dCBmb3VuZCAlcicgJSBjaCkKKyAgICAgICAgIyA0LjEgNDEuIGNo
ZWNrIC9maWVsZHMvCisgICAgICAgICMgVE9ETyh1a2FpKTogcHJvdG9jb2wKKyAgICAgICAgIyBp
ZiB0aGUgZW50cnkncyBuYW1lIGlzICJ1cGdyYWRlIgorICAgICAgICAjICBpZiB0aGUgdmFsdWUg
aXMgbm90IGV4YWN0bHkgZXF1YWwgdG8gdGhlIHN0cmluZyAiV2ViU29ja2V0IiwKKyAgICAgICAg
IyAgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3Rl
cHMuCisgICAgICAgIF92YWxpZGF0ZV9tYW5kYXRvcnlfaGVhZGVyKAorICAgICAgICAgICAgZmll
bGRzLAorICAgICAgICAgICAgY29tbW9uLlVQR1JBREVfSEVBREVSLAorICAgICAgICAgICAgY29t
bW9uLldFQlNPQ0tFVF9VUEdSQURFX1RZUEVfSElYSUU3NSwKKyAgICAgICAgICAgIFRydWUpCisg
ICAgICAgICMgaWYgdGhlIGVudHJ5J3MgbmFtZSBpcyAiY29ubmVjdGlvbiIKKyAgICAgICAgIyAg
aWYgdGhlIHZhbHVlLCBjb252ZXJ0ZWQgdG8gQVNDSUkgbG93ZXJjYXNlLCBpcyBub3QgZXhhY3Rs
eSBlcXVhbAorICAgICAgICAjICB0byB0aGUgc3RyaW5nICJ1cGdyYWRlIiwgdGhlbiBmYWlsIHRo
ZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQKKyAgICAgICAgIyAgYWJvcnQgdGhlc2Ugc3RlcHMu
CisgICAgICAgIF92YWxpZGF0ZV9tYW5kYXRvcnlfaGVhZGVyKAorICAgICAgICAgICAgZmllbGRz
LAorICAgICAgICAgICAgY29tbW9uLkNPTk5FQ1RJT05fSEVBREVSLAorICAgICAgICAgICAgY29t
bW9uLlVQR1JBREVfQ09OTkVDVElPTl9UWVBFLAorICAgICAgICAgICAgRmFsc2UpCisKKyAgICAg
ICAgb3JpZ2luID0gX2dldF9tYW5kYXRvcnlfaGVhZGVyKAorICAgICAgICAgICAgZmllbGRzLCBj
b21tb24uU0VDX1dFQlNPQ0tFVF9PUklHSU5fSEVBREVSKQorCisgICAgICAgIGxvY2F0aW9uID0g
X2dldF9tYW5kYXRvcnlfaGVhZGVyKAorICAgICAgICAgICAgZmllbGRzLCBjb21tb24uU0VDX1dF
QlNPQ0tFVF9MT0NBVElPTl9IRUFERVIpCisKKyAgICAgICAgIyBUT0RPKHVrYWkpOiBjaGVjayBv
cmlnaW4sIGxvY2F0aW9uLCBjb29raWUsIC4uCisKKyAgICAgICAgIyA0LjEgNDIuIGxldCAvY2hh
bGxlbmdlLyBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiAvbnVtYmVyXzEvLAorICAgICAgICAjIGV4
cHJlc3NlZCBhcyBhIGJpZyBlbmRpYW4gMzIgYml0IGludGVnZXIsIC9udW1iZXJfMi8sIGV4cHJl
c3NlZAorICAgICAgICAjIGFzIGJpZyBlbmRpYW4gMzIgYml0IGludGVnZXIsIGFuZCB0aGUgZWln
aHQgYnl0ZXMgb2YgL2tleV8zLyBpbiB0aGUKKyAgICAgICAgIyBvcmRlciB0aGV5IHdlcmUgc2Vu
dCBvbiB0aGUgd2lyZS4KKyAgICAgICAgY2hhbGxlbmdlID0gc3RydWN0LnBhY2soJyFJJywgc2Vs
Zi5fbnVtYmVyMSkKKyAgICAgICAgY2hhbGxlbmdlICs9IHN0cnVjdC5wYWNrKCchSScsIHNlbGYu
X251bWJlcjIpCisgICAgICAgIGNoYWxsZW5nZSArPSBzZWxmLl9rZXkzCisKKyAgICAgICAgc2Vs
Zi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgJ0NoYWxsZW5nZTogJXIgKCVzKScsIGNoYWxs
ZW5nZSwgdXRpbC5oZXhpZnkoY2hhbGxlbmdlKSkKKworICAgICAgICAjIDQuMSA0My4gbGV0IC9l
eHBlY3RlZC8gYmUgdGhlIE1ENSBmaW5nZXJwcmludCBvZiAvY2hhbGxlbmdlLyBhcyBhCisgICAg
ICAgICMgYmlnLWVuZGlhbiAxMjggYml0IHN0cmluZy4KKyAgICAgICAgZXhwZWN0ZWQgPSB1dGls
Lm1kNV9oYXNoKGNoYWxsZW5nZSkuZGlnZXN0KCkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVn
KAorICAgICAgICAgICAgJ0V4cGVjdGVkIGNoYWxsZW5nZSByZXNwb25zZTogJXIgKCVzKScsCisg
ICAgICAgICAgICBleHBlY3RlZCwgdXRpbC5oZXhpZnkoZXhwZWN0ZWQpKQorCisgICAgICAgICMg
NC4xIDQ0LiByZWFkIHNpeHRlZW4gYnl0ZXMgZnJvbSB0aGUgc2VydmVyLgorICAgICAgICAjIGxl
dCAvcmVwbHkvIGJlIHRob3NlIGJ5dGVzLgorICAgICAgICByZXBseSA9IF9yZWNlaXZlX2J5dGVz
KHNlbGYuX3NvY2tldCwgMTYpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAg
ICAgICdBY3R1YWwgY2hhbGxlbmdlIHJlc3BvbnNlOiAlciAoJXMpJywgcmVwbHksIHV0aWwuaGV4
aWZ5KHJlcGx5KSkKKworICAgICAgICAjIDQuMSA0NS4gaWYgL3JlcGx5LyBkb2VzIG5vdCBleGFj
dGx5IGVxdWFsIC9leHBlY3RlZC8sIHRoZW4gZmFpbAorICAgICAgICAjIHRoZSBXZWJTb2NrZXQg
Y29ubmVjdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgICAgIGlmIGV4cGVjdGVkICE9
IHJlcGx5OgorICAgICAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3IoCisgICAgICAg
ICAgICAgICAgJ0JhZCBjaGFsbGVuZ2UgcmVzcG9uc2U6ICVyIChleHBlY3RlZCkgIT0gJXIgKGFj
dHVhbCknICUKKyAgICAgICAgICAgICAgICAoZXhwZWN0ZWQsIHJlcGx5KSkKKyAgICAgICAgIyA0
LjEgNDYuIFRoZSAqV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQqLgorCisgICAg
ZGVmIF9nZW5lcmF0ZV9zZWNfd2Vic29ja2V0X2tleShzZWxmKToKKyAgICAgICAgIyA0LjEgMTYu
IGxldCAvc3BhY2VzX24vIGJlIGEgcmFuZG9tIGludGVnZXIgZnJvbSAxIHRvIDEyIGluY2x1c2l2
ZS4KKyAgICAgICAgc3BhY2VzID0gcmFuZG9tLnJhbmRpbnQoMSwgMTIpCisgICAgICAgICMgNC4x
IDE3LiBsZXQgL21heF9uLyBiZSB0aGUgbGFyZ2VzdCBpbnRlZ2VyIG5vdCBncmVhdGVyIHRoYW4K
KyAgICAgICAgIyAgNCwyOTQsOTY3LDI5NSBkaXZpZGVkIGJ5IC9zcGFjZXNfbi8uCisgICAgICAg
IG1heG51bSA9IDQyOTQ5NjcyOTUgLyBzcGFjZXMKKyAgICAgICAgIyA0LjEgMTguIGxldCAvbnVt
YmVyX24vIGJlIGEgcmFuZG9tIGludGVnZXIgZnJvbSAwIHRvIC9tYXhfbi8KKyAgICAgICAgIyBp
bmNsdXNpdmUuCisgICAgICAgIG51bWJlciA9IHJhbmRvbS5yYW5kaW50KDAsIG1heG51bSkKKyAg
ICAgICAgIyA0LjEgMTkuIGxldCAvcHJvZHVjdF9uLyBiZSB0aGUgcmVzdWx0IG9mIG11bHRpcGx5
aW5nIC9udW1iZXJfbi8gYW5kCisgICAgICAgICMgL3NwYWNlc19uLyB0b2dldGhlci4KKyAgICAg
ICAgcHJvZHVjdCA9IG51bWJlciAqIHNwYWNlcworICAgICAgICAjIDQuMSAyMC4gbGV0IC9rZXlf
bi8gYmUgYSBzdHJpbmcgY29uc2lzdGluZyBvZiAvcHJvZHVjdF9uLywgZXhwcmVzc2VkCisgICAg
ICAgICMgaW4gYmFzZSB0ZW4gdXNpbmcgdGhlIG51bWVyYWxzIGluIHRoZSByYW5nZSBVKzAwMzAg
RElHSVQgWkVSTyAoMCkgdG8KKyAgICAgICAgIyBVKzAwMzkgRElHSVQgTklORSAoOSkuCisgICAg
ICAgIGtleSA9IHN0cihwcm9kdWN0KQorICAgICAgICAjIDQuMSAyMS4gaW5zZXJ0IGJldHdlZW4g
b25lIGFuZCB0d2VsdmUgcmFuZG9tIGNoYXJhY3RlcnMgZnJvbSB0aGUKKyAgICAgICAgIyByYW5n
ZSBVKzAwMjEgdG8gVSswMDJGIGFuZCBVKzAwM0EgdG8gVSswMDdFIGludG8gL2tleV9uLyBhdCBy
YW5kb20KKyAgICAgICAgIyBwb3NpdGlvbnMuCisgICAgICAgIGF2YWlsYWJsZV9jaGFycyA9IHJh
bmdlKDB4MjEsIDB4MmYgKyAxKSArIHJhbmdlKDB4M2EsIDB4N2UgKyAxKQorICAgICAgICBuID0g
cmFuZG9tLnJhbmRpbnQoMSwgMTIpCisgICAgICAgIGZvciBfIGluIHhyYW5nZShuKToKKyAgICAg
ICAgICAgIGNoID0gcmFuZG9tLmNob2ljZShhdmFpbGFibGVfY2hhcnMpCisgICAgICAgICAgICBw
b3MgPSByYW5kb20ucmFuZGludCgwLCBsZW4oa2V5KSkKKyAgICAgICAgICAgIGtleSA9IGtleVsw
OnBvc10gKyBjaHIoY2gpICsga2V5W3BvczpdCisgICAgICAgICMgNC4xIDIyLiBpbnNlcnQgL3Nw
YWNlc19uLyBVKzAwMjAgU1BBQ0UgY2hhcmFjdGVycyBpbnRvIC9rZXlfbi8gYXQKKyAgICAgICAg
IyByYW5kb20gcG9zaXRpb25zIG90aGVyIHRoYW4gc3RhcnQgb3IgZW5kIG9mIHRoZSBzdHJpbmcu
CisgICAgICAgIGZvciBfIGluIHhyYW5nZShzcGFjZXMpOgorICAgICAgICAgICAgcG9zID0gcmFu
ZG9tLnJhbmRpbnQoMSwgbGVuKGtleSkgLSAxKQorICAgICAgICAgICAga2V5ID0ga2V5WzA6cG9z
XSArICcgJyArIGtleVtwb3M6XQorICAgICAgICByZXR1cm4gbnVtYmVyLCBrZXkKKworICAgIGRl
ZiBfZ2VuZXJhdGVfa2V5MyhzZWxmKToKKyAgICAgICAgIyA0LjEgMjYuIGxldCAva2V5My8gYmUg
YSBzdHJpbmcgY29uc2lzdGluZyBvZiBlaWdodCByYW5kb20gYnl0ZXMgKG9yCisgICAgICAgICMg
ZXF1aXZhbGVudGx5LCBhIHJhbmRvbSA2NCBiaXQgaW50ZWdlciBlbmNvZGVkIGluIGEgYmlnLWVu
ZGlhbiBvcmRlcikuCisgICAgICAgIHJldHVybiAnJy5qb2luKFtjaHIocmFuZG9tLnJhbmRpbnQo
MCwgMjU1KSkgZm9yIF8gaW4geHJhbmdlKDgpXSkKKworCitjbGFzcyBDbGllbnRDb25uZWN0aW9u
KG9iamVjdCk6CisgICAgIiIiQSB3cmFwcGVyIGZvciBzb2NrZXQgb2JqZWN0IHRvIHByb3ZpZGUg
dGhlIG1wX2Nvbm4gaW50ZXJmYWNlLgorICAgIG1vZF9weXdlYnNvY2tldCBsaWJyYXJ5IGlzIGRl
c2lnbmVkIHRvIGJlIHdvcmtpbmcgb24gQXBhY2hlIG1vZF9weXRob24ncworICAgIG1wX2Nvbm4g
b2JqZWN0LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2tldCk6CisgICAg
ICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldAorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgor
ICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbChkYXRhKQorCisgICAgZGVmIHJlYWQoc2VsZiwg
bik6CisgICAgICAgIHJldHVybiBzZWxmLl9zb2NrZXQucmVjdihuKQorCisgICAgZGVmIGdldF9y
ZW1vdGVfYWRkcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2tldC5nZXRwZWVybmFt
ZSgpCisgICAgcmVtb3RlX2FkZHIgPSBwcm9wZXJ0eShnZXRfcmVtb3RlX2FkZHIpCisKKworY2xh
c3MgQ2xpZW50UmVxdWVzdChvYmplY3QpOgorICAgICIiIkEgd3JhcHBlciBjbGFzcyBqdXN0IHRv
IG1ha2UgaXQgYWJsZSB0byBwYXNzIGEgc29ja2V0IG9iamVjdCB0bworICAgIGZ1bmN0aW9ucyB0
aGF0IGV4cGVjdCBhIG1wX3JlcXVlc3Qgb2JqZWN0LgorICAgICIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHNvY2tldCk6CisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNz
X2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldAorICAgICAgICBz
ZWxmLmNvbm5lY3Rpb24gPSBDbGllbnRDb25uZWN0aW9uKHNvY2tldCkKKworCitkZWYgX2ltcG9y
dF9zc2woKToKKyAgICBnbG9iYWwgc3NsCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgc3NsCisg
ICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICByZXR1
cm4gRmFsc2UKKworCitkZWYgX2ltcG9ydF9weW9wZW5zc2woKToKKyAgICBnbG9iYWwgT3BlblNT
TAorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IE9wZW5TU0wuU1NMCisgICAgICAgIHJldHVybiBU
cnVlCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICByZXR1cm4gRmFsc2UKKworCitj
bGFzcyBFY2hvQ2xpZW50KG9iamVjdCk6CisgICAgIiIiV2ViU29ja2V0IGVjaG8gY2xpZW50LiIi
IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl9vcHRp
b25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9zb2NrZXQgPSBOb25lCisKKyAgICAgICAgc2Vs
Zi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisKKyAgICBkZWYgcnVuKHNl
bGYpOgorICAgICAgICAiIiJSdW4gdGhlIGNsaWVudC4KKworICAgICAgICBTaGFrZSBoYW5kcyBh
bmQgdGhlbiByZXBlYXQgc2VuZGluZyBtZXNzYWdlIGFuZCByZWNlaXZpbmcgaXRzIGVjaG8uCisg
ICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldC5zb2NrZXQoKQorICAg
ICAgICBzZWxmLl9zb2NrZXQuc2V0dGltZW91dChzZWxmLl9vcHRpb25zLnNvY2tldF90aW1lb3V0
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXQuY29ubmVjdCgoc2VsZi5f
b3B0aW9ucy5zZXJ2ZXJfaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zLnNlcnZlcl9wb3J0KSkKKyAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMu
dXNlX3RsczoKKyAgICAgICAgICAgICAgICBzZWxmLl9zb2NrZXQgPSBfVExTU29ja2V0KAorICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrZXQsCisgICAgICAgICAgICAgICAgICAgIHNlbGYu
X29wdGlvbnMudGxzX21vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy50
bHNfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5kaXNhYmxlX3Rs
c19jb21wcmVzc2lvbikKKworICAgICAgICAgICAgdmVyc2lvbiA9IHNlbGYuX29wdGlvbnMucHJv
dG9jb2xfdmVyc2lvbgorCisgICAgICAgICAgICBpZiAodmVyc2lvbiA9PSBfUFJPVE9DT0xfVkVS
U0lPTl9IWUJJMDggb3IKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID09IF9QUk9UT0NPTF9WRVJT
SU9OX0hZQkkxMyk6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZHNoYWtlID0gQ2xpZW50SGFu
ZHNoYWtlUHJvY2Vzc29yKAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrZXQsIHNlbGYu
X29wdGlvbnMpCisgICAgICAgICAgICBlbGlmIHZlcnNpb24gPT0gX1BST1RPQ09MX1ZFUlNJT05f
SFlCSTAwOgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRzaGFrZSA9IENsaWVudEhhbmRzaGFr
ZVByb2Nlc3Nvckh5YmkwMCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29ja2V0LCBzZWxm
Ll9vcHRpb25zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCAtLXByb3RvY29sLXZlcnNpb24g
ZmxhZzogJXInICUgdmVyc2lvbikKKworICAgICAgICAgICAgc2VsZi5faGFuZHNoYWtlLmhhbmRz
aGFrZSgpCisKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW9uIGVzdGFi
bGlzaGVkJykKKworICAgICAgICAgICAgcmVxdWVzdCA9IENsaWVudFJlcXVlc3Qoc2VsZi5fc29j
a2V0KQorCisgICAgICAgICAgICB2ZXJzaW9uX21hcCA9IHsKKyAgICAgICAgICAgICAgICBfUFJP
VE9DT0xfVkVSU0lPTl9IWUJJMDg6IGNvbW1vbi5WRVJTSU9OX0hZQkkwOCwKKyAgICAgICAgICAg
ICAgICBfUFJPVE9DT0xfVkVSU0lPTl9IWUJJMTM6IGNvbW1vbi5WRVJTSU9OX0hZQkkxMywKKyAg
ICAgICAgICAgICAgICBfUFJPVE9DT0xfVkVSU0lPTl9IWUJJMDA6IGNvbW1vbi5WRVJTSU9OX0hZ
QkkwMH0KKyAgICAgICAgICAgIHJlcXVlc3Qud3NfdmVyc2lvbiA9IHZlcnNpb25fbWFwW3ZlcnNp
b25dCisKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uID09IF9QUk9UT0NPTF9WRVJTSU9OX0hZQkkw
OCBvcgorICAgICAgICAgICAgICAgIHZlcnNpb24gPT0gX1BST1RPQ09MX1ZFUlNJT05fSFlCSTEz
KToKKyAgICAgICAgICAgICAgICBzdHJlYW1fb3B0aW9uID0gU3RyZWFtT3B0aW9ucygpCisgICAg
ICAgICAgICAgICAgc3RyZWFtX29wdGlvbi5tYXNrX3NlbmQgPSBUcnVlCisgICAgICAgICAgICAg
ICAgc3RyZWFtX29wdGlvbi51bm1hc2tfcmVjZWl2ZSA9IEZhbHNlCisKKyAgICAgICAgICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLmRlZmxhdGVfZnJhbWUgaXMgbm90IEZhbHNlOgorICAgICAgICAg
ICAgICAgICAgICBwcm9jZXNzb3IgPSBzZWxmLl9vcHRpb25zLmRlZmxhdGVfZnJhbWUKKyAgICAg
ICAgICAgICAgICAgICAgcHJvY2Vzc29yLnNldHVwX3N0cmVhbV9vcHRpb25zKHN0cmVhbV9vcHRp
b24pCisKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnVzZV9wZXJtZXNzYWdlX2Rl
ZmxhdGUgaXMgbm90IEZhbHNlOgorICAgICAgICAgICAgICAgICAgICBmcmFtZXIgPSBzZWxmLl9v
cHRpb25zLnVzZV9wZXJtZXNzYWdlX2RlZmxhdGUKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVy
LnNldHVwX3N0cmVhbV9vcHRpb25zKHN0cmVhbV9vcHRpb24pCisKKyAgICAgICAgICAgICAgICBz
ZWxmLl9zdHJlYW0gPSBTdHJlYW0ocmVxdWVzdCwgc3RyZWFtX29wdGlvbikKKyAgICAgICAgICAg
IGVsaWYgdmVyc2lvbiA9PSBfUFJPVE9DT0xfVkVSU0lPTl9IWUJJMDA6CisgICAgICAgICAgICAg
ICAgc2VsZi5fc3RyZWFtID0gU3RyZWFtSGl4aWU3NShyZXF1ZXN0LCBUcnVlKQorCisgICAgICAg
ICAgICBmb3IgbGluZSBpbiBzZWxmLl9vcHRpb25zLm1lc3NhZ2Uuc3BsaXQoJywnKToKKyAgICAg
ICAgICAgICAgICBzZWxmLl9zdHJlYW0uc2VuZF9tZXNzYWdlKGxpbmUpCisgICAgICAgICAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAn
U2VuZDogJXMnICUgbGluZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAg
ICAgcmVjZWl2ZWQgPSBzZWxmLl9zdHJlYW0ucmVjZWl2ZV9tZXNzYWdlKCkKKworICAgICAgICAg
ICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAg
ICAgICBwcmludCAnUmVjdjogJXMnICUgcmVjZWl2ZWQKKyAgICAgICAgICAgICAgICBleGNlcHQg
RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnZlcmJv
c2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnRXJyb3I6ICVzJyAlIGUKKyAgICAg
ICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgc2VsZi5fZG9fY2xvc2luZ19oYW5k
c2hha2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc29ja2V0LmNsb3Nl
KCkKKworICAgIGRlZiBfZG9fY2xvc2luZ19oYW5kc2hha2Uoc2VsZik6CisgICAgICAgICIiIlBl
cmZvcm0gY2xvc2luZyBoYW5kc2hha2UgdXNpbmcgdGhlIHNwZWNpZmllZCBjbG9zaW5nIGZyYW1l
LiIiIgorCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMubWVzc2FnZS5zcGxpdCgnLCcpWy0xXSA9
PSBfR09PREJZRV9NRVNTQUdFOgorICAgICAgICAgICAgIyByZXF1ZXN0ZWQgc2VydmVyIGluaXRp
YXRlZCBjbG9zaW5nIGhhbmRzaGFrZSwgc28KKyAgICAgICAgICAgICMgZXhwZWN0aW5nIGNsb3Np
bmcgaGFuZHNoYWtlIG1lc3NhZ2UgZnJvbSBzZXJ2ZXIuCisgICAgICAgICAgICBzZWxmLl9sb2dn
ZXIuaW5mbygnV2FpdCBmb3Igc2VydmVyLWluaXRpYXRlZCBjbG9zaW5nIGhhbmRzaGFrZScpCisg
ICAgICAgICAgICBtZXNzYWdlID0gc2VsZi5fc3RyZWFtLnJlY2VpdmVfbWVzc2FnZSgpCisgICAg
ICAgICAgICBpZiBtZXNzYWdlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcHJpbnQgJ1JlY3Yg
Y2xvc2UnCisgICAgICAgICAgICAgICAgcHJpbnQgJ1NlbmQgYWNrJworICAgICAgICAgICAgICAg
IHNlbGYuX2xvZ2dlci5pbmZvKAorICAgICAgICAgICAgICAgICAgICAnUmVjZWl2ZWQgY2xvc2lu
ZyBoYW5kc2hha2UgYW5kIHNlbnQgYWNrJykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAg
ICAgcHJpbnQgJ1NlbmQgY2xvc2UnCisgICAgICAgIHNlbGYuX3N0cmVhbS5jbG9zZV9jb25uZWN0
aW9uKCkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ1NlbnQgY2xvc2luZyBoYW5kc2hha2Un
KQorICAgICAgICBwcmludCAnUmVjdiBhY2snCisgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdS
ZWNlaXZlZCBhY2snKQorCisKK2RlZiBtYWluKCk6CisgICAgc3lzLnN0ZG91dCA9IGNvZGVjcy5n
ZXR3cml0ZXIoJ3V0Zi04Jykoc3lzLnN0ZG91dCkKKworICAgIHBhcnNlciA9IE9wdGlvblBhcnNl
cigpCisgICAgIyBXZSBhY2NlcHQgLS1jb21tYW5kX2xpbmVfZmxhZyBzdHlsZSBmbGFncyB3aGlj
aCBpcyB0aGUgc2FtZSBhcyBHb29nbGUKKyAgICAjIGdmbGFncyBpbiBhZGRpdGlvbiB0byBjb21t
b24gLS1jb21tYW5kLWxpbmUtZmxhZyBzdHlsZSBmbGFncy4KKyAgICBwYXJzZXIuYWRkX29wdGlv
bignLXMnLCAnLS1zZXJ2ZXItaG9zdCcsICctLXNlcnZlcl9ob3N0JywKKyAgICAgICAgICAgICAg
ICAgICAgICBkZXN0PSdzZXJ2ZXJfaG9zdCcsIHR5cGU9J3N0cmluZycsCisgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD0nbG9jYWxob3N0JywgaGVscD0nc2VydmVyIGhvc3QnKQorICAgIHBh
cnNlci5hZGRfb3B0aW9uKCctcCcsICctLXNlcnZlci1wb3J0JywgJy0tc2VydmVyX3BvcnQnLAor
ICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3NlcnZlcl9wb3J0JywgdHlwZT0naW50JywKKyAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PV9VTkRFRklORURfUE9SVCwgaGVscD0nc2VydmVy
IHBvcnQnKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctbycsICctLW9yaWdpbicsIGRlc3Q9J29y
aWdpbicsIHR5cGU9J3N0cmluZycsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25l
LCBoZWxwPSdvcmlnaW4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcicsICctLXJlc291cmNl
JywgZGVzdD0ncmVzb3VyY2UnLCB0eXBlPSdzdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ9Jy9lY2hvJywgaGVscD0ncmVzb3VyY2UgcGF0aCcpCisgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy1tJywgJy0tbWVzc2FnZScsIGRlc3Q9J21lc3NhZ2UnLCB0eXBlPSdzdHJpbmcnLAor
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdjb21tYS1zZXBhcmF0ZWQgbWVzc2FnZXMgdG8g
c2VuZC4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzIHdpbGwgZm9yY2UgY2xvc2Ug
dGhlIGNvbm5lY3Rpb24gZnJvbSBzZXJ2ZXIuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0dPT0RCWUVfTUVTU0FHRSkpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1xJywgJy0tcXVp
ZXQnLCBkZXN0PSd2ZXJib3NlJywgYWN0aW9uPSdzdG9yZV9mYWxzZScsCisgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD1UcnVlLCBoZWxwPSdzdXBwcmVzcyBtZXNzYWdlcycpCisgICAgcGFy
c2VyLmFkZF9vcHRpb24oJy10JywgJy0tdGxzJywgZGVzdD0ndXNlX3RscycsIGFjdGlvbj0nc3Rv
cmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0ndXNl
IFRMUyAod3NzOi8vKS4gQnkgZGVmYXVsdCwgJworICAgICAgICAgICAgICAgICAgICAgICdpdCBs
b29rcyBmb3Igc3NsIGFuZCBweU9wZW5TU0wgbW9kdWxlIGFuZCB1c2VzIGZvdW5kICcKKyAgICAg
ICAgICAgICAgICAgICAgICAnb25lLiBVc2UgLS10bHMtbW9kdWxlIG9wdGlvbiB0byBzcGVjaWZ5
IHdoaWNoIG1vZHVsZSAnCisgICAgICAgICAgICAgICAgICAgICAgJ3RvIHVzZScpCisgICAgcGFy
c2VyLmFkZF9vcHRpb24oJy0tdGxzLW1vZHVsZScsICctLXRsc19tb2R1bGUnLCBkZXN0PSd0bHNf
bW9kdWxlJywKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdjaG9pY2UnLAorICAgICAgICAg
ICAgICAgICAgICAgIGNob2ljZXMgPSBbX1RMU19CWV9TVEFOREFSRF9NT0RVTEUsIF9UTFNfQllf
UFlPUEVOU1NMXSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdVc2Ugc3NsIG1vZHVsZSBp
ZiAiJXMiIGlzIHNwZWNpZmllZC4gJworICAgICAgICAgICAgICAgICAgICAgICdVc2UgcHlPcGVu
U1NMIG1vZHVsZSBpZiAiJXMiIGlzIHNwZWNpZmllZCcgJQorICAgICAgICAgICAgICAgICAgICAg
IChfVExTX0JZX1NUQU5EQVJEX01PRFVMRSwgX1RMU19CWV9QWU9QRU5TU0wpKQorICAgIHBhcnNl
ci5hZGRfb3B0aW9uKCctLXRscy12ZXJzaW9uJywgJy0tdGxzX3ZlcnNpb24nLAorICAgICAgICAg
ICAgICAgICAgICAgIGRlc3Q9J3Rsc192ZXJzaW9uJywKKyAgICAgICAgICAgICAgICAgICAgICB0
eXBlPSdzdHJpbmcnLCBkZWZhdWx0PV9UTFNfVkVSU0lPTl9TU0wyMywKKyAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSdUTFMvU1NMIHZlcnNpb24gdG8gdXNlLiBPbmUgb2YgXCcnICsKKyAgICAg
ICAgICAgICAgICAgICAgICBfVExTX1ZFUlNJT05fU1NMMjMgKyAnXCcgKFNTTCB2ZXJzaW9uIDIg
b3IgMyksIFwnJyArCisgICAgICAgICAgICAgICAgICAgICAgX1RMU19WRVJTSU9OX1NTTDMgKyAn
XCcgKFNTTCB2ZXJzaW9uIDMpLCBcJycgKworICAgICAgICAgICAgICAgICAgICAgIF9UTFNfVkVS
U0lPTl9UTFMxICsgJ1wnIChUTFMgdmVyc2lvbiAxKScpCisgICAgcGFyc2VyLmFkZF9vcHRpb24o
Jy0tZGlzYWJsZS10bHMtY29tcHJlc3Npb24nLCAnLS1kaXNhYmxlX3Rsc19jb21wcmVzc2lvbics
CisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nZGlzYWJsZV90bHNfY29tcHJlc3Npb24nLAor
ICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2Us
CisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRGlzYWJsZSBUTFMgY29tcHJlc3Npb24uIEF2
YWlsYWJsZSBvbmx5IHdoZW4gJworICAgICAgICAgICAgICAgICAgICAgICdweU9wZW5TU0wgbW9k
dWxlIGlzIHVzZWQuJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLWsnLCAnLS1zb2NrZXQtdGlt
ZW91dCcsICctLXNvY2tldF90aW1lb3V0JywKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdz
b2NrZXRfdGltZW91dCcsIHR5cGU9J2ludCcsIGRlZmF1bHQ9X1RJTUVPVVRfU0VDLAorICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J1RpbWVvdXQoc2VjKSBmb3Igc29ja2V0cycpCisgICAgcGFy
c2VyLmFkZF9vcHRpb24oJy0tZHJhZnQ3NScsIGRlc3Q9J2RyYWZ0NzUnLAorICAgICAgICAgICAg
ICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0nT2Jzb2xldGUgb3B0aW9uLiBEb25cJ3QgdXNlIHRoaXMuJykKKyAg
ICBwYXJzZXIuYWRkX29wdGlvbignLS1wcm90b2NvbC12ZXJzaW9uJywgJy0tcHJvdG9jb2xfdmVy
c2lvbicsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ncHJvdG9jb2xfdmVyc2lvbicsCisg
ICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgZGVmYXVsdD1fUFJPVE9DT0xfVkVS
U0lPTl9IWUJJMTMsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nV2ViU29ja2V0IHByb3Rv
Y29sIHZlcnNpb24gdG8gdXNlLiBPbmUgb2YgXCcnICsKKyAgICAgICAgICAgICAgICAgICAgICBf
UFJPVE9DT0xfVkVSU0lPTl9IWUJJMTMgKyAnXCcsIFwnJyArCisgICAgICAgICAgICAgICAgICAg
ICAgX1BST1RPQ09MX1ZFUlNJT05fSFlCSTA4ICsgJ1wnLCBcJycgKworICAgICAgICAgICAgICAg
ICAgICAgIF9QUk9UT0NPTF9WRVJTSU9OX0hZQkkwMCArICdcJycpCisgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy0tdmVyc2lvbi1oZWFkZXInLCAnLS12ZXJzaW9uX2hlYWRlcicsCisgICAgICAgICAg
ICAgICAgICAgICAgZGVzdD0ndmVyc2lvbl9oZWFkZXInLAorICAgICAgICAgICAgICAgICAgICAg
IHR5cGU9J2ludCcsIGRlZmF1bHQ9LTEsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3Bl
Y2lmeSBTZWMtV2ViU29ja2V0LVZlcnNpb24gaGVhZGVyIHZhbHVlJykKKyAgICBwYXJzZXIuYWRk
X29wdGlvbignLS1kZWZsYXRlLWZyYW1lJywgJy0tZGVmbGF0ZV9mcmFtZScsCisgICAgICAgICAg
ICAgICAgICAgICAgZGVzdD0nZGVmbGF0ZV9mcmFtZScsCisgICAgICAgICAgICAgICAgICAgICAg
YWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSdVc2UgdGhlIGRlZmxhdGUtZnJhbWUgZXh0ZW5zaW9uLicpCisgICAgcGFyc2VyLmFk
ZF9vcHRpb24oJy0tdXNlLXBlcm1lc3NhZ2UtZGVmbGF0ZScsICctLXVzZV9wZXJtZXNzYWdlX2Rl
ZmxhdGUnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3VzZV9wZXJtZXNzYWdlX2RlZmxh
dGUnLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9
RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVXNlIHRoZSBwZXJtZXNzYWdlLWRl
ZmxhdGUgZXh0ZW5zaW9uLicpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy0tbG9nLWxldmVsJywg
Jy0tbG9nX2xldmVsJywgdHlwZT0nY2hvaWNlJywKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0
PSdsb2dfbGV2ZWwnLCBkZWZhdWx0PSd3YXJuJywKKyAgICAgICAgICAgICAgICAgICAgICBjaG9p
Y2VzPVsnZGVidWcnLCAnaW5mbycsICd3YXJuJywgJ2Vycm9yJywgJ2NyaXRpY2FsJ10sCisgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0nTG9nIGxldmVsLicpCisKKyAgICAob3B0aW9ucywgdW51
c2VkX2FyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgbG9nZ2luZy5iYXNpY0NvbmZp
ZyhsZXZlbD1sb2dnaW5nLmdldExldmVsTmFtZShvcHRpb25zLmxvZ19sZXZlbC51cHBlcigpKSkK
KworICAgIGlmIG9wdGlvbnMuZHJhZnQ3NToKKyAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgnLS1k
cmFmdDc1IG9wdGlvbiBpcyBvYnNvbGV0ZS4nKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAg
aWYgb3B0aW9ucy5wcm90b2NvbF92ZXJzaW9uID09IF9QUk9UT0NPTF9WRVJTSU9OX0hJWElFNzU6
CisgICAgICAgIGxvZ2dpbmcuY3JpdGljYWwoCisgICAgICAgICAgICAnVmFsdWUgJXMgaXMgb2Jz
b2xldGUgZm9yIC0tcHJvdG9jb2xfdmVyc2lvbiBvcHRpb25zJyAlCisgICAgICAgICAgICBfUFJP
VE9DT0xfVkVSU0lPTl9ISVhJRTc1KQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgb3B0
aW9ucy51c2VfdGxzOgorICAgICAgICBpZiBvcHRpb25zLnRsc19tb2R1bGUgaXMgTm9uZToKKyAg
ICAgICAgICAgIGlmIF9pbXBvcnRfc3NsKCk6CisgICAgICAgICAgICAgICAgb3B0aW9ucy50bHNf
bW9kdWxlID0gX1RMU19CWV9TVEFOREFSRF9NT0RVTEUKKyAgICAgICAgICAgICAgICBsb2dnaW5n
LmRlYnVnKCdVc2luZyBzc2wgbW9kdWxlJykKKyAgICAgICAgICAgIGVsaWYgX2ltcG9ydF9weW9w
ZW5zc2woKToKKyAgICAgICAgICAgICAgICBvcHRpb25zLnRsc19tb2R1bGUgPSBfVExTX0JZX1BZ
T1BFTlNTTAorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1VzaW5nIHB5T3BlblNTTCBt
b2R1bGUnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmNyaXRp
Y2FsKAorICAgICAgICAgICAgICAgICAgICAgICAgJ1RMUyBzdXBwb3J0IHJlcXVpcmVzIHNzbCBv
ciBweU9wZW5TU0wgbW9kdWxlLicpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAg
ICAgZWxpZiBvcHRpb25zLnRsc19tb2R1bGUgPT0gX1RMU19CWV9TVEFOREFSRF9NT0RVTEU6Cisg
ICAgICAgICAgICBpZiBub3QgX2ltcG9ydF9zc2woKToKKyAgICAgICAgICAgICAgICBsb2dnaW5n
LmNyaXRpY2FsKCdzc2wgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUnKQorICAgICAgICAgICAgICAg
IHN5cy5leGl0KDEpCisgICAgICAgIGVsaWYgb3B0aW9ucy50bHNfbW9kdWxlID09IF9UTFNfQllf
UFlPUEVOU1NMOgorICAgICAgICAgICAgaWYgbm90IF9pbXBvcnRfcHlvcGVuc3NsKCk6CisgICAg
ICAgICAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgncHlPcGVuU1NMIG1vZHVsZSBpcyBub3QgYXZh
aWxhYmxlJykKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgnSW52YWxpZCAtLXRscy1tb2R1bGUgb3B0aW9uOiAl
cicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudGxzX21vZHVsZSkKKyAg
ICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgaWYgKG9wdGlvbnMuZGlzYWJsZV90bHNf
Y29tcHJlc3Npb24gYW5kCisgICAgICAgICAgICBvcHRpb25zLnRsc19tb2R1bGUgIT0gX1RMU19C
WV9QWU9QRU5TU0wpOgorICAgICAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgnWW91IGNhbiBkaXNh
YmxlIFRMUyBjb21wcmVzc2lvbiBvbmx5IHdoZW4gJworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAncHlPcGVuU1NMIG1vZHVsZSBpcyB1c2VkLicpCisgICAgICAgICAgICBzeXMuZXhpdCgx
KQorICAgIGVsc2U6CisgICAgICAgIGlmIG9wdGlvbnMudGxzX21vZHVsZSBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIGxvZ2dpbmcuY3JpdGljYWwoJ1VzZSAtLXRscy1tb2R1bGUgb3B0aW9uIG9u
bHkgdG9nZXRoZXIgd2l0aCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLXVzZS10
bHMgb3B0aW9uLicpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGlmIG9wdGlv
bnMuZGlzYWJsZV90bHNfY29tcHJlc3Npb246CisgICAgICAgICAgICBsb2dnaW5nLmNyaXRpY2Fs
KCdVc2UgLS1kaXNhYmxlLXRscy1jb21wcmVzc2lvbiBvbmx5IHRvZ2V0aGVyICcKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3dpdGggLS11c2UtdGxzIG9wdGlvbi4nKQorICAgICAgICAg
ICAgc3lzLmV4aXQoMSkKKworICAgICMgRGVmYXVsdCBwb3J0IG51bWJlciBkZXBlbmRzIG9uIHdo
ZXRoZXIgVExTIGlzIHVzZWQuCisgICAgaWYgb3B0aW9ucy5zZXJ2ZXJfcG9ydCA9PSBfVU5ERUZJ
TkVEX1BPUlQ6CisgICAgICAgIGlmIG9wdGlvbnMudXNlX3RsczoKKyAgICAgICAgICAgIG9wdGlv
bnMuc2VydmVyX3BvcnQgPSBjb21tb24uREVGQVVMVF9XRUJfU09DS0VUX1NFQ1VSRV9QT1JUCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcHRpb25zLnNlcnZlcl9wb3J0ID0gY29tbW9uLkRF
RkFVTFRfV0VCX1NPQ0tFVF9QT1JUCisKKyAgICAjIG9wdHBhcnNlIGRvZXNuJ3Qgc2VlbSB0byBo
YW5kbGUgbm9uLWFzY2lpIGRlZmF1bHQgdmFsdWVzLgorICAgICMgU2V0IGRlZmF1bHQgbWVzc2Fn
ZSBoZXJlLgorICAgIGlmIG5vdCBvcHRpb25zLm1lc3NhZ2U6CisgICAgICAgIG9wdGlvbnMubWVz
c2FnZSA9IHUnSGVsbG8sXHU2NWU1XHU2NzJjJyAgICMgIkphcGFuIiBpbiBKYXBhbmVzZQorCisg
ICAgRWNob0NsaWVudChvcHRpb25zKS5ydW4oKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5f
Xyc6CisgICAgbWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQv
c3JjL2V4YW1wbGUvZWNob19ub2V4dF93c2gucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvZWNob19ub2V4
dF93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMWRmNTE1MTIyNzExMWUxMTQ0MjRjNTU4NmExNDJhOWFkYjdk
NjA0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9lY2hvX25vZXh0X3dzaC5w
eQpAQCAtMCwwICsxLDYxIEBACisjIENvcHlyaWdodCAyMDEzLCBHb29nbGUgSW5jLgorIyBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitfR09PREJZRV9NRVNTQUdF
ID0gdSdHb29kYnllJworCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1
ZXN0KToKKyAgICAiIiJSZWNlaXZlZCBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMgaGVhZGVyIHZh
bHVlIGlzIHBhcnNlZCBpbnRvCisgICAgcmVxdWVzdC53c19yZXF1ZXN0ZWRfZXh0ZW5zaW9ucy4g
cHl3ZWJzb2NrZXQgY3JlYXRlcyBleHRlbnNpb24KKyAgICBwcm9jZXNzb3JzIHVzaW5nIGl0IGJl
Zm9yZSBkb19leHRyYV9oYW5kc2hha2UgY2FsbCBhbmQgbmV2ZXIgbG9va3MgYXQgaXQKKyAgICBh
ZnRlciB0aGUgY2FsbC4KKworICAgIFRvIHJlamVjdCByZXF1ZXN0ZWQgZXh0ZW5zaW9ucywgY2xl
YXIgdGhlIHByb2Nlc3NvciBsaXN0LgorICAgICIiIgorCisgICAgcmVxdWVzdC53c19leHRlbnNp
b25fcHJvY2Vzc29ycyA9IFtdCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1
ZXN0KToKKyAgICAiIiJFY2hvLiBTYW1lIGFzIGVjaG9fd3NoLnB5LiIiIgorCisgICAgd2hpbGUg
VHJ1ZToKKyAgICAgICAgbGluZSA9IHJlcXVlc3Qud3Nfc3RyZWFtLnJlY2VpdmVfbWVzc2FnZSgp
CisgICAgICAgIGlmIGxpbmUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBp
ZiBpc2luc3RhbmNlKGxpbmUsIHVuaWNvZGUpOgorICAgICAgICAgICAgcmVxdWVzdC53c19zdHJl
YW0uc2VuZF9tZXNzYWdlKGxpbmUsIGJpbmFyeT1GYWxzZSkKKyAgICAgICAgICAgIGlmIGxpbmUg
PT0gX0dPT0RCWUVfTUVTU0FHRToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLnNlbmRfbWVzc2FnZShsaW5lLCBiaW5h
cnk9VHJ1ZSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhh
bXBsZS9lY2hvX3dzaC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRz
ZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9lY2hvX3dzaC5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zODY0NmMzMmNlYjUxNWYxNWRkNTcyNjIyNjg5Yzc5ZWU2MWU1NDNmCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5
d2Vic29ja2V0L3NyYy9leGFtcGxlL2VjaG9fd3NoLnB5CkBAIC0wLDAgKzEsNTQgQEAKKyMgQ29w
eXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisKK19HT09EQllFX01FU1NBR0UgPSB1J0dvb2RieWUnCisKKworZGVmIHdl
Yl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgICMgVGhpcyBleGFtcGxl
IGhhbmRsZXIgYWNjZXB0cyBhbnkgcmVxdWVzdC4gU2VlIG9yaWdpbl9jaGVja193c2gucHkgZm9y
IGhvdworICAgICMgdG8gcmVqZWN0IGFjY2VzcyBmcm9tIHVudHJ1c3RlZCBzY3JpcHRzIGJhc2Vk
IG9uIG9yaWdpbiB2YWx1ZS4KKworICAgIHBhc3MgICMgQWx3YXlzIGFjY2VwdC4KKworCitkZWYg
d2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHdoaWxlIFRydWU6CisgICAg
ICAgIGxpbmUgPSByZXF1ZXN0LndzX3N0cmVhbS5yZWNlaXZlX21lc3NhZ2UoKQorICAgICAgICBp
ZiBsaW5lIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShsaW5lLCB1bmljb2RlKToKKyAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLnNlbmRfbWVz
c2FnZShsaW5lLCBiaW5hcnk9RmFsc2UpCisgICAgICAgICAgICBpZiBsaW5lID09IF9HT09EQllF
X01FU1NBR0U6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByZXF1ZXN0LndzX3N0cmVhbS5zZW5kX21lc3NhZ2UobGluZSwgYmluYXJ5PVRydWUpCisK
KworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvZXZlbnRz
b3VyY2UuY2dpIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rv
b2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2V2ZW50c291cmNlLmNnaQpuZXcgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ZGRkZjIzN2NmN2Q0NzY0OTczNDdkMDk1YTEyMjk5NDE3N2UxNDA5Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vi
c29ja2V0L3NyYy9leGFtcGxlL2V2ZW50c291cmNlLmNnaQpAQCAtMCwwICsxLDU0IEBACisjIS91
c3IvYmluL3B5dGhvbgorCisjIENvcHlyaWdodCAyMDEzLCBHb29nbGUgSW5jLgorIyBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6Cisj
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUaGlzIENHSSBzY3JpcHQg
Z2VuZXJhdGVzIHRleHQvZXZlbnQtc3RyZWFtIHR5cGUgZGF0YSBzdHJlYW0gZm9yIHRlc3RpbmcK
K3RoZSBTZXJ2ZXItU2VudCBFdmVudHMuCisKK0l0IHdpbGwgb25seSB3b3JrIGNvcnJlY3RseSB3
aXRoIEhUVFAgc2VydmVycyB0aGF0IGRvIG5vdCBidWZmZXIgdGhlIG91dHB1dCBvZgorQ0dJIHNj
cmlwdHMuCisiIiIKKworCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitzeXMuc3Rkb3V0Lndy
aXRlKCdDb250ZW50LXR5cGU6IHRleHQvZXZlbnQtc3RyZWFtXHJcblxyXG4nKQorCitpZCA9IDAK
Kword2hpbGUgVHJ1ZToKKyAgc3lzLnN0ZG91dC53cml0ZSgnZGF0YTogSGVsbG9cclxuaWQ6ICVk
XHJcblxyXG4nICUgaWQpCisgIHN5cy5zdGRvdXQuZmx1c2goKQorCisgIGlkID0gaWQgKyAxCisK
KyAgdGltZS5zbGVlcCgxKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2V2ZW50c291cmNl
Lmh0bWwgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMv
cHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvZXZlbnRzb3VyY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTk4
YTg4MDdkMWZmY2NlY2Y1ODVmMWJiNjU2ZmQyZDkwMmZjZDM5Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29j
a2V0L3NyYy9leGFtcGxlL2V2ZW50c291cmNlLmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPCEtLQor
Q29weXJpZ2h0IDIwMTMsIEdvb2dsZSBJbmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2Nv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKK2luIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKK2NvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorLS0+CisKKzwhLS0KK1NpbXBsZSBleGFtcGxlIG9mIHRoZSBT
ZXJ2ZXItU2VudCBFdmVudHMKK2h0dHA6Ly9kZXYudzMub3JnL2h0bWw1L2V2ZW50c291cmNlLwor
CitGb3IgY29tcGFyaXNvbiB3aXRoIHRoZSBXZWJTb2NrZXQgUHJvdG9jb2wgJiBBUEkuCisKK1J1
biB0aGUgcHl3ZWJzb2NrZXQgd2l0aCB0aGUgLS1jZ2lfcGF0aCBwYXJhbWV0ZXIuCistLT4KKwor
PGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5TZXJ2ZXItU2VudCBFdmVudHMgRXhhbXBsZTwvdGl0bGU+
Cis8c2NyaXB0PgordmFyIGV2ZW50U291cmNlID0gbnVsbDsKKworZnVuY3Rpb24gYWRkVG9Mb2co
ZGF0YSkgeworICBsb2dCb3gudmFsdWUgKz0gZGF0YSArICdcbic7CisgIGxvZ0JveC5zY3JvbGxU
b3AgPSAxMDAwMDAwOworfQorCitmdW5jdGlvbiBpbml0KCkgeworICBsb2dCb3ggPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7CisKKyAgZXZlbnRTb3VyY2UgID0gbmV3IEV2ZW50U291
cmNlKCcvZXZlbnRzb3VyY2UuY2dpJyk7CisgIGV2ZW50U291cmNlLm9ub3BlbiA9IGZ1bmN0aW9u
KCkgeworICAgIGFkZFRvTG9nKCdvbm9wZW4gKHJlYWR5U3RhdGUgPSAnICsgZXZlbnRTb3VyY2Uu
cmVhZHlTdGF0ZSArICcpJyk7CisgIH0KKyAgZXZlbnRTb3VyY2Uub25tZXNzYWdlID0gZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICBhZGRUb0xvZyhldmVudC5kYXRhKTsKKyAgfQorICBldmVudFNvdXJj
ZS5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBhZGRUb0xvZygnb25lcnJvciAocmVh
ZHlTdGF0ZSA9ICcgKyBldmVudFNvdXJjZS5yZWFkeVN0YXRlICsgJyknKTsKKyAgfQorfQorPC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImluaXQoKSI+Cis8dGV4dGFyZWEgaWQ9Imxv
ZyIgcm93cz0iMTAiIGNvbHM9IjQwIiByZWFkb25seT48L3RleHRhcmVhPgorPHAgc3R5bGU9ImZv
bnQtc2l6ZTogc21hbGwiPgorICBNYWtlIHN1cmUgdGhhdCBweXdlYnNvY2tldCBpcyBydW4gd2l0
aCAtLWNnaV9wYXRoIHBhcmFtZXRlci4KKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdl
YnNvY2tldC9zcmMvZXhhbXBsZS9oYW5kbGVyX21hcC50eHQgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvaGFu
ZGxlcl9tYXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxYzRjMDlhYTAwOTFkOGJhZjI5MDg5NTk5MDU4Njc4
NDJhZWI4NjUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvaGFuZGxlcl9tYXAu
dHh0CkBAIC0wLDAgKzEsMTEgQEAKKyMgd2Vic29ja2V0IGhhbmRsZXIgbWFwIGZpbGUsIHVzZWQg
Ynkgc3RhbmRhbG9uZS5weSAtbSBvcHRpb24uCisjIEEgbGluZSBzdGFydGluZyB3aXRoICcjJyBp
cyBhIGNvbW1lbnQgbGluZS4KKyMgRWFjaCBsaW5lIGNvbnNpc3RzIG9mICdhbGlhc19yZXNvdXJj
ZV9wYXRoJyBhbmQgJ2V4aXN0aW5nX3Jlc291cmNlX3BhdGgnCisjIHNlcGFyYXRlZCBieSBzcGFj
ZXMuCisjIEFsaWFzaW5nIGlzIHByb2Nlc3NlZCBmcm9tIHRoZSB0b3AgdG8gdGhlIGJvdHRvbSBv
ZiB0aGUgbGluZSwgYW5kCisjICdleGlzdGluZ19yZXNvdXJjZV9wYXRoJyBtdXN0IGV4aXN0IGJl
Zm9yZSBpdCBpcyBhbGlhc2VkLgorIyBGb3IgZXhhbXBsZSwKKyMgIC8gL2VjaG8KKyMgbWVhbnMg
dGhhdCBhIHJlcXVlc3QgdG8gJy8nIHdpbGwgYmUgaGFuZGxlZCBieSBoYW5kbGVycyBmb3IgJy9l
Y2hvJy4KKy8gL2VjaG8KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2hzdHNfd3NoLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vi
c29ja2V0L3NyYy9leGFtcGxlL2hzdHNfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4NjE5NDY5MjFhZjA0
NTk0ZDYyMDI2YjQ2ZjA3NzU4ZGRmZTQwMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4
YW1wbGUvaHN0c193c2gucHkKQEAgLTAsMCArMSw0MCBAQAorIyBDb3B5cmlnaHQgMjAxMywgR29v
Z2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwor
ZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHJlcXVlc3Qu
ZXh0cmFfaGVhZGVycy5hcHBlbmQoCisgICAgICAgICgnU3RyaWN0LVRyYW5zcG9ydC1TZWN1cml0
eScsICdtYXgtYWdlPTg2NDAwJykpCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShy
ZXF1ZXN0KToKKyAgICByZXF1ZXN0LndzX3N0cmVhbS5zZW5kX21lc3NhZ2UoJ0hlbGxvJywgYmlu
YXJ5PUZhbHNlKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9l
eGFtcGxlL2ludGVybmFsX2Vycm9yX3dzaC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9pbnRlcm5hbF9l
cnJvcl93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmU1ODFiNTRhNjQ4YzA5YTIyZjI1NDUxMjdkNzBkZjA1
MTM0OTIzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9pbnRlcm5hbF9lcnJv
cl93c2gucHkKQEAgLTAsMCArMSw0MiBAQAorIyBDb3B5cmlnaHQgMjAxMiwgR29vZ2xlIEluYy4K
KyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisj
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworZnJvbSBtb2Rf
cHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0aWwKKworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9o
YW5kc2hha2UocmVxdWVzdCk6CisgICAgcGFzcworCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVy
X2RhdGEocmVxdWVzdCk6CisgICAgcmFpc2UgbXNndXRpbC5CYWRPcGVyYXRpb25FeGNlcHRpb24o
J0ludGVudGlvbmFsJykKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9z
cmMvZXhhbXBsZS9vcmlnaW5fY2hlY2tfd3NoLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL29yaWdpbl9j
aGVja193c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA1NzY3YWI5MzJmYjU4MjgyNGFhZjFhNTdkOTI0OWMz
MDRiZDUxZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9vcmlnaW5fY2hlY2tf
d3NoLnB5CkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisj
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
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFRoaXMgZXhhbXBs
ZSBpcyBkZXJpdmVkIGZyb20gdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9vcmlnaW5fY2hlY2tfd3No
LnB5LgorCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAg
ICBpZiByZXF1ZXN0LndzX29yaWdpbiA9PSAnaHR0cDovL2V4YW1wbGUuY29tJzoKKyAgICAgICAg
cmV0dXJuCisgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hY2NlcHRhYmxlIG9yaWdpbjogJXInICUg
cmVxdWVzdC53c19vcmlnaW4pCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1
ZXN0KToKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ29yaWdpbl9jaGVja193c2gucHkg
aXMgY2FsbGVkIGZvciAlcywgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJl
cXVlc3Qud3NfcmVzb3VyY2UsIHJlcXVlc3Qud3NfcHJvdG9jb2wpKQorCisKKyMgdmk6c3RzPTQg
c3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL3B5d2Vic29ja2V0LmNvbmYgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2Nr
ZXQvc3JjL2V4YW1wbGUvcHl3ZWJzb2NrZXQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzVkMTMwYTVjODRm
NjlkZTRmODFkMzU4ZmIyY2RiNWJkZTRhZjZkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9l
eGFtcGxlL3B5d2Vic29ja2V0LmNvbmYKQEAgLTAsMCArMSw0MiBAQAorIyBDb3B5cmlnaHQgMjAx
MSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyMKKyMgU2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgYXBhY2hlMgorIworTG9nTGV2
ZWwgZGVidWcKKzxJZk1vZHVsZSBweXRob25fbW9kdWxlPgorICBQeXRob25QYXRoICJzeXMucGF0
aCtbJy9tb2RfcHl3ZWJzb2NrZXQnXSIKKyAgUHl0aG9uT3B0aW9uIG1vZF9weXdlYnNvY2tldC5o
YW5kbGVyX3Jvb3QgL3Zhci93d3cKKyAgUHl0aG9uT3B0aW9uIG1vZF9weXdlYnNvY2tldC5oYW5k
bGVyX3NjYW4gL3Zhci93d3cvd3MKKyAgI1B5dGhvbk9wdGlvbiBtb2RfcHl3ZWJzb2NrZXQuYWxs
b3dfZHJhZnQ3NSBPbgorICA8TG9jYXRpb24gL3dzPgorICAgIFB5dGhvbkhlYWRlclBhcnNlckhh
bmRsZXIgbW9kX3B5d2Vic29ja2V0LmhlYWRlcnBhcnNlcmhhbmRsZXIKKyAgPC9Mb2NhdGlvbj4K
KzwvSWZNb2R1bGU+CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvdXRpbC5qcyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9z
cmMvZXhhbXBsZS91dGlsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0ODZmMTA5ODMwYjJlYjAwYWQ0OTM5ZWE3
OTE4YmU3N2NlMDE1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvdXRpbC5q
cwpAQCAtMCwwICsxLDE0MyBAQAorLy8gQ29weXJpZ2h0IDIwMTMsIEdvb2dsZSBJbmMuCisvLyBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
Ly8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
Ky8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisKKy8vIFV0aWxpdGllcyBmb3IgZXhhbXBsZSBhcHBsaWNhdGlvbnMuCisKKwor
dmFyIGxvZ0JveCA9IG51bGw7Cit2YXIgcXVldWVkTG9nID0gJyc7CisKK2Z1bmN0aW9uIHF1ZXVl
TG9nKGxvZykgeworICBxdWV1ZWRMb2cgKz0gbG9nICsgJ1xuJzsKK30KKworZnVuY3Rpb24gYWRk
VG9Mb2cobG9nKSB7CisgIGxvZ0JveC52YWx1ZSArPSBxdWV1ZWRMb2c7CisgIHF1ZXVlZExvZyA9
ICcnOworICBsb2dCb3gudmFsdWUgKz0gbG9nICsgJ1xuJzsKKyAgbG9nQm94LnNjcm9sbFRvcCA9
IDEwMDAwMDA7Cit9CisKK2Z1bmN0aW9uIGdldFRpbWVTdGFtcCgpIHsKKyAgcmV0dXJuIERhdGUu
bm93KCk7Cit9CisKK2Z1bmN0aW9uIGZvcm1hdFJlc3VsdEluS2lCKHNpemUsIHNwZWVkLCBwcmlu
dFNpemUpIHsKKyAgaWYgKHByaW50U2l6ZSkgeworICAgIHJldHVybiAoc2l6ZSAvIDEwMjQpICsg
J1x0JyArIHNwZWVkOworICB9IGVsc2UgeworICAgIHJldHVybiBzcGVlZC50b1N0cmluZygpOwor
ICB9Cit9CisKK2Z1bmN0aW9uIGNhbGN1bGF0ZVNwZWVkSW5LQihzaXplLCBzdGFydFRpbWVJbk1z
KSB7CisgIHJldHVybiBNYXRoLnJvdW5kKHNpemUgLyAoZ2V0VGltZVN0YW1wKCkgLSBzdGFydFRp
bWVJbk1zKSAqIDEwMDApIC8gMTAwMDsKK30KKworZnVuY3Rpb24gY2FsY3VsYXRlQW5kTG9nUmVz
dWx0KHNpemUsIHN0YXJ0VGltZUluTXMsIHRvdGFsU2l6ZSwgcHJpbnRTaXplKSB7CisgIHZhciBz
cGVlZCA9IGNhbGN1bGF0ZVNwZWVkSW5LQih0b3RhbFNpemUsIHN0YXJ0VGltZUluTXMpOworICBh
ZGRUb0xvZyhmb3JtYXRSZXN1bHRJbktpQihzaXplLCBzcGVlZCwgcHJpbnRTaXplKSk7Cit9CisK
K2Z1bmN0aW9uIGZpbGxBcnJheUJ1ZmZlcihidWZmZXIsIGMpIHsKKyAgdmFyIGk7CisKKyAgdmFy
IHUzMkNvbnRlbnQgPSBjICogMHgwMTAxMDEwMTsKKworICB2YXIgdTMyQmxvY2tzID0gTWF0aC5m
bG9vcihidWZmZXIuYnl0ZUxlbmd0aCAvIDQpOworICB2YXIgdTMyVmlldyA9IG5ldyBVaW50MzJB
cnJheShidWZmZXIsIDAsIHUzMkJsb2Nrcyk7CisgIC8vIGxlbmd0aCBhdHRyaWJ1dGUgaXMgc2xv
dyBvbiBDaHJvbWUuIERvbid0IHVzZSBpdCBmb3IgbG9vcCBjb25kaXRpb24uCisgIGZvciAoaSA9
IDA7IGkgPCB1MzJCbG9ja3M7ICsraSkgeworICAgIHUzMlZpZXdbaV0gPSB1MzJDb250ZW50Owor
ICB9CisKKyAgLy8gRnJhY3Rpb24KKyAgdmFyIHU4QmxvY2tzID0gYnVmZmVyLmJ5dGVMZW5ndGgg
LSB1MzJCbG9ja3MgKiA0OworICB2YXIgdThWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCB1
MzJCbG9ja3MgKiA0LCB1OEJsb2Nrcyk7CisgIGZvciAoaSA9IDA7IGkgPCB1OEJsb2NrczsgKytp
KSB7CisgICAgdThWaWV3W2ldID0gYzsKKyAgfQorfQorCitmdW5jdGlvbiB2ZXJpZnlBcnJheUJ1
ZmZlcihidWZmZXIsIGV4cGVjdGVkQ2hhcikgeworICB2YXIgaTsKKworICB2YXIgZXhwZWN0ZWRV
MzJWYWx1ZSA9IGV4cGVjdGVkQ2hhciAqIDB4MDEwMTAxMDE7CisKKyAgdmFyIHUzMkJsb2NrcyA9
IE1hdGguZmxvb3IoYnVmZmVyLmJ5dGVMZW5ndGggLyA0KTsKKyAgdmFyIHUzMlZpZXcgPSBuZXcg
VWludDMyQXJyYXkoYnVmZmVyLCAwLCB1MzJCbG9ja3MpOworICBmb3IgKGkgPSAwOyBpIDwgdTMy
QmxvY2tzOyArK2kpIHsKKyAgICBpZiAodTMyVmlld1tpXSAhPSBleHBlY3RlZFUzMlZhbHVlKSB7
CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgdmFyIHU4QmxvY2tzID0gYnVm
ZmVyLmJ5dGVMZW5ndGggLSB1MzJCbG9ja3MgKiA0OworICB2YXIgdThWaWV3ID0gbmV3IFVpbnQ4
QXJyYXkoYnVmZmVyLCB1MzJCbG9ja3MgKiA0LCB1OEJsb2Nrcyk7CisgIGZvciAoaSA9IDA7IGkg
PCB1OEJsb2NrczsgKytpKSB7CisgICAgaWYgKHU4Vmlld1tpXSAhPSBleHBlY3RlZENoYXIpIHsK
KyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKwor
ZnVuY3Rpb24gdmVyaWZ5QmxvYihibG9iLCBleHBlY3RlZENoYXIsIGRvbmVDYWxsYmFjaykgewor
ICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoYmxvYik7CisgIHJlYWRlci5vbmVycm9yID0g
ZnVuY3Rpb24oKSB7CisgICAgZG9uZUNhbGxiYWNrKGJsb2Iuc2l6ZSwgZmFsc2UpOworICB9Cisg
IHJlYWRlci5vbmxvYWRlbmQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzdWx0ID0gdmVyaWZ5
QXJyYXlCdWZmZXIocmVhZGVyLnJlc3VsdCwgZXhwZWN0ZWRDaGFyKTsKKyAgICBkb25lQ2FsbGJh
Y2soYmxvYi5zaXplLCByZXN1bHQpOworICB9CisgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihi
bG9iKTsKK30KKworZnVuY3Rpb24gdmVyaWZ5QWNrbm93bGVkZ2VtZW50KG1lc3NhZ2UsIHNpemUp
IHsKKyAgaWYgKHR5cGVvZiBtZXNzYWdlICE9ICdzdHJpbmcnKSB7CisgICAgYWRkVG9Mb2coJ0lu
dmFsaWQgYWNrIHR5cGU6ICcgKyB0eXBlb2YgbWVzc2FnZSk7CisgICAgcmV0dXJuIGZhbHNlOwor
ICB9CisgIHZhciBwYXJzZWRBY2sgPSBwYXJzZUludChtZXNzYWdlKTsKKyAgaWYgKGlzTmFOKHBh
cnNlZEFjaykpIHsKKyAgICBhZGRUb0xvZygnSW52YWxpZCBhY2sgdmFsdWU6ICcgKyBtZXNzYWdl
KTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgaWYgKHBhcnNlZEFjayAhPSBzaXplKSB7Cisg
ICAgYWRkVG9Mb2coCisgICAgICAgICdFeHBlY3RlZCBhY2sgZm9yICcgKyBzaXplICsgJ0IgYnV0
IHJlY2VpdmVkIG9uZSBmb3IgJyArIHBhcnNlZEFjayArCisgICAgICAgICdCJyk7CisgICAgcmV0
dXJuIGZhbHNlOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3Jj
L2V4YW1wbGUveGhyX2JlbmNobWFyay5odG1sIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL3hocl9iZW5jaG1h
cmsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xNDQyZDBjMGMyNWY3NDJmNmQ3MDA5ODgzODc3ZTdmYmUwNDU0
MGFjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL3hocl9iZW5jaG1hcmsuaHRt
bApAQCAtMCwwICsxLDMxMCBAQAorPCEtLQorQ29weXJpZ2h0IDIwMTMsIEdvb2dsZSBJbmMuCitB
bGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKwor
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKK2luIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlv
bi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKK2NvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0+CisKKzxo
dG1sPgorPGhlYWQ+Cis8dGl0bGU+WE1MSHR0cFJlcXVlc3QgYmVuY2htYXJrPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSJ1dGlsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2YXIgUFJJTlRfU0laRSA9
IHRydWU7CisKK3ZhciBTRU5EX1BBUkFNRVRFUiA9IHsKKyAgbnVtWEhSczogMSwKKyAgc3RhcnRT
aXplOiAxMDAgKiAxMDI0LAorICBzdG9wVGhyZXNob2xkOiA1MCAqIDEwMjQgKiAxMDI0LAorICBt
dWx0aXBsaWVyczogWzUsIDJdLAorfTsKKwordmFyIFJFQ0VJVkVfUEFSQU1FVEVSID0geworICBu
dW1YSFJzOiAxLAorICBzdGFydFNpemU6IDEwMCAqIDEwMjQsCisgIHN0b3BUaHJlc2hvbGQ6IDUw
ICogMTAyNCAqIDEwMjQsCisgIG11bHRpcGxpZXJzOiBbNSwgMl0sCit9OworCit2YXIgeGhycyA9
IFtdOworCit2YXIgYWRkcmVzc0JveCA9IG51bGw7Cit2YXIgbG9nQm94ID0gbnVsbDsKKwordmFy
IHJlc3BvbnNlVHlwZSA9ICdibG9iJzsKKwordmFyIHRpbWVySUQgPSBudWxsOworCitmdW5jdGlv
biBkZXN0cm95QWxsWEhScygpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB4aHJzLmxlbmd0aDsg
KytpKSB7CisgICAgeGhyc1tpXS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHt9Owor
ICAgIHhocnNbaV0uYWJvcnQoKTsKKyAgfQorICB4aHJzID0gW107Cit9CisKK2Z1bmN0aW9uIHNl
bmRCZW5jaG1hcmsoc2l6ZSwgbXVsdGlwbGllckluZGV4LCBwYXJhbWV0ZXIpIHsKKyAgdGltZXJJ
RCA9IG51bGw7CisKKyAgaWYgKHNpemUgPiBwYXJhbWV0ZXIuc3RvcFRocmVzaG9sZCkgeworICAg
IGFkZFRvTG9nKCdGaW5pc2hlZCcpOworICAgIHJldHVybjsKKyAgfQorCisgIHZhciBzdGFydFRp
bWVJbk1zID0gbnVsbDsKKyAgdmFyIHRvdGFsU2l6ZSA9IDA7CisgIHZhciB0b3RhbFJlcGxpZWQg
PSAwOworCisgIHZhciBvblJlYWR5U3RhdGVDaGFuZ2VIYW5kbGVyID0gZnVuY3Rpb24gKCkgewor
ICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgIT0gdGhpcy5ET05FKSB7CisgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKHRoaXMuc3RhdHVzICE9IDIwMCkgeworICAgICAgYWRkVG9Mb2coJ0Zh
aWxlZCAoc3RhdHVzPScgKyB0aGlzLnN0YXR1cyArICcpJyk7CisgICAgICBkZXN0cm95QWxsWEhS
cygpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmVyaWZ5QWNrbm93bGVkZ2Vt
ZW50KHRoaXMucmVzcG9uc2UsIHNpemUpKSB7CisgICAgICBkZXN0cm95QWxsWEhScygpOworICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHRvdGFsUmVwbGllZCArPSBzaXplOworCisgICAgaWYg
KHRvdGFsUmVwbGllZCA8IHRvdGFsU2l6ZSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChzdGFydFRpbWVJbk1zID09IG51bGwpIHsKKyAgICAgIGFkZFRvTG9nKCdzdGFydFRpbWVJ
bk1zIG5vdCBzZXQnKTsKKyAgICAgIGRlc3Ryb3lBbGxYSFJzKCk7CisgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FsY3VsYXRlQW5kTG9nUmVzdWx0KHNpemUsIHN0YXJ0VGltZUluTXMsIHRv
dGFsU2l6ZSwgUFJJTlRfU0laRSk7CisKKyAgICBkZXN0cm95QWxsWEhScygpOworCisgICAgdGlt
ZXJJRCA9IHNldFRpbWVvdXQoCisgICAgICAgIHNlbmRCZW5jaG1hcmssCisgICAgICAgIDAsCisg
ICAgICAgIHNpemUgKiBwYXJhbWV0ZXIubXVsdGlwbGllcnNbbXVsdGlwbGllckluZGV4XSwKKyAg
ICAgICAgKG11bHRpcGxpZXJJbmRleCArIDEpICUgcGFyYW1ldGVyLm11bHRpcGxpZXJzLmxlbmd0
aCwKKyAgICAgICAgcGFyYW1ldGVyKTsKKyAgfTsKKworICBmb3IgKHZhciBpID0gMDsgaSA8IHBh
cmFtZXRlci5udW1YSFJzOyArK2kpIHsKKyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0
KCk7CisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG9uUmVhZHlTdGF0ZUNoYW5nZUhhbmRs
ZXI7CisgICAgeGhycy5wdXNoKHhocik7CisgIH0KKworICBzdGFydFRpbWVJbk1zID0gZ2V0VGlt
ZVN0YW1wKCk7CisKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB4aHJzLmxlbmd0aDsgKytpKSB7Cisg
ICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzaXplKTsKKworICAgIGZpbGxBcnJheUJ1
ZmZlcihidWZmZXIsIDB4NjEpOworCisgICAgaWYgKHJlc3BvbnNlVHlwZSA9PSAnYmxvYicpIHsK
KyAgICAgIGJ1ZmZlciA9IG5ldyBCbG9iKFtidWZmZXJdKTsKKyAgICB9CisKKyAgICB2YXIgeGhy
ID0geGhyc1tpXTsKKyAgICB4aHIub3BlbignUE9TVCcsIGFkZHJlc3NCb3gudmFsdWUgKyAnX3Nl
bmQnKTsKKyAgICB4aHIuc2VuZChidWZmZXIpOworCisgICAgdG90YWxTaXplICs9IHNpemU7Cisg
IH0KK30KKworZnVuY3Rpb24gcmVjZWl2ZUJlbmNobWFyayhzaXplLCBtdWx0aXBsaWVySW5kZXgs
IHBhcmFtZXRlcikgeworICB0aW1lcklEID0gbnVsbDsKKworICBpZiAoc2l6ZSA+IHBhcmFtZXRl
ci5zdG9wVGhyZXNob2xkKSB7CisgICAgYWRkVG9Mb2coJ0ZpbmlzaGVkJyk7CisgICAgcmV0dXJu
OworICB9CisKKyAgdmFyIHN0YXJ0VGltZUluTXMgPSBudWxsOworICB2YXIgdG90YWxTaXplID0g
MDsKKyAgdmFyIHRvdGFsUmVwbGllZCA9IDA7CisKKyAgdmFyIGNoZWNrUmVzdWx0QW5kQ29udGlu
dWUgPSBmdW5jdGlvbiAoYnl0ZXNSZWNlaXZlZCwgdmVyaWZpY2F0aW9uUmVzdWx0KSB7CisgICAg
aWYgKCF2ZXJpZmljYXRpb25SZXN1bHQpIHsKKyAgICAgIGFkZFRvTG9nKCdSZXNwb25zZSB2ZXJp
ZmljYXRpb24gZmFpbGVkJyk7CisgICAgICBkZXN0cm95QWxsWEhScygpOworICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHRvdGFsUmVwbGllZCArPSBieXRlc1JlY2VpdmVkOworCisgICAgaWYg
KHRvdGFsUmVwbGllZCA8IHRvdGFsU2l6ZSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChzdGFydFRpbWVJbk1zID09IG51bGwpIHsKKyAgICAgIGFkZFRvTG9nKCdzdGFydFRpbWVJ
bk1zIG5vdCBzZXQnKTsKKyAgICAgIGRlc3Ryb3lBbGxYSFJzKCk7CisgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FsY3VsYXRlQW5kTG9nUmVzdWx0KHNpemUsIHN0YXJ0VGltZUluTXMsIHRv
dGFsU2l6ZSwgUFJJTlRfU0laRSk7CisKKyAgICBkZXN0cm95QWxsWEhScygpOworCisgICAgdGlt
ZXJJRCA9IHNldFRpbWVvdXQoCisgICAgICAgIHJlY2VpdmVCZW5jaG1hcmssCisgICAgICAgIDAs
CisgICAgICAgIHNpemUgKiBwYXJhbWV0ZXIubXVsdGlwbGllcnNbbXVsdGlwbGllckluZGV4XSwK
KyAgICAgICAgKG11bHRpcGxpZXJJbmRleCArIDEpICUgcGFyYW1ldGVyLm11bHRpcGxpZXJzLmxl
bmd0aCwKKyAgICAgICAgcGFyYW1ldGVyKTsKKyAgfQorCisgIHZhciBvblJlYWR5U3RhdGVDaGFu
Z2VIYW5kbGVyID0gZnVuY3Rpb24gKCkgeworICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgIT0gdGhp
cy5ET05FKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHRoaXMuc3RhdHVzICE9
IDIwMCkgeworICAgICAgYWRkVG9Mb2coJ0ZhaWxlZCAoc3RhdHVzPScgKyB0aGlzLnN0YXR1cyAr
ICcpJyk7CisgICAgICBkZXN0cm95QWxsWEhScygpOworICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHZhciBieXRlc1JlY2VpdmVkID0gLTE7CisgICAgaWYgKHRoaXMucmVzcG9uc2VUeXBlID09
ICdhcnJheWJ1ZmZlcicpIHsKKyAgICAgIGJ5dGVzUmVjZWl2ZWQgPSB0aGlzLnJlc3BvbnNlLmJ5
dGVMZW5ndGg7CisgICAgfSBlbHNlIGlmICh0aGlzLnJlc3BvbnNlVHlwZSA9PSAnYmxvYicpIHsK
KyAgICAgIGJ5dGVzUmVjZWl2ZWQgPSB0aGlzLnJlc3BvbnNlLnNpemU7CisgICAgfQorICAgIGlm
IChieXRlc1JlY2VpdmVkICE9IHNpemUpIHsKKyAgICAgIGFkZFRvTG9nKCdFeHBlY3RlZCAnICsg
c2l6ZSArICdCIGJ1dCByZWNlaXZlZCAnICsgYnl0ZXNSZWNlaXZlZCArICdCJyk7CisgICAgICBk
ZXN0cm95QWxsWEhScygpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0aGlzLnJl
c3BvbnNlVHlwZSA9PSAnYXJyYXlidWZmZXInKSB7CisgICAgICBjaGVja1Jlc3VsdEFuZENvbnRp
bnVlKGJ5dGVzUmVjZWl2ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmeUFy
cmF5QnVmZmVyKHRoaXMucmVzcG9uc2UsIDB4NjEpKTsKKyAgICB9IGVsc2UgaWYgKHRoaXMucmVz
cG9uc2VUeXBlID09ICdibG9iJykgeworICAgICAgdmVyaWZ5QmxvYih0aGlzLnJlc3BvbnNlLCAw
eDYxLCBjaGVja1Jlc3VsdEFuZENvbnRpbnVlKTsKKyAgICB9CisgIH07CisKKyAgZm9yICh2YXIg
aSA9IDA7IGkgPCBwYXJhbWV0ZXIubnVtWEhSczsgKytpKSB7CisgICAgdmFyIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBvblJlYWR5U3Rh
dGVDaGFuZ2VIYW5kbGVyOworICAgIHhocnMucHVzaCh4aHIpOworICB9CisKKyAgc3RhcnRUaW1l
SW5NcyA9IGdldFRpbWVTdGFtcCgpOworCisgIGZvciAodmFyIGkgPSAwOyBpIDwgeGhycy5sZW5n
dGg7ICsraSkgeworICAgIHZhciB4aHIgPSB4aHJzW2ldOworICAgIHhoci5vcGVuKCdQT1NUJywg
YWRkcmVzc0JveC52YWx1ZSArICdfcmVjZWl2ZScpOworICAgIHhoci5yZXNwb25zZVR5cGUgPSBy
ZXNwb25zZVR5cGU7CisgICAgeGhyLnNlbmQoc2l6ZSArICcgbm9uZScpOworCisgICAgdG90YWxT
aXplICs9IHNpemU7CisgIH0KK30KKworZnVuY3Rpb24gc3RhcnRTZW5kQmVuY2htYXJrKCkgewor
ICBhZGRUb0xvZygnU2VuZCBiZW5jaG1hcmsnKTsKKyAgYWRkVG9Mb2coJ01lc3NhZ2Ugc2l6ZSBp
biBLaUIsIFNwZWVkIGluIGtCL3MnKTsKKworICB0aW1lcklEID0gc2V0VGltZW91dCgKKyAgICAg
IHNlbmRCZW5jaG1hcmssCisgICAgICAwLAorICAgICAgU0VORF9QQVJBTUVURVIuc3RhcnRTaXpl
LAorICAgICAgMCwKKyAgICAgIFNFTkRfUEFSQU1FVEVSKTsKK30KKworZnVuY3Rpb24gc3RhcnRS
ZWNlaXZlQmVuY2htYXJrKCkgeworICBhZGRUb0xvZygnUmVjZWl2ZSBiZW5jaG1hcmsnKTsKKyAg
YWRkVG9Mb2coJ01lc3NhZ2Ugc2l6ZSBpbiBLaUIsIFNwZWVkIGluIGtCL3MnKTsKKworICB0aW1l
cklEID0gc2V0VGltZW91dCgKKyAgICAgIHJlY2VpdmVCZW5jaG1hcmssCisgICAgICAwLAorICAg
ICAgUkVDRUlWRV9QQVJBTUVURVIuc3RhcnRTaXplLAorICAgICAgMCwKKyAgICAgIFJFQ0VJVkVf
UEFSQU1FVEVSKTsKK30KKworZnVuY3Rpb24gc3RvcCgpIHsKKyAgZGVzdHJveUFsbFhIUnMoKTsK
KyAgY2xlYXJUaW1lb3V0KHRpbWVySUQpOworICB0aW1lcklEID0gbnVsbDsKKyAgYWRkVG9Mb2co
J1N0b3BwZWQnKTsKK30KKworZnVuY3Rpb24gaW5pdCgpIHsKKyAgYWRkcmVzc0JveCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdhZGRyZXNzJyk7CisgIGxvZ0JveCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdsb2cnKTsKKworICAvLyBTcGVjaWFsIGFkZHJlc3Mgb2YgcHl3ZWJzb2NrZXQg
Zm9yIFhIUiBiZW5jaG1hcmsuCisgIGFkZHJlc3NCb3gudmFsdWUgPSAnLzA3M2JlMDAxZTEwOTUw
NjkyY2NiZjNhMmFkMjFjMjQ1JzsKKworICBhZGRUb0xvZyh3aW5kb3cubmF2aWdhdG9yLnVzZXJB
Z2VudC50b0xvd2VyQ2FzZSgpKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2Fk
PSJpbml0KCkiPgorCis8ZGl2IGlkPSJiZW5jaG1hcmtfZGl2Ij4KKyAgdXJsIHByZWZpeCA8aW5w
dXQgdHlwZT0idGV4dCIgaWQ9ImFkZHJlc3MiIHNpemU9IjQwIj4KKyAgPGlucHV0IHR5cGU9ImJ1
dHRvbiIgdmFsdWU9InNlbmQiIG9uY2xpY2s9InN0YXJ0U2VuZEJlbmNobWFyaygpIj4KKyAgPGlu
cHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9InJlY2VpdmUiIG9uY2xpY2s9InN0YXJ0UmVjZWl2ZUJl
bmNobWFyaygpIj4KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9InN0b3AiIG9uY2xpY2s9
InN0b3AoKSI+CisKKyAgPGJyLz4KKworICBTZXQgZGF0YSB0eXBlCisgIDxpbnB1dCB0eXBlPSJy
YWRpbyIKKyAgICAgICAgIG5hbWU9ImJpbmFyeXR5cGUiCisgICAgICAgICB2YWx1ZT0iYmxvYiIK
KyAgICAgICAgIG9uY2xpY2s9InJlc3BvbnNlVHlwZSA9ICdibG9iJyIgY2hlY2tlZD5ibG9iCisg
IDxpbnB1dCB0eXBlPSJyYWRpbyIKKyAgICAgICAgIG5hbWU9ImJpbmFyeXR5cGUiCisgICAgICAg
ICB2YWx1ZT0iYXJyYXlidWZmZXIiCisgICAgICAgICBvbmNsaWNrPSJyZXNwb25zZVR5cGUgPSAn
YXJyYXlidWZmZXInIj5hcnJheWJ1ZmZlcgorPC9kaXY+CisKKzxkaXYgaWQ9ImxvZ19kaXYiPgor
ICA8dGV4dGFyZWEKKyAgICAgIGlkPSJsb2ciIHJvd3M9IjIwIiBzdHlsZT0id2lkdGg6IDEwMCUi
IHJlYWRvbmx5PjwvdGV4dGFyZWE+Cis8L2Rpdj4KKworTm90ZTogRWZmZWN0IG9mIFJUVCBhbmQg
dGltZSBzcGVudCBmb3IgQXJyYXlCdWZmZXIgY3JlYXRpb24gYXJlIG5vdCBlbGltaW5hdGVkLgor
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9f
X2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90
b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L19faW5pdF9fLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjcwOTMzYTIyMDQ1MWZhZGI2YTAxYTVjMWQ0NWMyNTUxNDY4ZDdkODUKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMv
cHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDIy
NCBAQAorIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiV2ViU29ja2V0IGV4dGVuc2lvbiBmb3IgQXBh
Y2hlIEhUVFAgU2VydmVyLgorCittb2RfcHl3ZWJzb2NrZXQgaXMgYSBXZWJTb2NrZXQgZXh0ZW5z
aW9uIGZvciBBcGFjaGUgSFRUUCBTZXJ2ZXIKK2ludGVuZGVkIGZvciB0ZXN0aW5nIG9yIGV4cGVy
aW1lbnRhbCBwdXJwb3Nlcy4gbW9kX3B5dGhvbiBpcyByZXF1aXJlZC4KKworCitJbnN0YWxsYXRp
b24KKz09PT09PT09PT09PQorCiswLiBQcmVwYXJlIGFuIEFwYWNoZSBIVFRQIFNlcnZlciBmb3Ig
d2hpY2ggbW9kX3B5dGhvbiBpcyBlbmFibGVkLgorCisxLiBTcGVjaWZ5IHRoZSBmb2xsb3dpbmcg
QXBhY2hlIEhUVFAgU2VydmVyIGRpcmVjdGl2ZXMgdG8gc3VpdCB5b3VyCisgICBjb25maWd1cmF0
aW9uLgorCisgICBJZiBtb2RfcHl3ZWJzb2NrZXQgaXMgbm90IGluIHRoZSBQeXRob24gcGF0aCwg
c3BlY2lmeSB0aGUgZm9sbG93aW5nLgorICAgPHdlYnNvY2tfbGliPiBpcyB0aGUgZGlyZWN0b3J5
IHdoZXJlIG1vZF9weXdlYnNvY2tldCBpcyBpbnN0YWxsZWQuCisKKyAgICAgICBQeXRob25QYXRo
ICJzeXMucGF0aCtbJzx3ZWJzb2NrX2xpYj4nXSIKKworICAgQWx3YXlzIHNwZWNpZnkgdGhlIGZv
bGxvd2luZy4gPHdlYnNvY2tfaGFuZGxlcnM+IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUKKyAgIHVz
ZXItd3JpdHRlbiBXZWJTb2NrZXQgaGFuZGxlcnMgYXJlIHBsYWNlZC4KKworICAgICAgIFB5dGhv
bk9wdGlvbiBtb2RfcHl3ZWJzb2NrZXQuaGFuZGxlcl9yb290IDx3ZWJzb2NrX2hhbmRsZXJzPgor
ICAgICAgIFB5dGhvbkhlYWRlclBhcnNlckhhbmRsZXIgbW9kX3B5d2Vic29ja2V0LmhlYWRlcnBh
cnNlcmhhbmRsZXIKKworICAgVG8gbGltaXQgdGhlIHNlYXJjaCBmb3IgV2ViU29ja2V0IGhhbmRs
ZXJzIHRvIGEgZGlyZWN0b3J5IDxzY2FuX2Rpcj4KKyAgIHVuZGVyIDx3ZWJzb2NrX2hhbmRsZXJz
PiwgY29uZmlndXJlIGFzIGZvbGxvd3M6CisKKyAgICAgICBQeXRob25PcHRpb24gbW9kX3B5d2Vi
c29ja2V0LmhhbmRsZXJfc2NhbiA8c2Nhbl9kaXI+CisKKyAgIDxzY2FuX2Rpcj4gaXMgdXNlZnVs
IGluIHNhdmluZyBzY2FuIHRpbWUgd2hlbiA8d2Vic29ja19oYW5kbGVycz4KKyAgIGNvbnRhaW5z
IG1hbnkgbm9uLVdlYlNvY2tldCBoYW5kbGVyIGZpbGVzLgorCisgICBJZiB5b3Ugd2FudCB0byBh
bGxvdyBoYW5kbGVycyB3aG9zZSBjYW5vbmljYWwgcGF0aCBpcyBub3QgdW5kZXIgdGhlIHJvb3QK
KyAgIGRpcmVjdG9yeSAoaS5lLiBzeW1ib2xpYyBsaW5rIGlzIGluIHJvb3QgZGlyZWN0b3J5IGJ1
dCBpdHMgdGFyZ2V0IGlzIG5vdCksCisgICBjb25maWd1cmUgYXMgZm9sbG93czoKKworICAgICAg
IFB5dGhvbk9wdGlvbiBtb2RfcHl3ZWJzb2NrZXQuYWxsb3dfaGFuZGxlcnNfb3V0c2lkZV9yb290
X2RpciBPbgorCisgICBFeGFtcGxlIHNuaXBwZXQgb2YgaHR0cGQuY29uZjoKKyAgIChtb2RfcHl3
ZWJzb2NrZXQgaXMgaW4gL3dlYnNvY2tfbGliLCBXZWJTb2NrZXQgaGFuZGxlcnMgYXJlIGluCisg
ICAvd2Vic29ja19oYW5kbGVycywgcG9ydCBpcyA4MCBmb3Igd3MsIDQ0MyBmb3Igd3NzLikKKwor
ICAgICAgIDxJZk1vZHVsZSBweXRob25fbW9kdWxlPgorICAgICAgICAgUHl0aG9uUGF0aCAic3lz
LnBhdGgrWycvd2Vic29ja19saWInXSIKKyAgICAgICAgIFB5dGhvbk9wdGlvbiBtb2RfcHl3ZWJz
b2NrZXQuaGFuZGxlcl9yb290IC93ZWJzb2NrX2hhbmRsZXJzCisgICAgICAgICBQeXRob25IZWFk
ZXJQYXJzZXJIYW5kbGVyIG1vZF9weXdlYnNvY2tldC5oZWFkZXJwYXJzZXJoYW5kbGVyCisgICAg
ICAgPC9JZk1vZHVsZT4KKworMi4gVHVuZSBBcGFjaGUgcGFyYW1ldGVycyBmb3Igc2VydmluZyBX
ZWJTb2NrZXQuIFdlJ2QgbGlrZSB0byBub3RlIHRoYXQgYXQKKyAgIGxlYXN0IFRpbWVPdXQgZGly
ZWN0aXZlIGZyb20gY29yZSBmZWF0dXJlcyBhbmQgUmVxdWVzdFJlYWRUaW1lb3V0CisgICBkaXJl
Y3RpdmUgZnJvbSBtb2RfcmVxdGltZW91dCBzaG91bGQgYmUgbW9kaWZpZWQgbm90IHRvIGtpbGwg
Y29ubmVjdGlvbnMKKyAgIGluIG9ubHkgYSBmZXcgc2Vjb25kcyBvZiBpZGxlIHRpbWUuCisKKzMu
IFZlcmlmeSBpbnN0YWxsYXRpb24uIFlvdSBjYW4gdXNlIGV4YW1wbGUvY29uc29sZS5odG1sIHRv
IHBva2UgdGhlIHNlcnZlci4KKworCitXcml0aW5nIFdlYlNvY2tldCBoYW5kbGVycworPT09PT09
PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiBhIFdlYlNvY2tldCByZXF1ZXN0IGNvbWVzIGlu
LCB0aGUgcmVzb3VyY2UgbmFtZQorc3BlY2lmaWVkIGluIHRoZSBoYW5kc2hha2UgaXMgY29uc2lk
ZXJlZCBhcyBpZiBpdCBpcyBhIGZpbGUgcGF0aCB1bmRlcgorPHdlYnNvY2tfaGFuZGxlcnM+IGFu
ZCB0aGUgaGFuZGxlciBkZWZpbmVkIGluCis8d2Vic29ja19oYW5kbGVycz4vPHJlc291cmNlX25h
bWU+X3dzaC5weSBpcyBpbnZva2VkLgorCitGb3IgZXhhbXBsZSwgaWYgdGhlIHJlc291cmNlIG5h
bWUgaXMgL2V4YW1wbGUvY2hhdCwgdGhlIGhhbmRsZXIgZGVmaW5lZCBpbgorPHdlYnNvY2tfaGFu
ZGxlcnM+L2V4YW1wbGUvY2hhdF93c2gucHkgaXMgaW52b2tlZC4KKworQSBXZWJTb2NrZXQgaGFu
ZGxlciBpcyBjb21wb3NlZCBvZiB0aGUgZm9sbG93aW5nIHRocmVlIGZ1bmN0aW9uczoKKworICAg
IHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpCisgICAgd2ViX3NvY2tldF90
cmFuc2Zlcl9kYXRhKHJlcXVlc3QpCisgICAgd2ViX3NvY2tldF9wYXNzaXZlX2Nsb3NpbmdfaGFu
ZHNoYWtlKHJlcXVlc3QpCisKK3doZXJlOgorICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVz
dC4KKword2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UgaXMgY2FsbGVkIGR1cmluZyB0aGUg
aGFuZHNoYWtlIGFmdGVyIHRoZQoraGVhZGVycyBhcmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZCBhbmQg
V2ViU29ja2V0IHByb3BlcnRpZXMgKHdzX2xvY2F0aW9uLAord3Nfb3JpZ2luLCBhbmQgd3NfcmVz
b3VyY2UpIGFyZSBhZGRlZCB0byByZXF1ZXN0LiBBIGhhbmRsZXIKK2NhbiByZWplY3QgdGhlIHJl
cXVlc3QgYnkgcmFpc2luZyBhbiBleGNlcHRpb24uCisKK0EgcmVxdWVzdCBvYmplY3QgaGFzIHRo
ZSBmb2xsb3dpbmcgcHJvcGVydGllcyB0aGF0IHlvdSBjYW4gdXNlIGR1cmluZyB0aGUKK2V4dHJh
IGhhbmRzaGFrZSAod2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UpOgorLSB3c19yZXNvdXJj
ZQorLSB3c19vcmlnaW4KKy0gd3NfdmVyc2lvbgorLSB3c19sb2NhdGlvbiAoSHlCaSAwMCBvbmx5
KQorLSB3c19leHRlbnNpb25zIChIeUJpIDA2IGFuZCBsYXRlcikKKy0gd3NfZGVmbGF0ZSAoSHlC
aSAwNiBhbmQgbGF0ZXIpCistIHdzX3Byb3RvY29sCistIHdzX3JlcXVlc3RlZF9wcm90b2NvbHMg
KEh5QmkgMDYgYW5kIGxhdGVyKQorCitUaGUgbGFzdCB0d28gYXJlIGEgYml0IHRyaWNreS4gU2Vl
IHRoZSBuZXh0IHN1YnNlY3Rpb24uCisKKworU3VicHJvdG9jb2wgTmVnb3RpYXRpb24KKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBIeUJpIDA2IGFuZCBsYXRlciwgd3NfcHJvdG9jb2wg
aXMgYWx3YXlzIHNldCB0byBOb25lIHdoZW4KK3dlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtl
IGlzIGNhbGxlZC4gSWYgd3NfcmVxdWVzdGVkX3Byb3RvY29scyBpcyBub3QKK05vbmUsIHlvdSBt
dXN0IGNob29zZSBvbmUgc3VicHJvdG9jb2wgZnJvbSB0aGlzIGxpc3QgYW5kIHNldCBpdCB0bwor
d3NfcHJvdG9jb2wuCisKK0ZvciBIeUJpIDAwLCB3aGVuIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFu
ZHNoYWtlIGlzIGNhbGxlZCwKK3dzX3Byb3RvY29sIGlzIHNldCB0byB0aGUgdmFsdWUgZ2l2ZW4g
YnkgdGhlIGNsaWVudCBpbgorU2VjLVdlYlNvY2tldC1Qcm90b2NvbCBoZWFkZXIgb3IgTm9uZSBp
Zgorc3VjaCBoZWFkZXIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgb3BlbmluZyBoYW5kc2hha2UgcmVx
dWVzdC4gRmluaXNoIGV4dHJhCitoYW5kc2hha2Ugd2l0aCB3c19wcm90b2NvbCB1bnRvdWNoZWQg
dG8gYWNjZXB0IHRoZSByZXF1ZXN0IHN1YnByb3RvY29sLgorVGhlbiwgU2VjLVdlYlNvY2tldC1Q
cm90b2NvbCBoZWFkZXIgd2lsbCBiZSBzZW50IHRvCit0aGUgY2xpZW50IGluIHJlc3BvbnNlIHdp
dGggdGhlIHNhbWUgdmFsdWUgYXMgcmVxdWVzdGVkLiBSYWlzZSBhbiBleGNlcHRpb24KK2luIHdl
Yl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlIHRvIHJlamVjdCB0aGUgcmVxdWVzdGVkIHN1YnBy
b3RvY29sLgorCisKK0RhdGEgVHJhbnNmZXIKKy0tLS0tLS0tLS0tLS0KKword2ViX3NvY2tldF90
cmFuc2Zlcl9kYXRhIGlzIGNhbGxlZCBhZnRlciB0aGUgaGFuZHNoYWtlIGNvbXBsZXRlZAorc3Vj
Y2Vzc2Z1bGx5LiBBIGhhbmRsZXIgY2FuIHJlY2VpdmUvc2VuZCBtZXNzYWdlcyBmcm9tL3RvIHRo
ZSBjbGllbnQKK3VzaW5nIHJlcXVlc3QuIG1vZF9weXdlYnNvY2tldC5tc2d1dGlsIG1vZHVsZSBw
cm92aWRlcyB1dGlsaXRpZXMKK2ZvciBkYXRhIHRyYW5zZmVyLgorCitZb3UgY2FuIHJlY2VpdmUg
YSBtZXNzYWdlIGJ5IHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50LgorCisgICAgbWVzc2FnZSA9IHJl
cXVlc3Qud3Nfc3RyZWFtLnJlY2VpdmVfbWVzc2FnZSgpCisKK1RoaXMgY2FsbCBibG9ja3MgdW50
aWwgYW55IGNvbXBsZXRlIHRleHQgZnJhbWUgYXJyaXZlcywgYW5kIHRoZSBwYXlsb2FkIGRhdGEK
K29mIHRoZSBpbmNvbWluZyBmcmFtZSB3aWxsIGJlIHN0b3JlZCBpbnRvIG1lc3NhZ2UuIFdoZW4g
eW91J3JlIHVzaW5nIElFVEYKK0h5QmkgMDAgb3IgbGF0ZXIgcHJvdG9jb2wsIHJlY2VpdmVfbWVz
c2FnZSgpIHdpbGwgcmV0dXJuIE5vbmUgb24gcmVjZWl2aW5nCitjbGllbnQtaW5pdGlhdGVkIGNs
b3NpbmcgaGFuZHNoYWtlLiBXaGVuIGFueSBlcnJvciBvY2N1cnMsIHJlY2VpdmVfbWVzc2FnZSgp
Cit3aWxsIHJhaXNlIHNvbWUgZXhjZXB0aW9uLgorCitZb3UgY2FuIHNlbmQgYSBtZXNzYWdlIGJ5
IHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50LgorCisgICAgcmVxdWVzdC53c19zdHJlYW0uc2VuZF9t
ZXNzYWdlKG1lc3NhZ2UpCisKKworQ2xvc2luZyBDb25uZWN0aW9uCistLS0tLS0tLS0tLS0tLS0t
LS0KKworRXhlY3V0aW5nIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IG9yIGp1c3QgcmV0dXJuLWlu
ZyBmcm9tCit3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEgY2F1c2UgY29ubmVjdGlvbiBjbG9zZS4K
KworICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3NlX2Nvbm5lY3Rpb24oKQorCitjbG9zZV9jb25u
ZWN0aW9uIHdpbGwgd2FpdAorZm9yIGNsb3NpbmcgaGFuZHNoYWtlIGFja25vd2xlZGdlbWVudCBj
b21pbmcgZnJvbSB0aGUgY2xpZW50LiBXaGVuIGl0Citjb3VsZG4ndCByZWNlaXZlIGEgdmFsaWQg
YWNrbm93bGVkZ2VtZW50LCByYWlzZXMgYW4gZXhjZXB0aW9uLgorCit3ZWJfc29ja2V0X3Bhc3Np
dmVfY2xvc2luZ19oYW5kc2hha2UgaXMgY2FsbGVkIGFmdGVyIHRoZSBzZXJ2ZXIgcmVjZWl2ZXMK
K2luY29taW5nIGNsb3NpbmcgZnJhbWUgZnJvbSB0aGUgY2xpZW50IHBlZXIgaW1tZWRpYXRlbHku
IFlvdSBjYW4gc3BlY2lmeQorY29kZSBhbmQgcmVhc29uIGJ5IHJldHVybiB2YWx1ZXMuIFRoZXkg
YXJlIHNlbnQgYXMgYSBvdXRnb2luZyBjbG9zaW5nIGZyYW1lCitmcm9tIHRoZSBzZXJ2ZXIuIEEg
cmVxdWVzdCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB0aGF0IHlvdSBjYW4K
K3VzZSBpbiB3ZWJfc29ja2V0X3Bhc3NpdmVfY2xvc2luZ19oYW5kc2hha2UuCistIHdzX2Nsb3Nl
X2NvZGUKKy0gd3NfY2xvc2VfcmVhc29uCisKKworVGhyZWFkaW5nCistLS0tLS0tLS0KKworQSBX
ZWJTb2NrZXQgaGFuZGxlciBtdXN0IGJlIHRocmVhZC1zYWZlIGlmIHRoZSBzZXJ2ZXIgKEFwYWNo
ZSBvcgorc3RhbmRhbG9uZS5weSkgaXMgY29uZmlndXJlZCB0byB1c2UgdGhyZWFkcy4KKworCitD
b25maWd1cmluZyBXZWJTb2NrZXQgRXh0ZW5zaW9uIFByb2Nlc3NvcnMKKy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgZXh0ZW5zaW9ucy5weSBmb3Igc3Vw
cG9ydGVkIFdlYlNvY2tldCBleHRlbnNpb25zLiBOb3RlIHRoYXQgdGhleSBhcmUKK3Vuc3RhYmxl
IGFuZCB0aGVpciBBUElzIGFyZSBzdWJqZWN0IHRvIGNoYW5nZSBzdWJzdGFudGlhbGx5LgorCitB
IHJlcXVlc3Qgb2JqZWN0IGhhcyB0aGVzZSBleHRlbnNpb24gcHJvY2Vzc2luZyByZWxhdGVkIGF0
dHJpYnV0ZXMuCisKKy0gd3NfcmVxdWVzdGVkX2V4dGVuc2lvbnM6CisKKyAgQSBsaXN0IG9mIGNv
bW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIgaW5zdGFuY2VzIHJlcHJlc2VudGluZyBleHRlbnNpb24K
KyAgcGFyYW1ldGVycyByZWNlaXZlZCBmcm9tIHRoZSBjbGllbnQgaW4gdGhlIGNsaWVudCdzIG9w
ZW5pbmcgaGFuZHNoYWtlLgorICBZb3Ugc2hvdWxkbid0IG1vZGlmeSBpdCBtYW51YWxseS4KKwor
LSB3c19leHRlbnNpb25zOgorCisgIEEgbGlzdCBvZiBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVy
IGluc3RhbmNlcyByZXByZXNlbnRpbmcgZXh0ZW5zaW9uCisgIHBhcmFtZXRlcnMgdG8gc2VuZCBi
YWNrIHRvIHRoZSBjbGllbnQgaW4gdGhlIHNlcnZlcidzIG9wZW5pbmcgaGFuZHNoYWtlLgorICBZ
b3Ugc2hvdWxkbid0IHRvdWNoIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCBjYWxsIG1ldGhvZHMgb24g
ZXh0ZW5zaW9uCisgIHByb2Nlc3NvcnMuCisKKy0gd3NfZXh0ZW5zaW9uX3Byb2Nlc3NvcnM6CisK
KyAgQSBsaXN0IG9mIGxvYWRlZCBleHRlbnNpb24gcHJvY2Vzc29ycy4gRmluZCB0aGUgcHJvY2Vz
c29yIGZvciB0aGUKKyAgZXh0ZW5zaW9uIHlvdSB3YW50IHRvIGNvbmZpZ3VyZSBmcm9tIGl0LCBh
bmQgY2FsbCBpdHMgbWV0aG9kcy4KKyIiIgorCisKKyMgdmk6c3RzPTQgc3c9NCBldCB0dz03Mgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rv
b2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9iYXNlLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0
L3NyYy9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9iYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyMzU2NjZi
YmIxZDUxYzEwZGIzZjkxYmRhNGFiY2Q3YWZlYjI2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQv
c3JjL21vZF9weXdlYnNvY2tldC9fc3RyZWFtX2Jhc2UucHkKQEAgLTAsMCArMSwxODEgQEAKKyMg
Q29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
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
IFNVQ0ggREFNQUdFLgorCisKKyIiIkJhc2Ugc3RyZWFtIGNsYXNzLgorIiIiCisKKworIyBOb3Rl
OiByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUvcmVhZCBhcmUgdXNlZCBpbiB0aGlzIG1vZHVsZSwg
ZXZlbiB0aG91Z2gKKyMgbW9kX3B5dGhvbiBkb2N1bWVudCBzYXlzIHRoYXQgdGhleSBzaG91bGQg
YmUgdXNlZCBvbmx5IGluIGNvbm5lY3Rpb24KKyMgaGFuZGxlcnMuIFVuZm9ydHVuYXRlbHksIHdl
IGhhdmUgbm8gb3RoZXIgb3B0aW9ucy4gRm9yIGV4YW1wbGUsCisjIHJlcXVlc3Qud3JpdGUvcmVh
ZCBhcmUgbm90IHN1aXRhYmxlIGJlY2F1c2UgdGhleSBkb24ndCBhbGxvdyBkaXJlY3QgcmF3IGJ5
dGVzCisjIHdyaXRpbmcvcmVhZGluZy4KKworCitpbXBvcnQgc29ja2V0CisKK2Zyb20gbW9kX3B5
d2Vic29ja2V0IGltcG9ydCB1dGlsCisKKworIyBFeGNlcHRpb25zCisKKworY2xhc3MgQ29ubmVj
dGlvblRlcm1pbmF0ZWRFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAiIiJUaGlzIGV4Y2VwdGlv
biB3aWxsIGJlIHJhaXNlZCB3aGVuIGEgY29ubmVjdGlvbiBpcyB0ZXJtaW5hdGVkCisgICAgdW5l
eHBlY3RlZGx5LgorICAgICIiIgorCisgICAgcGFzcworCisKK2NsYXNzIEludmFsaWRGcmFtZUV4
Y2VwdGlvbihDb25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlvbik6CisgICAgIiIiVGhpcyBleGNl
cHRpb24gd2lsbCBiZSByYWlzZWQgd2hlbiB3ZSByZWNlaXZlZCBhbiBpbnZhbGlkIGZyYW1lIHdl
CisgICAgY2Fubm90IHBhcnNlLgorICAgICIiIgorCisgICAgcGFzcworCisKK2NsYXNzIEJhZE9w
ZXJhdGlvbkV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIlRoaXMgZXhjZXB0aW9uIHdpbGwg
YmUgcmFpc2VkIHdoZW4gc2VuZF9tZXNzYWdlKCkgaXMgY2FsbGVkIG9uCisgICAgc2VydmVyLXRl
cm1pbmF0ZWQgY29ubmVjdGlvbiBvciByZWNlaXZlX21lc3NhZ2UoKSBpcyBjYWxsZWQgb24KKyAg
ICBjbGllbnQtdGVybWluYXRlZCBjb25uZWN0aW9uLgorICAgICIiIgorCisgICAgcGFzcworCisK
K2NsYXNzIFVuc3VwcG9ydGVkRnJhbWVFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAiIiJUaGlz
IGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCB3aGVuIHdlIHJlY2VpdmUgYSBmcmFtZSB3aXRoIGZs
YWcsIG9wY29kZQorICAgIHdlIGNhbm5vdCBoYW5kbGUuIEhhbmRsZXJzIGNhbiBqdXN0IGNhdGNo
IGFuZCBpZ25vcmUgdGhpcyBleGNlcHRpb24gYW5kCisgICAgY2FsbCByZWNlaXZlX21lc3NhZ2Uo
KSBhZ2FpbiB0byBjb250aW51ZSBwcm9jZXNzaW5nIHRoZSBuZXh0IGZyYW1lLgorICAgICIiIgor
CisgICAgcGFzcworCisKK2NsYXNzIEludmFsaWRVVEY4RXhjZXB0aW9uKEV4Y2VwdGlvbik6Cisg
ICAgIiIiVGhpcyBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgd2hlbiB3ZSByZWNlaXZlIGEgdGV4
dCBmcmFtZSB3aGljaAorICAgIGNvbnRhaW5zIGludmFsaWQgVVRGLTggc3RyaW5ncy4KKyAgICAi
IiIKKworICAgIHBhc3MKKworCitjbGFzcyBTdHJlYW1CYXNlKG9iamVjdCk6CisgICAgIiIiQmFz
ZSBzdHJlYW0gY2xhc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCk6Cisg
ICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAiIiIKKworICAgICAg
ICBzZWxmLl9sb2dnZXIgPSB1dGlsLmdldF9jbGFzc19sb2dnZXIoc2VsZikKKworICAgICAgICBz
ZWxmLl9yZXF1ZXN0ID0gcmVxdWVzdAorCisgICAgZGVmIF9yZWFkKHNlbGYsIGxlbmd0aCk6Cisg
ICAgICAgICIiIlJlYWRzIGxlbmd0aCBieXRlcyBmcm9tIGNvbm5lY3Rpb24uIEluIGNhc2Ugd2Ug
Y2F0Y2ggYW55IGV4Y2VwdGlvbiwKKyAgICAgICAgcHJlcGVuZHMgcmVtb3RlIGFkZHJlc3MgdG8g
dGhlIGV4Y2VwdGlvbiBtZXNzYWdlIGFuZCByYWlzZSBhZ2Fpbi4KKworICAgICAgICBSYWlzZXM6
CisgICAgICAgICAgICBDb25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlvbjogd2hlbiByZWFkIHJl
dHVybnMgZW1wdHkgc3RyaW5nLgorICAgICAgICAiIiIKKworICAgICAgICB0cnk6CisgICAgICAg
ICAgICByZWFkX2J5dGVzID0gc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLnJlYWQobGVuZ3RoKQor
ICAgICAgICAgICAgaWYgbm90IHJlYWRfYnl0ZXM6CisgICAgICAgICAgICAgICAgcmFpc2UgQ29u
bmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICdSZWNlaXZp
bmcgJWQgYnl0ZSBmYWlsZWQuIFBlZXIgKCVyKSBjbG9zZWQgY29ubmVjdGlvbicgJQorICAgICAg
ICAgICAgICAgICAgICAobGVuZ3RoLCAoc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLnJlbW90ZV9h
ZGRyLCkpKQorICAgICAgICAgICAgcmV0dXJuIHJlYWRfYnl0ZXMKKyAgICAgICAgZXhjZXB0IHNv
Y2tldC5lcnJvciwgZToKKyAgICAgICAgICAgICMgQ2F0Y2ggYSBzb2NrZXQuZXJyb3IuIEJlY2F1
c2UgaXQncyBub3QgYSBjaGlsZCBjbGFzcyBvZiB0aGUKKyAgICAgICAgICAgICMgSU9FcnJvciBw
cmlvciB0byBQeXRob24gMi42LCB3ZSBjYW5ub3Qgb21pdCB0aGlzIGV4Y2VwdCBjbGF1c2UuCisg
ICAgICAgICAgICAjIFVzZSAlcyByYXRoZXIgdGhhbiAlciBmb3IgdGhlIGV4Y2VwdGlvbiB0byB1
c2UgaHVtYW4gZnJpZW5kbHkKKyAgICAgICAgICAgICMgZm9ybWF0LgorICAgICAgICAgICAgcmFp
c2UgQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ1JlY2Vp
dmluZyAlZCBieXRlIGZhaWxlZC4gc29ja2V0LmVycm9yICglcykgb2NjdXJyZWQnICUKKyAgICAg
ICAgICAgICAgICAobGVuZ3RoLCBlKSkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAg
ICAgICAgICAjIEFsc28gY2F0Y2ggYW4gSU9FcnJvciBiZWNhdXNlIG1vZF9weXRob24gdGhyb3dz
IGl0LgorICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb24oCisg
ICAgICAgICAgICAgICAgJ1JlY2VpdmluZyAlZCBieXRlIGZhaWxlZC4gSU9FcnJvciAoJXMpIG9j
Y3VycmVkJyAlCisgICAgICAgICAgICAgICAgKGxlbmd0aCwgZSkpCisKKyAgICBkZWYgX3dyaXRl
KHNlbGYsIGJ5dGVzX3RvX3dyaXRlKToKKyAgICAgICAgIiIiV3JpdGVzIGdpdmVuIGJ5dGVzIHRv
IGNvbm5lY3Rpb24uIEluIGNhc2Ugd2UgY2F0Y2ggYW55IGV4Y2VwdGlvbiwKKyAgICAgICAgcHJl
cGVuZHMgcmVtb3RlIGFkZHJlc3MgdG8gdGhlIGV4Y2VwdGlvbiBtZXNzYWdlIGFuZCByYWlzZSBh
Z2Fpbi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcmVx
dWVzdC5jb25uZWN0aW9uLndyaXRlKGJ5dGVzX3RvX3dyaXRlKQorICAgICAgICBleGNlcHQgRXhj
ZXB0aW9uLCBlOgorICAgICAgICAgICAgdXRpbC5wcmVwZW5kX21lc3NhZ2VfdG9fZXhjZXB0aW9u
KAorICAgICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHNlbmQgbWVzc2FnZSB0byAlcjogJyAl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi5y
ZW1vdGVfYWRkciwpLAorICAgICAgICAgICAgICAgICAgICBlKQorICAgICAgICAgICAgcmFpc2UK
KworICAgIGRlZiByZWNlaXZlX2J5dGVzKHNlbGYsIGxlbmd0aCk6CisgICAgICAgICIiIlJlY2Vp
dmVzIG11bHRpcGxlIGJ5dGVzLiBSZXRyaWVzIHJlYWQgd2hlbiB3ZSBjb3VsZG4ndCByZWNlaXZl
IHRoZQorICAgICAgICBzcGVjaWZpZWQgYW1vdW50LgorCisgICAgICAgIFJhaXNlczoKKyAgICAg
ICAgICAgIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uOiB3aGVuIHJlYWQgcmV0dXJucyBl
bXB0eSBzdHJpbmcuCisgICAgICAgICIiIgorCisgICAgICAgIHJlYWRfYnl0ZXMgPSBbXQorICAg
ICAgICB3aGlsZSBsZW5ndGggPiAwOgorICAgICAgICAgICAgbmV3X3JlYWRfYnl0ZXMgPSBzZWxm
Ll9yZWFkKGxlbmd0aCkKKyAgICAgICAgICAgIHJlYWRfYnl0ZXMuYXBwZW5kKG5ld19yZWFkX2J5
dGVzKQorICAgICAgICAgICAgbGVuZ3RoIC09IGxlbihuZXdfcmVhZF9ieXRlcykKKyAgICAgICAg
cmV0dXJuICcnLmpvaW4ocmVhZF9ieXRlcykKKworICAgIGRlZiBfcmVhZF91bnRpbChzZWxmLCBk
ZWxpbV9jaGFyKToKKyAgICAgICAgIiIiUmVhZHMgYnl0ZXMgdW50aWwgd2UgZW5jb3VudGVyIGRl
bGltX2NoYXIuIFRoZSByZXN1bHQgd2lsbCBub3QKKyAgICAgICAgY29udGFpbiBkZWxpbV9jaGFy
LgorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhj
ZXB0aW9uOiB3aGVuIHJlYWQgcmV0dXJucyBlbXB0eSBzdHJpbmcuCisgICAgICAgICIiIgorCisg
ICAgICAgIHJlYWRfYnl0ZXMgPSBbXQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAg
Y2ggPSBzZWxmLl9yZWFkKDEpCisgICAgICAgICAgICBpZiBjaCA9PSBkZWxpbV9jaGFyOgorICAg
ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZWFkX2J5dGVzLmFwcGVuZChjaCkKKyAg
ICAgICAgcmV0dXJuICcnLmpvaW4ocmVhZF9ieXRlcykKKworCisjIHZpOnN0cz00IHN3PTQgZXQK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90
b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L19zdHJlYW1faGl4aWU3NS5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNv
Y2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L19zdHJlYW1faGl4aWU3NS5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
NGNmNWIzMWJhMGZjM2MzYTM0NzdkZTgyMjk3YTBjMjZkYTFjNDhjCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vi
c29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9oaXhpZTc1LnB5CkBAIC0wLDAgKzEs
MjI5IEBACisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUaGlzIGZpbGUgcHJvdmlkZXMgYSBjbGFz
cyBmb3IgcGFyc2luZy9idWlsZGluZyBmcmFtZXMgb2YgdGhlIFdlYlNvY2tldAorcHJvdG9jb2wg
dmVyc2lvbiBIeUJpIDAwIGFuZCBIaXhpZSA3NS4KKworU3BlY2lmaWNhdGlvbjoKKy0gSHlCaSAw
MCBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLWh5YmktdGhld2Vic29ja2V0
cHJvdG9jb2wtMDAKKy0gSGl4aWUgNzUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQt
aGl4aWUtdGhld2Vic29ja2V0cHJvdG9jb2wtNzUKKyIiIgorCisKK2Zyb20gbW9kX3B5d2Vic29j
a2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1fYmFzZSBpbXBv
cnQgQmFkT3BlcmF0aW9uRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2Jh
c2UgaW1wb3J0IENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNv
Y2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IEludmFsaWRGcmFtZUV4Y2VwdGlvbgorZnJvbSBtb2Rf
cHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBTdHJlYW1CYXNlCitmcm9tIG1vZF9weXdl
YnNvY2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IFVuc3VwcG9ydGVkRnJhbWVFeGNlcHRpb24KK2Zy
b20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCB1dGlsCisKKworY2xhc3MgU3RyZWFtSGl4aWU3NShT
dHJlYW1CYXNlKToKKyAgICAiIiJBIGNsYXNzIGZvciBwYXJzaW5nL2J1aWxkaW5nIGZyYW1lcyBv
ZiB0aGUgV2ViU29ja2V0IHByb3RvY29sIHZlcnNpb24KKyAgICBIeUJpIDAwIGFuZCBIaXhpZSA3
NS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0LCBlbmFibGVfY2xv
c2luZ19oYW5kc2hha2U9RmFsc2UpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2Uu
CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVz
dC4KKyAgICAgICAgICAgIGVuYWJsZV9jbG9zaW5nX2hhbmRzaGFrZTogdG8gbGV0IFN0cmVhbUhp
eGllNzUgcGVyZm9ybSBjbG9zaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhhbmRzaGFrZSBhcyBzcGVjaWZpZWQgaW4gSHlCaSAwMCwgc2V0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgb3B0aW9uIHRvIFRydWUuCisgICAgICAgICIi
IgorCisgICAgICAgIFN0cmVhbUJhc2UuX19pbml0X18oc2VsZiwgcmVxdWVzdCkKKworICAgICAg
ICBzZWxmLl9sb2dnZXIgPSB1dGlsLmdldF9jbGFzc19sb2dnZXIoc2VsZikKKworICAgICAgICBz
ZWxmLl9lbmFibGVfY2xvc2luZ19oYW5kc2hha2UgPSBlbmFibGVfY2xvc2luZ19oYW5kc2hha2UK
KworICAgICAgICBzZWxmLl9yZXF1ZXN0LmNsaWVudF90ZXJtaW5hdGVkID0gRmFsc2UKKyAgICAg
ICAgc2VsZi5fcmVxdWVzdC5zZXJ2ZXJfdGVybWluYXRlZCA9IEZhbHNlCisKKyAgICBkZWYgc2Vu
ZF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIGVuZD1UcnVlLCBiaW5hcnk9RmFsc2UpOgorICAgICAg
ICAiIiJTZW5kIG1lc3NhZ2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG1lc3NhZ2U6
IHVuaWNvZGUgc3RyaW5nIHRvIHNlbmQuCisgICAgICAgICAgICBiaW5hcnk6IG5vdCB1c2VkIGlu
IGhpeGllNzUuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgQmFkT3BlcmF0aW9uRXhj
ZXB0aW9uOiB3aGVuIGNhbGxlZCBvbiBhIHNlcnZlci10ZXJtaW5hdGVkCisgICAgICAgICAgICAg
ICAgY29ubmVjdGlvbi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IGVuZDoKKyAgICAg
ICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnU3Ry
ZWFtSGl4aWU3NSBkb2VzblwndCBzdXBwb3J0IHNlbmRfbWVzc2FnZSB3aXRoIGVuZD1GYWxzZScp
CisKKyAgICAgICAgaWYgYmluYXJ5OgorICAgICAgICAgICAgcmFpc2UgQmFkT3BlcmF0aW9uRXhj
ZXB0aW9uKAorICAgICAgICAgICAgICAgICdTdHJlYW1IaXhpZTc1IGRvZXNuXCd0IHN1cHBvcnQg
c2VuZF9tZXNzYWdlIHdpdGggYmluYXJ5PVRydWUnKQorCisgICAgICAgIGlmIHNlbGYuX3JlcXVl
c3Quc2VydmVyX3Rlcm1pbmF0ZWQ6CisgICAgICAgICAgICByYWlzZSBCYWRPcGVyYXRpb25FeGNl
cHRpb24oCisgICAgICAgICAgICAgICAgJ1JlcXVlc3RlZCBzZW5kX21lc3NhZ2UgYWZ0ZXIgc2Vu
ZGluZyBvdXQgYSBjbG9zaW5nIGhhbmRzaGFrZScpCisKKyAgICAgICAgc2VsZi5fd3JpdGUoJycu
am9pbihbJ1x4MDAnLCBtZXNzYWdlLmVuY29kZSgndXRmLTgnKSwgJ1x4ZmYnXSkpCisKKyAgICBk
ZWYgX3JlYWRfcGF5bG9hZF9sZW5ndGhfaGl4aWU3NShzZWxmKToKKyAgICAgICAgIiIiUmVhZHMg
YSBsZW5ndGggaGVhZGVyIGluIGEgSGl4aWU3NSB2ZXJzaW9uIGZyYW1lIHdpdGggbGVuZ3RoLgor
CisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0
aW9uOiB3aGVuIHJlYWQgcmV0dXJucyBlbXB0eSBzdHJpbmcuCisgICAgICAgICIiIgorCisgICAg
ICAgIGxlbmd0aCA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGJfc3RyID0g
c2VsZi5fcmVhZCgxKQorICAgICAgICAgICAgYiA9IG9yZChiX3N0cikKKyAgICAgICAgICAgIGxl
bmd0aCA9IGxlbmd0aCAqIDEyOCArIChiICYgMHg3ZikKKyAgICAgICAgICAgIGlmIChiICYgMHg4
MCkgPT0gMDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gbGVuZ3RoCisK
KyAgICBkZWYgcmVjZWl2ZV9tZXNzYWdlKHNlbGYpOgorICAgICAgICAiIiJSZWNlaXZlIGEgV2Vi
U29ja2V0IGZyYW1lIGFuZCByZXR1cm4gaXRzIHBheWxvYWQgYW4gdW5pY29kZSBzdHJpbmcuCisK
KyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIHBheWxvYWQgdW5pY29kZSBzdHJpbmcgaW4g
YSBXZWJTb2NrZXQgZnJhbWUuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgQ29ubmVj
dGlvblRlcm1pbmF0ZWRFeGNlcHRpb246IHdoZW4gcmVhZCByZXR1cm5zIGVtcHR5CisgICAgICAg
ICAgICAgICAgc3RyaW5nLgorICAgICAgICAgICAgQmFkT3BlcmF0aW9uRXhjZXB0aW9uOiB3aGVu
IGNhbGxlZCBvbiBhIGNsaWVudC10ZXJtaW5hdGVkCisgICAgICAgICAgICAgICAgY29ubmVjdGlv
bi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC5jbGllbnRfdGVybWlu
YXRlZDoKKyAgICAgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAg
ICAgICAgICAnUmVxdWVzdGVkIHJlY2VpdmVfbWVzc2FnZSBhZnRlciByZWNlaXZpbmcgYSBjbG9z
aW5nICcKKyAgICAgICAgICAgICAgICAnaGFuZHNoYWtlJykKKworICAgICAgICB3aGlsZSBUcnVl
OgorICAgICAgICAgICAgIyBSZWFkIDEgYnl0ZS4KKyAgICAgICAgICAgICMgbXBfY29ubi5yZWFk
IHdpbGwgYmxvY2sgaWYgbm8gYnl0ZXMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICMgVGlt
ZW91dCBpcyBjb250cm9sbGVkIGJ5IFRpbWVPdXQgZGlyZWN0aXZlIG9mIEFwYWNoZS4KKyAgICAg
ICAgICAgIGZyYW1lX3R5cGVfc3RyID0gc2VsZi5yZWNlaXZlX2J5dGVzKDEpCisgICAgICAgICAg
ICBmcmFtZV90eXBlID0gb3JkKGZyYW1lX3R5cGVfc3RyKQorICAgICAgICAgICAgaWYgKGZyYW1l
X3R5cGUgJiAweDgwKSA9PSAweDgwOgorICAgICAgICAgICAgICAgICMgVGhlIHBheWxvYWQgbGVu
Z3RoIGlzIHNwZWNpZmllZCBpbiB0aGUgZnJhbWUuCisgICAgICAgICAgICAgICAgIyBSZWFkIGFu
ZCBkaXNjYXJkLgorICAgICAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYuX3JlYWRfcGF5bG9hZF9s
ZW5ndGhfaGl4aWU3NSgpCisgICAgICAgICAgICAgICAgaWYgbGVuZ3RoID4gMDoKKyAgICAgICAg
ICAgICAgICAgICAgXyA9IHNlbGYucmVjZWl2ZV9ieXRlcyhsZW5ndGgpCisgICAgICAgICAgICAg
ICAgIyA1LjMgMy4gMTIuIGlmIC90eXBlLyBpcyAweEZGIGFuZCAvbGVuZ3RoLyBpcyAwLCB0aGVu
IHNldCB0aGUKKyAgICAgICAgICAgICAgICAjIC9jbGllbnQgdGVybWluYXRlZC8gZmxhZyBhbmQg
YWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2VuYWJsZV9j
bG9zaW5nX2hhbmRzaGFrZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAg
ICAgICAgICAgIGlmIGZyYW1lX3R5cGUgPT0gMHhGRiBhbmQgbGVuZ3RoID09IDA6CisgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QuY2xpZW50X3Rlcm1pbmF0ZWQgPSBUcnVlCisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC5zZXJ2ZXJfdGVybWluYXRlZDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnUmVjZWl2ZWQgYWNrIGZvciBzZXJ2ZXItaW5pdGlhdGVkIGNsb3Npbmcg
JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYW5kc2hha2UnKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2dn
ZXIuZGVidWcoCisgICAgICAgICAgICAgICAgICAgICAgICAnUmVjZWl2ZWQgY2xpZW50LWluaXRp
YXRlZCBjbG9zaW5nIGhhbmRzaGFrZScpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2Vu
ZF9jbG9zaW5nX2hhbmRzaGFrZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5k
ZWJ1ZygKKyAgICAgICAgICAgICAgICAgICAgICAgICdTZW50IGFjayBmb3IgY2xpZW50LWluaXRp
YXRlZCBjbG9zaW5nIGhhbmRzaGFrZScpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25l
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVGhlIHBheWxvYWQgaXMgZGVs
aW1pdGVkIHdpdGggXHhmZi4KKyAgICAgICAgICAgICAgICBieXRlcyA9IHNlbGYuX3JlYWRfdW50
aWwoJ1x4ZmYnKQorICAgICAgICAgICAgICAgICMgVGhlIFdlYlNvY2tldCBwcm90b2NvbCBzZWN0
aW9uIDQuNCBzcGVjaWZpZXMgdGhhdCBpbnZhbGlkCisgICAgICAgICAgICAgICAgIyBjaGFyYWN0
ZXJzIG11c3QgYmUgcmVwbGFjZWQgd2l0aCBVK2ZmZmQgUkVQTEFDRU1FTlQKKyAgICAgICAgICAg
ICAgICAjIENIQVJBQ1RFUi4KKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gYnl0ZXMuZGVjb2Rl
KCd1dGYtOCcsICdyZXBsYWNlJykKKyAgICAgICAgICAgICAgICBpZiBmcmFtZV90eXBlID09IDB4
MDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlCisgICAgICAgICAgICAgICAg
IyBEaXNjYXJkIGRhdGEgb2Ygb3RoZXIgdHlwZXMuCisKKyAgICBkZWYgX3NlbmRfY2xvc2luZ19o
YW5kc2hha2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9lbmFibGVfY2xvc2luZ19oYW5k
c2hha2U6CisgICAgICAgICAgICByYWlzZSBCYWRPcGVyYXRpb25FeGNlcHRpb24oCisgICAgICAg
ICAgICAgICAgJ0Nsb3NpbmcgaGFuZHNoYWtlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSGl4aWUgNzUg
cHJvdG9jb2wnKQorCisgICAgICAgIHNlbGYuX3JlcXVlc3Quc2VydmVyX3Rlcm1pbmF0ZWQgPSBU
cnVlCisKKyAgICAgICAgIyA1LjMgdGhlIHNlcnZlciBtYXkgZGVjaWRlIHRvIHRlcm1pbmF0ZSB0
aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gYnkKKyAgICAgICAgIyBydW5uaW5nIHRocm91Z2ggdGhl
IGZvbGxvd2luZyBzdGVwczoKKyAgICAgICAgIyAxLiBzZW5kIGEgMHhGRiBieXRlIGFuZCBhIDB4
MDAgYnl0ZSB0byB0aGUgY2xpZW50IHRvIGluZGljYXRlIHRoZQorICAgICAgICAjIHN0YXJ0IG9m
IHRoZSBjbG9zaW5nIGhhbmRzaGFrZS4KKyAgICAgICAgc2VsZi5fd3JpdGUoJ1x4ZmZceDAwJykK
KworICAgIGRlZiBjbG9zZV9jb25uZWN0aW9uKHNlbGYsIHVudXNlZF9jb2RlPScnLCB1bnVzZWRf
cmVhc29uPScnKToKKyAgICAgICAgIiIiQ2xvc2VzIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24uCisK
KyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRp
b246IHdoZW4gY2xvc2luZyBoYW5kc2hha2Ugd2FzCisgICAgICAgICAgICAgICAgbm90IHN1Y2Nl
c3NmdWxsLgorICAgICAgICAiIiIKKworICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LnNlcnZlcl90
ZXJtaW5hdGVkOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAg
ICAgICdSZXF1ZXN0ZWQgY2xvc2VfY29ubmVjdGlvbiBidXQgc2VydmVyIGlzIGFscmVhZHkgdGVy
bWluYXRlZCcpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3Qgc2VsZi5fZW5h
YmxlX2Nsb3NpbmdfaGFuZHNoYWtlOgorICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC5zZXJ2ZXJf
dGVybWluYXRlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnQ29ubmVj
dGlvbiBjbG9zZWQnKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fc2VuZF9j
bG9zaW5nX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnU2VudCBzZXJ2
ZXItaW5pdGlhdGVkIGNsb3NpbmcgaGFuZHNoYWtlJykKKworICAgICAgICAjIFRPRE8odWthaSk6
IDIuIHdhaXQgdW50aWwgdGhlIC9jbGllbnQgdGVybWluYXRlZC8gZmxhZyBoYXMgYmVlbiBzZXQs
CisgICAgICAgICMgb3IgdW50aWwgYSBzZXJ2ZXItZGVmaW5lZCB0aW1lb3V0IGV4cGlyZXMuCisg
ICAgICAgICMKKyAgICAgICAgIyBGb3Igbm93LCB3ZSBleHBlY3QgcmVjZWl2aW5nIGNsb3Npbmcg
aGFuZHNoYWtlIHJpZ2h0IGFmdGVyIHNlbmRpbmcKKyAgICAgICAgIyBvdXQgY2xvc2luZyBoYW5k
c2hha2UsIGFuZCBpZiB3ZSBjb3VsZG4ndCByZWNlaXZlIG5vbi1oYW5kc2hha2UKKyAgICAgICAg
IyBmcmFtZSwgd2UgdGFrZSBpdCBhcyBDb25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlvbi4KKyAg
ICAgICAgbWVzc2FnZSA9IHNlbGYucmVjZWl2ZV9tZXNzYWdlKCkKKyAgICAgICAgaWYgbWVzc2Fn
ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhj
ZXB0aW9uKAorICAgICAgICAgICAgICAgICdEaWRuXCd0IHJlY2VpdmUgdmFsaWQgYWNrIGZvciBj
bG9zaW5nIGhhbmRzaGFrZScpCisgICAgICAgICMgVE9ETzogMy4gY2xvc2UgdGhlIFdlYlNvY2tl
dCBjb25uZWN0aW9uLgorICAgICAgICAjIG5vdGU6IG1vZF9weXRob24gQ29ubmVjdGlvbiAobXBf
Y29ubikgZG9lc24ndCBoYXZlIGNsb3NlIG1ldGhvZC4KKworICAgIGRlZiBzZW5kX3Bpbmcoc2Vs
ZiwgYm9keSk6CisgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAg
ICAgICdTdHJlYW1IaXhpZTc1IGRvZXNuXCd0IHN1cHBvcnQgc2VuZF9waW5nJykKKworCisjIHZp
OnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L19zdHJl
YW1faHliaS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90
b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L19zdHJlYW1faHliaS5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hOGE0OWUzYzNkYzk1YmE5ZjdmZDQxMjg5MzgzZmUwN2FmZGQ1NzdmCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rv
b2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9oeWJpLnB5CkBAIC0w
LDAgKzEsODg3IEBACisjIENvcHlyaWdodCAyMDEyLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUaGlzIGZpbGUgcHJvdmlkZXMg
Y2xhc3NlcyBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgcGFyc2luZy9idWlsZGluZyBmcmFtZXMK
K29mIHRoZSBXZWJTb2NrZXQgcHJvdG9jb2wgKFJGQyA2NDU1KS4KKworU3BlY2lmaWNhdGlvbjoK
K2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTUKKyIiIgorCisKK2Zyb20gY29sbGVj
dGlvbnMgaW1wb3J0IGRlcXVlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3Ry
dWN0CitpbXBvcnQgdGltZQorCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgY29tbW9uCitm
cm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgdXRpbAorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0
cmVhbV9iYXNlIGltcG9ydCBCYWRPcGVyYXRpb25FeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29j
a2V0Ll9zdHJlYW1fYmFzZSBpbXBvcnQgQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb24KK2Zy
b20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1fYmFzZSBpbXBvcnQgSW52YWxpZEZyYW1lRXhjZXB0
aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IEludmFsaWRVVEY4
RXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IFN0cmVh
bUJhc2UKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1fYmFzZSBpbXBvcnQgVW5zdXBwb3J0
ZWRGcmFtZUV4Y2VwdGlvbgorCisKK19OT09QX01BU0tFUiA9IHV0aWwuTm9vcE1hc2tlcigpCisK
KworY2xhc3MgRnJhbWUob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaW49MSwg
cnN2MT0wLCByc3YyPTAsIHJzdjM9MCwKKyAgICAgICAgICAgICAgICAgb3Bjb2RlPU5vbmUsIHBh
eWxvYWQ9JycpOgorICAgICAgICBzZWxmLmZpbiA9IGZpbgorICAgICAgICBzZWxmLnJzdjEgPSBy
c3YxCisgICAgICAgIHNlbGYucnN2MiA9IHJzdjIKKyAgICAgICAgc2VsZi5yc3YzID0gcnN2Mwor
ICAgICAgICBzZWxmLm9wY29kZSA9IG9wY29kZQorICAgICAgICBzZWxmLnBheWxvYWQgPSBwYXls
b2FkCisKKworIyBIZWxwZXIgZnVuY3Rpb25zIG1hZGUgcHVibGljIHRvIGJlIHVzZWQgZm9yIHdy
aXRpbmcgdW5pdHRlc3RzIGZvciBXZWJTb2NrZXQKKyMgY2xpZW50cy4KKworCitkZWYgY3JlYXRl
X2xlbmd0aF9oZWFkZXIobGVuZ3RoLCBtYXNrKToKKyAgICAiIiJDcmVhdGVzIGEgbGVuZ3RoIGhl
YWRlci4KKworICAgIEFyZ3M6CisgICAgICAgIGxlbmd0aDogRnJhbWUgbGVuZ3RoLiBNdXN0IGJl
IGxlc3MgdGhhbiAyXjYzLgorICAgICAgICBtYXNrOiBNYXNrIGJpdC4gTXVzdCBiZSBib29sZWFu
LgorCisgICAgUmFpc2VzOgorICAgICAgICBWYWx1ZUVycm9yOiB3aGVuIGJhZCBkYXRhIGlzIGdp
dmVuLgorICAgICIiIgorCisgICAgaWYgbWFzazoKKyAgICAgICAgbWFza19iaXQgPSAxIDw8IDcK
KyAgICBlbHNlOgorICAgICAgICBtYXNrX2JpdCA9IDAKKworICAgIGlmIGxlbmd0aCA8IDA6Cisg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2xlbmd0aCBtdXN0IGJlIG5vbiBuZWdhdGl2ZSBpbnRl
Z2VyJykKKyAgICBlbGlmIGxlbmd0aCA8PSAxMjU6CisgICAgICAgIHJldHVybiBjaHIobWFza19i
aXQgfCBsZW5ndGgpCisgICAgZWxpZiBsZW5ndGggPCAoMSA8PCAxNik6CisgICAgICAgIHJldHVy
biBjaHIobWFza19iaXQgfCAxMjYpICsgc3RydWN0LnBhY2soJyFIJywgbGVuZ3RoKQorICAgIGVs
aWYgbGVuZ3RoIDwgKDEgPDwgNjMpOgorICAgICAgICByZXR1cm4gY2hyKG1hc2tfYml0IHwgMTI3
KSArIHN0cnVjdC5wYWNrKCchUScsIGxlbmd0aCkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCdQYXlsb2FkIGlzIHRvbyBiaWcgZm9yIG9uZSBmcmFtZScpCisKKworZGVmIGNy
ZWF0ZV9oZWFkZXIob3Bjb2RlLCBwYXlsb2FkX2xlbmd0aCwgZmluLCByc3YxLCByc3YyLCByc3Yz
LCBtYXNrKToKKyAgICAiIiJDcmVhdGVzIGEgZnJhbWUgaGVhZGVyLgorCisgICAgUmFpc2VzOgor
ICAgICAgICBFeGNlcHRpb246IHdoZW4gYmFkIGRhdGEgaXMgZ2l2ZW4uCisgICAgIiIiCisKKyAg
ICBpZiBvcGNvZGUgPCAwIG9yIDB4ZiA8IG9wY29kZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cignT3Bjb2RlIG91dCBvZiByYW5nZScpCisKKyAgICBpZiBwYXlsb2FkX2xlbmd0aCA8IDAgb3Ig
KDEgPDwgNjMpIDw9IHBheWxvYWRfbGVuZ3RoOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdw
YXlsb2FkX2xlbmd0aCBvdXQgb2YgcmFuZ2UnKQorCisgICAgaWYgKGZpbiB8IHJzdjEgfCByc3Yy
IHwgcnN2MykgJiB+MToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRklOIGJpdCBhbmQgUmVz
ZXJ2ZWQgYml0IHBhcmFtZXRlciBtdXN0IGJlIDAgb3IgMScpCisKKyAgICBoZWFkZXIgPSAnJwor
CisgICAgZmlyc3RfYnl0ZSA9ICgoZmluIDw8IDcpCisgICAgICAgICAgICAgICAgICB8IChyc3Yx
IDw8IDYpIHwgKHJzdjIgPDwgNSkgfCAocnN2MyA8PCA0KQorICAgICAgICAgICAgICAgICAgfCBv
cGNvZGUpCisgICAgaGVhZGVyICs9IGNocihmaXJzdF9ieXRlKQorICAgIGhlYWRlciArPSBjcmVh
dGVfbGVuZ3RoX2hlYWRlcihwYXlsb2FkX2xlbmd0aCwgbWFzaykKKworICAgIHJldHVybiBoZWFk
ZXIKKworCitkZWYgX2J1aWxkX2ZyYW1lKGhlYWRlciwgYm9keSwgbWFzayk6CisgICAgaWYgbm90
IG1hc2s6CisgICAgICAgIHJldHVybiBoZWFkZXIgKyBib2R5CisKKyAgICBtYXNraW5nX25vbmNl
ID0gb3MudXJhbmRvbSg0KQorICAgIG1hc2tlciA9IHV0aWwuUmVwZWF0ZWRYb3JNYXNrZXIobWFz
a2luZ19ub25jZSkKKworICAgIHJldHVybiBoZWFkZXIgKyBtYXNraW5nX25vbmNlICsgbWFza2Vy
Lm1hc2soYm9keSkKKworCitkZWYgX2ZpbHRlcl9hbmRfZm9ybWF0X2ZyYW1lX29iamVjdChmcmFt
ZSwgbWFzaywgZnJhbWVfZmlsdGVycyk6CisgICAgZm9yIGZyYW1lX2ZpbHRlciBpbiBmcmFtZV9m
aWx0ZXJzOgorICAgICAgICBmcmFtZV9maWx0ZXIuZmlsdGVyKGZyYW1lKQorCisgICAgaGVhZGVy
ID0gY3JlYXRlX2hlYWRlcigKKyAgICAgICAgZnJhbWUub3Bjb2RlLCBsZW4oZnJhbWUucGF5bG9h
ZCksIGZyYW1lLmZpbiwKKyAgICAgICAgZnJhbWUucnN2MSwgZnJhbWUucnN2MiwgZnJhbWUucnN2
MywgbWFzaykKKyAgICByZXR1cm4gX2J1aWxkX2ZyYW1lKGhlYWRlciwgZnJhbWUucGF5bG9hZCwg
bWFzaykKKworCitkZWYgY3JlYXRlX2JpbmFyeV9mcmFtZSgKKyAgICBtZXNzYWdlLCBvcGNvZGU9
Y29tbW9uLk9QQ09ERV9CSU5BUlksIGZpbj0xLCBtYXNrPUZhbHNlLCBmcmFtZV9maWx0ZXJzPVtd
KToKKyAgICAiIiJDcmVhdGVzIGEgc2ltcGxlIGJpbmFyeSBmcmFtZSB3aXRoIG5vIGV4dGVuc2lv
biwgcmVzZXJ2ZWQgYml0LiIiIgorCisgICAgZnJhbWUgPSBGcmFtZShmaW49ZmluLCBvcGNvZGU9
b3Bjb2RlLCBwYXlsb2FkPW1lc3NhZ2UpCisgICAgcmV0dXJuIF9maWx0ZXJfYW5kX2Zvcm1hdF9m
cmFtZV9vYmplY3QoZnJhbWUsIG1hc2ssIGZyYW1lX2ZpbHRlcnMpCisKKworZGVmIGNyZWF0ZV90
ZXh0X2ZyYW1lKAorICAgIG1lc3NhZ2UsIG9wY29kZT1jb21tb24uT1BDT0RFX1RFWFQsIGZpbj0x
LCBtYXNrPUZhbHNlLCBmcmFtZV9maWx0ZXJzPVtdKToKKyAgICAiIiJDcmVhdGVzIGEgc2ltcGxl
IHRleHQgZnJhbWUgd2l0aCBubyBleHRlbnNpb24sIHJlc2VydmVkIGJpdC4iIiIKKworICAgIGVu
Y29kZWRfbWVzc2FnZSA9IG1lc3NhZ2UuZW5jb2RlKCd1dGYtOCcpCisgICAgcmV0dXJuIGNyZWF0
ZV9iaW5hcnlfZnJhbWUoZW5jb2RlZF9tZXNzYWdlLCBvcGNvZGUsIGZpbiwgbWFzaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZV9maWx0ZXJzKQorCisKK2RlZiBwYXJzZV9m
cmFtZShyZWNlaXZlX2J5dGVzLCBsb2dnZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICB3c192ZXJz
aW9uPWNvbW1vbi5WRVJTSU9OX0hZQklfTEFURVNULAorICAgICAgICAgICAgICAgIHVubWFza19y
ZWNlaXZlPVRydWUpOgorICAgICIiIlBhcnNlcyBhIGZyYW1lLiBSZXR1cm5zIGEgdHVwbGUgY29u
dGFpbmluZyBlYWNoIGhlYWRlciBmaWVsZCBhbmQKKyAgICBwYXlsb2FkLgorCisgICAgQXJnczoK
KyAgICAgICAgcmVjZWl2ZV9ieXRlczogYSBmdW5jdGlvbiB0aGF0IHJlYWRzIGZyYW1lIGRhdGEg
ZnJvbSBhIHN0cmVhbSBvcgorICAgICAgICAgICAgc29tZXRoaW5nIHNpbWlsYXIuIFRoZSBmdW5j
dGlvbiB0YWtlcyBsZW5ndGggb2YgdGhlIGJ5dGVzIHRvIGJlCisgICAgICAgICAgICByZWFkLiBU
aGUgZnVuY3Rpb24gbXVzdCByYWlzZSBDb25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlvbiBpZgor
ICAgICAgICAgICAgdGhlcmUgaXMgbm90IGVub3VnaCBkYXRhIHRvIGJlIHJlYWQuCisgICAgICAg
IGxvZ2dlcjogYSBsb2dnaW5nIG9iamVjdC4KKyAgICAgICAgd3NfdmVyc2lvbjogdGhlIHZlcnNp
b24gb2YgV2ViU29ja2V0IHByb3RvY29sLgorICAgICAgICB1bm1hc2tfcmVjZWl2ZTogdW5tYXNr
IHJlY2VpdmVkIGZyYW1lcy4gV2hlbiByZWNlaXZlZCB1bm1hc2tlZAorICAgICAgICAgICAgZnJh
bWUsIHJhaXNlcyBJbnZhbGlkRnJhbWVFeGNlcHRpb24uCisKKyAgICBSYWlzZXM6CisgICAgICAg
IENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uOiB3aGVuIHJlY2VpdmVfYnl0ZXMgcmFpc2Vz
IGl0LgorICAgICAgICBJbnZhbGlkRnJhbWVFeGNlcHRpb246IHdoZW4gdGhlIGZyYW1lIGNvbnRh
aW5zIGludmFsaWQgZGF0YS4KKyAgICAiIiIKKworICAgIGlmIG5vdCBsb2dnZXI6CisgICAgICAg
IGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKworICAgIGxvZ2dlci5sb2coY29tbW9uLkxP
R0xFVkVMX0ZJTkUsICdSZWNlaXZlIHRoZSBmaXJzdCAyIG9jdGV0cyBvZiBhIGZyYW1lJykKKwor
ICAgIHJlY2VpdmVkID0gcmVjZWl2ZV9ieXRlcygyKQorCisgICAgZmlyc3RfYnl0ZSA9IG9yZChy
ZWNlaXZlZFswXSkKKyAgICBmaW4gPSAoZmlyc3RfYnl0ZSA+PiA3KSAmIDEKKyAgICByc3YxID0g
KGZpcnN0X2J5dGUgPj4gNikgJiAxCisgICAgcnN2MiA9IChmaXJzdF9ieXRlID4+IDUpICYgMQor
ICAgIHJzdjMgPSAoZmlyc3RfYnl0ZSA+PiA0KSAmIDEKKyAgICBvcGNvZGUgPSBmaXJzdF9ieXRl
ICYgMHhmCisKKyAgICBzZWNvbmRfYnl0ZSA9IG9yZChyZWNlaXZlZFsxXSkKKyAgICBtYXNrID0g
KHNlY29uZF9ieXRlID4+IDcpICYgMQorICAgIHBheWxvYWRfbGVuZ3RoID0gc2Vjb25kX2J5dGUg
JiAweDdmCisKKyAgICBsb2dnZXIubG9nKGNvbW1vbi5MT0dMRVZFTF9GSU5FLAorICAgICAgICAg
ICAgICAgJ0ZJTj0lcywgUlNWMT0lcywgUlNWMj0lcywgUlNWMz0lcywgb3Bjb2RlPSVzLCAnCisg
ICAgICAgICAgICAgICAnTWFzaz0lcywgUGF5bG9hZF9sZW5ndGg9JXMnLAorICAgICAgICAgICAg
ICAgZmluLCByc3YxLCByc3YyLCByc3YzLCBvcGNvZGUsIG1hc2ssIHBheWxvYWRfbGVuZ3RoKQor
CisgICAgaWYgKG1hc2sgPT0gMSkgIT0gdW5tYXNrX3JlY2VpdmU6CisgICAgICAgIHJhaXNlIElu
dmFsaWRGcmFtZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICdNYXNrIGJpdCBvbiB0aGUgcmVjZWl2
ZWQgZnJhbWUgZGlkXCdudCBtYXRjaCBtYXNraW5nICcKKyAgICAgICAgICAgICdjb25maWd1cmF0
aW9uIGZvciByZWNlaXZlZCBmcmFtZXMnKQorCisgICAgIyBUaGUgSHlCaSBhbmQgbGF0ZXIgc3Bl
Y3MgZGlzYWxsb3cgcHV0dGluZyBhIHZhbHVlIGluIDB4MC0weEZGRkYKKyAgICAjIGludG8gdGhl
IDgtb2N0ZXQgZXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGggZmllbGQgKG9yIDB4MC0weEZEIGluCisg
ICAgIyAyLW9jdGV0IGZpZWxkKS4KKyAgICB2YWxpZF9sZW5ndGhfZW5jb2RpbmcgPSBUcnVlCisg
ICAgbGVuZ3RoX2VuY29kaW5nX2J5dGVzID0gMQorICAgIGlmIHBheWxvYWRfbGVuZ3RoID09IDEy
NzoKKyAgICAgICAgbG9nZ2VyLmxvZyhjb21tb24uTE9HTEVWRUxfRklORSwKKyAgICAgICAgICAg
ICAgICAgICAnUmVjZWl2ZSA4LW9jdGV0IGV4dGVuZGVkIHBheWxvYWQgbGVuZ3RoJykKKworICAg
ICAgICBleHRlbmRlZF9wYXlsb2FkX2xlbmd0aCA9IHJlY2VpdmVfYnl0ZXMoOCkKKyAgICAgICAg
cGF5bG9hZF9sZW5ndGggPSBzdHJ1Y3QudW5wYWNrKAorICAgICAgICAgICAgJyFRJywgZXh0ZW5k
ZWRfcGF5bG9hZF9sZW5ndGgpWzBdCisgICAgICAgIGlmIHBheWxvYWRfbGVuZ3RoID4gMHg3RkZG
RkZGRkZGRkZGRkZGOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZyYW1lRXhjZXB0aW9uKAor
ICAgICAgICAgICAgICAgICdFeHRlbmRlZCBwYXlsb2FkIGxlbmd0aCA+PSAyXjYzJykKKyAgICAg
ICAgaWYgd3NfdmVyc2lvbiA+PSAxMyBhbmQgcGF5bG9hZF9sZW5ndGggPCAweDEwMDAwOgorICAg
ICAgICAgICAgdmFsaWRfbGVuZ3RoX2VuY29kaW5nID0gRmFsc2UKKyAgICAgICAgICAgIGxlbmd0
aF9lbmNvZGluZ19ieXRlcyA9IDgKKworICAgICAgICBsb2dnZXIubG9nKGNvbW1vbi5MT0dMRVZF
TF9GSU5FLAorICAgICAgICAgICAgICAgICAgICdEZWNvZGVkX3BheWxvYWRfbGVuZ3RoPSVzJywg
cGF5bG9hZF9sZW5ndGgpCisgICAgZWxpZiBwYXlsb2FkX2xlbmd0aCA9PSAxMjY6CisgICAgICAg
IGxvZ2dlci5sb2coY29tbW9uLkxPR0xFVkVMX0ZJTkUsCisgICAgICAgICAgICAgICAgICAgJ1Jl
Y2VpdmUgMi1vY3RldCBleHRlbmRlZCBwYXlsb2FkIGxlbmd0aCcpCisKKyAgICAgICAgZXh0ZW5k
ZWRfcGF5bG9hZF9sZW5ndGggPSByZWNlaXZlX2J5dGVzKDIpCisgICAgICAgIHBheWxvYWRfbGVu
Z3RoID0gc3RydWN0LnVucGFjaygKKyAgICAgICAgICAgICchSCcsIGV4dGVuZGVkX3BheWxvYWRf
bGVuZ3RoKVswXQorICAgICAgICBpZiB3c192ZXJzaW9uID49IDEzIGFuZCBwYXlsb2FkX2xlbmd0
aCA8IDEyNjoKKyAgICAgICAgICAgIHZhbGlkX2xlbmd0aF9lbmNvZGluZyA9IEZhbHNlCisgICAg
ICAgICAgICBsZW5ndGhfZW5jb2RpbmdfYnl0ZXMgPSAyCisKKyAgICAgICAgbG9nZ2VyLmxvZyhj
b21tb24uTE9HTEVWRUxfRklORSwKKyAgICAgICAgICAgICAgICAgICAnRGVjb2RlZF9wYXlsb2Fk
X2xlbmd0aD0lcycsIHBheWxvYWRfbGVuZ3RoKQorCisgICAgaWYgbm90IHZhbGlkX2xlbmd0aF9l
bmNvZGluZzoKKyAgICAgICAgbG9nZ2VyLndhcm5pbmcoCisgICAgICAgICAgICAnUGF5bG9hZCBs
ZW5ndGggaXMgbm90IGVuY29kZWQgdXNpbmcgdGhlIG1pbmltYWwgbnVtYmVyIG9mICcKKyAgICAg
ICAgICAgICdieXRlcyAoJWQgaXMgZW5jb2RlZCB1c2luZyAlZCBieXRlcyknLAorICAgICAgICAg
ICAgcGF5bG9hZF9sZW5ndGgsCisgICAgICAgICAgICBsZW5ndGhfZW5jb2RpbmdfYnl0ZXMpCisK
KyAgICBpZiBtYXNrID09IDE6CisgICAgICAgIGxvZ2dlci5sb2coY29tbW9uLkxPR0xFVkVMX0ZJ
TkUsICdSZWNlaXZlIG1hc2snKQorCisgICAgICAgIG1hc2tpbmdfbm9uY2UgPSByZWNlaXZlX2J5
dGVzKDQpCisgICAgICAgIG1hc2tlciA9IHV0aWwuUmVwZWF0ZWRYb3JNYXNrZXIobWFza2luZ19u
b25jZSkKKworICAgICAgICBsb2dnZXIubG9nKGNvbW1vbi5MT0dMRVZFTF9GSU5FLCAnTWFzaz0l
cicsIG1hc2tpbmdfbm9uY2UpCisgICAgZWxzZToKKyAgICAgICAgbWFza2VyID0gX05PT1BfTUFT
S0VSCisKKyAgICBsb2dnZXIubG9nKGNvbW1vbi5MT0dMRVZFTF9GSU5FLCAnUmVjZWl2ZSBwYXls
b2FkIGRhdGEnKQorICAgIGlmIGxvZ2dlci5pc0VuYWJsZWRGb3IoY29tbW9uLkxPR0xFVkVMX0ZJ
TkUpOgorICAgICAgICByZWNlaXZlX3N0YXJ0ID0gdGltZS50aW1lKCkKKworICAgIHJhd19wYXls
b2FkX2J5dGVzID0gcmVjZWl2ZV9ieXRlcyhwYXlsb2FkX2xlbmd0aCkKKworICAgIGlmIGxvZ2dl
ci5pc0VuYWJsZWRGb3IoY29tbW9uLkxPR0xFVkVMX0ZJTkUpOgorICAgICAgICBsb2dnZXIubG9n
KAorICAgICAgICAgICAgY29tbW9uLkxPR0xFVkVMX0ZJTkUsCisgICAgICAgICAgICAnRG9uZSBy
ZWNlaXZpbmcgcGF5bG9hZCBkYXRhIGF0ICVzIE1CL3MnLAorICAgICAgICAgICAgcGF5bG9hZF9s
ZW5ndGggLyAodGltZS50aW1lKCkgLSByZWNlaXZlX3N0YXJ0KSAvIDEwMDAgLyAxMDAwKQorICAg
IGxvZ2dlci5sb2coY29tbW9uLkxPR0xFVkVMX0ZJTkUsICdVbm1hc2sgcGF5bG9hZCBkYXRhJykK
KworICAgIGlmIGxvZ2dlci5pc0VuYWJsZWRGb3IoY29tbW9uLkxPR0xFVkVMX0ZJTkUpOgorICAg
ICAgICB1bm1hc2tfc3RhcnQgPSB0aW1lLnRpbWUoKQorCisgICAgdW5tYXNrZWRfYnl0ZXMgPSBt
YXNrZXIubWFzayhyYXdfcGF5bG9hZF9ieXRlcykKKworICAgIGlmIGxvZ2dlci5pc0VuYWJsZWRG
b3IoY29tbW9uLkxPR0xFVkVMX0ZJTkUpOgorICAgICAgICBsb2dnZXIubG9nKAorICAgICAgICAg
ICAgY29tbW9uLkxPR0xFVkVMX0ZJTkUsCisgICAgICAgICAgICAnRG9uZSB1bm1hc2tpbmcgcGF5
bG9hZCBkYXRhIGF0ICVzIE1CL3MnLAorICAgICAgICAgICAgcGF5bG9hZF9sZW5ndGggLyAodGlt
ZS50aW1lKCkgLSB1bm1hc2tfc3RhcnQpIC8gMTAwMCAvIDEwMDApCisKKyAgICByZXR1cm4gb3Bj
b2RlLCB1bm1hc2tlZF9ieXRlcywgZmluLCByc3YxLCByc3YyLCByc3YzCisKKworY2xhc3MgRnJh
Z21lbnRlZEZyYW1lQnVpbGRlcihvYmplY3QpOgorICAgICIiIkEgc3RhdGVmdWwgY2xhc3MgdG8g
c2VuZCBhIG1lc3NhZ2UgYXMgZnJhZ21lbnRzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IG1hc2ssIGZyYW1lX2ZpbHRlcnM9W10sIGVuY29kZV91dGY4PVRydWUpOgorICAgICAgICAiIiJD
b25zdHJ1Y3RzIGFuIGluc3RhbmNlLiIiIgorCisgICAgICAgIHNlbGYuX21hc2sgPSBtYXNrCisg
ICAgICAgIHNlbGYuX2ZyYW1lX2ZpbHRlcnMgPSBmcmFtZV9maWx0ZXJzCisgICAgICAgICMgVGhp
cyBpcyBmb3Igc2tpcHBpbmcgVVRGLTggZW5jb2Rpbmcgd2hlbiBidWlsZGluZyB0ZXh0IHR5cGUg
ZnJhbWVzCisgICAgICAgICMgZnJvbSBjb21wcmVzc2VkIGRhdGEuCisgICAgICAgIHNlbGYuX2Vu
Y29kZV91dGY4ID0gZW5jb2RlX3V0ZjgKKworICAgICAgICBzZWxmLl9zdGFydGVkID0gRmFsc2UK
KworICAgICAgICAjIEhvbGQgb3Bjb2RlIG9mIHRoZSBmaXJzdCBmcmFtZSBpbiBtZXNzYWdlcyB0
byB2ZXJpZnkgdHlwZXMgb2Ygb3RoZXIKKyAgICAgICAgIyBmcmFtZXMgaW4gdGhlIG1lc3NhZ2Ug
YXJlIGFsbCB0aGUgc2FtZS4KKyAgICAgICAgc2VsZi5fb3Bjb2RlID0gY29tbW9uLk9QQ09ERV9U
RVhUCisKKyAgICBkZWYgYnVpbGQoc2VsZiwgcGF5bG9hZF9kYXRhLCBlbmQsIGJpbmFyeSk6Cisg
ICAgICAgIGlmIGJpbmFyeToKKyAgICAgICAgICAgIGZyYW1lX3R5cGUgPSBjb21tb24uT1BDT0RF
X0JJTkFSWQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJhbWVfdHlwZSA9IGNvbW1vbi5P
UENPREVfVEVYVAorICAgICAgICBpZiBzZWxmLl9zdGFydGVkOgorICAgICAgICAgICAgaWYgc2Vs
Zi5fb3Bjb2RlICE9IGZyYW1lX3R5cGU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cignTWVzc2FnZSB0eXBlcyBhcmUgZGlmZmVyZW50IGluIGZyYW1lcyBmb3IgJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBzYW1lIG1lc3NhZ2UnKQorICAgICAgICAgICAg
b3Bjb2RlID0gY29tbW9uLk9QQ09ERV9DT05USU5VQVRJT04KKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIG9wY29kZSA9IGZyYW1lX3R5cGUKKyAgICAgICAgICAgIHNlbGYuX29wY29kZSA9IGZy
YW1lX3R5cGUKKworICAgICAgICBpZiBlbmQ6CisgICAgICAgICAgICBzZWxmLl9zdGFydGVkID0g
RmFsc2UKKyAgICAgICAgICAgIGZpbiA9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuX3N0YXJ0ZWQgPSBUcnVlCisgICAgICAgICAgICBmaW4gPSAwCisKKyAgICAgICAgaWYgYmlu
YXJ5IG9yIG5vdCBzZWxmLl9lbmNvZGVfdXRmODoKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVf
YmluYXJ5X2ZyYW1lKAorICAgICAgICAgICAgICAgIHBheWxvYWRfZGF0YSwgb3Bjb2RlLCBmaW4s
IHNlbGYuX21hc2ssIHNlbGYuX2ZyYW1lX2ZpbHRlcnMpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlX3RleHRfZnJhbWUoCisgICAgICAgICAgICAgICAgcGF5bG9hZF9k
YXRhLCBvcGNvZGUsIGZpbiwgc2VsZi5fbWFzaywgc2VsZi5fZnJhbWVfZmlsdGVycykKKworCitk
ZWYgX2NyZWF0ZV9jb250cm9sX2ZyYW1lKG9wY29kZSwgYm9keSwgbWFzaywgZnJhbWVfZmlsdGVy
cyk6CisgICAgZnJhbWUgPSBGcmFtZShvcGNvZGU9b3Bjb2RlLCBwYXlsb2FkPWJvZHkpCisKKyAg
ICBmb3IgZnJhbWVfZmlsdGVyIGluIGZyYW1lX2ZpbHRlcnM6CisgICAgICAgIGZyYW1lX2ZpbHRl
ci5maWx0ZXIoZnJhbWUpCisKKyAgICBpZiBsZW4oZnJhbWUucGF5bG9hZCkgPiAxMjU6CisgICAg
ICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICdQYXlsb2FkIGRh
dGEgc2l6ZSBvZiBjb250cm9sIGZyYW1lcyBtdXN0IGJlIDEyNSBieXRlcyBvciBsZXNzJykKKwor
ICAgIGhlYWRlciA9IGNyZWF0ZV9oZWFkZXIoCisgICAgICAgIGZyYW1lLm9wY29kZSwgbGVuKGZy
YW1lLnBheWxvYWQpLCBmcmFtZS5maW4sCisgICAgICAgIGZyYW1lLnJzdjEsIGZyYW1lLnJzdjIs
IGZyYW1lLnJzdjMsIG1hc2spCisgICAgcmV0dXJuIF9idWlsZF9mcmFtZShoZWFkZXIsIGZyYW1l
LnBheWxvYWQsIG1hc2spCisKKworZGVmIGNyZWF0ZV9waW5nX2ZyYW1lKGJvZHksIG1hc2s9RmFs
c2UsIGZyYW1lX2ZpbHRlcnM9W10pOgorICAgIHJldHVybiBfY3JlYXRlX2NvbnRyb2xfZnJhbWUo
Y29tbW9uLk9QQ09ERV9QSU5HLCBib2R5LCBtYXNrLCBmcmFtZV9maWx0ZXJzKQorCisKK2RlZiBj
cmVhdGVfcG9uZ19mcmFtZShib2R5LCBtYXNrPUZhbHNlLCBmcmFtZV9maWx0ZXJzPVtdKToKKyAg
ICByZXR1cm4gX2NyZWF0ZV9jb250cm9sX2ZyYW1lKGNvbW1vbi5PUENPREVfUE9ORywgYm9keSwg
bWFzaywgZnJhbWVfZmlsdGVycykKKworCitkZWYgY3JlYXRlX2Nsb3NlX2ZyYW1lKGJvZHksIG1h
c2s9RmFsc2UsIGZyYW1lX2ZpbHRlcnM9W10pOgorICAgIHJldHVybiBfY3JlYXRlX2NvbnRyb2xf
ZnJhbWUoCisgICAgICAgIGNvbW1vbi5PUENPREVfQ0xPU0UsIGJvZHksIG1hc2ssIGZyYW1lX2Zp
bHRlcnMpCisKKworZGVmIGNyZWF0ZV9jbG9zaW5nX2hhbmRzaGFrZV9ib2R5KGNvZGUsIHJlYXNv
bik6CisgICAgYm9keSA9ICcnCisgICAgaWYgY29kZSBpcyBub3QgTm9uZToKKyAgICAgICAgaWYg
KGNvZGUgPiBjb21tb24uU1RBVFVTX1VTRVJfUFJJVkFURV9NQVggb3IKKyAgICAgICAgICAgIGNv
ZGUgPCBjb21tb24uU1RBVFVTX05PUk1BTF9DTE9TVVJFKToKKyAgICAgICAgICAgIHJhaXNlIEJh
ZE9wZXJhdGlvbkV4Y2VwdGlvbignU3RhdHVzIGNvZGUgaXMgb3V0IG9mIHJhbmdlJykKKyAgICAg
ICAgaWYgKGNvZGUgPT0gY29tbW9uLlNUQVRVU19OT19TVEFUVVNfUkVDRUlWRUQgb3IKKyAgICAg
ICAgICAgIGNvZGUgPT0gY29tbW9uLlNUQVRVU19BQk5PUk1BTF9DTE9TVVJFIG9yCisgICAgICAg
ICAgICBjb2RlID09IGNvbW1vbi5TVEFUVVNfVExTX0hBTkRTSEFLRSk6CisgICAgICAgICAgICBy
YWlzZSBCYWRPcGVyYXRpb25FeGNlcHRpb24oJ1N0YXR1cyBjb2RlIGlzIHJlc2VydmVkIHBzZXVk
byAnCisgICAgICAgICAgICAgICAgJ2NvZGUnKQorICAgICAgICBlbmNvZGVkX3JlYXNvbiA9IHJl
YXNvbi5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgYm9keSA9IHN0cnVjdC5wYWNrKCchSCcsIGNv
ZGUpICsgZW5jb2RlZF9yZWFzb24KKyAgICByZXR1cm4gYm9keQorCisKK2NsYXNzIFN0cmVhbU9w
dGlvbnMob2JqZWN0KToKKyAgICAiIiJIb2xkcyBvcHRpb24gdmFsdWVzIHRvIGNvbmZpZ3VyZSBT
dHJlYW0gb2JqZWN0cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgIiIi
Q29uc3RydWN0cyBTdHJlYW1PcHRpb25zLiIiIgorCisgICAgICAgICMgRmlsdGVycyBhcHBsaWVk
IHRvIGZyYW1lcy4KKyAgICAgICAgc2VsZi5vdXRnb2luZ19mcmFtZV9maWx0ZXJzID0gW10KKyAg
ICAgICAgc2VsZi5pbmNvbWluZ19mcmFtZV9maWx0ZXJzID0gW10KKworICAgICAgICAjIEZpbHRl
cnMgYXBwbGllZCB0byBtZXNzYWdlcy4gQ29udHJvbCBmcmFtZXMgYXJlIG5vdCBhZmZlY3RlZCBi
eSB0aGVtLgorICAgICAgICBzZWxmLm91dGdvaW5nX21lc3NhZ2VfZmlsdGVycyA9IFtdCisgICAg
ICAgIHNlbGYuaW5jb21pbmdfbWVzc2FnZV9maWx0ZXJzID0gW10KKworICAgICAgICBzZWxmLmVu
Y29kZV90ZXh0X21lc3NhZ2VfdG9fdXRmOCA9IFRydWUKKyAgICAgICAgc2VsZi5tYXNrX3NlbmQg
PSBGYWxzZQorICAgICAgICBzZWxmLnVubWFza19yZWNlaXZlID0gVHJ1ZQorCisKK2NsYXNzIFN0
cmVhbShTdHJlYW1CYXNlKToKKyAgICAiIiJBIGNsYXNzIGZvciBwYXJzaW5nL2J1aWxkaW5nIGZy
YW1lcyBvZiB0aGUgV2ViU29ja2V0IHByb3RvY29sCisgICAgKFJGQyA2NDU1KS4KKyAgICAiIiIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0LCBvcHRpb25zKToKKyAgICAgICAgIiIi
Q29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVx
dWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAiIiIKKworICAgICAgICBTdHJlYW1C
YXNlLl9faW5pdF9fKHNlbGYsIHJlcXVlc3QpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gdXRp
bC5nZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlv
bnMKKworICAgICAgICBzZWxmLl9yZXF1ZXN0LmNsaWVudF90ZXJtaW5hdGVkID0gRmFsc2UKKyAg
ICAgICAgc2VsZi5fcmVxdWVzdC5zZXJ2ZXJfdGVybWluYXRlZCA9IEZhbHNlCisKKyAgICAgICAg
IyBIb2xkcyBib2R5IG9mIHJlY2VpdmVkIGZyYWdtZW50cy4KKyAgICAgICAgc2VsZi5fcmVjZWl2
ZWRfZnJhZ21lbnRzID0gW10KKyAgICAgICAgIyBIb2xkcyB0aGUgb3Bjb2RlIG9mIHRoZSBmaXJz
dCBmcmFnbWVudC4KKyAgICAgICAgc2VsZi5fb3JpZ2luYWxfb3Bjb2RlID0gTm9uZQorCisgICAg
ICAgIHNlbGYuX3dyaXRlciA9IEZyYWdtZW50ZWRGcmFtZUJ1aWxkZXIoCisgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zLm1hc2tfc2VuZCwgc2VsZi5fb3B0aW9ucy5vdXRnb2luZ19mcmFtZV9maWx0
ZXJzLAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5lbmNvZGVfdGV4dF9tZXNzYWdlX3RvX3V0
ZjgpCisKKyAgICAgICAgc2VsZi5fcGluZ19xdWV1ZSA9IGRlcXVlKCkKKworICAgIGRlZiBfcmVj
ZWl2ZV9mcmFtZShzZWxmKToKKyAgICAgICAgIiIiUmVjZWl2ZXMgYSBmcmFtZSBhbmQgcmV0dXJu
IGRhdGEgaW4gdGhlIGZyYW1lIGFzIGEgdHVwbGUgY29udGFpbmluZworICAgICAgICBlYWNoIGhl
YWRlciBmaWVsZCBhbmQgcGF5bG9hZCBzZXBhcmF0ZWx5LgorCisgICAgICAgIFJhaXNlczoKKyAg
ICAgICAgICAgIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uOiB3aGVuIHJlYWQgcmV0dXJu
cyBlbXB0eQorICAgICAgICAgICAgICAgIHN0cmluZy4KKyAgICAgICAgICAgIEludmFsaWRGcmFt
ZUV4Y2VwdGlvbjogd2hlbiB0aGUgZnJhbWUgY29udGFpbnMgaW52YWxpZCBkYXRhLgorICAgICAg
ICAiIiIKKworICAgICAgICBkZWYgX3JlY2VpdmVfYnl0ZXMobGVuZ3RoKToKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLnJlY2VpdmVfYnl0ZXMobGVuZ3RoKQorCisgICAgICAgIHJldHVybiBwYXJz
ZV9mcmFtZShyZWNlaXZlX2J5dGVzPV9yZWNlaXZlX2J5dGVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9nZ2VyPXNlbGYuX2xvZ2dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdzX3ZlcnNpb249c2VsZi5fcmVxdWVzdC53c192ZXJzaW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5tYXNrX3JlY2VpdmU9c2VsZi5fb3B0aW9ucy51bm1hc2tfcmVjZWl2ZSkKKwor
ICAgIGRlZiBfcmVjZWl2ZV9mcmFtZV9hc19mcmFtZV9vYmplY3Qoc2VsZik6CisgICAgICAgIG9w
Y29kZSwgdW5tYXNrZWRfYnl0ZXMsIGZpbiwgcnN2MSwgcnN2MiwgcnN2MyA9IHNlbGYuX3JlY2Vp
dmVfZnJhbWUoKQorCisgICAgICAgIHJldHVybiBGcmFtZShmaW49ZmluLCByc3YxPXJzdjEsIHJz
djI9cnN2MiwgcnN2Mz1yc3YzLAorICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlPW9wY29kZSwg
cGF5bG9hZD11bm1hc2tlZF9ieXRlcykKKworICAgIGRlZiByZWNlaXZlX2ZpbHRlcmVkX2ZyYW1l
KHNlbGYpOgorICAgICAgICAiIiJSZWNlaXZlcyBhIGZyYW1lIGFuZCBhcHBsaWVzIGZyYW1lIGZp
bHRlcnMgYW5kIG1lc3NhZ2UgZmlsdGVycy4KKyAgICAgICAgVGhlIGZyYW1lIHRvIGJlIHJlY2Vp
dmVkIG11c3Qgc2F0aXNmeSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAgICAgICAgLSBUaGUgZnJh
bWUgaXMgbm90IGZyYWdtZW50ZWQuCisgICAgICAgIC0gVGhlIG9wY29kZSBvZiB0aGUgZnJhbWUg
aXMgVEVYVCBvciBCSU5BUlkuCisKKyAgICAgICAgRE8gTk9UIFVTRSB0aGlzIG1ldGhvZCBleGNl
cHQgZm9yIHRlc3RpbmcgcHVycG9zZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZnJhbWUgPSBz
ZWxmLl9yZWNlaXZlX2ZyYW1lX2FzX2ZyYW1lX29iamVjdCgpCisgICAgICAgIGlmIG5vdCBmcmFt
ZS5maW46CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkRnJhbWVFeGNlcHRpb24oCisgICAgICAg
ICAgICAgICAgJ1NlZ21lbnRlZCBmcmFtZXMgbXVzdCBub3QgYmUgcmVjZWl2ZWQgdmlhICcKKyAg
ICAgICAgICAgICAgICAncmVjZWl2ZV9maWx0ZXJlZF9mcmFtZSgpJykKKyAgICAgICAgaWYgKGZy
YW1lLm9wY29kZSAhPSBjb21tb24uT1BDT0RFX1RFWFQgYW5kCisgICAgICAgICAgICBmcmFtZS5v
cGNvZGUgIT0gY29tbW9uLk9QQ09ERV9CSU5BUlkpOgorICAgICAgICAgICAgcmFpc2UgSW52YWxp
ZEZyYW1lRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdDb250cm9sIGZyYW1lcyBtdXN0IG5v
dCBiZSByZWNlaXZlZCB2aWEgJworICAgICAgICAgICAgICAgICdyZWNlaXZlX2ZpbHRlcmVkX2Zy
YW1lKCknKQorCisgICAgICAgIGZvciBmcmFtZV9maWx0ZXIgaW4gc2VsZi5fb3B0aW9ucy5pbmNv
bWluZ19mcmFtZV9maWx0ZXJzOgorICAgICAgICAgICAgZnJhbWVfZmlsdGVyLmZpbHRlcihmcmFt
ZSkKKyAgICAgICAgZm9yIG1lc3NhZ2VfZmlsdGVyIGluIHNlbGYuX29wdGlvbnMuaW5jb21pbmdf
bWVzc2FnZV9maWx0ZXJzOgorICAgICAgICAgICAgZnJhbWUucGF5bG9hZCA9IG1lc3NhZ2VfZmls
dGVyLmZpbHRlcihmcmFtZS5wYXlsb2FkKQorICAgICAgICByZXR1cm4gZnJhbWUKKworICAgIGRl
ZiBzZW5kX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgZW5kPVRydWUsIGJpbmFyeT1GYWxzZSk6Cisg
ICAgICAgICIiIlNlbmQgbWVzc2FnZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbWVz
c2FnZTogdGV4dCBpbiB1bmljb2RlIG9yIGJpbmFyeSBpbiBzdHIgdG8gc2VuZC4KKyAgICAgICAg
ICAgIGJpbmFyeTogc2VuZCBtZXNzYWdlIGFzIGJpbmFyeSBmcmFtZS4KKworICAgICAgICBSYWlz
ZXM6CisgICAgICAgICAgICBCYWRPcGVyYXRpb25FeGNlcHRpb246IHdoZW4gY2FsbGVkIG9uIGEg
c2VydmVyLXRlcm1pbmF0ZWQKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIGNhbGxlZCB3
aXRoIGluY29uc2lzdGVudCBtZXNzYWdlIHR5cGUgb3IKKyAgICAgICAgICAgICAgICBiaW5hcnkg
cGFyYW1ldGVyLgorICAgICAgICAiIiIKKworICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LnNlcnZl
cl90ZXJtaW5hdGVkOgorICAgICAgICAgICAgcmFpc2UgQmFkT3BlcmF0aW9uRXhjZXB0aW9uKAor
ICAgICAgICAgICAgICAgICdSZXF1ZXN0ZWQgc2VuZF9tZXNzYWdlIGFmdGVyIHNlbmRpbmcgb3V0
IGEgY2xvc2luZyBoYW5kc2hha2UnKQorCisgICAgICAgIGlmIGJpbmFyeSBhbmQgaXNpbnN0YW5j
ZShtZXNzYWdlLCB1bmljb2RlKToKKyAgICAgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2Vw
dGlvbigKKyAgICAgICAgICAgICAgICAnTWVzc2FnZSBmb3IgYmluYXJ5IGZyYW1lIG11c3QgYmUg
aW5zdGFuY2Ugb2Ygc3RyJykKKworICAgICAgICBmb3IgbWVzc2FnZV9maWx0ZXIgaW4gc2VsZi5f
b3B0aW9ucy5vdXRnb2luZ19tZXNzYWdlX2ZpbHRlcnM6CisgICAgICAgICAgICBtZXNzYWdlID0g
bWVzc2FnZV9maWx0ZXIuZmlsdGVyKG1lc3NhZ2UsIGVuZCwgYmluYXJ5KQorCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgICMgU2V0IHRoaXMgdG8gYW55IHBvc2l0aXZlIGludGVnZXIgdG8gbGlt
aXQgbWF4aW11bSBzaXplIG9mIGRhdGEgaW4KKyAgICAgICAgICAgICMgcGF5bG9hZCBkYXRhIG9m
IGVhY2ggZnJhbWUuCisgICAgICAgICAgICBNQVhfUEFZTE9BRF9EQVRBX1NJWkUgPSAtMQorCisg
ICAgICAgICAgICBpZiBNQVhfUEFZTE9BRF9EQVRBX1NJWkUgPD0gMDoKKyAgICAgICAgICAgICAg
ICBzZWxmLl93cml0ZShzZWxmLl93cml0ZXIuYnVpbGQobWVzc2FnZSwgZW5kLCBiaW5hcnkpKQor
ICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBieXRlc193cml0dGVuID0gMAor
ICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBlbmRfZm9yX3RoaXNfZnJh
bWUgPSBlbmQKKyAgICAgICAgICAgICAgICBieXRlc190b193cml0ZSA9IGxlbihtZXNzYWdlKSAt
IGJ5dGVzX3dyaXR0ZW4KKyAgICAgICAgICAgICAgICBpZiAoTUFYX1BBWUxPQURfREFUQV9TSVpF
ID4gMCBhbmQKKyAgICAgICAgICAgICAgICAgICAgYnl0ZXNfdG9fd3JpdGUgPiBNQVhfUEFZTE9B
RF9EQVRBX1NJWkUpOgorICAgICAgICAgICAgICAgICAgICBlbmRfZm9yX3RoaXNfZnJhbWUgPSBG
YWxzZQorICAgICAgICAgICAgICAgICAgICBieXRlc190b193cml0ZSA9IE1BWF9QQVlMT0FEX0RB
VEFfU0laRQorCisgICAgICAgICAgICAgICAgZnJhbWUgPSBzZWxmLl93cml0ZXIuYnVpbGQoCisg
ICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VbYnl0ZXNfd3JpdHRlbjpieXRlc193cml0dGVuICsg
Ynl0ZXNfdG9fd3JpdGVdLAorICAgICAgICAgICAgICAgICAgICBlbmRfZm9yX3RoaXNfZnJhbWUs
CisgICAgICAgICAgICAgICAgICAgIGJpbmFyeSkKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0
ZShmcmFtZSkKKworICAgICAgICAgICAgICAgIGJ5dGVzX3dyaXR0ZW4gKz0gYnl0ZXNfdG9fd3Jp
dGUKKworICAgICAgICAgICAgICAgICMgVGhpcyBpZiBtdXN0IGJlIHBsYWNlZCBoZXJlICh0aGUg
ZW5kIG9mIHdoaWxlIGJsb2NrKSBzbyB0aGF0CisgICAgICAgICAgICAgICAgIyBhdCBsZWFzdCBv
bmUgZnJhbWUgaXMgc2VudC4KKyAgICAgICAgICAgICAgICBpZiBsZW4obWVzc2FnZSkgPD0gYnl0
ZXNfd3JpdHRlbjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZXhjZXB0IFZh
bHVlRXJyb3IsIGU6CisgICAgICAgICAgICByYWlzZSBCYWRPcGVyYXRpb25FeGNlcHRpb24oZSkK
KworICAgIGRlZiBfZ2V0X21lc3NhZ2VfZnJvbV9mcmFtZShzZWxmLCBmcmFtZSk6CisgICAgICAg
ICIiIkdldHMgYSBtZXNzYWdlIGZyb20gZnJhbWUuIElmIHRoZSBtZXNzYWdlIGlzIGNvbXBvc2Vk
IG9mIGZyYWdtZW50ZWQKKyAgICAgICAgZnJhbWVzIGFuZCB0aGUgZnJhbWUgaXMgbm90IHRoZSBs
YXN0IGZyYWdtZW50ZWQgZnJhbWUsIHRoaXMgbWV0aG9kCisgICAgICAgIHJldHVybnMgTm9uZS4g
VGhlIHdob2xlIG1lc3NhZ2Ugd2lsbCBiZSByZXR1cm5lZCB3aGVuIHRoZSBsYXN0CisgICAgICAg
IGZyYWdtZW50ZWQgZnJhbWUgaXMgcGFzc2VkIHRvIHRoaXMgbWV0aG9kLgorCisgICAgICAgIFJh
aXNlczoKKyAgICAgICAgICAgIEludmFsaWRGcmFtZUV4Y2VwdGlvbjogd2hlbiB0aGUgZnJhbWUg
ZG9lc24ndCBtYXRjaCBkZWZyYWdtZW50YXRpb24KKyAgICAgICAgICAgICAgICBjb250ZXh0LCBv
ciB0aGUgZnJhbWUgY29udGFpbnMgaW52YWxpZCBkYXRhLgorICAgICAgICAiIiIKKworICAgICAg
ICBpZiBmcmFtZS5vcGNvZGUgPT0gY29tbW9uLk9QQ09ERV9DT05USU5VQVRJT046CisgICAgICAg
ICAgICBpZiBub3Qgc2VsZi5fcmVjZWl2ZWRfZnJhZ21lbnRzOgorICAgICAgICAgICAgICAgIGlm
IGZyYW1lLmZpbjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZyYW1lRXhjZXB0
aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgJ1JlY2VpdmVkIGEgdGVybWluYXRpb24gZnJh
bWUgYnV0IGZyYWdtZW50YXRpb24gJworICAgICAgICAgICAgICAgICAgICAgICAgJ25vdCBzdGFy
dGVkJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJ
bnZhbGlkRnJhbWVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAnUmVjZWl2ZWQg
YW4gaW50ZXJtZWRpYXRlIGZyYW1lIGJ1dCAnCisgICAgICAgICAgICAgICAgICAgICAgICAnZnJh
Z21lbnRhdGlvbiBub3Qgc3RhcnRlZCcpCisKKyAgICAgICAgICAgIGlmIGZyYW1lLmZpbjoKKyAg
ICAgICAgICAgICAgICAjIEVuZCBvZiBmcmFnbWVudGF0aW9uIGZyYW1lCisgICAgICAgICAgICAg
ICAgc2VsZi5fcmVjZWl2ZWRfZnJhZ21lbnRzLmFwcGVuZChmcmFtZS5wYXlsb2FkKQorICAgICAg
ICAgICAgICAgIG1lc3NhZ2UgPSAnJy5qb2luKHNlbGYuX3JlY2VpdmVkX2ZyYWdtZW50cykKKyAg
ICAgICAgICAgICAgICBzZWxmLl9yZWNlaXZlZF9mcmFnbWVudHMgPSBbXQorICAgICAgICAgICAg
ICAgIHJldHVybiBtZXNzYWdlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMg
SW50ZXJtZWRpYXRlIGZyYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fcmVjZWl2ZWRfZnJhZ21l
bnRzLmFwcGVuZChmcmFtZS5wYXlsb2FkKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLl9yZWNlaXZlZF9mcmFnbWVudHM6Cisg
ICAgICAgICAgICAgICAgaWYgZnJhbWUuZmluOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJ
bnZhbGlkRnJhbWVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAnUmVjZWl2ZWQg
YW4gdW5mcmFnbWVudGVkIGZyYW1lIHdpdGhvdXQgJworICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlcm1pbmF0aW5nIGV4aXN0aW5nIGZyYWdtZW50YXRpb24nKQorICAgICAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEludmFsaWRGcmFtZUV4Y2VwdGlvbigKKyAg
ICAgICAgICAgICAgICAgICAgICAgICdOZXcgZnJhZ21lbnRhdGlvbiBzdGFydGVkIHdpdGhvdXQg
dGVybWluYXRpbmcgJworICAgICAgICAgICAgICAgICAgICAgICAgJ2V4aXN0aW5nIGZyYWdtZW50
YXRpb24nKQorCisgICAgICAgICAgICBpZiBmcmFtZS5maW46CisgICAgICAgICAgICAgICAgIyBV
bmZyYWdtZW50ZWQgZnJhbWUKKworICAgICAgICAgICAgICAgIHNlbGYuX29yaWdpbmFsX29wY29k
ZSA9IGZyYW1lLm9wY29kZQorICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZS5wYXlsb2FkCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU3RhcnQgb2YgZnJhZ21lbnRhdGlv
biBmcmFtZQorCisgICAgICAgICAgICAgICAgaWYgY29tbW9uLmlzX2NvbnRyb2xfb3Bjb2RlKGZy
YW1lLm9wY29kZSk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEludmFsaWRGcmFtZUV4Y2Vw
dGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICdDb250cm9sIGZyYW1lcyBtdXN0IG5vdCBi
ZSBmcmFnbWVudGVkJykKKworICAgICAgICAgICAgICAgIHNlbGYuX29yaWdpbmFsX29wY29kZSA9
IGZyYW1lLm9wY29kZQorICAgICAgICAgICAgICAgIHNlbGYuX3JlY2VpdmVkX2ZyYWdtZW50cy5h
cHBlbmQoZnJhbWUucGF5bG9hZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAg
ZGVmIF9wcm9jZXNzX2Nsb3NlX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICIiIlBy
b2Nlc3NlcyBjbG9zZSBtZXNzYWdlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBtZXNz
YWdlOiBjbG9zZSBtZXNzYWdlLgorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIEludmFs
aWRGcmFtZUV4Y2VwdGlvbjogd2hlbiB0aGUgbWVzc2FnZSBpcyBpbnZhbGlkLgorICAgICAgICAi
IiIKKworICAgICAgICBzZWxmLl9yZXF1ZXN0LmNsaWVudF90ZXJtaW5hdGVkID0gVHJ1ZQorCisg
ICAgICAgICMgU3RhdHVzIGNvZGUgaXMgb3B0aW9uYWwuIFdlIGNhbiBoYXZlIHN0YXR1cyByZWFz
b24gb25seSBpZiB3ZQorICAgICAgICAjIGhhdmUgc3RhdHVzIGNvZGUuIFN0YXR1cyByZWFzb24g
Y2FuIGJlIGVtcHR5IHN0cmluZy4gU28sCisgICAgICAgICMgYWxsb3dlZCBjYXNlcyBhcmUKKyAg
ICAgICAgIyAtIG5vIGFwcGxpY2F0aW9uIGRhdGE6IG5vIGNvZGUgbm8gcmVhc29uCisgICAgICAg
ICMgLSAyIG9jdGV0IG9mIGFwcGxpY2F0aW9uIGRhdGE6IGhhcyBjb2RlIGJ1dCBubyByZWFzb24K
KyAgICAgICAgIyAtIDMgb3IgbW9yZSBvY3RldCBvZiBhcHBsaWNhdGlvbiBkYXRhOiBib3RoIGNv
ZGUgYW5kIHJlYXNvbgorICAgICAgICBpZiBsZW4obWVzc2FnZSkgPT0gMDoKKyAgICAgICAgICAg
IHNlbGYuX2xvZ2dlci5kZWJ1ZygnUmVjZWl2ZWQgY2xvc2UgZnJhbWUgKGVtcHR5IGJvZHkpJykK
KyAgICAgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfY2xvc2VfY29kZSA9ICgKKyAgICAgICAgICAg
ICAgICBjb21tb24uU1RBVFVTX05PX1NUQVRVU19SRUNFSVZFRCkKKyAgICAgICAgZWxpZiBsZW4o
bWVzc2FnZSkgPT0gMToKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRGcmFtZUV4Y2VwdGlvbigK
KyAgICAgICAgICAgICAgICAnSWYgYSBjbG9zZSBmcmFtZSBoYXMgc3RhdHVzIGNvZGUsIHRoZSBs
ZW5ndGggb2YgJworICAgICAgICAgICAgICAgICdzdGF0dXMgY29kZSBtdXN0IGJlIDIgb2N0ZXQn
KQorICAgICAgICBlbGlmIGxlbihtZXNzYWdlKSA+PSAyOgorICAgICAgICAgICAgc2VsZi5fcmVx
dWVzdC53c19jbG9zZV9jb2RlID0gc3RydWN0LnVucGFjaygKKyAgICAgICAgICAgICAgICAnIUgn
LCBtZXNzYWdlWzA6Ml0pWzBdCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2Nsb3NlX3Jl
YXNvbiA9IG1lc3NhZ2VbMjpdLmRlY29kZSgKKyAgICAgICAgICAgICAgICAndXRmLTgnLCAncmVw
bGFjZScpCisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAgICAg
J1JlY2VpdmVkIGNsb3NlIGZyYW1lIChjb2RlPSVkLCByZWFzb249JXIpJywKKyAgICAgICAgICAg
ICAgICBzZWxmLl9yZXF1ZXN0LndzX2Nsb3NlX2NvZGUsCisgICAgICAgICAgICAgICAgc2VsZi5f
cmVxdWVzdC53c19jbG9zZV9yZWFzb24pCisKKyAgICAgICAgIyBBcyB3ZSd2ZSByZWNlaXZlZCBh
IGNsb3NlIGZyYW1lLCBubyBtb3JlIGRhdGEgaXMgY29taW5nIG92ZXIgdGhlCisgICAgICAgICMg
c29ja2V0LiBXZSBjYW4gbm93IHNhZmVseSBjbG9zZSB0aGUgc29ja2V0IHdpdGhvdXQgd29ycnlp
bmcgYWJvdXQKKyAgICAgICAgIyBSU1Qgc2VuZGluZy4KKworICAgICAgICBpZiBzZWxmLl9yZXF1
ZXN0LnNlcnZlcl90ZXJtaW5hdGVkOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAor
ICAgICAgICAgICAgICAgICdSZWNlaXZlZCBhY2sgZm9yIHNlcnZlci1pbml0aWF0ZWQgY2xvc2lu
ZyBoYW5kc2hha2UnKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fbG9nZ2Vy
LmRlYnVnKAorICAgICAgICAgICAgJ1JlY2VpdmVkIGNsaWVudC1pbml0aWF0ZWQgY2xvc2luZyBo
YW5kc2hha2UnKQorCisgICAgICAgIGNvZGUgPSBjb21tb24uU1RBVFVTX05PUk1BTF9DTE9TVVJF
CisgICAgICAgIHJlYXNvbiA9ICcnCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fcmVxdWVzdCwg
J19kaXNwYXRjaGVyJyk6CisgICAgICAgICAgICBkaXNwYXRjaGVyID0gc2VsZi5fcmVxdWVzdC5f
ZGlzcGF0Y2hlcgorICAgICAgICAgICAgY29kZSwgcmVhc29uID0gZGlzcGF0Y2hlci5wYXNzaXZl
X2Nsb3NpbmdfaGFuZHNoYWtlKAorICAgICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QpCisgICAg
ICAgICAgICBpZiBjb2RlIGlzIE5vbmUgYW5kIHJlYXNvbiBpcyBub3QgTm9uZSBhbmQgbGVuKHJl
YXNvbikgPiAwOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci53YXJuaW5nKAorICAgICAg
ICAgICAgICAgICAgICAnSGFuZGxlciBzcGVjaWZpZWQgcmVhc29uIGRlc3BpdGUgY29kZSBiZWlu
ZyBOb25lJykKKyAgICAgICAgICAgICAgICByZWFzb24gPSAnJworICAgICAgICAgICAgaWYgcmVh
c29uIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmVhc29uID0gJycKKyAgICAgICAgc2VsZi5f
c2VuZF9jbG9zaW5nX2hhbmRzaGFrZShjb2RlLCByZWFzb24pCisgICAgICAgIHNlbGYuX2xvZ2dl
ci5kZWJ1ZygKKyAgICAgICAgICAgICdBY2tub3dsZWRnZWQgY2xvc2luZyBoYW5kc2hha2UgaW5p
dGlhdGVkIGJ5IHRoZSBwZWVyICcKKyAgICAgICAgICAgICcoY29kZT0lciwgcmVhc29uPSVyKScs
IGNvZGUsIHJlYXNvbikKKworICAgIGRlZiBfcHJvY2Vzc19waW5nX21lc3NhZ2Uoc2VsZiwgbWVz
c2FnZSk6CisgICAgICAgICIiIlByb2Nlc3NlcyBwaW5nIG1lc3NhZ2UuCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICAgIG1lc3NhZ2U6IHBpbmcgbWVzc2FnZS4KKyAgICAgICAgIiIiCisKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgaGFuZGxlciA9IHNlbGYuX3JlcXVlc3Qub25fcGluZ19o
YW5kbGVyCisgICAgICAgICAgICBpZiBoYW5kbGVyOgorICAgICAgICAgICAgICAgIGhhbmRsZXIo
c2VsZi5fcmVxdWVzdCwgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
ZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxm
Ll9zZW5kX3BvbmcobWVzc2FnZSkKKworICAgIGRlZiBfcHJvY2Vzc19wb25nX21lc3NhZ2Uoc2Vs
ZiwgbWVzc2FnZSk6CisgICAgICAgICIiIlByb2Nlc3NlcyBwb25nIG1lc3NhZ2UuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICAgIG1lc3NhZ2U6IHBvbmcgbWVzc2FnZS4KKyAgICAgICAgIiIi
CisKKyAgICAgICAgIyBUT0RPKHR5b3NoaW5vKTogQWRkIHBpbmcgdGltZW91dCBoYW5kbGluZy4K
KworICAgICAgICBpbmZsaWdodF9waW5ncyA9IGRlcXVlKCkKKworICAgICAgICB3aGlsZSBUcnVl
OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX2JvZHkgPSBzZWxm
Ll9waW5nX3F1ZXVlLnBvcGxlZnQoKQorICAgICAgICAgICAgICAgIGlmIGV4cGVjdGVkX2JvZHkg
PT0gbWVzc2FnZToKKyAgICAgICAgICAgICAgICAgICAgIyBpbmZsaWdodF9waW5ncyBjb250YWlu
cyBwaW5ncyBpZ25vcmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAjIG90aGVyIHBlZXIu
IEp1c3QgZm9yZ2V0IHRoZW0uCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1
ZygKKyAgICAgICAgICAgICAgICAgICAgICAgICdQaW5nICVyIGlzIGFja2VkICglZCBwaW5ncyB3
ZXJlIGlnbm9yZWQpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2JvZHksIGxl
bihpbmZsaWdodF9waW5ncykpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaW5mbGlnaHRfcGluZ3MuYXBwZW5kKGV4
cGVjdGVkX2JvZHkpCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvciwgZToKKyAgICAgICAg
ICAgICAgICAjIFRoZSByZWNlaXZlZCBwb25nIHdhcyB1bnNvbGljaXRlZCBwb25nLiBLZWVwIHRo
ZQorICAgICAgICAgICAgICAgICMgcGluZyBxdWV1ZSBhcyBpcy4KKyAgICAgICAgICAgICAgICBz
ZWxmLl9waW5nX3F1ZXVlID0gaW5mbGlnaHRfcGluZ3MKKyAgICAgICAgICAgICAgICBzZWxmLl9s
b2dnZXIuZGVidWcoJ1JlY2VpdmVkIGEgdW5zb2xpY2l0ZWQgcG9uZycpCisgICAgICAgICAgICAg
ICAgYnJlYWsKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBoYW5kbGVyID0gc2VsZi5fcmVx
dWVzdC5vbl9wb25nX2hhbmRsZXIKKyAgICAgICAgICAgIGlmIGhhbmRsZXI6CisgICAgICAgICAg
ICAgICAgaGFuZGxlcihzZWxmLl9yZXF1ZXN0LCBtZXNzYWdlKQorICAgICAgICBleGNlcHQgQXR0
cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgcmVjZWl2ZV9tZXNz
YWdlKHNlbGYpOgorICAgICAgICAiIiJSZWNlaXZlIGEgV2ViU29ja2V0IGZyYW1lIGFuZCByZXR1
cm4gaXRzIHBheWxvYWQgYXMgYSB0ZXh0IGluCisgICAgICAgIHVuaWNvZGUgb3IgYSBiaW5hcnkg
aW4gc3RyLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBwYXlsb2FkIGRhdGEgb2Yg
dGhlIGZyYW1lCisgICAgICAgICAgICAtIGFzIHVuaWNvZGUgaW5zdGFuY2UgaWYgcmVjZWl2ZWQg
dGV4dCBmcmFtZQorICAgICAgICAgICAgLSBhcyBzdHIgaW5zdGFuY2UgaWYgcmVjZWl2ZWQgYmlu
YXJ5IGZyYW1lCisgICAgICAgICAgICBvciBOb25lIGlmZiByZWNlaXZlZCBjbG9zaW5nIGhhbmRz
aGFrZS4KKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgQmFkT3BlcmF0aW9uRXhjZXB0aW9u
OiB3aGVuIGNhbGxlZCBvbiBhIGNsaWVudC10ZXJtaW5hdGVkCisgICAgICAgICAgICAgICAgY29u
bmVjdGlvbi4KKyAgICAgICAgICAgIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uOiB3aGVu
IHJlYWQgcmV0dXJucyBlbXB0eQorICAgICAgICAgICAgICAgIHN0cmluZy4KKyAgICAgICAgICAg
IEludmFsaWRGcmFtZUV4Y2VwdGlvbjogd2hlbiB0aGUgZnJhbWUgY29udGFpbnMgaW52YWxpZAor
ICAgICAgICAgICAgICAgIGRhdGEuCisgICAgICAgICAgICBVbnN1cHBvcnRlZEZyYW1lRXhjZXB0
aW9uOiB3aGVuIHRoZSByZWNlaXZlZCBmcmFtZSBoYXMKKyAgICAgICAgICAgICAgICBmbGFncywg
b3Bjb2RlIHdlIGNhbm5vdCBoYW5kbGUuIFlvdSBjYW4gaWdub3JlIHRoaXMKKyAgICAgICAgICAg
ICAgICBleGNlcHRpb24gYW5kIGNvbnRpbnVlIHJlY2VpdmluZyB0aGUgbmV4dCBmcmFtZS4KKyAg
ICAgICAgIiIiCisKKyAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC5jbGllbnRfdGVybWluYXRlZDoK
KyAgICAgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAg
ICAnUmVxdWVzdGVkIHJlY2VpdmVfbWVzc2FnZSBhZnRlciByZWNlaXZpbmcgYSBjbG9zaW5nICcK
KyAgICAgICAgICAgICAgICAnaGFuZHNoYWtlJykKKworICAgICAgICB3aGlsZSBUcnVlOgorICAg
ICAgICAgICAgIyBtcF9jb25uLnJlYWQgd2lsbCBibG9jayBpZiBubyBieXRlcyBhcmUgYXZhaWxh
YmxlLgorICAgICAgICAgICAgIyBUaW1lb3V0IGlzIGNvbnRyb2xsZWQgYnkgVGltZU91dCBkaXJl
Y3RpdmUgb2YgQXBhY2hlLgorCisgICAgICAgICAgICBmcmFtZSA9IHNlbGYuX3JlY2VpdmVfZnJh
bWVfYXNfZnJhbWVfb2JqZWN0KCkKKworICAgICAgICAgICAgIyBDaGVjayB0aGUgY29uc3RyYWlu
dCBvbiB0aGUgcGF5bG9hZCBzaXplIGZvciBjb250cm9sIGZyYW1lcworICAgICAgICAgICAgIyBi
ZWZvcmUgZXh0ZW5zaW9uIHByb2Nlc3NlcyB0aGUgZnJhbWUuCisgICAgICAgICAgICAjIFNlZSBh
bHNvIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTUjc2VjdGlvbi01LjUKKyAgICAg
ICAgICAgIGlmIChjb21tb24uaXNfY29udHJvbF9vcGNvZGUoZnJhbWUub3Bjb2RlKSBhbmQKKyAg
ICAgICAgICAgICAgICBsZW4oZnJhbWUucGF5bG9hZCkgPiAxMjUpOgorICAgICAgICAgICAgICAg
IHJhaXNlIEludmFsaWRGcmFtZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgJ1BheWxv
YWQgZGF0YSBzaXplIG9mIGNvbnRyb2wgZnJhbWVzIG11c3QgYmUgMTI1IGJ5dGVzIG9yICcKKyAg
ICAgICAgICAgICAgICAgICAgJ2xlc3MnKQorCisgICAgICAgICAgICBmb3IgZnJhbWVfZmlsdGVy
IGluIHNlbGYuX29wdGlvbnMuaW5jb21pbmdfZnJhbWVfZmlsdGVyczoKKyAgICAgICAgICAgICAg
ICBmcmFtZV9maWx0ZXIuZmlsdGVyKGZyYW1lKQorCisgICAgICAgICAgICBpZiBmcmFtZS5yc3Yx
IG9yIGZyYW1lLnJzdjIgb3IgZnJhbWUucnN2MzoKKyAgICAgICAgICAgICAgICByYWlzZSBVbnN1
cHBvcnRlZEZyYW1lRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAnVW5zdXBwb3J0ZWQg
ZmxhZyBpcyBzZXQgKHJzdiA9ICVkJWQlZCknICUKKyAgICAgICAgICAgICAgICAgICAgKGZyYW1l
LnJzdjEsIGZyYW1lLnJzdjIsIGZyYW1lLnJzdjMpKQorCisgICAgICAgICAgICBtZXNzYWdlID0g
c2VsZi5fZ2V0X21lc3NhZ2VfZnJvbV9mcmFtZShmcmFtZSkKKyAgICAgICAgICAgIGlmIG1lc3Nh
Z2UgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmb3Ig
bWVzc2FnZV9maWx0ZXIgaW4gc2VsZi5fb3B0aW9ucy5pbmNvbWluZ19tZXNzYWdlX2ZpbHRlcnM6
CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VfZmlsdGVyLmZpbHRlcihtZXNzYWdl
KQorCisgICAgICAgICAgICBpZiBzZWxmLl9vcmlnaW5hbF9vcGNvZGUgPT0gY29tbW9uLk9QQ09E
RV9URVhUOgorICAgICAgICAgICAgICAgICMgVGhlIFdlYlNvY2tldCBwcm90b2NvbCBzZWN0aW9u
IDQuNCBzcGVjaWZpZXMgdGhhdCBpbnZhbGlkCisgICAgICAgICAgICAgICAgIyBjaGFyYWN0ZXJz
IG11c3QgYmUgcmVwbGFjZWQgd2l0aCBVK2ZmZmQgUkVQTEFDRU1FTlQKKyAgICAgICAgICAgICAg
ICAjIENIQVJBQ1RFUi4KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBtZXNzYWdlLmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBV
bmljb2RlRGVjb2RlRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEludmFsaWRV
VEY4RXhjZXB0aW9uKGUpCisgICAgICAgICAgICBlbGlmIHNlbGYuX29yaWdpbmFsX29wY29kZSA9
PSBjb21tb24uT1BDT0RFX0JJTkFSWToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZQor
ICAgICAgICAgICAgZWxpZiBzZWxmLl9vcmlnaW5hbF9vcGNvZGUgPT0gY29tbW9uLk9QQ09ERV9D
TE9TRToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm9jZXNzX2Nsb3NlX21lc3NhZ2UobWVzc2Fn
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZWxpZiBzZWxmLl9v
cmlnaW5hbF9vcGNvZGUgPT0gY29tbW9uLk9QQ09ERV9QSU5HOgorICAgICAgICAgICAgICAgIHNl
bGYuX3Byb2Nlc3NfcGluZ19tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgICAgICBlbGlmIHNlbGYu
X29yaWdpbmFsX29wY29kZSA9PSBjb21tb24uT1BDT0RFX1BPTkc6CisgICAgICAgICAgICAgICAg
c2VsZi5fcHJvY2Vzc19wb25nX21lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRGcmFtZUV4Y2VwdGlvbigKKyAgICAgICAg
ICAgICAgICAgICAgJ09wY29kZSAlZCBpcyBub3Qgc3VwcG9ydGVkJyAlIHNlbGYuX29yaWdpbmFs
X29wY29kZSkKKworICAgIGRlZiBfc2VuZF9jbG9zaW5nX2hhbmRzaGFrZShzZWxmLCBjb2RlLCBy
ZWFzb24pOgorICAgICAgICBib2R5ID0gY3JlYXRlX2Nsb3NpbmdfaGFuZHNoYWtlX2JvZHkoY29k
ZSwgcmVhc29uKQorICAgICAgICBmcmFtZSA9IGNyZWF0ZV9jbG9zZV9mcmFtZSgKKyAgICAgICAg
ICAgIGJvZHksIG1hc2s9c2VsZi5fb3B0aW9ucy5tYXNrX3NlbmQsCisgICAgICAgICAgICBmcmFt
ZV9maWx0ZXJzPXNlbGYuX29wdGlvbnMub3V0Z29pbmdfZnJhbWVfZmlsdGVycykKKworICAgICAg
ICBzZWxmLl9yZXF1ZXN0LnNlcnZlcl90ZXJtaW5hdGVkID0gVHJ1ZQorCisgICAgICAgIHNlbGYu
X3dyaXRlKGZyYW1lKQorCisgICAgZGVmIGNsb3NlX2Nvbm5lY3Rpb24oc2VsZiwgY29kZT1jb21t
b24uU1RBVFVTX05PUk1BTF9DTE9TVVJFLCByZWFzb249JycsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgd2FpdF9yZXNwb25zZT1UcnVlKToKKyAgICAgICAgIiIiQ2xvc2VzIGEgV2ViU29ja2V0
IGNvbm5lY3Rpb24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGNvZGU6IFN0YXR1cyBj
b2RlIGZvciBjbG9zZSBmcmFtZS4gSWYgY29kZSBpcyBOb25lLCBhIGNsb3NlCisgICAgICAgICAg
ICAgICAgZnJhbWUgd2l0aCBlbXB0eSBib2R5IHdpbGwgYmUgc2VudC4KKyAgICAgICAgICAgIHJl
YXNvbjogc3RyaW5nIHJlcHJlc2VudGluZyBjbG9zZSByZWFzb24uCisgICAgICAgICAgICB3YWl0
X3Jlc3BvbnNlOiBUcnVlIHdoZW4gY2FsbGVyIHdhbnQgdG8gd2FpdCB0aGUgcmVzcG9uc2UuCisg
ICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbjogd2hlbiBy
ZWFzb24gaXMgc3BlY2lmaWVkIHdpdGggY29kZSBOb25lCisgICAgICAgICAgICBvciByZWFzb24g
aXMgbm90IGFuIGluc3RhbmNlIG9mIGJvdGggc3RyIGFuZCB1bmljb2RlLgorICAgICAgICAiIiIK
KworICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LnNlcnZlcl90ZXJtaW5hdGVkOgorICAgICAgICAg
ICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgICAgICdSZXF1ZXN0ZWQgY2xvc2Vf
Y29ubmVjdGlvbiBidXQgc2VydmVyIGlzIGFscmVhZHkgdGVybWluYXRlZCcpCisgICAgICAgICAg
ICByZXR1cm4KKworICAgICAgICBpZiBjb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiByZWFz
b24gaXMgbm90IE5vbmUgYW5kIGxlbihyZWFzb24pID4gMDoKKyAgICAgICAgICAgICAgICByYWlz
ZSBCYWRPcGVyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICdjbG9zZSByZWFz
b24gbXVzdCBub3QgYmUgc3BlY2lmaWVkIGlmIGNvZGUgaXMgTm9uZScpCisgICAgICAgICAgICBy
ZWFzb24gPSAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
cmVhc29uLCBzdHIpIGFuZCBub3QgaXNpbnN0YW5jZShyZWFzb24sIHVuaWNvZGUpOgorICAgICAg
ICAgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAg
ICAgJ2Nsb3NlIHJlYXNvbiBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIHN0ciBvciB1bmljb2RlJykK
KworICAgICAgICBzZWxmLl9zZW5kX2Nsb3NpbmdfaGFuZHNoYWtlKGNvZGUsIHJlYXNvbikKKyAg
ICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgJ0luaXRpYXRlZCBjbG9zaW5n
IGhhbmRzaGFrZSAoY29kZT0lciwgcmVhc29uPSVyKScsCisgICAgICAgICAgICBjb2RlLCByZWFz
b24pCisKKyAgICAgICAgaWYgKGNvZGUgPT0gY29tbW9uLlNUQVRVU19HT0lOR19BV0FZIG9yCisg
ICAgICAgICAgICBjb2RlID09IGNvbW1vbi5TVEFUVVNfUFJPVE9DT0xfRVJST1IpIG9yIG5vdCB3
YWl0X3Jlc3BvbnNlOgorICAgICAgICAgICAgIyBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gd2Fp
dCBmb3IgYSBjbG9zZSBmcmFtZSBpZiB0aGUgcmVhc29uIGlzCisgICAgICAgICAgICAjIHByb3Rv
Y29sIGVycm9yIG9yIHRoYXQgdGhlIHNlcnZlciBpcyBnb2luZyBhd2F5LiBGb3Igc29tZSBvZgor
ICAgICAgICAgICAgIyBvdGhlciByZWFzb25zLCBpdCBtaWdodCBub3QgbWFrZSBzZW5zZSB0byB3
YWl0IGZvciBhIGNsb3NlIGZyYW1lLAorICAgICAgICAgICAgIyBidXQgaXQncyBub3QgY2xlYXIs
IHlldC4KKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgVE9ETyh1a2FpKTogMi4gd2Fp
dCB1bnRpbCB0aGUgL2NsaWVudCB0ZXJtaW5hdGVkLyBmbGFnIGhhcyBiZWVuIHNldCwKKyAgICAg
ICAgIyBvciB1bnRpbCBhIHNlcnZlci1kZWZpbmVkIHRpbWVvdXQgZXhwaXJlcy4KKyAgICAgICAg
IworICAgICAgICAjIEZvciBub3csIHdlIGV4cGVjdCByZWNlaXZpbmcgY2xvc2luZyBoYW5kc2hh
a2UgcmlnaHQgYWZ0ZXIgc2VuZGluZworICAgICAgICAjIG91dCBjbG9zaW5nIGhhbmRzaGFrZS4K
KyAgICAgICAgbWVzc2FnZSA9IHNlbGYucmVjZWl2ZV9tZXNzYWdlKCkKKyAgICAgICAgaWYgbWVz
c2FnZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25UZXJtaW5hdGVk
RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdEaWRuXCd0IHJlY2VpdmUgdmFsaWQgYWNrIGZv
ciBjbG9zaW5nIGhhbmRzaGFrZScpCisgICAgICAgICMgVE9ETzogMy4gY2xvc2UgdGhlIFdlYlNv
Y2tldCBjb25uZWN0aW9uLgorICAgICAgICAjIG5vdGU6IG1vZF9weXRob24gQ29ubmVjdGlvbiAo
bXBfY29ubikgZG9lc24ndCBoYXZlIGNsb3NlIG1ldGhvZC4KKworICAgIGRlZiBzZW5kX3Bpbmco
c2VsZiwgYm9keT0nJyk6CisgICAgICAgIGZyYW1lID0gY3JlYXRlX3BpbmdfZnJhbWUoCisgICAg
ICAgICAgICBib2R5LAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5tYXNrX3NlbmQsCisgICAg
ICAgICAgICBzZWxmLl9vcHRpb25zLm91dGdvaW5nX2ZyYW1lX2ZpbHRlcnMpCisgICAgICAgIHNl
bGYuX3dyaXRlKGZyYW1lKQorCisgICAgICAgIHNlbGYuX3BpbmdfcXVldWUuYXBwZW5kKGJvZHkp
CisKKyAgICBkZWYgX3NlbmRfcG9uZyhzZWxmLCBib2R5KToKKyAgICAgICAgZnJhbWUgPSBjcmVh
dGVfcG9uZ19mcmFtZSgKKyAgICAgICAgICAgIGJvZHksCisgICAgICAgICAgICBzZWxmLl9vcHRp
b25zLm1hc2tfc2VuZCwKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMub3V0Z29pbmdfZnJhbWVf
ZmlsdGVycykKKyAgICAgICAgc2VsZi5fd3JpdGUoZnJhbWUpCisKKyAgICBkZWYgZ2V0X2xhc3Rf
cmVjZWl2ZWRfb3Bjb2RlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBvcGNvZGUgb2Yg
dGhlIFdlYlNvY2tldCBtZXNzYWdlIHdoaWNoIHRoZSBsYXN0IHJlY2VpdmVkCisgICAgICAgIGZy
YW1lIGJlbG9uZ3MgdG8uIFRoZSByZXR1cm4gdmFsdWUgaXMgdmFsaWQgaWZmIGltbWVkaWF0ZWx5
IGFmdGVyCisgICAgICAgIHJlY2VpdmVfbWVzc2FnZSBjYWxsLgorICAgICAgICAiIiIKKworICAg
ICAgICByZXR1cm4gc2VsZi5fb3JpZ2luYWxfb3Bjb2RlCisKKworIyB2aTpzdHM9NCBzdz00IGV0
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUv
dG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9jb21tb24ucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3Jj
L21vZF9weXdlYnNvY2tldC9jb21tb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWZhMTIzMzY4NmI3ZWUyYTIy
OGRmZTQzMmY3MTEzMDU1YzkzM2JiNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5
d2Vic29ja2V0L2NvbW1vbi5weQpAQCAtMCwwICsxLDMwNyBAQAorIyBDb3B5cmlnaHQgMjAxMiwg
R29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
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
KworIiIiVGhpcyBmaWxlIG11c3Qgbm90IGRlcGVuZCBvbiBhbnkgbW9kdWxlIHNwZWNpZmljIHRv
IHRoZSBXZWJTb2NrZXQgcHJvdG9jb2wuCisiIiIKKworCitmcm9tIG1vZF9weXdlYnNvY2tldCBp
bXBvcnQgaHR0cF9oZWFkZXJfdXRpbAorCisKKyMgQWRkaXRpb25hbCBsb2cgbGV2ZWwgZGVmaW5p
dGlvbnMuCitMT0dMRVZFTF9GSU5FID0gOQorCisjIENvbnN0YW50cyBpbmRpY2F0aW5nIFdlYlNv
Y2tldCBwcm90b2NvbCB2ZXJzaW9uLgorVkVSU0lPTl9ISVhJRTc1ID0gLTEKK1ZFUlNJT05fSFlC
STAwID0gMAorVkVSU0lPTl9IWUJJMDEgPSAxCitWRVJTSU9OX0hZQkkwMiA9IDIKK1ZFUlNJT05f
SFlCSTAzID0gMgorVkVSU0lPTl9IWUJJMDQgPSA0CitWRVJTSU9OX0hZQkkwNSA9IDUKK1ZFUlNJ
T05fSFlCSTA2ID0gNgorVkVSU0lPTl9IWUJJMDcgPSA3CitWRVJTSU9OX0hZQkkwOCA9IDgKK1ZF
UlNJT05fSFlCSTA5ID0gOAorVkVSU0lPTl9IWUJJMTAgPSA4CitWRVJTSU9OX0hZQkkxMSA9IDgK
K1ZFUlNJT05fSFlCSTEyID0gOAorVkVSU0lPTl9IWUJJMTMgPSAxMworVkVSU0lPTl9IWUJJMTQg
PSAxMworVkVSU0lPTl9IWUJJMTUgPSAxMworVkVSU0lPTl9IWUJJMTYgPSAxMworVkVSU0lPTl9I
WUJJMTcgPSAxMworCisjIENvbnN0YW50cyBpbmRpY2F0aW5nIFdlYlNvY2tldCBwcm90b2NvbCBs
YXRlc3QgdmVyc2lvbi4KK1ZFUlNJT05fSFlCSV9MQVRFU1QgPSBWRVJTSU9OX0hZQkkxMworCisj
IFBvcnQgbnVtYmVycworREVGQVVMVF9XRUJfU09DS0VUX1BPUlQgPSA4MAorREVGQVVMVF9XRUJf
U09DS0VUX1NFQ1VSRV9QT1JUID0gNDQzCisKKyMgU2NoZW1lcworV0VCX1NPQ0tFVF9TQ0hFTUUg
PSAnd3MnCitXRUJfU09DS0VUX1NFQ1VSRV9TQ0hFTUUgPSAnd3NzJworCisjIEZyYW1lIG9wY29k
ZXMgZGVmaW5lZCBpbiB0aGUgc3BlYy4KK09QQ09ERV9DT05USU5VQVRJT04gPSAweDAKK09QQ09E
RV9URVhUID0gMHgxCitPUENPREVfQklOQVJZID0gMHgyCitPUENPREVfQ0xPU0UgPSAweDgKK09Q
Q09ERV9QSU5HID0gMHg5CitPUENPREVfUE9ORyA9IDB4YQorCisjIFVVSURzIHVzZWQgYnkgSHlC
aSAwNCBhbmQgbGF0ZXIgb3BlbmluZyBoYW5kc2hha2UgYW5kIGZyYW1lIG1hc2tpbmcuCitXRUJT
T0NLRVRfQUNDRVBUX1VVSUQgPSAnMjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjEx
JworCisjIE9wZW5pbmcgaGFuZHNoYWtlIGhlYWRlciBuYW1lcyBhbmQgZXhwZWN0ZWQgdmFsdWVz
LgorVVBHUkFERV9IRUFERVIgPSAnVXBncmFkZScKK1dFQlNPQ0tFVF9VUEdSQURFX1RZUEUgPSAn
d2Vic29ja2V0JworV0VCU09DS0VUX1VQR1JBREVfVFlQRV9ISVhJRTc1ID0gJ1dlYlNvY2tldCcK
K0NPTk5FQ1RJT05fSEVBREVSID0gJ0Nvbm5lY3Rpb24nCitVUEdSQURFX0NPTk5FQ1RJT05fVFlQ
RSA9ICdVcGdyYWRlJworSE9TVF9IRUFERVIgPSAnSG9zdCcKK09SSUdJTl9IRUFERVIgPSAnT3Jp
Z2luJworU0VDX1dFQlNPQ0tFVF9PUklHSU5fSEVBREVSID0gJ1NlYy1XZWJTb2NrZXQtT3JpZ2lu
JworU0VDX1dFQlNPQ0tFVF9LRVlfSEVBREVSID0gJ1NlYy1XZWJTb2NrZXQtS2V5JworU0VDX1dF
QlNPQ0tFVF9BQ0NFUFRfSEVBREVSID0gJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JworU0VDX1dFQlNP
Q0tFVF9WRVJTSU9OX0hFQURFUiA9ICdTZWMtV2ViU29ja2V0LVZlcnNpb24nCitTRUNfV0VCU09D
S0VUX1BST1RPQ09MX0hFQURFUiA9ICdTZWMtV2ViU29ja2V0LVByb3RvY29sJworU0VDX1dFQlNP
Q0tFVF9FWFRFTlNJT05TX0hFQURFUiA9ICdTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnCitTRUNf
V0VCU09DS0VUX0RSQUZUX0hFQURFUiA9ICdTZWMtV2ViU29ja2V0LURyYWZ0JworU0VDX1dFQlNP
Q0tFVF9LRVkxX0hFQURFUiA9ICdTZWMtV2ViU29ja2V0LUtleTEnCitTRUNfV0VCU09DS0VUX0tF
WTJfSEVBREVSID0gJ1NlYy1XZWJTb2NrZXQtS2V5MicKK1NFQ19XRUJTT0NLRVRfTE9DQVRJT05f
SEVBREVSID0gJ1NlYy1XZWJTb2NrZXQtTG9jYXRpb24nCisKKyMgRXh0ZW5zaW9ucworREVGTEFU
RV9GUkFNRV9FWFRFTlNJT04gPSAnZGVmbGF0ZS1mcmFtZScKK1BFUkZSQU1FX0NPTVBSRVNTSU9O
X0VYVEVOU0lPTiA9ICdwZXJmcmFtZS1jb21wcmVzcycKK1BFUk1FU1NBR0VfQ09NUFJFU1NJT05f
RVhURU5TSU9OID0gJ3Blcm1lc3NhZ2UtY29tcHJlc3MnCitQRVJNRVNTQUdFX0RFRkxBVEVfRVhU
RU5TSU9OID0gJ3Blcm1lc3NhZ2UtZGVmbGF0ZScKK1hfV0VCS0lUX0RFRkxBVEVfRlJBTUVfRVhU
RU5TSU9OID0gJ3gtd2Via2l0LWRlZmxhdGUtZnJhbWUnCitYX1dFQktJVF9QRVJNRVNTQUdFX0NP
TVBSRVNTSU9OX0VYVEVOU0lPTiA9ICd4LXdlYmtpdC1wZXJtZXNzYWdlLWNvbXByZXNzJworTVVY
X0VYVEVOU0lPTiA9ICdtdXhfRE9fTk9UX1VTRScKKworIyBTdGF0dXMgY29kZXMKKyMgQ29kZSBT
VEFUVVNfTk9fU1RBVFVTX1JFQ0VJVkVELCBTVEFUVVNfQUJOT1JNQUxfQ0xPU1VSRSwgYW5kCisj
IFNUQVRVU19UTFNfSEFORFNIQUtFIGFyZSBwc2V1ZG8gY29kZXMgdG8gaW5kaWNhdGUgc3BlY2lm
aWMgZXJyb3IgY2FzZXMuCisjIENvdWxkIG5vdCBiZSB1c2VkIGZvciBjb2RlcyBpbiBhY3R1YWwg
Y2xvc2luZyBmcmFtZXMuCisjIEFwcGxpY2F0aW9uIGxldmVsIGVycm9ycyBtdXN0IHVzZSBjb2Rl
cyBpbiB0aGUgcmFuZ2UKKyMgU1RBVFVTX1VTRVJfUkVHSVNURVJFRF9CQVNFIHRvIFNUQVRVU19V
U0VSX1BSSVZBVEVfTUFYLiBUaGUgY29kZXMgaW4gdGhlCisjIHJhbmdlIFNUQVRVU19VU0VSX1JF
R0lTVEVSRURfQkFTRSB0byBTVEFUVVNfVVNFUl9SRUdJU1RFUkVEX01BWCBhcmUgbWFuYWdlZAor
IyBieSBJQU5BLiBVc3VhbGx5IGFwcGxpY2F0aW9uIG11c3QgZGVmaW5lIHVzZXIgcHJvdG9jb2wg
bGV2ZWwgZXJyb3JzIGluIHRoZQorIyByYW5nZSBTVEFUVVNfVVNFUl9QUklWQVRFX0JBU0UgdG8g
U1RBVFVTX1VTRVJfUFJJVkFURV9NQVguCitTVEFUVVNfTk9STUFMX0NMT1NVUkUgPSAxMDAwCitT
VEFUVVNfR09JTkdfQVdBWSA9IDEwMDEKK1NUQVRVU19QUk9UT0NPTF9FUlJPUiA9IDEwMDIKK1NU
QVRVU19VTlNVUFBPUlRFRF9EQVRBID0gMTAwMworU1RBVFVTX05PX1NUQVRVU19SRUNFSVZFRCA9
IDEwMDUKK1NUQVRVU19BQk5PUk1BTF9DTE9TVVJFID0gMTAwNgorU1RBVFVTX0lOVkFMSURfRlJB
TUVfUEFZTE9BRF9EQVRBID0gMTAwNworU1RBVFVTX1BPTElDWV9WSU9MQVRJT04gPSAxMDA4CitT
VEFUVVNfTUVTU0FHRV9UT09fQklHID0gMTAwOQorU1RBVFVTX01BTkRBVE9SWV9FWFRFTlNJT04g
PSAxMDEwCitTVEFUVVNfSU5URVJOQUxfRU5EUE9JTlRfRVJST1IgPSAxMDExCitTVEFUVVNfVExT
X0hBTkRTSEFLRSA9IDEwMTUKK1NUQVRVU19VU0VSX1JFR0lTVEVSRURfQkFTRSA9IDMwMDAKK1NU
QVRVU19VU0VSX1JFR0lTVEVSRURfTUFYID0gMzk5OQorU1RBVFVTX1VTRVJfUFJJVkFURV9CQVNF
ID0gNDAwMAorU1RBVFVTX1VTRVJfUFJJVkFURV9NQVggPSA0OTk5CisjIEZvbGxvd2luZyBkZWZp
bml0aW9ucyBhcmUgYWxpYXNlcyB0byBrZWVwIGNvbXBhdGliaWxpdHkuIEFwcGxpY2F0aW9ucyBt
dXN0CisjIG5vdCB1c2UgdGhlc2Ugb2Jzb2xldGVkIGRlZmluaXRpb25zIGFueW1vcmUuCitTVEFU
VVNfTk9STUFMID0gU1RBVFVTX05PUk1BTF9DTE9TVVJFCitTVEFUVVNfVU5TVVBQT1JURUQgPSBT
VEFUVVNfVU5TVVBQT1JURURfREFUQQorU1RBVFVTX0NPREVfTk9UX0FWQUlMQUJMRSA9IFNUQVRV
U19OT19TVEFUVVNfUkVDRUlWRUQKK1NUQVRVU19BQk5PUk1BTF9DTE9TRSA9IFNUQVRVU19BQk5P
Uk1BTF9DTE9TVVJFCitTVEFUVVNfSU5WQUxJRF9GUkFNRV9QQVlMT0FEID0gU1RBVFVTX0lOVkFM
SURfRlJBTUVfUEFZTE9BRF9EQVRBCitTVEFUVVNfTUFOREFUT1JZX0VYVCA9IFNUQVRVU19NQU5E
QVRPUllfRVhURU5TSU9OCisKKyMgSFRUUCBzdGF0dXMgY29kZXMKK0hUVFBfU1RBVFVTX0JBRF9S
RVFVRVNUID0gNDAwCitIVFRQX1NUQVRVU19GT1JCSURERU4gPSA0MDMKK0hUVFBfU1RBVFVTX05P
VF9GT1VORCA9IDQwNAorCisKK2RlZiBpc19jb250cm9sX29wY29kZShvcGNvZGUpOgorICAgIHJl
dHVybiAob3Bjb2RlID4+IDMpID09IDEKKworCitjbGFzcyBFeHRlbnNpb25QYXJhbWV0ZXIob2Jq
ZWN0KToKKyAgICAiIiJIb2xkcyBpbmZvcm1hdGlvbiBhYm91dCBhbiBleHRlbnNpb24gd2hpY2gg
aXMgZXhjaGFuZ2VkIG9uIGV4dGVuc2lvbgorICAgIG5lZ290aWF0aW9uIGluIG9wZW5pbmcgaGFu
ZHNoYWtlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAg
ICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBDaGFuZ2UgdGhl
IGRhdGEgc3RydWN0dXJlIHRvIG1vcmUgZWZmaWNpZW50IG9uZSBzdWNoCisgICAgICAgICMgYXMg
ZGljdCB3aGVuIHRoZSBzcGVjIGNoYW5nZXMgdG8gc2F5IGxpa2UKKyAgICAgICAgIyAtIFBhcmFt
ZXRlciBuYW1lcyBtdXN0IGJlIHVuaXF1ZQorICAgICAgICAjIC0gVGhlIG9yZGVyIG9mIHBhcmFt
ZXRlcnMgaXMgbm90IHNpZ25pZmljYW50CisgICAgICAgIHNlbGYuX3BhcmFtZXRlcnMgPSBbXQor
CisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBk
ZWYgYWRkX3BhcmFtZXRlcihzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3BhcmFt
ZXRlcnMuYXBwZW5kKChuYW1lLCB2YWx1ZSkpCisKKyAgICBkZWYgZ2V0X3BhcmFtZXRlcnMoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl9wYXJhbWV0ZXJzCisKKyAgICBkZWYgZ2V0X3BhcmFt
ZXRlcl9uYW1lcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFtuYW1lIGZvciBuYW1lLCB1bnVzZWRf
dmFsdWUgaW4gc2VsZi5fcGFyYW1ldGVyc10KKworICAgIGRlZiBoYXNfcGFyYW1ldGVyKHNlbGYs
IG5hbWUpOgorICAgICAgICBmb3IgcGFyYW1fbmFtZSwgcGFyYW1fdmFsdWUgaW4gc2VsZi5fcGFy
YW1ldGVyczoKKyAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgPT0gbmFtZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBnZXRfcGFy
YW1ldGVyX3ZhbHVlKHNlbGYsIG5hbWUpOgorICAgICAgICBmb3IgcGFyYW1fbmFtZSwgcGFyYW1f
dmFsdWUgaW4gc2VsZi5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgPT0g
bmFtZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1fdmFsdWUKKworCitjbGFzcyBFeHRl
bnNpb25QYXJzaW5nRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IG5hbWUpOgorICAgICAgICBzdXBlcihFeHRlbnNpb25QYXJzaW5nRXhjZXB0aW9uLCBzZWxmKS5f
X2luaXRfXyhuYW1lKQorCisKK2RlZiBfcGFyc2VfZXh0ZW5zaW9uX3BhcmFtKHN0YXRlLCBkZWZp
bml0aW9uLCBhbGxvd19xdW90ZWRfc3RyaW5nKToKKyAgICBwYXJhbV9uYW1lID0gaHR0cF9oZWFk
ZXJfdXRpbC5jb25zdW1lX3Rva2VuKHN0YXRlKQorCisgICAgaWYgcGFyYW1fbmFtZSBpcyBOb25l
OgorICAgICAgICByYWlzZSBFeHRlbnNpb25QYXJzaW5nRXhjZXB0aW9uKCdObyB2YWxpZCBwYXJh
bWV0ZXIgbmFtZSBmb3VuZCcpCisKKyAgICBodHRwX2hlYWRlcl91dGlsLmNvbnN1bWVfbHdzZXMo
c3RhdGUpCisKKyAgICBpZiBub3QgaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX3N0cmluZyhzdGF0
ZSwgJz0nKToKKyAgICAgICAgZGVmaW5pdGlvbi5hZGRfcGFyYW1ldGVyKHBhcmFtX25hbWUsIE5v
bmUpCisgICAgICAgIHJldHVybgorCisgICAgaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX2x3c2Vz
KHN0YXRlKQorCisgICAgaWYgYWxsb3dfcXVvdGVkX3N0cmluZzoKKyAgICAgICAgIyBUT0RPKHRv
eW9zaGltKTogQWRkIGNvZGUgdG8gdmFsaWRhdGUgdGhhdCBwYXJzZWQgcGFyYW1fdmFsdWUgaXMg
dG9rZW4KKyAgICAgICAgcGFyYW1fdmFsdWUgPSBodHRwX2hlYWRlcl91dGlsLmNvbnN1bWVfdG9r
ZW5fb3JfcXVvdGVkX3N0cmluZyhzdGF0ZSkKKyAgICBlbHNlOgorICAgICAgICBwYXJhbV92YWx1
ZSA9IGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV90b2tlbihzdGF0ZSkKKyAgICBpZiBwYXJhbV92
YWx1ZSBpcyBOb25lOgorICAgICAgICByYWlzZSBFeHRlbnNpb25QYXJzaW5nRXhjZXB0aW9uKAor
ICAgICAgICAgICAgJ05vIHZhbGlkIHBhcmFtZXRlciB2YWx1ZSBmb3VuZCBvbiB0aGUgcmlnaHQt
aGFuZCBzaWRlIG9mICcKKyAgICAgICAgICAgICdwYXJhbWV0ZXIgJXInICUgcGFyYW1fbmFtZSkK
KworICAgIGRlZmluaXRpb24uYWRkX3BhcmFtZXRlcihwYXJhbV9uYW1lLCBwYXJhbV92YWx1ZSkK
KworCitkZWYgX3BhcnNlX2V4dGVuc2lvbihzdGF0ZSwgYWxsb3dfcXVvdGVkX3N0cmluZyk6Cisg
ICAgZXh0ZW5zaW9uX3Rva2VuID0gaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX3Rva2VuKHN0YXRl
KQorICAgIGlmIGV4dGVuc2lvbl90b2tlbiBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgZXh0ZW5zaW9uID0gRXh0ZW5zaW9uUGFyYW1ldGVyKGV4dGVuc2lvbl90b2tlbikKKwor
ICAgIHdoaWxlIFRydWU6CisgICAgICAgIGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV9sd3Nlcyhz
dGF0ZSkKKworICAgICAgICBpZiBub3QgaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX3N0cmluZyhz
dGF0ZSwgJzsnKToKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaHR0cF9oZWFkZXJfdXRp
bC5jb25zdW1lX2x3c2VzKHN0YXRlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9wYXJz
ZV9leHRlbnNpb25fcGFyYW0oc3RhdGUsIGV4dGVuc2lvbiwgYWxsb3dfcXVvdGVkX3N0cmluZykK
KyAgICAgICAgZXhjZXB0IEV4dGVuc2lvblBhcnNpbmdFeGNlcHRpb24sIGU6CisgICAgICAgICAg
ICByYWlzZSBFeHRlbnNpb25QYXJzaW5nRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdGYWls
ZWQgdG8gcGFyc2UgcGFyYW1ldGVyIGZvciAlciAoJXIpJyAlCisgICAgICAgICAgICAgICAgKGV4
dGVuc2lvbl90b2tlbiwgZSkpCisKKyAgICByZXR1cm4gZXh0ZW5zaW9uCisKKworZGVmIHBhcnNl
X2V4dGVuc2lvbnMoZGF0YSwgYWxsb3dfcXVvdGVkX3N0cmluZz1GYWxzZSk6CisgICAgIiIiUGFy
c2VzIFNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyBoZWFkZXIgdmFsdWUgcmV0dXJucyBhIGxpc3Qg
b2YKKyAgICBFeHRlbnNpb25QYXJhbWV0ZXIgb2JqZWN0cy4KKworICAgIExlYWRpbmcgTFdTZXMg
bXVzdCBiZSB0cmltbWVkLgorICAgICIiIgorCisgICAgc3RhdGUgPSBodHRwX2hlYWRlcl91dGls
LlBhcnNpbmdTdGF0ZShkYXRhKQorCisgICAgZXh0ZW5zaW9uX2xpc3QgPSBbXQorICAgIHdoaWxl
IFRydWU6CisgICAgICAgIGV4dGVuc2lvbiA9IF9wYXJzZV9leHRlbnNpb24oc3RhdGUsIGFsbG93
X3F1b3RlZF9zdHJpbmcpCisgICAgICAgIGlmIGV4dGVuc2lvbiBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgIGV4dGVuc2lvbl9saXN0LmFwcGVuZChleHRlbnNpb24pCisKKyAgICAgICAgaHR0cF9o
ZWFkZXJfdXRpbC5jb25zdW1lX2x3c2VzKHN0YXRlKQorCisgICAgICAgIGlmIGh0dHBfaGVhZGVy
X3V0aWwucGVlayhzdGF0ZSkgaXMgTm9uZToKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAg
aWYgbm90IGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV9zdHJpbmcoc3RhdGUsICcsJyk6CisgICAg
ICAgICAgICByYWlzZSBFeHRlbnNpb25QYXJzaW5nRXhjZXB0aW9uKAorICAgICAgICAgICAgICAg
ICdGYWlsZWQgdG8gcGFyc2UgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zIGhlYWRlcjogJworICAg
ICAgICAgICAgICAgICdFeHBlY3RlZCBhIGNvbW1hIGJ1dCBmb3VuZCAlcicgJQorICAgICAgICAg
ICAgICAgIGh0dHBfaGVhZGVyX3V0aWwucGVlayhzdGF0ZSkpCisKKyAgICAgICAgaHR0cF9oZWFk
ZXJfdXRpbC5jb25zdW1lX2x3c2VzKHN0YXRlKQorCisgICAgaWYgbGVuKGV4dGVuc2lvbl9saXN0
KSA9PSAwOgorICAgICAgICByYWlzZSBFeHRlbnNpb25QYXJzaW5nRXhjZXB0aW9uKAorICAgICAg
ICAgICAgJ05vIHZhbGlkIGV4dGVuc2lvbiBlbnRyeSBmb3VuZCcpCisKKyAgICByZXR1cm4gZXh0
ZW5zaW9uX2xpc3QKKworCitkZWYgZm9ybWF0X2V4dGVuc2lvbihleHRlbnNpb24pOgorICAgICIi
IkZvcm1hdHMgYW4gRXh0ZW5zaW9uUGFyYW1ldGVyIG9iamVjdC4iIiIKKworICAgIGZvcm1hdHRl
ZF9wYXJhbXMgPSBbZXh0ZW5zaW9uLm5hbWUoKV0KKyAgICBmb3IgcGFyYW1fbmFtZSwgcGFyYW1f
dmFsdWUgaW4gZXh0ZW5zaW9uLmdldF9wYXJhbWV0ZXJzKCk6CisgICAgICAgIGlmIHBhcmFtX3Zh
bHVlIGlzIE5vbmU6CisgICAgICAgICAgICBmb3JtYXR0ZWRfcGFyYW1zLmFwcGVuZChwYXJhbV9u
YW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcXVvdGVkX3ZhbHVlID0gaHR0cF9oZWFk
ZXJfdXRpbC5xdW90ZV9pZl9uZWNlc3NhcnkocGFyYW1fdmFsdWUpCisgICAgICAgICAgICBmb3Jt
YXR0ZWRfcGFyYW1zLmFwcGVuZCgnJXM9JXMnICUgKHBhcmFtX25hbWUsIHF1b3RlZF92YWx1ZSkp
CisgICAgcmV0dXJuICc7ICcuam9pbihmb3JtYXR0ZWRfcGFyYW1zKQorCisKK2RlZiBmb3JtYXRf
ZXh0ZW5zaW9ucyhleHRlbnNpb25fbGlzdCk6CisgICAgIiIiRm9ybWF0cyBhIGxpc3Qgb2YgRXh0
ZW5zaW9uUGFyYW1ldGVyIG9iamVjdHMuIiIiCisKKyAgICBmb3JtYXR0ZWRfZXh0ZW5zaW9uX2xp
c3QgPSBbXQorICAgIGZvciBleHRlbnNpb24gaW4gZXh0ZW5zaW9uX2xpc3Q6CisgICAgICAgIGZv
cm1hdHRlZF9leHRlbnNpb25fbGlzdC5hcHBlbmQoZm9ybWF0X2V4dGVuc2lvbihleHRlbnNpb24p
KQorICAgIHJldHVybiAnLCAnLmpvaW4oZm9ybWF0dGVkX2V4dGVuc2lvbl9saXN0KQorCisKKyMg
dmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvZGlz
cGF0Y2gucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9v
bHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9kaXNwYXRjaC5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NmM5MWUwYzkwZTc0MjlkMGY3NjBjMGU5YzdiOTgxMjA0MDkyYTBhCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5
d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvZGlzcGF0Y2gucHkKQEAgLTAsMCArMSwzOTMg
QEAKKyMgQ29weXJpZ2h0IDIwMTIsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIkRpc3BhdGNoIFdlYlNvY2tldCByZXF1ZXN0Lgor
IiIiCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCisKK2Zyb20gbW9k
X3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBo
YW5kc2hha2UKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBtc2d1dGlsCitmcm9tIG1vZF9w
eXdlYnNvY2tldCBpbXBvcnQgbXV4Citmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgc3RyZWFt
Citmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgdXRpbAorCisKK19TT1VSQ0VfUEFUSF9QQVRU
RVJOID0gcmUuY29tcGlsZShyJyg/aSlfd3NoXC5weSQnKQorX1NPVVJDRV9TVUZGSVggPSAnX3dz
aC5weScKK19ET19FWFRSQV9IQU5EU0hBS0VfSEFORExFUl9OQU1FID0gJ3dlYl9zb2NrZXRfZG9f
ZXh0cmFfaGFuZHNoYWtlJworX1RSQU5TRkVSX0RBVEFfSEFORExFUl9OQU1FID0gJ3dlYl9zb2Nr
ZXRfdHJhbnNmZXJfZGF0YScKK19QQVNTSVZFX0NMT1NJTkdfSEFORFNIQUtFX0hBTkRMRVJfTkFN
RSA9ICgKKyAgICAnd2ViX3NvY2tldF9wYXNzaXZlX2Nsb3NpbmdfaGFuZHNoYWtlJykKKworCitj
bGFzcyBEaXNwYXRjaEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiBpbiBk
aXNwYXRjaGluZyBXZWJTb2NrZXQgcmVxdWVzdC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBuYW1lLCBzdGF0dXM9Y29tbW9uLkhUVFBfU1RBVFVTX05PVF9GT1VORCk6CisgICAgICAgIHN1
cGVyKERpc3BhdGNoRXhjZXB0aW9uLCBzZWxmKS5fX2luaXRfXyhuYW1lKQorICAgICAgICBzZWxm
LnN0YXR1cyA9IHN0YXR1cworCisKK2RlZiBfZGVmYXVsdF9wYXNzaXZlX2Nsb3NpbmdfaGFuZHNo
YWtlX2hhbmRsZXIocmVxdWVzdCk6CisgICAgIiIiRGVmYXVsdCB3ZWJfc29ja2V0X3Bhc3NpdmVf
Y2xvc2luZ19oYW5kc2hha2UgaGFuZGxlci4iIiIKKworICAgIHJldHVybiBjb21tb24uU1RBVFVT
X05PUk1BTF9DTE9TVVJFLCAnJworCisKK2RlZiBfbm9ybWFsaXplX3BhdGgocGF0aCk6CisgICAg
IiIiTm9ybWFsaXplIHBhdGguCisKKyAgICBBcmdzOgorICAgICAgICBwYXRoOiB0aGUgcGF0aCB0
byBub3JtYWxpemUuCisKKyAgICBQYXRoIGlzIGNvbnZlcnRlZCB0byB0aGUgYWJzb2x1dGUgcGF0
aC4KKyAgICBUaGUgaW5wdXQgcGF0aCBjYW4gdXNlIGVpdGhlciAnXFwnIG9yICcvJyBhcyB0aGUg
c2VwYXJhdG9yLgorICAgIFRoZSBub3JtYWxpemVkIHBhdGggYWx3YXlzIHVzZXMgJy8nIHJlZ2Fy
ZGxlc3Mgb2YgdGhlIHBsYXRmb3JtLgorICAgICIiIgorCisgICAgcGF0aCA9IHBhdGgucmVwbGFj
ZSgnXFwnLCBvcy5wYXRoLnNlcCkKKyAgICBwYXRoID0gb3MucGF0aC5yZWFscGF0aChwYXRoKQor
ICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKQorICAgIHJldHVybiBwYXRoCisKKwor
ZGVmIF9jcmVhdGVfcGF0aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIoYmFzZV9kaXIpOgorICAgICIi
IlJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIHRoZSBwYXRoIG9mIGEgV2ViU29ja2V0
IGhhbmRsZXIgc291cmNlCisgICAgZmlsZSB0byBhIHJlc291cmNlIHN0cmluZyBieSByZW1vdmlu
ZyB0aGUgcGF0aCB0byB0aGUgYmFzZSBkaXJlY3RvcnkgZnJvbQorICAgIGl0cyBoZWFkLCByZW1v
dmluZyBfU09VUkNFX1NVRkZJWCBmcm9tIGl0cyB0YWlsLCBhbmQgcmVwbGFjaW5nIHBhdGgKKyAg
ICBzZXBhcmF0b3JzIGluIGl0IHdpdGggJy8nLgorCisgICAgQXJnczoKKyAgICAgICAgYmFzZV9k
aXI6IHRoZSBwYXRoIHRvIHRoZSBiYXNlIGRpcmVjdG9yeS4KKyAgICAiIiIKKworICAgIGJhc2Vf
ZGlyID0gX25vcm1hbGl6ZV9wYXRoKGJhc2VfZGlyKQorCisgICAgYmFzZV9sZW4gPSBsZW4oYmFz
ZV9kaXIpCisgICAgc3VmZml4X2xlbiA9IGxlbihfU09VUkNFX1NVRkZJWCkKKworICAgIGRlZiBj
b252ZXJ0ZXIocGF0aCk6CisgICAgICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKF9TT1VSQ0VfU1VG
RklYKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgX25vcm1hbGl6ZV9wYXRo
IG11c3Qgbm90IGJlIHVzZWQgYmVjYXVzZSByZXNvbHZpbmcgc3ltbGluayBicmVha3MKKyAgICAg
ICAgIyBmb2xsb3dpbmcgcGF0aCBjaGVjay4KKyAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgn
XFwnLCAnLycpCisgICAgICAgIGlmIG5vdCBwYXRoLnN0YXJ0c3dpdGgoYmFzZV9kaXIpOgorICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHBhdGhbYmFzZV9sZW46LXN1ZmZp
eF9sZW5dCisKKyAgICByZXR1cm4gY29udmVydGVyCisKKworZGVmIF9lbnVtZXJhdGVfaGFuZGxl
cl9maWxlX3BhdGhzKGRpcmVjdG9yeSk6CisgICAgIiIiUmV0dXJucyBhIGdlbmVyYXRvciB0aGF0
IGVudW1lcmF0ZXMgV2ViU29ja2V0IEhhbmRsZXIgc291cmNlIGZpbGUgbmFtZXMKKyAgICBpbiB0
aGUgZ2l2ZW4gZGlyZWN0b3J5LgorICAgICIiIgorCisgICAgZm9yIHJvb3QsIHVudXNlZF9kaXJz
LCBmaWxlcyBpbiBvcy53YWxrKGRpcmVjdG9yeSk6CisgICAgICAgIGZvciBiYXNlIGluIGZpbGVz
OgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBiYXNlKQorICAgICAgICAg
ICAgaWYgX1NPVVJDRV9QQVRIX1BBVFRFUk4uc2VhcmNoKHBhdGgpOgorICAgICAgICAgICAgICAg
IHlpZWxkIHBhdGgKKworCitjbGFzcyBfSGFuZGxlclN1aXRlKG9iamVjdCk6CisgICAgIiIiQSBo
YW5kbGVyIHN1aXRlIGhvbGRlciBjbGFzcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBk
b19leHRyYV9oYW5kc2hha2UsIHRyYW5zZmVyX2RhdGEsCisgICAgICAgICAgICAgICAgIHBhc3Np
dmVfY2xvc2luZ19oYW5kc2hha2UpOgorICAgICAgICBzZWxmLmRvX2V4dHJhX2hhbmRzaGFrZSA9
IGRvX2V4dHJhX2hhbmRzaGFrZQorICAgICAgICBzZWxmLnRyYW5zZmVyX2RhdGEgPSB0cmFuc2Zl
cl9kYXRhCisgICAgICAgIHNlbGYucGFzc2l2ZV9jbG9zaW5nX2hhbmRzaGFrZSA9IHBhc3NpdmVf
Y2xvc2luZ19oYW5kc2hha2UKKworCitkZWYgX3NvdXJjZV9oYW5kbGVyX2ZpbGUoaGFuZGxlcl9k
ZWZpbml0aW9uKToKKyAgICAiIiJTb3VyY2UgYSBoYW5kbGVyIGRlZmluaXRpb24gc3RyaW5nLgor
CisgICAgQXJnczoKKyAgICAgICAgaGFuZGxlcl9kZWZpbml0aW9uOiBhIHN0cmluZyBjb250YWlu
aW5nIFB5dGhvbiBzdGF0ZW1lbnRzIHRoYXQgZGVmaW5lCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlciBmdW5jdGlvbnMuCisgICAgIiIiCisKKyAgICBnbG9iYWxfZGljID0ge30K
KyAgICB0cnk6CisgICAgICAgIGV4ZWMgaGFuZGxlcl9kZWZpbml0aW9uIGluIGdsb2JhbF9kaWMK
KyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByYWlzZSBEaXNwYXRjaEV4Y2VwdGlvbign
RXJyb3IgaW4gc291cmNpbmcgaGFuZGxlcjonICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXRpbC5nZXRfc3RhY2tfdHJhY2UoKSkKKyAgICBwYXNzaXZlX2Nsb3NpbmdfaGFuZHNo
YWtlX2hhbmRsZXIgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBwYXNzaXZlX2Nsb3NpbmdfaGFu
ZHNoYWtlX2hhbmRsZXIgPSBfZXh0cmFjdF9oYW5kbGVyKAorICAgICAgICAgICAgZ2xvYmFsX2Rp
YywgX1BBU1NJVkVfQ0xPU0lOR19IQU5EU0hBS0VfSEFORExFUl9OQU1FKQorICAgIGV4Y2VwdCBF
eGNlcHRpb246CisgICAgICAgIHBhc3NpdmVfY2xvc2luZ19oYW5kc2hha2VfaGFuZGxlciA9ICgK
KyAgICAgICAgICAgIF9kZWZhdWx0X3Bhc3NpdmVfY2xvc2luZ19oYW5kc2hha2VfaGFuZGxlcikK
KyAgICByZXR1cm4gX0hhbmRsZXJTdWl0ZSgKKyAgICAgICAgX2V4dHJhY3RfaGFuZGxlcihnbG9i
YWxfZGljLCBfRE9fRVhUUkFfSEFORFNIQUtFX0hBTkRMRVJfTkFNRSksCisgICAgICAgIF9leHRy
YWN0X2hhbmRsZXIoZ2xvYmFsX2RpYywgX1RSQU5TRkVSX0RBVEFfSEFORExFUl9OQU1FKSwKKyAg
ICAgICAgcGFzc2l2ZV9jbG9zaW5nX2hhbmRzaGFrZV9oYW5kbGVyKQorCisKK2RlZiBfZXh0cmFj
dF9oYW5kbGVyKGRpYywgbmFtZSk6CisgICAgIiIiRXh0cmFjdHMgYSBjYWxsYWJsZSB3aXRoIHRo
ZSBzcGVjaWZpZWQgbmFtZSBmcm9tIHRoZSBnaXZlbiBkaWN0aW9uYXJ5CisgICAgZGljLgorICAg
ICIiIgorCisgICAgaWYgbmFtZSBub3QgaW4gZGljOgorICAgICAgICByYWlzZSBEaXNwYXRjaEV4
Y2VwdGlvbignJXMgaXMgbm90IGRlZmluZWQuJyAlIG5hbWUpCisgICAgaGFuZGxlciA9IGRpY1tu
YW1lXQorICAgIGlmIG5vdCBjYWxsYWJsZShoYW5kbGVyKToKKyAgICAgICAgcmFpc2UgRGlzcGF0
Y2hFeGNlcHRpb24oJyVzIGlzIG5vdCBjYWxsYWJsZS4nICUgbmFtZSkKKyAgICByZXR1cm4gaGFu
ZGxlcgorCisKK2NsYXNzIERpc3BhdGNoZXIob2JqZWN0KToKKyAgICAiIiJEaXNwYXRjaGVzIFdl
YlNvY2tldCByZXF1ZXN0cy4KKworICAgIFRoaXMgY2xhc3MgbWFpbnRhaW5zIGEgbWFwIGZyb20g
cmVzb3VyY2UgbmFtZSB0byBoYW5kbGVycy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXygK
KyAgICAgICAgc2VsZiwgcm9vdF9kaXIsIHNjYW5fZGlyPU5vbmUsCisgICAgICAgIGFsbG93X2hh
bmRsZXJzX291dHNpZGVfcm9vdF9kaXI9VHJ1ZSk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhbiBp
bnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcm9vdF9kaXI6IFRoZSBkaXJl
Y3Rvcnkgd2hlcmUgaGFuZGxlciBkZWZpbml0aW9uIGZpbGVzIGFyZQorICAgICAgICAgICAgICAg
ICAgICAgIHBsYWNlZC4KKyAgICAgICAgICAgIHNjYW5fZGlyOiBUaGUgZGlyZWN0b3J5IHdoZXJl
IGhhbmRsZXIgZGVmaW5pdGlvbiBmaWxlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICBzZWFy
Y2hlZC4gc2Nhbl9kaXIgbXVzdCBiZSBhIGRpcmVjdG9yeSB1bmRlciByb290X2RpciwKKyAgICAg
ICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgcm9vdF9kaXIgaXRzZWxmLiAgSWYgc2Nhbl9kaXIg
aXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICByb290X2RpciBpcyB1c2VkIGFzIHNjYW5f
ZGlyLiBzY2FuX2RpciBjYW4gYmUgdXNlZnVsCisgICAgICAgICAgICAgICAgICAgICAgaW4gc2F2
aW5nIHNjYW4gdGltZSB3aGVuIHJvb3RfZGlyIGNvbnRhaW5zIG1hbnkKKyAgICAgICAgICAgICAg
ICAgICAgICBzdWJkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgIGFsbG93X2hhbmRsZXJzX291dHNp
ZGVfcm9vdF9kaXI6IFNjYW5zIGhhbmRsZXIgZmlsZXMgZXZlbiBpZiB0aGVpcgorICAgICAgICAg
ICAgICAgICAgICAgIGNhbm9uaWNhbCBwYXRoIGlzIG5vdCB1bmRlciByb290X2Rpci4KKyAgICAg
ICAgIiIiCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2VyKHNl
bGYpCisKKyAgICAgICAgc2VsZi5faGFuZGxlcl9zdWl0ZV9tYXAgPSB7fQorICAgICAgICBzZWxm
Ll9zb3VyY2Vfd2FybmluZ3MgPSBbXQorICAgICAgICBpZiBzY2FuX2RpciBpcyBOb25lOgorICAg
ICAgICAgICAgc2Nhbl9kaXIgPSByb290X2RpcgorICAgICAgICBpZiBub3Qgb3MucGF0aC5yZWFs
cGF0aChzY2FuX2Rpcikuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgICAgICBvcy5wYXRoLnJlYWxw
YXRoKHJvb3RfZGlyKSk6CisgICAgICAgICAgICByYWlzZSBEaXNwYXRjaEV4Y2VwdGlvbignc2Nh
bl9kaXI6JXMgbXVzdCBiZSBhIGRpcmVjdG9yeSB1bmRlciAnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAncm9vdF9kaXI6JXMuJyAlIChzY2FuX2Rpciwgcm9vdF9kaXIpKQor
ICAgICAgICBzZWxmLl9zb3VyY2VfaGFuZGxlcl9maWxlc19pbl9kaXIoCisgICAgICAgICAgICBy
b290X2Rpciwgc2Nhbl9kaXIsIGFsbG93X2hhbmRsZXJzX291dHNpZGVfcm9vdF9kaXIpCisKKyAg
ICBkZWYgYWRkX3Jlc291cmNlX3BhdGhfYWxpYXMoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWxpYXNfcmVzb3VyY2VfcGF0aCwgZXhpc3RpbmdfcmVzb3VyY2VfcGF0aCk6
CisgICAgICAgICIiIkFkZCByZXNvdXJjZSBwYXRoIGFsaWFzLgorCisgICAgICAgIE9uY2UgYWRk
ZWQsIHJlcXVlc3QgdG8gYWxpYXNfcmVzb3VyY2VfcGF0aCB3b3VsZCBiZSBoYW5kbGVkIGJ5Cisg
ICAgICAgIGhhbmRsZXIgcmVnaXN0ZXJlZCBmb3IgZXhpc3RpbmdfcmVzb3VyY2VfcGF0aC4KKwor
ICAgICAgICBBcmdzOgorICAgICAgICAgICAgYWxpYXNfcmVzb3VyY2VfcGF0aDogYWxpYXMgcmVz
b3VyY2UgcGF0aAorICAgICAgICAgICAgZXhpc3RpbmdfcmVzb3VyY2VfcGF0aDogZXhpc3Rpbmcg
cmVzb3VyY2UgcGF0aAorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaGFu
ZGxlcl9zdWl0ZSA9IHNlbGYuX2hhbmRsZXJfc3VpdGVfbWFwW2V4aXN0aW5nX3Jlc291cmNlX3Bh
dGhdCisgICAgICAgICAgICBzZWxmLl9oYW5kbGVyX3N1aXRlX21hcFthbGlhc19yZXNvdXJjZV9w
YXRoXSA9IGhhbmRsZXJfc3VpdGUKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAg
ICAgcmFpc2UgRGlzcGF0Y2hFeGNlcHRpb24oJ05vIGhhbmRsZXIgZm9yOiAlcicgJQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdfcmVzb3VyY2VfcGF0aCkKKwor
ICAgIGRlZiBzb3VyY2Vfd2FybmluZ3Moc2VsZik6CisgICAgICAgICIiIlJldHVybiB3YXJuaW5n
cyBpbiBzb3VyY2luZyBoYW5kbGVycy4iIiIKKworICAgICAgICByZXR1cm4gc2VsZi5fc291cmNl
X3dhcm5pbmdzCisKKyAgICBkZWYgZG9fZXh0cmFfaGFuZHNoYWtlKHNlbGYsIHJlcXVlc3QpOgor
ICAgICAgICAiIiJEbyBleHRyYSBjaGVja2luZyBpbiBXZWJTb2NrZXQgaGFuZHNoYWtlLgorCisg
ICAgICAgIFNlbGVjdCBhIGhhbmRsZXIgYmFzZWQgb24gcmVxdWVzdC51cmkgYW5kIGNhbGwgaXRz
CisgICAgICAgIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlIGZ1bmN0aW9uLgorCisgICAg
ICAgIEFyZ3M6CisgICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisKKyAg
ICAgICAgUmFpc2VzOgorICAgICAgICAgICAgRGlzcGF0Y2hFeGNlcHRpb246IHdoZW4gaGFuZGxl
ciB3YXMgbm90IGZvdW5kCisgICAgICAgICAgICBBYm9ydGVkQnlVc2VyRXhjZXB0aW9uOiB3aGVu
IHVzZXIgaGFuZGxlciBhYm9ydCBjb25uZWN0aW9uCisgICAgICAgICAgICBIYW5kc2hha2VFeGNl
cHRpb246IHdoZW4gb3BlbmluZyBoYW5kc2hha2UgZmFpbGVkCisgICAgICAgICIiIgorCisgICAg
ICAgIGhhbmRsZXJfc3VpdGUgPSBzZWxmLmdldF9oYW5kbGVyX3N1aXRlKHJlcXVlc3Qud3NfcmVz
b3VyY2UpCisgICAgICAgIGlmIGhhbmRsZXJfc3VpdGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJh
aXNlIERpc3BhdGNoRXhjZXB0aW9uKCdObyBoYW5kbGVyIGZvcjogJXInICUgcmVxdWVzdC53c19y
ZXNvdXJjZSkKKyAgICAgICAgZG9fZXh0cmFfaGFuZHNoYWtlXyA9IGhhbmRsZXJfc3VpdGUuZG9f
ZXh0cmFfaGFuZHNoYWtlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRvX2V4dHJhX2hhbmRz
aGFrZV8ocmVxdWVzdCkKKyAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5BYm9ydGVkQnlVc2VyRXhj
ZXB0aW9uLCBlOgorICAgICAgICAgICAgIyBSZS1yYWlzZSB0byB0ZWxsIHRoZSBjYWxsZXIgb2Yg
dGhpcyBmdW5jdGlvbiB0byBmaW5pc2ggdGhpcworICAgICAgICAgICAgIyBjb25uZWN0aW9uIHdp
dGhvdXQgc2VuZGluZyBhbnkgZXJyb3IuCisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWco
JyVzJywgdXRpbC5nZXRfc3RhY2tfdHJhY2UoKSkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAg
IGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICB1dGlsLnByZXBlbmRfbWVzc2FnZV90
b19leGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICclcyByYWlzZWQgZXhjZXB0aW9uIGZv
ciAlczogJyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRE9fRVhUUkFfSEFORFNI
QUtFX0hBTkRMRVJfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lndz
X3Jlc291cmNlKSwKKyAgICAgICAgICAgICAgICAgICAgZSkKKyAgICAgICAgICAgIHJhaXNlIGhh
bmRzaGFrZS5IYW5kc2hha2VFeGNlcHRpb24oZSwgY29tbW9uLkhUVFBfU1RBVFVTX0ZPUkJJRERF
TikKKworICAgIGRlZiB0cmFuc2Zlcl9kYXRhKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICAiIiJM
ZXQgYSBoYW5kbGVyIHRyYW5zZmVyX2RhdGEgd2l0aCBhIFdlYlNvY2tldCBjbGllbnQuCisKKyAg
ICAgICAgU2VsZWN0IGEgaGFuZGxlciBiYXNlZCBvbiByZXF1ZXN0LndzX3Jlc291cmNlIGFuZCBj
YWxsIGl0cworICAgICAgICB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEgZnVuY3Rpb24uCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KKwor
ICAgICAgICBSYWlzZXM6CisgICAgICAgICAgICBEaXNwYXRjaEV4Y2VwdGlvbjogd2hlbiBoYW5k
bGVyIHdhcyBub3QgZm91bmQKKyAgICAgICAgICAgIEFib3J0ZWRCeVVzZXJFeGNlcHRpb246IHdo
ZW4gdXNlciBoYW5kbGVyIGFib3J0IGNvbm5lY3Rpb24KKyAgICAgICAgIiIiCisKKyAgICAgICAg
IyBUT0RPKHR5b3NoaW5vKTogVGVybWluYXRlIHVuZGVybHlpbmcgVENQIGNvbm5lY3Rpb24gaWYg
cG9zc2libGUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG11eC51c2VfbXV4KHJlcXVl
c3QpOgorICAgICAgICAgICAgICAgIG11eC5zdGFydChyZXF1ZXN0LCBzZWxmKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBoYW5kbGVyX3N1aXRlID0gc2VsZi5nZXRfaGFuZGxl
cl9zdWl0ZShyZXF1ZXN0LndzX3Jlc291cmNlKQorICAgICAgICAgICAgICAgIGlmIGhhbmRsZXJf
c3VpdGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRGlzcGF0Y2hFeGNlcHRp
b24oJ05vIGhhbmRsZXIgZm9yOiAlcicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXF1ZXN0LndzX3Jlc291cmNlKQorICAgICAgICAgICAgICAgIHRyYW5z
ZmVyX2RhdGFfID0gaGFuZGxlcl9zdWl0ZS50cmFuc2Zlcl9kYXRhCisgICAgICAgICAgICAgICAg
dHJhbnNmZXJfZGF0YV8ocmVxdWVzdCkKKworICAgICAgICAgICAgaWYgbm90IHJlcXVlc3Quc2Vy
dmVyX3Rlcm1pbmF0ZWQ6CisgICAgICAgICAgICAgICAgcmVxdWVzdC53c19zdHJlYW0uY2xvc2Vf
Y29ubmVjdGlvbigpCisgICAgICAgICMgQ2F0Y2ggbm9uLWNyaXRpY2FsIGV4Y2VwdGlvbnMgdGhl
IGhhbmRsZXIgZGlkbid0IGhhbmRsZS4KKyAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5BYm9ydGVk
QnlVc2VyRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCclcycs
IHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNl
cHQgbXNndXRpbC5CYWRPcGVyYXRpb25FeGNlcHRpb24sIGU6CisgICAgICAgICAgICBzZWxmLl9s
b2dnZXIuZGVidWcoJyVzJywgZSkKKyAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3Nl
X2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgY29tbW9uLlNUQVRVU19JTlRFUk5BTF9FTkRQ
T0lOVF9FUlJPUikKKyAgICAgICAgZXhjZXB0IG1zZ3V0aWwuSW52YWxpZEZyYW1lRXhjZXB0aW9u
LCBlOgorICAgICAgICAgICAgIyBJbnZhbGlkRnJhbWVFeGNlcHRpb24gbXVzdCBiZSBjYXVnaHQg
YmVmb3JlCisgICAgICAgICAgICAjIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uIHRoYXQg
Y2F0Y2hlcyBJbnZhbGlkRnJhbWVFeGNlcHRpb24uCisgICAgICAgICAgICBzZWxmLl9sb2dnZXIu
ZGVidWcoJyVzJywgZSkKKyAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3NlX2Nvbm5l
Y3Rpb24oY29tbW9uLlNUQVRVU19QUk9UT0NPTF9FUlJPUikKKyAgICAgICAgZXhjZXB0IG1zZ3V0
aWwuVW5zdXBwb3J0ZWRGcmFtZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dl
ci5kZWJ1ZygnJXMnLCBlKQorICAgICAgICAgICAgcmVxdWVzdC53c19zdHJlYW0uY2xvc2VfY29u
bmVjdGlvbihjb21tb24uU1RBVFVTX1VOU1VQUE9SVEVEX0RBVEEpCisgICAgICAgIGV4Y2VwdCBz
dHJlYW0uSW52YWxpZFVURjhFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIu
ZGVidWcoJyVzJywgZSkKKyAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3NlX2Nvbm5l
Y3Rpb24oCisgICAgICAgICAgICAgICAgY29tbW9uLlNUQVRVU19JTlZBTElEX0ZSQU1FX1BBWUxP
QURfREFUQSkKKyAgICAgICAgZXhjZXB0IG1zZ3V0aWwuQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNl
cHRpb24sIGU6CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJyVzJywgZSkKKyAgICAg
ICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICMgQW55IG90aGVyIGV4Y2VwdGlv
bnMgYXJlIGZvcndhcmRlZCB0byB0aGUgY2FsbGVyIG9mIHRoaXMKKyAgICAgICAgICAgICMgZnVu
Y3Rpb24uCisgICAgICAgICAgICB1dGlsLnByZXBlbmRfbWVzc2FnZV90b19leGNlcHRpb24oCisg
ICAgICAgICAgICAgICAgJyVzIHJhaXNlZCBleGNlcHRpb24gZm9yICVzOiAnICUgKAorICAgICAg
ICAgICAgICAgICAgICBfVFJBTlNGRVJfREFUQV9IQU5ETEVSX05BTUUsIHJlcXVlc3Qud3NfcmVz
b3VyY2UpLAorICAgICAgICAgICAgICAgIGUpCisgICAgICAgICAgICByYWlzZQorCisgICAgZGVm
IHBhc3NpdmVfY2xvc2luZ19oYW5kc2hha2Uoc2VsZiwgcmVxdWVzdCk6CisgICAgICAgICIiIlBy
ZXBhcmUgY29kZSBhbmQgcmVhc29uIGZvciByZXNwb25kaW5nIGNsaWVudCBpbml0aWF0ZWQgY2xv
c2luZworICAgICAgICBoYW5kc2hha2UuCisgICAgICAgICIiIgorCisgICAgICAgIGhhbmRsZXJf
c3VpdGUgPSBzZWxmLmdldF9oYW5kbGVyX3N1aXRlKHJlcXVlc3Qud3NfcmVzb3VyY2UpCisgICAg
ICAgIGlmIGhhbmRsZXJfc3VpdGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBfZGVmYXVs
dF9wYXNzaXZlX2Nsb3NpbmdfaGFuZHNoYWtlX2hhbmRsZXIocmVxdWVzdCkKKyAgICAgICAgcmV0
dXJuIGhhbmRsZXJfc3VpdGUucGFzc2l2ZV9jbG9zaW5nX2hhbmRzaGFrZShyZXF1ZXN0KQorCisg
ICAgZGVmIGdldF9oYW5kbGVyX3N1aXRlKHNlbGYsIHJlc291cmNlKToKKyAgICAgICAgIiIiUmV0
cmlldmVzIHR3byBoYW5kbGVycyAob25lIGZvciBleHRyYSBoYW5kc2hha2UgcHJvY2Vzc2luZywg
YW5kIG9uZQorICAgICAgICBmb3IgZGF0YSB0cmFuc2ZlcikgZm9yIHRoZSBnaXZlbiByZXF1ZXN0
IGFzIGEgSGFuZGxlclN1aXRlIG9iamVjdC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZnJhZ21l
bnQgPSBOb25lCisgICAgICAgIGlmICcjJyBpbiByZXNvdXJjZToKKyAgICAgICAgICAgIHJlc291
cmNlLCBmcmFnbWVudCA9IHJlc291cmNlLnNwbGl0KCcjJywgMSkKKyAgICAgICAgaWYgJz8nIGlu
IHJlc291cmNlOgorICAgICAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZS5zcGxpdCgnPycsIDEp
WzBdCisgICAgICAgIGhhbmRsZXJfc3VpdGUgPSBzZWxmLl9oYW5kbGVyX3N1aXRlX21hcC5nZXQo
cmVzb3VyY2UpCisgICAgICAgIGlmIGhhbmRsZXJfc3VpdGUgYW5kIGZyYWdtZW50OgorICAgICAg
ICAgICAgcmFpc2UgRGlzcGF0Y2hFeGNlcHRpb24oJ0ZyYWdtZW50IGlkZW50aWZpZXJzIE1VU1Qg
Tk9UIGJlIHVzZWQgb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dl
YlNvY2tldCBVUklzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1v
bi5IVFRQX1NUQVRVU19CQURfUkVRVUVTVCkKKyAgICAgICAgcmV0dXJuIGhhbmRsZXJfc3VpdGUK
KworICAgIGRlZiBfc291cmNlX2hhbmRsZXJfZmlsZXNfaW5fZGlyKAorICAgICAgICBzZWxmLCBy
b290X2Rpciwgc2Nhbl9kaXIsIGFsbG93X2hhbmRsZXJzX291dHNpZGVfcm9vdF9kaXIpOgorICAg
ICAgICAiIiJTb3VyY2UgYWxsIHRoZSBoYW5kbGVyIHNvdXJjZSBmaWxlcyBpbiB0aGUgc2Nhbl9k
aXIgZGlyZWN0b3J5LgorCisgICAgICAgIFRoZSByZXNvdXJjZSBwYXRoIGlzIGRldGVybWluZWQg
cmVsYXRpdmUgdG8gcm9vdF9kaXIuCisgICAgICAgICIiIgorCisgICAgICAgICMgV2UgYnVpbGQg
YSBtYXAgZnJvbSByZXNvdXJjZSB0byBoYW5kbGVyIGNvZGUgYXNzdW1pbmcgdGhhdCB0aGVyZSdz
CisgICAgICAgICMgb25seSBvbmUgcGF0aCBmcm9tIHJvb3RfZGlyIHRvIHNjYW5fZGlyIGFuZCBp
dCBjYW4gYmUgb2J0YWluZWQgYnkKKyAgICAgICAgIyBjb21wYXJpbmcgcmVhbHBhdGggb2YgdGhl
bS4KKworICAgICAgICAjIEhlcmUgd2UgY2Fubm90IHVzZSBhYnNwYXRoLiBTZWUKKyAgICAgICAg
IyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE2MDMKKworICAgICAg
ICBjb252ZXJ0ID0gX2NyZWF0ZV9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcihyb290X2RpcikK
KyAgICAgICAgc2Nhbl9yZWFscGF0aCA9IG9zLnBhdGgucmVhbHBhdGgoc2Nhbl9kaXIpCisgICAg
ICAgIHJvb3RfcmVhbHBhdGggPSBvcy5wYXRoLnJlYWxwYXRoKHJvb3RfZGlyKQorICAgICAgICBm
b3IgcGF0aCBpbiBfZW51bWVyYXRlX2hhbmRsZXJfZmlsZV9wYXRocyhzY2FuX3JlYWxwYXRoKToK
KyAgICAgICAgICAgIGlmIChub3QgYWxsb3dfaGFuZGxlcnNfb3V0c2lkZV9yb290X2RpciBhbmQK
KyAgICAgICAgICAgICAgICAobm90IG9zLnBhdGgucmVhbHBhdGgocGF0aCkuc3RhcnRzd2l0aChy
b290X3JlYWxwYXRoKSkpOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAg
ICAgICAgICAgICAgICAgICAgJ0Nhbm9uaWNhbCBwYXRoIG9mICVzIGlzIG5vdCB1bmRlciByb290
IGRpcmVjdG9yeScgJQorICAgICAgICAgICAgICAgICAgICBwYXRoKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaGFuZGxlcl9zdWl0
ZSA9IF9zb3VyY2VfaGFuZGxlcl9maWxlKG9wZW4ocGF0aCkucmVhZCgpKQorICAgICAgICAgICAg
ZXhjZXB0IERpc3BhdGNoRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NvdXJj
ZV93YXJuaW5ncy5hcHBlbmQoJyVzOiAlcycgJSAocGF0aCwgZSkpCisgICAgICAgICAgICAgICAg
Y29udGludWUKKyAgICAgICAgICAgIHJlc291cmNlID0gY29udmVydChwYXRoKQorICAgICAgICAg
ICAgaWYgcmVzb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVi
dWcoCisgICAgICAgICAgICAgICAgICAgICdQYXRoIHRvIHJlc291cmNlIGNvbnZlcnNpb24gb24g
JXMgZmFpbGVkJyAlIHBhdGgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNl
bGYuX2hhbmRsZXJfc3VpdGVfbWFwW2NvbnZlcnQocGF0aCldID0gaGFuZGxlcl9zdWl0ZQorCisK
KyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQv
ZXh0ZW5zaW9ucy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2
ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2V4dGVuc2lvbnMucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNGI2ZTA1ZDY4Njc2OWE3NTRmNGZlM2U3YjFmNWRhN2RlNTY0YTUwNQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90
b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2V4dGVuc2lvbnMucHkKQEAgLTAs
MCArMSw5MDkgQEAKKyMgQ29weXJpZ2h0IDIwMTIsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGlt
cG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCB1dGlsCitmcm9tIG1vZF9w
eXdlYnNvY2tldC5odHRwX2hlYWRlcl91dGlsIGltcG9ydCBxdW90ZV9pZl9uZWNlc3NhcnkKKwor
CisjIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzZXJ2ZXIgc2lkZSBleHRlbnNpb24gcHJvY2Vzc29y
IGNsYXNzZXMuCitfYXZhaWxhYmxlX3Byb2Nlc3NvcnMgPSB7fQorX2NvbXByZXNzaW9uX2V4dGVu
c2lvbl9uYW1lcyA9IFtdCisKKworY2xhc3MgRXh0ZW5zaW9uUHJvY2Vzc29ySW50ZXJmYWNlKG9i
amVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCk6CisgICAgICAgIHNlbGYu
X2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX3Jl
cXVlc3QgPSByZXF1ZXN0CisgICAgICAgIHNlbGYuX2FjdGl2ZSA9IFRydWUKKworICAgIGRlZiBy
ZXF1ZXN0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdAorCisgICAgZGVmIG5h
bWUoc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgY2hlY2tfY29uc2lzdGVu
Y3lfd2l0aF9vdGhlcl9wcm9jZXNzb3JzKHNlbGYsIHByb2Nlc3NvcnMpOgorICAgICAgICBwYXNz
CisKKyAgICBkZWYgc2V0X2FjdGl2ZShzZWxmLCBhY3RpdmUpOgorICAgICAgICBzZWxmLl9hY3Rp
dmUgPSBhY3RpdmUKKworICAgIGRlZiBpc19hY3RpdmUoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9hY3RpdmUKKworICAgIGRlZiBfZ2V0X2V4dGVuc2lvbl9yZXNwb25zZV9pbnRlcm5hbChz
ZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXRfZXh0ZW5zaW9uX3Jlc3Bv
bnNlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fYWN0aXZlOgorICAgICAgICAgICAgc2Vs
Zi5fbG9nZ2VyLmRlYnVnKCdFeHRlbnNpb24gJXMgaXMgZGVhY3RpdmF0ZWQnLCBzZWxmLm5hbWUo
KSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLl9n
ZXRfZXh0ZW5zaW9uX3Jlc3BvbnNlX2ludGVybmFsKCkKKyAgICAgICAgaWYgcmVzcG9uc2UgaXMg
Tm9uZToKKyAgICAgICAgICAgIHNlbGYuX2FjdGl2ZSA9IEZhbHNlCisgICAgICAgIHJldHVybiBy
ZXNwb25zZQorCisgICAgZGVmIF9zZXR1cF9zdHJlYW1fb3B0aW9uc19pbnRlcm5hbChzZWxmLCBz
dHJlYW1fb3B0aW9ucyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzZXR1cF9zdHJlYW1fb3B0
aW9ucyhzZWxmLCBzdHJlYW1fb3B0aW9ucyk6CisgICAgICAgIGlmIHNlbGYuX2FjdGl2ZToKKyAg
ICAgICAgICAgIHNlbGYuX3NldHVwX3N0cmVhbV9vcHRpb25zX2ludGVybmFsKHN0cmVhbV9vcHRp
b25zKQorCisKK2RlZiBfbG9nX291dGdvaW5nX2NvbXByZXNzaW9uX3JhdGlvKAorICAgICAgICBs
b2dnZXIsIG9yaWdpbmFsX2J5dGVzLCBmaWx0ZXJlZF9ieXRlcywgYXZlcmFnZV9yYXRpbyk6Cisg
ICAgIyBQcmludCBpbmYgd2hlbiByYXRpbyBpcyBub3QgYXZhaWxhYmxlLgorICAgIHJhdGlvID0g
ZmxvYXQoJ2luZicpCisgICAgaWYgb3JpZ2luYWxfYnl0ZXMgIT0gMDoKKyAgICAgICAgcmF0aW8g
PSBmbG9hdChmaWx0ZXJlZF9ieXRlcykgLyBvcmlnaW5hbF9ieXRlcworCisgICAgbG9nZ2VyLmRl
YnVnKCdPdXRnb2luZyBjb21wcmVzc2lvbiByYXRpbzogJWYgKGF2ZXJhZ2U6ICVmKScgJQorICAg
ICAgICAgICAgKHJhdGlvLCBhdmVyYWdlX3JhdGlvKSkKKworCitkZWYgX2xvZ19pbmNvbWluZ19j
b21wcmVzc2lvbl9yYXRpbygKKyAgICAgICAgbG9nZ2VyLCByZWNlaXZlZF9ieXRlcywgZmlsdGVy
ZWRfYnl0ZXMsIGF2ZXJhZ2VfcmF0aW8pOgorICAgICMgUHJpbnQgaW5mIHdoZW4gcmF0aW8gaXMg
bm90IGF2YWlsYWJsZS4KKyAgICByYXRpbyA9IGZsb2F0KCdpbmYnKQorICAgIGlmIGZpbHRlcmVk
X2J5dGVzICE9IDA6CisgICAgICAgIHJhdGlvID0gZmxvYXQocmVjZWl2ZWRfYnl0ZXMpIC8gZmls
dGVyZWRfYnl0ZXMKKworICAgIGxvZ2dlci5kZWJ1ZygnSW5jb21pbmcgY29tcHJlc3Npb24gcmF0
aW86ICVmIChhdmVyYWdlOiAlZiknICUKKyAgICAgICAgICAgIChyYXRpbywgYXZlcmFnZV9yYXRp
bykpCisKKworZGVmIF9wYXJzZV93aW5kb3dfYml0cyhiaXRzKToKKyAgICAiIiJSZXR1cm4gcGFy
c2VkIGludGVnZXIgdmFsdWUgaWZmIHRoZSBnaXZlbiBzdHJpbmcgY29uZm9ybXMgdG8gdGhlCisg
ICAgZ3JhbW1hciBvZiB0aGUgd2luZG93IGJpdHMgZXh0ZW5zaW9uIHBhcmFtZXRlcnMuCisgICAg
IiIiCisKKyAgICBpZiBiaXRzIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Zh
bHVlIGlzIHJlcXVpcmVkJykKKworICAgICMgRm9yIG5vbiBpbnRlZ2VyIHZhbHVlcyBzdWNoIGFz
ICIxMC4wIiwgVmFsdWVFcnJvciB3aWxsIGJlIHJhaXNlZC4KKyAgICBpbnRfYml0cyA9IGludChi
aXRzKQorCisgICAgIyBGaXJzdCBjb25kaXRpb24gaXMgdG8gZHJvcCBsZWFkaW5nIHplcm8gY2Fz
ZSBlLmcuICIwOCIuCisgICAgaWYgYml0cyAhPSBzdHIoaW50X2JpdHMpIG9yIGludF9iaXRzIDwg
OCBvciBpbnRfYml0cyA+IDE1OgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHZh
bHVlOiAlcicgJSBiaXRzKQorCisgICAgcmV0dXJuIGludF9iaXRzCisKKworY2xhc3MgX0F2ZXJh
Z2VSYXRpb0NhbGN1bGF0b3Iob2JqZWN0KToKKyAgICAiIiJTdG9yZXMgdG90YWwgYnl0ZXMgb2Yg
b3JpZ2luYWwgYW5kIHJlc3VsdCBkYXRhLCBhbmQgY2FsY3VsYXRlcyBhdmVyYWdlCisgICAgcmVz
dWx0IC8gb3JpZ2luYWwgcmF0aW8uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6
CisgICAgICAgIHNlbGYuX3RvdGFsX29yaWdpbmFsX2J5dGVzID0gMAorICAgICAgICBzZWxmLl90
b3RhbF9yZXN1bHRfYnl0ZXMgPSAwCisKKyAgICBkZWYgYWRkX29yaWdpbmFsX2J5dGVzKHNlbGYs
IHZhbHVlKToKKyAgICAgICAgc2VsZi5fdG90YWxfb3JpZ2luYWxfYnl0ZXMgKz0gdmFsdWUKKwor
ICAgIGRlZiBhZGRfcmVzdWx0X2J5dGVzKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fdG90
YWxfcmVzdWx0X2J5dGVzICs9IHZhbHVlCisKKyAgICBkZWYgZ2V0X2F2ZXJhZ2VfcmF0aW8oc2Vs
Zik6CisgICAgICAgIGlmIHNlbGYuX3RvdGFsX29yaWdpbmFsX2J5dGVzICE9IDA6CisgICAgICAg
ICAgICByZXR1cm4gKGZsb2F0KHNlbGYuX3RvdGFsX3Jlc3VsdF9ieXRlcykgLworICAgICAgICAg
ICAgICAgICAgICBzZWxmLl90b3RhbF9vcmlnaW5hbF9ieXRlcykKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHJldHVybiBmbG9hdCgnaW5mJykKKworCitjbGFzcyBEZWZsYXRlRnJhbWVFeHRl
bnNpb25Qcm9jZXNzb3IoRXh0ZW5zaW9uUHJvY2Vzc29ySW50ZXJmYWNlKToKKyAgICAiIiJkZWZs
YXRlLWZyYW1lIGV4dGVuc2lvbiBwcm9jZXNzb3IuCisKKyAgICBTcGVjaWZpY2F0aW9uOgorICAg
IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LXR5b3NoaW5vLWh5Ymktd2Vic29ja2V0
LXBlcmZyYW1lLWRlZmxhdGUKKyAgICAiIiIKKworICAgIF9XSU5ET1dfQklUU19QQVJBTSA9ICdt
YXhfd2luZG93X2JpdHMnCisgICAgX05PX0NPTlRFWFRfVEFLRU9WRVJfUEFSQU0gPSAnbm9fY29u
dGV4dF90YWtlb3ZlcicKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0KToKKyAgICAg
ICAgRXh0ZW5zaW9uUHJvY2Vzc29ySW50ZXJmYWNlLl9faW5pdF9fKHNlbGYsIHJlcXVlc3QpCisg
ICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAg
ICAgIHNlbGYuX3Jlc3BvbnNlX3dpbmRvd19iaXRzID0gTm9uZQorICAgICAgICBzZWxmLl9yZXNw
b25zZV9ub19jb250ZXh0X3Rha2VvdmVyID0gRmFsc2UKKyAgICAgICAgc2VsZi5fYmZpbmFsID0g
RmFsc2UKKworICAgICAgICAjIENhbGN1bGF0ZXMKKyAgICAgICAgIyAgICAgKFRvdGFsIG91dGdv
aW5nIGJ5dGVzIHN1cHBsaWVkIHRvIHRoaXMgZmlsdGVyKSAvCisgICAgICAgICMgICAgIChUb3Rh
bCBieXRlcyBzZW50IHRvIHRoZSBuZXR3b3JrIGFmdGVyIGFwcGx5aW5nIHRoaXMgZmlsdGVyKQor
ICAgICAgICBzZWxmLl9vdXRnb2luZ19hdmVyYWdlX3JhdGlvX2NhbGN1bGF0b3IgPSBfQXZlcmFn
ZVJhdGlvQ2FsY3VsYXRvcigpCisKKyAgICAgICAgIyBDYWxjdWxhdGVzCisgICAgICAgICMgICAg
IChUb3RhbCBieXRlcyByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrKSAvCisgICAgICAgICMgICAg
IChUb3RhbCBpbmNvbWluZyBieXRlcyBvYnRhaW5lZCBhZnRlciBhcHBseWluZyB0aGlzIGZpbHRl
cikKKyAgICAgICAgc2VsZi5faW5jb21pbmdfYXZlcmFnZV9yYXRpb19jYWxjdWxhdG9yID0gX0F2
ZXJhZ2VSYXRpb0NhbGN1bGF0b3IoKQorCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJl
dHVybiBjb21tb24uREVGTEFURV9GUkFNRV9FWFRFTlNJT04KKworICAgIGRlZiBfZ2V0X2V4dGVu
c2lvbl9yZXNwb25zZV9pbnRlcm5hbChzZWxmKToKKyAgICAgICAgIyBBbnkgdW5rbm93biBwYXJh
bWV0ZXIgd2lsbCBiZSBqdXN0IGlnbm9yZWQuCisKKyAgICAgICAgd2luZG93X2JpdHMgPSBOb25l
CisgICAgICAgIGlmIHNlbGYuX3JlcXVlc3QuaGFzX3BhcmFtZXRlcihzZWxmLl9XSU5ET1dfQklU
U19QQVJBTSk6CisgICAgICAgICAgICB3aW5kb3dfYml0cyA9IHNlbGYuX3JlcXVlc3QuZ2V0X3Bh
cmFtZXRlcl92YWx1ZSgKKyAgICAgICAgICAgICAgICBzZWxmLl9XSU5ET1dfQklUU19QQVJBTSkK
KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aW5kb3dfYml0cyA9IF9wYXJzZV93
aW5kb3dfYml0cyh3aW5kb3dfYml0cykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBl
OgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgbm9fY29udGV4dF90YWtl
b3ZlciA9IHNlbGYuX3JlcXVlc3QuaGFzX3BhcmFtZXRlcigKKyAgICAgICAgICAgIHNlbGYuX05P
X0NPTlRFWFRfVEFLRU9WRVJfUEFSQU0pCisgICAgICAgIGlmIChub19jb250ZXh0X3Rha2VvdmVy
IGFuZAorICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC5nZXRfcGFyYW1ldGVyX3ZhbHVlKAorICAg
ICAgICAgICAgICAgIHNlbGYuX05PX0NPTlRFWFRfVEFLRU9WRVJfUEFSQU0pIGlzIG5vdCBOb25l
KToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgc2VsZi5fcmZjMTk3OV9kZWZs
YXRlciA9IHV0aWwuX1JGQzE5NzlEZWZsYXRlcigKKyAgICAgICAgICAgIHdpbmRvd19iaXRzLCBu
b19jb250ZXh0X3Rha2VvdmVyKQorCisgICAgICAgIHNlbGYuX3JmYzE5NzlfaW5mbGF0ZXIgPSB1
dGlsLl9SRkMxOTc5SW5mbGF0ZXIoKQorCisgICAgICAgIHNlbGYuX2NvbXByZXNzX291dGdvaW5n
ID0gVHJ1ZQorCisgICAgICAgIHJlc3BvbnNlID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihz
ZWxmLl9yZXF1ZXN0Lm5hbWUoKSkKKworICAgICAgICBpZiBzZWxmLl9yZXNwb25zZV93aW5kb3df
Yml0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlc3BvbnNlLmFkZF9wYXJhbWV0ZXIoCisg
ICAgICAgICAgICAgICAgc2VsZi5fV0lORE9XX0JJVFNfUEFSQU0sIHN0cihzZWxmLl9yZXNwb25z
ZV93aW5kb3dfYml0cykpCisgICAgICAgIGlmIHNlbGYuX3Jlc3BvbnNlX25vX2NvbnRleHRfdGFr
ZW92ZXI6CisgICAgICAgICAgICByZXNwb25zZS5hZGRfcGFyYW1ldGVyKAorICAgICAgICAgICAg
ICAgIHNlbGYuX05PX0NPTlRFWFRfVEFLRU9WRVJfUEFSQU0sIE5vbmUpCisKKyAgICAgICAgc2Vs
Zi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgJ0VuYWJsZSAlcyBleHRlbnNpb24gKCcKKyAg
ICAgICAgICAgICdyZXF1ZXN0OiB3aW5kb3dfYml0cz0lczsgbm9fY29udGV4dF90YWtlb3Zlcj0l
ciwgJworICAgICAgICAgICAgJ3Jlc3BvbnNlOiB3aW5kb3dfd2JpdHM9JXM7IG5vX2NvbnRleHRf
dGFrZW92ZXI9JXIpJyAlCisgICAgICAgICAgICAoc2VsZi5fcmVxdWVzdC5uYW1lKCksCisgICAg
ICAgICAgICAgd2luZG93X2JpdHMsCisgICAgICAgICAgICAgbm9fY29udGV4dF90YWtlb3ZlciwK
KyAgICAgICAgICAgICBzZWxmLl9yZXNwb25zZV93aW5kb3dfYml0cywKKyAgICAgICAgICAgICBz
ZWxmLl9yZXNwb25zZV9ub19jb250ZXh0X3Rha2VvdmVyKSkKKworICAgICAgICByZXR1cm4gcmVz
cG9uc2UKKworICAgIGRlZiBfc2V0dXBfc3RyZWFtX29wdGlvbnNfaW50ZXJuYWwoc2VsZiwgc3Ry
ZWFtX29wdGlvbnMpOgorCisgICAgICAgIGNsYXNzIF9PdXRnb2luZ0ZpbHRlcihvYmplY3QpOgor
CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50KToKKyAgICAgICAgICAgICAg
ICBzZWxmLl9wYXJlbnQgPSBwYXJlbnQKKworICAgICAgICAgICAgZGVmIGZpbHRlcihzZWxmLCBm
cmFtZSk6CisgICAgICAgICAgICAgICAgc2VsZi5fcGFyZW50Ll9vdXRnb2luZ19maWx0ZXIoZnJh
bWUpCisKKyAgICAgICAgY2xhc3MgX0luY29taW5nRmlsdGVyKG9iamVjdCk6CisKKyAgICAgICAg
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQpOgorICAgICAgICAgICAgICAgIHNlbGYuX3Bh
cmVudCA9IHBhcmVudAorCisgICAgICAgICAgICBkZWYgZmlsdGVyKHNlbGYsIGZyYW1lKToKKyAg
ICAgICAgICAgICAgICBzZWxmLl9wYXJlbnQuX2luY29taW5nX2ZpbHRlcihmcmFtZSkKKworICAg
ICAgICBzdHJlYW1fb3B0aW9ucy5vdXRnb2luZ19mcmFtZV9maWx0ZXJzLmFwcGVuZCgKKyAgICAg
ICAgICAgIF9PdXRnb2luZ0ZpbHRlcihzZWxmKSkKKyAgICAgICAgc3RyZWFtX29wdGlvbnMuaW5j
b21pbmdfZnJhbWVfZmlsdGVycy5pbnNlcnQoCisgICAgICAgICAgICAwLCBfSW5jb21pbmdGaWx0
ZXIoc2VsZikpCisKKyAgICBkZWYgc2V0X3Jlc3BvbnNlX3dpbmRvd19iaXRzKHNlbGYsIHZhbHVl
KToKKyAgICAgICAgc2VsZi5fcmVzcG9uc2Vfd2luZG93X2JpdHMgPSB2YWx1ZQorCisgICAgZGVm
IHNldF9yZXNwb25zZV9ub19jb250ZXh0X3Rha2VvdmVyKHNlbGYsIHZhbHVlKToKKyAgICAgICAg
c2VsZi5fcmVzcG9uc2Vfbm9fY29udGV4dF90YWtlb3ZlciA9IHZhbHVlCisKKyAgICBkZWYgc2V0
X2JmaW5hbChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX2JmaW5hbCA9IHZhbHVlCisKKyAg
ICBkZWYgZW5hYmxlX291dGdvaW5nX2NvbXByZXNzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLl9j
b21wcmVzc19vdXRnb2luZyA9IFRydWUKKworICAgIGRlZiBkaXNhYmxlX291dGdvaW5nX2NvbXBy
ZXNzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLl9jb21wcmVzc19vdXRnb2luZyA9IEZhbHNlCisK
KyAgICBkZWYgX291dGdvaW5nX2ZpbHRlcihzZWxmLCBmcmFtZSk6CisgICAgICAgICIiIlRyYW5z
Zm9ybSBvdXRnb2luZyBmcmFtZXMuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmx5IGJ5CisgICAg
ICAgIGFuIF9PdXRnb2luZ0ZpbHRlciBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAg
b3JpZ2luYWxfcGF5bG9hZF9zaXplID0gbGVuKGZyYW1lLnBheWxvYWQpCisgICAgICAgIHNlbGYu
X291dGdvaW5nX2F2ZXJhZ2VfcmF0aW9fY2FsY3VsYXRvci5hZGRfb3JpZ2luYWxfYnl0ZXMoCisg
ICAgICAgICAgICAgICAgb3JpZ2luYWxfcGF5bG9hZF9zaXplKQorCisgICAgICAgIGlmIChub3Qg
c2VsZi5fY29tcHJlc3Nfb3V0Z29pbmcgb3IKKyAgICAgICAgICAgIGNvbW1vbi5pc19jb250cm9s
X29wY29kZShmcmFtZS5vcGNvZGUpKToKKyAgICAgICAgICAgIHNlbGYuX291dGdvaW5nX2F2ZXJh
Z2VfcmF0aW9fY2FsY3VsYXRvci5hZGRfcmVzdWx0X2J5dGVzKAorICAgICAgICAgICAgICAgICAg
ICBvcmlnaW5hbF9wYXlsb2FkX3NpemUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBm
cmFtZS5wYXlsb2FkID0gc2VsZi5fcmZjMTk3OV9kZWZsYXRlci5maWx0ZXIoCisgICAgICAgICAg
ICBmcmFtZS5wYXlsb2FkLCBiZmluYWw9c2VsZi5fYmZpbmFsKQorICAgICAgICBmcmFtZS5yc3Yx
ID0gMQorCisgICAgICAgIGZpbHRlcmVkX3BheWxvYWRfc2l6ZSA9IGxlbihmcmFtZS5wYXlsb2Fk
KQorICAgICAgICBzZWxmLl9vdXRnb2luZ19hdmVyYWdlX3JhdGlvX2NhbGN1bGF0b3IuYWRkX3Jl
c3VsdF9ieXRlcygKKyAgICAgICAgICAgICAgICBmaWx0ZXJlZF9wYXlsb2FkX3NpemUpCisKKyAg
ICAgICAgX2xvZ19vdXRnb2luZ19jb21wcmVzc2lvbl9yYXRpbygKKyAgICAgICAgICAgICAgICBz
ZWxmLl9sb2dnZXIsCisgICAgICAgICAgICAgICAgb3JpZ2luYWxfcGF5bG9hZF9zaXplLAorICAg
ICAgICAgICAgICAgIGZpbHRlcmVkX3BheWxvYWRfc2l6ZSwKKyAgICAgICAgICAgICAgICBzZWxm
Ll9vdXRnb2luZ19hdmVyYWdlX3JhdGlvX2NhbGN1bGF0b3IuZ2V0X2F2ZXJhZ2VfcmF0aW8oKSkK
KworICAgIGRlZiBfaW5jb21pbmdfZmlsdGVyKHNlbGYsIGZyYW1lKToKKyAgICAgICAgIiIiVHJh
bnNmb3JtIGluY29taW5nIGZyYW1lcy4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9ubHkgYnkKKyAg
ICAgICAgYW4gX0luY29taW5nRmlsdGVyIGluc3RhbmNlLgorICAgICAgICAiIiIKKworICAgICAg
ICByZWNlaXZlZF9wYXlsb2FkX3NpemUgPSBsZW4oZnJhbWUucGF5bG9hZCkKKyAgICAgICAgc2Vs
Zi5faW5jb21pbmdfYXZlcmFnZV9yYXRpb19jYWxjdWxhdG9yLmFkZF9yZXN1bHRfYnl0ZXMoCisg
ICAgICAgICAgICAgICAgcmVjZWl2ZWRfcGF5bG9hZF9zaXplKQorCisgICAgICAgIGlmIGZyYW1l
LnJzdjEgIT0gMSBvciBjb21tb24uaXNfY29udHJvbF9vcGNvZGUoZnJhbWUub3Bjb2RlKToKKyAg
ICAgICAgICAgIHNlbGYuX2luY29taW5nX2F2ZXJhZ2VfcmF0aW9fY2FsY3VsYXRvci5hZGRfb3Jp
Z2luYWxfYnl0ZXMoCisgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkX3BheWxvYWRfc2l6ZSkK
KyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZyYW1lLnBheWxvYWQgPSBzZWxmLl9yZmMx
OTc5X2luZmxhdGVyLmZpbHRlcihmcmFtZS5wYXlsb2FkKQorICAgICAgICBmcmFtZS5yc3YxID0g
MAorCisgICAgICAgIGZpbHRlcmVkX3BheWxvYWRfc2l6ZSA9IGxlbihmcmFtZS5wYXlsb2FkKQor
ICAgICAgICBzZWxmLl9pbmNvbWluZ19hdmVyYWdlX3JhdGlvX2NhbGN1bGF0b3IuYWRkX29yaWdp
bmFsX2J5dGVzKAorICAgICAgICAgICAgICAgIGZpbHRlcmVkX3BheWxvYWRfc2l6ZSkKKworICAg
ICAgICBfbG9nX2luY29taW5nX2NvbXByZXNzaW9uX3JhdGlvKAorICAgICAgICAgICAgICAgIHNl
bGYuX2xvZ2dlciwKKyAgICAgICAgICAgICAgICByZWNlaXZlZF9wYXlsb2FkX3NpemUsCisgICAg
ICAgICAgICAgICAgZmlsdGVyZWRfcGF5bG9hZF9zaXplLAorICAgICAgICAgICAgICAgIHNlbGYu
X2luY29taW5nX2F2ZXJhZ2VfcmF0aW9fY2FsY3VsYXRvci5nZXRfYXZlcmFnZV9yYXRpbygpKQor
CisKK19hdmFpbGFibGVfcHJvY2Vzc29yc1tjb21tb24uREVGTEFURV9GUkFNRV9FWFRFTlNJT05d
ID0gKAorICAgIERlZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nlc3NvcikKK19jb21wcmVzc2lvbl9l
eHRlbnNpb25fbmFtZXMuYXBwZW5kKGNvbW1vbi5ERUZMQVRFX0ZSQU1FX0VYVEVOU0lPTikKKwor
X2F2YWlsYWJsZV9wcm9jZXNzb3JzW2NvbW1vbi5YX1dFQktJVF9ERUZMQVRFX0ZSQU1FX0VYVEVO
U0lPTl0gPSAoCisgICAgRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yKQorX2NvbXByZXNz
aW9uX2V4dGVuc2lvbl9uYW1lcy5hcHBlbmQoY29tbW9uLlhfV0VCS0lUX0RFRkxBVEVfRlJBTUVf
RVhURU5TSU9OKQorCisKK2RlZiBfcGFyc2VfY29tcHJlc3Npb25fbWV0aG9kKGRhdGEpOgorICAg
ICIiIlBhcnNlcyB0aGUgdmFsdWUgb2YgIm1ldGhvZCIgZXh0ZW5zaW9uIHBhcmFtZXRlci4iIiIK
KworICAgIHJldHVybiBjb21tb24ucGFyc2VfZXh0ZW5zaW9ucyhkYXRhLCBhbGxvd19xdW90ZWRf
c3RyaW5nPVRydWUpCisKKworZGVmIF9jcmVhdGVfYWNjZXB0ZWRfbWV0aG9kX2Rlc2MobWV0aG9k
X25hbWUsIG1ldGhvZF9wYXJhbXMpOgorICAgICIiIkNyZWF0ZXMgYWNjZXB0ZWQtbWV0aG9kLWRl
c2MgZnJvbSBnaXZlbiBtZXRob2QgbmFtZSBhbmQgcGFyYW1ldGVycyIiIgorCisgICAgZXh0ZW5z
aW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihtZXRob2RfbmFtZSkKKyAgICBmb3IgbmFt
ZSwgdmFsdWUgaW4gbWV0aG9kX3BhcmFtczoKKyAgICAgICAgZXh0ZW5zaW9uLmFkZF9wYXJhbWV0
ZXIobmFtZSwgdmFsdWUpCisgICAgcmV0dXJuIGNvbW1vbi5mb3JtYXRfZXh0ZW5zaW9uKGV4dGVu
c2lvbikKKworCitjbGFzcyBDb21wcmVzc2lvbkV4dGVuc2lvblByb2Nlc3NvckJhc2UoRXh0ZW5z
aW9uUHJvY2Vzc29ySW50ZXJmYWNlKToKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBwZXJmcmFtZS1j
b21wcmVzcyBhbmQgcGVybWVzc2FnZS1jb21wcmVzcyBleHRlbnNpb24uIiIiCisKKyAgICBfTUVU
SE9EX1BBUkFNID0gJ21ldGhvZCcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0KToK
KyAgICAgICAgRXh0ZW5zaW9uUHJvY2Vzc29ySW50ZXJmYWNlLl9faW5pdF9fKHNlbGYsIHJlcXVl
c3QpCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQor
ICAgICAgICBzZWxmLl9jb21wcmVzc2lvbl9tZXRob2RfbmFtZSA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5fY29tcHJlc3Npb25fcHJvY2Vzc29yID0gTm9uZQorICAgICAgICBzZWxmLl9jb21wcmVzc2lv
bl9wcm9jZXNzb3JfaG9vayA9IE5vbmUKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gJycKKworICAgIGRlZiBfbG9va3VwX2NvbXByZXNzaW9uX3Byb2Nlc3NvcihzZWxmLCBt
ZXRob2RfZGVzYyk6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2dldF9jb21wcmVz
c2lvbl9wcm9jZXNzb3JfcmVzcG9uc2Uoc2VsZik6CisgICAgICAgICIiIkxvb2tzIHVwIHRoZSBj
b21wcmVzc2lvbiBwcm9jZXNzb3IgYmFzZWQgb24gdGhlIHNlbGYuX3JlcXVlc3QgYW5kCisgICAg
ICAgICAgIHJldHVybnMgdGhlIGNvbXByZXNzaW9uIHByb2Nlc3NvcidzIHJlc3BvbnNlLgorICAg
ICAgICAiIiIKKworICAgICAgICBtZXRob2RfbGlzdCA9IHNlbGYuX3JlcXVlc3QuZ2V0X3BhcmFt
ZXRlcl92YWx1ZShzZWxmLl9NRVRIT0RfUEFSQU0pCisgICAgICAgIGlmIG1ldGhvZF9saXN0IGlz
IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBtZXRob2RzID0gX3BhcnNl
X2NvbXByZXNzaW9uX21ldGhvZChtZXRob2RfbGlzdCkKKyAgICAgICAgaWYgbWV0aG9kcyBpcyBO
b25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgY29tcmVzc2lvbl9wcm9jZXNz
b3IgPSBOb25lCisgICAgICAgICMgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdHJpZXMgb25s
eSB0aGUgZmlyc3QgbWV0aG9kIHRoYXQgbWF0Y2hlcworICAgICAgICAjIHN1cHBvcnRlZCBhbGdv
cml0aG0uIEZvbGxvd2luZyBtZXRob2RzIGFyZW4ndCB0cmllZCBldmVuIGlmIHRoZQorICAgICAg
ICAjIGZpcnN0IG9uZSBpcyByZWplY3RlZC4KKyAgICAgICAgIyBUT0RPKGJhc2hpKTogTmVlZCB0
byBjbGFyaWZ5IHRoaXMgYmVoYXZpb3IuCisgICAgICAgIGZvciBtZXRob2RfZGVzYyBpbiBtZXRo
b2RzOgorICAgICAgICAgICAgY29tcHJlc3Npb25fcHJvY2Vzc29yID0gc2VsZi5fbG9va3VwX2Nv
bXByZXNzaW9uX3Byb2Nlc3NvcigKKyAgICAgICAgICAgICAgICBtZXRob2RfZGVzYykKKyAgICAg
ICAgICAgIGlmIGNvbXByZXNzaW9uX3Byb2Nlc3NvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
ICAgICBzZWxmLl9jb21wcmVzc2lvbl9tZXRob2RfbmFtZSA9IG1ldGhvZF9kZXNjLm5hbWUoKQor
ICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIGNvbXByZXNzaW9uX3Byb2Nlc3NvciBp
cyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBzZWxmLl9jb21w
cmVzc2lvbl9wcm9jZXNzb3JfaG9vazoKKyAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzaW9uX3By
b2Nlc3Nvcl9ob29rKGNvbXByZXNzaW9uX3Byb2Nlc3NvcikKKworICAgICAgICBwcm9jZXNzb3Jf
cmVzcG9uc2UgPSBjb21wcmVzc2lvbl9wcm9jZXNzb3IuZ2V0X2V4dGVuc2lvbl9yZXNwb25zZSgp
CisgICAgICAgIGlmIHByb2Nlc3Nvcl9yZXNwb25zZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0
dXJuIE5vbmUKKyAgICAgICAgc2VsZi5fY29tcHJlc3Npb25fcHJvY2Vzc29yID0gY29tcHJlc3Np
b25fcHJvY2Vzc29yCisgICAgICAgIHJldHVybiBwcm9jZXNzb3JfcmVzcG9uc2UKKworICAgIGRl
ZiBfZ2V0X2V4dGVuc2lvbl9yZXNwb25zZV9pbnRlcm5hbChzZWxmKToKKyAgICAgICAgcHJvY2Vz
c29yX3Jlc3BvbnNlID0gc2VsZi5fZ2V0X2NvbXByZXNzaW9uX3Byb2Nlc3Nvcl9yZXNwb25zZSgp
CisgICAgICAgIGlmIHByb2Nlc3Nvcl9yZXNwb25zZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0
dXJuIE5vbmUKKworICAgICAgICByZXNwb25zZSA9IGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIo
c2VsZi5fcmVxdWVzdC5uYW1lKCkpCisgICAgICAgIGFjY2VwdGVkX21ldGhvZF9kZXNjID0gX2Ny
ZWF0ZV9hY2NlcHRlZF9tZXRob2RfZGVzYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fY29tcHJlc3Npb25fbWV0aG9kX25hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3Nvcl9yZXNwb25zZS5nZXRfcGFyYW1ldGVycygpKQorICAg
ICAgICByZXNwb25zZS5hZGRfcGFyYW1ldGVyKHNlbGYuX01FVEhPRF9QQVJBTSwgYWNjZXB0ZWRf
bWV0aG9kX2Rlc2MpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICdF
bmFibGUgJXMgZXh0ZW5zaW9uIChtZXRob2Q6ICVzKScgJQorICAgICAgICAgICAgKHNlbGYuX3Jl
cXVlc3QubmFtZSgpLCBzZWxmLl9jb21wcmVzc2lvbl9tZXRob2RfbmFtZSkpCisgICAgICAgIHJl
dHVybiByZXNwb25zZQorCisgICAgZGVmIF9zZXR1cF9zdHJlYW1fb3B0aW9uc19pbnRlcm5hbChz
ZWxmLCBzdHJlYW1fb3B0aW9ucyk6CisgICAgICAgIGlmIHNlbGYuX2NvbXByZXNzaW9uX3Byb2Nl
c3NvciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2NvbXByZXNz
aW9uX3Byb2Nlc3Nvci5zZXR1cF9zdHJlYW1fb3B0aW9ucyhzdHJlYW1fb3B0aW9ucykKKworICAg
IGRlZiBzZXRfY29tcHJlc3Npb25fcHJvY2Vzc29yX2hvb2soc2VsZiwgaG9vayk6CisgICAgICAg
IHNlbGYuX2NvbXByZXNzaW9uX3Byb2Nlc3Nvcl9ob29rID0gaG9vaworCisgICAgZGVmIGdldF9j
b21wcmVzc2lvbl9wcm9jZXNzb3Ioc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb21wcmVz
c2lvbl9wcm9jZXNzb3IKKworCitjbGFzcyBQZXJGcmFtZUNvbXByZXNzRXh0ZW5zaW9uUHJvY2Vz
c29yKENvbXByZXNzaW9uRXh0ZW5zaW9uUHJvY2Vzc29yQmFzZSk6CisgICAgIiIicGVyZnJhbWUt
Y29tcHJlc3MgcHJvY2Vzc29yLgorCisgICAgU3BlY2lmaWNhdGlvbjoKKyAgICBodHRwOi8vdG9v
bHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLWh5Ymktd2Vic29ja2V0LXBlcmZyYW1lLWNvbXBy
ZXNzaW9uCisgICAgIiIiCisKKyAgICBfREVGTEFURV9NRVRIT0QgPSAnZGVmbGF0ZScKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgQ29tcHJlc3Npb25FeHRlbnNp
b25Qcm9jZXNzb3JCYXNlLl9faW5pdF9fKHNlbGYsIHJlcXVlc3QpCisKKyAgICBkZWYgbmFtZShz
ZWxmKToKKyAgICAgICAgcmV0dXJuIGNvbW1vbi5QRVJGUkFNRV9DT01QUkVTU0lPTl9FWFRFTlNJ
T04KKworICAgIGRlZiBfbG9va3VwX2NvbXByZXNzaW9uX3Byb2Nlc3NvcihzZWxmLCBtZXRob2Rf
ZGVzYyk6CisgICAgICAgIGlmIG1ldGhvZF9kZXNjLm5hbWUoKSA9PSBzZWxmLl9ERUZMQVRFX01F
VEhPRDoKKyAgICAgICAgICAgIHJldHVybiBEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3Io
bWV0aG9kX2Rlc2MpCisgICAgICAgIHJldHVybiBOb25lCisKKworX2F2YWlsYWJsZV9wcm9jZXNz
b3JzW2NvbW1vbi5QRVJGUkFNRV9DT01QUkVTU0lPTl9FWFRFTlNJT05dID0gKAorICAgIFBlckZy
YW1lQ29tcHJlc3NFeHRlbnNpb25Qcm9jZXNzb3IpCitfY29tcHJlc3Npb25fZXh0ZW5zaW9uX25h
bWVzLmFwcGVuZChjb21tb24uUEVSRlJBTUVfQ09NUFJFU1NJT05fRVhURU5TSU9OKQorCisKK2Ns
YXNzIFBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vzc29yKEV4dGVuc2lvblByb2Nlc3Nv
ckludGVyZmFjZSk6CisgICAgIiIicGVybWVzc2FnZS1kZWZsYXRlIGV4dGVuc2lvbiBwcm9jZXNz
b3IuIEl0J3MgYWxzbyB1c2VkIGZvcgorICAgIHBlcm1lc3NhZ2UtY29tcHJlc3MgZXh0ZW5zaW9u
IHdoZW4gdGhlIGRlZmxhdGUgbWV0aG9kIGlzIGNob3Nlbi4KKworICAgIFNwZWNpZmljYXRpb246
CisgICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1oeWJpLXBlcm1lc3Nh
Z2UtY29tcHJlc3Npb24tMDgKKyAgICAiIiIKKworICAgIF9TMkNfTUFYX1dJTkRPV19CSVRTX1BB
UkFNID0gJ3MyY19tYXhfd2luZG93X2JpdHMnCisgICAgX1MyQ19OT19DT05URVhUX1RBS0VPVkVS
X1BBUkFNID0gJ3MyY19ub19jb250ZXh0X3Rha2VvdmVyJworICAgIF9DMlNfTUFYX1dJTkRPV19C
SVRTX1BBUkFNID0gJ2Myc19tYXhfd2luZG93X2JpdHMnCisgICAgX0MyU19OT19DT05URVhUX1RB
S0VPVkVSX1BBUkFNID0gJ2Myc19ub19jb250ZXh0X3Rha2VvdmVyJworCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHJlcXVlc3QsIGRyYWZ0MDg9VHJ1ZSk6CisgICAgICAgICIiIkNvbnN0cnVjdCBQ
ZXJNZXNzYWdlRGVmbGF0ZUV4dGVuc2lvblByb2Nlc3NvcgorCisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgICBkcmFmdDA4OiBGb2xsb3cgdGhlIGNvbnN0cmFpbnRzIG9uIHRoZSBwYXJhbWV0ZXJz
IHRoYXQgd2VyZSBub3QKKyAgICAgICAgICAgICAgICBzcGVjaWZpZWQgZm9yIHBlcm1lc3NhZ2Ut
Y29tcHJlc3MgYnV0IGFyZSBzcGVjaWZpZWQgZm9yCisgICAgICAgICAgICAgICAgcGVybWVzc2Fn
ZS1kZWZsYXRlIGFzIG9uCisgICAgICAgICAgICAgICAgZHJhZnQtaWV0Zi1oeWJpLXBlcm1lc3Nh
Z2UtY29tcHJlc3Npb24tMDguCisgICAgICAgICIiIgorCisgICAgICAgIEV4dGVuc2lvblByb2Nl
c3NvckludGVyZmFjZS5fX2luaXRfXyhzZWxmLCByZXF1ZXN0KQorICAgICAgICBzZWxmLl9sb2dn
ZXIgPSB1dGlsLmdldF9jbGFzc19sb2dnZXIoc2VsZikKKworICAgICAgICBzZWxmLl9wcmVmZXJy
ZWRfYzJzX21heF93aW5kb3dfYml0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fYzJzX25vX2NvbnRl
eHRfdGFrZW92ZXIgPSBGYWxzZQorCisgICAgICAgIHNlbGYuX2RyYWZ0MDggPSBkcmFmdDA4CisK
KyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICdkZWZsYXRlJworCisgICAgZGVm
IF9nZXRfZXh0ZW5zaW9uX3Jlc3BvbnNlX2ludGVybmFsKHNlbGYpOgorICAgICAgICBpZiBzZWxm
Ll9kcmFmdDA4OgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5fcmVxdWVzdC5nZXRfcGFy
YW1ldGVyX25hbWVzKCk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gW3NlbGYuX1My
Q19NQVhfV0lORE9XX0JJVFNfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX1MyQ19OT19DT05URVhUX1RBS0VPVkVSX1BBUkFNLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9DMlNfTUFYX1dJTkRPV19CSVRTX1BBUkFNXToKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdVbmtub3duIHBhcmFtZXRlcjogJXInLCBu
YW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgIyBBbnkgdW5rbm93biBwYXJhbWV0ZXIgd2lsbCBiZSBqdXN0IGlnbm9yZWQuCisg
ICAgICAgICAgICBwYXNzCisKKyAgICAgICAgczJjX21heF93aW5kb3dfYml0cyA9IE5vbmUKKyAg
ICAgICAgaWYgc2VsZi5fcmVxdWVzdC5oYXNfcGFyYW1ldGVyKHNlbGYuX1MyQ19NQVhfV0lORE9X
X0JJVFNfUEFSQU0pOgorICAgICAgICAgICAgczJjX21heF93aW5kb3dfYml0cyA9IHNlbGYuX3Jl
cXVlc3QuZ2V0X3BhcmFtZXRlcl92YWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fUzJD
X01BWF9XSU5ET1dfQklUU19QQVJBTSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICBzMmNfbWF4X3dpbmRvd19iaXRzID0gX3BhcnNlX3dpbmRvd19iaXRzKHMyY19tYXhfd2luZG93
X2JpdHMpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgICAgICAg
ICBzZWxmLl9sb2dnZXIuZGVidWcoJ0JhZCAlcyBwYXJhbWV0ZXI6ICVyJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fUzJDX01BWF9XSU5ET1dfQklUU19QQVJBTSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorCisgICAgICAgIHMyY19ub19jb250ZXh0X3Rha2VvdmVyID0gc2VsZi5fcmVx
dWVzdC5oYXNfcGFyYW1ldGVyKAorICAgICAgICAgICAgc2VsZi5fUzJDX05PX0NPTlRFWFRfVEFL
RU9WRVJfUEFSQU0pCisgICAgICAgIGlmIChzMmNfbm9fY29udGV4dF90YWtlb3ZlciBhbmQKKyAg
ICAgICAgICAgIHNlbGYuX3JlcXVlc3QuZ2V0X3BhcmFtZXRlcl92YWx1ZSgKKyAgICAgICAgICAg
ICAgICBzZWxmLl9TMkNfTk9fQ09OVEVYVF9UQUtFT1ZFUl9QQVJBTSkgaXMgbm90IE5vbmUpOgor
ICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCclcyBwYXJhbWV0ZXIgbXVzdCBub3QgaGF2
ZSBhIHZhbHVlOiAlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fUzJD
X05PX0NPTlRFWFRfVEFLRU9WRVJfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgczJjX25vX2NvbnRleHRfdGFrZW92ZXIpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisg
ICAgICAgICMgYzJzX21heF93aW5kb3dfYml0cyBmcm9tIGEgY2xpZW50IGluZGljYXRlcyB3aGV0
aGVyIHRoZSBjbGllbnQgY2FuCisgICAgICAgICMgYWNjZXB0IGMyc19tYXhfd2luZG93X2JpdHMg
ZnJvbSBhIHNlcnZlciBvciBub3QuCisgICAgICAgIGNsaWVudF9jMnNfbWF4X3dpbmRvd19iaXRz
ID0gc2VsZi5fcmVxdWVzdC5oYXNfcGFyYW1ldGVyKAorICAgICAgICAgICAgc2VsZi5fQzJTX01B
WF9XSU5ET1dfQklUU19QQVJBTSkKKyAgICAgICAgaWYgKHNlbGYuX2RyYWZ0MDggYW5kCisgICAg
ICAgICAgICBjbGllbnRfYzJzX21heF93aW5kb3dfYml0cyBhbmQKKyAgICAgICAgICAgIHNlbGYu
X3JlcXVlc3QuZ2V0X3BhcmFtZXRlcl92YWx1ZSgKKyAgICAgICAgICAgICAgICBzZWxmLl9DMlNf
TUFYX1dJTkRPV19CSVRTX1BBUkFNKSBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICBzZWxmLl9s
b2dnZXIuZGVidWcoJyVzIHBhcmFtZXRlciBtdXN0IG5vdCBoYXZlIGEgdmFsdWUgaW4gYSAnCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsaWVudFwncyBvcGVuaW5nIGhhbmRzaGFr
ZTogJXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX0MyU19NQVhfV0lO
RE9XX0JJVFNfUEFSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X2My
c19tYXhfd2luZG93X2JpdHMpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHNl
bGYuX3JmYzE5NzlfZGVmbGF0ZXIgPSB1dGlsLl9SRkMxOTc5RGVmbGF0ZXIoCisgICAgICAgICAg
ICBzMmNfbWF4X3dpbmRvd19iaXRzLCBzMmNfbm9fY29udGV4dF90YWtlb3ZlcikKKworICAgICAg
ICAjIE5vdGUgdGhhdCB3ZSBwcmVwYXJlIGZvciBpbmNvbWluZyBtZXNzYWdlcyBjb21wcmVzc2Vk
IHdpdGggd2luZG93CisgICAgICAgICMgYml0cyB1cHRvIDE1IHJlZ2FyZGxlc3Mgb2YgdGhlIGMy
c19tYXhfd2luZG93X2JpdHMgdmFsdWUgdG8gYmUgc2VudAorICAgICAgICAjIHRvIHRoZSBjbGll
bnQuCisgICAgICAgIHNlbGYuX3JmYzE5NzlfaW5mbGF0ZXIgPSB1dGlsLl9SRkMxOTc5SW5mbGF0
ZXIoKQorCisgICAgICAgIHNlbGYuX2ZyYW1lciA9IF9QZXJNZXNzYWdlRGVmbGF0ZUZyYW1lcigK
KyAgICAgICAgICAgIHMyY19tYXhfd2luZG93X2JpdHMsIHMyY19ub19jb250ZXh0X3Rha2VvdmVy
KQorICAgICAgICBzZWxmLl9mcmFtZXIuc2V0X2JmaW5hbChGYWxzZSkKKyAgICAgICAgc2VsZi5f
ZnJhbWVyLnNldF9jb21wcmVzc19vdXRnb2luZ19lbmFibGVkKFRydWUpCisKKyAgICAgICAgcmVz
cG9uc2UgPSBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVyKHNlbGYuX3JlcXVlc3QubmFtZSgpKQor
CisgICAgICAgIGlmIHMyY19tYXhfd2luZG93X2JpdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICByZXNwb25zZS5hZGRfcGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIHNlbGYuX1MyQ19NQVhf
V0lORE9XX0JJVFNfUEFSQU0sIHN0cihzMmNfbWF4X3dpbmRvd19iaXRzKSkKKworICAgICAgICBp
ZiBzMmNfbm9fY29udGV4dF90YWtlb3ZlcjoKKyAgICAgICAgICAgIHJlc3BvbnNlLmFkZF9wYXJh
bWV0ZXIoCisgICAgICAgICAgICAgICAgc2VsZi5fUzJDX05PX0NPTlRFWFRfVEFLRU9WRVJfUEFS
QU0sIE5vbmUpCisKKyAgICAgICAgaWYgc2VsZi5fcHJlZmVycmVkX2Myc19tYXhfd2luZG93X2Jp
dHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9kcmFmdDA4IGFuZCBub3QgY2xp
ZW50X2Myc19tYXhfd2luZG93X2JpdHM6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRl
YnVnKCdQcm9jZXNzb3IgaXMgY29uZmlndXJlZCB0byB1c2UgJXMgYnV0ICcKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBjbGllbnQgY2Fubm90IGFjY2VwdCBpdCcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX0MyU19NQVhfV0lORE9XX0JJ
VFNfUEFSQU0pCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHJlc3Bv
bnNlLmFkZF9wYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgc2VsZi5fQzJTX01BWF9XSU5ET1df
QklUU19QQVJBTSwKKyAgICAgICAgICAgICAgICBzdHIoc2VsZi5fcHJlZmVycmVkX2Myc19tYXhf
d2luZG93X2JpdHMpKQorCisgICAgICAgIGlmIHNlbGYuX2Myc19ub19jb250ZXh0X3Rha2VvdmVy
OgorICAgICAgICAgICAgcmVzcG9uc2UuYWRkX3BhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBz
ZWxmLl9DMlNfTk9fQ09OVEVYVF9UQUtFT1ZFUl9QQVJBTSwgTm9uZSkKKworICAgICAgICBzZWxm
Ll9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAnRW5hYmxlICVzIGV4dGVuc2lvbiAoJworICAg
ICAgICAgICAgJ3JlcXVlc3Q6IHMyY19tYXhfd2luZG93X2JpdHM9JXM7IHMyY19ub19jb250ZXh0
X3Rha2VvdmVyPSVyLCAnCisgICAgICAgICAgICAncmVzcG9uc2U6IGMyc19tYXhfd2luZG93X2Jp
dHM9JXM7IGMyc19ub19jb250ZXh0X3Rha2VvdmVyPSVyKScgJQorICAgICAgICAgICAgKHNlbGYu
X3JlcXVlc3QubmFtZSgpLAorICAgICAgICAgICAgIHMyY19tYXhfd2luZG93X2JpdHMsCisgICAg
ICAgICAgICAgczJjX25vX2NvbnRleHRfdGFrZW92ZXIsCisgICAgICAgICAgICAgc2VsZi5fcHJl
ZmVycmVkX2Myc19tYXhfd2luZG93X2JpdHMsCisgICAgICAgICAgICAgc2VsZi5fYzJzX25vX2Nv
bnRleHRfdGFrZW92ZXIpKQorCisgICAgICAgIHJldHVybiByZXNwb25zZQorCisgICAgZGVmIF9z
ZXR1cF9zdHJlYW1fb3B0aW9uc19pbnRlcm5hbChzZWxmLCBzdHJlYW1fb3B0aW9ucyk6CisgICAg
ICAgIHNlbGYuX2ZyYW1lci5zZXR1cF9zdHJlYW1fb3B0aW9ucyhzdHJlYW1fb3B0aW9ucykKKwor
ICAgIGRlZiBzZXRfYzJzX21heF93aW5kb3dfYml0cyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICIi
IklmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhpcyBjbGFzcyBhZGRzIHRoZSBjMnNfbWF4
X3dpbmRvd19iaXRzCisgICAgICAgIGV4dGVuc2lvbiBwYXJhbWV0ZXIgdG8gdGhlIGhhbmRzaGFr
ZSByZXNwb25zZSwgYnV0IGRvZXNuJ3QgcmVkdWNlIHRoZQorICAgICAgICBMWjc3IHNsaWRpbmcg
d2luZG93IHNpemUgb2YgaXRzIGluZmxhdGVyLiBJLmUuLCB5b3UgY2FuIHVzZSB0aGlzIGZvcgor
ICAgICAgICB0ZXN0aW5nIGNsaWVudCBpbXBsZW1lbnRhdGlvbiBidXQgY2Fubm90IHJlZHVjZSBt
ZW1vcnkgdXNhZ2Ugb2YgdGhpcworICAgICAgICBjbGFzcy4KKworICAgICAgICBJZiB0aGlzIG1l
dGhvZCBoYXMgYmVlbiBjYWxsZWQgd2l0aCBUcnVlIGFuZCBhbiBvZmZlciB3aXRob3V0IHRoZQor
ICAgICAgICBjMnNfbWF4X3dpbmRvd19iaXRzIGV4dGVuc2lvbiBwYXJhbWV0ZXIgaXMgcmVjZWl2
ZWQsCisgICAgICAgIC0gKFdoZW4gcHJvY2Vzc2luZyB0aGUgcGVybWVzc2FnZS1kZWZsYXRlIGV4
dGVuc2lvbikgdGhpcyBwcm9jZXNzb3IKKyAgICAgICAgICBkZWNsaW5lcyB0aGUgcmVxdWVzdC4K
KyAgICAgICAgLSAoV2hlbiBwcm9jZXNzaW5nIHRoZSBwZXJtZXNzYWdlLWNvbXByZXNzIGV4dGVu
c2lvbikgdGhpcyBwcm9jZXNzb3IKKyAgICAgICAgICBhY2NlcHRzIHRoZSByZXF1ZXN0LgorICAg
ICAgICAiIiIKKworICAgICAgICBzZWxmLl9wcmVmZXJyZWRfYzJzX21heF93aW5kb3dfYml0cyA9
IHZhbHVlCisKKyAgICBkZWYgc2V0X2Myc19ub19jb250ZXh0X3Rha2VvdmVyKHNlbGYsIHZhbHVl
KToKKyAgICAgICAgIiIiSWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGlzIGNsYXNzIGFk
ZHMgdGhlCisgICAgICAgIGMyc19ub19jb250ZXh0X3Rha2VvdmVyIGV4dGVuc2lvbiBwYXJhbWV0
ZXIgdG8gdGhlIGhhbmRzaGFrZSByZXNwb25zZSwKKyAgICAgICAgYnV0IGRvZXNuJ3QgcmVzZXQg
aW5mbGF0ZXIgZm9yIGVhY2ggbWVzc2FnZS4gSS5lLiwgeW91IGNhbiB1c2UgdGhpcyBmb3IKKyAg
ICAgICAgdGVzdGluZyBjbGllbnQgaW1wbGVtZW50YXRpb24gYnV0IGNhbm5vdCByZWR1Y2UgbWVt
b3J5IHVzYWdlIG9mIHRoaXMKKyAgICAgICAgY2xhc3MuCisgICAgICAgICIiIgorCisgICAgICAg
IHNlbGYuX2Myc19ub19jb250ZXh0X3Rha2VvdmVyID0gdmFsdWUKKworICAgIGRlZiBzZXRfYmZp
bmFsKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fZnJhbWVyLnNldF9iZmluYWwodmFsdWUp
CisKKyAgICBkZWYgZW5hYmxlX291dGdvaW5nX2NvbXByZXNzaW9uKHNlbGYpOgorICAgICAgICBz
ZWxmLl9mcmFtZXIuc2V0X2NvbXByZXNzX291dGdvaW5nX2VuYWJsZWQoVHJ1ZSkKKworICAgIGRl
ZiBkaXNhYmxlX291dGdvaW5nX2NvbXByZXNzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLl9mcmFt
ZXIuc2V0X2NvbXByZXNzX291dGdvaW5nX2VuYWJsZWQoRmFsc2UpCisKKworY2xhc3MgX1Blck1l
c3NhZ2VEZWZsYXRlRnJhbWVyKG9iamVjdCk6CisgICAgIiIiQSBmcmFtZXIgZm9yIGV4dGVuc2lv
bnMgd2l0aCBwZXItbWVzc2FnZSBERUZMQVRFIGZlYXR1cmUuIiIiCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgZGVmbGF0ZV9tYXhfd2luZG93X2JpdHMsIGRlZmxhdGVfbm9fY29udGV4dF90YWtl
b3Zlcik6CisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxm
KQorCisgICAgICAgIHNlbGYuX3JmYzE5NzlfZGVmbGF0ZXIgPSB1dGlsLl9SRkMxOTc5RGVmbGF0
ZXIoCisgICAgICAgICAgICBkZWZsYXRlX21heF93aW5kb3dfYml0cywgZGVmbGF0ZV9ub19jb250
ZXh0X3Rha2VvdmVyKQorCisgICAgICAgIHNlbGYuX3JmYzE5NzlfaW5mbGF0ZXIgPSB1dGlsLl9S
RkMxOTc5SW5mbGF0ZXIoKQorCisgICAgICAgIHNlbGYuX2JmaW5hbCA9IEZhbHNlCisKKyAgICAg
ICAgc2VsZi5fY29tcHJlc3Nfb3V0Z29pbmdfZW5hYmxlZCA9IEZhbHNlCisKKyAgICAgICAgIyBU
cnVlIGlmIGEgbWVzc2FnZSBpcyBmcmFnbWVudGVkIGFuZCBjb21wcmVzc2lvbiBpcyBvbmdvaW5n
LgorICAgICAgICBzZWxmLl9jb21wcmVzc19vbmdvaW5nID0gRmFsc2UKKworICAgICAgICAjIENh
bGN1bGF0ZXMKKyAgICAgICAgIyAgICAgKFRvdGFsIG91dGdvaW5nIGJ5dGVzIHN1cHBsaWVkIHRv
IHRoaXMgZmlsdGVyKSAvCisgICAgICAgICMgICAgIChUb3RhbCBieXRlcyBzZW50IHRvIHRoZSBu
ZXR3b3JrIGFmdGVyIGFwcGx5aW5nIHRoaXMgZmlsdGVyKQorICAgICAgICBzZWxmLl9vdXRnb2lu
Z19hdmVyYWdlX3JhdGlvX2NhbGN1bGF0b3IgPSBfQXZlcmFnZVJhdGlvQ2FsY3VsYXRvcigpCisK
KyAgICAgICAgIyBDYWxjdWxhdGVzCisgICAgICAgICMgICAgIChUb3RhbCBieXRlcyByZWNlaXZl
ZCBmcm9tIHRoZSBuZXR3b3JrKSAvCisgICAgICAgICMgICAgIChUb3RhbCBpbmNvbWluZyBieXRl
cyBvYnRhaW5lZCBhZnRlciBhcHBseWluZyB0aGlzIGZpbHRlcikKKyAgICAgICAgc2VsZi5faW5j
b21pbmdfYXZlcmFnZV9yYXRpb19jYWxjdWxhdG9yID0gX0F2ZXJhZ2VSYXRpb0NhbGN1bGF0b3Io
KQorCisgICAgZGVmIHNldF9iZmluYWwoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9iZmlu
YWwgPSB2YWx1ZQorCisgICAgZGVmIHNldF9jb21wcmVzc19vdXRnb2luZ19lbmFibGVkKHNlbGYs
IHZhbHVlKToKKyAgICAgICAgc2VsZi5fY29tcHJlc3Nfb3V0Z29pbmdfZW5hYmxlZCA9IHZhbHVl
CisKKyAgICBkZWYgX3Byb2Nlc3NfaW5jb21pbmdfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCBkZWNv
bXByZXNzKToKKyAgICAgICAgaWYgbm90IGRlY29tcHJlc3M6CisgICAgICAgICAgICByZXR1cm4g
bWVzc2FnZQorCisgICAgICAgIHJlY2VpdmVkX3BheWxvYWRfc2l6ZSA9IGxlbihtZXNzYWdlKQor
ICAgICAgICBzZWxmLl9pbmNvbWluZ19hdmVyYWdlX3JhdGlvX2NhbGN1bGF0b3IuYWRkX3Jlc3Vs
dF9ieXRlcygKKyAgICAgICAgICAgICAgICByZWNlaXZlZF9wYXlsb2FkX3NpemUpCisKKyAgICAg
ICAgbWVzc2FnZSA9IHNlbGYuX3JmYzE5NzlfaW5mbGF0ZXIuZmlsdGVyKG1lc3NhZ2UpCisKKyAg
ICAgICAgZmlsdGVyZWRfcGF5bG9hZF9zaXplID0gbGVuKG1lc3NhZ2UpCisgICAgICAgIHNlbGYu
X2luY29taW5nX2F2ZXJhZ2VfcmF0aW9fY2FsY3VsYXRvci5hZGRfb3JpZ2luYWxfYnl0ZXMoCisg
ICAgICAgICAgICAgICAgZmlsdGVyZWRfcGF5bG9hZF9zaXplKQorCisgICAgICAgIF9sb2dfaW5j
b21pbmdfY29tcHJlc3Npb25fcmF0aW8oCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLAor
ICAgICAgICAgICAgICAgIHJlY2VpdmVkX3BheWxvYWRfc2l6ZSwKKyAgICAgICAgICAgICAgICBm
aWx0ZXJlZF9wYXlsb2FkX3NpemUsCisgICAgICAgICAgICAgICAgc2VsZi5faW5jb21pbmdfYXZl
cmFnZV9yYXRpb19jYWxjdWxhdG9yLmdldF9hdmVyYWdlX3JhdGlvKCkpCisKKyAgICAgICAgcmV0
dXJuIG1lc3NhZ2UKKworICAgIGRlZiBfcHJvY2Vzc19vdXRnb2luZ19tZXNzYWdlKHNlbGYsIG1l
c3NhZ2UsIGVuZCwgYmluYXJ5KToKKyAgICAgICAgaWYgbm90IGJpbmFyeToKKyAgICAgICAgICAg
IG1lc3NhZ2UgPSBtZXNzYWdlLmVuY29kZSgndXRmLTgnKQorCisgICAgICAgIGlmIG5vdCBzZWxm
Ll9jb21wcmVzc19vdXRnb2luZ19lbmFibGVkOgorICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UK
KworICAgICAgICBvcmlnaW5hbF9wYXlsb2FkX3NpemUgPSBsZW4obWVzc2FnZSkKKyAgICAgICAg
c2VsZi5fb3V0Z29pbmdfYXZlcmFnZV9yYXRpb19jYWxjdWxhdG9yLmFkZF9vcmlnaW5hbF9ieXRl
cygKKyAgICAgICAgICAgIG9yaWdpbmFsX3BheWxvYWRfc2l6ZSkKKworICAgICAgICBtZXNzYWdl
ID0gc2VsZi5fcmZjMTk3OV9kZWZsYXRlci5maWx0ZXIoCisgICAgICAgICAgICBtZXNzYWdlLCBm
bHVzaD1lbmQsIGJmaW5hbD1zZWxmLl9iZmluYWwpCisKKyAgICAgICAgZmlsdGVyZWRfcGF5bG9h
ZF9zaXplID0gbGVuKG1lc3NhZ2UpCisgICAgICAgIHNlbGYuX291dGdvaW5nX2F2ZXJhZ2VfcmF0
aW9fY2FsY3VsYXRvci5hZGRfcmVzdWx0X2J5dGVzKAorICAgICAgICAgICAgZmlsdGVyZWRfcGF5
bG9hZF9zaXplKQorCisgICAgICAgIF9sb2dfb3V0Z29pbmdfY29tcHJlc3Npb25fcmF0aW8oCisg
ICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLAorICAgICAgICAgICAgICAgIG9yaWdpbmFsX3Bh
eWxvYWRfc2l6ZSwKKyAgICAgICAgICAgICAgICBmaWx0ZXJlZF9wYXlsb2FkX3NpemUsCisgICAg
ICAgICAgICAgICAgc2VsZi5fb3V0Z29pbmdfYXZlcmFnZV9yYXRpb19jYWxjdWxhdG9yLmdldF9h
dmVyYWdlX3JhdGlvKCkpCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2NvbXByZXNzX29uZ29pbmc6
CisgICAgICAgICAgICBzZWxmLl9vdXRnb2luZ19mcmFtZV9maWx0ZXIuc2V0X2NvbXByZXNzaW9u
X2JpdCgpCisgICAgICAgIHNlbGYuX2NvbXByZXNzX29uZ29pbmcgPSBub3QgZW5kCisgICAgICAg
IHJldHVybiBtZXNzYWdlCisKKyAgICBkZWYgX3Byb2Nlc3NfaW5jb21pbmdfZnJhbWUoc2VsZiwg
ZnJhbWUpOgorICAgICAgICBpZiBmcmFtZS5yc3YxID09IDEgYW5kIG5vdCBjb21tb24uaXNfY29u
dHJvbF9vcGNvZGUoZnJhbWUub3Bjb2RlKToKKyAgICAgICAgICAgIHNlbGYuX2luY29taW5nX21l
c3NhZ2VfZmlsdGVyLmRlY29tcHJlc3NfbmV4dF9tZXNzYWdlKCkKKyAgICAgICAgICAgIGZyYW1l
LnJzdjEgPSAwCisKKyAgICBkZWYgX3Byb2Nlc3Nfb3V0Z29pbmdfZnJhbWUoc2VsZiwgZnJhbWUs
IGNvbXByZXNzaW9uX2JpdCk6CisgICAgICAgIGlmIChub3QgY29tcHJlc3Npb25fYml0IG9yCisg
ICAgICAgICAgICBjb21tb24uaXNfY29udHJvbF9vcGNvZGUoZnJhbWUub3Bjb2RlKSk6CisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICBmcmFtZS5yc3YxID0gMQorCisgICAgZGVmIHNldHVw
X3N0cmVhbV9vcHRpb25zKHNlbGYsIHN0cmVhbV9vcHRpb25zKToKKyAgICAgICAgIiIiQ3JlYXRl
cyBmaWx0ZXJzIGFuZCBzZXRzIHRoZW0gdG8gdGhlIFN0cmVhbU9wdGlvbnMuIiIiCisKKyAgICAg
ICAgY2xhc3MgX091dGdvaW5nTWVzc2FnZUZpbHRlcihvYmplY3QpOgorCisgICAgICAgICAgICBk
ZWYgX19pbml0X18oc2VsZiwgcGFyZW50KToKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJlbnQg
PSBwYXJlbnQKKworICAgICAgICAgICAgZGVmIGZpbHRlcihzZWxmLCBtZXNzYWdlLCBlbmQ9VHJ1
ZSwgYmluYXJ5PUZhbHNlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGFyZW50Ll9w
cm9jZXNzX291dGdvaW5nX21lc3NhZ2UoCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIGVu
ZCwgYmluYXJ5KQorCisgICAgICAgIGNsYXNzIF9JbmNvbWluZ01lc3NhZ2VGaWx0ZXIob2JqZWN0
KToKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCk6CisgICAgICAgICAg
ICAgICAgc2VsZi5fcGFyZW50ID0gcGFyZW50CisgICAgICAgICAgICAgICAgc2VsZi5fZGVjb21w
cmVzc19uZXh0X21lc3NhZ2UgPSBGYWxzZQorCisgICAgICAgICAgICBkZWYgZGVjb21wcmVzc19u
ZXh0X21lc3NhZ2Uoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc19uZXh0
X21lc3NhZ2UgPSBUcnVlCisKKyAgICAgICAgICAgIGRlZiBmaWx0ZXIoc2VsZiwgbWVzc2FnZSk6
CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYuX3BhcmVudC5fcHJvY2Vzc19pbmNvbWlu
Z19tZXNzYWdlKAorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBzZWxmLl9kZWNvbXByZXNz
X25leHRfbWVzc2FnZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9kZWNvbXByZXNzX25leHRfbWVz
c2FnZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UKKworICAgICAgICBz
ZWxmLl9vdXRnb2luZ19tZXNzYWdlX2ZpbHRlciA9IF9PdXRnb2luZ01lc3NhZ2VGaWx0ZXIoc2Vs
ZikKKyAgICAgICAgc2VsZi5faW5jb21pbmdfbWVzc2FnZV9maWx0ZXIgPSBfSW5jb21pbmdNZXNz
YWdlRmlsdGVyKHNlbGYpCisgICAgICAgIHN0cmVhbV9vcHRpb25zLm91dGdvaW5nX21lc3NhZ2Vf
ZmlsdGVycy5hcHBlbmQoCisgICAgICAgICAgICBzZWxmLl9vdXRnb2luZ19tZXNzYWdlX2ZpbHRl
cikKKyAgICAgICAgc3RyZWFtX29wdGlvbnMuaW5jb21pbmdfbWVzc2FnZV9maWx0ZXJzLmFwcGVu
ZCgKKyAgICAgICAgICAgIHNlbGYuX2luY29taW5nX21lc3NhZ2VfZmlsdGVyKQorCisgICAgICAg
IGNsYXNzIF9PdXRnb2luZ0ZyYW1lRmlsdGVyKG9iamVjdCk6CisKKyAgICAgICAgICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwYXJlbnQpOgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcmVudCA9IHBh
cmVudAorICAgICAgICAgICAgICAgIHNlbGYuX3NldF9jb21wcmVzc2lvbl9iaXQgPSBGYWxzZQor
CisgICAgICAgICAgICBkZWYgc2V0X2NvbXByZXNzaW9uX2JpdChzZWxmKToKKyAgICAgICAgICAg
ICAgICBzZWxmLl9zZXRfY29tcHJlc3Npb25fYml0ID0gVHJ1ZQorCisgICAgICAgICAgICBkZWYg
ZmlsdGVyKHNlbGYsIGZyYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJlbnQuX3Byb2Nl
c3Nfb3V0Z29pbmdfZnJhbWUoCisgICAgICAgICAgICAgICAgICAgIGZyYW1lLCBzZWxmLl9zZXRf
Y29tcHJlc3Npb25fYml0KQorICAgICAgICAgICAgICAgIHNlbGYuX3NldF9jb21wcmVzc2lvbl9i
aXQgPSBGYWxzZQorCisgICAgICAgIGNsYXNzIF9JbmNvbWluZ0ZyYW1lRmlsdGVyKG9iamVjdCk6
CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQpOgorICAgICAgICAgICAg
ICAgIHNlbGYuX3BhcmVudCA9IHBhcmVudAorCisgICAgICAgICAgICBkZWYgZmlsdGVyKHNlbGYs
IGZyYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJlbnQuX3Byb2Nlc3NfaW5jb21pbmdf
ZnJhbWUoZnJhbWUpCisKKyAgICAgICAgc2VsZi5fb3V0Z29pbmdfZnJhbWVfZmlsdGVyID0gX091
dGdvaW5nRnJhbWVGaWx0ZXIoc2VsZikKKyAgICAgICAgc2VsZi5faW5jb21pbmdfZnJhbWVfZmls
dGVyID0gX0luY29taW5nRnJhbWVGaWx0ZXIoc2VsZikKKyAgICAgICAgc3RyZWFtX29wdGlvbnMu
b3V0Z29pbmdfZnJhbWVfZmlsdGVycy5hcHBlbmQoCisgICAgICAgICAgICBzZWxmLl9vdXRnb2lu
Z19mcmFtZV9maWx0ZXIpCisgICAgICAgIHN0cmVhbV9vcHRpb25zLmluY29taW5nX2ZyYW1lX2Zp
bHRlcnMuYXBwZW5kKAorICAgICAgICAgICAgc2VsZi5faW5jb21pbmdfZnJhbWVfZmlsdGVyKQor
CisgICAgICAgIHN0cmVhbV9vcHRpb25zLmVuY29kZV90ZXh0X21lc3NhZ2VfdG9fdXRmOCA9IEZh
bHNlCisKKworX2F2YWlsYWJsZV9wcm9jZXNzb3JzW2NvbW1vbi5QRVJNRVNTQUdFX0RFRkxBVEVf
RVhURU5TSU9OXSA9ICgKKyAgICAgICAgUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNz
b3IpCisjIFRPRE8odHlvc2hpbm8pOiBSZW9yZ2FuaXplIGNsYXNzIG5hbWVzLgorX2NvbXByZXNz
aW9uX2V4dGVuc2lvbl9uYW1lcy5hcHBlbmQoJ2RlZmxhdGUnKQorCisKK2NsYXNzIFBlck1lc3Nh
Z2VDb21wcmVzc0V4dGVuc2lvblByb2Nlc3NvcigKKyAgICBDb21wcmVzc2lvbkV4dGVuc2lvblBy
b2Nlc3NvckJhc2UpOgorICAgICIiInBlcm1lc3NhZ2UtY29tcHJlc3MgZXh0ZW5zaW9uIHByb2Nl
c3Nvci4KKworICAgIFNwZWNpZmljYXRpb246CisgICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0
bWwvZHJhZnQtaWV0Zi1oeWJpLXBlcm1lc3NhZ2UtY29tcHJlc3Npb24KKyAgICAiIiIKKworICAg
IF9ERUZMQVRFX01FVEhPRCA9ICdkZWZsYXRlJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJl
cXVlc3QpOgorICAgICAgICBDb21wcmVzc2lvbkV4dGVuc2lvblByb2Nlc3NvckJhc2UuX19pbml0
X18oc2VsZiwgcmVxdWVzdCkKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4g
Y29tbW9uLlBFUk1FU1NBR0VfQ09NUFJFU1NJT05fRVhURU5TSU9OCisKKyAgICBkZWYgX2xvb2t1
cF9jb21wcmVzc2lvbl9wcm9jZXNzb3Ioc2VsZiwgbWV0aG9kX2Rlc2MpOgorICAgICAgICBpZiBt
ZXRob2RfZGVzYy5uYW1lKCkgPT0gc2VsZi5fREVGTEFURV9NRVRIT0Q6CisgICAgICAgICAgICBy
ZXR1cm4gUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3IobWV0aG9kX2Rlc2MsIEZh
bHNlKQorICAgICAgICByZXR1cm4gTm9uZQorCisKK19hdmFpbGFibGVfcHJvY2Vzc29yc1tjb21t
b24uUEVSTUVTU0FHRV9DT01QUkVTU0lPTl9FWFRFTlNJT05dID0gKAorICAgIFBlck1lc3NhZ2VD
b21wcmVzc0V4dGVuc2lvblByb2Nlc3NvcikKK19jb21wcmVzc2lvbl9leHRlbnNpb25fbmFtZXMu
YXBwZW5kKGNvbW1vbi5QRVJNRVNTQUdFX0NPTVBSRVNTSU9OX0VYVEVOU0lPTikKKworCitjbGFz
cyBNdXhFeHRlbnNpb25Qcm9jZXNzb3IoRXh0ZW5zaW9uUHJvY2Vzc29ySW50ZXJmYWNlKToKKyAg
ICAiIiJXZWJTb2NrZXQgbXVsdGlwbGV4aW5nIGV4dGVuc2lvbiBwcm9jZXNzb3IuIiIiCisKKyAg
ICBfUVVPVEFfUEFSQU0gPSAncXVvdGEnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVz
dCk6CisgICAgICAgIEV4dGVuc2lvblByb2Nlc3NvckludGVyZmFjZS5fX2luaXRfXyhzZWxmLCBy
ZXF1ZXN0KQorICAgICAgICBzZWxmLl9xdW90YSA9IDAKKyAgICAgICAgc2VsZi5fZXh0ZW5zaW9u
cyA9IFtdCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGNvbW1vbi5NVVhf
RVhURU5TSU9OCisKKyAgICBkZWYgY2hlY2tfY29uc2lzdGVuY3lfd2l0aF9vdGhlcl9wcm9jZXNz
b3JzKHNlbGYsIHByb2Nlc3NvcnMpOgorICAgICAgICBiZWZvcmVfbXV4ID0gVHJ1ZQorICAgICAg
ICBmb3IgcHJvY2Vzc29yIGluIHByb2Nlc3NvcnM6CisgICAgICAgICAgICBuYW1lID0gcHJvY2Vz
c29yLm5hbWUoKQorICAgICAgICAgICAgaWYgbmFtZSA9PSBzZWxmLm5hbWUoKToKKyAgICAgICAg
ICAgICAgICBiZWZvcmVfbXV4ID0gRmFsc2UKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICAgICAgaWYgbm90IHByb2Nlc3Nvci5pc19hY3RpdmUoKToKKyAgICAgICAgICAgICAgICBj
b250aW51ZQorICAgICAgICAgICAgaWYgYmVmb3JlX211eDoKKyAgICAgICAgICAgICAgICAjIE11
eCBleHRlbnNpb24gY2Fubm90IGJlIHVzZWQgYWZ0ZXIgZXh0ZW5zaW9ucworICAgICAgICAgICAg
ICAgICMgdGhhdCBkZXBlbmQgb24gZnJhbWUgYm91bmRhcnksIGV4dGVuc2lvbiBkYXRhIGZpZWxk
LCBvciBhbnkKKyAgICAgICAgICAgICAgICAjIHJlc2VydmVkIGJpdHMgd2hpY2ggYXJlIGF0dHJp
YnV0ZWQgdG8gZWFjaCBmcmFtZS4KKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBjb21tb24u
UEVSRlJBTUVfQ09NUFJFU1NJT05fRVhURU5TSU9OIG9yCisgICAgICAgICAgICAgICAgICAgIG5h
bWUgPT0gY29tbW9uLkRFRkxBVEVfRlJBTUVfRVhURU5TSU9OIG9yCisgICAgICAgICAgICAgICAg
ICAgIG5hbWUgPT0gY29tbW9uLlhfV0VCS0lUX0RFRkxBVEVfRlJBTUVfRVhURU5TSU9OKToKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5zZXRfYWN0aXZlKEZhbHNlKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBNdXggZXh0
ZW5zaW9uIHNob3VsZCBub3QgYmUgYXBwbGllZCBiZWZvcmUgYW55IGhpc3RvcnktYmFzZWQKKyAg
ICAgICAgICAgICAgICAjIGNvbXByZXNzaW9uIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICBp
ZiAobmFtZSA9PSBjb21tb24uUEVSRlJBTUVfQ09NUFJFU1NJT05fRVhURU5TSU9OIG9yCisgICAg
ICAgICAgICAgICAgICAgIG5hbWUgPT0gY29tbW9uLkRFRkxBVEVfRlJBTUVfRVhURU5TSU9OIG9y
CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gY29tbW9uLlhfV0VCS0lUX0RFRkxBVEVfRlJB
TUVfRVhURU5TSU9OIG9yCisgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gY29tbW9uLlBFUk1F
U1NBR0VfQ09NUFJFU1NJT05fRVhURU5TSU9OIG9yCisgICAgICAgICAgICAgICAgICAgIG5hbWUg
PT0gY29tbW9uLlhfV0VCS0lUX1BFUk1FU1NBR0VfQ09NUFJFU1NJT05fRVhURU5TSU9OKToKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5zZXRfYWN0aXZlKEZhbHNlKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4KKworICAgIGRlZiBfZ2V0X2V4dGVuc2lvbl9yZXNwb25zZV9pbnRlcm5hbChz
ZWxmKToKKyAgICAgICAgc2VsZi5fYWN0aXZlID0gRmFsc2UKKyAgICAgICAgcXVvdGEgPSBzZWxm
Ll9yZXF1ZXN0LmdldF9wYXJhbWV0ZXJfdmFsdWUoc2VsZi5fUVVPVEFfUEFSQU0pCisgICAgICAg
IGlmIHF1b3RhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg
IHF1b3RhID0gaW50KHF1b3RhKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGlmIHF1b3RhIDwgMCBvciBx
dW90YSA+PSAyICoqIDMyOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAg
ICBzZWxmLl9xdW90YSA9IHF1b3RhCisKKyAgICAgICAgc2VsZi5fYWN0aXZlID0gVHJ1ZQorICAg
ICAgICByZXR1cm4gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihjb21tb24uTVVYX0VYVEVOU0lP
TikKKworICAgIGRlZiBfc2V0dXBfc3RyZWFtX29wdGlvbnNfaW50ZXJuYWwoc2VsZiwgc3RyZWFt
X29wdGlvbnMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2V0X3F1b3RhKHNlbGYsIHF1b3Rh
KToKKyAgICAgICAgc2VsZi5fcXVvdGEgPSBxdW90YQorCisgICAgZGVmIHF1b3RhKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fcXVvdGEKKworICAgIGRlZiBzZXRfZXh0ZW5zaW9ucyhzZWxm
LCBleHRlbnNpb25zKToKKyAgICAgICAgc2VsZi5fZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnMKKwor
ICAgIGRlZiBleHRlbnNpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXh0ZW5zaW9u
cworCisKK19hdmFpbGFibGVfcHJvY2Vzc29yc1tjb21tb24uTVVYX0VYVEVOU0lPTl0gPSBNdXhF
eHRlbnNpb25Qcm9jZXNzb3IKKworCitkZWYgZ2V0X2V4dGVuc2lvbl9wcm9jZXNzb3IoZXh0ZW5z
aW9uX3JlcXVlc3QpOgorICAgICIiIkdpdmVuIGFuIEV4dGVuc2lvblBhcmFtZXRlciByZXByZXNl
bnRpbmcgYW4gZXh0ZW5zaW9uIG9mZmVyIHJlY2VpdmVkCisgICAgZnJvbSBhIGNsaWVudCwgY29u
ZmlndXJlcyBhbmQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgY29ycmVzcG9uZGluZworICAg
IGV4dGVuc2lvbiBwcm9jZXNzb3IgY2xhc3MuCisgICAgIiIiCisKKyAgICBwcm9jZXNzb3JfY2xh
c3MgPSBfYXZhaWxhYmxlX3Byb2Nlc3NvcnMuZ2V0KGV4dGVuc2lvbl9yZXF1ZXN0Lm5hbWUoKSkK
KyAgICBpZiBwcm9jZXNzb3JfY2xhc3MgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICByZXR1cm4gcHJvY2Vzc29yX2NsYXNzKGV4dGVuc2lvbl9yZXF1ZXN0KQorCisKK2RlZiBpc19j
b21wcmVzc2lvbl9leHRlbnNpb24oZXh0ZW5zaW9uX25hbWUpOgorICAgIHJldHVybiBleHRlbnNp
b25fbmFtZSBpbiBfY29tcHJlc3Npb25fZXh0ZW5zaW9uX25hbWVzCisKKworIyB2aTpzdHM9NCBz
dz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0
c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9mYXN0X21hc2tpbmcu
aSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdl
YnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2Zhc3RfbWFza2luZy5pCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRk
YWFkMjdmNTNjNDZiZTJhNzFjNzA0YzcwOGZiYjNmNDJmMWEzZDEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJz
b2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9mYXN0X21hc2tpbmcuaQpAQCAtMCwwICsxLDk4IEBA
CisvLyBDb3B5cmlnaHQgMjAxMywgR29vZ2xlIEluYy4KKy8vIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8v
IGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisv
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworJW1vZHVs
ZSBmYXN0X21hc2tpbmcKKworJWluY2x1ZGUgImNzdHJpbmcuaSIKKworJXsKKyNpbmNsdWRlIDxj
c3RyaW5nPgorCisjaWZkZWYgX19TU0UyX18KKyNpbmNsdWRlIDxlbW1pbnRyaW4uaD4KKyNlbmRp
ZgorJX0KKworJWFwcGx5IChjaGFyICpTVFJJTkcsIGludCBMRU5HVEgpIHsKKyAgICAoY29uc3Qg
Y2hhciogcGF5bG9hZCwgaW50IHBheWxvYWRfbGVuZ3RoKSwKKyAgICAoY29uc3QgY2hhciogbWFz
a2luZ19rZXksIGludCBtYXNraW5nX2tleV9sZW5ndGgpIH07CislY3N0cmluZ19vdXRwdXRfYWxs
b2NhdGVfc2l6ZSgKKyAgICBjaGFyKiogcmVzdWx0LCBpbnQqIHJlc3VsdF9sZW5ndGgsIGRlbGV0
ZSBbXSAqJDEpOworCislaW5saW5lICV7CisKK3ZvaWQgbWFzaygKKyAgICBjb25zdCBjaGFyKiBw
YXlsb2FkLCBpbnQgcGF5bG9hZF9sZW5ndGgsCisgICAgY29uc3QgY2hhciogbWFza2luZ19rZXks
IGludCBtYXNraW5nX2tleV9sZW5ndGgsCisgICAgaW50IG1hc2tpbmdfa2V5X2luZGV4LAorICAg
IGNoYXIqKiByZXN1bHQsIGludCogcmVzdWx0X2xlbmd0aCkgeworICAqcmVzdWx0ID0gbmV3IGNo
YXJbcGF5bG9hZF9sZW5ndGhdOworICAqcmVzdWx0X2xlbmd0aCA9IHBheWxvYWRfbGVuZ3RoOwor
ICBtZW1jcHkoKnJlc3VsdCwgcGF5bG9hZCwgcGF5bG9hZF9sZW5ndGgpOworCisgIGNoYXIqIGN1
cnNvciA9ICpyZXN1bHQ7CisgIGNoYXIqIGN1cnNvcl9lbmQgPSAqcmVzdWx0ICsgKnJlc3VsdF9s
ZW5ndGg7CisKKyNpZmRlZiBfX1NTRTJfXworICB3aGlsZSAoKGN1cnNvciA8IGN1cnNvcl9lbmQp
ICYmCisgICAgICAgICAocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KGN1cnNvcikgJiAweGYpKSB7
CisgICAgKmN1cnNvciBePSBtYXNraW5nX2tleVttYXNraW5nX2tleV9pbmRleF07CisgICAgKytj
dXJzb3I7CisgICAgbWFza2luZ19rZXlfaW5kZXggPSAobWFza2luZ19rZXlfaW5kZXggKyAxKSAl
IG1hc2tpbmdfa2V5X2xlbmd0aDsKKyAgfQorICBpZiAoY3Vyc29yID09IGN1cnNvcl9lbmQpIHsK
KyAgICByZXR1cm47CisgIH0KKworICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDE2OworICBfX20x
MjhpIG1hc2tpbmdfa2V5X2Jsb2NrOworICBmb3IgKGludCBpID0gMDsgaSA8IGtCbG9ja1NpemU7
ICsraSkgeworICAgICoocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJm1hc2tpbmdfa2V5X2Jsb2Nr
KSArIGkpID0KKyAgICAgICAgbWFza2luZ19rZXlbbWFza2luZ19rZXlfaW5kZXhdOworICAgIG1h
c2tpbmdfa2V5X2luZGV4ID0gKG1hc2tpbmdfa2V5X2luZGV4ICsgMSkgJSBtYXNraW5nX2tleV9s
ZW5ndGg7CisgIH0KKworICB3aGlsZSAoY3Vyc29yICsga0Jsb2NrU2l6ZSA8PSBjdXJzb3JfZW5k
KSB7CisgICAgX19tMTI4aSBwYXlsb2FkX2Jsb2NrID0KKyAgICAgICAgX21tX2xvYWRfc2kxMjgo
cmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oY3Vyc29yKSk7CisgICAgX21tX3N0cmVhbV9zaTEy
OChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPihjdXJzb3IpLAorICAgICAgICAgICAgICAgICAg
ICAgX21tX3hvcl9zaTEyOChwYXlsb2FkX2Jsb2NrLCBtYXNraW5nX2tleV9ibG9jaykpOworICAg
IGN1cnNvciArPSBrQmxvY2tTaXplOworICB9CisjZW5kaWYKKworICB3aGlsZSAoY3Vyc29yIDwg
Y3Vyc29yX2VuZCkgeworICAgICpjdXJzb3IgXj0gbWFza2luZ19rZXlbbWFza2luZ19rZXlfaW5k
ZXhdOworICAgICsrY3Vyc29yOworICAgIG1hc2tpbmdfa2V5X2luZGV4ID0gKG1hc2tpbmdfa2V5
X2luZGV4ICsgMSkgJSBtYXNraW5nX2tleV9sZW5ndGg7CisgIH0KK30KKworJX0KZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdl
YnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS9fX2luaXRfXy5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9z
cmMvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTRm
NmIzOTVhZTIzYjNhMTM2NDFjZDRiOTA0ZjU5MzVkMWZhMWYyCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29j
a2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEs
MTEwIEBACisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJXZWJTb2NrZXQgb3BlbmluZyBoYW5kc2hh
a2UgcHJvY2Vzc29yLiBUaGlzIGNsYXNzIHRyeSB0byBhcHBseSBhdmFpbGFibGUKK29wZW5pbmcg
aGFuZHNoYWtlIHByb2Nlc3NvcnMgZm9yIGVhY2ggcHJvdG9jb2wgdmVyc2lvbiB1bnRpbCBhIGNv
bm5lY3Rpb24gaXMKK3N1Y2Nlc3NmdWxseSBlc3RhYmxpc2hlZC4KKyIiIgorCisKK2ltcG9ydCBs
b2dnaW5nCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5
d2Vic29ja2V0LmhhbmRzaGFrZSBpbXBvcnQgaHliaTAwCitmcm9tIG1vZF9weXdlYnNvY2tldC5o
YW5kc2hha2UgaW1wb3J0IGh5YmkKKyMgRXhwb3J0IEFib3J0ZWRCeVVzZXJFeGNlcHRpb24sIEhh
bmRzaGFrZUV4Y2VwdGlvbiwgYW5kIFZlcnNpb25FeGNlcHRpb24KKyMgc3ltYm9sIGZyb20gdGhp
cyBtb2R1bGUuCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IEFi
b3J0ZWRCeVVzZXJFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFz
ZSBpbXBvcnQgSGFuZHNoYWtlRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hh
a2UuX2Jhc2UgaW1wb3J0IFZlcnNpb25FeGNlcHRpb24KKworCitfTE9HR0VSID0gbG9nZ2luZy5n
ZXRMb2dnZXIoX19uYW1lX18pCisKKworZGVmIGRvX2hhbmRzaGFrZShyZXF1ZXN0LCBkaXNwYXRj
aGVyLCBhbGxvd0RyYWZ0NzU9RmFsc2UsIHN0cmljdD1GYWxzZSk6CisgICAgIiIiUGVyZm9ybXMg
V2ViU29ja2V0IGhhbmRzaGFrZS4KKworICAgIEFyZ3M6CisgICAgICAgIHJlcXVlc3Q6IG1vZF9w
eXRob24gcmVxdWVzdC4KKyAgICAgICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlciAoZGlzcGF0Y2gu
RGlzcGF0Y2hlcikuCisgICAgICAgIGFsbG93RHJhZnQ3NTogb2Jzb2xldGUgYXJndW1lbnQuIGln
bm9yZWQuCisgICAgICAgIHN0cmljdDogb2Jzb2xldGUgYXJndW1lbnQuIGlnbm9yZWQuCisKKyAg
ICBIYW5kc2hha2VyIHdpbGwgYWRkIGF0dHJpYnV0ZXMgc3VjaCBhcyB3c19yZXNvdXJjZSBpbiBw
ZXJmb3JtaW5nCisgICAgaGFuZHNoYWtlLgorICAgICIiIgorCisgICAgX0xPR0dFUi5kZWJ1Zygn
Q2xpZW50XCdzIG9wZW5pbmcgaGFuZHNoYWtlIHJlc291cmNlOiAlcicsIHJlcXVlc3QudXJpKQor
ICAgICMgVG8gcHJpbnQgbWltZXRvb2xzLk1lc3NhZ2UgYXMgZXNjYXBlZCBvbmUtbGluZSBzdHJp
bmcsIHdlIGNvbnZlcnRzCisgICAgIyBoZWFkZXJzX2luIHRvIGRpY3Qgb2JqZWN0LiBXaXRob3V0
IGNvbnZlcnNpb24sIGlmIHdlIHVzZSAlciwgaXQganVzdAorICAgICMgcHJpbnRzIHRoZSB0eXBl
IGFuZCBhZGRyZXNzLCBhbmQgaWYgd2UgdXNlICVzLCBpdCBwcmludHMgdGhlIG9yaWdpbmFsCisg
ICAgIyBoZWFkZXIgc3RyaW5nIGFzIG11bHRpcGxlIGxpbmVzLgorICAgICMKKyAgICAjIEJvdGgg
bWltZXRvb2xzLk1lc3NhZ2UgYW5kIE1wVGFibGVfVHlwZSBvZiBtb2RfcHl0aG9uIGNhbiBiZQor
ICAgICMgY29udmVydGVkIHRvIGRpY3QuCisgICAgIworICAgICMgbWltZXRvb2xzLk1lc3NhZ2Uu
X19zdHJfXyByZXR1cm5zIHRoZSBvcmlnaW5hbCBoZWFkZXIgc3RyaW5nLgorICAgICMgZGljdCht
aW1ldG9vbHMuTWVzc2FnZSBvYmplY3QpIHJldHVybnMgdGhlIG1hcCBmcm9tIGhlYWRlciBuYW1l
cyB0bworICAgICMgaGVhZGVyIHZhbHVlcy4gV2hpbGUgTXBUYWJsZV9UeXBlIGRvZXNuJ3QgaGF2
ZSBzdWNoIF9fc3RyX18gYnV0IGp1c3QKKyAgICAjIF9fcmVwcl9fIHdoaWNoIGZvcm1hdHMgaXRz
ZWxmIGFzIHdlbGwgYXMgZGljdGlvbmFyeSBvYmplY3QuCisgICAgX0xPR0dFUi5kZWJ1ZygKKyAg
ICAgICAgJ0NsaWVudFwncyBvcGVuaW5nIGhhbmRzaGFrZSBoZWFkZXJzOiAlcicsIGRpY3QocmVx
dWVzdC5oZWFkZXJzX2luKSkKKworICAgIGhhbmRzaGFrZXJzID0gW10KKyAgICBoYW5kc2hha2Vy
cy5hcHBlbmQoCisgICAgICAgICgnUkZDIDY0NTUnLCBoeWJpLkhhbmRzaGFrZXIocmVxdWVzdCwg
ZGlzcGF0Y2hlcikpKQorICAgIGhhbmRzaGFrZXJzLmFwcGVuZCgKKyAgICAgICAgKCdIeUJpIDAw
JywgaHliaTAwLkhhbmRzaGFrZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikpKQorCisgICAgZm9yIG5h
bWUsIGhhbmRzaGFrZXIgaW4gaGFuZHNoYWtlcnM6CisgICAgICAgIF9MT0dHRVIuZGVidWcoJ1Ry
eWluZyBwcm90b2NvbCB2ZXJzaW9uICVzJywgbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorICAgICAgICAgICAgX0xPR0dFUi5pbmZvKCdF
c3RhYmxpc2hlZCAoJXMgcHJvdG9jb2wpJywgbmFtZSkKKyAgICAgICAgICAgIHJldHVybgorICAg
ICAgICBleGNlcHQgSGFuZHNoYWtlRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgX0xPR0dFUi5k
ZWJ1ZygKKyAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGNvbXBsZXRlIG9wZW5pbmcgaGFuZHNo
YWtlIGFzICVzIHByb3RvY29sOiAlcicsCisgICAgICAgICAgICAgICAgbmFtZSwgZSkKKyAgICAg
ICAgICAgIGlmIGUuc3RhdHVzOgorICAgICAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgZXhj
ZXB0IEFib3J0ZWRCeVVzZXJFeGNlcHRpb24sIGU6CisgICAgICAgICAgICByYWlzZQorICAgICAg
ICBleGNlcHQgVmVyc2lvbkV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAj
IFRPRE8odG95b3NoaW0pOiBBZGQgYSB0ZXN0IHRvIGNvdmVyIHRoZSBjYXNlIGFsbCBoYW5kc2hh
a2VycyBmYWlsLgorICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbigKKyAgICAgICAgJ0ZhaWxl
ZCB0byBjb21wbGV0ZSBvcGVuaW5nIGhhbmRzaGFrZSBmb3IgYWxsIGF2YWlsYWJsZSBwcm90b2Nv
bHMnLAorICAgICAgICBzdGF0dXM9Y29tbW9uLkhUVFBfU1RBVFVTX0JBRF9SRVFVRVNUKQorCisK
KyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQv
aGFuZHNoYWtlL19iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19i
YXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmM5OTNhNTg0YjdiM2U1MmI2MDdiNjViZjM4YWZkY2FkZGNhMmZl
NzgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
d3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9oYW5kc2hha2Uv
X2Jhc2UucHkKQEAgLTAsMCArMSwxODIgQEAKKyMgQ29weXJpZ2h0IDIwMTIsIEdvb2dsZSBJbmMu
CisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIkNvbW1v
biBmdW5jdGlvbnMgYW5kIGV4Y2VwdGlvbnMgdXNlZCBieSBXZWJTb2NrZXQgb3BlbmluZyBoYW5k
c2hha2UKK3Byb2Nlc3NvcnMuCisiIiIKKworCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQg
Y29tbW9uCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgaHR0cF9oZWFkZXJfdXRpbAorCisK
K2NsYXNzIEFib3J0ZWRCeVVzZXJFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRp
b24gZm9yIGFib3J0aW5nIGEgY29ubmVjdGlvbiBpbnRlbnRpb25hbGx5LgorCisgICAgSWYgdGhp
cyBleGNlcHRpb24gaXMgcmFpc2VkIGluIGRvX2V4dHJhX2hhbmRzaGFrZSBoYW5kbGVyLCB0aGUg
Y29ubmVjdGlvbgorICAgIHdpbGwgYmUgYWJhbmRvbmVkLiBObyBvdGhlciBXZWJTb2NrZXQgb3Ig
SFRUUChTKSBoYW5kbGVyIHdpbGwgYmUgaW52b2tlZC4KKworICAgIElmIHRoaXMgZXhjZXB0aW9u
IGlzIHJhaXNlZCBpbiB0cmFuc2Zlcl9kYXRhX2hhbmRsZXIsIHRoZSBjb25uZWN0aW9uIHdpbGwK
KyAgICBiZSBjbG9zZWQgd2l0aG91dCBjbG9zaW5nIGhhbmRzaGFrZS4gTm8gb3RoZXIgV2ViU29j
a2V0IG9yIEhUVFAoUykgaGFuZGxlcgorICAgIHdpbGwgYmUgaW52b2tlZC4KKyAgICAiIiIKKwor
ICAgIHBhc3MKKworCitjbGFzcyBIYW5kc2hha2VFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAi
IiJUaGlzIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCB3aGVuIGFuIGVycm9yIG9jY3VycmVkIHdo
aWxlIHByb2Nlc3NpbmcKKyAgICBXZWJTb2NrZXQgaW5pdGlhbCBoYW5kc2hha2UuCisgICAgIiIi
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgc3RhdHVzPU5vbmUpOgorICAgICAgICBz
dXBlcihIYW5kc2hha2VFeGNlcHRpb24sIHNlbGYpLl9faW5pdF9fKG5hbWUpCisgICAgICAgIHNl
bGYuc3RhdHVzID0gc3RhdHVzCisKKworY2xhc3MgVmVyc2lvbkV4Y2VwdGlvbihFeGNlcHRpb24p
OgorICAgICIiIlRoaXMgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIHdoZW4gYSB2ZXJzaW9uIG9m
IGNsaWVudCByZXF1ZXN0IGRvZXMgbm90CisgICAgbWF0Y2ggd2l0aCB2ZXJzaW9uIHRoZSBzZXJ2
ZXIgc3VwcG9ydHMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgc3Vw
cG9ydGVkX3ZlcnNpb25zPScnKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzdXBwb3J0ZWRfdmVyc2lvbjogYSBzdHIgb2Jq
ZWN0IHRvIHNob3cgc3VwcG9ydGVkIGh5YmkgdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGUuZy4gJzgsIDEzJykKKyAgICAgICAgIiIiCisgICAgICAgIHN1cGVyKFZl
cnNpb25FeGNlcHRpb24sIHNlbGYpLl9faW5pdF9fKG5hbWUpCisgICAgICAgIHNlbGYuc3VwcG9y
dGVkX3ZlcnNpb25zID0gc3VwcG9ydGVkX3ZlcnNpb25zCisKKworZGVmIGdldF9kZWZhdWx0X3Bv
cnQoaXNfc2VjdXJlKToKKyAgICBpZiBpc19zZWN1cmU6CisgICAgICAgIHJldHVybiBjb21tb24u
REVGQVVMVF9XRUJfU09DS0VUX1NFQ1VSRV9QT1JUCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJu
IGNvbW1vbi5ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVAorCisKK2RlZiB2YWxpZGF0ZV9zdWJwcm90
b2NvbChzdWJwcm90b2NvbCk6CisgICAgIiIiVmFsaWRhdGUgYSB2YWx1ZSBpbiB0aGUgU2VjLVdl
YlNvY2tldC1Qcm90b2NvbCBmaWVsZC4KKworICAgIFNlZSB0aGUgU2VjdGlvbiA0LjEuLCA0LjIu
Mi4sIGFuZCA0LjMuIG9mIFJGQyA2NDU1LgorICAgICIiIgorCisgICAgaWYgbm90IHN1YnByb3Rv
Y29sOgorICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oJ0ludmFsaWQgc3VicHJvdG9j
b2wgbmFtZTogZW1wdHknKQorCisgICAgIyBQYXJhbWV0ZXIgc2hvdWxkIGJlIGVuY29kZWQgSFRU
UCB0b2tlbi4KKyAgICBzdGF0ZSA9IGh0dHBfaGVhZGVyX3V0aWwuUGFyc2luZ1N0YXRlKHN1YnBy
b3RvY29sKQorICAgIHRva2VuID0gaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX3Rva2VuKHN0YXRl
KQorICAgIHJlc3QgPSBodHRwX2hlYWRlcl91dGlsLnBlZWsoc3RhdGUpCisgICAgIyBJZiB8cmVz
dHwgaXMgbm90IE5vbmUsIHxzdWJwcm90b2NvbHwgaXMgbm90IG9uZSB0b2tlbiBvciBpbnZhbGlk
LiBJZgorICAgICMgfHJlc3R8IGlzIE5vbmUsIHx0b2tlbnwgbXVzdCBub3QgYmUgTm9uZSBiZWNh
dXNlIHxzdWJwcm90b2NvbHwgaXMKKyAgICAjIGNvbmNhdGVuYXRpb24gb2YgfHRva2VufCBhbmQg
fHJlc3R8IGFuZCBpcyBub3QgTm9uZS4KKyAgICBpZiByZXN0IGlzIG5vdCBOb25lOgorICAgICAg
ICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oJ0ludmFsaWQgbm9uLXRva2VuIHN0cmluZyBpbiBz
dWJwcm90b2NvbCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZTogJXIn
ICUgcmVzdCkKKworCitkZWYgcGFyc2VfaG9zdF9oZWFkZXIocmVxdWVzdCk6CisgICAgZmllbGRz
ID0gcmVxdWVzdC5oZWFkZXJzX2luW2NvbW1vbi5IT1NUX0hFQURFUl0uc3BsaXQoJzonLCAxKQor
ICAgIGlmIGxlbihmaWVsZHMpID09IDE6CisgICAgICAgIHJldHVybiBmaWVsZHNbMF0sIGdldF9k
ZWZhdWx0X3BvcnQocmVxdWVzdC5pc19odHRwcygpKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJu
IGZpZWxkc1swXSwgaW50KGZpZWxkc1sxXSkKKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAg
ICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKCdJbnZhbGlkIHBvcnQgbnVtYmVyIGZvcm1h
dDogJXInICUgZSkKKworCitkZWYgZm9ybWF0X2hlYWRlcihuYW1lLCB2YWx1ZSk6CisgICAgcmV0
dXJuICclczogJXNcclxuJyAlIChuYW1lLCB2YWx1ZSkKKworCitkZWYgZ2V0X21hbmRhdG9yeV9o
ZWFkZXIocmVxdWVzdCwga2V5KToKKyAgICB2YWx1ZSA9IHJlcXVlc3QuaGVhZGVyc19pbi5nZXQo
a2V5KQorICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2Vw
dGlvbignSGVhZGVyICVzIGlzIG5vdCBkZWZpbmVkJyAlIGtleSkKKyAgICByZXR1cm4gdmFsdWUK
KworCitkZWYgdmFsaWRhdGVfbWFuZGF0b3J5X2hlYWRlcihyZXF1ZXN0LCBrZXksIGV4cGVjdGVk
X3ZhbHVlLCBmYWlsX3N0YXR1cz1Ob25lKToKKyAgICB2YWx1ZSA9IGdldF9tYW5kYXRvcnlfaGVh
ZGVyKHJlcXVlc3QsIGtleSkKKworICAgIGlmIHZhbHVlLmxvd2VyKCkgIT0gZXhwZWN0ZWRfdmFs
dWUubG93ZXIoKToKKyAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAgICAgICAg
ICAgJ0V4cGVjdGVkICVyIGZvciBoZWFkZXIgJXMgYnV0IGZvdW5kICVyIChjYXNlLWluc2Vuc2l0
aXZlKScgJQorICAgICAgICAgICAgKGV4cGVjdGVkX3ZhbHVlLCBrZXksIHZhbHVlKSwgc3RhdHVz
PWZhaWxfc3RhdHVzKQorCisKK2RlZiBjaGVja19yZXF1ZXN0X2xpbmUocmVxdWVzdCk6CisgICAg
IyA1LjEgMS4gVGhlIHRocmVlIGNoYXJhY3RlciBVVEYtOCBzdHJpbmcgIkdFVCIuCisgICAgIyA1
LjEgMi4gQSBVVEYtOC1lbmNvZGVkIFUrMDAyMCBTUEFDRSBjaGFyYWN0ZXIgKDB4MjAgYnl0ZSku
CisgICAgaWYgcmVxdWVzdC5tZXRob2QgIT0gJ0dFVCc6CisgICAgICAgIHJhaXNlIEhhbmRzaGFr
ZUV4Y2VwdGlvbignTWV0aG9kIGlzIG5vdCBHRVQ6ICVyJyAlIHJlcXVlc3QubWV0aG9kKQorCisg
ICAgaWYgcmVxdWVzdC5wcm90b2NvbCAhPSAnSFRUUC8xLjEnOgorICAgICAgICByYWlzZSBIYW5k
c2hha2VFeGNlcHRpb24oJ1ZlcnNpb24gaXMgbm90IEhUVFAvMS4xOiAlcicgJQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5wcm90b2NvbCkKKworCitkZWYgcGFyc2Vf
dG9rZW5fbGlzdChkYXRhKToKKyAgICAiIiJQYXJzZXMgYSBoZWFkZXIgdmFsdWUgd2hpY2ggZm9s
bG93cyAxI3Rva2VuIGFuZCByZXR1cm5zIHBhcnNlZCBlbGVtZW50cworICAgIGFzIGEgbGlzdCBv
ZiBzdHJpbmdzLgorCisgICAgTGVhZGluZyBMV1NlcyBtdXN0IGJlIHRyaW1tZWQuCisgICAgIiIi
CisKKyAgICBzdGF0ZSA9IGh0dHBfaGVhZGVyX3V0aWwuUGFyc2luZ1N0YXRlKGRhdGEpCisKKyAg
ICB0b2tlbl9saXN0ID0gW10KKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRva2VuID0gaHR0
cF9oZWFkZXJfdXRpbC5jb25zdW1lX3Rva2VuKHN0YXRlKQorICAgICAgICBpZiB0b2tlbiBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgIHRva2VuX2xpc3QuYXBwZW5kKHRva2VuKQorCisgICAgICAg
IGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV9sd3NlcyhzdGF0ZSkKKworICAgICAgICBpZiBodHRw
X2hlYWRlcl91dGlsLnBlZWsoc3RhdGUpIGlzIE5vbmU6CisgICAgICAgICAgICBicmVhaworCisg
ICAgICAgIGlmIG5vdCBodHRwX2hlYWRlcl91dGlsLmNvbnN1bWVfc3RyaW5nKHN0YXRlLCAnLCcp
OgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAg
ICdFeHBlY3RlZCBhIGNvbW1hIGJ1dCBmb3VuZCAlcicgJSBodHRwX2hlYWRlcl91dGlsLnBlZWso
c3RhdGUpKQorCisgICAgICAgIGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV9sd3NlcyhzdGF0ZSkK
KworICAgIGlmIGxlbih0b2tlbl9saXN0KSA9PSAwOgorICAgICAgICByYWlzZSBIYW5kc2hha2VF
eGNlcHRpb24oJ05vIHZhbGlkIHRva2VuIGZvdW5kJykKKworICAgIHJldHVybiB0b2tlbl9saXN0
CisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNv
Y2tldC9oYW5kc2hha2UvaHliaS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFr
ZS9oeWJpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkNTRhNjYyZGZkYWZhODg5MjA5M2Y3M2YzODRmYjYwZTgz
YzE2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9oYW5kc2hh
a2UvaHliaS5weQpAQCAtMCwwICsxLDQzNSBAQAorIyBDb3B5cmlnaHQgMjAxMiwgR29vZ2xlIElu
Yy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiVGhp
cyBmaWxlIHByb3ZpZGVzIHRoZSBvcGVuaW5nIGhhbmRzaGFrZSBwcm9jZXNzb3IgZm9yIHRoZSBX
ZWJTb2NrZXQKK3Byb3RvY29sIChSRkMgNjQ1NSkuCisKK1NwZWNpZmljYXRpb246CitodHRwOi8v
dG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU1CisiIiIKKworCisjIE5vdGU6IHJlcXVlc3QuY29u
bmVjdGlvbi53cml0ZSBpcyB1c2VkIGluIHRoaXMgbW9kdWxlLCBldmVuIHRob3VnaCBtb2RfcHl0
aG9uCisjIGRvY3VtZW50IHNheXMgdGhhdCBpdCBzaG91bGQgYmUgdXNlZCBvbmx5IGluIGNvbm5l
Y3Rpb24gaGFuZGxlcnMuCisjIFVuZm9ydHVuYXRlbHksIHdlIGhhdmUgbm8gb3RoZXIgb3B0aW9u
cy4gRm9yIGV4YW1wbGUsIHJlcXVlc3Qud3JpdGUgaXMgbm90CisjIHN1aXRhYmxlIGJlY2F1c2Ug
aXQgZG9lc24ndCBhbGxvdyBkaXJlY3QgcmF3IGJ5dGVzIHdyaXRpbmcuCisKKworaW1wb3J0IGJh
c2U2NAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCisKK2Zyb20gbW9kX3B5
d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0LmV4dGVuc2lvbnMg
aW1wb3J0IGdldF9leHRlbnNpb25fcHJvY2Vzc29yCitmcm9tIG1vZF9weXdlYnNvY2tldC5leHRl
bnNpb25zIGltcG9ydCBpc19jb21wcmVzc2lvbl9leHRlbnNpb24KK2Zyb20gbW9kX3B5d2Vic29j
a2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgY2hlY2tfcmVxdWVzdF9saW5lCitmcm9tIG1vZF9w
eXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IGZvcm1hdF9oZWFkZXIKK2Zyb20gbW9k
X3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgZ2V0X21hbmRhdG9yeV9oZWFkZXIK
K2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgSGFuZHNoYWtlRXhj
ZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IHBhcnNl
X3Rva2VuX2xpc3QKK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQg
dmFsaWRhdGVfbWFuZGF0b3J5X2hlYWRlcgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtl
Ll9iYXNlIGltcG9ydCB2YWxpZGF0ZV9zdWJwcm90b2NvbAorZnJvbSBtb2RfcHl3ZWJzb2NrZXQu
aGFuZHNoYWtlLl9iYXNlIGltcG9ydCBWZXJzaW9uRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNv
Y2tldC5zdHJlYW0gaW1wb3J0IFN0cmVhbQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuc3RyZWFtIGlt
cG9ydCBTdHJlYW1PcHRpb25zCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgdXRpbAorCisK
KyMgVXNlZCB0byB2YWxpZGF0ZSB0aGUgdmFsdWUgaW4gdGhlIFNlYy1XZWJTb2NrZXQtS2V5IGhl
YWRlciBzdHJpY3RseS4gUkZDIDQ2NDgKKyMgZGlzYWxsb3dzIG5vbi16ZXJvIHBhZGRpbmcsIHNv
IHRoZSBjaGFyYWN0ZXIgcmlnaHQgYmVmb3JlID09IG11c3QgYmUgYW55IG9mCisjIEEsIFEsIGcg
YW5kIHcuCitfU0VDX1dFQlNPQ0tFVF9LRVlfUkVHRVggPSByZS5jb21waWxlKCdeWysvMC05QS1a
YS16XXsyMX1bQVFnd109PSQnKQorCisjIERlZmluaW5nIGFsaWFzZXMgZm9yIHZhbHVlcyB1c2Vk
IGZyZXF1ZW50bHkuCitfVkVSU0lPTl9IWUJJMDggPSBjb21tb24uVkVSU0lPTl9IWUJJMDgKK19W
RVJTSU9OX0hZQkkwOF9TVFJJTkcgPSBzdHIoX1ZFUlNJT05fSFlCSTA4KQorX1ZFUlNJT05fTEFU
RVNUID0gY29tbW9uLlZFUlNJT05fSFlCSV9MQVRFU1QKK19WRVJTSU9OX0xBVEVTVF9TVFJJTkcg
PSBzdHIoX1ZFUlNJT05fTEFURVNUKQorX1NVUFBPUlRFRF9WRVJTSU9OUyA9IFsKKyAgICBfVkVS
U0lPTl9MQVRFU1QsCisgICAgX1ZFUlNJT05fSFlCSTA4LAorXQorCisKK2RlZiBjb21wdXRlX2Fj
Y2VwdChrZXkpOgorICAgICIiIkNvbXB1dGVzIHZhbHVlIGZvciB0aGUgU2VjLVdlYlNvY2tldC1B
Y2NlcHQgaGVhZGVyIGZyb20gdmFsdWUgb2YgdGhlCisgICAgU2VjLVdlYlNvY2tldC1LZXkgaGVh
ZGVyLgorICAgICIiIgorCisgICAgYWNjZXB0X2JpbmFyeSA9IHV0aWwuc2hhMV9oYXNoKAorICAg
ICAgICBrZXkgKyBjb21tb24uV0VCU09DS0VUX0FDQ0VQVF9VVUlEKS5kaWdlc3QoKQorICAgIGFj
Y2VwdCA9IGJhc2U2NC5iNjRlbmNvZGUoYWNjZXB0X2JpbmFyeSkKKworICAgIHJldHVybiAoYWNj
ZXB0LCBhY2NlcHRfYmluYXJ5KQorCisKK2NsYXNzIEhhbmRzaGFrZXIob2JqZWN0KToKKyAgICAi
IiJPcGVuaW5nIGhhbmRzaGFrZSBwcm9jZXNzb3IgZm9yIHRoZSBXZWJTb2NrZXQgcHJvdG9jb2wg
KFJGQyA2NDU1KS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0LCBkaXNwYXRj
aGVyKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAgICAgICBk
aXNwYXRjaGVyOiBEaXNwYXRjaGVyIChkaXNwYXRjaC5EaXNwYXRjaGVyKS4KKworICAgICAgICBI
YW5kc2hha2VyIHdpbGwgYWRkIGF0dHJpYnV0ZXMgc3VjaCBhcyB3c19yZXNvdXJjZSBkdXJpbmcg
aGFuZHNoYWtlLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLl9sb2dnZXIgPSB1dGlsLmdl
dF9jbGFzc19sb2dnZXIoc2VsZikKKworICAgICAgICBzZWxmLl9yZXF1ZXN0ID0gcmVxdWVzdAor
ICAgICAgICBzZWxmLl9kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcgorCisgICAgZGVmIF92YWxpZGF0
ZV9jb25uZWN0aW9uX2hlYWRlcihzZWxmKToKKyAgICAgICAgY29ubmVjdGlvbiA9IGdldF9tYW5k
YXRvcnlfaGVhZGVyKAorICAgICAgICAgICAgc2VsZi5fcmVxdWVzdCwgY29tbW9uLkNPTk5FQ1RJ
T05fSEVBREVSKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbm5lY3Rpb25fdG9rZW5z
ID0gcGFyc2VfdG9rZW5fbGlzdChjb25uZWN0aW9uKQorICAgICAgICBleGNlcHQgSGFuZHNoYWtl
RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAg
ICAgICAgICAgICAgICdGYWlsZWQgdG8gcGFyc2UgJXM6ICVzJyAlIChjb21tb24uQ09OTkVDVElP
Tl9IRUFERVIsIGUpKQorCisgICAgICAgIGNvbm5lY3Rpb25faXNfdmFsaWQgPSBGYWxzZQorICAg
ICAgICBmb3IgdG9rZW4gaW4gY29ubmVjdGlvbl90b2tlbnM6CisgICAgICAgICAgICBpZiB0b2tl
bi5sb3dlcigpID09IGNvbW1vbi5VUEdSQURFX0NPTk5FQ1RJT05fVFlQRS5sb3dlcigpOgorICAg
ICAgICAgICAgICAgIGNvbm5lY3Rpb25faXNfdmFsaWQgPSBUcnVlCisgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb25faXNfdmFsaWQ6CisgICAgICAgICAgICBy
YWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJyVzIGhlYWRlciBkb2Vz
blwndCBjb250YWluICIlcyInICUKKyAgICAgICAgICAgICAgICAoY29tbW9uLkNPTk5FQ1RJT05f
SEVBREVSLCBjb21tb24uVVBHUkFERV9DT05ORUNUSU9OX1RZUEUpKQorCisgICAgZGVmIGRvX2hh
bmRzaGFrZShzZWxmKToKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c19jbG9zZV9jb2RlID0gTm9u
ZQorICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2Nsb3NlX3JlYXNvbiA9IE5vbmUKKworICAgICAg
ICAjIFBhcnNpbmcuCisKKyAgICAgICAgY2hlY2tfcmVxdWVzdF9saW5lKHNlbGYuX3JlcXVlc3Qp
CisKKyAgICAgICAgdmFsaWRhdGVfbWFuZGF0b3J5X2hlYWRlcigKKyAgICAgICAgICAgIHNlbGYu
X3JlcXVlc3QsCisgICAgICAgICAgICBjb21tb24uVVBHUkFERV9IRUFERVIsCisgICAgICAgICAg
ICBjb21tb24uV0VCU09DS0VUX1VQR1JBREVfVFlQRSkKKworICAgICAgICBzZWxmLl92YWxpZGF0
ZV9jb25uZWN0aW9uX2hlYWRlcigpCisKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c19yZXNvdXJj
ZSA9IHNlbGYuX3JlcXVlc3QudXJpCisKKyAgICAgICAgdW51c2VkX2hvc3QgPSBnZXRfbWFuZGF0
b3J5X2hlYWRlcihzZWxmLl9yZXF1ZXN0LCBjb21tb24uSE9TVF9IRUFERVIpCisKKyAgICAgICAg
c2VsZi5fcmVxdWVzdC53c192ZXJzaW9uID0gc2VsZi5fY2hlY2tfdmVyc2lvbigpCisKKyAgICAg
ICAgIyBUaGlzIGhhbmRzaGFrZSBtdXN0IGJlIGJhc2VkIG9uIGxhdGVzdCBoeWJpLiBXZSBhcmUg
cmVzcG9uc2libGUgdG8KKyAgICAgICAgIyBmYWxsYmFjayB0byBIVFRQIG9uIGhhbmRzaGFrZSBm
YWlsdXJlIGFzIGxhdGVzdCBoeWJpIGhhbmRzaGFrZQorICAgICAgICAjIHNwZWNpZmllcy4KKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZ2V0X29yaWdpbigpCisgICAgICAgICAgICBz
ZWxmLl9zZXRfcHJvdG9jb2woKQorICAgICAgICAgICAgc2VsZi5fcGFyc2VfZXh0ZW5zaW9ucygp
CisKKyAgICAgICAgICAgICMgS2V5IHZhbGlkYXRpb24sIHJlc3BvbnNlIGdlbmVyYXRpb24uCisK
KyAgICAgICAgICAgIGtleSA9IHNlbGYuX2dldF9rZXkoKQorICAgICAgICAgICAgKGFjY2VwdCwg
YWNjZXB0X2JpbmFyeSkgPSBjb21wdXRlX2FjY2VwdChrZXkpCisgICAgICAgICAgICBzZWxmLl9s
b2dnZXIuZGVidWcoCisgICAgICAgICAgICAgICAgJyVzOiAlciAoJXMpJywKKyAgICAgICAgICAg
ICAgICBjb21tb24uU0VDX1dFQlNPQ0tFVF9BQ0NFUFRfSEVBREVSLAorICAgICAgICAgICAgICAg
IGFjY2VwdCwKKyAgICAgICAgICAgICAgICB1dGlsLmhleGlmeShhY2NlcHRfYmluYXJ5KSkKKwor
ICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdQcm90b2NvbCB2ZXJzaW9uIGlzIFJGQyA2
NDU1JykKKworICAgICAgICAgICAgIyBTZXR1cCBleHRlbnNpb24gcHJvY2Vzc29ycy4KKworICAg
ICAgICAgICAgcHJvY2Vzc29ycyA9IFtdCisgICAgICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0Lndz
X3JlcXVlc3RlZF9leHRlbnNpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGZvciBl
eHRlbnNpb25fcmVxdWVzdCBpbiBzZWxmLl9yZXF1ZXN0LndzX3JlcXVlc3RlZF9leHRlbnNpb25z
OgorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3IgPSBnZXRfZXh0ZW5zaW9uX3Byb2Nlc3Nv
cihleHRlbnNpb25fcmVxdWVzdCkKKyAgICAgICAgICAgICAgICAgICAgIyBVbmtub3duIGV4dGVu
c2lvbiByZXF1ZXN0cyBhcmUganVzdCBpZ25vcmVkLgorICAgICAgICAgICAgICAgICAgICBpZiBw
cm9jZXNzb3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3Jz
LmFwcGVuZChwcm9jZXNzb3IpCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2V4dGVuc2lv
bl9wcm9jZXNzb3JzID0gcHJvY2Vzc29ycworCisgICAgICAgICAgICAjIExpc3Qgb2YgZXh0cmEg
aGVhZGVycy4gVGhlIGV4dHJhIGhhbmRzaGFrZSBoYW5kbGVyIG1heSBhZGQgaGVhZGVyCisgICAg
ICAgICAgICAjIGRhdGEgYXMgbmFtZS92YWx1ZSBwYWlycyB0byB0aGlzIGxpc3QgYW5kIHB5d2Vi
c29ja2V0IGFwcGVuZHMKKyAgICAgICAgICAgICMgdGhlbSB0byB0aGUgV2ViU29ja2V0IGhhbmRz
aGFrZS4KKyAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QuZXh0cmFfaGVhZGVycyA9IFtdCisKKyAg
ICAgICAgICAgICMgRXh0cmEgaGFuZHNoYWtlIGhhbmRsZXIgbWF5IG1vZGlmeS9yZW1vdmUgcHJv
Y2Vzc29ycy4KKyAgICAgICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIuZG9fZXh0cmFfaGFuZHNoYWtl
KHNlbGYuX3JlcXVlc3QpCisgICAgICAgICAgICBwcm9jZXNzb3JzID0gZmlsdGVyKGxhbWJkYSBw
cm9jZXNzb3I6IHByb2Nlc3NvciBpcyBub3QgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fcmVxdWVzdC53c19leHRlbnNpb25fcHJvY2Vzc29ycykKKworICAgICAg
ICAgICAgIyBBc2sgZWFjaCBwcm9jZXNzb3IgaWYgdGhlcmUgYXJlIGV4dGVuc2lvbnMgb24gdGhl
IHJlcXVlc3Qgd2hpY2gKKyAgICAgICAgICAgICMgY2Fubm90IGNvLWV4aXN0LiBXaGVuIHByb2Nl
c3NvciBkZWNpZGVkIG90aGVyIHByb2Nlc3NvcnMgY2Fubm90CisgICAgICAgICAgICAjIGNvLWV4
aXN0IHdpdGggaXQsIHRoZSBwcm9jZXNzb3IgbWFya3MgdGhlbSAob3IgaXRzZWxmKSBhcworICAg
ICAgICAgICAgIyAiaW5hY3RpdmUiLiBUaGUgZmlyc3QgZXh0ZW5zaW9uIHByb2Nlc3NvciBoYXMg
dGhlIHJpZ2h0IHRvCisgICAgICAgICAgICAjIG1ha2UgdGhlIGZpbmFsIGNhbGwuCisgICAgICAg
ICAgICBmb3IgcHJvY2Vzc29yIGluIHJldmVyc2VkKHByb2Nlc3NvcnMpOgorICAgICAgICAgICAg
ICAgIGlmIHByb2Nlc3Nvci5pc19hY3RpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vz
c29yLmNoZWNrX2NvbnNpc3RlbmN5X3dpdGhfb3RoZXJfcHJvY2Vzc29ycygKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHByb2Nlc3NvcnMpCisgICAgICAgICAgICBwcm9jZXNzb3JzID0gZmlsdGVy
KGxhbWJkYSBwcm9jZXNzb3I6IHByb2Nlc3Nvci5pc19hY3RpdmUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvY2Vzc29ycykKKworICAgICAgICAgICAgYWNjZXB0ZWRfZXh0
ZW5zaW9ucyA9IFtdCisKKyAgICAgICAgICAgICMgV2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3Vu
dCBvZiBtdXggZXh0ZW5zaW9uIGhlcmUuCisgICAgICAgICAgICAjIElmIG11eCBleHRlbnNpb24g
ZXhpc3RzOgorICAgICAgICAgICAgIyAtIFJlbW92ZSBwcm9jZXNzb3JzIG9mIGV4dGVuc2lvbnMg
Zm9yIGxvZ2ljYWwgY2hhbm5lbCwKKyAgICAgICAgICAgICMgICB3aGljaCBhcmUgcHJvY2Vzc29y
cyBsb2NhdGVkIGJlZm9yZSB0aGUgbXV4IHByb2Nlc3NvcgorICAgICAgICAgICAgIyAtIFBhc3Mg
ZXh0ZW5zaW9uIHJlcXVlc3RzIGZvciBsb2dpY2FsIGNoYW5uZWwgdG8gbXV4IHByb2Nlc3Nvcgor
ICAgICAgICAgICAgIyAtIEF0dGFjaCB0aGUgbXV4IHByb2Nlc3NvciB0byB0aGUgcmVxdWVzdC4g
SXQgd2lsbCBiZSByZWZlcnJlZAorICAgICAgICAgICAgIyAgIGJ5IGRpc3BhdGNoZXIgdG8gc2Vl
IHdoZXRoZXIgdGhlIGRpc3BhdGNoZXIgc2hvdWxkIHVzZSBtdXgKKyAgICAgICAgICAgICMgICBo
YW5kbGVyIG9yIG5vdC4KKyAgICAgICAgICAgIG11eF9pbmRleCA9IC0xCisgICAgICAgICAgICBm
b3IgaSwgcHJvY2Vzc29yIGluIGVudW1lcmF0ZShwcm9jZXNzb3JzKToKKyAgICAgICAgICAgICAg
ICBpZiBwcm9jZXNzb3IubmFtZSgpID09IGNvbW1vbi5NVVhfRVhURU5TSU9OOgorICAgICAgICAg
ICAgICAgICAgICBtdXhfaW5kZXggPSBpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAg
ICAgICAgICBpZiBtdXhfaW5kZXggPj0gMDoKKyAgICAgICAgICAgICAgICBsb2dpY2FsX2NoYW5u
ZWxfZXh0ZW5zaW9ucyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHByb2Nlc3NvciBpbiBwcm9j
ZXNzb3JzWzptdXhfaW5kZXhdOgorICAgICAgICAgICAgICAgICAgICBsb2dpY2FsX2NoYW5uZWxf
ZXh0ZW5zaW9ucy5hcHBlbmQocHJvY2Vzc29yLnJlcXVlc3QoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc29yLnNldF9hY3RpdmUoRmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi5fcmVx
dWVzdC5tdXhfcHJvY2Vzc29yID0gcHJvY2Vzc29yc1ttdXhfaW5kZXhdCisgICAgICAgICAgICAg
ICAgc2VsZi5fcmVxdWVzdC5tdXhfcHJvY2Vzc29yLnNldF9leHRlbnNpb25zKAorICAgICAgICAg
ICAgICAgICAgICBsb2dpY2FsX2NoYW5uZWxfZXh0ZW5zaW9ucykKKyAgICAgICAgICAgICAgICBw
cm9jZXNzb3JzID0gZmlsdGVyKGxhbWJkYSBwcm9jZXNzb3I6IHByb2Nlc3Nvci5pc19hY3RpdmUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NvcnMpCisKKyAg
ICAgICAgICAgIHN0cmVhbV9vcHRpb25zID0gU3RyZWFtT3B0aW9ucygpCisKKyAgICAgICAgICAg
IGZvciBpbmRleCwgcHJvY2Vzc29yIGluIGVudW1lcmF0ZShwcm9jZXNzb3JzKToKKyAgICAgICAg
ICAgICAgICBpZiBub3QgcHJvY2Vzc29yLmlzX2FjdGl2ZSgpOgorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgZXh0ZW5zaW9uX3Jlc3BvbnNlID0gcHJvY2Vz
c29yLmdldF9leHRlbnNpb25fcmVzcG9uc2UoKQorICAgICAgICAgICAgICAgIGlmIGV4dGVuc2lv
bl9yZXNwb25zZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIFJlamVjdGVkLgorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgYWNjZXB0ZWRfZXh0
ZW5zaW9ucy5hcHBlbmQoZXh0ZW5zaW9uX3Jlc3BvbnNlKQorCisgICAgICAgICAgICAgICAgcHJv
Y2Vzc29yLnNldHVwX3N0cmVhbV9vcHRpb25zKHN0cmVhbV9vcHRpb25zKQorCisgICAgICAgICAg
ICAgICAgaWYgbm90IGlzX2NvbXByZXNzaW9uX2V4dGVuc2lvbihwcm9jZXNzb3IubmFtZSgpKToK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgSW5hY3Rp
dmF0ZSBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb21wcmVzc2lvbiBleHRlbnNpb25zLgorICAgICAg
ICAgICAgICAgIGZvciBqIGluIHhyYW5nZShpbmRleCArIDEsIGxlbihwcm9jZXNzb3JzKSk6Cisg
ICAgICAgICAgICAgICAgICAgIGlmIGlzX2NvbXByZXNzaW9uX2V4dGVuc2lvbihwcm9jZXNzb3Jz
W2pdLm5hbWUoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3JzW2pdLnNldF9h
Y3RpdmUoRmFsc2UpCisKKyAgICAgICAgICAgIGlmIGxlbihhY2NlcHRlZF9leHRlbnNpb25zKSA+
IDA6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC53c19leHRlbnNpb25zID0gYWNjZXB0
ZWRfZXh0ZW5zaW9ucworICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAg
ICAgICAgICAgICAgICAgJ0V4dGVuc2lvbnMgYWNjZXB0ZWQ6ICVyJywKKyAgICAgICAgICAgICAg
ICAgICAgbWFwKGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIubmFtZSwgYWNjZXB0ZWRfZXh0ZW5z
aW9ucykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3Qu
d3NfZXh0ZW5zaW9ucyA9IE5vbmUKKworICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC53c19zdHJl
YW0gPSBzZWxmLl9jcmVhdGVfc3RyZWFtKHN0cmVhbV9vcHRpb25zKQorCisgICAgICAgICAgICBp
ZiBzZWxmLl9yZXF1ZXN0LndzX3JlcXVlc3RlZF9wcm90b2NvbHMgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCBpcyBOb25lOgorICAgICAg
ICAgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAg
ICAgICAgICAnZG9fZXh0cmFfaGFuZHNoYWtlIG11c3QgY2hvb3NlIG9uZSBzdWJwcm90b2NvbCBm
cm9tICcKKyAgICAgICAgICAgICAgICAgICAgICAgICd3c19yZXF1ZXN0ZWRfcHJvdG9jb2xzIGFu
ZCBzZXQgaXQgdG8gd3NfcHJvdG9jb2wnKQorICAgICAgICAgICAgICAgIHZhbGlkYXRlX3N1YnBy
b3RvY29sKHNlbGYuX3JlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICAgICAgICAgICAgICBzZWxm
Ll9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAgICAgICAgICdTdWJwcm90b2NvbCBhY2NlcHRl
ZDogJXInLAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX3Byb3RvY29sKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LndzX3By
b3RvY29sIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VF
eGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAnd3NfcHJvdG9jb2wgbXVzdCBiZSBO
b25lIHdoZW4gdGhlIGNsaWVudCBkaWRuXCd0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICdy
ZXF1ZXN0IGFueSBzdWJwcm90b2NvbCcpCisKKyAgICAgICAgICAgIHNlbGYuX3NlbmRfaGFuZHNo
YWtlKGFjY2VwdCkKKyAgICAgICAgZXhjZXB0IEhhbmRzaGFrZUV4Y2VwdGlvbiwgZToKKyAgICAg
ICAgICAgIGlmIG5vdCBlLnN0YXR1czoKKyAgICAgICAgICAgICAgICAjIEZhbGxiYWNrIHRvIDQw
MCBiYWQgcmVxdWVzdCBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIGUuc3RhdHVzID0gY29t
bW9uLkhUVFBfU1RBVFVTX0JBRF9SRVFVRVNUCisgICAgICAgICAgICByYWlzZSBlCisKKyAgICBk
ZWYgX2dldF9vcmlnaW4oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3JlcXVlc3Qud3NfdmVyc2lv
biBpcyBfVkVSU0lPTl9IWUJJMDg6CisgICAgICAgICAgICBvcmlnaW5faGVhZGVyID0gY29tbW9u
LlNFQ19XRUJTT0NLRVRfT1JJR0lOX0hFQURFUgorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
b3JpZ2luX2hlYWRlciA9IGNvbW1vbi5PUklHSU5fSEVBREVSCisgICAgICAgIG9yaWdpbiA9IHNl
bGYuX3JlcXVlc3QuaGVhZGVyc19pbi5nZXQob3JpZ2luX2hlYWRlcikKKyAgICAgICAgaWYgb3Jp
Z2luIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ0NsaWVudCByZXF1
ZXN0IGRvZXMgbm90IGhhdmUgb3JpZ2luIGhlYWRlcicpCisgICAgICAgIHNlbGYuX3JlcXVlc3Qu
d3Nfb3JpZ2luID0gb3JpZ2luCisKKyAgICBkZWYgX2NoZWNrX3ZlcnNpb24oc2VsZik6CisgICAg
ICAgIHZlcnNpb24gPSBnZXRfbWFuZGF0b3J5X2hlYWRlcihzZWxmLl9yZXF1ZXN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uLlNFQ19XRUJTT0NLRVRfVkVS
U0lPTl9IRUFERVIpCisgICAgICAgIGlmIHZlcnNpb24gPT0gX1ZFUlNJT05fSFlCSTA4X1NUUklO
RzoKKyAgICAgICAgICAgIHJldHVybiBfVkVSU0lPTl9IWUJJMDgKKyAgICAgICAgaWYgdmVyc2lv
biA9PSBfVkVSU0lPTl9MQVRFU1RfU1RSSU5HOgorICAgICAgICAgICAgcmV0dXJuIF9WRVJTSU9O
X0xBVEVTVAorCisgICAgICAgIGlmIHZlcnNpb24uZmluZCgnLCcpID49IDA6CisgICAgICAgICAg
ICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ011bHRpcGxlIHZl
cnNpb25zICglcikgYXJlIG5vdCBhbGxvd2VkIGZvciBoZWFkZXIgJXMnICUKKyAgICAgICAgICAg
ICAgICAodmVyc2lvbiwgY29tbW9uLlNFQ19XRUJTT0NLRVRfVkVSU0lPTl9IRUFERVIpLAorICAg
ICAgICAgICAgICAgIHN0YXR1cz1jb21tb24uSFRUUF9TVEFUVVNfQkFEX1JFUVVFU1QpCisgICAg
ICAgIHJhaXNlIFZlcnNpb25FeGNlcHRpb24oCisgICAgICAgICAgICAnVW5zdXBwb3J0ZWQgdmVy
c2lvbiAlciBmb3IgaGVhZGVyICVzJyAlCisgICAgICAgICAgICAodmVyc2lvbiwgY29tbW9uLlNF
Q19XRUJTT0NLRVRfVkVSU0lPTl9IRUFERVIpLAorICAgICAgICAgICAgc3VwcG9ydGVkX3ZlcnNp
b25zPScsICcuam9pbihtYXAoc3RyLCBfU1VQUE9SVEVEX1ZFUlNJT05TKSkpCisKKyAgICBkZWYg
X3NldF9wcm90b2NvbChzZWxmKToKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCA9
IE5vbmUKKworICAgICAgICBwcm90b2NvbF9oZWFkZXIgPSBzZWxmLl9yZXF1ZXN0LmhlYWRlcnNf
aW4uZ2V0KAorICAgICAgICAgICAgY29tbW9uLlNFQ19XRUJTT0NLRVRfUFJPVE9DT0xfSEVBREVS
KQorCisgICAgICAgIGlmIHByb3RvY29sX2hlYWRlciBpcyBOb25lOgorICAgICAgICAgICAgc2Vs
Zi5fcmVxdWVzdC53c19yZXF1ZXN0ZWRfcHJvdG9jb2xzID0gTm9uZQorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c19yZXF1ZXN0ZWRfcHJvdG9jb2xzID0gcGFy
c2VfdG9rZW5fbGlzdCgKKyAgICAgICAgICAgIHByb3RvY29sX2hlYWRlcikKKyAgICAgICAgc2Vs
Zi5fbG9nZ2VyLmRlYnVnKCdTdWJwcm90b2NvbHMgcmVxdWVzdGVkOiAlcicsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX3JlcXVlc3RlZF9wcm90b2NvbHMpCisK
KyAgICBkZWYgX3BhcnNlX2V4dGVuc2lvbnMoc2VsZik6CisgICAgICAgIGV4dGVuc2lvbnNfaGVh
ZGVyID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luLmdldCgKKyAgICAgICAgICAgIGNvbW1vbi5T
RUNfV0VCU09DS0VUX0VYVEVOU0lPTlNfSEVBREVSKQorICAgICAgICBpZiBub3QgZXh0ZW5zaW9u
c19oZWFkZXI6CisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX3JlcXVlc3RlZF9leHRlbnNp
b25zID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fcmVxdWVz
dC53c192ZXJzaW9uIGlzIGNvbW1vbi5WRVJTSU9OX0hZQkkwODoKKyAgICAgICAgICAgIGFsbG93
X3F1b3RlZF9zdHJpbmc9RmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFsbG93X3F1
b3RlZF9zdHJpbmc9VHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0
LndzX3JlcXVlc3RlZF9leHRlbnNpb25zID0gY29tbW9uLnBhcnNlX2V4dGVuc2lvbnMoCisgICAg
ICAgICAgICAgICAgZXh0ZW5zaW9uc19oZWFkZXIsIGFsbG93X3F1b3RlZF9zdHJpbmc9YWxsb3df
cXVvdGVkX3N0cmluZykKKyAgICAgICAgZXhjZXB0IGNvbW1vbi5FeHRlbnNpb25QYXJzaW5nRXhj
ZXB0aW9uLCBlOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAgICAg
ICAgICAgICAgICdGYWlsZWQgdG8gcGFyc2UgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zIGhlYWRl
cjogJXInICUgZSkKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAn
RXh0ZW5zaW9ucyByZXF1ZXN0ZWQ6ICVyJywKKyAgICAgICAgICAgIG1hcChjb21tb24uRXh0ZW5z
aW9uUGFyYW1ldGVyLm5hbWUsCisgICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC53c19yZXF1
ZXN0ZWRfZXh0ZW5zaW9ucykpCisKKyAgICBkZWYgX3ZhbGlkYXRlX2tleShzZWxmLCBrZXkpOgor
ICAgICAgICBpZiBrZXkuZmluZCgnLCcpID49IDA6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hh
a2VFeGNlcHRpb24oJ1JlcXVlc3QgaGFzIG11bHRpcGxlICVzIGhlYWRlciBsaW5lcyBvciAnCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRhaW5zIGlsbGVnYWwgY2hh
cmFjdGVyIFwnLFwnOiAlcicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb21tb24uU0VDX1dFQlNPQ0tFVF9LRVlfSEVBREVSLCBrZXkpKQorCisgICAgICAgICMgVmFs
aWRhdGUKKyAgICAgICAga2V5X2lzX3ZhbGlkID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgIyBWYWxpZGF0ZSBrZXkgYnkgcXVpY2sgcmVnZXggbWF0Y2ggYmVmb3JlIHBhcnNpbmcg
YnkgYmFzZTY0CisgICAgICAgICAgICAjIG1vZHVsZS4gQmVjYXVzZSBiYXNlNjQgbW9kdWxlIHNr
aXBzIGludmFsaWQgY2hhcmFjdGVycywgd2UgaGF2ZQorICAgICAgICAgICAgIyB0byBkbyB0aGlz
IGluIGFkdmFuY2UgdG8gbWFrZSB0aGlzIHNlcnZlciBzdHJpY3RseSByZWplY3QgaWxsZWdhbAor
ICAgICAgICAgICAgIyBrZXlzLgorICAgICAgICAgICAgaWYgX1NFQ19XRUJTT0NLRVRfS0VZX1JF
R0VYLm1hdGNoKGtleSk6CisgICAgICAgICAgICAgICAgZGVjb2RlZF9rZXkgPSBiYXNlNjQuYjY0
ZGVjb2RlKGtleSkKKyAgICAgICAgICAgICAgICBpZiBsZW4oZGVjb2RlZF9rZXkpID09IDE2Ogor
ICAgICAgICAgICAgICAgICAgICBrZXlfaXNfdmFsaWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBU
eXBlRXJyb3IsIGU6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgbm90IGtleV9pc192
YWxpZDoKKyAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbigKKyAgICAgICAgICAg
ICAgICAnSWxsZWdhbCB2YWx1ZSBmb3IgaGVhZGVyICVzOiAlcicgJQorICAgICAgICAgICAgICAg
IChjb21tb24uU0VDX1dFQlNPQ0tFVF9LRVlfSEVBREVSLCBrZXkpKQorCisgICAgICAgIHJldHVy
biBkZWNvZGVkX2tleQorCisgICAgZGVmIF9nZXRfa2V5KHNlbGYpOgorICAgICAgICBrZXkgPSBn
ZXRfbWFuZGF0b3J5X2hlYWRlcigKKyAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QsIGNvbW1vbi5T
RUNfV0VCU09DS0VUX0tFWV9IRUFERVIpCisKKyAgICAgICAgZGVjb2RlZF9rZXkgPSBzZWxmLl92
YWxpZGF0ZV9rZXkoa2V5KQorCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAg
ICAgICclczogJXIgKCVzKScsCisgICAgICAgICAgICBjb21tb24uU0VDX1dFQlNPQ0tFVF9LRVlf
SEVBREVSLAorICAgICAgICAgICAga2V5LAorICAgICAgICAgICAgdXRpbC5oZXhpZnkoZGVjb2Rl
ZF9rZXkpKQorCisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiBfY3JlYXRlX3N0cmVhbShz
ZWxmLCBzdHJlYW1fb3B0aW9ucyk6CisgICAgICAgIHJldHVybiBTdHJlYW0oc2VsZi5fcmVxdWVz
dCwgc3RyZWFtX29wdGlvbnMpCisKKyAgICBkZWYgX2NyZWF0ZV9oYW5kc2hha2VfcmVzcG9uc2Uo
c2VsZiwgYWNjZXB0KToKKyAgICAgICAgcmVzcG9uc2UgPSBbXQorCisgICAgICAgIHJlc3BvbnNl
LmFwcGVuZCgnSFRUUC8xLjEgMTAxIFN3aXRjaGluZyBQcm90b2NvbHNcclxuJykKKworICAgICAg
ICAjIFdlYlNvY2tldCBoZWFkZXJzCisgICAgICAgIHJlc3BvbnNlLmFwcGVuZChmb3JtYXRfaGVh
ZGVyKAorICAgICAgICAgICAgY29tbW9uLlVQR1JBREVfSEVBREVSLCBjb21tb24uV0VCU09DS0VU
X1VQR1JBREVfVFlQRSkpCisgICAgICAgIHJlc3BvbnNlLmFwcGVuZChmb3JtYXRfaGVhZGVyKAor
ICAgICAgICAgICAgY29tbW9uLkNPTk5FQ1RJT05fSEVBREVSLCBjb21tb24uVVBHUkFERV9DT05O
RUNUSU9OX1RZUEUpKQorICAgICAgICByZXNwb25zZS5hcHBlbmQoZm9ybWF0X2hlYWRlcigKKyAg
ICAgICAgICAgIGNvbW1vbi5TRUNfV0VCU09DS0VUX0FDQ0VQVF9IRUFERVIsIGFjY2VwdCkpCisg
ICAgICAgIGlmIHNlbGYuX3JlcXVlc3Qud3NfcHJvdG9jb2wgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICByZXNwb25zZS5hcHBlbmQoZm9ybWF0X2hlYWRlcigKKyAgICAgICAgICAgICAgICBjb21t
b24uU0VDX1dFQlNPQ0tFVF9QUk9UT0NPTF9IRUFERVIsCisgICAgICAgICAgICAgICAgc2VsZi5f
cmVxdWVzdC53c19wcm90b2NvbCkpCisgICAgICAgIGlmIChzZWxmLl9yZXF1ZXN0LndzX2V4dGVu
c2lvbnMgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICBsZW4oc2VsZi5fcmVxdWVzdC53c19l
eHRlbnNpb25zKSAhPSAwKToKKyAgICAgICAgICAgIHJlc3BvbnNlLmFwcGVuZChmb3JtYXRfaGVh
ZGVyKAorICAgICAgICAgICAgICAgIGNvbW1vbi5TRUNfV0VCU09DS0VUX0VYVEVOU0lPTlNfSEVB
REVSLAorICAgICAgICAgICAgICAgIGNvbW1vbi5mb3JtYXRfZXh0ZW5zaW9ucyhzZWxmLl9yZXF1
ZXN0LndzX2V4dGVuc2lvbnMpKSkKKworICAgICAgICAjIEhlYWRlcnMgbm90IHNwZWNpZmljIGZv
ciBXZWJTb2NrZXQKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHNlbGYuX3JlcXVlc3QuZXh0
cmFfaGVhZGVyczoKKyAgICAgICAgICAgIHJlc3BvbnNlLmFwcGVuZChmb3JtYXRfaGVhZGVyKG5h
bWUsIHZhbHVlKSkKKworICAgICAgICByZXNwb25zZS5hcHBlbmQoJ1xyXG4nKQorCisgICAgICAg
IHJldHVybiAnJy5qb2luKHJlc3BvbnNlKQorCisgICAgZGVmIF9zZW5kX2hhbmRzaGFrZShzZWxm
LCBhY2NlcHQpOgorICAgICAgICByYXdfcmVzcG9uc2UgPSBzZWxmLl9jcmVhdGVfaGFuZHNoYWtl
X3Jlc3BvbnNlKGFjY2VwdCkKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRl
KHJhd19yZXNwb25zZSkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdTZW50IHNlcnZlclwn
cyBvcGVuaW5nIGhhbmRzaGFrZTogJXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3
X3Jlc3BvbnNlKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9t
b2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL2h5YmkwMC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29j
a2V0L2hhbmRzaGFrZS9oeWJpMDAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODc1NzcxN2E2MzliYWMzZGIwNWQ0
Y2IzMDI3ZTA1NWZkYmY3ZjNjZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vi
c29ja2V0L2hhbmRzaGFrZS9oeWJpMDAucHkKQEAgLTAsMCArMSwyOTMgQEAKKyMgQ29weXJpZ2h0
IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisKKyIiIlRoaXMgZmlsZSBwcm92aWRlcyB0aGUgb3BlbmluZyBoYW5kc2hha2UgcHJv
Y2Vzc29yIGZvciB0aGUgV2ViU29ja2V0Citwcm90b2NvbCB2ZXJzaW9uIEh5QmkgMDAuCisKK1Nw
ZWNpZmljYXRpb246CitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLWh5Ymkt
dGhld2Vic29ja2V0cHJvdG9jb2wtMDAKKyIiIgorCisKKyMgTm90ZTogcmVxdWVzdC5jb25uZWN0
aW9uLndyaXRlL3JlYWQgYXJlIHVzZWQgaW4gdGhpcyBtb2R1bGUsIGV2ZW4gdGhvdWdoCisjIG1v
ZF9weXRob24gZG9jdW1lbnQgc2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBj
b25uZWN0aW9uCisjIGhhbmRsZXJzLiBVbmZvcnR1bmF0ZWx5LCB3ZSBoYXZlIG5vIG90aGVyIG9w
dGlvbnMuIEZvciBleGFtcGxlLAorIyByZXF1ZXN0LndyaXRlL3JlYWQgYXJlIG5vdCBzdWl0YWJs
ZSBiZWNhdXNlIHRoZXkgZG9uJ3QgYWxsb3cgZGlyZWN0IHJhdyBieXRlcworIyB3cml0aW5nL3Jl
YWRpbmcuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHN0cnVjdAorCitm
cm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgY29tbW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5z
dHJlYW0gaW1wb3J0IFN0cmVhbUhpeGllNzUKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCB1
dGlsCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IEhhbmRzaGFr
ZUV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBj
aGVja19yZXF1ZXN0X2xpbmUKK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBp
bXBvcnQgZm9ybWF0X2hlYWRlcgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNl
IGltcG9ydCBnZXRfZGVmYXVsdF9wb3J0Citmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2Uu
X2Jhc2UgaW1wb3J0IGdldF9tYW5kYXRvcnlfaGVhZGVyCitmcm9tIG1vZF9weXdlYnNvY2tldC5o
YW5kc2hha2UuX2Jhc2UgaW1wb3J0IHBhcnNlX2hvc3RfaGVhZGVyCitmcm9tIG1vZF9weXdlYnNv
Y2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IHZhbGlkYXRlX21hbmRhdG9yeV9oZWFkZXIKKwor
CitfTUFOREFUT1JZX0hFQURFUlMgPSBbCisgICAgIyBrZXksIGV4cGVjdGVkIHZhbHVlIG9yIE5v
bmUKKyAgICBbY29tbW9uLlVQR1JBREVfSEVBREVSLCBjb21tb24uV0VCU09DS0VUX1VQR1JBREVf
VFlQRV9ISVhJRTc1XSwKKyAgICBbY29tbW9uLkNPTk5FQ1RJT05fSEVBREVSLCBjb21tb24uVVBH
UkFERV9DT05ORUNUSU9OX1RZUEVdLAorXQorCisKK2RlZiBfdmFsaWRhdGVfc3VicHJvdG9jb2wo
c3VicHJvdG9jb2wpOgorICAgICIiIkNoZWNrcyBpZiBjaGFyYWN0ZXJzIGluIHN1YnByb3RvY29s
IGFyZSBpbiByYW5nZSBiZXR3ZWVuIFUrMDAyMCBhbmQKKyAgICBVKzAwN0UuIEEgdmFsdWUgaW4g
dGhlIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2wgZmllbGQgbmVlZCB0byBzYXRpc2Z5IHRoaXMKKyAg
ICByZXF1aXJlbWVudC4KKworICAgIFNlZSB0aGUgU2VjdGlvbiA0LjEuIE9wZW5pbmcgaGFuZHNo
YWtlIG9mIHRoZSBzcGVjLgorICAgICIiIgorCisgICAgaWYgbm90IHN1YnByb3RvY29sOgorICAg
ICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oJ0ludmFsaWQgc3VicHJvdG9jb2wgbmFtZTog
ZW1wdHknKQorCisgICAgIyBQYXJhbWV0ZXIgc2hvdWxkIGJlIGluIHRoZSByYW5nZSBVKzAwMjAg
dG8gVSswMDdFLgorICAgIGZvciBjIGluIHN1YnByb3RvY29sOgorICAgICAgICBpZiBub3QgMHgy
MCA8PSBvcmQoYykgPD0gMHg3ZToKKyAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlv
bigKKyAgICAgICAgICAgICAgICAnSWxsZWdhbCBjaGFyYWN0ZXIgaW4gc3VicHJvdG9jb2wgbmFt
ZTogJXInICUgYykKKworCitkZWYgX2NoZWNrX2hlYWRlcl9saW5lcyhyZXF1ZXN0LCBtYW5kYXRv
cnlfaGVhZGVycyk6CisgICAgY2hlY2tfcmVxdWVzdF9saW5lKHJlcXVlc3QpCisKKyAgICAjIFRo
ZSBleHBlY3RlZCBmaWVsZCBuYW1lcywgYW5kIHRoZSBtZWFuaW5nIG9mIHRoZWlyIGNvcnJlc3Bv
bmRpbmcKKyAgICAjIHZhbHVlcywgYXJlIGFzIGZvbGxvd3MuCisgICAgIyAgfFVwZ3JhZGV8IGFu
ZCB8Q29ubmVjdGlvbnwKKyAgICBmb3Iga2V5LCBleHBlY3RlZF92YWx1ZSBpbiBtYW5kYXRvcnlf
aGVhZGVyczoKKyAgICAgICAgdmFsaWRhdGVfbWFuZGF0b3J5X2hlYWRlcihyZXF1ZXN0LCBrZXks
IGV4cGVjdGVkX3ZhbHVlKQorCisKK2RlZiBfYnVpbGRfbG9jYXRpb24ocmVxdWVzdCk6CisgICAg
IiIiQnVpbGQgV2ViU29ja2V0IGxvY2F0aW9uIGZvciByZXF1ZXN0LiIiIgorCisgICAgbG9jYXRp
b25fcGFydHMgPSBbXQorICAgIGlmIHJlcXVlc3QuaXNfaHR0cHMoKToKKyAgICAgICAgbG9jYXRp
b25fcGFydHMuYXBwZW5kKGNvbW1vbi5XRUJfU09DS0VUX1NFQ1VSRV9TQ0hFTUUpCisgICAgZWxz
ZToKKyAgICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKGNvbW1vbi5XRUJfU09DS0VUX1NDSEVN
RSkKKyAgICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQoJzovLycpCisgICAgaG9zdCwgcG9ydCA9IHBh
cnNlX2hvc3RfaGVhZGVyKHJlcXVlc3QpCisgICAgY29ubmVjdGlvbl9wb3J0ID0gcmVxdWVzdC5j
b25uZWN0aW9uLmxvY2FsX2FkZHJbMV0KKyAgICBpZiBwb3J0ICE9IGNvbm5lY3Rpb25fcG9ydDoK
KyAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKCdIZWFkZXIvY29ubmVjdGlvbiBwb3J0
IG1pc21hdGNoOiAlZC8lZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBv
cnQsIGNvbm5lY3Rpb25fcG9ydCkpCisgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKGhvc3QpCisg
ICAgaWYgKHBvcnQgIT0gZ2V0X2RlZmF1bHRfcG9ydChyZXF1ZXN0LmlzX2h0dHBzKCkpKToKKyAg
ICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKCc6JykKKyAgICAgICAgbG9jYXRpb25fcGFydHMu
YXBwZW5kKHN0cihwb3J0KSkKKyAgICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQocmVxdWVzdC51bnBh
cnNlZF91cmkpCisgICAgcmV0dXJuICcnLmpvaW4obG9jYXRpb25fcGFydHMpCisKKworY2xhc3Mg
SGFuZHNoYWtlcihvYmplY3QpOgorICAgICIiIk9wZW5pbmcgaGFuZHNoYWtlIHByb2Nlc3NvciBm
b3IgdGhlIFdlYlNvY2tldCBwcm90b2NvbCB2ZXJzaW9uIEh5QmkgMDAuCisgICAgIiIiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgZGlzcGF0Y2hlcik6CisgICAgICAgICIiIkNv
bnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVxdWVz
dDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAgICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hl
ciAoZGlzcGF0Y2guRGlzcGF0Y2hlcikuCisKKyAgICAgICAgSGFuZHNoYWtlciB3aWxsIGFkZCBh
dHRyaWJ1dGVzIHN1Y2ggYXMgd3NfcmVzb3VyY2UgaW4gcGVyZm9ybWluZworICAgICAgICBoYW5k
c2hha2UuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2Ns
YXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX3JlcXVlc3QgPSByZXF1ZXN0CisgICAg
ICAgIHNlbGYuX2Rpc3BhdGNoZXIgPSBkaXNwYXRjaGVyCisKKyAgICBkZWYgZG9faGFuZHNoYWtl
KHNlbGYpOgorICAgICAgICAiIiJQZXJmb3JtIFdlYlNvY2tldCBIYW5kc2hha2UuCisKKyAgICAg
ICAgT24gX3JlcXVlc3QsIHdlIHNldAorICAgICAgICAgICAgd3NfcmVzb3VyY2UsIHdzX3Byb3Rv
Y29sLCB3c19sb2NhdGlvbiwgd3Nfb3JpZ2luLCB3c19jaGFsbGVuZ2UsCisgICAgICAgICAgICB3
c19jaGFsbGVuZ2VfbWQ1OiBXZWJTb2NrZXQgaGFuZHNoYWtlIGluZm9ybWF0aW9uLgorICAgICAg
ICAgICAgd3Nfc3RyZWFtOiBGcmFtZSBnZW5lcmF0aW9uL3BhcnNpbmcgY2xhc3MuCisgICAgICAg
ICAgICB3c192ZXJzaW9uOiBQcm90b2NvbCB2ZXJzaW9uLgorCisgICAgICAgIFJhaXNlczoKKyAg
ICAgICAgICAgIEhhbmRzaGFrZUV4Y2VwdGlvbjogd2hlbiBhbnkgZXJyb3IgaGFwcGVuZWQgaW4g
cGFyc2luZyB0aGUgb3BlbmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5k
c2hha2UgcmVxdWVzdC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyA1LjEgUmVhZGluZyB0aGUg
Y2xpZW50J3Mgb3BlbmluZyBoYW5kc2hha2UuCisgICAgICAgICMgZGlzcGF0Y2hlciBzZXRzIGl0
IGluIHNlbGYuX3JlcXVlc3QuCisgICAgICAgIF9jaGVja19oZWFkZXJfbGluZXMoc2VsZi5fcmVx
dWVzdCwgX01BTkRBVE9SWV9IRUFERVJTKQorICAgICAgICBzZWxmLl9zZXRfcmVzb3VyY2UoKQor
ICAgICAgICBzZWxmLl9zZXRfc3VicHJvdG9jb2woKQorICAgICAgICBzZWxmLl9zZXRfbG9jYXRp
b24oKQorICAgICAgICBzZWxmLl9zZXRfb3JpZ2luKCkKKyAgICAgICAgc2VsZi5fc2V0X2NoYWxs
ZW5nZV9yZXNwb25zZSgpCisgICAgICAgIHNlbGYuX3NldF9wcm90b2NvbF92ZXJzaW9uKCkKKwor
ICAgICAgICBzZWxmLl9kaXNwYXRjaGVyLmRvX2V4dHJhX2hhbmRzaGFrZShzZWxmLl9yZXF1ZXN0
KQorCisgICAgICAgIHNlbGYuX3NlbmRfaGFuZHNoYWtlKCkKKworICAgIGRlZiBfc2V0X3Jlc291
cmNlKHNlbGYpOgorICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX3Jlc291cmNlID0gc2VsZi5fcmVx
dWVzdC51cmkKKworICAgIGRlZiBfc2V0X3N1YnByb3RvY29sKHNlbGYpOgorICAgICAgICAjIHxT
ZWMtV2ViU29ja2V0LVByb3RvY29sfAorICAgICAgICBzdWJwcm90b2NvbCA9IHNlbGYuX3JlcXVl
c3QuaGVhZGVyc19pbi5nZXQoCisgICAgICAgICAgICBjb21tb24uU0VDX1dFQlNPQ0tFVF9QUk9U
T0NPTF9IRUFERVIpCisgICAgICAgIGlmIHN1YnByb3RvY29sIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgX3ZhbGlkYXRlX3N1YnByb3RvY29sKHN1YnByb3RvY29sKQorICAgICAgICBzZWxmLl9y
ZXF1ZXN0LndzX3Byb3RvY29sID0gc3VicHJvdG9jb2wKKworICAgIGRlZiBfc2V0X2xvY2F0aW9u
KHNlbGYpOgorICAgICAgICAjIHxIb3N0fAorICAgICAgICBob3N0ID0gc2VsZi5fcmVxdWVzdC5o
ZWFkZXJzX2luLmdldChjb21tb24uSE9TVF9IRUFERVIpCisgICAgICAgIGlmIGhvc3QgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2xvY2F0aW9uID0gX2J1aWxkX2xv
Y2F0aW9uKHNlbGYuX3JlcXVlc3QpCisgICAgICAgICMgVE9ETyh1a2FpKTogY2hlY2sgaG9zdCBp
cyB0aGlzIGhvc3QuCisKKyAgICBkZWYgX3NldF9vcmlnaW4oc2VsZik6CisgICAgICAgICMgfE9y
aWdpbnwKKyAgICAgICAgb3JpZ2luID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luLmdldChjb21t
b24uT1JJR0lOX0hFQURFUikKKyAgICAgICAgaWYgb3JpZ2luIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgc2VsZi5fcmVxdWVzdC53c19vcmlnaW4gPSBvcmlnaW4KKworICAgIGRlZiBfc2V0X3By
b3RvY29sX3ZlcnNpb24oc2VsZik6CisgICAgICAgICMgfFNlYy1XZWJTb2NrZXQtRHJhZnR8Cisg
ICAgICAgIGRyYWZ0ID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luLmdldChjb21tb24uU0VDX1dF
QlNPQ0tFVF9EUkFGVF9IRUFERVIpCisgICAgICAgIGlmIGRyYWZ0IGlzIG5vdCBOb25lIGFuZCBk
cmFmdCAhPSAnMCc6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oJ0lsbGVn
YWwgdmFsdWUgZm9yICVzOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChjb21tb24uU0VDX1dFQlNPQ0tFVF9EUkFGVF9IRUFERVIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRyYWZ0KSkKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVi
dWcoJ1Byb3RvY29sIHZlcnNpb24gaXMgSHlCaSAwMCcpCisgICAgICAgIHNlbGYuX3JlcXVlc3Qu
d3NfdmVyc2lvbiA9IGNvbW1vbi5WRVJTSU9OX0hZQkkwMAorICAgICAgICBzZWxmLl9yZXF1ZXN0
LndzX3N0cmVhbSA9IFN0cmVhbUhpeGllNzUoc2VsZi5fcmVxdWVzdCwgVHJ1ZSkKKworICAgIGRl
ZiBfc2V0X2NoYWxsZW5nZV9yZXNwb25zZShzZWxmKToKKyAgICAgICAgIyA1LjIgNC04LgorICAg
ICAgICBzZWxmLl9yZXF1ZXN0LndzX2NoYWxsZW5nZSA9IHNlbGYuX2dldF9jaGFsbGVuZ2UoKQor
ICAgICAgICAjIDUuMiA5LiBsZXQgL3Jlc3BvbnNlLyBiZSB0aGUgTUQ1IGZpbnRlcnByaW50IG9m
IC9jaGFsbGVuZ2UvCisgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfY2hhbGxlbmdlX21kNSA9IHV0
aWwubWQ1X2hhc2goCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2NoYWxsZW5nZSkuZGln
ZXN0KCkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgJ0NoYWxsZW5n
ZTogJXIgKCVzKScsCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2NoYWxsZW5nZSwKKyAg
ICAgICAgICAgIHV0aWwuaGV4aWZ5KHNlbGYuX3JlcXVlc3Qud3NfY2hhbGxlbmdlKSkKKyAgICAg
ICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgJ0NoYWxsZW5nZSByZXNwb25zZTog
JXIgKCVzKScsCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2NoYWxsZW5nZV9tZDUsCisg
ICAgICAgICAgICB1dGlsLmhleGlmeShzZWxmLl9yZXF1ZXN0LndzX2NoYWxsZW5nZV9tZDUpKQor
CisgICAgZGVmIF9nZXRfa2V5X3ZhbHVlKHNlbGYsIGtleV9maWVsZCk6CisgICAgICAgIGtleV92
YWx1ZSA9IGdldF9tYW5kYXRvcnlfaGVhZGVyKHNlbGYuX3JlcXVlc3QsIGtleV9maWVsZCkKKwor
ICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJyVzOiAlcicsIGtleV9maWVsZCwga2V5X3ZhbHVl
KQorCisgICAgICAgICMgNS4yIDQuIGxldCAva2V5LW51bWJlcl9uLyBiZSB0aGUgZGlnaXRzIChj
aGFyYWN0ZXJzIGluIHRoZSByYW5nZQorICAgICAgICAjIFUrMDAzMCBESUdJVCBaRVJPICgwKSB0
byBVKzAwMzkgRElHSVQgTklORSAoOSkpIGluIC9rZXlfbi8sCisgICAgICAgICMgaW50ZXJwcmV0
ZWQgYXMgYSBiYXNlIHRlbiBpbnRlZ2VyLCBpZ25vcmluZyBhbGwgb3RoZXIgY2hhcmFjdGVycwor
ICAgICAgICAjIGluIC9rZXlfbi8uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleV9udW1i
ZXIgPSBpbnQocmUuc3ViKCJcXEQiLCAiIiwga2V5X3ZhbHVlKSkKKyAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKCclcyBmaWVsZCBjb250YWlucyBu
byBkaWdpdCcgJSBrZXlfZmllbGQpCisgICAgICAgICMgNS4yIDUuIGxldCAvc3BhY2VzX24vIGJl
IHRoZSBudW1iZXIgb2YgVSswMDIwIFNQQUNFIGNoYXJhY3RlcnMKKyAgICAgICAgIyBpbiAva2V5
X24vLgorICAgICAgICBzcGFjZXMgPSByZS5zdWJuKCIgIiwgIiIsIGtleV92YWx1ZSlbMV0KKyAg
ICAgICAgaWYgc3BhY2VzID09IDA6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRp
b24oJyVzIGZpZWxkIGNvbnRhaW5zIG5vIHNwYWNlJyAlIGtleV9maWVsZCkKKworICAgICAgICBz
ZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAnJXM6IEtleS1udW1iZXIgaXMgJWQgYW5k
IG51bWJlciBvZiBzcGFjZXMgaXMgJWQnLAorICAgICAgICAgICAga2V5X2ZpZWxkLCBrZXlfbnVt
YmVyLCBzcGFjZXMpCisKKyAgICAgICAgIyA1LjIgNi4gaWYgL2tleS1udW1iZXJfbi8gaXMgbm90
IGFuIGludGVncmFsIG11bHRpcGxlIG9mIC9zcGFjZXNfbi8KKyAgICAgICAgIyB0aGVuIGFib3J0
IHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4KKyAgICAgICAgaWYga2V5X251bWJlciAlIHNwYWNl
cyAhPSAwOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAgICAgICAg
ICAgICAgICclczogS2V5LW51bWJlciAoJWQpIGlzIG5vdCBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBv
ZiBzcGFjZXMgJworICAgICAgICAgICAgICAgICcoJWQpJyAlIChrZXlfZmllbGQsIGtleV9udW1i
ZXIsIHNwYWNlcykpCisgICAgICAgICMgNS4yIDcuIGxldCAvcGFydF9uLyBiZSAva2V5LW51bWJl
cl9uLyBkaXZpZGVkIGJ5IC9zcGFjZXNfbi8uCisgICAgICAgIHBhcnQgPSBrZXlfbnVtYmVyIC8g
c3BhY2VzCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnJXM6IFBhcnQgaXMgJWQnLCBrZXlf
ZmllbGQsIHBhcnQpCisgICAgICAgIHJldHVybiBwYXJ0CisKKyAgICBkZWYgX2dldF9jaGFsbGVu
Z2Uoc2VsZik6CisgICAgICAgICMgNS4yIDQtNy4KKyAgICAgICAga2V5MSA9IHNlbGYuX2dldF9r
ZXlfdmFsdWUoY29tbW9uLlNFQ19XRUJTT0NLRVRfS0VZMV9IRUFERVIpCisgICAgICAgIGtleTIg
PSBzZWxmLl9nZXRfa2V5X3ZhbHVlKGNvbW1vbi5TRUNfV0VCU09DS0VUX0tFWTJfSEVBREVSKQor
ICAgICAgICAjIDUuMiA4LiBsZXQgL2NoYWxsZW5nZS8gYmUgdGhlIGNvbmNhdGVuYXRpb24gb2Yg
L3BhcnRfMS8sCisgICAgICAgIGNoYWxsZW5nZSA9ICcnCisgICAgICAgIGNoYWxsZW5nZSArPSBz
dHJ1Y3QucGFjaygnIUknLCBrZXkxKSAgIyBuZXR3b3JrIGJ5dGVvcmRlciBpbnQKKyAgICAgICAg
Y2hhbGxlbmdlICs9IHN0cnVjdC5wYWNrKCchSScsIGtleTIpICAjIG5ldHdvcmsgYnl0ZW9yZGVy
IGludAorICAgICAgICBjaGFsbGVuZ2UgKz0gc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLnJlYWQo
OCkKKyAgICAgICAgcmV0dXJuIGNoYWxsZW5nZQorCisgICAgZGVmIF9zZW5kX2hhbmRzaGFrZShz
ZWxmKToKKyAgICAgICAgcmVzcG9uc2UgPSBbXQorCisgICAgICAgICMgNS4yIDEwLiBzZW5kIHRo
ZSBmb2xsb3dpbmcgbGluZS4KKyAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCdIVFRQLzEuMSAxMDEg
V2ViU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nKQorCisgICAgICAgICMgNS4yIDExLiBz
ZW5kIHRoZSBmb2xsb3dpbmcgZmllbGRzIHRvIHRoZSBjbGllbnQuCisgICAgICAgIHJlc3BvbnNl
LmFwcGVuZChmb3JtYXRfaGVhZGVyKAorICAgICAgICAgICAgY29tbW9uLlVQR1JBREVfSEVBREVS
LCBjb21tb24uV0VCU09DS0VUX1VQR1JBREVfVFlQRV9ISVhJRTc1KSkKKyAgICAgICAgcmVzcG9u
c2UuYXBwZW5kKGZvcm1hdF9oZWFkZXIoCisgICAgICAgICAgICBjb21tb24uQ09OTkVDVElPTl9I
RUFERVIsIGNvbW1vbi5VUEdSQURFX0NPTk5FQ1RJT05fVFlQRSkpCisgICAgICAgIHJlc3BvbnNl
LmFwcGVuZChmb3JtYXRfaGVhZGVyKAorICAgICAgICAgICAgY29tbW9uLlNFQ19XRUJTT0NLRVRf
TE9DQVRJT05fSEVBREVSLCBzZWxmLl9yZXF1ZXN0LndzX2xvY2F0aW9uKSkKKyAgICAgICAgcmVz
cG9uc2UuYXBwZW5kKGZvcm1hdF9oZWFkZXIoCisgICAgICAgICAgICBjb21tb24uU0VDX1dFQlNP
Q0tFVF9PUklHSU5fSEVBREVSLCBzZWxmLl9yZXF1ZXN0LndzX29yaWdpbikpCisgICAgICAgIGlm
IHNlbGYuX3JlcXVlc3Qud3NfcHJvdG9jb2w6CisgICAgICAgICAgICByZXNwb25zZS5hcHBlbmQo
Zm9ybWF0X2hlYWRlcigKKyAgICAgICAgICAgICAgICBjb21tb24uU0VDX1dFQlNPQ0tFVF9QUk9U
T0NPTF9IRUFERVIsCisgICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCkp
CisgICAgICAgICMgNS4yIDEyLiBzZW5kIHR3byBieXRlcyAweDBEIDB4MEEuCisgICAgICAgIHJl
c3BvbnNlLmFwcGVuZCgnXHJcbicpCisgICAgICAgICMgNS4yIDEzLiBzZW5kIC9yZXNwb25zZS8K
KyAgICAgICAgcmVzcG9uc2UuYXBwZW5kKHNlbGYuX3JlcXVlc3Qud3NfY2hhbGxlbmdlX21kNSkK
KworICAgICAgICByYXdfcmVzcG9uc2UgPSAnJy5qb2luKHJlc3BvbnNlKQorICAgICAgICBzZWxm
Ll9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUocmF3X3Jlc3BvbnNlKQorICAgICAgICBzZWxmLl9s
b2dnZXIuZGVidWcoJ1NlbnQgc2VydmVyXCdzIG9wZW5pbmcgaGFuZHNoYWtlOiAlcicsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICByYXdfcmVzcG9uc2UpCisKKworIyB2aTpzdHM9NCBzdz00
IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2Vy
dmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9oZWFkZXJwYXJzZXJoYW5k
bGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xz
L3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvaGVhZGVycGFyc2VyaGFuZGxlci5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jMjQ0NDIxY2Y3OWJjZGQ3MzdkY2I1N2Y5ZjQzMzZiZTBlODRjYTU0Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZl
L3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvaGVhZGVycGFyc2VyaGFuZGxl
ci5weQpAQCAtMCwwICsxLDI1NCBAQAorIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KKyMg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiUHl0aG9uSGVh
ZGVyUGFyc2VySGFuZGxlciBmb3IgbW9kX3B5d2Vic29ja2V0LgorCitBcGFjaGUgSFRUUCBTZXJ2
ZXIgYW5kIG1vZF9weXRob24gbXVzdCBiZSBjb25maWd1cmVkIHN1Y2ggdGhhdCB0aGlzCitmdW5j
dGlvbiBpcyBjYWxsZWQgdG8gaGFuZGxlIFdlYlNvY2tldCByZXF1ZXN0LgorIiIiCisKKworaW1w
b3J0IGxvZ2dpbmcKKworZnJvbSBtb2RfcHl0aG9uIGltcG9ydCBhcGFjaGUKKworZnJvbSBtb2Rf
cHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGRp
c3BhdGNoCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgaGFuZHNoYWtlCitmcm9tIG1vZF9w
eXdlYnNvY2tldCBpbXBvcnQgdXRpbAorCisKKyMgUHl0aG9uT3B0aW9uIHRvIHNwZWNpZnkgdGhl
IGhhbmRsZXIgcm9vdCBkaXJlY3RvcnkuCitfUFlPUFRfSEFORExFUl9ST09UID0gJ21vZF9weXdl
YnNvY2tldC5oYW5kbGVyX3Jvb3QnCisKKyMgUHl0aG9uT3B0aW9uIHRvIHNwZWNpZnkgdGhlIGhh
bmRsZXIgc2NhbiBkaXJlY3RvcnkuCisjIFRoaXMgbXVzdCBiZSBhIGRpcmVjdG9yeSB1bmRlciB0
aGUgcm9vdCBkaXJlY3RvcnkuCisjIFRoZSBkZWZhdWx0IGlzIHRoZSByb290IGRpcmVjdG9yeS4K
K19QWU9QVF9IQU5ETEVSX1NDQU4gPSAnbW9kX3B5d2Vic29ja2V0LmhhbmRsZXJfc2NhbicKKwor
IyBQeXRob25PcHRpb24gdG8gYWxsb3cgaGFuZGxlcnMgd2hvc2UgY2Fub25pY2FsIHBhdGggaXMK
KyMgbm90IHVuZGVyIHRoZSByb290IGRpcmVjdG9yeS4gSXQncyBkaXNhbGxvd2VkIGJ5IGRlZmF1
bHQuCisjIFNldCB0aGlzIG9wdGlvbiB3aXRoIHZhbHVlIG9mICd5ZXMnIHRvIGFsbG93LgorX1BZ
T1BUX0FMTE9XX0hBTkRMRVJTX09VVFNJREVfUk9PVCA9ICgKKyAgICAnbW9kX3B5d2Vic29ja2V0
LmFsbG93X2hhbmRsZXJzX291dHNpZGVfcm9vdF9kaXInKQorIyBNYXAgZnJvbSB2YWx1ZXMgdG8g
dGhlaXIgbWVhbmluZ3MuICdZZXMnIGFuZCAnTm8nIGFyZSBhbGxvd2VkIGp1c3QgZm9yCisjIGNv
bXBhdGliaWxpdHkuCitfUFlPUFRfQUxMT1dfSEFORExFUlNfT1VUU0lERV9ST09UX0RFRklOSVRJ
T04gPSB7CisgICAgJ29mZic6IEZhbHNlLCAnbm8nOiBGYWxzZSwgJ29uJzogVHJ1ZSwgJ3llcyc6
IFRydWV9CisKKyMgKE9ic29sZXRlIG9wdGlvbi4gSWdub3JlZC4pCisjIFB5dGhvbk9wdGlvbiB0
byBzcGVjaWZ5IHRvIGFsbG93IGhhbmRzaGFrZSBkZWZpbmVkIGluIEhpeGllIDc1IHZlcnNpb24K
KyMgcHJvdG9jb2wuIFRoZSBkZWZhdWx0IGlzIE5vbmUgKE9mZikKK19QWU9QVF9BTExPV19EUkFG
VDc1ID0gJ21vZF9weXdlYnNvY2tldC5hbGxvd19kcmFmdDc1JworIyBNYXAgZnJvbSB2YWx1ZXMg
dG8gdGhlaXIgbWVhbmluZ3MuCitfUFlPUFRfQUxMT1dfRFJBRlQ3NV9ERUZJTklUSU9OID0geydv
ZmYnOiBGYWxzZSwgJ29uJzogVHJ1ZX0KKworCitjbGFzcyBBcGFjaGVMb2dIYW5kbGVyKGxvZ2dp
bmcuSGFuZGxlcik6CisgICAgIiIiV3JhcHBlciBsb2dnaW5nLkhhbmRsZXIgdG8gZW1pdCBsb2cg
bWVzc2FnZSB0byBhcGFjaGUncyBlcnJvci5sb2cuIiIiCisKKyAgICBfTEVWRUxTID0geworICAg
ICAgICBsb2dnaW5nLkRFQlVHOiBhcGFjaGUuQVBMT0dfREVCVUcsCisgICAgICAgIGxvZ2dpbmcu
SU5GTzogYXBhY2hlLkFQTE9HX0lORk8sCisgICAgICAgIGxvZ2dpbmcuV0FSTklORzogYXBhY2hl
LkFQTE9HX1dBUk5JTkcsCisgICAgICAgIGxvZ2dpbmcuRVJST1I6IGFwYWNoZS5BUExPR19FUlIs
CisgICAgICAgIGxvZ2dpbmcuQ1JJVElDQUw6IGFwYWNoZS5BUExPR19DUklULAorICAgICAgICB9
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdD1Ob25lKToKKyAgICAgICAgbG9nZ2lu
Zy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2xvZ19lcnJvciA9IGFwYWNo
ZS5sb2dfZXJyb3IKKyAgICAgICAgaWYgcmVxdWVzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IHNlbGYuX2xvZ19lcnJvciA9IHJlcXVlc3QubG9nX2Vycm9yCisKKyAgICAgICAgIyBUaW1lIGFu
ZCBsZXZlbCB3aWxsIGJlIHByaW50ZWQgYnkgQXBhY2hlLgorICAgICAgICBzZWxmLl9mb3JtYXR0
ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShuYW1lKXM6ICUobWVzc2FnZSlzJykKKworICAgIGRl
ZiBlbWl0KHNlbGYsIHJlY29yZCk6CisgICAgICAgIGFwYWNoZV9sZXZlbCA9IGFwYWNoZS5BUExP
R19ERUJVRworICAgICAgICBpZiByZWNvcmQubGV2ZWxubyBpbiBBcGFjaGVMb2dIYW5kbGVyLl9M
RVZFTFM6CisgICAgICAgICAgICBhcGFjaGVfbGV2ZWwgPSBBcGFjaGVMb2dIYW5kbGVyLl9MRVZF
TFNbcmVjb3JkLmxldmVsbm9dCisKKyAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0dGVyLmZvcm1h
dChyZWNvcmQpCisKKyAgICAgICAgIyAic2VydmVyIiBwYXJhbWV0ZXIgbXVzdCBiZSBwYXNzZWQg
dG8gaGF2ZSAibGV2ZWwiIHBhcmFtZXRlciB3b3JrLgorICAgICAgICAjIElmIG9ubHkgImxldmVs
IiBwYXJhbWV0ZXIgaXMgcGFzc2VkLCBub3RoaW5nIHNob3dzIHVwIG9uIEFwYWNoZSdzCisgICAg
ICAgICMgbG9nLiBIb3dldmVyLCBhdCB0aGlzIHBvaW50LCB3ZSBjYW5ub3QgZ2V0IHRoZSBzZXJ2
ZXIgb2JqZWN0IG9mIHRoZQorICAgICAgICAjIHZpcnR1YWwgaG9zdCB3aGljaCB3aWxsIHByb2Nl
c3MgV2ViU29ja2V0IHJlcXVlc3RzLiBUaGUgb25seSBzZXJ2ZXIKKyAgICAgICAgIyBvYmplY3Qg
d2UgY2FuIGdldCBoZXJlIGlzIGFwYWNoZS5tYWluX3NlcnZlci4gQnV0IFdoZXJldmVyIChzZXJ2
ZXIKKyAgICAgICAgIyBjb25maWd1cmF0aW9uIGNvbnRleHQgb3IgdmlydHVhbCBob3N0IGNvbnRl
eHQpIHdlIHB1dAorICAgICAgICAjIFB5dGhvbkhlYWRlclBhcnNlckhhbmRsZXIgZGlyZWN0aXZl
LCBhcGFjaGUubWFpbl9zZXJ2ZXIganVzdCBwb2ludHMKKyAgICAgICAgIyB0aGUgbWFpbiBzZXJ2
ZXIgaW5zdGFuY2UgKG5vdCBhbnkgb2YgdmlydHVhbCBzZXJ2ZXIgaW5zdGFuY2UpLiBUaGVuLAor
ICAgICAgICAjIEFwYWNoZSBmb2xsb3dzIExvZ0xldmVsIGRpcmVjdGl2ZSBpbiB0aGUgc2VydmVy
IGNvbmZpZ3VyYXRpb24gY29udGV4dAorICAgICAgICAjIHRvIGZpbHRlciBsb2dzLiBTbywgd2Ug
bmVlZCB0byBzcGVjaWZ5IExvZ0xldmVsIGluIHRoZSBzZXJ2ZXIKKyAgICAgICAgIyBjb25maWd1
cmF0aW9uIGNvbnRleHQuIEV2ZW4gaWYgd2Ugc3BlY2lmeSAiTG9nTGV2ZWwgZGVidWciIGluIHRo
ZQorICAgICAgICAjIHZpcnR1YWwgaG9zdCBjb250ZXh0IHdoaWNoIGFjdHVhbGx5IGhhbmRsZXMg
V2ViU29ja2V0IGNvbm5lY3Rpb25zLAorICAgICAgICAjIERFQlVHIGxldmVsIGxvZ3MgbmV2ZXIg
c2hvdyB1cCB1bmxlc3MgIkxvZ0xldmVsIGRlYnVnIiBpcyBzcGVjaWZpZWQKKyAgICAgICAgIyBp
biB0aGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gY29udGV4dC4KKyAgICAgICAgIworICAgICAgICAj
IFRPRE8odHlvc2hpbm8pOiBQcm92aWRlIGxvZ2dpbmcgbWV0aG9kcyBvbiByZXF1ZXN0IG9iamVj
dC4gV2hlbgorICAgICAgICAjIHJlcXVlc3QgaXMgbXBfcmVxdWVzdCBvYmplY3QgKHdoZW4gdXNl
ZCB0b2dldGhlciB3aXRoIEFwYWNoZSksIHRoZQorICAgICAgICAjIG1ldGhvZHMgY2FsbCByZXF1
ZXN0LmxvZ19lcnJvciBpbmRpcmVjdGx5LiBXaGVuIHJlcXVlc3QgaXMKKyAgICAgICAgIyBfU3Rh
bmRhbG9uZVJlcXVlc3QsIHRoZSBtZXRob2RzIGNhbGwgUHl0aG9uJ3MgbG9nZ2luZyBmYWNpbGl0
eSB3aGljaAorICAgICAgICAjIHdlIGNyZWF0ZSBpbiBzdGFuZGFsb25lLnB5LgorICAgICAgICBz
ZWxmLl9sb2dfZXJyb3IobXNnLCBhcGFjaGVfbGV2ZWwsIGFwYWNoZS5tYWluX3NlcnZlcikKKwor
CitkZWYgX2NvbmZpZ3VyZV9sb2dnaW5nKCk6CisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dn
ZXIoKQorICAgICMgTG9ncyBhcmUgZmlsdGVyZWQgYnkgQXBhY2hlIGJhc2VkIG9uIExvZ0xldmVs
IGRpcmVjdGl2ZSBpbiBBcGFjaGUKKyAgICAjIGNvbmZpZ3VyYXRpb24gZmlsZS4gV2UgbXVzdCBq
dXN0IHBhc3MgbG9ncyBmb3IgYWxsIGxldmVscyB0bworICAgICMgQXBhY2hlTG9nSGFuZGxlci4K
KyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICBsb2dnZXIuYWRkSGFuZGxl
cihBcGFjaGVMb2dIYW5kbGVyKCkpCisKKworX2NvbmZpZ3VyZV9sb2dnaW5nKCkKKworX0xPR0dF
UiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2RlZiBfcGFyc2Vfb3B0aW9uKG5h
bWUsIHZhbHVlLCBkZWZpbml0aW9uKToKKyAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICBy
ZXR1cm4gRmFsc2UKKworICAgIG1lYW5pbmcgPSBkZWZpbml0aW9uLmdldCh2YWx1ZS5sb3dlcigp
KQorICAgIGlmIG1lYW5pbmcgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdJbnZh
bGlkIHZhbHVlIGZvciBQeXRob25PcHRpb24gJXM6ICVyJyAlCisgICAgICAgICAgICAgICAgICAg
ICAgICAobmFtZSwgdmFsdWUpKQorICAgIHJldHVybiBtZWFuaW5nCisKKworZGVmIF9jcmVhdGVf
ZGlzcGF0Y2hlcigpOgorICAgIF9MT0dHRVIuaW5mbygnSW5pdGlhbGl6aW5nIERpc3BhdGNoZXIn
KQorCisgICAgb3B0aW9ucyA9IGFwYWNoZS5tYWluX3NlcnZlci5nZXRfb3B0aW9ucygpCisKKyAg
ICBoYW5kbGVyX3Jvb3QgPSBvcHRpb25zLmdldChfUFlPUFRfSEFORExFUl9ST09ULCBOb25lKQor
ICAgIGlmIG5vdCBoYW5kbGVyX3Jvb3Q6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignUHl0aG9u
T3B0aW9uICVzIGlzIG5vdCBkZWZpbmVkJyAlIF9QWU9QVF9IQU5ETEVSX1JPT1QsCisgICAgICAg
ICAgICAgICAgICAgICAgICBhcGFjaGUuQVBMT0dfRVJSKQorCisgICAgaGFuZGxlcl9zY2FuID0g
b3B0aW9ucy5nZXQoX1BZT1BUX0hBTkRMRVJfU0NBTiwgaGFuZGxlcl9yb290KQorCisgICAgYWxs
b3dfaGFuZGxlcnNfb3V0c2lkZV9yb290ID0gX3BhcnNlX29wdGlvbigKKyAgICAgICAgX1BZT1BU
X0FMTE9XX0hBTkRMRVJTX09VVFNJREVfUk9PVCwKKyAgICAgICAgb3B0aW9ucy5nZXQoX1BZT1BU
X0FMTE9XX0hBTkRMRVJTX09VVFNJREVfUk9PVCksCisgICAgICAgIF9QWU9QVF9BTExPV19IQU5E
TEVSU19PVVRTSURFX1JPT1RfREVGSU5JVElPTikKKworICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRj
aC5EaXNwYXRjaGVyKAorICAgICAgICBoYW5kbGVyX3Jvb3QsIGhhbmRsZXJfc2NhbiwgYWxsb3df
aGFuZGxlcnNfb3V0c2lkZV9yb290KQorCisgICAgZm9yIHdhcm5pbmcgaW4gZGlzcGF0Y2hlci5z
b3VyY2Vfd2FybmluZ3MoKToKKyAgICAgICAgYXBhY2hlLmxvZ19lcnJvcigKKyAgICAgICAgICAg
ICdtb2RfcHl3ZWJzb2NrZXQ6IFdhcm5pbmcgaW4gc291cmNlIGxvYWRpbmc6ICVzJyAlIHdhcm5p
bmcsCisgICAgICAgICAgICBhcGFjaGUuQVBMT0dfV0FSTklORykKKworICAgIHJldHVybiBkaXNw
YXRjaGVyCisKKworIyBJbml0aWFsaXplCitfZGlzcGF0Y2hlciA9IF9jcmVhdGVfZGlzcGF0Y2hl
cigpCisKKworZGVmIGhlYWRlcnBhcnNlcmhhbmRsZXIocmVxdWVzdCk6CisgICAgIiIiSGFuZGxl
IHJlcXVlc3QuCisKKyAgICBBcmdzOgorICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVl
c3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIG5hbWVkIGhlYWRlcnBhcnNlcmhhbmRsZXIgYmVj
YXVzZSBpdCBpcyB0aGUgZGVmYXVsdAorICAgIG5hbWUgZm9yIGEgUHl0aG9uSGVhZGVyUGFyc2Vy
SGFuZGxlci4KKyAgICAiIiIKKworICAgIGhhbmRzaGFrZV9pc19kb25lID0gRmFsc2UKKyAgICB0
cnk6CisgICAgICAgICMgRmFsbGJhY2sgdG8gZGVmYXVsdCBodHRwIGhhbmRsZXIgZm9yIHJlcXVl
c3QgcGF0aHMgZm9yIHdoaWNoCisgICAgICAgICMgd2UgZG9uJ3QgaGF2ZSByZXF1ZXN0IGhhbmRs
ZXJzLgorICAgICAgICBpZiBub3QgX2Rpc3BhdGNoZXIuZ2V0X2hhbmRsZXJfc3VpdGUocmVxdWVz
dC51cmkpOgorICAgICAgICAgICAgcmVxdWVzdC5sb2dfZXJyb3IoCisgICAgICAgICAgICAgICAg
J21vZF9weXdlYnNvY2tldDogTm8gaGFuZGxlciBmb3IgcmVzb3VyY2U6ICVyJyAlIHJlcXVlc3Qu
dXJpLAorICAgICAgICAgICAgICAgIGFwYWNoZS5BUExPR19JTkZPKQorICAgICAgICAgICAgcmVx
dWVzdC5sb2dfZXJyb3IoCisgICAgICAgICAgICAgICAgJ21vZF9weXdlYnNvY2tldDogRmFsbGJh
Y2sgdG8gQXBhY2hlJywgYXBhY2hlLkFQTE9HX0lORk8pCisgICAgICAgICAgICByZXR1cm4gYXBh
Y2hlLkRFQ0xJTkVECisgICAgZXhjZXB0IGRpc3BhdGNoLkRpc3BhdGNoRXhjZXB0aW9uLCBlOgor
ICAgICAgICByZXF1ZXN0LmxvZ19lcnJvcigKKyAgICAgICAgICAgICdtb2RfcHl3ZWJzb2NrZXQ6
IERpc3BhdGNoIGZhaWxlZCBmb3IgZXJyb3I6ICVzJyAlIGUsCisgICAgICAgICAgICBhcGFjaGUu
QVBMT0dfSU5GTykKKyAgICAgICAgaWYgbm90IGhhbmRzaGFrZV9pc19kb25lOgorICAgICAgICAg
ICAgcmV0dXJuIGUuc3RhdHVzCisKKyAgICB0cnk6CisgICAgICAgIGFsbG93X2RyYWZ0NzUgPSBf
cGFyc2Vfb3B0aW9uKAorICAgICAgICAgICAgX1BZT1BUX0FMTE9XX0RSQUZUNzUsCisgICAgICAg
ICAgICBhcGFjaGUubWFpbl9zZXJ2ZXIuZ2V0X29wdGlvbnMoKS5nZXQoX1BZT1BUX0FMTE9XX0RS
QUZUNzUpLAorICAgICAgICAgICAgX1BZT1BUX0FMTE9XX0RSQUZUNzVfREVGSU5JVElPTikKKwor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBoYW5kc2hha2UuZG9faGFuZHNoYWtlKAorICAgICAg
ICAgICAgICAgIHJlcXVlc3QsIF9kaXNwYXRjaGVyLCBhbGxvd0RyYWZ0NzU9YWxsb3dfZHJhZnQ3
NSkKKyAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5WZXJzaW9uRXhjZXB0aW9uLCBlOgorICAgICAg
ICAgICAgcmVxdWVzdC5sb2dfZXJyb3IoCisgICAgICAgICAgICAgICAgJ21vZF9weXdlYnNvY2tl
dDogSGFuZHNoYWtlIGZhaWxlZCBmb3IgdmVyc2lvbiBlcnJvcjogJXMnICUgZSwKKyAgICAgICAg
ICAgICAgICBhcGFjaGUuQVBMT0dfSU5GTykKKyAgICAgICAgICAgIHJlcXVlc3QuZXJyX2hlYWRl
cnNfb3V0LmFkZChjb21tb24uU0VDX1dFQlNPQ0tFVF9WRVJTSU9OX0hFQURFUiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN1cHBvcnRlZF92ZXJzaW9ucykKKyAg
ICAgICAgICAgIHJldHVybiBhcGFjaGUuSFRUUF9CQURfUkVRVUVTVAorICAgICAgICBleGNlcHQg
aGFuZHNoYWtlLkhhbmRzaGFrZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICMgSGFuZHNoYWtl
IGZvciB3cy93c3MgZmFpbGVkLgorICAgICAgICAgICAgIyBTZW5kIGh0dHAgcmVzcG9uc2Ugd2l0
aCBlcnJvciBzdGF0dXMuCisgICAgICAgICAgICByZXF1ZXN0LmxvZ19lcnJvcigKKyAgICAgICAg
ICAgICAgICAnbW9kX3B5d2Vic29ja2V0OiBIYW5kc2hha2UgZmFpbGVkIGZvciBlcnJvcjogJXMn
ICUgZSwKKyAgICAgICAgICAgICAgICBhcGFjaGUuQVBMT0dfSU5GTykKKyAgICAgICAgICAgIHJl
dHVybiBlLnN0YXR1cworCisgICAgICAgIGhhbmRzaGFrZV9pc19kb25lID0gVHJ1ZQorICAgICAg
ICByZXF1ZXN0Ll9kaXNwYXRjaGVyID0gX2Rpc3BhdGNoZXIKKyAgICAgICAgX2Rpc3BhdGNoZXIu
dHJhbnNmZXJfZGF0YShyZXF1ZXN0KQorICAgIGV4Y2VwdCBoYW5kc2hha2UuQWJvcnRlZEJ5VXNl
ckV4Y2VwdGlvbiwgZToKKyAgICAgICAgcmVxdWVzdC5sb2dfZXJyb3IoJ21vZF9weXdlYnNvY2tl
dDogQWJvcnRlZDogJXMnICUgZSwgYXBhY2hlLkFQTE9HX0lORk8pCisgICAgZXhjZXB0IEV4Y2Vw
dGlvbiwgZToKKyAgICAgICAgIyBEaXNwYXRjaEV4Y2VwdGlvbiBjYW4gYWxzbyBiZSB0aHJvd24g
aWYgc29tZXRoaW5nIGlzIHdyb25nIGluCisgICAgICAgICMgcHl3ZWJzb2NrZXQgY29kZS4gSXQn
cyBjYXVnaHQgaGVyZSwgdGhlbi4KKworICAgICAgICByZXF1ZXN0LmxvZ19lcnJvcignbW9kX3B5
d2Vic29ja2V0OiBFeGNlcHRpb24gb2NjdXJyZWQ6ICVzXG4lcycgJQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZSwgdXRpbC5nZXRfc3RhY2tfdHJhY2UoKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFwYWNoZS5BUExPR19FUlIpCisgICAgICAgICMgVW5rbm93biBleGNlcHRpb25z
IGJlZm9yZSBoYW5kc2hha2UgbWVhbiBBcGFjaGUgbXVzdCBoYW5kbGUgaXRzCisgICAgICAgICMg
cmVxdWVzdCB3aXRoIGFub3RoZXIgaGFuZGxlci4KKyAgICAgICAgaWYgbm90IGhhbmRzaGFrZV9p
c19kb25lOgorICAgICAgICAgICAgcmV0dXJuIGFwYWNoZS5ERUNMSU5FRAorICAgICMgU2V0IGFz
c2JhY2t3YXJkcyB0byBzdXBwcmVzcyByZXNwb25zZSBoZWFkZXIgZ2VuZXJhdGlvbiBieSBBcGFj
aGUuCisgICAgcmVxdWVzdC5hc3NiYWNrd2FyZHMgPSAxCisgICAgcmV0dXJuIGFwYWNoZS5ET05F
ICAjIFJldHVybiBET05FIHN1Y2ggdGhhdCBubyBvdGhlciBoYW5kbGVycyBhcmUgaW52b2tlZC4K
KworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29j
a2V0L2h0dHBfaGVhZGVyX3V0aWwucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9odHRwX2hl
YWRlcl91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3NzQ2NTM5MzI4NWZmMWJkNmJmOGQ5OTQwMWNjNjc0
NDIxMjVlMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9odHRw
X2hlYWRlcl91dGlsLnB5CkBAIC0wLDAgKzEsMjYzIEBACisjIENvcHlyaWdodCAyMDExLCBHb29n
bGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisi
IiJVdGlsaXRpZXMgZm9yIHBhcnNpbmcgYW5kIGZvcm1hdHRpbmcgaGVhZGVycyB0aGF0IGZvbGxv
dyB0aGUgZ3JhbW1hciBkZWZpbmVkCitpbiBIVFRQIFJGQyBodHRwOi8vd3d3LmlldGYub3JnL3Jm
Yy9yZmMyNjE2LnR4dC4KKyIiIgorCisKK2ltcG9ydCB1cmxwYXJzZQorCisKK19TRVBBUkFUT1JT
ID0gJygpPD5ALDs6XFwiL1tdPz17fSBcdCcKKworCitkZWYgX2lzX2NoYXIoYyk6CisgICAgIiIi
UmV0dXJucyB0cnVlIGlmZiBjIGlzIGluIENIQVIgYXMgc3BlY2lmaWVkIGluIEhUVFAgUkZDLiIi
IgorCisgICAgcmV0dXJuIG9yZChjKSA8PSAxMjcKKworCitkZWYgX2lzX2N0bChjKToKKyAgICAi
IiJSZXR1cm5zIHRydWUgaWZmIGMgaXMgaW4gQ1RMIGFzIHNwZWNpZmllZCBpbiBIVFRQIFJGQy4i
IiIKKworICAgIHJldHVybiBvcmQoYykgPD0gMzEgb3Igb3JkKGMpID09IDEyNworCisKK2NsYXNz
IFBhcnNpbmdTdGF0ZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgor
ICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAgIHNlbGYuaGVhZCA9IDAKKworCitkZWYg
cGVlayhzdGF0ZSwgcG9zPTApOgorICAgICIiIlBlZWtzIHRoZSBjaGFyYWN0ZXIgYXQgcG9zIGZy
b20gdGhlIGhlYWQgb2YgZGF0YS4iIiIKKworICAgIGlmIHN0YXRlLmhlYWQgKyBwb3MgPj0gbGVu
KHN0YXRlLmRhdGEpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgcmV0dXJuIHN0YXRlLmRh
dGFbc3RhdGUuaGVhZCArIHBvc10KKworCitkZWYgY29uc3VtZShzdGF0ZSwgYW1vdW50PTEpOgor
ICAgICIiIkNvbnN1bWVzIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgaGVhZCBh
bmQgcmV0dXJucyB0aGUKKyAgICBjb25zdW1lZCBieXRlcy4gSWYgdGhlcmUncyBub3QgZW5vdWdo
IGJ5dGVzIHRvIGNvbnN1bWUsIHJldHVybnMgTm9uZS4KKyAgICAiIiIKKworICAgIGlmIHN0YXRl
LmhlYWQgKyBhbW91bnQgPiBsZW4oc3RhdGUuZGF0YSk6CisgICAgICAgIHJldHVybiBOb25lCisK
KyAgICByZXN1bHQgPSBzdGF0ZS5kYXRhW3N0YXRlLmhlYWQ6c3RhdGUuaGVhZCArIGFtb3VudF0K
KyAgICBzdGF0ZS5oZWFkID0gc3RhdGUuaGVhZCArIGFtb3VudAorICAgIHJldHVybiByZXN1bHQK
KworCitkZWYgY29uc3VtZV9zdHJpbmcoc3RhdGUsIGV4cGVjdGVkKToKKyAgICAiIiJHaXZlbiBh
IHBhcnNpbmcgc3RhdGUgYW5kIGEgZXhwZWN0ZWQgc3RyaW5nLCBjb25zdW1lcyB0aGUgc3RyaW5n
IGZyb20KKyAgICB0aGUgaGVhZC4gUmV0dXJucyBUcnVlIGlmIGNvbnN1bWVkIHN1Y2Nlc3NmdWxs
eS4gT3RoZXJ3aXNlLCByZXR1cm5zCisgICAgRmFsc2UuCisgICAgIiIiCisKKyAgICBwb3MgPSAw
CisKKyAgICBmb3IgYyBpbiBleHBlY3RlZDoKKyAgICAgICAgaWYgYyAhPSBwZWVrKHN0YXRlLCBw
b3MpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHBvcyArPSAxCisKKyAgICBj
b25zdW1lKHN0YXRlLCBwb3MpCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgY29uc3VtZV9sd3Mo
c3RhdGUpOgorICAgICIiIkNvbnN1bWVzIGEgTFdTIGZyb20gdGhlIGhlYWQuIFJldHVybnMgVHJ1
ZSBpZiBhbnkgTFdTIGlzIGNvbnN1bWVkLgorICAgIE90aGVyd2lzZSwgcmV0dXJucyBGYWxzZS4K
KworICAgIExXUyA9IFtDUkxGXSAxKiggU1AgfCBIVCApCisgICAgIiIiCisKKyAgICBvcmlnaW5h
bF9oZWFkID0gc3RhdGUuaGVhZAorCisgICAgY29uc3VtZV9zdHJpbmcoc3RhdGUsICdcclxuJykK
KworICAgIHBvcyA9IDAKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIGMgPSBwZWVrKHN0YXRl
LCBwb3MpCisgICAgICAgIGlmIGMgPT0gJyAnIG9yIGMgPT0gJ1x0JzoKKyAgICAgICAgICAgIHBv
cyArPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwb3MgPT0gMDoKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5oZWFkID0gb3JpZ2luYWxfaGVhZAorICAgICAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb25zdW1lKHN0YXRl
LCBwb3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworCitkZWYgY29uc3VtZV9sd3Nl
cyhzdGF0ZSk6CisgICAgIiIiQ29uc3VtZXMgKkxXUyBmcm9tIHRoZSBoZWFkLiIiIgorCisgICAg
d2hpbGUgY29uc3VtZV9sd3Moc3RhdGUpOgorICAgICAgICBwYXNzCisKKworZGVmIGNvbnN1bWVf
dG9rZW4oc3RhdGUpOgorICAgICIiIkNvbnN1bWVzIGEgdG9rZW4gZnJvbSB0aGUgaGVhZC4gUmV0
dXJucyB0aGUgdG9rZW4gb3IgTm9uZSBpZiBubyB0b2tlbgorICAgIHdhcyBmb3VuZC4KKyAgICAi
IiIKKworICAgIHBvcyA9IDAKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIGMgPSBwZWVrKHN0
YXRlLCBwb3MpCisgICAgICAgIGlmIGMgaXMgTm9uZSBvciBjIGluIF9TRVBBUkFUT1JTIG9yIF9p
c19jdGwoYykgb3Igbm90IF9pc19jaGFyKGMpOgorICAgICAgICAgICAgaWYgcG9zID09IDA6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWUo
c3RhdGUsIHBvcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBvcyArPSAxCisKKworZGVm
IGNvbnN1bWVfdG9rZW5fb3JfcXVvdGVkX3N0cmluZyhzdGF0ZSk6CisgICAgIiIiQ29uc3VtZXMg
YSB0b2tlbiBvciBhIHF1b3RlZC1zdHJpbmcsIGFuZCByZXR1cm5zIHRoZSB0b2tlbiBvciB1bnF1
b3RlZAorICAgIHN0cmluZy4gSWYgbm8gdG9rZW4gb3IgcXVvdGVkLXN0cmluZyB3YXMgZm91bmQs
IHJldHVybnMgTm9uZS4KKyAgICAiIiIKKworICAgIG9yaWdpbmFsX2hlYWQgPSBzdGF0ZS5oZWFk
CisKKyAgICBpZiBub3QgY29uc3VtZV9zdHJpbmcoc3RhdGUsICciJyk6CisgICAgICAgIHJldHVy
biBjb25zdW1lX3Rva2VuKHN0YXRlKQorCisgICAgcmVzdWx0ID0gW10KKworICAgIGV4cGVjdF9x
dW90ZWRfcGFpciA9IEZhbHNlCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBpZiBub3QgZXhw
ZWN0X3F1b3RlZF9wYWlyIGFuZCBjb25zdW1lX2x3cyhzdGF0ZSk6CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCcgJykKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgYyA9IGNvbnN1
bWUoc3RhdGUpCisgICAgICAgIGlmIGMgaXMgTm9uZToKKyAgICAgICAgICAgICMgcXVvdGVkLXN0
cmluZyBpcyBub3QgZW5jbG9zZWQgd2l0aCBkb3VibGUgcXVvdGF0aW9uCisgICAgICAgICAgICBz
dGF0ZS5oZWFkID0gb3JpZ2luYWxfaGVhZAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAg
ICAgZWxpZiBleHBlY3RfcXVvdGVkX3BhaXI6CisgICAgICAgICAgICBleHBlY3RfcXVvdGVkX3Bh
aXIgPSBGYWxzZQorICAgICAgICAgICAgaWYgX2lzX2NoYXIoYyk6CisgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChjKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE5v
biBDSEFSIGNoYXJhY3RlciBmb3VuZCBpbiBxdW90ZWQtcGFpcgorICAgICAgICAgICAgICAgIHN0
YXRlLmhlYWQgPSBvcmlnaW5hbF9oZWFkCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgZWxpZiBjID09ICdcXCc6CisgICAgICAgICAgICBleHBlY3RfcXVvdGVkX3BhaXIgPSBU
cnVlCisgICAgICAgIGVsaWYgYyA9PSAnIic6CisgICAgICAgICAgICByZXR1cm4gJycuam9pbihy
ZXN1bHQpCisgICAgICAgIGVsaWYgX2lzX2N0bChjKToKKyAgICAgICAgICAgICMgSW52YWxpZCBj
aGFyYWN0ZXIgJXIgZm91bmQgaW4gcWR0ZXh0CisgICAgICAgICAgICBzdGF0ZS5oZWFkID0gb3Jp
Z2luYWxfaGVhZAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYykKKworCitkZWYgcXVvdGVfaWZfbmVjZXNzYXJ5KHMpOgor
ICAgICIiIlF1b3RlcyBhcmJpdHJhcnkgc3RyaW5nIGludG8gcXVvdGVkLXN0cmluZy4iIiIKKwor
ICAgIHF1b3RlID0gRmFsc2UKKyAgICBpZiBzID09ICcnOgorICAgICAgICByZXR1cm4gJyIiJwor
CisgICAgcmVzdWx0ID0gW10KKyAgICBmb3IgYyBpbiBzOgorICAgICAgICBpZiBjID09ICciJyBv
ciBjIGluIF9TRVBBUkFUT1JTIG9yIF9pc19jdGwoYykgb3Igbm90IF9pc19jaGFyKGMpOgorICAg
ICAgICAgICAgcXVvdGUgPSBUcnVlCisKKyAgICAgICAgaWYgYyA9PSAnIicgb3IgX2lzX2N0bChj
KToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xcJyArIGMpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKGMpCisKKyAgICBpZiBxdW90ZToKKyAgICAgICAgcmV0
dXJuICciJyArICcnLmpvaW4ocmVzdWx0KSArICciJworICAgIGVsc2U6CisgICAgICAgIHJldHVy
biAnJy5qb2luKHJlc3VsdCkKKworCitkZWYgcGFyc2VfdXJpKHVyaSk6CisgICAgIiIiUGFyc2Ug
YWJzb2x1dGUgVVJJIHRoZW4gcmV0dXJuIGhvc3QsIHBvcnQgYW5kIHJlc291cmNlLiIiIgorCisg
ICAgcGFyc2VkID0gdXJscGFyc2UudXJsc3BsaXQodXJpKQorICAgIGlmIHBhcnNlZC5zY2hlbWUg
IT0gJ3dzcycgYW5kIHBhcnNlZC5zY2hlbWUgIT0gJ3dzJzoKKyAgICAgICAgIyB8dXJpfCBtdXN0
IGJlIGEgcmVsYXRpdmUgVVJJLgorICAgICAgICAjIFRPRE8odG95b3NoaW0pOiBTaG91bGQgdmFs
aWRhdGUgfHVyaXwuCisgICAgICAgIHJldHVybiBOb25lLCBOb25lLCB1cmkKKworICAgIGlmIHBh
cnNlZC5ob3N0bmFtZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZSwgTm9uZSwgTm9uZQor
CisgICAgcG9ydCA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIHBvcnQgPSBwYXJzZWQucG9ydAor
ICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAjIHBvcnQgcHJvcGVydHkgY2F1c2Ug
VmFsdWVFcnJvciBvbiBpbnZhbGlkIG51bGwgcG9ydCBkZXNjcmlwdGlvbiBsaWtlCisgICAgICAg
ICMgJ3dzOi8vaG9zdDovcGF0aCcuCisgICAgICAgIHJldHVybiBOb25lLCBOb25lLCBOb25lCisK
KyAgICBpZiBwb3J0IGlzIE5vbmU6CisgICAgICAgIGlmIHBhcnNlZC5zY2hlbWUgPT0gJ3dzJzoK
KyAgICAgICAgICAgIHBvcnQgPSA4MAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcG9ydCA9
IDQ0MworCisgICAgcGF0aCA9IHBhcnNlZC5wYXRoCisgICAgaWYgbm90IHBhdGg6CisgICAgICAg
IHBhdGggKz0gJy8nCisgICAgaWYgcGFyc2VkLnF1ZXJ5OgorICAgICAgICBwYXRoICs9ICc/JyAr
IHBhcnNlZC5xdWVyeQorICAgIGlmIHBhcnNlZC5mcmFnbWVudDoKKyAgICAgICAgcGF0aCArPSAn
IycgKyBwYXJzZWQuZnJhZ21lbnQKKworICAgIHJldHVybiBwYXJzZWQuaG9zdG5hbWUsIHBvcnQs
IHBhdGgKKworCit0cnk6CisgICAgdXJscGFyc2UudXNlc19uZXRsb2MuaW5kZXgoJ3dzJykKK2V4
Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICMgdXJscGFyc2UgaW4gUHl0aG9uMi41LjEgZG9lc24n
dCBoYXZlICd3cycgYW5kICd3c3MnIGVudHJpZXMuCisgICAgdXJscGFyc2UudXNlc19uZXRsb2Mu
YXBwZW5kKCd3cycpCisgICAgdXJscGFyc2UudXNlc19uZXRsb2MuYXBwZW5kKCd3c3MnKQorCisK
KyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQv
bWVtb3JpemluZ2ZpbGUucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0
c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9tZW1vcml6aW5nZmls
ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40ZDRjZDk1ODU5NWFiZGZjMGM0MGQ0MzA4NDg4NzAwYjdiOTNjNmI3
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvbWVtb3JpemluZ2Zp
bGUucHkKQEAgLTAsMCArMSw5OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHly
aWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
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
IERBTUFHRS4KKworCisiIiJNZW1vcml6aW5nIGZpbGUuCisKK0EgbWVtb3JpemluZyBmaWxlIHdy
YXBzIGEgZmlsZSBhbmQgbWVtb3JpemVzIGxpbmVzIHJlYWQgYnkgcmVhZGxpbmUuCisiIiIKKwor
CitpbXBvcnQgc3lzCisKKworY2xhc3MgTWVtb3JpemluZ0ZpbGUob2JqZWN0KToKKyAgICAiIiJN
ZW1vcml6aW5nRmlsZSB3cmFwcyBhIGZpbGUgYW5kIG1lbW9yaXplcyBsaW5lcyByZWFkIGJ5IHJl
YWRsaW5lLgorCisgICAgTm90ZSB0aGF0IGRhdGEgcmVhZCBieSBvdGhlciBtZXRob2RzIGFyZSBu
b3QgbWVtb3JpemVkLiBUaGlzIGJlaGF2aW9yCisgICAgaXMgZ29vZCBlbm91Z2ggZm9yIG1lbW9y
aXppbmcgbGluZXMgU2ltcGxlSFRUUFNlcnZlciByZWFkcyBiZWZvcmUKKyAgICB0aGUgY29udHJv
bCByZWFjaGVzIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyLgorICAgICIiIgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGZpbGVfLCBtYXhfbWVtb3JpemVkX2xpbmVzPXN5cy5tYXhpbnQpOgorICAg
ICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICAgIGZpbGVfOiB0aGUgZmlsZSBvYmplY3QgdG8gd3JhcC4KKyAgICAgICAgICAgIG1heF9tZW1v
cml6ZWRfbGluZXM6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBtZW1vcml6ZS4KKyAg
ICAgICAgICAgICAgICBPbmx5IHRoZSBmaXJzdCBtYXhfbWVtb3JpemVkX2xpbmVzIGFyZSBtZW1v
cml6ZWQuCisgICAgICAgICAgICAgICAgRGVmYXVsdDogc3lzLm1heGludC4KKyAgICAgICAgIiIi
CisKKyAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGVfCisgICAgICAgIHNlbGYuX21lbW9yaXplZF9s
aW5lcyA9IFtdCisgICAgICAgIHNlbGYuX21heF9tZW1vcml6ZWRfbGluZXMgPSBtYXhfbWVtb3Jp
emVkX2xpbmVzCisgICAgICAgIHNlbGYuX2J1ZmZlcmVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5f
YnVmZmVyZWRfbGluZSA9IE5vbmUKKworICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5h
bWUpOgorICAgICAgICBpZiBuYW1lIGluICgnX2ZpbGUnLCAnX21lbW9yaXplZF9saW5lcycsICdf
bWF4X21lbW9yaXplZF9saW5lcycsCisgICAgICAgICAgICAgICAgICAgICdfYnVmZmVyZWQnLCAn
X2J1ZmZlcmVkX2xpbmUnLCAncmVhZGxpbmUnLAorICAgICAgICAgICAgICAgICAgICAnZ2V0X21l
bW9yaXplZF9saW5lcycpOgorICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0
ZV9fKHNlbGYsIG5hbWUpCisgICAgICAgIHJldHVybiBzZWxmLl9maWxlLl9fZ2V0YXR0cmlidXRl
X18obmFtZSkKKworICAgIGRlZiByZWFkbGluZShzZWxmLCBzaXplPS0xKToKKyAgICAgICAgIiIi
T3ZlcnJpZGUgZmlsZS5yZWFkbGluZSBhbmQgbWVtb3JpemUgdGhlIGxpbmUgcmVhZC4KKworICAg
ICAgICBOb3RlIHRoYXQgZXZlbiBpZiBzaXplIGlzIHNwZWNpZmllZCBhbmQgc21hbGxlciB0aGFu
IGFjdHVhbCBzaXplLAorICAgICAgICB0aGUgd2hvbGUgbGluZSB3aWxsIGJlIHJlYWQgb3V0IGZy
b20gdW5kZXJseWluZyBmaWxlIG9iamVjdCBieQorICAgICAgICBzdWJzZXF1ZW50IHJlYWRsaW5l
IGNhbGxzLgorICAgICAgICAiIiIKKworICAgICAgICBpZiBzZWxmLl9idWZmZXJlZDoKKyAgICAg
ICAgICAgIGxpbmUgPSBzZWxmLl9idWZmZXJlZF9saW5lCisgICAgICAgICAgICBzZWxmLl9idWZm
ZXJlZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5fZmls
ZS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBsaW5lIGFuZCBsZW4oc2VsZi5fbWVtb3JpemVk
X2xpbmVzKSA8IHNlbGYuX21heF9tZW1vcml6ZWRfbGluZXM6CisgICAgICAgICAgICAgICAgc2Vs
Zi5fbWVtb3JpemVkX2xpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICBpZiBzaXplID49IDAgYW5k
IHNpemUgPCBsZW4obGluZSk6CisgICAgICAgICAgICBzZWxmLl9idWZmZXJlZCA9IFRydWUKKyAg
ICAgICAgICAgIHNlbGYuX2J1ZmZlcmVkX2xpbmUgPSBsaW5lW3NpemU6XQorICAgICAgICAgICAg
cmV0dXJuIGxpbmVbOnNpemVdCisgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBkZWYgZ2V0X21l
bW9yaXplZF9saW5lcyhzZWxmKToKKyAgICAgICAgIiIiR2V0IGxpbmVzIG1lbW9yaXplZCBzbyBm
YXIuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9tZW1vcml6ZWRfbGluZXMKKworCisjIHZpOnN0
cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L21zZ3V0aWwu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3
ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9tc2d1dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjMWEw
MTE0YjRiYzQxOGIyMGU2YTE1NTY1OWU5MjU3YWFiNzM2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2Nr
ZXQvc3JjL21vZF9weXdlYnNvY2tldC9tc2d1dGlsLnB5CkBAIC0wLDAgKzEsMjE5IEBACisjIENv
cHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCisiIiJNZXNzYWdlIHJlbGF0ZWQgdXRpbGl0aWVzLgorCitOb3RlOiBy
ZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUvcmVhZCBhcmUgdXNlZCBpbiB0aGlzIG1vZHVsZSwgZXZl
biB0aG91Z2gKK21vZF9weXRob24gZG9jdW1lbnQgc2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHVz
ZWQgb25seSBpbiBjb25uZWN0aW9uCitoYW5kbGVycy4gVW5mb3J0dW5hdGVseSwgd2UgaGF2ZSBu
byBvdGhlciBvcHRpb25zLiBGb3IgZXhhbXBsZSwKK3JlcXVlc3Qud3JpdGUvcmVhZCBhcmUgbm90
IHN1aXRhYmxlIGJlY2F1c2UgdGhleSBkb24ndCBhbGxvdyBkaXJlY3QgcmF3CitieXRlcyB3cml0
aW5nL3JlYWRpbmcuCisiIiIKKworCitpbXBvcnQgUXVldWUKK2ltcG9ydCB0aHJlYWRpbmcKKwor
CisjIEV4cG9ydCBFeGNlcHRpb24gc3ltYm9scyBmcm9tIG1zZ3V0aWwgZm9yIGJhY2t3YXJkIGNv
bXBhdGliaWxpdHkKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1fYmFzZSBpbXBvcnQgQ29u
bmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1f
YmFzZSBpbXBvcnQgSW52YWxpZEZyYW1lRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5f
c3RyZWFtX2Jhc2UgaW1wb3J0IEJhZE9wZXJhdGlvbkV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJz
b2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBVbnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9uCisKKwor
IyBBbiBBUEkgZm9yIGhhbmRsZXIgdG8gc2VuZC9yZWNlaXZlIFdlYlNvY2tldCBtZXNzYWdlcy4K
K2RlZiBjbG9zZV9jb25uZWN0aW9uKHJlcXVlc3QpOgorICAgICIiIkNsb3NlIGNvbm5lY3Rpb24u
CisKKyAgICBBcmdzOgorICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAg
IiIiCisgICAgcmVxdWVzdC53c19zdHJlYW0uY2xvc2VfY29ubmVjdGlvbigpCisKKworZGVmIHNl
bmRfbWVzc2FnZShyZXF1ZXN0LCBwYXlsb2FkX2RhdGEsIGVuZD1UcnVlLCBiaW5hcnk9RmFsc2Up
OgorICAgICIiIlNlbmQgYSBtZXNzYWdlIChvciBwYXJ0IG9mIGEgbWVzc2FnZSkuCisKKyAgICBB
cmdzOgorICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAgIHBheWxv
YWRfZGF0YTogdW5pY29kZSB0ZXh0IG9yIHN0ciBiaW5hcnkgdG8gc2VuZC4KKyAgICAgICAgZW5k
OiBUcnVlIHRvIHRlcm1pbmF0ZSBhIG1lc3NhZ2UuCisgICAgICAgICAgICAgRmFsc2UgdG8gc2Vu
ZCBwYXlsb2FkX2RhdGEgYXMgcGFydCBvZiBhIG1lc3NhZ2UgdGhhdCBpcyB0byBiZQorICAgICAg
ICAgICAgIHRlcm1pbmF0ZWQgYnkgbmV4dCBvciBsYXRlciBzZW5kX21lc3NhZ2UgY2FsbCB3aXRo
IGVuZD1UcnVlLgorICAgICAgICBiaW5hcnk6IHNlbmQgcGF5bG9hZF9kYXRhIGFzIGJpbmFyeSBm
cmFtZShzKS4KKyAgICBSYWlzZXM6CisgICAgICAgIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbjogd2hl
biBzZXJ2ZXIgYWxyZWFkeSB0ZXJtaW5hdGVkLgorICAgICIiIgorICAgIHJlcXVlc3Qud3Nfc3Ry
ZWFtLnNlbmRfbWVzc2FnZShwYXlsb2FkX2RhdGEsIGVuZCwgYmluYXJ5KQorCisKK2RlZiByZWNl
aXZlX21lc3NhZ2UocmVxdWVzdCk6CisgICAgIiIiUmVjZWl2ZSBhIFdlYlNvY2tldCBmcmFtZSBh
bmQgcmV0dXJuIGl0cyBwYXlsb2FkIGFzIGEgdGV4dCBpbgorICAgIHVuaWNvZGUgb3IgYSBiaW5h
cnkgaW4gc3RyLgorCisgICAgQXJnczoKKyAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1
ZXN0LgorICAgIFJhaXNlczoKKyAgICAgICAgSW52YWxpZEZyYW1lRXhjZXB0aW9uOiAgICAgd2hl
biBjbGllbnQgc2VuZCBpbnZhbGlkIGZyYW1lLgorICAgICAgICBVbnN1cHBvcnRlZEZyYW1lRXhj
ZXB0aW9uOiB3aGVuIGNsaWVudCBzZW5kIHVuc3VwcG9ydGVkIGZyYW1lIGUuZy4gc29tZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiByZXNlcnZlZCBiaXQgaXMgc2V0IGJ1
dCBubyBleHRlbnNpb24gY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
Y29nbml6ZSBpdC4KKyAgICAgICAgSW52YWxpZFVURjhFeGNlcHRpb246ICAgICAgd2hlbiBjbGll
bnQgc2VuZCBhIHRleHQgZnJhbWUgY29udGFpbmluZyBhbnkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW52YWxpZCBVVEYtOCBzdHJpbmcuCisgICAgICAgIENvbm5lY3Rpb25U
ZXJtaW5hdGVkRXhjZXB0aW9uOiB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkbHkuCisgICAgICAgIEJhZE9w
ZXJhdGlvbkV4Y2VwdGlvbjogICAgIHdoZW4gY2xpZW50IGFscmVhZHkgdGVybWluYXRlZC4KKyAg
ICAiIiIKKyAgICByZXR1cm4gcmVxdWVzdC53c19zdHJlYW0ucmVjZWl2ZV9tZXNzYWdlKCkKKwor
CitkZWYgc2VuZF9waW5nKHJlcXVlc3QsIGJvZHk9JycpOgorICAgIHJlcXVlc3Qud3Nfc3RyZWFt
LnNlbmRfcGluZyhib2R5KQorCisKK2NsYXNzIE1lc3NhZ2VSZWNlaXZlcih0aHJlYWRpbmcuVGhy
ZWFkKToKKyAgICAiIiJUaGlzIGNsYXNzIHJlY2VpdmVzIG1lc3NhZ2VzIGZyb20gdGhlIGNsaWVu
dC4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgdGhyZWUgd2F5cyB0byByZWNlaXZlIG1lc3Nh
Z2VzOiBibG9ja2luZywKKyAgICBub24tYmxvY2tpbmcsIGFuZCB2aWEgY2FsbGJhY2suIENhbGxi
YWNrIGhhcyB0aGUgaGlnaGVzdCBwcmVjZWRlbmNlLgorCisgICAgTm90ZTogVGhpcyBjbGFzcyBz
aG91bGQgbm90IGJlIHVzZWQgd2l0aCB0aGUgc3RhbmRhbG9uZSBzZXJ2ZXIgZm9yIHdzcworICAg
IGJlY2F1c2UgcHlPcGVuU1NMIHVzZWQgYnkgdGhlIHNlcnZlciByYWlzZXMgYSBmYXRhbCBlcnJv
ciBpZiB0aGUgc29ja2V0CisgICAgaXMgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgor
ICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIG9ubWVzc2FnZT1Ob25l
KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAgICAgICBvbm1l
c3NhZ2U6IGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVk
LgorICAgICAgICAgICAgICAgICAgICAgICBNYXkgYmUgTm9uZS4gSWYgbm90IE5vbmUsIHRoZSBm
dW5jdGlvbiBpcyBjYWxsZWQgb24KKyAgICAgICAgICAgICAgICAgICAgICAgYW5vdGhlciB0aHJl
YWQuIEluIHRoYXQgY2FzZSwgTWVzc2FnZVJlY2VpdmVyLnJlY2VpdmUKKyAgICAgICAgICAgICAg
ICAgICAgICAgYW5kIE1lc3NhZ2VSZWNlaXZlci5yZWNlaXZlX25vd2FpdCBhcmUgdXNlbGVzcwor
ICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIHRoZXkgd2lsbCBuZXZlciByZXR1cm4gYW55
IG1lc3NhZ2VzLgorICAgICAgICAiIiIKKworICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5p
dF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3JlcXVlc3QgPSByZXF1ZXN0CisgICAgICAgIHNlbGYu
X3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLl9vbm1lc3NhZ2UgPSBvbm1lc3Nh
Z2UKKyAgICAgICAgc2VsZi5fc3RvcF9yZXF1ZXN0ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnNl
dERhZW1vbihUcnVlKQorICAgICAgICBzZWxmLnN0YXJ0KCkKKworICAgIGRlZiBydW4oc2VsZik6
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdG9wX3JlcXVlc3Rl
ZDoKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gcmVjZWl2ZV9tZXNzYWdlKHNlbGYuX3JlcXVl
c3QpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fb25tZXNzYWdlOgorICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9vbm1lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9xdWV1ZS5wdXQobWVzc2FnZSkKKyAgICAgICAgZmluYWxs
eToKKyAgICAgICAgICAgIGNsb3NlX2Nvbm5lY3Rpb24oc2VsZi5fcmVxdWVzdCkKKworICAgIGRl
ZiByZWNlaXZlKHNlbGYpOgorICAgICAgICAiIiIgUmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSB0aGUg
Y2hhbm5lbCwgYmxvY2tpbmcuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIG1lc3Nh
Z2UgYXMgYSB1bmljb2RlIHN0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxm
Ll9xdWV1ZS5nZXQoKQorCisgICAgZGVmIHJlY2VpdmVfbm93YWl0KHNlbGYpOgorICAgICAgICAi
IiIgUmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSB0aGUgY2hhbm5lbCwgbm9uLWJsb2NraW5nLgorCisg
ICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBtZXNzYWdlIGFzIGEgdW5pY29kZSBzdHJpbmcg
aWYgYXZhaWxhYmxlLiBOb25lIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl9xdWV1ZS5nZXRfbm93YWl0KCkKKyAgICAgICAg
ZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgbWVzc2FnZSA9IE5vbmUKKyAgICAgICAg
cmV0dXJuIG1lc3NhZ2UKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiJSZXF1ZXN0
IHRvIHN0b3AgdGhpcyBpbnN0YW5jZS4KKworICAgICAgICBUaGUgaW5zdGFuY2Ugd2lsbCBiZSBz
dG9wcGVkIGFmdGVyIHJlY2VpdmluZyB0aGUgbmV4dCBtZXNzYWdlLgorICAgICAgICBUaGlzIG1l
dGhvZCBtYXkgbm90IGJlIHZlcnkgdXNlZnVsLCBidXQgdGhlcmUgaXMgbm8gY2xlYW4gd2F5Cisg
ICAgICAgIGluIFB5dGhvbiB0byBmb3JjZWZ1bGx5IHN0b3AgYSBydW5uaW5nIHRocmVhZC4KKyAg
ICAgICAgIiIiCisgICAgICAgIHNlbGYuX3N0b3BfcmVxdWVzdGVkID0gVHJ1ZQorCisKK2NsYXNz
IE1lc3NhZ2VTZW5kZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgIiIiVGhpcyBjbGFzcyBzZW5k
cyBtZXNzYWdlcyB0byB0aGUgY2xpZW50LgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBib3Ro
IHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgd2F5cyB0byBzZW5kCisgICAgbWVzc2FnZXMu
CisKKyAgICBOb3RlOiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIHRoZSBzdGFu
ZGFsb25lIHNlcnZlciBmb3Igd3NzCisgICAgYmVjYXVzZSBweU9wZW5TU0wgdXNlZCBieSB0aGUg
c2VydmVyIHJhaXNlcyBhIGZhdGFsIGVycm9yIGlmIHRoZSBzb2NrZXQKKyAgICBpcyBhY2Nlc3Nl
ZCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcmVxdWVzdCk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAg
ICAiIiIKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBz
ZWxmLl9yZXF1ZXN0ID0gcmVxdWVzdAorICAgICAgICBzZWxmLl9xdWV1ZSA9IFF1ZXVlLlF1ZXVl
KCkKKyAgICAgICAgc2VsZi5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgc2VsZi5zdGFydCgpCisK
KyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgbWVz
c2FnZSwgY29uZGl0aW9uID0gc2VsZi5fcXVldWUuZ2V0KCkKKyAgICAgICAgICAgIGNvbmRpdGlv
bi5hY3F1aXJlKCkKKyAgICAgICAgICAgIHNlbmRfbWVzc2FnZShzZWxmLl9yZXF1ZXN0LCBtZXNz
YWdlKQorICAgICAgICAgICAgY29uZGl0aW9uLm5vdGlmeSgpCisgICAgICAgICAgICBjb25kaXRp
b24ucmVsZWFzZSgpCisKKyAgICBkZWYgc2VuZChzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgIiIi
U2VuZCBhIG1lc3NhZ2UsIGJsb2NraW5nLiIiIgorCisgICAgICAgIGNvbmRpdGlvbiA9IHRocmVh
ZGluZy5Db25kaXRpb24oKQorICAgICAgICBjb25kaXRpb24uYWNxdWlyZSgpCisgICAgICAgIHNl
bGYuX3F1ZXVlLnB1dCgobWVzc2FnZSwgY29uZGl0aW9uKSkKKyAgICAgICAgY29uZGl0aW9uLndh
aXQoKQorCisgICAgZGVmIHNlbmRfbm93YWl0KHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICAiIiJT
ZW5kIGEgbWVzc2FnZSwgbm9uLWJsb2NraW5nLiIiIgorCisgICAgICAgIHNlbGYuX3F1ZXVlLnB1
dCgobWVzc2FnZSwgdGhyZWFkaW5nLkNvbmRpdGlvbigpKSkKKworCisjIHZpOnN0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2
ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L211eC5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMv
bW9kX3B5d2Vic29ja2V0L211eC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjMzNDY4NWIzMTEyMjVlMzg3M2I5
YjgyOGVkMDMxYTdlOTA3ODAyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJz
b2NrZXQvbXV4LnB5CkBAIC0wLDAgKzEsMTg4OSBAQAorIyBDb3B5cmlnaHQgMjAxMiwgR29vZ2xl
IEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIi
VGhpcyBmaWxlIHByb3ZpZGVzIGNsYXNzZXMgYW5kIGhlbHBlciBmdW5jdGlvbnMgZm9yIG11bHRp
cGxleGluZyBleHRlbnNpb24uCisKK1NwZWNpZmljYXRpb246CitodHRwOi8vdG9vbHMuaWV0Zi5v
cmcvaHRtbC9kcmFmdC1pZXRmLWh5Ymktd2Vic29ja2V0LW11bHRpcGxleGluZy0wNgorIiIiCisK
KworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29weQoraW1wb3J0IGVtYWlsCitpbXBvcnQg
ZW1haWwucGFyc2VyCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG1hdGgKK2ltcG9ydCBzdHJ1Y3QK
K2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0cmFjZWJhY2sKKworZnJvbSBtb2RfcHl3ZWJzb2Nr
ZXQgaW1wb3J0IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGhhbmRzaGFrZQor
ZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IHV0aWwKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9z
dHJlYW1fYmFzZSBpbXBvcnQgQmFkT3BlcmF0aW9uRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNv
Y2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uCitm
cm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IEludmFsaWRGcmFtZUV4Y2Vw
dGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9oeWJpIGltcG9ydCBGcmFtZQorZnJv
bSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9oeWJpIGltcG9ydCBTdHJlYW0KK2Zyb20gbW9kX3B5
d2Vic29ja2V0Ll9zdHJlYW1faHliaSBpbXBvcnQgU3RyZWFtT3B0aW9ucworZnJvbSBtb2RfcHl3
ZWJzb2NrZXQuX3N0cmVhbV9oeWJpIGltcG9ydCBjcmVhdGVfYmluYXJ5X2ZyYW1lCitmcm9tIG1v
ZF9weXdlYnNvY2tldC5fc3RyZWFtX2h5YmkgaW1wb3J0IGNyZWF0ZV9jbG9zaW5nX2hhbmRzaGFr
ZV9ib2R5Citmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2h5YmkgaW1wb3J0IGNyZWF0ZV9o
ZWFkZXIKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1faHliaSBpbXBvcnQgY3JlYXRlX2xl
bmd0aF9oZWFkZXIKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1faHliaSBpbXBvcnQgcGFy
c2VfZnJhbWUKK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZSBpbXBvcnQgaHliaQorCisK
K19DT05UUk9MX0NIQU5ORUxfSUQgPSAwCitfREVGQVVMVF9DSEFOTkVMX0lEID0gMQorCitfTVVY
X09QQ09ERV9BRERfQ0hBTk5FTF9SRVFVRVNUID0gMAorX01VWF9PUENPREVfQUREX0NIQU5ORUxf
UkVTUE9OU0UgPSAxCitfTVVYX09QQ09ERV9GTE9XX0NPTlRST0wgPSAyCitfTVVYX09QQ09ERV9E
Uk9QX0NIQU5ORUwgPSAzCitfTVVYX09QQ09ERV9ORVdfQ0hBTk5FTF9TTE9UID0gNAorCitfTUFY
X0NIQU5ORUxfSUQgPSAyICoqIDI5IC0gMQorCitfSU5JVElBTF9OVU1CRVJfT0ZfQ0hBTk5FTF9T
TE9UUyA9IDY0CitfSU5JVElBTF9RVU9UQV9GT1JfQ0xJRU5UID0gOCAqIDEwMjQKKworX0hBTkRT
SEFLRV9FTkNPRElOR19JREVOVElUWSA9IDAKK19IQU5EU0hBS0VfRU5DT0RJTkdfREVMVEEgPSAx
CisKKyMgV2UgbmVlZCBvbmx5IHRoZXNlIHN0YXR1cyBjb2RlIGZvciBub3cuCitfSFRUUF9CQURf
UkVTUE9OU0VfTUVTU0FHRVMgPSB7CisgICAgY29tbW9uLkhUVFBfU1RBVFVTX0JBRF9SRVFVRVNU
OiAnQmFkIFJlcXVlc3QnLAorfQorCisjIERyb3BDaGFubmVsIHJlYXNvbiBjb2RlCisjIFRPRE8o
YmFzaGkpOiBEZWZpbmUgYWxsIHJlYXNvbiBjb2RlIGRlZmluZWQgaW4gLTA1IGRyYWZ0LgorX0RS
T1BfQ09ERV9OT1JNQUxfQ0xPU1VSRSA9IDEwMDAKKworX0RST1BfQ09ERV9JTlZBTElEX0VOQ0FQ
U1VMQVRJTkdfTUVTU0FHRSA9IDIwMDEKK19EUk9QX0NPREVfQ0hBTk5FTF9JRF9UUlVOQ0FURUQg
PSAyMDAyCitfRFJPUF9DT0RFX0VOQ0FQU1VMQVRFRF9GUkFNRV9JU19UUlVOQ0FURUQgPSAyMDAz
CitfRFJPUF9DT0RFX1VOS05PV05fTVVYX09QQ09ERSA9IDIwMDQKK19EUk9QX0NPREVfSU5WQUxJ
RF9NVVhfQ09OVFJPTF9CTE9DSyA9IDIwMDUKK19EUk9QX0NPREVfQ0hBTk5FTF9BTFJFQURZX0VY
SVNUUyA9IDIwMDYKK19EUk9QX0NPREVfTkVXX0NIQU5ORUxfU0xPVF9WSU9MQVRJT04gPSAyMDA3
CitfRFJPUF9DT0RFX1VOS05PV05fUkVRVUVTVF9FTkNPRElORyA9IDIwMTAKKworX0RST1BfQ09E
RV9TRU5EX1FVT1RBX1ZJT0xBVElPTiA9IDMwMDUKK19EUk9QX0NPREVfU0VORF9RVU9UQV9PVkVS
RkxPVyA9IDMwMDYKK19EUk9QX0NPREVfQUNLTk9XTEVER0VEID0gMzAwOAorX0RST1BfQ09ERV9C
QURfRlJBR01FTlRBVElPTiA9IDMwMDkKKworCitjbGFzcyBNdXhVbmV4cGVjdGVkRXhjZXB0aW9u
KEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIGluIGhhbmRsaW5nIG11bHRpcGxleGluZyBl
eHRlbnNpb24uIiIiCisgICAgcGFzcworCisKKyMgVGVtcG9yYXJ5CitjbGFzcyBNdXhOb3RJbXBs
ZW1lbnRlZEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIlJhaXNlZCB3aGVuIGEgZmxvdyBl
bnRlcnMgdW5pbXBsZW1lbnRlZCBjb2RlIHBhdGguIiIiCisgICAgcGFzcworCisKK2NsYXNzIExv
Z2ljYWxDb25uZWN0aW9uQ2xvc2VkRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgIiIiUmFpc2Vk
IHdoZW4gbG9naWNhbCBjb25uZWN0aW9uIGlzIGdyYWNlZnVsbHkgY2xvc2VkLiIiIgorICAgIHBh
c3MKKworCitjbGFzcyBQaHlzaWNhbENvbm5lY3Rpb25FcnJvcihFeGNlcHRpb24pOgorICAgICIi
IlJhaXNlZCB3aGVuIHRoZXJlIGlzIGEgcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvci4iIiIKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgZHJvcF9jb2RlLCBtZXNzYWdlPScnKToKKyAgICAgICAgc3Vw
ZXIoUGh5c2ljYWxDb25uZWN0aW9uRXJyb3IsIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAg
J2NvZGU9JWQsIG1lc3NhZ2U9JXInICUgKGRyb3BfY29kZSwgbWVzc2FnZSkpCisgICAgICAgIHNl
bGYuZHJvcF9jb2RlID0gZHJvcF9jb2RlCisgICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UK
KworCitjbGFzcyBMb2dpY2FsQ2hhbm5lbEVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiUmFpc2Vk
IHdoZW4gdGhlcmUgaXMgYSBsb2dpY2FsIGNoYW5uZWwgZXJyb3IuIiIiCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGNoYW5uZWxfaWQsIGRyb3BfY29kZSwgbWVzc2FnZT0nJyk6CisgICAgICAgIHN1
cGVyKExvZ2ljYWxDaGFubmVsRXJyb3IsIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgJ2No
YW5uZWxfaWQ9JWQsIGNvZGU9JWQsIG1lc3NhZ2U9JXInICUgKAorICAgICAgICAgICAgICAgIGNo
YW5uZWxfaWQsIGRyb3BfY29kZSwgbWVzc2FnZSkpCisgICAgICAgIHNlbGYuY2hhbm5lbF9pZCA9
IGNoYW5uZWxfaWQKKyAgICAgICAgc2VsZi5kcm9wX2NvZGUgPSBkcm9wX2NvZGUKKyAgICAgICAg
c2VsZi5tZXNzYWdlID0gbWVzc2FnZQorCisKK2RlZiBfZW5jb2RlX2NoYW5uZWxfaWQoY2hhbm5l
bF9pZCk6CisgICAgaWYgY2hhbm5lbF9pZCA8IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
J0NoYW5uZWwgaWQgJWQgbXVzdCBub3QgYmUgbmVnYXRpdmUnICUgY2hhbm5lbF9pZCkKKworICAg
IGlmIGNoYW5uZWxfaWQgPCAyICoqIDc6CisgICAgICAgIHJldHVybiBjaHIoY2hhbm5lbF9pZCkK
KyAgICBpZiBjaGFubmVsX2lkIDwgMiAqKiAxNDoKKyAgICAgICAgcmV0dXJuIHN0cnVjdC5wYWNr
KCchSCcsIDB4ODAwMCArIGNoYW5uZWxfaWQpCisgICAgaWYgY2hhbm5lbF9pZCA8IDIgKiogMjE6
CisgICAgICAgIGZpcnN0ID0gY2hyKDB4YzAgKyAoY2hhbm5lbF9pZCA+PiAxNikpCisgICAgICAg
IHJldHVybiBmaXJzdCArIHN0cnVjdC5wYWNrKCchSCcsIGNoYW5uZWxfaWQgJiAweGZmZmYpCisg
ICAgaWYgY2hhbm5lbF9pZCA8IDIgKiogMjk6CisgICAgICAgIHJldHVybiBzdHJ1Y3QucGFjaygn
IUwnLCAweGUwMDAwMDAwICsgY2hhbm5lbF9pZCkKKworICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0No
YW5uZWwgaWQgJWQgaXMgdG9vIGxhcmdlJyAlIGNoYW5uZWxfaWQpCisKKworZGVmIF9lbmNvZGVf
bnVtYmVyKG51bWJlcik6CisgICAgcmV0dXJuIGNyZWF0ZV9sZW5ndGhfaGVhZGVyKG51bWJlciwg
RmFsc2UpCisKKworZGVmIF9jcmVhdGVfYWRkX2NoYW5uZWxfcmVzcG9uc2UoY2hhbm5lbF9pZCwg
ZW5jb2RlZF9oYW5kc2hha2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNv
ZGluZz0wLCByZWplY3RlZD1GYWxzZSk6CisgICAgaWYgZW5jb2RpbmcgIT0gMCBhbmQgZW5jb2Rp
bmcgIT0gMToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBlbmNvZGluZyAlZCcg
JSBlbmNvZGluZykKKworICAgIGZpcnN0X2J5dGUgPSAoKF9NVVhfT1BDT0RFX0FERF9DSEFOTkVM
X1JFU1BPTlNFIDw8IDUpIHwKKyAgICAgICAgICAgICAgICAgIChyZWplY3RlZCA8PCA0KSB8IGVu
Y29kaW5nKQorICAgIGJsb2NrID0gKGNocihmaXJzdF9ieXRlKSArCisgICAgICAgICAgICAgX2Vu
Y29kZV9jaGFubmVsX2lkKGNoYW5uZWxfaWQpICsKKyAgICAgICAgICAgICBfZW5jb2RlX251bWJl
cihsZW4oZW5jb2RlZF9oYW5kc2hha2UpKSArCisgICAgICAgICAgICAgZW5jb2RlZF9oYW5kc2hh
a2UpCisgICAgcmV0dXJuIGJsb2NrCisKKworZGVmIF9jcmVhdGVfZHJvcF9jaGFubmVsKGNoYW5u
ZWxfaWQsIGNvZGU9Tm9uZSwgbWVzc2FnZT0nJyk6CisgICAgaWYgbGVuKG1lc3NhZ2UpID4gMCBh
bmQgY29kZSBpcyBOb25lOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDb2RlIG11c3QgYmUg
c3BlY2lmaWVkIGlmIG1lc3NhZ2UgaXMgc3BlY2lmaWVkJykKKworICAgIGZpcnN0X2J5dGUgPSBf
TVVYX09QQ09ERV9EUk9QX0NIQU5ORUwgPDwgNQorICAgIGJsb2NrID0gY2hyKGZpcnN0X2J5dGUp
ICsgX2VuY29kZV9jaGFubmVsX2lkKGNoYW5uZWxfaWQpCisgICAgaWYgY29kZSBpcyBOb25lOgor
ICAgICAgICBibG9jayArPSBfZW5jb2RlX251bWJlcigwKSAjIFJlYXNvbiBzaXplCisgICAgZWxz
ZToKKyAgICAgICAgcmVhc29uID0gc3RydWN0LnBhY2soJyFIJywgY29kZSkgKyBtZXNzYWdlCisg
ICAgICAgIHJlYXNvbl9zaXplID0gX2VuY29kZV9udW1iZXIobGVuKHJlYXNvbikpCisgICAgICAg
IGJsb2NrICs9IHJlYXNvbl9zaXplICsgcmVhc29uCisKKyAgICByZXR1cm4gYmxvY2sKKworCitk
ZWYgX2NyZWF0ZV9mbG93X2NvbnRyb2woY2hhbm5lbF9pZCwgcmVwbGVuaXNoZWRfcXVvdGEpOgor
ICAgIGZpcnN0X2J5dGUgPSBfTVVYX09QQ09ERV9GTE9XX0NPTlRST0wgPDwgNQorICAgIGJsb2Nr
ID0gKGNocihmaXJzdF9ieXRlKSArCisgICAgICAgICAgICAgX2VuY29kZV9jaGFubmVsX2lkKGNo
YW5uZWxfaWQpICsKKyAgICAgICAgICAgICBfZW5jb2RlX251bWJlcihyZXBsZW5pc2hlZF9xdW90
YSkpCisgICAgcmV0dXJuIGJsb2NrCisKKworZGVmIF9jcmVhdGVfbmV3X2NoYW5uZWxfc2xvdChz
bG90cywgc2VuZF9xdW90YSk6CisgICAgaWYgc2xvdHMgPCAwIG9yIHNlbmRfcXVvdGEgPCAwOgor
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzbG90cyBhbmQgc2VuZF9xdW90YSBtdXN0IGJlIG5v
bi1uZWdhdGl2ZS4nKQorICAgIGZpcnN0X2J5dGUgPSBfTVVYX09QQ09ERV9ORVdfQ0hBTk5FTF9T
TE9UIDw8IDUKKyAgICBibG9jayA9IChjaHIoZmlyc3RfYnl0ZSkgKworICAgICAgICAgICAgIF9l
bmNvZGVfbnVtYmVyKHNsb3RzKSArCisgICAgICAgICAgICAgX2VuY29kZV9udW1iZXIoc2VuZF9x
dW90YSkpCisgICAgcmV0dXJuIGJsb2NrCisKKworZGVmIF9jcmVhdGVfZmFsbGJhY2tfbmV3X2No
YW5uZWxfc2xvdCgpOgorICAgIGZpcnN0X2J5dGUgPSAoX01VWF9PUENPREVfTkVXX0NIQU5ORUxf
U0xPVCA8PCA1KSB8IDEgIyBTZXQgdGhlIEYgZmxhZworICAgIGJsb2NrID0gKGNocihmaXJzdF9i
eXRlKSArIF9lbmNvZGVfbnVtYmVyKDApICsgX2VuY29kZV9udW1iZXIoMCkpCisgICAgcmV0dXJu
IGJsb2NrCisKKworZGVmIF9wYXJzZV9yZXF1ZXN0X3RleHQocmVxdWVzdF90ZXh0KToKKyAgICBy
ZXF1ZXN0X2xpbmUsIGhlYWRlcl9saW5lcyA9IHJlcXVlc3RfdGV4dC5zcGxpdCgnXHJcbicsIDEp
CisKKyAgICB3b3JkcyA9IHJlcXVlc3RfbGluZS5zcGxpdCgnICcpCisgICAgaWYgbGVuKHdvcmRz
KSAhPSAzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdCYWQgUmVxdWVzdC1MaW5lIHN5bnRh
eCAlcicgJSByZXF1ZXN0X2xpbmUpCisgICAgW2NvbW1hbmQsIHBhdGgsIHZlcnNpb25dID0gd29y
ZHMKKyAgICBpZiB2ZXJzaW9uICE9ICdIVFRQLzEuMSc6CisgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ0JhZCByZXF1ZXN0IHZlcnNpb24gJXInICUgdmVyc2lvbikKKworICAgICMgZW1haWwucGFy
c2VyLlBhcnNlcigpIHBhcnNlcyBSRkMgMjgyMiAoUkZDIDgyMikgc3R5bGUgaGVhZGVycy4KKyAg
ICAjIFJGQyA2NDU1IHJlZmVycyBSRkMgMjYxNiBmb3IgaGFuZHNoYWtlIHBhcnNpbmcsIGFuZCBS
RkMgMjYxNiByZWZlcnMKKyAgICAjIFJGQyA4MjIuCisgICAgaGVhZGVycyA9IGVtYWlsLnBhcnNl
ci5QYXJzZXIoKS5wYXJzZXN0cihoZWFkZXJfbGluZXMpCisgICAgcmV0dXJuIGNvbW1hbmQsIHBh
dGgsIHZlcnNpb24sIGhlYWRlcnMKKworCitjbGFzcyBfQ29udHJvbEJsb2NrKG9iamVjdCk6Cisg
ICAgIiIiQSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBwYXJzaW5nIHJlc3VsdCBvZiBtdWx0aXBsZXhp
bmcgY29udHJvbCBibG9jay4KKyAgICBDb250cm9sIGJsb2NrIHNwZWNpZmljIGF0dHJpYnV0ZXMg
d2lsbCBiZSBhZGRlZCBieSBfTXV4RnJhbWVQYXlsb2FkUGFyc2VyLgorICAgIChlLmcuIGVuY29k
ZWRfaGFuZHNoYWtlIHdpbGwgYmUgYWRkZWQgZm9yIEFkZENoYW5uZWxSZXF1ZXN0IGFuZAorICAg
IEFkZENoYW5uZWxSZXNwb25zZSkKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBv
cGNvZGUpOgorICAgICAgICBzZWxmLm9wY29kZSA9IG9wY29kZQorCisKK2NsYXNzIF9NdXhGcmFt
ZVBheWxvYWRQYXJzZXIob2JqZWN0KToKKyAgICAiIiJBIGNsYXNzIHRoYXQgcGFyc2VzIG11bHRp
cGxleGVkIGZyYW1lIHBheWxvYWQuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF5bG9h
ZCk6CisgICAgICAgIHNlbGYuX2RhdGEgPSBwYXlsb2FkCisgICAgICAgIHNlbGYuX3JlYWRfcG9z
aXRpb24gPSAwCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihz
ZWxmKQorCisgICAgZGVmIHJlYWRfY2hhbm5lbF9pZChzZWxmKToKKyAgICAgICAgIiIiUmVhZHMg
Y2hhbm5lbCBpZC4KKworICAgICAgICBSYWlzZXM6CisgICAgICAgICAgICBWYWx1ZUVycm9yOiB3
aGVuIHRoZSBwYXlsb2FkIGRvZXNuJ3QgY29udGFpbgorICAgICAgICAgICAgICAgIHZhbGlkIGNo
YW5uZWwgaWQuCisgICAgICAgICIiIgorCisgICAgICAgIHJlbWFpbmluZ19sZW5ndGggPSBsZW4o
c2VsZi5fZGF0YSkgLSBzZWxmLl9yZWFkX3Bvc2l0aW9uCisgICAgICAgIHBvcyA9IHNlbGYuX3Jl
YWRfcG9zaXRpb24KKyAgICAgICAgaWYgcmVtYWluaW5nX2xlbmd0aCA9PSAwOgorICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBjaGFubmVsIGlkIGZvcm1hdCcpCisKKyAgICAg
ICAgY2hhbm5lbF9pZCA9IG9yZChzZWxmLl9kYXRhW3Bvc10pCisgICAgICAgIGNoYW5uZWxfaWRf
bGVuZ3RoID0gMQorICAgICAgICBpZiBjaGFubmVsX2lkICYgMHhlMCA9PSAweGUwOgorICAgICAg
ICAgICAgaWYgcmVtYWluaW5nX2xlbmd0aCA8IDQ6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignSW52YWxpZCBjaGFubmVsIGlkIGZvcm1hdCcpCisgICAgICAgICAgICBjaGFubmVs
X2lkID0gc3RydWN0LnVucGFjaygnIUwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fZGF0YVtwb3M6cG9zKzRdKVswXSAmIDB4MWZmZmZmZmYKKyAgICAgICAg
ICAgIGNoYW5uZWxfaWRfbGVuZ3RoID0gNAorICAgICAgICBlbGlmIGNoYW5uZWxfaWQgJiAweGMw
ID09IDB4YzA6CisgICAgICAgICAgICBpZiByZW1haW5pbmdfbGVuZ3RoIDwgMzoKKyAgICAgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGNoYW5uZWwgaWQgZm9ybWF0JykKKyAg
ICAgICAgICAgIGNoYW5uZWxfaWQgPSAoKChjaGFubmVsX2lkICYgMHgxZikgPDwgMTYpICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnVucGFjaygnIUgnLCBzZWxmLl9kYXRhW3Bv
cysxOnBvcyszXSlbMF0pCisgICAgICAgICAgICBjaGFubmVsX2lkX2xlbmd0aCA9IDMKKyAgICAg
ICAgZWxpZiBjaGFubmVsX2lkICYgMHg4MCA9PSAweDgwOgorICAgICAgICAgICAgaWYgcmVtYWlu
aW5nX2xlbmd0aCA8IDI6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxp
ZCBjaGFubmVsIGlkIGZvcm1hdCcpCisgICAgICAgICAgICBjaGFubmVsX2lkID0gc3RydWN0LnVu
cGFjaygnIUgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
ZGF0YVtwb3M6cG9zKzJdKVswXSAmIDB4M2ZmZgorICAgICAgICAgICAgY2hhbm5lbF9pZF9sZW5n
dGggPSAyCisgICAgICAgIHNlbGYuX3JlYWRfcG9zaXRpb24gKz0gY2hhbm5lbF9pZF9sZW5ndGgK
KworICAgICAgICByZXR1cm4gY2hhbm5lbF9pZAorCisgICAgZGVmIHJlYWRfaW5uZXJfZnJhbWUo
c2VsZik6CisgICAgICAgICIiIlJlYWRzIGFuIGlubmVyIGZyYW1lLgorCisgICAgICAgIFJhaXNl
czoKKyAgICAgICAgICAgIFBoeXNpY2FsQ29ubmVjdGlvbkVycm9yOiB3aGVuIHRoZSBpbm5lciBm
cmFtZSBpcyBpbnZhbGlkLgorICAgICAgICAiIiIKKworICAgICAgICBpZiBsZW4oc2VsZi5fZGF0
YSkgPT0gc2VsZi5fcmVhZF9wb3NpdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIFBoeXNpY2FsQ29u
bmVjdGlvbkVycm9yKAorICAgICAgICAgICAgICAgIF9EUk9QX0NPREVfRU5DQVBTVUxBVEVEX0ZS
QU1FX0lTX1RSVU5DQVRFRCkKKworICAgICAgICBiaXRzID0gb3JkKHNlbGYuX2RhdGFbc2VsZi5f
cmVhZF9wb3NpdGlvbl0pCisgICAgICAgIHNlbGYuX3JlYWRfcG9zaXRpb24gKz0gMQorICAgICAg
ICBmaW4gPSAoYml0cyAmIDB4ODApID09IDB4ODAKKyAgICAgICAgcnN2MSA9IChiaXRzICYgMHg0
MCkgPT0gMHg0MAorICAgICAgICByc3YyID0gKGJpdHMgJiAweDIwKSA9PSAweDIwCisgICAgICAg
IHJzdjMgPSAoYml0cyAmIDB4MTApID09IDB4MTAKKyAgICAgICAgb3Bjb2RlID0gYml0cyAmIDB4
ZgorICAgICAgICBwYXlsb2FkID0gc2VsZi5yZW1haW5pbmdfZGF0YSgpCisgICAgICAgICMgQ29u
c3VtZSByZXN0IG9mIHRoZSBtZXNzYWdlIHdoaWNoIGlzIHBheWxvYWQgZGF0YSBvZiB0aGUgb3Jp
Z2luYWwKKyAgICAgICAgIyBmcmFtZS4KKyAgICAgICAgc2VsZi5fcmVhZF9wb3NpdGlvbiA9IGxl
bihzZWxmLl9kYXRhKQorICAgICAgICByZXR1cm4gZmluLCByc3YxLCByc3YyLCByc3YzLCBvcGNv
ZGUsIHBheWxvYWQKKworICAgIGRlZiBfcmVhZF9udW1iZXIoc2VsZik6CisgICAgICAgIGlmIHNl
bGYuX3JlYWRfcG9zaXRpb24gKyAxID4gbGVuKHNlbGYuX2RhdGEpOgorICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAnQ2Fubm90IHJlYWQgdGhlIGZpcnN0IGJ5
dGUgb2YgbnVtYmVyIGZpZWxkJykKKworICAgICAgICBudW1iZXIgPSBvcmQoc2VsZi5fZGF0YVtz
ZWxmLl9yZWFkX3Bvc2l0aW9uXSkKKyAgICAgICAgaWYgbnVtYmVyICYgMHg4MCA9PSAweDgwOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAnVGhlIG1vc3Qg
c2lnbmlmaWNhbnQgYml0IG9mIHRoZSBmaXJzdCBieXRlIG9mIG51bWJlciBzaG91bGQgJworICAg
ICAgICAgICAgICAgICdiZSB1bnNldCcpCisgICAgICAgIHNlbGYuX3JlYWRfcG9zaXRpb24gKz0g
MQorICAgICAgICBwb3MgPSBzZWxmLl9yZWFkX3Bvc2l0aW9uCisgICAgICAgIGlmIG51bWJlciA9
PSAxMjc6CisgICAgICAgICAgICBpZiBwb3MgKyA4ID4gbGVuKHNlbGYuX2RhdGEpOgorICAgICAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgbnVtYmVyIGZpZWxkJykKKyAgICAg
ICAgICAgIHNlbGYuX3JlYWRfcG9zaXRpb24gKz0gOAorICAgICAgICAgICAgbnVtYmVyID0gc3Ry
dWN0LnVucGFjaygnIVEnLCBzZWxmLl9kYXRhW3Bvczpwb3MrOF0pWzBdCisgICAgICAgICAgICBp
ZiBudW1iZXIgPiAweDdGRkZGRkZGRkZGRkZGRkY6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignRW5jb2RlZCBudW1iZXIoJWQpID49IDJeNjMnICUgbnVtYmVyKQorICAgICAgICAg
ICAgaWYgbnVtYmVyIDw9IDB4RkZGRjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9y
KAorICAgICAgICAgICAgICAgICAgICAnJWQgc2hvdWxkIG5vdCBiZSBlbmNvZGVkIGJ5IDkgYnl0
ZXMgZW5jb2RpbmcnICUgbnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bWJlcgorICAgICAg
ICBpZiBudW1iZXIgPT0gMTI2OgorICAgICAgICAgICAgaWYgcG9zICsgMiA+IGxlbihzZWxmLl9k
YXRhKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIG51bWJlciBm
aWVsZCcpCisgICAgICAgICAgICBzZWxmLl9yZWFkX3Bvc2l0aW9uICs9IDIKKyAgICAgICAgICAg
IG51bWJlciA9IHN0cnVjdC51bnBhY2soJyFIJywgc2VsZi5fZGF0YVtwb3M6cG9zKzJdKVswXQor
ICAgICAgICAgICAgaWYgbnVtYmVyIDw9IDEyNToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnJWQgc2hvdWxkIG5vdCBiZSBlbmNvZGVkIGJ5
IDMgYnl0ZXMgZW5jb2RpbmcnICUgbnVtYmVyKQorICAgICAgICByZXR1cm4gbnVtYmVyCisKKyAg
ICBkZWYgX3JlYWRfc2l6ZV9hbmRfY29udGVudHMoc2VsZik6CisgICAgICAgICIiIlJlYWRzIGRh
dGEgdGhhdCBjb25zaXN0cyBvZiBmb2xsb3dpbmdzOgorICAgICAgICAgICAgLSB0aGUgc2l6ZSBv
ZiB0aGUgY29udGVudHMgZW5jb2RlZCB0aGUgc2FtZSB3YXkgYXMgcGF5bG9hZCBsZW5ndGgKKyAg
ICAgICAgICAgICAgb2YgdGhlIFdlYlNvY2tldCBQcm90b2NvbCB3aXRoIDEgYml0IHBhZGRpbmcg
YXQgdGhlIGhlYWQuCisgICAgICAgICAgICAtIHRoZSBjb250ZW50cy4KKyAgICAgICAgIiIiCisK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2l6ZSA9IHNlbGYuX3JlYWRfbnVtYmVyKCkKKyAg
ICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICByYWlzZSBQaHlzaWNhbENv
bm5lY3Rpb25FcnJvcihfRFJPUF9DT0RFX0lOVkFMSURfTVVYX0NPTlRST0xfQkxPQ0ssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoZSkpCisgICAgICAgIHBv
cyA9IHNlbGYuX3JlYWRfcG9zaXRpb24KKyAgICAgICAgaWYgcG9zICsgc2l6ZSA+IGxlbihzZWxm
Ll9kYXRhKToKKyAgICAgICAgICAgIHJhaXNlIFBoeXNpY2FsQ29ubmVjdGlvbkVycm9yKAorICAg
ICAgICAgICAgICAgIF9EUk9QX0NPREVfSU5WQUxJRF9NVVhfQ09OVFJPTF9CTE9DSywKKyAgICAg
ICAgICAgICAgICAnQ2Fubm90IHJlYWQgJWQgYnl0ZXMgZGF0YScgJSBzaXplKQorCisgICAgICAg
IHNlbGYuX3JlYWRfcG9zaXRpb24gKz0gc2l6ZQorICAgICAgICByZXR1cm4gc2VsZi5fZGF0YVtw
b3M6cG9zK3NpemVdCisKKyAgICBkZWYgX3JlYWRfYWRkX2NoYW5uZWxfcmVxdWVzdChzZWxmLCBm
aXJzdF9ieXRlLCBjb250cm9sX2Jsb2NrKToKKyAgICAgICAgcmVzZXJ2ZWQgPSAoZmlyc3RfYnl0
ZSA+PiAyKSAmIDB4NworICAgICAgICBpZiByZXNlcnZlZCAhPSAwOgorICAgICAgICAgICAgcmFp
c2UgUGh5c2ljYWxDb25uZWN0aW9uRXJyb3IoCisgICAgICAgICAgICAgICAgX0RST1BfQ09ERV9J
TlZBTElEX01VWF9DT05UUk9MX0JMT0NLLAorICAgICAgICAgICAgICAgICdSZXNlcnZlZCBiaXRz
IG11c3QgYmUgdW5zZXQnKQorCisgICAgICAgICMgSW52YWxpZCBlbmNvZGluZyB3aWxsIGJlIGhh
bmRsZWQgYnkgTXV4SGFuZGxlci4KKyAgICAgICAgZW5jb2RpbmcgPSBmaXJzdF9ieXRlICYgMHgz
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRyb2xfYmxvY2suY2hhbm5lbF9pZCA9IHNl
bGYucmVhZF9jaGFubmVsX2lkKCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAg
ICAgICAgICByYWlzZSBQaHlzaWNhbENvbm5lY3Rpb25FcnJvcihfRFJPUF9DT0RFX0lOVkFMSURf
TVVYX0NPTlRST0xfQkxPQ0spCisgICAgICAgIGNvbnRyb2xfYmxvY2suZW5jb2RpbmcgPSBlbmNv
ZGluZworICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZSA9IHNlbGYuX3JlYWRfc2l6ZV9hbmRfY29u
dGVudHMoKQorICAgICAgICBjb250cm9sX2Jsb2NrLmVuY29kZWRfaGFuZHNoYWtlID0gZW5jb2Rl
ZF9oYW5kc2hha2UKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xfYmxvY2sKKworICAgIGRlZiBfcmVh
ZF9hZGRfY2hhbm5lbF9yZXNwb25zZShzZWxmLCBmaXJzdF9ieXRlLCBjb250cm9sX2Jsb2NrKToK
KyAgICAgICAgcmVzZXJ2ZWQgPSAoZmlyc3RfYnl0ZSA+PiAyKSAmIDB4MworICAgICAgICBpZiBy
ZXNlcnZlZCAhPSAwOgorICAgICAgICAgICAgcmFpc2UgUGh5c2ljYWxDb25uZWN0aW9uRXJyb3Io
CisgICAgICAgICAgICAgICAgX0RST1BfQ09ERV9JTlZBTElEX01VWF9DT05UUk9MX0JMT0NLLAor
ICAgICAgICAgICAgICAgICdSZXNlcnZlZCBiaXRzIG11c3QgYmUgdW5zZXQnKQorCisgICAgICAg
IGNvbnRyb2xfYmxvY2suYWNjZXB0ZWQgPSAoZmlyc3RfYnl0ZSA+PiA0KSAmIDEKKyAgICAgICAg
Y29udHJvbF9ibG9jay5lbmNvZGluZyA9IGZpcnN0X2J5dGUgJiAweDMKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgY29udHJvbF9ibG9jay5jaGFubmVsX2lkID0gc2VsZi5yZWFkX2NoYW5uZWxf
aWQoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgICAgIHJhaXNlIFBo
eXNpY2FsQ29ubmVjdGlvbkVycm9yKF9EUk9QX0NPREVfSU5WQUxJRF9NVVhfQ09OVFJPTF9CTE9D
SykKKyAgICAgICAgY29udHJvbF9ibG9jay5lbmNvZGVkX2hhbmRzaGFrZSA9IHNlbGYuX3JlYWRf
c2l6ZV9hbmRfY29udGVudHMoKQorICAgICAgICByZXR1cm4gY29udHJvbF9ibG9jaworCisgICAg
ZGVmIF9yZWFkX2Zsb3dfY29udHJvbChzZWxmLCBmaXJzdF9ieXRlLCBjb250cm9sX2Jsb2NrKToK
KyAgICAgICAgcmVzZXJ2ZWQgPSBmaXJzdF9ieXRlICYgMHgxZgorICAgICAgICBpZiByZXNlcnZl
ZCAhPSAwOgorICAgICAgICAgICAgcmFpc2UgUGh5c2ljYWxDb25uZWN0aW9uRXJyb3IoCisgICAg
ICAgICAgICAgICAgX0RST1BfQ09ERV9JTlZBTElEX01VWF9DT05UUk9MX0JMT0NLLAorICAgICAg
ICAgICAgICAgICdSZXNlcnZlZCBiaXRzIG11c3QgYmUgdW5zZXQnKQorCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGNvbnRyb2xfYmxvY2suY2hhbm5lbF9pZCA9IHNlbGYucmVhZF9jaGFubmVs
X2lkKCkKKyAgICAgICAgICAgIGNvbnRyb2xfYmxvY2suc2VuZF9xdW90YSA9IHNlbGYuX3JlYWRf
bnVtYmVyKCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICByYWlz
ZSBQaHlzaWNhbENvbm5lY3Rpb25FcnJvcihfRFJPUF9DT0RFX0lOVkFMSURfTVVYX0NPTlRST0xf
QkxPQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoZSkp
CisKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xfYmxvY2sKKworICAgIGRlZiBfcmVhZF9kcm9wX2No
YW5uZWwoc2VsZiwgZmlyc3RfYnl0ZSwgY29udHJvbF9ibG9jayk6CisgICAgICAgIHJlc2VydmVk
ID0gZmlyc3RfYnl0ZSAmIDB4MWYKKyAgICAgICAgaWYgcmVzZXJ2ZWQgIT0gMDoKKyAgICAgICAg
ICAgIHJhaXNlIFBoeXNpY2FsQ29ubmVjdGlvbkVycm9yKAorICAgICAgICAgICAgICAgIF9EUk9Q
X0NPREVfSU5WQUxJRF9NVVhfQ09OVFJPTF9CTE9DSywKKyAgICAgICAgICAgICAgICAnUmVzZXJ2
ZWQgYml0cyBtdXN0IGJlIHVuc2V0JykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250
cm9sX2Jsb2NrLmNoYW5uZWxfaWQgPSBzZWxmLnJlYWRfY2hhbm5lbF9pZCgpCisgICAgICAgIGV4
Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgcmFpc2UgUGh5c2ljYWxDb25uZWN0aW9u
RXJyb3IoX0RST1BfQ09ERV9JTlZBTElEX01VWF9DT05UUk9MX0JMT0NLKQorICAgICAgICByZWFz
b24gPSBzZWxmLl9yZWFkX3NpemVfYW5kX2NvbnRlbnRzKCkKKyAgICAgICAgaWYgbGVuKHJlYXNv
bikgPT0gMDoKKyAgICAgICAgICAgIGNvbnRyb2xfYmxvY2suZHJvcF9jb2RlID0gTm9uZQorICAg
ICAgICAgICAgY29udHJvbF9ibG9jay5kcm9wX21lc3NhZ2UgPSAnJworICAgICAgICBlbGlmIGxl
bihyZWFzb24pID49IDI6CisgICAgICAgICAgICBjb250cm9sX2Jsb2NrLmRyb3BfY29kZSA9IHN0
cnVjdC51bnBhY2soJyFIJywgcmVhc29uWzoyXSlbMF0KKyAgICAgICAgICAgIGNvbnRyb2xfYmxv
Y2suZHJvcF9tZXNzYWdlID0gcmVhc29uWzI6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmFpc2UgUGh5c2ljYWxDb25uZWN0aW9uRXJyb3IoCisgICAgICAgICAgICAgICAgX0RST1BfQ09E
RV9JTlZBTElEX01VWF9DT05UUk9MX0JMT0NLLAorICAgICAgICAgICAgICAgICdSZWNlaXZlZCBE
cm9wQ2hhbm5lbCB0aGF0IGNvbmFpbnMgb25seSAxLWJ5dGUgcmVhc29uJykKKyAgICAgICAgcmV0
dXJuIGNvbnRyb2xfYmxvY2sKKworICAgIGRlZiBfcmVhZF9uZXdfY2hhbm5lbF9zbG90KHNlbGYs
IGZpcnN0X2J5dGUsIGNvbnRyb2xfYmxvY2spOgorICAgICAgICByZXNlcnZlZCA9IGZpcnN0X2J5
dGUgJiAweDFlCisgICAgICAgIGlmIHJlc2VydmVkICE9IDA6CisgICAgICAgICAgICByYWlzZSBQ
aHlzaWNhbENvbm5lY3Rpb25FcnJvcigKKyAgICAgICAgICAgICAgICBfRFJPUF9DT0RFX0lOVkFM
SURfTVVYX0NPTlRST0xfQkxPQ0ssCisgICAgICAgICAgICAgICAgJ1Jlc2VydmVkIGJpdHMgbXVz
dCBiZSB1bnNldCcpCisgICAgICAgIGNvbnRyb2xfYmxvY2suZmFsbGJhY2sgPSBmaXJzdF9ieXRl
ICYgMQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250cm9sX2Jsb2NrLnNsb3RzID0gc2Vs
Zi5fcmVhZF9udW1iZXIoKQorICAgICAgICAgICAgY29udHJvbF9ibG9jay5zZW5kX3F1b3RhID0g
c2VsZi5fcmVhZF9udW1iZXIoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAg
ICAgICAgIHJhaXNlIFBoeXNpY2FsQ29ubmVjdGlvbkVycm9yKF9EUk9QX0NPREVfSU5WQUxJRF9N
VVhfQ09OVFJPTF9CTE9DSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cihlKSkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xfYmxvY2sKKworICAgIGRlZiByZWFk
X2NvbnRyb2xfYmxvY2tzKHNlbGYpOgorICAgICAgICAiIiJSZWFkcyBjb250cm9sIGJsb2NrKHMp
LgorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgUGh5c2ljYWxDb25uZWN0aW9uRXJyb3I6
IHdoZW4gdGhlIHBheWxvYWQgY29udGFpbnMgaW52YWxpZCBjb250cm9sCisgICAgICAgICAgICAg
ICBibG9jayhzKS4KKyAgICAgICAgICAgU3RvcEl0ZXJhdGlvbjogd2hlbiBubyBjb250cm9sIGJs
b2NrcyBsZWZ0LgorICAgICAgICAiIiIKKworICAgICAgICB3aGlsZSBzZWxmLl9yZWFkX3Bvc2l0
aW9uIDwgbGVuKHNlbGYuX2RhdGEpOgorICAgICAgICAgICAgZmlyc3RfYnl0ZSA9IG9yZChzZWxm
Ll9kYXRhW3NlbGYuX3JlYWRfcG9zaXRpb25dKQorICAgICAgICAgICAgc2VsZi5fcmVhZF9wb3Np
dGlvbiArPSAxCisgICAgICAgICAgICBvcGNvZGUgPSAoZmlyc3RfYnl0ZSA+PiA1KSAmIDB4Nwor
ICAgICAgICAgICAgY29udHJvbF9ibG9jayA9IF9Db250cm9sQmxvY2sob3Bjb2RlPW9wY29kZSkK
KyAgICAgICAgICAgIGlmIG9wY29kZSA9PSBfTVVYX09QQ09ERV9BRERfQ0hBTk5FTF9SRVFVRVNU
OgorICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYuX3JlYWRfYWRkX2NoYW5uZWxfcmVxdWVzdChm
aXJzdF9ieXRlLCBjb250cm9sX2Jsb2NrKQorICAgICAgICAgICAgZWxpZiBvcGNvZGUgPT0gX01V
WF9PUENPREVfQUREX0NIQU5ORUxfUkVTUE9OU0U6CisgICAgICAgICAgICAgICAgeWllbGQgc2Vs
Zi5fcmVhZF9hZGRfY2hhbm5lbF9yZXNwb25zZSgKKyAgICAgICAgICAgICAgICAgICAgZmlyc3Rf
Ynl0ZSwgY29udHJvbF9ibG9jaykKKyAgICAgICAgICAgIGVsaWYgb3Bjb2RlID09IF9NVVhfT1BD
T0RFX0ZMT1dfQ09OVFJPTDoKKyAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLl9yZWFkX2Zsb3df
Y29udHJvbChmaXJzdF9ieXRlLCBjb250cm9sX2Jsb2NrKQorICAgICAgICAgICAgZWxpZiBvcGNv
ZGUgPT0gX01VWF9PUENPREVfRFJPUF9DSEFOTkVMOgorICAgICAgICAgICAgICAgIHlpZWxkIHNl
bGYuX3JlYWRfZHJvcF9jaGFubmVsKGZpcnN0X2J5dGUsIGNvbnRyb2xfYmxvY2spCisgICAgICAg
ICAgICBlbGlmIG9wY29kZSA9PSBfTVVYX09QQ09ERV9ORVdfQ0hBTk5FTF9TTE9UOgorICAgICAg
ICAgICAgICAgIHlpZWxkIHNlbGYuX3JlYWRfbmV3X2NoYW5uZWxfc2xvdChmaXJzdF9ieXRlLCBj
b250cm9sX2Jsb2NrKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBQ
aHlzaWNhbENvbm5lY3Rpb25FcnJvcigKKyAgICAgICAgICAgICAgICAgICAgX0RST1BfQ09ERV9V
TktOT1dOX01VWF9PUENPREUsCisgICAgICAgICAgICAgICAgICAgICdJbnZhbGlkIG9wY29kZSAl
ZCcgJSBvcGNvZGUpCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3JlYWRfcG9zaXRpb24gPT0gbGVu
KHNlbGYuX2RhdGEpCisgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworICAgIGRlZiByZW1h
aW5pbmdfZGF0YShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyByZW1haW5pbmcgZGF0YS4iIiIK
KworICAgICAgICByZXR1cm4gc2VsZi5fZGF0YVtzZWxmLl9yZWFkX3Bvc2l0aW9uOl0KKworCitj
bGFzcyBfTG9naWNhbFJlcXVlc3Qob2JqZWN0KToKKyAgICAiIiJNaW1pY3MgbW9kX3B5dGhvbiBy
ZXF1ZXN0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWxfaWQsIGNvbW1hbmQs
IHBhdGgsIHByb3RvY29sLCBoZWFkZXJzLAorICAgICAgICAgICAgICAgICBjb25uZWN0aW9uKToK
KyAgICAgICAgIiIiQ29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgICAgY2hhbm5lbF9pZDogdGhlIGNoYW5uZWwgaWQgb2YgdGhlIGxvZ2ljYWwgY2hhbm5l
bC4KKyAgICAgICAgICAgIGNvbW1hbmQ6IEhUVFAgcmVxdWVzdCBjb21tYW5kLgorICAgICAgICAg
ICAgcGF0aDogSFRUUCByZXF1ZXN0IHBhdGguCisgICAgICAgICAgICBoZWFkZXJzOiBIVFRQIGhl
YWRlcnMuCisgICAgICAgICAgICBjb25uZWN0aW9uOiBfTG9naWNhbENvbm5lY3Rpb24gaW5zdGFu
Y2UuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuY2hhbm5lbF9pZCA9IGNoYW5uZWxfaWQK
KyAgICAgICAgc2VsZi5tZXRob2QgPSBjb21tYW5kCisgICAgICAgIHNlbGYudXJpID0gcGF0aAor
ICAgICAgICBzZWxmLnByb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5oZWFkZXJzX2lu
ID0gaGVhZGVycworICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uCisgICAgICAg
IHNlbGYuc2VydmVyX3Rlcm1pbmF0ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmNsaWVudF90ZXJt
aW5hdGVkID0gRmFsc2UKKworICAgIGRlZiBpc19odHRwcyhzZWxmKToKKyAgICAgICAgIiIiTWlt
aWNzIHJlcXVlc3QuaXNfaHR0cHMoKS4gUmV0dXJucyBGYWxzZSBiZWNhdXNlIHRoaXMgbWV0aG9k
IGlzCisgICAgICAgIHVzZWQgb25seSBieSBvbGQgcHJvdG9jb2xzIChoaXhpZSBhbmQgaHliaTAw
KS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgX0xvZ2lj
YWxDb25uZWN0aW9uKG9iamVjdCk6CisgICAgIiIiTWltaWNzIG1vZF9weXRob24gbXBfY29ubi4i
IiIKKworICAgICMgRm9yIGRldGFpbHMsIHNlZSB0aGUgY29tbWVudCBvZiBzZXRfcmVhZF9zdGF0
ZSgpLgorICAgIFNUQVRFX0FDVElWRSA9IDEKKyAgICBTVEFURV9HUkFDRUZVTExZX0NMT1NFRCA9
IDIKKyAgICBTVEFURV9URVJNSU5BVEVEID0gMworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG11
eF9oYW5kbGVyLCBjaGFubmVsX2lkKToKKyAgICAgICAgIiIiQ29uc3RydWN0cyBhbiBpbnN0YW5j
ZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbXV4X2hhbmRsZXI6IF9NdXhIYW5kbGVy
IGluc3RhbmNlLgorICAgICAgICAgICAgY2hhbm5lbF9pZDogY2hhbm5lbCBpZCBvZiB0aGlzIGNv
bm5lY3Rpb24uCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX211eF9oYW5kbGVyID0gbXV4
X2hhbmRsZXIKKyAgICAgICAgc2VsZi5fY2hhbm5lbF9pZCA9IGNoYW5uZWxfaWQKKyAgICAgICAg
c2VsZi5faW5jb21pbmdfZGF0YSA9ICcnCisKKyAgICAgICAgIyAtIFByb3RlY3RzIF93YWl0aW5n
X3dyaXRlX2NvbXBsZXRpb24KKyAgICAgICAgIyAtIFNpZ25hbHMgdGhlIHRocmVhZCB3YWl0aW5n
IGZvciBjb21wbGV0aW9uIG9mIHdyaXRlIGJ5IG11eCBoYW5kbGVyCisgICAgICAgIHNlbGYuX3dy
aXRlX2NvbmRpdGlvbiA9IHRocmVhZGluZy5Db25kaXRpb24oKQorICAgICAgICBzZWxmLl93YWl0
aW5nX3dyaXRlX2NvbXBsZXRpb24gPSBGYWxzZQorCisgICAgICAgIHNlbGYuX3JlYWRfY29uZGl0
aW9uID0gdGhyZWFkaW5nLkNvbmRpdGlvbigpCisgICAgICAgIHNlbGYuX3JlYWRfc3RhdGUgPSBz
ZWxmLlNUQVRFX0FDVElWRQorCisgICAgZGVmIGdldF9sb2NhbF9hZGRyKHNlbGYpOgorICAgICAg
ICAiIiJHZXR0ZXIgdG8gbWltaWMgbXBfY29ubi5sb2NhbF9hZGRyLiIiIgorCisgICAgICAgIHJl
dHVybiBzZWxmLl9tdXhfaGFuZGxlci5waHlzaWNhbF9jb25uZWN0aW9uLmdldF9sb2NhbF9hZGRy
KCkKKyAgICBsb2NhbF9hZGRyID0gcHJvcGVydHkoZ2V0X2xvY2FsX2FkZHIpCisKKyAgICBkZWYg
Z2V0X3JlbW90ZV9hZGRyKHNlbGYpOgorICAgICAgICAiIiJHZXR0ZXIgdG8gbWltaWMgbXBfY29u
bi5yZW1vdGVfYWRkci4iIiIKKworICAgICAgICByZXR1cm4gc2VsZi5fbXV4X2hhbmRsZXIucGh5
c2ljYWxfY29ubmVjdGlvbi5nZXRfcmVtb3RlX2FkZHIoKQorICAgIHJlbW90ZV9hZGRyID0gcHJv
cGVydHkoZ2V0X3JlbW90ZV9hZGRyKQorCisgICAgZGVmIGdldF9tZW1vcml6ZWRfbGluZXMoc2Vs
Zik6CisgICAgICAgICIiIkdldHMgbWVtb3JpemVkIGxpbmVzLiBOb3Qgc3VwcG9ydGVkLiIiIgor
CisgICAgICAgIHJhaXNlIE11eFVuZXhwZWN0ZWRFeGNlcHRpb24oJ19Mb2dpY2FsQ29ubmVjdGlv
biBkb2VzIG5vdCBzdXBwb3J0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnZ2V0X21lbW9yaXplZF9saW5lcycpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6Cisg
ICAgICAgICIiIldyaXRlcyBkYXRhLiBtdXhfaGFuZGxlciBzZW5kcyBkYXRhIGFzeW5jaHJvbm91
c2x5LiBUaGUgY2FsbGVyIHdpbGwKKyAgICAgICAgYmUgc3VzcGVuZGVkIHVudGlsIHdyaXRlIGRv
bmUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRhdGE6IGRhdGEgdG8gYmUgd3JpdHRl
bi4KKworICAgICAgICBSYWlzZXM6CisgICAgICAgICAgICBNdXhVbmV4cGVjdGVkRXhjZXB0aW9u
OiB3aGVuIGNhbGxlZCBiZWZvcmUgZmluaXNoaW5nIHRoZSBwcmV2aW91cworICAgICAgICAgICAg
ICAgIHdyaXRlLgorICAgICAgICAiIiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxm
Ll93cml0ZV9jb25kaXRpb24uYWNxdWlyZSgpCisgICAgICAgICAgICBpZiBzZWxmLl93YWl0aW5n
X3dyaXRlX2NvbXBsZXRpb246CisgICAgICAgICAgICAgICAgcmFpc2UgTXV4VW5leHBlY3RlZEV4
Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgJ0xvZ2ljYWwgY29ubmVjdGlvbiAlZCBpcyBh
bHJlYWR5IHdhaXRpbmcgdGhlIGNvbXBsZXRpb24gJworICAgICAgICAgICAgICAgICAgICAnb2Yg
d3JpdGUnICUgc2VsZi5fY2hhbm5lbF9pZCkKKworICAgICAgICAgICAgc2VsZi5fd2FpdGluZ193
cml0ZV9jb21wbGV0aW9uID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fbXV4X2hhbmRsZXIuc2Vu
ZF9kYXRhKHNlbGYuX2NoYW5uZWxfaWQsIGRhdGEpCisgICAgICAgICAgICBzZWxmLl93cml0ZV9j
b25kaXRpb24ud2FpdCgpCisgICAgICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBSYWlzZSBhbiBl
eGNlcHRpb24gaWYgd29rZSB1cCBieSBvbl93cml0ZXJfZG9uZS4KKyAgICAgICAgZmluYWxseToK
KyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2NvbmRpdGlvbi5yZWxlYXNlKCkKKworICAgIGRlZiB3
cml0ZV9jb250cm9sX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIldyaXRlcyBkYXRhIHZp
YSB0aGUgY29udHJvbCBjaGFubmVsLiBEb24ndCB3YWl0IGZpbmlzaGluZyB3cml0ZQorICAgICAg
ICBiZWNhdXNlIHRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgYnkgbXV4IGRpc3BhdGNoZXIuCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRhdGE6IGRhdGEgdG8gYmUgd3JpdHRlbi4KKyAg
ICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fbXV4X2hhbmRsZXIuc2VuZF9jb250cm9sX2RhdGEo
ZGF0YSkKKworICAgIGRlZiBvbl93cml0ZV9kYXRhX2RvbmUoc2VsZik6CisgICAgICAgICIiIkNh
bGxlZCB3aGVuIHNlbmRpbmcgZGF0YSBpcyBjb21wbGV0ZWQuIiIiCisKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgc2VsZi5fd3JpdGVfY29uZGl0aW9uLmFjcXVpcmUoKQorICAgICAgICAgICAg
aWYgbm90IHNlbGYuX3dhaXRpbmdfd3JpdGVfY29tcGxldGlvbjoKKyAgICAgICAgICAgICAgICBy
YWlzZSBNdXhVbmV4cGVjdGVkRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAnSW52YWxp
ZCBjYWxsIG9mIG9uX3dyaXRlX2RhdGFfZG9uZSBmb3IgbG9naWNhbCAnCisgICAgICAgICAgICAg
ICAgICAgICdjb25uZWN0aW9uICVkJyAlIHNlbGYuX2NoYW5uZWxfaWQpCisgICAgICAgICAgICBz
ZWxmLl93YWl0aW5nX3dyaXRlX2NvbXBsZXRpb24gPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5f
d3JpdGVfY29uZGl0aW9uLm5vdGlmeSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBz
ZWxmLl93cml0ZV9jb25kaXRpb24ucmVsZWFzZSgpCisKKyAgICBkZWYgb25fd3JpdGVyX2RvbmUo
c2VsZik6CisgICAgICAgICIiIkNhbGxlZCBieSB0aGUgbXV4IGhhbmRsZXIgd2hlbiB0aGUgd3Jp
dGVyIHRocmVhZCBoYXMgZmluaXNoZWQuIiIiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
c2VsZi5fd3JpdGVfY29uZGl0aW9uLmFjcXVpcmUoKQorICAgICAgICAgICAgc2VsZi5fd2FpdGlu
Z193cml0ZV9jb21wbGV0aW9uID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2NvbmRp
dGlvbi5ub3RpZnkoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fd3JpdGVf
Y29uZGl0aW9uLnJlbGVhc2UoKQorCisKKyAgICBkZWYgYXBwZW5kX2ZyYW1lX2RhdGEoc2VsZiwg
ZnJhbWVfZGF0YSk6CisgICAgICAgICIiIkFwcGVuZHMgaW5jb21pbmcgZnJhbWUgZGF0YS4gQ2Fs
bGVkIHdoZW4gbXV4X2hhbmRsZXIgZGlzcGF0Y2hlcworICAgICAgICBmcmFtZSBkYXRhIHRvIHRo
ZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
ICBmcmFtZV9kYXRhOiBpbmNvbWluZyBmcmFtZSBkYXRhLgorICAgICAgICAiIiIKKworICAgICAg
ICBzZWxmLl9yZWFkX2NvbmRpdGlvbi5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5faW5jb21pbmdf
ZGF0YSArPSBmcmFtZV9kYXRhCisgICAgICAgIHNlbGYuX3JlYWRfY29uZGl0aW9uLm5vdGlmeSgp
CisgICAgICAgIHNlbGYuX3JlYWRfY29uZGl0aW9uLnJlbGVhc2UoKQorCisgICAgZGVmIHJlYWQo
c2VsZiwgbGVuZ3RoKToKKyAgICAgICAgIiIiUmVhZHMgZGF0YS4gQmxvY2tzIHVudGlsIGVub3Vn
aCBkYXRhIGhhcyBhcnJpdmVkIHZpYSBwaHlzaWNhbAorICAgICAgICBjb25uZWN0aW9uLgorCisg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgICBsZW5ndGg6IGxlbmd0aCBvZiBkYXRhIHRvIGJlIHJl
YWQuCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIExvZ2ljYWxDb25uZWN0aW9uQ2xvc2Vk
RXhjZXB0aW9uOiB3aGVuIGNsb3NpbmcgaGFuZHNoYWtlIGZvciB0aGlzCisgICAgICAgICAgICAg
ICAgbG9naWNhbCBjaGFubmVsIGhhcyBiZWVuIHJlY2VpdmVkLgorICAgICAgICAgICAgQ29ubmVj
dGlvblRlcm1pbmF0ZWRFeGNlcHRpb246IHdoZW4gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaGFz
CisgICAgICAgICAgICAgICAgY2xvc2VkLCBvciBhbiBlcnJvciBpcyBjYXVzZWQgb24gdGhlIHJl
YWRlciB0aHJlYWQuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX3JlYWRfY29uZGl0aW9u
LmFjcXVpcmUoKQorICAgICAgICB3aGlsZSAoc2VsZi5fcmVhZF9zdGF0ZSA9PSBzZWxmLlNUQVRF
X0FDVElWRSBhbmQKKyAgICAgICAgICAgICAgIGxlbihzZWxmLl9pbmNvbWluZ19kYXRhKSA8IGxl
bmd0aCk6CisgICAgICAgICAgICBzZWxmLl9yZWFkX2NvbmRpdGlvbi53YWl0KCkKKworICAgICAg
ICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLl9yZWFkX3N0YXRlID09IHNlbGYuU1RBVEVfR1JB
Q0VGVUxMWV9DTE9TRUQ6CisgICAgICAgICAgICAgICAgcmFpc2UgTG9naWNhbENvbm5lY3Rpb25D
bG9zZWRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICdMb2dpY2FsIGNoYW5uZWwgJWQg
aGFzIGNsb3NlZC4nICUgc2VsZi5fY2hhbm5lbF9pZCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5f
cmVhZF9zdGF0ZSA9PSBzZWxmLlNUQVRFX1RFUk1JTkFURUQ6CisgICAgICAgICAgICAgICAgcmFp
c2UgQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICdS
ZWNlaXZpbmcgJWQgYnl0ZSBmYWlsZWQuIExvZ2ljYWwgY2hhbm5lbCAoJWQpIGNsb3NlZCcgJQor
ICAgICAgICAgICAgICAgICAgICAobGVuZ3RoLCBzZWxmLl9jaGFubmVsX2lkKSkKKworICAgICAg
ICAgICAgdmFsdWUgPSBzZWxmLl9pbmNvbWluZ19kYXRhWzpsZW5ndGhdCisgICAgICAgICAgICBz
ZWxmLl9pbmNvbWluZ19kYXRhID0gc2VsZi5faW5jb21pbmdfZGF0YVtsZW5ndGg6XQorICAgICAg
ICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fcmVhZF9jb25kaXRpb24ucmVsZWFzZSgpCisK
KyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgc2V0X3JlYWRfc3RhdGUoc2VsZiwgbmV3
X3N0YXRlKToKKyAgICAgICAgIiIiU2V0cyB0aGUgc3RhdGUgb2YgdGhpcyBjb25uZWN0aW9uLiBD
YWxsZWQgd2hlbiBhbiBldmVudCBmb3IgdGhpcworICAgICAgICBjb25uZWN0aW9uIGhhcyBvY2N1
cnJlZC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbmV3X3N0YXRlOiBzdGF0ZSB0byBi
ZSBzZXQuIG5ld19zdGF0ZSBtdXN0IGJlIG9uZSBvZiBmb2xsb3dpbmdzOgorICAgICAgICAgICAg
LSBTVEFURV9HUkFDRUZVTExZX0NMT1NFRDogd2hlbiBjbG9zaW5nIGhhbmRzaGFrZSBmb3IgdGhp
cworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gaGFzIGJlZW4gcmVjZWl2ZWQuCisgICAgICAg
ICAgICAtIFNUQVRFX1RFUk1JTkFURUQ6IHdoZW4gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaGFz
IGNsb3NlZCBvcgorICAgICAgICAgICAgICAgIERyb3BDaGFubmVsIG9mIHRoaXMgY29ubmVjdGlv
biBoYXMgcmVjZWl2ZWQuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX3JlYWRfY29uZGl0
aW9uLmFjcXVpcmUoKQorICAgICAgICBzZWxmLl9yZWFkX3N0YXRlID0gbmV3X3N0YXRlCisgICAg
ICAgIHNlbGYuX3JlYWRfY29uZGl0aW9uLm5vdGlmeSgpCisgICAgICAgIHNlbGYuX3JlYWRfY29u
ZGl0aW9uLnJlbGVhc2UoKQorCisKK2NsYXNzIF9Jbm5lck1lc3NhZ2Uob2JqZWN0KToKKyAgICAi
IiJIb2xkcyB0aGUgcmVzdWx0IG9mIF9Jbm5lck1lc3NhZ2VCdWlsZGVyLmJ1aWxkKCkuCisgICAg
IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3Bjb2RlLCBwYXlsb2FkKToKKyAgICAgICAg
c2VsZi5vcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZAorCisK
K2NsYXNzIF9Jbm5lck1lc3NhZ2VCdWlsZGVyKG9iamVjdCk6CisgICAgIiIiQSBjbGFzcyB0aGF0
IGhvbGRzIHRoZSBjb250ZXh0IG9mIGlubmVyIG1lc3NhZ2UgZnJhZ21lbnRhdGlvbiBhbmQKKyAg
ICBidWlsZHMgYSBtZXNzYWdlIGZyb20gZnJhZ21lbnRlZCBpbm5lciBmcmFtZShzKS4KKyAgICAi
IiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fY29udHJvbF9vcGNv
ZGUgPSBOb25lCisgICAgICAgIHNlbGYuX3BlbmRpbmdfY29udHJvbF9mcmFnbWVudHMgPSBbXQor
ICAgICAgICBzZWxmLl9tZXNzYWdlX29wY29kZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGVuZGlu
Z19tZXNzYWdlX2ZyYWdtZW50cyA9IFtdCisgICAgICAgIHNlbGYuX2ZyYW1lX2hhbmRsZXIgPSBz
ZWxmLl9oYW5kbGVfZmlyc3QKKworICAgIGRlZiBfaGFuZGxlX2ZpcnN0KHNlbGYsIGZyYW1lKToK
KyAgICAgICAgaWYgZnJhbWUub3Bjb2RlID09IGNvbW1vbi5PUENPREVfQ09OVElOVUFUSU9OOgor
ICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZyYW1lRXhjZXB0aW9uKCdTZW5kaW5nIGludmFsaWQg
Y29udGludWF0aW9uIG9wY29kZScpCisKKyAgICAgICAgaWYgY29tbW9uLmlzX2NvbnRyb2xfb3Bj
b2RlKGZyYW1lLm9wY29kZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2Vzc19maXJz
dF9mcmFnbWVudGVkX2NvbnRyb2woZnJhbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fcHJvY2Vzc19maXJzdF9mcmFnbWVudGVkX21lc3NhZ2UoZnJhbWUpCisKKyAg
ICBkZWYgX3Byb2Nlc3NfZmlyc3RfZnJhZ21lbnRlZF9jb250cm9sKHNlbGYsIGZyYW1lKToKKyAg
ICAgICAgc2VsZi5fY29udHJvbF9vcGNvZGUgPSBmcmFtZS5vcGNvZGUKKyAgICAgICAgc2VsZi5f
cGVuZGluZ19jb250cm9sX2ZyYWdtZW50cy5hcHBlbmQoZnJhbWUucGF5bG9hZCkKKyAgICAgICAg
aWYgbm90IGZyYW1lLmZpbjoKKyAgICAgICAgICAgIHNlbGYuX2ZyYW1lX2hhbmRsZXIgPSBzZWxm
Ll9oYW5kbGVfZnJhZ21lbnRlZF9jb250cm9sCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAg
ICAgICByZXR1cm4gc2VsZi5fcmVhc3NlbWJsZV9mcmFnbWVudGVkX2NvbnRyb2woKQorCisgICAg
ZGVmIF9wcm9jZXNzX2ZpcnN0X2ZyYWdtZW50ZWRfbWVzc2FnZShzZWxmLCBmcmFtZSk6CisgICAg
ICAgIHNlbGYuX21lc3NhZ2Vfb3Bjb2RlID0gZnJhbWUub3Bjb2RlCisgICAgICAgIHNlbGYuX3Bl
bmRpbmdfbWVzc2FnZV9mcmFnbWVudHMuYXBwZW5kKGZyYW1lLnBheWxvYWQpCisgICAgICAgIGlm
IG5vdCBmcmFtZS5maW46CisgICAgICAgICAgICBzZWxmLl9mcmFtZV9oYW5kbGVyID0gc2VsZi5f
aGFuZGxlX2ZyYWdtZW50ZWRfbWVzc2FnZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX3JlYXNzZW1ibGVfZnJhZ21lbnRlZF9tZXNzYWdlKCkKKworICAgIGRl
ZiBfaGFuZGxlX2ZyYWdtZW50ZWRfY29udHJvbChzZWxmLCBmcmFtZSk6CisgICAgICAgIGlmIGZy
YW1lLm9wY29kZSAhPSBjb21tb24uT1BDT0RFX0NPTlRJTlVBVElPTjoKKyAgICAgICAgICAgIHJh
aXNlIEludmFsaWRGcmFtZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnU2VuZGluZyBpbnZh
bGlkIG9wY29kZSAlZCB3aGlsZSBzZW5kaW5nIGZyYWdtZW50ZWQgY29udHJvbCAnCisgICAgICAg
ICAgICAgICAgJ21lc3NhZ2UnICUgZnJhbWUub3Bjb2RlKQorICAgICAgICBzZWxmLl9wZW5kaW5n
X2NvbnRyb2xfZnJhZ21lbnRzLmFwcGVuZChmcmFtZS5wYXlsb2FkKQorICAgICAgICBpZiBub3Qg
ZnJhbWUuZmluOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3JlYXNzZW1ibGVfZnJhZ21lbnRlZF9jb250cm9sKCkKKworICAgIGRlZiBfcmVhc3NlbWJsZV9m
cmFnbWVudGVkX2NvbnRyb2woc2VsZik6CisgICAgICAgIG9wY29kZSA9IHNlbGYuX2NvbnRyb2xf
b3Bjb2RlCisgICAgICAgIHBheWxvYWQgPSAnJy5qb2luKHNlbGYuX3BlbmRpbmdfY29udHJvbF9m
cmFnbWVudHMpCisgICAgICAgIHNlbGYuX2NvbnRyb2xfb3Bjb2RlID0gTm9uZQorICAgICAgICBz
ZWxmLl9wZW5kaW5nX2NvbnRyb2xfZnJhZ21lbnRzID0gW10KKyAgICAgICAgaWYgc2VsZi5fbWVz
c2FnZV9vcGNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9mcmFtZV9oYW5kbGVy
ID0gc2VsZi5faGFuZGxlX2ZyYWdtZW50ZWRfbWVzc2FnZQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc2VsZi5fZnJhbWVfaGFuZGxlciA9IHNlbGYuX2hhbmRsZV9maXJzdAorICAgICAgICBy
ZXR1cm4gX0lubmVyTWVzc2FnZShvcGNvZGUsIHBheWxvYWQpCisKKyAgICBkZWYgX2hhbmRsZV9m
cmFnbWVudGVkX21lc3NhZ2Uoc2VsZiwgZnJhbWUpOgorICAgICAgICAjIFNlbmRlciBjYW4gaW50
ZXJsZWF2ZSBhIGNvbnRyb2wgbWVzc2FnZSB3aGlsZSBzZW5kaW5nIGZyYWdtZW50ZWQKKyAgICAg
ICAgIyBtZXNzYWdlcy4KKyAgICAgICAgaWYgY29tbW9uLmlzX2NvbnRyb2xfb3Bjb2RlKGZyYW1l
Lm9wY29kZSk6CisgICAgICAgICAgICBpZiBzZWxmLl9jb250cm9sX29wY29kZSBpcyBub3QgTm9u
ZToKKyAgICAgICAgICAgICAgICByYWlzZSBNdXhVbmV4cGVjdGVkRXhjZXB0aW9uKAorICAgICAg
ICAgICAgICAgICAgICAnU2hvdWxkIG5vdCByZWFjaCBoZXJlKEJ1ZyBpbiBidWlsZGVyKScpCisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2Vzc19maXJzdF9mcmFnbWVudGVkX2NvbnRyb2wo
ZnJhbWUpCisKKyAgICAgICAgaWYgZnJhbWUub3Bjb2RlICE9IGNvbW1vbi5PUENPREVfQ09OVElO
VUFUSU9OOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZyYW1lRXhjZXB0aW9uKAorICAgICAg
ICAgICAgICAgICdTZW5kaW5nIGludmFsaWQgb3Bjb2RlICVkIHdoaWxlIHNlbmRpbmcgZnJhZ21l
bnRlZCBtZXNzYWdlJyAlCisgICAgICAgICAgICAgICAgZnJhbWUub3Bjb2RlKQorICAgICAgICBz
ZWxmLl9wZW5kaW5nX21lc3NhZ2VfZnJhZ21lbnRzLmFwcGVuZChmcmFtZS5wYXlsb2FkKQorICAg
ICAgICBpZiBub3QgZnJhbWUuZmluOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAg
cmV0dXJuIHNlbGYuX3JlYXNzZW1ibGVfZnJhZ21lbnRlZF9tZXNzYWdlKCkKKworICAgIGRlZiBf
cmVhc3NlbWJsZV9mcmFnbWVudGVkX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIG9wY29kZSA9IHNl
bGYuX21lc3NhZ2Vfb3Bjb2RlCisgICAgICAgIHBheWxvYWQgPSAnJy5qb2luKHNlbGYuX3BlbmRp
bmdfbWVzc2FnZV9mcmFnbWVudHMpCisgICAgICAgIHNlbGYuX21lc3NhZ2Vfb3Bjb2RlID0gTm9u
ZQorICAgICAgICBzZWxmLl9wZW5kaW5nX21lc3NhZ2VfZnJhZ21lbnRzID0gW10KKyAgICAgICAg
c2VsZi5fZnJhbWVfaGFuZGxlciA9IHNlbGYuX2hhbmRsZV9maXJzdAorICAgICAgICByZXR1cm4g
X0lubmVyTWVzc2FnZShvcGNvZGUsIHBheWxvYWQpCisKKyAgICBkZWYgYnVpbGQoc2VsZiwgZnJh
bWUpOgorICAgICAgICAiIiJCdWlsZCBhbiBpbm5lciBtZXNzYWdlLiBSZXR1cm5zIGFuIF9Jbm5l
ck1lc3NhZ2UgaW5zdGFuY2Ugd2hlbgorICAgICAgICB0aGUgZ2l2ZW4gZnJhbWUgaXMgdGhlIGxh
c3QgZnJhZ21lbnRlZCBmcmFtZS4gUmV0dXJucyBOb25lIG90aGVyd2lzZS4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgICAgZnJhbWU6IGFuIGlubmVyIGZyYW1lLgorICAgICAgICBSYWlzZXM6
CisgICAgICAgICAgICBJbnZhbGlkRnJhbWVFeGNlcHRpb246IHdoZW4gcmVjZWl2ZWQgaW52YWxp
ZCBvcGNvZGUuIChlLmcuCisgICAgICAgICAgICAgICAgcmVjZWl2aW5nIG5vbiBjb250aW51YXRp
b24gZGF0YSBvcGNvZGUgYnV0IHRoZSBmaW4gZmxhZyBvZgorICAgICAgICAgICAgICAgIHRoZSBw
cmV2aW91cyBpbm5lciBmcmFtZSB3YXMgbm90IHNldC4pCisgICAgICAgICIiIgorCisgICAgICAg
IHJldHVybiBzZWxmLl9mcmFtZV9oYW5kbGVyKGZyYW1lKQorCisKK2NsYXNzIF9Mb2dpY2FsU3Ry
ZWFtKFN0cmVhbSk6CisgICAgIiIiTWltaWNzIHRoZSBTdHJlYW0gY2xhc3MuIFRoaXMgY2xhc3Mg
aW50ZXJwcmV0cyBtdWx0aXBsZXhlZCBXZWJTb2NrZXQKKyAgICBmcmFtZXMuCisgICAgIiIiCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgc3RyZWFtX29wdGlvbnMsIHNlbmRfcXVv
dGEsIHJlY2VpdmVfcXVvdGEpOgorICAgICAgICAiIiJDb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICByZXF1ZXN0OiBfTG9naWNhbFJlcXVlc3QgaW5z
dGFuY2UuCisgICAgICAgICAgICBzdHJlYW1fb3B0aW9uczogU3RyZWFtT3B0aW9ucyBpbnN0YW5j
ZS4KKyAgICAgICAgICAgIHNlbmRfcXVvdGE6IEluaXRpYWwgc2VuZCBxdW90YS4KKyAgICAgICAg
ICAgIHJlY2VpdmVfcXVvdGE6IEluaXRpYWwgcmVjZWl2ZSBxdW90YS4KKyAgICAgICAgIiIiCisK
KyAgICAgICAgIyBQaHlzaWNhbCBzdHJlYW0gaXMgcmVzcG9uc2libGUgZm9yIG1hc2tpbmcuCisg
ICAgICAgIHN0cmVhbV9vcHRpb25zLnVubWFza19yZWNlaXZlID0gRmFsc2UKKyAgICAgICAgU3Ry
ZWFtLl9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIHN0cmVhbV9vcHRpb25zKQorCisgICAgICAgIHNl
bGYuX3NlbmRfY2xvc2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fc2VuZF9xdW90YSA9IHNlbmRf
cXVvdGEKKyAgICAgICAgIyAtIFByb3RlY3RzIF9zZW5kX2Nsb3NlZCBhbmQgX3NlbmRfcXVvdGEK
KyAgICAgICAgIyAtIFNpZ25hbHMgdGhlIHRocmVhZCB3YWl0aW5nIGZvciBzZW5kIHF1b3RhIHJl
cGxlbmlzaGVkCisgICAgICAgIHNlbGYuX3NlbmRfY29uZGl0aW9uID0gdGhyZWFkaW5nLkNvbmRp
dGlvbigpCisKKyAgICAgICAgIyBUaGUgb3Bjb2RlIG9mIHRoZSBmaXJzdCBmcmFtZSBpbiBtZXNz
YWdlcy4KKyAgICAgICAgc2VsZi5fbWVzc2FnZV9vcGNvZGUgPSBjb21tb24uT1BDT0RFX1RFWFQK
KyAgICAgICAgIyBUcnVlIHdoZW4gdGhlIGxhc3QgbWVzc2FnZSB3YXMgZnJhZ21lbnRlZC4KKyAg
ICAgICAgc2VsZi5fbGFzdF9tZXNzYWdlX3dhc19mcmFnbWVudGVkID0gRmFsc2UKKworICAgICAg
ICBzZWxmLl9yZWNlaXZlX3F1b3RhID0gcmVjZWl2ZV9xdW90YQorICAgICAgICBzZWxmLl93cml0
ZV9pbm5lcl9mcmFtZV9zZW1hcGhvcmUgPSB0aHJlYWRpbmcuU2VtYXBob3JlKCkKKworICAgICAg
ICBzZWxmLl9pbm5lcl9tZXNzYWdlX2J1aWxkZXIgPSBfSW5uZXJNZXNzYWdlQnVpbGRlcigpCisK
KyAgICBkZWYgX2NyZWF0ZV9pbm5lcl9mcmFtZShzZWxmLCBvcGNvZGUsIHBheWxvYWQsIGVuZD1U
cnVlKToKKyAgICAgICAgZnJhbWUgPSBGcmFtZShmaW49ZW5kLCBvcGNvZGU9b3Bjb2RlLCBwYXls
b2FkPXBheWxvYWQpCisgICAgICAgIGZvciBmcmFtZV9maWx0ZXIgaW4gc2VsZi5fb3B0aW9ucy5v
dXRnb2luZ19mcmFtZV9maWx0ZXJzOgorICAgICAgICAgICAgZnJhbWVfZmlsdGVyLmZpbHRlcihm
cmFtZSkKKworICAgICAgICBpZiBsZW4ocGF5bG9hZCkgIT0gbGVuKGZyYW1lLnBheWxvYWQpOgor
ICAgICAgICAgICAgcmFpc2UgTXV4VW5leHBlY3RlZEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAg
ICAnTXV4IGV4dGVuc2lvbiBtdXN0IG5vdCBiZSB1c2VkIGFmdGVyIGV4dGVuc2lvbnMgd2hpY2gg
Y2hhbmdlICcKKyAgICAgICAgICAgICAgICAnIGZyYW1lIGJvdW5kYXJ5JykKKworICAgICAgICBm
aXJzdF9ieXRlID0gKChmcmFtZS5maW4gPDwgNykgfCAoZnJhbWUucnN2MSA8PCA2KSB8CisgICAg
ICAgICAgICAgICAgICAgICAgKGZyYW1lLnJzdjIgPDwgNSkgfCAoZnJhbWUucnN2MyA8PCA0KSB8
IGZyYW1lLm9wY29kZSkKKyAgICAgICAgcmV0dXJuIGNocihmaXJzdF9ieXRlKSArIGZyYW1lLnBh
eWxvYWQKKworICAgIGRlZiBfd3JpdGVfaW5uZXJfZnJhbWUoc2VsZiwgb3Bjb2RlLCBwYXlsb2Fk
LCBlbmQ9VHJ1ZSk6CisgICAgICAgIHBheWxvYWRfbGVuZ3RoID0gbGVuKHBheWxvYWQpCisgICAg
ICAgIHdyaXRlX3Bvc2l0aW9uID0gMAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgQW4g
aW5uZXIgZnJhbWUgd2lsbCBiZSBmcmFnbWVudGVkIGlmIHRoZXJlIGlzIG5vIGVub3VnaCBzZW5k
CisgICAgICAgICAgICAjIHF1b3RhLiBUaGlzIHNlbWFwaG9yZSBlbnN1cmVzIHRoYXQgZnJhZ21l
bnRlZCBpbm5lciBmcmFtZXMgYXJlCisgICAgICAgICAgICAjIHNlbnQgaW4gb3JkZXIgb24gdGhl
IGxvZ2ljYWwgY2hhbm5lbC4KKyAgICAgICAgICAgICMgTm90ZSB0aGF0IGZyYW1lcyB0aGF0IGNv
bWUgZnJvbSBvdGhlciBsb2dpY2FsIGNoYW5uZWxzIG9yCisgICAgICAgICAgICAjIG11bHRpcGxl
eGluZyBjb250cm9sIGJsb2NrcyBjYW4gYmUgaW5zZXJ0ZWQgYmV0d2VlbiBmcmFnbWVudGVkCisg
ICAgICAgICAgICAjIGlubmVyIGZyYW1lcyBvbiB0aGUgcGh5c2ljYWwgY2hhbm5lbC4KKyAgICAg
ICAgICAgIHNlbGYuX3dyaXRlX2lubmVyX2ZyYW1lX3NlbWFwaG9yZS5hY3F1aXJlKCkKKworICAg
ICAgICAgICAgIyBDb25zdW1lIGFuIG9jdGV0IHF1b3RhIHdoZW4gdGhpcyBpcyB0aGUgZmlyc3Qg
ZnJhZ21lbnRlZCBmcmFtZS4KKyAgICAgICAgICAgIGlmIG9wY29kZSAhPSBjb21tb24uT1BDT0RF
X0NPTlRJTlVBVElPTjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3NlbmRfY29uZGl0aW9uLmFjcXVpcmUoKQorICAgICAgICAgICAgICAgICAgICB3aGls
ZSAobm90IHNlbGYuX3NlbmRfY2xvc2VkKSBhbmQgc2VsZi5fc2VuZF9xdW90YSA9PSAwOgorICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VuZF9jb25kaXRpb24ud2FpdCgpCisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VuZF9jbG9zZWQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICByYWlzZSBCYWRPcGVyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ0xvZ2ljYWwgY29ubmVjdGlvbiAlZCBpcyBjbG9zZWQnICUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LmNoYW5uZWxfaWQpCisKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fc2VuZF9xdW90YSAtPSAxCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fc2VuZF9jb25kaXRpb24ucmVsZWFzZSgpCisKKyAgICAg
ICAgICAgIHdoaWxlIHdyaXRlX3Bvc2l0aW9uIDwgcGF5bG9hZF9sZW5ndGg6CisgICAgICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZW5kX2NvbmRpdGlvbi5hY3F1
aXJlKCkKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5vdCBzZWxmLl9zZW5kX2Nsb3NlZCkg
YW5kIHNlbGYuX3NlbmRfcXVvdGEgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm8gcXVvdGEuIFdh
aXRpbmcgRmxvd0NvbnRyb2wgbWVzc2FnZSBmb3IgJWQuJyAlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fcmVxdWVzdC5jaGFubmVsX2lkKQorICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fc2VuZF9jb25kaXRpb24ud2FpdCgpCisKKyAgICAgICAgICAgICAgICAgICAgaWYg
c2VsZi5fc2VuZF9jbG9zZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBCYWRPcGVy
YXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xvZ2ljYWwgY29u
bmVjdGlvbiAlZCBpcyBjbG9zZWQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnJlcXVlc3QuX2NoYW5uZWxfaWQpCisKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nID0g
cGF5bG9hZF9sZW5ndGggLSB3cml0ZV9wb3NpdGlvbgorICAgICAgICAgICAgICAgICAgICB3cml0
ZV9sZW5ndGggPSBtaW4oc2VsZi5fc2VuZF9xdW90YSwgcmVtYWluaW5nKQorICAgICAgICAgICAg
ICAgICAgICBpbm5lcl9mcmFtZV9lbmQgPSAoCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQg
YW5kCisgICAgICAgICAgICAgICAgICAgICAgICAod3JpdGVfcG9zaXRpb24gKyB3cml0ZV9sZW5n
dGggPT0gcGF5bG9hZF9sZW5ndGgpKQorCisgICAgICAgICAgICAgICAgICAgIGlubmVyX2ZyYW1l
ID0gc2VsZi5fY3JlYXRlX2lubmVyX2ZyYW1lKAorICAgICAgICAgICAgICAgICAgICAgICAgb3Bj
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZFt3cml0ZV9wb3NpdGlvbjp3cml0
ZV9wb3NpdGlvbit3cml0ZV9sZW5ndGhdLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJf
ZnJhbWVfZW5kKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZW5kX3F1b3RhIC09IHdyaXRl
X2xlbmd0aAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ0NvbnN1bWVk
IHF1b3RhPSVkLCByZW1haW5pbmc9JWQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh3cml0ZV9sZW5ndGgsIHNlbGYuX3NlbmRfcXVvdGEpKQorICAgICAgICAgICAg
ICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlbmRfY29uZGl0aW9uLnJl
bGVhc2UoKQorCisgICAgICAgICAgICAgICAgIyBXcml0aW5nIGRhdGEgd2lsbCBibG9jayB0aGUg
d29ya2VyIHNvIHdlIG5lZWQgdG8gcmVsZWFzZQorICAgICAgICAgICAgICAgICMgX3NlbmRfY29u
ZGl0aW9uIGJlZm9yZSB3cml0aW5nLgorICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1
ZygnU2VuZGluZyBpbm5lciBmcmFtZTogJXInICUgaW5uZXJfZnJhbWUpCisgICAgICAgICAgICAg
ICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKGlubmVyX2ZyYW1lKQorICAgICAgICAg
ICAgICAgIHdyaXRlX3Bvc2l0aW9uICs9IHdyaXRlX2xlbmd0aAorCisgICAgICAgICAgICAgICAg
b3Bjb2RlID0gY29tbW9uLk9QQ09ERV9DT05USU5VQVRJT04KKworICAgICAgICBleGNlcHQgVmFs
dWVFcnJvciwgZToKKyAgICAgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbihlKQor
ICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfaW5uZXJfZnJhbWVfc2Vt
YXBob3JlLnJlbGVhc2UoKQorCisgICAgZGVmIHJlcGxlbmlzaF9zZW5kX3F1b3RhKHNlbGYsIHNl
bmRfcXVvdGEpOgorICAgICAgICAiIiJSZXBsZW5pc2ggc2VuZCBxdW90YS4iIiIKKworICAgICAg
ICB0cnk6CisgICAgICAgICAgICBzZWxmLl9zZW5kX2NvbmRpdGlvbi5hY3F1aXJlKCkKKyAgICAg
ICAgICAgIGlmIHNlbGYuX3NlbmRfcXVvdGEgKyBzZW5kX3F1b3RhID4gMHg3RkZGRkZGRkZGRkZG
RkZGOgorICAgICAgICAgICAgICAgIHNlbGYuX3NlbmRfcXVvdGEgPSAwCisgICAgICAgICAgICAg
ICAgcmFpc2UgTG9naWNhbENoYW5uZWxFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5f
cmVxdWVzdC5jaGFubmVsX2lkLCBfRFJPUF9DT0RFX1NFTkRfUVVPVEFfT1ZFUkZMT1cpCisgICAg
ICAgICAgICBzZWxmLl9zZW5kX3F1b3RhICs9IHNlbmRfcXVvdGEKKyAgICAgICAgICAgIHNlbGYu
X2xvZ2dlci5kZWJ1ZygnUmVwbGVuaXNoZWQgc2VuZCBxdW90YSBmb3IgY2hhbm5lbCBpZCAlZDog
JWQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcmVxdWVzdC5jaGFu
bmVsX2lkLCBzZWxmLl9zZW5kX3F1b3RhKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IHNlbGYuX3NlbmRfY29uZGl0aW9uLm5vdGlmeSgpCisgICAgICAgICAgICBzZWxmLl9zZW5kX2Nv
bmRpdGlvbi5yZWxlYXNlKCkKKworICAgIGRlZiBjb25zdW1lX3JlY2VpdmVfcXVvdGEoc2VsZiwg
YW1vdW50KToKKyAgICAgICAgIiIiQ29uc3VtZXMgcmVjZWl2ZSBxdW90YS4gUmV0dXJucyBGYWxz
ZSBvbiBmYWlsdXJlLiIiIgorCisgICAgICAgIGlmIHNlbGYuX3JlY2VpdmVfcXVvdGEgPCBhbW91
bnQ6CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1Zpb2xhdGUgcXVvdGEgb24gY2hh
bm5lbCBpZCAlZDogJWQgPCAlZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
ZWxmLl9yZXF1ZXN0LmNoYW5uZWxfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3JlY2VpdmVfcXVvdGEsIGFtb3VudCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KyAgICAgICAgc2VsZi5fcmVjZWl2ZV9xdW90YSAtPSBhbW91bnQKKyAgICAgICAgcmV0dXJuIFRy
dWUKKworICAgIGRlZiBzZW5kX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgZW5kPVRydWUsIGJpbmFy
eT1GYWxzZSk6CisgICAgICAgICIiIk92ZXJyaWRlIFN0cmVhbS5zZW5kX21lc3NhZ2UuIiIiCisK
KyAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC5zZXJ2ZXJfdGVybWluYXRlZDoKKyAgICAgICAgICAg
IHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnUmVxdWVzdGVk
IHNlbmRfbWVzc2FnZSBhZnRlciBzZW5kaW5nIG91dCBhIGNsb3NpbmcgaGFuZHNoYWtlJykKKwor
ICAgICAgICBpZiBiaW5hcnkgYW5kIGlzaW5zdGFuY2UobWVzc2FnZSwgdW5pY29kZSk6CisgICAg
ICAgICAgICByYWlzZSBCYWRPcGVyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ01l
c3NhZ2UgZm9yIGJpbmFyeSBmcmFtZSBtdXN0IGJlIGluc3RhbmNlIG9mIHN0cicpCisKKyAgICAg
ICAgaWYgYmluYXJ5OgorICAgICAgICAgICAgb3Bjb2RlID0gY29tbW9uLk9QQ09ERV9CSU5BUlkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wY29kZSA9IGNvbW1vbi5PUENPREVfVEVYVAor
ICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UuZW5jb2RlKCd1dGYtOCcpCisKKyAgICAgICAg
Zm9yIG1lc3NhZ2VfZmlsdGVyIGluIHNlbGYuX29wdGlvbnMub3V0Z29pbmdfbWVzc2FnZV9maWx0
ZXJzOgorICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VfZmlsdGVyLmZpbHRlcihtZXNzYWdl
LCBlbmQsIGJpbmFyeSkKKworICAgICAgICBpZiBzZWxmLl9sYXN0X21lc3NhZ2Vfd2FzX2ZyYWdt
ZW50ZWQ6CisgICAgICAgICAgICBpZiBvcGNvZGUgIT0gc2VsZi5fbWVzc2FnZV9vcGNvZGU6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgQmFkT3BlcmF0aW9uRXhjZXB0aW9uKCdNZXNzYWdlIHR5cGVz
IGFyZSBkaWZmZXJlbnQgaW4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnZnJhbWVzIGZvciB0aGUgc2FtZSBtZXNzYWdlJykKKyAgICAgICAgICAgIG9wY29k
ZSA9IGNvbW1vbi5PUENPREVfQ09OVElOVUFUSU9OCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBzZWxmLl9tZXNzYWdlX29wY29kZSA9IG9wY29kZQorCisgICAgICAgIHNlbGYuX3dyaXRlX2lu
bmVyX2ZyYW1lKG9wY29kZSwgbWVzc2FnZSwgZW5kKQorICAgICAgICBzZWxmLl9sYXN0X21lc3Nh
Z2Vfd2FzX2ZyYWdtZW50ZWQgPSBub3QgZW5kCisKKyAgICBkZWYgX3JlY2VpdmVfZnJhbWUoc2Vs
Zik6CisgICAgICAgICIiIk92ZXJyaWRlcyBTdHJlYW0uX3JlY2VpdmVfZnJhbWUuCisKKyAgICAg
ICAgSW4gYWRkaXRpb24gdG8gY2FsbCBTdHJlYW0uX3JlY2VpdmVfZnJhbWUsIHRoaXMgbWV0aG9k
IGFkZHMgdGhlIGFtb3VudAorICAgICAgICBvZiBwYXlsb2FkIHRvIHJlY2VpdmluZyBxdW90YSBh
bmQgc2VuZHMgRmxvd0NvbnRyb2wgdG8gdGhlIGNsaWVudC4KKyAgICAgICAgV2UgbmVlZCB0byBk
byBpdCBoZXJlIGJlY2F1c2UgU3RyZWFtLnJlY2VpdmVfbWVzc2FnZSgpIGhhbmRsZXMKKyAgICAg
ICAgY29udHJvbCBmcmFtZXMgaW50ZXJuYWxseS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgb3Bj
b2RlLCBwYXlsb2FkLCBmaW4sIHJzdjEsIHJzdjIsIHJzdjMgPSBTdHJlYW0uX3JlY2VpdmVfZnJh
bWUoc2VsZikKKyAgICAgICAgYW1vdW50ID0gbGVuKHBheWxvYWQpCisgICAgICAgICMgUmVwbGVu
aXNoIGV4dHJhIG9uZSBvY3RldCB3aGVuIHJlY2VpdmluZyB0aGUgZmlyc3QgZnJhZ21lbnRlZCBm
cmFtZS4KKyAgICAgICAgaWYgb3Bjb2RlICE9IGNvbW1vbi5PUENPREVfQ09OVElOVUFUSU9OOgor
ICAgICAgICAgICAgYW1vdW50ICs9IDEKKyAgICAgICAgc2VsZi5fcmVjZWl2ZV9xdW90YSArPSBh
bW91bnQKKyAgICAgICAgZnJhbWVfZGF0YSA9IF9jcmVhdGVfZmxvd19jb250cm9sKHNlbGYuX3Jl
cXVlc3QuY2hhbm5lbF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFtb3VudCkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdTZW5kaW5nIGZsb3cgY29u
dHJvbCBmb3IgJWQsIHJlcGxlbmlzaGVkPSVkJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoc2VsZi5fcmVxdWVzdC5jaGFubmVsX2lkLCBhbW91bnQpKQorICAgICAgICBzZWxmLl9yZXF1
ZXN0LmNvbm5lY3Rpb24ud3JpdGVfY29udHJvbF9kYXRhKGZyYW1lX2RhdGEpCisgICAgICAgIHJl
dHVybiBvcGNvZGUsIHBheWxvYWQsIGZpbiwgcnN2MSwgcnN2MiwgcnN2MworCisgICAgZGVmIF9n
ZXRfbWVzc2FnZV9mcm9tX2ZyYW1lKHNlbGYsIGZyYW1lKToKKyAgICAgICAgIiIiT3ZlcnJpZGVz
IFN0cmVhbS5fZ2V0X21lc3NhZ2VfZnJvbV9mcmFtZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgaW5uZXJfbWVzc2FnZSA9IHNlbGYuX2lubmVyX21lc3NhZ2VfYnVp
bGRlci5idWlsZChmcmFtZSkKKyAgICAgICAgZXhjZXB0IEludmFsaWRGcmFtZUV4Y2VwdGlvbjoK
KyAgICAgICAgICAgIHJhaXNlIExvZ2ljYWxDaGFubmVsRXJyb3IoCisgICAgICAgICAgICAgICAg
c2VsZi5fcmVxdWVzdC5jaGFubmVsX2lkLCBfRFJPUF9DT0RFX0JBRF9GUkFHTUVOVEFUSU9OKQor
CisgICAgICAgIGlmIGlubmVyX21lc3NhZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisgICAgICAgIHNlbGYuX29yaWdpbmFsX29wY29kZSA9IGlubmVyX21lc3NhZ2Uub3Bjb2Rl
CisgICAgICAgIHJldHVybiBpbm5lcl9tZXNzYWdlLnBheWxvYWQKKworICAgIGRlZiByZWNlaXZl
X21lc3NhZ2Uoc2VsZik6CisgICAgICAgICIiIk92ZXJyaWRlcyBTdHJlYW0ucmVjZWl2ZV9tZXNz
YWdlLiIiIgorCisgICAgICAgICMgSnVzdCBjYWxsIFN0cmVhbS5yZWNlaXZlX21lc3NhZ2UoKSwg
YnV0IGNhdGNoCisgICAgICAgICMgTG9naWNhbENvbm5lY3Rpb25DbG9zZWRFeGNlcHRpb24sIHdo
aWNoIGlzIHJhaXNlZCB3aGVuIHRoZSBsb2dpY2FsCisgICAgICAgICMgY29ubmVjdGlvbiBoYXMg
Y2xvc2VkIGdyYWNlZnVsbHkuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTdHJl
YW0ucmVjZWl2ZV9tZXNzYWdlKHNlbGYpCisgICAgICAgIGV4Y2VwdCBMb2dpY2FsQ29ubmVjdGlv
bkNsb3NlZEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnJXMn
LCBlKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfc2VuZF9jbG9zaW5nX2hh
bmRzaGFrZShzZWxmLCBjb2RlLCByZWFzb24pOgorICAgICAgICAiIiJPdmVycmlkZXMgU3RyZWFt
Ll9zZW5kX2Nsb3NpbmdfaGFuZHNoYWtlLiIiIgorCisgICAgICAgIGJvZHkgPSBjcmVhdGVfY2xv
c2luZ19oYW5kc2hha2VfYm9keShjb2RlLCByZWFzb24pCisgICAgICAgIHNlbGYuX2xvZ2dlci5k
ZWJ1ZygnU2VuZGluZyBjbG9zaW5nIGhhbmRzaGFrZSBmb3IgJWQ6ICglciwgJXIpJyAlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcmVxdWVzdC5jaGFubmVsX2lkLCBjb2RlLCBy
ZWFzb24pKQorICAgICAgICBzZWxmLl93cml0ZV9pbm5lcl9mcmFtZShjb21tb24uT1BDT0RFX0NM
T1NFLCBib2R5LCBlbmQ9VHJ1ZSkKKworICAgICAgICBzZWxmLl9yZXF1ZXN0LnNlcnZlcl90ZXJt
aW5hdGVkID0gVHJ1ZQorCisgICAgZGVmIHNlbmRfcGluZyhzZWxmLCBib2R5PScnKToKKyAgICAg
ICAgIiIiT3ZlcnJpZGVzIFN0cmVhbS5zZW5kX3BpbmciIiIKKworICAgICAgICBzZWxmLl9sb2dn
ZXIuZGVidWcoJ1NlbmRpbmcgcGluZyBvbiBsb2dpY2FsIGNoYW5uZWwgJWQ6ICVyJyAlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcmVxdWVzdC5jaGFubmVsX2lkLCBib2R5KSkK
KyAgICAgICAgc2VsZi5fd3JpdGVfaW5uZXJfZnJhbWUoY29tbW9uLk9QQ09ERV9QSU5HLCBib2R5
LCBlbmQ9VHJ1ZSkKKworICAgICAgICBzZWxmLl9waW5nX3F1ZXVlLmFwcGVuZChib2R5KQorCisg
ICAgZGVmIF9zZW5kX3Bvbmcoc2VsZiwgYm9keSk6CisgICAgICAgICIiIk92ZXJyaWRlcyBTdHJl
YW0uX3NlbmRfcG9uZyIiIgorCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnU2VuZGluZyBw
b25nIG9uIGxvZ2ljYWwgY2hhbm5lbCAlZDogJXInICUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChzZWxmLl9yZXF1ZXN0LmNoYW5uZWxfaWQsIGJvZHkpKQorICAgICAgICBzZWxmLl93cml0
ZV9pbm5lcl9mcmFtZShjb21tb24uT1BDT0RFX1BPTkcsIGJvZHksIGVuZD1UcnVlKQorCisgICAg
ZGVmIGNsb3NlX2Nvbm5lY3Rpb24oc2VsZiwgY29kZT1jb21tb24uU1RBVFVTX05PUk1BTF9DTE9T
VVJFLCByZWFzb249JycpOgorICAgICAgICAiIiJPdmVycmlkZXMgU3RyZWFtLmNsb3NlX2Nvbm5l
Y3Rpb24uIiIiCisKKyAgICAgICAgIyBUT0RPKGJhc2hpKTogSW1wbGVtZW50CisgICAgICAgIHNl
bGYuX2xvZ2dlci5kZWJ1ZygnQ2xvc2luZyBsb2dpY2FsIGNvbm5lY3Rpb24gJWQnICUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QuY2hhbm5lbF9pZCkKKyAgICAgICAg
c2VsZi5fcmVxdWVzdC5zZXJ2ZXJfdGVybWluYXRlZCA9IFRydWUKKworICAgIGRlZiBzdG9wX3Nl
bmRpbmcoc2VsZik6CisgICAgICAgICIiIlN0b3BzIGFjY2VwdGluZyBuZXcgc2VuZCBvcGVyYXRp
b24gKF93cml0ZV9pbm5lcl9mcmFtZSkuIiIiCisKKyAgICAgICAgc2VsZi5fc2VuZF9jb25kaXRp
b24uYWNxdWlyZSgpCisgICAgICAgIHNlbGYuX3NlbmRfY2xvc2VkID0gVHJ1ZQorICAgICAgICBz
ZWxmLl9zZW5kX2NvbmRpdGlvbi5ub3RpZnkoKQorICAgICAgICBzZWxmLl9zZW5kX2NvbmRpdGlv
bi5yZWxlYXNlKCkKKworCitjbGFzcyBfT3V0Z29pbmdEYXRhKG9iamVjdCk6CisgICAgIiIiQSBz
dHJ1Y3R1cmUgdGhhdCBob2xkcyBkYXRhIHRvIGJlIHNlbnQgdmlhIHBoeXNpY2FsIGNvbm5lY3Rp
b24gYW5kCisgICAgb3JpZ2luIG9mIHRoZSBkYXRhLgorICAgICIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGNoYW5uZWxfaWQsIGRhdGEpOgorICAgICAgICBzZWxmLmNoYW5uZWxfaWQgPSBj
aGFubmVsX2lkCisgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKworCitjbGFzcyBfUGh5c2ljYWxD
b25uZWN0aW9uV3JpdGVyKHRocmVhZGluZy5UaHJlYWQpOgorICAgICIiIkEgdGhyZWFkIHRoYXQg
aXMgcmVzcG9uc2libGUgZm9yIHdyaXRpbmcgZGF0YSB0byBwaHlzaWNhbCBjb25uZWN0aW9uLgor
CisgICAgVE9ETyhiYXNoaSk6IE1ha2Ugc3VyZSB0aGVyZSBpcyBubyB0aHJlYWQtc2FmZXR5IHBy
b2JsZW0gd2hlbiB0aGUgcmVhZGVyCisgICAgdGhyZWFkIHJlYWRzIGRhdGEgZnJvbSB0aGUgc2Ft
ZSBzb2NrZXQgYXQgYSB0aW1lLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG11
eF9oYW5kbGVyKToKKyAgICAgICAgIiIiQ29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgICAgbXV4X2hhbmRsZXI6IF9NdXhIYW5kbGVyIGluc3RhbmNlLgor
ICAgICAgICAiIiIKKworICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisg
ICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorICAgICAg
ICBzZWxmLl9tdXhfaGFuZGxlciA9IG11eF9oYW5kbGVyCisgICAgICAgIHNlbGYuc2V0RGFlbW9u
KFRydWUpCisKKyAgICAgICAgIyBXaGVuIHNldCwgbWFrZSB0aGlzIHRocmVhZCBzdG9wIGFjY2Vw
dGluZyBuZXcgZGF0YSwgZmx1c2ggcGVuZGluZworICAgICAgICAjIGRhdGEgYW5kIGV4aXQuCisg
ICAgICAgIHNlbGYuX3N0b3BfcmVxdWVzdGVkID0gRmFsc2UKKyAgICAgICAgIyBUaGUgY2xvc2Ug
Y29kZSBvZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbi4KKyAgICAgICAgc2VsZi5fY2xvc2VfY29k
ZSA9IGNvbW1vbi5TVEFUVVNfTk9STUFMX0NMT1NVUkUKKyAgICAgICAgIyBEZXF1ZSBmb3IgcGFz
c2luZyB3cml0ZSBkYXRhLiBJdCdzIHByb3RlY3RlZCBieSBfZGVxdWVfY29uZGl0aW9uCisgICAg
ICAgICMgdW50aWwgX3N0b3BfcmVxdWVzdGVkIGlzIHNldC4KKyAgICAgICAgc2VsZi5fZGVxdWUg
PSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgICMgLSBQcm90ZWN0cyBfZGVxdWUsIF9zdG9w
X3JlcXVlc3RlZCBhbmQgX2Nsb3NlX2NvZGUKKyAgICAgICAgIyAtIFNpZ25hbHMgdGhyZWFkcyB3
YWl0aW5nIGZvciB0aGVtIHRvIGJlIGF2YWlsYWJsZQorICAgICAgICBzZWxmLl9kZXF1ZV9jb25k
aXRpb24gPSB0aHJlYWRpbmcuQ29uZGl0aW9uKCkKKworICAgIGRlZiBwdXRfb3V0Z29pbmdfZGF0
YShzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiUHV0cyBvdXRnb2luZyBkYXRhLgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgICBkYXRhOiBfT3V0Z29pbmdEYXRhIGluc3RhbmNlLgorCisgICAg
ICAgIFJhaXNlczoKKyAgICAgICAgICAgIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbjogd2hlbiB0aGUg
dGhyZWFkIGhhcyBiZWVuIHJlcXVlc3RlZCB0bworICAgICAgICAgICAgICAgIHRlcm1pbmF0ZS4K
KyAgICAgICAgIiIiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZGVxdWVfY29u
ZGl0aW9uLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgc2VsZi5fc3RvcF9yZXF1ZXN0ZWQ6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgQmFkT3BlcmF0aW9uRXhjZXB0aW9uKCdDYW5ub3Qgd3JpdGUg
ZGF0YSBhbnltb3JlJykKKworICAgICAgICAgICAgc2VsZi5fZGVxdWUuYXBwZW5kKGRhdGEpCisg
ICAgICAgICAgICBzZWxmLl9kZXF1ZV9jb25kaXRpb24ubm90aWZ5KCkKKyAgICAgICAgZmluYWxs
eToKKyAgICAgICAgICAgIHNlbGYuX2RlcXVlX2NvbmRpdGlvbi5yZWxlYXNlKCkKKworICAgIGRl
ZiBfd3JpdGVfZGF0YShzZWxmLCBvdXRnb2luZ19kYXRhKToKKyAgICAgICAgbWVzc2FnZSA9IChf
ZW5jb2RlX2NoYW5uZWxfaWQob3V0Z29pbmdfZGF0YS5jaGFubmVsX2lkKSArCisgICAgICAgICAg
ICAgICAgICAgb3V0Z29pbmdfZGF0YS5kYXRhKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBz
ZWxmLl9tdXhfaGFuZGxlci5waHlzaWNhbF9zdHJlYW0uc2VuZF9tZXNzYWdlKAorICAgICAgICAg
ICAgICAgIG1lc3NhZ2U9bWVzc2FnZSwgZW5kPVRydWUsIGJpbmFyeT1UcnVlKQorICAgICAgICBl
eGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgdXRpbC5wcmVwZW5kX21lc3NhZ2VfdG9f
ZXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gc2VuZCBtZXNzYWdlIHRvICVy
OiAnICUKKyAgICAgICAgICAgICAgICAoc2VsZi5fbXV4X2hhbmRsZXIucGh5c2ljYWxfY29ubmVj
dGlvbi5yZW1vdGVfYWRkciwpLCBlKQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAjIFRP
RE8oYmFzaGkpOiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gYmxvY2sgdGhlIHRocmVhZCB0aGF0IHNl
bmRzCisgICAgICAgICMgY29udHJvbCBkYXRhIGFzIHdlbGwuCisgICAgICAgIGlmIG91dGdvaW5n
X2RhdGEuY2hhbm5lbF9pZCAhPSBfQ09OVFJPTF9DSEFOTkVMX0lEOgorICAgICAgICAgICAgc2Vs
Zi5fbXV4X2hhbmRsZXIubm90aWZ5X3dyaXRlX2RhdGFfZG9uZShvdXRnb2luZ19kYXRhLmNoYW5u
ZWxfaWQpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBz
ZWxmLl9kZXF1ZV9jb25kaXRpb24uYWNxdWlyZSgpCisgICAgICAgICAgICB3aGlsZSBub3Qgc2Vs
Zi5fc3RvcF9yZXF1ZXN0ZWQ6CisgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYuX2RlcXVlKSA9
PSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZXF1ZV9jb25kaXRpb24ud2FpdCgpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBvdXRnb2luZ19k
YXRhID0gc2VsZi5fZGVxdWUucG9wbGVmdCgpCisKKyAgICAgICAgICAgICAgICBzZWxmLl9kZXF1
ZV9jb25kaXRpb24ucmVsZWFzZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfZGF0YShv
dXRnb2luZ19kYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuX2RlcXVlX2NvbmRpdGlvbi5hY3F1
aXJlKCkKKworICAgICAgICAgICAgIyBGbHVzaCBkZXF1ZS4KKyAgICAgICAgICAgICMKKyAgICAg
ICAgICAgICMgQXQgdGhpcyBwb2ludCwgc2VsZi5fZGVxdWVfY29uZGl0aW9uIGlzIGFsd2F5cyBh
Y3F1aXJlZC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aGlsZSBsZW4oc2Vs
Zi5fZGVxdWUpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgb3V0Z29pbmdfZGF0YSA9IHNlbGYu
X2RlcXVlLnBvcGxlZnQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9kYXRhKG91
dGdvaW5nX2RhdGEpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYu
X2RlcXVlX2NvbmRpdGlvbi5yZWxlYXNlKCkKKworICAgICAgICAgICAgIyBDbG9zZSBwaHlzaWNh
bCBjb25uZWN0aW9uLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgRG9uJ3Qg
d2FpdCB0aGUgcmVzcG9uc2UgaGVyZS4gVGhlIHJlc3BvbnNlIHdpbGwgYmUgcmVhZAorICAgICAg
ICAgICAgICAgICMgYnkgdGhlIHJlYWRlciB0aHJlYWQuCisgICAgICAgICAgICAgICAgc2VsZi5f
bXV4X2hhbmRsZXIucGh5c2ljYWxfc3RyZWFtLmNsb3NlX2Nvbm5lY3Rpb24oCisgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2Nsb3NlX2NvZGUsIHdhaXRfcmVzcG9uc2U9RmFsc2UpCisgICAgICAg
ICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHV0aWwucHJlcGVuZF9t
ZXNzYWdlX3RvX2V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBjbG9z
ZSB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbjogJXInICUgZSkKKyAgICAgICAgICAgICAgICByYWlz
ZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fbXV4X2hhbmRsZXIubm90aWZ5
X3dyaXRlcl9kb25lKCkKKworICAgIGRlZiBzdG9wKHNlbGYsIGNsb3NlX2NvZGU9Y29tbW9uLlNU
QVRVU19OT1JNQUxfQ0xPU1VSRSk6CisgICAgICAgICIiIlN0b3BzIHRoZSB3cml0ZXIgdGhyZWFk
LiIiIgorCisgICAgICAgIHNlbGYuX2RlcXVlX2NvbmRpdGlvbi5hY3F1aXJlKCkKKyAgICAgICAg
c2VsZi5fc3RvcF9yZXF1ZXN0ZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX2Nsb3NlX2NvZGUgPSBj
bG9zZV9jb2RlCisgICAgICAgIHNlbGYuX2RlcXVlX2NvbmRpdGlvbi5ub3RpZnkoKQorICAgICAg
ICBzZWxmLl9kZXF1ZV9jb25kaXRpb24ucmVsZWFzZSgpCisKKworY2xhc3MgX1BoeXNpY2FsQ29u
bmVjdGlvblJlYWRlcih0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAiIiJBIHRocmVhZCB0aGF0IGlz
IHJlc3BvbnNpYmxlIGZvciByZWFkaW5nIGRhdGEgZnJvbSBwaHlzaWNhbCBjb25uZWN0aW9uLgor
ICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG11eF9oYW5kbGVyKToKKyAgICAgICAg
IiIiQ29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAg
bXV4X2hhbmRsZXI6IF9NdXhIYW5kbGVyIGluc3RhbmNlLgorICAgICAgICAiIiIKKworICAgICAg
ICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2xvZ2dlciA9
IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorICAgICAgICBzZWxmLl9tdXhfaGFuZGxlciA9
IG11eF9oYW5kbGVyCisgICAgICAgIHNlbGYuc2V0RGFlbW9uKFRydWUpCisKKyAgICBkZWYgcnVu
KHNlbGYpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgIHBoeXNpY2FsX3N0cmVhbSA9IHNlbGYuX211eF9oYW5kbGVyLnBoeXNpY2FsX3N0cmVh
bQorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBwaHlzaWNhbF9zdHJlYW0ucmVjZWl2ZV9tZXNz
YWdlKCkKKyAgICAgICAgICAgICAgICBpZiBtZXNzYWdlIGlzIE5vbmU6CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgIyBCZWxvdyBoYXBwZW5zIG9ubHkgd2hlbiBh
IGRhdGEgbWVzc2FnZSBpcyByZWNlaXZlZC4KKyAgICAgICAgICAgICAgICBvcGNvZGUgPSBwaHlz
aWNhbF9zdHJlYW0uZ2V0X2xhc3RfcmVjZWl2ZWRfb3Bjb2RlKCkKKyAgICAgICAgICAgICAgICBp
ZiBvcGNvZGUgIT0gY29tbW9uLk9QQ09ERV9CSU5BUlk6CisgICAgICAgICAgICAgICAgICAgIHNl
bGYuX211eF9oYW5kbGVyLmZhaWxfcGh5c2ljYWxfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF9EUk9QX0NPREVfSU5WQUxJRF9FTkNBUFNVTEFUSU5HX01FU1NBR0UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAnUmVjZWl2ZWQgYSB0ZXh0IG1lc3NhZ2Ugb24gcGh5c2ljYWwg
Y29ubmVjdGlvbicpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGV4
Y2VwdCBDb25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBz
ZWxmLl9sb2dnZXIuZGVidWcoJyVzJywgZSkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fbXV4X2hhbmRsZXIuZGlzcGF0Y2hf
bWVzc2FnZShtZXNzYWdlKQorICAgICAgICAgICAgZXhjZXB0IFBoeXNpY2FsQ29ubmVjdGlvbkVy
cm9yLCBlOgorICAgICAgICAgICAgICAgIHNlbGYuX211eF9oYW5kbGVyLmZhaWxfcGh5c2ljYWxf
Y29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICAgICAgZS5kcm9wX2NvZGUsIGUubWVzc2FnZSkK
KyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IExvZ2ljYWxDaGFubmVs
RXJyb3IsIGU6CisgICAgICAgICAgICAgICAgc2VsZi5fbXV4X2hhbmRsZXIuZmFpbF9sb2dpY2Fs
X2NoYW5uZWwoCisgICAgICAgICAgICAgICAgICAgIGUuY2hhbm5lbF9pZCwgZS5kcm9wX2NvZGUs
IGUubWVzc2FnZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAg
ICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAg
ICAgICAgICAgYnJlYWsKKworICAgICAgICBzZWxmLl9tdXhfaGFuZGxlci5ub3RpZnlfcmVhZGVy
X2RvbmUoKQorCisKK2NsYXNzIF9Xb3JrZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgIiIiQSB0
aHJlYWQgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcnVubmluZyB0aGUgY29ycmVzcG9uZGluZyBh
cHBsaWNhdGlvbgorICAgIGhhbmRsZXIuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbXV4X2hhbmRsZXIsIHJlcXVlc3QpOgorICAgICAgICAiIiJDb25zdHJ1Y3RzIGFuIGluc3Rh
bmNlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBtdXhfaGFuZGxlcjogX011eEhhbmRs
ZXIgaW5zdGFuY2UuCisgICAgICAgICAgICByZXF1ZXN0OiBfTG9naWNhbFJlcXVlc3QgaW5zdGFu
Y2UuCisgICAgICAgICIiIgorCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2Vs
ZikKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisg
ICAgICAgIHNlbGYuX211eF9oYW5kbGVyID0gbXV4X2hhbmRsZXIKKyAgICAgICAgc2VsZi5fcmVx
dWVzdCA9IHJlcXVlc3QKKyAgICAgICAgc2VsZi5zZXREYWVtb24oVHJ1ZSkKKworICAgIGRlZiBy
dW4oc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnTG9naWNhbCBjaGFubmVsIHdv
cmtlciBzdGFydGVkLiAoaWQ9JWQpJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9yZXF1ZXN0LmNoYW5uZWxfaWQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgTm9uLWNy
aXRpY2FsIGV4Y2VwdGlvbnMgd2lsbCBiZSBoYW5kbGVkIGJ5IGRpc3BhdGNoZXIuCisgICAgICAg
ICAgICBzZWxmLl9tdXhfaGFuZGxlci5kaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEoc2VsZi5fcmVx
dWVzdCkKKyAgICAgICAgZXhjZXB0IExvZ2ljYWxDaGFubmVsRXJyb3IsIGU6CisgICAgICAgICAg
ICBzZWxmLl9tdXhfaGFuZGxlci5mYWlsX2xvZ2ljYWxfY2hhbm5lbCgKKyAgICAgICAgICAgICAg
ICBlLmNoYW5uZWxfaWQsIGUuZHJvcF9jb2RlLCBlLm1lc3NhZ2UpCisgICAgICAgIGZpbmFsbHk6
CisgICAgICAgICAgICBzZWxmLl9tdXhfaGFuZGxlci5ub3RpZnlfd29ya2VyX2RvbmUoc2VsZi5f
cmVxdWVzdC5jaGFubmVsX2lkKQorCisKK2NsYXNzIF9NdXhIYW5kc2hha2VyKGh5YmkuSGFuZHNo
YWtlcik6CisgICAgIiIiT3BlbmluZyBoYW5kc2hha2UgcHJvY2Vzc29yIGZvciBtdWx0aXBsZXhp
bmcuIiIiCisKKyAgICBfRFVNTVlfV0VCU09DS0VUX0tFWSA9ICdkR2hsSUhOaGJYQnNaU0J1YjI1
alpRPT0nCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgZGlzcGF0Y2hlciwgc2Vu
ZF9xdW90YSwgcmVjZWl2ZV9xdW90YSk6CisgICAgICAgICIiIkNvbnN0cnVjdHMgYW4gaW5zdGFu
Y2UuCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICByZXF1ZXN0OiBfTG9naWNhbFJlcXVlc3Qg
aW5zdGFuY2UuCisgICAgICAgICAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyIGluc3RhbmNlIChk
aXNwYXRjaC5EaXNwYXRjaGVyKS4KKyAgICAgICAgICAgIHNlbmRfcXVvdGE6IEluaXRpYWwgc2Vu
ZCBxdW90YS4KKyAgICAgICAgICAgIHJlY2VpdmVfcXVvdGE6IEluaXRpYWwgcmVjZWl2ZSBxdW90
YS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaHliaS5IYW5kc2hha2VyLl9faW5pdF9fKHNlbGYs
IHJlcXVlc3QsIGRpc3BhdGNoZXIpCisgICAgICAgIHNlbGYuX3NlbmRfcXVvdGEgPSBzZW5kX3F1
b3RhCisgICAgICAgIHNlbGYuX3JlY2VpdmVfcXVvdGEgPSByZWNlaXZlX3F1b3RhCisKKyAgICAg
ICAgIyBBcHBlbmQgaGVhZGVycyB3aGljaCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIGhhbmRz
aGFrZSBmaWVsZCBvZgorICAgICAgICAjIEFkZENoYW5uZWxSZXF1ZXN0LgorICAgICAgICAjIFRP
RE8oYmFzaGkpOiBNYWtlIHN1cmUgd2hldGhlciB3ZSBzaG91bGQgcmFpc2UgZXhjZXB0aW9uIHdo
ZW4KKyAgICAgICAgIyAgICAgdGhlc2UgaGVhZGVycyBhcmUgaW5jbHVkZWQgYWxyZWFkeS4KKyAg
ICAgICAgcmVxdWVzdC5oZWFkZXJzX2luW2NvbW1vbi5VUEdSQURFX0hFQURFUl0gPSAoCisgICAg
ICAgICAgICBjb21tb24uV0VCU09DS0VUX1VQR1JBREVfVFlQRSkKKyAgICAgICAgcmVxdWVzdC5o
ZWFkZXJzX2luW2NvbW1vbi5TRUNfV0VCU09DS0VUX1ZFUlNJT05fSEVBREVSXSA9ICgKKyAgICAg
ICAgICAgIHN0cihjb21tb24uVkVSU0lPTl9IWUJJX0xBVEVTVCkpCisgICAgICAgIHJlcXVlc3Qu
aGVhZGVyc19pbltjb21tb24uU0VDX1dFQlNPQ0tFVF9LRVlfSEVBREVSXSA9ICgKKyAgICAgICAg
ICAgIHNlbGYuX0RVTU1ZX1dFQlNPQ0tFVF9LRVkpCisKKyAgICBkZWYgX2NyZWF0ZV9zdHJlYW0o
c2VsZiwgc3RyZWFtX29wdGlvbnMpOgorICAgICAgICAiIiJPdmVycmlkZSBoeWJpLkhhbmRzaGFr
ZXIuX2NyZWF0ZV9zdHJlYW0uIiIiCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdDcmVh
dGluZyBsb2dpY2FsIHN0cmVhbSBmb3IgJWQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3JlcXVlc3QuY2hhbm5lbF9pZCkKKyAgICAgICAgcmV0dXJuIF9Mb2dpY2FsU3RyZWFt
KAorICAgICAgICAgICAgc2VsZi5fcmVxdWVzdCwgc3RyZWFtX29wdGlvbnMsIHNlbGYuX3NlbmRf
cXVvdGEsCisgICAgICAgICAgICBzZWxmLl9yZWNlaXZlX3F1b3RhKQorCisgICAgZGVmIF9jcmVh
dGVfaGFuZHNoYWtlX3Jlc3BvbnNlKHNlbGYsIGFjY2VwdCk6CisgICAgICAgICIiIk92ZXJyaWRl
IGh5YmkuX2NyZWF0ZV9oYW5kc2hha2VfcmVzcG9uc2UuIiIiCisKKyAgICAgICAgcmVzcG9uc2Ug
PSBbXQorCisgICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnSFRUUC8xLjEgMTAxIFN3aXRjaGluZyBQ
cm90b2NvbHNcclxuJykKKworICAgICAgICAjIFVwZ3JhZGUgYW5kIFNlYy1XZWJTb2NrZXQtQWNj
ZXB0IHNob3VsZCBiZSBleGNsdWRlZC4KKyAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCclczogJXNc
clxuJyAlICgKKyAgICAgICAgICAgIGNvbW1vbi5DT05ORUNUSU9OX0hFQURFUiwgY29tbW9uLlVQ
R1JBREVfQ09OTkVDVElPTl9UWVBFKSkKKyAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC53c19wcm90
b2NvbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnJXM6ICVzXHJc
bicgJSAoCisgICAgICAgICAgICAgICAgY29tbW9uLlNFQ19XRUJTT0NLRVRfUFJPVE9DT0xfSEVB
REVSLAorICAgICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcHJvdG9jb2wpKQorICAgICAg
ICBpZiAoc2VsZi5fcmVxdWVzdC53c19leHRlbnNpb25zIGlzIG5vdCBOb25lIGFuZAorICAgICAg
ICAgICAgbGVuKHNlbGYuX3JlcXVlc3Qud3NfZXh0ZW5zaW9ucykgIT0gMCk6CisgICAgICAgICAg
ICByZXNwb25zZS5hcHBlbmQoJyVzOiAlc1xyXG4nICUgKAorICAgICAgICAgICAgICAgIGNvbW1v
bi5TRUNfV0VCU09DS0VUX0VYVEVOU0lPTlNfSEVBREVSLAorICAgICAgICAgICAgICAgIGNvbW1v
bi5mb3JtYXRfZXh0ZW5zaW9ucyhzZWxmLl9yZXF1ZXN0LndzX2V4dGVuc2lvbnMpKSkKKyAgICAg
ICAgcmVzcG9uc2UuYXBwZW5kKCdcclxuJykKKworICAgICAgICByZXR1cm4gJycuam9pbihyZXNw
b25zZSkKKworICAgIGRlZiBfc2VuZF9oYW5kc2hha2Uoc2VsZiwgYWNjZXB0KToKKyAgICAgICAg
IiIiT3ZlcnJpZGUgaHliaS5IYW5kc2hha2VyLl9zZW5kX2hhbmRzaGFrZS4iIiIKKworICAgICAg
ICAjIERvbid0IHNlbmQgaGFuZHNoYWtlIHJlc3BvbnNlIGZvciB0aGUgZGVmYXVsdCBjaGFubmVs
CisgICAgICAgIGlmIHNlbGYuX3JlcXVlc3QuY2hhbm5lbF9pZCA9PSBfREVGQVVMVF9DSEFOTkVM
X0lEOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaGFuZHNoYWtlX3Jlc3BvbnNlID0g
c2VsZi5fY3JlYXRlX2hhbmRzaGFrZV9yZXNwb25zZShhY2NlcHQpCisgICAgICAgIGZyYW1lX2Rh
dGEgPSBfY3JlYXRlX2FkZF9jaGFubmVsX3Jlc3BvbnNlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3JlcXVlc3QuY2hhbm5lbF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBo
YW5kc2hha2VfcmVzcG9uc2UpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnU2VuZGluZyBo
YW5kc2hha2UgcmVzcG9uc2UgZm9yICVkOiAlcicgJQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHNlbGYuX3JlcXVlc3QuY2hhbm5lbF9pZCwgZnJhbWVfZGF0YSkpCisgICAgICAgIHNlbGYu
X3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZV9jb250cm9sX2RhdGEoZnJhbWVfZGF0YSkKKworCitj
bGFzcyBfTG9naWNhbENoYW5uZWxEYXRhKG9iamVjdCk6CisgICAgIiIiQSBzdHJ1Y3R1cmUgdGhh
dCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBsb2dpY2FsIGNoYW5uZWwuCisgICAgIiIiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgd29ya2VyKToKKyAgICAgICAgc2VsZi5yZXF1
ZXN0ID0gcmVxdWVzdAorICAgICAgICBzZWxmLndvcmtlciA9IHdvcmtlcgorICAgICAgICBzZWxm
LmRyb3BfY29kZSA9IF9EUk9QX0NPREVfTk9STUFMX0NMT1NVUkUKKyAgICAgICAgc2VsZi5kcm9w
X21lc3NhZ2UgPSAnJworCisKK2NsYXNzIF9IYW5kc2hha2VEZWx0YUJhc2Uob2JqZWN0KToKKyAg
ICAiIiJBIGNsYXNzIHRoYXQgaG9sZHMgaW5mb3JtYXRpb24gZm9yIGRlbHRhLWVuY29kZWQgaGFu
ZHNoYWtlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhlYWRlcnMpOgorICAgICAgICBz
ZWxmLl9oZWFkZXJzID0gaGVhZGVycworCisgICAgZGVmIGNyZWF0ZV9oZWFkZXJzKHNlbGYsIGRl
bHRhPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGVzIHJlcXVlc3QgaGVhZGVycyBmb3IgYW4gQWRk
Q2hhbm5lbFJlcXVlc3QgdGhhdCBoYXMKKyAgICAgICAgZGVsdGEtZW5jb2RlZCBoYW5kc2hha2Uu
CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRlbHRhOiBoZWFkZXJzIHNob3VsZCBiZSBv
dmVycmlkZGVuLgorICAgICAgICAiIiIKKworICAgICAgICBoZWFkZXJzID0gY29weS5jb3B5KHNl
bGYuX2hlYWRlcnMpCisgICAgICAgIGlmIGRlbHRhOgorICAgICAgICAgICAgZm9yIGtleSwgdmFs
dWUgaW4gZGVsdGEuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAjIFRoZSBzcGVjIHJlcXVpcmVz
IHRoYXQgYSBoZWFkZXIgd2l0aCBhbiBlbXB0eSB2YWx1ZSBpcworICAgICAgICAgICAgICAgICMg
cmVtb3ZlZCBmcm9tIHRoZSBkZWx0YSBiYXNlLgorICAgICAgICAgICAgICAgIGlmIGxlbih2YWx1
ZSkgPT0gMCBhbmQgaGVhZGVycy5oYXNfa2V5KGtleSk6CisgICAgICAgICAgICAgICAgICAgIGRl
bCBoZWFkZXJzW2tleV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg
ICBoZWFkZXJzW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gaGVhZGVycworCisKK2NsYXNz
IF9NdXhIYW5kbGVyKG9iamVjdCk6CisgICAgIiIiTXVsdGlwbGV4aW5nIGhhbmRsZXIuIFdoZW4g
YSBoYW5kbGVyIHN0YXJ0cywgaXQgbGF1bmNoZXMgdGhyZWUKKyAgICB0aHJlYWRzOyB0aGUgcmVh
ZGVyIHRocmVhZCwgdGhlIHdyaXRlciB0aHJlYWQsIGFuZCBhIHdvcmtlciB0aHJlYWQuCisKKyAg
ICBUaGUgcmVhZGVyIHRocmVhZCByZWFkcyBkYXRhIGZyb20gdGhlIHBoeXNpY2FsIHN0cmVhbSwg
aS5lLiwgdGhlCisgICAgd3Nfc3RyZWFtIG9iamVjdCBvZiB0aGUgdW5kZXJseWluZyB3ZWJzb2Nr
ZXQgY29ubmVjdGlvbi4gVGhlIHJlYWRlcgorICAgIHRocmVhZCBpbnRlcnByZXRzIG11bHRpcGxl
eGVkIGZyYW1lcyBhbmQgZGlzcGF0Y2hlcyB0aGVtIHRvIGxvZ2ljYWwKKyAgICBjaGFubmVscy4g
TWV0aG9kcyBvZiB0aGlzIGNsYXNzIGFyZSBtb3N0bHkgY2FsbGVkIGJ5IHRoZSByZWFkZXIgdGhy
ZWFkLgorCisgICAgVGhlIHdyaXRlciB0aHJlYWQgc2VuZHMgbXVsdGlwbGV4ZWQgZnJhbWVzIHdo
aWNoIGFyZSBjcmVhdGVkIGJ5CisgICAgbG9naWNhbCBjaGFubmVscyB2aWEgdGhlIHBoeXNpY2Fs
IGNvbm5lY3Rpb24uCisKKyAgICBUaGUgd29ya2VyIHRocmVhZCBsYXVuY2hlZCBhdCB0aGUgc3Rh
cnRpbmcgcG9pbnQgaGFuZGxlcyB0aGUKKyAgICAiSW1wbGljaXRseSBPcGVuZWQgQ29ubmVjdGlv
biIuIElmIG11bHRpcGxleGluZyBoYW5kbGVyIHJlY2VpdmVzCisgICAgYW4gQWRkQ2hhbm5lbFJl
cXVlc3QgYW5kIGFjY2VwdHMgaXQsIHRoZSBoYW5kbGVyIHdpbGwgbGF1bmNoIGEgbmV3IHdvcmtl
cgorICAgIHRocmVhZCBhbmQgZGlzcGF0Y2ggdGhlIHJlcXVlc3QgdG8gaXQuCisgICAgIiIiCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgZGlzcGF0Y2hlcik6CisgICAgICAgICIi
IkNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJl
cXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdCBvZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbi4KKyAg
ICAgICAgICAgIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIgaW5zdGFuY2UgKGRpc3BhdGNoLkRpc3Bh
dGNoZXIpLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLm9yaWdpbmFsX3JlcXVlc3QgPSBy
ZXF1ZXN0CisgICAgICAgIHNlbGYuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXIKKyAgICAgICAgc2Vs
Zi5waHlzaWNhbF9jb25uZWN0aW9uID0gcmVxdWVzdC5jb25uZWN0aW9uCisgICAgICAgIHNlbGYu
cGh5c2ljYWxfc3RyZWFtID0gcmVxdWVzdC53c19zdHJlYW0KKyAgICAgICAgc2VsZi5fbG9nZ2Vy
ID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisgICAgICAgIHNlbGYuX2xvZ2ljYWxfY2hh
bm5lbHMgPSB7fQorICAgICAgICBzZWxmLl9sb2dpY2FsX2NoYW5uZWxzX2NvbmRpdGlvbiA9IHRo
cmVhZGluZy5Db25kaXRpb24oKQorICAgICAgICAjIEhvbGRzIGNsaWVudCdzIGluaXRpYWwgcXVv
dGEKKyAgICAgICAgc2VsZi5fY2hhbm5lbF9zbG90cyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAg
ICAgICAgc2VsZi5faGFuZHNoYWtlX2Jhc2UgPSBOb25lCisgICAgICAgIHNlbGYuX3dvcmtlcl9k
b25lX25vdGlmeV9yZWNlaXZlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3JlYWRlciA9IE5vbmUK
KyAgICAgICAgc2VsZi5fd3JpdGVyID0gTm9uZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAg
ICAgICAiIiJTdGFydHMgdGhlIGhhbmRsZXIuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAg
ICAgTXV4VW5leHBlY3RlZEV4Y2VwdGlvbjogd2hlbiB0aGUgaGFuZGxlciBhbHJlYWR5IHN0YXJ0
ZWQsIG9yIHdoZW4KKyAgICAgICAgICAgICAgICBvcGVuaW5nIGhhbmRzaGFrZSBvZiB0aGUgZGVm
YXVsdCBjaGFubmVsIGZhaWxzLgorICAgICAgICAiIiIKKworICAgICAgICBpZiBzZWxmLl9yZWFk
ZXIgb3Igc2VsZi5fd3JpdGVyOgorICAgICAgICAgICAgcmFpc2UgTXV4VW5leHBlY3RlZEV4Y2Vw
dGlvbignTXV4SGFuZGxlciBhbHJlYWR5IHN0YXJ0ZWQnKQorCisgICAgICAgIHNlbGYuX3JlYWRl
ciA9IF9QaHlzaWNhbENvbm5lY3Rpb25SZWFkZXIoc2VsZikKKyAgICAgICAgc2VsZi5fd3JpdGVy
ID0gX1BoeXNpY2FsQ29ubmVjdGlvbldyaXRlcihzZWxmKQorICAgICAgICBzZWxmLl9yZWFkZXIu
c3RhcnQoKQorICAgICAgICBzZWxmLl93cml0ZXIuc3RhcnQoKQorCisgICAgICAgICMgQ3JlYXRl
ICJJbXBsaWNpdGx5IE9wZW5lZCBDb25uZWN0aW9uIi4KKyAgICAgICAgbG9naWNhbF9jb25uZWN0
aW9uID0gX0xvZ2ljYWxDb25uZWN0aW9uKHNlbGYsIF9ERUZBVUxUX0NIQU5ORUxfSUQpCisgICAg
ICAgIGhlYWRlcnMgPSBjb3B5LmNvcHkoc2VsZi5vcmlnaW5hbF9yZXF1ZXN0LmhlYWRlcnNfaW4p
CisgICAgICAgICMgQWRkIGV4dGVuc2lvbnMgZm9yIGxvZ2ljYWwgY2hhbm5lbC4KKyAgICAgICAg
aGVhZGVyc1tjb21tb24uU0VDX1dFQlNPQ0tFVF9FWFRFTlNJT05TX0hFQURFUl0gPSAoCisgICAg
ICAgICAgICBjb21tb24uZm9ybWF0X2V4dGVuc2lvbnMoCisgICAgICAgICAgICAgICAgc2VsZi5v
cmlnaW5hbF9yZXF1ZXN0Lm11eF9wcm9jZXNzb3IuZXh0ZW5zaW9ucygpKSkKKyAgICAgICAgc2Vs
Zi5faGFuZHNoYWtlX2Jhc2UgPSBfSGFuZHNoYWtlRGVsdGFCYXNlKGhlYWRlcnMpCisgICAgICAg
IGxvZ2ljYWxfcmVxdWVzdCA9IF9Mb2dpY2FsUmVxdWVzdCgKKyAgICAgICAgICAgIF9ERUZBVUxU
X0NIQU5ORUxfSUQsCisgICAgICAgICAgICBzZWxmLm9yaWdpbmFsX3JlcXVlc3QubWV0aG9kLAor
ICAgICAgICAgICAgc2VsZi5vcmlnaW5hbF9yZXF1ZXN0LnVyaSwKKyAgICAgICAgICAgIHNlbGYu
b3JpZ2luYWxfcmVxdWVzdC5wcm90b2NvbCwKKyAgICAgICAgICAgIHNlbGYuX2hhbmRzaGFrZV9i
YXNlLmNyZWF0ZV9oZWFkZXJzKCksCisgICAgICAgICAgICBsb2dpY2FsX2Nvbm5lY3Rpb24pCisg
ICAgICAgICMgQ2xpZW50J3Mgc2VuZCBxdW90YSBmb3IgdGhlIGltcGxpY2l0bHkgb3BlbmVkIGNv
bm5lY3Rpb24gaXMgemVybywKKyAgICAgICAgIyBidXQgd2Ugd2lsbCBzZW5kIEZsb3dDb250cm9s
IGxhdGVyIHNvIHNldCB0aGUgaW5pdGlhbCBxdW90YSB0bworICAgICAgICAjIF9JTklUSUFMX1FV
T1RBX0ZPUl9DTElFTlQuCisgICAgICAgIHNlbGYuX2NoYW5uZWxfc2xvdHMuYXBwZW5kKF9JTklU
SUFMX1FVT1RBX0ZPUl9DTElFTlQpCisgICAgICAgIHNlbmRfcXVvdGEgPSBzZWxmLm9yaWdpbmFs
X3JlcXVlc3QubXV4X3Byb2Nlc3Nvci5xdW90YSgpCisgICAgICAgIGlmIG5vdCBzZWxmLl9kb19o
YW5kc2hha2VfZm9yX2xvZ2ljYWxfcmVxdWVzdCgKKyAgICAgICAgICAgIGxvZ2ljYWxfcmVxdWVz
dCwgc2VuZF9xdW90YT1zZW5kX3F1b3RhKToKKyAgICAgICAgICAgIHJhaXNlIE11eFVuZXhwZWN0
ZWRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ0ZhaWxlZCBoYW5kc2hha2Ugb24gdGhlIGRl
ZmF1bHQgY2hhbm5lbCBpZCcpCisgICAgICAgIHNlbGYuX2FkZF9sb2dpY2FsX2NoYW5uZWwobG9n
aWNhbF9yZXF1ZXN0KQorCisgICAgICAgICMgU2VuZCBGbG93Q29udHJvbCBmb3IgdGhlIGltcGxp
Y2l0bHkgb3BlbmVkIGNvbm5lY3Rpb24uCisgICAgICAgIGZyYW1lX2RhdGEgPSBfY3JlYXRlX2Zs
b3dfY29udHJvbChfREVGQVVMVF9DSEFOTkVMX0lELAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lOSVRJQUxfUVVPVEFfRk9SX0NMSUVOVCkKKyAgICAgICAgbG9n
aWNhbF9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGVfY29udHJvbF9kYXRhKGZyYW1lX2RhdGEpCisK
KyAgICBkZWYgYWRkX2NoYW5uZWxfc2xvdHMoc2VsZiwgc2xvdHMsIHNlbmRfcXVvdGEpOgorICAg
ICAgICAiIiJBZGRzIGNoYW5uZWwgc2xvdHMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAg
IHNsb3RzOiBudW1iZXIgb2Ygc2xvdHMgdG8gYmUgYWRkZWQuCisgICAgICAgICAgICBzZW5kX3F1
b3RhOiBpbml0aWFsIHNlbmQgcXVvdGEgZm9yIHNsb3RzLgorICAgICAgICAiIiIKKworICAgICAg
ICBzZWxmLl9jaGFubmVsX3Nsb3RzLmV4dGVuZChbc2VuZF9xdW90YV0gKiBzbG90cykKKyAgICAg
ICAgIyBTZW5kIE5ld0NoYW5uZWxTbG90IHRvIGNsaWVudC4KKyAgICAgICAgZnJhbWVfZGF0YSA9
IF9jcmVhdGVfbmV3X2NoYW5uZWxfc2xvdChzbG90cywgc2VuZF9xdW90YSkKKyAgICAgICAgc2Vs
Zi5zZW5kX2NvbnRyb2xfZGF0YShmcmFtZV9kYXRhKQorCisgICAgZGVmIHdhaXRfdW50aWxfZG9u
ZShzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiJXYWl0cyB1bnRpbCBhbGwgd29ya2Vy
cyBhcmUgZG9uZS4gUmV0dXJucyBGYWxzZSB3aGVuIHRpbWVvdXQgaGFzCisgICAgICAgIG9jY3Vy
cmVkLiBSZXR1cm5zIFRydWUgb24gc3VjY2Vzcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAg
ICAgdGltZW91dDogdGltZW91dCBpbiBzZWMuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYu
X2xvZ2ljYWxfY2hhbm5lbHNfY29uZGl0aW9uLmFjcXVpcmUoKQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICB3aGlsZSBsZW4oc2VsZi5fbG9naWNhbF9jaGFubmVscykgPiAwOgorICAgICAgICAg
ICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnV2FpdGluZyB3b3JrZXJzKCVkKS4uLicgJQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5fbG9naWNhbF9jaGFubmVs
cykpCisgICAgICAgICAgICAgICAgc2VsZi5fd29ya2VyX2RvbmVfbm90aWZ5X3JlY2VpdmVkID0g
RmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dpY2FsX2NoYW5uZWxzX2NvbmRpdGlvbi53
YWl0KHRpbWVvdXQpCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3dvcmtlcl9kb25lX25v
dGlmeV9yZWNlaXZlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdX
YWl0aW5nIHdvcmtlcihzKSB0aW1lZCBvdXQnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2ljYWxfY2hhbm5l
bHNfY29uZGl0aW9uLnJlbGVhc2UoKQorCisgICAgICAgICMgRmx1c2ggcGVuZGluZyBvdXRnb2lu
ZyBkYXRhCisgICAgICAgIHNlbGYuX3dyaXRlci5zdG9wKCkKKyAgICAgICAgc2VsZi5fd3JpdGVy
LmpvaW4oKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgbm90aWZ5X3dyaXRlX2Rh
dGFfZG9uZShzZWxmLCBjaGFubmVsX2lkKToKKyAgICAgICAgIiIiQ2FsbGVkIGJ5IHRoZSB3cml0
ZXIgdGhyZWFkIHdoZW4gYSB3cml0ZSBvcGVyYXRpb24gaGFzIGRvbmUuCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICAgIGNoYW5uZWxfaWQ6IG9iamVjdGl2ZSBjaGFubmVsIGlkLgorICAgICAg
ICAiIiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9sb2dpY2FsX2NoYW5uZWxz
X2NvbmRpdGlvbi5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmIGNoYW5uZWxfaWQgaW4gc2VsZi5f
bG9naWNhbF9jaGFubmVsczoKKyAgICAgICAgICAgICAgICBjaGFubmVsX2RhdGEgPSBzZWxmLl9s
b2dpY2FsX2NoYW5uZWxzW2NoYW5uZWxfaWRdCisgICAgICAgICAgICAgICAgY2hhbm5lbF9kYXRh
LnJlcXVlc3QuY29ubmVjdGlvbi5vbl93cml0ZV9kYXRhX2RvbmUoKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1NlZW1zIHRoYXQgbG9naWNh
bCBjaGFubmVsIGZvciAlZCBoYXMgZ29uZScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJSBjaGFubmVsX2lkKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5f
bG9naWNhbF9jaGFubmVsc19jb25kaXRpb24ucmVsZWFzZSgpCisKKyAgICBkZWYgc2VuZF9jb250
cm9sX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIlNlbmRzIGRhdGEgdmlhIHRoZSBjb250
cm9sIGNoYW5uZWwuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRhdGE6IGRhdGEgdG8g
YmUgc2VudC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fd3JpdGVyLnB1dF9vdXRnb2lu
Z19kYXRhKF9PdXRnb2luZ0RhdGEoCisgICAgICAgICAgICAgICAgY2hhbm5lbF9pZD1fQ09OVFJP
TF9DSEFOTkVMX0lELCBkYXRhPWRhdGEpKQorCisgICAgZGVmIHNlbmRfZGF0YShzZWxmLCBjaGFu
bmVsX2lkLCBkYXRhKToKKyAgICAgICAgIiIiU2VuZHMgZGF0YSB2aWEgZ2l2ZW4gbG9naWNhbCBj
aGFubmVsLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkKKyAgICAgICAgd29ya2VyIHRocmVhZHMu
CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGNoYW5uZWxfaWQ6IG9iamVjdGl2ZSBjaGFu
bmVsIGlkLgorICAgICAgICAgICAgZGF0YTogZGF0YSB0byBiZSBzZW50LgorICAgICAgICAiIiIK
KworICAgICAgICBzZWxmLl93cml0ZXIucHV0X291dGdvaW5nX2RhdGEoX091dGdvaW5nRGF0YSgK
KyAgICAgICAgICAgICAgICBjaGFubmVsX2lkPWNoYW5uZWxfaWQsIGRhdGE9ZGF0YSkpCisKKyAg
ICBkZWYgX3NlbmRfZHJvcF9jaGFubmVsKHNlbGYsIGNoYW5uZWxfaWQsIGNvZGU9Tm9uZSwgbWVz
c2FnZT0nJyk6CisgICAgICAgIGZyYW1lX2RhdGEgPSBfY3JlYXRlX2Ryb3BfY2hhbm5lbChjaGFu
bmVsX2lkLCBjb2RlLCBtZXNzYWdlKQorICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAg
ICAgICAgICAnU2VuZGluZyBkcm9wIGNoYW5uZWwgZm9yIGNoYW5uZWwgaWQgJWQnICUgY2hhbm5l
bF9pZCkKKyAgICAgICAgc2VsZi5zZW5kX2NvbnRyb2xfZGF0YShmcmFtZV9kYXRhKQorCisgICAg
ZGVmIF9zZW5kX2Vycm9yX2FkZF9jaGFubmVsX3Jlc3BvbnNlKHNlbGYsIGNoYW5uZWxfaWQsIHN0
YXR1cz1Ob25lKToKKyAgICAgICAgaWYgc3RhdHVzIGlzIE5vbmU6CisgICAgICAgICAgICBzdGF0
dXMgPSBjb21tb24uSFRUUF9TVEFUVVNfQkFEX1JFUVVFU1QKKworICAgICAgICBpZiBzdGF0dXMg
aW4gX0hUVFBfQkFEX1JFU1BPTlNFX01FU1NBR0VTOgorICAgICAgICAgICAgbWVzc2FnZSA9IF9I
VFRQX0JBRF9SRVNQT05TRV9NRVNTQUdFU1tzdGF0dXNdCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1Jlc3BvbnNlIG1lc3NhZ2UgZm9yICVkIGlzIG5vdCBm
b3VuZCcgJSBzdGF0dXMpCisgICAgICAgICAgICBtZXNzYWdlID0gJz8/PycKKworICAgICAgICBy
ZXNwb25zZSA9ICdIVFRQLzEuMSAlZCAlc1xyXG5cclxuJyAlIChzdGF0dXMsIG1lc3NhZ2UpCisg
ICAgICAgIGZyYW1lX2RhdGEgPSBfY3JlYXRlX2FkZF9jaGFubmVsX3Jlc3BvbnNlKGNoYW5uZWxf
aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu
Y29kZWRfaGFuZHNoYWtlPXJlc3BvbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0wLCByZWplY3RlZD1UcnVlKQorICAgICAgICBz
ZWxmLnNlbmRfY29udHJvbF9kYXRhKGZyYW1lX2RhdGEpCisKKyAgICBkZWYgX2NyZWF0ZV9sb2dp
Y2FsX3JlcXVlc3Qoc2VsZiwgYmxvY2spOgorICAgICAgICBpZiBibG9jay5jaGFubmVsX2lkID09
IF9DT05UUk9MX0NIQU5ORUxfSUQ6CisgICAgICAgICAgICAjIFRPRE8oYmFzaGkpOiBSYWlzZSBQ
aHlzaWNhbENvbm5lY3Rpb25FcnJvciB3aXRoIGNvZGUgMjAwNgorICAgICAgICAgICAgIyBpbnN0
ZWFkIG9mIE11eFVuZXhwZWN0ZWRFeGNlcHRpb24uCisgICAgICAgICAgICByYWlzZSBNdXhVbmV4
cGVjdGVkRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdSZWNlaXZlZCB0aGUgY29udHJvbCBj
aGFubmVsIGlkICgwKSBhcyBvYmplY3RpdmUgY2hhbm5lbCAnCisgICAgICAgICAgICAgICAgJ2lk
IGZvciBBZGRDaGFubmVsJykKKworICAgICAgICBpZiBibG9jay5lbmNvZGluZyA+IF9IQU5EU0hB
S0VfRU5DT0RJTkdfREVMVEE6CisgICAgICAgICAgICByYWlzZSBQaHlzaWNhbENvbm5lY3Rpb25F
cnJvcigKKyAgICAgICAgICAgICAgICBfRFJPUF9DT0RFX1VOS05PV05fUkVRVUVTVF9FTkNPRElO
RykKKworICAgICAgICBtZXRob2QsIHBhdGgsIHZlcnNpb24sIGhlYWRlcnMgPSBfcGFyc2VfcmVx
dWVzdF90ZXh0KAorICAgICAgICAgICAgYmxvY2suZW5jb2RlZF9oYW5kc2hha2UpCisgICAgICAg
IGlmIGJsb2NrLmVuY29kaW5nID09IF9IQU5EU0hBS0VfRU5DT0RJTkdfREVMVEE6CisgICAgICAg
ICAgICBoZWFkZXJzID0gc2VsZi5faGFuZHNoYWtlX2Jhc2UuY3JlYXRlX2hlYWRlcnMoaGVhZGVy
cykKKworICAgICAgICBjb25uZWN0aW9uID0gX0xvZ2ljYWxDb25uZWN0aW9uKHNlbGYsIGJsb2Nr
LmNoYW5uZWxfaWQpCisgICAgICAgIHJlcXVlc3QgPSBfTG9naWNhbFJlcXVlc3QoYmxvY2suY2hh
bm5lbF9pZCwgbWV0aG9kLCBwYXRoLCB2ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlYWRlcnMsIGNvbm5lY3Rpb24pCisgICAgICAgIHJldHVybiByZXF1ZXN0CisK
KyAgICBkZWYgX2RvX2hhbmRzaGFrZV9mb3JfbG9naWNhbF9yZXF1ZXN0KHNlbGYsIHJlcXVlc3Qs
IHNlbmRfcXVvdGE9MCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlY2VpdmVfcXVvdGEg
PSBzZWxmLl9jaGFubmVsX3Nsb3RzLnBvcGxlZnQoKQorICAgICAgICBleGNlcHQgSW5kZXhFcnJv
cjoKKyAgICAgICAgICAgIHJhaXNlIExvZ2ljYWxDaGFubmVsRXJyb3IoCisgICAgICAgICAgICAg
ICAgcmVxdWVzdC5jaGFubmVsX2lkLCBfRFJPUF9DT0RFX05FV19DSEFOTkVMX1NMT1RfVklPTEFU
SU9OKQorCisgICAgICAgIGhhbmRzaGFrZXIgPSBfTXV4SGFuZHNoYWtlcihyZXF1ZXN0LCBzZWxm
LmRpc3BhdGNoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kX3F1
b3RhLCByZWNlaXZlX3F1b3RhKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBoYW5kc2hha2Vy
LmRvX2hhbmRzaGFrZSgpCisgICAgICAgIGV4Y2VwdCBoYW5kc2hha2UuVmVyc2lvbkV4Y2VwdGlv
biwgZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCclcycsIGUpCisgICAgICAgICAg
ICBzZWxmLl9zZW5kX2Vycm9yX2FkZF9jaGFubmVsX3Jlc3BvbnNlKAorICAgICAgICAgICAgICAg
IHJlcXVlc3QuY2hhbm5lbF9pZCwgc3RhdHVzPWNvbW1vbi5IVFRQX1NUQVRVU19CQURfUkVRVUVT
VCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgaGFuZHNoYWtlLkhh
bmRzaGFrZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICMgVE9ETyhiYXNoaSk6IFNob3VsZCB3
ZSBfRmFpbCB0aGUgTG9naWNhbCBDaGFubmVsXyB3aXRoIDMwMDEKKyAgICAgICAgICAgICMgaW5z
dGVhZD8KKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCclcycsIGUpCisgICAgICAgICAg
ICBzZWxmLl9zZW5kX2Vycm9yX2FkZF9jaGFubmVsX3Jlc3BvbnNlKHJlcXVlc3QuY2hhbm5lbF9p
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dHVzPWUuc3RhdHVzKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBo
YW5kc2hha2UuQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuX2xv
Z2dlci5pbmZvKCclcycsIGUpCisgICAgICAgICAgICBzZWxmLl9zZW5kX2Vycm9yX2FkZF9jaGFu
bmVsX3Jlc3BvbnNlKHJlcXVlc3QuY2hhbm5lbF9pZCkKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2FkZF9sb2dpY2FsX2NoYW5uZWwo
c2VsZiwgbG9naWNhbF9yZXF1ZXN0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5f
bG9naWNhbF9jaGFubmVsc19jb25kaXRpb24uYWNxdWlyZSgpCisgICAgICAgICAgICBpZiBsb2dp
Y2FsX3JlcXVlc3QuY2hhbm5lbF9pZCBpbiBzZWxmLl9sb2dpY2FsX2NoYW5uZWxzOgorICAgICAg
ICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnQ2hhbm5lbCBpZCAlZCBhbHJlYWR5IGV4aXN0
cycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsX3JlcXVlc3Qu
Y2hhbm5lbF9pZCkKKyAgICAgICAgICAgICAgICByYWlzZSBQaHlzaWNhbENvbm5lY3Rpb25FcnJv
cigKKyAgICAgICAgICAgICAgICAgICAgX0RST1BfQ09ERV9DSEFOTkVMX0FMUkVBRFlfRVhJU1RT
LAorICAgICAgICAgICAgICAgICAgICAnQ2hhbm5lbCBpZCAlZCBhbHJlYWR5IGV4aXN0cycgJQor
ICAgICAgICAgICAgICAgICAgICBsb2dpY2FsX3JlcXVlc3QuY2hhbm5lbF9pZCkKKyAgICAgICAg
ICAgIHdvcmtlciA9IF9Xb3JrZXIoc2VsZiwgbG9naWNhbF9yZXF1ZXN0KQorICAgICAgICAgICAg
Y2hhbm5lbF9kYXRhID0gX0xvZ2ljYWxDaGFubmVsRGF0YShsb2dpY2FsX3JlcXVlc3QsIHdvcmtl
cikKKyAgICAgICAgICAgIHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNbbG9naWNhbF9yZXF1ZXN0LmNo
YW5uZWxfaWRdID0gY2hhbm5lbF9kYXRhCisgICAgICAgICAgICB3b3JrZXIuc3RhcnQoKQorICAg
ICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fbG9naWNhbF9jaGFubmVsc19jb25kaXRp
b24ucmVsZWFzZSgpCisKKyAgICBkZWYgX3Byb2Nlc3NfYWRkX2NoYW5uZWxfcmVxdWVzdChzZWxm
LCBibG9jayk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvZ2ljYWxfcmVxdWVzdCA9IHNl
bGYuX2NyZWF0ZV9sb2dpY2FsX3JlcXVlc3QoYmxvY2spCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVy
cm9yLCBlOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gY3JlYXRl
IGxvZ2ljYWwgcmVxdWVzdDogJXInICUgZSkKKyAgICAgICAgICAgIHNlbGYuX3NlbmRfZXJyb3Jf
YWRkX2NoYW5uZWxfcmVzcG9uc2UoCisgICAgICAgICAgICAgICAgYmxvY2suY2hhbm5lbF9pZCwg
c3RhdHVzPWNvbW1vbi5IVFRQX1NUQVRVU19CQURfUkVRVUVTVCkKKyAgICAgICAgICAgIHJldHVy
bgorICAgICAgICBpZiBzZWxmLl9kb19oYW5kc2hha2VfZm9yX2xvZ2ljYWxfcmVxdWVzdChsb2dp
Y2FsX3JlcXVlc3QpOgorICAgICAgICAgICAgaWYgYmxvY2suZW5jb2RpbmcgPT0gX0hBTkRTSEFL
RV9FTkNPRElOR19JREVOVElUWToKKyAgICAgICAgICAgICAgICAjIFVwZGF0ZSBoYW5kc2hha2Ug
YmFzZS4KKyAgICAgICAgICAgICAgICAjIFRPRE8oYmFzaGkpOiBNYWtlIHN1cmUgdGhpcyBpcyB0
aGUgcmlnaHQgcGxhY2UgdG8gdXBkYXRlCisgICAgICAgICAgICAgICAgIyBoYW5kc2hha2UgYmFz
ZS4KKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kc2hha2VfYmFzZSA9IF9IYW5kc2hha2VEZWx0
YUJhc2UoCisgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxfcmVxdWVzdC5oZWFkZXJzX2luKQor
ICAgICAgICAgICAgc2VsZi5fYWRkX2xvZ2ljYWxfY2hhbm5lbChsb2dpY2FsX3JlcXVlc3QpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zZW5kX2Vycm9yX2FkZF9jaGFubmVsX3Jl
c3BvbnNlKAorICAgICAgICAgICAgICAgIGJsb2NrLmNoYW5uZWxfaWQsIHN0YXR1cz1jb21tb24u
SFRUUF9TVEFUVVNfQkFEX1JFUVVFU1QpCisKKyAgICBkZWYgX3Byb2Nlc3NfZmxvd19jb250cm9s
KHNlbGYsIGJsb2NrKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fbG9naWNhbF9j
aGFubmVsc19jb25kaXRpb24uYWNxdWlyZSgpCisgICAgICAgICAgICBpZiBub3QgYmxvY2suY2hh
bm5lbF9pZCBpbiBzZWxmLl9sb2dpY2FsX2NoYW5uZWxzOgorICAgICAgICAgICAgICAgIHJldHVy
bgorICAgICAgICAgICAgY2hhbm5lbF9kYXRhID0gc2VsZi5fbG9naWNhbF9jaGFubmVsc1tibG9j
ay5jaGFubmVsX2lkXQorICAgICAgICAgICAgY2hhbm5lbF9kYXRhLnJlcXVlc3Qud3Nfc3RyZWFt
LnJlcGxlbmlzaF9zZW5kX3F1b3RhKAorICAgICAgICAgICAgICAgIGJsb2NrLnNlbmRfcXVvdGEp
CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9sb2dpY2FsX2NoYW5uZWxzX2Nv
bmRpdGlvbi5yZWxlYXNlKCkKKworICAgIGRlZiBfcHJvY2Vzc19kcm9wX2NoYW5uZWwoc2VsZiwg
YmxvY2spOgorICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAnRHJvcENo
YW5uZWwgcmVjZWl2ZWQgZm9yICVkOiBjb2RlPSVyLCByZWFzb249JXInICUKKyAgICAgICAgICAg
IChibG9jay5jaGFubmVsX2lkLCBibG9jay5kcm9wX2NvZGUsIGJsb2NrLmRyb3BfbWVzc2FnZSkp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNfY29uZGl0
aW9uLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgbm90IGJsb2NrLmNoYW5uZWxfaWQgaW4gc2Vs
Zi5fbG9naWNhbF9jaGFubmVsczoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAg
IGNoYW5uZWxfZGF0YSA9IHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNbYmxvY2suY2hhbm5lbF9pZF0K
KyAgICAgICAgICAgIGNoYW5uZWxfZGF0YS5kcm9wX2NvZGUgPSBfRFJPUF9DT0RFX0FDS05PV0xF
REdFRAorCisgICAgICAgICAgICAjIENsb3NlIHRoZSBsb2dpY2FsIGNoYW5uZWwKKyAgICAgICAg
ICAgIGNoYW5uZWxfZGF0YS5yZXF1ZXN0LmNvbm5lY3Rpb24uc2V0X3JlYWRfc3RhdGUoCisgICAg
ICAgICAgICAgICAgX0xvZ2ljYWxDb25uZWN0aW9uLlNUQVRFX1RFUk1JTkFURUQpCisgICAgICAg
ICAgICBjaGFubmVsX2RhdGEucmVxdWVzdC53c19zdHJlYW0uc3RvcF9zZW5kaW5nKCkKKyAgICAg
ICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNfY29uZGl0aW9u
LnJlbGVhc2UoKQorCisgICAgZGVmIF9wcm9jZXNzX2NvbnRyb2xfYmxvY2tzKHNlbGYsIHBhcnNl
cik6CisgICAgICAgIGZvciBjb250cm9sX2Jsb2NrIGluIHBhcnNlci5yZWFkX2NvbnRyb2xfYmxv
Y2tzKCk6CisgICAgICAgICAgICBvcGNvZGUgPSBjb250cm9sX2Jsb2NrLm9wY29kZQorICAgICAg
ICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdjb250cm9sIGJsb2NrIHJlY2VpdmVkLCBvcGNvZGU6
ICVkJyAlIG9wY29kZSkKKyAgICAgICAgICAgIGlmIG9wY29kZSA9PSBfTVVYX09QQ09ERV9BRERf
Q0hBTk5FTF9SRVFVRVNUOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3NfYWRkX2NoYW5u
ZWxfcmVxdWVzdChjb250cm9sX2Jsb2NrKQorICAgICAgICAgICAgZWxpZiBvcGNvZGUgPT0gX01V
WF9PUENPREVfQUREX0NIQU5ORUxfUkVTUE9OU0U6CisgICAgICAgICAgICAgICAgcmFpc2UgUGh5
c2ljYWxDb25uZWN0aW9uRXJyb3IoCisgICAgICAgICAgICAgICAgICAgIF9EUk9QX0NPREVfSU5W
QUxJRF9NVVhfQ09OVFJPTF9CTE9DSywKKyAgICAgICAgICAgICAgICAgICAgJ1JlY2VpdmVkIEFk
ZENoYW5uZWxSZXNwb25zZScpCisgICAgICAgICAgICBlbGlmIG9wY29kZSA9PSBfTVVYX09QQ09E
RV9GTE9XX0NPTlRST0w6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc19mbG93X2NvbnRy
b2woY29udHJvbF9ibG9jaykKKyAgICAgICAgICAgIGVsaWYgb3Bjb2RlID09IF9NVVhfT1BDT0RF
X0RST1BfQ0hBTk5FTDoKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm9jZXNzX2Ryb3BfY2hhbm5l
bChjb250cm9sX2Jsb2NrKQorICAgICAgICAgICAgZWxpZiBvcGNvZGUgPT0gX01VWF9PUENPREVf
TkVXX0NIQU5ORUxfU0xPVDoKKyAgICAgICAgICAgICAgICByYWlzZSBQaHlzaWNhbENvbm5lY3Rp
b25FcnJvcigKKyAgICAgICAgICAgICAgICAgICAgX0RST1BfQ09ERV9JTlZBTElEX01VWF9DT05U
Uk9MX0JMT0NLLAorICAgICAgICAgICAgICAgICAgICAnUmVjZWl2ZWQgTmV3Q2hhbm5lbFNsb3Qn
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBNdXhVbmV4cGVjdGVk
RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBvcGNvZGUgJXInICUg
b3Bjb2RlKQorCisgICAgZGVmIF9wcm9jZXNzX2xvZ2ljYWxfZnJhbWUoc2VsZiwgY2hhbm5lbF9p
ZCwgcGFyc2VyKToKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdSZWNlaXZlZCBhIGZyYW1l
LiBjaGFubmVsIGlkPSVkJyAlIGNoYW5uZWxfaWQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNfY29uZGl0aW9uLmFjcXVpcmUoKQorICAgICAgICAgICAg
aWYgbm90IGNoYW5uZWxfaWQgaW4gc2VsZi5fbG9naWNhbF9jaGFubmVsczoKKyAgICAgICAgICAg
ICAgICAjIFdlIG11c3QgaWdub3JlIHRoZSBtZXNzYWdlIGZvciBhbiBpbmFjdGl2ZSBjaGFubmVs
LgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgY2hhbm5lbF9kYXRhID0gc2Vs
Zi5fbG9naWNhbF9jaGFubmVsc1tjaGFubmVsX2lkXQorICAgICAgICAgICAgZmluLCByc3YxLCBy
c3YyLCByc3YzLCBvcGNvZGUsIHBheWxvYWQgPSBwYXJzZXIucmVhZF9pbm5lcl9mcmFtZSgpCisg
ICAgICAgICAgICBjb25zdW1pbmdfYnl0ZSA9IGxlbihwYXlsb2FkKQorICAgICAgICAgICAgaWYg
b3Bjb2RlICE9IGNvbW1vbi5PUENPREVfQ09OVElOVUFUSU9OOgorICAgICAgICAgICAgICAgIGNv
bnN1bWluZ19ieXRlICs9IDEKKyAgICAgICAgICAgIGlmIG5vdCBjaGFubmVsX2RhdGEucmVxdWVz
dC53c19zdHJlYW0uY29uc3VtZV9yZWNlaXZlX3F1b3RhKAorICAgICAgICAgICAgICAgIGNvbnN1
bWluZ19ieXRlKToKKyAgICAgICAgICAgICAgICAjIFRoZSBjbGllbnQgdmlvbGF0ZXMgcXVvdGEu
IENsb3NlIGxvZ2ljYWwgY2hhbm5lbC4KKyAgICAgICAgICAgICAgICByYWlzZSBMb2dpY2FsQ2hh
bm5lbEVycm9yKAorICAgICAgICAgICAgICAgICAgICBjaGFubmVsX2lkLCBfRFJPUF9DT0RFX1NF
TkRfUVVPVEFfVklPTEFUSU9OKQorICAgICAgICAgICAgaGVhZGVyID0gY3JlYXRlX2hlYWRlcihv
cGNvZGUsIGxlbihwYXlsb2FkKSwgZmluLCByc3YxLCByc3YyLCByc3YzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXNrPUZhbHNlKQorICAgICAgICAgICAgZnJhbWVfZGF0
YSA9IGhlYWRlciArIHBheWxvYWQKKyAgICAgICAgICAgIGNoYW5uZWxfZGF0YS5yZXF1ZXN0LmNv
bm5lY3Rpb24uYXBwZW5kX2ZyYW1lX2RhdGEoZnJhbWVfZGF0YSkKKyAgICAgICAgZmluYWxseToK
KyAgICAgICAgICAgIHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNfY29uZGl0aW9uLnJlbGVhc2UoKQor
CisgICAgZGVmIGRpc3BhdGNoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICIiIkRp
c3BhdGNoZXMgbWVzc2FnZS4gVGhlIHJlYWRlciB0aHJlYWQgY2FsbHMgdGhpcyBtZXRob2QuCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG1lc3NhZ2U6IGEgbWVzc2FnZSB0aGF0IGNvbnRh
aW5zIGVuY2Fwc3VsYXRlZCBmcmFtZS4KKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgUGh5
c2ljYWxDb25uZWN0aW9uRXJyb3I6IGlmIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHBoeXNpY2FsCisg
ICAgICAgICAgICAgICAgY29ubmVjdGlvbiBsZXZlbCBlcnJvcnMuCisgICAgICAgICAgICBMb2dp
Y2FsQ2hhbm5lbEVycm9yOiBpZiB0aGUgbWVzc2FnZSBjb250YWlucyBsb2dpY2FsIGNoYW5uZWwK
KyAgICAgICAgICAgICAgICBsZXZlbCBlcnJvcnMuCisgICAgICAgICIiIgorCisgICAgICAgIHBh
cnNlciA9IF9NdXhGcmFtZVBheWxvYWRQYXJzZXIobWVzc2FnZSkKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgY2hhbm5lbF9pZCA9IHBhcnNlci5yZWFkX2NoYW5uZWxfaWQoKQorICAgICAgICBl
eGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgICAgIHJhaXNlIFBoeXNpY2FsQ29ubmVjdGlv
bkVycm9yKF9EUk9QX0NPREVfQ0hBTk5FTF9JRF9UUlVOQ0FURUQpCisgICAgICAgIGlmIGNoYW5u
ZWxfaWQgPT0gX0NPTlRST0xfQ0hBTk5FTF9JRDoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Nf
Y29udHJvbF9ibG9ja3MocGFyc2VyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5f
cHJvY2Vzc19sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQsIHBhcnNlcikKKworICAgIGRlZiBub3Rp
Znlfd29ya2VyX2RvbmUoc2VsZiwgY2hhbm5lbF9pZCk6CisgICAgICAgICIiIkNhbGxlZCB3aGVu
IGEgd29ya2VyIGhhcyBmaW5pc2hlZC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgY2hh
bm5lbF9pZDogY2hhbm5lbCBpZCBjb3JyZXNwb25kZWQgd2l0aCB0aGUgd29ya2VyLgorICAgICAg
ICAiIiIKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1dvcmtlciBmb3IgY2hhbm5lbCBp
ZCAlZCB0ZXJtaW5hdGVkJyAlIGNoYW5uZWxfaWQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNfY29uZGl0aW9uLmFjcXVpcmUoKQorICAgICAgICAgICAg
aWYgbm90IGNoYW5uZWxfaWQgaW4gc2VsZi5fbG9naWNhbF9jaGFubmVsczoKKyAgICAgICAgICAg
ICAgICByYWlzZSBNdXhVbmV4cGVjdGVkRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAn
Q2hhbm5lbCBpZCAlZCBub3QgZm91bmQnICUgY2hhbm5lbF9pZCkKKyAgICAgICAgICAgIGNoYW5u
ZWxfZGF0YSA9IHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHMucG9wKGNoYW5uZWxfaWQpCisgICAgICAg
IGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl93b3JrZXJfZG9uZV9ub3RpZnlfcmVjZWl2ZWQg
PSBUcnVlCisgICAgICAgICAgICBzZWxmLl9sb2dpY2FsX2NoYW5uZWxzX2NvbmRpdGlvbi5ub3Rp
ZnkoKQorICAgICAgICAgICAgc2VsZi5fbG9naWNhbF9jaGFubmVsc19jb25kaXRpb24ucmVsZWFz
ZSgpCisKKyAgICAgICAgaWYgbm90IGNoYW5uZWxfZGF0YS5yZXF1ZXN0LnNlcnZlcl90ZXJtaW5h
dGVkOgorICAgICAgICAgICAgc2VsZi5fc2VuZF9kcm9wX2NoYW5uZWwoCisgICAgICAgICAgICAg
ICAgY2hhbm5lbF9pZCwgY29kZT1jaGFubmVsX2RhdGEuZHJvcF9jb2RlLAorICAgICAgICAgICAg
ICAgIG1lc3NhZ2U9Y2hhbm5lbF9kYXRhLmRyb3BfbWVzc2FnZSkKKworICAgIGRlZiBub3RpZnlf
cmVhZGVyX2RvbmUoc2VsZik6CisgICAgICAgICIiIlRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0
aGUgcmVhZGVyIHRocmVhZCB3aGVuIHRoZSByZWFkZXIgaGFzCisgICAgICAgIGZpbmlzaGVkLgor
ICAgICAgICAiIiIKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAn
VGVybWlhdGluZyBhbGwgbG9naWNhbCBjb25uZWN0aW9ucyB3YWl0aW5nIGZvciBpbmNvbWluZyBk
YXRhICcKKyAgICAgICAgICAgICcuLi4nKQorICAgICAgICBzZWxmLl9sb2dpY2FsX2NoYW5uZWxz
X2NvbmRpdGlvbi5hY3F1aXJlKCkKKyAgICAgICAgZm9yIGNoYW5uZWxfZGF0YSBpbiBzZWxmLl9s
b2dpY2FsX2NoYW5uZWxzLnZhbHVlcygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIGNoYW5uZWxfZGF0YS5yZXF1ZXN0LmNvbm5lY3Rpb24uc2V0X3JlYWRfc3RhdGUoCisgICAg
ICAgICAgICAgICAgICAgIF9Mb2dpY2FsQ29ubmVjdGlvbi5TVEFURV9URVJNSU5BVEVEKQorICAg
ICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIu
ZGVidWcodHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgc2VsZi5fbG9naWNhbF9jaGFu
bmVsc19jb25kaXRpb24ucmVsZWFzZSgpCisKKyAgICBkZWYgbm90aWZ5X3dyaXRlcl9kb25lKHNl
bGYpOgorICAgICAgICAiIiJUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIHdyaXRlciB0aHJl
YWQgd2hlbiB0aGUgd3JpdGVyIGhhcworICAgICAgICBmaW5pc2hlZC4KKyAgICAgICAgIiIiCisK
KyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgJ1Rlcm1pYXRpbmcgYWxs
IGxvZ2ljYWwgY29ubmVjdGlvbnMgd2FpdGluZyBmb3Igd3JpdGUgJworICAgICAgICAgICAgJ2Nv
bXBsZXRpb24gLi4uJykKKyAgICAgICAgc2VsZi5fbG9naWNhbF9jaGFubmVsc19jb25kaXRpb24u
YWNxdWlyZSgpCisgICAgICAgIGZvciBjaGFubmVsX2RhdGEgaW4gc2VsZi5fbG9naWNhbF9jaGFu
bmVscy52YWx1ZXMoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjaGFubmVs
X2RhdGEucmVxdWVzdC5jb25uZWN0aW9uLm9uX3dyaXRlcl9kb25lKCkKKyAgICAgICAgICAgIGV4
Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKHRyYWNl
YmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgIHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNfY29uZGl0
aW9uLnJlbGVhc2UoKQorCisgICAgZGVmIGZhaWxfcGh5c2ljYWxfY29ubmVjdGlvbihzZWxmLCBj
b2RlLCBtZXNzYWdlKToKKyAgICAgICAgIiIiRmFpbCB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbi4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgICAgY29kZTogZHJvcCByZWFzb24gY29kZS4KKyAg
ICAgICAgICAgIG1lc3NhZ2U6IGRyb3AgbWVzc2FnZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAg
c2VsZi5fbG9nZ2VyLmRlYnVnKCdGYWlsaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uLi4uJykK
KyAgICAgICAgc2VsZi5fc2VuZF9kcm9wX2NoYW5uZWwoX0NPTlRST0xfQ0hBTk5FTF9JRCwgY29k
ZSwgbWVzc2FnZSkKKyAgICAgICAgc2VsZi5fd3JpdGVyLnN0b3AoY29tbW9uLlNUQVRVU19JTlRF
Uk5BTF9FTkRQT0lOVF9FUlJPUikKKworICAgIGRlZiBmYWlsX2xvZ2ljYWxfY2hhbm5lbChzZWxm
LCBjaGFubmVsX2lkLCBjb2RlLCBtZXNzYWdlKToKKyAgICAgICAgIiIiRmFpbCBhIGxvZ2ljYWwg
Y2hhbm5lbC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgY2hhbm5lbF9pZDogY2hhbm5l
bCBpZC4KKyAgICAgICAgICAgIGNvZGU6IGRyb3AgcmVhc29uIGNvZGUuCisgICAgICAgICAgICBt
ZXNzYWdlOiBkcm9wIG1lc3NhZ2UuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX2xvZ2dl
ci5kZWJ1ZygnRmFpbGluZyBsb2dpY2FsIGNoYW5uZWwgJWQuLi4nICUgY2hhbm5lbF9pZCkKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fbG9naWNhbF9jaGFubmVsc19jb25kaXRpb24u
YWNxdWlyZSgpCisgICAgICAgICAgICBpZiBjaGFubmVsX2lkIGluIHNlbGYuX2xvZ2ljYWxfY2hh
bm5lbHM6CisgICAgICAgICAgICAgICAgY2hhbm5lbF9kYXRhID0gc2VsZi5fbG9naWNhbF9jaGFu
bmVsc1tjaGFubmVsX2lkXQorICAgICAgICAgICAgICAgICMgQ2xvc2UgdGhlIGxvZ2ljYWwgY2hh
bm5lbC4gbm90aWZ5X3dvcmtlcl9kb25lKCkgd2lsbCBiZQorICAgICAgICAgICAgICAgICMgY2Fs
bGVkIGxhdGVyIGFuZCBpdCB3aWxsIHNlbmQgRHJvcENoYW5uZWwuCisgICAgICAgICAgICAgICAg
Y2hhbm5lbF9kYXRhLmRyb3BfY29kZSA9IGNvZGUKKyAgICAgICAgICAgICAgICBjaGFubmVsX2Rh
dGEuZHJvcF9tZXNzYWdlID0gbWVzc2FnZQorCisgICAgICAgICAgICAgICAgY2hhbm5lbF9kYXRh
LnJlcXVlc3QuY29ubmVjdGlvbi5zZXRfcmVhZF9zdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAg
X0xvZ2ljYWxDb25uZWN0aW9uLlNUQVRFX1RFUk1JTkFURUQpCisgICAgICAgICAgICAgICAgY2hh
bm5lbF9kYXRhLnJlcXVlc3Qud3Nfc3RyZWFtLnN0b3Bfc2VuZGluZygpCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NlbmRfZHJvcF9jaGFubmVsKGNoYW5uZWxfaWQs
IGNvZGUsIG1lc3NhZ2UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9sb2dp
Y2FsX2NoYW5uZWxzX2NvbmRpdGlvbi5yZWxlYXNlKCkKKworCitkZWYgdXNlX211eChyZXF1ZXN0
KToKKyAgICByZXR1cm4gaGFzYXR0cihyZXF1ZXN0LCAnbXV4X3Byb2Nlc3NvcicpIGFuZCAoCisg
ICAgICAgIHJlcXVlc3QubXV4X3Byb2Nlc3Nvci5pc19hY3RpdmUoKSkKKworCitkZWYgc3RhcnQo
cmVxdWVzdCwgZGlzcGF0Y2hlcik6CisgICAgbXV4X2hhbmRsZXIgPSBfTXV4SGFuZGxlcihyZXF1
ZXN0LCBkaXNwYXRjaGVyKQorICAgIG11eF9oYW5kbGVyLnN0YXJ0KCkKKworICAgIG11eF9oYW5k
bGVyLmFkZF9jaGFubmVsX3Nsb3RzKF9JTklUSUFMX05VTUJFUl9PRl9DSEFOTkVMX1NMT1RTLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JTklUSUFMX1FVT1RBX0ZPUl9DTElF
TlQpCisKKyAgICBtdXhfaGFuZGxlci53YWl0X3VudGlsX2RvbmUoKQorCisKKyMgdmk6c3RzPTQg
c3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvc3RhbmRhbG9uZS5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdl
YnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWRj
YjdiNjcwMDNlZGYyNDQxYjdlMjNlOTU2MDZmY2Q4NDFlZTg5YgotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNv
Y2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKQEAgLTAsMCArMSwxMjQyIEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMTIsIEdvb2dsZSBJbmMu
CisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlN0YW5k
YWxvbmUgV2ViU29ja2V0IHNlcnZlci4KKworVXNlIHRoaXMgZmlsZSB0byBsYXVuY2ggcHl3ZWJz
b2NrZXQgd2l0aG91dCBBcGFjaGUgSFRUUCBTZXJ2ZXIuCisKKworQkFTSUMgVVNBR0UKKworR28g
dG8gdGhlIHNyYyBkaXJlY3RvcnkgYW5kIHJ1bgorCisgICQgcHl0aG9uIG1vZF9weXdlYnNvY2tl
dC9zdGFuZGFsb25lLnB5IFstcCA8d3NfcG9ydD5dCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFstdyA8d2Vic29ja19oYW5kbGVycz5dCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFstZCA8ZG9jdW1lbnRfcm9vdD5dCisKKzx3c19wb3J0
PiBpcyB0aGUgcG9ydCBudW1iZXIgdG8gdXNlIGZvciB3czovLyBjb25uZWN0aW9uLgorCis8ZG9j
dW1lbnRfcm9vdD4gaXMgdGhlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIEhUTUwgZmls
ZXMuCisKKzx3ZWJzb2NrX2hhbmRsZXJzPiBpcyB0aGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rv
cnkgb2YgV2ViU29ja2V0IGhhbmRsZXJzLgorSWYgbm90IHNwZWNpZmllZCwgPGRvY3VtZW50X3Jv
b3Q+IHdpbGwgYmUgdXNlZC4gU2VlIF9faW5pdF9fLnB5IChvcgorcnVuICQgcHlkb2MgbW9kX3B5
d2Vic29ja2V0KSBmb3IgaG93IHRvIHdyaXRlIFdlYlNvY2tldCBoYW5kbGVycy4KKworRm9yIG1v
cmUgZGV0YWlsIGFuZCBvdGhlciBvcHRpb25zLCBydW4KKworICAkIHB5dGhvbiBtb2RfcHl3ZWJz
b2NrZXQvc3RhbmRhbG9uZS5weSAtLWhlbHAKKworb3Igc2VlIF9idWlsZF9vcHRpb25fcGFyc2Vy
IG1ldGhvZCBiZWxvdy4KKworRm9yIHRyb3VibGUgc2hvb3RpbmcsIGFkZGluZyAiLS1sb2dfbGV2
ZWwgZGVidWciIG1pZ2h0IGhlbHAgeW91LgorCisKK1RSWSBERU1PCisKK0dvIHRvIHRoZSBzcmMg
ZGlyZWN0b3J5IGFuZCBydW4KKworICAkIHB5dGhvbiBzdGFuZGFsb25lLnB5IC1kIGV4YW1wbGUK
KwordG8gbGF1bmNoIHB5d2Vic29ja2V0IHdpdGggdGhlIHNhbXBsZSBoYW5kbGVyIGFuZCBodG1s
IG9uIHBvcnQgODAuIE9wZW4KK2h0dHA6Ly9sb2NhbGhvc3QvY29uc29sZS5odG1sLCBjbGljayB0
aGUgY29ubmVjdCBidXR0b24sIHR5cGUgc29tZXRoaW5nIGludG8KK3RoZSB0ZXh0IGJveCBuZXh0
IHRvIHRoZSBzZW5kIGJ1dHRvbiBhbmQgY2xpY2sgdGhlIHNlbmQgYnV0dG9uLiBJZiBldmVyeXRo
aW5nCitpcyB3b3JraW5nLCB5b3UnbGwgc2VlIHRoZSBtZXNzYWdlIHlvdSB0eXBlZCBlY2hvZWQg
YnkgdGhlIHNlcnZlci4KKworCitTVVBQT1JUSU5HIFRMUworCitUbyBzdXBwb3J0IFRMUywgcnVu
IHN0YW5kYWxvbmUucHkgd2l0aCAtdCwgLWssIGFuZCAtYyBvcHRpb25zLgorCitOb3RlIHRoYXQg
d2hlbiBzc2wgbW9kdWxlIGlzIHVzZWQgYW5kIHRoZSBrZXkvY2VydCBsb2NhdGlvbiBpcyBpbmNv
cnJlY3QsCitUTFMgY29ubmVjdGlvbiBzaWxlbnRseSBmYWlscyB3aGlsZSBweU9wZW5TU0wgZmFp
bHMgb24gc3RhcnR1cC4KKworCitTVVBQT1JUSU5HIENMSUVOVCBBVVRIRU5USUNBVElPTgorCitU
byBzdXBwb3J0IGNsaWVudCBhdXRoZW50aWNhdGlvbiB3aXRoIFRMUywgcnVuIHN0YW5kYWxvbmUu
cHkgd2l0aCAtdCwgLWssIC1jLAorYW5kIC0tdGxzLWNsaWVudC1hdXRoLCBhbmQgLS10bHMtY2xp
ZW50LWNhIG9wdGlvbnMuCisKK0UuZy4sICQuL3N0YW5kYWxvbmUucHkgLWQgLi4vZXhhbXBsZSAt
cCAxMDQ0MyAtdCAtYyAuLi90ZXN0L2NlcnQvY2VydC5wZW0gLWsKKy4uL3Rlc3QvY2VydC9rZXku
cGVtIC0tdGxzLWNsaWVudC1hdXRoIC0tdGxzLWNsaWVudC1jYT0uLi90ZXN0L2NlcnQvY2FjZXJ0
LnBlbQorCisKK0NPTkZJR1VSQVRJT04gRklMRQorCitZb3UgY2FuIGFsc28gd3JpdGUgYSBjb25m
aWd1cmF0aW9uIGZpbGUgYW5kIHVzZSBpdCBieSBzcGVjaWZ5aW5nIHRoZSBwYXRoIHRvCit0aGUg
Y29uZmlndXJhdGlvbiBmaWxlIGJ5IC0tY29uZmlnIG9wdGlvbi4gUGxlYXNlIHdyaXRlIGEgY29u
ZmlndXJhdGlvbiBmaWxlCitmb2xsb3dpbmcgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIFB5dGhv
biBDb25maWdQYXJzZXIgbGlicmFyeS4gTmFtZSBvZiBlYWNoCitlbnRyeSBtdXN0IGJlIHRoZSBs
b25nIHZlcnNpb24gYXJndW1lbnQgbmFtZS4gRS5nLiB0byBzZXQgbG9nIGxldmVsIHRvIGRlYnVn
LAorYWRkIHRoZSBmb2xsb3dpbmcgbGluZToKKworbG9nX2xldmVsPWRlYnVnCisKK0ZvciBvcHRp
b25zIHdoaWNoIGRvZXNuJ3QgdGFrZSB2YWx1ZSwgcGxlYXNlIGFkZCBzb21lIGZha2UgdmFsdWUu
IEUuZy4gZm9yCistLXRscyBvcHRpb24sIGFkZCB0aGUgZm9sbG93aW5nIGxpbmU6CisKK3Rscz1U
cnVlCisKK05vdGUgdGhhdCB0bHMgd2lsbCBiZSBlbmFibGVkIGV2ZW4gaWYgeW91IHdyaXRlIHRs
cz1GYWxzZSBhcyB0aGUgdmFsdWUgcGFydCBpcworZmFrZS4KKworV2hlbiBib3RoIGEgY29tbWFu
ZCBsaW5lIGFyZ3VtZW50IGFuZCBhIGNvbmZpZ3VyYXRpb24gZmlsZSBlbnRyeSBhcmUgc2V0IGZv
cgordGhlIHNhbWUgY29uZmlndXJhdGlvbiBpdGVtLCB0aGUgY29tbWFuZCBsaW5lIHZhbHVlIHdp
bGwgb3ZlcnJpZGUgb25lIGluIHRoZQorY29uZmlndXJhdGlvbiBmaWxlLgorCisKK1RIUkVBRElO
RworCitUaGlzIHNlcnZlciBpcyBkZXJpdmVkIGZyb20gU29ja2V0U2VydmVyLlRocmVhZGluZ01p
eEluLiBIZW5jZSBhIHRocmVhZCBpcwordXNlZCBmb3IgZWFjaCByZXF1ZXN0LgorCisKK1NFQ1VS
SVRZIFdBUk5JTkcKKworVGhpcyB1c2VzIENHSUhUVFBTZXJ2ZXIgYW5kIENHSUhUVFBTZXJ2ZXIg
aXMgbm90IHNlY3VyZS4KK0l0IG1heSBleGVjdXRlIGFyYml0cmFyeSBQeXRob24gY29kZSBvciBl
eHRlcm5hbCBwcm9ncmFtcy4gSXQgc2hvdWxkIG5vdCBiZQordXNlZCBvdXRzaWRlIGEgZmlyZXdh
bGwuCisiIiIKKworaW1wb3J0IEJhc2VIVFRQU2VydmVyCitpbXBvcnQgQ0dJSFRUUFNlcnZlcgor
aW1wb3J0IFNpbXBsZUhUVFBTZXJ2ZXIKK2ltcG9ydCBTb2NrZXRTZXJ2ZXIKK2ltcG9ydCBDb25m
aWdQYXJzZXIKK2ltcG9ydCBiYXNlNjQKK2ltcG9ydCBodHRwbGliCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IGxvZ2dpbmcuaGFuZGxlcnMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBv
cnQgcmUKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0
aHJlYWRpbmcKK2ltcG9ydCB0aW1lCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21t
b24KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBkaXNwYXRjaAorZnJvbSBtb2RfcHl3ZWJz
b2NrZXQgaW1wb3J0IGhhbmRzaGFrZQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGh0dHBf
aGVhZGVyX3V0aWwKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBtZW1vcml6aW5nZmlsZQor
ZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IHV0aWwKKworCitfREVGQVVMVF9MT0dfTUFYX0JZ
VEVTID0gMTAyNCAqIDI1NgorX0RFRkFVTFRfTE9HX0JBQ0tVUF9DT1VOVCA9IDUKKworX0RFRkFV
TFRfUkVRVUVTVF9RVUVVRV9TSVpFID0gMTI4CisKKyMgMTAyNCBpcyBwcmFjdGljYWxseSBsYXJn
ZSBlbm91Z2ggdG8gY29udGFpbiBXZWJTb2NrZXQgaGFuZHNoYWtlIGxpbmVzLgorX01BWF9NRU1P
UklaRURfTElORVMgPSAxMDI0CisKKyMgQ29uc3RhbnRzIGZvciB0aGUgLS10bHNfbW9kdWxlIGZs
YWcuCitfVExTX0JZX1NUQU5EQVJEX01PRFVMRSA9ICdzc2wnCitfVExTX0JZX1BZT1BFTlNTTCA9
ICdweW9wZW5zc2wnCisKKworY2xhc3MgX1N0YW5kYWxvbmVDb25uZWN0aW9uKG9iamVjdCk6Cisg
ICAgIiIiTWltaWMgbW9kX3B5dGhvbiBtcF9jb25uLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHJlcXVlc3RfaGFuZGxlcik6CisgICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVxdWVzdF9oYW5kbGVyOiBBIFdlYlNvY2tl
dFJlcXVlc3RIYW5kbGVyIGluc3RhbmNlLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLl9y
ZXF1ZXN0X2hhbmRsZXIgPSByZXF1ZXN0X2hhbmRsZXIKKworICAgIGRlZiBnZXRfbG9jYWxfYWRk
cihzZWxmKToKKyAgICAgICAgIiIiR2V0dGVyIHRvIG1pbWljIG1wX2Nvbm4ubG9jYWxfYWRkci4i
IiIKKworICAgICAgICByZXR1cm4gKHNlbGYuX3JlcXVlc3RfaGFuZGxlci5zZXJ2ZXIuc2VydmVy
X25hbWUsCisgICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVzdF9oYW5kbGVyLnNlcnZlci5zZXJ2
ZXJfcG9ydCkKKyAgICBsb2NhbF9hZGRyID0gcHJvcGVydHkoZ2V0X2xvY2FsX2FkZHIpCisKKyAg
ICBkZWYgZ2V0X3JlbW90ZV9hZGRyKHNlbGYpOgorICAgICAgICAiIiJHZXR0ZXIgdG8gbWltaWMg
bXBfY29ubi5yZW1vdGVfYWRkci4KKworICAgICAgICBTZXR0aW5nIHRoZSBwcm9wZXJ0eSBpbiBf
X2luaXRfXyB3b24ndCB3b3JrIGJlY2F1c2UgdGhlIHJlcXVlc3QKKyAgICAgICAgaGFuZGxlciBp
cyBub3QgaW5pdGlhbGl6ZWQgeWV0IHRoZXJlLiIiIgorCisgICAgICAgIHJldHVybiBzZWxmLl9y
ZXF1ZXN0X2hhbmRsZXIuY2xpZW50X2FkZHJlc3MKKyAgICByZW1vdGVfYWRkciA9IHByb3BlcnR5
KGdldF9yZW1vdGVfYWRkcikKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAg
IiIiTWltaWMgbXBfY29ubi53cml0ZSgpLiIiIgorCisgICAgICAgIHJldHVybiBzZWxmLl9yZXF1
ZXN0X2hhbmRsZXIud2ZpbGUud3JpdGUoZGF0YSkKKworICAgIGRlZiByZWFkKHNlbGYsIGxlbmd0
aCk6CisgICAgICAgICIiIk1pbWljIG1wX2Nvbm4ucmVhZCgpLiIiIgorCisgICAgICAgIHJldHVy
biBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIucmZpbGUucmVhZChsZW5ndGgpCisKKyAgICBkZWYgZ2V0
X21lbW9yaXplZF9saW5lcyhzZWxmKToKKyAgICAgICAgIiIiR2V0IG1lbW9yaXplZCBsaW5lcy4i
IiIKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9oYW5kbGVyLnJmaWxlLmdldF9tZW1v
cml6ZWRfbGluZXMoKQorCisKK2NsYXNzIF9TdGFuZGFsb25lUmVxdWVzdChvYmplY3QpOgorICAg
ICIiIk1pbWljIG1vZF9weXRob24gcmVxdWVzdC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCByZXF1ZXN0X2hhbmRsZXIsIHVzZV90bHMpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5z
dGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlcXVlc3RfaGFuZGxlcjogQSBX
ZWJTb2NrZXRSZXF1ZXN0SGFuZGxlciBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAg
c2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisKKyAgICAgICAgc2Vs
Zi5fcmVxdWVzdF9oYW5kbGVyID0gcmVxdWVzdF9oYW5kbGVyCisgICAgICAgIHNlbGYuY29ubmVj
dGlvbiA9IF9TdGFuZGFsb25lQ29ubmVjdGlvbihyZXF1ZXN0X2hhbmRsZXIpCisgICAgICAgIHNl
bGYuX3VzZV90bHMgPSB1c2VfdGxzCisgICAgICAgIHNlbGYuaGVhZGVyc19pbiA9IHJlcXVlc3Rf
aGFuZGxlci5oZWFkZXJzCisKKyAgICBkZWYgZ2V0X3VyaShzZWxmKToKKyAgICAgICAgIiIiR2V0
dGVyIHRvIG1pbWljIHJlcXVlc3QudXJpLgorCisgICAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMg
dGhlIHJhdyBkYXRhIGF0IHRoZSBSZXF1ZXN0LVVSSSBwYXJ0IG9mIHRoZQorICAgICAgICBSZXF1
ZXN0LUxpbmUsIHdoaWxlIHRoZSB1cmkgbWV0aG9kIG9uIHRoZSByZXF1ZXN0IG9iamVjdCBvZiBt
b2RfcHl0aG9uCisgICAgICAgIHJldHVybnMgdGhlIHBhdGggcG9ydGlvbiBhZnRlciBwYXJzaW5n
IHRoZSByYXcgZGF0YS4gVGhpcyBiZWhhdmlvciBpcworICAgICAgICBrZXB0IGZvciBjb21wYXRp
YmlsaXR5LgorICAgICAgICAiIiIKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9oYW5k
bGVyLnBhdGgKKyAgICB1cmkgPSBwcm9wZXJ0eShnZXRfdXJpKQorCisgICAgZGVmIGdldF91bnBh
cnNlZF91cmkoc2VsZik6CisgICAgICAgICIiIkdldHRlciB0byBtaW1pYyByZXF1ZXN0LnVucGFy
c2VkX3VyaS4iIiIKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9oYW5kbGVyLnBhdGgK
KyAgICB1bnBhcnNlZF91cmkgPSBwcm9wZXJ0eShnZXRfdW5wYXJzZWRfdXJpKQorCisgICAgZGVm
IGdldF9tZXRob2Qoc2VsZik6CisgICAgICAgICIiIkdldHRlciB0byBtaW1pYyByZXF1ZXN0Lm1l
dGhvZC4iIiIKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9oYW5kbGVyLmNvbW1hbmQK
KyAgICBtZXRob2QgPSBwcm9wZXJ0eShnZXRfbWV0aG9kKQorCisgICAgZGVmIGdldF9wcm90b2Nv
bChzZWxmKToKKyAgICAgICAgIiIiR2V0dGVyIHRvIG1pbWljIHJlcXVlc3QucHJvdG9jb2wuIiIi
CisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcXVlc3RfaGFuZGxlci5yZXF1ZXN0X3ZlcnNpb24K
KyAgICBwcm90b2NvbCA9IHByb3BlcnR5KGdldF9wcm90b2NvbCkKKworICAgIGRlZiBpc19odHRw
cyhzZWxmKToKKyAgICAgICAgIiIiTWltaWMgcmVxdWVzdC5pc19odHRwcygpLiIiIgorCisgICAg
ICAgIHJldHVybiBzZWxmLl91c2VfdGxzCisKKworZGVmIF9pbXBvcnRfc3NsKCk6CisgICAgZ2xv
YmFsIHNzbAorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHNzbAorICAgICAgICByZXR1cm4gVHJ1
ZQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVm
IF9pbXBvcnRfcHlvcGVuc3NsKCk6CisgICAgZ2xvYmFsIE9wZW5TU0wKKyAgICB0cnk6CisgICAg
ICAgIGltcG9ydCBPcGVuU1NMLlNTTAorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2VwdCBJ
bXBvcnRFcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgX1N0YW5kYWxvbmVT
U0xDb25uZWN0aW9uKG9iamVjdCk6CisgICAgIiIiQSB3cmFwcGVyIGNsYXNzIGZvciBPcGVuU1NM
LlNTTC5Db25uZWN0aW9uIHRvCisgICAgLSBwcm92aWRlIG1ha2VmaWxlIG1ldGhvZCB3aGljaCBp
cyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjbGFzcworICAgIC0gdHdlYWsgc2h1dGRvd24gbWV0aG9k
IHNpbmNlIE9wZW5TU0wuU1NMLkNvbm5lY3Rpb24uc2h1dGRvd24gZG9lc24ndAorICAgICAgYWNj
ZXB0IHRoZSAiaG93IiBhcmd1bWVudC4KKyAgICAtIGNvbnZlcnQgU3lzQ2FsbEVycm9yIGV4Y2Vw
dGlvbnMgdGhhdCBpdHMgcmVjdiBtZXRob2QgbWF5IHJhaXNlIGludG8gYQorICAgICAgcmV0dXJu
IHZhbHVlIG9mICcnLCBtZWFuaW5nIEVPRi4gV2UgY2Fubm90IG92ZXJ3cml0ZSB0aGUgcmVjdiBt
ZXRob2Qgb24KKyAgICAgIHNlbGYuX2Nvbm5lY3Rpb24gc2luY2UgaXQncyBpbW11dGFibGUuCisg
ICAgIiIiCisKKyAgICBfT1ZFUlJJRERFTl9BVFRSSUJVVEVTID0gWydfY29ubmVjdGlvbicsICdt
YWtlZmlsZScsICdzaHV0ZG93bicsICdyZWN2J10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBj
b25uZWN0aW9uKToKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbiA9IGNvbm5lY3Rpb24KKworICAg
IGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluIF9T
dGFuZGFsb25lU1NMQ29ubmVjdGlvbi5fT1ZFUlJJRERFTl9BVFRSSUJVVEVTOgorICAgICAgICAg
ICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpCisgICAgICAgIHJl
dHVybiBzZWxmLl9jb25uZWN0aW9uLl9fZ2V0YXR0cmlidXRlX18obmFtZSkKKworICAgIGRlZiBf
X3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIGlmIG5hbWUgaW4gX1N0YW5k
YWxvbmVTU0xDb25uZWN0aW9uLl9PVkVSUklEREVOX0FUVFJJQlVURVM6CisgICAgICAgICAgICBy
ZXR1cm4gb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKQorICAgICAgICByZXR1
cm4gc2VsZi5fY29ubmVjdGlvbi5fX3NldGF0dHJfXyhuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBt
YWtlZmlsZShzZWxmLCBtb2RlPSdyJywgYnVmc2l6ZT0tMSk6CisgICAgICAgIHJldHVybiBzb2Nr
ZXQuX2ZpbGVvYmplY3Qoc2VsZiwgbW9kZSwgYnVmc2l6ZSkKKworICAgIGRlZiBzaHV0ZG93bihz
ZWxmLCB1bnVzZWRfaG93KToKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbi5zaHV0ZG93bigpCisK
KyAgICBkZWYgcmVjdihzZWxmLCBidWZzaXplLCBmbGFncz0wKToKKyAgICAgICAgaWYgZmxhZ3Mg
IT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vbi16ZXJvIGZsYWdzIG5vdCBh
bGxvd2VkJykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29ubmVj
dGlvbi5yZWN2KGJ1ZnNpemUpCisgICAgICAgIGV4Y2VwdCBPcGVuU1NMLlNTTC5TeXNDYWxsRXJy
b3IsIChlcnIsIG1lc3NhZ2UpOgorICAgICAgICAgICAgaWYgZXJyID09IC0xOgorICAgICAgICAg
ICAgICAgICMgU3VwcHJlc3MgInVuZXhwZWN0ZWQgRU9GIiBleGNlcHRpb24uIFNlZSB0aGUgT3Bl
blNTTCBkb2N1bWVudAorICAgICAgICAgICAgICAgICMgZm9yIFNTTF9nZXRfZXJyb3IuCisgICAg
ICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgICAgICByYWlzZQorCisKK2RlZiBfYWxpYXNf
aGFuZGxlcnMoZGlzcGF0Y2hlciwgd2Vic29ja19oYW5kbGVyc19tYXBfZmlsZSk6CisgICAgIiIi
U2V0IGFsaWFzZXMgc3BlY2lmaWVkIGluIHdlYnNvY2tfaGFuZGxlcl9tYXBfZmlsZSBpbiBkaXNw
YXRjaGVyLgorCisgICAgQXJnczoKKyAgICAgICAgZGlzcGF0Y2hlcjogZGlzcGF0Y2guRGlzcGF0
Y2hlciBpbnN0YW5jZQorICAgICAgICB3ZWJzb2NrX2hhbmRsZXJfbWFwX2ZpbGU6IGFsaWFzIG1h
cCBmaWxlCisgICAgIiIiCisKKyAgICBmcCA9IG9wZW4od2Vic29ja19oYW5kbGVyc19tYXBfZmls
ZSkKKyAgICB0cnk6CisgICAgICAgIGZvciBsaW5lIGluIGZwOgorICAgICAgICAgICAgaWYgbGlu
ZVswXSA9PSAnIycgb3IgbGluZS5pc3NwYWNlKCk6CisgICAgICAgICAgICAgICAgY29udGludWUK
KyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnKFxTKylccysoXFMrKScsIGxpbmUpCisgICAgICAg
ICAgICBpZiBub3QgbToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ1dyb25nIGZv
cm1hdCBpbiBtYXAgZmlsZTonICsgbGluZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRpc3BhdGNoZXIuYWRkX3Jlc291cmNlX3Bh
dGhfYWxpYXMoCisgICAgICAgICAgICAgICAgICAgIG0uZ3JvdXAoMSksIG0uZ3JvdXAoMikpCisg
ICAgICAgICAgICBleGNlcHQgZGlzcGF0Y2guRGlzcGF0Y2hFeGNlcHRpb24sIGU6CisgICAgICAg
ICAgICAgICAgbG9nZ2luZy5lcnJvcihzdHIoZSkpCisgICAgZmluYWxseToKKyAgICAgICAgZnAu
Y2xvc2UoKQorCisKK2NsYXNzIFdlYlNvY2tldFNlcnZlcihTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5n
TWl4SW4sIEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorICAgICIiIkhUVFBTZXJ2ZXIgc3Bl
Y2lhbGl6ZWQgZm9yIFdlYlNvY2tldC4iIiIKKworICAgICMgT3ZlcnJpZGVzIFNvY2tldFNlcnZl
ci5UaHJlYWRpbmdNaXhJbi5kYWVtb25fdGhyZWFkcworICAgIGRhZW1vbl90aHJlYWRzID0gVHJ1
ZQorICAgICMgT3ZlcnJpZGVzIEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIuYWxsb3dfcmV1c2Vf
YWRkcmVzcworICAgIGFsbG93X3JldXNlX2FkZHJlc3MgPSBUcnVlCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgb3B0aW9ucyk6CisgICAgICAgICIiIk92ZXJyaWRlIFNvY2tldFNlcnZlci5UQ1BT
ZXJ2ZXIuX19pbml0X18gdG8gc2V0IFNTTCBlbmFibGVkCisgICAgICAgIHNvY2tldCBvYmplY3Qg
dG8gc2VsZi5zb2NrZXQgYmVmb3JlIHNlcnZlcl9iaW5kIGFuZCBzZXJ2ZXJfYWN0aXZhdGUsCisg
ICAgICAgIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBTaGFyZSBhIERp
c3BhdGNoZXIgYW1vbmcgcmVxdWVzdCBoYW5kbGVycyB0byBzYXZlIHRpbWUgZm9yCisgICAgICAg
ICMgaW5zdGFudGlhdGlvbi4gIERpc3BhdGNoZXIgY2FuIGJlIHNoYXJlZCBiZWNhdXNlIGl0IGlz
IHRocmVhZC1zYWZlLgorICAgICAgICBvcHRpb25zLmRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNw
YXRjaGVyKAorICAgICAgICAgICAgb3B0aW9ucy53ZWJzb2NrX2hhbmRsZXJzLAorICAgICAgICAg
ICAgb3B0aW9ucy5zY2FuX2RpciwKKyAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dfaGFuZGxlcnNf
b3V0c2lkZV9yb290X2RpcikKKyAgICAgICAgaWYgb3B0aW9ucy53ZWJzb2NrX2hhbmRsZXJzX21h
cF9maWxlOgorICAgICAgICAgICAgX2FsaWFzX2hhbmRsZXJzKG9wdGlvbnMuZGlzcGF0Y2hlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLndlYnNvY2tfaGFuZGxlcnNfbWFw
X2ZpbGUpCisgICAgICAgIHdhcm5pbmdzID0gb3B0aW9ucy5kaXNwYXRjaGVyLnNvdXJjZV93YXJu
aW5ncygpCisgICAgICAgIGlmIHdhcm5pbmdzOgorICAgICAgICAgICAgZm9yIHdhcm5pbmcgaW4g
d2FybmluZ3M6CisgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdXYXJuaW5nIGluIHNv
dXJjZSBsb2FkaW5nOiAlcycgJSB3YXJuaW5nKQorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0
aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYucmVxdWVzdF9xdWV1ZV9z
aXplID0gb3B0aW9ucy5yZXF1ZXN0X3F1ZXVlX3NpemUKKyAgICAgICAgc2VsZi5fX3dzX2lzX3No
dXRfZG93biA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNlbGYuX193c19zZXJ2aW5nID0g
RmFsc2UKKworICAgICAgICBTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5fX2luaXRfXygKKyAgICAg
ICAgICAgIHNlbGYsIChvcHRpb25zLnNlcnZlcl9ob3N0LCBvcHRpb25zLnBvcnQpLCBXZWJTb2Nr
ZXRSZXF1ZXN0SGFuZGxlcikKKworICAgICAgICAjIEV4cG9zZSB0aGUgb3B0aW9ucyBvYmplY3Qg
dG8gYWxsb3cgaGFuZGxlciBvYmplY3RzIGFjY2VzcyBpdC4gV2UgbmFtZQorICAgICAgICAjIGl0
IHdpdGggd2Vic29ja2V0XyBwcmVmaXggdG8gYXZvaWQgY29uZmxpY3QuCisgICAgICAgIHNlbGYu
d2Vic29ja2V0X3NlcnZlcl9vcHRpb25zID0gb3B0aW9ucworCisgICAgICAgIHNlbGYuX2NyZWF0
ZV9zb2NrZXRzKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXJfYmluZCgpCisgICAgICAgIHNlbGYuc2Vy
dmVyX2FjdGl2YXRlKCkKKworICAgIGRlZiBfY3JlYXRlX3NvY2tldHMoc2VsZik6CisgICAgICAg
IHNlbGYuc2VydmVyX25hbWUsIHNlbGYuc2VydmVyX3BvcnQgPSBzZWxmLnNlcnZlcl9hZGRyZXNz
CisgICAgICAgIHNlbGYuX3NvY2tldHMgPSBbXQorICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXJf
bmFtZToKKyAgICAgICAgICAgICMgT24gcGxhdGZvcm1zIHRoYXQgZG9lc24ndCBzdXBwb3J0IElQ
djYsIHRoZSBmaXJzdCBiaW5kIGZhaWxzLgorICAgICAgICAgICAgIyBPbiBwbGF0Zm9ybXMgdGhh
dCBzdXBwb3J0cyBJUHY2CisgICAgICAgICAgICAjIC0gSWYgaXQgYmluZHMgYm90aCBJUHY0IGFu
ZCBJUHY2IG9uIGNhbGwgd2l0aCBBRl9JTkVUNiwgdGhlCisgICAgICAgICAgICAjICAgZmlyc3Qg
YmluZCBzdWNjZWVkcyBhbmQgdGhlIHNlY29uZCBmYWlscyAod2UnbGwgc2VlICdBZGRyZXNzCisg
ICAgICAgICAgICAjICAgYWxyZWFkeSBpbiB1c2UnIGVycm9yKS4KKyAgICAgICAgICAgICMgLSBJ
ZiBpdCBiaW5kcyBvbmx5IElQdjYgb24gY2FsbCB3aXRoIEFGX0lORVQ2LCBib3RoIGNhbGwgYXJl
CisgICAgICAgICAgICAjICAgZXhwZWN0ZWQgdG8gc3VjY2VlZCB0byBsaXN0ZW4gYm90aCBwcm90
b2NvbC4KKyAgICAgICAgICAgIGFkZHJpbmZvX2FycmF5ID0gWworICAgICAgICAgICAgICAgIChz
b2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1NUUkVBTSwgJycsICcnLCAnJyksCisgICAgICAg
ICAgICAgICAgKHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0sICcnLCAnJywgJycp
XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkcmluZm9fYXJyYXkgPSBzb2NrZXQuZ2V0
YWRkcmluZm8oc2VsZi5zZXJ2ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3BvcnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuQUZfVU5TUEVDLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPQ0tfU1RSRUFN
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0
LklQUFJPVE9fVENQKQorICAgICAgICBmb3IgYWRkcmluZm8gaW4gYWRkcmluZm9fYXJyYXk6Cisg
ICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnQ3JlYXRlIHNvY2tldCBvbjogJXInLCBhZGRy
aW5mbykKKyAgICAgICAgICAgIGZhbWlseSwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNv
Y2thZGRyID0gYWRkcmluZm8KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzb2Nr
ZXRfID0gc29ja2V0LnNvY2tldChmYW1pbHksIHNvY2t0eXBlKQorICAgICAgICAgICAgZXhjZXB0
IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnU2tpcCBi
eSBmYWlsdXJlOiAlcicsIGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAg
IHNlcnZlcl9vcHRpb25zID0gc2VsZi53ZWJzb2NrZXRfc2VydmVyX29wdGlvbnMKKyAgICAgICAg
ICAgIGlmIHNlcnZlcl9vcHRpb25zLnVzZV90bHM6CisgICAgICAgICAgICAgICAgIyBGb3IgdGhl
IGNhc2Ugb2YgX0hBU19PUEVOX1NTTCwgd2UgZG8gd3JhcHBlciBzZXR1cCBhZnRlcgorICAgICAg
ICAgICAgICAgICMgYWNjZXB0LgorICAgICAgICAgICAgICAgIGlmIHNlcnZlcl9vcHRpb25zLnRs
c19tb2R1bGUgPT0gX1RMU19CWV9TVEFOREFSRF9NT0RVTEU6CisgICAgICAgICAgICAgICAgICAg
IGlmIHNlcnZlcl9vcHRpb25zLnRsc19jbGllbnRfYXV0aDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIHNlcnZlcl9vcHRpb25zLnRsc19jbGllbnRfY2VydF9vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGllbnRfY2VydF8gPSBzc2wuQ0VSVF9PUFRJT05BTAorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGllbnRfY2VydF8gPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X2NlcnRfID0gc3NsLkNFUlRfTk9ORQor
ICAgICAgICAgICAgICAgICAgICBzb2NrZXRfID0gc3NsLndyYXBfc29ja2V0KHNvY2tldF8sCisg
ICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPXNlcnZlcl9vcHRpb25zLnByaXZhdGVfa2V5
LAorICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9c2VydmVyX29wdGlvbnMuY2VydGlm
aWNhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xf
U1NMdjIzLAorICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9c2VydmVyX29wdGlvbnMu
dGxzX2NsaWVudF9jYSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1jbGllbnRf
Y2VydF8sCisgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1G
YWxzZSkKKyAgICAgICAgICAgIHNlbGYuX3NvY2tldHMuYXBwZW5kKChzb2NrZXRfLCBhZGRyaW5m
bykpCisKKyAgICBkZWYgc2VydmVyX2JpbmQoc2VsZik6CisgICAgICAgICIiIk92ZXJyaWRlIFNv
Y2tldFNlcnZlci5UQ1BTZXJ2ZXIuc2VydmVyX2JpbmQgdG8gZW5hYmxlIG11bHRpcGxlCisgICAg
ICAgIHNvY2tldHMgYmluZC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmFpbGVkX3NvY2tldHMg
PSBbXQorCisgICAgICAgIGZvciBzb2NrZXRpbmZvIGluIHNlbGYuX3NvY2tldHM6CisgICAgICAg
ICAgICBzb2NrZXRfLCBhZGRyaW5mbyA9IHNvY2tldGluZm8KKyAgICAgICAgICAgIHNlbGYuX2xv
Z2dlci5pbmZvKCdCaW5kIG9uOiAlcicsIGFkZHJpbmZvKQorICAgICAgICAgICAgaWYgc2VsZi5h
bGxvd19yZXVzZV9hZGRyZXNzOgorICAgICAgICAgICAgICAgIHNvY2tldF8uc2V0c29ja29wdChz
b2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKyAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICBzb2NrZXRfLmJpbmQoc2VsZi5zZXJ2ZXJfYWRkcmVzcykKKyAg
ICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9n
Z2VyLmluZm8oJ1NraXAgYnkgZmFpbHVyZTogJXInLCBlKQorICAgICAgICAgICAgICAgIHNvY2tl
dF8uY2xvc2UoKQorICAgICAgICAgICAgICAgIGZhaWxlZF9zb2NrZXRzLmFwcGVuZChzb2NrZXRp
bmZvKQorICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXJfYWRkcmVzc1sxXSA9PSAwOgorICAgICAg
ICAgICAgICAgICMgVGhlIG9wZXJhdGluZyBzeXN0ZW0gYXNzaWducyB0aGUgYWN0dWFsIHBvcnQg
bnVtYmVyIGZvciBwb3J0CisgICAgICAgICAgICAgICAgIyBudW1iZXIgMC4gVGhpcyBjYXNlLCB0
aGUgc2Vjb25kIGFuZCBsYXRlciBzb2NrZXRzIHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAj
IHRoZSBzYW1lIHBvcnQgbnVtYmVyLiBBbHNvIHNlbGYuc2VydmVyX3BvcnQgaXMgcmV3cml0dGVu
CisgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0IGlzIGV4cG9ydGVkLCBhbmQgd2lsbCBiZSB1
c2VkIGJ5IGV4dGVybmFsIGNvZGUuCisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfYWRkcmVz
cyA9ICgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfbmFtZSwgc29ja2V0Xy5nZXRz
b2NrbmFtZSgpWzFdKQorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3BvcnQgPSBzZWxmLnNl
cnZlcl9hZGRyZXNzWzFdCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ1BvcnQg
JXIgaXMgYXNzaWduZWQnLCBzZWxmLnNlcnZlcl9wb3J0KQorCisgICAgICAgIGZvciBzb2NrZXRp
bmZvIGluIGZhaWxlZF9zb2NrZXRzOgorICAgICAgICAgICAgc2VsZi5fc29ja2V0cy5yZW1vdmUo
c29ja2V0aW5mbykKKworICAgIGRlZiBzZXJ2ZXJfYWN0aXZhdGUoc2VsZik6CisgICAgICAgICIi
Ik92ZXJyaWRlIFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIuc2VydmVyX2FjdGl2YXRlIHRvIGVuYWJs
ZSBtdWx0aXBsZQorICAgICAgICBzb2NrZXRzIGxpc3Rlbi4KKyAgICAgICAgIiIiCisKKyAgICAg
ICAgZmFpbGVkX3NvY2tldHMgPSBbXQorCisgICAgICAgIGZvciBzb2NrZXRpbmZvIGluIHNlbGYu
X3NvY2tldHM6CisgICAgICAgICAgICBzb2NrZXRfLCBhZGRyaW5mbyA9IHNvY2tldGluZm8KKyAg
ICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdMaXN0ZW4gb246ICVyJywgYWRkcmluZm8pCisg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc29ja2V0Xy5saXN0ZW4oc2VsZi5yZXF1
ZXN0X3F1ZXVlX3NpemUpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAg
ICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdTa2lwIGJ5IGZhaWx1cmU6ICVyJywgZSkKKyAg
ICAgICAgICAgICAgICBzb2NrZXRfLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBmYWlsZWRfc29j
a2V0cy5hcHBlbmQoc29ja2V0aW5mbykKKworICAgICAgICBmb3Igc29ja2V0aW5mbyBpbiBmYWls
ZWRfc29ja2V0czoKKyAgICAgICAgICAgIHNlbGYuX3NvY2tldHMucmVtb3ZlKHNvY2tldGluZm8p
CisKKyAgICAgICAgaWYgbGVuKHNlbGYuX3NvY2tldHMpID09IDA6CisgICAgICAgICAgICBzZWxm
Ll9sb2dnZXIuY3JpdGljYWwoCisgICAgICAgICAgICAgICAgJ05vIHNvY2tldHMgYWN0aXZhdGVk
LiBVc2UgaW5mbyBsb2cgbGV2ZWwgdG8gc2VlIHRoZSByZWFzb24uJykKKworICAgIGRlZiBzZXJ2
ZXJfY2xvc2Uoc2VsZik6CisgICAgICAgICIiIk92ZXJyaWRlIFNvY2tldFNlcnZlci5UQ1BTZXJ2
ZXIuc2VydmVyX2Nsb3NlIHRvIGVuYWJsZSBtdWx0aXBsZQorICAgICAgICBzb2NrZXRzIGNsb3Nl
LgorICAgICAgICAiIiIKKworICAgICAgICBmb3Igc29ja2V0aW5mbyBpbiBzZWxmLl9zb2NrZXRz
OgorICAgICAgICAgICAgc29ja2V0XywgYWRkcmluZm8gPSBzb2NrZXRpbmZvCisgICAgICAgICAg
ICBzZWxmLl9sb2dnZXIuaW5mbygnQ2xvc2Ugb246ICVyJywgYWRkcmluZm8pCisgICAgICAgICAg
ICBzb2NrZXRfLmNsb3NlKCkKKworICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgICIiIk92
ZXJyaWRlIFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIuZmlsZW5vLiIiIgorCisgICAgICAgIHNlbGYu
X2xvZ2dlci5jcml0aWNhbCgnTm90IHN1cHBvcnRlZDogZmlsZW5vJykKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3NvY2tldHNbMF1bMF0uZmlsZW5vKCkKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2Vs
ZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICAiIiJPdmVycmlkZSBTb2NrZXRT
ZXJ2ZXIuaGFuZGxlX2Vycm9yLiIiIgorCisgICAgICAgIHNlbGYuX2xvZ2dlci5lcnJvcigKKyAg
ICAgICAgICAgICdFeGNlcHRpb24gaW4gcHJvY2Vzc2luZyByZXF1ZXN0IGZyb206ICVyXG4lcycs
CisgICAgICAgICAgICBjbGllbnRfYWRkcmVzcywKKyAgICAgICAgICAgIHV0aWwuZ2V0X3N0YWNr
X3RyYWNlKCkpCisgICAgICAgICMgTm90ZTogY2xpZW50X2FkZHJlc3MgaXMgYSB0dXBsZS4KKwor
ICAgIGRlZiBnZXRfcmVxdWVzdChzZWxmKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgVENQU2VydmVy
LmdldF9yZXF1ZXN0IHRvIHdyYXAgT3BlblNTTC5TU0wuQ29ubmVjdGlvbgorICAgICAgICBvYmpl
Y3Qgd2l0aCBfU3RhbmRhbG9uZVNTTENvbm5lY3Rpb24gdG8gcHJvdmlkZSBtYWtlZmlsZSBtZXRo
b2QuIFdlCisgICAgICAgIGNhbm5vdCBzdWJzdGl0dXRlIE9wZW5TU0wuU1NMLkNvbm5lY3Rpb24u
bWFrZWZpbGUgc2luY2UgaXQncyByZWFkb25seQorICAgICAgICBhdHRyaWJ1dGUuCisgICAgICAg
ICIiIgorCisgICAgICAgIGFjY2VwdGVkX3NvY2tldCwgY2xpZW50X2FkZHJlc3MgPSBzZWxmLnNv
Y2tldC5hY2NlcHQoKQorCisgICAgICAgIHNlcnZlcl9vcHRpb25zID0gc2VsZi53ZWJzb2NrZXRf
c2VydmVyX29wdGlvbnMKKyAgICAgICAgaWYgc2VydmVyX29wdGlvbnMudXNlX3RsczoKKyAgICAg
ICAgICAgIGlmIHNlcnZlcl9vcHRpb25zLnRsc19tb2R1bGUgPT0gX1RMU19CWV9TVEFOREFSRF9N
T0RVTEU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBhY2NlcHRl
ZF9zb2NrZXQuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVy
cm9yLCBlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJyVyJywgZSkK
KyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgICAgICMgUHJpbnQgY2lw
aGVyIGluIHVzZS4gSGFuZHNoYWtlIGlzIGRvbmUgb24gYWNjZXB0LgorICAgICAgICAgICAgICAg
IHNlbGYuX2xvZ2dlci5kZWJ1ZygnQ2lwaGVyOiAlcycsIGFjY2VwdGVkX3NvY2tldC5jaXBoZXIo
KSkKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ0NsaWVudCBjZXJ0OiAlcics
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkX3NvY2tldC5nZXRw
ZWVyY2VydCgpKQorICAgICAgICAgICAgZWxpZiBzZXJ2ZXJfb3B0aW9ucy50bHNfbW9kdWxlID09
IF9UTFNfQllfUFlPUEVOU1NMOgorICAgICAgICAgICAgICAgICMgV2UgY2Fubm90IHByaW50IHRo
ZSBjaXBoZXIgaW4gdXNlLiBweU9wZW5TU0wgZG9lc24ndCBwcm92aWRlCisgICAgICAgICAgICAg
ICAgIyBhbnkgbWV0aG9kIHRvIGZldGNoIHRoYXQuCisKKyAgICAgICAgICAgICAgICBjdHggPSBP
cGVuU1NMLlNTTC5Db250ZXh0KE9wZW5TU0wuU1NMLlNTTHYyM19NRVRIT0QpCisgICAgICAgICAg
ICAgICAgY3R4LnVzZV9wcml2YXRla2V5X2ZpbGUoc2VydmVyX29wdGlvbnMucHJpdmF0ZV9rZXkp
CisgICAgICAgICAgICAgICAgY3R4LnVzZV9jZXJ0aWZpY2F0ZV9maWxlKHNlcnZlcl9vcHRpb25z
LmNlcnRpZmljYXRlKQorCisgICAgICAgICAgICAgICAgZGVmIGRlZmF1bHRfY2FsbGJhY2soY29u
biwgY2VydCwgZXJybnVtLCBlcnJkZXB0aCwgb2spOgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gb2sgPT0gMQorCisgICAgICAgICAgICAgICAgIyBTZWUgdGhlIE9wZW5TU0wgZG9jdW1lbnQg
Zm9yIFNTTF9DVFhfc2V0X3ZlcmlmeS4KKyAgICAgICAgICAgICAgICBpZiBzZXJ2ZXJfb3B0aW9u
cy50bHNfY2xpZW50X2F1dGg6CisgICAgICAgICAgICAgICAgICAgIHZlcmlmeV9tb2RlID0gT3Bl
blNTTC5TU0wuVkVSSUZZX1BFRVIKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlcnZlcl9v
cHRpb25zLnRsc19jbGllbnRfY2VydF9vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZlcmlmeV9tb2RlIHw9IE9wZW5TU0wuU1NMLlZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVAor
ICAgICAgICAgICAgICAgICAgICBjdHguc2V0X3ZlcmlmeSh2ZXJpZnlfbW9kZSwgZGVmYXVsdF9j
YWxsYmFjaykKKyAgICAgICAgICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhz
ZXJ2ZXJfb3B0aW9ucy50bHNfY2xpZW50X2NhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5vbmUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICAgICAgY3R4LnNldF92ZXJpZnkoT3BlblNTTC5TU0wuVkVSSUZZX05PTkUsIGRlZmF1
bHRfY2FsbGJhY2spCisKKyAgICAgICAgICAgICAgICBhY2NlcHRlZF9zb2NrZXQgPSBPcGVuU1NM
LlNTTC5Db25uZWN0aW9uKGN0eCwgYWNjZXB0ZWRfc29ja2V0KQorICAgICAgICAgICAgICAgIGFj
Y2VwdGVkX3NvY2tldC5zZXRfYWNjZXB0X3N0YXRlKCkKKworICAgICAgICAgICAgICAgICMgQ29u
dmVydCBTU0wgcmVsYXRlZCBlcnJvciBpbnRvIHNvY2tldC5lcnJvciBzbyB0aGF0CisgICAgICAg
ICAgICAgICAgIyBTb2NrZXRTZXJ2ZXIgaWdub3JlcyB0aGVtIGFuZCBrZWVwcyBydW5uaW5nLgor
ICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBDb252
ZXJ0IGFsbCBraW5kcyBvZiBlcnJvcnMuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgICAgICBhY2NlcHRlZF9zb2NrZXQuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAg
ICBleGNlcHQgT3BlblNTTC5TU0wuRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgICMgU2V0
IGVycm5vIHBhcnQgdG8gMSAoU1NMX0VSUk9SX1NTTCkgbGlrZSB0aGUgc3NsIG1vZHVsZQorICAg
ICAgICAgICAgICAgICAgICAjIGRvZXMuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dl
ci5kZWJ1ZygnJXInLCBlKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3Io
MSwgJyVyJyAlIGUpCisgICAgICAgICAgICAgICAgY2VydCA9IGFjY2VwdGVkX3NvY2tldC5nZXRf
cGVlcl9jZXJ0aWZpY2F0ZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdD
bGllbnQgY2VydCBzdWJqZWN0OiAlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNlcnQuZ2V0X3N1YmplY3QoKS5nZXRfY29tcG9uZW50cygpKQorICAgICAgICAgICAgICAg
IGFjY2VwdGVkX3NvY2tldCA9IF9TdGFuZGFsb25lU1NMQ29ubmVjdGlvbihhY2NlcHRlZF9zb2Nr
ZXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
J05vIFRMUyBzdXBwb3J0IG1vZHVsZSBpcyBhdmFpbGFibGUnKQorCisgICAgICAgIHJldHVybiBh
Y2NlcHRlZF9zb2NrZXQsIGNsaWVudF9hZGRyZXNzCisKKyAgICBkZWYgc2VydmVfZm9yZXZlcihz
ZWxmLCBwb2xsX2ludGVydmFsPTAuNSk6CisgICAgICAgICIiIk92ZXJyaWRlIFNvY2tldFNlcnZl
ci5CYXNlU2VydmVyLnNlcnZlX2ZvcmV2ZXIuIiIiCisKKyAgICAgICAgc2VsZi5fX3dzX3NlcnZp
bmcgPSBUcnVlCisgICAgICAgIHNlbGYuX193c19pc19zaHV0X2Rvd24uY2xlYXIoKQorICAgICAg
ICBoYW5kbGVfcmVxdWVzdCA9IHNlbGYuaGFuZGxlX3JlcXVlc3QKKyAgICAgICAgaWYgaGFzYXR0
cihzZWxmLCAnX2hhbmRsZV9yZXF1ZXN0X25vYmxvY2snKToKKyAgICAgICAgICAgIGhhbmRsZV9y
ZXF1ZXN0ID0gc2VsZi5faGFuZGxlX3JlcXVlc3Rfbm9ibG9jaworICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgc2VsZi5fbG9nZ2VyLndhcm5pbmcoJ0ZhbGxiYWNrIHRvIGJsb2NraW5nIHJlcXVl
c3QgaGFuZGxlcicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuX193c19z
ZXJ2aW5nOgorICAgICAgICAgICAgICAgIHIsIHcsIGUgPSBzZWxlY3Quc2VsZWN0KAorICAgICAg
ICAgICAgICAgICAgICBbc29ja2V0X1swXSBmb3Igc29ja2V0XyBpbiBzZWxmLl9zb2NrZXRzXSwK
KyAgICAgICAgICAgICAgICAgICAgW10sIFtdLCBwb2xsX2ludGVydmFsKQorICAgICAgICAgICAg
ICAgIGZvciBzb2NrZXRfIGluIHI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0ID0g
c29ja2V0XworICAgICAgICAgICAgICAgICAgICBoYW5kbGVfcmVxdWVzdCgpCisgICAgICAgICAg
ICAgICAgc2VsZi5zb2NrZXQgPSBOb25lCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBz
ZWxmLl9fd3NfaXNfc2h1dF9kb3duLnNldCgpCisKKyAgICBkZWYgc2h1dGRvd24oc2VsZik6Cisg
ICAgICAgICIiIk92ZXJyaWRlIFNvY2tldFNlcnZlci5CYXNlU2VydmVyLnNodXRkb3duLiIiIgor
CisgICAgICAgIHNlbGYuX193c19zZXJ2aW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5fX3dzX2lz
X3NodXRfZG93bi53YWl0KCkKKworCitjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlcihDR0lI
VFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgIiIiQ0dJSFRUUFJlcXVlc3RI
YW5kbGVyIHNwZWNpYWxpemVkIGZvciBXZWJTb2NrZXQuIiIiCisKKyAgICAjIFVzZSBodHRwbGli
LkhUVFBNZXNzYWdlIGluc3RlYWQgb2YgbWltZXRvb2xzLk1lc3NhZ2UuCisgICAgTWVzc2FnZUNs
YXNzID0gaHR0cGxpYi5IVFRQTWVzc2FnZQorCisgICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAg
ICAiIiJPdmVycmlkZSBTb2NrZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIuc2V0dXAgdG8g
d3JhcCByZmlsZQorICAgICAgICB3aXRoIE1lbW9yaXppbmdGaWxlLgorCisgICAgICAgIFRoaXMg
bWV0aG9kIHdpbGwgYmUgY2FsbGVkIGJ5IEJhc2VSZXF1ZXN0SGFuZGxlcidzIGNvbnN0cnVjdG9y
CisgICAgICAgIGJlZm9yZSBjYWxsaW5nIEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuaGFuZGxlLgor
ICAgICAgICBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmhhbmRsZSB3aWxsIGNhbGwKKyAgICAgICAg
QmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5oYW5kbGVfb25lX3JlcXVlc3QgYW5kIGl0IHdpbGwgY2Fs
bAorICAgICAgICBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5wYXJzZV9yZXF1ZXN0LgorICAgICAg
ICAiIiIKKworICAgICAgICAjIENhbGwgc3VwZXJjbGFzcydzIHNldHVwIHRvIHByZXBhcmUgcmZp
bGUsIHdmaWxlLCBldGMuIFNlZSBzZXR1cAorICAgICAgICAjIGRlZmluaXRpb24gb24gdGhlIHJv
b3QgY2xhc3MgU29ja2V0U2VydmVyLlN0cmVhbVJlcXVlc3RIYW5kbGVyIHRvCisgICAgICAgICMg
dW5kZXJzdGFuZCB3aGF0IHRoaXMgZG9lcy4KKyAgICAgICAgQ0dJSFRUUFNlcnZlci5DR0lIVFRQ
UmVxdWVzdEhhbmRsZXIuc2V0dXAoc2VsZikKKworICAgICAgICBzZWxmLnJmaWxlID0gbWVtb3Jp
emluZ2ZpbGUuTWVtb3JpemluZ0ZpbGUoCisgICAgICAgICAgICBzZWxmLnJmaWxlLAorICAgICAg
ICAgICAgbWF4X21lbW9yaXplZF9saW5lcz1fTUFYX01FTU9SSVpFRF9MSU5FUykKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcywgc2VydmVyKToKKyAgICAg
ICAgc2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisKKyAgICAgICAg
c2VsZi5fb3B0aW9ucyA9IHNlcnZlci53ZWJzb2NrZXRfc2VydmVyX29wdGlvbnMKKworICAgICAg
ICAjIE92ZXJyaWRlcyBDR0lIVFRQU2VydmVyUmVxdWVzdEhhbmRsZXIuY2dpX2RpcmVjdG9yaWVz
LgorICAgICAgICBzZWxmLmNnaV9kaXJlY3RvcmllcyA9IHNlbGYuX29wdGlvbnMuY2dpX2RpcmVj
dG9yaWVzCisgICAgICAgICMgUmVwbGFjZSBDR0lIVFRQUmVxdWVzdEhhbmRsZXIuaXNfZXhlY3V0
YWJsZSBtZXRob2QuCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuaXNfZXhlY3V0YWJsZV9tZXRo
b2QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmlzX2V4ZWN1dGFibGUgPSBzZWxmLl9v
cHRpb25zLmlzX2V4ZWN1dGFibGVfbWV0aG9kCisKKyAgICAgICAgIyBUaGlzIGFjdHVhbGx5IGNh
bGxzIEJhc2VSZXF1ZXN0SGFuZGxlci5fX2luaXRfXy4KKyAgICAgICAgQ0dJSFRUUFNlcnZlci5D
R0lIVFRQUmVxdWVzdEhhbmRsZXIuX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCByZXF1ZXN0
LCBjbGllbnRfYWRkcmVzcywgc2VydmVyKQorCisgICAgZGVmIF94aHJfc2VuZF9iZW5jaG1hcmtf
aGVscGVyKHNlbGYpOgorICAgICAgICBjb250ZW50X2xlbmd0aCA9IGludChzZWxmLmhlYWRlcnMu
Z2V0aGVhZGVyKCdDb250ZW50LUxlbmd0aCcpKQorCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1
ZygnUmVxdWVzdGVkIHRvIHJlY2VpdmUgJXMgYnl0ZXMnLCBjb250ZW50X2xlbmd0aCkKKworICAg
ICAgICBSRUNFSVZFX0JMT0NLX1NJWkUgPSAxMDI0ICogMTAyNAorCisgICAgICAgIGJ5dGVzX3Rv
X3JlY2VpdmUgPSBjb250ZW50X2xlbmd0aAorICAgICAgICB3aGlsZSBieXRlc190b19yZWNlaXZl
ID4gMDoKKyAgICAgICAgICAgIGJ5dGVzX3RvX3JlY2VpdmVfaW5fdGhpc19sb29wID0gYnl0ZXNf
dG9fcmVjZWl2ZQorICAgICAgICAgICAgaWYgYnl0ZXNfdG9fcmVjZWl2ZV9pbl90aGlzX2xvb3Ag
PiBSRUNFSVZFX0JMT0NLX1NJWkU6CisgICAgICAgICAgICAgICAgYnl0ZXNfdG9fcmVjZWl2ZV9p
bl90aGlzX2xvb3AgPSBSRUNFSVZFX0JMT0NLX1NJWkUKKyAgICAgICAgICAgIHJlY2VpdmVkX2Rh
dGEgPSBzZWxmLnJmaWxlLnJlYWQoYnl0ZXNfdG9fcmVjZWl2ZV9pbl90aGlzX2xvb3ApCisgICAg
ICAgICAgICBmb3IgYyBpbiByZWNlaXZlZF9kYXRhOgorICAgICAgICAgICAgICAgIGlmIGMgIT0g
J2EnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1JlcXVlc3QgYm9k
eSB2ZXJpZmljYXRpb24gZmFpbGVkJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAg
ICAgICAgICBieXRlc190b19yZWNlaXZlIC09IGxlbihyZWNlaXZlZF9kYXRhKQorICAgICAgICBp
ZiBieXRlc190b19yZWNlaXZlIDwgMDoKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1Zygn
UmVjZWl2ZWQgJWQgbW9yZSBieXRlcyB0aGFuIGV4cGVjdGVkJyAlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKC1ieXRlc190b19yZWNlaXZlKSkKKyAgICAgICAgICAgIHJldHVybgor
CisgICAgICAgICMgUmV0dXJuIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMgYmFjayB0byB0
aGUgY2xpZW50LgorICAgICAgICByZXNwb25zZV9ib2R5ID0gJyVkJyAlIGNvbnRlbnRfbGVuZ3Ro
CisgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoCisgICAgICAgICAgICAnSFRUUC8xLjEgMjAwIE9L
XHJcbicKKyAgICAgICAgICAgICdDb250ZW50LVR5cGU6IHRleHQvaHRtbFxyXG4nCisgICAgICAg
ICAgICAnQ29udGVudC1MZW5ndGg6ICVkXHJcbicKKyAgICAgICAgICAgICdcclxuJXMnICUgKGxl
bihyZXNwb25zZV9ib2R5KSwgcmVzcG9uc2VfYm9keSkpCisgICAgICAgIHNlbGYud2ZpbGUuZmx1
c2goKQorCisgICAgZGVmIF94aHJfcmVjZWl2ZV9iZW5jaG1hcmtfaGVscGVyKHNlbGYpOgorICAg
ICAgICBjb250ZW50X2xlbmd0aCA9IHNlbGYuaGVhZGVycy5nZXRoZWFkZXIoJ0NvbnRlbnQtTGVu
Z3RoJykKKyAgICAgICAgcmVxdWVzdF9ib2R5ID0gc2VsZi5yZmlsZS5yZWFkKGludChjb250ZW50
X2xlbmd0aCkpCisKKyAgICAgICAgcmVxdWVzdF9hcnJheSA9IHJlcXVlc3RfYm9keS5zcGxpdCgn
ICcpCisgICAgICAgIGlmIGxlbihyZXF1ZXN0X2FycmF5KSA8IDI6CisgICAgICAgICAgICBzZWxm
Ll9sb2dnZXIuZGVidWcoJ01hbGZvcm1lZCByZXF1ZXN0IGJvZHk6ICVyJywgcmVxdWVzdF9ib2R5
KQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBQYXJzZSB0aGUgc2l6ZSBwYXJhbWV0
ZXIuCisgICAgICAgIGJ5dGVzX3RvX3NlbmQgPSByZXF1ZXN0X2FycmF5WzBdCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGJ5dGVzX3RvX3NlbmQgPSBpbnQoYnl0ZXNfdG9fc2VuZCkKKyAgICAg
ICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWco
J01hbGZvcm1lZCBzaXplIHBhcmFtZXRlcjogJXInLCBieXRlc190b19zZW5kKQorICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnUmVxdWVzdGVkIHRvIHNlbmQg
JXMgYnl0ZXMnLCBieXRlc190b19zZW5kKQorCisgICAgICAgICMgUGFyc2UgdGhlIHRyYW5zZmVy
IGVuY29kaW5nIHBhcmFtZXRlci4KKyAgICAgICAgY2h1bmtlZF9tb2RlID0gRmFsc2UKKyAgICAg
ICAgbW9kZV9wYXJhbWV0ZXIgPSByZXF1ZXN0X2FycmF5WzFdCisgICAgICAgIGlmIG1vZGVfcGFy
YW1ldGVyID09ICdjaHVua2VkJzoKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnUmVx
dWVzdGVkIGNodW5rZWQgdHJhbnNmZXIgZW5jb2RpbmcnKQorICAgICAgICAgICAgY2h1bmtlZF9t
b2RlID0gVHJ1ZQorICAgICAgICBlbGlmIG1vZGVfcGFyYW1ldGVyICE9ICdub25lJzoKKyAgICAg
ICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnSW52YWxpZCBtb2RlIHBhcmFtZXRlcjogJXInLCBt
b2RlX3BhcmFtZXRlcikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgV3JpdGUgYSBo
ZWFkZXIKKyAgICAgICAgcmVzcG9uc2VfaGVhZGVyID0gKAorICAgICAgICAgICAgJ0hUVFAvMS4x
IDIwMCBPS1xyXG4nCisgICAgICAgICAgICAnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3Rl
dC1zdHJlYW1cclxuJykKKyAgICAgICAgaWYgY2h1bmtlZF9tb2RlOgorICAgICAgICAgICAgcmVz
cG9uc2VfaGVhZGVyICs9ICdUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxyXG5cclxuJworICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgcmVzcG9uc2VfaGVhZGVyICs9ICgKKyAgICAgICAgICAg
ICAgICAnQ29udGVudC1MZW5ndGg6ICVkXHJcblxyXG4nICUgYnl0ZXNfdG9fc2VuZCkKKyAgICAg
ICAgc2VsZi53ZmlsZS53cml0ZShyZXNwb25zZV9oZWFkZXIpCisgICAgICAgIHNlbGYud2ZpbGUu
Zmx1c2goKQorCisgICAgICAgICMgV3JpdGUgYSBib2R5CisgICAgICAgIFNFTkRfQkxPQ0tfU0la
RSA9IDEwMjQgKiAxMDI0CisKKyAgICAgICAgd2hpbGUgYnl0ZXNfdG9fc2VuZCA+IDA6CisgICAg
ICAgICAgICBieXRlc190b19zZW5kX2luX3RoaXNfbG9vcCA9IGJ5dGVzX3RvX3NlbmQKKyAgICAg
ICAgICAgIGlmIGJ5dGVzX3RvX3NlbmRfaW5fdGhpc19sb29wID4gU0VORF9CTE9DS19TSVpFOgor
ICAgICAgICAgICAgICAgIGJ5dGVzX3RvX3NlbmRfaW5fdGhpc19sb29wID0gU0VORF9CTE9DS19T
SVpFCisKKyAgICAgICAgICAgIGlmIGNodW5rZWRfbW9kZToKKyAgICAgICAgICAgICAgICBzZWxm
LndmaWxlLndyaXRlKCcleFxyXG4nICUgYnl0ZXNfdG9fc2VuZF9pbl90aGlzX2xvb3ApCisgICAg
ICAgICAgICBzZWxmLndmaWxlLndyaXRlKCdhJyAqIGJ5dGVzX3RvX3NlbmRfaW5fdGhpc19sb29w
KQorICAgICAgICAgICAgaWYgY2h1bmtlZF9tb2RlOgorICAgICAgICAgICAgICAgIHNlbGYud2Zp
bGUud3JpdGUoJ1xyXG4nKQorICAgICAgICAgICAgc2VsZi53ZmlsZS5mbHVzaCgpCisKKyAgICAg
ICAgICAgIGJ5dGVzX3RvX3NlbmQgLT0gYnl0ZXNfdG9fc2VuZF9pbl90aGlzX2xvb3AKKworICAg
ICAgICBpZiBjaHVua2VkX21vZGU6CisgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKCcwXHJc
blxyXG4nKQorICAgICAgICAgICAgc2VsZi53ZmlsZS5mbHVzaCgpCisKKyAgICBkZWYgcGFyc2Vf
cmVxdWVzdChzZWxmKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgQmFzZUhUVFBTZXJ2ZXIuQmFzZUhU
VFBSZXF1ZXN0SGFuZGxlci5wYXJzZV9yZXF1ZXN0LgorCisgICAgICAgIFJldHVybiBUcnVlIHRv
IGNvbnRpbnVlIHByb2Nlc3NpbmcgZm9yIEhUVFAoUyksIEZhbHNlIG90aGVyd2lzZS4KKworICAg
ICAgICBTZWUgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5oYW5kbGVfb25lX3JlcXVlc3QgbWV0aG9k
IHdoaWNoIGNhbGxzCisgICAgICAgIHRoaXMgbWV0aG9kIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBy
ZXR1cm4gdmFsdWUgd2lsbCBiZSBoYW5kbGVkLgorICAgICAgICAiIiIKKworICAgICAgICAjIFdl
IGhvb2sgcGFyc2VfcmVxdWVzdCBtZXRob2QsIGJ1dCBhbHNvIGNhbGwgdGhlIG9yaWdpbmFsCisg
ICAgICAgICMgQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLnBhcnNlX3JlcXVlc3Qgc2luY2Ugd2hlbiB3
ZSByZXR1cm4gRmFsc2UsCisgICAgICAgICMgQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLmhhbmRsZV9v
bmVfcmVxdWVzdCBjb250aW51ZXMgcHJvY2Vzc2luZyBhbmQKKyAgICAgICAgIyBpdCBuZWVkcyB2
YXJpYWJsZXMgc2V0IGJ5IENHSUhUVFBSZXF1ZXN0SGFuZGxlci5wYXJzZV9yZXF1ZXN0LgorICAg
ICAgICAjCisgICAgICAgICMgVmFyaWFibGVzIHNldCBieSB0aGlzIG1ldGhvZCB3aWxsIGJlIGFs
c28gdXNlZCBieSBXZWJTb2NrZXQgcmVxdWVzdAorICAgICAgICAjIGhhbmRsaW5nIChzZWxmLnBh
dGgsIHNlbGYuY29tbWFuZCwgc2VsZi5yZXF1ZXN0bGluZSwgZXRjLiBTZWUgYWxzbworICAgICAg
ICAjIGhvdyBfU3RhbmRhbG9uZVJlcXVlc3QncyBtZW1iZXJzIGFyZSBpbXBsZW1lbnRlZCB1c2lu
ZyB0aGVzZQorICAgICAgICAjIGF0dHJpYnV0ZXMpLgorICAgICAgICBpZiBub3QgQ0dJSFRUUFNl
cnZlci5DR0lIVFRQUmVxdWVzdEhhbmRsZXIucGFyc2VfcmVxdWVzdChzZWxmKToKKyAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMudXNlX2Jhc2ljX2F1
dGg6CisgICAgICAgICAgICBhdXRoID0gc2VsZi5oZWFkZXJzLmdldGhlYWRlcignQXV0aG9yaXph
dGlvbicpCisgICAgICAgICAgICBpZiBhdXRoICE9IHNlbGYuX29wdGlvbnMuYmFzaWNfYXV0aF9j
cmVkZW50aWFsOgorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSg0MDEpCisgICAg
ICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignV1dXLUF1dGhlbnRpY2F0ZScsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnQmFzaWMgcmVhbG09IlB5d2Vic29ja2V0IicpCisg
ICAgICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAgICAgICAgICAgc2VsZi5f
bG9nZ2VyLmluZm8oJ1JlcXVlc3QgYmFzaWMgYXV0aGVudGljYXRpb24nKQorICAgICAgICAgICAg
ICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgaG9zdCwgcG9ydCwgcmVzb3VyY2UgPSBodHRwX2hl
YWRlcl91dGlsLnBhcnNlX3VyaShzZWxmLnBhdGgpCisKKyAgICAgICAgIyBTcGVjaWFsIHBhdGhz
IGZvciBYTUxIdHRwUmVxdWVzdCBiZW5jaG1hcmsKKyAgICAgICAgeGhyX2JlbmNobWFya19oZWxw
ZXJfcHJlZml4ID0gJy8wNzNiZTAwMWUxMDk1MDY5MmNjYmYzYTJhZDIxYzI0NScKKyAgICAgICAg
aWYgcmVzb3VyY2UgPT0gKHhocl9iZW5jaG1hcmtfaGVscGVyX3ByZWZpeCArICdfc2VuZCcpOgor
ICAgICAgICAgICAgc2VsZi5feGhyX3NlbmRfYmVuY2htYXJrX2hlbHBlcigpCisgICAgICAgICAg
ICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgcmVzb3VyY2UgPT0gKHhocl9iZW5jaG1hcmtfaGVs
cGVyX3ByZWZpeCArICdfcmVjZWl2ZScpOgorICAgICAgICAgICAgc2VsZi5feGhyX3JlY2VpdmVf
YmVuY2htYXJrX2hlbHBlcigpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBp
ZiByZXNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0ludmFs
aWQgVVJJOiAlcicsIHNlbGYucGF0aCkKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdG
YWxsYmFjayB0byBDR0lIVFRQUmVxdWVzdEhhbmRsZXInKQorICAgICAgICAgICAgcmV0dXJuIFRy
dWUKKyAgICAgICAgc2VydmVyX29wdGlvbnMgPSBzZWxmLnNlcnZlci53ZWJzb2NrZXRfc2VydmVy
X29wdGlvbnMKKyAgICAgICAgaWYgaG9zdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbGlk
YXRpb25faG9zdCA9IHNlcnZlcl9vcHRpb25zLnZhbGlkYXRpb25faG9zdAorICAgICAgICAgICAg
aWYgdmFsaWRhdGlvbl9ob3N0IGlzIG5vdCBOb25lIGFuZCBob3N0ICE9IHZhbGlkYXRpb25faG9z
dDoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnSW52YWxpZCBob3N0OiAlciAo
ZXhwZWN0ZWQ6ICVyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uX2hvc3QpCisgICAg
ICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0ZhbGxiYWNrIHRvIENHSUhUVFBSZXF1ZXN0
SGFuZGxlcicpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgcG9ydCBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbGlkYXRpb25fcG9ydCA9IHNlcnZlcl9vcHRpb25z
LnZhbGlkYXRpb25fcG9ydAorICAgICAgICAgICAgaWYgdmFsaWRhdGlvbl9wb3J0IGlzIG5vdCBO
b25lIGFuZCBwb3J0ICE9IHZhbGlkYXRpb25fcG9ydDoKKyAgICAgICAgICAgICAgICBzZWxmLl9s
b2dnZXIuaW5mbygnSW52YWxpZCBwb3J0OiAlciAoZXhwZWN0ZWQ6ICVyKScsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0aW9uX3BvcnQpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmlu
Zm8oJ0ZhbGxiYWNrIHRvIENHSUhUVFBSZXF1ZXN0SGFuZGxlcicpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFRydWUKKyAgICAgICAgc2VsZi5wYXRoID0gcmVzb3VyY2UKKworICAgICAgICByZXF1
ZXN0ID0gX1N0YW5kYWxvbmVSZXF1ZXN0KHNlbGYsIHNlbGYuX29wdGlvbnMudXNlX3RscykKKwor
ICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEZhbGxiYWNrIHRvIGRlZmF1bHQgaHR0cCBoYW5k
bGVyIGZvciByZXF1ZXN0IHBhdGhzIGZvciB3aGljaAorICAgICAgICAgICAgIyB3ZSBkb24ndCBo
YXZlIHJlcXVlc3QgaGFuZGxlcnMuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5k
aXNwYXRjaGVyLmdldF9oYW5kbGVyX3N1aXRlKHNlbGYucGF0aCk6CisgICAgICAgICAgICAgICAg
c2VsZi5fbG9nZ2VyLmluZm8oJ05vIGhhbmRsZXIgZm9yIHJlc291cmNlOiAlcicsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXRoKQorICAgICAgICAgICAgICAgIHNl
bGYuX2xvZ2dlci5pbmZvKCdGYWxsYmFjayB0byBDR0lIVFRQUmVxdWVzdEhhbmRsZXInKQorICAg
ICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBkaXNwYXRjaC5EaXNwYXRj
aEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdEaXNwYXRjaCBm
YWlsZWQgZm9yIGVycm9yOiAlcycsIGUpCisgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoZS5z
dGF0dXMpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAjIElmIGFueSBFeGNl
cHRpb25zIHdpdGhvdXQgZXhjZXB0IGNsYXVzZSBzZXR1cCAoaW5jbHVkaW5nCisgICAgICAgICMg
RGlzcGF0Y2hFeGNlcHRpb24pIGlzIHJhaXNlZCBiZWxvdyB0aGlzIHBvaW50LCBpdCB3aWxsIGJl
IGNhdWdodAorICAgICAgICAjIGFuZCBsb2dnZWQgYnkgV2ViU29ja2V0U2VydmVyLgorCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBoYW5kc2hha2UuZG9f
aGFuZHNoYWtlKAorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LAorICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9vcHRpb25zLmRpc3BhdGNoZXIsCisgICAgICAgICAgICAgICAgICAgIGFsbG93
RHJhZnQ3NT1zZWxmLl9vcHRpb25zLmFsbG93X2RyYWZ0NzUsCisgICAgICAgICAgICAgICAgICAg
IHN0cmljdD1zZWxmLl9vcHRpb25zLnN0cmljdCkKKyAgICAgICAgICAgIGV4Y2VwdCBoYW5kc2hh
a2UuVmVyc2lvbkV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5m
bygnSGFuZHNoYWtlIGZhaWxlZCBmb3IgdmVyc2lvbiBlcnJvcjogJXMnLCBlKQorICAgICAgICAg
ICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZShjb21tb24uSFRUUF9TVEFUVVNfQkFEX1JFUVVFU1Qp
CisgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcihjb21tb24uU0VDX1dFQlNPQ0tFVF9W
RVJTSU9OX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3VwcG9y
dGVkX3ZlcnNpb25zKQorICAgICAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorICAgICAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5IYW5k
c2hha2VFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgIyBIYW5kc2hha2UgZm9yIHdzKHMp
IGZhaWxlZC4KKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnSGFuZHNoYWtlIGZh
aWxlZCBmb3IgZXJyb3I6ICVzJywgZSkKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3Io
ZS5zdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIHJl
cXVlc3QuX2Rpc3BhdGNoZXIgPSBzZWxmLl9vcHRpb25zLmRpc3BhdGNoZXIKKyAgICAgICAgICAg
IHNlbGYuX29wdGlvbnMuZGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKHJlcXVlc3QpCisgICAgICAg
IGV4Y2VwdCBoYW5kc2hha2UuQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAg
IHNlbGYuX2xvZ2dlci5pbmZvKCdBYm9ydGVkOiAlcycsIGUpCisgICAgICAgIHJldHVybiBGYWxz
ZQorCisgICAgZGVmIGxvZ19yZXF1ZXN0KHNlbGYsIGNvZGU9Jy0nLCBzaXplPSctJyk6CisgICAg
ICAgICIiIk92ZXJyaWRlIEJhc2VIVFRQU2VydmVyLmxvZ19yZXF1ZXN0LiIiIgorCisgICAgICAg
IHNlbGYuX2xvZ2dlci5pbmZvKCciJXMiICVzICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5yZXF1ZXN0bGluZSwgc3RyKGNvZGUpLCBzdHIoc2l6ZSkpCisKKyAgICBkZWYgbG9n
X2Vycm9yKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgQmFzZUhUVFBTZXJ2ZXIu
bG9nX2Vycm9yLiIiIgorCisgICAgICAgICMgRGVzcGl0ZSB0aGUgbmFtZSwgdGhpcyBtZXRob2Qg
aXMgZm9yIHdhcm5pbmdzIHRoYW4gZm9yIGVycm9ycy4KKyAgICAgICAgIyBGb3IgZXhhbXBsZSwg
SFRUUCBzdGF0dXMgY29kZSBpcyBsb2dnZWQgYnkgdGhpcyBtZXRob2QuCisgICAgICAgIHNlbGYu
X2xvZ2dlci53YXJuaW5nKCclcyAtICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5hZGRyZXNzX3N0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
WzBdICUgYXJnc1sxOl0pCisKKyAgICBkZWYgaXNfY2dpKHNlbGYpOgorICAgICAgICAiIiJUZXN0
IHdoZXRoZXIgc2VsZi5wYXRoIGNvcnJlc3BvbmRzIHRvIGEgQ0dJIHNjcmlwdC4KKworICAgICAg
ICBBZGQgZXh0cmEgY2hlY2sgdGhhdCBzZWxmLnBhdGggZG9lc24ndCBjb250YWlucyAuLgorICAg
ICAgICBBbHNvIGNoZWNrIGlmIHRoZSBmaWxlIGlzIGEgZXhlY3V0YWJsZSBmaWxlIG9yIG5vdC4K
KyAgICAgICAgSWYgdGhlIGZpbGUgaXMgbm90IGV4ZWN1dGFibGUsIGl0IGlzIGhhbmRsZWQgYXMg
c3RhdGljIGZpbGUgb3IgZGlyCisgICAgICAgIHJhdGhlciB0aGFuIGEgQ0dJIHNjcmlwdC4KKyAg
ICAgICAgIiIiCisKKyAgICAgICAgaWYgQ0dJSFRUUFNlcnZlci5DR0lIVFRQUmVxdWVzdEhhbmRs
ZXIuaXNfY2dpKHNlbGYpOgorICAgICAgICAgICAgaWYgJy4uJyBpbiBzZWxmLnBhdGg6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAjIHN0cmlwIHF1ZXJ5IHBhcmFt
ZXRlciBmcm9tIHJlcXVlc3QgcGF0aAorICAgICAgICAgICAgcmVzb3VyY2VfbmFtZSA9IHNlbGYu
cGF0aC5zcGxpdCgnPycsIDIpWzBdCisgICAgICAgICAgICAjIGNvbnZlcnQgcmVzb3VyY2VfbmFt
ZSBpbnRvIHJlYWwgcGF0aCBuYW1lIGluIGZpbGVzeXN0ZW0uCisgICAgICAgICAgICBzY3JpcHRm
aWxlID0gc2VsZi50cmFuc2xhdGVfcGF0aChyZXNvdXJjZV9uYW1lKQorICAgICAgICAgICAgaWYg
bm90IG9zLnBhdGguaXNmaWxlKHNjcmlwdGZpbGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBG
YWxzZQorICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfZXhlY3V0YWJsZShzY3JpcHRmaWxlKToK
KyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisg
ICAgICAgIHJldHVybiBGYWxzZQorCisKK2RlZiBfZ2V0X2xvZ2dlcl9mcm9tX2NsYXNzKGMpOgor
ICAgIHJldHVybiBsb2dnaW5nLmdldExvZ2dlcignJXMuJXMnICUgKGMuX19tb2R1bGVfXywgYy5f
X25hbWVfXykpCisKKworZGVmIF9jb25maWd1cmVfbG9nZ2luZyhvcHRpb25zKToKKyAgICBsb2dn
aW5nLmFkZExldmVsTmFtZShjb21tb24uTE9HTEVWRUxfRklORSwgJ0ZJTkUnKQorCisgICAgbG9n
Z2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLmdl
dExldmVsTmFtZShvcHRpb25zLmxvZ19sZXZlbC51cHBlcigpKSkKKyAgICBpZiBvcHRpb25zLmxv
Z19maWxlOgorICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVI
YW5kbGVyKAorICAgICAgICAgICAgICAgIG9wdGlvbnMubG9nX2ZpbGUsICdhJywgb3B0aW9ucy5s
b2dfbWF4LCBvcHRpb25zLmxvZ19jb3VudCkKKyAgICBlbHNlOgorICAgICAgICBoYW5kbGVyID0g
bG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRl
cigKKyAgICAgICAgICAgICdbJShhc2N0aW1lKXNdIFslKGxldmVsbmFtZSlzXSAlKG5hbWUpczog
JShtZXNzYWdlKXMnKQorICAgIGhhbmRsZXIuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICBs
b2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQorCisgICAgZGVmbGF0ZV9sb2dfbGV2ZWxfbmFtZSA9
IGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKAorICAgICAgICBvcHRpb25zLmRlZmxhdGVfbG9nX2xldmVs
LnVwcGVyKCkpCisgICAgX2dldF9sb2dnZXJfZnJvbV9jbGFzcyh1dGlsLl9EZWZsYXRlcikuc2V0
TGV2ZWwoCisgICAgICAgIGRlZmxhdGVfbG9nX2xldmVsX25hbWUpCisgICAgX2dldF9sb2dnZXJf
ZnJvbV9jbGFzcyh1dGlsLl9JbmZsYXRlcikuc2V0TGV2ZWwoCisgICAgICAgIGRlZmxhdGVfbG9n
X2xldmVsX25hbWUpCisKKworZGVmIF9idWlsZF9vcHRpb25fcGFyc2VyKCk6CisgICAgcGFyc2Vy
ID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLWNv
bmZpZycsIGRlc3Q9J2NvbmZpZ19maWxlJywgdHlwZT0nc3RyaW5nJywKKyAgICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1BhdGgg
dG8gY29uZmlndXJhdGlvbiBmaWxlLiBTZWUgdGhlIGZpbGUgY29tbWVudCAnCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2F0IHRoZSB0b3Agb2YgdGhpcyBmaWxlIGZvciB0aGUgY29uZmln
dXJhdGlvbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGUgZm9ybWF0JykpCisg
ICAgcGFyc2VyLmFkZF9vcHRpb24oJy1IJywgJy0tc2VydmVyLWhvc3QnLCAnLS1zZXJ2ZXJfaG9z
dCcsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nc2VydmVyX2hvc3QnLAorICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9JycsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2Vy
dmVyIGhvc3RuYW1lIHRvIGxpc3RlbiB0bycpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1WJywg
Jy0tdmFsaWRhdGlvbi1ob3N0JywgJy0tdmFsaWRhdGlvbl9ob3N0JywKKyAgICAgICAgICAgICAg
ICAgICAgICBkZXN0PSd2YWxpZGF0aW9uX2hvc3QnLAorICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzZXJ2ZXIgaG9zdG5hbWUg
dG8gdmFsaWRhdGUgaW4gYWJzb2x1dGUgcGF0aC4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCct
cCcsICctLXBvcnQnLCBkZXN0PSdwb3J0JywgdHlwZT0naW50JywKKyAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PWNvbW1vbi5ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVCwKKyAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSdwb3J0IHRvIGxpc3RlbiB0bycpCisgICAgcGFyc2VyLmFkZF9vcHRp
b24oJy1QJywgJy0tdmFsaWRhdGlvbi1wb3J0JywgJy0tdmFsaWRhdGlvbl9wb3J0JywKKyAgICAg
ICAgICAgICAgICAgICAgICBkZXN0PSd2YWxpZGF0aW9uX3BvcnQnLCB0eXBlPSdpbnQnLAorICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdzZXJ2ZXIgcG9ydCB0byB2YWxpZGF0ZSBpbiBhYnNvbHV0ZSBwYXRoLicpCisgICAgcGFy
c2VyLmFkZF9vcHRpb24oJy13JywgJy0td2Vic29jay1oYW5kbGVycycsICctLXdlYnNvY2tfaGFu
ZGxlcnMnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3dlYnNvY2tfaGFuZGxlcnMnLAor
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Jy4nLAorICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9KCdUaGUgcm9vdCBkaXJlY3Rvcnkgb2YgV2ViU29ja2V0IGhhbmRsZXIgZmlsZXMuICcK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSWYgdGhlIHBhdGggaXMgcmVsYXRpdmUsIC0t
ZG9jdW1lbnQtcm9vdCBpcyB1c2VkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXMg
dGhlIGJhc2UuJykpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1tJywgJy0td2Vic29jay1oYW5k
bGVycy1tYXAtZmlsZScsCisgICAgICAgICAgICAgICAgICAgICAgJy0td2Vic29ja19oYW5kbGVy
c19tYXBfZmlsZScsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nd2Vic29ja19oYW5kbGVy
c19tYXBfZmlsZScsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9KCdXZWJTb2NrZXQgaGFuZGxlcnMgbWFwIGZpbGUuICcKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnRWFjaCBsaW5lIGNvbnNpc3RzIG9mIGFsaWFzX3Jl
c291cmNlX3BhdGggYW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhpc3Rpbmdf
cmVzb3VyY2VfcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcy4nKSkKKyAgICBwYXJzZXIuYWRkX29w
dGlvbignLXMnLCAnLS1zY2FuLWRpcicsICctLXNjYW5fZGlyJywgZGVzdD0nc2Nhbl9kaXInLAor
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSgnTXVzdCBiZSBhIGRpcmVjdG9yeSB1bmRlciAtLXdlYnNvY2staGFuZGxlcnMuICcK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT25seSBoYW5kbGVycyB1bmRlciB0aGlzIGRp
cmVjdG9yeSBhcmUgc2Nhbm5lZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCBy
ZWdpc3RlcmVkIHRvIHRoZSBzZXJ2ZXIuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
VXNlZnVsIGZvciBzYXZpbmcgc2NhbiB0aW1lIHdoZW4gdGhlIGhhbmRsZXIgJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdyb290IGRpcmVjdG9yeSBjb250YWlucyBsb3RzIG9mIGZpbGVz
IHRoYXQgYXJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm90IGhhbmRsZXIgZmls
ZSBvciBhcmUgaGFuZGxlciBmaWxlcyBidXQgeW91ICcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnZG9uXCd0IHdhbnQgdGhlbSB0byBiZSByZWdpc3RlcmVkLiAnKSkKKyAgICBwYXJzZXIu
YWRkX29wdGlvbignLS1hbGxvdy1oYW5kbGVycy1vdXRzaWRlLXJvb3QtZGlyJywKKyAgICAgICAg
ICAgICAgICAgICAgICAnLS1hbGxvd19oYW5kbGVyc19vdXRzaWRlX3Jvb3RfZGlyJywKKyAgICAg
ICAgICAgICAgICAgICAgICBkZXN0PSdhbGxvd19oYW5kbGVyc19vdXRzaWRlX3Jvb3RfZGlyJywK
KyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1Nj
YW5zIFdlYlNvY2tldCBoYW5kbGVycyBldmVuIGlmIHRoZWlyIGNhbm9uaWNhbCAnCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3BhdGggaXMgbm90IHVuZGVyIC0td2Vic29jay1oYW5kbGVy
cy4nKSkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1kb2N1bWVudC1yb290JywgJy0t
ZG9jdW1lbnRfcm9vdCcsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nZG9jdW1lbnRfcm9v
dCcsIGRlZmF1bHQ9Jy4nLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0RvY3VtZW50IHJv
b3QgZGlyZWN0b3J5LicpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy14JywgJy0tY2dpLXBhdGhz
JywgJy0tY2dpX3BhdGhzJywgZGVzdD0nY2dpX3BhdGhzJywKKyAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ0NHSSBwYXRocyBy
ZWxhdGl2ZSB0byBkb2N1bWVudF9yb290LicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
Q29tbWEtc2VwYXJhdGVkLiAoZS5nIC14IC9jZ2ksL2h0YmluKSAnCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ0ZpbGVzIHVuZGVyIGRvY3VtZW50X3Jvb3QvY2dpX3BhdGggYXJlIGhhbmRs
ZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcyBDR0kgcHJvZ3JhbXMuIE11c3Qg
YmUgZXhlY3V0YWJsZS4nKSkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10bHMnLCBk
ZXN0PSd1c2VfdGxzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0PUZhbHNlLCBoZWxwPSd1c2UgVExTICh3c3M6Ly8pJykKKyAgICBwYXJzZXIuYWRk
X29wdGlvbignLS10bHMtbW9kdWxlJywgJy0tdGxzX21vZHVsZScsIGRlc3Q9J3Rsc19tb2R1bGUn
LAorICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J2Nob2ljZScsCisgICAgICAgICAgICAgICAg
ICAgICAgY2hvaWNlcyA9IFtfVExTX0JZX1NUQU5EQVJEX01PRFVMRSwgX1RMU19CWV9QWU9QRU5T
U0xdLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1VzZSBzc2wgbW9kdWxlIGlmICIlcyIg
aXMgc3BlY2lmaWVkLiAnCisgICAgICAgICAgICAgICAgICAgICAgJ1VzZSBweU9wZW5TU0wgbW9k
dWxlIGlmICIlcyIgaXMgc3BlY2lmaWVkJyAlCisgICAgICAgICAgICAgICAgICAgICAgKF9UTFNf
QllfU1RBTkRBUkRfTU9EVUxFLCBfVExTX0JZX1BZT1BFTlNTTCkpCisgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy1rJywgJy0tcHJpdmF0ZS1rZXknLCAnLS1wcml2YXRlX2tleScsCisgICAgICAgICAg
ICAgICAgICAgICAgZGVzdD0ncHJpdmF0ZV9rZXknLAorICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ9JycsIGhlbHA9J1RMUyBwcml2YXRlIGtleSBmaWxlLicpCisgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy1jJywgJy0tY2VydGlmaWNhdGUnLCBkZXN0PSdjZXJ0aWZpY2F0ZScsCisgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdD0nJywgaGVscD0nVExTIGNlcnRpZmljYXRlIGZpbGUuJykK
KyAgICBwYXJzZXIuYWRkX29wdGlvbignLS10bHMtY2xpZW50LWF1dGgnLCBkZXN0PSd0bHNfY2xp
ZW50X2F1dGgnLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRl
ZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUmVxdWVzdHMgVExTIGNs
aWVudCBhdXRoIG9uIGV2ZXJ5IGNvbm5lY3Rpb24uJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbign
LS10bHMtY2xpZW50LWNlcnQtb3B0aW9uYWwnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9
J3Rsc19jbGllbnRfY2VydF9vcHRpb25hbCcsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9u
PSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSgnTWFrZXMgY2xpZW50IGNlcnRpZmljYXRlIG9wdGlvbmFsIGV2ZW4gdGhvdWdoICcKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnVExTIGNsaWVudCBhdXRoIGlzIGVuYWJsZWQuJykpCisg
ICAgcGFyc2VyLmFkZF9vcHRpb24oJy0tdGxzLWNsaWVudC1jYScsIGRlc3Q9J3Rsc19jbGllbnRf
Y2EnLCBkZWZhdWx0PScnLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdTcGVjaWZpZXMg
YSBwZW0gZmlsZSB3aGljaCBjb250YWlucyBhIHNldCBvZiAnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2NvbmNhdGVuYXRlZCBDQSBjZXJ0aWZpY2F0ZXMgd2hpY2ggYXJlIHVzZWQgdG8g
JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YWxpZGF0ZSBjZXJ0aWZpY2F0ZXMgcGFz
c2VkIGZyb20gY2xpZW50cycpKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLWJhc2ljLWF1dGgn
LCBkZXN0PSd1c2VfYmFzaWNfYXV0aCcsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdz
dG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdS
ZXF1aXJlcyBCYXNpYyBhdXRoZW50aWNhdGlvbi4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCct
LWJhc2ljLWF1dGgtY3JlZGVudGlhbCcsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nYmFz
aWNfYXV0aF9jcmVkZW50aWFsJywgZGVmYXVsdD0ndGVzdDp0ZXN0JywKKyAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSdTcGVjaWZpZXMgdGhlIGNyZWRlbnRpYWwgb2YgYmFzaWMgYXV0aGVudGlj
YXRpb24gJworICAgICAgICAgICAgICAgICAgICAgICdieSB1c2VybmFtZTpwYXNzd29yZCBwYWly
IChlLmcuIHRlc3Q6dGVzdCkuJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLWwnLCAnLS1sb2ct
ZmlsZScsICctLWxvZ19maWxlJywgZGVzdD0nbG9nX2ZpbGUnLAorICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ9JycsIGhlbHA9J0xvZyBmaWxlLicpCisgICAgIyBDdXN0b20gbG9nIGxldmVs
OgorICAgICMgLSBGSU5FOiBQcmludHMgc3RhdHVzIG9mIGVhY2ggZnJhbWUgcHJvY2Vzc2luZyBz
dGVwCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy0tbG9nLWxldmVsJywgJy0tbG9nX2xldmVsJywg
dHlwZT0nY2hvaWNlJywKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdsb2dfbGV2ZWwnLCBk
ZWZhdWx0PSd3YXJuJywKKyAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsnZmluZScsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlYnVnJywgJ2luZm8nLCAnd2FybmluZycs
ICd3YXJuJywgJ2Vycm9yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JpdGlj
YWwnXSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdMb2cgbGV2ZWwuJykKKyAgICBwYXJz
ZXIuYWRkX29wdGlvbignLS1kZWZsYXRlLWxvZy1sZXZlbCcsICctLWRlZmxhdGVfbG9nX2xldmVs
JywKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdjaG9pY2UnLAorICAgICAgICAgICAgICAg
ICAgICAgIGRlc3Q9J2RlZmxhdGVfbG9nX2xldmVsJywgZGVmYXVsdD0nd2FybicsCisgICAgICAg
ICAgICAgICAgICAgICAgY2hvaWNlcz1bJ2RlYnVnJywgJ2luZm8nLCAnd2FybmluZycsICd3YXJu
JywgJ2Vycm9yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JpdGljYWwnXSwK
KyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdMb2cgbGV2ZWwgZm9yIF9EZWZsYXRlciBhbmQg
X0luZmxhdGVyLicpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy0tdGhyZWFkLW1vbml0b3ItaW50
ZXJ2YWwtaW4tc2VjJywKKyAgICAgICAgICAgICAgICAgICAgICAnLS10aHJlYWRfbW9uaXRvcl9p
bnRlcnZhbF9pbl9zZWMnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3RocmVhZF9tb25p
dG9yX2ludGVydmFsX2luX3NlYycsCisgICAgICAgICAgICAgICAgICAgICAgdHlwZT0naW50Jywg
ZGVmYXVsdD0tMSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnSWYgcG9zaXRpdmUgaW50
ZWdlciBpcyBzcGVjaWZpZWQsIHJ1biBhIHRocmVhZCAnCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ21vbml0b3IgdG8gc2hvdyB0aGUgc3RhdHVzIG9mIHNlcnZlciB0aHJlYWRzICcKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAncGVyaW9kaWNhbGx5IGluIHRoZSBzcGVjaWZpZWQg
aW50ZXZhbCBpbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlY29uZC4gSWYgbm9u
LXBvc2l0aXZlIGludGVnZXIgaXMgc3BlY2lmaWVkLCAnCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2Rpc2FibGUgdGhlIHRocmVhZCBtb25pdG9yLicpKQorICAgIHBhcnNlci5hZGRfb3B0
aW9uKCctLWxvZy1tYXgnLCAnLS1sb2dfbWF4JywgZGVzdD0nbG9nX21heCcsIHR5cGU9J2ludCcs
CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1fREVGQVVMVF9MT0dfTUFYX0JZVEVTLAor
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0xvZyBtYXhpbXVtIGJ5dGVzJykKKyAgICBwYXJz
ZXIuYWRkX29wdGlvbignLS1sb2ctY291bnQnLCAnLS1sb2dfY291bnQnLCBkZXN0PSdsb2dfY291
bnQnLAorICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J2ludCcsIGRlZmF1bHQ9X0RFRkFVTFRf
TE9HX0JBQ0tVUF9DT1VOVCwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdMb2cgYmFja3Vw
IGNvdW50JykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1hbGxvdy1kcmFmdDc1JywgZGVzdD0n
YWxsb3dfZHJhZnQ3NScsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVl
JywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdPYnNvbGV0ZSBv
cHRpb24uIElnbm9yZWQuJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1zdHJpY3QnLCBkZXN0
PSdzdHJpY3QnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ9RmFsc2UsIGhlbHA9J09ic29sZXRlIG9wdGlvbi4gSWdub3JlZC4nKQorICAgIHBhcnNl
ci5hZGRfb3B0aW9uKCctcScsICctLXF1ZXVlJywgZGVzdD0ncmVxdWVzdF9xdWV1ZV9zaXplJywg
dHlwZT0naW50JywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PV9ERUZBVUxUX1JFUVVF
U1RfUVVFVUVfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdyZXF1ZXN0IHF1ZXVl
IHNpemUnKQorCisgICAgcmV0dXJuIHBhcnNlcgorCisKK2NsYXNzIFRocmVhZE1vbml0b3IodGhy
ZWFkaW5nLlRocmVhZCk6CisgICAgZGFlbW9uID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGludGVydmFsX2luX3NlYyk6CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18o
c2VsZiwgbmFtZT0nVGhyZWFkTW9uaXRvcicpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gdXRp
bC5nZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisKKyAgICAgICAgc2VsZi5faW50ZXJ2YWxfaW5fc2Vj
ID0gaW50ZXJ2YWxfaW5fc2VjCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICB3aGlsZSBU
cnVlOgorICAgICAgICAgICAgdGhyZWFkX25hbWVfbGlzdCA9IFtdCisgICAgICAgICAgICBmb3Ig
dGhyZWFkIGluIHRocmVhZGluZy5lbnVtZXJhdGUoKToKKyAgICAgICAgICAgICAgICB0aHJlYWRf
bmFtZV9saXN0LmFwcGVuZCh0aHJlYWQubmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5p
bmZvKAorICAgICAgICAgICAgICAgICIlZCBhY3RpdmUgdGhyZWFkczogJXMiLAorICAgICAgICAg
ICAgICAgIHRocmVhZGluZy5hY3RpdmVfY291bnQoKSwKKyAgICAgICAgICAgICAgICAnLCAnLmpv
aW4odGhyZWFkX25hbWVfbGlzdCkpCisgICAgICAgICAgICB0aW1lLnNsZWVwKHNlbGYuX2ludGVy
dmFsX2luX3NlYykKKworCitkZWYgX3BhcnNlX2FyZ3NfYW5kX2NvbmZpZyhhcmdzKToKKyAgICBw
YXJzZXIgPSBfYnVpbGRfb3B0aW9uX3BhcnNlcigpCisKKyAgICAjIEZpcnN0LCBwYXJzZSBvcHRp
b25zIHdpdGhvdXQgY29uZmlndXJhdGlvbiBmaWxlLgorICAgIHRlbXBvcmFyeV9vcHRpb25zLCB0
ZW1wb3JhcnlfYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3M9YXJncykKKyAgICBpZiB0ZW1w
b3JhcnlfYXJnczoKKyAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgKKyAgICAgICAgICAgICdVbnJl
Y29nbml6ZWQgcG9zaXRpb25hbCBhcmd1bWVudHM6ICVyJywgdGVtcG9yYXJ5X2FyZ3MpCisgICAg
ICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiB0ZW1wb3Jhcnlfb3B0aW9ucy5jb25maWdfZmlsZToK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29uZmlnX2ZwID0gb3Blbih0ZW1wb3Jhcnlfb3B0
aW9ucy5jb25maWdfZmlsZSwgJ3InKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAg
ICAgICAgIGxvZ2dpbmcuY3JpdGljYWwoCisgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBvcGVu
IGNvbmZpZ3VyYXRpb24gZmlsZSAlcjogJXInLAorICAgICAgICAgICAgICAgIHRlbXBvcmFyeV9v
cHRpb25zLmNvbmZpZ19maWxlLAorICAgICAgICAgICAgICAgIGUpCisgICAgICAgICAgICBzeXMu
ZXhpdCgxKQorCisgICAgICAgIGNvbmZpZ19wYXJzZXIgPSBDb25maWdQYXJzZXIuU2FmZUNvbmZp
Z1BhcnNlcigpCisgICAgICAgIGNvbmZpZ19wYXJzZXIucmVhZGZwKGNvbmZpZ19mcCkKKyAgICAg
ICAgY29uZmlnX2ZwLmNsb3NlKCkKKworICAgICAgICBhcmdzX2Zyb21fY29uZmlnID0gW10KKyAg
ICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGNvbmZpZ19wYXJzZXIuaXRlbXMoJ3B5d2Vic29ja2V0
Jyk6CisgICAgICAgICAgICBhcmdzX2Zyb21fY29uZmlnLmFwcGVuZCgnLS0nICsgbmFtZSkKKyAg
ICAgICAgICAgIGFyZ3NfZnJvbV9jb25maWcuYXBwZW5kKHZhbHVlKQorICAgICAgICBpZiBhcmdz
IGlzIE5vbmU6CisgICAgICAgICAgICBhcmdzID0gYXJnc19mcm9tX2NvbmZpZworICAgICAgICBl
bHNlOgorICAgICAgICAgICAgYXJncyA9IGFyZ3NfZnJvbV9jb25maWcgKyBhcmdzCisgICAgICAg
IHJldHVybiBwYXJzZXIucGFyc2VfYXJncyhhcmdzPWFyZ3MpCisgICAgZWxzZToKKyAgICAgICAg
cmV0dXJuIHRlbXBvcmFyeV9vcHRpb25zLCB0ZW1wb3JhcnlfYXJncworCisKK2RlZiBfbWFpbihh
cmdzPU5vbmUpOgorICAgICIiIllvdSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20geW91ciBv
d24gcHJvZ3JhbSwgYnV0IHBsZWFzZSBub3RlIHRoYXQKKyAgICB0aGlzIGZ1bmN0aW9uIGhhcyBz
b21lIHNpZGUtZWZmZWN0cyB0aGF0IG1pZ2h0IGFmZmVjdCB5b3VyIHByb2dyYW0uIEZvcgorICAg
IGV4YW1wbGUsIHV0aWwud3JhcF9wb3BlbjNfZm9yX3dpbiB1c2UgaW4gdGhpcyBtZXRob2QgcmVw
bGFjZXMgaW1wbGVtZW50YXRpb24KKyAgICBvZiBvcy5wb3BlbjMuCisgICAgIiIiCisKKyAgICBv
cHRpb25zLCBhcmdzID0gX3BhcnNlX2FyZ3NfYW5kX2NvbmZpZyhhcmdzPWFyZ3MpCisKKyAgICBv
cy5jaGRpcihvcHRpb25zLmRvY3VtZW50X3Jvb3QpCisKKyAgICBfY29uZmlndXJlX2xvZ2dpbmco
b3B0aW9ucykKKworICAgIGlmIG9wdGlvbnMuYWxsb3dfZHJhZnQ3NToKKyAgICAgICAgbG9nZ2lu
Zy53YXJuaW5nKCctLWFsbG93X2RyYWZ0NzUgb3B0aW9uIGlzIG9ic29sZXRlLicpCisKKyAgICBp
ZiBvcHRpb25zLnN0cmljdDoKKyAgICAgICAgbG9nZ2luZy53YXJuaW5nKCctLXN0cmljdCBvcHRp
b24gaXMgb2Jzb2xldGUuJykKKworICAgICMgVE9ETyh0eW9zaGlubyk6IENsZWFuIHVwIGluaXRp
YWxpemF0aW9uIG9mIENHSSByZWxhdGVkIHZhbHVlcy4gTW92ZSBzb21lCisgICAgIyBvZiBjb2Rl
IGhlcmUgdG8gV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIgY2xhc3MgaWYgaXQncyBiZXR0ZXIuCisg
ICAgb3B0aW9ucy5jZ2lfZGlyZWN0b3JpZXMgPSBbXQorICAgIG9wdGlvbnMuaXNfZXhlY3V0YWJs
ZV9tZXRob2QgPSBOb25lCisgICAgaWYgb3B0aW9ucy5jZ2lfcGF0aHM6CisgICAgICAgIG9wdGlv
bnMuY2dpX2RpcmVjdG9yaWVzID0gb3B0aW9ucy5jZ2lfcGF0aHMuc3BsaXQoJywnKQorICAgICAg
ICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKKyAgICAgICAgICAgIGN5
Z3dpbl9wYXRoID0gTm9uZQorICAgICAgICAgICAgIyBGb3IgV2luMzIgUHl0aG9uLCBpdCBpcyBl
eHBlY3RlZCB0aGF0IENZR1dJTl9QQVRICisgICAgICAgICAgICAjIGlzIHNldCB0byBhIGRpcmVj
dG9yeSBvZiBjeWd3aW4gYmluYXJpZXMuCisgICAgICAgICAgICAjIEZvciBleGFtcGxlLCB3ZWJz
b2NrZXRfc2VydmVyLnB5IGluIENocm9taXVtIHNldHMgQ1lHV0lOX1BBVEggdG8KKyAgICAgICAg
ICAgICMgZnVsbCBwYXRoIG9mIHRoaXJkX3BhcnR5L2N5Z3dpbi9iaW4uCisgICAgICAgICAgICBp
ZiAnQ1lHV0lOX1BBVEgnIGluIG9zLmVudmlyb246CisgICAgICAgICAgICAgICAgY3lnd2luX3Bh
dGggPSBvcy5lbnZpcm9uWydDWUdXSU5fUEFUSCddCisgICAgICAgICAgICB1dGlsLndyYXBfcG9w
ZW4zX2Zvcl93aW4oY3lnd2luX3BhdGgpCisKKyAgICAgICAgICAgIGRlZiBfX2NoZWNrX3Njcmlw
dChzY3JpcHRwYXRoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5nZXRfc2NyaXB0X2lu
dGVycChzY3JpcHRwYXRoLCBjeWd3aW5fcGF0aCkKKworICAgICAgICAgICAgb3B0aW9ucy5pc19l
eGVjdXRhYmxlX21ldGhvZCA9IF9fY2hlY2tfc2NyaXB0CisKKyAgICBpZiBvcHRpb25zLnVzZV90
bHM6CisgICAgICAgIGlmIG9wdGlvbnMudGxzX21vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAg
aWYgX2ltcG9ydF9zc2woKToKKyAgICAgICAgICAgICAgICBvcHRpb25zLnRsc19tb2R1bGUgPSBf
VExTX0JZX1NUQU5EQVJEX01PRFVMRQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1Vz
aW5nIHNzbCBtb2R1bGUnKQorICAgICAgICAgICAgZWxpZiBfaW1wb3J0X3B5b3BlbnNzbCgpOgor
ICAgICAgICAgICAgICAgIG9wdGlvbnMudGxzX21vZHVsZSA9IF9UTFNfQllfUFlPUEVOU1NMCisg
ICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnVXNpbmcgcHlPcGVuU1NMIG1vZHVsZScpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuY3JpdGljYWwoCisgICAg
ICAgICAgICAgICAgICAgICAgICAnVExTIHN1cHBvcnQgcmVxdWlyZXMgc3NsIG9yIHB5T3BlblNT
TCBtb2R1bGUuJykKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBlbGlmIG9w
dGlvbnMudGxzX21vZHVsZSA9PSBfVExTX0JZX1NUQU5EQVJEX01PRFVMRToKKyAgICAgICAgICAg
IGlmIG5vdCBfaW1wb3J0X3NzbCgpOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuY3JpdGljYWwo
J3NzbCBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZScpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQo
MSkKKyAgICAgICAgZWxpZiBvcHRpb25zLnRsc19tb2R1bGUgPT0gX1RMU19CWV9QWU9QRU5TU0w6
CisgICAgICAgICAgICBpZiBub3QgX2ltcG9ydF9weW9wZW5zc2woKToKKyAgICAgICAgICAgICAg
ICBsb2dnaW5nLmNyaXRpY2FsKCdweU9wZW5TU0wgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUnKQor
ICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBs
b2dnaW5nLmNyaXRpY2FsKCdJbnZhbGlkIC0tdGxzLW1vZHVsZSBvcHRpb246ICVyJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50bHNfbW9kdWxlKQorICAgICAgICAgICAg
c3lzLmV4aXQoMSkKKworICAgICAgICBpZiBub3Qgb3B0aW9ucy5wcml2YXRlX2tleSBvciBub3Qg
b3B0aW9ucy5jZXJ0aWZpY2F0ZToKKyAgICAgICAgICAgIGxvZ2dpbmcuY3JpdGljYWwoCisgICAg
ICAgICAgICAgICAgICAgICdUbyB1c2UgVExTLCBzcGVjaWZ5IHByaXZhdGVfa2V5IGFuZCBjZXJ0
aWZpY2F0ZS4nKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBpZiAob3B0aW9u
cy50bHNfY2xpZW50X2NlcnRfb3B0aW9uYWwgYW5kCisgICAgICAgICAgICBub3Qgb3B0aW9ucy50
bHNfY2xpZW50X2F1dGgpOgorICAgICAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgnQ2xpZW50IGF1
dGhlbnRpY2F0aW9uIG11c3QgYmUgZW5hYmxlZCB0byAnCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdzcGVjaWZ5IHRsc19jbGllbnRfY2VydF9vcHRpb25hbCcpCisgICAgICAgICAgICBz
eXMuZXhpdCgxKQorICAgIGVsc2U6CisgICAgICAgIGlmIG9wdGlvbnMudGxzX21vZHVsZSBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgIGxvZ2dpbmcuY3JpdGljYWwoJ1VzZSAtLXRscy1tb2R1bGUg
b3B0aW9uIG9ubHkgdG9nZXRoZXIgd2l0aCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICctLXVzZS10bHMgb3B0aW9uLicpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAg
IGlmIG9wdGlvbnMudGxzX2NsaWVudF9hdXRoOgorICAgICAgICAgICAgbG9nZ2luZy5jcml0aWNh
bCgnVExTIG11c3QgYmUgZW5hYmxlZCBmb3IgY2xpZW50IGF1dGhlbnRpY2F0aW9uLicpCisgICAg
ICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGlmIG9wdGlvbnMudGxzX2NsaWVudF9jZXJ0
X29wdGlvbmFsOgorICAgICAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgnVExTIG11c3QgYmUgZW5h
YmxlZCBmb3IgY2xpZW50IGF1dGhlbnRpY2F0aW9uLicpCisgICAgICAgICAgICBzeXMuZXhpdCgx
KQorCisgICAgaWYgbm90IG9wdGlvbnMuc2Nhbl9kaXI6CisgICAgICAgIG9wdGlvbnMuc2Nhbl9k
aXIgPSBvcHRpb25zLndlYnNvY2tfaGFuZGxlcnMKKworICAgIGlmIG9wdGlvbnMudXNlX2Jhc2lj
X2F1dGg6CisgICAgICAgIG9wdGlvbnMuYmFzaWNfYXV0aF9jcmVkZW50aWFsID0gJ0Jhc2ljICcg
KyBiYXNlNjQuYjY0ZW5jb2RlKAorICAgICAgICAgICAgb3B0aW9ucy5iYXNpY19hdXRoX2NyZWRl
bnRpYWwpCisKKyAgICB0cnk6CisgICAgICAgIGlmIG9wdGlvbnMudGhyZWFkX21vbml0b3JfaW50
ZXJ2YWxfaW5fc2VjID4gMDoKKyAgICAgICAgICAgICMgUnVuIGEgdGhyZWFkIG1vbml0b3IgdG8g
c2hvdyB0aGUgc3RhdHVzIG9mIHNlcnZlciB0aHJlYWRzIGZvcgorICAgICAgICAgICAgIyBkZWJ1
Z2dpbmcuCisgICAgICAgICAgICBUaHJlYWRNb25pdG9yKG9wdGlvbnMudGhyZWFkX21vbml0b3Jf
aW50ZXJ2YWxfaW5fc2VjKS5zdGFydCgpCisKKyAgICAgICAgc2VydmVyID0gV2ViU29ja2V0U2Vy
dmVyKG9wdGlvbnMpCisgICAgICAgIHNlcnZlci5zZXJ2ZV9mb3JldmVyKCkKKyAgICBleGNlcHQg
RXhjZXB0aW9uLCBlOgorICAgICAgICBsb2dnaW5nLmNyaXRpY2FsKCdtb2RfcHl3ZWJzb2NrZXQ6
ICVzJyAlIGUpCisgICAgICAgIGxvZ2dpbmcuY3JpdGljYWwoJ21vZF9weXdlYnNvY2tldDogJXMn
ICUgdXRpbC5nZXRfc3RhY2tfdHJhY2UoKSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitpZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIF9tYWluKHN5cy5hcmd2WzE6XSkKKworCisjIHZp
OnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L3N0cmVh
bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9w
eXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L3N0cmVhbS5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZGM1
MzMyNzk3NDk3YjU4MGUzYjdlZmYyZjg4ZDE4OGQ3MDQxZjEzCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29j
a2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvc3RyZWFtLnB5CkBAIC0wLDAgKzEsNTcgQEAKKyMgQ29w
eXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisKKyIiIlRoaXMgZmlsZSBleHBvcnRzIHB1YmxpYyBzeW1ib2xzLgorIiIi
CisKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBCYWRPcGVyYXRp
b25FeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1fYmFzZSBpbXBvcnQgQ29u
bmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1f
YmFzZSBpbXBvcnQgSW52YWxpZEZyYW1lRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5f
c3RyZWFtX2Jhc2UgaW1wb3J0IEludmFsaWRVVEY4RXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNv
Y2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IFVuc3VwcG9ydGVkRnJhbWVFeGNlcHRpb24KK2Zyb20g
bW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1faGl4aWU3NSBpbXBvcnQgU3RyZWFtSGl4aWU3NQorZnJv
bSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9oeWJpIGltcG9ydCBGcmFtZQorZnJvbSBtb2RfcHl3
ZWJzb2NrZXQuX3N0cmVhbV9oeWJpIGltcG9ydCBTdHJlYW0KK2Zyb20gbW9kX3B5d2Vic29ja2V0
Ll9zdHJlYW1faHliaSBpbXBvcnQgU3RyZWFtT3B0aW9ucworCisjIFRoZXNlIG1ldGhvZHMgYXJl
IGludGVuZGVkIHRvIGJlIHVzZWQgYnkgV2ViU29ja2V0IGNsaWVudCBkZXZlbG9wZXJzIHRvIGhh
dmUKKyMgdGhlaXIgaW1wbGVtZW50YXRpb25zIHJlY2VpdmUgYnJva2VuIGRhdGEgaW4gdGVzdHMu
Citmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2h5YmkgaW1wb3J0IGNyZWF0ZV9jbG9zZV9m
cmFtZQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9oeWJpIGltcG9ydCBjcmVhdGVfaGVh
ZGVyCitmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2h5YmkgaW1wb3J0IGNyZWF0ZV9sZW5n
dGhfaGVhZGVyCitmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2h5YmkgaW1wb3J0IGNyZWF0
ZV9waW5nX2ZyYW1lCitmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2h5YmkgaW1wb3J0IGNy
ZWF0ZV9wb25nX2ZyYW1lCitmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2h5YmkgaW1wb3J0
IGNyZWF0ZV9iaW5hcnlfZnJhbWUKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1faHliaSBp
bXBvcnQgY3JlYXRlX3RleHRfZnJhbWUKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1faHli
aSBpbXBvcnQgY3JlYXRlX2Nsb3NpbmdfaGFuZHNoYWtlX2JvZHkKKworCisjIHZpOnN0cz00IHN3
PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRz
ZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L3V0aWwucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQv
c3JjL21vZF9weXdlYnNvY2tldC91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwOWQwNDkyMzY1NmZhNjk0
ZDY3MmNkMjFlNDkxNGMwZWZmNzA0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9w
eXdlYnNvY2tldC91dGlsLnB5CkBAIC0wLDAgKzEsNDEwIEBACisjIENvcHlyaWdodCAyMDExLCBH
b29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
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
CisiIiJXZWJTb2NrZXQgdXRpbGl0aWVzLgorIiIiCisKKworaW1wb3J0IGFycmF5CitpbXBvcnQg
ZXJybm8KKworIyBJbXBvcnQgaGFzaCBjbGFzc2VzIGZyb20gYSBtb2R1bGUgYXZhaWxhYmxlIGFu
ZCByZWNvbW1lbmRlZCBmb3IgZWFjaCBQeXRob24KKyMgdmVyc2lvbiBhbmQgcmUtZXhwb3J0IHRo
b3NlIHN5bWJvbC4gVXNlIHNoYSBhbmQgbWQ1IG1vZHVsZSBpbiBQeXRob24gMi40LCBhbmQKKyMg
aGFzaGxpYiBtb2R1bGUgaW4gUHl0aG9uIDIuNi4KK3RyeToKKyAgICBpbXBvcnQgaGFzaGxpYgor
ICAgIG1kNV9oYXNoID0gaGFzaGxpYi5tZDUKKyAgICBzaGExX2hhc2ggPSBoYXNobGliLnNoYTEK
K2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgbWQ1CisgICAgaW1wb3J0IHNoYQorICAg
IG1kNV9oYXNoID0gbWQ1Lm1kNQorICAgIHNoYTFfaGFzaCA9IHNoYS5zaGEKKworaW1wb3J0IFN0
cmluZ0lPCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzb2Nr
ZXQKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCB6bGliCisKK3RyeToKKyAgICBmcm9tIG1vZF9w
eXdlYnNvY2tldCBpbXBvcnQgZmFzdF9tYXNraW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAg
cGFzcworCisKK2RlZiBnZXRfc3RhY2tfdHJhY2UoKToKKyAgICAiIiJHZXQgdGhlIGN1cnJlbnQg
c3RhY2sgdHJhY2UgYXMgc3RyaW5nLgorCisgICAgVGhpcyBpcyBuZWVkZWQgdG8gc3VwcG9ydCBQ
eXRob24gMi4zLgorICAgIFRPRE86IFJlbW92ZSB0aGlzIHdoZW4gd2Ugb25seSBzdXBwb3J0IFB5
dGhvbiAyLjQgYW5kIGFib3ZlLgorICAgICAgICAgIFVzZSB0cmFjZWJhY2suZm9ybWF0X2V4YyBp
bnN0ZWFkLgorICAgICIiIgorCisgICAgb3V0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgIHRy
YWNlYmFjay5wcmludF9leGMoZmlsZT1vdXQpCisgICAgcmV0dXJuIG91dC5nZXR2YWx1ZSgpCisK
KworZGVmIHByZXBlbmRfbWVzc2FnZV90b19leGNlcHRpb24obWVzc2FnZSwgZXhjKToKKyAgICAi
IiJQcmVwZW5kIG1lc3NhZ2UgdG8gdGhlIGV4Y2VwdGlvbi4iIiIKKworICAgIGV4Yy5hcmdzID0g
KG1lc3NhZ2UgKyBzdHIoZXhjKSwpCisgICAgcmV0dXJuCisKKworZGVmIF9fdHJhbnNsYXRlX2lu
dGVycChpbnRlcnAsIGN5Z3dpbl9wYXRoKToKKyAgICAiIiJUcmFuc2xhdGUgaW50ZXJwIHByb2dy
YW0gcGF0aCBmb3IgV2luMzIgcHl0aG9uIHRvIHJ1biBjeWd3aW4gcHJvZ3JhbQorICAgIChlLmcu
IHBlcmwpLiAgTm90ZSB0aGF0IGl0IGRvZXNuJ3Qgc3VwcG9ydCBwYXRoIHRoYXQgY29udGFpbnMg
c3BhY2UsCisgICAgd2hpY2ggaXMgdHlwaWNhbGx5IHRydWUgZm9yIFVuaXgsIHdoZXJlICMhLXNj
cmlwdCBpcyB3cml0dGVuLgorICAgIEZvciBXaW4zMiBweXRob24sIGN5Z3dpbl9wYXRoIGlzIGEg
ZGlyZWN0b3J5IG9mIGN5Z3dpbiBiaW5hcmllcy4KKworICAgIEFyZ3M6CisgICAgICBpbnRlcnA6
IGludGVycCBjb21tYW5kIGxpbmUKKyAgICAgIGN5Z3dpbl9wYXRoOiBkaXJlY3RvcnkgbmFtZSBv
ZiBjeWd3aW4gYmluYXJ5LCBvciBOb25lCisgICAgUmV0dXJuczoKKyAgICAgIHRyYW5zbGF0ZWQg
aW50ZXJwIGNvbW1hbmQgbGluZS4KKyAgICAiIiIKKyAgICBpZiBub3QgY3lnd2luX3BhdGg6Cisg
ICAgICAgIHJldHVybiBpbnRlcnAKKyAgICBtID0gcmUubWF0Y2goJ15bXiBdKi8oW14gXSspKCAu
Kik/JywgaW50ZXJwKQorICAgIGlmIG06CisgICAgICAgIGNtZCA9IG9zLnBhdGguam9pbihjeWd3
aW5fcGF0aCwgbS5ncm91cCgxKSkKKyAgICAgICAgcmV0dXJuIGNtZCArIG0uZ3JvdXAoMikKKyAg
ICByZXR1cm4gaW50ZXJwCisKKworZGVmIGdldF9zY3JpcHRfaW50ZXJwKHNjcmlwdF9wYXRoLCBj
eWd3aW5fcGF0aD1Ob25lKToKKyAgICAiIiJHZXRzICMhLWludGVycHJldGVyIGNvbW1hbmQgbGlu
ZSBmcm9tIHRoZSBzY3JpcHQuCisKKyAgICBJdCBhbHNvIGZpeGVzIGNvbW1hbmQgcGF0aC4gIFdo
ZW4gQ3lnd2luIFB5dGhvbiBpcyB1c2VkLCBlLmcuIGluIFdlYktpdCwKKyAgICBpdCBjb3VsZCBy
dW4gIi91c3IvYmluL3BlcmwgLXdUIGhlbGxvLnBsIi4KKyAgICBXaGVuIFdpbjMyIFB5dGhvbiBp
cyB1c2VkLCBlLmcuIGluIENocm9taXVtLCBpdCBjb3VsZG4ndC4gIFNvLCBmaXgKKyAgICAiL3Vz
ci9iaW4vcGVybCIgdG8gIjxjeWd3aW5fcGF0aD5ccGVybC5leGUiLgorCisgICAgQXJnczoKKyAg
ICAgIHNjcmlwdF9wYXRoOiBwYXRobmFtZSBvZiB0aGUgc2NyaXB0CisgICAgICBjeWd3aW5fcGF0
aDogZGlyZWN0b3J5IG5hbWUgb2YgY3lnd2luIGJpbmFyeSwgb3IgTm9uZQorICAgIFJldHVybnM6
CisgICAgICAjIS1pbnRlcnByZXRlciBjb21tYW5kIGxpbmUsIG9yIE5vbmUgaWYgaXQgaXMgbm90
ICMhLXNjcmlwdC4KKyAgICAiIiIKKyAgICBmcCA9IG9wZW4oc2NyaXB0X3BhdGgpCisgICAgbGlu
ZSA9IGZwLnJlYWRsaW5lKCkKKyAgICBmcC5jbG9zZSgpCisgICAgbSA9IHJlLm1hdGNoKCdeIyEo
LiopJywgbGluZSkKKyAgICBpZiBtOgorICAgICAgICByZXR1cm4gX190cmFuc2xhdGVfaW50ZXJw
KG0uZ3JvdXAoMSksIGN5Z3dpbl9wYXRoKQorICAgIHJldHVybiBOb25lCisKKworZGVmIHdyYXBf
cG9wZW4zX2Zvcl93aW4oY3lnd2luX3BhdGgpOgorICAgICIiIldyYXAgcG9wZW4zIHRvIHN1cHBv
cnQgIyEtc2NyaXB0IG9uIFdpbmRvd3MuCisKKyAgICBBcmdzOgorICAgICAgY3lnd2luX3BhdGg6
ICBwYXRoIGZvciBjeWd3aW4gYmluYXJ5IGlmIGNvbW1hbmQgcGF0aCBpcyBuZWVkZWQgdG8gYmUK
KyAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC4gIE5vbmUgaWYgbm8gdHJhbnNsYXRpb24g
cmVxdWlyZWQuCisgICAgIiIiCisKKyAgICBfX29yaWdfcG9wZW4zID0gb3MucG9wZW4zCisKKyAg
ICBkZWYgX193cmFwX3BvcGVuMyhjbWQsIG1vZGU9J3QnLCBidWZzaXplPS0xKToKKyAgICAgICAg
Y21kbGluZSA9IGNtZC5zcGxpdCgnICcpCisgICAgICAgIGludGVycCA9IGdldF9zY3JpcHRfaW50
ZXJwKGNtZGxpbmVbMF0sIGN5Z3dpbl9wYXRoKQorICAgICAgICBpZiBpbnRlcnA6CisgICAgICAg
ICAgICBjbWQgPSBpbnRlcnAgKyAnICcgKyBjbWQKKyAgICAgICAgcmV0dXJuIF9fb3JpZ19wb3Bl
bjMoY21kLCBtb2RlLCBidWZzaXplKQorCisgICAgb3MucG9wZW4zID0gX193cmFwX3BvcGVuMwor
CisKK2RlZiBoZXhpZnkocyk6CisgICAgcmV0dXJuICcgJy5qb2luKG1hcChsYW1iZGEgeDogJyUw
MngnICUgb3JkKHgpLCBzKSkKKworCitkZWYgZ2V0X2NsYXNzX2xvZ2dlcihvKToKKyAgICByZXR1
cm4gbG9nZ2luZy5nZXRMb2dnZXIoCisgICAgICAgICclcy4lcycgJSAoby5fX2NsYXNzX18uX19t
b2R1bGVfXywgby5fX2NsYXNzX18uX19uYW1lX18pKQorCisKK2NsYXNzIE5vb3BNYXNrZXIob2Jq
ZWN0KToKKyAgICAiIiJBIG1hc2tpbmcgb2JqZWN0IHRoYXQgaGFzIHRoZSBzYW1lIGludGVyZmFj
ZSBhcyBSZXBlYXRlZFhvck1hc2tlciBidXQKKyAgICBqdXN0IHJldHVybnMgdGhlIHN0cmluZyBw
YXNzZWQgaW4gd2l0aG91dCBtYWtpbmcgYW55IGNoYW5nZS4KKyAgICAiIiIKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIG1hc2soc2VsZiwgcyk6Cisg
ICAgICAgIHJldHVybiBzCisKKworY2xhc3MgUmVwZWF0ZWRYb3JNYXNrZXIob2JqZWN0KToKKyAg
ICAiIiJBIG1hc2tpbmcgb2JqZWN0IHRoYXQgYXBwbGllcyBYT1Igb24gdGhlIHN0cmluZyBnaXZl
biB0byBtYXNrIG1ldGhvZAorICAgIHdpdGggdGhlIG1hc2tpbmcgYnl0ZXMgZ2l2ZW4gdG8gdGhl
IGNvbnN0cnVjdG9yIHJlcGVhdGVkbHkuIFRoaXMgb2JqZWN0CisgICAgcmVtZW1iZXJzIHRoZSBw
b3NpdGlvbiBpbiB0aGUgbWFza2luZyBieXRlcyB0aGUgbGFzdCBtYXNrIG1ldGhvZCBjYWxsCisg
ICAgZW5kZWQgYW5kIHJlc3VtZXMgZnJvbSB0aGF0IHBvaW50IG9uIHRoZSBuZXh0IG1hc2sgbWV0
aG9kIGNhbGwuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFza2luZ19rZXkp
OgorICAgICAgICBzZWxmLl9tYXNraW5nX2tleSA9IG1hc2tpbmdfa2V5CisgICAgICAgIHNlbGYu
X21hc2tpbmdfa2V5X2luZGV4ID0gMAorCisgICAgZGVmIF9tYXNrX3VzaW5nX3N3aWcoc2VsZiwg
cyk6CisgICAgICAgIG1hc2tlZF9kYXRhID0gZmFzdF9tYXNraW5nLm1hc2soCisgICAgICAgICAg
ICAgICAgcywgc2VsZi5fbWFza2luZ19rZXksIHNlbGYuX21hc2tpbmdfa2V5X2luZGV4KQorICAg
ICAgICBzZWxmLl9tYXNraW5nX2tleV9pbmRleCA9ICgKKyAgICAgICAgICAgICAgICAoc2VsZi5f
bWFza2luZ19rZXlfaW5kZXggKyBsZW4ocykpICUgbGVuKHNlbGYuX21hc2tpbmdfa2V5KSkKKyAg
ICAgICAgcmV0dXJuIG1hc2tlZF9kYXRhCisKKyAgICBkZWYgX21hc2tfdXNpbmdfYXJyYXkoc2Vs
Ziwgcyk6CisgICAgICAgIHJlc3VsdCA9IGFycmF5LmFycmF5KCdCJykKKyAgICAgICAgcmVzdWx0
LmZyb21zdHJpbmcocykKKworICAgICAgICAjIFVzZSB0ZW1wb3JhcnkgbG9jYWwgdmFyaWFibGVz
IHRvIGVsaW1pbmF0ZSB0aGUgY29zdCB0byBhY2Nlc3MKKyAgICAgICAgIyBhdHRyaWJ1dGVzCisg
ICAgICAgIG1hc2tpbmdfa2V5ID0gbWFwKG9yZCwgc2VsZi5fbWFza2luZ19rZXkpCisgICAgICAg
IG1hc2tpbmdfa2V5X3NpemUgPSBsZW4obWFza2luZ19rZXkpCisgICAgICAgIG1hc2tpbmdfa2V5
X2luZGV4ID0gc2VsZi5fbWFza2luZ19rZXlfaW5kZXgKKworICAgICAgICBmb3IgaSBpbiB4cmFu
Z2UobGVuKHJlc3VsdCkpOgorICAgICAgICAgICAgcmVzdWx0W2ldIF49IG1hc2tpbmdfa2V5W21h
c2tpbmdfa2V5X2luZGV4XQorICAgICAgICAgICAgbWFza2luZ19rZXlfaW5kZXggPSAobWFza2lu
Z19rZXlfaW5kZXggKyAxKSAlIG1hc2tpbmdfa2V5X3NpemUKKworICAgICAgICBzZWxmLl9tYXNr
aW5nX2tleV9pbmRleCA9IG1hc2tpbmdfa2V5X2luZGV4CisKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC50b3N0cmluZygpCisKKyAgICBpZiAnZmFzdF9tYXNraW5nJyBpbiBnbG9iYWxzKCk6CisgICAg
ICAgIG1hc2sgPSBfbWFza191c2luZ19zd2lnCisgICAgZWxzZToKKyAgICAgICAgbWFzayA9IF9t
YXNrX3VzaW5nX2FycmF5CisKKworIyBCeSBtYWtpbmcgd2JpdHMgb3B0aW9uIG5lZ2F0aXZlLCB3
ZSBjYW4gc3VwcHJlc3MgQ01GL0ZMRyAoMiBvY3RldCkgYW5kCisjIEFETEVSMzIgKDQgb2N0ZXQp
IGZpZWxkcyBvZiB6bGliIHNvIHRoYXQgd2UgY2FuIHVzZSB6bGliIG1vZHVsZSBqdXN0IGFzCisj
IGRlZmxhdGUgbGlicmFyeS4gRElDVElEIHdvbid0IGJlIGFkZGVkIGFzIGZhciBhcyB3ZSBkb24n
dCBzZXQgZGljdGlvbmFyeS4KKyMgTFo3NyB3aW5kb3cgb2YgMzJLIHdpbGwgYmUgdXNlZCBmb3Ig
Ym90aCBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbi4KKyMgRm9yIGRlY29tcHJlc3Npb24s
IHdlIGNhbiBqdXN0IHVzZSAzMksgdG8gY292ZXIgYW55IHdpbmRvd3Mgc2l6ZS4gRm9yCisjIGNv
bXByZXNzaW9uLCB3ZSB1c2UgMzJLIHNvIHJlY2VpdmVycyBtdXN0IHVzZSAzMksuCisjCisjIENv
bXByZXNzaW9uIGxldmVsIGlzIFpfREVGQVVMVF9DT01QUkVTU0lPTi4gV2UgZG9uJ3QgaGF2ZSB0
byBtYXRjaCBsZXZlbAorIyB0byBkZWNvZGUuCisjCisjIFNlZSB6Y29uZi5oLCBkZWZsYXRlLmNj
LCBpbmZsYXRlLmNjIG9mIHpsaWIgbGlicmFyeSwgYW5kIHpsaWJtb2R1bGUuYyBvZgorIyBQeXRo
b24uIFNlZSBhbHNvIFJGQzE5NTAgKFpMSUIgMy4zKS4KKworCitjbGFzcyBfRGVmbGF0ZXIob2Jq
ZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3dfYml0cyk6CisgICAgICAgIHNl
bGYuX2xvZ2dlciA9IGdldF9jbGFzc19sb2dnZXIoc2VsZikKKworICAgICAgICBzZWxmLl9jb21w
cmVzcyA9IHpsaWIuY29tcHJlc3NvYmooCisgICAgICAgICAgICB6bGliLlpfREVGQVVMVF9DT01Q
UkVTU0lPTiwgemxpYi5ERUZMQVRFRCwgLXdpbmRvd19iaXRzKQorCisgICAgZGVmIGNvbXByZXNz
KHNlbGYsIGJ5dGVzKToKKyAgICAgICAgY29tcHJlc3NlZF9ieXRlcyA9IHNlbGYuX2NvbXByZXNz
LmNvbXByZXNzKGJ5dGVzKQorICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ0NvbXByZXNzIGlu
cHV0ICVyJywgYnl0ZXMpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnQ29tcHJlc3MgcmVz
dWx0ICVyJywgY29tcHJlc3NlZF9ieXRlcykKKyAgICAgICAgcmV0dXJuIGNvbXByZXNzZWRfYnl0
ZXMKKworICAgIGRlZiBjb21wcmVzc19hbmRfZmx1c2goc2VsZiwgYnl0ZXMpOgorICAgICAgICBj
b21wcmVzc2VkX2J5dGVzID0gc2VsZi5fY29tcHJlc3MuY29tcHJlc3MoYnl0ZXMpCisgICAgICAg
IGNvbXByZXNzZWRfYnl0ZXMgKz0gc2VsZi5fY29tcHJlc3MuZmx1c2goemxpYi5aX1NZTkNfRkxV
U0gpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnQ29tcHJlc3MgaW5wdXQgJXInLCBieXRl
cykKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdDb21wcmVzcyByZXN1bHQgJXInLCBjb21w
cmVzc2VkX2J5dGVzKQorICAgICAgICByZXR1cm4gY29tcHJlc3NlZF9ieXRlcworCisgICAgZGVm
IGNvbXByZXNzX2FuZF9maW5pc2goc2VsZiwgYnl0ZXMpOgorICAgICAgICBjb21wcmVzc2VkX2J5
dGVzID0gc2VsZi5fY29tcHJlc3MuY29tcHJlc3MoYnl0ZXMpCisgICAgICAgIGNvbXByZXNzZWRf
Ynl0ZXMgKz0gc2VsZi5fY29tcHJlc3MuZmx1c2goemxpYi5aX0ZJTklTSCkKKyAgICAgICAgc2Vs
Zi5fbG9nZ2VyLmRlYnVnKCdDb21wcmVzcyBpbnB1dCAlcicsIGJ5dGVzKQorICAgICAgICBzZWxm
Ll9sb2dnZXIuZGVidWcoJ0NvbXByZXNzIHJlc3VsdCAlcicsIGNvbXByZXNzZWRfYnl0ZXMpCisg
ICAgICAgIHJldHVybiBjb21wcmVzc2VkX2J5dGVzCisKKworY2xhc3MgX0luZmxhdGVyKG9iamVj
dCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2luZG93X2JpdHMpOgorICAgICAgICBzZWxm
Ll9sb2dnZXIgPSBnZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisgICAgICAgIHNlbGYuX3dpbmRvd19i
aXRzID0gd2luZG93X2JpdHMKKworICAgICAgICBzZWxmLl91bmNvbnN1bWVkID0gJycKKworICAg
ICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIHNpemUpOgorICAg
ICAgICBpZiBub3QgKHNpemUgPT0gLTEgb3Igc2l6ZSA+IDApOgorICAgICAgICAgICAgcmFpc2Ug
RXhjZXB0aW9uKCdzaXplIG11c3QgYmUgLTEgb3IgcG9zaXRpdmUnKQorCisgICAgICAgIGRhdGEg
PSAnJworCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpZiBzaXplID09IC0xOgor
ICAgICAgICAgICAgICAgIGRhdGEgKz0gc2VsZi5fZGVjb21wcmVzcy5kZWNvbXByZXNzKHNlbGYu
X3VuY29uc3VtZWQpCisgICAgICAgICAgICAgICAgIyBTZWUgUHl0aG9uIGJ1ZyBodHRwOi8vYnVn
cy5weXRob24ub3JnL2lzc3VlMTIwNTAgdG8KKyAgICAgICAgICAgICAgICAjIHVuZGVyc3RhbmQg
d2h5IHRoZSBzYW1lIGNvZGUgY2Fubm90IGJlIHVzZWQgZm9yIHVwZGF0aW5nCisgICAgICAgICAg
ICAgICAgIyBzZWxmLl91bmNvbnN1bWVkIGZvciBoZXJlIGFuZCBlbHNlIGJsb2NrLgorICAgICAg
ICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWQgPSAnJworICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBkYXRhICs9IHNlbGYuX2RlY29tcHJlc3MuZGVjb21wcmVzcygKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fdW5jb25zdW1lZCwgc2l6ZSAtIGxlbihkYXRhKSkKKyAgICAgICAg
ICAgICAgICBzZWxmLl91bmNvbnN1bWVkID0gc2VsZi5fZGVjb21wcmVzcy51bmNvbnN1bWVkX3Rh
aWwKKyAgICAgICAgICAgIGlmIHNlbGYuX2RlY29tcHJlc3MudW51c2VkX2RhdGE6CisgICAgICAg
ICAgICAgICAgIyBFbmNvdW50ZXJlZCBhIGxhc3QgYmxvY2sgKGkuZS4gYSBibG9jayB3aXRoIEJG
SU5BTCA9IDEpIGFuZAorICAgICAgICAgICAgICAgICMgZm91bmQgYSBuZXcgc3RyZWFtICh1bnVz
ZWRfZGF0YSkuIFdlIGNhbm5vdCB1c2UgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAjIHpsaWIu
RGVjb21wcmVzcyBvYmplY3QgZm9yIHRoZSBuZXcgc3RyZWFtLiBDcmVhdGUgYSBuZXcKKyAgICAg
ICAgICAgICAgICAjIERlY29tcHJlc3Mgb2JqZWN0IHRvIGRlY29tcHJlc3MgdGhlIG5ldyBvbmUu
CisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgSXQncyBmaW5lIHRvIGlnbm9y
ZSB1bmNvbnN1bWVkX3RhaWwgaWYgdW51c2VkX2RhdGEgaXMgbm90CisgICAgICAgICAgICAgICAg
IyBlbXB0eS4KKyAgICAgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkID0gc2VsZi5fZGVjb21w
cmVzcy51bnVzZWRfZGF0YQorICAgICAgICAgICAgICAgIHNlbGYucmVzZXQoKQorICAgICAgICAg
ICAgICAgIGlmIHNpemUgPj0gMCBhbmQgbGVuKGRhdGEpID09IHNpemU6CisgICAgICAgICAgICAg
ICAgICAgICMgZGF0YSBpcyBmaWxsZWQuIERvbid0IGNhbGwgZGVjb21wcmVzcyBhZ2Fpbi4KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgICAgICAjIFJlLWludm9rZSBEZWNvbXByZXNzLmRlY29tcHJlc3MgdG8gdHJ5IHRvIGRl
Y29tcHJlc3MgYWxsCisgICAgICAgICAgICAgICAgICAgICMgYXZhaWxhYmxlIGJ5dGVzIGJlZm9y
ZSBpbnZva2luZyByZWFkIHdoaWNoIGJsb2NrcyB1bnRpbAorICAgICAgICAgICAgICAgICAgICAj
IGFueSBuZXcgYnl0ZSBpcyBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgSGVyZSwgc2luY2UgdW51c2Vk
X2RhdGEgaXMgZW1wdHksIGV2ZW4gaWYgdW5jb25zdW1lZF90YWlsIGlzCisgICAgICAgICAgICAg
ICAgIyBub3QgZW1wdHksIGJ5dGVzIG9mIHJlcXVlc3RlZCBsZW5ndGggYXJlIGFscmVhZHkgaW4g
ZGF0YS4gV2UKKyAgICAgICAgICAgICAgICAjIGRvbid0IGhhdmUgdG8gImNvbnRpbnVlIiBoZXJl
LgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAg
IHNlbGYuX2xvZ2dlci5kZWJ1ZygnRGVjb21wcmVzc2VkICVyJywgZGF0YSkKKyAgICAgICAgcmV0
dXJuIGRhdGEKKworICAgIGRlZiBhcHBlbmQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX2xv
Z2dlci5kZWJ1ZygnQXBwZW5kZWQgJXInLCBkYXRhKQorICAgICAgICBzZWxmLl91bmNvbnN1bWVk
ICs9IGRhdGEKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRl
YnVnKCdSZXNldCcpCisgICAgICAgIHNlbGYuX2RlY29tcHJlc3MgPSB6bGliLmRlY29tcHJlc3Nv
YmooLXNlbGYuX3dpbmRvd19iaXRzKQorCisKKyMgQ29tcHJlc3Nlcy9kZWNvbXByZXNzZXMgZ2l2
ZW4gb2N0ZXRzIHVzaW5nIHRoZSBtZXRob2QgaW50cm9kdWNlZCBpbiBSRkMxOTc5LgorCisKK2Ns
YXNzIF9SRkMxOTc5RGVmbGF0ZXIob2JqZWN0KToKKyAgICAiIiJBIGNvbXByZXNzb3IgY2xhc3Mg
dGhhdCBhcHBsaWVzIERFRkxBVEUgdG8gZ2l2ZW4gYnl0ZSBzZXF1ZW5jZSBhbmQKKyAgICBmbHVz
aGVzIHVzaW5nIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGluIHRoZSBSRkMxOTc5IHNlY3Rpb24g
Mi4xLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd19iaXRzLCBub19j
b250ZXh0X3Rha2VvdmVyKToKKyAgICAgICAgc2VsZi5fZGVmbGF0ZXIgPSBOb25lCisgICAgICAg
IGlmIHdpbmRvd19iaXRzIGlzIE5vbmU6CisgICAgICAgICAgICB3aW5kb3dfYml0cyA9IHpsaWIu
TUFYX1dCSVRTCisgICAgICAgIHNlbGYuX3dpbmRvd19iaXRzID0gd2luZG93X2JpdHMKKyAgICAg
ICAgc2VsZi5fbm9fY29udGV4dF90YWtlb3ZlciA9IG5vX2NvbnRleHRfdGFrZW92ZXIKKworICAg
IGRlZiBmaWx0ZXIoc2VsZiwgYnl0ZXMsIGZsdXNoPVRydWUsIGJmaW5hbD1GYWxzZSk6CisgICAg
ICAgIGlmIHNlbGYuX2RlZmxhdGVyIGlzIE5vbmUgb3IgKHNlbGYuX25vX2NvbnRleHRfdGFrZW92
ZXIgYW5kIGZsdXNoKToKKyAgICAgICAgICAgIHNlbGYuX2RlZmxhdGVyID0gX0RlZmxhdGVyKHNl
bGYuX3dpbmRvd19iaXRzKQorCisgICAgICAgIGlmIGJmaW5hbDoKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHNlbGYuX2RlZmxhdGVyLmNvbXByZXNzX2FuZF9maW5pc2goYnl0ZXMpCisgICAgICAgICAg
ICAjIEFkZCBhIHBhZGRpbmcgYmxvY2sgd2l0aCBCRklOQUwgPSAwIGFuZCBCVFlQRSA9IDAuCisg
ICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBjaHIoMCkKKyAgICAgICAgICAgIHNlbGYuX2Rl
ZmxhdGVyID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBpZiBmbHVz
aDoKKyAgICAgICAgICAgICMgU3RyaXAgbGFzdCA0IG9jdGV0cyB3aGljaCBpcyBMRU4gYW5kIE5M
RU4gZmllbGQgb2YgYQorICAgICAgICAgICAgIyBub24tY29tcHJlc3NlZCBibG9jayBhZGRlZCBm
b3IgWl9TWU5DX0ZMVVNILgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RlZmxhdGVyLmNvbXBy
ZXNzX2FuZF9mbHVzaChieXRlcylbOi00XQorICAgICAgICByZXR1cm4gc2VsZi5fZGVmbGF0ZXIu
Y29tcHJlc3MoYnl0ZXMpCisKKworY2xhc3MgX1JGQzE5NzlJbmZsYXRlcihvYmplY3QpOgorICAg
ICIiIkEgZGVjb21wcmVzc29yIGNsYXNzIGZvciBieXRlIHNlcXVlbmNlIGNvbXByZXNzZWQgYW5k
IGZsdXNoZWQgZm9sbG93aW5nCisgICAgdGhlIGFsZ29yaXRobSBkZXNjcmliZWQgaW4gdGhlIFJG
QzE5Nzkgc2VjdGlvbiAyLjEuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2lu
ZG93X2JpdHM9emxpYi5NQVhfV0JJVFMpOgorICAgICAgICBzZWxmLl9pbmZsYXRlciA9IF9JbmZs
YXRlcih3aW5kb3dfYml0cykKKworICAgIGRlZiBmaWx0ZXIoc2VsZiwgYnl0ZXMpOgorICAgICAg
ICAjIFJlc3RvcmUgc3RyaXBwZWQgTEVOIGFuZCBOTEVOIGZpZWxkIG9mIGEgbm9uLWNvbXByZXNz
ZWQgYmxvY2sgYWRkZWQKKyAgICAgICAgIyBmb3IgWl9TWU5DX0ZMVVNILgorICAgICAgICBzZWxm
Ll9pbmZsYXRlci5hcHBlbmQoYnl0ZXMgKyAnXHgwMFx4MDBceGZmXHhmZicpCisgICAgICAgIHJl
dHVybiBzZWxmLl9pbmZsYXRlci5kZWNvbXByZXNzKC0xKQorCisKK2NsYXNzIERlZmxhdGVTb2Nr
ZXQob2JqZWN0KToKKyAgICAiIiJBIHdyYXBwZXIgY2xhc3MgZm9yIHNvY2tldCBvYmplY3QgdG8g
aW50ZXJjZXB0IHNlbmQgYW5kIHJlY3YgdG8gcGVyZm9ybQorICAgIGRlZmxhdGUgY29tcHJlc3Np
b24gYW5kIGRlY29tcHJlc3Npb24gdHJhbnNwYXJlbnRseS4KKyAgICAiIiIKKworICAgICMgU2l6
ZSBvZiB0aGUgYnVmZmVyIHBhc3NlZCB0byByZWN2IHRvIHJlY2VpdmUgY29tcHJlc3NlZCBkYXRh
LgorICAgIF9SRUNWX1NJWkUgPSA0MDk2CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc29ja2V0
KToKKyAgICAgICAgc2VsZi5fc29ja2V0ID0gc29ja2V0CisKKyAgICAgICAgc2VsZi5fbG9nZ2Vy
ID0gZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX2RlZmxhdGVyID0gX0Rl
ZmxhdGVyKHpsaWIuTUFYX1dCSVRTKQorICAgICAgICBzZWxmLl9pbmZsYXRlciA9IF9JbmZsYXRl
cih6bGliLk1BWF9XQklUUykKKworICAgIGRlZiByZWN2KHNlbGYsIHNpemUpOgorICAgICAgICAi
IiJSZWNlaXZlcyBkYXRhIGZyb20gdGhlIHNvY2tldCBzcGVjaWZpZWQgb24gdGhlIGNvbnN0cnVj
dGlvbiB1cAorICAgICAgICB0byB0aGUgc3BlY2lmaWVkIHNpemUuIE9uY2UgYW55IGRhdGEgaXMg
YXZhaWxhYmxlLCByZXR1cm5zIGl0IGV2ZW4KKyAgICAgICAgaWYgaXQncyBzbWFsbGVyIHRoYW4g
dGhlIHNwZWNpZmllZCBzaXplLgorICAgICAgICAiIiIKKworICAgICAgICAjIFRPRE8odHlvc2hp
bm8pOiBBbGxvdyBjYWxsIHdpdGggc2l6ZT0wLiBJdCBzaG91bGQgYmxvY2sgdW50aWwgYW55Cisg
ICAgICAgICMgZGVjb21wcmVzc2VkIGRhdGEgaXMgYXZhaWxhYmxlLgorICAgICAgICBpZiBzaXpl
IDw9IDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ05vbi1wb3NpdGl2ZSBzaXplIHBh
c3NlZCcpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5faW5m
bGF0ZXIuZGVjb21wcmVzcyhzaXplKQorICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IDA6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgICAgICAgICAgcmVhZF9kYXRhID0gc2Vs
Zi5fc29ja2V0LnJlY3YoRGVmbGF0ZVNvY2tldC5fUkVDVl9TSVpFKQorICAgICAgICAgICAgaWYg
bm90IHJlYWRfZGF0YToKKyAgICAgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgICAgIHNl
bGYuX2luZmxhdGVyLmFwcGVuZChyZWFkX2RhdGEpCisKKyAgICBkZWYgc2VuZGFsbChzZWxmLCBi
eXRlcyk6CisgICAgICAgIHNlbGYuc2VuZChieXRlcykKKworICAgIGRlZiBzZW5kKHNlbGYsIGJ5
dGVzKToKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoc2VsZi5fZGVmbGF0ZXIuY29tcHJl
c3NfYW5kX2ZsdXNoKGJ5dGVzKSkKKyAgICAgICAgcmV0dXJuIGxlbihieXRlcykKKworCisjIHZp
OnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvc2V0dXAucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Nl
dHVwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFkYThkYjNlMTExYjBhNTQzMWQ3MWU2MWY0NDkxM2VjNWRhYzky
NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
d3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3NldHVwLnB5CkBAIC0wLDAgKzEsNzQgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAxMiwgR29vZ2xlIEluYy4K
KyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisj
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiU2V0IHVw
IHNjcmlwdCBmb3IgbW9kX3B5d2Vic29ja2V0LgorIiIiCisKKworZnJvbSBkaXN0dXRpbHMuY29y
ZSBpbXBvcnQgc2V0dXAsIEV4dGVuc2lvbgoraW1wb3J0IHN5cworCisKK19QQUNLQUdFX05BTUUg
PSAnbW9kX3B5d2Vic29ja2V0JworCisjIEJ1aWxkIGFuZCB1c2UgYSBDKysgZXh0ZW5zaW9uIGZv
ciBmYXN0ZXIgbWFza2luZy4gU1dJRyBpcyByZXF1aXJlZC4KK19VU0VfRkFTVF9NQVNLSU5HID0g
RmFsc2UKKworaWYgc3lzLnZlcnNpb24gPCAnMi4zJzoKKyAgICBwcmludCA+PiBzeXMuc3RkZXJy
LCAnJXMgcmVxdWlyZXMgUHl0aG9uIDIuMyBvciBsYXRlci4nICUgX1BBQ0tBR0VfTkFNRQorICAg
IHN5cy5leGl0KDEpCisKK2lmIF9VU0VfRkFTVF9NQVNLSU5HOgorICAgIHNldHVwKGV4dF9tb2R1
bGVzPVsKKyAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ21vZF9weXdlYnNvY2tldC9fZmFzdF9tYXNraW5nJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgWydtb2RfcHl3ZWJzb2NrZXQvZmFzdF9tYXNraW5nLmknXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3dpZ19vcHRzPVsnLWMrKyddKV0pCisKK3NldHVwKGF1dGhvcj0nWXV6
byBGdWppc2hpbWEnLAorICAgICAgYXV0aG9yX2VtYWlsPSd5dXpvQGNocm9taXVtLm9yZycsCisg
ICAgICBkZXNjcmlwdGlvbj0nV2ViU29ja2V0IGV4dGVuc2lvbiBmb3IgQXBhY2hlIEhUVFAgU2Vy
dmVyLicsCisgICAgICBsb25nX2Rlc2NyaXB0aW9uPSgKKyAgICAgICAgICAgICAgJ21vZF9weXdl
YnNvY2tldCBpcyBhbiBBcGFjaGUgSFRUUCBTZXJ2ZXIgZXh0ZW5zaW9uIGZvciAnCisgICAgICAg
ICAgICAgICd0aGUgV2ViU29ja2V0IFByb3RvY29sIChSRkMgNjQ1NSkuICcKKyAgICAgICAgICAg
ICAgJ1NlZSBtb2RfcHl3ZWJzb2NrZXQvX19pbml0X18ucHkgZm9yIG1vcmUgZGV0YWlsLicpLAor
ICAgICAgbGljZW5zZT0nU2VlIENPUFlJTkcnLAorICAgICAgbmFtZT1fUEFDS0FHRV9OQU1FLAor
ICAgICAgcGFja2FnZXM9W19QQUNLQUdFX05BTUUsIF9QQUNLQUdFX05BTUUgKyAnLmhhbmRzaGFr
ZSddLAorICAgICAgdXJsPSdodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHl3ZWJzb2NrZXQvJywK
KyAgICAgICMgU2VlIHRoZSBzb3VyY2Ugb2YgZGlzdHV0aWxzLnZlcnNpb24sIGRpc3R1dGlscy52
ZXJzaW9ucHJlZGljYXRlIGFuZAorICAgICAgIyBkaXN0dXRpbHMuZGlzdCB0byB1bmRlcnN0YW5k
IGhvdyB0byBuYW1lIHZlcnNpb24gbnVtYmVycy4KKyAgICAgIHZlcnNpb249JzAuNy45JywKKyAg
ICAgICkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9f
X2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90
b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjlkZTI5
YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rl
c3QvY2VydC9jYWNlcnQucGVtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L2NlcnQvY2FjZXJ0LnBlbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40ZGFkYWUxMjFiZGQzYWRiNzQ0MzgzY2QzYmYwOGMyMjZmODU1NGJhCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xz
L3B5d2Vic29ja2V0L3NyYy90ZXN0L2NlcnQvY2FjZXJ0LnBlbQpAQCAtMCwwICsxLDE3IEBACist
LS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUN2RENDQWlXZ0F3SUJBZ0lKQUtxVmdoa0dG
MXJTTUEwR0NTcUdTSWIzRFFFQkJRVUFNRWt4Q3pBSkJnTlYKK0JBWVRBa3BRTVE0d0RBWURWUVFJ
RXdWVWIydDViekVVTUJJR0ExVUVDaE1MY0hsM1pXSnpiMk5yWlhReEZEQVMKK0JnTlZCQU1UQzNC
NWQyVmljMjlqYTJWME1CNFhEVEV5TURZd05qQTNNalF6TTFvWERUTTVNVEF5TXpBM01qUXoKK00x
b3dTVEVMTUFrR0ExVUVCaE1DU2xBeERqQU1CZ05WQkFnVEJWUnZhM2x2TVJRd0VnWURWUVFLRXd0
d2VYZGwKK1luTnZZMnRsZERFVU1CSUdBMVVFQXhNTGNIbDNaV0p6YjJOclpYUXdnWjh3RFFZSktv
WklodmNOQVFFQkJRQUQKK2dZMEFNSUdKQW9HQkFLb1NFVzJiaVF4VnJNTUtkbi84UEp6RFlpU1hE
UFI5V1FiTFJSUTFHbTVqa0NZaWFoWFcKK3UyQ2JUVGhmUFBmaTJOSEEzSStIbFQ3Z085eVI3UlZV
dk42SVNVekd3WERFcTRmNFVOcXRRT2hRYXFxSytDWjkKK0xPL0JoTy9ZWWZOcmJTUGxZekhVS2FU
OWVzZTd4TzlWelZLTFcrcVVmMk1qaDQvK1N6eEJETlA3QWdNQkFBR2oKK2dhc3dnYWd3SFFZRFZS
ME9CQllFRk9zV2R4Q1N1eWh3YVplYWI2Qm9UaG8zKytiek1Ia0dBMVVkSXdSeU1IQ0EKK0ZPc1dk
eENTdXlod2FaZWFiNkJvVGhvMysrYnpvVTJrU3pCSk1Rc3dDUVlEVlFRR0V3SktVREVPTUF3R0Ex
VUUKK0NCTUZWRzlyZVc4eEZEQVNCZ05WQkFvVEMzQjVkMlZpYzI5amEyVjBNUlF3RWdZRFZRUURF
d3R3ZVhkbFluTnYKK1kydGxkSUlKQUtxVmdoa0dGMXJTTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlK
S29aSWh2Y05BUUVGQlFBRGdZRUEKK2dzTUkxV0VZcU53L2poVUlkclRCY0N4SjBYNmhKdkE5emlL
QU5WbTFScys0UDNZREFya1E4YkNyNnhZK0t3N3MKK1pwMHlFN2RNOEdNZGkrRFU2aEwzdDNFNWVN
a1RTMXlacjlXQ0s0ZjJSTG8rZXQ5OHNlbFp5ZHBIZW1GM0RKSjMKK2dBajhTeDRMQmFHOENiL1du
RU1QdjNNeEczZkJFNWZhdkY2VjRqVTA3aFE9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9v
bHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvY2VydC9jZXJ0LnBlbSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9jZXJ0
L2NlcnQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1Mzc5YTcyYjBkYWM1ZjQxOTc5YzgwMmM2NjNkZjhiODhk
ZWE4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvY2VydC9jZXJ0LnBlbQpAQCAt
MCwwICsxLDYxIEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAz
ICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEgKDB4MSkKKyAgICAgICAgU2lnbmF0dXJl
IEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1KUCwg
U1Q9VG9reW8sIE89cHl3ZWJzb2NrZXQsIENOPXB5d2Vic29ja2V0CisgICAgICAgIFZhbGlkaXR5
CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBKdW4gIDYgMDc6MjU6MDggMjAxMiBHTVQKKyAgICAg
ICAgICAgIE5vdCBBZnRlciA6IE9jdCAyMyAwNzoyNTowOCAyMDM5IEdNVAorICAgICAgICBTdWJq
ZWN0OiBDPUpQLCBTVD1Ub2t5bywgTz1weXdlYnNvY2tldCwgQ049cHl3ZWJzb2NrZXQKKyAgICAg
ICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29y
aXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgUlNBIFB1YmxpYyBLZXk6ICgxMDI0IGJp
dCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzICgxMDI0IGJpdCk6CisgICAgICAgICAgICAgICAg
ICAgIDAwOmRlOjEwOmNlOjNhOjVhOjA0OmE0OjFjOjI5OjkzOjVjOjIzOjgyOjFhOgorICAgICAg
ICAgICAgICAgICAgICBmMjowNjowMTplNjoyYjphNDowZjpkZDo3Nzo0OTo3Njo4OTowMzphMjoy
MToKKyAgICAgICAgICAgICAgICAgICAgZGU6MDQ6NzU6YzY6ZTI6ZGQ6ZmI6MzU6Mjc6M2E6YTI6
OTI6OGU6MTI6NjI6CisgICAgICAgICAgICAgICAgICAgIDJiOjNlOjFmOmY0Ojc4OmRmOmI2Ojk0
OmNiOjI3OmQ2OmNiOmQ2OjM3OmQ3OgorICAgICAgICAgICAgICAgICAgICA1YzowODpmMDowOToz
ZTpjOTpjZToyNDoyZDowMDpjOTpkZjo0YTplMDo5OToKKyAgICAgICAgICAgICAgICAgICAgZTU6
ZmI6MjM6YTk6ZTI6ZDY6Yzk6M2Q6OTY6ZmE6MDE6ODg6ZGU6NWE6ODk6CisgICAgICAgICAgICAg
ICAgICAgIGIwOmNmOjAzOjY3OjZmOjA0Ojg2OjFkOmVmOjYyOjFjOjU1OmE5OjA3OjlhOgorICAg
ICAgICAgICAgICAgICAgICAyZTo2NjoyYTo3Mzo1Yjo0Yzo2MjowMzpmOTo4Mjo4MzpkYjo2ODpi
ZjpiODoKKyAgICAgICAgICAgICAgICAgICAgNGI6MGI6OGI6OTM6MTE6Yjg6NTQ6NzM6N2IKKyAg
ICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBl
eHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiAKKyAgICAg
ICAgICAgICAgICBDQTpGQUxTRQorICAgICAgICAgICAgTmV0c2NhcGUgQ2VydCBUeXBlOiAKKyAg
ICAgICAgICAgICAgICBTU0wgU2VydmVyCisgICAgICAgICAgICBOZXRzY2FwZSBDb21tZW50OiAK
KyAgICAgICAgICAgICAgICBPcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZQorICAgICAgICAg
ICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIDgyOkEx
OjczOjhCOjE2OjBDOjdDOkU0OkQzOjQ2Ojk1OjEzOjk1OjFBOjMyOkMxOjg0OkU5OjA2OjAwCisg
ICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAg
ICAgICBrZXlpZDpFQjoxNjo3NzoxMDo5MjpCQjoyODo3MDo2OTo5Nzo5QTo2RjpBMDo2ODo0RTox
QTozNzpGQjpFNjpGMworCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNy
eXB0aW9uCisgICAgICAgIDZiOmIzOjQ2OjI5OjAyOmRmOmIwOmM4OjhlOmM0OmQ3OjdmOmEwOjFl
OjBkOjFhOmViOjJmOgorICAgICAgICBkZjpkMTo0ODo1NzozNjo1Zjo5NTo4YzoxYjpmMDo1MTpk
Njo1MjplNzo4ZDo4NDozYjo5ZjoKKyAgICAgICAgZDg6ZWQ6MjI6OWM6YWE6YmQ6ZWU6OWI6OTA6
MWQ6ODQ6YTM6NGM6MGI6Y2I6ZWI6NjQ6NzM6CisgICAgICAgIGJhOmY3OjE1OmNlOmRhOjVmOmRi
OjhiOjE1OjA3OmE2OjI4OjdmOmI5OjhjOjExOjliOjY0OgorICAgICAgICBkMzpmMTpiZTo1Mjo0
ZjpjMzpkODo1ODpmZTpkZTo1Njo2Mzo2MzozYjo1MTplZDphNzo4MToKKyAgICAgICAgZjk6MDU6
NTE6NzA6NjM6MzI6MDk6MGU6OTQ6N2U6MDU6ZmU6YTE6NTY6MTg6MzQ6OTg6ZDU6CisgICAgICAg
IDk5OjFlOjRlOjI3OjM4Ojg5OjkwOjZhOmU1OmNlOjYwOjM1OjAxOmY1OmRlOjM0OjYwOmIxOgor
ICAgICAgICBjYjphZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDbURDQ0FnR2dB
d0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUVVGQURCSk1Rc3dDUVlEVlFRR0V3SktVREVPCitNQXdH
QTFVRUNCTUZWRzlyZVc4eEZEQVNCZ05WQkFvVEMzQjVkMlZpYzI5amEyVjBNUlF3RWdZRFZRUURF
d3R3CitlWGRsWW5OdlkydGxkREFlRncweE1qQTJNRFl3TnpJMU1EaGFGdzB6T1RFd01qTXdOekkx
TURoYU1Fa3hDekFKCitCZ05WQkFZVEFrcFFNUTR3REFZRFZRUUlFd1ZVYjJ0NWJ6RVVNQklHQTFV
RUNoTUxjSGwzWldKemIyTnJaWFF4CitGREFTQmdOVkJBTVRDM0I1ZDJWaWMyOWphMlYwTUlHZk1B
MEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCCitnUURlRU00NldnU2tIQ21UWENPQ0d2SUdB
ZVlycEEvZGQwbDJpUU9pSWQ0RWRjYmkzZnMxSnpxaWtvNFNZaXMrCitIL1I0MzdhVXl5Zld5OVkz
MTF3SThBayt5YzRrTFFESjMwcmdtZVg3STZuaTFzazlsdm9CaU41YWliRFBBMmR2CitCSVlkNzJJ
Y1Zha0htaTVtS25OYlRHSUQrWUtEMjJpL3VFc0xpNU1SdUZSemV3SURBUUFCbzRHUE1JR01NQWtH
CitBMVVkRXdRQ01BQXdFUVlKWUlaSUFZYjRRZ0VCQkFRREFnWkFNQ3dHQ1dDR1NBR0crRUlCRFFR
ZkZoMVBjR1Z1CitVMU5NSUVkbGJtVnlZWFJsWkNCRFpYSjBhV1pwWTJGMFpUQWRCZ05WSFE0RUZn
UVVncUZ6aXhZTWZPVFRScFVUCitsUm95d1lUcEJnQXdId1lEVlIwakJCZ3dGb0FVNnhaM0VKSzdL
SEJwbDVwdm9HaE9HamY3NXZNd0RRWUpLb1pJCitodmNOQVFFRkJRQURnWUVBYTdOR0tRTGZzTWlP
eE5kL29CNE5HdXN2MzlGSVZ6WmZsWXdiOEZIV1V1ZU5oRHVmCisyTzBpbktxOTdwdVFIWVNqVEF2
TDYyUnp1dmNWenRwZjI0c1ZCNllvZjdtTUVadGswL0crVWsvRDJGaiszbFpqCitZenRSN2FlQitR
VlJjR015Q1E2VWZnWCtvVllZTkpqVm1SNU9KemlKa0dybHptQTFBZlhlTkdDeHk2ND0KKy0tLS0t
RU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9jZXJ0L2NsaWVu
dF9jZXJ0LnAxMiBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90
b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9jZXJ0L2NsaWVudF9jZXJ0LnAxMgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xNGUxMzk5Mjc5ODJmYTk4MjNhNTcyMzFhZjExMzQ5OWQ2YTVhOGIwCkdJVCBiaW5hcnkgcGF0
Y2gKbGl0ZXJhbCAyNTgyCnpjbVkrRlhIKmppN0tNYCMwdEJnMnF6Rml0UCFmPFBIQS0qTkxvQFZf
Z2NmMHQ4V0IoI0k/eyVZUkZ4KnVgJSl5Sgp6MW5HIUszNWJxaFhyWDdBYjlRJWpmODZ1bHglWnYt
PiVIXkFhWnB3ZWtQNDJZbn1nNnYjT3VZQThHdG12VmpTSWoKekZwaDVVKChaJWZBU3dTdWtZWEdw
PUYqQSkwUmZpPGAlZU9kXkZwQmktZiNzN2Zpcj8+MmNXJFQjOzIqR0FQX0FlCnoxXyNscm4yRShl
S09NSjZOMjZZSm5lX0BocH1TS1BYVUI3Rk1lcl9+NXwxcWdDe1Rxbm5CdXYxJGtwcDVPQnolQAp6
PG15U3crP1k+XmpBWjQjWEEtfSohUXNidU9oVyhzTzgzNjYoJDsoMUE+bW8oTy0leChobig9eVo7
eX5ORyNRWDEKemdIa1NpXl44Y3Y0VFRTTDl2bjVxUig+X0QzZiZvYypqd1BnSSNLQFEjQXNMKUQ7
QkQmV2IyZCtJMV5KN24+fVlaCnpiQ1hvOWZPQGchQGRXWWEyViV9Oykhezx6RGN8KHB2SklheFc3
TmRPJU82Zj5yJmFPcnBIa3tvX1I5bVE0N3VvYgp6P2w+OXxufFgzYGFncF5HO0x3WFI1PChscitS
PGNMNWpUUSg/XkQ8a1JvIUhfVCNwP3kzZH1edENZViE4Ul5OP30KekMqJVhtOUxlZj5qN2hsci0/
akhscHx3ZkEmXm4tczs8IXokcUQxeFBxIThLUTF9fmR1cHd+Qk0xZ3N+QEFvO0NxCnp3UmdVfDJe
ZH1OLWdWO0BhWWt1OEklfXw8bDZRTT89ZH5GWXBiR0ZIOSZ2TmdLWipTeWNJU3xtY3VPUj9sJkNP
dwp6c3t6ZDV6bWVseHFOMURReXt9UGdCPXUjZnpJTlBrQjBvTipjazN2YCsxeyFZWFB+e0VWSTdW
cWgqfnVhV19+VUMKemxSMzNSWjA1SGhrQy0xZUlwKS1AWV55dmMtfFIlISo5ZHc3bmZXKXlqY0hJ
WWY2cj1hQ3QoVWhpLUZKbTJue18pCnole3VsQlVYUmAyPD5seH1lR21TbVJKPjVvdGtAKCtwanNQ
cTs0aFo2RklLbCN7bnhQIUFMITI4X19BWWZsYFZnewp6bFJSYUFSfFZteTFfYF5iYmpacnpBe1Ek
bFllaklZZF5BJFo+VyZqeW5NPUtgVGw0d1YpM3dAZDFKY2AtNS1DR0oKenhxXkA4XyghPFpGMnFs
aF9afX1ucj9TJjUqeitGQCl2KFoxRUlzO0htfSExfk1UTCFqMUBjJFpITFJ9Vig9O15vCnpkVXBm
eT9vPnl6b2xfc2k8PFVFQj10KGVlQnpnSl5XWXdzSENHOTM0cyRkKUBxcUh3Z155Wk17YF5qSiE5
O3RyNgp6ZW9VYXkmJCtCeUd8Tl5fem9BSF50WUlnPmhhWXd8QHxjMzFedyhuVWQ3ayhZbUVKNzZW
WTc5KyhDKF8kOzFNc1UKemhpTmkrQjVnU3JEanw5PjxAPzZSJjh6Ym04YnI/Qy1ObjFjaygrPE5L
JTcpNnYtd1dxND1NX1RidDE5NHpVKnlGCnpoPG90PEhCV25veEIlMWs5KE0wbzxOZylSZ0hTKCM/
ZWRFUUIhXnxGay1fKGFgYlVCTEFLKmh+YXp+IV94dT1UNAp6Nkc1Sy1hWEpvdEhRbEVDOENVNXxS
eU1SdVFrWEUpP152NihpPU11KT0kXm8lMCF5czVHVlJhWFoyUzJINEk4M0wKenEpYmB8UHh7KDg5
VzMyenE0c3F6SCtCQUtQOXVhREVwRDhJSUE5RC1INDVDJVZUP0pKI01hK0JAaTlNUGRGLSMjCnpO
eEY1VHV9aXpfaHokU0taMF9fJiFZcDF5YWRWem9jQEV5K0JlZkpDdENTVmQ1KEp5KDxDNkljQ1d9
RG1Id0M4VAp6UntrcXZSQD8zcnpMRzIkWmRjeC01dkZSQGQkUSNERCt+e2RoQG1kX2VgQkI2KlVZ
NlIrNF4jVSV6NGx0eDlCJTsKek5WOHoqe0djR007Z3EyUnR5ZGp7SDBTMHAjejw2JTdtMyElez9N
UXVhPGBAZTViT3RiZCFFYz9HXnV4ZjRneGNJCnotRjdTVFlpfnZEYm12Q1ozTkRjZkhqOD5DOUZW
NmpkMX0ocFN3cmdHaypRWjlScjQpNiFzU2tUVXFieGJhZWEydQp6d1NgJHlvc1EpZWIlb192Sk8q
IUFgZFI7WTRrPiZxWXp1YS1aTkU8M0ZFPUkrZVNVO3ghcHReQTM1Pm9Jb1BgSnEKelpsfilyQzYw
TCtrU3hBZ29QRXxyR2pWQD8yQXkqWGI9JGNgY19MMz1FemhqQlVEPWgxXzQlZUJDZmxqJkVIWm1P
CnpzezFifE51eDYrO0sjS0I9VGtffGlrfHsqMDFkayQ5S2E2YGNSVT1NY1lpTiFrLWEpMlBEMzFo
PGNUcyVrUGhvWgp6Tykyd19UOS04dzJOTSYmcTJwbDReS3F9Q1BlPWw5aHEkVzQhdDtKRCV8VUoo
Mjh2RGJNKkw+VkY3YldfWHtiMTQKekdOdyh3PkVfUzlgPDt4UWxQYEBzZD42bTNuMilMKTBwIVhS
ckQjMjVpSWtSRHMpMXVqTiVTc3l3IzYydmR2JkFsCnpjZGotWWwjNitAYTBXc2NVPDNgZ3ZXJDJ3
LSheSGZFUnl4c05zcTZtSzBkODs/MExTZU5oJU5FZTBCWUo0SUwoYQp6JFdYbmQpUEJXPEFUa3t5
JTJTOUdQYTJxeUpXJF5KSl9jb19YUDFtOUV9ailRP15sJCMqTUR4UDV8bVkxemNxM3kKemI9QHp5
Q1h1Z3dke05qeD9pMjdqK3pYTzQqVj59WmUtekJReClIeW53TGBOaighOXQpNTRkTzt6VFZ+LU8j
O1U7CnpNd3AwUFUtdVVMPyMjOEwtKSZ2bWJuQW1uI0AmYT52PWNQfUVVUUpWd2FEdzlWPC1Jd1l0
aVQ5dyhUTWVhMiVEeQp6fEE0MCRONXVvaVFFXl97UzEtaWBxNWx0dHBnPlNENHBhZmhmbEJ8NlBF
PiE+c2hXa29FbVpoZyt+MEhwPDNLVEAKejlqayRxTUM9MCZCYmteZlJvNGYzOEp+aVdDfHhHUDBg
d1ozRiNrOGcqSWROWSRHRi1BeDhePERyQl5qMjhYYjZzCnpSfDtWdmFyJTx8VFpLfj4zMGtEMylX
JEFEIyh0dGAjQHg3UThPWWFwVF9KeU0xdlQ/bGJ4LStfRihKRiV5UzBPJAp6cFMjbH13KjBqPmJ9
TTNlOzRJPntwTU0+cyVgP2ZTQUVfUWJgQW4+X1Yha2l9JDl3TU45KGZVMXVKR20wTWk3aEsKekE1
bDBlMXdWY14kcWw/NWdtPjhFdkJwU2FXZjVUSWczWlNidUpocDthJShaK2tje2NkdjFQdVgkZTJH
QU4/SmY4CnpXS05nUzwoTTJGTlVgUnhkQkd9Zj1TMXJuUSplUjEycUZfQyYmcG5AYHklQ35MOV5R
X1o5bGgmRz1YdkdDITQxMAp6eW4pNW89KXgyaUpZK14/XkVMam50SEhgfUspemE/ST18diEkaEww
biZHenlwemFMd05kZU09T2pXfC0tPW1SX2oKenl0P35WeF9fOUJFdmNoTD85aHVVb2ItNW4rcjE/
PHhAY2d9NWF8VnxGY0ZRTyplSXB3WkVuflZHTGVxdlNAV2syCnopIStEMy07ezRAT08pYitiUU8j
PS1FK0JlT0BmITM8aVQwbWIycGIzODh7R0lSYXJqZG5UaSVAPzRxd3kjcTYwWQp6cWlBfHt0Nm80
OUVNMThKJnc4REEjd1FERHNGd04kSEcqTVRMMjFCUWopWVJgVzVMO1pmTU08KnJMPUZJZ3wwYkoK
elQ5cjdGbEJMTF5yViUxVU8hM3xHREVhTSFqSFBMcj81UUJ1Q0MhVyk+ZHJmXlJDYGA3WVJZWihL
PmllMD5wSmReCnpKV19IeyUpXmMhNj5sfDlQOD9jPWooQjU3WUp6OD9YeVF6RTl1R2F9ZFYwUFRw
MyE7cCFTRil9dC1pPkM8RWRIKwp6TUtBU25WIyEmU1dmZH0wZGxqWHN5UWZ6c0A2aTArZHFTSEpM
fkY3fm90fCRId2YrRiowakNLKnc1V29GQFE5aE4KemhsayVTe2g2QzU3Q0kyXzVSOTtmMztwLTE+
RFVuKlVeZW9HamhxbzsqUioka1ZFMDFKPlRKUVJzdjlveiZrITN6CnprV1Q7KjBRZTBNM1VDTHcw
RD1KK2ZHZmNGdkpVfGBVZHNLXzM0dFR2SHtmJi1ZOFdGR2g/XlAhWDU7eT1GWnVEcwpmZnJXazAl
TShPR25UTU48aCZxQHlMZERVXyZNY0FmP3wxa01lalVObwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAx
CgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZl
L3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L2NlcnQva2V5LnBlbSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9j
ZXJ0L2tleS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmFlODU4MzE4ZjI5YmE2YjQ2MjNiZDVmYmM0YTA4Y2U3
M2Q5MDMxMQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9jZXJ0L2tleS5wZW0KQEAg
LTAsMCArMSwxNSBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1hnSUJB
QUtCZ1FEZUVNNDZXZ1NrSENtVFhDT0NHdklHQWVZcnBBL2RkMGwyaVFPaUlkNEVkY2JpM2ZzMQor
SnpxaWtvNFNZaXMrSC9SNDM3YVV5eWZXeTlZMzExd0k4QWsreWM0a0xRREozMHJnbWVYN0k2bmkx
c2s5bHZvQgoraU41YWliRFBBMmR2QklZZDcySWNWYWtIbWk1bUtuTmJUR0lEK1lLRDIyaS91RXNM
aTVNUnVGUnpld0lEQVFBQgorQW9HQkFJdUN1VjFWY25iN3JtOEN3dGdaUDVYZ21ZOHZTanhUbGRh
ZmE2WHZhd0VZVVRQMFM3N3YvMWxsZzFZdgorVUlWK0krUFFnRzlvVm9ZT2wyMkxvaW1IUy9aM2Ux
ZnNvdDV0RFlzekdlOC9Ha3N0NG9hUmVTb3h2QlVhNldYcAorUVNvN1lGQ2FqdUh0RStXL2d6RitV
SGJkenpYSURqUVozMTRMTkY1dCs0VW5zRVBCQWtFQStnaXJJbXFXb00ydAorM1VSOGY4b2VrRVJ3
c21FTWY5REg1WXBINGN2VW52SStrd2VzQy9yMlU4U2hvKytmeUVNVU5tN2FJWEdxTkxnYQorb2dB
TSs0Tlg0UUpCQU9OZFN4U2F5MjJlZ1RHTm9JaExuZGxqV2t1T3QvOUZXajJrbGYvNFF4RDRibE1K
UTVPcQorUWRPR0FoN25WUWpwUExRNUQ3Q0JWQUtwR00yQ0QrUUpCdHNDUUVQMmt6MzVweFB5bEcz
dXJjQzJtZlF4QmtrVworWkNWaUJOUDU4R3dKMGJPYXVUT1NCRXdGWFd1THFUdzhhRHd4TDQ5VU5t
cWMwTjBmcGUyZkFlaGozVUVDUVFDbQorRkgvRGpVOEx3N3liZGRqTnRtNlhYUHVZTmFneHozY2Jr
QjRCM0ZjaERsZUlVRHdNb1ZGME1XOWJJNS81NG1WMQorUURrMXRVS29ydHh2UVpKYUFENEJBa0VB
aEdPSFFxUGQ2YkJCb0ZCdnBhTHpQSk14d0xLckIrV3RrcS9RbEM3MgorQ2xSaU1uMmc4U0FMaUlM
M0JEZ0dYS2NLRS9XeTdqby9hZi9KQ3pRL2NQcXQvQT09CistLS0tLUVORCBSU0EgUFJJVkFURSBL
RVktLS0tLQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L2NsaWVudF9mb3JfdGVzdGluZy5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNv
Y2tldC9zcmMvdGVzdC9jbGllbnRfZm9yX3Rlc3RpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzdmODA1ZWU5
NGU1NDk0NjllZDg3MGRhZTdlMGNjZjIwMjZiZWFiNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9z
cmMvdGVzdC9jbGllbnRfZm9yX3Rlc3RpbmcucHkKQEAgLTAsMCArMSwxMTAwIEBACisjIS91c3Iv
YmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMTIsIEdvb2dsZSBJbmMuCisjIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIldlYlNvY2tldCBjbGll
bnQgdXRpbGl0eSBmb3IgdGVzdGluZy4KKworVGhpcyBtb2R1bGUgY29udGFpbnMgaGVscGVyIG1l
dGhvZHMgZm9yIHBlcmZvcm1pbmcgaGFuZHNoYWtlLCBmcmFtZQorc2VuZGluZy9yZWNlaXZpbmcg
YXMgYSBXZWJTb2NrZXQgY2xpZW50LgorCitUaGlzIGlzIGNvZGUgZm9yIHRlc3RpbmcgbW9kX3B5
d2Vic29ja2V0LiBLZWVwIHRoaXMgY29kZSBpbmRlcGVuZGVudCBmcm9tCittb2RfcHl3ZWJzb2Nr
ZXQuIERvbid0IGltcG9ydCBlLmcuIFN0cmVhbSBjbGFzcyBmb3IgZ2VuZXJhdGluZyBmcmFtZSBm
b3IKK3Rlc3RpbmcuIFVzaW5nIHV0aWwuaGV4aWZ5LCBldGMuIHRoYXQgYXJlIG5vdCByZWxhdGVk
IHRvIHByb3RvY29sIHByb2Nlc3NpbmcKK2lzIGFsbG93ZWQuCisKK05vdGU6CitUaGlzIGNvZGUg
aXMgZmFyIGZyb20gcm9idXN0LCBlLmcuLCB3ZSBjdXQgY29ybmVycyBpbiBoYW5kc2hha2UuCisi
IiIKKworCitpbXBvcnQgYmFzZTY0CitpbXBvcnQgZXJybm8KK2ltcG9ydCBsb2dnaW5nCitpbXBv
cnQgb3MKK2ltcG9ydCByYW5kb20KK2ltcG9ydCByZQoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0
cnVjdAoraW1wb3J0IHRpbWUKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbgor
ZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IHV0aWwKKworCitERUZBVUxUX1BPUlQgPSA4MAor
REVGQVVMVF9TRUNVUkVfUE9SVCA9IDQ0MworCisjIE9wY29kZXMgaW50cm9kdWNlZCBpbiBJRVRG
IEh5QmkgMDEgZm9yIHRoZSBuZXcgZnJhbWluZyBmb3JtYXQKK09QQ09ERV9DT05USU5VQVRJT04g
PSAweDAKK09QQ09ERV9DTE9TRSA9IDB4OAorT1BDT0RFX1BJTkcgPSAweDkKK09QQ09ERV9QT05H
ID0gMHhhCitPUENPREVfVEVYVCA9IDB4MQorT1BDT0RFX0JJTkFSWSA9IDB4MgorCisjIFN0cmlu
Z3MgdXNlZCBmb3IgaGFuZHNoYWtlCitfVVBHUkFERV9IRUFERVIgPSAnVXBncmFkZTogd2Vic29j
a2V0XHJcbicKK19VUEdSQURFX0hFQURFUl9ISVhJRTc1ID0gJ1VwZ3JhZGU6IFdlYlNvY2tldFxy
XG4nCitfQ09OTkVDVElPTl9IRUFERVIgPSAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisKK1dF
QlNPQ0tFVF9BQ0NFUFRfVVVJRCA9ICcyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVC
MTEnCisKKyMgU3RhdHVzIGNvZGVzCitTVEFUVVNfTk9STUFMX0NMT1NVUkUgPSAxMDAwCitTVEFU
VVNfR09JTkdfQVdBWSA9IDEwMDEKK1NUQVRVU19QUk9UT0NPTF9FUlJPUiA9IDEwMDIKK1NUQVRV
U19VTlNVUFBPUlRFRF9EQVRBID0gMTAwMworU1RBVFVTX05PX1NUQVRVU19SRUNFSVZFRCA9IDEw
MDUKK1NUQVRVU19BQk5PUk1BTF9DTE9TVVJFID0gMTAwNgorU1RBVFVTX0lOVkFMSURfRlJBTUVf
UEFZTE9BRF9EQVRBID0gMTAwNworU1RBVFVTX1BPTElDWV9WSU9MQVRJT04gPSAxMDA4CitTVEFU
VVNfTUVTU0FHRV9UT09fQklHID0gMTAwOQorU1RBVFVTX01BTkRBVE9SWV9FWFQgPSAxMDEwCitT
VEFUVVNfSU5URVJOQUxfRU5EUE9JTlRfRVJST1IgPSAxMDExCitTVEFUVVNfVExTX0hBTkRTSEFL
RSA9IDEwMTUKKworIyBFeHRlbnNpb24gdG9rZW5zCitfREVGTEFURV9GUkFNRV9FWFRFTlNJT04g
PSAnZGVmbGF0ZS1mcmFtZScKKyMgVE9ETyhiYXNoaSk6IFVwZGF0ZSBhZnRlciBtdXggaW1wbGVt
ZW50YXRpb24gZmluaXNoZWQuCitfTVVYX0VYVEVOU0lPTiA9ICdtdXhfRE9fTk9UX1VTRScKK19Q
RVJNRVNTQUdFX0RFRkxBVEVfRVhURU5TSU9OID0gJ3Blcm1lc3NhZ2UtZGVmbGF0ZScKKworZGVm
IF9tZXRob2RfbGluZShyZXNvdXJjZSk6CisgICAgcmV0dXJuICdHRVQgJXMgSFRUUC8xLjFcclxu
JyAlIHJlc291cmNlCisKKworZGVmIF9zZWNfb3JpZ2luX2hlYWRlcihvcmlnaW4pOgorICAgIHJl
dHVybiAnU2VjLVdlYlNvY2tldC1PcmlnaW46ICVzXHJcbicgJSBvcmlnaW4ubG93ZXIoKQorCisK
K2RlZiBfb3JpZ2luX2hlYWRlcihvcmlnaW4pOgorICAgICMgNC4xIDEzLiBjb25jYXRlbmF0aW9u
IG9mIHRoZSBzdHJpbmcgIk9yaWdpbjoiLCBhIFUrMDAyMCBTUEFDRSBjaGFyYWN0ZXIsCisgICAg
IyBhbmQgdGhlIC9vcmlnaW4vIHZhbHVlLCBjb252ZXJ0ZWQgdG8gQVNDSUkgbG93ZXJjYXNlLCB0
byAvZmllbGRzLy4KKyAgICByZXR1cm4gJ09yaWdpbjogJXNcclxuJyAlIG9yaWdpbi5sb3dlcigp
CisKKworZGVmIF9mb3JtYXRfaG9zdF9oZWFkZXIoaG9zdCwgcG9ydCwgc2VjdXJlKToKKyAgICAj
IDQuMSA5LiBMZXQgL2hvc3Rwb3J0LyBiZSBhbiBlbXB0eSBzdHJpbmcuCisgICAgIyA0LjEgMTAu
IEFwcGVuZCB0aGUgL2hvc3QvIHZhbHVlLCBjb252ZXJ0ZWQgdG8gQVNDSUkgbG93ZXJjYXNlLCB0
bworICAgICMgL2hvc3Rwb3J0LworICAgIGhvc3Rwb3J0ID0gaG9zdC5sb3dlcigpCisgICAgIyA0
LjEgMTEuIElmIC9zZWN1cmUvIGlzIGZhbHNlLCBhbmQgL3BvcnQvIGlzIG5vdCA4MCwgb3IgaWYg
L3NlY3VyZS8KKyAgICAjIGlzIHRydWUsIGFuZCAvcG9ydC8gaXMgbm90IDQ0MywgdGhlbiBhcHBl
bmQgYSBVKzAwM0EgQ09MT04gY2hhcmFjdGVyCisgICAgIyAoOikgZm9sbG93ZWQgYnkgdGhlIHZh
bHVlIG9mIC9wb3J0LywgZXhwcmVzc2VkIGFzIGEgYmFzZS10ZW4gaW50ZWdlciwKKyAgICAjIHRv
IC9ob3N0cG9ydC8KKyAgICBpZiAoKG5vdCBzZWN1cmUgYW5kIHBvcnQgIT0gREVGQVVMVF9QT1JU
KSBvcgorICAgICAgICAoc2VjdXJlIGFuZCBwb3J0ICE9IERFRkFVTFRfU0VDVVJFX1BPUlQpKToK
KyAgICAgICAgaG9zdHBvcnQgKz0gJzonICsgc3RyKHBvcnQpCisgICAgIyA0LjEgMTIuIGNvbmNh
dGVuYXRpb24gb2YgdGhlIHN0cmluZyAiSG9zdDoiLCBhIFUrMDAyMCBTUEFDRQorICAgICMgY2hh
cmFjdGVyLCBhbmQgL2hvc3Rwb3J0LywgdG8gL2ZpZWxkcy8uCisgICAgcmV0dXJuICdIb3N0OiAl
c1xyXG4nICUgaG9zdHBvcnQKKworCisjIFRPRE8odHlvc2hpbm8pOiBEZWZpbmUgYSBiYXNlIGNs
YXNzIGFuZCBtb3ZlIHRoZXNlIHNoYXJlZCBtZXRob2RzIHRvIHRoYXQuCisKKworZGVmIHJlY2Vp
dmVfYnl0ZXMoc29ja2V0LCBsZW5ndGgpOgorICAgIHJlY2VpdmVkX2J5dGVzID0gW10KKyAgICBy
ZW1haW5pbmcgPSBsZW5ndGgKKyAgICB3aGlsZSByZW1haW5pbmcgPiAwOgorICAgICAgICBuZXdf
cmVjZWl2ZWRfYnl0ZXMgPSBzb2NrZXQucmVjdihyZW1haW5pbmcpCisgICAgICAgIGlmIG5vdCBu
ZXdfcmVjZWl2ZWRfYnl0ZXM6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisgICAgICAg
ICAgICAgICAgJ0Nvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSByZWNlaXZpbmcgcmVxdWVzdGVkIGxl
bmd0aCAnCisgICAgICAgICAgICAgICAgJyhyZXF1ZXN0ZWQgJWQgYnl0ZXMgYnV0IHJlY2VpdmVk
IG9ubHkgJWQgYnl0ZXMpJyAlCisgICAgICAgICAgICAgICAgKGxlbmd0aCwgbGVuZ3RoIC0gcmVt
YWluaW5nKSkKKyAgICAgICAgcmVjZWl2ZWRfYnl0ZXMuYXBwZW5kKG5ld19yZWNlaXZlZF9ieXRl
cykKKyAgICAgICAgcmVtYWluaW5nIC09IGxlbihuZXdfcmVjZWl2ZWRfYnl0ZXMpCisgICAgcmV0
dXJuICcnLmpvaW4ocmVjZWl2ZWRfYnl0ZXMpCisKKworIyBUT0RPKHR5b3NoaW5vKTogTm93IHRo
ZSBXZWJTb2NrZXRIYW5kc2hha2UgY2xhc3MgZGl2ZXJ0cyB0aGVzZSBtZXRob2RzLiBXZQorIyBz
aG91bGQgbW92ZSB0byBIVFRQIHBhcnNlciBhcyBzcGVjaWZpZWQgaW4gUkZDIDY0NTUuIEZvciBI
eUJpIDAwIGFuZAorIyBIaXhpZSA3NSwgcGFjayB0aGVzZSBtZXRob2RzIGFzIHNvbWUgcGFyc2Vy
IGNsYXNzLgorCisKK2RlZiBfcmVhZF9maWVsZHMoc29ja2V0KToKKyAgICAjIDQuMSAzMi4gbGV0
IC9maWVsZHMvIGJlIGEgbGlzdCBvZiBuYW1lLXZhbHVlIHBhaXJzLCBpbml0aWFsbHkgZW1wdHku
CisgICAgZmllbGRzID0ge30KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICAjIDQuMSAzMy4gbGV0
IC9uYW1lLyBhbmQgL3ZhbHVlLyBiZSBlbXB0eSBieXRlIGFycmF5cworICAgICAgICBuYW1lID0g
JycKKyAgICAgICAgdmFsdWUgPSAnJworICAgICAgICAjIDQuMSAzNC4gcmVhZCAvbmFtZS8KKyAg
ICAgICAgbmFtZSA9IF9yZWFkX25hbWUoc29ja2V0KQorICAgICAgICBpZiBuYW1lIGlzIE5vbmU6
CisgICAgICAgICAgICBicmVhaworICAgICAgICAjIDQuMSAzNS4gcmVhZCBzcGFjZXMKKyAgICAg
ICAgIyBUT0RPKHR5b3NoaW5vKTogU2tpcCBvbmx5IG9uZSBzcGFjZSBhcyBkZXNjcmliZWQgaW4g
dGhlIHNwZWMuCisgICAgICAgIGNoID0gX3NraXBfc3BhY2VzKHNvY2tldCkKKyAgICAgICAgIyA0
LjEgMzYuIHJlYWQgL3ZhbHVlLworICAgICAgICB2YWx1ZSA9IF9yZWFkX3ZhbHVlKHNvY2tldCwg
Y2gpCisgICAgICAgICMgNC4xIDM3LiByZWFkIGEgYnl0ZSBmcm9tIHRoZSBzZXJ2ZXIKKyAgICAg
ICAgY2ggPSByZWNlaXZlX2J5dGVzKHNvY2tldCwgMSkKKyAgICAgICAgaWYgY2ggIT0gJ1xuJzog
ICMgMHgwQQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdF
eHBlY3RlZCBMRiBidXQgZm91bmQgJXIgd2hpbGUgcmVhZGluZyB2YWx1ZSAlciBmb3IgaGVhZGVy
ICcKKyAgICAgICAgICAgICAgICAnJXInICUgKGNoLCBuYW1lLCB2YWx1ZSkpCisgICAgICAgICMg
NC4xIDM4LiBhcHBlbmQgYW4gZW50cnkgdG8gdGhlIC9maWVsZHMvIGxpc3QgdGhhdCBoYXMgdGhl
IG5hbWUKKyAgICAgICAgIyBnaXZlbiBieSB0aGUgc3RyaW5nIG9idGFpbmVkIGJ5IGludGVycHJl
dGluZyB0aGUgL25hbWUvIGJ5dGUKKyAgICAgICAgIyBhcnJheSBhcyBhIFVURi04IHN0cmVhbSBh
bmQgdGhlIHZhbHVlIGdpdmVuIGJ5IHRoZSBzdHJpbmcKKyAgICAgICAgIyBvYnRhaW5lZCBieSBp
bnRlcnByZXRpbmcgdGhlIC92YWx1ZS8gYnl0ZSBhcnJheSBhcyBhIFVURi04IGJ5dGUKKyAgICAg
ICAgIyBzdHJlYW0uCisgICAgICAgIGZpZWxkcy5zZXRkZWZhdWx0KG5hbWUsIFtdKS5hcHBlbmQo
dmFsdWUpCisgICAgICAgICMgNC4xIDM5LiByZXR1cm4gdG8gdGhlICJGaWVsZCIgc3RlcCBhYm92
ZQorICAgIHJldHVybiBmaWVsZHMKKworCitkZWYgX3JlYWRfbmFtZShzb2NrZXQpOgorICAgICMg
NC4xIDMzLiBsZXQgL25hbWUvIGJlIGVtcHR5IGJ5dGUgYXJyYXlzCisgICAgbmFtZSA9ICcnCisg
ICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgIyA0LjEgMzQuIHJlYWQgYSBieXRlIGZyb20gdGhlIHNl
cnZlcgorICAgICAgICBjaCA9IHJlY2VpdmVfYnl0ZXMoc29ja2V0LCAxKQorICAgICAgICBpZiBj
aCA9PSAnXHInOiAgIyAweDBECisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbGlm
IGNoID09ICdcbic6ICAjIDB4MEEKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKKyAgICAg
ICAgICAgICAgICAnVW5leHBlY3RlZCBMRiB3aGVuIHJlYWRpbmcgaGVhZGVyIG5hbWUgJXInICUg
bmFtZSkKKyAgICAgICAgZWxpZiBjaCA9PSAnOic6ICAjIDB4M0EKKyAgICAgICAgICAgIHJldHVy
biBuYW1lCisgICAgICAgIGVsaWYgY2ggPj0gJ0EnIGFuZCBjaCA8PSAnWic6ICAjIHJhbmdlIDB4
MzEgdG8gMHg1QQorICAgICAgICAgICAgY2ggPSBjaHIob3JkKGNoKSArIDB4MjApCisgICAgICAg
ICAgICBuYW1lICs9IGNoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lICs9IGNoCisK
KworZGVmIF9za2lwX3NwYWNlcyhzb2NrZXQpOgorICAgICMgNC4xIDM1LiByZWFkIGEgYnl0ZSBm
cm9tIHRoZSBzZXJ2ZXIKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBjaCA9IHJlY2VpdmVfYnl0
ZXMoc29ja2V0LCAxKQorICAgICAgICBpZiBjaCA9PSAnICc6ICAjIDB4MjAKKyAgICAgICAgICAg
IGNvbnRpbnVlCisgICAgICAgIHJldHVybiBjaAorCisKK2RlZiBfcmVhZF92YWx1ZShzb2NrZXQs
IGNoKToKKyAgICAjIDQuMSAzMy4gbGV0IC92YWx1ZS8gYmUgZW1wdHkgYnl0ZSBhcnJheXMKKyAg
ICB2YWx1ZSA9ICcnCisgICAgIyA0LjEgMzYuIHJlYWQgYSBieXRlIGZyb20gc2VydmVyLgorICAg
IHdoaWxlIFRydWU6CisgICAgICAgIGlmIGNoID09ICdccic6ICAjIDB4MEQKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZQorICAgICAgICBlbGlmIGNoID09ICdcbic6ICAjIDB4MEEKKyAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBMRiB3aGVu
IHJlYWRpbmcgaGVhZGVyIHZhbHVlICVyJyAlIHZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgdmFsdWUgKz0gY2gKKyAgICAgICAgY2ggPSByZWNlaXZlX2J5dGVzKHNvY2tldCwgMSkK
KworCitkZWYgcmVhZF9mcmFtZV9oZWFkZXIoc29ja2V0KToKKyAgICByZWNlaXZlZCA9IHJlY2Vp
dmVfYnl0ZXMoc29ja2V0LCAyKQorCisgICAgZmlyc3RfYnl0ZSA9IG9yZChyZWNlaXZlZFswXSkK
KyAgICBmaW4gPSAoZmlyc3RfYnl0ZSA+PiA3KSAmIDEKKyAgICByc3YxID0gKGZpcnN0X2J5dGUg
Pj4gNikgJiAxCisgICAgcnN2MiA9IChmaXJzdF9ieXRlID4+IDUpICYgMQorICAgIHJzdjMgPSAo
Zmlyc3RfYnl0ZSA+PiA0KSAmIDEKKyAgICBvcGNvZGUgPSBmaXJzdF9ieXRlICYgMHhmCisKKyAg
ICBzZWNvbmRfYnl0ZSA9IG9yZChyZWNlaXZlZFsxXSkKKyAgICBtYXNrID0gKHNlY29uZF9ieXRl
ID4+IDcpICYgMQorICAgIHBheWxvYWRfbGVuZ3RoID0gc2Vjb25kX2J5dGUgJiAweDdmCisKKyAg
ICBpZiBtYXNrICE9IDA6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKKyAgICAgICAgICAgICdN
YXNrIGJpdCBtdXN0IGJlIDAgZm9yIGZyYW1lcyBjb21pbmcgZnJvbSBzZXJ2ZXInKQorCisgICAg
aWYgcGF5bG9hZF9sZW5ndGggPT0gMTI3OgorICAgICAgICBleHRlbmRlZF9wYXlsb2FkX2xlbmd0
aCA9IHJlY2VpdmVfYnl0ZXMoc29ja2V0LCA4KQorICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IHN0
cnVjdC51bnBhY2soCisgICAgICAgICAgICAnIVEnLCBleHRlbmRlZF9wYXlsb2FkX2xlbmd0aClb
MF0KKyAgICAgICAgaWYgcGF5bG9hZF9sZW5ndGggPiAweDdGRkZGRkZGRkZGRkZGRkY6CisgICAg
ICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0V4dGVuZGVkIHBheWxvYWQgbGVuZ3RoID49IDJeNjMn
KQorICAgIGVsaWYgcGF5bG9hZF9sZW5ndGggPT0gMTI2OgorICAgICAgICBleHRlbmRlZF9wYXls
b2FkX2xlbmd0aCA9IHJlY2VpdmVfYnl0ZXMoc29ja2V0LCAyKQorICAgICAgICBwYXlsb2FkX2xl
bmd0aCA9IHN0cnVjdC51bnBhY2soCisgICAgICAgICAgICAnIUgnLCBleHRlbmRlZF9wYXlsb2Fk
X2xlbmd0aClbMF0KKworICAgIHJldHVybiBmaW4sIHJzdjEsIHJzdjIsIHJzdjMsIG9wY29kZSwg
cGF5bG9hZF9sZW5ndGgKKworCitjbGFzcyBfVExTU29ja2V0KG9iamVjdCk6CisgICAgIiIiV3Jh
cHBlciBmb3IgYSBUTFMgY29ubmVjdGlvbi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBy
YXdfc29ja2V0KToKKyAgICAgICAgc2VsZi5fc3NsID0gc29ja2V0LnNzbChyYXdfc29ja2V0KQor
CisgICAgZGVmIHNlbmQoc2VsZiwgYnl0ZXMpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3NsLndy
aXRlKGJ5dGVzKQorCisgICAgZGVmIHJlY3Yoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgIHJldHVy
biBzZWxmLl9zc2wucmVhZChzaXplKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAj
IE5vdGhpbmcgdG8gZG8uCisgICAgICAgIHBhc3MKKworCitjbGFzcyBIdHRwU3RhdHVzRXhjZXB0
aW9uKEV4Y2VwdGlvbik6CisgICAgIiIiVGhpcyBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgd2hl
biB1bmV4cGVjdGVkIGh0dHAgc3RhdHVzIGNvZGUgd2FzCisgICAgcmVjZWl2ZWQgYXMgYSByZXN1
bHQgb2YgaGFuZHNoYWtlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUs
IHN0YXR1cyk6CisgICAgICAgIHN1cGVyKEh0dHBTdGF0dXNFeGNlcHRpb24sIHNlbGYpLl9faW5p
dF9fKG5hbWUpCisgICAgICAgIHNlbGYuc3RhdHVzID0gc3RhdHVzCisKKworY2xhc3MgV2ViU29j
a2V0SGFuZHNoYWtlKG9iamVjdCk6CisgICAgIiIiT3BlbmluZyBoYW5kc2hha2UgcHJvY2Vzc29y
IGZvciB0aGUgV2ViU29ja2V0IHByb3RvY29sIChSRkMgNjQ1NSkuIiIiCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2Ns
YXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisKKyAg
ICBkZWYgaGFuZHNoYWtlKHNlbGYsIHNvY2tldCk6CisgICAgICAgICIiIkhhbmRzaGFrZSBXZWJT
b2NrZXQuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgRXhjZXB0aW9uOiBoYW5kc2hh
a2UgZmFpbGVkLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLl9zb2NrZXQgPSBzb2NrZXQK
KworICAgICAgICByZXF1ZXN0X2xpbmUgPSBfbWV0aG9kX2xpbmUoc2VsZi5fb3B0aW9ucy5yZXNv
dXJjZSkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdPcGVuaW5nIGhhbmRzaGFrZSBSZXF1
ZXN0LUxpbmU6ICVyJywgcmVxdWVzdF9saW5lKQorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFs
bChyZXF1ZXN0X2xpbmUpCisKKyAgICAgICAgZmllbGRzID0gW10KKyAgICAgICAgZmllbGRzLmFw
cGVuZChfVVBHUkFERV9IRUFERVIpCisgICAgICAgIGZpZWxkcy5hcHBlbmQoX0NPTk5FQ1RJT05f
SEVBREVSKQorCisgICAgICAgIGZpZWxkcy5hcHBlbmQoX2Zvcm1hdF9ob3N0X2hlYWRlcigKKyAg
ICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VydmVyX2hvc3QsCisgICAgICAgICAgICBzZWxmLl9v
cHRpb25zLnNlcnZlcl9wb3J0LAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy51c2VfdGxzKSkK
KworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnZlcnNpb24gaXMgODoKKyAgICAgICAgICAgIGZp
ZWxkcy5hcHBlbmQoX3NlY19vcmlnaW5faGVhZGVyKHNlbGYuX29wdGlvbnMub3JpZ2luKSkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoX29yaWdpbl9oZWFkZXIoc2Vs
Zi5fb3B0aW9ucy5vcmlnaW4pKQorCisgICAgICAgIG9yaWdpbmFsX2tleSA9IG9zLnVyYW5kb20o
MTYpCisgICAgICAgIGtleSA9IGJhc2U2NC5iNjRlbmNvZGUob3JpZ2luYWxfa2V5KQorICAgICAg
ICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXk6ICVz
ICglcyknLCBrZXksIHV0aWwuaGV4aWZ5KG9yaWdpbmFsX2tleSkpCisgICAgICAgIGZpZWxkcy5h
cHBlbmQoJ1NlYy1XZWJTb2NrZXQtS2V5OiAlc1xyXG4nICUga2V5KQorCisgICAgICAgIGZpZWxk
cy5hcHBlbmQoJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbjogJWRcclxuJyAlIHNlbGYuX29wdGlvbnMu
dmVyc2lvbikKKworICAgICAgICAjIFNldHRpbmcgdXAgZXh0ZW5zaW9ucy4KKyAgICAgICAgaWYg
bGVuKHNlbGYuX29wdGlvbnMuZXh0ZW5zaW9ucykgPiAwOgorICAgICAgICAgICAgZmllbGRzLmFw
cGVuZCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zOiAlc1xyXG4nICUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgJywgJy5qb2luKHNlbGYuX29wdGlvbnMuZXh0ZW5zaW9ucykpCisKKyAgICAg
ICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdPcGVuaW5nIGhhbmRzaGFrZSByZXF1ZXN0IGhlYWRlcnM6
ICVyJywgZmllbGRzKQorCisgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAg
ICBzZWxmLl9zb2NrZXQuc2VuZGFsbChmaWVsZCkKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRh
bGwoJ1xyXG4nKQorCisgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdTZW50IG9wZW5pbmcgaGFu
ZHNoYWtlIHJlcXVlc3QnKQorCisgICAgICAgIGZpZWxkID0gJycKKyAgICAgICAgd2hpbGUgVHJ1
ZToKKyAgICAgICAgICAgIGNoID0gcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2NrZXQsIDEpCisgICAg
ICAgICAgICBmaWVsZCArPSBjaAorICAgICAgICAgICAgaWYgY2ggPT0gJ1xuJzoKKyAgICAgICAg
ICAgICAgICBicmVhaworCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnT3BlbmluZyBoYW5k
c2hha2UgUmVzcG9uc2UtTGluZTogJXInLCBmaWVsZCkKKworICAgICAgICBpZiBsZW4oZmllbGQp
IDwgNyBvciBub3QgZmllbGQuZW5kc3dpdGgoJ1xyXG4nKToKKyAgICAgICAgICAgIHJhaXNlIEV4
Y2VwdGlvbignV3Jvbmcgc3RhdHVzIGxpbmU6ICVyJyAlIGZpZWxkKQorICAgICAgICBtID0gcmUu
bWF0Y2goJ1teIF0qIChbXiBdKikgLionLCBmaWVsZCkKKyAgICAgICAgaWYgbSBpcyBOb25lOgor
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdObyBIVFRQIHN0
YXR1cyBjb2RlIGZvdW5kIGluIHN0YXR1cyBsaW5lOiAlcicgJSBmaWVsZCkKKyAgICAgICAgY29k
ZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgaWYgbm90IHJlLm1hdGNoKCdbMC05XVswLTldWzAtOV0n
LCBjb2RlKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAn
SFRUUCBzdGF0dXMgY29kZSAlciBpcyBub3QgdGhyZWUgZGlnaXQgaW4gc3RhdHVzIGxpbmU6ICVy
JyAlCisgICAgICAgICAgICAgICAgKGNvZGUsIGZpZWxkKSkKKyAgICAgICAgaWYgY29kZSAhPSAn
MTAxJzoKKyAgICAgICAgICAgIHJhaXNlIEh0dHBTdGF0dXNFeGNlcHRpb24oCisgICAgICAgICAg
ICAgICAgJ0V4cGVjdGVkIEhUVFAgc3RhdHVzIGNvZGUgMTAxIGJ1dCBmb3VuZCAlciBpbiBzdGF0
dXMgbGluZTogJworICAgICAgICAgICAgICAgICclcicgJSAoY29kZSwgZmllbGQpLCBpbnQoY29k
ZSkpCisgICAgICAgIGZpZWxkcyA9IF9yZWFkX2ZpZWxkcyhzZWxmLl9zb2NrZXQpCisgICAgICAg
IGNoID0gcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2NrZXQsIDEpCisgICAgICAgIGlmIGNoICE9ICdc
bic6ICAjIDB4MEEKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRXhwZWN0ZWQgTEYgYnV0
IGZvdW5kOiAlcicgJSBjaCkKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ09wZW5pbmcg
aGFuZHNoYWtlIHJlc3BvbnNlIGhlYWRlcnM6ICVyJywgZmllbGRzKQorCisgICAgICAgICMgQ2hl
Y2sgL2ZpZWxkcy8KKyAgICAgICAgaWYgbGVuKGZpZWxkc1sndXBncmFkZSddKSAhPSAxOgorICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdNdWx0aXBsZSBVcGdy
YWRlIGhlYWRlcnMgZm91bmQ6ICVzJyAlIGZpZWxkc1sndXBncmFkZSddKQorICAgICAgICBpZiBs
ZW4oZmllbGRzWydjb25uZWN0aW9uJ10pICE9IDE6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oCisgICAgICAgICAgICAgICAgJ011bHRpcGxlIENvbm5lY3Rpb24gaGVhZGVycyBmb3VuZDog
JXMnICUgZmllbGRzWydjb25uZWN0aW9uJ10pCisgICAgICAgIGlmIGZpZWxkc1sndXBncmFkZSdd
WzBdICE9ICd3ZWJzb2NrZXQnOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAg
ICAgICAgICAgICdVbmV4cGVjdGVkIFVwZ3JhZGUgaGVhZGVyIHZhbHVlOiAlcycgJSBmaWVsZHNb
J3VwZ3JhZGUnXVswXSkKKyAgICAgICAgaWYgZmllbGRzWydjb25uZWN0aW9uJ11bMF0ubG93ZXIo
KSAhPSAndXBncmFkZSc6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisgICAgICAgICAg
ICAgICAgJ1VuZXhwZWN0ZWQgQ29ubmVjdGlvbiBoZWFkZXIgdmFsdWU6ICVzJyAlCisgICAgICAg
ICAgICAgICAgZmllbGRzWydjb25uZWN0aW9uJ11bMF0pCisKKyAgICAgICAgaWYgbGVuKGZpZWxk
c1snc2VjLXdlYnNvY2tldC1hY2NlcHQnXSkgIT0gMToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbigKKyAgICAgICAgICAgICAgICAnTXVsdGlwbGUgU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVh
ZGVycyBmb3VuZDogJXMnICUKKyAgICAgICAgICAgICAgICBmaWVsZHNbJ3NlYy13ZWJzb2NrZXQt
YWNjZXB0J10pCisKKyAgICAgICAgYWNjZXB0ID0gZmllbGRzWydzZWMtd2Vic29ja2V0LWFjY2Vw
dCddWzBdCisKKyAgICAgICAgIyBWYWxpZGF0ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBk
ZWNvZGVkX2FjY2VwdCA9IGJhc2U2NC5iNjRkZWNvZGUoYWNjZXB0KQorICAgICAgICBleGNlcHQg
VHlwZUVycm9yLCBlOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAg
ICAgICAgICAgICAgICdJbGxlZ2FsIHZhbHVlIGZvciBoZWFkZXIgU2VjLVdlYlNvY2tldC1BY2Nl
cHQ6ICcgKyBhY2NlcHQpCisKKyAgICAgICAgaWYgbGVuKGRlY29kZWRfYWNjZXB0KSAhPSAyMDoK
KyAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAn
RGVjb2RlZCB2YWx1ZSBvZiBTZWMtV2ViU29ja2V0LUFjY2VwdCBpcyBub3QgMjAtYnl0ZSBsb25n
JykKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ0FjdHVhbCBTZWMtV2ViU29ja2V0LUFj
Y2VwdDogJXIgKCVzKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQsIHV0aWwu
aGV4aWZ5KGRlY29kZWRfYWNjZXB0KSkKKworICAgICAgICBvcmlnaW5hbF9leHBlY3RlZF9hY2Nl
cHQgPSB1dGlsLnNoYTFfaGFzaCgKKyAgICAgICAgICAgIGtleSArIFdFQlNPQ0tFVF9BQ0NFUFRf
VVVJRCkuZGlnZXN0KCkKKyAgICAgICAgZXhwZWN0ZWRfYWNjZXB0ID0gYmFzZTY0LmI2NGVuY29k
ZShvcmlnaW5hbF9leHBlY3RlZF9hY2NlcHQpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVn
KCdFeHBlY3RlZCBTZWMtV2ViU29ja2V0LUFjY2VwdDogJXIgKCVzKScsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleHBlY3RlZF9hY2NlcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1dGlsLmhleGlmeShvcmlnaW5hbF9leHBlY3RlZF9hY2NlcHQpKQorCisgICAgICAgIGlmIGFj
Y2VwdCAhPSBleHBlY3RlZF9hY2NlcHQ6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisg
ICAgICAgICAgICAgICAgJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyOiAlciAo
ZXhwZWN0ZWQpICE9ICVyICcKKyAgICAgICAgICAgICAgICAnKGFjdHVhbCknICUgKGFjY2VwdCwg
ZXhwZWN0ZWRfYWNjZXB0KSkKKworICAgICAgICBzZXJ2ZXJfZXh0ZW5zaW9uc19oZWFkZXIgPSBm
aWVsZHMuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKQorICAgICAgICBhY2NlcHRlZF9l
eHRlbnNpb25zID0gW10KKyAgICAgICAgaWYgc2VydmVyX2V4dGVuc2lvbnNfaGVhZGVyIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgYWNjZXB0ZWRfZXh0ZW5zaW9ucyA9IGNvbW1vbi5wYXJzZV9l
eHRlbnNpb25zKAorICAgICAgICAgICAgICAgICAgICAnLCAnLmpvaW4oc2VydmVyX2V4dGVuc2lv
bnNfaGVhZGVyKSkKKworICAgICAgICAjIFNjYW4gYWNjZXB0ZWQgZXh0ZW5zaW9uIGxpc3QgdG8g
Y2hlY2sgaWYgdGhlcmUgaXMgYW55IHVucmVjb2duaXplZAorICAgICAgICAjIGV4dGVuc2lvbnMg
b3IgZXh0ZW5zaW9ucyB3ZSBkaWRuJ3QgcmVxdWVzdCBpbiBpdC4gVGhlbiwgZm9yCisgICAgICAg
ICMgZXh0ZW5zaW9ucyB3ZSByZXF1ZXN0LCBwYXJzZSB0aGVtIGFuZCBzdG9yZSBwYXJhbWV0ZXJz
LiBUaGV5IHdpbGwgYmUKKyAgICAgICAgIyB1c2VkIGxhdGVyIGJ5IGVhY2ggZXh0ZW5zaW9uLgor
ICAgICAgICBkZWZsYXRlX2ZyYW1lX2FjY2VwdGVkID0gRmFsc2UKKyAgICAgICAgbXV4X2FjY2Vw
dGVkID0gRmFsc2UKKyAgICAgICAgZm9yIGV4dGVuc2lvbiBpbiBhY2NlcHRlZF9leHRlbnNpb25z
OgorICAgICAgICAgICAgaWYgZXh0ZW5zaW9uLm5hbWUoKSA9PSBfREVGTEFURV9GUkFNRV9FWFRF
TlNJT046CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy51c2VfZGVmbGF0ZV9mcmFt
ZToKKyAgICAgICAgICAgICAgICAgICAgZGVmbGF0ZV9mcmFtZV9hY2NlcHRlZCA9IFRydWUKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGV4dGVuc2lvbi5uYW1l
KCkgPT0gX01VWF9FWFRFTlNJT046CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy51
c2VfbXV4OgorICAgICAgICAgICAgICAgICAgICBtdXhfYWNjZXB0ZWQgPSBUcnVlCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBleHRlbnNpb24ubmFtZSgpID09
IF9QRVJNRVNTQUdFX0RFRkxBVEVfRVhURU5TSU9OOgorICAgICAgICAgICAgICAgIGNoZWNrZXIg
PSBzZWxmLl9vcHRpb25zLmNoZWNrX3Blcm1lc3NhZ2VfZGVmbGF0ZQorICAgICAgICAgICAgICAg
IGlmIGNoZWNrZXI6CisgICAgICAgICAgICAgICAgICAgIGNoZWNrZXIoZXh0ZW5zaW9uKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
CisgICAgICAgICAgICAgICAgJ1JlY2VpdmVkIHVucmVjb2duaXplZCBleHRlbnNpb246ICVzJyAl
IGV4dGVuc2lvbi5uYW1lKCkpCisKKyAgICAgICAgIyBMZXQgYWxsIGV4dGVuc2lvbnMgY2hlY2sg
dGhlIHJlc3BvbnNlIGZvciBleHRlbnNpb24gcmVxdWVzdC4KKworICAgICAgICBpZiAoc2VsZi5f
b3B0aW9ucy51c2VfZGVmbGF0ZV9mcmFtZSBhbmQKKyAgICAgICAgICAgIG5vdCBkZWZsYXRlX2Zy
YW1lX2FjY2VwdGVkKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignJXMgZXh0ZW5zaW9u
IG5vdCBhY2NlcHRlZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ERUZMQVRFX0ZS
QU1FX0VYVEVOU0lPTikKKworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnVzZV9tdXggYW5kIG5v
dCBtdXhfYWNjZXB0ZWQ6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJyVzIGV4dGVuc2lv
biBub3QgYWNjZXB0ZWQnICUgX01VWF9FWFRFTlNJT04pCisKKworY2xhc3MgV2ViU29ja2V0SHli
aTAwSGFuZHNoYWtlKG9iamVjdCk6CisgICAgIiIiT3BlbmluZyBoYW5kc2hha2UgcHJvY2Vzc29y
IGZvciB0aGUgV2ViU29ja2V0IHByb3RvY29sIHZlcnNpb24gSHlCaSAwMC4KKyAgICAiIiIKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zLCBkcmFmdF9maWVsZCk6CisgICAgICAgIHNl
bGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYu
X29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX2RyYWZ0X2ZpZWxkID0gZHJhZnRfZmll
bGQKKworICAgIGRlZiBoYW5kc2hha2Uoc2VsZiwgc29ja2V0KToKKyAgICAgICAgIiIiSGFuZHNo
YWtlIFdlYlNvY2tldC4KKworICAgICAgICBSYWlzZXM6CisgICAgICAgICAgICBFeGNlcHRpb246
IGhhbmRzaGFrZSBmYWlsZWQuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX3NvY2tldCA9
IHNvY2tldAorCisgICAgICAgICMgNC4xIDUuIHNlbmQgcmVxdWVzdCBsaW5lLgorICAgICAgICBy
ZXF1ZXN0X2xpbmUgPSBfbWV0aG9kX2xpbmUoc2VsZi5fb3B0aW9ucy5yZXNvdXJjZSkKKyAgICAg
ICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdPcGVuaW5nIGhhbmRzaGFrZSBSZXF1ZXN0LUxpbmU6ICVy
JywgcmVxdWVzdF9saW5lKQorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbChyZXF1ZXN0X2xp
bmUpCisgICAgICAgICMgNC4xIDYuIExldCAvZmllbGRzLyBiZSBhbiBlbXB0eSBsaXN0IG9mIHN0
cmluZ3MuCisgICAgICAgIGZpZWxkcyA9IFtdCisgICAgICAgICMgNC4xIDcuIEFkZCB0aGUgc3Ry
aW5nICJVcGdyYWRlOiBXZWJTb2NrZXQiIHRvIC9maWVsZHMvLgorICAgICAgICBmaWVsZHMuYXBw
ZW5kKF9VUEdSQURFX0hFQURFUl9ISVhJRTc1KQorICAgICAgICAjIDQuMSA4LiBBZGQgdGhlIHN0
cmluZyAiQ29ubmVjdGlvbjogVXBncmFkZSIgdG8gL2ZpZWxkcy8uCisgICAgICAgIGZpZWxkcy5h
cHBlbmQoX0NPTk5FQ1RJT05fSEVBREVSKQorICAgICAgICAjIDQuMSA5LTEyLiBBZGQgSG9zdDog
ZmllbGQgdG8gL2ZpZWxkcy8uCisgICAgICAgIGZpZWxkcy5hcHBlbmQoX2Zvcm1hdF9ob3N0X2hl
YWRlcigKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VydmVyX2hvc3QsCisgICAgICAgICAg
ICBzZWxmLl9vcHRpb25zLnNlcnZlcl9wb3J0LAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy51
c2VfdGxzKSkKKyAgICAgICAgIyA0LjEgMTMuIEFkZCBPcmlnaW46IGZpZWxkIHRvIC9maWVsZHMv
LgorICAgICAgICBmaWVsZHMuYXBwZW5kKF9vcmlnaW5faGVhZGVyKHNlbGYuX29wdGlvbnMub3Jp
Z2luKSkKKyAgICAgICAgIyBUT0RPOiA0LjEgMTQgQWRkIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2w6
IGZpZWxkIHRvIC9maWVsZHMvLgorICAgICAgICAjIFRPRE86IDQuMSAxNSBBZGQgY29va2llIGhl
YWRlcnMgdG8gL2ZpZWxkcy8uCisKKyAgICAgICAgIyA0LjEgMTYtMjMuIEFkZCBTZWMtV2ViU29j
a2V0LUtleTxuPiB0byAvZmllbGRzLy4KKyAgICAgICAgc2VsZi5fbnVtYmVyMSwga2V5MSA9IHNl
bGYuX2dlbmVyYXRlX3NlY193ZWJzb2NrZXRfa2V5KCkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRl
YnVnKCdOdW1iZXIxOiAlZCcsIHNlbGYuX251bWJlcjEpCisgICAgICAgIGZpZWxkcy5hcHBlbmQo
J1NlYy1XZWJTb2NrZXQtS2V5MTogJXNcclxuJyAlIGtleTEpCisgICAgICAgIHNlbGYuX251bWJl
cjIsIGtleTIgPSBzZWxmLl9nZW5lcmF0ZV9zZWNfd2Vic29ja2V0X2tleSgpCisgICAgICAgIHNl
bGYuX2xvZ2dlci5kZWJ1ZygnTnVtYmVyMjogJWQnLCBzZWxmLl9udW1iZXIxKQorICAgICAgICBm
aWVsZHMuYXBwZW5kKCdTZWMtV2ViU29ja2V0LUtleTI6ICVzXHJcbicgJSBrZXkyKQorCisgICAg
ICAgIGZpZWxkcy5hcHBlbmQoJ1NlYy1XZWJTb2NrZXQtRHJhZnQ6ICVzXHJcbicgJSBzZWxmLl9k
cmFmdF9maWVsZCkKKworICAgICAgICAjIDQuMSAyNC4gRm9yIGVhY2ggc3RyaW5nIGluIC9maWVs
ZHMvLCBpbiBhIHJhbmRvbSBvcmRlcjogc2VuZCB0aGUKKyAgICAgICAgIyBzdHJpbmcsIGVuY29k
ZWQgYXMgVVRGLTgsIGZvbGxvd2VkIGJ5IGEgVVRGLTggZW5jb2RlZCBVKzAwMEQgQ0FSUklBR0UK
KyAgICAgICAgIyBSRVRVUk4gVSswMDBBIExJTkUgRkVFRCBjaGFyYWN0ZXIgcGFpciAoQ1JMRiku
CisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGZpZWxkcykKKworICAgICAgICBzZWxmLl9sb2dnZXIu
ZGVidWcoJ09wZW5pbmcgaGFuZHNoYWtlIHJlcXVlc3QgaGVhZGVyczogJXInLCBmaWVsZHMpCisg
ICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXQuc2Vu
ZGFsbChmaWVsZCkKKworICAgICAgICAjIDQuMSAyNS4gc2VuZCBhIFVURi04LWVuY29kZWQgVSsw
MDBEIENBUlJJQUdFIFJFVFVSTiBVKzAwMEEgTElORSBGRUVECisgICAgICAgICMgY2hhcmFjdGVy
IHBhaXIgKENSTEYpLgorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbCgnXHJcbicpCisgICAg
ICAgICMgNC4xIDI2LiBsZXQgL2tleTMvIGJlIGEgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgZWlnaHQg
cmFuZG9tIGJ5dGVzIChvcgorICAgICAgICAjIGVxdWl2YWxlbnRseSwgYSByYW5kb20gNjQgYml0
IGludGVnZXIgZW5jb2RlZCBpbiBhIGJpZy1lbmRpYW4gb3JkZXIpLgorICAgICAgICBzZWxmLl9r
ZXkzID0gc2VsZi5fZ2VuZXJhdGVfa2V5MygpCisgICAgICAgICMgNC4xIDI3LiBzZW5kIC9rZXkz
LyB0byB0aGUgc2VydmVyLgorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbChzZWxmLl9rZXkz
KQorICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAnS2V5MzogJXIgKCVz
KScsIHNlbGYuX2tleTMsIHV0aWwuaGV4aWZ5KHNlbGYuX2tleTMpKQorCisgICAgICAgIHNlbGYu
X2xvZ2dlci5pbmZvKCdTZW50IG9wZW5pbmcgaGFuZHNoYWtlIHJlcXVlc3QnKQorCisgICAgICAg
ICMgNC4xIDI4LiBSZWFkIGJ5dGVzIGZyb20gdGhlIHNlcnZlciB1bnRpbCBlaXRoZXIgdGhlIGNv
bm5lY3Rpb24KKyAgICAgICAgIyBjbG9zZXMsIG9yIGEgMHgwQSBieXRlIGlzIHJlYWQuIGxldCAv
ZmllbGQvIGJlIHRoZXNlIGJ5dGVzLCBpbmNsdWRpbmcKKyAgICAgICAgIyB0aGUgMHgwQSBieXRl
cy4KKyAgICAgICAgZmllbGQgPSAnJworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAg
Y2ggPSByZWNlaXZlX2J5dGVzKHNlbGYuX3NvY2tldCwgMSkKKyAgICAgICAgICAgIGZpZWxkICs9
IGNoCisgICAgICAgICAgICBpZiBjaCA9PSAnXG4nOgorICAgICAgICAgICAgICAgIGJyZWFrCisK
KyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdPcGVuaW5nIGhhbmRzaGFrZSBSZXNwb25zZS1M
aW5lOiAlcicsIGZpZWxkKQorCisgICAgICAgICMgaWYgL2ZpZWxkLyBpcyBub3QgYXQgbGVhc3Qg
c2V2ZW4gYnl0ZXMgbG9uZywgb3IgaWYgdGhlIGxhc3QKKyAgICAgICAgIyB0d28gYnl0ZXMgYXJl
bid0IDB4MEQgYW5kIDB4MEEgcmVzcGVjdGl2ZWx5LCBvciBpZiBpdCBkb2VzIG5vdAorICAgICAg
ICAjIGNvbnRhaW4gYXQgbGVhc3QgdHdvIDB4MjAgYnl0ZXMsIHRoZW4gZmFpbCB0aGUgV2ViU29j
a2V0IGNvbm5lY3Rpb24KKyAgICAgICAgIyBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgICAg
IGlmIGxlbihmaWVsZCkgPCA3IG9yIG5vdCBmaWVsZC5lbmRzd2l0aCgnXHJcbicpOgorICAgICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKCdXcm9uZyBzdGF0dXMgbGluZTogJXInICUgZmllbGQpCisg
ICAgICAgIG0gPSByZS5tYXRjaCgnW14gXSogKFteIF0qKSAuKicsIGZpZWxkKQorICAgICAgICBp
ZiBtIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ05vIGNvZGUgZm91bmQg
aW4gc3RhdHVzIGxpbmU6ICVyJyAlIGZpZWxkKQorICAgICAgICAjIDQuMSAyOS4gbGV0IC9jb2Rl
LyBiZSB0aGUgc3Vic3RyaW5nIG9mIC9maWVsZC8gdGhhdCBzdGFydHMgZnJvbSB0aGUKKyAgICAg
ICAgIyBieXRlIGFmdGVyIHRoZSBmaXJzdCAweDIwIGJ5dGUsIGFuZCBlbmRzIHdpdGggdGhlIGJ5
dGUgYmVmb3JlIHRoZQorICAgICAgICAjIHNlY29uZCAweDIwIGJ5dGUuCisgICAgICAgIGNvZGUg
PSBtLmdyb3VwKDEpCisgICAgICAgICMgNC4xIDMwLiBpZiAvY29kZS8gaXMgbm90IHRocmVlIGJ5
dGVzIGxvbmcsIG9yIGlmIGFueSBvZiB0aGUgYnl0ZXMgaW4KKyAgICAgICAgIyAvY29kZS8gYXJl
IG5vdCBpbiB0aGUgcmFuZ2UgMHgzMCB0byAweDkwLCB0aGVuIGZhaWwgdGhlIFdlYlNvY2tldAor
ICAgICAgICAjIGNvbm5lY3Rpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgICAgICBpZiBu
b3QgcmUubWF0Y2goJ1swLTldWzAtOV1bMC05XScsIGNvZGUpOgorICAgICAgICAgICAgcmFpc2Ug
RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdIVFRQIHN0YXR1cyBjb2RlICVyIGlzIG5vdCB0
aHJlZSBkaWdpdCBpbiBzdGF0dXMgbGluZTogJXInICUKKyAgICAgICAgICAgICAgICAoY29kZSwg
ZmllbGQpKQorICAgICAgICAjIDQuMSAzMS4gaWYgL2NvZGUvLCBpbnRlcnByZXRlZCBhcyBVVEYt
OCwgaXMgIjEwMSIsIHRoZW4gbW92ZSB0byB0aGUKKyAgICAgICAgIyBuZXh0IHN0ZXAuCisgICAg
ICAgIGlmIGNvZGUgIT0gJzEwMSc6CisgICAgICAgICAgICByYWlzZSBIdHRwU3RhdHVzRXhjZXB0
aW9uKAorICAgICAgICAgICAgICAgICdFeHBlY3RlZCBIVFRQIHN0YXR1cyBjb2RlIDEwMSBidXQg
Zm91bmQgJXIgaW4gc3RhdHVzIGxpbmU6ICcKKyAgICAgICAgICAgICAgICAnJXInICUgKGNvZGUs
IGZpZWxkKSwgaW50KGNvZGUpKQorICAgICAgICAjIDQuMSAzMi0zOS4gcmVhZCBmaWVsZHMgaW50
byAvZmllbGRzLworICAgICAgICBmaWVsZHMgPSBfcmVhZF9maWVsZHMoc2VsZi5fc29ja2V0KQor
CisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnT3BlbmluZyBoYW5kc2hha2UgcmVzcG9uc2Ug
aGVhZGVyczogJXInLCBmaWVsZHMpCisKKyAgICAgICAgIyA0LjEgNDAuIF9GaWVsZHMgcHJvY2Vz
c2luZ18KKyAgICAgICAgIyByZWFkIGEgYnl0ZSBmcm9tIHNlcnZlcgorICAgICAgICBjaCA9IHJl
Y2VpdmVfYnl0ZXMoc2VsZi5fc29ja2V0LCAxKQorICAgICAgICBpZiBjaCAhPSAnXG4nOiAgIyAw
eDBBCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0V4cGVjdGVkIExGIGJ1dCBmb3VuZCAl
cicgJSBjaCkKKyAgICAgICAgIyA0LjEgNDEuIGNoZWNrIC9maWVsZHMvCisgICAgICAgIGlmIGxl
bihmaWVsZHNbJ3VwZ3JhZGUnXSkgIT0gMToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigK
KyAgICAgICAgICAgICAgICAnTXVsdGlwbGUgVXBncmFkZSBoZWFkZXJzIGZvdW5kOiAlcycgJSBm
aWVsZHNbJ3VwZ3JhZGUnXSkKKyAgICAgICAgaWYgbGVuKGZpZWxkc1snY29ubmVjdGlvbiddKSAh
PSAxOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdNdWx0
aXBsZSBDb25uZWN0aW9uIGhlYWRlcnMgZm91bmQ6ICVzJyAlIGZpZWxkc1snY29ubmVjdGlvbidd
KQorICAgICAgICBpZiBsZW4oZmllbGRzWydzZWMtd2Vic29ja2V0LW9yaWdpbiddKSAhPSAxOgor
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdNdWx0aXBsZSBT
ZWMtV2ViU29ja2V0LU9yaWdpbiBoZWFkZXJzIGZvdW5kOiAlcycgJQorICAgICAgICAgICAgICAg
IGZpZWxkc1snc2VjLXNlYnNvY2tldC1vcmlnaW4nXSkKKyAgICAgICAgaWYgbGVuKGZpZWxkc1sn
c2VjLXdlYnNvY2tldC1sb2NhdGlvbiddKSAhPSAxOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKAorICAgICAgICAgICAgICAgICdNdWx0aXBsZSBTZWMtV2ViU29ja2V0LUxvY2F0aW9uIGhl
YWRlcnMgZm91bmQ6ICVzJyAlCisgICAgICAgICAgICAgICAgZmllbGRzWydzZWMtc2Vic29ja2V0
LWxvY2F0aW9uJ10pCisgICAgICAgICMgVE9ETyh1a2FpKTogcHJvdG9jb2wKKyAgICAgICAgIyBp
ZiB0aGUgZW50cnkncyBuYW1lIGlzICJ1cGdyYWRlIgorICAgICAgICAjICBpZiB0aGUgdmFsdWUg
aXMgbm90IGV4YWN0bHkgZXF1YWwgdG8gdGhlIHN0cmluZyAiV2ViU29ja2V0IiwKKyAgICAgICAg
IyAgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3Rl
cHMuCisgICAgICAgIGlmIGZpZWxkc1sndXBncmFkZSddWzBdICE9ICdXZWJTb2NrZXQnOgorICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIFVw
Z3JhZGUgaGVhZGVyIHZhbHVlOiAlcycgJSBmaWVsZHNbJ3VwZ3JhZGUnXVswXSkKKyAgICAgICAg
IyBpZiB0aGUgZW50cnkncyBuYW1lIGlzICJjb25uZWN0aW9uIgorICAgICAgICAjICBpZiB0aGUg
dmFsdWUsIGNvbnZlcnRlZCB0byBBU0NJSSBsb3dlcmNhc2UsIGlzIG5vdCBleGFjdGx5IGVxdWFs
CisgICAgICAgICMgIHRvIHRoZSBzdHJpbmcgInVwZ3JhZGUiLCB0aGVuIGZhaWwgdGhlIFdlYlNv
Y2tldCBjb25uZWN0aW9uIGFuZAorICAgICAgICAjICBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAg
ICAgaWYgZmllbGRzWydjb25uZWN0aW9uJ11bMF0ubG93ZXIoKSAhPSAndXBncmFkZSc6CisgICAg
ICAgICAgICByYWlzZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgQ29u
bmVjdGlvbiBoZWFkZXIgdmFsdWU6ICVzJyAlCisgICAgICAgICAgICAgICAgZmllbGRzWydjb25u
ZWN0aW9uJ11bMF0pCisgICAgICAgICMgVE9ETyh1a2FpKTogY2hlY2sgb3JpZ2luLCBsb2NhdGlv
biwgY29va2llLCAuLgorCisgICAgICAgICMgNC4xIDQyLiBsZXQgL2NoYWxsZW5nZS8gYmUgdGhl
IGNvbmNhdGVuYXRpb24gb2YgL251bWJlcl8xLywKKyAgICAgICAgIyBleHByZXNzZWQgYXMgYSBi
aWcgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyLCAvbnVtYmVyXzIvLCBleHByZXNzZWQKKyAgICAgICAg
IyBhcyBiaWcgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyLCBhbmQgdGhlIGVpZ2h0IGJ5dGVzIG9mIC9r
ZXlfMy8gaW4gdGhlCisgICAgICAgICMgb3JkZXIgdGhleSB3ZXJlIHNlbnQgb24gdGhlIHdpcmUu
CisgICAgICAgIGNoYWxsZW5nZSA9IHN0cnVjdC5wYWNrKCchSScsIHNlbGYuX251bWJlcjEpCisg
ICAgICAgIGNoYWxsZW5nZSArPSBzdHJ1Y3QucGFjaygnIUknLCBzZWxmLl9udW1iZXIyKQorICAg
ICAgICBjaGFsbGVuZ2UgKz0gc2VsZi5fa2V5MworCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1
ZygKKyAgICAgICAgICAgICdDaGFsbGVuZ2U6ICVyICglcyknLCBjaGFsbGVuZ2UsIHV0aWwuaGV4
aWZ5KGNoYWxsZW5nZSkpCisKKyAgICAgICAgIyA0LjEgNDMuIGxldCAvZXhwZWN0ZWQvIGJlIHRo
ZSBNRDUgZmluZ2VycHJpbnQgb2YgL2NoYWxsZW5nZS8gYXMgYQorICAgICAgICAjIGJpZy1lbmRp
YW4gMTI4IGJpdCBzdHJpbmcuCisgICAgICAgIGV4cGVjdGVkID0gdXRpbC5tZDVfaGFzaChjaGFs
bGVuZ2UpLmRpZ2VzdCgpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAg
ICdFeHBlY3RlZCBjaGFsbGVuZ2UgcmVzcG9uc2U6ICVyICglcyknLAorICAgICAgICAgICAgZXhw
ZWN0ZWQsIHV0aWwuaGV4aWZ5KGV4cGVjdGVkKSkKKworICAgICAgICAjIDQuMSA0NC4gcmVhZCBz
aXh0ZWVuIGJ5dGVzIGZyb20gdGhlIHNlcnZlci4KKyAgICAgICAgIyBsZXQgL3JlcGx5LyBiZSB0
aG9zZSBieXRlcy4KKyAgICAgICAgcmVwbHkgPSByZWNlaXZlX2J5dGVzKHNlbGYuX3NvY2tldCwg
MTYpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICdBY3R1YWwgY2hh
bGxlbmdlIHJlc3BvbnNlOiAlciAoJXMpJywgcmVwbHksIHV0aWwuaGV4aWZ5KHJlcGx5KSkKKwor
ICAgICAgICAjIDQuMSA0NS4gaWYgL3JlcGx5LyBkb2VzIG5vdCBleGFjdGx5IGVxdWFsIC9leHBl
Y3RlZC8sIHRoZW4gZmFpbAorICAgICAgICAjIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQg
YWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgICAgIGlmIGV4cGVjdGVkICE9IHJlcGx5OgorICAgICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdCYWQgY2hhbGxlbmdlIHJl
c3BvbnNlOiAlciAoZXhwZWN0ZWQpICE9ICVyIChhY3R1YWwpJyAlCisgICAgICAgICAgICAgICAg
KGV4cGVjdGVkLCByZXBseSkpCisgICAgICAgICMgNC4xIDQ2LiBUaGUgKldlYlNvY2tldCBjb25u
ZWN0aW9uIGlzIGVzdGFibGlzaGVkKi4KKworICAgIGRlZiBfZ2VuZXJhdGVfc2VjX3dlYnNvY2tl
dF9rZXkoc2VsZik6CisgICAgICAgICMgNC4xIDE2LiBsZXQgL3NwYWNlc19uLyBiZSBhIHJhbmRv
bSBpbnRlZ2VyIGZyb20gMSB0byAxMiBpbmNsdXNpdmUuCisgICAgICAgIHNwYWNlcyA9IHJhbmRv
bS5yYW5kaW50KDEsIDEyKQorICAgICAgICAjIDQuMSAxNy4gbGV0IC9tYXhfbi8gYmUgdGhlIGxh
cmdlc3QgaW50ZWdlciBub3QgZ3JlYXRlciB0aGFuCisgICAgICAgICMgIDQsMjk0LDk2NywyOTUg
ZGl2aWRlZCBieSAvc3BhY2VzX24vLgorICAgICAgICBtYXhudW0gPSA0Mjk0OTY3Mjk1IC8gc3Bh
Y2VzCisgICAgICAgICMgNC4xIDE4LiBsZXQgL251bWJlcl9uLyBiZSBhIHJhbmRvbSBpbnRlZ2Vy
IGZyb20gMCB0byAvbWF4X24vCisgICAgICAgICMgaW5jbHVzaXZlLgorICAgICAgICBudW1iZXIg
PSByYW5kb20ucmFuZGludCgwLCBtYXhudW0pCisgICAgICAgICMgNC4xIDE5LiBsZXQgL3Byb2R1
Y3Rfbi8gYmUgdGhlIHJlc3VsdCBvZiBtdWx0aXBseWluZyAvbnVtYmVyX24vIGFuZAorICAgICAg
ICAjIC9zcGFjZXNfbi8gdG9nZXRoZXIuCisgICAgICAgIHByb2R1Y3QgPSBudW1iZXIgKiBzcGFj
ZXMKKyAgICAgICAgIyA0LjEgMjAuIGxldCAva2V5X24vIGJlIGEgc3RyaW5nIGNvbnNpc3Rpbmcg
b2YgL3Byb2R1Y3Rfbi8sIGV4cHJlc3NlZAorICAgICAgICAjIGluIGJhc2UgdGVuIHVzaW5nIHRo
ZSBudW1lcmFscyBpbiB0aGUgcmFuZ2UgVSswMDMwIERJR0lUIFpFUk8gKDApIHRvCisgICAgICAg
ICMgVSswMDM5IERJR0lUIE5JTkUgKDkpLgorICAgICAgICBrZXkgPSBzdHIocHJvZHVjdCkKKyAg
ICAgICAgIyA0LjEgMjEuIGluc2VydCBiZXR3ZWVuIG9uZSBhbmQgdHdlbHZlIHJhbmRvbSBjaGFy
YWN0ZXJzIGZyb20gdGhlCisgICAgICAgICMgcmFuZ2UgVSswMDIxIHRvIFUrMDAyRiBhbmQgVSsw
MDNBIHRvIFUrMDA3RSBpbnRvIC9rZXlfbi8gYXQgcmFuZG9tCisgICAgICAgICMgcG9zaXRpb25z
LgorICAgICAgICBhdmFpbGFibGVfY2hhcnMgPSByYW5nZSgweDIxLCAweDJmICsgMSkgKyByYW5n
ZSgweDNhLCAweDdlICsgMSkKKyAgICAgICAgbiA9IHJhbmRvbS5yYW5kaW50KDEsIDEyKQorICAg
ICAgICBmb3IgXyBpbiB4cmFuZ2Uobik6CisgICAgICAgICAgICBjaCA9IHJhbmRvbS5jaG9pY2Uo
YXZhaWxhYmxlX2NoYXJzKQorICAgICAgICAgICAgcG9zID0gcmFuZG9tLnJhbmRpbnQoMCwgbGVu
KGtleSkpCisgICAgICAgICAgICBrZXkgPSBrZXlbMDpwb3NdICsgY2hyKGNoKSArIGtleVtwb3M6
XQorICAgICAgICAjIDQuMSAyMi4gaW5zZXJ0IC9zcGFjZXNfbi8gVSswMDIwIFNQQUNFIGNoYXJh
Y3RlcnMgaW50byAva2V5X24vIGF0CisgICAgICAgICMgcmFuZG9tIHBvc2l0aW9ucyBvdGhlciB0
aGFuIHN0YXJ0IG9yIGVuZCBvZiB0aGUgc3RyaW5nLgorICAgICAgICBmb3IgXyBpbiB4cmFuZ2Uo
c3BhY2VzKToKKyAgICAgICAgICAgIHBvcyA9IHJhbmRvbS5yYW5kaW50KDEsIGxlbihrZXkpIC0g
MSkKKyAgICAgICAgICAgIGtleSA9IGtleVswOnBvc10gKyAnICcgKyBrZXlbcG9zOl0KKyAgICAg
ICAgcmV0dXJuIG51bWJlciwga2V5CisKKyAgICBkZWYgX2dlbmVyYXRlX2tleTMoc2VsZik6Cisg
ICAgICAgICMgNC4xIDI2LiBsZXQgL2tleTMvIGJlIGEgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgZWln
aHQgcmFuZG9tIGJ5dGVzIChvcgorICAgICAgICAjIGVxdWl2YWxlbnRseSwgYSByYW5kb20gNjQg
Yml0IGludGVnZXIgZW5jb2RlZCBpbiBhIGJpZy1lbmRpYW4gb3JkZXIpLgorICAgICAgICByZXR1
cm4gJycuam9pbihbY2hyKHJhbmRvbS5yYW5kaW50KDAsIDI1NSkpIGZvciBfIGluIHhyYW5nZSg4
KV0pCisKKworY2xhc3MgV2ViU29ja2V0SGl4aWU3NUhhbmRzaGFrZShvYmplY3QpOgorICAgICIi
IldlYlNvY2tldCBoYW5kc2hha2UgcHJvY2Vzc29yIGZvciBJRVRGIEhpeGllIDc1LiIiIgorCisg
ICAgX0VYUEVDVEVEX1JFU1BPTlNFID0gKAorICAgICAgICAnSFRUUC8xLjEgMTAxIFdlYiBTb2Nr
ZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicgKworICAgICAgICBfVVBHUkFERV9IRUFERVJfSElY
SUU3NSArCisgICAgICAgIF9DT05ORUNUSU9OX0hFQURFUikKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9n
Z2VyKHNlbGYpCisKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKworICAgIGRlZiBf
c2tpcF9oZWFkZXJzKHNlbGYpOgorICAgICAgICB0ZXJtaW5hdG9yID0gJ1xyXG5cclxuJworICAg
ICAgICBwb3MgPSAwCisgICAgICAgIHdoaWxlIHBvcyA8IGxlbih0ZXJtaW5hdG9yKToKKyAgICAg
ICAgICAgIHJlY2VpdmVkID0gcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2NrZXQsIDEpCisgICAgICAg
ICAgICBpZiByZWNlaXZlZCA9PSB0ZXJtaW5hdG9yW3Bvc106CisgICAgICAgICAgICAgICAgcG9z
ICs9IDEKKyAgICAgICAgICAgIGVsaWYgcmVjZWl2ZWQgPT0gdGVybWluYXRvclswXToKKyAgICAg
ICAgICAgICAgICBwb3MgPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBv
cyA9IDAKKworICAgIGRlZiBoYW5kc2hha2Uoc2VsZiwgc29ja2V0KToKKyAgICAgICAgc2VsZi5f
c29ja2V0ID0gc29ja2V0CisKKyAgICAgICAgcmVxdWVzdF9saW5lID0gX21ldGhvZF9saW5lKHNl
bGYuX29wdGlvbnMucmVzb3VyY2UpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnT3Blbmlu
ZyBoYW5kc2hha2UgUmVxdWVzdC1MaW5lOiAlcicsIHJlcXVlc3RfbGluZSkKKyAgICAgICAgc2Vs
Zi5fc29ja2V0LnNlbmRhbGwocmVxdWVzdF9saW5lKQorCisgICAgICAgIGhlYWRlcnMgPSBfVVBH
UkFERV9IRUFERVJfSElYSUU3NSArIF9DT05ORUNUSU9OX0hFQURFUgorICAgICAgICBoZWFkZXJz
ICs9IF9mb3JtYXRfaG9zdF9oZWFkZXIoCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnNlcnZl
cl9ob3N0LAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9ydCwKKyAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMudXNlX3RscykKKyAgICAgICAgaGVhZGVycyArPSBfb3JpZ2luX2hl
YWRlcihzZWxmLl9vcHRpb25zLm9yaWdpbikKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdP
cGVuaW5nIGhhbmRzaGFrZSByZXF1ZXN0IGhlYWRlcnM6ICVyJywgaGVhZGVycykKKyAgICAgICAg
c2VsZi5fc29ja2V0LnNlbmRhbGwoaGVhZGVycykKKworICAgICAgICBzZWxmLl9zb2NrZXQuc2Vu
ZGFsbCgnXHJcbicpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ1NlbnQgb3BlbmluZyBo
YW5kc2hha2UgcmVxdWVzdCcpCisKKyAgICAgICAgZm9yIGV4cGVjdGVkX2NoYXIgaW4gV2ViU29j
a2V0SGl4aWU3NUhhbmRzaGFrZS5fRVhQRUNURURfUkVTUE9OU0U6CisgICAgICAgICAgICByZWNl
aXZlZCA9IHJlY2VpdmVfYnl0ZXMoc2VsZi5fc29ja2V0LCAxKQorICAgICAgICAgICAgaWYgZXhw
ZWN0ZWRfY2hhciAhPSByZWNlaXZlZDoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
J0hhbmRzaGFrZSBmYWlsdXJlJykKKyAgICAgICAgIyBXZSBjdXQgY29ybmVycyBhbmQgc2tpcCBv
dGhlciBoZWFkZXJzLgorICAgICAgICBzZWxmLl9za2lwX2hlYWRlcnMoKQorCisKK2NsYXNzIFdl
YlNvY2tldFN0cmVhbShvYmplY3QpOgorICAgICIiIkZyYW1lIHByb2Nlc3NvciBmb3IgdGhlIFdl
YlNvY2tldCBwcm90b2NvbCAoUkZDIDY0NTUpLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHNvY2tldCwgaGFuZHNoYWtlKToKKyAgICAgICAgc2VsZi5faGFuZHNoYWtlID0gaGFuZHNoYWtl
CisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldAorCisgICAgICAgICMgRmlsdGVycyBhcHBs
aWVkIHRvIGFwcGxpY2F0aW9uIGRhdGEgcGFydCBvZiBkYXRhIGZyYW1lcy4KKyAgICAgICAgc2Vs
Zi5fb3V0Z29pbmdfZnJhbWVfZmlsdGVyID0gTm9uZQorICAgICAgICBzZWxmLl9pbmNvbWluZ19m
cmFtZV9maWx0ZXIgPSBOb25lCisKKyAgICAgICAgaWYgc2VsZi5faGFuZHNoYWtlLl9vcHRpb25z
LnVzZV9kZWZsYXRlX2ZyYW1lOgorICAgICAgICAgICAgc2VsZi5fb3V0Z29pbmdfZnJhbWVfZmls
dGVyID0gKAorICAgICAgICAgICAgICAgIHV0aWwuX1JGQzE5NzlEZWZsYXRlcihOb25lLCBGYWxz
ZSkpCisgICAgICAgICAgICBzZWxmLl9pbmNvbWluZ19mcmFtZV9maWx0ZXIgPSB1dGlsLl9SRkMx
OTc5SW5mbGF0ZXIoKQorCisgICAgICAgIHNlbGYuX2ZyYWdtZW50ZWQgPSBGYWxzZQorCisgICAg
ZGVmIF9tYXNrX2h5Ymkoc2VsZiwgcyk6CisgICAgICAgICMgVE9ETyh0eW9zaGlubyk6IG9zLnVy
YW5kb20gZG9lcyBvcGVuL3JlYWQvY2xvc2UgZm9yIGV2ZXJ5IGNhbGwuIElmCisgICAgICAgICMg
cGVyZm9ybWFuY2UgbWF0dGVycywgY2hhbmdlIHRoaXMgdG8gc29tZSBsaWJyYXJ5IGNhbGwgdGhh
dCBnZW5lcmF0ZXMKKyAgICAgICAgIyBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgcHNldWRvIHJh
bmRvbSBudW1iZXIgc2VxdWVuY2UuCisgICAgICAgIG1hc2tpbmdfbm9uY2UgPSBvcy51cmFuZG9t
KDQpCisgICAgICAgIHJlc3VsdCA9IFttYXNraW5nX25vbmNlXQorICAgICAgICBjb3VudCA9IDAK
KyAgICAgICAgZm9yIGMgaW4gczoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hyKG9yZChj
KSBeIG9yZChtYXNraW5nX25vbmNlW2NvdW50XSkpKQorICAgICAgICAgICAgY291bnQgPSAoY291
bnQgKyAxKSAlIGxlbihtYXNraW5nX25vbmNlKQorICAgICAgICByZXR1cm4gJycuam9pbihyZXN1
bHQpCisKKyAgICBkZWYgc2VuZF9mcmFtZV9vZl9hcmJpdHJhcnlfYnl0ZXMoc2VsZiwgaGVhZGVy
LCBib2R5KToKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoaGVhZGVyICsgc2VsZi5fbWFz
a19oeWJpKGJvZHkpKQorCisgICAgZGVmIHNlbmRfZGF0YShzZWxmLCBwYXlsb2FkLCBmcmFtZV90
eXBlLCBlbmQ9VHJ1ZSwgbWFzaz1UcnVlLAorICAgICAgICAgICAgICAgICAgcnN2MT0wLCByc3Yy
PTAsIHJzdjM9MCk6CisgICAgICAgIGlmIHNlbGYuX291dGdvaW5nX2ZyYW1lX2ZpbHRlciBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgIHBheWxvYWQgPSBzZWxmLl9vdXRnb2luZ19mcmFtZV9maWx0
ZXIuZmlsdGVyKHBheWxvYWQpCisKKyAgICAgICAgaWYgc2VsZi5fZnJhZ21lbnRlZDoKKyAgICAg
ICAgICAgIG9wY29kZSA9IE9QQ09ERV9DT05USU5VQVRJT04KKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIG9wY29kZSA9IGZyYW1lX3R5cGUKKworICAgICAgICBpZiBlbmQ6CisgICAgICAgICAg
ICBzZWxmLl9mcmFnbWVudGVkID0gRmFsc2UKKyAgICAgICAgICAgIGZpbiA9IDEKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2ZyYWdtZW50ZWQgPSBUcnVlCisgICAgICAgICAgICBm
aW4gPSAwCisKKyAgICAgICAgaWYgc2VsZi5faGFuZHNoYWtlLl9vcHRpb25zLnVzZV9kZWZsYXRl
X2ZyYW1lOgorICAgICAgICAgICAgcnN2MSA9IDEKKworICAgICAgICBpZiBtYXNrOgorICAgICAg
ICAgICAgbWFza19iaXQgPSAxIDw8IDcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hc2tf
Yml0ID0gMAorCisgICAgICAgIGhlYWRlciA9IGNocihmaW4gPDwgNyB8IHJzdjEgPDwgNiB8IHJz
djIgPDwgNSB8IHJzdjMgPDwgNCB8IG9wY29kZSkKKyAgICAgICAgcGF5bG9hZF9sZW5ndGggPSBs
ZW4ocGF5bG9hZCkKKyAgICAgICAgaWYgcGF5bG9hZF9sZW5ndGggPD0gMTI1OgorICAgICAgICAg
ICAgaGVhZGVyICs9IGNocihtYXNrX2JpdCB8IHBheWxvYWRfbGVuZ3RoKQorICAgICAgICBlbGlm
IHBheWxvYWRfbGVuZ3RoIDwgMSA8PCAxNjoKKyAgICAgICAgICAgIGhlYWRlciArPSBjaHIobWFz
a19iaXQgfCAxMjYpICsgc3RydWN0LnBhY2soJyFIJywgcGF5bG9hZF9sZW5ndGgpCisgICAgICAg
IGVsaWYgcGF5bG9hZF9sZW5ndGggPCAxIDw8IDYzOgorICAgICAgICAgICAgaGVhZGVyICs9IGNo
cihtYXNrX2JpdCB8IDEyNykgKyBzdHJ1Y3QucGFjaygnIVEnLCBwYXlsb2FkX2xlbmd0aCkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVG9vIGxvbmcgcGF5bG9h
ZCAoJWQgYnl0ZSknICUgcGF5bG9hZF9sZW5ndGgpCisgICAgICAgIGlmIG1hc2s6CisgICAgICAg
ICAgICBwYXlsb2FkID0gc2VsZi5fbWFza19oeWJpKHBheWxvYWQpCisgICAgICAgIHNlbGYuX3Nv
Y2tldC5zZW5kYWxsKGhlYWRlciArIHBheWxvYWQpCisKKyAgICBkZWYgc2VuZF9iaW5hcnkoc2Vs
ZiwgcGF5bG9hZCwgZW5kPVRydWUsIG1hc2s9VHJ1ZSk6CisgICAgICAgIHNlbGYuc2VuZF9kYXRh
KHBheWxvYWQsIE9QQ09ERV9CSU5BUlksIGVuZCwgbWFzaykKKworICAgIGRlZiBzZW5kX3RleHQo
c2VsZiwgcGF5bG9hZCwgZW5kPVRydWUsIG1hc2s9VHJ1ZSk6CisgICAgICAgIHNlbGYuc2VuZF9k
YXRhKHBheWxvYWQuZW5jb2RlKCd1dGYtOCcpLCBPUENPREVfVEVYVCwgZW5kLCBtYXNrKQorCisg
ICAgZGVmIF9hc3NlcnRfcmVjZWl2ZV9kYXRhKHNlbGYsIHBheWxvYWQsIG9wY29kZSwgZmluLCBy
c3YxLCByc3YyLCByc3YzKToKKyAgICAgICAgKGFjdHVhbF9maW4sIGFjdHVhbF9yc3YxLCBhY3R1
YWxfcnN2MiwgYWN0dWFsX3JzdjMsIGFjdHVhbF9vcGNvZGUsCisgICAgICAgICBwYXlsb2FkX2xl
bmd0aCkgPSByZWFkX2ZyYW1lX2hlYWRlcihzZWxmLl9zb2NrZXQpCisKKyAgICAgICAgaWYgYWN0
dWFsX29wY29kZSAhPSBvcGNvZGU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisgICAg
ICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgb3Bjb2RlOiAlZCAoZXhwZWN0ZWQpIHZzICVkIChhY3R1
YWwpJyAlCisgICAgICAgICAgICAgICAgKG9wY29kZSwgYWN0dWFsX29wY29kZSkpCisKKyAgICAg
ICAgaWYgYWN0dWFsX2ZpbiAhPSBmaW46CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisg
ICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZmluOiAlZCAoZXhwZWN0ZWQpIHZzICVkIChhY3R1
YWwpJyAlCisgICAgICAgICAgICAgICAgKGZpbiwgYWN0dWFsX2ZpbikpCisKKyAgICAgICAgaWYg
cnN2MSBpcyBOb25lOgorICAgICAgICAgICAgcnN2MSA9IDAKKyAgICAgICAgICAgIGlmIHNlbGYu
X2hhbmRzaGFrZS5fb3B0aW9ucy51c2VfZGVmbGF0ZV9mcmFtZToKKyAgICAgICAgICAgICAgICBy
c3YxID0gMQorCisgICAgICAgIGlmIHJzdjIgaXMgTm9uZToKKyAgICAgICAgICAgIHJzdjIgPSAw
CisKKyAgICAgICAgaWYgcnN2MyBpcyBOb25lOgorICAgICAgICAgICAgcnN2MyA9IDAKKworICAg
ICAgICBpZiBhY3R1YWxfcnN2MSAhPSByc3YxOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KAorICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIHJzdjE6ICVyIChleHBlY3RlZCkgdnMgJXIg
KGFjdHVhbCknICUKKyAgICAgICAgICAgICAgICAocnN2MSwgYWN0dWFsX3JzdjEpKQorCisgICAg
ICAgIGlmIGFjdHVhbF9yc3YyICE9IHJzdjI6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
CisgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgcnN2MjogJXIgKGV4cGVjdGVkKSB2cyAlciAo
YWN0dWFsKScgJQorICAgICAgICAgICAgICAgIChyc3YyLCBhY3R1YWxfcnN2MikpCisKKyAgICAg
ICAgaWYgYWN0dWFsX3JzdjMgIT0gcnN2MzoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigK
KyAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCByc3YzOiAlciAoZXhwZWN0ZWQpIHZzICVyIChh
Y3R1YWwpJyAlCisgICAgICAgICAgICAgICAgKHJzdjMsIGFjdHVhbF9yc3YzKSkKKworICAgICAg
ICByZWNlaXZlZCA9IHJlY2VpdmVfYnl0ZXMoc2VsZi5fc29ja2V0LCBwYXlsb2FkX2xlbmd0aCkK
KworICAgICAgICBpZiBzZWxmLl9pbmNvbWluZ19mcmFtZV9maWx0ZXIgaXMgbm90IE5vbmU6Cisg
ICAgICAgICAgICByZWNlaXZlZCA9IHNlbGYuX2luY29taW5nX2ZyYW1lX2ZpbHRlci5maWx0ZXIo
cmVjZWl2ZWQpCisKKyAgICAgICAgaWYgbGVuKHJlY2VpdmVkKSAhPSBsZW4ocGF5bG9hZCk6Cisg
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQg
cGF5bG9hZCBsZW5ndGg6ICVkIChleHBlY3RlZCkgdnMgJWQgKGFjdHVhbCknICUKKyAgICAgICAg
ICAgICAgICAobGVuKHBheWxvYWQpLCBsZW4ocmVjZWl2ZWQpKSkKKworICAgICAgICBpZiBwYXls
b2FkICE9IHJlY2VpdmVkOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAg
ICAgICAgICdVbmV4cGVjdGVkIHBheWxvYWQ6ICVyIChleHBlY3RlZCkgdnMgJXIgKGFjdHVhbCkn
ICUKKyAgICAgICAgICAgICAgICAocGF5bG9hZCwgcmVjZWl2ZWQpKQorCisgICAgZGVmIGFzc2Vy
dF9yZWNlaXZlX2JpbmFyeShzZWxmLCBwYXlsb2FkLCBvcGNvZGU9T1BDT0RFX0JJTkFSWSwgZmlu
PTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3YxPU5vbmUsIHJzdjI9Tm9uZSwg
cnN2Mz1Ob25lKToKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3JlY2VpdmVfZGF0YShwYXlsb2FkLCBv
cGNvZGUsIGZpbiwgcnN2MSwgcnN2MiwgcnN2MykKKworICAgIGRlZiBhc3NlcnRfcmVjZWl2ZV90
ZXh0KHNlbGYsIHBheWxvYWQsIG9wY29kZT1PUENPREVfVEVYVCwgZmluPTEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcnN2MT1Ob25lLCByc3YyPU5vbmUsIHJzdjM9Tm9uZSk6CisgICAg
ICAgIHNlbGYuX2Fzc2VydF9yZWNlaXZlX2RhdGEocGF5bG9hZC5lbmNvZGUoJ3V0Zi04JyksIG9w
Y29kZSwgZmluLCByc3YxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdjIs
IHJzdjMpCisKKyAgICBkZWYgX2J1aWxkX2Nsb3NlX2ZyYW1lKHNlbGYsIGNvZGUsIHJlYXNvbiwg
bWFzayk6CisgICAgICAgIGZyYW1lID0gY2hyKDEgPDwgNyB8IE9QQ09ERV9DTE9TRSkKKworICAg
ICAgICBpZiBjb2RlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYm9keSA9IHN0cnVjdC5wYWNr
KCchSCcsIGNvZGUpICsgcmVhc29uLmVuY29kZSgndXRmLTgnKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgYm9keSA9ICcnCisgICAgICAgIGlmIG1hc2s6CisgICAgICAgICAgICBmcmFtZSAr
PSBjaHIoMSA8PCA3IHwgbGVuKGJvZHkpKSArIHNlbGYuX21hc2tfaHliaShib2R5KQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgZnJhbWUgKz0gY2hyKGxlbihib2R5KSkgKyBib2R5CisgICAg
ICAgIHJldHVybiBmcmFtZQorCisgICAgZGVmIHNlbmRfY2xvc2Uoc2VsZiwgY29kZSwgcmVhc29u
KToKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoCisgICAgICAgICAgICBzZWxmLl9idWls
ZF9jbG9zZV9mcmFtZShjb2RlLCByZWFzb24sIFRydWUpKQorCisgICAgZGVmIGFzc2VydF9yZWNl
aXZlX2Nsb3NlKHNlbGYsIGNvZGUsIHJlYXNvbik6CisgICAgICAgIGV4cGVjdGVkX2ZyYW1lID0g
c2VsZi5fYnVpbGRfY2xvc2VfZnJhbWUoY29kZSwgcmVhc29uLCBGYWxzZSkKKyAgICAgICAgYWN0
dWFsX2ZyYW1lID0gcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2NrZXQsIGxlbihleHBlY3RlZF9mcmFt
ZSkpCisgICAgICAgIGlmIGFjdHVhbF9mcmFtZSAhPSBleHBlY3RlZF9mcmFtZToKKyAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBjbG9zZSBm
cmFtZTogJXIgKGV4cGVjdGVkKSB2cyAlciAoYWN0dWFsKScgJQorICAgICAgICAgICAgICAgIChl
eHBlY3RlZF9mcmFtZSwgYWN0dWFsX2ZyYW1lKSkKKworCitjbGFzcyBXZWJTb2NrZXRTdHJlYW1I
aXhpZTc1KG9iamVjdCk6CisgICAgIiIiRnJhbWUgcHJvY2Vzc29yIGZvciB0aGUgV2ViU29ja2V0
IHByb3RvY29sIHZlcnNpb24gSGl4aWUgNzUgYW5kIEh5QmkgMDAuCisgICAgIiIiCisKKyAgICBf
Q0xPU0VfRlJBTUUgPSAnXHhmZlx4MDAnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc29ja2V0
LCB1bnVzZWRfaGFuZHNoYWtlKToKKyAgICAgICAgc2VsZi5fc29ja2V0ID0gc29ja2V0CisKKyAg
ICBkZWYgc2VuZF9mcmFtZV9vZl9hcmJpdHJhcnlfYnl0ZXMoc2VsZiwgaGVhZGVyLCBib2R5KToK
KyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoaGVhZGVyICsgYm9keSkKKworICAgIGRlZiBz
ZW5kX2RhdGEoc2VsZiwgcGF5bG9hZCwgdW51c2VkX2ZyYW1lX3R5cGVtLCB1bnVzZWRfZW5kLCB1
bnVzZWRfbWFzayk6CisgICAgICAgIGZyYW1lID0gJycuam9pbihbJ1x4MDAnLCBwYXlsb2FkLCAn
XHhmZiddKQorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbChmcmFtZSkKKworICAgIGRlZiBz
ZW5kX2JpbmFyeShzZWxmLCB1bnVzZWRfcGF5bG9hZCwgdW51c2VkX2VuZCwgdW51c2VkX21hc2sp
OgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2VuZF90ZXh0KHNlbGYsIHBheWxvYWQsIHVudXNl
ZF9lbmQsIHVudXNlZF9tYXNrKToKKyAgICAgICAgZW5jb2RlZF9wYXlsb2FkID0gcGF5bG9hZC5l
bmNvZGUoJ3V0Zi04JykKKyAgICAgICAgZnJhbWUgPSAnJy5qb2luKFsnXHgwMCcsIGVuY29kZWRf
cGF5bG9hZCwgJ1x4ZmYnXSkKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoZnJhbWUpCisK
KyAgICBkZWYgYXNzZXJ0X3JlY2VpdmVfYmluYXJ5KHNlbGYsIHBheWxvYWQsIG9wY29kZT1PUENP
REVfQklOQVJZLCBmaW49MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdjE9MCwg
cnN2Mj0wLCByc3YzPTApOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0JpbmFyeSBmcmFtZSBp
cyBub3Qgc3VwcG9ydGVkIGluIGhpeGllNzUnKQorCisgICAgZGVmIGFzc2VydF9yZWNlaXZlX3Rl
eHQoc2VsZiwgcGF5bG9hZCk6CisgICAgICAgIHJlY2VpdmVkID0gcmVjZWl2ZV9ieXRlcyhzZWxm
Ll9zb2NrZXQsIDEpCisKKyAgICAgICAgaWYgcmVjZWl2ZWQgIT0gJ1x4MDAnOgorICAgICAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIGZyYW1lIHR5
cGU6ICVkIChleHBlY3RlZCkgdnMgJWQgKGFjdHVhbCknICUKKyAgICAgICAgICAgICAgICAoMCwg
b3JkKHJlY2VpdmVkKSkpCisKKyAgICAgICAgcmVjZWl2ZWQgPSByZWNlaXZlX2J5dGVzKHNlbGYu
X3NvY2tldCwgbGVuKHBheWxvYWQpICsgMSkKKyAgICAgICAgaWYgcmVjZWl2ZWRbLTFdICE9ICdc
eGZmJzoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnVGVy
bWluYXRpb24gZXhwZWN0ZWQ6IDB4ZmYgKGV4cGVjdGVkKSB2cyAlciAoYWN0dWFsKScgJQorICAg
ICAgICAgICAgICAgIHJlY2VpdmVkKQorCisgICAgICAgIGlmIHJlY2VpdmVkWzA6LTFdICE9IHBh
eWxvYWQ6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ1Vu
ZXhwZWN0ZWQgcGF5bG9hZDogJXIgKGV4cGVjdGVkKSB2cyAlciAoYWN0dWFsKScgJQorICAgICAg
ICAgICAgICAgIChwYXlsb2FkLCByZWNlaXZlZFswOi0xXSkpCisKKyAgICBkZWYgc2VuZF9jbG9z
ZShzZWxmLCBjb2RlLCByZWFzb24pOgorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbChzZWxm
Ll9DTE9TRV9GUkFNRSkKKworICAgIGRlZiBhc3NlcnRfcmVjZWl2ZV9jbG9zZShzZWxmLCB1bnVz
ZWRfY29kZSwgdW51c2VkX3JlYXNvbik6CisgICAgICAgIGNsb3NpbmcgPSByZWNlaXZlX2J5dGVz
KHNlbGYuX3NvY2tldCwgbGVuKHNlbGYuX0NMT1NFX0ZSQU1FKSkKKyAgICAgICAgaWYgY2xvc2lu
ZyAhPSBzZWxmLl9DTE9TRV9GUkFNRToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRGlk
blwndCByZWNlaXZlIGNsb3NpbmcgaGFuZHNoYWtlJykKKworCitjbGFzcyBDbGllbnRPcHRpb25z
KG9iamVjdCk6CisgICAgIiIiSG9sZHMgb3B0aW9uIHZhbHVlcyB0byBjb25maWd1cmUgdGhlIENs
aWVudCBvYmplY3QuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYu
dmVyc2lvbiA9IDEzCisgICAgICAgIHNlbGYuc2VydmVyX2hvc3QgPSAnJworICAgICAgICBzZWxm
Lm9yaWdpbiA9ICcnCisgICAgICAgIHNlbGYucmVzb3VyY2UgPSAnJworICAgICAgICBzZWxmLnNl
cnZlcl9wb3J0ID0gLTEKKyAgICAgICAgc2VsZi5zb2NrZXRfdGltZW91dCA9IDEwMDAKKyAgICAg
ICAgc2VsZi51c2VfdGxzID0gRmFsc2UKKyAgICAgICAgc2VsZi5leHRlbnNpb25zID0gW10KKyAg
ICAgICAgIyBFbmFibGUgZGVmbGF0ZS1hcHBsaWNhdGlvbi1kYXRhLgorICAgICAgICBzZWxmLnVz
ZV9kZWZsYXRlX2ZyYW1lID0gRmFsc2UKKyAgICAgICAgIyBFbmFibGUgbXV4CisgICAgICAgIHNl
bGYudXNlX211eCA9IEZhbHNlCisKKyAgICBkZWYgZW5hYmxlX2RlZmxhdGVfZnJhbWUoc2VsZik6
CisgICAgICAgIHNlbGYudXNlX2RlZmxhdGVfZnJhbWUgPSBUcnVlCisgICAgICAgIHNlbGYuZXh0
ZW5zaW9ucy5hcHBlbmQoX0RFRkxBVEVfRlJBTUVfRVhURU5TSU9OKQorCisgICAgZGVmIGVuYWJs
ZV9tdXgoc2VsZik6CisgICAgICAgIHNlbGYudXNlX211eCA9IFRydWUKKyAgICAgICAgc2VsZi5l
eHRlbnNpb25zLmFwcGVuZChfTVVYX0VYVEVOU0lPTikKKworCitkZWYgY29ubmVjdF9zb2NrZXRf
d2l0aF9yZXRyeShob3N0LCBwb3J0LCB0aW1lb3V0LCB1c2VfdGxzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0cnk9MTAsIHNsZWVwX3NlYz0wLjEpOgorICAgIHJldHJ5X2NvdW50
ID0gMAorICAgIHdoaWxlIHJldHJ5X2NvdW50IDwgcmV0cnk6CisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHMuc2V0dGltZW91dCh0aW1l
b3V0KQorICAgICAgICAgICAgcy5jb25uZWN0KChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgIGlm
IHVzZV90bHM6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9UTFNTb2NrZXQocykKKyAgICAgICAg
ICAgIHJldHVybiBzCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6CisgICAgICAgICAg
ICBpZiBlLmVycm5vICE9IGVycm5vLkVDT05OUkVGVVNFRDoKKyAgICAgICAgICAgICAgICByYWlz
ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXRyeV9jb3VudCA9IHJldHJ5
X2NvdW50ICsgMQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoc2xlZXBfc2VjKQorCisgICAg
cmV0dXJuIE5vbmUKKworCitjbGFzcyBDbGllbnQob2JqZWN0KToKKyAgICAiIiJXZWJTb2NrZXQg
Y2xpZW50LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIGhhbmRzaGFrZSwg
c3RyZWFtX2NsYXNzKToKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9n
Z2VyKHNlbGYpCisKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2Vs
Zi5fc29ja2V0ID0gTm9uZQorCisgICAgICAgIHNlbGYuX2hhbmRzaGFrZSA9IGhhbmRzaGFrZQor
ICAgICAgICBzZWxmLl9zdHJlYW1fY2xhc3MgPSBzdHJlYW1fY2xhc3MKKworICAgIGRlZiBjb25u
ZWN0KHNlbGYpOgorICAgICAgICBzZWxmLl9zb2NrZXQgPSBjb25uZWN0X3NvY2tldF93aXRoX3Jl
dHJ5KAorICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VydmVyX2hvc3QsCisgICAgICAg
ICAgICAgICAgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9ydCwKKyAgICAgICAgICAgICAgICBzZWxm
Ll9vcHRpb25zLnNvY2tldF90aW1lb3V0LAorICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
dXNlX3RscykKKworICAgICAgICBzZWxmLl9oYW5kc2hha2UuaGFuZHNoYWtlKHNlbGYuX3NvY2tl
dCkKKworICAgICAgICBzZWxmLl9zdHJlYW0gPSBzZWxmLl9zdHJlYW1fY2xhc3Moc2VsZi5fc29j
a2V0LCBzZWxmLl9oYW5kc2hha2UpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0Nvbm5l
Y3Rpb24gZXN0YWJsaXNoZWQnKQorCisgICAgZGVmIHNlbmRfZnJhbWVfb2ZfYXJiaXRyYXJ5X2J5
dGVzKHNlbGYsIGhlYWRlciwgYm9keSk6CisgICAgICAgIHNlbGYuX3N0cmVhbS5zZW5kX2ZyYW1l
X29mX2FyYml0cmFyeV9ieXRlcyhoZWFkZXIsIGJvZHkpCisKKyAgICBkZWYgc2VuZF9tZXNzYWdl
KHNlbGYsIG1lc3NhZ2UsIGVuZD1UcnVlLCBiaW5hcnk9RmFsc2UsIHJhdz1GYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgIG1hc2s9VHJ1ZSk6CisgICAgICAgIGlmIGJpbmFyeToKKyAgICAgICAg
ICAgIHNlbGYuX3N0cmVhbS5zZW5kX2JpbmFyeShtZXNzYWdlLCBlbmQsIG1hc2spCisgICAgICAg
IGVsaWYgcmF3OgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtLnNlbmRfZGF0YShtZXNzYWdlLCBP
UENPREVfVEVYVCwgZW5kLCBtYXNrKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5f
c3RyZWFtLnNlbmRfdGV4dChtZXNzYWdlLCBlbmQsIG1hc2spCisKKyAgICBkZWYgYXNzZXJ0X3Jl
Y2VpdmUoc2VsZiwgcGF5bG9hZCwgYmluYXJ5PUZhbHNlKToKKyAgICAgICAgaWYgYmluYXJ5Ogor
ICAgICAgICAgICAgc2VsZi5fc3RyZWFtLmFzc2VydF9yZWNlaXZlX2JpbmFyeShwYXlsb2FkKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtLmFzc2VydF9yZWNlaXZlX3Rl
eHQocGF5bG9hZCkKKworICAgIGRlZiBzZW5kX2Nsb3NlKHNlbGYsIGNvZGU9U1RBVFVTX05PUk1B
TF9DTE9TVVJFLCByZWFzb249JycpOgorICAgICAgICBzZWxmLl9zdHJlYW0uc2VuZF9jbG9zZShj
b2RlLCByZWFzb24pCisKKyAgICBkZWYgYXNzZXJ0X3JlY2VpdmVfY2xvc2Uoc2VsZiwgY29kZT1T
VEFUVVNfTk9STUFMX0NMT1NVUkUsIHJlYXNvbj0nJyk6CisgICAgICAgIHNlbGYuX3N0cmVhbS5h
c3NlcnRfcmVjZWl2ZV9jbG9zZShjb2RlLCByZWFzb24pCisKKyAgICBkZWYgY2xvc2Vfc29ja2V0
KHNlbGYpOgorICAgICAgICBzZWxmLl9zb2NrZXQuY2xvc2UoKQorCisgICAgZGVmIGFzc2VydF9j
b25uZWN0aW9uX2Nsb3NlZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVhZF9k
YXRhID0gcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2NrZXQsIDEpCisgICAgICAgIGV4Y2VwdCBFeGNl
cHRpb24sIGU6CisgICAgICAgICAgICBpZiBzdHIoZSkuZmluZCgKKyAgICAgICAgICAgICAgICAn
Q29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIHJlY2VpdmluZyByZXF1ZXN0ZWQgbGVuZ3RoICcpID09
IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgZXJyb3JfbnVtYmVyLCBtZXNzYWdlID0gZQorICAgICAgICAgICAgICAgIGZvciBlcnJv
cl9uYW1lIGluIFsnRUNPTk5SRVNFVCcsICdXU0FFQ09OTlJFU0VUJ106CisgICAgICAgICAgICAg
ICAgICAgIGlmIChlcnJvcl9uYW1lIGluIGRpcihlcnJubykgYW5kCisgICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvcl9udW1iZXIgPT0gZ2V0YXR0cihlcnJubywgZXJyb3JfbmFtZSkpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAg
ICAgICAgICAgcmFpc2UgZQorICAgICAgICAgICAgcmFpc2UgZQorCisgICAgICAgIHJhaXNlIEV4
Y2VwdGlvbignQ29ubmVjdGlvbiBpcyBub3QgY2xvc2VkIChSZWFkOiAlciknICUgcmVhZF9kYXRh
KQorCisKK2RlZiBjcmVhdGVfY2xpZW50KG9wdGlvbnMpOgorICAgIHJldHVybiBDbGllbnQoCisg
ICAgICAgIG9wdGlvbnMsIFdlYlNvY2tldEhhbmRzaGFrZShvcHRpb25zKSwgV2ViU29ja2V0U3Ry
ZWFtKQorCisKK2RlZiBjcmVhdGVfY2xpZW50X2h5YmkwMChvcHRpb25zKToKKyAgICByZXR1cm4g
Q2xpZW50KAorICAgICAgICBvcHRpb25zLAorICAgICAgICBXZWJTb2NrZXRIeWJpMDBIYW5kc2hh
a2Uob3B0aW9ucywgJzAnKSwKKyAgICAgICAgV2ViU29ja2V0U3RyZWFtSGl4aWU3NSkKKworCitk
ZWYgY3JlYXRlX2NsaWVudF9oaXhpZTc1KG9wdGlvbnMpOgorICAgIHJldHVybiBDbGllbnQoCisg
ICAgICAgIG9wdGlvbnMsIFdlYlNvY2tldEhpeGllNzVIYW5kc2hha2Uob3B0aW9ucyksIFdlYlNv
Y2tldFN0cmVhbUhpeGllNzUpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2Nr
ZXQvc3JjL3Rlc3QvZW5kdG9lbmRfd2l0aF9leHRlcm5hbF9zZXJ2ZXIucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rl
c3QvZW5kdG9lbmRfd2l0aF9leHRlcm5hbF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDdmODZmZGI0
MTYzZDRlNzM4OTUyYjNjY2I3N2YxOTIxNmJjNTkxNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9z
cmMvdGVzdC9lbmR0b2VuZF93aXRoX2V4dGVybmFsX3NlcnZlci5weQpAQCAtMCwwICsxLDY3IEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMu
CisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3Qg
Zm9yIGVuZC10by1lbmQgd2l0aCBleHRlcm5hbCBzZXJ2ZXIuCisKK1RoaXMgdGVzdCBpcyBub3Qg
cnVuIGJ5IHJ1bl9hbGwucHkgYmVjYXVzZSBpdCByZXF1aXJlcyBzb21lIHByZXBhcmF0aW9ucy4K
K0lmIHlvdSB3b3VsZCBsaWtlIHRvIHJ1biB0aGlzIHRlc3QgY29ycmVjdGx5LCBsYXVuY2ggQXBh
Y2hlIHdpdGggbW9kX3B5dGhvbgorYW5kIG1vZF9weXdlYnNvY2tldCBtYW51YWxseS4gSW4gYWRk
aXRpb24sIHlvdSBzaG91bGQgcGFzcyBhbGxvd19kcmFmdDc1IG9wdGlvbgorYW5kIGV4YW1wbGUg
cGF0aCBhcyBoYW5kbGVyX3NjYW4gb3B0aW9uIGFuZCBBcGFjaGUncyBEb2N1bWVudFJvb3QuCisi
IiIKKworCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXN0LnRlc3RfZW5k
dG9lbmQKK2ltcG9ydCB1bml0dGVzdAorCisKK19ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVCA9IDgw
CisKKworY2xhc3MgRW5kVG9FbmRUZXN0V2l0aEV4dGVybmFsU2VydmVyKHRlc3QudGVzdF9lbmR0
b2VuZC5FbmRUb0VuZFRlc3QpOgorICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQorICAgIHBhcnNlci5hZGRf
b3B0aW9uKCctcCcsICctLXBvcnQnLCBkZXN0PSdwb3J0JywgdHlwZT0naW50JywKKyAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PV9ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVCwKKyAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSdleHRlcm5hbCB0ZXN0IHNlcnZlciBwb3J0LicpCisgICAgKG9w
dGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgdGVzdC50ZXN0X2VuZHRv
ZW5kLl91c2VfZXh0ZXJuYWxfc2VydmVyID0gVHJ1ZQorICAgIHRlc3QudGVzdF9lbmR0b2VuZC5f
ZXh0ZXJuYWxfc2VydmVyX3BvcnQgPSBvcHRpb25zLnBvcnQKKworICAgIHVuaXR0ZXN0Lm1haW4o
YXJndj1bc3lzLmFyZ3ZbMF1dKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29j
a2V0L3NyYy90ZXN0L21vY2sucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
d3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvbW9jay5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
YmZmY2FjNDhkYzQzYTUyYjljY2YxYmNkMDEyOTc1NDI0MDQ4ZDY3Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vi
c29ja2V0L3NyYy90ZXN0L21vY2sucHkKQEAgLTAsMCArMSwyMjEgQEAKKyMgQ29weXJpZ2h0IDIw
MTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisKKyIiIk1vY2tzIGZvciB0ZXN0aW5nLgorIiIiCisKKworaW1wb3J0IFF1ZXVlCitpbXBv
cnQgdGhyZWFkaW5nCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zyb20g
bW9kX3B5d2Vic29ja2V0LnN0cmVhbSBpbXBvcnQgU3RyZWFtSGl4aWU3NQorCisKK2NsYXNzIF9N
b2NrQ29ubkJhc2Uob2JqZWN0KToKKyAgICAiIiJCYXNlIGNsYXNzIG9mIG1vY2tzIGZvciBtb2Rf
cHl0aG9uLmFwYWNoZS5tcF9jb25uLgorCisgICAgVGhpcyBlbmFibGVzIHRlc3RzIHRvIGNoZWNr
IHdoYXQgaXMgd3JpdHRlbiB0byBhIChtb2NrKSBtcF9jb25uLgorICAgICIiIgorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl93cml0ZV9kYXRhID0gW10KKyAgICAgICAg
c2VsZi5yZW1vdGVfYWRkciA9ICdmYWtlX2FkZHJlc3MnCisKKyAgICBkZWYgd3JpdGUoc2VsZiwg
ZGF0YSk6CisgICAgICAgICIiIk92ZXJyaWRlIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4ud3Jp
dGUuIiIiCisKKyAgICAgICAgc2VsZi5fd3JpdGVfZGF0YS5hcHBlbmQoZGF0YSkKKworICAgIGRl
ZiB3cml0dGVuX2RhdGEoc2VsZik6CisgICAgICAgICIiIkdldCBieXRlcyB3cml0dGVuIHRvIHRo
aXMgbW9jay4iIiIKKworICAgICAgICByZXR1cm4gJycuam9pbihzZWxmLl93cml0ZV9kYXRhKQor
CisKK2NsYXNzIE1vY2tDb25uKF9Nb2NrQ29ubkJhc2UpOgorICAgICIiIk1vY2sgZm9yIG1vZF9w
eXRob24uYXBhY2hlLm1wX2Nvbm4uCisKKyAgICBUaGlzIGVuYWJsZXMgdGVzdHMgdG8gc3BlY2lm
eSB3aGF0IHNob3VsZCBiZSByZWFkIGZyb20gYSAobW9jaykgbXBfY29ubiBhcworICAgIHdlbGwg
YXMgdG8gY2hlY2sgd2hhdCBpcyB3cml0dGVuIHRvIGl0LgorICAgICIiIgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHJlYWRfZGF0YSk6CisgICAgICAgICIiIkNvbnN0cnVjdHMgYW4gaW5zdGFu
Y2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlYWRfZGF0YTogYnl0ZXMgdGhhdCBz
aG91bGQgYmUgcmV0dXJuZWQgd2hlbiByZWFkKiBtZXRob2RzIGFyZQorICAgICAgICAgICAgY2Fs
bGVkLgorICAgICAgICAiIiIKKworICAgICAgICBfTW9ja0Nvbm5CYXNlLl9faW5pdF9fKHNlbGYp
CisgICAgICAgIHNlbGYuX3JlYWRfZGF0YSA9IHJlYWRfZGF0YQorICAgICAgICBzZWxmLl9yZWFk
X3BvcyA9IDAKKworICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgIiIiT3ZlcnJpZGUg
bW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi5yZWFkbGluZS4iIiIKKworICAgICAgICBpZiBzZWxm
Ll9yZWFkX3BvcyA+PSBsZW4oc2VsZi5fcmVhZF9kYXRhKToKKyAgICAgICAgICAgIHJldHVybiAn
JworICAgICAgICBlbmRfaW5kZXggPSBzZWxmLl9yZWFkX2RhdGEuZmluZCgnXG4nLCBzZWxmLl9y
ZWFkX3BvcykgKyAxCisgICAgICAgIGlmIG5vdCBlbmRfaW5kZXg6CisgICAgICAgICAgICBlbmRf
aW5kZXggPSBsZW4oc2VsZi5fcmVhZF9kYXRhKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91
cF90byhlbmRfaW5kZXgpCisKKyAgICBkZWYgcmVhZChzZWxmLCBsZW5ndGgpOgorICAgICAgICAi
IiJPdmVycmlkZSBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25uLnJlYWQuIiIiCisKKyAgICAgICAg
aWYgc2VsZi5fcmVhZF9wb3MgPj0gbGVuKHNlbGYuX3JlYWRfZGF0YSk6CisgICAgICAgICAgICBy
ZXR1cm4gJycKKyAgICAgICAgZW5kX2luZGV4ID0gbWluKGxlbihzZWxmLl9yZWFkX2RhdGEpLCBz
ZWxmLl9yZWFkX3BvcyArIGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdXBfdG8o
ZW5kX2luZGV4KQorCisgICAgZGVmIF9yZWFkX3VwX3RvKHNlbGYsIGVuZF9pbmRleCk6CisgICAg
ICAgIGxpbmUgPSBzZWxmLl9yZWFkX2RhdGFbc2VsZi5fcmVhZF9wb3M6ZW5kX2luZGV4XQorICAg
ICAgICBzZWxmLl9yZWFkX3BvcyA9IGVuZF9pbmRleAorICAgICAgICByZXR1cm4gbGluZQorCisK
K2NsYXNzIE1vY2tCbG9ja2luZ0Nvbm4oX01vY2tDb25uQmFzZSk6CisgICAgIiIiQmxvY2tpbmcg
bW9jayBmb3IgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi4KKworICAgIFRoaXMgZW5hYmxlcyB0
ZXN0cyB0byBzcGVjaWZ5IHdoYXQgc2hvdWxkIGJlIHJlYWQgZnJvbSBhIChtb2NrKSBtcF9jb25u
IGFzCisgICAgd2VsbCBhcyB0byBjaGVjayB3aGF0IGlzIHdyaXR0ZW4gdG8gaXQuCisgICAgQ2Fs
bGVycyBvZiByZWFkKiBtZXRob2RzIHdpbGwgYmxvY2sgaWYgdGhlcmUgaXMgbm8gYnl0ZXMgYXZh
aWxhYmxlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBfTW9j
a0Nvbm5CYXNlLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3F1ZXVlID0gUXVldWUuUXVl
dWUoKQorCisgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgorICAgICAgICAiIiJPdmVycmlkZSBtb2Rf
cHl0aG9uLmFwYWNoZS5tcF9jb25uLnJlYWRsaW5lLiIiIgorICAgICAgICBsaW5lID0gJycKKyAg
ICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGMgPSBzZWxmLl9xdWV1ZS5nZXQoKQorICAg
ICAgICAgICAgbGluZSArPSBjCisgICAgICAgICAgICBpZiBjID09ICdcbic6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGxpbmUKKworICAgIGRlZiByZWFkKHNlbGYsIGxlbmd0aCk6CisgICAgICAg
ICIiIk92ZXJyaWRlIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4ucmVhZC4iIiIKKworICAgICAg
ICBkYXRhID0gJycKKyAgICAgICAgZm9yIHVudXNlZCBpbiByYW5nZShsZW5ndGgpOgorICAgICAg
ICAgICAgZGF0YSArPSBzZWxmLl9xdWV1ZS5nZXQoKQorICAgICAgICByZXR1cm4gZGF0YQorCisg
ICAgZGVmIHB1dF9ieXRlcyhzZWxmLCBieXRlcyk6CisgICAgICAgICIiIlB1dCBieXRlcyB0byBi
ZSByZWFkIGZyb20gdGhpcyBtb2NrLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBieXRl
czogYnl0ZXMgdG8gYmUgcmVhZC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZm9yIGJ5dGUgaW4g
Ynl0ZXM6CisgICAgICAgICAgICBzZWxmLl9xdWV1ZS5wdXQoYnl0ZSkKKworCitjbGFzcyBNb2Nr
VGFibGUoZGljdCk6CisgICAgIiIiTW9jayB0YWJsZS4KKworICAgIFRoaXMgbWltaWNzIG1vZF9w
eXRob24gbXBfdGFibGUuIE5vdGUgdGhhdCBvbmx5IHRoZSBtZXRob2RzIHVzZWQgYnkKKyAgICB0
ZXN0cyBhcmUgb3ZlcnJpZGRlbi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBj
b3B5X2Zyb209e30pOgorICAgICAgICBpZiBpc2luc3RhbmNlKGNvcHlfZnJvbSwgZGljdCk6Cisg
ICAgICAgICAgICBjb3B5X2Zyb20gPSBjb3B5X2Zyb20uaXRlbXMoKQorICAgICAgICBmb3Iga2V5
LCB2YWx1ZSBpbiBjb3B5X2Zyb206CisgICAgICAgICAgICBzZWxmLl9fc2V0aXRlbV9fKGtleSwg
dmFsdWUpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJu
IHN1cGVyKE1vY2tUYWJsZSwgc2VsZikuX19nZXRpdGVtX18oa2V5Lmxvd2VyKCkpCisKKyAgICBk
ZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIHN1cGVyKE1vY2tUYWJs
ZSwgc2VsZikuX19zZXRpdGVtX18oa2V5Lmxvd2VyKCksIHZhbHVlKQorCisgICAgZGVmIGdldChz
ZWxmLCBrZXksIGRlZl92YWx1ZT1Ob25lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKE1vY2tUYWJs
ZSwgc2VsZikuZ2V0KGtleS5sb3dlcigpLCBkZWZfdmFsdWUpCisKKworY2xhc3MgTW9ja1JlcXVl
c3Qob2JqZWN0KToKKyAgICAiIiJNb2NrIHJlcXVlc3QuCisKKyAgICBUaGlzIG1pbWljcyBtb2Rf
cHl0aG9uIHJlcXVlc3QuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJpPU5v
bmUsIGhlYWRlcnNfaW49e30sIGNvbm5lY3Rpb249Tm9uZSwgbWV0aG9kPSdHRVQnLAorICAgICAg
ICAgICAgICAgICBwcm90b2NvbD0nSFRUUC8xLjEnLCBpc19odHRwcz1GYWxzZSk6CisgICAgICAg
ICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmd1bWVudHM6CisgICAgICAg
ICAgICB1cmk6IFVSSSBvZiB0aGUgcmVxdWVzdC4KKyAgICAgICAgICAgIGhlYWRlcnNfaW46IFJl
cXVlc3QgaGVhZGVycy4KKyAgICAgICAgICAgIGNvbm5lY3Rpb246IENvbm5lY3Rpb24gdXNlZCBm
b3IgdGhlIHJlcXVlc3QuCisgICAgICAgICAgICBtZXRob2Q6IHJlcXVlc3QgbWV0aG9kLgorICAg
ICAgICAgICAgaXNfaHR0cHM6IFdoZXRoZXIgdGhpcyByZXF1ZXN0IGlzIG92ZXIgU1NMLgorCisg
ICAgICAgIFNlZSB0aGUgZG9jdW1lbnQgb2YgbW9kX3B5dGhvbiBSZXF1ZXN0IGZvciBkZXRhaWxz
LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi51cmkgPSB1cmkKKyAgICAgICAgc2VsZi51bnBh
cnNlZF91cmkgPSB1cmkKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gY29ubmVjdGlvbgorICAg
ICAgICBzZWxmLm1ldGhvZCA9IG1ldGhvZAorICAgICAgICBzZWxmLnByb3RvY29sID0gcHJvdG9j
b2wKKyAgICAgICAgc2VsZi5oZWFkZXJzX2luID0gTW9ja1RhYmxlKGhlYWRlcnNfaW4pCisgICAg
ICAgICMgc2VsZi5pc19odHRwc18gbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIHRlc3RzLiAg
VG8gYXZvaWQgbmFtZQorICAgICAgICAjIGNvbmZsaWN0IHdpdGggc2VsZi5pc19odHRwcygpLCBp
dCBpcyBuYW1lZCBhcyBzdWNoLgorICAgICAgICBzZWxmLmlzX2h0dHBzXyA9IGlzX2h0dHBzCisg
ICAgICAgIHNlbGYud3Nfc3RyZWFtID0gU3RyZWFtSGl4aWU3NShzZWxmLCBUcnVlKQorICAgICAg
ICBzZWxmLndzX2Nsb3NlX2NvZGUgPSBOb25lCisgICAgICAgIHNlbGYud3NfY2xvc2VfcmVhc29u
ID0gTm9uZQorICAgICAgICBzZWxmLndzX3ZlcnNpb24gPSBjb21tb24uVkVSU0lPTl9IWUJJMDAK
KyAgICAgICAgc2VsZi53c19kZWZsYXRlID0gRmFsc2UKKworICAgIGRlZiBpc19odHRwcyhzZWxm
KToKKyAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIgdGhpcyByZXF1ZXN0IGlzIG92ZXIgU1NMLiIi
IgorICAgICAgICByZXR1cm4gc2VsZi5pc19odHRwc18KKworCitjbGFzcyBNb2NrRGlzcGF0Y2hl
cihvYmplY3QpOgorICAgICIiIk1vY2sgZm9yIGRpc3BhdGNoLkRpc3BhdGNoZXIuIiIiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZG9fZXh0cmFfaGFuZHNoYWtlX2Nh
bGxlZCA9IEZhbHNlCisKKyAgICBkZWYgZG9fZXh0cmFfaGFuZHNoYWtlKHNlbGYsIGNvbm5fY29u
dGV4dCk6CisgICAgICAgIHNlbGYuZG9fZXh0cmFfaGFuZHNoYWtlX2NhbGxlZCA9IFRydWUKKwor
ICAgIGRlZiB0cmFuc2Zlcl9kYXRhKHNlbGYsIGNvbm5fY29udGV4dCk6CisgICAgICAgIHBhc3MK
KworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9tdXhfY2xp
ZW50X2Zvcl90ZXN0aW5nLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L211eF9jbGllbnRfZm9yX3Rlc3Rpbmcu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGQ1NDM1YThjYzBlMjc1NWM1ODNjMzZkMGNlYWYzZjNmZjYwMjFiMAot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRz
ZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC9tdXhfY2xpZW50X2Zvcl90ZXN0aW5nLnB5
CkBAIC0wLDAgKzEsNjkwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0
IDIwMTIsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisKKyIiIldlYlNvY2tldCBjbGllbnQgdXRpbGl0eSBmb3IgdGVzdGluZyBtdXggZXh0
ZW5zaW9uLgorCitUaGlzIGNvZGUgc2hvdWxkIGJlIGluZGVwZW5kZW50IGZyb20gbW9kX3B5d2Vi
c29ja2V0LiBTZWUgdGhlIGNvbW1lbnQgb2YKK2NsaWVudF9mb3JfdGVzdGluZy5weS4KKworTk9U
RTogVGhpcyBjb2RlIGlzIGZhciBmcm9tIHJvYnVzdCBsaWtlIGNsaWVudF9mb3JfdGVzdGluZy5w
eS4KKyIiIgorCisKKworaW1wb3J0IFF1ZXVlCitpbXBvcnQgYmFzZTY0CitpbXBvcnQgY29sbGVj
dGlvbnMKK2ltcG9ydCBlbWFpbAoraW1wb3J0IGVtYWlsLnBhcnNlcgoraW1wb3J0IGxvZ2dpbmcK
K2ltcG9ydCBtYXRoCitpbXBvcnQgb3MKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzb2NrZXQKK2lt
cG9ydCBzdHJ1Y3QKK2ltcG9ydCB0aHJlYWRpbmcKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1w
b3J0IHV0aWwKKworZnJvbSB0ZXN0IGltcG9ydCBjbGllbnRfZm9yX3Rlc3RpbmcKKworCitfQ09O
VFJPTF9DSEFOTkVMX0lEID0gMAorX0RFRkFVTFRfQ0hBTk5FTF9JRCA9IDEKKworX01VWF9PUENP
REVfQUREX0NIQU5ORUxfUkVRVUVTVCA9IDAKK19NVVhfT1BDT0RFX0FERF9DSEFOTkVMX1JFU1BP
TlNFID0gMQorX01VWF9PUENPREVfRkxPV19DT05UUk9MID0gMgorX01VWF9PUENPREVfRFJPUF9D
SEFOTkVMID0gMworX01VWF9PUENPREVfTkVXX0NIQU5ORUxfU0xPVCA9IDQKKworCitjbGFzcyBf
Q29udHJvbEJsb2NrOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcGNvZGUpOgorICAgICAgICBz
ZWxmLm9wY29kZSA9IG9wY29kZQorCisKK2RlZiBfcGFyc2VfaGFuZHNoYWtlX3Jlc3BvbnNlKHJl
c3BvbnNlKToKKyAgICBzdGF0dXNfbGluZSwgaGVhZGVyX2xpbmVzID0gcmVzcG9uc2Uuc3BsaXQo
J1xyXG4nLCAxKQorCisgICAgd29yZHMgPSBzdGF0dXNfbGluZS5zcGxpdCgnICcpCisgICAgaWYg
bGVuKHdvcmRzKSA8IDM6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0JhZCBTdGF0dXMtTGlu
ZSBzeW50YXggJXInICUgc3RhdHVzX2xpbmUpCisgICAgW3ZlcnNpb24sIHJlc3BvbnNlX2NvZGVd
ID0gd29yZHNbOjJdCisgICAgaWYgdmVyc2lvbiAhPSAnSFRUUC8xLjEnOgorICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCdCYWQgcmVzcG9uc2UgdmVyc2lvbiAlcicgJSB2ZXJzaW9uKQorCisgICAg
aWYgcmVzcG9uc2VfY29kZSAhPSAnMTAxJzoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQmFk
IHJlc3BvbnNlIGNvZGUgJXIgJyAlIHJlc3BvbnNlX2NvZGUpCisgICAgaGVhZGVycyA9IGVtYWls
LnBhcnNlci5QYXJzZXIoKS5wYXJzZXN0cihoZWFkZXJfbGluZXMpCisgICAgcmV0dXJuIGhlYWRl
cnMKKworCitkZWYgX3BhcnNlX2NoYW5uZWxfaWQoZGF0YSwgb2Zmc2V0PTApOgorICAgIGxlbmd0
aCA9IGxlbihkYXRhKQorICAgIHJlbWFpbmluZyA9IGxlbmd0aCAtIG9mZnNldAorCisgICAgaWYg
cmVtYWluaW5nIDw9IDA6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignTm8gY2hhbm5lbCBpZCBm
b3VuZCcpCisKKyAgICBjaGFubmVsX2lkID0gb3JkKGRhdGFbb2Zmc2V0XSkKKyAgICBjaGFubmVs
X2lkX2xlbmd0aCA9IDEKKyAgICBpZiBjaGFubmVsX2lkICYgMHhlMCA9PSAweGUwOgorICAgICAg
ICBpZiByZW1haW5pbmcgPCA0OgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdJbnZhbGlk
IGNoYW5uZWwgaWQgZm9ybWF0JykKKyAgICAgICAgY2hhbm5lbF9pZCA9IHN0cnVjdC51bnBhY2so
JyFMJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQ6b2Zm
c2V0KzRdKVswXSAmIDB4MWZmZmZmZmYKKyAgICAgICAgY2hhbm5lbF9pZF9sZW5ndGggPSA0Cisg
ICAgZWxpZiBjaGFubmVsX2lkICYgMHhjMCA9PSAweGMwOgorICAgICAgICBpZiByZW1haW5pbmcg
PCAzOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdJbnZhbGlkIGNoYW5uZWwgaWQgZm9y
bWF0JykKKyAgICAgICAgY2hhbm5lbF9pZCA9ICgoKGNoYW5uZWxfaWQgJiAweDFmKSA8PCAxNikg
KworICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC51bnBhY2soJyFIJywgZGF0YVtvZmZzZXQr
MTpvZmZzZXQrM10pWzBdKQorICAgICAgICBjaGFubmVsX2lkX2xlbmd0aCA9IDMKKyAgICBlbGlm
IGNoYW5uZWxfaWQgJiAweDgwID09IDB4ODA6CisgICAgICAgIGlmIHJlbWFpbmluZyA8IDI6Cisg
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ludmFsaWQgY2hhbm5lbCBpZCBmb3JtYXQnKQor
ICAgICAgICBjaGFubmVsX2lkID0gc3RydWN0LnVucGFjaygnIUgnLCBkYXRhW29mZnNldDpvZmZz
ZXQrMl0pWzBdICYgMHgzZmZmCisgICAgICAgIGNoYW5uZWxfaWRfbGVuZ3RoID0gMgorCisgICAg
cmV0dXJuIGNoYW5uZWxfaWQsIGNoYW5uZWxfaWRfbGVuZ3RoCisKKworZGVmIF9wYXJzZV9udW1i
ZXIoZGF0YSwgb2Zmc2V0PTApOgorICAgIGZpcnN0X2J5dGUgPSBvcmQoZGF0YVtvZmZzZXRdKQor
ICAgIGlmIChmaXJzdF9ieXRlICYgMHg4MCkgIT0gMDoKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCdUaGUgTVNCIG9mIG51bWJlciBmaWVsZCBtdXN0IGJlIHVuc2V0JykKKyAgICBmaXJzdF9ieXRl
ID0gZmlyc3RfYnl0ZSAmIDB4N2YKKyAgICBpZiBmaXJzdF9ieXRlID09IDEyNzoKKyAgICAgICAg
aWYgb2Zmc2V0ICsgOSA+IGxlbihkYXRhKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbign
SW52YWxpZCBudW1iZXInKQorICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnIVEnLCBkYXRh
W29mZnNldCsxOm9mZnNldCs5XSlbMF0sIDkKKyAgICBpZiBmaXJzdF9ieXRlID09IDEyNjoKKyAg
ICAgICAgaWYgb2Zmc2V0ICsgMyA+IGxlbihkYXRhKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbignSW52YWxpZCBudW1iZXInKQorICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnIUgn
LCBkYXRhW29mZnNldCsxOm9mZnNldCszXSlbMF0sIDMKKyAgICByZXR1cm4gZmlyc3RfYnl0ZSwg
MQorCisKK2RlZiBfcGFyc2Vfc2l6ZV9hbmRfY29udGVudHMoZGF0YSwgb2Zmc2V0PTApOgorICAg
IHNpemUsIGFkdmFuY2UgPSBfcGFyc2VfbnVtYmVyKGRhdGEsIG9mZnNldCkKKyAgICBzdGFydF9w
b3NpdGlvbiA9IG9mZnNldCArIGFkdmFuY2UKKyAgICBlbmRfcG9zaXRpb24gPSBzdGFydF9wb3Np
dGlvbiArIHNpemUKKyAgICBpZiBsZW4oZGF0YSkgPCBlbmRfcG9zaXRpb246CisgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbignSW52YWxpZCBzaXplIG9mIGNvbnRyb2wgYmxvY2sgKCVkIDwgJWQpJyAl
ICgKKyAgICAgICAgICAgICAgICBsZW4oZGF0YSksIGVuZF9wb3NpdGlvbikpCisgICAgcmV0dXJu
IGRhdGFbc3RhcnRfcG9zaXRpb246ZW5kX3Bvc2l0aW9uXSwgc2l6ZSArIGFkdmFuY2UKKworCitk
ZWYgX3BhcnNlX2NvbnRyb2xfYmxvY2tzKGRhdGEpOgorICAgIGJsb2NrcyA9IFtdCisgICAgbGVu
Z3RoID0gbGVuKGRhdGEpCisgICAgcG9zID0gMAorCisgICAgd2hpbGUgcG9zIDwgbGVuZ3RoOgor
ICAgICAgICBmaXJzdF9ieXRlID0gb3JkKGRhdGFbcG9zXSkKKyAgICAgICAgcG9zICs9IDEKKyAg
ICAgICAgb3Bjb2RlID0gKGZpcnN0X2J5dGUgPj4gNSkgJiAweDcKKyAgICAgICAgYmxvY2sgPSBf
Q29udHJvbEJsb2NrKG9wY29kZSkKKworICAgICAgICAjIFRPRE8oYmFzaGkpOiBTdXBwb3J0IG1v
cmUgb3Bjb2RlCisgICAgICAgIGlmIG9wY29kZSA9PSBfTVVYX09QQ09ERV9BRERfQ0hBTk5FTF9S
RVNQT05TRToKKyAgICAgICAgICAgIGJsb2NrLmVuY29kZSA9IGZpcnN0X2J5dGUgJiAzCisgICAg
ICAgICAgICBibG9jay5yZWplY3RlZCA9IChmaXJzdF9ieXRlID4+IDQpICYgMQorCisgICAgICAg
ICAgICBjaGFubmVsX2lkLCBhZHZhbmNlID0gX3BhcnNlX2NoYW5uZWxfaWQoZGF0YSwgcG9zKQor
ICAgICAgICAgICAgYmxvY2suY2hhbm5lbF9pZCA9IGNoYW5uZWxfaWQKKyAgICAgICAgICAgIHBv
cyArPSBhZHZhbmNlCisKKyAgICAgICAgICAgIGVuY29kZWRfaGFuZHNoYWtlLCBhZHZhbmNlID0g
X3BhcnNlX3NpemVfYW5kX2NvbnRlbnRzKGRhdGEsIHBvcykKKyAgICAgICAgICAgIGJsb2NrLmVu
Y29kZWRfaGFuZHNoYWtlID0gZW5jb2RlZF9oYW5kc2hha2UKKyAgICAgICAgICAgIHBvcyArPSBh
ZHZhbmNlCisgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2NrKQorICAgICAgICBlbGlmIG9w
Y29kZSA9PSBfTVVYX09QQ09ERV9EUk9QX0NIQU5ORUw6CisgICAgICAgICAgICBibG9jay5tdXhf
ZXJyb3IgPSAoZmlyc3RfYnl0ZSA+PiA0KSAmIDEKKworICAgICAgICAgICAgY2hhbm5lbF9pZCwg
YWR2YW5jZSA9IF9wYXJzZV9jaGFubmVsX2lkKGRhdGEsIHBvcykKKyAgICAgICAgICAgIGJsb2Nr
LmNoYW5uZWxfaWQgPSBjaGFubmVsX2lkCisgICAgICAgICAgICBwb3MgKz0gYWR2YW5jZQorCisg
ICAgICAgICAgICByZWFzb24sIGFkdmFuY2UgPSBfcGFyc2Vfc2l6ZV9hbmRfY29udGVudHMoZGF0
YSwgcG9zKQorICAgICAgICAgICAgaWYgbGVuKHJlYXNvbikgPT0gMDoKKyAgICAgICAgICAgICAg
ICBibG9jay5kcm9wX2NvZGUgPSBOb25lCisgICAgICAgICAgICAgICAgYmxvY2suZHJvcF9tZXNz
YWdlID0gJycKKyAgICAgICAgICAgIGVsaWYgbGVuKHJlYXNvbikgPj0gMjoKKyAgICAgICAgICAg
ICAgICBibG9jay5kcm9wX2NvZGUgPSBzdHJ1Y3QudW5wYWNrKCchSCcsIHJlYXNvbls6Ml0pWzBd
CisgICAgICAgICAgICAgICAgYmxvY2suZHJvcF9tZXNzYWdlID0gcmVhc29uWzI6XQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ludmFsaWQgRHJv
cENoYW5uZWwnKQorICAgICAgICAgICAgcG9zICs9IGFkdmFuY2UKKyAgICAgICAgICAgIGJsb2Nr
cy5hcHBlbmQoYmxvY2spCisgICAgICAgIGVsaWYgb3Bjb2RlID09IF9NVVhfT1BDT0RFX0ZMT1df
Q09OVFJPTDoKKyAgICAgICAgICAgIGNoYW5uZWxfaWQsIGFkdmFuY2UgPSBfcGFyc2VfY2hhbm5l
bF9pZChkYXRhLCBwb3MpCisgICAgICAgICAgICBibG9jay5jaGFubmVsX2lkID0gY2hhbm5lbF9p
ZAorICAgICAgICAgICAgcG9zICs9IGFkdmFuY2UKKyAgICAgICAgICAgIHNlbmRfcXVvdGEsIGFk
dmFuY2UgPSBfcGFyc2VfbnVtYmVyKGRhdGEsIHBvcykKKyAgICAgICAgICAgIGJsb2NrLnNlbmRf
cXVvdGEgPSBzZW5kX3F1b3RhCisgICAgICAgICAgICBwb3MgKz0gYWR2YW5jZQorICAgICAgICAg
ICAgYmxvY2tzLmFwcGVuZChibG9jaykKKyAgICAgICAgZWxpZiBvcGNvZGUgPT0gX01VWF9PUENP
REVfTkVXX0NIQU5ORUxfU0xPVDoKKyAgICAgICAgICAgIGZhbGxiYWNrID0gZmlyc3RfYnl0ZSAm
IDEKKyAgICAgICAgICAgIHNsb3RzLCBhZHZhbmNlID0gX3BhcnNlX251bWJlcihkYXRhLCBwb3Mp
CisgICAgICAgICAgICBwb3MgKz0gYWR2YW5jZQorICAgICAgICAgICAgc2VuZF9xdW90YSwgYWR2
YW5jZSA9IF9wYXJzZV9udW1iZXIoZGF0YSwgcG9zKQorICAgICAgICAgICAgcG9zICs9IGFkdmFu
Y2UKKyAgICAgICAgICAgIGlmIGZhbGxiYWNrID09IDEgYW5kIChzbG90cyAhPSAwIG9yIHNlbmRf
cXVvdGEgIT0gMCk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdzbG90cyBhbmQg
c2VuZF9xdW90YSBtdXN0IGJlIHplcm8gaWYgRiBiaXQgJworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnaXMgc2V0JykKKyAgICAgICAgICAgIGJsb2NrLmZhbGxiYWNrID0gZmFsbGJh
Y2sKKyAgICAgICAgICAgIGJsb2NrLnNsb3RzID0gc2xvdHMKKyAgICAgICAgICAgIGJsb2NrLnNl
bmRfcXVvdGEgPSBzZW5kX3F1b3RhCisgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2NrKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAg
ICAgICdVbnN1cHBvcnRlZCBtdXggb3Bjb2RlICVkIHJlY2VpdmVkJyAlIG9wY29kZSkKKworICAg
IHJldHVybiBibG9ja3MKKworCitkZWYgX2VuY29kZV9jaGFubmVsX2lkKGNoYW5uZWxfaWQpOgor
ICAgIGlmIGNoYW5uZWxfaWQgPCAwOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDaGFubmVs
IGlkICVkIG11c3Qgbm90IGJlIG5lZ2F0aXZlJyAlIGNoYW5uZWxfaWQpCisKKyAgICBpZiBjaGFu
bmVsX2lkIDwgMiAqKiA3OgorICAgICAgICByZXR1cm4gY2hyKGNoYW5uZWxfaWQpCisgICAgaWYg
Y2hhbm5lbF9pZCA8IDIgKiogMTQ6CisgICAgICAgIHJldHVybiBzdHJ1Y3QucGFjaygnIUgnLCAw
eDgwMDAgKyBjaGFubmVsX2lkKQorICAgIGlmIGNoYW5uZWxfaWQgPCAyICoqIDIxOgorICAgICAg
ICBmaXJzdCA9IGNocigweGMwICsgKGNoYW5uZWxfaWQgPj4gMTYpKQorICAgICAgICByZXR1cm4g
Zmlyc3QgKyBzdHJ1Y3QucGFjaygnIUgnLCBjaGFubmVsX2lkICYgMHhmZmZmKQorICAgIGlmIGNo
YW5uZWxfaWQgPCAyICoqIDI5OgorICAgICAgICByZXR1cm4gc3RydWN0LnBhY2soJyFMJywgMHhl
MDAwMDAwMCArIGNoYW5uZWxfaWQpCisKKyAgICByYWlzZSBWYWx1ZUVycm9yKCdDaGFubmVsIGlk
ICVkIGlzIHRvbyBsYXJnZScgJSBjaGFubmVsX2lkKQorCisKK2RlZiBfZW5jb2RlX251bWJlcihu
dW1iZXIpOgorICAgIGlmIG51bWJlciA8PSAxMjU6CisgICAgICAgIHJldHVybiBjaHIobnVtYmVy
KQorICAgIGVsaWYgbnVtYmVyIDwgKDEgPDwgMTYpOgorICAgICAgICByZXR1cm4gY2hyKDB4N2Up
ICsgc3RydWN0LnBhY2soJyFIJywgbnVtYmVyKQorICAgIGVsaWYgbnVtYmVyIDwgKDEgPDwgNjMp
OgorICAgICAgICByZXR1cm4gY2hyKDB4N2YpICsgc3RydWN0LnBhY2soJyFRJywgbnVtYmVyKQor
ICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignSW52YWxpZCBudW1iZXInKQorCisK
K2RlZiBfY3JlYXRlX2FkZF9jaGFubmVsX3JlcXVlc3QoY2hhbm5lbF9pZCwgZW5jb2RlZF9oYW5k
c2hha2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPTApOgorICAg
IGxlbmd0aCA9IGxlbihlbmNvZGVkX2hhbmRzaGFrZSkKKyAgICBoYW5kc2hha2VfbGVuZ3RoID0g
X2VuY29kZV9udW1iZXIobGVuZ3RoKQorCisgICAgZmlyc3RfYnl0ZSA9IChfTVVYX09QQ09ERV9B
RERfQ0hBTk5FTF9SRVFVRVNUIDw8IDUpIHwgZW5jb2RpbmcKKyAgICByZXR1cm4gKGNocihmaXJz
dF9ieXRlKSArIF9lbmNvZGVfY2hhbm5lbF9pZChjaGFubmVsX2lkKSArCisgICAgICAgICAgICBo
YW5kc2hha2VfbGVuZ3RoICsgZW5jb2RlZF9oYW5kc2hha2UpCisKKworZGVmIF9jcmVhdGVfZmxv
d19jb250cm9sKGNoYW5uZWxfaWQsIHJlcGxlbmlzaGVkX3F1b3RhKToKKyAgICBmaXJzdF9ieXRl
ID0gKF9NVVhfT1BDT0RFX0ZMT1dfQ09OVFJPTCA8PCA1KQorICAgIHJldHVybiAoY2hyKGZpcnN0
X2J5dGUpICsgX2VuY29kZV9jaGFubmVsX2lkKGNoYW5uZWxfaWQpICsKKyAgICAgICAgICAgIF9l
bmNvZGVfbnVtYmVyKHJlcGxlbmlzaGVkX3F1b3RhKSkKKworCitjbGFzcyBfTXV4UmVhZGVyVGhy
ZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgICIiIk11eCByZWFkZXIgdGhyZWFkLgorCisgICAg
UmVhZHMgZnJhbWVzIGFuZCBwYXNzZXMgdGhlbSB0byB0aGUgbXV4IGNsaWVudC4gVGhpcyB0aHJl
YWQgYWNjZXNzZXMKKyAgICBwcml2YXRlIGZ1bmN0aW9ucy92YXJpYWJsZXMgb2YgdGhlIG11eCBj
bGllbnQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXV4KToKKyAgICAgICAg
dGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnNldERhZW1vbihU
cnVlKQorICAgICAgICBzZWxmLl9tdXggPSBtdXgKKyAgICAgICAgc2VsZi5fc3RvcF9yZXF1ZXN0
ZWQgPSBGYWxzZQorCisgICAgZGVmIF9yZWNlaXZlX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGZp
cnN0X29wY29kZSA9IE5vbmUKKyAgICAgICAgcGVuZGluZ19wYXlsb2FkID0gW10KKyAgICAgICAg
d2hpbGUgbm90IHNlbGYuX3N0b3BfcmVxdWVzdGVkOgorICAgICAgICAgICAgZmluLCByc3YxLCBy
c3YyLCByc3YzLCBvcGNvZGUsIHBheWxvYWRfbGVuZ3RoID0gKAorICAgICAgICAgICAgICAgIGNs
aWVudF9mb3JfdGVzdGluZy5yZWFkX2ZyYW1lX2hlYWRlcihzZWxmLl9tdXguX3NvY2tldCkpCisK
KyAgICAgICAgICAgIGlmIG5vdCBmaXJzdF9vcGNvZGU6CisgICAgICAgICAgICAgICAgaWYgb3Bj
b2RlID09IGNsaWVudF9mb3JfdGVzdGluZy5PUENPREVfVEVYVDoKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCdSZWNlaXZlZCBhIHRleHQgbWVzc2FnZSBvbiBwaHlzaWNhbCAn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29ubmVjdGlvbicpCisgICAg
ICAgICAgICAgICAgaWYgb3Bjb2RlID09IGNsaWVudF9mb3JfdGVzdGluZy5PUENPREVfQ09OVElO
VUFUSU9OOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1JlY2VpdmVkIGFu
IGludGVybWVkaWF0ZSBmcmFtZSBidXQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2ZyYWdtZW50YXRpb24gd2FzIG5vdCBzdGFydGVkJykKKyAgICAgICAgICAgICAgICBp
ZiAob3Bjb2RlID09IGNsaWVudF9mb3JfdGVzdGluZy5PUENPREVfQklOQVJZIG9yCisgICAgICAg
ICAgICAgICAgICAgIG9wY29kZSA9PSBjbGllbnRfZm9yX3Rlc3RpbmcuT1BDT0RFX1BPTkcgb3IK
KyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID09IGNsaWVudF9mb3JfdGVzdGluZy5PUENPREVf
UE9ORyBvcgorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPT0gY2xpZW50X2Zvcl90ZXN0aW5n
Lk9QQ09ERV9DTE9TRSk6CisgICAgICAgICAgICAgICAgICAgIGZpcnN0X29wY29kZSA9IG9wY29k
ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbignUmVjZWl2ZWQgYW4gdW5kZWZpbmVkIG9wY29kZSBmcmFtZTogJWQnICUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZSkKKworICAgICAgICAgICAgZWxpZiBv
cGNvZGUgIT0gY2xpZW50X2Zvcl90ZXN0aW5nLk9QQ09ERV9DT05USU5VQVRJT046CisgICAgICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdSZWNlaXZlZCBhIG5ldyBvcGNvZGUgYmVmb3JlICcK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlcm1pbmF0aW5nIGZyYWdtZW50YXRp
b24nKQorCisgICAgICAgICAgICBwYXlsb2FkID0gY2xpZW50X2Zvcl90ZXN0aW5nLnJlY2VpdmVf
Ynl0ZXMoCisgICAgICAgICAgICAgICAgc2VsZi5fbXV4Ll9zb2NrZXQsIHBheWxvYWRfbGVuZ3Ro
KQorCisgICAgICAgICAgICBpZiBzZWxmLl9tdXguX2luY29taW5nX2ZyYW1lX2ZpbHRlciBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgICAgICBwYXlsb2FkID0gc2VsZi5fbXV4Ll9pbmNvbWluZ19m
cmFtZV9maWx0ZXIuZmlsdGVyKHBheWxvYWQpCisKKyAgICAgICAgICAgIHBlbmRpbmdfcGF5bG9h
ZC5hcHBlbmQocGF5bG9hZCkKKworICAgICAgICAgICAgaWYgZmluOgorICAgICAgICAgICAgICAg
IGJyZWFrCisKKyAgICAgICAgaWYgc2VsZi5fc3RvcF9yZXF1ZXN0ZWQ6CisgICAgICAgICAgICBy
ZXR1cm4gTm9uZSwgTm9uZQorCisgICAgICAgIG1lc3NhZ2UgPSAnJy5qb2luKHBlbmRpbmdfcGF5
bG9hZCkKKyAgICAgICAgcmV0dXJuIGZpcnN0X29wY29kZSwgbWVzc2FnZQorCisgICAgZGVmIHJl
cXVlc3Rfc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5fc3RvcF9yZXF1ZXN0ZWQgPSBUcnVlCisK
KyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBub3Qg
c2VsZi5fc3RvcF9yZXF1ZXN0ZWQ6CisgICAgICAgICAgICAgICAgIyBvcGNvZGUgaXMgT1BDT0RF
X0JJTkFSWSBvciBjb250cm9sIG9wY29kZXMgd2hlbiBhIG1lc3NhZ2UKKyAgICAgICAgICAgICAg
ICAjIGlzIHN1Y2Nlc2Z1bGx5IHJlY2VpdmVkLgorICAgICAgICAgICAgICAgIG9wY29kZSwgbWVz
c2FnZSA9IHNlbGYuX3JlY2VpdmVfbWVzc2FnZSgpCisgICAgICAgICAgICAgICAgaWYgbm90IG9w
Y29kZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgaWYgb3Bj
b2RlID09IGNsaWVudF9mb3JfdGVzdGluZy5PUENPREVfQklOQVJZOgorICAgICAgICAgICAgICAg
ICAgICBjaGFubmVsX2lkLCBhZHZhbmNlID0gX3BhcnNlX2NoYW5uZWxfaWQobWVzc2FnZSkKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fbXV4Ll9kaXNwYXRjaF9mcmFtZShjaGFubmVsX2lkLCBt
ZXNzYWdlW2FkdmFuY2U6XSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9tdXguX3Byb2Nlc3NfY29udHJvbF9tZXNzYWdlKG9wY29kZSwgbWVzc2FnZSkK
KyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX211eC5fbm90aWZ5X3JlYWRlcl9k
b25lKCkKKworCitjbGFzcyBfSW5uZXJGcmFtZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBmaW4sIHJzdjEsIHJzdjIsIHJzdjMsIG9wY29kZSwgcGF5bG9hZCk6CisgICAgICAgIHNl
bGYuZmluID0gZmluCisgICAgICAgIHNlbGYucnN2MSA9IHJzdjEKKyAgICAgICAgc2VsZi5yc3Yy
ID0gcnN2MgorICAgICAgICBzZWxmLnJzdjMgPSByc3YzCisgICAgICAgIHNlbGYub3Bjb2RlID0g
b3Bjb2RlCisgICAgICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWQKKworCitjbGFzcyBfTG9naWNh
bENoYW5uZWxEYXRhKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBz
ZWxmLnF1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLnNlbmRfcXVvdGEgPSAwCisg
ICAgICAgIHNlbGYucmVjZWl2ZV9xdW90YSA9IDAKKworCitjbGFzcyBNdXhDbGllbnQob2JqZWN0
KToKKyAgICAiIiJXZWJTb2NrZXQgbXV4IGNsaWVudC4KKworICAgIE5vdGUgdGhhdCB0aGlzIGNs
YXNzIGlzIE5PVCB0aHJlYWQtc2FmZS4gRG8gbm90IGFjY2VzcyBhbiBpbnN0YW5jZSBvZiB0aGlz
CisgICAgY2xhc3MgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGF0IGEgc2FtZSB0aW1lLgorICAgICIi
IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl9sb2dn
ZXIgPSB1dGlsLmdldF9jbGFzc19sb2dnZXIoc2VsZikKKworICAgICAgICBzZWxmLl9vcHRpb25z
ID0gb3B0aW9ucworICAgICAgICBzZWxmLl9vcHRpb25zLmVuYWJsZV9tdXgoKQorICAgICAgICBz
ZWxmLl9zdHJlYW0gPSBOb25lCisgICAgICAgIHNlbGYuX3NvY2tldCA9IE5vbmUKKyAgICAgICAg
c2VsZi5faGFuZHNoYWtlID0gY2xpZW50X2Zvcl90ZXN0aW5nLldlYlNvY2tldEhhbmRzaGFrZShz
ZWxmLl9vcHRpb25zKQorICAgICAgICBzZWxmLl9pbmNvbWluZ19mcmFtZV9maWx0ZXIgPSBOb25l
CisgICAgICAgIHNlbGYuX291dGdvaW5nX2ZyYW1lX2ZpbHRlciA9IE5vbmUKKworICAgICAgICBz
ZWxmLl9pc19hY3RpdmUgPSBGYWxzZQorICAgICAgICBzZWxmLl9yZWFkX3RocmVhZCA9IE5vbmUK
KyAgICAgICAgc2VsZi5fY29udHJvbF9ibG9ja3NfY29uZGl0aW9uID0gdGhyZWFkaW5nLkNvbmRp
dGlvbigpCisgICAgICAgIHNlbGYuX2NvbnRyb2xfYmxvY2tzID0gW10KKyAgICAgICAgc2VsZi5f
Y2hhbm5lbF9zbG90cyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5fbG9naWNh
bF9jaGFubmVsc19jb25kaXRpb24gPSB0aHJlYWRpbmcuQ29uZGl0aW9uKCk7CisgICAgICAgIHNl
bGYuX2xvZ2ljYWxfY2hhbm5lbHMgPSB7fQorICAgICAgICBzZWxmLl90aW1lb3V0ID0gMgorICAg
ICAgICBzZWxmLl9waHlzaWNhbF9jb25uZWN0aW9uX2Nsb3NlX2V2ZW50ID0gTm9uZQorICAgICAg
ICBzZWxmLl9waHlzaWNhbF9jb25uZWN0aW9uX2Nsb3NlX21lc3NhZ2UgPSBOb25lCisKKyAgICBk
ZWYgX3BhcnNlX2lubmVyX2ZyYW1lKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBsZW4oZGF0YSkg
PT0gMDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignSW52YWxpZCBlbmNhcHN1bGF0ZWQg
ZnJhbWUgcmVjZWl2ZWQnKQorCisgICAgICAgIGZpcnN0X2J5dGUgPSBvcmQoZGF0YVswXSkKKyAg
ICAgICAgZmluID0gKGZpcnN0X2J5dGUgPDwgNykgJiAxCisgICAgICAgIHJzdjEgPSAoZmlyc3Rf
Ynl0ZSA8PCA2KSAmIDEKKyAgICAgICAgcnN2MiA9IChmaXJzdF9ieXRlIDw8IDUpICYgMQorICAg
ICAgICByc3YzID0gKGZpcnN0X2J5dGUgPDwgNCkgJiAxCisgICAgICAgIG9wY29kZSA9IGZpcnN0
X2J5dGUgJiAweGYKKworICAgICAgICBpZiBzZWxmLl9vdXRnb2luZ19mcmFtZV9maWx0ZXI6Cisg
ICAgICAgICAgICBwYXlsb2FkID0gc2VsZi5fb3V0Z29pbmdfZnJhbWVfZmlsdGVyLmZpbHRlcigK
KyAgICAgICAgICAgICAgICBkYXRhWzE6XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBh
eWxvYWQgPSBkYXRhWzE6XQorCisgICAgICAgIHJldHVybiBfSW5uZXJGcmFtZShmaW4sIHJzdjEs
IHJzdjIsIHJzdjMsIG9wY29kZSwgcGF5bG9hZCkKKworICAgIGRlZiBfcHJvY2Vzc19tdXhfY29u
dHJvbF9ibG9ja3Moc2VsZik6CisgICAgICAgIGZvciBibG9jayBpbiBzZWxmLl9jb250cm9sX2Js
b2NrczoKKyAgICAgICAgICAgIGlmIGJsb2NrLm9wY29kZSA9PSBfTVVYX09QQ09ERV9BRERfQ0hB
Tk5FTF9SRVNQT05TRToKKyAgICAgICAgICAgICAgICAjIEFkZENoYW5uZWxSZXNwb25zZSB3aWxs
IGJlIGhhbmRsZWQgaW4gYWRkX2NoYW5uZWwoKS4KKyAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICAgICAgZWxpZiBibG9jay5vcGNvZGUgPT0gX01VWF9PUENPREVfRkxPV19DT05UUk9M
OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9naWNh
bF9jaGFubmVsc19jb25kaXRpb24uYWNxdWlyZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5v
dCBibG9jay5jaGFubmVsX2lkIGluIHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHM6CisgICAgICAgICAg
ICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ludmFsaWQgZmxvdyBjb250cm9sIHJlY2Vp
dmVkIGZvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NoYW5u
ZWwgaWQgJWQnICUgYmxvY2suY2hhbm5lbF9pZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5f
bG9naWNhbF9jaGFubmVsc1tibG9jay5jaGFubmVsX2lkXS5zZW5kX3F1b3RhICs9ICgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLnNlbmRfcXVvdGEpCisgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNfY29uZGl0aW9uLm5vdGlmeSgpCisgICAgICAgICAgICAg
ICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9naWNhbF9jaGFubmVsc19j
b25kaXRpb24ucmVsZWFzZSgpCisgICAgICAgICAgICBlbGlmIGJsb2NrLm9wY29kZSA9PSBfTVVY
X09QQ09ERV9ORVdfQ0hBTk5FTF9TTE9UOgorICAgICAgICAgICAgICAgIHNlbGYuX2NoYW5uZWxf
c2xvdHMuZXh0ZW5kKFtibG9jay5zZW5kX3F1b3RhXSAqIGJsb2NrLnNsb3RzKQorCisgICAgZGVm
IF9kaXNwYXRjaF9mcmFtZShzZWxmLCBjaGFubmVsX2lkLCBwYXlsb2FkKToKKyAgICAgICAgaWYg
Y2hhbm5lbF9pZCA9PSBfQ09OVFJPTF9DSEFOTkVMX0lEOgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHNlbGYuX2NvbnRyb2xfYmxvY2tzX2NvbmRpdGlvbi5hY3F1aXJlKCkKKyAg
ICAgICAgICAgICAgICBzZWxmLl9jb250cm9sX2Jsb2NrcyArPSBfcGFyc2VfY29udHJvbF9ibG9j
a3MocGF5bG9hZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm9jZXNzX211eF9jb250cm9sX2Js
b2NrcygpCisgICAgICAgICAgICAgICAgc2VsZi5fY29udHJvbF9ibG9ja3NfY29uZGl0aW9uLm5v
dGlmeSgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRy
b2xfYmxvY2tzX2NvbmRpdGlvbi5yZWxlYXNlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dpY2FsX2NoYW5uZWxzX2NvbmRpdGlvbi5h
Y3F1aXJlKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgY2hhbm5lbF9pZCBpbiBzZWxmLl9sb2dp
Y2FsX2NoYW5uZWxzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1JlY2Vp
dmVkIGxvZ2ljYWwgZnJhbWUgb24gY2hhbm5lbCBpZCAnCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnJWQsIHdoaWNoIGlzIG5vdCBlc3RhYmxpc2hlZCcgJQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbF9pZCkKKworICAgICAgICAgICAgICAg
IGlubmVyX2ZyYW1lID0gc2VsZi5fcGFyc2VfaW5uZXJfZnJhbWUocGF5bG9hZCkKKyAgICAgICAg
ICAgICAgICBzZWxmLl9sb2dpY2FsX2NoYW5uZWxzW2NoYW5uZWxfaWRdLnJlY2VpdmVfcXVvdGEg
LT0gKAorICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGlubmVyX2ZyYW1lLnBheWxvYWQpKQor
ICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNbY2hhbm5lbF9pZF0ucmVj
ZWl2ZV9xdW90YSA8IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVGhl
IHNlcnZlciB2aW9sYXRlcyBxdW90YSBvbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnY2hhbm5lbCBpZCAlZCcgJSBjaGFubmVsX2lkKQorICAgICAgICAgICAgZmluYWxs
eToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dpY2FsX2NoYW5uZWxzX2NvbmRpdGlvbi5yZWxl
YXNlKCkKKyAgICAgICAgICAgIHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNbY2hhbm5lbF9pZF0ucXVl
dWUucHV0KGlubmVyX2ZyYW1lKQorCisgICAgZGVmIF9wcm9jZXNzX2NvbnRyb2xfbWVzc2FnZShz
ZWxmLCBvcGNvZGUsIG1lc3NhZ2UpOgorICAgICAgICAjIFBpbmcvUG9uZyBhcmUgbm90IHN1cHBv
cnRlZC4KKyAgICAgICAgaWYgb3Bjb2RlID09IGNsaWVudF9mb3JfdGVzdGluZy5PUENPREVfQ0xP
U0U6CisgICAgICAgICAgICBzZWxmLl9waHlzaWNhbF9jb25uZWN0aW9uX2Nsb3NlX21lc3NhZ2Ug
PSBtZXNzYWdlCisgICAgICAgICAgICBpZiBzZWxmLl9pc19hY3RpdmU6CisgICAgICAgICAgICAg
ICAgc2VsZi5fc3RyZWFtLnNlbmRfY2xvc2UoCisgICAgICAgICAgICAgICAgICAgIGNvZGU9Y2xp
ZW50X2Zvcl90ZXN0aW5nLlNUQVRVU19OT1JNQUxfQ0xPU1VSRSwgcmVhc29uPScnKQorICAgICAg
ICAgICAgICAgIHNlbGYuX3JlYWRfdGhyZWFkLnJlcXVlc3Rfc3RvcCgpCisKKyAgICAgICAgICAg
IGlmIHNlbGYuX3BoeXNpY2FsX2Nvbm5lY3Rpb25fY2xvc2VfZXZlbnQ6CisgICAgICAgICAgICAg
ICAgc2VsZi5fcGh5c2ljYWxfY29ubmVjdGlvbl9jbG9zZV9ldmVudC5zZXQoKQorCisgICAgZGVm
IF9ub3RpZnlfcmVhZGVyX2RvbmUoc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1Zygn
UmVhZCB0aHJlYWQgdGVybWluYXRlZC4nKQorICAgICAgICBzZWxmLmNsb3NlX3NvY2tldCgpCisK
KyAgICBkZWYgX2Fzc2VydF9jaGFubmVsX3Nsb3RfYXZhaWxhYmxlKHNlbGYpOgorICAgICAgICB0
cnk6CisgICAgICAgICAgICBzZWxmLl9jb250cm9sX2Jsb2Nrc19jb25kaXRpb24uYWNxdWlyZSgp
CisgICAgICAgICAgICBpZiBsZW4oc2VsZi5fY2hhbm5lbF9zbG90cykgPT0gMDoKKyAgICAgICAg
ICAgICAgICAjIFdhaXQgb25jZQorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRyb2xfYmxvY2tz
X2NvbmRpdGlvbi53YWl0KHRpbWVvdXQ9c2VsZi5fdGltZW91dCkKKyAgICAgICAgZmluYWxseToK
KyAgICAgICAgICAgIHNlbGYuX2NvbnRyb2xfYmxvY2tzX2NvbmRpdGlvbi5yZWxlYXNlKCkKKwor
ICAgICAgICBpZiBsZW4oc2VsZi5fY2hhbm5lbF9zbG90cykgPT0gMDoKKyAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIHJlY2VpdmUgTmV3Q2hhbm5lbFNsb3QnKQorCisgICAg
ZGVmIF9hc3NlcnRfc2VuZF9xdW90YV9hdmFpbGFibGUoc2VsZiwgY2hhbm5lbF9pZCk6CisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNfY29uZGl0aW9uLmFj
cXVpcmUoKQorICAgICAgICAgICAgaWYgc2VsZi5fbG9naWNhbF9jaGFubmVsc1tjaGFubmVsX2lk
XS5zZW5kX3F1b3RhID09IDA6CisgICAgICAgICAgICAgICAgIyBXYWl0IG9uY2UKKyAgICAgICAg
ICAgICAgICBzZWxmLl9sb2dpY2FsX2NoYW5uZWxzX2NvbmRpdGlvbi53YWl0KHRpbWVvdXQ9c2Vs
Zi5fdGltZW91dCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2ljYWxf
Y2hhbm5lbHNfY29uZGl0aW9uLnJlbGVhc2UoKQorCisgICAgICAgIGlmIHNlbGYuX2xvZ2ljYWxf
Y2hhbm5lbHNbY2hhbm5lbF9pZF0uc2VuZF9xdW90YSA9PSAwOgorICAgICAgICAgICAgcmFpc2Ug
RXhjZXB0aW9uKCdGYWlsZWQgdG8gcmVjZWl2ZSBGbG93Q29udHJvbCBmb3IgY2hhbm5lbCBpZCAl
ZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfaWQpCisKKyAgICBkZWYg
Y29ubmVjdChzZWxmKToKKyAgICAgICAgc2VsZi5fc29ja2V0ID0gY2xpZW50X2Zvcl90ZXN0aW5n
LmNvbm5lY3Rfc29ja2V0X3dpdGhfcmV0cnkoCisgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9u
cy5zZXJ2ZXJfaG9zdCwKKyAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnNlcnZlcl9wb3J0
LAorICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc29ja2V0X3RpbWVvdXQsCisgICAgICAg
ICAgICAgICAgc2VsZi5fb3B0aW9ucy51c2VfdGxzKQorCisgICAgICAgIHNlbGYuX2hhbmRzaGFr
ZS5oYW5kc2hha2Uoc2VsZi5fc29ja2V0KQorICAgICAgICBzZWxmLl9zdHJlYW0gPSBjbGllbnRf
Zm9yX3Rlc3RpbmcuV2ViU29ja2V0U3RyZWFtKAorICAgICAgICAgICAgc2VsZi5fc29ja2V0LCBz
ZWxmLl9oYW5kc2hha2UpCisKKyAgICAgICAgc2VsZi5fbG9naWNhbF9jaGFubmVsc1tfREVGQVVM
VF9DSEFOTkVMX0lEXSA9IF9Mb2dpY2FsQ2hhbm5lbERhdGEoKQorCisgICAgICAgIHNlbGYuX3Jl
YWRfdGhyZWFkID0gX011eFJlYWRlclRocmVhZChzZWxmKQorICAgICAgICBzZWxmLl9yZWFkX3Ro
cmVhZC5zdGFydCgpCisKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2NoYW5uZWxfc2xvdF9hdmFpbGFi
bGUoKQorICAgICAgICBzZWxmLl9hc3NlcnRfc2VuZF9xdW90YV9hdmFpbGFibGUoX0RFRkFVTFRf
Q0hBTk5FTF9JRCkKKworICAgICAgICBzZWxmLl9pc19hY3RpdmUgPSBUcnVlCisgICAgICAgIHNl
bGYuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW9uIGVzdGFibGlzaGVkJykKKworICAgIGRlZiBhZGRf
Y2hhbm5lbChzZWxmLCBjaGFubmVsX2lkLCBvcHRpb25zKToKKyAgICAgICAgaWYgbm90IHNlbGYu
X2lzX2FjdGl2ZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignTXV4IGNsaWVudCBpcyBu
b3QgYWN0aXZlJykKKworICAgICAgICBpZiBjaGFubmVsX2lkIGluIHNlbGYuX2xvZ2ljYWxfY2hh
bm5lbHM6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0NoYW5uZWwgaWQgJWQgYWxyZWFk
eSBleGlzdHMnICUgY2hhbm5lbF9pZCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZW5k
X3F1b3RhID0gc2VsZi5fY2hhbm5lbF9zbG90cy5wb3BsZWZ0KCkKKyAgICAgICAgZXhjZXB0IElu
ZGV4RXJyb3IsIGU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ05vIGNoYW5uZWwgc2xv
dHM6ICVyJyAlIGUpCisKKyAgICAgICAgIyBDcmVhdGUgQWRkQ2hhbm5lbCByZXF1ZXN0CisgICAg
ICAgIHJlcXVlc3RfbGluZSA9ICdHRVQgJXMgSFRUUC8xLjFcclxuJyAlIG9wdGlvbnMucmVzb3Vy
Y2UKKyAgICAgICAgZmllbGRzID0gW10KKyAgICAgICAgaWYgb3B0aW9ucy5zZXJ2ZXJfcG9ydCA9
PSBjbGllbnRfZm9yX3Rlc3RpbmcuREVGQVVMVF9QT1JUOgorICAgICAgICAgICAgZmllbGRzLmFw
cGVuZCgnSG9zdDogJXNcclxuJyAlIG9wdGlvbnMuc2VydmVyX2hvc3QubG93ZXIoKSkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJ0hvc3Q6ICVzOiVkXHJcbicgJSAo
b3B0aW9ucy5zZXJ2ZXJfaG9zdC5sb3dlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNlcnZlcl9wb3J0KSkKKyAgICAgICAgZmllbGRz
LmFwcGVuZCgnT3JpZ2luOiAlc1xyXG4nICUgb3B0aW9ucy5vcmlnaW4ubG93ZXIoKSkKKyAgICAg
ICAgZmllbGRzLmFwcGVuZCgnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nKQorCisgICAgICAgIGlm
IGxlbihvcHRpb25zLmV4dGVuc2lvbnMpID4gMDoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQo
J1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9uczogJXNcclxuJyAlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICcsICcuam9pbihvcHRpb25zLmV4dGVuc2lvbnMpKQorCisgICAgICAgIGhhbmRzaGFr
ZSA9IHJlcXVlc3RfbGluZSArICcnLmpvaW4oZmllbGRzKSArICdcclxuJworICAgICAgICBhZGRf
Y2hhbm5lbF9yZXF1ZXN0ID0gX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1ZXN0KAorICAgICAgICAg
ICAgY2hhbm5lbF9pZCwgaGFuZHNoYWtlKQorICAgICAgICBwYXlsb2FkID0gX2VuY29kZV9jaGFu
bmVsX2lkKF9DT05UUk9MX0NIQU5ORUxfSUQpICsgYWRkX2NoYW5uZWxfcmVxdWVzdAorICAgICAg
ICBzZWxmLl9zdHJlYW0uc2VuZF9iaW5hcnkocGF5bG9hZCkKKworICAgICAgICAjIFdhaXQgQWRk
Q2hhbm5lbFJlc3BvbnNlCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnV2FpdGluZyBBZGRD
aGFubmVsUmVzcG9uc2UgZm9yIHRoZSByZXF1ZXN0Li4uJykKKyAgICAgICAgcmVzcG9uc2UgPSBO
b25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2NvbnRyb2xfYmxvY2tzX2NvbmRp
dGlvbi5hY3F1aXJlKCkKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAg
Zm9yIGJsb2NrIGluIHNlbGYuX2NvbnRyb2xfYmxvY2tzOgorICAgICAgICAgICAgICAgICAgICBp
ZiBibG9jay5vcGNvZGUgIT0gX01VWF9PUENPREVfQUREX0NIQU5ORUxfUkVTUE9OU0U6CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiBibG9j
ay5jaGFubmVsX2lkID09IGNoYW5uZWxfaWQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXNw
b25zZSA9IGJsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb250cm9sX2Jsb2Nr
cy5yZW1vdmUocmVzcG9uc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAg
ICAgICAgICAgIGlmIHJlc3BvbnNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAg
ICAgICAgICAgIHNlbGYuX2NvbnRyb2xfYmxvY2tzX2NvbmRpdGlvbi53YWl0KHNlbGYuX3RpbWVv
dXQpCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2lzX2FjdGl2ZToKKyAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdBZGRDaGFubmVsUmVxdWVzdCB0aW1lZCBvdXQnKQor
ICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fY29udHJvbF9ibG9ja3NfY29uZGl0
aW9uLnJlbGVhc2UoKQorCisgICAgICAgICMgVmFsaWRhdGUgQWRkQ2hhbm5lbFJlc3BvbnNlCisg
ICAgICAgIGlmIHJlc3BvbnNlLnJlamVjdGVkOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCdUaGUgc2VydmVyIHJlamVjdGVkIEFkZENoYW5uZWxSZXF1ZXN0JykKKworICAgICAgICBmaWVs
ZHMgPSBfcGFyc2VfaGFuZHNoYWtlX3Jlc3BvbnNlKHJlc3BvbnNlLmVuY29kZWRfaGFuZHNoYWtl
KQorCisgICAgICAgICMgU2hvdWxkIHdlIHJlamVjdCB3aGVuIFVwZ3JhZGUsIENvbm5lY3Rpb24s
IG9yIFNlYy1XZWJTb2NrZXQtQWNjZXB0CisgICAgICAgICMgaGVhZGVycyBleGlzdD8KKworICAg
ICAgICBzZWxmLl9sb2dpY2FsX2NoYW5uZWxzX2NvbmRpdGlvbi5hY3F1aXJlKCkKKyAgICAgICAg
c2VsZi5fbG9naWNhbF9jaGFubmVsc1tjaGFubmVsX2lkXSA9IF9Mb2dpY2FsQ2hhbm5lbERhdGEo
KQorICAgICAgICBzZWxmLl9sb2dpY2FsX2NoYW5uZWxzW2NoYW5uZWxfaWRdLnNlbmRfcXVvdGEg
PSBzZW5kX3F1b3RhCisgICAgICAgIHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNfY29uZGl0aW9uLnJl
bGVhc2UoKQorCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnTG9naWNhbCBjaGFubmVsICVk
IGVzdGFibGlzaGVkJyAlIGNoYW5uZWxfaWQpCisKKyAgICBkZWYgX2NoZWNrX2xvZ2ljYWxfY2hh
bm5lbF9pc19vcGVuZWQoc2VsZiwgY2hhbm5lbF9pZCk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9p
c19hY3RpdmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ011eCBjbGllbnQgaXMgbm90
IGFjdGl2ZScpCisKKyAgICAgICAgaWYgbm90IGNoYW5uZWxfaWQgaW4gc2VsZi5fbG9naWNhbF9j
aGFubmVsczoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignTG9naWNhbCBjaGFubmVsICVk
IGlzIG5vdCBlc3RhYmxpc2hlZC4nKQorCisgICAgZGVmIGRyb3BfY2hhbm5lbChzZWxmLCBjaGFu
bmVsX2lkKToKKyAgICAgICAgIyBUT0RPKGJhc2hpKTogSW1wbGVtZW50CisgICAgICAgIHBhc3MK
KworICAgIGRlZiBzZW5kX2Zsb3dfY29udHJvbChzZWxmLCBjaGFubmVsX2lkLCByZXBsZW5pc2hl
ZF9xdW90YSk6CisgICAgICAgIHNlbGYuX2NoZWNrX2xvZ2ljYWxfY2hhbm5lbF9pc19vcGVuZWQo
Y2hhbm5lbF9pZCkKKyAgICAgICAgZmxvd19jb250cm9sID0gX2NyZWF0ZV9mbG93X2NvbnRyb2wo
Y2hhbm5lbF9pZCwgcmVwbGVuaXNoZWRfcXVvdGEpCisgICAgICAgIHBheWxvYWQgPSBfZW5jb2Rl
X2NoYW5uZWxfaWQoX0NPTlRST0xfQ0hBTk5FTF9JRCkgKyBmbG93X2NvbnRyb2wKKyAgICAgICAg
IyBSZXBsZW5pc2ggcmVjZWl2ZSBxdW90YQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxm
Ll9sb2dpY2FsX2NoYW5uZWxzX2NvbmRpdGlvbi5hY3F1aXJlKCkKKyAgICAgICAgICAgIHNlbGYu
X2xvZ2ljYWxfY2hhbm5lbHNbY2hhbm5lbF9pZF0ucmVjZWl2ZV9xdW90YSArPSAoCisgICAgICAg
ICAgICAgICAgcmVwbGVuaXNoZWRfcXVvdGEpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg
ICBzZWxmLl9sb2dpY2FsX2NoYW5uZWxzX2NvbmRpdGlvbi5yZWxlYXNlKCkKKyAgICAgICAgc2Vs
Zi5fc3RyZWFtLnNlbmRfYmluYXJ5KHBheWxvYWQpCisKKyAgICBkZWYgc2VuZF9tZXNzYWdlKHNl
bGYsIGNoYW5uZWxfaWQsIG1lc3NhZ2UsIGVuZD1UcnVlLCBiaW5hcnk9RmFsc2UpOgorICAgICAg
ICBzZWxmLl9jaGVja19sb2dpY2FsX2NoYW5uZWxfaXNfb3BlbmVkKGNoYW5uZWxfaWQpCisKKyAg
ICAgICAgaWYgYmluYXJ5OgorICAgICAgICAgICAgZmlyc3RfYnl0ZSA9IChlbmQgPDwgNykgfCBj
bGllbnRfZm9yX3Rlc3RpbmcuT1BDT0RFX0JJTkFSWQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgZmlyc3RfYnl0ZSA9IChlbmQgPDwgNykgfCBjbGllbnRfZm9yX3Rlc3RpbmcuT1BDT0RFX1RF
WFQKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLmVuY29kZSgndXRmLTgnKQorCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNfY29uZGl0aW9uLmFj
cXVpcmUoKQorICAgICAgICAgICAgaWYgc2VsZi5fbG9naWNhbF9jaGFubmVsc1tjaGFubmVsX2lk
XS5zZW5kX3F1b3RhIDwgbGVuKG1lc3NhZ2UpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbignU2VuZCBxdW90YSB2aW9sYXRpb246ICVkIDwgJWQnICUgKAorICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fbG9naWNhbF9jaGFubmVsc1tjaGFubmVsX2lkXS5zZW5kX3F1b3RhLAor
ICAgICAgICAgICAgICAgICAgICAgICAgbGVuKG1lc3NhZ2UpKSkKKworICAgICAgICAgICAgc2Vs
Zi5fbG9naWNhbF9jaGFubmVsc1tjaGFubmVsX2lkXS5zZW5kX3F1b3RhIC09IGxlbihtZXNzYWdl
KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fbG9naWNhbF9jaGFubmVsc19j
b25kaXRpb24ucmVsZWFzZSgpCisgICAgICAgIHBheWxvYWQgPSBfZW5jb2RlX2NoYW5uZWxfaWQo
Y2hhbm5lbF9pZCkgKyBjaHIoZmlyc3RfYnl0ZSkgKyBtZXNzYWdlCisgICAgICAgIHNlbGYuX3N0
cmVhbS5zZW5kX2JpbmFyeShwYXlsb2FkKQorCisgICAgZGVmIGFzc2VydF9yZWNlaXZlKHNlbGYs
IGNoYW5uZWxfaWQsIHBheWxvYWQsIGJpbmFyeT1GYWxzZSk6CisgICAgICAgIHNlbGYuX2NoZWNr
X2xvZ2ljYWxfY2hhbm5lbF9pc19vcGVuZWQoY2hhbm5lbF9pZCkKKworICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBpbm5lcl9mcmFtZSA9IHNlbGYuX2xvZ2ljYWxfY2hhbm5lbHNbY2hhbm5lbF9p
ZF0ucXVldWUuZ2V0KAorICAgICAgICAgICAgICAgIHRpbWVvdXQ9c2VsZi5fdGltZW91dCkKKyAg
ICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5LCBlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCdDYW5ub3QgcmVjZWl2ZSBtZXNzYWdlIGZyb20gY2hhbm5lbCBpZCAlZCcgJQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfaWQpCisKKyAgICAgICAgaWYgYmluYXJ5OgorICAg
ICAgICAgICAgb3Bjb2RlID0gY2xpZW50X2Zvcl90ZXN0aW5nLk9QQ09ERV9CSU5BUlkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIG9wY29kZSA9IGNsaWVudF9mb3JfdGVzdGluZy5PUENPREVf
VEVYVAorCisgICAgICAgIGlmIGlubmVyX2ZyYW1lLm9wY29kZSAhPSBvcGNvZGU6CisgICAgICAg
ICAgICByYWlzZSBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQgb3Bjb2RlIHJlY2VpdmVkICglciAhPSAl
ciknICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfb3Bjb2RlLCBpbm5l
cl9mcmFtZS5vcGNvZGUpKQorCisgICAgICAgIGlmIGlubmVyX2ZyYW1lLnBheWxvYWQgIT0gcGF5
bG9hZDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5leHBlY3RlZCBwYXlsb2FkIHJl
Y2VpdmVkJykKKworICAgIGRlZiBzZW5kX2Nsb3NlKHNlbGYsIGNoYW5uZWxfaWQsIGNvZGU9Tm9u
ZSwgcmVhc29uPScnKToKKyAgICAgICAgc2VsZi5fY2hlY2tfbG9naWNhbF9jaGFubmVsX2lzX29w
ZW5lZChjaGFubmVsX2lkKQorCisgICAgICAgIGlmIGNvZGUgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBib2R5ID0gc3RydWN0LnBhY2soJyFIJywgY29kZSkgKyByZWFzb24uZW5jb2RlKCd1dGYt
OCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBib2R5ID0gJycKKworICAgICAgICBmaXJz
dF9ieXRlID0gKDEgPDwgNykgfCBjbGllbnRfZm9yX3Rlc3RpbmcuT1BDT0RFX0NMT1NFCisgICAg
ICAgIHBheWxvYWQgPSBfZW5jb2RlX2NoYW5uZWxfaWQoY2hhbm5lbF9pZCkgKyBjaHIoZmlyc3Rf
Ynl0ZSkgKyBib2R5CisgICAgICAgIHNlbGYuX3N0cmVhbS5zZW5kX2JpbmFyeShwYXlsb2FkKQor
CisgICAgZGVmIGFzc2VydF9yZWNlaXZlX2Nsb3NlKHNlbGYsIGNoYW5uZWxfaWQpOgorICAgICAg
ICBzZWxmLl9jaGVja19sb2dpY2FsX2NoYW5uZWxfaXNfb3BlbmVkKGNoYW5uZWxfaWQpCisKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgaW5uZXJfZnJhbWUgPSBzZWxmLl9sb2dpY2FsX2NoYW5u
ZWxzW2NoYW5uZWxfaWRdLnF1ZXVlLmdldCgKKyAgICAgICAgICAgICAgICB0aW1lb3V0PXNlbGYu
X3RpbWVvdXQpCisgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eSwgZToKKyAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbignQ2Fubm90IHJlY2VpdmUgbWVzc2FnZSBmcm9tIGNoYW5uZWwgaWQgJWQn
ICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX2lkKQorICAgICAgICBpZiBp
bm5lcl9mcmFtZS5vcGNvZGUgIT0gY2xpZW50X2Zvcl90ZXN0aW5nLk9QQ09ERV9DTE9TRToKKyAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRGlkblwndCByZWNlaXZlIGNsb3NlIGZyYW1lJykK
KworICAgIGRlZiBzZW5kX3BoeXNpY2FsX2Nvbm5lY3Rpb25fY2xvc2Uoc2VsZiwgY29kZT1Ob25l
LCByZWFzb249JycpOgorICAgICAgICBzZWxmLl9waHlzaWNhbF9jb25uZWN0aW9uX2Nsb3NlX2V2
ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc2VsZi5fc3RyZWFtLnNlbmRfY2xvc2Uo
Y29kZSwgcmVhc29uKQorCisgICAgIyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCBvbmx5IGFmdGVy
IGNhbGxpbmcKKyAgICAjIHNlbmRfcGh5c2ljYWxfY29ubmVjdGlvbl9jbG9zZSgpLgorICAgIGRl
ZiBhc3NlcnRfcGh5c2ljYWxfY29ubmVjdGlvbl9yZWNlaXZlX2Nsb3NlKAorICAgICAgICBzZWxm
LCBjb2RlPWNsaWVudF9mb3JfdGVzdGluZy5TVEFUVVNfTk9STUFMX0NMT1NVUkUsIHJlYXNvbj0n
Jyk6CisgICAgICAgIHNlbGYuX3BoeXNpY2FsX2Nvbm5lY3Rpb25fY2xvc2VfZXZlbnQud2FpdCh0
aW1lb3V0PXNlbGYuX3RpbWVvdXQpCisgICAgICAgIGlmIChub3Qgc2VsZi5fcGh5c2ljYWxfY29u
bmVjdGlvbl9jbG9zZV9ldmVudC5pc1NldCgpIG9yCisgICAgICAgICAgICBub3Qgc2VsZi5fcGh5
c2ljYWxfY29ubmVjdGlvbl9jbG9zZV9tZXNzYWdlKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbignRGlkblwndCByZWNlaXZlIGNsb3NpbmcgaGFuZHNoYWtlJykKKworICAgIGRlZiBjbG9z
ZV9zb2NrZXQoc2VsZik6CisgICAgICAgIHNlbGYuX2lzX2FjdGl2ZSA9IEZhbHNlCisgICAgICAg
IHNlbGYuX3NvY2tldC5jbG9zZSgpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvcnVuX2FsbC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdl
YnNvY2tldC9zcmMvdGVzdC9ydW5fYWxsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwYTVkODdkODM4MjJiMDc4
M2JlMTNlMzNkZGEzYWI2MWE1YWZlNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3Qv
cnVuX2FsbC5weQpAQCAtMCwwICsxLDg5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMg
Q29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
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
IFNVQ0ggREFNQUdFLgorCisKKyIiIlJ1biBhbGwgdGVzdHMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5
LgorCitUaGlzIHN1aXRlIGlzIGV4cGVjdGVkIHRvIGJlIHJ1biB1bmRlciBweXdlYnNvY2tldCdz
IHNyYyBkaXJlY3RvcnksIGkuZS4gdGhlCitkaXJlY3RvcnkgY29udGFpbmluZyBtb2RfcHl3ZWJz
b2NrZXQsIHRlc3QsIGV0Yy4KKworVG8gY2hhbmdlIGxvZ2dpbiBsZXZlbCwgcGxlYXNlIHNwZWNp
ZnkgLS1sb2ctbGV2ZWwgb3B0aW9uLgorICAgIHB5dGhvbiB0ZXN0L3J1bl90ZXN0LnB5IC0tbG9n
LWxldmVsIGRlYnVnCisKK1RvIHBhc3MgYW55IG9wdGlvbiB0byB1bml0dGVzdCBtb2R1bGUsIHBs
ZWFzZSBzcGVjaWZ5IG9wdGlvbnMgYWZ0ZXIgJy0tJy4gRm9yCitleGFtcGxlLCBydW4gdGhpcyBm
b3IgbWFraW5nIHRoZSB0ZXN0IHJ1bm5lciB2ZXJib3NlLgorICAgIHB5dGhvbiB0ZXN0L3J1bl90
ZXN0LnB5IC0tbG9nLWxldmVsIGRlYnVnIC0tIC12CisiIiIKKworCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0
IHVuaXR0ZXN0CisKKworX1RFU1RfTU9EVUxFX1BBVFRFUk4gPSByZS5jb21waWxlKHInXih0ZXN0
Xy4rKVwucHkkJykKKworCitkZWYgX2xpc3RfdGVzdF9tb2R1bGVzKGRpcmVjdG9yeSk6CisgICAg
bW9kdWxlX25hbWVzID0gW10KKyAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihkaXJlY3Rv
cnkpOgorICAgICAgICBtYXRjaCA9IF9URVNUX01PRFVMRV9QQVRURVJOLnNlYXJjaChmaWxlbmFt
ZSkKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICBtb2R1bGVfbmFtZXMuYXBwZW5kKG1h
dGNoLmdyb3VwKDEpKQorICAgIHJldHVybiBtb2R1bGVfbmFtZXMKKworCitkZWYgX3N1aXRlKCk6
CisgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgcmV0dXJuIGxvYWRlci5s
b2FkVGVzdHNGcm9tTmFtZXMoCisgICAgICAgICAgICBfbGlzdF90ZXN0X21vZHVsZXMob3MucGF0
aC5qb2luKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdLCAnLicpKSkKKworCitpZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCisg
ICAgcGFyc2VyLmFkZF9vcHRpb24oJy0tbG9nLWxldmVsJywgJy0tbG9nX2xldmVsJywgdHlwZT0n
Y2hvaWNlJywKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdsb2dfbGV2ZWwnLCBkZWZhdWx0
PSd3YXJuaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsnZGVidWcnLCAnaW5m
bycsICd3YXJuaW5nJywgJ3dhcm4nLCAnZXJyb3InLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdjcml0aWNhbCddKQorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJn
cygpCisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZygKKyAgICAgICAgICAgIGxldmVsPWxvZ2dpbmcu
Z2V0TGV2ZWxOYW1lKG9wdGlvbnMubG9nX2xldmVsLnVwcGVyKCkpLAorICAgICAgICAgICAgZm9y
bWF0PSclKGxldmVsbmFtZSlzICUoYXNjdGltZSlzICcKKyAgICAgICAgICAgICAgICAgICAnJShm
aWxlbmFtZSlzOiUobGluZW5vKWRdICcKKyAgICAgICAgICAgICAgICAgICAnJShtZXNzYWdlKXMn
LAorICAgICAgICAgICAgZGF0ZWZtdD0nJUg6JU06JVMnKQorICAgIHVuaXR0ZXN0Lm1haW4oZGVm
YXVsdFRlc3Q9J19zdWl0ZScsIGFyZ3Y9W3N5cy5hcmd2WzBdXSArIGFyZ3MpCisKKworIyB2aTpz
dHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3Qvc2V0X3N5c19wYXRoLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29j
a2V0L3NyYy90ZXN0L3NldF9zeXNfcGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lM2M2ZGI5ZWE0ZDM4M2Ez
N2MyN2EwNjBhMGVmMWM1NjNiYmIxZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0
L3NldF9zeXNfcGF0aC5weQpAQCAtMCwwICsxLDQ1IEBACisjIENvcHlyaWdodCAyMDA5LCBHb29n
bGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisi
IiJDb25maWd1cmF0aW9uIGZvciB0ZXN0aW5nLgorCitUZXN0IGZpbGVzIHNob3VsZCBpbXBvcnQg
dGhpcyBtb2R1bGUgYmVmb3JlIG1vZF9weXdlYnNvY2tldC4KKyIiIgorCisKK2ltcG9ydCBvcwor
aW1wb3J0IHN5cworCisKKyMgQWRkIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvIHN5cy5wYXRoIHRv
IGVuYWJsZSBpbXBvcnRpbmcgbW9kX3B5d2Vic29ja2V0Lgorc3lzLnBhdGguaW5zZXJ0KDAsIG9z
LnBhdGguam9pbihvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSwgJy4uJykpCisKKworIyB2aTpz
dHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdF9kaXNwYXRjaC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNv
Y2tldC9zcmMvdGVzdC90ZXN0X2Rpc3BhdGNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljYTNkNGYzYWUxZGJm
NWY5N2IyN2Q4NGVjNmU2NDIyZmQwZWNhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rl
c3QvdGVzdF9kaXNwYXRjaC5weQpAQCAtMCwwICsxLDI4OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjCisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUZXN0cyBmb3IgZGlzcGF0Y2ggbW9kdWxl
LiIiIgorCisKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBzZXRfc3lzX3Bh
dGggICMgVXBkYXRlIHN5cy5wYXRoIHRvIGxvY2F0ZSBtb2RfcHl3ZWJzb2NrZXQgbW9kdWxlLgor
Citmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgZGlzcGF0Y2gKK2Zyb20gbW9kX3B5d2Vic29j
a2V0IGltcG9ydCBoYW5kc2hha2UKK2Zyb20gdGVzdCBpbXBvcnQgbW9jaworCisKK19URVNUX0hB
TkRMRVJTX0RJUiA9IG9zLnBhdGguam9pbigKKyAgICAgICAgb3MucGF0aC5zcGxpdChfX2ZpbGVf
XylbMF0sICd0ZXN0ZGF0YScsICdoYW5kbGVycycpCisKK19URVNUX0hBTkRMRVJTX1NVQl9ESVIg
PSBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJykKKworCitjbGFzcyBEaXNw
YXRjaGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSB1bml0dGVzdCBmb3IgZGlz
cGF0Y2ggbW9kdWxlLiIiIgorCisgICAgZGVmIHRlc3Rfbm9ybWFsaXplX3BhdGgoc2VsZik6Cisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5hYnNwYXRoKCcvYS9iJykucmVwbGFjZSgn
XFwnLCAnLycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoLl9ub3JtYWxpemVf
cGF0aCgnL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYWJzcGF0aCgn
L2EvYicpLnJlcGxhY2UoJ1xcJywgJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXNw
YXRjaC5fbm9ybWFsaXplX3BhdGgoJ1xcYVxcYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KG9zLnBhdGguYWJzcGF0aCgnL2EvYicpLnJlcGxhY2UoJ1xcJywgJy8nKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBkaXNwYXRjaC5fbm9ybWFsaXplX3BhdGgoJy9hL2MvLi4vYicpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYWJzcGF0aCgnYWJjJykucmVwbGFjZSgnXFwn
LCAnLycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoLl9ub3JtYWxpemVfcGF0
aCgnYWJjJykpCisKKyAgICBkZWYgdGVzdF9jb252ZXJ0ZXIoc2VsZik6CisgICAgICAgIGNvbnZl
cnRlciA9IGRpc3BhdGNoLl9jcmVhdGVfcGF0aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIoJy9hL2In
KQorICAgICAgICAjIFB5dGhvbiBidWlsdCBieSBNU0MgaW5zZXJ0cyBhIGRyaXZlIG5hbWUgbGlr
ZSAnQzpcJyB2aWEgcmVhbHBhdGgoKS4KKyAgICAgICAgIyBDb252ZXJ0ZXIgR2VuZXJhdG9yIGV4
cGFuZHMgcHJvdmlkZWQgcGF0aCB1c2luZyByZWFscGF0aCgpIGFuZCB1c2VzCisgICAgICAgICMg
dGhlIHBhdGggaW5jbHVkaW5nIGEgZHJpdmUgbmFtZSB0byB2ZXJpZnkgdGhlIHByZWZpeC4KKyAg
ICAgICAgb3Nfcm9vdCA9IG9zLnBhdGgucmVhbHBhdGgoJy8nKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCcvaCcsIGNvbnZlcnRlcihvc19yb290ICsgJ2EvYi9oX3dzaC5weScpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCcvYy9oJywgY29udmVydGVyKG9zX3Jvb3QgKyAnYS9iL2MvaF93
c2gucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBjb252ZXJ0ZXIob3Nfcm9v
dCArICdhL2IvaC5weScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGNvbnZlcnRl
cignYS9iL2hfd3NoLnB5JykpCisKKyAgICAgICAgY29udmVydGVyID0gZGlzcGF0Y2guX2NyZWF0
ZV9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcignYS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnL2gnLCBjb252ZXJ0ZXIoZGlzcGF0Y2guX25vcm1hbGl6ZV9wYXRoKAorICAgICAgICAg
ICAgJ2EvYi9oX3dzaC5weScpKSkKKworICAgICAgICBjb252ZXJ0ZXIgPSBkaXNwYXRjaC5fY3Jl
YXRlX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKCcvYS9iLy8vJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIob3Nfcm9vdCArICdhL2IvaF93c2gucHknKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIoZGlzcGF0Y2guX25vcm1hbGl6
ZV9wYXRoKAorICAgICAgICAgICAgJy9hL2IvLi4vYi9oX3dzaC5weScpKSkKKworICAgICAgICBj
b252ZXJ0ZXIgPSBkaXNwYXRjaC5fY3JlYXRlX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKAor
ICAgICAgICAgICAgJy9hLy4uL2EvYi8uLi9iLycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Jy9oJywgY29udmVydGVyKG9zX3Jvb3QgKyAnYS9iL2hfd3NoLnB5JykpCisKKyAgICAgICAgY29u
dmVydGVyID0gZGlzcGF0Y2guX2NyZWF0ZV9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcihyJ1xh
XGInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNvbnZlcnRlcihvc19yb290ICsg
cidhXGJcaF93c2gucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0
ZXIob3Nfcm9vdCArIHInYS9iL2hfd3NoLnB5JykpCisKKyAgICBkZWYgdGVzdF9lbnVtZXJhdGVf
aGFuZGxlcl9maWxlX3BhdGhzKHNlbGYpOgorICAgICAgICBwYXRocyA9IGxpc3QoCisgICAgICAg
ICAgICBkaXNwYXRjaC5fZW51bWVyYXRlX2hhbmRsZXJfZmlsZV9wYXRocyhfVEVTVF9IQU5ETEVS
U19ESVIpKQorICAgICAgICBwYXRocy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg4
LCBsZW4ocGF0aHMpKQorICAgICAgICBleHBlY3RlZF9wYXRocyA9IFsKKyAgICAgICAgICAgICAg
ICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnYWJvcnRfYnlfdXNlcl93c2gucHkn
KSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnYmxh
bmtfd3NoLnB5JyksCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJT
X0RJUiwgJ29yaWdpbl9jaGVja193c2gucHknKSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpv
aW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2V4Y2VwdGlvbl9pbl90cmFuc2Zlcl93c2gucHknKSwKKyAgICAgICAgICAgICAgICBvcy5w
YXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJywgJ25vbl9jYWxsYWJsZV93c2gucHkn
KSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3Vi
JywgJ3BsYWluX3dzaC5weScpLAorICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihfVEVTVF9I
QU5ETEVSU19ESVIsICdzdWInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd3Jvbmdf
aGFuZHNoYWtlX3NpZ193c2gucHknKSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RF
U1RfSEFORExFUlNfRElSLCAnc3ViJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dy
b25nX3RyYW5zZmVyX3NpZ193c2gucHknKSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIGZv
ciBleHBlY3RlZCwgYWN0dWFsIGluIHppcChleHBlY3RlZF9wYXRocywgcGF0aHMpOgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQorCisgICAgZGVmIHRlc3Rf
c291cmNlX2hhbmRsZXJfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisg
ICAgICAgICAgICBkaXNwYXRjaC5EaXNwYXRjaEV4Y2VwdGlvbiwgZGlzcGF0Y2guX3NvdXJjZV9o
YW5kbGVyX2ZpbGUsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAg
IGRpc3BhdGNoLkRpc3BhdGNoRXhjZXB0aW9uLCBkaXNwYXRjaC5fc291cmNlX2hhbmRsZXJfZmls
ZSwgJ2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZGlzcGF0
Y2guRGlzcGF0Y2hFeGNlcHRpb24sIGRpc3BhdGNoLl9zb3VyY2VfaGFuZGxlcl9maWxlLCAnMS8w
JykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRpc3BhdGNoLl9zb3VyY2VfaGFuZGxlcl9maWxl
KAorICAgICAgICAgICAgICAgICdkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVx
dWVzdCk6cGFzc1xuJworICAgICAgICAgICAgICAgICdkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9k
YXRhKHJlcXVlc3QpOnBhc3NcbicpKQorCisgICAgZGVmIHRlc3Rfc291cmNlX3dhcm5pbmdzKHNl
bGYpOgorICAgICAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfVEVTVF9IQU5E
TEVSU19ESVIsIE5vbmUpCisgICAgICAgIHdhcm5pbmdzID0gZGlzcGF0Y2hlci5zb3VyY2Vfd2Fy
bmluZ3MoKQorICAgICAgICB3YXJuaW5ncy5zb3J0KCkKKyAgICAgICAgZXhwZWN0ZWRfd2Fybmlu
Z3MgPSBbCisgICAgICAgICAgICAgICAgKG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKAor
ICAgICAgICAgICAgICAgICAgICBfVEVTVF9IQU5ETEVSU19ESVIsICdibGFua193c2gucHknKSkg
KworICAgICAgICAgICAgICAgICAnOiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSBpcyBu
b3QgZGVmaW5lZC4nKSwKKyAgICAgICAgICAgICAgICAob3MucGF0aC5yZWFscGF0aChvcy5wYXRo
LmpvaW4oCisgICAgICAgICAgICAgICAgICAgIF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1YicsICdu
b25fY2FsbGFibGVfd3NoLnB5JykpICsKKyAgICAgICAgICAgICAgICAgJzogd2ViX3NvY2tldF9k
b19leHRyYV9oYW5kc2hha2UgaXMgbm90IGNhbGxhYmxlLicpLAorICAgICAgICAgICAgICAgIChv
cy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbigKKyAgICAgICAgICAgICAgICAgICAgX1RFU1Rf
SEFORExFUlNfRElSLCAnc3ViJywgJ3dyb25nX2hhbmRzaGFrZV9zaWdfd3NoLnB5JykpICsKKyAg
ICAgICAgICAgICAgICAgJzogd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UgaXMgbm90IGRl
ZmluZWQuJyksCisgICAgICAgICAgICAgICAgKG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2lu
KAorICAgICAgICAgICAgICAgICAgICBfVEVTVF9IQU5ETEVSU19ESVIsICdzdWInLCAnd3Jvbmdf
dHJhbnNmZXJfc2lnX3dzaC5weScpKSArCisgICAgICAgICAgICAgICAgICc6IHdlYl9zb2NrZXRf
dHJhbnNmZXJfZGF0YSBpcyBub3QgZGVmaW5lZC4nKSwKKyAgICAgICAgICAgICAgICBdCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQsIGxlbih3YXJuaW5ncykpCisgICAgICAgIGZvciBleHBl
Y3RlZCwgYWN0dWFsIGluIHppcChleHBlY3RlZF93YXJuaW5ncywgd2FybmluZ3MpOgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVhbCkKKworICAgIGRlZiB0ZXN0
X2RvX2V4dHJhX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNo
LkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElSLCBOb25lKQorICAgICAgICByZXF1ZXN0ID0g
bW9jay5Nb2NrUmVxdWVzdCgpCisgICAgICAgIHJlcXVlc3Qud3NfcmVzb3VyY2UgPSAnL29yaWdp
bl9jaGVjaycKKyAgICAgICAgcmVxdWVzdC53c19vcmlnaW4gPSAnaHR0cDovL2V4YW1wbGUuY29t
JworICAgICAgICBkaXNwYXRjaGVyLmRvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KSAgIyBNdXN0
IG5vdCByYWlzZSBleGNlcHRpb24uCisKKyAgICAgICAgcmVxdWVzdC53c19vcmlnaW4gPSAnaHR0
cDovL2JhZC5leGFtcGxlLmNvbScKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGlzcGF0Y2hl
ci5kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnQ291
bGQgbm90IGNhdGNoIEhhbmRzaGFrZUV4Y2VwdGlvbiB3aXRoIDQwMyBzdGF0dXMnKQorICAgICAg
ICBleGNlcHQgaGFuZHNoYWtlLkhhbmRzaGFrZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKDQwMywgZS5zdGF0dXMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s
IGU6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgZXhjZXB0aW9uOiAlcicgJSBl
KQorCisgICAgZGVmIHRlc3RfYWJvcnRfZXh0cmFfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICBk
aXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfVEVTVF9IQU5ETEVSU19ESVIsIE5vbmUp
CisgICAgICAgIHJlcXVlc3QgPSBtb2NrLk1vY2tSZXF1ZXN0KCkKKyAgICAgICAgcmVxdWVzdC53
c19yZXNvdXJjZSA9ICcvYWJvcnRfYnlfdXNlcicKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
aGFuZHNoYWtlLkFib3J0ZWRCeVVzZXJFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRpc3BhdGNoZXIuZG9fZXh0cmFfaGFuZHNoYWtlLCByZXF1ZXN0KQorCisgICAgZGVmIHRl
c3RfdHJhbnNmZXJfZGF0YShzZWxmKToKKyAgICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoLkRp
c3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElSLCBOb25lKQorCisgICAgICAgIHJlcXVlc3QgPSBt
b2NrLk1vY2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQ29ubignXHhmZlx4MDAnKSkKKyAg
ICAgICAgcmVxdWVzdC53c19yZXNvdXJjZSA9ICcvb3JpZ2luX2NoZWNrJworICAgICAgICByZXF1
ZXN0LndzX3Byb3RvY29sID0gJ3AxJworICAgICAgICBkaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEo
cmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnb3JpZ2luX2NoZWNrX3dzaC5weSBp
cyBjYWxsZWQgZm9yIC9vcmlnaW5fY2hlY2ssIHAxJworICAgICAgICAgICAgICAgICAgICAgICAg
ICdceGZmXHgwMCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9u
LndyaXR0ZW5fZGF0YSgpKQorCisgICAgICAgIHJlcXVlc3QgPSBtb2NrLk1vY2tSZXF1ZXN0KGNv
bm5lY3Rpb249bW9jay5Nb2NrQ29ubignXHhmZlx4MDAnKSkKKyAgICAgICAgcmVxdWVzdC53c19y
ZXNvdXJjZSA9ICcvc3ViL3BsYWluJworICAgICAgICByZXF1ZXN0LndzX3Byb3RvY29sID0gTm9u
ZQorICAgICAgICBkaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVxdWVzdCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnc3ViL3BsYWluX3dzaC5weSBpcyBjYWxsZWQgZm9yIC9zdWIvcGxhaW4s
IE5vbmUnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4ZmZceDAwJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICAg
ICAgcmVxdWVzdCA9IG1vY2suTW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1vY2tDb25uKCdc
eGZmXHgwMCcpKQorICAgICAgICByZXF1ZXN0LndzX3Jlc291cmNlID0gJy9zdWIvcGxhaW4/Jwor
ICAgICAgICByZXF1ZXN0LndzX3Byb3RvY29sID0gTm9uZQorICAgICAgICBkaXNwYXRjaGVyLnRy
YW5zZmVyX2RhdGEocmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3ViL3BsYWlu
X3dzaC5weSBpcyBjYWxsZWQgZm9yIC9zdWIvcGxhaW4/LCBOb25lJworICAgICAgICAgICAgICAg
ICAgICAgICAgICdceGZmXHgwMCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5j
b25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgICAgIHJlcXVlc3QgPSBtb2NrLk1vY2tS
ZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQ29ubignXHhmZlx4MDAnKSkKKyAgICAgICAgcmVx
dWVzdC53c19yZXNvdXJjZSA9ICcvc3ViL3BsYWluP3E9dicKKyAgICAgICAgcmVxdWVzdC53c19w
cm90b2NvbCA9IE5vbmUKKyAgICAgICAgZGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKHJlcXVlc3Qp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3N1Yi9wbGFpbl93c2gucHkgaXMgY2FsbGVkIGZv
ciAvc3ViL3BsYWluP3E9diwgTm9uZScKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXHhmZlx4
MDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVu
X2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X3RyYW5zZmVyX2RhdGFfbm9faGFuZGxlcihzZWxmKToK
KyAgICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNf
RElSLCBOb25lKQorICAgICAgICBmb3IgcmVzb3VyY2UgaW4gWycvYmxhbmsnLCAnL3N1Yi9ub25f
Y2FsbGFibGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICcvc3ViL25vX3dzaF9hdF90aGVf
ZW5kJywgJy9kb2VzL25vdC9leGlzdCddOgorICAgICAgICAgICAgcmVxdWVzdCA9IG1vY2suTW9j
a1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1vY2tDb25uKCcnKSkKKyAgICAgICAgICAgIHJlcXVl
c3Qud3NfcmVzb3VyY2UgPSByZXNvdXJjZQorICAgICAgICAgICAgcmVxdWVzdC53c19wcm90b2Nv
bCA9ICdwMicKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkaXNwYXRjaGVyLnRy
YW5zZmVyX2RhdGEocmVxdWVzdCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoKQorICAgICAg
ICAgICAgZXhjZXB0IGRpc3BhdGNoLkRpc3BhdGNoRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAg
ICAgIHNlbGYuZmFpbFVubGVzcyhzdHIoZSkuZmluZCgnTm8gaGFuZGxlcicpICE9IC0xKQorICAg
ICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoKQor
CisgICAgZGVmIHRlc3RfdHJhbnNmZXJfZGF0YV9oYW5kbGVyX2V4Y2VwdGlvbihzZWxmKToKKyAg
ICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElS
LCBOb25lKQorICAgICAgICByZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdChjb25uZWN0aW9uPW1v
Y2suTW9ja0Nvbm4oJycpKQorICAgICAgICByZXF1ZXN0LndzX3Jlc291cmNlID0gJy9zdWIvZXhj
ZXB0aW9uX2luX3RyYW5zZmVyJworICAgICAgICByZXF1ZXN0LndzX3Byb3RvY29sID0gJ3AzJwor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBkaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVxdWVz
dCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6
CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyKGUpLmZpbmQoJ0ludGVudGlvbmFsJykg
IT0gLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZXhjZXB0aW9u
OiAlcycgJSBlKQorCisgICAgZGVmIHRlc3RfYWJvcnRfdHJhbnNmZXJfZGF0YShzZWxmKToKKyAg
ICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElS
LCBOb25lKQorICAgICAgICByZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdCgpCisgICAgICAgIHJl
cXVlc3Qud3NfcmVzb3VyY2UgPSAnL2Fib3J0X2J5X3VzZXInCisgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKGhhbmRzaGFrZS5BYm9ydGVkQnlVc2VyRXhjZXB0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEsIHJlcXVlc3QpCisKKyAgICBkZWYg
dGVzdF9zY2FuX2RpcihzZWxmKToKKyAgICAgICAgZGlzcCA9IGRpc3BhdGNoLkRpc3BhdGNoZXIo
X1RFU1RfSEFORExFUlNfRElSLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQsIGxl
bihkaXNwLl9oYW5kbGVyX3N1aXRlX21hcCkpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygnL29y
aWdpbl9jaGVjaycgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuZmFp
bFVubGVzcygKKyAgICAgICAgICAgICcvc3ViL2V4Y2VwdGlvbl9pbl90cmFuc2ZlcicgaW4gZGlz
cC5faGFuZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygnL3N1Yi9wbGFp
bicgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisKKyAgICBkZWYgdGVzdF9zY2FuX3N1Yl9k
aXIoc2VsZik6CisgICAgICAgIGRpc3AgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRM
RVJTX0RJUiwgX1RFU1RfSEFORExFUlNfU1VCX0RJUikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgyLCBsZW4oZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApKQorICAgICAgICBzZWxmLmZhaWxJZign
L29yaWdpbl9jaGVjaycgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYu
ZmFpbFVubGVzcygKKyAgICAgICAgICAgICcvc3ViL2V4Y2VwdGlvbl9pbl90cmFuc2ZlcicgaW4g
ZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygnL3N1Yi9w
bGFpbicgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisKKyAgICBkZWYgdGVzdF9zY2FuX3N1
Yl9kaXJfYXNfcm9vdChzZWxmKToKKyAgICAgICAgZGlzcCA9IGRpc3BhdGNoLkRpc3BhdGNoZXIo
X1RFU1RfSEFORExFUlNfU1VCX0RJUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1RFU1RfSEFORExFUlNfU1VCX0RJUikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBs
ZW4oZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApKQorICAgICAgICBzZWxmLmZhaWxJZignL29yaWdp
bl9jaGVjaycgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuZmFpbElm
KCcvc3ViL2V4Y2VwdGlvbl9pbl90cmFuc2ZlcicgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXAp
CisgICAgICAgIHNlbGYuZmFpbElmKCcvc3ViL3BsYWluJyBpbiBkaXNwLl9oYW5kbGVyX3N1aXRl
X21hcCkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCcvZXhjZXB0aW9uX2luX3RyYW5zZmVyJyBp
biBkaXNwLl9oYW5kbGVyX3N1aXRlX21hcCkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCcvcGxh
aW4nIGluIGRpc3AuX2hhbmRsZXJfc3VpdGVfbWFwKQorCisgICAgZGVmIHRlc3Rfc2Nhbl9kaXJf
bXVzdF91bmRlcl9yb290KHNlbGYpOgorICAgICAgICBkaXNwYXRjaC5EaXNwYXRjaGVyKCdhL2In
LCAnYS9iL2MnKSAgIyBPSworICAgICAgICBkaXNwYXRjaC5EaXNwYXRjaGVyKCdhL2IvLy8nLCAn
YS9iJykgICMgT0sKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGlzcGF0Y2guRGlzcGF0Y2hF
eGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoLkRpc3BhdGNoZXIs
ICdhL2IvYycsICdhL2InKQorCisgICAgZGVmIHRlc3RfcmVzb3VyY2VfcGF0aF9hbGlhcyhzZWxm
KToKKyAgICAgICAgZGlzcCA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElS
LCBOb25lKQorICAgICAgICBkaXNwLmFkZF9yZXNvdXJjZV9wYXRoX2FsaWFzKCcvJywgJy9vcmln
aW5fY2hlY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDUsIGxlbihkaXNwLl9oYW5kbGVy
X3N1aXRlX21hcCkpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygnL29yaWdpbl9jaGVjaycgaW4g
ZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygKKyAgICAg
ICAgICAgICcvc3ViL2V4Y2VwdGlvbl9pbl90cmFuc2ZlcicgaW4gZGlzcC5faGFuZGxlcl9zdWl0
ZV9tYXApCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygnL3N1Yi9wbGFpbicgaW4gZGlzcC5faGFu
ZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygnLycgaW4gZGlzcC5faGFu
ZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRpc3BhdGNoLkRpc3Bh
dGNoRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwLmFkZF9yZXNvdXJj
ZV9wYXRoX2FsaWFzLCAnL2FsaWFzJywgJy9ub3QtZXhpc3QnKQorCisKK2lmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUv
dG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdF9lbmR0b2VuZC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVz
dC90ZXN0X2VuZHRvZW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4ZDkzMmJlOGUxMjFjZGM4MGEyNjNhNWUy
MTFmZmE2Mjc4OWNiYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdF9lbmR0
b2VuZC5weQpAQCAtMCwwICsxLDc1MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENv
cHlyaWdodCAyMDEyLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCisiIiJFbmQtdG8tZW5kIHRlc3RzIGZvciBweXdlYnNvY2tldC4gVGVz
dHMgc3RhbmRhbG9uZS5weSBieSBkZWZhdWx0LiBZb3UKK2NhbiBhbHNvIHRlc3QgbW9kX3B5d2Vi
c29ja2V0IGhvc3RlZCBvbiBhbiBBcGFjaGUgc2VydmVyIGJ5IHNldHRpbmcKK191c2VfZXh0ZXJu
YWxfc2VydmVyIHRvIFRydWUgYW5kIG1vZGlmeWluZyBfZXh0ZXJuYWxfc2VydmVyX3BvcnQgdG8g
cG9pbnQgdG8KK3RoZSBwb3J0IG9uIHdoaWNoIHRoZSBBcGFjaGUgc2VydmVyIGlzIHJ1bm5pbmcu
CisiIiIKKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBv
cnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2lt
cG9ydCB1bml0dGVzdAorCitpbXBvcnQgc2V0X3N5c19wYXRoICAjIFVwZGF0ZSBzeXMucGF0aCB0
byBsb2NhdGUgbW9kX3B5d2Vic29ja2V0IG1vZHVsZS4KKworZnJvbSB0ZXN0IGltcG9ydCBjbGll
bnRfZm9yX3Rlc3RpbmcKK2Zyb20gdGVzdCBpbXBvcnQgbXV4X2NsaWVudF9mb3JfdGVzdGluZwor
CisKKyMgU3BlY2lhbCBtZXNzYWdlIHRoYXQgdGVsbHMgdGhlIGVjaG8gc2VydmVyIHRvIHN0YXJ0
IGNsb3NpbmcgaGFuZHNoYWtlCitfR09PREJZRV9NRVNTQUdFID0gJ0dvb2RieWUnCisKK19TRVJW
RVJfV0FSTVVQX0lOX1NFQyA9IDAuMgorCisjIElmIHlvdSB3YW50IHRvIHVzZSBleHRlcm5hbCBz
ZXJ2ZXIgdG8gcnVuIGVuZCB0byBlbmQgdGVzdHMsIHNldCBmb2xsb3dpbmcKKyMgcGFyYW1ldGVy
cyBjb3JyZWN0bHkuCitfdXNlX2V4dGVybmFsX3NlcnZlciA9IEZhbHNlCitfZXh0ZXJuYWxfc2Vy
dmVyX3BvcnQgPSAwCisKKworIyBUZXN0IGJvZHkgZnVuY3Rpb25zCitkZWYgX2VjaG9fY2hlY2tf
cHJvY2VkdXJlKGNsaWVudCk6CisgICAgY2xpZW50LmNvbm5lY3QoKQorCisgICAgY2xpZW50LnNl
bmRfbWVzc2FnZSgndGVzdCcpCisgICAgY2xpZW50LmFzc2VydF9yZWNlaXZlKCd0ZXN0JykKKyAg
ICBjbGllbnQuc2VuZF9tZXNzYWdlKCdoZWxsb3dvcmxkJykKKyAgICBjbGllbnQuYXNzZXJ0X3Jl
Y2VpdmUoJ2hlbGxvd29ybGQnKQorCisgICAgY2xpZW50LnNlbmRfY2xvc2UoKQorICAgIGNsaWVu
dC5hc3NlcnRfcmVjZWl2ZV9jbG9zZSgpCisKKyAgICBjbGllbnQuYXNzZXJ0X2Nvbm5lY3Rpb25f
Y2xvc2VkKCkKKworCitkZWYgX2VjaG9fY2hlY2tfcHJvY2VkdXJlX3dpdGhfYmluYXJ5KGNsaWVu
dCk6CisgICAgY2xpZW50LmNvbm5lY3QoKQorCisgICAgY2xpZW50LnNlbmRfbWVzc2FnZSgnYmlu
YXJ5JywgYmluYXJ5PVRydWUpCisgICAgY2xpZW50LmFzc2VydF9yZWNlaXZlKCdiaW5hcnknLCBi
aW5hcnk9VHJ1ZSkKKyAgICBjbGllbnQuc2VuZF9tZXNzYWdlKCdceDAwXHg4MFx4ZmVceGZmXHgw
MFx4ODAnLCBiaW5hcnk9VHJ1ZSkKKyAgICBjbGllbnQuYXNzZXJ0X3JlY2VpdmUoJ1x4MDBceDgw
XHhmZVx4ZmZceDAwXHg4MCcsIGJpbmFyeT1UcnVlKQorCisgICAgY2xpZW50LnNlbmRfY2xvc2Uo
KQorICAgIGNsaWVudC5hc3NlcnRfcmVjZWl2ZV9jbG9zZSgpCisKKyAgICBjbGllbnQuYXNzZXJ0
X2Nvbm5lY3Rpb25fY2xvc2VkKCkKKworCitkZWYgX2VjaG9fY2hlY2tfcHJvY2VkdXJlX3dpdGhf
Z29vZGJ5ZShjbGllbnQpOgorICAgIGNsaWVudC5jb25uZWN0KCkKKworICAgIGNsaWVudC5zZW5k
X21lc3NhZ2UoJ3Rlc3QnKQorICAgIGNsaWVudC5hc3NlcnRfcmVjZWl2ZSgndGVzdCcpCisKKyAg
ICBjbGllbnQuc2VuZF9tZXNzYWdlKF9HT09EQllFX01FU1NBR0UpCisgICAgY2xpZW50LmFzc2Vy
dF9yZWNlaXZlKF9HT09EQllFX01FU1NBR0UpCisKKyAgICBjbGllbnQuYXNzZXJ0X3JlY2VpdmVf
Y2xvc2UoKQorICAgIGNsaWVudC5zZW5kX2Nsb3NlKCkKKworICAgIGNsaWVudC5hc3NlcnRfY29u
bmVjdGlvbl9jbG9zZWQoKQorCisKK2RlZiBfZWNob19jaGVja19wcm9jZWR1cmVfd2l0aF9jb2Rl
X2FuZF9yZWFzb24oY2xpZW50LCBjb2RlLCByZWFzb24pOgorICAgIGNsaWVudC5jb25uZWN0KCkK
KworICAgIGNsaWVudC5zZW5kX2Nsb3NlKGNvZGUsIHJlYXNvbikKKyAgICBjbGllbnQuYXNzZXJ0
X3JlY2VpdmVfY2xvc2UoY29kZSwgcmVhc29uKQorCisgICAgY2xpZW50LmFzc2VydF9jb25uZWN0
aW9uX2Nsb3NlZCgpCisKKworZGVmIF91bm1hc2tlZF9mcmFtZV9jaGVja19wcm9jZWR1cmUoY2xp
ZW50KToKKyAgICBjbGllbnQuY29ubmVjdCgpCisKKyAgICBjbGllbnQuc2VuZF9tZXNzYWdlKCd0
ZXN0JywgbWFzaz1GYWxzZSkKKyAgICBjbGllbnQuYXNzZXJ0X3JlY2VpdmVfY2xvc2UoY2xpZW50
X2Zvcl90ZXN0aW5nLlNUQVRVU19QUk9UT0NPTF9FUlJPUiwgJycpCisKKyAgICBjbGllbnQuYXNz
ZXJ0X2Nvbm5lY3Rpb25fY2xvc2VkKCkKKworCitkZWYgX211eF9lY2hvX2NoZWNrX3Byb2NlZHVy
ZShtdXhfY2xpZW50KToKKyAgICBtdXhfY2xpZW50LmNvbm5lY3QoKQorICAgIG11eF9jbGllbnQu
c2VuZF9mbG93X2NvbnRyb2woMSwgMTAyNCkKKworICAgIGxvZ2ljYWxfY2hhbm5lbF9vcHRpb25z
ID0gY2xpZW50X2Zvcl90ZXN0aW5nLkNsaWVudE9wdGlvbnMoKQorICAgIGxvZ2ljYWxfY2hhbm5l
bF9vcHRpb25zLnNlcnZlcl9ob3N0ID0gJ2xvY2FsaG9zdCcKKyAgICBsb2dpY2FsX2NoYW5uZWxf
b3B0aW9ucy5zZXJ2ZXJfcG9ydCA9IDgwCisgICAgbG9naWNhbF9jaGFubmVsX29wdGlvbnMub3Jp
Z2luID0gJ2h0dHA6Ly9sb2NhbGhvc3QnCisgICAgbG9naWNhbF9jaGFubmVsX29wdGlvbnMucmVz
b3VyY2UgPSAnL2VjaG8nCisgICAgbXV4X2NsaWVudC5hZGRfY2hhbm5lbCgyLCBsb2dpY2FsX2No
YW5uZWxfb3B0aW9ucykKKyAgICBtdXhfY2xpZW50LnNlbmRfZmxvd19jb250cm9sKDIsIDEwMjQp
CisKKyAgICBtdXhfY2xpZW50LnNlbmRfbWVzc2FnZSgyLCAndGVzdCcpCisgICAgbXV4X2NsaWVu
dC5hc3NlcnRfcmVjZWl2ZSgyLCAndGVzdCcpCisKKyAgICBtdXhfY2xpZW50LmFkZF9jaGFubmVs
KDMsIGxvZ2ljYWxfY2hhbm5lbF9vcHRpb25zKQorICAgIG11eF9jbGllbnQuc2VuZF9mbG93X2Nv
bnRyb2woMywgMTAyNCkKKworICAgIG11eF9jbGllbnQuc2VuZF9tZXNzYWdlKDIsICdoZWxsbycp
CisgICAgbXV4X2NsaWVudC5zZW5kX21lc3NhZ2UoMywgJ3dvcmxkJykKKyAgICBtdXhfY2xpZW50
LmFzc2VydF9yZWNlaXZlKDIsICdoZWxsbycpCisgICAgbXV4X2NsaWVudC5hc3NlcnRfcmVjZWl2
ZSgzLCAnd29ybGQnKQorCisgICAgIyBEb24ndCBzZW5kIGNsb3NlIG1lc3NhZ2Ugb24gY2hhbm5l
bCBpZCAxIHNvIHRoYXQgc2VydmVyLWluaXRpYXRlZAorICAgICMgY2xvc2luZyBoYW5kc2hha2Ug
d29uJ3Qgb2NjdXIuCisgICAgbXV4X2NsaWVudC5zZW5kX2Nsb3NlKDIpCisgICAgbXV4X2NsaWVu
dC5zZW5kX2Nsb3NlKDMpCisgICAgbXV4X2NsaWVudC5hc3NlcnRfcmVjZWl2ZV9jbG9zZSgyKQor
ICAgIG11eF9jbGllbnQuYXNzZXJ0X3JlY2VpdmVfY2xvc2UoMykKKworICAgIG11eF9jbGllbnQu
c2VuZF9waHlzaWNhbF9jb25uZWN0aW9uX2Nsb3NlKCkKKyAgICBtdXhfY2xpZW50LmFzc2VydF9w
aHlzaWNhbF9jb25uZWN0aW9uX3JlY2VpdmVfY2xvc2UoKQorCisKK2NsYXNzIEVuZFRvRW5kVGVz
dEJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIGVuZC10by1l
bmQgdGVzdHMgdGhhdCBsYXVuY2ggcHl3ZWJzb2NrZXQgc3RhbmRhbG9uZQorICAgIHNlcnZlciBh
cyBhIHNlcGFyYXRlIHByb2Nlc3MsIGNvbm5lY3QgdG8gaXQgdXNpbmcgdGhlIGNsaWVudF9mb3Jf
dGVzdGluZworICAgIG1vZHVsZSwgYW5kIGNoZWNrIGlmIHRoZSBzZXJ2ZXIgYmVoYXZlcyBjb3Jy
ZWN0bHkgYnkgZXhjaGFuZ2luZyBvcGVuaW5nCisgICAgaGFuZHNoYWtlIGFuZCBmcmFtZXMgb3Zl
ciBhIFRDUCBjb25uZWN0aW9uLgorICAgICIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAg
ICAgICBzZWxmLnNlcnZlcl9zdGRlcnIgPSBOb25lCisgICAgICAgIHNlbGYudG9wX2RpciA9IG9z
LnBhdGguam9pbihvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSwgJy4uJykKKyAgICAgICAgb3Mu
cHV0ZW52KCdQWVRIT05QQVRIJywgb3MucGF0aC5wYXRoc2VwLmpvaW4oc3lzLnBhdGgpKQorICAg
ICAgICBzZWxmLnN0YW5kYWxvbmVfY29tbWFuZCA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAg
IHNlbGYudG9wX2RpciwgJ21vZF9weXdlYnNvY2tldCcsICdzdGFuZGFsb25lLnB5JykKKyAgICAg
ICAgc2VsZi5kb2N1bWVudF9yb290ID0gb3MucGF0aC5qb2luKHNlbGYudG9wX2RpciwgJ2V4YW1w
bGUnKQorICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHMuYmluZCgoJ2xvY2Fs
aG9zdCcsIDApKQorICAgICAgICAoXywgc2VsZi50ZXN0X3BvcnQpID0gcy5nZXRzb2NrbmFtZSgp
CisgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBjbGllbnRfZm9y
X3Rlc3RpbmcuQ2xpZW50T3B0aW9ucygpCisgICAgICAgIHNlbGYuX29wdGlvbnMuc2VydmVyX2hv
c3QgPSAnbG9jYWxob3N0JworICAgICAgICBzZWxmLl9vcHRpb25zLm9yaWdpbiA9ICdodHRwOi8v
bG9jYWxob3N0JworICAgICAgICBzZWxmLl9vcHRpb25zLnJlc291cmNlID0gJy9lY2hvJworCisg
ICAgICAgICMgVE9ETyh0b3lvc2hpbSk6IEVsaW1pbmF0ZSBsYXVuY2hpbmcgYSBzdGFuZGFsb25l
IHNlcnZlciBvbiB1c2luZworICAgICAgICAjIGV4dGVybmFsIHNlcnZlci4KKworICAgICAgICBp
ZiBfdXNlX2V4dGVybmFsX3NlcnZlcjoKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VydmVy
X3BvcnQgPSBfZXh0ZXJuYWxfc2VydmVyX3BvcnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHNlbGYuX29wdGlvbnMuc2VydmVyX3BvcnQgPSBzZWxmLnRlc3RfcG9ydAorCisgICAgIyBUT0RP
KHR5b3NoaW5vKTogVXNlIHRlYXJEb3duIHRvIGtpbGwgdGhlIHNlcnZlci4KKworICAgIGRlZiBf
cnVuX3B5dGhvbl9jb21tYW5kKHNlbGYsIGNvbW1hbmRsaW5lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJy
PU5vbmUpOgorICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGVd
ICsgY29tbWFuZGxpbmUsIGNsb3NlX2Zkcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9c3Rkb3V0LCBzdGRlcnI9c3RkZXJyKQorCisgICAgZGVmIF9ydW5fc2Vy
dmVyKHNlbGYpOgorICAgICAgICBhcmdzID0gW3NlbGYuc3RhbmRhbG9uZV9jb21tYW5kLAorICAg
ICAgICAgICAgICAgICctSCcsICdsb2NhbGhvc3QnLAorICAgICAgICAgICAgICAgICctVicsICds
b2NhbGhvc3QnLAorICAgICAgICAgICAgICAgICctcCcsIHN0cihzZWxmLnRlc3RfcG9ydCksCisg
ICAgICAgICAgICAgICAgJy1QJywgc3RyKHNlbGYudGVzdF9wb3J0KSwKKyAgICAgICAgICAgICAg
ICAnLWQnLCBzZWxmLmRvY3VtZW50X3Jvb3RdCisKKyAgICAgICAgIyBJbmhlcml0IHRoZSBsZXZl
bCBzZXQgdG8gdGhlIHJvb3QgbG9nZ2VyIGJ5IHRlc3QgcnVubmVyLgorICAgICAgICByb290X2xv
Z2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgbG9nX2xldmVsID0gcm9vdF9sb2dn
ZXIuZ2V0RWZmZWN0aXZlTGV2ZWwoKQorICAgICAgICBpZiBsb2dfbGV2ZWwgIT0gbG9nZ2luZy5O
T1RTRVQ6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLS1sb2ctbGV2ZWwnKQorICAgICAgICAg
ICAgYXJncy5hcHBlbmQobG9nZ2luZy5nZXRMZXZlbE5hbWUobG9nX2xldmVsKS5sb3dlcigpKQor
CisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fcHl0aG9uX2NvbW1hbmQoYXJncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c2VsZi5zZXJ2ZXJfc3RkZXJy
KQorCisgICAgZGVmIF9raWxsX3Byb2Nlc3Moc2VsZiwgcGlkKToKKyAgICAgICAgaWYgc3lzLnBs
YXRmb3JtIGluICgnd2luMzInLCAnY3lnd2luJyk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNh
bGwoCisgICAgICAgICAgICAgICAgKCd0YXNra2lsbC5leGUnLCAnL2YnLCAnL3BpZCcsIHN0cihw
aWQpKSwgY2xvc2VfZmRzPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5raWxs
KHBpZCwgc2lnbmFsLlNJR0tJTEwpCisKKworY2xhc3MgRW5kVG9FbmRIeUJpVGVzdChFbmRUb0Vu
ZFRlc3RCYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIEVuZFRvRW5kVGVzdEJh
c2Uuc2V0VXAoc2VsZikKKworICAgIGRlZiBfcnVuX3Rlc3Rfd2l0aF9jbGllbnRfb3B0aW9ucyhz
ZWxmLCB0ZXN0X2Z1bmN0aW9uLCBvcHRpb25zKToKKyAgICAgICAgc2VydmVyID0gc2VsZi5fcnVu
X3NlcnZlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgVE9ETyh0eW9zaGlubyk6IGFk
ZCBzb21lIGxvZ2ljIHRvIHBvbGwgdGhlIHNlcnZlciB1bnRpbCBpdAorICAgICAgICAgICAgIyBi
ZWNvbWVzIHJlYWR5CisgICAgICAgICAgICB0aW1lLnNsZWVwKF9TRVJWRVJfV0FSTVVQX0lOX1NF
QykKKworICAgICAgICAgICAgY2xpZW50ID0gY2xpZW50X2Zvcl90ZXN0aW5nLmNyZWF0ZV9jbGll
bnQob3B0aW9ucykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZXN0X2Z1bmN0
aW9uKGNsaWVudCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgY2xpZW50
LmNsb3NlX3NvY2tldCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9raWxs
X3Byb2Nlc3Moc2VydmVyLnBpZCkKKworICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9mdW5j
dGlvbik6CisgICAgICAgIHNlbGYuX3J1bl90ZXN0X3dpdGhfY2xpZW50X29wdGlvbnModGVzdF9m
dW5jdGlvbiwgc2VsZi5fb3B0aW9ucykKKworICAgIGRlZiBfcnVuX2RlZmxhdGVfZnJhbWVfdGVz
dChzZWxmLCB0ZXN0X2Z1bmN0aW9uKToKKyAgICAgICAgc2VydmVyID0gc2VsZi5fcnVuX3NlcnZl
cigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoX1NFUlZFUl9XQVJNVVBf
SU5fU0VDKQorCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmVuYWJsZV9kZWZsYXRlX2ZyYW1l
KCkKKyAgICAgICAgICAgIGNsaWVudCA9IGNsaWVudF9mb3JfdGVzdGluZy5jcmVhdGVfY2xpZW50
KHNlbGYuX29wdGlvbnMpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGVzdF9m
dW5jdGlvbihjbGllbnQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGNs
aWVudC5jbG9zZV9zb2NrZXQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5f
a2lsbF9wcm9jZXNzKHNlcnZlci5waWQpCisKKyAgICBkZWYgX3J1bl9wZXJtZXNzYWdlX2RlZmxh
dGVfdGVzdCgKKyAgICAgICAgICAgIHNlbGYsIG9mZmVyLCByZXNwb25zZV9jaGVja2VyLCB0ZXN0
X2Z1bmN0aW9uKToKKyAgICAgICAgc2VydmVyID0gc2VsZi5fcnVuX3NlcnZlcigpCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoX1NFUlZFUl9XQVJNVVBfSU5fU0VDKQorCisg
ICAgICAgICAgICBzZWxmLl9vcHRpb25zLmV4dGVuc2lvbnMgKz0gb2ZmZXIKKyAgICAgICAgICAg
IHNlbGYuX29wdGlvbnMuY2hlY2tfcGVybWVzc2FnZV9kZWZsYXRlID0gcmVzcG9uc2VfY2hlY2tl
cgorICAgICAgICAgICAgY2xpZW50ID0gY2xpZW50X2Zvcl90ZXN0aW5nLmNyZWF0ZV9jbGllbnQo
c2VsZi5fb3B0aW9ucykKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNsaWVu
dC5jb25uZWN0KCkKKworICAgICAgICAgICAgICAgIGlmIHRlc3RfZnVuY3Rpb24gaXMgbm90IE5v
bmU6CisgICAgICAgICAgICAgICAgICAgIHRlc3RfZnVuY3Rpb24oY2xpZW50KQorCisgICAgICAg
ICAgICAgICAgY2xpZW50LmFzc2VydF9jb25uZWN0aW9uX2Nsb3NlZCgpCisgICAgICAgICAgICBm
aW5hbGx5OgorICAgICAgICAgICAgICAgIGNsaWVudC5jbG9zZV9zb2NrZXQoKQorICAgICAgICBm
aW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fa2lsbF9wcm9jZXNzKHNlcnZlci5waWQpCisKKyAg
ICBkZWYgX3J1bl9jbG9zZV93aXRoX2NvZGVfYW5kX3JlYXNvbl90ZXN0KHNlbGYsIHRlc3RfZnVu
Y3Rpb24sIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlYXNvbik6CisgICAgICAgIHNlcnZlciA9IHNlbGYuX3J1bl9zZXJ2ZXIoKQorICAg
ICAgICB0cnk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKF9TRVJWRVJfV0FSTVVQX0lOX1NFQykK
KworICAgICAgICAgICAgY2xpZW50ID0gY2xpZW50X2Zvcl90ZXN0aW5nLmNyZWF0ZV9jbGllbnQo
c2VsZi5fb3B0aW9ucykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZXN0X2Z1
bmN0aW9uKGNsaWVudCwgY29kZSwgcmVhc29uKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgICAgICBjbGllbnQuY2xvc2Vfc29ja2V0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgIHNlbGYuX2tpbGxfcHJvY2VzcyhzZXJ2ZXIucGlkKQorCisgICAgZGVmIF9ydW5faHR0
cF9mYWxsYmFja190ZXN0KHNlbGYsIG9wdGlvbnMsIHN0YXR1cyk6CisgICAgICAgIHNlcnZlciA9
IHNlbGYuX3J1bl9zZXJ2ZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0aW1lLnNsZWVw
KF9TRVJWRVJfV0FSTVVQX0lOX1NFQykKKworICAgICAgICAgICAgY2xpZW50ID0gY2xpZW50X2Zv
cl90ZXN0aW5nLmNyZWF0ZV9jbGllbnQob3B0aW9ucykKKyAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICBjbGllbnQuY29ubmVjdCgpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdD
b3VsZCBub3QgY2F0Y2ggSHR0cFN0YXR1c0V4Y2VwdGlvbicpCisgICAgICAgICAgICBleGNlcHQg
Y2xpZW50X2Zvcl90ZXN0aW5nLkh0dHBTdGF0dXNFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIGUuc3RhdHVzKQorICAgICAgICAgICAgZXhjZXB0
IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0NhdGNoIHVuZXhwZWN0
ZWQgZXhjZXB0aW9uJykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgY2xp
ZW50LmNsb3NlX3NvY2tldCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9r
aWxsX3Byb2Nlc3Moc2VydmVyLnBpZCkKKworICAgIGRlZiBfcnVuX211eF90ZXN0KHNlbGYsIHRl
c3RfZnVuY3Rpb24pOgorICAgICAgICBzZXJ2ZXIgPSBzZWxmLl9ydW5fc2VydmVyKCkKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgdGltZS5zbGVlcChfU0VSVkVSX1dBUk1VUF9JTl9TRUMpCisK
KyAgICAgICAgICAgIGNsaWVudCA9IG11eF9jbGllbnRfZm9yX3Rlc3RpbmcuTXV4Q2xpZW50KHNl
bGYuX29wdGlvbnMpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGVzdF9mdW5j
dGlvbihjbGllbnQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGNsaWVu
dC5jbG9zZV9zb2NrZXQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fa2ls
bF9wcm9jZXNzKHNlcnZlci5waWQpCisKKyAgICBkZWYgdGVzdF9lY2hvKHNlbGYpOgorICAgICAg
ICBzZWxmLl9ydW5fdGVzdChfZWNob19jaGVja19wcm9jZWR1cmUpCisKKyAgICBkZWYgdGVzdF9l
Y2hvX2JpbmFyeShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX3Rlc3QoX2VjaG9fY2hlY2tfcHJv
Y2VkdXJlX3dpdGhfYmluYXJ5KQorCisgICAgZGVmIHRlc3RfZWNob19zZXJ2ZXJfY2xvc2Uoc2Vs
Zik6CisgICAgICAgIHNlbGYuX3J1bl90ZXN0KF9lY2hvX2NoZWNrX3Byb2NlZHVyZV93aXRoX2dv
b2RieWUpCisKKyAgICBkZWYgdGVzdF91bm1hc2tlZF9mcmFtZShzZWxmKToKKyAgICAgICAgc2Vs
Zi5fcnVuX3Rlc3QoX3VubWFza2VkX2ZyYW1lX2NoZWNrX3Byb2NlZHVyZSkKKworICAgIGRlZiB0
ZXN0X2VjaG9fZGVmbGF0ZV9mcmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2RlZmxhdGVf
ZnJhbWVfdGVzdChfZWNob19jaGVja19wcm9jZWR1cmUpCisKKyAgICBkZWYgdGVzdF9lY2hvX2Rl
ZmxhdGVfZnJhbWVfc2VydmVyX2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fZGVmbGF0
ZV9mcmFtZV90ZXN0KAorICAgICAgICAgICAgX2VjaG9fY2hlY2tfcHJvY2VkdXJlX3dpdGhfZ29v
ZGJ5ZSkKKworICAgIGRlZiB0ZXN0X2VjaG9fcGVybWVzc2FnZV9kZWZsYXRlKHNlbGYpOgorICAg
ICAgICBkZWYgdGVzdF9mdW5jdGlvbihjbGllbnQpOgorICAgICAgICAgICAgIyBGcm9tIHRoZSBl
eGFtcGxlcyBpbiB0aGUgc3BlYy4KKyAgICAgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gPSAnXHhm
Mlx4NDhceGNkXHhjOVx4YzlceDA3XHgwMCcKKyAgICAgICAgICAgIGNsaWVudC5fc3RyZWFtLnNl
bmRfZGF0YSgKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZF9oZWxsbywKKyAgICAgICAg
ICAgICAgICAgICAgY2xpZW50X2Zvcl90ZXN0aW5nLk9QQ09ERV9URVhULAorICAgICAgICAgICAg
ICAgICAgICByc3YxPTEpCisgICAgICAgICAgICBjbGllbnQuX3N0cmVhbS5hc3NlcnRfcmVjZWl2
ZV9iaW5hcnkoCisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWRfaGVsbG8sCisgICAgICAg
ICAgICAgICAgICAgIG9wY29kZT1jbGllbnRfZm9yX3Rlc3RpbmcuT1BDT0RFX1RFWFQsCisgICAg
ICAgICAgICAgICAgICAgIHJzdjE9MSkKKworICAgICAgICAgICAgY2xpZW50LnNlbmRfY2xvc2Uo
KQorICAgICAgICAgICAgY2xpZW50LmFzc2VydF9yZWNlaXZlX2Nsb3NlKCkKKworICAgICAgICBk
ZWYgcmVzcG9uc2VfY2hlY2tlcihwYXJhbWV0ZXIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScsIHBhcmFtZXRlci5uYW1lKCkpCisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhbXSwgcGFyYW1ldGVyLmdldF9wYXJhbWV0ZXJzKCkpCisKKyAg
ICAgICAgc2VsZi5fcnVuX3Blcm1lc3NhZ2VfZGVmbGF0ZV90ZXN0KAorICAgICAgICAgICAgICAg
IFsncGVybWVzc2FnZS1kZWZsYXRlJ10sCisgICAgICAgICAgICAgICAgcmVzcG9uc2VfY2hlY2tl
ciwKKyAgICAgICAgICAgICAgICB0ZXN0X2Z1bmN0aW9uKQorCisgICAgZGVmIHRlc3RfZWNob19w
ZXJtZXNzYWdlX2RlZmxhdGVfdHdvX2ZyYW1lcyhzZWxmKToKKyAgICAgICAgZGVmIHRlc3RfZnVu
Y3Rpb24oY2xpZW50KToKKyAgICAgICAgICAgICMgRnJvbSB0aGUgZXhhbXBsZXMgaW4gdGhlIHNw
ZWMuCisgICAgICAgICAgICBjbGllbnQuX3N0cmVhbS5zZW5kX2RhdGEoCisgICAgICAgICAgICAg
ICAgICAgICdceGYyXHg0OFx4Y2QnLAorICAgICAgICAgICAgICAgICAgICBjbGllbnRfZm9yX3Rl
c3RpbmcuT1BDT0RFX1RFWFQsCisgICAgICAgICAgICAgICAgICAgIGVuZD1GYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgcnN2MT0xKQorICAgICAgICAgICAgY2xpZW50Ll9zdHJlYW0uc2VuZF9k
YXRhKAorICAgICAgICAgICAgICAgICAgICAnXHhjOVx4YzlceDA3XHgwMCcsCisgICAgICAgICAg
ICAgICAgICAgIGNsaWVudF9mb3JfdGVzdGluZy5PUENPREVfVEVYVCkKKyAgICAgICAgICAgIGNs
aWVudC5fc3RyZWFtLmFzc2VydF9yZWNlaXZlX2JpbmFyeSgKKyAgICAgICAgICAgICAgICAgICAg
J1x4ZjJceDQ4XHhjZFx4YzlceGM5XHgwN1x4MDAnLAorICAgICAgICAgICAgICAgICAgICBvcGNv
ZGU9Y2xpZW50X2Zvcl90ZXN0aW5nLk9QQ09ERV9URVhULAorICAgICAgICAgICAgICAgICAgICBy
c3YxPTEpCisKKyAgICAgICAgICAgIGNsaWVudC5zZW5kX2Nsb3NlKCkKKyAgICAgICAgICAgIGNs
aWVudC5hc3NlcnRfcmVjZWl2ZV9jbG9zZSgpCisKKyAgICAgICAgZGVmIHJlc3BvbnNlX2NoZWNr
ZXIocGFyYW1ldGVyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdwZXJtZXNzYWdl
LWRlZmxhdGUnLCBwYXJhbWV0ZXIubmFtZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoW10sIHBhcmFtZXRlci5nZXRfcGFyYW1ldGVycygpKQorCisgICAgICAgIHNlbGYuX3J1bl9w
ZXJtZXNzYWdlX2RlZmxhdGVfdGVzdCgKKyAgICAgICAgICAgICAgICBbJ3Blcm1lc3NhZ2UtZGVm
bGF0ZSddLAorICAgICAgICAgICAgICAgIHJlc3BvbnNlX2NoZWNrZXIsCisgICAgICAgICAgICAg
ICAgdGVzdF9mdW5jdGlvbikKKworICAgIGRlZiB0ZXN0X2VjaG9fcGVybWVzc2FnZV9kZWZsYXRl
X3R3b19tZXNzYWdlcyhzZWxmKToKKyAgICAgICAgZGVmIHRlc3RfZnVuY3Rpb24oY2xpZW50KToK
KyAgICAgICAgICAgICMgRnJvbSB0aGUgZXhhbXBsZXMgaW4gdGhlIHNwZWMuCisgICAgICAgICAg
ICBjbGllbnQuX3N0cmVhbS5zZW5kX2RhdGEoCisgICAgICAgICAgICAgICAgICAgICdceGYyXHg0
OFx4Y2RceGM5XHhjOVx4MDdceDAwJywKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50X2Zvcl90
ZXN0aW5nLk9QQ09ERV9URVhULAorICAgICAgICAgICAgICAgICAgICByc3YxPTEpCisgICAgICAg
ICAgICBjbGllbnQuX3N0cmVhbS5zZW5kX2RhdGEoCisgICAgICAgICAgICAgICAgICAgICdceGYy
XHgwMFx4MTFceDAwXHgwMCcsCisgICAgICAgICAgICAgICAgICAgIGNsaWVudF9mb3JfdGVzdGlu
Zy5PUENPREVfVEVYVCwKKyAgICAgICAgICAgICAgICAgICAgcnN2MT0xKQorICAgICAgICAgICAg
Y2xpZW50Ll9zdHJlYW0uYXNzZXJ0X3JlY2VpdmVfYmluYXJ5KAorICAgICAgICAgICAgICAgICAg
ICAnXHhmMlx4NDhceGNkXHhjOVx4YzlceDA3XHgwMCcsCisgICAgICAgICAgICAgICAgICAgIG9w
Y29kZT1jbGllbnRfZm9yX3Rlc3RpbmcuT1BDT0RFX1RFWFQsCisgICAgICAgICAgICAgICAgICAg
IHJzdjE9MSkKKyAgICAgICAgICAgIGNsaWVudC5fc3RyZWFtLmFzc2VydF9yZWNlaXZlX2JpbmFy
eSgKKyAgICAgICAgICAgICAgICAgICAgJ1x4ZjJceDAwXHgxMVx4MDBceDAwJywKKyAgICAgICAg
ICAgICAgICAgICAgb3Bjb2RlPWNsaWVudF9mb3JfdGVzdGluZy5PUENPREVfVEVYVCwKKyAgICAg
ICAgICAgICAgICAgICAgcnN2MT0xKQorCisgICAgICAgICAgICBjbGllbnQuc2VuZF9jbG9zZSgp
CisgICAgICAgICAgICBjbGllbnQuYXNzZXJ0X3JlY2VpdmVfY2xvc2UoKQorCisgICAgICAgIGRl
ZiByZXNwb25zZV9jaGVja2VyKHBhcmFtZXRlcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFscygncGVybWVzc2FnZS1kZWZsYXRlJywgcGFyYW1ldGVyLm5hbWUoKSkKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKFtdLCBwYXJhbWV0ZXIuZ2V0X3BhcmFtZXRlcnMoKSkKKworICAg
ICAgICBzZWxmLl9ydW5fcGVybWVzc2FnZV9kZWZsYXRlX3Rlc3QoCisgICAgICAgICAgICAgICAg
WydwZXJtZXNzYWdlLWRlZmxhdGUnXSwKKyAgICAgICAgICAgICAgICByZXNwb25zZV9jaGVja2Vy
LAorICAgICAgICAgICAgICAgIHRlc3RfZnVuY3Rpb24pCisKKyAgICBkZWYgdGVzdF9lY2hvX3Bl
cm1lc3NhZ2VfZGVmbGF0ZV90d29fbXNnc19zMmNfbm9fY29udGV4dF90YWtlb3ZlcihzZWxmKToK
KyAgICAgICAgZGVmIHRlc3RfZnVuY3Rpb24oY2xpZW50KToKKyAgICAgICAgICAgICMgRnJvbSB0
aGUgZXhhbXBsZXMgaW4gdGhlIHNwZWMuCisgICAgICAgICAgICBjbGllbnQuX3N0cmVhbS5zZW5k
X2RhdGEoCisgICAgICAgICAgICAgICAgICAgICdceGYyXHg0OFx4Y2RceGM5XHhjOVx4MDdceDAw
JywKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50X2Zvcl90ZXN0aW5nLk9QQ09ERV9URVhULAor
ICAgICAgICAgICAgICAgICAgICByc3YxPTEpCisgICAgICAgICAgICBjbGllbnQuX3N0cmVhbS5z
ZW5kX2RhdGEoCisgICAgICAgICAgICAgICAgICAgICdceGYyXHgwMFx4MTFceDAwXHgwMCcsCisg
ICAgICAgICAgICAgICAgICAgIGNsaWVudF9mb3JfdGVzdGluZy5PUENPREVfVEVYVCwKKyAgICAg
ICAgICAgICAgICAgICAgcnN2MT0xKQorICAgICAgICAgICAgY2xpZW50Ll9zdHJlYW0uYXNzZXJ0
X3JlY2VpdmVfYmluYXJ5KAorICAgICAgICAgICAgICAgICAgICAnXHhmMlx4NDhceGNkXHhjOVx4
YzlceDA3XHgwMCcsCisgICAgICAgICAgICAgICAgICAgIG9wY29kZT1jbGllbnRfZm9yX3Rlc3Rp
bmcuT1BDT0RFX1RFWFQsCisgICAgICAgICAgICAgICAgICAgIHJzdjE9MSkKKyAgICAgICAgICAg
IGNsaWVudC5fc3RyZWFtLmFzc2VydF9yZWNlaXZlX2JpbmFyeSgKKyAgICAgICAgICAgICAgICAg
ICAgJ1x4ZjJceDQ4XHhjZFx4YzlceGM5XHgwN1x4MDAnLAorICAgICAgICAgICAgICAgICAgICBv
cGNvZGU9Y2xpZW50X2Zvcl90ZXN0aW5nLk9QQ09ERV9URVhULAorICAgICAgICAgICAgICAgICAg
ICByc3YxPTEpCisKKyAgICAgICAgICAgIGNsaWVudC5zZW5kX2Nsb3NlKCkKKyAgICAgICAgICAg
IGNsaWVudC5hc3NlcnRfcmVjZWl2ZV9jbG9zZSgpCisKKyAgICAgICAgZGVmIHJlc3BvbnNlX2No
ZWNrZXIocGFyYW1ldGVyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdwZXJtZXNz
YWdlLWRlZmxhdGUnLCBwYXJhbWV0ZXIubmFtZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoWygnczJjX25vX2NvbnRleHRfdGFrZW92ZXInLCBOb25lKV0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuZ2V0X3BhcmFtZXRlcnMoKSkKKworICAgICAgICBz
ZWxmLl9ydW5fcGVybWVzc2FnZV9kZWZsYXRlX3Rlc3QoCisgICAgICAgICAgICAgICAgWydwZXJt
ZXNzYWdlLWRlZmxhdGU7IHMyY19ub19jb250ZXh0X3Rha2VvdmVyJ10sCisgICAgICAgICAgICAg
ICAgcmVzcG9uc2VfY2hlY2tlciwKKyAgICAgICAgICAgICAgICB0ZXN0X2Z1bmN0aW9uKQorCisg
ICAgZGVmIHRlc3RfZWNob19wZXJtZXNzYWdlX2RlZmxhdGVfcHJlZmVyZW5jZShzZWxmKToKKyAg
ICAgICAgZGVmIHRlc3RfZnVuY3Rpb24oY2xpZW50KToKKyAgICAgICAgICAgICMgRnJvbSB0aGUg
ZXhhbXBsZXMgaW4gdGhlIHNwZWMuCisgICAgICAgICAgICBjb21wcmVzc2VkX2hlbGxvID0gJ1x4
ZjJceDQ4XHhjZFx4YzlceGM5XHgwN1x4MDAnCisgICAgICAgICAgICBjbGllbnQuX3N0cmVhbS5z
ZW5kX2RhdGEoCisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWRfaGVsbG8sCisgICAgICAg
ICAgICAgICAgICAgIGNsaWVudF9mb3JfdGVzdGluZy5PUENPREVfVEVYVCwKKyAgICAgICAgICAg
ICAgICAgICAgcnN2MT0xKQorICAgICAgICAgICAgY2xpZW50Ll9zdHJlYW0uYXNzZXJ0X3JlY2Vp
dmVfYmluYXJ5KAorICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2VkX2hlbGxvLAorICAgICAg
ICAgICAgICAgICAgICBvcGNvZGU9Y2xpZW50X2Zvcl90ZXN0aW5nLk9QQ09ERV9URVhULAorICAg
ICAgICAgICAgICAgICAgICByc3YxPTEpCisKKyAgICAgICAgICAgIGNsaWVudC5zZW5kX2Nsb3Nl
KCkKKyAgICAgICAgICAgIGNsaWVudC5hc3NlcnRfcmVjZWl2ZV9jbG9zZSgpCisKKyAgICAgICAg
ZGVmIHJlc3BvbnNlX2NoZWNrZXIocGFyYW1ldGVyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKCdwZXJtZXNzYWdlLWRlZmxhdGUnLCBwYXJhbWV0ZXIubmFtZSgpKQorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoW10sIHBhcmFtZXRlci5nZXRfcGFyYW1ldGVycygpKQorCisg
ICAgICAgIHNlbGYuX3J1bl9wZXJtZXNzYWdlX2RlZmxhdGVfdGVzdCgKKyAgICAgICAgICAgICAg
ICBbJ3Blcm1lc3NhZ2UtZGVmbGF0ZScsICdkZWZsYXRlLWZyYW1lJ10sCisgICAgICAgICAgICAg
ICAgcmVzcG9uc2VfY2hlY2tlciwKKyAgICAgICAgICAgICAgICB0ZXN0X2Z1bmN0aW9uKQorCisg
ICAgZGVmIHRlc3RfZWNob19wZXJtZXNzYWdlX2RlZmxhdGVfd2l0aF9wYXJhbWV0ZXJzKHNlbGYp
OgorICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbihjbGllbnQpOgorICAgICAgICAgICAgIyBGcm9t
IHRoZSBleGFtcGxlcyBpbiB0aGUgc3BlYy4KKyAgICAgICAgICAgIGNvbXByZXNzZWRfaGVsbG8g
PSAnXHhmMlx4NDhceGNkXHhjOVx4YzlceDA3XHgwMCcKKyAgICAgICAgICAgIGNsaWVudC5fc3Ry
ZWFtLnNlbmRfZGF0YSgKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZF9oZWxsbywKKyAg
ICAgICAgICAgICAgICAgICAgY2xpZW50X2Zvcl90ZXN0aW5nLk9QQ09ERV9URVhULAorICAgICAg
ICAgICAgICAgICAgICByc3YxPTEpCisgICAgICAgICAgICBjbGllbnQuX3N0cmVhbS5hc3NlcnRf
cmVjZWl2ZV9iaW5hcnkoCisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWRfaGVsbG8sCisg
ICAgICAgICAgICAgICAgICAgIG9wY29kZT1jbGllbnRfZm9yX3Rlc3RpbmcuT1BDT0RFX1RFWFQs
CisgICAgICAgICAgICAgICAgICAgIHJzdjE9MSkKKworICAgICAgICAgICAgY2xpZW50LnNlbmRf
Y2xvc2UoKQorICAgICAgICAgICAgY2xpZW50LmFzc2VydF9yZWNlaXZlX2Nsb3NlKCkKKworICAg
ICAgICBkZWYgcmVzcG9uc2VfY2hlY2tlcihwYXJhbWV0ZXIpOgorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScsIHBhcmFtZXRlci5uYW1lKCkpCisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbKCdzMmNfbWF4X3dpbmRvd19iaXRzJywgJzEwJyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdzMmNfbm9fY29udGV4dF90YWtlb3Zl
cicsIE5vbmUpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci5nZXRf
cGFyYW1ldGVycygpKQorCisgICAgICAgIHNlbGYuX3J1bl9wZXJtZXNzYWdlX2RlZmxhdGVfdGVz
dCgKKyAgICAgICAgICAgICAgICBbJ3Blcm1lc3NhZ2UtZGVmbGF0ZTsgczJjX21heF93aW5kb3df
Yml0cz0xMDsgJworICAgICAgICAgICAgICAgICAnczJjX25vX2NvbnRleHRfdGFrZW92ZXInXSwK
KyAgICAgICAgICAgICAgICByZXNwb25zZV9jaGVja2VyLAorICAgICAgICAgICAgICAgIHRlc3Rf
ZnVuY3Rpb24pCisKKyAgICBkZWYgdGVzdF9lY2hvX3Blcm1lc3NhZ2VfZGVmbGF0ZV93aXRoX2Jh
ZF9zMmNfbWF4X3dpbmRvd19iaXRzKHNlbGYpOgorICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbihj
bGllbnQpOgorICAgICAgICAgICAgY2xpZW50LnNlbmRfY2xvc2UoKQorICAgICAgICAgICAgY2xp
ZW50LmFzc2VydF9yZWNlaXZlX2Nsb3NlKCkKKworICAgICAgICBkZWYgcmVzcG9uc2VfY2hlY2tl
cihwYXJhbWV0ZXIpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmV4cGVjdGVkIGFj
Y2VwdGFuY2Ugb2YgcGVybWVzc2FnZS1kZWZsYXRlJykKKworICAgICAgICBzZWxmLl9ydW5fcGVy
bWVzc2FnZV9kZWZsYXRlX3Rlc3QoCisgICAgICAgICAgICAgICAgWydwZXJtZXNzYWdlLWRlZmxh
dGU7IHMyY19tYXhfd2luZG93X2JpdHM9MzAwMDAwMCddLAorICAgICAgICAgICAgICAgIHJlc3Bv
bnNlX2NoZWNrZXIsCisgICAgICAgICAgICAgICAgdGVzdF9mdW5jdGlvbikKKworICAgIGRlZiB0
ZXN0X2VjaG9fcGVybWVzc2FnZV9kZWZsYXRlX3dpdGhfYmFkX3MyY19tYXhfd2luZG93X2JpdHMo
c2VsZik6CisgICAgICAgIGRlZiB0ZXN0X2Z1bmN0aW9uKGNsaWVudCk6CisgICAgICAgICAgICBj
bGllbnQuc2VuZF9jbG9zZSgpCisgICAgICAgICAgICBjbGllbnQuYXNzZXJ0X3JlY2VpdmVfY2xv
c2UoKQorCisgICAgICAgIGRlZiByZXNwb25zZV9jaGVja2VyKHBhcmFtZXRlcik6CisgICAgICAg
ICAgICByYWlzZSBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQgYWNjZXB0YW5jZSBvZiBwZXJtZXNzYWdl
LWRlZmxhdGUnKQorCisgICAgICAgIHNlbGYuX3J1bl9wZXJtZXNzYWdlX2RlZmxhdGVfdGVzdCgK
KyAgICAgICAgICAgICAgICBbJ3Blcm1lc3NhZ2UtZGVmbGF0ZTsgczJjX21heF93aW5kb3dfYml0
cz0zMDAwMDAwJ10sCisgICAgICAgICAgICAgICAgcmVzcG9uc2VfY2hlY2tlciwKKyAgICAgICAg
ICAgICAgICB0ZXN0X2Z1bmN0aW9uKQorCisgICAgZGVmIHRlc3RfZWNob19wZXJtZXNzYWdlX2Rl
ZmxhdGVfd2l0aF91bmRlZmluZWRfcGFyYW1ldGVyKHNlbGYpOgorICAgICAgICBkZWYgdGVzdF9m
dW5jdGlvbihjbGllbnQpOgorICAgICAgICAgICAgY2xpZW50LnNlbmRfY2xvc2UoKQorICAgICAg
ICAgICAgY2xpZW50LmFzc2VydF9yZWNlaXZlX2Nsb3NlKCkKKworICAgICAgICBkZWYgcmVzcG9u
c2VfY2hlY2tlcihwYXJhbWV0ZXIpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmV4
cGVjdGVkIGFjY2VwdGFuY2Ugb2YgcGVybWVzc2FnZS1kZWZsYXRlJykKKworICAgICAgICBzZWxm
Ll9ydW5fcGVybWVzc2FnZV9kZWZsYXRlX3Rlc3QoCisgICAgICAgICAgICAgICAgWydwZXJtZXNz
YWdlLWRlZmxhdGU7IGZvbz1iYXInXSwKKyAgICAgICAgICAgICAgICByZXNwb25zZV9jaGVja2Vy
LAorICAgICAgICAgICAgICAgIHRlc3RfZnVuY3Rpb24pCisKKyAgICBkZWYgdGVzdF9lY2hvX2Ns
b3NlX3dpdGhfY29kZV9hbmRfcmVhc29uKHNlbGYpOgorICAgICAgICBzZWxmLl9vcHRpb25zLnJl
c291cmNlID0gJy9jbG9zZScKKyAgICAgICAgc2VsZi5fcnVuX2Nsb3NlX3dpdGhfY29kZV9hbmRf
cmVhc29uX3Rlc3QoCisgICAgICAgICAgICBfZWNob19jaGVja19wcm9jZWR1cmVfd2l0aF9jb2Rl
X2FuZF9yZWFzb24sIDMzMzMsICdzdW5zdW5zdW5zdW4nKQorCisgICAgZGVmIHRlc3RfZWNob19j
bG9zZV93aXRoX2VtcHR5X2JvZHkoc2VsZik6CisgICAgICAgIHNlbGYuX29wdGlvbnMucmVzb3Vy
Y2UgPSAnL2Nsb3NlJworICAgICAgICBzZWxmLl9ydW5fY2xvc2Vfd2l0aF9jb2RlX2FuZF9yZWFz
b25fdGVzdCgKKyAgICAgICAgICAgIF9lY2hvX2NoZWNrX3Byb2NlZHVyZV93aXRoX2NvZGVfYW5k
X3JlYXNvbiwgTm9uZSwgJycpCisKKyAgICBkZWYgdGVzdF9tdXhfZWNobyhzZWxmKToKKyAgICAg
ICAgc2VsZi5fcnVuX211eF90ZXN0KF9tdXhfZWNob19jaGVja19wcm9jZWR1cmUpCisKKyAgICBk
ZWYgdGVzdF9jbG9zZV9vbl9wcm90b2NvbF9lcnJvcihzZWxmKToKKyAgICAgICAgIiIiVGVzdHMg
dGhhdCB0aGUgc2VydmVyIHNlbmRzIGEgY2xvc2UgZnJhbWUgd2l0aCBwcm90b2NvbCBlcnJvciBz
dGF0dXMKKyAgICAgICAgY29kZSB3aGVuIHRoZSBjbGllbnQgc2VuZHMgZGF0YSB3aXRoIHNvbWUg
cHJvdG9jb2wgZXJyb3IuCisgICAgICAgICIiIgorCisgICAgICAgIGRlZiB0ZXN0X2Z1bmN0aW9u
KGNsaWVudCk6CisgICAgICAgICAgICBjbGllbnQuY29ubmVjdCgpCisKKyAgICAgICAgICAgICMg
SW50ZXJtZWRpYXRlIGZyYW1lIHdpdGhvdXQgYW55IHByZWNlZGluZyBzdGFydCBvZiBmcmFnbWVu
dGF0aW9uCisgICAgICAgICAgICAjIGZyYW1lLgorICAgICAgICAgICAgY2xpZW50LnNlbmRfZnJh
bWVfb2ZfYXJiaXRyYXJ5X2J5dGVzKCdceDgwXHg4MCcsICcnKQorICAgICAgICAgICAgY2xpZW50
LmFzc2VydF9yZWNlaXZlX2Nsb3NlKAorICAgICAgICAgICAgICAgIGNsaWVudF9mb3JfdGVzdGlu
Zy5TVEFUVVNfUFJPVE9DT0xfRVJST1IpCisKKyAgICAgICAgc2VsZi5fcnVuX3Rlc3QodGVzdF9m
dW5jdGlvbikKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29uX3Vuc3VwcG9ydGVkX2ZyYW1lKHNlbGYp
OgorICAgICAgICAiIiJUZXN0cyB0aGF0IHRoZSBzZXJ2ZXIgc2VuZHMgYSBjbG9zZSBmcmFtZSB3
aXRoIHVuc3VwcG9ydGVkIG9wZXJhdGlvbgorICAgICAgICBzdGF0dXMgY29kZSB3aGVuIHRoZSBj
bGllbnQgc2VuZHMgZGF0YSBhc2tpbmcgc29tZSBvcGVyYXRpb24gdGhhdCBpcworICAgICAgICBu
b3Qgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIuCisgICAgICAgICIiIgorCisgICAgICAgIGRlZiB0
ZXN0X2Z1bmN0aW9uKGNsaWVudCk6CisgICAgICAgICAgICBjbGllbnQuY29ubmVjdCgpCisKKyAg
ICAgICAgICAgICMgVGV4dCBmcmFtZSB3aXRoIFJTVjMgYml0IHJhaXNlZC4KKyAgICAgICAgICAg
IGNsaWVudC5zZW5kX2ZyYW1lX29mX2FyYml0cmFyeV9ieXRlcygnXHg5MVx4ODAnLCAnJykKKyAg
ICAgICAgICAgIGNsaWVudC5hc3NlcnRfcmVjZWl2ZV9jbG9zZSgKKyAgICAgICAgICAgICAgICBj
bGllbnRfZm9yX3Rlc3RpbmcuU1RBVFVTX1VOU1VQUE9SVEVEX0RBVEEpCisKKyAgICAgICAgc2Vs
Zi5fcnVuX3Rlc3QodGVzdF9mdW5jdGlvbikKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29uX2ludmFs
aWRfZnJhbWUoc2VsZik6CisgICAgICAgICIiIlRlc3RzIHRoYXQgdGhlIHNlcnZlciBzZW5kcyBh
IGNsb3NlIGZyYW1lIHdpdGggaW52YWxpZCBmcmFtZSBwYXlsb2FkCisgICAgICAgIGRhdGEgc3Rh
dHVzIGNvZGUgd2hlbiB0aGUgY2xpZW50IHNlbmRzIGFuIGludmFsaWQgZnJhbWUgbGlrZSBjb250
YWluaW5nCisgICAgICAgIGludmFsaWQgVVRGLTggY2hhcmFjdGVyLgorICAgICAgICAiIiIKKwor
ICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbihjbGllbnQpOgorICAgICAgICAgICAgY2xpZW50LmNv
bm5lY3QoKQorCisgICAgICAgICAgICAjIFRleHQgZnJhbWUgd2l0aCBpbnZhbGlkIFVURi04IHN0
cmluZy4KKyAgICAgICAgICAgIGNsaWVudC5zZW5kX21lc3NhZ2UoJ1x4ODAnLCByYXc9VHJ1ZSkK
KyAgICAgICAgICAgIGNsaWVudC5hc3NlcnRfcmVjZWl2ZV9jbG9zZSgKKyAgICAgICAgICAgICAg
ICBjbGllbnRfZm9yX3Rlc3RpbmcuU1RBVFVTX0lOVkFMSURfRlJBTUVfUEFZTE9BRF9EQVRBKQor
CisgICAgICAgIHNlbGYuX3J1bl90ZXN0KHRlc3RfZnVuY3Rpb24pCisKKyAgICBkZWYgdGVzdF9j
bG9zZV9vbl9pbnRlcm5hbF9lbmRwb2ludF9lcnJvcihzZWxmKToKKyAgICAgICAgIiIiVGVzdHMg
dGhhdCB0aGUgc2VydmVyIHNlbmRzIGEgY2xvc2UgZnJhbWUgd2l0aCBpbnRlcm5hbCBlbmRwb2lu
dAorICAgICAgICBlcnJvciBzdGF0dXMgY29kZSB3aGVuIHRoZSBoYW5kbGVyIGRvZXMgYmFkIG9w
ZXJhdGlvbi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXNvdXJjZSA9
ICcvaW50ZXJuYWxfZXJyb3InCisKKyAgICAgICAgZGVmIHRlc3RfZnVuY3Rpb24oY2xpZW50KToK
KyAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KCkKKyAgICAgICAgICAgIGNsaWVudC5hc3NlcnRf
cmVjZWl2ZV9jbG9zZSgKKyAgICAgICAgICAgICAgICBjbGllbnRfZm9yX3Rlc3RpbmcuU1RBVFVT
X0lOVEVSTkFMX0VORFBPSU5UX0VSUk9SKQorCisgICAgICAgIHNlbGYuX3J1bl90ZXN0KHRlc3Rf
ZnVuY3Rpb24pCisKKyAgICAjIFRPRE8odG95b3NoaW0pOiBBZGQgdGVzdHMgdG8gdmVyaWZ5IGlu
dmFsaWQgYWJzb2x1dGUgdXJpIGhhbmRsaW5nIGxpa2UKKyAgICAjIGhvc3QgdW5tYXRjaCwgcG9y
dCB1bm1hdGNoIGFuZCBpbnZhbGlkIHBvcnQgZGVzY3JpcHRpb24gKCc6JyB3aXRob3V0IHBvcnQK
KyAgICAjIG51bWJlcikuCisKKyAgICBkZWYgdGVzdF9hYnNvbHV0ZV91cmkoc2VsZik6CisgICAg
ICAgICIiIlRlc3RzIGFic29sdXRlIHVyaSByZXF1ZXN0LiIiIgorCisgICAgICAgIG9wdGlvbnMg
PSBzZWxmLl9vcHRpb25zCisgICAgICAgIG9wdGlvbnMucmVzb3VyY2UgPSAnd3M6Ly9sb2NhbGhv
c3Q6JWQvZWNobycgJSBvcHRpb25zLnNlcnZlcl9wb3J0CisgICAgICAgIHNlbGYuX3J1bl90ZXN0
X3dpdGhfY2xpZW50X29wdGlvbnMoX2VjaG9fY2hlY2tfcHJvY2VkdXJlLCBvcHRpb25zKQorCisg
ICAgZGVmIHRlc3Rfb3JpZ2luX2NoZWNrKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBodHRwIGZh
bGxiYWNrIG9uIG9yaWdpbiBjaGVjayBmYWlsLiIiIgorCisgICAgICAgIG9wdGlvbnMgPSBzZWxm
Ll9vcHRpb25zCisgICAgICAgIG9wdGlvbnMucmVzb3VyY2UgPSAnL29yaWdpbl9jaGVjaycKKyAg
ICAgICAgIyBTZXJ2ZXIgc2hvd3Mgd2FybmluZyBtZXNzYWdlIGZvciBodHRwIDQwMyBmYWxsYmFj
ay4gVGhpcyB3YXJuaW5nCisgICAgICAgICMgbWVzc2FnZSBpcyBjb25mdXNpbmcuIEZvbGxvd2lu
ZyBwaXBlIGRpc3Bvc2VzIHdhcm5pbmcgbWVzc2FnZXMuCisgICAgICAgIHNlbGYuc2VydmVyX3N0
ZGVyciA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICBzZWxmLl9ydW5faHR0cF9mYWxsYmFja190
ZXN0KG9wdGlvbnMsIDQwMykKKworICAgIGRlZiB0ZXN0X3ZlcnNpb25fY2hlY2soc2VsZik6Cisg
ICAgICAgICIiIlRlc3RzIGh0dHAgZmFsbGJhY2sgb24gdmVyc2lvbiBjaGVjayBmYWlsLiIiIgor
CisgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9vcHRpb25zCisgICAgICAgIG9wdGlvbnMudmVyc2lv
biA9IDk5CisgICAgICAgIHNlbGYuX3J1bl9odHRwX2ZhbGxiYWNrX3Rlc3Qob3B0aW9ucywgNDAw
KQorCisKK2NsYXNzIEVuZFRvRW5kSHlCaTAwVGVzdChFbmRUb0VuZFRlc3RCYXNlKToKKyAgICBk
ZWYgc2V0VXAoc2VsZik6CisgICAgICAgIEVuZFRvRW5kVGVzdEJhc2Uuc2V0VXAoc2VsZikKKwor
ICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9mdW5jdGlvbik6CisgICAgICAgIHNlcnZlciA9
IHNlbGYuX3J1bl9zZXJ2ZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0aW1lLnNsZWVw
KF9TRVJWRVJfV0FSTVVQX0lOX1NFQykKKworICAgICAgICAgICAgY2xpZW50ID0gY2xpZW50X2Zv
cl90ZXN0aW5nLmNyZWF0ZV9jbGllbnRfaHliaTAwKHNlbGYuX29wdGlvbnMpCisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgdGVzdF9mdW5jdGlvbihjbGllbnQpCisgICAgICAgICAg
ICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGNsaWVudC5jbG9zZV9zb2NrZXQoKQorICAgICAg
ICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fa2lsbF9wcm9jZXNzKHNlcnZlci5waWQpCisK
KyAgICBkZWYgdGVzdF9lY2hvKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fdGVzdChfZWNob19j
aGVja19wcm9jZWR1cmUpCisKKyAgICBkZWYgdGVzdF9lY2hvX3NlcnZlcl9jbG9zZShzZWxmKToK
KyAgICAgICAgc2VsZi5fcnVuX3Rlc3QoX2VjaG9fY2hlY2tfcHJvY2VkdXJlX3dpdGhfZ29vZGJ5
ZSkKKworCitjbGFzcyBFbmRUb0VuZFRlc3RXaXRoRWNob0NsaWVudChFbmRUb0VuZFRlc3RCYXNl
KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIEVuZFRvRW5kVGVzdEJhc2Uuc2V0VXAo
c2VsZikKKworICAgIGRlZiBfY2hlY2tfZXhhbXBsZV9lY2hvX2NsaWVudF9yZXN1bHQoCisgICAg
ICAgIHNlbGYsIGV4cGVjdGVkLCBzdGRvdXRkYXRhLCBzdGRlcnJkYXRhKToKKyAgICAgICAgYWN0
dWFsID0gc3Rkb3V0ZGF0YS5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgaWYgYWN0dWFsICE9IGV4
cGVjdGVkOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmV4cGVjdGVkIHJlc3VsdCBv
biBleGFtcGxlIGVjaG8gY2xpZW50OiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVy
IChleHBlY3RlZCkgdnMgJXIgKGFjdHVhbCknICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoZXhwZWN0ZWQsIGFjdHVhbCkpCisgICAgICAgIGlmIHN0ZGVycmRhdGEgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZSBv
biBleGFtcGxlIGVjaG8gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbGllbnQ6ICVy
JyAlIHN0ZGVycmRhdGEpCisKKyAgICBkZWYgdGVzdF9leGFtcGxlX2VjaG9fY2xpZW50KHNlbGYp
OgorICAgICAgICAiIiJUZXN0cyB0aGF0IHRoZSBlY2hvX2NsaWVudC5weSBleGFtcGxlIGNhbiB0
YWxrIHdpdGggdGhlIHNlcnZlci4iIiIKKworICAgICAgICBzZXJ2ZXIgPSBzZWxmLl9ydW5fc2Vy
dmVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGltZS5zbGVlcChfU0VSVkVSX1dBUk1V
UF9JTl9TRUMpCisKKyAgICAgICAgICAgIGNsaWVudF9jb21tYW5kID0gb3MucGF0aC5qb2luKAor
ICAgICAgICAgICAgICAgIHNlbGYudG9wX2RpciwgJ2V4YW1wbGUnLCAnZWNob19jbGllbnQucHkn
KQorCisgICAgICAgICAgICAjIEV4cGVjdGVkIG91dHB1dCBmb3IgdGhlIGRlZmF1bHQgbWVzc2Fn
ZXMuCisgICAgICAgICAgICBkZWZhdWx0X2V4cGVjdGF0aW9uID0gKCdTZW5kOiBIZWxsb1xuJyAn
UmVjdjogSGVsbG9cbicKKyAgICAgICAgICAgICAgICB1J1NlbmQ6IFx1NjVlNVx1NjcyY1xuJyB1
J1JlY3Y6IFx1NjVlNVx1NjcyY1xuJworICAgICAgICAgICAgICAgICdTZW5kIGNsb3NlXG4nICdS
ZWN2IGFja1xuJykKKworICAgICAgICAgICAgYXJncyA9IFtjbGllbnRfY29tbWFuZCwKKyAgICAg
ICAgICAgICAgICAgICAgJy1wJywgc3RyKHNlbGYuX29wdGlvbnMuc2VydmVyX3BvcnQpXQorICAg
ICAgICAgICAgY2xpZW50ID0gc2VsZi5fcnVuX3B5dGhvbl9jb21tYW5kKGFyZ3MsIHN0ZG91dD1z
dWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICBzdGRvdXRkYXRhLCBzdGRlcnJkYXRhID0gY2xp
ZW50LmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2V4YW1wbGVfZWNob19j
bGllbnRfcmVzdWx0KAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2V4cGVjdGF0aW9uLCBz
dGRvdXRkYXRhLCBzdGRlcnJkYXRhKQorCisgICAgICAgICAgICAjIFByb2Nlc3MgYSBiaWcgbWVz
c2FnZSBmb3Igd2hpY2ggZXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGggaXMgdXNlZC4KKyAgICAgICAg
ICAgICMgVG8gaGFuZGxlIGV4dGVuZGVkIHBheWxvYWQgbGVuZ3RoLCB3c192ZXJzaW9uIGF0dHJp
YnV0ZSB3aWxsIGJlCisgICAgICAgICAgICAjIGFjY2Vzc2VkLiBUaGlzIHRlc3QgY2hlY2tzIHRo
YXQgd3NfdmVyc2lvbiBpcyBjb3JyZWN0bHkgc2V0LgorICAgICAgICAgICAgYmlnX21lc3NhZ2Ug
PSAnYScgKiAxMDI0CisgICAgICAgICAgICBhcmdzID0gW2NsaWVudF9jb21tYW5kLAorICAgICAg
ICAgICAgICAgICAgICAnLXAnLCBzdHIoc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9ydCksCisgICAg
ICAgICAgICAgICAgICAgICctbScsIGJpZ19tZXNzYWdlXQorICAgICAgICAgICAgY2xpZW50ID0g
c2VsZi5fcnVuX3B5dGhvbl9jb21tYW5kKGFyZ3MsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisg
ICAgICAgICAgICBzdGRvdXRkYXRhLCBzdGRlcnJkYXRhID0gY2xpZW50LmNvbW11bmljYXRlKCkK
KyAgICAgICAgICAgIGV4cGVjdGVkID0gKCdTZW5kOiAlc1xuUmVjdjogJXNcblNlbmQgY2xvc2Vc
blJlY3YgYWNrXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChiaWdfbWVzc2FnZSwgYmln
X21lc3NhZ2UpKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfZXhhbXBsZV9lY2hvX2NsaWVudF9y
ZXN1bHQoCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIHN0ZG91dGRhdGEsIHN0ZGVycmRhdGEp
CisKKyAgICAgICAgICAgICMgVGVzdCB0aGUgcGVybWVzc2FnZS1kZWZsYXRlIGV4dGVuc2lvbi4K
KyAgICAgICAgICAgIGFyZ3MgPSBbY2xpZW50X2NvbW1hbmQsCisgICAgICAgICAgICAgICAgICAg
ICctcCcsIHN0cihzZWxmLl9vcHRpb25zLnNlcnZlcl9wb3J0KSwKKyAgICAgICAgICAgICAgICAg
ICAgJy0tdXNlX3Blcm1lc3NhZ2VfZGVmbGF0ZSddCisgICAgICAgICAgICBjbGllbnQgPSBzZWxm
Ll9ydW5fcHl0aG9uX2NvbW1hbmQoYXJncywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAg
ICAgICAgIHN0ZG91dGRhdGEsIHN0ZGVycmRhdGEgPSBjbGllbnQuY29tbXVuaWNhdGUoKQorICAg
ICAgICAgICAgc2VsZi5fY2hlY2tfZXhhbXBsZV9lY2hvX2NsaWVudF9yZXN1bHQoCisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHRfZXhwZWN0YXRpb24sIHN0ZG91dGRhdGEsIHN0ZGVycmRhdGEp
CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9raWxsX3Byb2Nlc3Moc2VydmVy
LnBpZCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4o
KQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3Rf
ZXh0ZW5zaW9ucy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2
ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0X2V4dGVuc2lvbnMucHkKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjUwZDc0YTI0NGVjNWNkM2NjMTlmNzBmYzEzMzkwY2Q2MGNkMDNjOQotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9w
eXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0X2V4dGVuc2lvbnMucHkKQEAgLTAsMCArMSwzNjggQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAxMiwgR29vZ2xlIEluYy4K
KyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisj
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiVGVzdHMg
Zm9yIGV4dGVuc2lvbnMgbW9kdWxlLiIiIgorCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHps
aWIKKworaW1wb3J0IHNldF9zeXNfcGF0aCAgIyBVcGRhdGUgc3lzLnBhdGggdG8gbG9jYXRlIG1v
ZF9weXdlYnNvY2tldCBtb2R1bGUuCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21t
b24KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBleHRlbnNpb25zCisKKworY2xhc3MgRXh0
ZW5zaW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkEgdW5pdHRlc3QgZm9yIG5v
bi1jbGFzcyBtZXRob2RzIGluIGV4dGVuc2lvbnMucHkiIiIKKworICAgIGRlZiB0ZXN0X3BhcnNl
X3dpbmRvd19iaXRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9y
LCBleHRlbnNpb25zLl9wYXJzZV93aW5kb3dfYml0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoVmFsdWVFcnJvciwgZXh0ZW5zaW9ucy5fcGFyc2Vfd2luZG93X2JpdHMsICdmb29i
YXInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBleHRlbnNpb25zLl9w
YXJzZV93aW5kb3dfYml0cywgJyA4ICcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVl
RXJyb3IsIGV4dGVuc2lvbnMuX3BhcnNlX3dpbmRvd19iaXRzLCAnYThhJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXh0ZW5zaW9ucy5fcGFyc2Vfd2luZG93X2JpdHMs
ICcwMDAwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGV4dGVuc2lv
bnMuX3BhcnNlX3dpbmRvd19iaXRzLCAnMDAwMDgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhWYWx1ZUVycm9yLCBleHRlbnNpb25zLl9wYXJzZV93aW5kb3dfYml0cywgJzB4OCcpCisKKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXh0ZW5zaW9ucy5fcGFyc2Vfd2lu
ZG93X2JpdHMsICc5LjUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBl
eHRlbnNpb25zLl9wYXJzZV93aW5kb3dfYml0cywgJzguMCcpCisKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKGV4dGVuc2lvbnMuX3BhcnNlX3dpbmRvd19iaXRzLCAnOCcpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShleHRlbnNpb25zLl9wYXJzZV93aW5kb3dfYml0cywgJzE1JykKKworICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBleHRlbnNpb25zLl9wYXJzZV93aW5kb3df
Yml0cywgJy04JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXh0ZW5z
aW9ucy5fcGFyc2Vfd2luZG93X2JpdHMsICcwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
VmFsdWVFcnJvciwgZXh0ZW5zaW9ucy5fcGFyc2Vfd2luZG93X2JpdHMsICc3JykKKworICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBleHRlbnNpb25zLl9wYXJzZV93aW5kb3df
Yml0cywgJzE2JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAg
VmFsdWVFcnJvciwgZXh0ZW5zaW9ucy5fcGFyc2Vfd2luZG93X2JpdHMsICcxMDAwMDAwMCcpCisK
KworY2xhc3MgQ29tcHJlc3Npb25NZXRob2RQYXJhbWV0ZXJQYXJzZXJUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKKyAgICAiIiJBIHVuaXR0ZXN0IGZvciBfcGFyc2VfY29tcHJlc3Npb25fbWV0aG9k
IHdoaWNoIHBhcnNlcyB0aGUgY29tcHJlc3Npb24KKyAgICBtZXRob2QgZGVzY3JpcHRpb24gdXNl
ZCBieSBwZXJmcmFtZS1jb21wcmVzc2lvbiBhbmQgcGVybWVzc2FnZS1jb21wcmVzc2lvbgorICAg
IGV4dGVuc2lvbiBpbiB0aGVpciAibWV0aG9kIiBleHRlbnNpb24gcGFyYW1ldGVyLgorICAgICIi
IgorCisgICAgZGVmIHRlc3RfcGFyc2VfbWV0aG9kX3NpbXBsZShzZWxmKToKKyAgICAgICAgbWV0
aG9kX2xpc3QgPSBleHRlbnNpb25zLl9wYXJzZV9jb21wcmVzc2lvbl9tZXRob2QoJ2ZvbycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKG1ldGhvZF9saXN0KSkKKyAgICAgICAgbWV0
aG9kID0gbWV0aG9kX2xpc3RbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vJywgbWV0
aG9kLm5hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4obWV0aG9kLmdldF9w
YXJhbWV0ZXJzKCkpKQorCisgICAgZGVmIHRlc3RfcGFyc2VfbWV0aG9kX3dpdGhfcGFyYW1ldGVy
KHNlbGYpOgorICAgICAgICBtZXRob2RfbGlzdCA9IGV4dGVuc2lvbnMuX3BhcnNlX2NvbXByZXNz
aW9uX21ldGhvZCgnZm9vOyB4OyB5PTEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBs
ZW4obWV0aG9kX2xpc3QpKQorICAgICAgICBtZXRob2QgPSBtZXRob2RfbGlzdFswXQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdmb28nLCBtZXRob2QubmFtZSgpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKDIsIGxlbihtZXRob2QuZ2V0X3BhcmFtZXRlcnMoKSkpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShtZXRob2QuaGFzX3BhcmFtZXRlcigneCcpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKE5vbmUsIG1ldGhvZC5nZXRfcGFyYW1ldGVyX3ZhbHVlKCd4JykpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShtZXRob2QuaGFzX3BhcmFtZXRlcigneScpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCcxMCcsIG1ldGhvZC5nZXRfcGFyYW1ldGVyX3ZhbHVlKCd5JykpCisKKyAgICBk
ZWYgdGVzdF9wYXJzZV9tZXRob2Rfd2l0aF9xdW90ZWRfcGFyYW1ldGVyKHNlbGYpOgorICAgICAg
ICBtZXRob2RfbGlzdCA9IGV4dGVuc2lvbnMuX3BhcnNlX2NvbXByZXNzaW9uX21ldGhvZCgKKyAg
ICAgICAgICAgICdmb287IHg9IkhlbGxvIFdvcmxkIjsgeT0xMCcpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMSwgbGVuKG1ldGhvZF9saXN0KSkKKyAgICAgICAgbWV0aG9kID0gbWV0aG9kX2xp
c3RbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vJywgbWV0aG9kLm5hbWUoKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4obWV0aG9kLmdldF9wYXJhbWV0ZXJzKCkpKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0aG9kLmhhc19wYXJhbWV0ZXIoJ3gnKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVsbG8gV29ybGQnLCBtZXRob2QuZ2V0X3BhcmFtZXRlcl92
YWx1ZSgneCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0aG9kLmhhc19wYXJhbWV0ZXIo
J3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTAnLCBtZXRob2QuZ2V0X3BhcmFtZXRl
cl92YWx1ZSgneScpKQorCisgICAgZGVmIHRlc3RfcGFyc2VfbWV0aG9kX211bHRpcGxlKHNlbGYp
OgorICAgICAgICBtZXRob2RfbGlzdCA9IGV4dGVuc2lvbnMuX3BhcnNlX2NvbXByZXNzaW9uX21l
dGhvZCgnZm9vLCBiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihtZXRob2Rf
bGlzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2ZvbycsIG1ldGhvZF9saXN0WzBdLm5h
bWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4obWV0aG9kX2xpc3RbMF0uZ2V0
X3BhcmFtZXRlcnMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhcicsIG1ldGhvZF9s
aXN0WzFdLm5hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4obWV0aG9kX2xp
c3RbMV0uZ2V0X3BhcmFtZXRlcnMoKSkpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9tZXRob2RfbXVs
dGlwbGVfbWV0aG9kc193aXRoX3F1b3RlZF9wYXJhbWV0ZXIoc2VsZik6CisgICAgICAgIG1ldGhv
ZF9saXN0ID0gZXh0ZW5zaW9ucy5fcGFyc2VfY29tcHJlc3Npb25fbWV0aG9kKAorICAgICAgICAg
ICAgJ2ZvbzsgeD0iSGVsbG8gV29ybGQiLCBiYXI7IHk9MTAnKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKDIsIGxlbihtZXRob2RfbGlzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Zv
bycsIG1ldGhvZF9saXN0WzBdLm5hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBs
ZW4obWV0aG9kX2xpc3RbMF0uZ2V0X3BhcmFtZXRlcnMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShtZXRob2RfbGlzdFswXS5oYXNfcGFyYW1ldGVyKCd4JykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ0hlbGxvIFdvcmxkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Rf
bGlzdFswXS5nZXRfcGFyYW1ldGVyX3ZhbHVlKCd4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ2JhcicsIG1ldGhvZF9saXN0WzFdLm5hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgxLCBsZW4obWV0aG9kX2xpc3RbMV0uZ2V0X3BhcmFtZXRlcnMoKSkpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShtZXRob2RfbGlzdFsxXS5oYXNfcGFyYW1ldGVyKCd5JykpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJzEwJywgbWV0aG9kX2xpc3RbMV0uZ2V0X3BhcmFtZXRlcl92YWx1ZSgn
eScpKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX21ldGhvZF9kZXNjX3NpbXBsZShzZWxmKToKKyAg
ICAgICAgcGFyYW1zID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcignZm9vJykKKyAgICAgICAg
ZGVzYyA9IGV4dGVuc2lvbnMuX2NyZWF0ZV9hY2NlcHRlZF9tZXRob2RfZGVzYygnZm9vJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXMuZ2V0X3BhcmFtZXRlcnMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vJywgZGVz
YykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9tZXRob2RfZGVzY193aXRoX3BhcmFtZXRlcnMoc2Vs
Zik6CisgICAgICAgIHBhcmFtcyA9IGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIoJ2ZvbycpCisg
ICAgICAgIHBhcmFtcy5hZGRfcGFyYW1ldGVyKCd4JywgJ0hlbGxvLCBXb3JsZCcpCisgICAgICAg
IHBhcmFtcy5hZGRfcGFyYW1ldGVyKCd5JywgJzEwJykKKyAgICAgICAgZGVzYyA9IGV4dGVuc2lv
bnMuX2NyZWF0ZV9hY2NlcHRlZF9tZXRob2RfZGVzYygnZm9vJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZ2V0X3BhcmFtZXRl
cnMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vOyB4PSJIZWxsbywgV29ybGQiOyB5
PTEwJywgZGVzYykKKworCitjbGFzcyBEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3JQYXJz
aW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSB1bml0dGVzdCBmb3IgY2hlY2tp
bmcgdGhhdCBEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IgcGFyc2VzIGdpdmVuCisgICAg
ZXh0ZW5zaW9uIHBhcmFtZXRlciBjb3JyZWN0bHkuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9y
ZWdpc3RyeShzZWxmKToKKyAgICAgICAgcHJvY2Vzc29yID0gZXh0ZW5zaW9ucy5nZXRfZXh0ZW5z
aW9uX3Byb2Nlc3NvcigKKyAgICAgICAgICAgICAgICBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVy
KCdkZWZsYXRlLWZyYW1lJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm9jZXNz
b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLkRlZmxhdGVGcmFt
ZUV4dGVuc2lvblByb2Nlc3NvcikKKworICAgICAgICBwcm9jZXNzb3IgPSBleHRlbnNpb25zLmdl
dF9leHRlbnNpb25fcHJvY2Vzc29yKAorICAgICAgICAgICAgICAgIGNvbW1vbi5FeHRlbnNpb25Q
YXJhbWV0ZXIoJ3gtd2Via2l0LWRlZmxhdGUtZnJhbWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJ
c0luc3RhbmNlKHByb2Nlc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVu
c2lvbnMuRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yKQorCisgICAgZGVmIHRlc3RfbWlu
aW1hbF9vZmZlcihzZWxmKToKKyAgICAgICAgcHJvY2Vzc29yID0gZXh0ZW5zaW9ucy5EZWZsYXRl
RnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IoCisgICAgICAgICAgICBjb21tb24uRXh0ZW5zaW9uUGFy
YW1ldGVyKCdwZXJmcmFtZS1kZWZsYXRlJykpCisKKyAgICAgICAgcmVzcG9uc2UgPSBwcm9jZXNz
b3IuZ2V0X2V4dGVuc2lvbl9yZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3Bl
cmZyYW1lLWRlZmxhdGUnLCByZXNwb25zZS5uYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMCwgbGVuKHJlc3BvbnNlLmdldF9wYXJhbWV0ZXJzKCkpKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoemxpYi5NQVhfV0JJVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vz
c29yLl9yZmMxOTc5X2RlZmxhdGVyLl93aW5kb3dfYml0cykKKyAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShwcm9jZXNzb3IuX3JmYzE5NzlfZGVmbGF0ZXIuX25vX2NvbnRleHRfdGFrZW92ZXIpCisK
KyAgICBkZWYgdGVzdF9vZmZlcl93aXRoX21heF93aW5kb3dfYml0cyhzZWxmKToKKyAgICAgICAg
cGFyYW1ldGVyID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcigncGVyZnJhbWUtZGVmbGF0ZScp
CisgICAgICAgIHBhcmFtZXRlci5hZGRfcGFyYW1ldGVyKCdtYXhfd2luZG93X2JpdHMnLCAnMTAn
KQorICAgICAgICBwcm9jZXNzb3IgPSBleHRlbnNpb25zLkRlZmxhdGVGcmFtZUV4dGVuc2lvblBy
b2Nlc3NvcihwYXJhbWV0ZXIpCisKKyAgICAgICAgcmVzcG9uc2UgPSBwcm9jZXNzb3IuZ2V0X2V4
dGVuc2lvbl9yZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3BlcmZyYW1lLWRl
ZmxhdGUnLCByZXNwb25zZS5uYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVu
KHJlc3BvbnNlLmdldF9wYXJhbWV0ZXJzKCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MTAsIHByb2Nlc3Nvci5fcmZjMTk3OV9kZWZsYXRlci5fd2luZG93X2JpdHMpCisKKyAgICBkZWYg
dGVzdF9vZmZlcl93aXRoX291dF9vZl9yYW5nZV9tYXhfd2luZG93X2JpdHMoc2VsZik6CisgICAg
ICAgIHBhcmFtZXRlciA9IGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIoJ3BlcmZyYW1lLWRlZmxh
dGUnKQorICAgICAgICBwYXJhbWV0ZXIuYWRkX3BhcmFtZXRlcignbWF4X3dpbmRvd19iaXRzJywg
JzAnKQorICAgICAgICBwcm9jZXNzb3IgPSBleHRlbnNpb25zLkRlZmxhdGVGcmFtZUV4dGVuc2lv
blByb2Nlc3NvcihwYXJhbWV0ZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJvY2Vz
c29yLmdldF9leHRlbnNpb25fcmVzcG9uc2UoKSkKKworICAgIGRlZiB0ZXN0X29mZmVyX3dpdGhf
bWF4X3dpbmRvd19iaXRzX3dpdGhvdXRfdmFsdWUoc2VsZik6CisgICAgICAgIHBhcmFtZXRlciA9
IGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIoJ3BlcmZyYW1lLWRlZmxhdGUnKQorICAgICAgICBw
YXJhbWV0ZXIuYWRkX3BhcmFtZXRlcignbWF4X3dpbmRvd19iaXRzJywgTm9uZSkKKyAgICAgICAg
cHJvY2Vzc29yID0gZXh0ZW5zaW9ucy5EZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IocGFy
YW1ldGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHByb2Nlc3Nvci5nZXRfZXh0ZW5z
aW9uX3Jlc3BvbnNlKCkpCisKKyAgICBkZWYgdGVzdF9vZmZlcl93aXRoX25vX2NvbnRleHRfdGFr
ZW92ZXIoc2VsZik6CisgICAgICAgIHBhcmFtZXRlciA9IGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0
ZXIoJ3BlcmZyYW1lLWRlZmxhdGUnKQorICAgICAgICBwYXJhbWV0ZXIuYWRkX3BhcmFtZXRlcign
bm9fY29udGV4dF90YWtlb3ZlcicsIE5vbmUpCisgICAgICAgIHByb2Nlc3NvciA9IGV4dGVuc2lv
bnMuRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yKHBhcmFtZXRlcikKKworICAgICAgICBy
ZXNwb25zZSA9IHByb2Nlc3Nvci5nZXRfZXh0ZW5zaW9uX3Jlc3BvbnNlKCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgncGVyZnJhbWUtZGVmbGF0ZScsIHJlc3BvbnNlLm5hbWUoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4ocmVzcG9uc2UuZ2V0X3BhcmFtZXRlcnMoKSkpCisK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2Nlc3Nvci5fcmZjMTk3OV9kZWZsYXRlci5fbm9f
Y29udGV4dF90YWtlb3ZlcikKKworICAgIGRlZiB0ZXN0X29mZmVyX3dpdGhfbm9fY29udGV4dF90
YWtlb3Zlcl93aXRoX3ZhbHVlKHNlbGYpOgorICAgICAgICBwYXJhbWV0ZXIgPSBjb21tb24uRXh0
ZW5zaW9uUGFyYW1ldGVyKCdwZXJmcmFtZS1kZWZsYXRlJykKKyAgICAgICAgcGFyYW1ldGVyLmFk
ZF9wYXJhbWV0ZXIoJ25vX2NvbnRleHRfdGFrZW92ZXInLCAnZm9vYmFyJykKKyAgICAgICAgcHJv
Y2Vzc29yID0gZXh0ZW5zaW9ucy5EZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IocGFyYW1l
dGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHByb2Nlc3Nvci5nZXRfZXh0ZW5zaW9u
X3Jlc3BvbnNlKCkpCisKKyAgICBkZWYgdGVzdF9vZmZlcl93aXRoX3Vua25vd25fcGFyYW1ldGVy
KHNlbGYpOgorICAgICAgICBwYXJhbWV0ZXIgPSBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVyKCdw
ZXJmcmFtZS1kZWZsYXRlJykKKyAgICAgICAgcGFyYW1ldGVyLmFkZF9wYXJhbWV0ZXIoJ2Zvbycs
ICdiYXInKQorICAgICAgICBwcm9jZXNzb3IgPSBleHRlbnNpb25zLkRlZmxhdGVGcmFtZUV4dGVu
c2lvblByb2Nlc3NvcihwYXJhbWV0ZXIpCisKKyAgICAgICAgcmVzcG9uc2UgPSBwcm9jZXNzb3Iu
Z2V0X2V4dGVuc2lvbl9yZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3BlcmZy
YW1lLWRlZmxhdGUnLCByZXNwb25zZS5uYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MCwgbGVuKHJlc3BvbnNlLmdldF9wYXJhbWV0ZXJzKCkpKQorCisKK2NsYXNzIFBlckZyYW1lQ29t
cHJlc3NFeHRlbnNpb25Qcm9jZXNzb3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYg
dGVzdF9yZWdpc3RyeShzZWxmKToKKyAgICAgICAgcHJvY2Vzc29yID0gZXh0ZW5zaW9ucy5nZXRf
ZXh0ZW5zaW9uX3Byb2Nlc3NvcigKKyAgICAgICAgICAgICAgICBjb21tb24uRXh0ZW5zaW9uUGFy
YW1ldGVyKCdwZXJmcmFtZS1jb21wcmVzcycpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFu
Y2UocHJvY2Vzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5Q
ZXJGcmFtZUNvbXByZXNzRXh0ZW5zaW9uUHJvY2Vzc29yKQorCisKK2NsYXNzIFBlck1lc3NhZ2VE
ZWZsYXRlRXh0ZW5zaW9uUHJvY2Vzc29yUGFyc2luZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgICIiIkEgdW5pdHRlc3QgZm9yIGNoZWNraW5nIHRoYXQgUGVyTWVzc2FnZURlZmxhdGVFeHRl
bnNpb25Qcm9jZXNzb3IgcGFyc2VzCisgICAgZ2l2ZW4gZXh0ZW5zaW9uIHBhcmFtZXRlciBjb3Jy
ZWN0bHkuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9yZWdpc3RyeShzZWxmKToKKyAgICAgICAg
cHJvY2Vzc29yID0gZXh0ZW5zaW9ucy5nZXRfZXh0ZW5zaW9uX3Byb2Nlc3NvcigKKyAgICAgICAg
ICAgICAgICBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVyKCdwZXJtZXNzYWdlLWRlZmxhdGUnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb2Nlc3NvciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMuUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9j
ZXNzb3IpCisKKyAgICBkZWYgdGVzdF9taW5pbWFsX29mZmVyKHNlbGYpOgorICAgICAgICBwcm9j
ZXNzb3IgPSBleHRlbnNpb25zLlBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vzc29yKAor
ICAgICAgICAgICAgY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcigncGVybWVzc2FnZS1kZWZsYXRl
JykpCisKKyAgICAgICAgcmVzcG9uc2UgPSBwcm9jZXNzb3IuZ2V0X2V4dGVuc2lvbl9yZXNwb25z
ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScsIHJlc3Bv
bnNlLm5hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4ocmVzcG9uc2UuZ2V0
X3BhcmFtZXRlcnMoKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLk1BWF9XQklU
UywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3IuX3JmYzE5NzlfZGVmbGF0ZXIu
X3dpbmRvd19iaXRzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHByb2Nlc3Nvci5fcmZjMTk3
OV9kZWZsYXRlci5fbm9fY29udGV4dF90YWtlb3ZlcikKKworICAgIGRlZiB0ZXN0X29mZmVyX3dp
dGhfbWF4X3dpbmRvd19iaXRzKHNlbGYpOgorICAgICAgICBwYXJhbWV0ZXIgPSBjb21tb24uRXh0
ZW5zaW9uUGFyYW1ldGVyKCdwZXJtZXNzYWdlLWRlZmxhdGUnKQorICAgICAgICBwYXJhbWV0ZXIu
YWRkX3BhcmFtZXRlcignczJjX21heF93aW5kb3dfYml0cycsICcxMCcpCisgICAgICAgIHByb2Nl
c3NvciA9IGV4dGVuc2lvbnMuUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3IocGFy
YW1ldGVyKQorCisgICAgICAgIHJlc3BvbnNlID0gcHJvY2Vzc29yLmdldF9leHRlbnNpb25fcmVz
cG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdwZXJtZXNzYWdlLWRlZmxhdGUnLCBy
ZXNwb25zZS5uYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygnczJjX21heF93aW5k
b3dfYml0cycsICcxMCcpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5nZXRf
cGFyYW1ldGVycygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAsIHByb2Nlc3Nvci5f
cmZjMTk3OV9kZWZsYXRlci5fd2luZG93X2JpdHMpCisKKyAgICBkZWYgdGVzdF9vZmZlcl93aXRo
X291dF9vZl9yYW5nZV9tYXhfd2luZG93X2JpdHMoc2VsZik6CisgICAgICAgIHBhcmFtZXRlciA9
IGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScpCisgICAgICAg
IHBhcmFtZXRlci5hZGRfcGFyYW1ldGVyKCdzMmNfbWF4X3dpbmRvd19iaXRzJywgJzAnKQorICAg
ICAgICBwcm9jZXNzb3IgPSBleHRlbnNpb25zLlBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJv
Y2Vzc29yKHBhcmFtZXRlcikKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwcm9jZXNzb3Iu
Z2V0X2V4dGVuc2lvbl9yZXNwb25zZSgpKQorCisgICAgZGVmIHRlc3Rfb2ZmZXJfd2l0aF9tYXhf
d2luZG93X2JpdHNfd2l0aG91dF92YWx1ZShzZWxmKToKKyAgICAgICAgcGFyYW1ldGVyID0gY29t
bW9uLkV4dGVuc2lvblBhcmFtZXRlcigncGVybWVzc2FnZS1kZWZsYXRlJykKKyAgICAgICAgcGFy
YW1ldGVyLmFkZF9wYXJhbWV0ZXIoJ3MyY19tYXhfd2luZG93X2JpdHMnLCBOb25lKQorICAgICAg
ICBwcm9jZXNzb3IgPSBleHRlbnNpb25zLlBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vz
c29yKHBhcmFtZXRlcikKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwcm9jZXNzb3IuZ2V0
X2V4dGVuc2lvbl9yZXNwb25zZSgpKQorCisgICAgZGVmIHRlc3Rfb2ZmZXJfd2l0aF9ub19jb250
ZXh0X3Rha2VvdmVyKHNlbGYpOgorICAgICAgICBwYXJhbWV0ZXIgPSBjb21tb24uRXh0ZW5zaW9u
UGFyYW1ldGVyKCdwZXJtZXNzYWdlLWRlZmxhdGUnKQorICAgICAgICBwYXJhbWV0ZXIuYWRkX3Bh
cmFtZXRlcignczJjX25vX2NvbnRleHRfdGFrZW92ZXInLCBOb25lKQorICAgICAgICBwcm9jZXNz
b3IgPSBleHRlbnNpb25zLlBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vzc29yKHBhcmFt
ZXRlcikKKworICAgICAgICByZXNwb25zZSA9IHByb2Nlc3Nvci5nZXRfZXh0ZW5zaW9uX3Jlc3Bv
bnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgncGVybWVzc2FnZS1kZWZsYXRlJywgcmVz
cG9uc2UubmFtZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ3MyY19ub19jb250ZXh0
X3Rha2VvdmVyJywgTm9uZSldLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmdl
dF9wYXJhbWV0ZXJzKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2Nlc3Nvci5fcmZj
MTk3OV9kZWZsYXRlci5fbm9fY29udGV4dF90YWtlb3ZlcikKKworICAgIGRlZiB0ZXN0X29mZmVy
X3dpdGhfbm9fY29udGV4dF90YWtlb3Zlcl93aXRoX3ZhbHVlKHNlbGYpOgorICAgICAgICBwYXJh
bWV0ZXIgPSBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVyKCdwZXJtZXNzYWdlLWRlZmxhdGUnKQor
ICAgICAgICBwYXJhbWV0ZXIuYWRkX3BhcmFtZXRlcignczJjX25vX2NvbnRleHRfdGFrZW92ZXIn
LCAnZm9vYmFyJykKKyAgICAgICAgcHJvY2Vzc29yID0gZXh0ZW5zaW9ucy5QZXJNZXNzYWdlRGVm
bGF0ZUV4dGVuc2lvblByb2Nlc3NvcihwYXJhbWV0ZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJ
c05vbmUocHJvY2Vzc29yLmdldF9leHRlbnNpb25fcmVzcG9uc2UoKSkKKworICAgIGRlZiB0ZXN0
X29mZmVyX3dpdGhfdW5rbm93bl9wYXJhbWV0ZXIoc2VsZik6CisgICAgICAgIHBhcmFtZXRlciA9
IGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScpCisgICAgICAg
IHBhcmFtZXRlci5hZGRfcGFyYW1ldGVyKCdmb28nLCAnYmFyJykKKyAgICAgICAgcHJvY2Vzc29y
ID0gZXh0ZW5zaW9ucy5QZXJNZXNzYWdlRGVmbGF0ZUV4dGVuc2lvblByb2Nlc3NvcihwYXJhbWV0
ZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJvY2Vzc29yLmdldF9leHRlbnNpb25f
cmVzcG9uc2UoKSkKKworCitjbGFzcyBQZXJNZXNzYWdlRGVmbGF0ZUV4dGVuc2lvblByb2Nlc3Nv
ckJ1aWxkaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSB1bml0dGVzdCBmb3Ig
Y2hlY2tpbmcgdGhhdCBQZXJNZXNzYWdlRGVmbGF0ZUV4dGVuc2lvblByb2Nlc3NvciBidWlsZHMK
KyAgICBhIHJlc3BvbnNlIGJhc2VkIG9uIHNwZWNpZmllZCBvcHRpb25zIGNvcnJlY3RseS4KKyAg
ICAiIiIKKworICAgIGRlZiB0ZXN0X3Jlc3BvbnNlX3dpdGhfbWF4X3dpbmRvd19iaXRzKHNlbGYp
OgorICAgICAgICBwYXJhbWV0ZXIgPSBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVyKCdwZXJtZXNz
YWdlLWRlZmxhdGUnKQorICAgICAgICBwYXJhbWV0ZXIuYWRkX3BhcmFtZXRlcignYzJzX21heF93
aW5kb3dfYml0cycsIE5vbmUpCisgICAgICAgIHByb2Nlc3NvciA9IGV4dGVuc2lvbnMuUGVyTWVz
c2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3IocGFyYW1ldGVyKQorICAgICAgICBwcm9jZXNz
b3Iuc2V0X2Myc19tYXhfd2luZG93X2JpdHMoMTApCisKKyAgICAgICAgcmVzcG9uc2UgPSBwcm9j
ZXNzb3IuZ2V0X2V4dGVuc2lvbl9yZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J3Blcm1lc3NhZ2UtZGVmbGF0ZScsIHJlc3BvbnNlLm5hbWUoKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChbKCdjMnNfbWF4X3dpbmRvd19iaXRzJywgJzEwJyldLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3BvbnNlLmdldF9wYXJhbWV0ZXJzKCkpCisKKyAgICBkZWYgdGVzdF9yZXNw
b25zZV93aXRoX21heF93aW5kb3dfYml0c193aXRob3V0X2NsaWVudF9wZXJtaXNzaW9uKHNlbGYp
OgorICAgICAgICBwcm9jZXNzb3IgPSBleHRlbnNpb25zLlBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5z
aW9uUHJvY2Vzc29yKAorICAgICAgICAgICAgY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcigncGVy
bWVzc2FnZS1kZWZsYXRlJykpCisgICAgICAgIHByb2Nlc3Nvci5zZXRfYzJzX21heF93aW5kb3df
Yml0cygxMCkKKworICAgICAgICByZXNwb25zZSA9IHByb2Nlc3Nvci5nZXRfZXh0ZW5zaW9uX3Jl
c3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVzcG9uc2UpCisKKyAgICBkZWYg
dGVzdF9yZXNwb25zZV93aXRoX3RydWVfZm9yX25vX2NvbnRleHRfdGFrZW92ZXIoc2VsZik6Cisg
ICAgICAgIHByb2Nlc3NvciA9IGV4dGVuc2lvbnMuUGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Q
cm9jZXNzb3IoCisgICAgICAgICAgICBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVyKCdwZXJtZXNz
YWdlLWRlZmxhdGUnKSkKKworICAgICAgICBwcm9jZXNzb3Iuc2V0X2Myc19ub19jb250ZXh0X3Rh
a2VvdmVyKFRydWUpCisKKyAgICAgICAgcmVzcG9uc2UgPSBwcm9jZXNzb3IuZ2V0X2V4dGVuc2lv
bl9yZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3Blcm1lc3NhZ2UtZGVmbGF0
ZScsIHJlc3BvbnNlLm5hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKCdjMnNfbm9f
Y29udGV4dF90YWtlb3ZlcicsIE5vbmUpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNw
b25zZS5nZXRfcGFyYW1ldGVycygpKQorCisgICAgZGVmIHRlc3RfcmVzcG9uc2Vfd2l0aF9mYWxz
ZV9mb3Jfbm9fY29udGV4dF90YWtlb3ZlcihzZWxmKToKKyAgICAgICAgcHJvY2Vzc29yID0gZXh0
ZW5zaW9ucy5QZXJNZXNzYWdlRGVmbGF0ZUV4dGVuc2lvblByb2Nlc3NvcigKKyAgICAgICAgICAg
IGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScpKQorCisgICAg
ICAgIHByb2Nlc3Nvci5zZXRfYzJzX25vX2NvbnRleHRfdGFrZW92ZXIoRmFsc2UpCisKKyAgICAg
ICAgcmVzcG9uc2UgPSBwcm9jZXNzb3IuZ2V0X2V4dGVuc2lvbl9yZXNwb25zZSgpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScsIHJlc3BvbnNlLm5hbWUoKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4ocmVzcG9uc2UuZ2V0X3BhcmFtZXRlcnMo
KSkpCisKKworY2xhc3MgUGVyTWVzc2FnZUNvbXByZXNzRXh0ZW5zaW9uUHJvY2Vzc29yVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcmVnaXN0cnkoc2VsZik6CisgICAgICAg
IHByb2Nlc3NvciA9IGV4dGVuc2lvbnMuZ2V0X2V4dGVuc2lvbl9wcm9jZXNzb3IoCisgICAgICAg
ICAgICAgICAgY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcigncGVybWVzc2FnZS1jb21wcmVzcycp
KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvY2Vzc29yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5QZXJNZXNzYWdlQ29tcHJlc3NFeHRlbnNpb25Q
cm9jZXNzb3IpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5t
YWluKCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90
ZXN0X2hhbmRzaGFrZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRz
ZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0X2hhbmRzaGFrZS5weQpuZXcgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zNWMzMTkxN2Y1NjgzZDQwOGNlYjRkZjVkMDY3NmIwZDgyMWU5MjE2Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xz
L3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3RfaGFuZHNoYWtlLnB5CkBAIC0wLDAgKzEsMjE0IEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMTIsIEdvb2dsZSBJbmMu
CisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3Rz
IGZvciBoYW5kc2hha2UuX2Jhc2UgbW9kdWxlLiIiIgorCisKK2ltcG9ydCB1bml0dGVzdAorCitp
bXBvcnQgc2V0X3N5c19wYXRoICAjIFVwZGF0ZSBzeXMucGF0aCB0byBsb2NhdGUgbW9kX3B5d2Vi
c29ja2V0IG1vZHVsZS4KKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQuY29tbW9uIGltcG9ydCBFeHRl
bnNpb25QYXJhbWV0ZXIKK2Zyb20gbW9kX3B5d2Vic29ja2V0LmNvbW1vbiBpbXBvcnQgRXh0ZW5z
aW9uUGFyc2luZ0V4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuY29tbW9uIGltcG9ydCBm
b3JtYXRfZXh0ZW5zaW9ucworZnJvbSBtb2RfcHl3ZWJzb2NrZXQuY29tbW9uIGltcG9ydCBwYXJz
ZV9leHRlbnNpb25zCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0
IEhhbmRzaGFrZUV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNl
IGltcG9ydCB2YWxpZGF0ZV9zdWJwcm90b2NvbAorCisKK2NsYXNzIFZhbGlkYXRlU3VicHJvdG9j
b2xUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJBIHVuaXR0ZXN0IGZvciB2YWxpZGF0
ZV9zdWJwcm90b2NvbCBtZXRob2QuIiIiCisKKyAgICBkZWYgdGVzdF92YWxpZGF0ZV9zdWJwcm90
b2NvbChzZWxmKToKKyAgICAgICAgIyBTaG91bGQgc3VjY2VlZC4KKyAgICAgICAgdmFsaWRhdGVf
c3VicHJvdG9jb2woJ3NhbXBsZScpCisgICAgICAgIHZhbGlkYXRlX3N1YnByb3RvY29sKCdTYW1w
bGUnKQorICAgICAgICB2YWxpZGF0ZV9zdWJwcm90b2NvbCgnc2FtcGxlXHg3ZXByb3RvY29sJykK
KworICAgICAgICAjIFNob3VsZCBmYWlsLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhIYW5k
c2hha2VFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX3N1YnBy
b3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoSGFuZHNoYWtlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0ZV9zdWJwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbXBsZVx4
MDlwcm90b2NvbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEhhbmRzaGFrZUV4Y2VwdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVfc3VicHJvdG9jb2wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICdzYW1wbGVceDE5cHJvdG9jb2wnKQorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhIYW5kc2hha2VFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRlX3N1YnByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc2Ft
cGxlXHgyMHByb3RvY29sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSGFuZHNoYWtlRXhj
ZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9zdWJwcm90b2NvbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbXBsZVx4N2Zwcm90b2NvbCcpCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKEhhbmRzaGFrZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWRhdGVfc3VicHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgIkphcGFuIiBpbiBKYXBhbmVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICB1J1x1NjVl
NVx1NjcyYycpCisKKworX1RFU1RfVE9LRU5fRVhURU5TSU9OX0RBVEEgPSBbCisgICAgKCdmb28n
LCBbKCdmb28nLCBbXSldKSwKKyAgICAoJ2ZvbzsgYmFyJywgWygnZm9vJywgWygnYmFyJywgTm9u
ZSldKV0pLAorICAgICgnZm9vOyBiYXI9YmF6JywgWygnZm9vJywgWygnYmFyJywgJ2JheicpXSld
KSwKKyAgICAoJ2ZvbzsgYmFyPWJhejsgY2FyPWNkcicsIFsoJ2ZvbycsIFsoJ2JhcicsICdiYXon
KSwgKCdjYXInLCAnY2RyJyldKV0pLAorICAgICgnZm9vOyBiYXI9YmF6LCBjYXI7IGNkcicsCisg
ICAgIFsoJ2ZvbycsIFsoJ2JhcicsICdiYXonKV0pLCAoJ2NhcicsIFsoJ2NkcicsIE5vbmUpXSld
KSwKKyAgICAoJ2EsIGIsIGMsIGQnLAorICAgICBbKCdhJywgW10pLCAoJ2InLCBbXSksICgnYycs
IFtdKSwgKCdkJywgW10pXSksCisgICAgXQorCisKK19URVNUX1FVT1RFRF9FWFRFTlNJT05fREFU
QSA9IFsKKyAgICAoJ2ZvbzsgYmFyPSIiJywgWygnZm9vJywgWygnYmFyJywgJycpXSldKSwKKyAg
ICAoJ2ZvbzsgYmFyPSIgYmF6ICInLCBbKCdmb28nLCBbKCdiYXInLCAnIGJheiAnKV0pXSksCisg
ICAgKCdmb287IGJhcj0iLGJhejsiJywgWygnZm9vJywgWygnYmFyJywgJyxiYXo7JyldKV0pLAor
ICAgICgnZm9vOyBiYXI9IlxcXHJcXFxuYmF6IicsIFsoJ2ZvbycsIFsoJ2JhcicsICdcclxuYmF6
JyldKV0pLAorICAgICgnZm9vOyBiYXI9IlxcImJheiInLCBbKCdmb28nLCBbKCdiYXInLCAnImJh
eicpXSldKSwKKyAgICAoJ2ZvbzsgYmFyPSJceGJiYmF6IicsIFsoJ2ZvbycsIFsoJ2JhcicsICdc
eGJiYmF6JyldKV0pLAorICAgIF0KKworCitfVEVTVF9SRURVTkRBTlRfVE9LRU5fRVhURU5TSU9O
X0RBVEEgPSBbCisgICAgKCdmb28gXHQgJywgWygnZm9vJywgW10pXSksCisgICAgKCdmb287IFxy
XG4gYmFyJywgWygnZm9vJywgWygnYmFyJywgTm9uZSldKV0pLAorICAgICgnZm9vOyBiYXI9XHJc
biBcclxuIGJheicsIFsoJ2ZvbycsIFsoJ2JhcicsICdiYXonKV0pXSksCisgICAgKCdmb28gO2Jh
ciA9IGJheiAnLCBbKCdmb28nLCBbKCdiYXInLCAnYmF6JyldKV0pLAorICAgICgnZm9vLGJhciws
YmF6JywgWygnZm9vJywgW10pLCAoJ2JhcicsIFtdKSwgKCdiYXonLCBbXSldKSwKKyAgICBdCisK
KworX1RFU1RfUkVEVU5EQU5UX1FVT1RFRF9FWFRFTlNJT05fREFUQSA9IFsKKyAgICAoJ2Zvbzsg
YmFyPSJcclxuIFxyXG4gYmF6IicsIFsoJ2ZvbycsIFsoJ2JhcicsICcgIGJheicpXSldKSwKKyAg
ICBdCisKKworY2xhc3MgRXh0ZW5zaW9uc1BhcnNlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgor
CisgICAgZGVmIF92ZXJpZnlfZXh0ZW5zaW9uX2xpc3Qoc2VsZiwgZXhwZWN0ZWRfbGlzdCwgYWN0
dWFsX2xpc3QpOgorICAgICAgICAiIiJWZXJpZmllcyB0aGF0IEV4dGVuc2lvblBhcmFtZXRlciBv
YmplY3RzIGluIGFjdHVhbF9saXN0IGhhdmUgdGhlCisgICAgICAgIHNhbWUgbWVtYmVycyBhcyBl
eHRlbnNpb24gZGVmaW5pdGlvbnMgaW4gZXhwZWN0ZWRfbGlzdC4gRXh0ZW5zaW9uCisgICAgICAg
IGRlZmluaXRpb24gdXNlZCBpbiB0aGlzIHRlc3QgaXMgYSBwYWlyIG9mIGFuIGV4dGVuc2lvbiBu
YW1lIGFuZCBhCisgICAgICAgIHBhcmFtZXRlciBkaWN0aW9uYXJ5LgorICAgICAgICAiIiIKKwor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihleHBlY3RlZF9saXN0KSwgbGVuKGFjdHVhbF9s
aXN0KSkKKyAgICAgICAgZm9yIGV4cGVjdGVkLCBhY3R1YWwgaW4gemlwKGV4cGVjdGVkX2xpc3Qs
IGFjdHVhbF9saXN0KToKKyAgICAgICAgICAgIChuYW1lLCBwYXJhbWV0ZXJzKSA9IGV4cGVjdGVk
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGFjdHVhbC5fbmFtZSkKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1ldGVycywgYWN0dWFsLl9wYXJhbWV0ZXJzKQor
CisgICAgZGVmIHRlc3RfcGFyc2Uoc2VsZik6CisgICAgICAgIGZvciBmb3JtYXR0ZWRfc3RyaW5n
LCBkZWZpbml0aW9uIGluIF9URVNUX1RPS0VOX0VYVEVOU0lPTl9EQVRBOgorICAgICAgICAgICAg
c2VsZi5fdmVyaWZ5X2V4dGVuc2lvbl9saXN0KAorICAgICAgICAgICAgICAgIGRlZmluaXRpb24s
IHBhcnNlX2V4dGVuc2lvbnMoZm9ybWF0dGVkX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3F1b3RlZF9zdHJpbmc9RmFsc2UpKQorCisg
ICAgICAgIGZvciBmb3JtYXR0ZWRfc3RyaW5nLCB1bnVzZWRfZGVmaW5pdGlvbiBpbiBfVEVTVF9R
VU9URURfRVhURU5TSU9OX0RBVEE6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAg
ICAgICAgICAgICAgICBFeHRlbnNpb25QYXJzaW5nRXhjZXB0aW9uLCBwYXJzZV9leHRlbnNpb25z
LAorICAgICAgICAgICAgICAgIGZvcm1hdHRlZF9zdHJpbmcsIEZhbHNlKQorCisgICAgZGVmIHRl
c3RfcGFyc2Vfd2l0aF9hbGxvd19xdW90ZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICBmb3IgZm9y
bWF0dGVkX3N0cmluZywgZGVmaW5pdGlvbiBpbiBfVEVTVF9UT0tFTl9FWFRFTlNJT05fREFUQToK
KyAgICAgICAgICAgIHNlbGYuX3ZlcmlmeV9leHRlbnNpb25fbGlzdCgKKyAgICAgICAgICAgICAg
ICBkZWZpbml0aW9uLCBwYXJzZV9leHRlbnNpb25zKGZvcm1hdHRlZF9zdHJpbmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19xdW90ZWRfc3RyaW5n
PVRydWUpKQorCisgICAgICAgIGZvciBmb3JtYXR0ZWRfc3RyaW5nLCBkZWZpbml0aW9uIGluIF9U
RVNUX1FVT1RFRF9FWFRFTlNJT05fREFUQToKKyAgICAgICAgICAgIHNlbGYuX3ZlcmlmeV9leHRl
bnNpb25fbGlzdCgKKyAgICAgICAgICAgICAgICBkZWZpbml0aW9uLCBwYXJzZV9leHRlbnNpb25z
KGZvcm1hdHRlZF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbGxvd19xdW90ZWRfc3RyaW5nPVRydWUpKQorCisgICAgZGVmIHRlc3RfcGFyc2Vf
cmVkdW5kYW50X2RhdGEoc2VsZik6CisgICAgICAgIGZvciAoZm9ybWF0dGVkX3N0cmluZywKKyAg
ICAgICAgICAgICBkZWZpbml0aW9uKSBpbiBfVEVTVF9SRURVTkRBTlRfVE9LRU5fRVhURU5TSU9O
X0RBVEE6CisgICAgICAgICAgICBzZWxmLl92ZXJpZnlfZXh0ZW5zaW9uX2xpc3QoCisgICAgICAg
ICAgICAgICAgZGVmaW5pdGlvbiwgcGFyc2VfZXh0ZW5zaW9ucyhmb3JtYXR0ZWRfc3RyaW5nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfcXVvdGVk
X3N0cmluZz1GYWxzZSkpCisKKyAgICAgICAgZm9yIChmb3JtYXR0ZWRfc3RyaW5nLAorICAgICAg
ICAgICAgIGRlZmluaXRpb24pIGluIF9URVNUX1JFRFVOREFOVF9RVU9URURfRVhURU5TSU9OX0RB
VEE6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICBFeHRl
bnNpb25QYXJzaW5nRXhjZXB0aW9uLCBwYXJzZV9leHRlbnNpb25zLAorICAgICAgICAgICAgICAg
IGZvcm1hdHRlZF9zdHJpbmcsIEZhbHNlKQorCisgICAgZGVmIHRlc3RfcGFyc2VfcmVkdW5kYW50
X2RhdGFfd2l0aF9hbGxvd19xdW90ZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICBmb3IgKGZvcm1h
dHRlZF9zdHJpbmcsCisgICAgICAgICAgICAgZGVmaW5pdGlvbikgaW4gX1RFU1RfUkVEVU5EQU5U
X1RPS0VOX0VYVEVOU0lPTl9EQVRBOgorICAgICAgICAgICAgc2VsZi5fdmVyaWZ5X2V4dGVuc2lv
bl9saXN0KAorICAgICAgICAgICAgICAgIGRlZmluaXRpb24sIHBhcnNlX2V4dGVuc2lvbnMoZm9y
bWF0dGVkX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFsbG93X3F1b3RlZF9zdHJpbmc9VHJ1ZSkpCisKKyAgICAgICAgZm9yIChmb3JtYXR0ZWRf
c3RyaW5nLAorICAgICAgICAgICAgIGRlZmluaXRpb24pIGluIF9URVNUX1JFRFVOREFOVF9RVU9U
RURfRVhURU5TSU9OX0RBVEE6CisgICAgICAgICAgICBzZWxmLl92ZXJpZnlfZXh0ZW5zaW9uX2xp
c3QoCisgICAgICAgICAgICAgICAgZGVmaW5pdGlvbiwgcGFyc2VfZXh0ZW5zaW9ucyhmb3JtYXR0
ZWRfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWxsb3dfcXVvdGVkX3N0cmluZz1UcnVlKSkKKworICAgIGRlZiB0ZXN0X3BhcnNlX2JhZF9kYXRh
KHNlbGYpOgorICAgICAgICBfVEVTVF9CQURfRVhURU5TSU9OX0RBVEEgPSBbCisgICAgICAgICAg
ICAoJ2ZvbzsgOyAnKSwKKyAgICAgICAgICAgICgnZm9vOyBhIGEnKSwKKyAgICAgICAgICAgICgn
Zm9vIGZvbycpLAorICAgICAgICAgICAgKCcsLCwnKSwKKyAgICAgICAgICAgICgnZm9vOyBiYXI9
JyksCisgICAgICAgICAgICAoJ2ZvbzsgYmFyPSJob2dlJyksCisgICAgICAgICAgICAoJ2Zvbzsg
YmFyPSJhXHIiJyksCisgICAgICAgICAgICAoJ2ZvbzsgYmFyPSJcXFx4ZmYiJyksCisgICAgICAg
ICAgICAoJ2ZvbzsgYmFyPVxyYScpLAorICAgICAgICAgICAgXQorCisgICAgICAgIGZvciBmb3Jt
YXR0ZWRfc3RyaW5nIGluIF9URVNUX0JBRF9FWFRFTlNJT05fREFUQToKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgICAgIEV4dGVuc2lvblBhcnNpbmdFeGNlcHRp
b24sIHBhcnNlX2V4dGVuc2lvbnMsIGZvcm1hdHRlZF9zdHJpbmcpCisKKworY2xhc3MgRm9ybWF0
RXh0ZW5zaW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZm9ybWF0
X2V4dGVuc2lvbnMoc2VsZik6CisgICAgICAgIGZvciBmb3JtYXR0ZWRfc3RyaW5nLCBkZWZpbml0
aW9ucyBpbiBfVEVTVF9UT0tFTl9FWFRFTlNJT05fREFUQToKKyAgICAgICAgICAgIGV4dGVuc2lv
bnMgPSBbXQorICAgICAgICAgICAgZm9yIGRlZmluaXRpb24gaW4gZGVmaW5pdGlvbnM6CisgICAg
ICAgICAgICAgICAgKG5hbWUsIHBhcmFtZXRlcnMpID0gZGVmaW5pdGlvbgorICAgICAgICAgICAg
ICAgIGV4dGVuc2lvbiA9IEV4dGVuc2lvblBhcmFtZXRlcihuYW1lKQorICAgICAgICAgICAgICAg
IGV4dGVuc2lvbi5fcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMKKyAgICAgICAgICAgICAgICBleHRl
bnNpb25zLmFwcGVuZChleHRlbnNpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAor
ICAgICAgICAgICAgICAgIGZvcm1hdHRlZF9zdHJpbmcsIGZvcm1hdF9leHRlbnNpb25zKGV4dGVu
c2lvbnMpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFp
bigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVz
dF9oYW5kc2hha2VfaHliaS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93
cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0X2hhbmRzaGFrZV9oeWJpLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRkNWRhZTY2MjI3NzhmNDAwMzViZGJiM2I5NTg4NTJkOTg0ZTZlZjAKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2Vy
dmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdF9oYW5kc2hha2VfaHliaS5weQpAQCAt
MCwwICsxLDU0OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDEx
LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworCisiIiJUZXN0cyBmb3IgaGFuZHNoYWtlIG1vZHVsZS4iIiIKKworCitpbXBvcnQgdW5pdHRl
c3QKKworaW1wb3J0IHNldF9zeXNfcGF0aCAgIyBVcGRhdGUgc3lzLnBhdGggdG8gbG9jYXRlIG1v
ZF9weXdlYnNvY2tldCBtb2R1bGUuCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgY29tbW9u
Citmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IEFib3J0ZWRCeVVz
ZXJFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQg
SGFuZHNoYWtlRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2Ug
aW1wb3J0IFZlcnNpb25FeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5o
eWJpIGltcG9ydCBIYW5kc2hha2VyCisKK2ltcG9ydCBtb2NrCisKKworY2xhc3MgUmVxdWVzdERl
ZmluaXRpb24ob2JqZWN0KToKKyAgICAiIiJBIGNsYXNzIGZvciBob2xkaW5nIGRhdGEgZm9yIGNv
bnN0cnVjdGluZyBvcGVuaW5nIGhhbmRzaGFrZSBzdHJpbmdzIGZvcgorICAgIHRlc3RpbmcgdGhl
IG9wZW5pbmcgaGFuZHNoYWtlIHByb2Nlc3Nvci4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBtZXRob2QsIHVyaSwgaGVhZGVycyk6CisgICAgICAgIHNlbGYubWV0aG9kID0gbWV0
aG9kCisgICAgICAgIHNlbGYudXJpID0gdXJpCisgICAgICAgIHNlbGYuaGVhZGVycyA9IGhlYWRl
cnMKKworCitkZWYgX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCk6CisgICAgcmV0dXJuIFJlcXVl
c3REZWZpbml0aW9uKAorICAgICAgICAnR0VUJywgJy9kZW1vJywKKyAgICAgICAgeydIb3N0Jzog
J3NlcnZlci5leGFtcGxlLmNvbScsCisgICAgICAgICAnVXBncmFkZSc6ICd3ZWJzb2NrZXQnLAor
ICAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnVXBncmFkZScsCisgICAgICAgICAnU2VjLVdlYlNvY2tl
dC1LZXknOiAnZEdobElITmhiWEJzWlNCdWIyNWpaUT09JywKKyAgICAgICAgICdTZWMtV2ViU29j
a2V0LVZlcnNpb24nOiAnMTMnLAorICAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vZXhhbXBsZS5j
b20nfSkKKworCitkZWYgX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKToKKyAgICBjb25uID0g
bW9jay5Nb2NrQ29ubignJykKKyAgICByZXR1cm4gbW9jay5Nb2NrUmVxdWVzdCgKKyAgICAgICAg
bWV0aG9kPXJlcXVlc3RfZGVmLm1ldGhvZCwKKyAgICAgICAgdXJpPXJlcXVlc3RfZGVmLnVyaSwK
KyAgICAgICAgaGVhZGVyc19pbj1yZXF1ZXN0X2RlZi5oZWFkZXJzLAorICAgICAgICBjb25uZWN0
aW9uPWNvbm4pCisKKworZGVmIF9jcmVhdGVfaGFuZHNoYWtlcihyZXF1ZXN0KToKKyAgICBoYW5k
c2hha2VyID0gSGFuZHNoYWtlcihyZXF1ZXN0LCBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCisgICAg
cmV0dXJuIGhhbmRzaGFrZXIKKworCitjbGFzcyBTdWJwcm90b2NvbENob29zaW5nRGlzcGF0Y2hl
cihvYmplY3QpOgorICAgICIiIkEgZGlzcGF0Y2hlciBmb3IgdGVzdGluZy4gVGhpcyBkaXNwYXRj
aGVyIHNldHMgdGhlIGktdGggc3VicHJvdG9jb2wKKyAgICBvZiByZXF1ZXN0ZWQgb25lcyB0byB3
c19wcm90b2NvbCB3aGVyZSBpIGlzIGdpdmVuIG9uIGNvbnN0cnVjdGlvbiBhcyBpbmRleAorICAg
IGFyZ3VtZW50LiBJZiBpbmRleCBpcyBuZWdhdGl2ZSwgZGVmYXVsdF92YWx1ZSB3aWxsIGJlIHNl
dCB0byB3c19wcm90b2NvbC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmRl
eCwgZGVmYXVsdF92YWx1ZT1Ob25lKToKKyAgICAgICAgc2VsZi5pbmRleCA9IGluZGV4CisgICAg
ICAgIHNlbGYuZGVmYXVsdF92YWx1ZSA9IGRlZmF1bHRfdmFsdWUKKworICAgIGRlZiBkb19leHRy
YV9oYW5kc2hha2Uoc2VsZiwgY29ubl9jb250ZXh0KToKKyAgICAgICAgaWYgc2VsZi5pbmRleCA+
PSAwOgorICAgICAgICAgICAgY29ubl9jb250ZXh0LndzX3Byb3RvY29sID0gY29ubl9jb250ZXh0
LndzX3JlcXVlc3RlZF9wcm90b2NvbHNbCisgICAgICAgICAgICAgICAgc2VsZi5pbmRleF0KKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbm5fY29udGV4dC53c19wcm90b2NvbCA9IHNlbGYu
ZGVmYXVsdF92YWx1ZQorCisgICAgZGVmIHRyYW5zZmVyX2RhdGEoc2VsZiwgY29ubl9jb250ZXh0
KToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIEhhbmRzaGFrZUFib3J0ZWRFeGNlcHRpb24oRXhj
ZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgQWJvcnRpbmdEaXNwYXRjaGVyKG9iamVjdCk6
CisgICAgIiIiQSBkaXNwYXRjaGVyIGZvciB0ZXN0aW5nLiBUaGlzIGRpc3BhdGNoZXIgcmFpc2Vz
IGFuIGV4Y2VwdGlvbiBpbgorICAgIGRvX2V4dHJhX2hhbmRzaGFrZSB0byByZWplY3QgdGhlIHJl
cXVlc3QuCisgICAgIiIiCisKKyAgICBkZWYgZG9fZXh0cmFfaGFuZHNoYWtlKHNlbGYsIGNvbm5f
Y29udGV4dCk6CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUFib3J0ZWRFeGNlcHRpb24oJ0FuIGV4
Y2VwdGlvbiB0byByZWplY3QgdGhlIHJlcXVlc3QnKQorCisgICAgZGVmIHRyYW5zZmVyX2RhdGEo
c2VsZiwgY29ubl9jb250ZXh0KToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIEFib3J0ZWRCeVVz
ZXJEaXNwYXRjaGVyKG9iamVjdCk6CisgICAgIiIiQSBkaXNwYXRjaGVyIGZvciB0ZXN0aW5nLiBU
aGlzIGRpc3BhdGNoZXIgcmFpc2VzIGFuCisgICAgQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbiBpbiBk
b19leHRyYV9oYW5kc2hha2UgdG8gcmVqZWN0IHRoZSByZXF1ZXN0LgorICAgICIiIgorCisgICAg
ZGVmIGRvX2V4dHJhX2hhbmRzaGFrZShzZWxmLCBjb25uX2NvbnRleHQpOgorICAgICAgICByYWlz
ZSBBYm9ydGVkQnlVc2VyRXhjZXB0aW9uKCdBbiBBYm9ydGVkQnlVc2VyRXhjZXB0aW9uIHRvIHJl
amVjdCB0aGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1ZXN0
JykKKworICAgIGRlZiB0cmFuc2Zlcl9kYXRhKHNlbGYsIGNvbm5fY29udGV4dCk6CisgICAgICAg
IHBhc3MKKworCitfRVhQRUNURURfUkVTUE9OU0UgPSAoCisgICAgJ0hUVFAvMS4xIDEwMSBTd2l0
Y2hpbmcgUHJvdG9jb2xzXHJcbicKKyAgICAnVXBncmFkZTogd2Vic29ja2V0XHJcbicKKyAgICAn
Q29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0OiBzM3BQ
TE1CaVR4YVE5a1lHenpoWlJiSyt4T289XHJcblxyXG4nKQorCisKK2NsYXNzIEhhbmRzaGFrZXJU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJBIHVuaXR0ZXN0IGZvciBkcmFmdC1pZXRm
LWh5YmktdGhld2Vic29ja2V0cHJvdG9jb2wtMDYgYW5kIGxhdGVyCisgICAgaGFuZHNoYWtlIHBy
b2Nlc3Nvci4KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X2RvX2hhbmRzaGFrZShzZWxmKToKKyAg
ICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYo
KSkKKyAgICAgICAgZGlzcGF0Y2hlciA9IG1vY2suTW9ja0Rpc3BhdGNoZXIoKQorICAgICAgICBo
YW5kc2hha2VyID0gSGFuZHNoYWtlcihyZXF1ZXN0LCBkaXNwYXRjaGVyKQorICAgICAgICBoYW5k
c2hha2VyLmRvX2hhbmRzaGFrZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpc3BhdGNo
ZXIuZG9fZXh0cmFfaGFuZHNoYWtlX2NhbGxlZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KAorICAgICAgICAgICAgX0VYUEVDVEVEX1JFU1BPTlNFLCByZXF1ZXN0LmNvbm5lY3Rpb24ud3Jp
dHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9kZW1vJywgcmVxdWVzdC53
c19yZXNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaHR0cDovL2V4YW1wbGUuY29t
JywgcmVxdWVzdC53c19vcmlnaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcmVx
dWVzdC53c19wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCByZXF1ZXN0
LndzX2V4dGVuc2lvbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9uLlZFUlNJT05f
SFlCSV9MQVRFU1QsIHJlcXVlc3Qud3NfdmVyc2lvbikKKworICAgIGRlZiB0ZXN0X2RvX2hhbmRz
aGFrZV93aXRoX2V4dHJhX2hlYWRlcnMoc2VsZik6CisgICAgICAgIHJlcXVlc3RfZGVmID0gX2Ny
ZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgIyBBZGQgaGVhZGVycyBub3QgcmVsYXRl
ZCB0byBXZWJTb2NrZXQgb3BlbmluZyBoYW5kc2hha2UuCisgICAgICAgIHJlcXVlc3RfZGVmLmhl
YWRlcnNbJ0Zvb0tleSddID0gJ0JhclZhbHVlJworICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJz
WydFbXB0eUtleSddID0gJycKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJl
cXVlc3RfZGVmKQorICAgICAgICBoYW5kc2hha2VyID0gX2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVl
c3QpCisgICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgKKyAgICAgICAgICAgIF9FWFBFQ1RFRF9SRVNQT05TRSwgcmVxdWVzdC5jb25uZWN0
aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3RfZG9faGFuZHNoYWtlX3dpdGhfY2Fw
aXRhbGl6ZWRfdmFsdWUoc2VsZik6CisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29k
X3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1sndXBncmFkZSddID0g
J1dFQlNPQ0tFVCcKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3Rf
ZGVmKQorICAgICAgICBoYW5kc2hha2VyID0gX2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVlc3QpCisg
ICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgKKyAgICAgICAgICAgIF9FWFBFQ1RFRF9SRVNQT05TRSwgcmVxdWVzdC5jb25uZWN0aW9uLndy
aXR0ZW5fZGF0YSgpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVl
c3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snQ29ubmVjdGlvbiddID0gJ1VQ
R1JBREUnCisKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChyZXF1ZXN0X2RlZikK
KyAgICAgICAgaGFuZHNoYWtlciA9IF9jcmVhdGVfaGFuZHNoYWtlcihyZXF1ZXN0KQorICAgICAg
ICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisg
ICAgICAgICAgICBfRVhQRUNURURfUkVTUE9OU0UsIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVu
X2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X2RvX2hhbmRzaGFrZV93aXRoX211bHRpcGxlX2Nvbm5l
Y3Rpb25fdmFsdWVzKHNlbGYpOgorICAgICAgICByZXF1ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9y
ZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ0Nvbm5lY3Rpb24nXSA9
ICdVcGdyYWRlLCBrZWVwLWFsaXZlLCAsICcKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9y
ZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICBoYW5kc2hha2VyID0gX2NyZWF0ZV9oYW5kc2hh
a2VyKHJlcXVlc3QpCisgICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIF9FWFBFQ1RFRF9SRVNQT05TRSwgcmVxdWVz
dC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3RfYWJvcnRpbmdfaGFu
ZHNoYWtlKHNlbGYpOgorICAgICAgICBoYW5kc2hha2VyID0gSGFuZHNoYWtlcigKKyAgICAgICAg
ICAgIF9jcmVhdGVfcmVxdWVzdChfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKSksCisgICAgICAg
ICAgICBBYm9ydGluZ0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgIyBkb19leHRyYV9oYW5kc2hha2Ug
cmFpc2VzIGFuIGV4Y2VwdGlvbi4gQ2hlY2sgdGhhdCBpdCdzIG5vdCBjYXVnaHQgYnkKKyAgICAg
ICAgIyBkb19oYW5kc2hha2UuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEhhbmRzaGFrZUFi
b3J0ZWRFeGNlcHRpb24sIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKQorCisgICAgZGVmIHRlc3Rf
ZG9faGFuZHNoYWtlX3dpdGhfcHJvdG9jb2woc2VsZik6CisgICAgICAgIHJlcXVlc3RfZGVmID0g
X2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1sn
U2VjLVdlYlNvY2tldC1Qcm90b2NvbCddID0gJ2NoYXQsIHN1cGVyY2hhdCcKKworICAgICAgICBy
ZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICBoYW5kc2hha2Vy
ID0gSGFuZHNoYWtlcihyZXF1ZXN0LCBTdWJwcm90b2NvbENob29zaW5nRGlzcGF0Y2hlcigwKSkK
KyAgICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorCisgICAgICAgIEVYUEVDVEVEX1JF
U1BPTlNFID0gKAorICAgICAgICAgICAgJ0hUVFAvMS4xIDEwMSBTd2l0Y2hpbmcgUHJvdG9jb2xz
XHJcbicKKyAgICAgICAgICAgICdVcGdyYWRlOiB3ZWJzb2NrZXRcclxuJworICAgICAgICAgICAg
J0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtQWNj
ZXB0OiBzM3BQTE1CaVR4YVE5a1lHenpoWlJiSyt4T289XHJcbicKKyAgICAgICAgICAgICdTZWMt
V2ViU29ja2V0LVByb3RvY29sOiBjaGF0XHJcblxyXG4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoRVhQRUNURURfUkVTUE9OU0UsIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEo
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnY2hhdCcsIHJlcXVlc3Qud3NfcHJvdG9jb2wp
CisKKyAgICBkZWYgdGVzdF9kb19oYW5kc2hha2VfcHJvdG9jb2xfbm90X2luX3JlcXVlc3RfYnV0
X2luX3Jlc3BvbnNlKHNlbGYpOgorICAgICAgICByZXF1ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9y
ZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9k
ZWYpCisgICAgICAgIGhhbmRzaGFrZXIgPSBIYW5kc2hha2VyKAorICAgICAgICAgICAgcmVxdWVz
dCwgU3VicHJvdG9jb2xDaG9vc2luZ0Rpc3BhdGNoZXIoLTEsICdmb29iYXInKSkKKyAgICAgICAg
IyBObyByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgYnV0IHdzX3Byb3RvY29sIGlzIHNldC4gSGFuZHNo
YWtlRXhjZXB0aW9uCisgICAgICAgICMgbXVzdCBiZSByYWlzZWQuCisgICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKEhhbmRzaGFrZUV4Y2VwdGlvbiwgaGFuZHNoYWtlci5kb19oYW5kc2hha2UpCisK
KyAgICBkZWYgdGVzdF9kb19oYW5kc2hha2Vfd2l0aF9wcm90b2NvbF9ub19wcm90b2NvbF9zZWxl
Y3Rpb24oc2VsZik6CisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3Rf
ZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snU2VjLVdlYlNvY2tldC1Qcm90b2Nv
bCddID0gJ2NoYXQsIHN1cGVyY2hhdCcKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1
ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICBoYW5kc2hha2VyID0gX2NyZWF0ZV9oYW5kc2hha2Vy
KHJlcXVlc3QpCisgICAgICAgICMgd3NfcHJvdG9jb2wgaXMgbm90IHNldC4gSGFuZHNoYWtlRXhj
ZXB0aW9uIG11c3QgYmUgcmFpc2VkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhIYW5kc2hh
a2VFeGNlcHRpb24sIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKQorCisgICAgZGVmIHRlc3RfZG9f
aGFuZHNoYWtlX3dpdGhfZXh0ZW5zaW9ucyhzZWxmKToKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBf
Y3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydT
ZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnXSA9ICgKKyAgICAgICAgICAgICdwZXJtZXNzYWdlLWNv
bXByZXNzOyBtZXRob2Q9ZGVmbGF0ZSwgdW5rbm93bicpCisKKyAgICAgICAgRVhQRUNURURfUkVT
UE9OU0UgPSAoCisgICAgICAgICAgICAnSFRUUC8xLjEgMTAxIFN3aXRjaGluZyBQcm90b2NvbHNc
clxuJworICAgICAgICAgICAgJ1VwZ3JhZGU6IHdlYnNvY2tldFxyXG4nCisgICAgICAgICAgICAn
Q29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1BY2Nl
cHQ6IHMzcFBMTUJpVHhhUTlrWUd6emhaUmJLK3hPbz1cclxuJworICAgICAgICAgICAgJ1NlYy1X
ZWJTb2NrZXQtRXh0ZW5zaW9uczogcGVybWVzc2FnZS1jb21wcmVzczsgbWV0aG9kPWRlZmxhdGVc
clxuJworICAgICAgICAgICAgJ1xyXG4nKQorCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3Jl
cXVlc3QocmVxdWVzdF9kZWYpCisgICAgICAgIGhhbmRzaGFrZXIgPSBfY3JlYXRlX2hhbmRzaGFr
ZXIocmVxdWVzdCkKKyAgICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKEVYUEVDVEVEX1JFU1BPTlNFLCByZXF1ZXN0LmNvbm5lY3Rpb24ud3Jp
dHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHJlcXVlc3Qud3Nf
ZXh0ZW5zaW9ucykpCisgICAgICAgIGV4dGVuc2lvbiA9IHJlcXVlc3Qud3NfZXh0ZW5zaW9uc1sw
XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1vbi5QRVJNRVNTQUdFX0NPTVBSRVNTSU9O
X0VYVEVOU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24ubmFtZSgpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnbWV0aG9kJ10sIGV4dGVuc2lvbi5nZXRfcGFyYW1l
dGVyX25hbWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2RlZmxhdGUnLCBleHRlbnNp
b24uZ2V0X3BhcmFtZXRlcl92YWx1ZSgnbWV0aG9kJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMSwgbGVuKHJlcXVlc3Qud3NfZXh0ZW5zaW9uX3Byb2Nlc3NvcnMpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNvbW1vbi5QRVJNRVNTQUdFX0NPTVBSRVNTSU9OX0VYVEVOU0lPTiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzWzBd
Lm5hbWUoKSkKKworICAgIGRlZiB0ZXN0X2RvX2hhbmRzaGFrZV93aXRoX3BlcmZyYW1lX2NvbXBy
ZXNzKHNlbGYpOgorICAgICAgICByZXF1ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2Rl
ZigpCisgICAgICAgIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9u
cyddID0gKAorICAgICAgICAgICAgJ3BlcmZyYW1lLWNvbXByZXNzOyBtZXRob2Q9ZGVmbGF0ZScp
CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9kZWYpCisgICAgICAg
IGhhbmRzaGFrZXIgPSBfY3JlYXRlX2hhbmRzaGFrZXIocmVxdWVzdCkKKyAgICAgICAgaGFuZHNo
YWtlci5kb19oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihyZXF1
ZXN0LndzX2V4dGVuc2lvbnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1vbi5QRVJG
UkFNRV9DT01QUkVTU0lPTl9FWFRFTlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVx
dWVzdC53c19leHRlbnNpb25zWzBdLm5hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgx
LCBsZW4ocmVxdWVzdC53c19leHRlbnNpb25fcHJvY2Vzc29ycykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY29tbW9uLlBFUkZSQU1FX0NPTVBSRVNTSU9OX0VYVEVOU0lPTiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICByZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzWzBdLm5hbWUo
KSkKKworICAgIGRlZiB0ZXN0X2RvX2hhbmRzaGFrZV93aXRoX3Blcm1lc3NhZ2VfY29tcHJlc3Mo
c2VsZik6CisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkK
KyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJ10g
PSAoCisgICAgICAgICAgICAncGVybWVzc2FnZS1jb21wcmVzczsgbWV0aG9kPWRlZmxhdGUnKQor
ICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICBo
YW5kc2hha2VyID0gX2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVlc3QpCisgICAgICAgIGhhbmRzaGFr
ZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ocmVxdWVz
dC53c19leHRlbnNpb25zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tb24uUEVSTUVT
U0FHRV9DT01QUkVTU0lPTl9FWFRFTlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVx
dWVzdC53c19leHRlbnNpb25zWzBdLm5hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgx
LCBsZW4ocmVxdWVzdC53c19leHRlbnNpb25fcHJvY2Vzc29ycykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY29tbW9uLlBFUk1FU1NBR0VfQ09NUFJFU1NJT05fRVhURU5TSU9OLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qud3NfZXh0ZW5zaW9uX3Byb2Nlc3NvcnNbMF0ubmFt
ZSgpKQorCisgICAgZGVmIHRlc3RfZG9faGFuZHNoYWtlX3dpdGhfcXVvdGVkX2V4dGVuc2lvbnMo
c2VsZik6CisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkK
KyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJ10g
PSAoCisgICAgICAgICAgICAncGVybWVzc2FnZS1jb21wcmVzczsgbWV0aG9kPWRlZmxhdGUsICwg
JworICAgICAgICAgICAgJ3Vua25vd247IGUgICA9ICAgICJtY14yIjsgbWE9IlxyXG4gICAgICBc
XFxyZiAgIjsgcHY9bnJ0JykKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJl
cXVlc3RfZGVmKQorICAgICAgICBoYW5kc2hha2VyID0gX2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVl
c3QpCisgICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgyLCBsZW4ocmVxdWVzdC53c19yZXF1ZXN0ZWRfZXh0ZW5zaW9ucykpCisgICAgICAg
IGZpcnN0X2V4dGVuc2lvbiA9IHJlcXVlc3Qud3NfcmVxdWVzdGVkX2V4dGVuc2lvbnNbMF0KKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgncGVybWVzc2FnZS1jb21wcmVzcycsIGZpcnN0X2V4dGVu
c2lvbi5uYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydtZXRob2QnXSwgZmlyc3Rf
ZXh0ZW5zaW9uLmdldF9wYXJhbWV0ZXJfbmFtZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnZGVmbGF0ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfZXh0ZW5zaW9uLmdl
dF9wYXJhbWV0ZXJfdmFsdWUoJ21ldGhvZCcpKQorICAgICAgICBzZWNvbmRfZXh0ZW5zaW9uID0g
cmVxdWVzdC53c19yZXF1ZXN0ZWRfZXh0ZW5zaW9uc1sxXQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCd1bmtub3duJywgc2Vjb25kX2V4dGVuc2lvbi5uYW1lKCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoCisgICAgICAgICAgICBbJ2UnLCAnbWEnLCAncHYnXSwgc2Vjb25kX2V4dGVuc2lv
bi5nZXRfcGFyYW1ldGVyX25hbWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ21jXjIn
LCBzZWNvbmRfZXh0ZW5zaW9uLmdldF9wYXJhbWV0ZXJfdmFsdWUoJ2UnKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnIFxyZiAnLCBzZWNvbmRfZXh0ZW5zaW9uLmdldF9wYXJhbWV0ZXJfdmFs
dWUoJ21hJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ25ydCcsIHNlY29uZF9leHRlbnNp
b24uZ2V0X3BhcmFtZXRlcl92YWx1ZSgncHYnKSkKKworICAgIGRlZiB0ZXN0X2RvX2hhbmRzaGFr
ZV93aXRoX29wdGlvbmFsX2hlYWRlcnMoc2VsZik6CisgICAgICAgIHJlcXVlc3RfZGVmID0gX2Ny
ZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snRW1w
dHlWYWx1ZSddID0gJycKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snQUtleSddID0gJ0FW
YWx1ZScKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQor
ICAgICAgICBoYW5kc2hha2VyID0gX2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVlc3QpCisgICAgICAg
IGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAg
ICAgICAgICAgICdBVmFsdWUnLCByZXF1ZXN0LmhlYWRlcnNfaW5bJ0FLZXknXSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICcnLCByZXF1ZXN0LmhlYWRlcnNfaW5bJ0Vt
cHR5VmFsdWUnXSkKKworICAgIGRlZiB0ZXN0X2Fib3J0X2V4dHJhX2hhbmRzaGFrZShzZWxmKToK
KyAgICAgICAgaGFuZHNoYWtlciA9IEhhbmRzaGFrZXIoCisgICAgICAgICAgICBfY3JlYXRlX3Jl
cXVlc3QoX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkpLAorICAgICAgICAgICAgQWJvcnRlZEJ5
VXNlckRpc3BhdGNoZXIoKSkKKyAgICAgICAgIyBkb19leHRyYV9oYW5kc2hha2UgcmFpc2VzIGFu
IEFib3J0ZWRCeVVzZXJFeGNlcHRpb24uIENoZWNrIHRoYXQgaXQncworICAgICAgICAjIG5vdCBj
YXVnaHQgYnkgZG9faGFuZHNoYWtlLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBYm9ydGVk
QnlVc2VyRXhjZXB0aW9uLCBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSkKKworICAgIGRlZiB0ZXN0
X2RvX2hhbmRzaGFrZV93aXRoX211eF9hbmRfZGVmbGF0ZV9mcmFtZShzZWxmKToKKyAgICAgICAg
cmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICByZXF1ZXN0
X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnXSA9ICgnJXMsICVzJyAlICgK
KyAgICAgICAgICAgICAgICBjb21tb24uTVVYX0VYVEVOU0lPTiwKKyAgICAgICAgICAgICAgICBj
b21tb24uREVGTEFURV9GUkFNRV9FWFRFTlNJT04pKQorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0
ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICBoYW5kc2hha2VyID0gX2NyZWF0ZV9oYW5k
c2hha2VyKHJlcXVlc3QpCisgICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAg
ICAgIyBtdXggc2hvdWxkIGJlIHJlamVjdGVkLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEs
IGxlbihyZXF1ZXN0LndzX2V4dGVuc2lvbnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNv
bW1vbi5ERUZMQVRFX0ZSQU1FX0VYVEVOU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXF1ZXN0LndzX2V4dGVuc2lvbnNbMF0ubmFtZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KDIsIGxlbihyZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChjb21tb24uTVVYX0VYVEVOU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICByZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzWzBdLm5hbWUoKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjb21tb24uREVGTEFURV9GUkFNRV9FWFRFTlNJT04sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVxdWVzdC53c19leHRlbnNpb25fcHJvY2Vzc29yc1sxXS5uYW1lKCkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihyZXF1ZXN0LCAnbXV4X3Byb2Nlc3Nv
cicpKQorCisgICAgZGVmIHRlc3RfZG9faGFuZHNoYWtlX3dpdGhfZGVmbGF0ZV9mcmFtZV9hbmRf
bXV4KHNlbGYpOgorICAgICAgICByZXF1ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2Rl
ZigpCisgICAgICAgIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9u
cyddID0gKCclcywgJXMnICUgKAorICAgICAgICAgICAgICAgIGNvbW1vbi5ERUZMQVRFX0ZSQU1F
X0VYVEVOU0lPTiwKKyAgICAgICAgICAgICAgICBjb21tb24uTVVYX0VYVEVOU0lPTikpCisgICAg
ICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9kZWYpCisgICAgICAgIGhhbmRz
aGFrZXIgPSBfY3JlYXRlX2hhbmRzaGFrZXIocmVxdWVzdCkKKyAgICAgICAgaGFuZHNoYWtlci5k
b19oYW5kc2hha2UoKQorICAgICAgICAjIG11eCBzaG91bGQgYmUgcmVqZWN0ZWQuCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHJlcXVlc3Qud3NfZXh0ZW5zaW9ucykpCisgICAgICAg
IGZpcnN0X2V4dGVuc2lvbiA9IHJlcXVlc3Qud3NfZXh0ZW5zaW9uc1swXQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNvbW1vbi5ERUZMQVRFX0ZSQU1FX0VYVEVOU0lPTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBmaXJzdF9leHRlbnNpb24ubmFtZSgpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKDIsIGxlbihyZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChjb21tb24uREVGTEFURV9GUkFNRV9FWFRFTlNJT04sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVxdWVzdC53c19leHRlbnNpb25fcHJvY2Vzc29yc1swXS5uYW1l
KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9uLk1VWF9FWFRFTlNJT04sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC53c19leHRlbnNpb25fcHJvY2Vzc29yc1sxXS5u
YW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihyZXF1ZXN0LCAnbXV4Jykp
CisKKyAgICBkZWYgdGVzdF9kb19oYW5kc2hha2Vfd2l0aF9wZXJtZXNzYWdlX2NvbXByZXNzX2Fu
ZF9tdXgoc2VsZik6CisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3Rf
ZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snU2VjLVdlYlNvY2tldC1FeHRlbnNp
b25zJ10gPSAoCisgICAgICAgICAgICAnJXM7IG1ldGhvZD1kZWZsYXRlLCAlcycgJSAoCisgICAg
ICAgICAgICAgICAgY29tbW9uLlBFUk1FU1NBR0VfQ09NUFJFU1NJT05fRVhURU5TSU9OLAorICAg
ICAgICAgICAgICAgIGNvbW1vbi5NVVhfRVhURU5TSU9OKSkKKyAgICAgICAgcmVxdWVzdCA9IF9j
cmVhdGVfcmVxdWVzdChyZXF1ZXN0X2RlZikKKyAgICAgICAgaGFuZHNoYWtlciA9IF9jcmVhdGVf
aGFuZHNoYWtlcihyZXF1ZXN0KQorICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ocmVxdWVzdC53c19leHRlbnNpb25zKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tb24uTVVYX0VYVEVOU0lPTiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICByZXF1ZXN0LndzX2V4dGVuc2lvbnNbMF0ubmFtZSgpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihyZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNzb3Jz
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tb24uUEVSTUVTU0FHRV9DT01QUkVTU0lP
Tl9FWFRFTlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC53c19leHRlbnNp
b25fcHJvY2Vzc29yc1swXS5uYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9u
Lk1VWF9FWFRFTlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC53c19leHRl
bnNpb25fcHJvY2Vzc29yc1sxXS5uYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNh
dHRyKHJlcXVlc3QsICdtdXhfcHJvY2Vzc29yJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShy
ZXF1ZXN0Lm11eF9wcm9jZXNzb3IuaXNfYWN0aXZlKCkpCisgICAgICAgIG11eF9leHRlbnNpb25z
ID0gcmVxdWVzdC5tdXhfcHJvY2Vzc29yLmV4dGVuc2lvbnMoKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKDEsIGxlbihtdXhfZXh0ZW5zaW9ucykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Y29tbW9uLlBFUk1FU1NBR0VfQ09NUFJFU1NJT05fRVhURU5TSU9OLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIG11eF9leHRlbnNpb25zWzBdLm5hbWUoKSkKKworICAgIGRlZiB0ZXN0X2RvX2hh
bmRzaGFrZV93aXRoX211eF9hbmRfcGVybWVzc2FnZV9jb21wcmVzcyhzZWxmKToKKyAgICAgICAg
cmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICByZXF1ZXN0
X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnXSA9ICgKKyAgICAgICAgICAg
ICclcywgJXM7IG1ldGhvZD1kZWZsYXRlJyAlICgKKyAgICAgICAgICAgICAgICBjb21tb24uTVVY
X0VYVEVOU0lPTiwKKyAgICAgICAgICAgICAgICBjb21tb24uUEVSTUVTU0FHRV9DT01QUkVTU0lP
Tl9FWFRFTlNJT04pKQorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3Rf
ZGVmKQorICAgICAgICBoYW5kc2hha2VyID0gX2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVlc3QpCisg
ICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgIyBtdXggc2hvdWxkIGJl
IHJlamVjdGVkLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihyZXF1ZXN0LndzX2V4
dGVuc2lvbnMpKQorICAgICAgICBmaXJzdF9leHRlbnNpb24gPSByZXF1ZXN0LndzX2V4dGVuc2lv
bnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tb24uUEVSTUVTU0FHRV9DT01QUkVT
U0lPTl9FWFRFTlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfZXh0ZW5zaW9u
Lm5hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4ocmVxdWVzdC53c19leHRl
bnNpb25fcHJvY2Vzc29ycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9uLk1VWF9F
WFRFTlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC53c19leHRlbnNpb25f
cHJvY2Vzc29yc1swXS5uYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9uLlBF
Uk1FU1NBR0VfQ09NUFJFU1NJT05fRVhURU5TSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcXVlc3Qud3NfZXh0ZW5zaW9uX3Byb2Nlc3NvcnNbMV0ubmFtZSgpKQorICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKGhhc2F0dHIocmVxdWVzdCwgJ211eF9wcm9jZXNzb3InKSkKKworICAgIGRl
ZiB0ZXN0X2JhZF9yZXF1ZXN0cyhzZWxmKToKKyAgICAgICAgYmFkX2Nhc2VzID0gWworICAgICAg
ICAgICAgKCdIVFRQIHJlcXVlc3QnLAorICAgICAgICAgICAgIFJlcXVlc3REZWZpbml0aW9uKAor
ICAgICAgICAgICAgICAgICAnR0VUJywgJy9kZW1vJywKKyAgICAgICAgICAgICAgICAgeydIb3N0
JzogJ3d3dy5nb29nbGUuY29tJywKKyAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzoKKyAg
ICAgICAgICAgICAgICAgICAgICAnTW96aWxsYS81LjAgKE1hY2ludG9zaDsgVTsgSW50ZWwgTWFj
IE9TIFggMTAuNTsnCisgICAgICAgICAgICAgICAgICAgICAgJyBlbi1VUzsgcnY6MS45LjEuMykg
R2Vja28vMjAwOTA4MjQgRmlyZWZveC8zLjUuMycKKyAgICAgICAgICAgICAgICAgICAgICAnIEdU
QjYgR1RCQScsCisgICAgICAgICAgICAgICAgICAnQWNjZXB0JzoKKyAgICAgICAgICAgICAgICAg
ICAgICAndGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0w
LjksJworICAgICAgICAgICAgICAgICAgICAgICcqLyo7cT0wLjgnLAorICAgICAgICAgICAgICAg
ICAgJ0FjY2VwdC1MYW5ndWFnZSc6ICdlbi11cyxlbjtxPTAuNScsCisgICAgICAgICAgICAgICAg
ICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAsZGVmbGF0ZScsCisgICAgICAgICAgICAgICAgICAn
QWNjZXB0LUNoYXJzZXQnOiAnSVNPLTg4NTktMSx1dGYtODtxPTAuNywqO3E9MC43JywKKyAgICAg
ICAgICAgICAgICAgICdLZWVwLUFsaXZlJzogJzMwMCcsCisgICAgICAgICAgICAgICAgICAnQ29u
bmVjdGlvbic6ICdrZWVwLWFsaXZlJ30pLCBOb25lLCBUcnVlKV0KKworICAgICAgICByZXF1ZXN0
X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3RfZGVmLm1l
dGhvZCA9ICdQT1NUJworICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnV3JvbmcgbWV0aG9kJywg
cmVxdWVzdF9kZWYsIE5vbmUsIFRydWUpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0
ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgZGVsIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ0hv
c3QnXQorICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnTWlzc2luZyBIb3N0JywgcmVxdWVzdF9k
ZWYsIE5vbmUsIFRydWUpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3Jl
cXVlc3RfZGVmKCkKKyAgICAgICAgZGVsIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ1VwZ3JhZGUnXQor
ICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnTWlzc2luZyBVcGdyYWRlJywgcmVxdWVzdF9kZWYs
IE5vbmUsIFRydWUpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVl
c3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snVXBncmFkZSddID0gJ25vbndl
YnNvY2tldCcKKyAgICAgICAgYmFkX2Nhc2VzLmFwcGVuZCgoJ1dyb25nIFVwZ3JhZGUnLCByZXF1
ZXN0X2RlZiwgTm9uZSwgVHJ1ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dv
b2RfcmVxdWVzdF9kZWYoKQorICAgICAgICBkZWwgcmVxdWVzdF9kZWYuaGVhZGVyc1snQ29ubmVj
dGlvbiddCisgICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoKCdNaXNzaW5nIENvbm5lY3Rpb24nLCBy
ZXF1ZXN0X2RlZiwgTm9uZSwgVHJ1ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRl
X2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydDb25uZWN0
aW9uJ10gPSAnRG93bmdyYWRlJworICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnV3JvbmcgQ29u
bmVjdGlvbicsIHJlcXVlc3RfZGVmLCBOb25lLCBUcnVlKSkKKworICAgICAgICByZXF1ZXN0X2Rl
ZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIGRlbCByZXF1ZXN0X2RlZi5o
ZWFkZXJzWydTZWMtV2ViU29ja2V0LUtleSddCisgICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoKCdN
aXNzaW5nIFNlYy1XZWJTb2NrZXQtS2V5JywgcmVxdWVzdF9kZWYsIDQwMCwgVHJ1ZSkpCisKKyAg
ICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICBy
ZXF1ZXN0X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LUtleSddID0gKAorICAgICAgICAgICAg
J2RHaGxJSE5oYlhCc1pTQnViMjVqWlE9PWdhcmJhZ2UnKQorICAgICAgICBiYWRfY2FzZXMuYXBw
ZW5kKCgnV3JvbmcgU2VjLVdlYlNvY2tldC1LZXkgKHdpdGggZ2FyYmFnZSBvbiB0aGUgdGFpbCkn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2RlZiwgNDAwLCBUcnVlKSkKKwor
ICAgICAgICByZXF1ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAg
IHJlcXVlc3RfZGVmLmhlYWRlcnNbJ1NlYy1XZWJTb2NrZXQtS2V5J10gPSAnWVE9PScgICMgQkFT
RTY0IG9mICdhJworICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKAorICAgICAgICAgICAgKCdXcm9u
ZyBTZWMtV2ViU29ja2V0LUtleSAoZGVjb2RlZCB2YWx1ZSBpcyBub3QgMTYgb2N0ZXRzIGxvbmcp
JywKKyAgICAgICAgICAgICByZXF1ZXN0X2RlZiwgNDAwLCBUcnVlKSkKKworICAgICAgICByZXF1
ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgICMgVGhlIGxhc3Qg
Y2hhcmFjdGVyIHJpZ2h0IGJlZm9yZSA9PSBtdXN0IGJlIGFueSBvZiBBLCBRLCB3IGFuZCBnLgor
ICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LUtleSddID0gKAorICAg
ICAgICAgICAgJ0FRSURCQVVHQndnSkNnc01EUTRQRUM9PScpCisgICAgICAgIGJhZF9jYXNlcy5h
cHBlbmQoCisgICAgICAgICAgICAoJ1dyb25nIFNlYy1XZWJTb2NrZXQtS2V5IChwYWRkaW5nIGJp
dHMgYXJlIG5vdCB6ZXJvKScsCisgICAgICAgICAgICAgcmVxdWVzdF9kZWYsIDQwMCwgVHJ1ZSkp
CisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAg
ICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LUtleSddID0gKAorICAgICAg
ICAgICAgJ2RHaGxJSE5oYlhCc1pTQnViMjVqWlE9PSxkR2hsSUhOaGJYQnNaU0J1YjI1alpRPT0n
KQorICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKAorICAgICAgICAgICAgKCdXcm9uZyBTZWMtV2Vi
U29ja2V0LUtleSAobXVsdGlwbGUgdmFsdWVzKScsCisgICAgICAgICAgICAgcmVxdWVzdF9kZWYs
IDQwMCwgVHJ1ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVz
dF9kZWYoKQorICAgICAgICBkZWwgcmVxdWVzdF9kZWYuaGVhZGVyc1snU2VjLVdlYlNvY2tldC1W
ZXJzaW9uJ10KKyAgICAgICAgYmFkX2Nhc2VzLmFwcGVuZCgoJ01pc3NpbmcgU2VjLVdlYlNvY2tl
dC1WZXJzaW9uJywgcmVxdWVzdF9kZWYsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IFRydWUpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVm
KCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snU2VjLVdlYlNvY2tldC1WZXJzaW9uJ10g
PSAnMycKKyAgICAgICAgYmFkX2Nhc2VzLmFwcGVuZCgoJ1dyb25nIFNlYy1XZWJTb2NrZXQtVmVy
c2lvbicsIHJlcXVlc3RfZGVmLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxz
ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQor
ICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LVZlcnNpb24nXSA9ICcx
MywgMTMnCisgICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoKCdXcm9uZyBTZWMtV2ViU29ja2V0LVZl
cnNpb24gKG11bHRpcGxlIHZhbHVlcyknLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0X2RlZiwgNDAwLCBUcnVlKSkKKworICAgICAgICByZXF1ZXN0X2RlZiA9IF9jcmVhdGVfZ29v
ZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ1NlYy1XZWJTb2Nr
ZXQtUHJvdG9jb2wnXSA9ICdpbGxlZ2FsXHgwOXByb3RvY29sJworICAgICAgICBiYWRfY2FzZXMu
YXBwZW5kKCgnSWxsZWdhbCBTZWMtV2ViU29ja2V0LVByb3RvY29sJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdF9kZWYsIDQwMCwgVHJ1ZSkpCisKKyAgICAgICAgcmVxdWVzdF9k
ZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICByZXF1ZXN0X2RlZi5oZWFk
ZXJzWydTZWMtV2ViU29ja2V0LVByb3RvY29sJ10gPSAnJworICAgICAgICBiYWRfY2FzZXMuYXBw
ZW5kKCgnRW1wdHkgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3RfZGVmLCA0MDAsIFRydWUpKQorCisgICAgICAgIGZvciAoY2FzZV9uYW1l
LCByZXF1ZXN0X2RlZiwgZXhwZWN0ZWRfc3RhdHVzLAorICAgICAgICAgICAgIGV4cGVjdF9oYW5k
c2hha2VfZXhjZXB0aW9uKSBpbiBiYWRfY2FzZXM6CisgICAgICAgICAgICByZXF1ZXN0ID0gX2Ny
ZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICAgICAgaGFuZHNoYWtlciA9IEhhbmRz
aGFrZXIocmVxdWVzdCwgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAg
ICBzZWxmLmZhaWwoJ05vIGV4Y2VwdGlvbiB0aHJvd24gZm9yIFwnJXNcJyBjYXNlJyAlIGNhc2Vf
bmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBIYW5kc2hha2VFeGNlcHRpb24sIGU6CisgICAgICAg
ICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdF9oYW5kc2hha2VfZXhjZXB0aW9uKQorICAg
ICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfc3RhdHVzLCBlLnN0YXR1cykK
KyAgICAgICAgICAgIGV4Y2VwdCBWZXJzaW9uRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UoZXhwZWN0X2hhbmRzaGFrZV9leGNlcHRpb24pCisKKworaWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKKworCisjIHZpOnN0cz00
IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93
cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0X2hhbmRzaGFrZV9oeWJpMDAu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3
ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdF9oYW5kc2hha2VfaHliaTAwLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcz
ZjlmMjdjYTJkOTQyMWIyMzAxNWY1OGM4OTNhY2YxZGMwMDlkZWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJz
b2NrZXQvc3JjL3Rlc3QvdGVzdF9oYW5kc2hha2VfaHliaTAwLnB5CkBAIC0wLDAgKzEsNTE2IEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMu
CisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3Rz
IGZvciBoYW5kc2hha2UuaHliaTAwIG1vZHVsZS4iIiIKKworCitpbXBvcnQgdW5pdHRlc3QKKwor
aW1wb3J0IHNldF9zeXNfcGF0aCAgIyBVcGRhdGUgc3lzLnBhdGggdG8gbG9jYXRlIG1vZF9weXdl
YnNvY2tldCBtb2R1bGUuCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBp
bXBvcnQgSGFuZHNoYWtlRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2Uu
aHliaTAwIGltcG9ydCBIYW5kc2hha2VyCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2Uu
aHliaTAwIGltcG9ydCBfdmFsaWRhdGVfc3VicHJvdG9jb2wKK2Zyb20gdGVzdCBpbXBvcnQgbW9j
aworCisKK19URVNUX0tFWTEgPSAnNCBAMSAgNDY1NDZ4VyUwbCAxIDUnCitfVEVTVF9LRVkyID0g
JzEyOTk4IDUgWTMgMSAgLlAwMCcKK19URVNUX0tFWTMgPSAnXm46ZHNbNFUnCitfVEVTVF9DSEFM
TEVOR0VfUkVTUE9OU0UgPSAnOGpLU1wneTpHKkNvLFd4YS0nCisKKworX0dPT0RfUkVRVUVTVCA9
ICgKKyAgICA4MCwKKyAgICAnR0VUJywKKyAgICAnL2RlbW8nLAorICAgIHsKKyAgICAgICAgJ0hv
c3QnOiAnZXhhbXBsZS5jb20nLAorICAgICAgICAnQ29ubmVjdGlvbic6ICdVcGdyYWRlJywKKyAg
ICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5Mic6IF9URVNUX0tFWTIsCisgICAgICAgICdTZWMtV2Vi
U29ja2V0LVByb3RvY29sJzogJ3NhbXBsZScsCisgICAgICAgICdVcGdyYWRlJzogJ1dlYlNvY2tl
dCcsCisgICAgICAgICdTZWMtV2ViU29ja2V0LUtleTEnOiBfVEVTVF9LRVkxLAorICAgICAgICAn
T3JpZ2luJzogJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgfSwKKyAgICBfVEVTVF9LRVkzKQor
CitfR09PRF9SRVFVRVNUX0NBUElUQUxJWkVEX0hFQURFUl9WQUxVRVMgPSAoCisgICAgODAsCisg
ICAgJ0dFVCcsCisgICAgJy9kZW1vJywKKyAgICB7CisgICAgICAgICdIb3N0JzogJ2V4YW1wbGUu
Y29tJywKKyAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnVVBHUkFERScsCisgICAgICAgICdTZWMtV2Vi
U29ja2V0LUtleTInOiBfVEVTVF9LRVkyLAorICAgICAgICAnU2VjLVdlYlNvY2tldC1Qcm90b2Nv
bCc6ICdzYW1wbGUnLAorICAgICAgICAnVXBncmFkZSc6ICdXRUJTT0NLRVQnLAorICAgICAgICAn
U2VjLVdlYlNvY2tldC1LZXkxJzogX1RFU1RfS0VZMSwKKyAgICAgICAgJ09yaWdpbic6ICdodHRw
Oi8vZXhhbXBsZS5jb20nLAorICAgIH0sCisgICAgX1RFU1RfS0VZMykKKworX0dPT0RfUkVRVUVT
VF9DQVNFX01JWEVEX0hFQURFUl9OQU1FUyA9ICgKKyAgICA4MCwKKyAgICAnR0VUJywKKyAgICAn
L2RlbW8nLAorICAgIHsKKyAgICAgICAgJ2hPc1QnOiAnZXhhbXBsZS5jb20nLAorICAgICAgICAn
Y09uTmVDdElvTic6ICdVcGdyYWRlJywKKyAgICAgICAgJ3NFYy13RWJzT2NLZVQta0V5Mic6IF9U
RVNUX0tFWTIsCisgICAgICAgICdzRWMtd0Vic09jS2VULXBSb1RvQ29MJzogJ3NhbXBsZScsCisg
ICAgICAgICd1UGdSYURlJzogJ1dlYlNvY2tldCcsCisgICAgICAgICdzRWMtd0Vic09jS2VULWtF
eTEnOiBfVEVTVF9LRVkxLAorICAgICAgICAnb1JpR2lOJzogJ2h0dHA6Ly9leGFtcGxlLmNvbScs
CisgICAgfSwKKyAgICBfVEVTVF9LRVkzKQorCitfR09PRF9SRVNQT05TRV9ERUZBVUxUX1BPUlQg
PSAoCisgICAgJ0hUVFAvMS4xIDEwMSBXZWJTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicK
KyAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxy
XG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtTG9jYXRpb246IHdzOi8vZXhhbXBsZS5jb20vZGVtb1xy
XG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJwor
ICAgICdTZWMtV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJworICAgICdcclxuJyArCisg
ICAgX1RFU1RfQ0hBTExFTkdFX1JFU1BPTlNFKQorCitfR09PRF9SRVNQT05TRV9TRUNVUkUgPSAo
CisgICAgJ0hUVFAvMS4xIDEwMSBXZWJTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKKyAg
ICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4n
CisgICAgJ1NlYy1XZWJTb2NrZXQtTG9jYXRpb246IHdzczovL2V4YW1wbGUuY29tL2RlbW9cclxu
JworICAgICdTZWMtV2ViU29ja2V0LU9yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicKKyAg
ICAnU2VjLVdlYlNvY2tldC1Qcm90b2NvbDogc2FtcGxlXHJcbicKKyAgICAnXHJcbicgKworICAg
IF9URVNUX0NIQUxMRU5HRV9SRVNQT05TRSkKKworX0dPT0RfUkVRVUVTVF9OT05ERUZBVUxUX1BP
UlQgPSAoCisgICAgODA4MSwKKyAgICAnR0VUJywKKyAgICAnL2RlbW8nLAorICAgIHsKKyAgICAg
ICAgJ0hvc3QnOiAnZXhhbXBsZS5jb206ODA4MScsCisgICAgICAgICdDb25uZWN0aW9uJzogJ1Vw
Z3JhZGUnLAorICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkyJzogX1RFU1RfS0VZMiwKKyAgICAg
ICAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnOiAnc2FtcGxlJywKKyAgICAgICAgJ1VwZ3JhZGUn
OiAnV2ViU29ja2V0JywKKyAgICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5MSc6IF9URVNUX0tFWTEs
CisgICAgICAgICdPcmlnaW4nOiAnaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICB9LAorICAgIF9U
RVNUX0tFWTMpCisKK19HT09EX1JFU1BPTlNFX05PTkRFRkFVTFRfUE9SVCA9ICgKKyAgICAnSFRU
UC8xLjEgMTAxIFdlYlNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuJworICAgICdVcGdyYWRl
OiBXZWJTb2NrZXRcclxuJworICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicKKyAgICAnU2Vj
LVdlYlNvY2tldC1Mb2NhdGlvbjogd3M6Ly9leGFtcGxlLmNvbTo4MDgxL2RlbW9cclxuJworICAg
ICdTZWMtV2ViU29ja2V0LU9yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicKKyAgICAnU2Vj
LVdlYlNvY2tldC1Qcm90b2NvbDogc2FtcGxlXHJcbicKKyAgICAnXHJcbicgKworICAgIF9URVNU
X0NIQUxMRU5HRV9SRVNQT05TRSkKKworX0dPT0RfUkVTUE9OU0VfU0VDVVJFX05PTkRFRiA9ICgK
KyAgICAnSFRUUC8xLjEgMTAxIFdlYlNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuJworICAg
ICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJworICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicK
KyAgICAnU2VjLVdlYlNvY2tldC1Mb2NhdGlvbjogd3NzOi8vZXhhbXBsZS5jb206ODA4MS9kZW1v
XHJcbicKKyAgICAnU2VjLVdlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4n
CisgICAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2w6IHNhbXBsZVxyXG4nCisgICAgJ1xyXG4nICsK
KyAgICBfVEVTVF9DSEFMTEVOR0VfUkVTUE9OU0UpCisKK19HT09EX1JFUVVFU1RfTk9fUFJPVE9D
T0wgPSAoCisgICAgODAsCisgICAgJ0dFVCcsCisgICAgJy9kZW1vJywKKyAgICB7CisgICAgICAg
ICdIb3N0JzogJ2V4YW1wbGUuY29tJywKKyAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnVXBncmFkZScs
CisgICAgICAgICdTZWMtV2ViU29ja2V0LUtleTInOiBfVEVTVF9LRVkyLAorICAgICAgICAnVXBn
cmFkZSc6ICdXZWJTb2NrZXQnLAorICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkxJzogX1RFU1Rf
S0VZMSwKKyAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vZXhhbXBsZS5jb20nLAorICAgIH0sCisg
ICAgX1RFU1RfS0VZMykKKworX0dPT0RfUkVTUE9OU0VfTk9fUFJPVE9DT0wgPSAoCisgICAgJ0hU
VFAvMS4xIDEwMSBXZWJTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKKyAgICAnVXBncmFk
ZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgJ1Nl
Yy1XZWJTb2NrZXQtTG9jYXRpb246IHdzOi8vZXhhbXBsZS5jb20vZGVtb1xyXG4nCisgICAgJ1Nl
Yy1XZWJTb2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJworICAgICdcclxuJyAr
CisgICAgX1RFU1RfQ0hBTExFTkdFX1JFU1BPTlNFKQorCitfR09PRF9SRVFVRVNUX1dJVEhfT1BU
SU9OQUxfSEVBREVSUyA9ICgKKyAgICA4MCwKKyAgICAnR0VUJywKKyAgICAnL2RlbW8nLAorICAg
IHsKKyAgICAgICAgJ0hvc3QnOiAnZXhhbXBsZS5jb20nLAorICAgICAgICAnQ29ubmVjdGlvbic6
ICdVcGdyYWRlJywKKyAgICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5Mic6IF9URVNUX0tFWTIsCisg
ICAgICAgICdFbXB0eVZhbHVlJzogJycsCisgICAgICAgICdTZWMtV2ViU29ja2V0LVByb3RvY29s
JzogJ3NhbXBsZScsCisgICAgICAgICdBS2V5JzogJ0FWYWx1ZScsCisgICAgICAgICdVcGdyYWRl
JzogJ1dlYlNvY2tldCcsCisgICAgICAgICdTZWMtV2ViU29ja2V0LUtleTEnOiBfVEVTVF9LRVkx
LAorICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgfSwKKyAgICBf
VEVTVF9LRVkzKQorCisjIFRPRE8odHlvc2hpbm8pOiBJbmNsdWRlIFxyIFxuIGluIGtleTMsIGNo
YWxsZW5nZSByZXNwb25zZS4KKworX0dPT0RfUkVRVUVTVF9XSVRIX05PTlBSSU5UQUJMRV9LRVkg
PSAoCisgICAgODAsCisgICAgJ0dFVCcsCisgICAgJy9kZW1vJywKKyAgICB7CisgICAgICAgICdI
b3N0JzogJ2V4YW1wbGUuY29tJywKKyAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnVXBncmFkZScsCisg
ICAgICAgICdTZWMtV2ViU29ja2V0LUtleTInOiAneSAgUjIgNDggUTFPNCAgZXxCVjMgaTUgMSAg
dS0gNjUnLAorICAgICAgICAnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCc6ICdzYW1wbGUnLAorICAg
ICAgICAnVXBncmFkZSc6ICdXZWJTb2NrZXQnLAorICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkx
JzogJzM2IDcgICA3NCBpICA5MiAyXCdtIDkgMEcnLAorICAgICAgICAnT3JpZ2luJzogJ2h0dHA6
Ly9leGFtcGxlLmNvbScsCisgICAgfSwKKyAgICAnJy5qb2luKG1hcChjaHIsIFsweDAxLCAweGQx
LCAweGRkLCAweDNiLCAweGQxLCAweDU2LCAweDYzLCAweGZmXSkpKQorCitfR09PRF9SRVNQT05T
RV9XSVRIX05PTlBSSU5UQUJMRV9LRVkgPSAoCisgICAgJ0hUVFAvMS4xIDEwMSBXZWJTb2NrZXQg
UHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKKyAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAg
ICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtTG9jYXRpb246
IHdzOi8vZXhhbXBsZS5jb20vZGVtb1xyXG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtT3JpZ2luOiBo
dHRwOi8vZXhhbXBsZS5jb21cclxuJworICAgICdTZWMtV2ViU29ja2V0LVByb3RvY29sOiBzYW1w
bGVcclxuJworICAgICdcclxuJyArCisgICAgJycuam9pbihtYXAoY2hyLCBbMHgwYiwgMHg5OSwg
MHhmYSwgMHg1NSwgMHhiZCwgMHgwMSwgMHgyMywgMHg3YiwKKyAgICAgICAgICAgICAgICAgICAg
ICAweDQ1LCAweGEyLCAweGYxLCAweGQwLCAweDg3LCAweDhhLCAweGVlLCAweGViXSkpKQorCitf
R09PRF9SRVFVRVNUX1dJVEhfUVVFUllfUEFSVCA9ICgKKyAgICA4MCwKKyAgICAnR0VUJywKKyAg
ICAnL2RlbW8/ZT1tYzInLAorICAgIHsKKyAgICAgICAgJ0hvc3QnOiAnZXhhbXBsZS5jb20nLAor
ICAgICAgICAnQ29ubmVjdGlvbic6ICdVcGdyYWRlJywKKyAgICAgICAgJ1NlYy1XZWJTb2NrZXQt
S2V5Mic6IF9URVNUX0tFWTIsCisgICAgICAgICdTZWMtV2ViU29ja2V0LVByb3RvY29sJzogJ3Nh
bXBsZScsCisgICAgICAgICdVcGdyYWRlJzogJ1dlYlNvY2tldCcsCisgICAgICAgICdTZWMtV2Vi
U29ja2V0LUtleTEnOiBfVEVTVF9LRVkxLAorICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9leGFt
cGxlLmNvbScsCisgICAgfSwKKyAgICBfVEVTVF9LRVkzKQorCitfR09PRF9SRVNQT05TRV9XSVRI
X1FVRVJZX1BBUlQgPSAoCisgICAgJ0hUVFAvMS4xIDEwMSBXZWJTb2NrZXQgUHJvdG9jb2wgSGFu
ZHNoYWtlXHJcbicKKyAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlv
bjogVXBncmFkZVxyXG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtTG9jYXRpb246IHdzOi8vZXhhbXBs
ZS5jb20vZGVtbz9lPW1jMlxyXG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtT3JpZ2luOiBodHRwOi8v
ZXhhbXBsZS5jb21cclxuJworICAgICdTZWMtV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxu
JworICAgICdcclxuJyArCisgICAgX1RFU1RfQ0hBTExFTkdFX1JFU1BPTlNFKQorCitfQkFEX1JF
UVVFU1RTID0gKAorICAgICggICMgSFRUUCByZXF1ZXN0CisgICAgICAgIDgwLAorICAgICAgICAn
R0VUJywKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ0hvc3QnOiAn
d3d3Lmdvb2dsZS5jb20nLAorICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAg
KE1hY2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFggMTAuNTsnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICcgZW4tVVM7IHJ2OjEuOS4xLjMpIEdlY2tvLzIwMDkwODI0IEZpcmVmb3gvMy41LjMn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICcgR1RCNiBHVEJBJywKKyAgICAgICAgICAgICdB
Y2NlcHQnOiAndGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7
cT0wLjksJworICAgICAgICAgICAgICAgICAgICAgICcqLyo7cT0wLjgnLAorICAgICAgICAgICAg
J0FjY2VwdC1MYW5ndWFnZSc6ICdlbi11cyxlbjtxPTAuNScsCisgICAgICAgICAgICAnQWNjZXB0
LUVuY29kaW5nJzogJ2d6aXAsZGVmbGF0ZScsCisgICAgICAgICAgICAnQWNjZXB0LUNoYXJzZXQn
OiAnSVNPLTg4NTktMSx1dGYtODtxPTAuNywqO3E9MC43JywKKyAgICAgICAgICAgICdLZWVwLUFs
aXZlJzogJzMwMCcsCisgICAgICAgICAgICAnQ29ubmVjdGlvbic6ICdrZWVwLWFsaXZlJywKKyAg
ICAgICAgfSksCisgICAgKCAgIyBXcm9uZyBtZXRob2QKKyAgICAgICAgODAsCisgICAgICAgICdQ
T1NUJywKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ0hvc3QnOiAn
ZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnVXBncmFkZScsCisgICAg
ICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkyJzogX1RFU1RfS0VZMiwKKyAgICAgICAgICAgICdT
ZWMtV2ViU29ja2V0LVByb3RvY29sJzogJ3NhbXBsZScsCisgICAgICAgICAgICAnVXBncmFkZSc6
ICdXZWJTb2NrZXQnLAorICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5MSc6IF9URVNUX0tF
WTEsCisgICAgICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAg
IH0sCisgICAgICAgIF9URVNUX0tFWTMpLAorICAgICggICMgTWlzc2luZyBVcGdyYWRlCisgICAg
ICAgIDgwLAorICAgICAgICAnR0VUJywKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAg
ICAgICAgICAgJ0hvc3QnOiAnZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ0Nvbm5lY3Rpb24n
OiAnVXBncmFkZScsCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkyJzogX1RFU1RfS0VZ
MiwKKyAgICAgICAgICAgICdTZWMtV2ViU29ja2V0LVByb3RvY29sJzogJ3NhbXBsZScsCisgICAg
ICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkxJzogX1RFU1RfS0VZMSwKKyAgICAgICAgICAgICdP
cmlnaW4nOiAnaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgfSwKKyAgICAgICAgX1RFU1Rf
S0VZMyksCisgICAgKCAgIyBXcm9uZyBVcGdyYWRlCisgICAgICAgIDgwLAorICAgICAgICAnR0VU
JywKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ0hvc3QnOiAnZXhh
bXBsZS5jb20nLAorICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnVXBncmFkZScsCisgICAgICAg
ICAgICAnU2VjLVdlYlNvY2tldC1LZXkyJzogX1RFU1RfS0VZMiwKKyAgICAgICAgICAgICdTZWMt
V2ViU29ja2V0LVByb3RvY29sJzogJ3NhbXBsZScsCisgICAgICAgICAgICAnVXBncmFkZSc6ICdO
b25XZWJTb2NrZXQnLAorICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5MSc6IF9URVNUX0tF
WTEsCisgICAgICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAg
IH0sCisgICAgICAgIF9URVNUX0tFWTMpLAorICAgICggICMgRW1wdHkgV2ViU29ja2V0LVByb3Rv
Y29sCisgICAgICAgIDgwLAorICAgICAgICAnR0VUJywKKyAgICAgICAgJy9kZW1vJywKKyAgICAg
ICAgeworICAgICAgICAgICAgJ0hvc3QnOiAnZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ0Nv
bm5lY3Rpb24nOiAnVXBncmFkZScsCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkyJzog
X1RFU1RfS0VZMiwKKyAgICAgICAgICAgICdTZWMtV2ViU29ja2V0LVByb3RvY29sJzogJycsCisg
ICAgICAgICAgICAnVXBncmFkZSc6ICdXZWJTb2NrZXQnLAorICAgICAgICAgICAgJ1NlYy1XZWJT
b2NrZXQtS2V5MSc6IF9URVNUX0tFWTEsCisgICAgICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9l
eGFtcGxlLmNvbScsCisgICAgICAgIH0sCisgICAgICAgIF9URVNUX0tFWTMpLAorICAgICggICMg
V3JvbmcgcG9ydCBudW1iZXIgZm9ybWF0CisgICAgICAgIDgwLAorICAgICAgICAnR0VUJywKKyAg
ICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ0hvc3QnOiAnZXhhbXBsZS5j
b206MHg1MCcsCisgICAgICAgICAgICAnQ29ubmVjdGlvbic6ICdVcGdyYWRlJywKKyAgICAgICAg
ICAgICdTZWMtV2ViU29ja2V0LUtleTInOiBfVEVTVF9LRVkyLAorICAgICAgICAgICAgJ1NlYy1X
ZWJTb2NrZXQtUHJvdG9jb2wnOiAnc2FtcGxlJywKKyAgICAgICAgICAgICdVcGdyYWRlJzogJ1dl
YlNvY2tldCcsCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkxJzogX1RFU1RfS0VZMSwK
KyAgICAgICAgICAgICdPcmlnaW4nOiAnaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgfSwK
KyAgICAgICAgX1RFU1RfS0VZMyksCisgICAgKCAgIyBIZWFkZXIvY29ubmVjdGlvbiBwb3J0IG1p
c21hdGNoCisgICAgICAgIDgwODAsCisgICAgICAgICdHRVQnLAorICAgICAgICAnL2RlbW8nLAor
ICAgICAgICB7CisgICAgICAgICAgICAnSG9zdCc6ICdleGFtcGxlLmNvbScsCisgICAgICAgICAg
ICAnQ29ubmVjdGlvbic6ICdVcGdyYWRlJywKKyAgICAgICAgICAgICdTZWMtV2ViU29ja2V0LUtl
eTInOiBfVEVTVF9LRVkyLAorICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnOiAn
c2FtcGxlJywKKyAgICAgICAgICAgICdVcGdyYWRlJzogJ1dlYlNvY2tldCcsCisgICAgICAgICAg
ICAnU2VjLVdlYlNvY2tldC1LZXkxJzogX1RFU1RfS0VZMSwKKyAgICAgICAgICAgICdPcmlnaW4n
OiAnaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgfSwKKyAgICAgICAgX1RFU1RfS0VZMyks
CisgICAgKCAgIyBJbGxlZ2FsIFdlYlNvY2tldC1Qcm90b2NvbAorICAgICAgICA4MCwKKyAgICAg
ICAgJ0dFVCcsCisgICAgICAgICcvZGVtbycsCisgICAgICAgIHsKKyAgICAgICAgICAgICdIb3N0
JzogJ2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdDb25uZWN0aW9uJzogJ1VwZ3JhZGUnLAor
ICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5Mic6IF9URVNUX0tFWTIsCisgICAgICAgICAg
ICAnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCc6ICdpbGxlZ2FsXHgwOXByb3RvY29sJywKKyAgICAg
ICAgICAgICdVcGdyYWRlJzogJ1dlYlNvY2tldCcsCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tl
dC1LZXkxJzogX1RFU1RfS0VZMSwKKyAgICAgICAgICAgICdPcmlnaW4nOiAnaHR0cDovL2V4YW1w
bGUuY29tJywKKyAgICAgICAgfSwKKyAgICAgICAgX1RFU1RfS0VZMyksCispCisKKworZGVmIF9j
cmVhdGVfcmVxdWVzdChyZXF1ZXN0X2RlZik6CisgICAgZGF0YSA9ICcnCisgICAgaWYgbGVuKHJl
cXVlc3RfZGVmKSA+IDQ6CisgICAgICAgIGRhdGEgPSByZXF1ZXN0X2RlZls0XQorICAgIGNvbm4g
PSBtb2NrLk1vY2tDb25uKGRhdGEpCisgICAgY29ubi5sb2NhbF9hZGRyID0gKCcwLjAuMC4wJywg
cmVxdWVzdF9kZWZbMF0pCisgICAgcmV0dXJuIG1vY2suTW9ja1JlcXVlc3QoCisgICAgICAgIG1l
dGhvZD1yZXF1ZXN0X2RlZlsxXSwKKyAgICAgICAgdXJpPXJlcXVlc3RfZGVmWzJdLAorICAgICAg
ICBoZWFkZXJzX2luPXJlcXVlc3RfZGVmWzNdLAorICAgICAgICBjb25uZWN0aW9uPWNvbm4pCisK
KworZGVmIF9jcmVhdGVfZ2V0X21lbW9yaXplZF9saW5lcyhsaW5lcyk6CisgICAgIiIiQ3JlYXRl
cyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZ2l2ZW4gc3RyaW5nLiIiIgorCisgICAgZGVm
IGdldF9tZW1vcml6ZWRfbGluZXMoKToKKyAgICAgICAgcmV0dXJuIGxpbmVzCisgICAgcmV0dXJu
IGdldF9tZW1vcml6ZWRfbGluZXMKKworCitkZWYgX2NyZWF0ZV9yZXF1ZXN0c193aXRoX2xpbmVz
KHJlcXVlc3RfbGluZXNfc2V0KToKKyAgICByZXF1ZXN0cyA9IFtdCisgICAgZm9yIGxpbmVzIGlu
IHJlcXVlc3RfbGluZXNfc2V0OgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9H
T09EX1JFUVVFU1QpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfbWVtb3JpemVkX2xp
bmVzID0gX2NyZWF0ZV9nZXRfbWVtb3JpemVkX2xpbmVzKAorICAgICAgICAgICAgICAgIGxpbmVz
KQorICAgICAgICByZXF1ZXN0cy5hcHBlbmQocmVxdWVzdCkKKyAgICByZXR1cm4gcmVxdWVzdHMK
KworCitjbGFzcyBIeUJpMDBIYW5kc2hha2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAg
ICBkZWYgdGVzdF9nb29kX3JlcXVlc3RfZGVmYXVsdF9wb3J0KHNlbGYpOgorICAgICAgICByZXF1
ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9HT09EX1JFUVVFU1QpCisgICAgICAgIGhhbmRzaGFrZXIg
PSBIYW5kc2hha2VyKHJlcXVlc3QsIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgaGFu
ZHNoYWtlci5kb19oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9HT09EX1JF
U1BPTlNFX0RFRkFVTFRfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNv
bm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9kZW1v
JywgcmVxdWVzdC53c19yZXNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaHR0cDov
L2V4YW1wbGUuY29tJywgcmVxdWVzdC53c19vcmlnaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ3dzOi8vZXhhbXBsZS5jb20vZGVtbycsIHJlcXVlc3Qud3NfbG9jYXRpb24pCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ3NhbXBsZScsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBk
ZWYgdGVzdF9nb29kX3JlcXVlc3RfY2FwaXRhbGl6ZWRfaGVhZGVyX3ZhbHVlcyhzZWxmKToKKyAg
ICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfR09PRF9SRVFVRVNUX0NBUElUQUxJWkVE
X0hFQURFUl9WQUxVRVMpCisgICAgICAgIGhhbmRzaGFrZXIgPSBIYW5kc2hha2VyKHJlcXVlc3Qs
IG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2Uo
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9HT09EX1JFU1BPTlNFX0RFRkFVTFRfUE9SVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRh
KCkpCisKKyAgICBkZWYgdGVzdF9nb29kX3JlcXVlc3RfY2FzZV9taXhlZF9oZWFkZXJfbmFtZXMo
c2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoX0dPT0RfUkVRVUVTVF9D
QVNFX01JWEVEX0hFQURFUl9OQU1FUykKKyAgICAgICAgaGFuZHNoYWtlciA9IEhhbmRzaGFrZXIo
cmVxdWVzdCwgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICBoYW5kc2hha2VyLmRvX2hh
bmRzaGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0RfUkVTUE9OU0VfREVGQVVM
VF9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0
dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9zZWN1cmVfZGVmYXVsdF9w
b3J0KHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9HT09EX1JFUVVF
U1QpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5sb2NhbF9hZGRyID0gKCcwLjAuMC4wJywg
NDQzKQorICAgICAgICByZXF1ZXN0LmlzX2h0dHBzXyA9IFRydWUKKyAgICAgICAgaGFuZHNoYWtl
ciA9IEhhbmRzaGFrZXIocmVxdWVzdCwgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICBo
YW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0Rf
UkVTUE9OU0VfU0VDVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVj
dGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc2FtcGxlJywg
cmVxdWVzdC53c19wcm90b2NvbCkKKworICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9ub25kZWZh
dWx0X3BvcnQoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoX0dPT0Rf
UkVRVUVTVF9OT05ERUZBVUxUX1BPUlQpCisgICAgICAgIGhhbmRzaGFrZXIgPSBIYW5kc2hha2Vy
KHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Nr
Lk1vY2tEaXNwYXRjaGVyKCkpCisgICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChfR09PRF9SRVNQT05TRV9OT05ERUZBVUxUX1BPUlQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzYW1wbGUnLCByZXF1ZXN0LndzX3Byb3RvY29s
KQorCisgICAgZGVmIHRlc3RfZ29vZF9yZXF1ZXN0X3NlY3VyZV9ub25fZGVmYXVsdF9wb3J0KHNl
bGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9HT09EX1JFUVVFU1RfTk9O
REVGQVVMVF9QT1JUKQorICAgICAgICByZXF1ZXN0LmlzX2h0dHBzXyA9IFRydWUKKyAgICAgICAg
aGFuZHNoYWtlciA9IEhhbmRzaGFrZXIocmVxdWVzdCwgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQor
ICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoX0dPT0RfUkVTUE9OU0VfU0VDVVJFX05PTkRFRiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ3NhbXBsZScsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBkZWYgdGVzdF9nb29k
X3JlcXVlc3RfZGVmYXVsdF9ub19wcm90b2NvbChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9j
cmVhdGVfcmVxdWVzdChfR09PRF9SRVFVRVNUX05PX1BST1RPQ09MKQorICAgICAgICBoYW5kc2hh
a2VyID0gSGFuZHNoYWtlcihyZXF1ZXN0LCBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCisgICAgICAg
IGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfR09P
RF9SRVNQT05TRV9OT19QUk9UT0NPTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0
LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9u
ZSwgcmVxdWVzdC53c19wcm90b2NvbCkKKworICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9vcHRp
b25hbF9oZWFkZXJzKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9H
T09EX1JFUVVFU1RfV0lUSF9PUFRJT05BTF9IRUFERVJTKQorICAgICAgICBoYW5kc2hha2VyID0g
SGFuZHNoYWtlcihyZXF1ZXN0LCBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCisgICAgICAgIGhhbmRz
aGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQVZhbHVlJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnNfaW5bJ0FLZXknXSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0LmhlYWRlcnNfaW5bJ0VtcHR5VmFsdWUnXSkKKworICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVz
dF93aXRoX25vbnByaW50YWJsZV9rZXkoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRl
X3JlcXVlc3QoX0dPT0RfUkVRVUVTVF9XSVRIX05PTlBSSU5UQUJMRV9LRVkpCisgICAgICAgIGhh
bmRzaGFrZXIgPSBIYW5kc2hha2VyKHJlcXVlc3QsIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAg
ICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KF9HT09EX1JFU1BPTlNFX1dJVEhfTk9OUFJJTlRBQkxFX0tFWSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ3NhbXBsZScsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBkZWYgdGVz
dF9nb29kX3JlcXVlc3Rfd2l0aF9xdWVyeV9wYXJ0KHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0g
X2NyZWF0ZV9yZXF1ZXN0KF9HT09EX1JFUVVFU1RfV0lUSF9RVUVSWV9QQVJUKQorICAgICAgICBo
YW5kc2hha2VyID0gSGFuZHNoYWtlcihyZXF1ZXN0LCBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCisg
ICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChfR09PRF9SRVNQT05TRV9XSVRIX1FVRVJZX1BBUlQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCd3czovL2V4YW1wbGUuY29tL2RlbW8/ZT1tYzInLCByZXF1ZXN0LndzX2xvY2F0aW9u
KQorCisgICAgZGVmIHRlc3RfYmFkX3JlcXVlc3RzKHNlbGYpOgorICAgICAgICBmb3IgcmVxdWVz
dCBpbiBtYXAoX2NyZWF0ZV9yZXF1ZXN0LCBfQkFEX1JFUVVFU1RTKToKKyAgICAgICAgICAgIGhh
bmRzaGFrZXIgPSBIYW5kc2hha2VyKHJlcXVlc3QsIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEhhbmRzaGFrZUV4Y2VwdGlvbiwgaGFuZHNoYWtl
ci5kb19oYW5kc2hha2UpCisKKworY2xhc3MgSHlCaTAwVmFsaWRhdGVTdWJwcm90b2NvbFRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3ZhbGlkYXRlX3N1YnByb3RvY29sKHNl
bGYpOgorICAgICAgICAjIHNob3VsZCBzdWNjZWVkLgorICAgICAgICBfdmFsaWRhdGVfc3VicHJv
dG9jb2woJ3NhbXBsZScpCisgICAgICAgIF92YWxpZGF0ZV9zdWJwcm90b2NvbCgnU2FtcGxlJykK
KyAgICAgICAgX3ZhbGlkYXRlX3N1YnByb3RvY29sKCdzYW1wbGVceDdlcHJvdG9jb2wnKQorICAg
ICAgICBfdmFsaWRhdGVfc3VicHJvdG9jb2woJ3NhbXBsZVx4MjBwcm90b2NvbCcpCisKKyAgICAg
ICAgIyBzaG91bGQgZmFpbC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSGFuZHNoYWtlRXhj
ZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBfdmFsaWRhdGVfc3VicHJvdG9jb2ws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhIYW5kc2hha2VFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIF92YWxpZGF0
ZV9zdWJwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbXBsZVx4MTlwcm90
b2NvbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEhhbmRzaGFrZUV4Y2VwdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgX3ZhbGlkYXRlX3N1YnByb3RvY29sLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAnc2FtcGxlXHg3ZnByb3RvY29sJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoSGFuZHNoYWtlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBf
dmFsaWRhdGVfc3VicHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgIkphcGFu
IiBpbiBKYXBhbmVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICB1J1x1NjVlNVx1NjcyYycp
CisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKKwor
CisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0X2hhbmRz
aGFrZV9oeWJpMDgucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2Vy
dmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdF9oYW5kc2hha2VfaHliaTA4LnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjEwNmFiYzAzZTczMGJlNmYzYmQ5ZWUzNzMzNDQwNjlhZTg2ZDc5MDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUv
dG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdF9oYW5kc2hha2VfaHliaTA4LnB5CkBAIC0w
LDAgKzEsMzA5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMTEs
IEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisj
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisKKyIiIlRlc3RzIGZvciBoYW5kc2hha2UgbW9kdWxlLiIiIgorCisKK2ltcG9ydCB1bml0dGVz
dAorCitpbXBvcnQgc2V0X3N5c19wYXRoICAjIFVwZGF0ZSBzeXMucGF0aCB0byBsb2NhdGUgbW9k
X3B5d2Vic29ja2V0IG1vZHVsZS4KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24K
K2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgQWJvcnRlZEJ5VXNl
ckV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBI
YW5kc2hha2VFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBp
bXBvcnQgVmVyc2lvbkV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLmh5
YmkgaW1wb3J0IEhhbmRzaGFrZXIKKworZnJvbSB0ZXN0X2hhbmRzaGFrZV9oeWJpIGltcG9ydCBf
Y3JlYXRlX3JlcXVlc3QKK2Zyb20gdGVzdF9oYW5kc2hha2VfaHliaSBpbXBvcnQgX2NyZWF0ZV9o
YW5kc2hha2VyCitmcm9tIHRlc3RfaGFuZHNoYWtlX2h5YmkgaW1wb3J0IEFib3J0ZWRCeVVzZXJE
aXNwYXRjaGVyCitmcm9tIHRlc3RfaGFuZHNoYWtlX2h5YmkgaW1wb3J0IEFib3J0aW5nRGlzcGF0
Y2hlcgorZnJvbSB0ZXN0X2hhbmRzaGFrZV9oeWJpIGltcG9ydCBIYW5kc2hha2VBYm9ydGVkRXhj
ZXB0aW9uCitmcm9tIHRlc3RfaGFuZHNoYWtlX2h5YmkgaW1wb3J0IFJlcXVlc3REZWZpbml0aW9u
Citmcm9tIHRlc3RfaGFuZHNoYWtlX2h5YmkgaW1wb3J0IFN1YnByb3RvY29sQ2hvb3NpbmdEaXNw
YXRjaGVyCitpbXBvcnQgbW9jaworCisKK2RlZiBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKToK
KyAgICByZXR1cm4gUmVxdWVzdERlZmluaXRpb24oCisgICAgICAgICdHRVQnLCAnL2RlbW8nLAor
ICAgICAgICB7J0hvc3QnOiAnc2VydmVyLmV4YW1wbGUuY29tJywKKyAgICAgICAgICdVcGdyYWRl
JzogJ3dlYnNvY2tldCcsCisgICAgICAgICAnQ29ubmVjdGlvbic6ICdVcGdyYWRlJywKKyAgICAg
ICAgICdTZWMtV2ViU29ja2V0LUtleSc6ICdkR2hsSUhOaGJYQnNaU0J1YjI1alpRPT0nLAorICAg
ICAgICAgJ1NlYy1XZWJTb2NrZXQtT3JpZ2luJzogJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAg
ICAgICAnU2VjLVdlYlNvY2tldC1WZXJzaW9uJzogJzgnfSkKKworCitfRVhQRUNURURfUkVTUE9O
U0UgPSAoCisgICAgJ0hUVFAvMS4xIDEwMSBTd2l0Y2hpbmcgUHJvdG9jb2xzXHJcbicKKyAgICAn
VXBncmFkZTogd2Vic29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisg
ICAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0OiBzM3BQTE1CaVR4YVE5a1lHenpoWlJiSyt4T289XHJc
blxyXG4nKQorCisKK2NsYXNzIEhhbmRzaGFrZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAg
ICAiIiJBIHVuaXR0ZXN0IGZvciBkcmFmdC1pZXRmLWh5YmktdGhld2Vic29ja2V0cHJvdG9jb2wt
MDYgYW5kIGxhdGVyCisgICAgaGFuZHNoYWtlIHByb2Nlc3Nvci4KKyAgICAiIiIKKworICAgIGRl
ZiB0ZXN0X2RvX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVx
dWVzdChfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKSkKKyAgICAgICAgZGlzcGF0Y2hlciA9IG1v
Y2suTW9ja0Rpc3BhdGNoZXIoKQorICAgICAgICBoYW5kc2hha2VyID0gSGFuZHNoYWtlcihyZXF1
ZXN0LCBkaXNwYXRjaGVyKQorICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpc3BhdGNoZXIuZG9fZXh0cmFfaGFuZHNoYWtlX2NhbGxl
ZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgX0VYUEVDVEVEX1JF
U1BPTlNFLCByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJy9kZW1vJywgcmVxdWVzdC53c19yZXNvdXJjZSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnaHR0cDovL2V4YW1wbGUuY29tJywgcmVxdWVzdC53c19vcmlnaW4pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcmVxdWVzdC53c19wcm90b2NvbCkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChOb25lLCByZXF1ZXN0LndzX2V4dGVuc2lvbnMpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoY29tbW9uLlZFUlNJT05fSFlCSTA4LCByZXF1ZXN0LndzX3ZlcnNpb24p
CisKKyAgICBkZWYgdGVzdF9kb19oYW5kc2hha2Vfd2l0aF9jYXBpdGFsaXplZF92YWx1ZShzZWxm
KToKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAg
ICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWyd1cGdyYWRlJ10gPSAnV0VCU09DS0VUJworCisgICAg
ICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9kZWYpCisgICAgICAgIGhhbmRz
aGFrZXIgPSBfY3JlYXRlX2hhbmRzaGFrZXIocmVxdWVzdCkKKyAgICAgICAgaGFuZHNoYWtlci5k
b19oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgX0VY
UEVDVEVEX1JFU1BPTlNFLCByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAg
ICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICBy
ZXF1ZXN0X2RlZi5oZWFkZXJzWydDb25uZWN0aW9uJ10gPSAnVVBHUkFERScKKworICAgICAgICBy
ZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICBoYW5kc2hha2Vy
ID0gX2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVlc3QpCisgICAgICAgIGhhbmRzaGFrZXIuZG9faGFu
ZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIF9FWFBFQ1RF
RF9SRVNQT05TRSwgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVm
IHRlc3RfZG9faGFuZHNoYWtlX3dpdGhfbXVsdGlwbGVfY29ubmVjdGlvbl92YWx1ZXMoc2VsZik6
CisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAg
ICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snQ29ubmVjdGlvbiddID0gJ1VwZ3JhZGUsIGtlZXAtYWxp
dmUsICwgJworCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9kZWYp
CisgICAgICAgIGhhbmRzaGFrZXIgPSBfY3JlYXRlX2hhbmRzaGFrZXIocmVxdWVzdCkKKyAgICAg
ICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAor
ICAgICAgICAgICAgX0VYUEVDVEVEX1JFU1BPTlNFLCByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRl
bl9kYXRhKCkpCisKKyAgICBkZWYgdGVzdF9hYm9ydGluZ19oYW5kc2hha2Uoc2VsZik6CisgICAg
ICAgIGhhbmRzaGFrZXIgPSBIYW5kc2hha2VyKAorICAgICAgICAgICAgX2NyZWF0ZV9yZXF1ZXN0
KF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpKSwKKyAgICAgICAgICAgIEFib3J0aW5nRGlzcGF0
Y2hlcigpKQorICAgICAgICAjIGRvX2V4dHJhX2hhbmRzaGFrZSByYWlzZXMgYW4gZXhjZXB0aW9u
LiBDaGVjayB0aGF0IGl0J3Mgbm90IGNhdWdodCBieQorICAgICAgICAjIGRvX2hhbmRzaGFrZS4K
KyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSGFuZHNoYWtlQWJvcnRlZEV4Y2VwdGlvbiwgaGFu
ZHNoYWtlci5kb19oYW5kc2hha2UpCisKKyAgICBkZWYgdGVzdF9kb19oYW5kc2hha2Vfd2l0aF9w
cm90b2NvbChzZWxmKToKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVz
dF9kZWYoKQorICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LVByb3Rv
Y29sJ10gPSAnY2hhdCwgc3VwZXJjaGF0JworCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3Jl
cXVlc3QocmVxdWVzdF9kZWYpCisgICAgICAgIGhhbmRzaGFrZXIgPSBIYW5kc2hha2VyKHJlcXVl
c3QsIFN1YnByb3RvY29sQ2hvb3NpbmdEaXNwYXRjaGVyKDApKQorICAgICAgICBoYW5kc2hha2Vy
LmRvX2hhbmRzaGFrZSgpCisKKyAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgPSAoCisgICAgICAg
ICAgICAnSFRUUC8xLjEgMTAxIFN3aXRjaGluZyBQcm90b2NvbHNcclxuJworICAgICAgICAgICAg
J1VwZ3JhZGU6IHdlYnNvY2tldFxyXG4nCisgICAgICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFk
ZVxyXG4nCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1BY2NlcHQ6IHMzcFBMTUJpVHhhUTlr
WUd6emhaUmJLK3hPbz1cclxuJworICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2w6
IGNoYXRcclxuXHJcbicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFWFBFQ1RFRF9SRVNQ
T05TRSwgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdjaGF0JywgcmVxdWVzdC53c19wcm90b2NvbCkKKworICAgIGRlZiB0ZXN0X2Rv
X2hhbmRzaGFrZV9wcm90b2NvbF9ub3RfaW5fcmVxdWVzdF9idXRfaW5fcmVzcG9uc2Uoc2VsZik6
CisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAg
ICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChyZXF1ZXN0X2RlZikKKyAgICAgICAgaGFuZHNo
YWtlciA9IEhhbmRzaGFrZXIoCisgICAgICAgICAgICByZXF1ZXN0LCBTdWJwcm90b2NvbENob29z
aW5nRGlzcGF0Y2hlcigtMSwgJ2Zvb2JhcicpKQorICAgICAgICAjIE5vIHJlcXVlc3QgaGFzIGJl
ZW4gbWFkZSBidXQgd3NfcHJvdG9jb2wgaXMgc2V0LiBIYW5kc2hha2VFeGNlcHRpb24KKyAgICAg
ICAgIyBtdXN0IGJlIHJhaXNlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSGFuZHNoYWtl
RXhjZXB0aW9uLCBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSkKKworICAgIGRlZiB0ZXN0X2RvX2hh
bmRzaGFrZV93aXRoX3Byb3RvY29sX25vX3Byb3RvY29sX3NlbGVjdGlvbihzZWxmKToKKyAgICAg
ICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICByZXF1
ZXN0X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LVByb3RvY29sJ10gPSAnY2hhdCwgc3VwZXJj
aGF0JworCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9kZWYpCisg
ICAgICAgIGhhbmRzaGFrZXIgPSBfY3JlYXRlX2hhbmRzaGFrZXIocmVxdWVzdCkKKyAgICAgICAg
IyB3c19wcm90b2NvbCBpcyBub3Qgc2V0LiBIYW5kc2hha2VFeGNlcHRpb24gbXVzdCBiZSByYWlz
ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEhhbmRzaGFrZUV4Y2VwdGlvbiwgaGFuZHNo
YWtlci5kb19oYW5kc2hha2UpCisKKyAgICBkZWYgdGVzdF9kb19oYW5kc2hha2Vfd2l0aF9leHRl
bnNpb25zKHNlbGYpOgorICAgICAgICByZXF1ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0
X2RlZigpCisgICAgICAgIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ1NlYy1XZWJTb2NrZXQtRXh0ZW5z
aW9ucyddID0gKAorICAgICAgICAgICAgJ3Blcm1lc3NhZ2UtY29tcHJlc3M7IG1ldGhvZD1kZWZs
YXRlLCB1bmtub3duJykKKworICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSA9ICgKKyAgICAgICAg
ICAgICdIVFRQLzEuMSAxMDEgU3dpdGNoaW5nIFByb3RvY29sc1xyXG4nCisgICAgICAgICAgICAn
VXBncmFkZTogd2Vic29ja2V0XHJcbicKKyAgICAgICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRl
XHJcbicKKyAgICAgICAgICAgICdTZWMtV2ViU29ja2V0LUFjY2VwdDogczNwUExNQmlUeGFROWtZ
R3p6aFpSYksreE9vPVxyXG4nCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25z
OiBwZXJtZXNzYWdlLWNvbXByZXNzOyBtZXRob2Q9ZGVmbGF0ZVxyXG4nCisgICAgICAgICAgICAn
XHJcbicpCisKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChyZXF1ZXN0X2RlZikK
KyAgICAgICAgaGFuZHNoYWtlciA9IF9jcmVhdGVfaGFuZHNoYWtlcihyZXF1ZXN0KQorICAgICAg
ICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVhQ
RUNURURfUkVTUE9OU0UsIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ocmVxdWVzdC53c19leHRlbnNpb25zKSkKKyAgICAg
ICAgZXh0ZW5zaW9uID0gcmVxdWVzdC53c19leHRlbnNpb25zWzBdCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY29tbW9uLlBFUk1FU1NBR0VfQ09NUFJFU1NJT05fRVhURU5TSU9OLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbi5uYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoWydtZXRob2QnXSwgZXh0ZW5zaW9uLmdldF9wYXJhbWV0ZXJfbmFtZXMoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnZGVmbGF0ZScsIGV4dGVuc2lvbi5nZXRfcGFyYW1ldGVyX3Zh
bHVlKCdtZXRob2QnKSkKKworICAgIGRlZiB0ZXN0X2RvX2hhbmRzaGFrZV93aXRoX3F1b3RlZF9l
eHRlbnNpb25zKHNlbGYpOgorICAgICAgICByZXF1ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1
ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ1NlYy1XZWJTb2NrZXQtRXh0
ZW5zaW9ucyddID0gKAorICAgICAgICAgICAgJ3Blcm1lc3NhZ2UtY29tcHJlc3M7IG1ldGhvZD1k
ZWZsYXRlLCAsICcKKyAgICAgICAgICAgICd1bmtub3duOyBlICAgPSAgICAibWNeMiI7IG1hPSJc
clxuICAgICAgXFxccmYgICI7IHB2PW5ydCcpCisKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVf
cmVxdWVzdChyZXF1ZXN0X2RlZikKKyAgICAgICAgaGFuZHNoYWtlciA9IF9jcmVhdGVfaGFuZHNo
YWtlcihyZXF1ZXN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhIYW5kc2hha2VFeGNlcHRp
b24sIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKQorCisgICAgZGVmIHRlc3RfZG9faGFuZHNoYWtl
X3dpdGhfb3B0aW9uYWxfaGVhZGVycyhzZWxmKToKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3Jl
YXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydFbXB0
eVZhbHVlJ10gPSAnJworICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydBS2V5J10gPSAnQVZh
bHVlJworCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9kZWYpCisg
ICAgICAgIGhhbmRzaGFrZXIgPSBfY3JlYXRlX2hhbmRzaGFrZXIocmVxdWVzdCkKKyAgICAgICAg
aGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAg
ICAgICAgICAgJ0FWYWx1ZScsIHJlcXVlc3QuaGVhZGVyc19pblsnQUtleSddKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgJycsIHJlcXVlc3QuaGVhZGVyc19pblsnRW1w
dHlWYWx1ZSddKQorCisgICAgZGVmIHRlc3RfYWJvcnRfZXh0cmFfaGFuZHNoYWtlKHNlbGYpOgor
ICAgICAgICBoYW5kc2hha2VyID0gSGFuZHNoYWtlcigKKyAgICAgICAgICAgIF9jcmVhdGVfcmVx
dWVzdChfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKSksCisgICAgICAgICAgICBBYm9ydGVkQnlV
c2VyRGlzcGF0Y2hlcigpKQorICAgICAgICAjIGRvX2V4dHJhX2hhbmRzaGFrZSByYWlzZXMgYW4g
QWJvcnRlZEJ5VXNlckV4Y2VwdGlvbi4gQ2hlY2sgdGhhdCBpdCdzCisgICAgICAgICMgbm90IGNh
dWdodCBieSBkb19oYW5kc2hha2UuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFib3J0ZWRC
eVVzZXJFeGNlcHRpb24sIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKQorCisgICAgZGVmIHRlc3Rf
YmFkX3JlcXVlc3RzKHNlbGYpOgorICAgICAgICBiYWRfY2FzZXMgPSBbCisgICAgICAgICAgICAo
J0hUVFAgcmVxdWVzdCcsCisgICAgICAgICAgICAgUmVxdWVzdERlZmluaXRpb24oCisgICAgICAg
ICAgICAgICAgICdHRVQnLCAnL2RlbW8nLAorICAgICAgICAgICAgICAgICB7J0hvc3QnOiAnd3d3
Lmdvb2dsZS5jb20nLAorICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOgorICAgICAgICAg
ICAgICAgICAgICAgICdNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBVOyBJbnRlbCBNYWMgT1MgWCAx
MC41OycKKyAgICAgICAgICAgICAgICAgICAgICAnIGVuLVVTOyBydjoxLjkuMS4zKSBHZWNrby8y
MDA5MDgyNCBGaXJlZm94LzMuNS4zJworICAgICAgICAgICAgICAgICAgICAgICcgR1RCNiBHVEJB
JywKKyAgICAgICAgICAgICAgICAgICdBY2NlcHQnOgorICAgICAgICAgICAgICAgICAgICAgICd0
ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSwnCisg
ICAgICAgICAgICAgICAgICAgICAgJyovKjtxPTAuOCcsCisgICAgICAgICAgICAgICAgICAnQWNj
ZXB0LUxhbmd1YWdlJzogJ2VuLXVzLGVuO3E9MC41JywKKyAgICAgICAgICAgICAgICAgICdBY2Nl
cHQtRW5jb2RpbmcnOiAnZ3ppcCxkZWZsYXRlJywKKyAgICAgICAgICAgICAgICAgICdBY2NlcHQt
Q2hhcnNldCc6ICdJU08tODg1OS0xLHV0Zi04O3E9MC43LCo7cT0wLjcnLAorICAgICAgICAgICAg
ICAgICAgJ0tlZXAtQWxpdmUnOiAnMzAwJywKKyAgICAgICAgICAgICAgICAgICdDb25uZWN0aW9u
JzogJ2tlZXAtYWxpdmUnfSksIE5vbmUsIFRydWUpXQorCisgICAgICAgIHJlcXVlc3RfZGVmID0g
X2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYubWV0aG9kID0g
J1BPU1QnCisgICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoKCdXcm9uZyBtZXRob2QnLCByZXF1ZXN0
X2RlZiwgTm9uZSwgVHJ1ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2Rf
cmVxdWVzdF9kZWYoKQorICAgICAgICBkZWwgcmVxdWVzdF9kZWYuaGVhZGVyc1snSG9zdCddCisg
ICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoKCdNaXNzaW5nIEhvc3QnLCByZXF1ZXN0X2RlZiwgTm9u
ZSwgVHJ1ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9k
ZWYoKQorICAgICAgICBkZWwgcmVxdWVzdF9kZWYuaGVhZGVyc1snVXBncmFkZSddCisgICAgICAg
IGJhZF9jYXNlcy5hcHBlbmQoKCdNaXNzaW5nIFVwZ3JhZGUnLCByZXF1ZXN0X2RlZiwgTm9uZSwg
VHJ1ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYo
KQorICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydVcGdyYWRlJ10gPSAnbm9ud2Vic29ja2V0
JworICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnV3JvbmcgVXBncmFkZScsIHJlcXVlc3RfZGVm
LCBOb25lLCBUcnVlKSkKKworICAgICAgICByZXF1ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1
ZXN0X2RlZigpCisgICAgICAgIGRlbCByZXF1ZXN0X2RlZi5oZWFkZXJzWydDb25uZWN0aW9uJ10K
KyAgICAgICAgYmFkX2Nhc2VzLmFwcGVuZCgoJ01pc3NpbmcgQ29ubmVjdGlvbicsIHJlcXVlc3Rf
ZGVmLCBOb25lLCBUcnVlKSkKKworICAgICAgICByZXF1ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9y
ZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ0Nvbm5lY3Rpb24nXSA9
ICdEb3duZ3JhZGUnCisgICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoKCdXcm9uZyBDb25uZWN0aW9u
JywgcmVxdWVzdF9kZWYsIE5vbmUsIFRydWUpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0gX2Ny
ZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgZGVsIHJlcXVlc3RfZGVmLmhlYWRlcnNb
J1NlYy1XZWJTb2NrZXQtS2V5J10KKyAgICAgICAgYmFkX2Nhc2VzLmFwcGVuZCgoJ01pc3Npbmcg
U2VjLVdlYlNvY2tldC1LZXknLCByZXF1ZXN0X2RlZiwgNDAwLCBUcnVlKSkKKworICAgICAgICBy
ZXF1ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3Rf
ZGVmLmhlYWRlcnNbJ1NlYy1XZWJTb2NrZXQtS2V5J10gPSAoCisgICAgICAgICAgICAnZEdobElI
TmhiWEJzWlNCdWIyNWpaUT09Z2FyYmFnZScpCisgICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoKCdX
cm9uZyBTZWMtV2ViU29ja2V0LUtleSAod2l0aCBnYXJiYWdlIG9uIHRoZSB0YWlsKScsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfZGVmLCA0MDAsIFRydWUpKQorCisgICAgICAg
IHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVxdWVz
dF9kZWYuaGVhZGVyc1snU2VjLVdlYlNvY2tldC1LZXknXSA9ICdZUT09JyAgIyBCQVNFNjQgb2Yg
J2EnCisgICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoCisgICAgICAgICAgICAoJ1dyb25nIFNlYy1X
ZWJTb2NrZXQtS2V5IChkZWNvZGVkIHZhbHVlIGlzIG5vdCAxNiBvY3RldHMgbG9uZyknLAorICAg
ICAgICAgICAgIHJlcXVlc3RfZGVmLCA0MDAsIFRydWUpKQorCisgICAgICAgIHJlcXVlc3RfZGVm
ID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgZGVsIHJlcXVlc3RfZGVmLmhl
YWRlcnNbJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbiddCisgICAgICAgIGJhZF9jYXNlcy5hcHBlbmQo
KCdNaXNzaW5nIFNlYy1XZWJTb2NrZXQtVmVyc2lvbicsIHJlcXVlc3RfZGVmLCBOb25lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBUcnVlKSkKKworICAgICAgICByZXF1ZXN0X2RlZiA9IF9j
cmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ1Nl
Yy1XZWJTb2NrZXQtVmVyc2lvbiddID0gJzMnCisgICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoKCdX
cm9uZyBTZWMtV2ViU29ja2V0LVZlcnNpb24nLCByZXF1ZXN0X2RlZiwgTm9uZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmFsc2UpKQorCisgICAgICAgIGZvciAoY2FzZV9uYW1lLCByZXF1
ZXN0X2RlZiwgZXhwZWN0ZWRfc3RhdHVzLAorICAgICAgICAgICAgIGV4cGVjdF9oYW5kc2hha2Vf
ZXhjZXB0aW9uKSBpbiBiYWRfY2FzZXM6CisgICAgICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9y
ZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICAgICAgaGFuZHNoYWtlciA9IEhhbmRzaGFrZXIo
cmVxdWVzdCwgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAgICBzZWxm
LmZhaWwoJ05vIGV4Y2VwdGlvbiB0aHJvd24gZm9yIFwnJXNcJyBjYXNlJyAlIGNhc2VfbmFtZSkK
KyAgICAgICAgICAgIGV4Y2VwdCBIYW5kc2hha2VFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdF9oYW5kc2hha2VfZXhjZXB0aW9uKQorICAgICAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfc3RhdHVzLCBlLnN0YXR1cykKKyAgICAg
ICAgICAgIGV4Y2VwdCBWZXJzaW9uRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoZXhwZWN0X2hhbmRzaGFrZV9leGNlcHRpb24pCisKKworaWYgX19uYW1lX18g
PT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKKworCisjIHZpOnN0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2
ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0X2h0dHBfaGVhZGVyX3V0aWwucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2Nr
ZXQvc3JjL3Rlc3QvdGVzdF9odHRwX2hlYWRlcl91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzNmRjNTdj
MzczMTA3MWZlMjkwMTkxOWUzM2YyNGMxYjU1OWY2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQv
c3JjL3Rlc3QvdGVzdF9odHRwX2hlYWRlcl91dGlsLnB5CkBAIC0wLDAgKzEsOTAgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KKyMgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0
OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiVGVzdHMgZm9yIGh0
dHBfaGVhZGVyX3V0aWwgbW9kdWxlLiIiIgorCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIG1v
ZF9weXdlYnNvY2tldCBpbXBvcnQgaHR0cF9oZWFkZXJfdXRpbAorCisKK2NsYXNzIFVuaXRUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJBIHVuaXR0ZXN0IGZvciBodHRwX2hlYWRlcl91
dGlsIG1vZHVsZS4iIiIKKworICAgIGRlZiB0ZXN0X3BhcnNlX3JlbGF0aXZlX3VyaShzZWxmKToK
KyAgICAgICAgaG9zdCwgcG9ydCwgcmVzb3VyY2UgPSBodHRwX2hlYWRlcl91dGlsLnBhcnNlX3Vy
aSgnL3dzL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGhvc3QpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnL3dzL3Rlc3QnLCByZXNvdXJjZSkKKworICAgIGRlZiB0ZXN0X3BhcnNlX2Fic29sdXRlX3Vy
aShzZWxmKToKKyAgICAgICAgaG9zdCwgcG9ydCwgcmVzb3VyY2UgPSBodHRwX2hlYWRlcl91dGls
LnBhcnNlX3VyaSgKKyAgICAgICAgICAgICd3czovL2xvY2FsaG9zdDoxMDA4MC93cy90ZXN0JykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnbG9jYWxob3N0JywgaG9zdCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgxMDA4MCwgcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL3dz
L3Rlc3QnLCByZXNvdXJjZSkKKworICAgICAgICBob3N0LCBwb3J0LCByZXNvdXJjZSA9IGh0dHBf
aGVhZGVyX3V0aWwucGFyc2VfdXJpKAorICAgICAgICAgICAgJ3dzOi8vZXhhbXBsZS5jb20vd3Mv
dGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2V4YW1wbGUuY29tJywgaG9zdCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCg4MCwgcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnL3dzL3Rlc3QnLCByZXNvdXJjZSkKKworICAgICAgICBob3N0LCBwb3J0LCByZXNvdXJjZSA9
IGh0dHBfaGVhZGVyX3V0aWwucGFyc2VfdXJpKAorICAgICAgICAgICAgJ3dzczovL2V4YW1wbGUu
Y29tLycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2V4YW1wbGUuY29tJywgaG9zdCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0NDMsIHBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJy8nLCByZXNvdXJjZSkKKworICAgICAgICBob3N0LCBwb3J0LCByZXNvdXJjZSA9IGh0dHBf
aGVhZGVyX3V0aWwucGFyc2VfdXJpKAorICAgICAgICAgICAgJ3dzOi8vZXhhbXBsZS5jb206ODA4
MCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2V4YW1wbGUuY29tJywgaG9zdCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCg4MDgwLCBwb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCcvJywgcmVzb3VyY2UpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9pbnZhbGlkX3VyaShzZWxmKToK
KyAgICAgICAgaG9zdCwgcG9ydCwgcmVzb3VyY2UgPSBodHRwX2hlYWRlcl91dGlsLnBhcnNlX3Vy
aSgnd3M6Ly8vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCByZXNvdXJjZSkKKwor
ICAgICAgICBob3N0LCBwb3J0LCByZXNvdXJjZSA9IGh0dHBfaGVhZGVyX3V0aWwucGFyc2VfdXJp
KCd3czovL2xvY2FsaG9zdDonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHJlc291
cmNlKQorCisgICAgICAgIGhvc3QsIHBvcnQsIHJlc291cmNlID0gaHR0cF9oZWFkZXJfdXRpbC5w
YXJzZV91cmkoJ3dzOi8vbG9jYWxob3N0Oi93cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Tm9uZSwgcmVzb3VyY2UpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0
dGVzdC5tYWluKCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMv
dGVzdC90ZXN0X21lbW9yaXppbmdmaWxlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3RfbWVtb3Jpemlu
Z2ZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOGYxYjhlZWY0MzM3OGE5YjAwNjI1ZjIyMGM5N2ZlMjJmNzQw
YThmNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0X21lbW9yaXppbmdmaWxl
LnB5CkBAIC0wLDAgKzEsMTA0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJp
Z2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
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
REFNQUdFLgorCisKKyIiIlRlc3RzIGZvciBtZW1vcml6aW5nZmlsZSBtb2R1bGUuIiIiCisKKwor
aW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IHNldF9zeXNfcGF0aCAg
IyBVcGRhdGUgc3lzLnBhdGggdG8gbG9jYXRlIG1vZF9weXdlYnNvY2tldCBtb2R1bGUuCisKK2Zy
b20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBtZW1vcml6aW5nZmlsZQorCisKK2NsYXNzIFV0aWxU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJBIHVuaXR0ZXN0IGZvciBtZW1vcml6aW5n
ZmlsZSBtb2R1bGUuIiIiCisKKyAgICBkZWYgY2hlY2soc2VsZiwgbWVtb3JpemluZ19maWxlLCBu
dW1fcmVhZCwgZXhwZWN0ZWRfbGlzdCk6CisgICAgICAgIGZvciB1bnVzZWQgaW4gcmFuZ2UobnVt
X3JlYWQpOgorICAgICAgICAgICAgbWVtb3JpemluZ19maWxlLnJlYWRsaW5lKCkKKyAgICAgICAg
YWN0dWFsX2xpc3QgPSBtZW1vcml6aW5nX2ZpbGUuZ2V0X21lbW9yaXplZF9saW5lcygpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGV4cGVjdGVkX2xpc3QpLCBsZW4oYWN0dWFsX2xpc3Qp
KQorICAgICAgICBmb3IgZXhwZWN0ZWQsIGFjdHVhbCBpbiB6aXAoZXhwZWN0ZWRfbGlzdCwgYWN0
dWFsX2xpc3QpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFs
KQorCisgICAgZGVmIGNoZWNrX3dpdGhfc2l6ZShzZWxmLCBtZW1vcml6aW5nX2ZpbGUsIHJlYWRf
c2l6ZSwgZXhwZWN0ZWRfbGlzdCk6CisgICAgICAgIHJlYWRfbGlzdCA9IFtdCisgICAgICAgIHJl
YWRfbGluZSA9ICcnCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBsaW5lID0gbWVt
b3JpemluZ19maWxlLnJlYWRsaW5lKHJlYWRfc2l6ZSkKKyAgICAgICAgICAgIGxpbmVfbGVuZ3Ro
ID0gbGVuKGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZV9sZW5ndGggPD0g
cmVhZF9zaXplKQorICAgICAgICAgICAgaWYgbGluZV9sZW5ndGggPT0gMDoKKyAgICAgICAgICAg
ICAgICBpZiByZWFkX2xpbmUgIT0gJyc6CisgICAgICAgICAgICAgICAgICAgIHJlYWRfbGlzdC5h
cHBlbmQocmVhZF9saW5lKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZWFk
X2xpbmUgKz0gbGluZQorICAgICAgICAgICAgaWYgbGluZVtsaW5lX2xlbmd0aCAtIDFdID09ICdc
bic6CisgICAgICAgICAgICAgICAgcmVhZF9saXN0LmFwcGVuZChyZWFkX2xpbmUpCisgICAgICAg
ICAgICAgICAgcmVhZF9saW5lID0gJycKKyAgICAgICAgYWN0dWFsX2xpc3QgPSBtZW1vcml6aW5n
X2ZpbGUuZ2V0X21lbW9yaXplZF9saW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVu
KGV4cGVjdGVkX2xpc3QpLCBsZW4oYWN0dWFsX2xpc3QpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGxlbihleHBlY3RlZF9saXN0KSwgbGVuKHJlYWRfbGlzdCkpCisgICAgICAgIGZvciBleHBl
Y3RlZCwgYWN0dWFsLCByZWFkIGluIHppcChleHBlY3RlZF9saXN0LCBhY3R1YWxfbGlzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfbGlzdCk6CisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpCisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZWFkKQorCisgICAgZGVmIHRlc3RfZ2V0X21lbW9y
aXplZF9saW5lcyhzZWxmKToKKyAgICAgICAgbWVtb3JpemluZ19maWxlID0gbWVtb3JpemluZ2Zp
bGUuTWVtb3JpemluZ0ZpbGUoU3RyaW5nSU8uU3RyaW5nSU8oCisgICAgICAgICAgICAgICAgJ0hl
bGxvXG5Xb3JsZFxuV2VsY29tZScpKQorICAgICAgICBzZWxmLmNoZWNrKG1lbW9yaXppbmdfZmls
ZSwgMywgWydIZWxsb1xuJywgJ1dvcmxkXG4nLCAnV2VsY29tZSddKQorCisgICAgZGVmIHRlc3Rf
Z2V0X21lbW9yaXplZF9saW5lc19saW1pdF9tZW1vcml6ZWRfbGluZXMoc2VsZik6CisgICAgICAg
IG1lbW9yaXppbmdfZmlsZSA9IG1lbW9yaXppbmdmaWxlLk1lbW9yaXppbmdGaWxlKFN0cmluZ0lP
LlN0cmluZ0lPKAorICAgICAgICAgICAgICAgICdIZWxsb1xuV29ybGRcbldlbGNvbWUnKSwgMikK
KyAgICAgICAgc2VsZi5jaGVjayhtZW1vcml6aW5nX2ZpbGUsIDMsIFsnSGVsbG9cbicsICdXb3Js
ZFxuJ10pCisKKyAgICBkZWYgdGVzdF9nZXRfbWVtb3JpemVkX2xpbmVzX2VtcHR5X2ZpbGUoc2Vs
Zik6CisgICAgICAgIG1lbW9yaXppbmdfZmlsZSA9IG1lbW9yaXppbmdmaWxlLk1lbW9yaXppbmdG
aWxlKFN0cmluZ0lPLlN0cmluZ0lPKAorICAgICAgICAgICAgICAgICcnKSkKKyAgICAgICAgc2Vs
Zi5jaGVjayhtZW1vcml6aW5nX2ZpbGUsIDEwLCBbXSkKKworICAgIGRlZiB0ZXN0X2dldF9tZW1v
cml6ZWRfbGluZXNfd2l0aF9zaXplKHNlbGYpOgorICAgICAgICBmb3Igc2l6ZSBpbiByYW5nZSgx
LCAxMCk6CisgICAgICAgICAgICBtZW1vcml6aW5nX2ZpbGUgPSBtZW1vcml6aW5nZmlsZS5NZW1v
cml6aW5nRmlsZShTdHJpbmdJTy5TdHJpbmdJTygKKyAgICAgICAgICAgICAgICAnSGVsbG9cbldv
cmxkXG5XZWxjb21lJykpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3dpdGhfc2l6ZShtZW1vcml6
aW5nX2ZpbGUsIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ0hlbGxv
XG4nLCAnV29ybGRcbicsICdXZWxjb21lJ10pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6
CisgICAgdW5pdHRlc3QubWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJz
b2NrZXQvc3JjL3Rlc3QvdGVzdF9tb2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3RfbW9jay5weQpu
ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43ZGMyM2E3M2Q4ZmIxYTA3YWViM2U1YWU5NDAyY2M4NmI4ZmNjMzY2Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZl
L3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3RfbW9jay5weQpAQCAtMCwwICsxLDE0NSBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5j
LgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
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
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUZXN0
cyBmb3IgbW9jayBtb2R1bGUuIiIiCisKKworaW1wb3J0IFF1ZXVlCitpbXBvcnQgdGhyZWFkaW5n
CitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IHNldF9zeXNfcGF0aCAgIyBVcGRhdGUgc3lzLnBh
dGggdG8gbG9jYXRlIG1vZF9weXdlYnNvY2tldCBtb2R1bGUuCisKK2Zyb20gdGVzdCBpbXBvcnQg
bW9jaworCisKK2NsYXNzIE1vY2tDb25uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIi
QSB1bml0dGVzdCBmb3IgTW9ja0Nvbm4gY2xhc3MuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6
CisgICAgICAgIHNlbGYuX2Nvbm4gPSBtb2NrLk1vY2tDb25uKCdBQkNcclxuREVGR1xyXG5cclxu
SElKSycpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnQUJDXHJcbicsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnREVGR1xyXG4nLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ1xyXG4nLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ0hJSksnLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKKworICAgIGRlZiB0ZXN0
X3JlYWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0FCQ1xyXG5EJywgc2VsZi5f
Y29ubi5yZWFkKDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdFRkdcclxuXHJcbkhJJywg
c2VsZi5fY29ubi5yZWFkKDkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdKSycsIHNlbGYu
X2Nvbm4ucmVhZCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuX2Nvbm4u
cmVhZCgxMCkpCisKKyAgICBkZWYgdGVzdF9yZWFkX2FuZF9yZWFkbGluZShzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnQUJDXHJcbkQnLCBzZWxmLl9jb25uLnJlYWQoNikpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0VGR1xyXG4nLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1xyXG5ISUpLJywgc2VsZi5fY29ubi5yZWFkKDkpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisKKyAg
ICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fY29ubi53cml0ZSgnSGVsbG9c
clxuJykKKyAgICAgICAgc2VsZi5fY29ubi53cml0ZSgnV29ybGRcclxuJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnSGVsbG9cclxuV29ybGRcclxuJywgc2VsZi5fY29ubi53cml0dGVuX2Rh
dGEoKSkKKworCitjbGFzcyBNb2NrQmxvY2tpbmdDb25uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CisgICAgIiIiQSB1bml0dGVzdCBmb3IgTW9ja0Jsb2NraW5nQ29ubiBjbGFzcy4iIiIKKworICAg
IGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgICIiIlRlc3RzIHRoYXQgZGF0YSBwdXQgdG8g
TW9ja0Jsb2NraW5nQ29ubiBieSBwdXRfYnl0ZXMgbWV0aG9kIGNhbiBiZQorICAgICAgICByZWFk
IGZyb20gaXQuCisgICAgICAgICIiIgorCisgICAgICAgIGNsYXNzIExpbmVSZWFkZXIodGhyZWFk
aW5nLlRocmVhZCk6CisgICAgICAgICAgICAiIiJBIHRlc3QgY2xhc3MgdGhhdCBsYXVuY2hlcyBh
IHRocmVhZCwgY2FsbHMgcmVhZGxpbmUgb24gdGhlCisgICAgICAgICAgICBzcGVjaWZpZWQgY29u
biByZXBlYXRlZGx5IGFuZCBwdXRzIHRoZSByZWFkIGRhdGEgdG8gdGhlIHNwZWNpZmllZAorICAg
ICAgICAgICAgcXVldWUuCisgICAgICAgICAgICAiIiIKKworICAgICAgICAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGNvbm4sIHF1ZXVlKToKKyAgICAgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFk
Ll9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5fcXVldWUgPSBxdWV1ZQorICAg
ICAgICAgICAgICAgIHNlbGYuX2Nvbm4gPSBjb25uCisgICAgICAgICAgICAgICAgc2VsZi5zZXRE
YWVtb24oVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0KCkKKworICAgICAgICAgICAg
ZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAg
ICAgICAgICBkYXRhID0gc2VsZi5fY29ubi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3F1ZXVlLnB1dChkYXRhKQorCisgICAgICAgIGNvbm4gPSBtb2NrLk1vY2tCbG9ja2lu
Z0Nvbm4oKQorICAgICAgICBxdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgcmVhZGVyID0g
TGluZVJlYWRlcihjb25uLCBxdWV1ZSkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHF1ZXVlLmVt
cHR5KCkpCisgICAgICAgIGNvbm4ucHV0X2J5dGVzKCdGb28gYmFyXHJcbicpCisgICAgICAgIHJl
YWQgPSBxdWV1ZS5nZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb28gYmFyXHJcbics
IHJlYWQpCisKKworY2xhc3MgTW9ja1RhYmxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
IiIiQSB1bml0dGVzdCBmb3IgTW9ja1RhYmxlIGNsYXNzLiIiIgorCisgICAgZGVmIHRlc3RfY3Jl
YXRlX2Zyb21fZGljdChzZWxmKToKKyAgICAgICAgdGFibGUgPSBtb2NrLk1vY2tUYWJsZSh7J0tl
eSc6ICdWYWx1ZSd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlLmdl
dCgnS0VZJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVbJ2tleSdd
KQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fbGlzdChzZWxmKToKKyAgICAgICAgdGFibGUg
PSBtb2NrLk1vY2tUYWJsZShbKCdLZXknLCAnVmFsdWUnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ1ZhbHVlJywgdGFibGUuZ2V0KCdLRVknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnVmFsdWUnLCB0YWJsZVsna2V5J10pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV90dXBs
ZShzZWxmKToKKyAgICAgICAgdGFibGUgPSBtb2NrLk1vY2tUYWJsZSgoKCdLZXknLCAnVmFsdWUn
KSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlLmdldCgnS0VZJykp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVbJ2tleSddKQorCisgICAg
ZGVmIHRlc3Rfc2V0X2FuZF9nZXQoc2VsZik6CisgICAgICAgIHRhYmxlID0gbW9jay5Nb2NrVGFi
bGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHRhYmxlLmdldCgnS2V5JykpCisg
ICAgICAgIHRhYmxlWydLZXknXSA9ICdWYWx1ZScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
VmFsdWUnLCB0YWJsZS5nZXQoJ0tleScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1
ZScsIHRhYmxlLmdldCgna2V5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywg
dGFibGUuZ2V0KCdLRVknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJs
ZVsnS2V5J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVbJ2tleSdd
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydLRVknXSkKKworCitp
ZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQorCisKKyMgdmk6
c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3RfbXNndXRpbC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNv
Y2tldC9zcmMvdGVzdC90ZXN0X21zZ3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTdmOGYzNTYzOTM5YTYx
ODEzNDQ0YzczMTE3MDYyYjEwZjQwZDE1OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVz
dC90ZXN0X21zZ3V0aWwucHkKQEAgLTAsMCArMSwxMzI3IEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMKKyMgQ29weXJpZ2h0IDIwMTIsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3RzIGZvciBtc2d1dGlsIG1vZHVsZS4i
IiIKKworCitpbXBvcnQgYXJyYXkKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHJhbmRvbQoraW1wb3J0
IHN0cnVjdAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgemxpYgorCitpbXBvcnQgc2V0X3N5c19w
YXRoICAjIFVwZGF0ZSBzeXMucGF0aCB0byBsb2NhdGUgbW9kX3B5d2Vic29ja2V0IG1vZHVsZS4K
KworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2Nr
ZXQuZXh0ZW5zaW9ucyBpbXBvcnQgRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yCitmcm9t
IG1vZF9weXdlYnNvY2tldC5leHRlbnNpb25zIGltcG9ydCBQZXJGcmFtZUNvbXByZXNzRXh0ZW5z
aW9uUHJvY2Vzc29yCitmcm9tIG1vZF9weXdlYnNvY2tldC5leHRlbnNpb25zIGltcG9ydCBQZXJN
ZXNzYWdlQ29tcHJlc3NFeHRlbnNpb25Qcm9jZXNzb3IKK2Zyb20gbW9kX3B5d2Vic29ja2V0LmV4
dGVuc2lvbnMgaW1wb3J0IFBlck1lc3NhZ2VEZWZsYXRlRXh0ZW5zaW9uUHJvY2Vzc29yCitmcm9t
IG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbXNndXRpbAorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuc3Ry
ZWFtIGltcG9ydCBJbnZhbGlkVVRGOEV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuc3Ry
ZWFtIGltcG9ydCBTdHJlYW0KK2Zyb20gbW9kX3B5d2Vic29ja2V0LnN0cmVhbSBpbXBvcnQgU3Ry
ZWFtSGl4aWU3NQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuc3RyZWFtIGltcG9ydCBTdHJlYW1PcHRp
b25zCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgdXRpbAorZnJvbSB0ZXN0IGltcG9ydCBt
b2NrCisKKworIyBXZSB1c2Ugb25lIGZpeGVkIG5vbmNlIGZvciB0ZXN0aW5nIGluc3RlYWQgb2Yg
Y3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIFBSTkcuCitfTUFTS0lOR19OT05DRSA9ICdBQkNEJwor
CisKK2RlZiBfbWFza19oeWJpKGZyYW1lKToKKyAgICBmcmFtZV9rZXkgPSBtYXAob3JkLCBfTUFT
S0lOR19OT05DRSkKKyAgICBmcmFtZV9rZXlfbGVuID0gbGVuKGZyYW1lX2tleSkKKyAgICByZXN1
bHQgPSBhcnJheS5hcnJheSgnQicpCisgICAgcmVzdWx0LmZyb21zdHJpbmcoZnJhbWUpCisgICAg
Y291bnQgPSAwCisgICAgZm9yIGkgaW4geHJhbmdlKGxlbihyZXN1bHQpKToKKyAgICAgICAgcmVz
dWx0W2ldIF49IGZyYW1lX2tleVtjb3VudF0KKyAgICAgICAgY291bnQgPSAoY291bnQgKyAxKSAl
IGZyYW1lX2tleV9sZW4KKyAgICByZXR1cm4gX01BU0tJTkdfTk9OQ0UgKyByZXN1bHQudG9zdHJp
bmcoKQorCisKK2RlZiBfaW5zdGFsbF9leHRlbnNpb25fcHJvY2Vzc29yKHByb2Nlc3NvciwgcmVx
dWVzdCwgc3RyZWFtX29wdGlvbnMpOgorICAgIHJlc3BvbnNlID0gcHJvY2Vzc29yLmdldF9leHRl
bnNpb25fcmVzcG9uc2UoKQorICAgIGlmIHJlc3BvbnNlIGlzIG5vdCBOb25lOgorICAgICAgICBw
cm9jZXNzb3Iuc2V0dXBfc3RyZWFtX29wdGlvbnMoc3RyZWFtX29wdGlvbnMpCisgICAgICAgIHJl
cXVlc3Qud3NfZXh0ZW5zaW9uX3Byb2Nlc3NvcnMuYXBwZW5kKHByb2Nlc3NvcikKKworCitkZWYg
X2NyZWF0ZV9yZXF1ZXN0X2Zyb21fcmF3ZGF0YSgKKyAgICAgICAgcmVhZF9kYXRhLAorICAgICAg
ICBkZWZsYXRlX2ZyYW1lX3JlcXVlc3Q9Tm9uZSwKKyAgICAgICAgcGVyZnJhbWVfY29tcHJlc3Np
b25fcmVxdWVzdD1Ob25lLAorICAgICAgICBwZXJtZXNzYWdlX2NvbXByZXNzaW9uX3JlcXVlc3Q9
Tm9uZSwKKyAgICAgICAgcGVybWVzc2FnZV9kZWZsYXRlX3JlcXVlc3Q9Tm9uZSk6CisgICAgcmVx
ID0gbW9jay5Nb2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2suTW9ja0Nvbm4oJycuam9pbihyZWFk
X2RhdGEpKSkKKyAgICByZXEud3NfdmVyc2lvbiA9IGNvbW1vbi5WRVJTSU9OX0hZQklfTEFURVNU
CisgICAgcmVxLndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzID0gW10KKworICAgIHByb2Nlc3NvciA9
IE5vbmUKKyAgICBpZiBkZWZsYXRlX2ZyYW1lX3JlcXVlc3QgaXMgbm90IE5vbmU6CisgICAgICAg
IHByb2Nlc3NvciA9IERlZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nlc3NvcihkZWZsYXRlX2ZyYW1l
X3JlcXVlc3QpCisgICAgZWxpZiBwZXJmcmFtZV9jb21wcmVzc2lvbl9yZXF1ZXN0IGlzIG5vdCBO
b25lOgorICAgICAgICBwcm9jZXNzb3IgPSBQZXJGcmFtZUNvbXByZXNzRXh0ZW5zaW9uUHJvY2Vz
c29yKAorICAgICAgICAgICAgICAgIHBlcmZyYW1lX2NvbXByZXNzaW9uX3JlcXVlc3QpCisgICAg
ZWxpZiBwZXJtZXNzYWdlX2NvbXByZXNzaW9uX3JlcXVlc3QgaXMgbm90IE5vbmU6CisgICAgICAg
IHByb2Nlc3NvciA9IFBlck1lc3NhZ2VDb21wcmVzc0V4dGVuc2lvblByb2Nlc3NvcigKKyAgICAg
ICAgICAgICAgICBwZXJtZXNzYWdlX2NvbXByZXNzaW9uX3JlcXVlc3QpCisgICAgZWxpZiBwZXJt
ZXNzYWdlX2RlZmxhdGVfcmVxdWVzdCBpcyBub3QgTm9uZToKKyAgICAgICAgcHJvY2Vzc29yID0g
UGVyTWVzc2FnZURlZmxhdGVFeHRlbnNpb25Qcm9jZXNzb3IoCisgICAgICAgICAgICAgICAgcGVy
bWVzc2FnZV9kZWZsYXRlX3JlcXVlc3QpCisKKyAgICBzdHJlYW1fb3B0aW9ucyA9IFN0cmVhbU9w
dGlvbnMoKQorICAgIGlmIHByb2Nlc3NvciBpcyBub3QgTm9uZToKKyAgICAgICAgX2luc3RhbGxf
ZXh0ZW5zaW9uX3Byb2Nlc3Nvcihwcm9jZXNzb3IsIHJlcSwgc3RyZWFtX29wdGlvbnMpCisgICAg
cmVxLndzX3N0cmVhbSA9IFN0cmVhbShyZXEsIHN0cmVhbV9vcHRpb25zKQorCisgICAgcmV0dXJu
IHJlcQorCisKK2RlZiBfY3JlYXRlX3JlcXVlc3QoKmZyYW1lcyk6CisgICAgIiIiQ3JlYXRlcyBN
b2NrUmVxdWVzdCB1c2luZyBkYXRhIGdpdmVuIGFzIGZyYW1lcy4KKworICAgIGZyYW1lcyB3aWxs
IGJlIHJldHVybmVkIG9uIGNhbGxpbmcgcmVxdWVzdC5jb25uZWN0aW9uLnJlYWQoKSB3aGVyZSBy
ZXF1ZXN0CisgICAgaXMgTW9ja1JlcXVlc3QgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAg
ICAiIiIKKworICAgIHJlYWRfZGF0YSA9IFtdCisgICAgZm9yIChoZWFkZXIsIGJvZHkpIGluIGZy
YW1lczoKKyAgICAgICAgcmVhZF9kYXRhLmFwcGVuZChoZWFkZXIgKyBfbWFza19oeWJpKGJvZHkp
KQorCisgICAgcmV0dXJuIF9jcmVhdGVfcmVxdWVzdF9mcm9tX3Jhd2RhdGEocmVhZF9kYXRhKQor
CisKK2RlZiBfY3JlYXRlX2Jsb2NraW5nX3JlcXVlc3QoKToKKyAgICAiIiJDcmVhdGVzIE1vY2tS
ZXF1ZXN0LgorCisgICAgRGF0YSB3cml0dGVuIHRvIGEgTW9ja1JlcXVlc3QgY2FuIGJlIHJlYWQg
b3V0IGJ5IGNhbGxpbmcKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkuCisg
ICAgIiIiCisKKyAgICByZXEgPSBtb2NrLk1vY2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2Nr
QmxvY2tpbmdDb25uKCkpCisgICAgcmVxLndzX3ZlcnNpb24gPSBjb21tb24uVkVSU0lPTl9IWUJJ
X0xBVEVTVAorICAgIHN0cmVhbV9vcHRpb25zID0gU3RyZWFtT3B0aW9ucygpCisgICAgcmVxLndz
X3N0cmVhbSA9IFN0cmVhbShyZXEsIHN0cmVhbV9vcHRpb25zKQorICAgIHJldHVybiByZXEKKwor
CitkZWYgX2NyZWF0ZV9yZXF1ZXN0X2hpeGllNzUocmVhZF9kYXRhPScnKToKKyAgICByZXEgPSBt
b2NrLk1vY2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQ29ubihyZWFkX2RhdGEpKQorICAg
IHJlcS53c19zdHJlYW0gPSBTdHJlYW1IaXhpZTc1KHJlcSkKKyAgICByZXR1cm4gcmVxCisKKwor
ZGVmIF9jcmVhdGVfYmxvY2tpbmdfcmVxdWVzdF9oaXhpZTc1KCk6CisgICAgcmVxID0gbW9jay5N
b2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2suTW9ja0Jsb2NraW5nQ29ubigpKQorICAgIHJlcS53
c19zdHJlYW0gPSBTdHJlYW1IaXhpZTc1KHJlcSkKKyAgICByZXR1cm4gcmVxCisKKworY2xhc3Mg
QmFzaWNNZXNzYWdlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQmFzaWMgdGVzdHMg
Zm9yIFN0cmVhbS4iIiIKKworICAgIGRlZiB0ZXN0X3NlbmRfbWVzc2FnZShzZWxmKToKKyAgICAg
ICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNz
YWdlKHJlcXVlc3QsICdIZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ODFceDA1
SGVsbG8nLCByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICAgICAgcGF5
bG9hZCA9ICdhJyAqIDEyNQorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCkKKyAg
ICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgcGF5bG9hZCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnXHg4MVx4N2QnICsgcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYgdGVzdF9z
ZW5kX21lZGl1bV9tZXNzYWdlKHNlbGYpOgorICAgICAgICBwYXlsb2FkID0gJ2EnICogMTI2Cisg
ICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoKQorICAgICAgICBtc2d1dGlsLnNlbmRf
bWVzc2FnZShyZXF1ZXN0LCBwYXlsb2FkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDgx
XHg3ZVx4MDBceDdlJyArIHBheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgICAgIHBheWxvYWQgPSAnYScgKiAo
KDEgPDwgMTYpIC0gMSkKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgpCisgICAg
ICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsIHBheWxvYWQpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ1x4ODFceDdlXHhmZlx4ZmYnICsgcGF5bG9hZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYg
dGVzdF9zZW5kX2xhcmdlX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIHBheWxvYWQgPSAnYScgKiAo
MSA8PCAxNikKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgpCisgICAgICAgIG1z
Z3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsIHBheWxvYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ1x4ODFceDdmXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDAnICsgcGF5bG9h
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9k
YXRhKCkpCisKKyAgICBkZWYgdGVzdF9zZW5kX21lc3NhZ2VfdW5pY29kZShzZWxmKToKKyAgICAg
ICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNz
YWdlKHJlcXVlc3QsIHUnXHU2NWU1JykKKyAgICAgICAgIyBVKzY1ZTUgaXMgZW5jb2RlZCBhcyBl
Niw5NyxhNSBpbiBVVEYtOAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDgxXHgwM1x4ZTZc
eDk3XHhhNScsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndy
aXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3Rfc2VuZF9tZXNzYWdlX2ZyYWdtZW50cyhzZWxm
KToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgpCisgICAgICAgIG1zZ3V0aWwu
c2VuZF9tZXNzYWdlKHJlcXVlc3QsICdIZWxsbycsIEZhbHNlKQorICAgICAgICBtc2d1dGlsLnNl
bmRfbWVzc2FnZShyZXF1ZXN0LCAnICcsIEZhbHNlKQorICAgICAgICBtc2d1dGlsLnNlbmRfbWVz
c2FnZShyZXF1ZXN0LCAnV29ybGQnLCBGYWxzZSkKKyAgICAgICAgbXNndXRpbC5zZW5kX21lc3Nh
Z2UocmVxdWVzdCwgJyEnLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAxXHgw
NUhlbGxvXHgwMFx4MDEgXHgwMFx4MDVXb3JsZFx4ODBceDAxIScsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRl
c3Rfc2VuZF9mcmFnbWVudHNfaW1tZWRpYXRlX3plcm9fdGVybWluYXRpb24oc2VsZik6CisgICAg
ICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoKQorICAgICAgICBtc2d1dGlsLnNlbmRfbWVz
c2FnZShyZXF1ZXN0LCAnSGVsbG8gV29ybGQhJywgRmFsc2UpCisgICAgICAgIG1zZ3V0aWwuc2Vu
ZF9tZXNzYWdlKHJlcXVlc3QsICcnLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdc
eDAxXHgwY0hlbGxvIFdvcmxkIVx4ODBceDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZl
X21lc3NhZ2Uoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoCisgICAg
ICAgICAgICAoJ1x4ODFceDg1JywgJ0hlbGxvJyksICgnXHg4MVx4ODYnLCAnV29ybGQhJykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvJywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2Uo
cmVxdWVzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1dvcmxkIScsIG1zZ3V0aWwucmVj
ZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorCisgICAgICAgIHBheWxvYWQgPSAnYScgKiAxMjUKKyAg
ICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgoJ1x4ODFceGZkJywgcGF5bG9hZCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF5bG9hZCwgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2Uo
cmVxdWVzdCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX21lZGl1bV9tZXNzYWdlKHNlbGYpOgor
ICAgICAgICBwYXlsb2FkID0gJ2EnICogMTI2CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3Jl
cXVlc3QoKCdceDgxXHhmZVx4MDBceDdlJywgcGF5bG9hZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwocGF5bG9hZCwgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKyAgICAg
ICAgcGF5bG9hZCA9ICdhJyAqICgoMSA8PCAxNikgLSAxKQorICAgICAgICByZXF1ZXN0ID0gX2Ny
ZWF0ZV9yZXF1ZXN0KCgnXHg4MVx4ZmVceGZmXHhmZicsIHBheWxvYWQpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHBheWxvYWQsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQor
CisgICAgZGVmIHRlc3RfcmVjZWl2ZV9sYXJnZV9tZXNzYWdlKHNlbGYpOgorICAgICAgICBwYXls
b2FkID0gJ2EnICogKDEgPDwgMTYpCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3Qo
CisgICAgICAgICAgICAoJ1x4ODFceGZmXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDAn
LCBwYXlsb2FkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXlsb2FkLCBtc2d1dGlsLnJl
Y2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfbGVuZ3RoX25v
dF9lbmNvZGVkX3VzaW5nX21pbmltYWxfbnVtYmVyX29mX2J5dGVzKHNlbGYpOgorICAgICAgICAj
IExvZyB3YXJuaW5nIG9uIHJlY2VpdmluZyBiYWQgcGF5bG9hZCBsZW5ndGggZmllbGQgdGhhdCBk
b2Vzbid0IHVzZQorICAgICAgICAjIG1pbmltYWwgbnVtYmVyIG9mIGJ5dGVzIGJ1dCBjb250aW51
ZSBwcm9jZXNzaW5nLgorCisgICAgICAgIHBheWxvYWQgPSAnYScKKyAgICAgICAgIyAxIGJ5dGUg
Y2FuIGJlIHJlcHJlc2VudGVkIHdpdGhvdXQgZXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGggZmllbGQu
CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoCisgICAgICAgICAgICAoJ1x4ODFc
eGZmXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDEnLCBwYXlsb2FkKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChwYXlsb2FkLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0
KSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfbWVzc2FnZV91bmljb2RlKHNlbGYpOgorICAgICAg
ICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCgnXHg4MVx4ODMnLCAnXHhlNlx4OWNceGFjJykp
CisgICAgICAgICMgVSs2NzJjIGlzIGVuY29kZWQgYXMgZTYsOWMsYWMgaW4gVVRGLTgKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1NjcyYycsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJl
cXVlc3QpKQorCisgICAgZGVmIHRlc3RfcmVjZWl2ZV9tZXNzYWdlX2Vycm9uZW91c191bmljb2Rl
KHNlbGYpOgorICAgICAgICAjIFx4ODAgYW5kIFx4ODEgYXJlIGludmFsaWQgYXMgVVRGLTguCisg
ICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoKCdceDgxXHg4MicsICdceDgwXHg4MScp
KQorICAgICAgICAjIEludmFsaWQgY2hhcmFjdGVycyBzaG91bGQgcmFpc2UgSW52YWxpZFVURjhF
eGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW52YWxpZFVURjhFeGNlcHRpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0KQorCisgICAgZGVmIHRlc3RfcmVjZWl2ZV9m
cmFnbWVudHMoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoCisgICAg
ICAgICAgICAoJ1x4MDFceDg1JywgJ0hlbGxvJyksCisgICAgICAgICAgICAoJ1x4MDBceDgxJywg
JyAnKSwKKyAgICAgICAgICAgICgnXHgwMFx4ODUnLCAnV29ybGQnKSwKKyAgICAgICAgICAgICgn
XHg4MFx4ODEnLCAnIScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWxsbyBXb3JsZCEn
LCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKworICAgIGRlZiB0ZXN0X3JlY2Vp
dmVfZnJhZ21lbnRzX3VuaWNvZGUoc2VsZik6CisgICAgICAgICMgVVRGLTggZW5jb2RlcyBVKzZm
MjIgaW50byBlNmJjYTIgYW5kIFUrNWI1NyBpbnRvIGU1YWQ5Ny4KKyAgICAgICAgcmVxdWVzdCA9
IF9jcmVhdGVfcmVxdWVzdCgKKyAgICAgICAgICAgICgnXHgwMVx4ODInLCAnXHhlNlx4YmMnKSwK
KyAgICAgICAgICAgICgnXHgwMFx4ODInLCAnXHhhMlx4ZTUnKSwKKyAgICAgICAgICAgICgnXHg4
MFx4ODInLCAnXHhhZFx4OTcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1NmYyMlx1
NWI1NycsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorCisgICAgZGVmIHRlc3Rf
cmVjZWl2ZV9mcmFnbWVudHNfaW1tZWRpYXRlX3plcm9fdGVybWluYXRpb24oc2VsZik6CisgICAg
ICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoCisgICAgICAgICAgICAoJ1x4MDFceDhjJywg
J0hlbGxvIFdvcmxkIScpLCAoJ1x4ODBceDgwJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdIZWxsbyBXb3JsZCEnLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKwor
ICAgIGRlZiB0ZXN0X3JlY2VpdmVfZnJhZ21lbnRzX2R1cGxpY2F0ZV9zdGFydChzZWxmKToKKyAg
ICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgKKyAgICAgICAgICAgICgnXHgwMVx4ODUn
LCAnSGVsbG8nKSwgKCdceDAxXHg4NScsICdXb3JsZCcpKQorICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhtc2d1dGlsLkludmFsaWRGcmFtZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcXVlc3QpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX2ZyYWdtZW50c19pbnRlcm1lZGlhdGVf
YnV0X25vdF9zdGFydGVkKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0
KCgnXHgwMFx4ODUnLCAnSGVsbG8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobXNndXRp
bC5JbnZhbGlkRnJhbWVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ3V0
aWwucmVjZWl2ZV9tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0KQor
CisgICAgZGVmIHRlc3RfcmVjZWl2ZV9mcmFnbWVudHNfZW5kX2J1dF9ub3Rfc3RhcnRlZChzZWxm
KToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgoJ1x4ODBceDg1JywgJ0hlbGxv
JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1zZ3V0aWwuSW52YWxpZEZyYW1lRXhjZXB0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCkKKworICAgIGRlZiB0ZXN0X3JlY2Vp
dmVfbWVzc2FnZV9kaXNjYXJkKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1
ZXN0KAorICAgICAgICAgICAgKCdceDhmXHg4NicsICdJR05PUkUnKSwgKCdceDgxXHg4NScsICdI
ZWxsbycpLAorICAgICAgICAgICAgKCdceDhmXHg4OScsICdESVNSRUdBUkQnKSwgKCdceDgxXHg4
NicsICdXb3JsZCEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobXNndXRpbC5VbnN1cHBv
cnRlZEZyYW1lRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtc2d1dGlsLnJl
Y2VpdmVfbWVzc2FnZSwgcmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVsbG8n
LCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMobXNndXRpbC5VbnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZSwgcmVxdWVzdCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnV29ybGQhJywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkp
CisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX2Nsb3NlKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0g
X2NyZWF0ZV9yZXF1ZXN0KAorICAgICAgICAgICAgKCdceDg4XHg4YScsIHN0cnVjdC5wYWNrKCch
SCcsIDEwMDApICsgJ0dvb2QgYnllJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwg
bXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMTAwMCwgcmVxdWVzdC53c19jbG9zZV9jb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdHb29kIGJ5ZScsIHJlcXVlc3Qud3NfY2xvc2VfcmVhc29uKQorCisgICAgZGVmIHRlc3Rfc2Vu
ZF9sb25nZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICByZWFzb24gPSAnYScgKiAxMjMKKyAgICAg
ICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgKKyAgICAgICAgICAgICgnXHg4OFx4ZmQnLAor
ICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCchSCcsIGNvbW1vbi5TVEFUVVNfTk9STUFMX0NMT1NV
UkUpICsgcmVhc29uKSkKKyAgICAgICAgcmVxdWVzdC53c19zdHJlYW0uY2xvc2VfY29ubmVjdGlv
bihjb21tb24uU1RBVFVTX05PUk1BTF9DTE9TVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlYXNvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1
ZXN0LndzX2Nsb3NlX2NvZGUsIGNvbW1vbi5TVEFUVVNfTk9STUFMX0NMT1NVUkUpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdC53c19jbG9zZV9yZWFzb24sIHJlYXNvbikKKworICAg
IGRlZiB0ZXN0X3NlbmRfY2xvc2VfdG9vX2xvbmcoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBf
Y3JlYXRlX3JlcXVlc3QoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtc2d1dGlsLkJhZE9w
ZXJhdGlvbkV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtLmNsb3Nl
X2Nvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFt
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb24uU1RBVFVTX05PUk1BTF9DTE9TVVJF
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYScgKiAxMjQpCisKKyAgICBkZWYgdGVzdF9z
ZW5kX2Nsb3NlX2luY29uc2lzdGVudF9jb2RlX2FuZF9yZWFzb24oc2VsZik6CisgICAgICAgIHJl
cXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoKQorICAgICAgICAjIHJlYXNvbiBwYXJhbWV0ZXIgbXVz
dCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gY29kZSBpcyBOb25lLgorICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhtc2d1dGlsLkJhZE9wZXJhdGlvbkV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyZWFtLmNsb3NlX2Nvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcXVlc3Qud3Nfc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAnYScpCisKKyAgICBkZWYgdGVzdF9zZW5kX3Bpbmco
c2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoKQorICAgICAgICBtc2d1
dGlsLnNlbmRfcGluZyhyZXF1ZXN0LCAnSGVsbG8gV29ybGQhJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnXHg4OVx4MGNIZWxsbyBXb3JsZCEnLAorICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X3NlbmRf
bG9uZ2VzdF9waW5nKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCkK
KyAgICAgICAgbXNndXRpbC5zZW5kX3BpbmcocmVxdWVzdCwgJ2EnICogMTI1KQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCdceDg5XHg3ZCcgKyAnYScgKiAxMjUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRl
c3Rfc2VuZF9waW5nX3Rvb19sb25nKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9y
ZXF1ZXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobXNndXRpbC5CYWRPcGVyYXRpb25F
eGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ3V0aWwuc2VuZF9waW5nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAnYScgKiAxMjYpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX3Bpbmcoc2VsZik6CisgICAg
ICAgICIiIlRlc3RzIHJlY2VpdmluZyBhIHBpbmcgY29udHJvbCBmcmFtZS4iIiIKKworICAgICAg
ICBkZWYgaGFuZGxlcihyZXF1ZXN0LCBtZXNzYWdlKToKKyAgICAgICAgICAgIHJlcXVlc3QuY2Fs
bGVkID0gVHJ1ZQorCisgICAgICAgICMgU3RyZWFtIGF1dG9tYXRpY2FsbHkgcmVzcG9uZCB0byBw
aW5nIHdpdGggcG9uZyB3aXRob3V0IGFueSBhY3Rpb24KKyAgICAgICAgIyBieSBhcHBsaWNhdGlv
biBsYXllci4KKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgKKyAgICAgICAgICAg
ICgnXHg4OVx4ODUnLCAnSGVsbG8nKSwgKCdceDgxXHg4NScsICdXb3JsZCcpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCdXb3JsZCcsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3Qp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDhhXHgwNUhlbGxvJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICAg
ICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgKKyAgICAgICAgICAgICgnXHg4OVx4ODUnLCAn
SGVsbG8nKSwgKCdceDgxXHg4NScsICdXb3JsZCcpKQorICAgICAgICByZXF1ZXN0Lm9uX3Bpbmdf
aGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnV29ybGQnLCBtc2d1
dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJl
cXVlc3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVjZWl2ZV9sb25nZXN0X3Bpbmcoc2VsZik6
CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoCisgICAgICAgICAgICAoJ1x4ODlc
eGZkJywgJ2EnICogMTI1KSwgKCdceDgxXHg4NScsICdXb3JsZCcpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdXb3JsZCcsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDhhXHg3ZCcgKyAnYScgKiAxMjUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAg
ZGVmIHRlc3RfcmVjZWl2ZV9waW5nX3Rvb19sb25nKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0g
X2NyZWF0ZV9yZXF1ZXN0KCgnXHg4OVx4ZmVceDAwXHg3ZScsICdhJyAqIDEyNikpCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKG1zZ3V0aWwuSW52YWxpZEZyYW1lRXhjZXB0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVxdWVzdCkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfcG9uZyhzZWxm
KToKKyAgICAgICAgIiIiVGVzdHMgcmVjZWl2aW5nIGEgcG9uZyBjb250cm9sIGZyYW1lLiIiIgor
CisgICAgICAgIGRlZiBoYW5kbGVyKHJlcXVlc3QsIG1lc3NhZ2UpOgorICAgICAgICAgICAgcmVx
dWVzdC5jYWxsZWQgPSBUcnVlCisKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgK
KyAgICAgICAgICAgICgnXHg4YVx4ODUnLCAnSGVsbG8nKSwgKCdceDgxXHg4NScsICdXb3JsZCcp
KQorICAgICAgICByZXF1ZXN0Lm9uX3BvbmdfaGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgbXNn
dXRpbC5zZW5kX3BpbmcocmVxdWVzdCwgJ0hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnXHg4OVx4MDVIZWxsbycsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25u
ZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorICAgICAgICAjIFZhbGlkIHBvbmcgaXMgcmVjZWl2ZWQs
IGJ1dCByZWNlaXZlX21lc3NhZ2Ugd29uJ3QgcmV0dXJuIGZvciBpdC4KKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnV29ybGQnLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKyAg
ICAgICAgIyBDaGVjayB0aGF0IG5vdGhpbmcgd2FzIHdyaXR0ZW4gYWZ0ZXIgcmVjZWl2ZV9tZXNz
YWdlIGNhbGwuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ODlceDA1SGVsbG8nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkK
KworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVxdWVzdC5jYWxsZWQpCisKKyAgICBkZWYgdGVz
dF9yZWNlaXZlX3Vuc29saWNpdGVkX3Bvbmcoc2VsZik6CisgICAgICAgICMgVW5zb2xpY2l0ZWQg
cG9uZyBpcyBhbGxvd2VkIGZyb20gSHlCaSAwNy4KKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVf
cmVxdWVzdCgKKyAgICAgICAgICAgICgnXHg4YVx4ODUnLCAnSGVsbG8nKSwgKCdceDgxXHg4NScs
ICdXb3JsZCcpKQorICAgICAgICBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KQorCisg
ICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoCisgICAgICAgICAgICAoJ1x4OGFceDg1
JywgJ0hlbGxvJyksICgnXHg4MVx4ODUnLCAnV29ybGQnKSkKKyAgICAgICAgbXNndXRpbC5zZW5k
X3BpbmcocmVxdWVzdCwgJ0p1bWJvJykKKyAgICAgICAgIyBCb2R5IG1pc21hdGNoLgorICAgICAg
ICBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KQorCisgICAgZGVmIHRlc3RfcGluZ19j
YW5ub3RfYmVfZnJhZ21lbnRlZChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVx
dWVzdCgoJ1x4MDlceDg1JywgJ0hlbGxvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1z
Z3V0aWwuSW52YWxpZEZyYW1lRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBt
c2d1dGlsLnJlY2VpdmVfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dCkKKworICAgIGRlZiB0ZXN0X3Bpbmdfd2l0aF90b29fbG9uZ19wYXlsb2FkKHNlbGYpOgorICAg
ICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCgnXHg4OVx4ZmVceDAxXHgwMCcsICdhJyAq
IDI1NikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1zZ3V0aWwuSW52YWxpZEZyYW1lRXhj
ZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtc2d1dGlsLnJlY2VpdmVfbWVzc2Fn
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCkKKworCitjbGFzcyBEZWZsYXRl
RnJhbWVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgY2hlY2tpbmcg
ZGVmbGF0ZS1mcmFtZSBleHRlbnNpb24uIiIiCisKKyAgICBkZWYgdGVzdF9zZW5kX21lc3NhZ2Uo
c2VsZik6CisgICAgICAgIGNvbXByZXNzID0gemxpYi5jb21wcmVzc29iaigKKyAgICAgICAgICAg
IHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9OLCB6bGliLkRFRkxBVEVELCAtemxpYi5NQVhfV0JJ
VFMpCisKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihjb21t
b24uREVGTEFURV9GUkFNRV9FWFRFTlNJT04pCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3Jl
cXVlc3RfZnJvbV9yYXdkYXRhKAorICAgICAgICAgICAgJycsIGRlZmxhdGVfZnJhbWVfcmVxdWVz
dD1leHRlbnNpb24pCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdIZWxs
bycpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdXb3JsZCcpCisKKyAg
ICAgICAgZXhwZWN0ZWQgPSAnJworCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gPSBjb21wcmVz
cy5jb21wcmVzcygnSGVsbG8nKQorICAgICAgICBjb21wcmVzc2VkX2hlbGxvICs9IGNvbXByZXNz
LmZsdXNoKHpsaWIuWl9TWU5DX0ZMVVNIKQorICAgICAgICBjb21wcmVzc2VkX2hlbGxvID0gY29t
cHJlc3NlZF9oZWxsb1s6LTRdCisgICAgICAgIGV4cGVjdGVkICs9ICdceGMxJWMnICUgbGVuKGNv
bXByZXNzZWRfaGVsbG8pCisgICAgICAgIGV4cGVjdGVkICs9IGNvbXByZXNzZWRfaGVsbG8KKwor
ICAgICAgICBjb21wcmVzc2VkX3dvcmxkID0gY29tcHJlc3MuY29tcHJlc3MoJ1dvcmxkJykKKyAg
ICAgICAgY29tcHJlc3NlZF93b3JsZCArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVT
SCkKKyAgICAgICAgY29tcHJlc3NlZF93b3JsZCA9IGNvbXByZXNzZWRfd29ybGRbOi00XQorICAg
ICAgICBleHBlY3RlZCArPSAnXHhjMSVjJyAlIGxlbihjb21wcmVzc2VkX3dvcmxkKQorICAgICAg
ICBleHBlY3RlZCArPSBjb21wcmVzc2VkX3dvcmxkCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChleHBlY3RlZCwgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVm
IHRlc3Rfc2VuZF9tZXNzYWdlX2JmaW5hbChzZWxmKToKKyAgICAgICAgZXh0ZW5zaW9uID0gY29t
bW9uLkV4dGVuc2lvblBhcmFtZXRlcihjb21tb24uREVGTEFURV9GUkFNRV9FWFRFTlNJT04pCisg
ICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3RfZnJvbV9yYXdkYXRhKAorICAgICAgICAg
ICAgJycsIGRlZmxhdGVfZnJhbWVfcmVxdWVzdD1leHRlbnNpb24pCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKDEsIGxlbihyZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzKSkKKyAgICAg
ICAgZGVmbGF0ZV9mcmFtZV9wcm9jZXNzb3IgPSByZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNz
b3JzWzBdCisgICAgICAgIGRlZmxhdGVfZnJhbWVfcHJvY2Vzc29yLnNldF9iZmluYWwoVHJ1ZSkK
KyAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJ0hlbGxvJykKKyAgICAgICAg
bXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJ1dvcmxkJykKKworICAgICAgICBleHBlY3Rl
ZCA9ICcnCisKKyAgICAgICAgY29tcHJlc3MgPSB6bGliLmNvbXByZXNzb2JqKAorICAgICAgICAg
ICAgemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04sIHpsaWIuREVGTEFURUQsIC16bGliLk1BWF9X
QklUUykKKyAgICAgICAgY29tcHJlc3NlZF9oZWxsbyA9IGNvbXByZXNzLmNvbXByZXNzKCdIZWxs
bycpCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gKz0gY29tcHJlc3MuZmx1c2goemxpYi5aX0ZJ
TklTSCkKKyAgICAgICAgY29tcHJlc3NlZF9oZWxsbyA9IGNvbXByZXNzZWRfaGVsbG8gKyBjaHIo
MCkKKyAgICAgICAgZXhwZWN0ZWQgKz0gJ1x4YzElYycgJSBsZW4oY29tcHJlc3NlZF9oZWxsbykK
KyAgICAgICAgZXhwZWN0ZWQgKz0gY29tcHJlc3NlZF9oZWxsbworCisgICAgICAgIGNvbXByZXNz
ID0gemxpYi5jb21wcmVzc29iaigKKyAgICAgICAgICAgIHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNT
SU9OLCB6bGliLkRFRkxBVEVELCAtemxpYi5NQVhfV0JJVFMpCisgICAgICAgIGNvbXByZXNzZWRf
d29ybGQgPSBjb21wcmVzcy5jb21wcmVzcygnV29ybGQnKQorICAgICAgICBjb21wcmVzc2VkX3dv
cmxkICs9IGNvbXByZXNzLmZsdXNoKHpsaWIuWl9GSU5JU0gpCisgICAgICAgIGNvbXByZXNzZWRf
d29ybGQgPSBjb21wcmVzc2VkX3dvcmxkICsgY2hyKDApCisgICAgICAgIGV4cGVjdGVkICs9ICdc
eGMxJWMnICUgbGVuKGNvbXByZXNzZWRfd29ybGQpCisgICAgICAgIGV4cGVjdGVkICs9IGNvbXBy
ZXNzZWRfd29ybGQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXF1ZXN0
LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYgdGVzdF9zZW5kX21lc3NhZ2Vf
Y29tcF9iaXQoc2VsZik6CisgICAgICAgIGNvbXByZXNzID0gemxpYi5jb21wcmVzc29iaigKKyAg
ICAgICAgICAgIHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9OLCB6bGliLkRFRkxBVEVELCAtemxp
Yi5NQVhfV0JJVFMpCisKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFt
ZXRlcihjb21tb24uREVGTEFURV9GUkFNRV9FWFRFTlNJT04pCisgICAgICAgIHJlcXVlc3QgPSBf
Y3JlYXRlX3JlcXVlc3RfZnJvbV9yYXdkYXRhKAorICAgICAgICAgICAgJycsIGRlZmxhdGVfZnJh
bWVfcmVxdWVzdD1leHRlbnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGxlbihy
ZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzKSkKKyAgICAgICAgZGVmbGF0ZV9mcmFtZV9w
cm9jZXNzb3IgPSByZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzWzBdCisgICAgICAgIG1z
Z3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdIZWxsbycpCisgICAgICAgIGRlZmxhdGVfZnJh
bWVfcHJvY2Vzc29yLmRpc2FibGVfb3V0Z29pbmdfY29tcHJlc3Npb24oKQorICAgICAgICBtc2d1
dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCAnSGVsbG8nKQorICAgICAgICBkZWZsYXRlX2ZyYW1l
X3Byb2Nlc3Nvci5lbmFibGVfb3V0Z29pbmdfY29tcHJlc3Npb24oKQorICAgICAgICBtc2d1dGls
LnNlbmRfbWVzc2FnZShyZXF1ZXN0LCAnSGVsbG8nKQorCisgICAgICAgIGV4cGVjdGVkID0gJycK
KworICAgICAgICBjb21wcmVzc2VkX2hlbGxvID0gY29tcHJlc3MuY29tcHJlc3MoJ0hlbGxvJykK
KyAgICAgICAgY29tcHJlc3NlZF9oZWxsbyArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19G
TFVTSCkKKyAgICAgICAgY29tcHJlc3NlZF9oZWxsbyA9IGNvbXByZXNzZWRfaGVsbG9bOi00XQor
ICAgICAgICBleHBlY3RlZCArPSAnXHhjMSVjJyAlIGxlbihjb21wcmVzc2VkX2hlbGxvKQorICAg
ICAgICBleHBlY3RlZCArPSBjb21wcmVzc2VkX2hlbGxvCisKKyAgICAgICAgZXhwZWN0ZWQgKz0g
J1x4ODFceDA1SGVsbG8nCisKKyAgICAgICAgY29tcHJlc3NlZF8ybmRfaGVsbG8gPSBjb21wcmVz
cy5jb21wcmVzcygnSGVsbG8nKQorICAgICAgICBjb21wcmVzc2VkXzJuZF9oZWxsbyArPSBjb21w
cmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAgICAgY29tcHJlc3NlZF8ybmRfaGVs
bG8gPSBjb21wcmVzc2VkXzJuZF9oZWxsb1s6LTRdCisgICAgICAgIGV4cGVjdGVkICs9ICdceGMx
JWMnICUgbGVuKGNvbXByZXNzZWRfMm5kX2hlbGxvKQorICAgICAgICBleHBlY3RlZCArPSBjb21w
cmVzc2VkXzJuZF9oZWxsbworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJl
cXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X3NlbmRfbWVz
c2FnZV9ub19jb250ZXh0X3Rha2VvdmVyX3BhcmFtZXRlcihzZWxmKToKKyAgICAgICAgY29tcHJl
c3MgPSB6bGliLmNvbXByZXNzb2JqKAorICAgICAgICAgICAgemxpYi5aX0RFRkFVTFRfQ09NUFJF
U1NJT04sIHpsaWIuREVGTEFURUQsIC16bGliLk1BWF9XQklUUykKKworICAgICAgICBleHRlbnNp
b24gPSBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVyKGNvbW1vbi5ERUZMQVRFX0ZSQU1FX0VYVEVO
U0lPTikKKyAgICAgICAgZXh0ZW5zaW9uLmFkZF9wYXJhbWV0ZXIoJ25vX2NvbnRleHRfdGFrZW92
ZXInLCBOb25lKQorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0X2Zyb21fcmF3ZGF0
YSgKKyAgICAgICAgICAgICcnLCBkZWZsYXRlX2ZyYW1lX3JlcXVlc3Q9ZXh0ZW5zaW9uKQorICAg
ICAgICBmb3IgaSBpbiB4cmFuZ2UoMyk6CisgICAgICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2Fn
ZShyZXF1ZXN0LCAnSGVsbG8nKQorCisgICAgICAgIGNvbXByZXNzZWRfbWVzc2FnZSA9IGNvbXBy
ZXNzLmNvbXByZXNzKCdIZWxsbycpCisgICAgICAgIGNvbXByZXNzZWRfbWVzc2FnZSArPSBjb21w
cmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAgICAgY29tcHJlc3NlZF9tZXNzYWdl
ID0gY29tcHJlc3NlZF9tZXNzYWdlWzotNF0KKyAgICAgICAgZXhwZWN0ZWQgPSAnXHhjMSVjJyAl
IGxlbihjb21wcmVzc2VkX21lc3NhZ2UpCisgICAgICAgIGV4cGVjdGVkICs9IGNvbXByZXNzZWRf
bWVzc2FnZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBleHBlY3Rl
ZCArIGV4cGVjdGVkICsgZXhwZWN0ZWQsIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEo
KSkKKworICAgIGRlZiB0ZXN0X2JhZF9yZXF1ZXN0X3BhcmFtZXRlcnMoc2VsZik6CisgICAgICAg
ICIiIlRlc3RzIHRoYXQgaWYgdGhlcmUncyBhbnl0aGluZyB3cm9uZyB3aXRoIGRlZmxhdGUtZnJh
bWUgZXh0ZW5zaW9uCisgICAgICAgIHJlcXVlc3QsIGRlZmxhdGUtZnJhbWUgaXMgcmVqZWN0ZWQu
CisgICAgICAgICIiIgorCisgICAgICAgIGV4dGVuc2lvbiA9IGNvbW1vbi5FeHRlbnNpb25QYXJh
bWV0ZXIoY29tbW9uLkRFRkxBVEVfRlJBTUVfRVhURU5TSU9OKQorICAgICAgICAjIG1heF93aW5k
b3dfYml0cyBsZXNzIHRoYW4gOCBpcyBpbGxlZ2FsLgorICAgICAgICBleHRlbnNpb24uYWRkX3Bh
cmFtZXRlcignbWF4X3dpbmRvd19iaXRzJywgJzcnKQorICAgICAgICBwcm9jZXNzb3IgPSBEZWZs
YXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IoZXh0ZW5zaW9uKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKE5vbmUsIHByb2Nlc3Nvci5nZXRfZXh0ZW5zaW9uX3Jlc3BvbnNlKCkpCisKKyAgICAg
ICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihjb21tb24uREVGTEFURV9G
UkFNRV9FWFRFTlNJT04pCisgICAgICAgICMgbWF4X3dpbmRvd19iaXRzIGdyZWF0ZXIgdGhhbiAx
NSBpcyBpbGxlZ2FsLgorICAgICAgICBleHRlbnNpb24uYWRkX3BhcmFtZXRlcignbWF4X3dpbmRv
d19iaXRzJywgJzE2JykKKyAgICAgICAgcHJvY2Vzc29yID0gRGVmbGF0ZUZyYW1lRXh0ZW5zaW9u
UHJvY2Vzc29yKGV4dGVuc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBwcm9j
ZXNzb3IuZ2V0X2V4dGVuc2lvbl9yZXNwb25zZSgpKQorCisgICAgICAgIGV4dGVuc2lvbiA9IGNv
bW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIoY29tbW9uLkRFRkxBVEVfRlJBTUVfRVhURU5TSU9OKQor
ICAgICAgICAjIE5vbiBpbnRlZ2VyIG1heF93aW5kb3dfYml0cyBpcyBpbGxlZ2FsLgorICAgICAg
ICBleHRlbnNpb24uYWRkX3BhcmFtZXRlcignbWF4X3dpbmRvd19iaXRzJywgJ2Zvb2JhcicpCisg
ICAgICAgIHByb2Nlc3NvciA9IERlZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nlc3NvcihleHRlbnNp
b24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcHJvY2Vzc29yLmdldF9leHRlbnNp
b25fcmVzcG9uc2UoKSkKKworICAgICAgICBleHRlbnNpb24gPSBjb21tb24uRXh0ZW5zaW9uUGFy
YW1ldGVyKGNvbW1vbi5ERUZMQVRFX0ZSQU1FX0VYVEVOU0lPTikKKyAgICAgICAgIyBub19jb250
ZXh0X3Rha2VvdmVyIG11c3Qgbm90IGhhdmUgYW55IHZhbHVlLgorICAgICAgICBleHRlbnNpb24u
YWRkX3BhcmFtZXRlcignbm9fY29udGV4dF90YWtlb3ZlcicsICdmb29iYXInKQorICAgICAgICBw
cm9jZXNzb3IgPSBEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IoZXh0ZW5zaW9uKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHByb2Nlc3Nvci5nZXRfZXh0ZW5zaW9uX3Jlc3Bv
bnNlKCkpCisKKyAgICBkZWYgdGVzdF9yZXNwb25zZV9wYXJhbWV0ZXJzKHNlbGYpOgorICAgICAg
ICBleHRlbnNpb24gPSBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVyKGNvbW1vbi5ERUZMQVRFX0ZS
QU1FX0VYVEVOU0lPTikKKyAgICAgICAgcHJvY2Vzc29yID0gRGVmbGF0ZUZyYW1lRXh0ZW5zaW9u
UHJvY2Vzc29yKGV4dGVuc2lvbikKKyAgICAgICAgcHJvY2Vzc29yLnNldF9yZXNwb25zZV93aW5k
b3dfYml0cyg4KQorICAgICAgICByZXNwb25zZSA9IHByb2Nlc3Nvci5nZXRfZXh0ZW5zaW9uX3Jl
c3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlLmhhc19wYXJhbWV0ZXIo
J21heF93aW5kb3dfYml0cycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCc4JywgcmVzcG9u
c2UuZ2V0X3BhcmFtZXRlcl92YWx1ZSgnbWF4X3dpbmRvd19iaXRzJykpCisKKyAgICAgICAgZXh0
ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihjb21tb24uREVGTEFURV9GUkFNRV9F
WFRFTlNJT04pCisgICAgICAgIHByb2Nlc3NvciA9IERlZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nl
c3NvcihleHRlbnNpb24pCisgICAgICAgIHByb2Nlc3Nvci5zZXRfcmVzcG9uc2Vfbm9fY29udGV4
dF90YWtlb3ZlcihUcnVlKQorICAgICAgICByZXNwb25zZSA9IHByb2Nlc3Nvci5nZXRfZXh0ZW5z
aW9uX3Jlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlLmhhc19wYXJh
bWV0ZXIoJ25vX2NvbnRleHRfdGFrZW92ZXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAor
ICAgICAgICAgICAgcmVzcG9uc2UuZ2V0X3BhcmFtZXRlcl92YWx1ZSgnbm9fY29udGV4dF90YWtl
b3ZlcicpIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX21lc3NhZ2Uoc2VsZik6Cisg
ICAgICAgIGNvbXByZXNzID0gemxpYi5jb21wcmVzc29iaigKKyAgICAgICAgICAgIHpsaWIuWl9E
RUZBVUxUX0NPTVBSRVNTSU9OLCB6bGliLkRFRkxBVEVELCAtemxpYi5NQVhfV0JJVFMpCisKKyAg
ICAgICAgZGF0YSA9ICcnCisKKyAgICAgICAgY29tcHJlc3NlZF9oZWxsbyA9IGNvbXByZXNzLmNv
bXByZXNzKCdIZWxsbycpCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gKz0gY29tcHJlc3MuZmx1
c2goemxpYi5aX1NZTkNfRkxVU0gpCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gPSBjb21wcmVz
c2VkX2hlbGxvWzotNF0KKyAgICAgICAgZGF0YSArPSAnXHhjMSVjJyAlIChsZW4oY29tcHJlc3Nl
ZF9oZWxsbykgfCAweDgwKQorICAgICAgICBkYXRhICs9IF9tYXNrX2h5YmkoY29tcHJlc3NlZF9o
ZWxsbykKKworICAgICAgICBjb21wcmVzc2VkX3dlYnNvY2tldCA9IGNvbXByZXNzLmNvbXByZXNz
KCdXZWJTb2NrZXQnKQorICAgICAgICBjb21wcmVzc2VkX3dlYnNvY2tldCArPSBjb21wcmVzcy5m
bHVzaCh6bGliLlpfRklOSVNIKQorICAgICAgICBjb21wcmVzc2VkX3dlYnNvY2tldCArPSAnXHgw
MCcKKyAgICAgICAgZGF0YSArPSAnXHhjMSVjJyAlIChsZW4oY29tcHJlc3NlZF93ZWJzb2NrZXQp
IHwgMHg4MCkKKyAgICAgICAgZGF0YSArPSBfbWFza19oeWJpKGNvbXByZXNzZWRfd2Vic29ja2V0
KQorCisgICAgICAgIGNvbXByZXNzID0gemxpYi5jb21wcmVzc29iaigKKyAgICAgICAgICAgIHps
aWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9OLCB6bGliLkRFRkxBVEVELCAtemxpYi5NQVhfV0JJVFMp
CisKKyAgICAgICAgY29tcHJlc3NlZF93b3JsZCA9IGNvbXByZXNzLmNvbXByZXNzKCdXb3JsZCcp
CisgICAgICAgIGNvbXByZXNzZWRfd29ybGQgKz0gY29tcHJlc3MuZmx1c2goemxpYi5aX1NZTkNf
RkxVU0gpCisgICAgICAgIGNvbXByZXNzZWRfd29ybGQgPSBjb21wcmVzc2VkX3dvcmxkWzotNF0K
KyAgICAgICAgZGF0YSArPSAnXHhjMSVjJyAlIChsZW4oY29tcHJlc3NlZF93b3JsZCkgfCAweDgw
KQorICAgICAgICBkYXRhICs9IF9tYXNrX2h5YmkoY29tcHJlc3NlZF93b3JsZCkKKworICAgICAg
ICAjIENsb3NlIGZyYW1lCisgICAgICAgIGRhdGEgKz0gJ1x4ODhceDhhJyArIF9tYXNrX2h5Ymko
c3RydWN0LnBhY2soJyFIJywgMTAwMCkgKyAnR29vZCBieWUnKQorCisgICAgICAgIGV4dGVuc2lv
biA9IGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIoY29tbW9uLkRFRkxBVEVfRlJBTUVfRVhURU5T
SU9OKQorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0X2Zyb21fcmF3ZGF0YSgKKyAg
ICAgICAgICAgIGRhdGEsIGRlZmxhdGVfZnJhbWVfcmVxdWVzdD1leHRlbnNpb24pCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvJywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVz
dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1dlYlNvY2tldCcsIG1zZ3V0aWwucmVjZWl2
ZV9tZXNzYWdlKHJlcXVlc3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdXb3JsZCcsIG1z
Z3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoTm9uZSwgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKyAgICBkZWYgdGVz
dF9yZWNlaXZlX21lc3NhZ2VfY2xpZW50X3VzaW5nX3NtYWxsZXJfd2luZG93KHNlbGYpOgorICAg
ICAgICAiIiJUZXN0IHRoYXQgZnJhbWVzIGNvbWluZyBmcm9tIGEgY2xpZW50IHdoaWNoIGlzIHVz
aW5nIHNtYWxsZXIgd2luZG93CisgICAgICAgIHNpemUgdGhhdCB0aGUgc2VydmVyIGFyZSBjb3Jy
ZWN0bHkgcmVjZWl2ZWQuCisgICAgICAgICIiIgorCisgICAgICAgICMgVXNpbmcgdGhlIHNtYWxs
ZXN0IHdpbmRvdyBiaXRzIG9mIDggZm9yIGdlbmVyYXRpbmcgaW5wdXQgZnJhbWVzLgorICAgICAg
ICBjb21wcmVzcyA9IHpsaWIuY29tcHJlc3NvYmooCisgICAgICAgICAgICB6bGliLlpfREVGQVVM
VF9DT01QUkVTU0lPTiwgemxpYi5ERUZMQVRFRCwgLTgpCisKKyAgICAgICAgZGF0YSA9ICcnCisK
KyAgICAgICAgIyBVc2UgYSBmcmFtZSB3aG9zZSBjb250ZW50IGlzIGJpZ2dlciB0aGFuIHRoZSBj
bGllbnRzJyBERUZMQVRFIHdpbmRvdworICAgICAgICAjIHNpemUgYmVmb3JlIGNvbXByZXNzaW9u
LiBUaGUgY29udGVudCBtYWlubHkgY29uc2lzdHMgb2YgJ2EnIGJ1dAorICAgICAgICAjIHJlcGV0
aXRpb24gb2YgJ2InIGlzIHB1dCBhdCB0aGUgaGVhZCBhbmQgdGFpbCBzbyB0aGF0IGlmIHRoZSB3
aW5kb3cKKyAgICAgICAgIyBzaXplIGlzIGJpZywgdGhlIGhlYWQgaXMgYmFjay1yZWZlcmVuY2Vk
IGJ1dCBpZiBzbWFsbCwgbm90LgorICAgICAgICBwYXlsb2FkID0gJ2InICogNjQgKyAnYScgKiAx
MDI0ICsgJ2InICogNjQKKyAgICAgICAgY29tcHJlc3NlZF9oZWxsbyA9IGNvbXByZXNzLmNvbXBy
ZXNzKHBheWxvYWQpCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gKz0gY29tcHJlc3MuZmx1c2go
emxpYi5aX1NZTkNfRkxVU0gpCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gPSBjb21wcmVzc2Vk
X2hlbGxvWzotNF0KKyAgICAgICAgZGF0YSArPSAnXHhjMSVjJyAlIChsZW4oY29tcHJlc3NlZF9o
ZWxsbykgfCAweDgwKQorICAgICAgICBkYXRhICs9IF9tYXNrX2h5YmkoY29tcHJlc3NlZF9oZWxs
bykKKworICAgICAgICAjIENsb3NlIGZyYW1lCisgICAgICAgIGRhdGEgKz0gJ1x4ODhceDhhJyAr
IF9tYXNrX2h5Ymkoc3RydWN0LnBhY2soJyFIJywgMTAwMCkgKyAnR29vZCBieWUnKQorCisgICAg
ICAgIGV4dGVuc2lvbiA9IGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIoY29tbW9uLkRFRkxBVEVf
RlJBTUVfRVhURU5TSU9OKQorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0X2Zyb21f
cmF3ZGF0YSgKKyAgICAgICAgICAgIGRhdGEsIGRlZmxhdGVfZnJhbWVfcmVxdWVzdD1leHRlbnNp
b24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF5bG9hZCwgbXNndXRpbC5yZWNlaXZlX21l
c3NhZ2UocmVxdWVzdCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBtc2d1dGls
LnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfbWVzc2Fn
ZV9jb21wX2JpdChzZWxmKToKKyAgICAgICAgY29tcHJlc3MgPSB6bGliLmNvbXByZXNzb2JqKAor
ICAgICAgICAgICAgemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04sIHpsaWIuREVGTEFURUQsIC16
bGliLk1BWF9XQklUUykKKworICAgICAgICBkYXRhID0gJycKKworICAgICAgICBjb21wcmVzc2Vk
X2hlbGxvID0gY29tcHJlc3MuY29tcHJlc3MoJ0hlbGxvJykKKyAgICAgICAgY29tcHJlc3NlZF9o
ZWxsbyArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAgICAgY29tcHJl
c3NlZF9oZWxsbyA9IGNvbXByZXNzZWRfaGVsbG9bOi00XQorICAgICAgICBkYXRhICs9ICdceGMx
JWMnICUgKGxlbihjb21wcmVzc2VkX2hlbGxvKSB8IDB4ODApCisgICAgICAgIGRhdGEgKz0gX21h
c2tfaHliaShjb21wcmVzc2VkX2hlbGxvKQorCisgICAgICAgIGRhdGEgKz0gJ1x4ODFceDg1JyAr
IF9tYXNrX2h5YmkoJ0hlbGxvJykKKworICAgICAgICBjb21wcmVzcyA9IHpsaWIuY29tcHJlc3Nv
YmooCisgICAgICAgICAgICB6bGliLlpfREVGQVVMVF9DT01QUkVTU0lPTiwgemxpYi5ERUZMQVRF
RCwgLXpsaWIuTUFYX1dCSVRTKQorCisgICAgICAgIGNvbXByZXNzZWRfMm5kX2hlbGxvID0gY29t
cHJlc3MuY29tcHJlc3MoJ0hlbGxvJykKKyAgICAgICAgY29tcHJlc3NlZF8ybmRfaGVsbG8gKz0g
Y29tcHJlc3MuZmx1c2goemxpYi5aX1NZTkNfRkxVU0gpCisgICAgICAgIGNvbXByZXNzZWRfMm5k
X2hlbGxvID0gY29tcHJlc3NlZF8ybmRfaGVsbG9bOi00XQorICAgICAgICBkYXRhICs9ICdceGMx
JWMnICUgKGxlbihjb21wcmVzc2VkXzJuZF9oZWxsbykgfCAweDgwKQorICAgICAgICBkYXRhICs9
IF9tYXNrX2h5YmkoY29tcHJlc3NlZF8ybmRfaGVsbG8pCisKKyAgICAgICAgZXh0ZW5zaW9uID0g
Y29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihjb21tb24uREVGTEFURV9GUkFNRV9FWFRFTlNJT04p
CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3RfZnJvbV9yYXdkYXRhKAorICAgICAg
ICAgICAgZGF0YSwgZGVmbGF0ZV9mcmFtZV9yZXF1ZXN0PWV4dGVuc2lvbikKKyAgICAgICAgZm9y
IGkgaW4geHJhbmdlKDMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVsbG8nLCBt
c2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKworCitjbGFzcyBQZXJNZXNzYWdlRGVm
bGF0ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciBwZXJtZXNzYWdl
LWRlZmxhdGUgZXh0ZW5zaW9uLiIiIgorCisgICAgZGVmIHRlc3Rfc2VuZF9tZXNzYWdlKHNlbGYp
OgorICAgICAgICBleHRlbnNpb24gPSBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVyKAorICAgICAg
ICAgICAgICAgIGNvbW1vbi5QRVJNRVNTQUdFX0RFRkxBVEVfRVhURU5TSU9OKQorICAgICAgICBy
ZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0X2Zyb21fcmF3ZGF0YSgKKyAgICAgICAgICAgICAgICAn
JywgcGVybWVzc2FnZV9kZWZsYXRlX3JlcXVlc3Q9ZXh0ZW5zaW9uKQorICAgICAgICBtc2d1dGls
LnNlbmRfbWVzc2FnZShyZXF1ZXN0LCAnSGVsbG8nKQorCisgICAgICAgIGNvbXByZXNzID0gemxp
Yi5jb21wcmVzc29iaigKKyAgICAgICAgICAgICAgICB6bGliLlpfREVGQVVMVF9DT01QUkVTU0lP
TiwgemxpYi5ERUZMQVRFRCwgLXpsaWIuTUFYX1dCSVRTKQorICAgICAgICBjb21wcmVzc2VkX2hl
bGxvID0gY29tcHJlc3MuY29tcHJlc3MoJ0hlbGxvJykKKyAgICAgICAgY29tcHJlc3NlZF9oZWxs
byArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAgICAgY29tcHJlc3Nl
ZF9oZWxsbyA9IGNvbXByZXNzZWRfaGVsbG9bOi00XQorICAgICAgICBleHBlY3RlZCA9ICdceGMx
JWMnICUgbGVuKGNvbXByZXNzZWRfaGVsbG8pCisgICAgICAgIGV4cGVjdGVkICs9IGNvbXByZXNz
ZWRfaGVsbG8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVxdWVzdC5jb25u
ZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3Rfc2VuZF9tZXNzYWdlX3VzaW5n
X3NtYWxsX3dpbmRvdyhzZWxmKToKKyAgICAgICAgY29tbW9uX3BhcnQgPSAnYWJjZGVmZ2hpamts
bW5vcHFyc3R1dnd4eXonCisgICAgICAgIHRlc3RfbWVzc2FnZSA9IGNvbW1vbl9wYXJ0ICsgJy0n
ICogMzAwMDAgKyBjb21tb25fcGFydAorCisgICAgICAgIGV4dGVuc2lvbiA9IGNvbW1vbi5FeHRl
bnNpb25QYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgY29tbW9uLlBFUk1FU1NBR0VfREVGTEFU
RV9FWFRFTlNJT04pCisgICAgICAgIGV4dGVuc2lvbi5hZGRfcGFyYW1ldGVyKCdzMmNfbWF4X3dp
bmRvd19iaXRzJywgJzgnKQorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0X2Zyb21f
cmF3ZGF0YSgKKyAgICAgICAgICAgICAgICAnJywgcGVybWVzc2FnZV9kZWZsYXRlX3JlcXVlc3Q9
ZXh0ZW5zaW9uKQorICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCB0ZXN0X21l
c3NhZ2UpCisKKyAgICAgICAgZXhwZWN0ZWRfd2Vic29ja2V0X2hlYWRlcl9zaXplID0gMgorICAg
ICAgICBleHBlY3RlZF93ZWJzb2NrZXRfcGF5bG9hZF9zaXplID0gOTEKKworICAgICAgICBhY3R1
YWxfZnJhbWUgPSByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChleHBlY3RlZF93ZWJzb2NrZXRfaGVhZGVyX3NpemUgKworICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cGVjdGVkX3dlYnNvY2tldF9wYXlsb2FkX3NpemUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgbGVuKGFjdHVhbF9mcmFtZSkpCisgICAgICAgIGFjdHVhbF9oZWFk
ZXIgPSBhY3R1YWxfZnJhbWVbMDpleHBlY3RlZF93ZWJzb2NrZXRfaGVhZGVyX3NpemVdCisgICAg
ICAgIGFjdHVhbF9wYXlsb2FkID0gYWN0dWFsX2ZyYW1lW2V4cGVjdGVkX3dlYnNvY2tldF9oZWFk
ZXJfc2l6ZTpdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAn
XHhjMSVjJyAlIGV4cGVjdGVkX3dlYnNvY2tldF9wYXlsb2FkX3NpemUsIGFjdHVhbF9oZWFkZXIp
CisgICAgICAgIGRlY29tcHJlc3MgPSB6bGliLmRlY29tcHJlc3NvYmooLTgpCisgICAgICAgIGRl
Y29tcHJlc3NlZF9tZXNzYWdlID0gZGVjb21wcmVzcy5kZWNvbXByZXNzKAorICAgICAgICAgICAg
ICAgIGFjdHVhbF9wYXlsb2FkICsgJ1x4MDBceDAwXHhmZlx4ZmYnKQorICAgICAgICBkZWNvbXBy
ZXNzZWRfbWVzc2FnZSArPSBkZWNvbXByZXNzLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCh0ZXN0X21lc3NhZ2UsIGRlY29tcHJlc3NlZF9tZXNzYWdlKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKDAsIGxlbihkZWNvbXByZXNzLnVudXNlZF9kYXRhKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgwLCBsZW4oZGVjb21wcmVzcy51bmNvbnN1bWVkX3RhaWwpKQorCisgICAgZGVm
IHRlc3RfcmVjZWl2ZV9tZXNzYWdlX2RlZmxhdGUoc2VsZik6CisgICAgICAgIGNvbXByZXNzID0g
emxpYi5jb21wcmVzc29iaigKKyAgICAgICAgICAgIHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9O
LCB6bGliLkRFRkxBVEVELCAtemxpYi5NQVhfV0JJVFMpCisKKyAgICAgICAgY29tcHJlc3NlZF9o
ZWxsbyA9IGNvbXByZXNzLmNvbXByZXNzKCdIZWxsbycpCisgICAgICAgIGNvbXByZXNzZWRfaGVs
bG8gKz0gY29tcHJlc3MuZmx1c2goemxpYi5aX1NZTkNfRkxVU0gpCisgICAgICAgIGNvbXByZXNz
ZWRfaGVsbG8gPSBjb21wcmVzc2VkX2hlbGxvWzotNF0KKyAgICAgICAgZGF0YSA9ICdceGMxJWMn
ICUgKGxlbihjb21wcmVzc2VkX2hlbGxvKSB8IDB4ODApCisgICAgICAgIGRhdGEgKz0gX21hc2tf
aHliaShjb21wcmVzc2VkX2hlbGxvKQorCisgICAgICAgICMgQ2xvc2UgZnJhbWUKKyAgICAgICAg
ZGF0YSArPSAnXHg4OFx4OGEnICsgX21hc2tfaHliaShzdHJ1Y3QucGFjaygnIUgnLCAxMDAwKSAr
ICdHb29kIGJ5ZScpCisKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFt
ZXRlcigKKyAgICAgICAgICAgICAgICBjb21tb24uUEVSTUVTU0FHRV9ERUZMQVRFX0VYVEVOU0lP
TikKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdF9mcm9tX3Jhd2RhdGEoCisgICAg
ICAgICAgICAgICAgZGF0YSwgcGVybWVzc2FnZV9kZWZsYXRlX3JlcXVlc3Q9ZXh0ZW5zaW9uKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWxsbycsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdl
KHJlcXVlc3QpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgbXNndXRpbC5yZWNl
aXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKworY2xhc3MgUGVyTWVzc2FnZUNvbXByZXNzVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIGNoZWNraW5nIHBlcm1lc3NhZ2Ut
Y29tcHJlc3Npb24gZXh0ZW5zaW9uLiIiIgorCisgICAgZGVmIHRlc3RfZGVmbGF0ZV9yZXNwb25z
ZV9wYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICBleHRlbnNpb24gPSBjb21tb24uRXh0ZW5zaW9u
UGFyYW1ldGVyKAorICAgICAgICAgICAgY29tbW9uLlBFUk1FU1NBR0VfQ09NUFJFU1NJT05fRVhU
RU5TSU9OKQorICAgICAgICBleHRlbnNpb24uYWRkX3BhcmFtZXRlcignbWV0aG9kJywgJ2RlZmxh
dGUnKQorICAgICAgICBwcm9jZXNzb3IgPSBQZXJNZXNzYWdlQ29tcHJlc3NFeHRlbnNpb25Qcm9j
ZXNzb3IoZXh0ZW5zaW9uKQorICAgICAgICByZXNwb25zZSA9IHByb2Nlc3Nvci5nZXRfZXh0ZW5z
aW9uX3Jlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZGVmbGF0ZScsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZ2V0X3BhcmFtZXRlcl92YWx1ZSgnbWV0aG9k
JykpCisKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcigKKyAg
ICAgICAgICAgIGNvbW1vbi5QRVJNRVNTQUdFX0NPTVBSRVNTSU9OX0VYVEVOU0lPTikKKyAgICAg
ICAgZXh0ZW5zaW9uLmFkZF9wYXJhbWV0ZXIoJ21ldGhvZCcsICdkZWZsYXRlJykKKyAgICAgICAg
cHJvY2Vzc29yID0gUGVyTWVzc2FnZUNvbXByZXNzRXh0ZW5zaW9uUHJvY2Vzc29yKGV4dGVuc2lv
bikKKyAgICAgICAgZGVmIF9jb21wcmVzc2lvbl9wcm9jZXNzb3JfaG9vayhjb21wcmVzc2lvbl9w
cm9jZXNzb3IpOgorICAgICAgICAgICAgY29tcHJlc3Npb25fcHJvY2Vzc29yLnNldF9jMnNfbWF4
X3dpbmRvd19iaXRzKDgpCisgICAgICAgICAgICBjb21wcmVzc2lvbl9wcm9jZXNzb3Iuc2V0X2My
c19ub19jb250ZXh0X3Rha2VvdmVyKFRydWUpCisgICAgICAgIHByb2Nlc3Nvci5zZXRfY29tcHJl
c3Npb25fcHJvY2Vzc29yX2hvb2soCisgICAgICAgICAgICBfY29tcHJlc3Npb25fcHJvY2Vzc29y
X2hvb2spCisgICAgICAgIHJlc3BvbnNlID0gcHJvY2Vzc29yLmdldF9leHRlbnNpb25fcmVzcG9u
c2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgJ2RlZmxhdGU7IGMy
c19tYXhfd2luZG93X2JpdHM9ODsgYzJzX25vX2NvbnRleHRfdGFrZW92ZXInLAorICAgICAgICAg
ICAgcmVzcG9uc2UuZ2V0X3BhcmFtZXRlcl92YWx1ZSgnbWV0aG9kJykpCisKKyAgICBkZWYgdGVz
dF9zZW5kX21lc3NhZ2VfZGVmbGF0ZV9lbXB0eShzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGF0
IGFuIGVtcHR5IG1lc3NhZ2UgaXMgY29tcHJlc3NlZCBjb3JyZWN0bHkuIiIiCisKKyAgICAgICAg
ZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcigKKyAgICAgICAgICAgIGNvbW1v
bi5QRVJNRVNTQUdFX0NPTVBSRVNTSU9OX0VYVEVOU0lPTikKKyAgICAgICAgZXh0ZW5zaW9uLmFk
ZF9wYXJhbWV0ZXIoJ21ldGhvZCcsICdkZWZsYXRlJykKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVh
dGVfcmVxdWVzdF9mcm9tX3Jhd2RhdGEoCisgICAgICAgICAgICAgICAgICAgICAgJycsIHBlcm1l
c3NhZ2VfY29tcHJlc3Npb25fcmVxdWVzdD1leHRlbnNpb24pCisgICAgICAgIG1zZ3V0aWwuc2Vu
ZF9tZXNzYWdlKHJlcXVlc3QsICcnKQorCisgICAgICAgICMgUGF5bG9hZCBpbiBiaW5hcnk6IDBi
MDAwMDAwMTAgMGIwMDAwMDAwMAorICAgICAgICAjIEZyb20gTFNCLAorICAgICAgICAjIC0gMSBi
aXQgb2YgQkZJTkFMICgwKQorICAgICAgICAjIC0gMiBiaXRzIG9mIEJUWVBFICgwMSB0aGF0IG1l
YW5zIGZpeGVkIEh1ZmZtYW4pCisgICAgICAgICMgLSA3IGJpdHMgb2YgdGhlIGZpcnN0IGNvZGUg
KDAwMDAwMDAgdGhhdCBpcyB0aGUgY29kZSBmb3IgdGhlCisgICAgICAgICMgICBlbmQtb2YtYmxv
Y2spCisgICAgICAgICMgLSAxIGJpdCBvZiBCRklOQUwgKDApCisgICAgICAgICMgLSAyIGJpdHMg
b2YgQlRZUEUgKG5vIGNvbXByZXNzaW9uKQorICAgICAgICAjIC0gMyBiaXRzIG9mIHBhZGRpbmcK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhjMVx4MDJceDAyXHgwMCcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAg
ZGVmIHRlc3Rfc2VuZF9tZXNzYWdlX2RlZmxhdGVfbnVsbF9jaGFyYWN0ZXIoc2VsZik6CisgICAg
ICAgICIiIlRlc3QgdGhhdCBhIHNpbXBsZSBwYXlsb2FkIChvbmUgbnVsbCkgaXMgZnJhbWVkIGNv
cnJlY3RseS4iIiIKKworICAgICAgICBleHRlbnNpb24gPSBjb21tb24uRXh0ZW5zaW9uUGFyYW1l
dGVyKAorICAgICAgICAgICAgY29tbW9uLlBFUk1FU1NBR0VfQ09NUFJFU1NJT05fRVhURU5TSU9O
KQorICAgICAgICBleHRlbnNpb24uYWRkX3BhcmFtZXRlcignbWV0aG9kJywgJ2RlZmxhdGUnKQor
ICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0X2Zyb21fcmF3ZGF0YSgKKyAgICAgICAg
ICAgICAgICAgICAgICAnJywgcGVybWVzc2FnZV9jb21wcmVzc2lvbl9yZXF1ZXN0PWV4dGVuc2lv
bikKKyAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJ1x4MDAnKQorCisgICAg
ICAgICMgUGF5bG9hZCBpbiBiaW5hcnk6IDBiMDExMDAwMTAgMGIwMDAwMDAwMCAwYjAwMDAwMDAw
CisgICAgICAgICMgRnJvbSBMU0IsCisgICAgICAgICMgLSAxIGJpdCBvZiBCRklOQUwgKDApCisg
ICAgICAgICMgLSAyIGJpdHMgb2YgQlRZUEUgKDAxIHRoYXQgbWVhbnMgZml4ZWQgSHVmZm1hbikK
KyAgICAgICAgIyAtIDggYml0cyBvZiB0aGUgZmlyc3QgY29kZSAoMDAxMTAwMDAgdGhhdCBpcyB0
aGUgY29kZSBmb3IgdGhlIGxpdGVyYWwKKyAgICAgICAgIyAgIGFscGhhYmV0IDB4MDApCisgICAg
ICAgICMgLSA3IGJpdHMgb2YgdGhlIHNlY29uZCBjb2RlICgwMDAwMDAwIHRoYXQgaXMgdGhlIGNv
ZGUgZm9yIHRoZQorICAgICAgICAjICAgZW5kLW9mLWJsb2NrKQorICAgICAgICAjIC0gMSBiaXQg
b2YgQkZJTkFMICgwKQorICAgICAgICAjIC0gMiBiaXRzIG9mIEJUWVBFIChubyBjb21wcmVzc2lv
bikKKyAgICAgICAgIyAtIDIgYml0cyBvZiBwYWRkaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ1x4YzFceDAzXHg2Mlx4MDBceDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYgdGVzdF9zZW5kX21lc3Nh
Z2VfZGVmbGF0ZShzZWxmKToKKyAgICAgICAgY29tcHJlc3MgPSB6bGliLmNvbXByZXNzb2JqKAor
ICAgICAgICAgICAgemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04sIHpsaWIuREVGTEFURUQsIC16
bGliLk1BWF9XQklUUykKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFt
ZXRlcigKKyAgICAgICAgICAgIGNvbW1vbi5QRVJNRVNTQUdFX0NPTVBSRVNTSU9OX0VYVEVOU0lP
TikKKyAgICAgICAgZXh0ZW5zaW9uLmFkZF9wYXJhbWV0ZXIoJ21ldGhvZCcsICdkZWZsYXRlJykK
KyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdF9mcm9tX3Jhd2RhdGEoCisgICAgICAg
ICAgICAgICAgICAgICAgJycsIHBlcm1lc3NhZ2VfY29tcHJlc3Npb25fcmVxdWVzdD1leHRlbnNp
b24pCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdIZWxsbycpCisgICAg
ICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdXb3JsZCcpCisKKyAgICAgICAgZXhw
ZWN0ZWQgPSAnJworCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gPSBjb21wcmVzcy5jb21wcmVz
cygnSGVsbG8nKQorICAgICAgICBjb21wcmVzc2VkX2hlbGxvICs9IGNvbXByZXNzLmZsdXNoKHps
aWIuWl9TWU5DX0ZMVVNIKQorICAgICAgICBjb21wcmVzc2VkX2hlbGxvID0gY29tcHJlc3NlZF9o
ZWxsb1s6LTRdCisgICAgICAgIGV4cGVjdGVkICs9ICdceGMxJWMnICUgbGVuKGNvbXByZXNzZWRf
aGVsbG8pCisgICAgICAgIGV4cGVjdGVkICs9IGNvbXByZXNzZWRfaGVsbG8KKworICAgICAgICBj
b21wcmVzc2VkX3dvcmxkID0gY29tcHJlc3MuY29tcHJlc3MoJ1dvcmxkJykKKyAgICAgICAgY29t
cHJlc3NlZF93b3JsZCArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAg
ICAgY29tcHJlc3NlZF93b3JsZCA9IGNvbXByZXNzZWRfd29ybGRbOi00XQorICAgICAgICBleHBl
Y3RlZCArPSAnXHhjMSVjJyAlIGxlbihjb21wcmVzc2VkX3dvcmxkKQorICAgICAgICBleHBlY3Rl
ZCArPSBjb21wcmVzc2VkX3dvcmxkCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3Rl
ZCwgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3Rfc2Vu
ZF9tZXNzYWdlX2RlZmxhdGVfZnJhZ21lbnRlZChzZWxmKToKKyAgICAgICAgY29tcHJlc3MgPSB6
bGliLmNvbXByZXNzb2JqKAorICAgICAgICAgICAgemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04s
IHpsaWIuREVGTEFURUQsIC16bGliLk1BWF9XQklUUykKKyAgICAgICAgZXh0ZW5zaW9uID0gY29t
bW9uLkV4dGVuc2lvblBhcmFtZXRlcigKKyAgICAgICAgICAgIGNvbW1vbi5QRVJNRVNTQUdFX0NP
TVBSRVNTSU9OX0VYVEVOU0lPTikKKyAgICAgICAgZXh0ZW5zaW9uLmFkZF9wYXJhbWV0ZXIoJ21l
dGhvZCcsICdkZWZsYXRlJykKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdF9mcm9t
X3Jhd2RhdGEoCisgICAgICAgICAgICAgICAgICAgICAgJycsIHBlcm1lc3NhZ2VfY29tcHJlc3Np
b25fcmVxdWVzdD1leHRlbnNpb24pCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVl
c3QsICdIZWxsbycsIGVuZD1GYWxzZSkKKyAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVx
dWVzdCwgJ1dvcmxkJywgZW5kPVRydWUpCisKKyAgICAgICAgZXhwZWN0ZWQgPSAnJworCisgICAg
ICAgICMgVGhlIGZpcnN0IGZyYW1lIHdpbGwgYmUgYW4gZW1wdHkgZnJhbWUgYW5kIEZJTj0wIGFu
ZCBSU1YxPTEuCisgICAgICAgIGV4cGVjdGVkICs9ICdceDQxXHgwMCcKKworICAgICAgICBjb21w
cmVzc2VkX21lc3NhZ2UgPSBjb21wcmVzcy5jb21wcmVzcygnSGVsbG9Xb3JsZCcpCisgICAgICAg
IGNvbXByZXNzZWRfbWVzc2FnZSArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkK
KyAgICAgICAgY29tcHJlc3NlZF9tZXNzYWdlID0gY29tcHJlc3NlZF9tZXNzYWdlWzotNF0KKyAg
ICAgICAgZXhwZWN0ZWQgKz0gJ1x4ODAlYycgJSBsZW4oY29tcHJlc3NlZF9tZXNzYWdlKQorICAg
ICAgICBleHBlY3RlZCArPSBjb21wcmVzc2VkX21lc3NhZ2UKKworICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGV4cGVjdGVkLCByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAg
ICBkZWYgdGVzdF9zZW5kX21lc3NhZ2VfZGVmbGF0ZV9mcmFnbWVudGVkX2JmaW5hbChzZWxmKToK
KyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcigKKyAgICAgICAg
ICAgIGNvbW1vbi5QRVJNRVNTQUdFX0NPTVBSRVNTSU9OX0VYVEVOU0lPTikKKyAgICAgICAgZXh0
ZW5zaW9uLmFkZF9wYXJhbWV0ZXIoJ21ldGhvZCcsICdkZWZsYXRlJykKKyAgICAgICAgcmVxdWVz
dCA9IF9jcmVhdGVfcmVxdWVzdF9mcm9tX3Jhd2RhdGEoCisgICAgICAgICAgICAgICAgICAgICAg
JycsIHBlcm1lc3NhZ2VfY29tcHJlc3Npb25fcmVxdWVzdD1leHRlbnNpb24pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKDEsIGxlbihyZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzKSkK
KyAgICAgICAgY29tcHJlc3Npb25fcHJvY2Vzc29yID0gKAorICAgICAgICAgICAgcmVxdWVzdC53
c19leHRlbnNpb25fcHJvY2Vzc29yc1swXS5nZXRfY29tcHJlc3Npb25fcHJvY2Vzc29yKCkpCisg
ICAgICAgIGNvbXByZXNzaW9uX3Byb2Nlc3Nvci5zZXRfYmZpbmFsKFRydWUpCisgICAgICAgIG1z
Z3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdIZWxsbycsIGVuZD1GYWxzZSkKKyAgICAgICAg
bXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJ1dvcmxkJywgZW5kPVRydWUpCisKKyAgICAg
ICAgZXhwZWN0ZWQgPSAnJworCisgICAgICAgIGNvbXByZXNzID0gemxpYi5jb21wcmVzc29iaigK
KyAgICAgICAgICAgIHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9OLCB6bGliLkRFRkxBVEVELCAt
emxpYi5NQVhfV0JJVFMpCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gPSBjb21wcmVzcy5jb21w
cmVzcygnSGVsbG8nKQorICAgICAgICBjb21wcmVzc2VkX2hlbGxvICs9IGNvbXByZXNzLmZsdXNo
KHpsaWIuWl9GSU5JU0gpCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gPSBjb21wcmVzc2VkX2hl
bGxvICsgY2hyKDApCisgICAgICAgIGV4cGVjdGVkICs9ICdceDQxJWMnICUgbGVuKGNvbXByZXNz
ZWRfaGVsbG8pCisgICAgICAgIGV4cGVjdGVkICs9IGNvbXByZXNzZWRfaGVsbG8KKworICAgICAg
ICBjb21wcmVzcyA9IHpsaWIuY29tcHJlc3NvYmooCisgICAgICAgICAgICB6bGliLlpfREVGQVVM
VF9DT01QUkVTU0lPTiwgemxpYi5ERUZMQVRFRCwgLXpsaWIuTUFYX1dCSVRTKQorICAgICAgICBj
b21wcmVzc2VkX3dvcmxkID0gY29tcHJlc3MuY29tcHJlc3MoJ1dvcmxkJykKKyAgICAgICAgY29t
cHJlc3NlZF93b3JsZCArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfRklOSVNIKQorICAgICAgICBj
b21wcmVzc2VkX3dvcmxkID0gY29tcHJlc3NlZF93b3JsZCArIGNocigwKQorICAgICAgICBleHBl
Y3RlZCArPSAnXHg4MCVjJyAlIGxlbihjb21wcmVzc2VkX3dvcmxkKQorICAgICAgICBleHBlY3Rl
ZCArPSBjb21wcmVzc2VkX3dvcmxkCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3Rl
ZCwgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3RfcmVj
ZWl2ZV9tZXNzYWdlX2RlZmxhdGUoc2VsZik6CisgICAgICAgIGNvbXByZXNzID0gemxpYi5jb21w
cmVzc29iaigKKyAgICAgICAgICAgIHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9OLCB6bGliLkRF
RkxBVEVELCAtemxpYi5NQVhfV0JJVFMpCisKKyAgICAgICAgZGF0YSA9ICcnCisKKyAgICAgICAg
Y29tcHJlc3NlZF9oZWxsbyA9IGNvbXByZXNzLmNvbXByZXNzKCdIZWxsb1dlYlNvY2tldCcpCisg
ICAgICAgIGNvbXByZXNzZWRfaGVsbG8gKz0gY29tcHJlc3MuZmx1c2goemxpYi5aX1NZTkNfRkxV
U0gpCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gPSBjb21wcmVzc2VkX2hlbGxvWzotNF0KKyAg
ICAgICAgc3BsaXRfcG9zaXRpb24gPSBsZW4oY29tcHJlc3NlZF9oZWxsbykgLyAyCisgICAgICAg
IGRhdGEgKz0gJ1x4NDElYycgJSAoc3BsaXRfcG9zaXRpb24gfCAweDgwKQorICAgICAgICBkYXRh
ICs9IF9tYXNrX2h5YmkoY29tcHJlc3NlZF9oZWxsb1s6c3BsaXRfcG9zaXRpb25dKQorCisgICAg
ICAgIGRhdGEgKz0gJ1x4ODAlYycgJSAoKGxlbihjb21wcmVzc2VkX2hlbGxvKSAtIHNwbGl0X3Bv
c2l0aW9uKSB8IDB4ODApCisgICAgICAgIGRhdGEgKz0gX21hc2tfaHliaShjb21wcmVzc2VkX2hl
bGxvW3NwbGl0X3Bvc2l0aW9uOl0pCisKKyAgICAgICAgY29tcHJlc3MgPSB6bGliLmNvbXByZXNz
b2JqKAorICAgICAgICAgICAgemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04sIHpsaWIuREVGTEFU
RUQsIC16bGliLk1BWF9XQklUUykKKworICAgICAgICBjb21wcmVzc2VkX3dvcmxkID0gY29tcHJl
c3MuY29tcHJlc3MoJ1dvcmxkJykKKyAgICAgICAgY29tcHJlc3NlZF93b3JsZCArPSBjb21wcmVz
cy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAgICAgY29tcHJlc3NlZF93b3JsZCA9IGNv
bXByZXNzZWRfd29ybGRbOi00XQorICAgICAgICBkYXRhICs9ICdceGMxJWMnICUgKGxlbihjb21w
cmVzc2VkX3dvcmxkKSB8IDB4ODApCisgICAgICAgIGRhdGEgKz0gX21hc2tfaHliaShjb21wcmVz
c2VkX3dvcmxkKQorCisgICAgICAgICMgQ2xvc2UgZnJhbWUKKyAgICAgICAgZGF0YSArPSAnXHg4
OFx4OGEnICsgX21hc2tfaHliaShzdHJ1Y3QucGFjaygnIUgnLCAxMDAwKSArICdHb29kIGJ5ZScp
CisKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcigKKyAgICAg
ICAgICAgIGNvbW1vbi5QRVJNRVNTQUdFX0NPTVBSRVNTSU9OX0VYVEVOU0lPTikKKyAgICAgICAg
ZXh0ZW5zaW9uLmFkZF9wYXJhbWV0ZXIoJ21ldGhvZCcsICdkZWZsYXRlJykKKyAgICAgICAgcmVx
dWVzdCA9IF9jcmVhdGVfcmVxdWVzdF9mcm9tX3Jhd2RhdGEoCisgICAgICAgICAgICBkYXRhLCBw
ZXJtZXNzYWdlX2NvbXByZXNzaW9uX3JlcXVlc3Q9ZXh0ZW5zaW9uKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdIZWxsb1dlYlNvY2tldCcsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVl
c3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdXb3JsZCcsIG1zZ3V0aWwucmVjZWl2ZV9t
ZXNzYWdlKHJlcXVlc3QpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgbXNndXRp
bC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX21lc3Nh
Z2VfZGVmbGF0ZV9yYW5kb21fc2VjdGlvbihzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGF0IGEg
Y29tcHJlc3NlZCBtZXNzYWdlIGZyYWdtZW50ZWQgaW50byBsb3RzIG9mIGNodW5rcyBpcworICAg
ICAgICBjb3JyZWN0bHkgcmVjZWl2ZWQuCisgICAgICAgICIiIgorCisgICAgICAgIHJhbmRvbS5z
ZWVkKGE9MCkKKyAgICAgICAgcGF5bG9hZCA9ICcnLmpvaW4oCisgICAgICAgICAgICBbY2hyKHJh
bmRvbS5yYW5kaW50KDAsIDI1NSkpIGZvciBpIGluIHhyYW5nZSgxMDAwKV0pCisKKyAgICAgICAg
Y29tcHJlc3MgPSB6bGliLmNvbXByZXNzb2JqKAorICAgICAgICAgICAgemxpYi5aX0RFRkFVTFRf
Q09NUFJFU1NJT04sIHpsaWIuREVGTEFURUQsIC16bGliLk1BWF9XQklUUykKKyAgICAgICAgY29t
cHJlc3NlZF9wYXlsb2FkID0gY29tcHJlc3MuY29tcHJlc3MocGF5bG9hZCkKKyAgICAgICAgY29t
cHJlc3NlZF9wYXlsb2FkICs9IGNvbXByZXNzLmZsdXNoKHpsaWIuWl9TWU5DX0ZMVVNIKQorICAg
ICAgICBjb21wcmVzc2VkX3BheWxvYWQgPSBjb21wcmVzc2VkX3BheWxvYWRbOi00XQorCisgICAg
ICAgICMgRnJhZ21lbnQgdGhlIGNvbXByZXNzZWQgcGF5bG9hZCBpbnRvIGxvdHMgb2YgZnJhbWVz
LgorICAgICAgICBieXRlc19jaHVua2VkID0gMAorICAgICAgICBkYXRhID0gJycKKyAgICAgICAg
ZnJhbWVfY291bnQgPSAwCisKKyAgICAgICAgY2h1bmtfc2l6ZXMgPSBbXQorCisgICAgICAgIHdo
aWxlIGJ5dGVzX2NodW5rZWQgPCBsZW4oY29tcHJlc3NlZF9wYXlsb2FkKToKKyAgICAgICAgICAg
ICMgTWFrZSBzdXJlIHRoYXQKKyAgICAgICAgICAgICMgLSB0aGUgbGVuZ3RoIG9mIGNodW5rcyBh
cmUgZXF1YWwgb3IgbGVzcyB0aGFuIDEyNSBzbyB0aGF0IHdlIGNhbgorICAgICAgICAgICAgIyAg
IHVzZSAxIG9jdGV0IGxlbmd0aCBoZWFkZXIgZm9ybWF0IGZvciBhbGwgZnJhbWVzLgorICAgICAg
ICAgICAgIyAtIGF0IGxlYXN0IDEwIGNodW5rcyBhcmUgY3JlYXRlZC4KKyAgICAgICAgICAgIGNo
dW5rX3NpemUgPSByYW5kb20ucmFuZGludCgKKyAgICAgICAgICAgICAgICAxLCBtaW4oMTI1LAor
ICAgICAgICAgICAgICAgICAgICAgICBsZW4oY29tcHJlc3NlZF9wYXlsb2FkKSAvIDEwLAorICAg
ICAgICAgICAgICAgICAgICAgICBsZW4oY29tcHJlc3NlZF9wYXlsb2FkKSAtIGJ5dGVzX2NodW5r
ZWQpKQorICAgICAgICAgICAgY2h1bmtfc2l6ZXMuYXBwZW5kKGNodW5rX3NpemUpCisgICAgICAg
ICAgICBjaHVuayA9IGNvbXByZXNzZWRfcGF5bG9hZFsKKyAgICAgICAgICAgICAgICBieXRlc19j
aHVua2VkOmJ5dGVzX2NodW5rZWQgKyBjaHVua19zaXplXQorICAgICAgICAgICAgYnl0ZXNfY2h1
bmtlZCArPSBjaHVua19zaXplCisKKyAgICAgICAgICAgIGZpcnN0X29jdGV0ID0gMHgwMAorICAg
ICAgICAgICAgaWYgbGVuKGRhdGEpID09IDA6CisgICAgICAgICAgICAgICAgZmlyc3Rfb2N0ZXQg
PSBmaXJzdF9vY3RldCB8IDB4NDIKKyAgICAgICAgICAgIGlmIGJ5dGVzX2NodW5rZWQgPT0gbGVu
KGNvbXByZXNzZWRfcGF5bG9hZCk6CisgICAgICAgICAgICAgICAgZmlyc3Rfb2N0ZXQgPSBmaXJz
dF9vY3RldCB8IDB4ODAKKworICAgICAgICAgICAgZGF0YSArPSAnJWMlYycgJSAoZmlyc3Rfb2N0
ZXQsIGNodW5rX3NpemUgfCAweDgwKQorICAgICAgICAgICAgZGF0YSArPSBfbWFza19oeWJpKGNo
dW5rKQorCisgICAgICAgICAgICBmcmFtZV9jb3VudCArPSAxCisKKyAgICAgICAgcHJpbnQgIkNo
dW5rIHNpemVzOiAlciIgJSBjaHVua19zaXplcworICAgICAgICBzZWxmLmFzc2VydFRydWUobGVu
KGNodW5rX3NpemVzKSA+IDEwKQorCisgICAgICAgICMgQ2xvc2UgZnJhbWUKKyAgICAgICAgZGF0
YSArPSAnXHg4OFx4OGEnICsgX21hc2tfaHliaShzdHJ1Y3QucGFjaygnIUgnLCAxMDAwKSArICdH
b29kIGJ5ZScpCisKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRl
cigKKyAgICAgICAgICAgIGNvbW1vbi5QRVJNRVNTQUdFX0NPTVBSRVNTSU9OX0VYVEVOU0lPTikK
KyAgICAgICAgZXh0ZW5zaW9uLmFkZF9wYXJhbWV0ZXIoJ21ldGhvZCcsICdkZWZsYXRlJykKKyAg
ICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdF9mcm9tX3Jhd2RhdGEoCisgICAgICAgICAg
ICBkYXRhLCBwZXJtZXNzYWdlX2NvbXByZXNzaW9uX3JlcXVlc3Q9ZXh0ZW5zaW9uKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHBheWxvYWQsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVl
c3QpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgbXNndXRpbC5yZWNlaXZlX21l
c3NhZ2UocmVxdWVzdCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX21lc3NhZ2VfZGVmbGF0ZV9t
aXhlZF9idHlwZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGF0IGEgbWVzc2FnZSBjb21wcmVz
c2VkIHVzaW5nIGxvdHMgb2YgREVGTEFURSBibG9ja3Mgd2l0aAorICAgICAgICB2YXJpb3VzIGZs
dXNoIG1vZGUgaXMgY29ycmVjdGx5IHJlY2VpdmVkLgorICAgICAgICAiIiIKKworICAgICAgICBy
YW5kb20uc2VlZChhPTApCisgICAgICAgIHBheWxvYWQgPSAnJy5qb2luKAorICAgICAgICAgICAg
W2NocihyYW5kb20ucmFuZGludCgwLCAyNTUpKSBmb3IgaSBpbiB4cmFuZ2UoMTAwMCldKQorCisg
ICAgICAgIGNvbXByZXNzID0gTm9uZQorCisgICAgICAgICMgRnJhZ21lbnQgdGhlIGNvbXByZXNz
ZWQgcGF5bG9hZCBpbnRvIGxvdHMgb2YgZnJhbWVzLgorICAgICAgICBieXRlc19jaHVua2VkID0g
MAorICAgICAgICBjb21wcmVzc2VkX3BheWxvYWQgPSAnJworCisgICAgICAgIGNodW5rX3NpemVz
ID0gW10KKyAgICAgICAgbWV0aG9kcyA9IFtdCisgICAgICAgIHN5bmNfdXNlZCA9IEZhbHNlCisg
ICAgICAgIGZpbmlzaF91c2VkID0gRmFsc2UKKworICAgICAgICB3aGlsZSBieXRlc19jaHVua2Vk
IDwgbGVuKHBheWxvYWQpOgorICAgICAgICAgICAgIyBNYWtlIHN1cmUgYXQgbGVhc3QgMTAgY2h1
bmtzIGFyZSBjcmVhdGVkLgorICAgICAgICAgICAgY2h1bmtfc2l6ZSA9IHJhbmRvbS5yYW5kaW50
KAorICAgICAgICAgICAgICAgIDEsIG1pbigxMDAsIGxlbihwYXlsb2FkKSAtIGJ5dGVzX2NodW5r
ZWQpKQorICAgICAgICAgICAgY2h1bmtfc2l6ZXMuYXBwZW5kKGNodW5rX3NpemUpCisgICAgICAg
ICAgICBjaHVuayA9IHBheWxvYWRbYnl0ZXNfY2h1bmtlZDpieXRlc19jaHVua2VkICsgY2h1bmtf
c2l6ZV0KKworICAgICAgICAgICAgYnl0ZXNfY2h1bmtlZCArPSBjaHVua19zaXplCisKKyAgICAg
ICAgICAgIGlmIGNvbXByZXNzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29tcHJlc3MgPSB6
bGliLmNvbXByZXNzb2JqKAorICAgICAgICAgICAgICAgICAgICB6bGliLlpfREVGQVVMVF9DT01Q
UkVTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgemxpYi5ERUZMQVRFRCwKKyAgICAgICAgICAg
ICAgICAgICAgLXpsaWIuTUFYX1dCSVRTKQorCisgICAgICAgICAgICBpZiBieXRlc19jaHVua2Vk
ID09IGxlbihwYXlsb2FkKToKKyAgICAgICAgICAgICAgICBjb21wcmVzc2VkX3BheWxvYWQgKz0g
Y29tcHJlc3MuY29tcHJlc3MoY2h1bmspCisgICAgICAgICAgICAgICAgY29tcHJlc3NlZF9wYXls
b2FkICs9IGNvbXByZXNzLmZsdXNoKHpsaWIuWl9TWU5DX0ZMVVNIKQorICAgICAgICAgICAgICAg
IGNvbXByZXNzZWRfcGF5bG9hZCA9IGNvbXByZXNzZWRfcGF5bG9hZFs6LTRdCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IHJhbmRvbS5yYW5kaW50KDAsIDEpCisg
ICAgICAgICAgICAgICAgbWV0aG9kcy5hcHBlbmQobWV0aG9kKQorICAgICAgICAgICAgICAgIGlm
IG1ldGhvZCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2VkX3BheWxvYWQgKz0g
Y29tcHJlc3MuY29tcHJlc3MoY2h1bmspCisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWRf
cGF5bG9hZCArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAgICAgICAg
ICAgICAgICAgc3luY191c2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgICAgIGNvbXByZXNzZWRfcGF5bG9hZCArPSBjb21wcmVzcy5jb21wcmVzcyhjaHVu
aykKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZF9wYXlsb2FkICs9IGNvbXByZXNzLmZs
dXNoKHpsaWIuWl9GSU5JU0gpCisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzID0gTm9uZQor
ICAgICAgICAgICAgICAgICAgICBmaW5pc2hfdXNlZCA9IFRydWUKKworICAgICAgICBwcmludCAi
Q2h1bmsgc2l6ZXM6ICVyIiAlIGNodW5rX3NpemVzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShs
ZW4oY2h1bmtfc2l6ZXMpID4gMTApCisgICAgICAgIHByaW50ICJNZXRob2RzOiAlciIgJSBtZXRo
b2RzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeW5jX3VzZWQpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShmaW5pc2hfdXNlZCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoMTI1IDwgbGVu
KGNvbXByZXNzZWRfcGF5bG9hZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oY29tcHJl
c3NlZF9wYXlsb2FkKSA8IDY1NTM2KQorICAgICAgICBkYXRhID0gJ1x4YzJceGZlJyArIHN0cnVj
dC5wYWNrKCchSCcsIGxlbihjb21wcmVzc2VkX3BheWxvYWQpKQorICAgICAgICBkYXRhICs9IF9t
YXNrX2h5YmkoY29tcHJlc3NlZF9wYXlsb2FkKQorCisgICAgICAgICMgQ2xvc2UgZnJhbWUKKyAg
ICAgICAgZGF0YSArPSAnXHg4OFx4OGEnICsgX21hc2tfaHliaShzdHJ1Y3QucGFjaygnIUgnLCAx
MDAwKSArICdHb29kIGJ5ZScpCisKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lv
blBhcmFtZXRlcigKKyAgICAgICAgICAgIGNvbW1vbi5QRVJNRVNTQUdFX0NPTVBSRVNTSU9OX0VY
VEVOU0lPTikKKyAgICAgICAgZXh0ZW5zaW9uLmFkZF9wYXJhbWV0ZXIoJ21ldGhvZCcsICdkZWZs
YXRlJykKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdF9mcm9tX3Jhd2RhdGEoCisg
ICAgICAgICAgICBkYXRhLCBwZXJtZXNzYWdlX2NvbXByZXNzaW9uX3JlcXVlc3Q9ZXh0ZW5zaW9u
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBheWxvYWQsIG1zZ3V0aWwucmVjZWl2ZV9tZXNz
YWdlKHJlcXVlc3QpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgbXNndXRpbC5y
ZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKworY2xhc3MgUGVyRnJhbWVDb21wcmVzc1Rlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciBjaGVja2luZyBwZXJmcmFtZS1j
b21wcmVzc2lvbiBleHRlbnNpb24uIiIiCisKKyAgICBkZWYgdGVzdF9zZW5kX21lc3NhZ2VfZGVm
bGF0ZShzZWxmKToKKyAgICAgICAgY29tcHJlc3MgPSB6bGliLmNvbXByZXNzb2JqKAorICAgICAg
ICAgICAgemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04sIHpsaWIuREVGTEFURUQsIC16bGliLk1B
WF9XQklUUykKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcigK
KyAgICAgICAgICAgIGNvbW1vbi5QRVJGUkFNRV9DT01QUkVTU0lPTl9FWFRFTlNJT04pCisgICAg
ICAgIGV4dGVuc2lvbi5hZGRfcGFyYW1ldGVyKCdtZXRob2QnLCAnZGVmbGF0ZScpCisgICAgICAg
IHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3RfZnJvbV9yYXdkYXRhKAorICAgICAgICAgICAgICAg
ICAgICAgICcnLCBwZXJmcmFtZV9jb21wcmVzc2lvbl9yZXF1ZXN0PWV4dGVuc2lvbikKKyAgICAg
ICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJ0hlbGxvJykKKyAgICAgICAgbXNndXRp
bC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJ1dvcmxkJykKKworICAgICAgICBleHBlY3RlZCA9ICcn
CisKKyAgICAgICAgY29tcHJlc3NlZF9oZWxsbyA9IGNvbXByZXNzLmNvbXByZXNzKCdIZWxsbycp
CisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gKz0gY29tcHJlc3MuZmx1c2goemxpYi5aX1NZTkNf
RkxVU0gpCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gPSBjb21wcmVzc2VkX2hlbGxvWzotNF0K
KyAgICAgICAgZXhwZWN0ZWQgKz0gJ1x4YzElYycgJSBsZW4oY29tcHJlc3NlZF9oZWxsbykKKyAg
ICAgICAgZXhwZWN0ZWQgKz0gY29tcHJlc3NlZF9oZWxsbworCisgICAgICAgIGNvbXByZXNzZWRf
d29ybGQgPSBjb21wcmVzcy5jb21wcmVzcygnV29ybGQnKQorICAgICAgICBjb21wcmVzc2VkX3dv
cmxkICs9IGNvbXByZXNzLmZsdXNoKHpsaWIuWl9TWU5DX0ZMVVNIKQorICAgICAgICBjb21wcmVz
c2VkX3dvcmxkID0gY29tcHJlc3NlZF93b3JsZFs6LTRdCisgICAgICAgIGV4cGVjdGVkICs9ICdc
eGMxJWMnICUgbGVuKGNvbXByZXNzZWRfd29ybGQpCisgICAgICAgIGV4cGVjdGVkICs9IGNvbXBy
ZXNzZWRfd29ybGQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXF1ZXN0
LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX21lc3Nh
Z2VfdmFyaW91c19idHlwZShzZWxmKToKKyAgICAgICAgY29tcHJlc3MgPSB6bGliLmNvbXByZXNz
b2JqKAorICAgICAgICAgICAgemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04sIHpsaWIuREVGTEFU
RUQsIC16bGliLk1BWF9XQklUUykKKworICAgICAgICBkYXRhID0gJycKKworICAgICAgICBjb21w
cmVzc2VkX2hlbGxvID0gY29tcHJlc3MuY29tcHJlc3MoJ0hlbGxvJykKKyAgICAgICAgY29tcHJl
c3NlZF9oZWxsbyArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAgICAg
Y29tcHJlc3NlZF9oZWxsbyA9IGNvbXByZXNzZWRfaGVsbG9bOi00XQorICAgICAgICBkYXRhICs9
ICdceGMxJWMnICUgKGxlbihjb21wcmVzc2VkX2hlbGxvKSB8IDB4ODApCisgICAgICAgIGRhdGEg
Kz0gX21hc2tfaHliaShjb21wcmVzc2VkX2hlbGxvKQorCisgICAgICAgIGNvbXByZXNzZWRfd2Vi
c29ja2V0ID0gY29tcHJlc3MuY29tcHJlc3MoJ1dlYlNvY2tldCcpCisgICAgICAgIGNvbXByZXNz
ZWRfd2Vic29ja2V0ICs9IGNvbXByZXNzLmZsdXNoKHpsaWIuWl9GSU5JU0gpCisgICAgICAgIGNv
bXByZXNzZWRfd2Vic29ja2V0ICs9ICdceDAwJworICAgICAgICBkYXRhICs9ICdceGMxJWMnICUg
KGxlbihjb21wcmVzc2VkX3dlYnNvY2tldCkgfCAweDgwKQorICAgICAgICBkYXRhICs9IF9tYXNr
X2h5YmkoY29tcHJlc3NlZF93ZWJzb2NrZXQpCisKKyAgICAgICAgY29tcHJlc3MgPSB6bGliLmNv
bXByZXNzb2JqKAorICAgICAgICAgICAgemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04sIHpsaWIu
REVGTEFURUQsIC16bGliLk1BWF9XQklUUykKKworICAgICAgICBjb21wcmVzc2VkX3dvcmxkID0g
Y29tcHJlc3MuY29tcHJlc3MoJ1dvcmxkJykKKyAgICAgICAgY29tcHJlc3NlZF93b3JsZCArPSBj
b21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAgICAgY29tcHJlc3NlZF93b3Js
ZCA9IGNvbXByZXNzZWRfd29ybGRbOi00XQorICAgICAgICBkYXRhICs9ICdceGMxJWMnICUgKGxl
bihjb21wcmVzc2VkX3dvcmxkKSB8IDB4ODApCisgICAgICAgIGRhdGEgKz0gX21hc2tfaHliaShj
b21wcmVzc2VkX3dvcmxkKQorCisgICAgICAgICMgQ2xvc2UgZnJhbWUKKyAgICAgICAgZGF0YSAr
PSAnXHg4OFx4OGEnICsgX21hc2tfaHliaShzdHJ1Y3QucGFjaygnIUgnLCAxMDAwKSArICdHb29k
IGJ5ZScpCisKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcigK
KyAgICAgICAgICAgIGNvbW1vbi5QRVJGUkFNRV9DT01QUkVTU0lPTl9FWFRFTlNJT04pCisgICAg
ICAgIGV4dGVuc2lvbi5hZGRfcGFyYW1ldGVyKCdtZXRob2QnLCAnZGVmbGF0ZScpCisgICAgICAg
IHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3RfZnJvbV9yYXdkYXRhKAorICAgICAgICAgICAgZGF0
YSwgcGVyZnJhbWVfY29tcHJlc3Npb25fcmVxdWVzdD1leHRlbnNpb24pCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ0hlbGxvJywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1dlYlNvY2tldCcsIG1zZ3V0aWwucmVjZWl2ZV9tZXNz
YWdlKHJlcXVlc3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdXb3JsZCcsIG1zZ3V0aWwu
cmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9u
ZSwgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKworY2xhc3MgTWVzc2FnZVRl
c3RIaXhpZTc1KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgZHJhZnQtaGl4
aWUtdGhld2Vic29ja2V0cHJvdG9jb2wtNzYgc3RyZWFtIGNsYXNzLiIiIgorCisgICAgZGVmIHRl
c3Rfc2VuZF9tZXNzYWdlKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0
X2hpeGllNzUoKQorICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCAnSGVsbG8n
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwSGVsbG9ceGZmJywgcmVxdWVzdC5jb25u
ZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3Rfc2VuZF9tZXNzYWdlX3VuaWNv
ZGUoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3RfaGl4aWU3NSgpCisg
ICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsIHUnXHU2NWU1JykKKyAgICAgICAg
IyBVKzY1ZTUgaXMgZW5jb2RlZCBhcyBlNiw5NyxhNSBpbiBVVEYtOAorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdceDAwXHhlNlx4OTdceGE1XHhmZicsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3RfcmVj
ZWl2ZV9tZXNzYWdlKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0X2hp
eGllNzUoJ1x4MDBIZWxsb1x4ZmZceDAwV29ybGQhXHhmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ0hlbGxvJywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ1dvcmxkIScsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVl
c3QpKQorCisgICAgZGVmIHRlc3RfcmVjZWl2ZV9tZXNzYWdlX3VuaWNvZGUoc2VsZik6CisgICAg
ICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3RfaGl4aWU3NSgnXHgwMFx4ZTZceDljXHhhY1x4
ZmYnKQorICAgICAgICAjIFUrNjcyYyBpcyBlbmNvZGVkIGFzIGU2LDljLGFjIGluIFVURi04Cisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcdTY3MmMnLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2Fn
ZShyZXF1ZXN0KSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfbWVzc2FnZV9lcnJvbmVvdXNfdW5p
Y29kZShzZWxmKToKKyAgICAgICAgIyBceDgwIGFuZCBceDgxIGFyZSBpbnZhbGlkIGFzIFVURi04
LgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0X2hpeGllNzUoJ1x4MDBceDgwXHg4
MVx4ZmYnKQorICAgICAgICAjIEludmFsaWQgY2hhcmFjdGVycyBzaG91bGQgYmUgcmVwbGFjZWQg
d2l0aAorICAgICAgICAjIFUrZmZmZCBSRVBMQUNFTUVOVCBDSEFSQUNURVIKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCh1J1x1ZmZmZFx1ZmZmZCcsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJl
cXVlc3QpKQorCisgICAgZGVmIHRlc3RfcmVjZWl2ZV9tZXNzYWdlX2Rpc2NhcmQoc2VsZik6Cisg
ICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3RfaGl4aWU3NSgnXHg4MFx4MDZJR05PUkVc
eDAwSGVsbG9ceGZmJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J1x4MDFESVNSRUdBUkRceGZmXHgwMFdvcmxkIVx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdIZWxsbycsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCdXb3JsZCEnLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0
KSkKKworCitjbGFzcyBNZXNzYWdlUmVjZWl2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAg
ICAiIiJUZXN0cyB0aGUgU3RyZWFtIGNsYXNzIHVzaW5nIE1lc3NhZ2VSZWNlaXZlci4iIiIKKwor
ICAgIGRlZiB0ZXN0X3F1ZXVlKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9ibG9j
a2luZ19yZXF1ZXN0KCkKKyAgICAgICAgcmVjZWl2ZXIgPSBtc2d1dGlsLk1lc3NhZ2VSZWNlaXZl
cihyZXF1ZXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcmVjZWl2ZXIucmVj
ZWl2ZV9ub3dhaXQoKSkKKworICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKCdc
eDgxXHg4NicgKyBfbWFza19oeWJpKCdIZWxsbyEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnSGVsbG8hJywgcmVjZWl2ZXIucmVjZWl2ZSgpKQorCisgICAgZGVmIHRlc3Rfb25tZXNzYWdl
KHNlbGYpOgorICAgICAgICBvbm1lc3NhZ2VfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisKKyAgICAg
ICAgZGVmIG9ubWVzc2FnZV9oYW5kbGVyKG1lc3NhZ2UpOgorICAgICAgICAgICAgb25tZXNzYWdl
X3F1ZXVlLnB1dChtZXNzYWdlKQorCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX2Jsb2NraW5n
X3JlcXVlc3QoKQorICAgICAgICByZWNlaXZlciA9IG1zZ3V0aWwuTWVzc2FnZVJlY2VpdmVyKHJl
cXVlc3QsIG9ubWVzc2FnZV9oYW5kbGVyKQorCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5w
dXRfYnl0ZXMoJ1x4ODFceDg2JyArIF9tYXNrX2h5YmkoJ0hlbGxvIScpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdIZWxsbyEnLCBvbm1lc3NhZ2VfcXVldWUuZ2V0KCkpCisKKworY2xhc3Mg
TWVzc2FnZVJlY2VpdmVySGl4aWU3NVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRl
c3RzIHRoZSBTdHJlYW1IaXhpZTc1IGNsYXNzIHVzaW5nIE1lc3NhZ2VSZWNlaXZlci4iIiIKKwor
ICAgIGRlZiB0ZXN0X3F1ZXVlKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9ibG9j
a2luZ19yZXF1ZXN0X2hpeGllNzUoKQorICAgICAgICByZWNlaXZlciA9IG1zZ3V0aWwuTWVzc2Fn
ZVJlY2VpdmVyKHJlcXVlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCByZWNl
aXZlci5yZWNlaXZlX25vd2FpdCgpKQorCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRf
Ynl0ZXMoJ1x4MDBIZWxsbyFceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVsbG8h
JywgcmVjZWl2ZXIucmVjZWl2ZSgpKQorCisgICAgZGVmIHRlc3Rfb25tZXNzYWdlKHNlbGYpOgor
ICAgICAgICBvbm1lc3NhZ2VfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisKKyAgICAgICAgZGVmIG9u
bWVzc2FnZV9oYW5kbGVyKG1lc3NhZ2UpOgorICAgICAgICAgICAgb25tZXNzYWdlX3F1ZXVlLnB1
dChtZXNzYWdlKQorCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX2Jsb2NraW5nX3JlcXVlc3Rf
aGl4aWU3NSgpCisgICAgICAgIHJlY2VpdmVyID0gbXNndXRpbC5NZXNzYWdlUmVjZWl2ZXIocmVx
dWVzdCwgb25tZXNzYWdlX2hhbmRsZXIpCisKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1
dF9ieXRlcygnXHgwMEhlbGxvIVx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWxs
byEnLCBvbm1lc3NhZ2VfcXVldWUuZ2V0KCkpCisKKworY2xhc3MgTWVzc2FnZVNlbmRlclRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBTdHJlYW0gY2xhc3MgdXNpbmcg
TWVzc2FnZVNlbmRlci4iIiIKKworICAgIGRlZiB0ZXN0X3NlbmQoc2VsZik6CisgICAgICAgIHJl
cXVlc3QgPSBfY3JlYXRlX2Jsb2NraW5nX3JlcXVlc3QoKQorICAgICAgICBzZW5kZXIgPSBtc2d1
dGlsLk1lc3NhZ2VTZW5kZXIocmVxdWVzdCkKKworICAgICAgICBzZW5kZXIuc2VuZCgnV29ybGQn
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDgxXHgwNVdvcmxkJywgcmVxdWVzdC5jb25u
ZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3Rfc2VuZF9ub3dhaXQoc2VsZik6
CisgICAgICAgICMgVXNlIGEgcXVldWUgdG8gY2hlY2sgdGhlIGJ5dGVzIHdyaXR0ZW4gYnkgTWVz
c2FnZVNlbmRlci4KKyAgICAgICAgIyByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkg
Y2Fubm90IGJlIHVzZWQgaGVyZSBiZWNhdXNlCisgICAgICAgICMgTWVzc2FnZVNlbmRlciBydW5z
IGluIGEgc2VwYXJhdGUgdGhyZWFkLgorICAgICAgICBzZW5kX3F1ZXVlID0gUXVldWUuUXVldWUo
KQorCisgICAgICAgIGRlZiB3cml0ZShieXRlcyk6CisgICAgICAgICAgICBzZW5kX3F1ZXVlLnB1
dChieXRlcykKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9ibG9ja2luZ19yZXF1ZXN0KCkK
KyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlID0gd3JpdGUKKworICAgICAgICBzZW5k
ZXIgPSBtc2d1dGlsLk1lc3NhZ2VTZW5kZXIocmVxdWVzdCkKKworICAgICAgICBzZW5kZXIuc2Vu
ZF9ub3dhaXQoJ0hlbGxvJykKKyAgICAgICAgc2VuZGVyLnNlbmRfbm93YWl0KCdXb3JsZCcpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ODFceDA1SGVsbG8nLCBzZW5kX3F1ZXVlLmdldCgp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDgxXHgwNVdvcmxkJywgc2VuZF9xdWV1ZS5n
ZXQoKSkKKworCitjbGFzcyBNZXNzYWdlU2VuZGVySGl4aWU3NVRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgorICAgICIiIlRlc3RzIHRoZSBTdHJlYW1IaXhpZTc1IGNsYXNzIHVzaW5nIE1lc3NhZ2VT
ZW5kZXIuIiIiCisKKyAgICBkZWYgdGVzdF9zZW5kKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0g
X2NyZWF0ZV9ibG9ja2luZ19yZXF1ZXN0X2hpeGllNzUoKQorICAgICAgICBzZW5kZXIgPSBtc2d1
dGlsLk1lc3NhZ2VTZW5kZXIocmVxdWVzdCkKKworICAgICAgICBzZW5kZXIuc2VuZCgnV29ybGQn
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwV29ybGRceGZmJywgcmVxdWVzdC5jb25u
ZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3Rfc2VuZF9ub3dhaXQoc2VsZik6
CisgICAgICAgICMgVXNlIGEgcXVldWUgdG8gY2hlY2sgdGhlIGJ5dGVzIHdyaXR0ZW4gYnkgTWVz
c2FnZVNlbmRlci4KKyAgICAgICAgIyByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkg
Y2Fubm90IGJlIHVzZWQgaGVyZSBiZWNhdXNlCisgICAgICAgICMgTWVzc2FnZVNlbmRlciBydW5z
IGluIGEgc2VwYXJhdGUgdGhyZWFkLgorICAgICAgICBzZW5kX3F1ZXVlID0gUXVldWUuUXVldWUo
KQorCisgICAgICAgIGRlZiB3cml0ZShieXRlcyk6CisgICAgICAgICAgICBzZW5kX3F1ZXVlLnB1
dChieXRlcykKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9ibG9ja2luZ19yZXF1ZXN0X2hp
eGllNzUoKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUgPSB3cml0ZQorCisgICAg
ICAgIHNlbmRlciA9IG1zZ3V0aWwuTWVzc2FnZVNlbmRlcihyZXF1ZXN0KQorCisgICAgICAgIHNl
bmRlci5zZW5kX25vd2FpdCgnSGVsbG8nKQorICAgICAgICBzZW5kZXIuc2VuZF9ub3dhaXQoJ1dv
cmxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMEhlbGxvXHhmZicsIHNlbmRfcXVl
dWUuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBXb3JsZFx4ZmYnLCBzZW5k
X3F1ZXVlLmdldCgpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRl
c3QubWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rl
c3QvdGVzdF9tdXgucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2Vy
dmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdF9tdXgucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ1
OTg5NDRlMDg3Y2JkMmMyYjJjZTJhNGIwODlhYWZkN2EzMzRjMgotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNv
Y2tldC9zcmMvdGVzdC90ZXN0X211eC5weQpAQCAtMCwwICsxLDIwODkgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAxMiwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisj
IGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiVGVzdHMgZm9yIG11eCBtb2R1
bGUuIiIiCisKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IGNvcHkKK2ltcG9ydCBsb2dnaW5nCitpbXBv
cnQgb3B0cGFyc2UKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAor
aW1wb3J0IHRpbWUKK2ltcG9ydCB6bGliCisKK2ltcG9ydCBzZXRfc3lzX3BhdGggICMgVXBkYXRl
IHN5cy5wYXRoIHRvIGxvY2F0ZSBtb2RfcHl3ZWJzb2NrZXQgbW9kdWxlLgorCitmcm9tIG1vZF9w
eXdlYnNvY2tldCBpbXBvcnQgY29tbW9uCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbXV4
Citmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IENvbm5lY3Rpb25UZXJt
aW5hdGVkRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0
IFVuc3VwcG9ydGVkRnJhbWVFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1f
aHliaSBpbXBvcnQgRnJhbWUKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1faHliaSBpbXBv
cnQgU3RyZWFtCitmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2h5YmkgaW1wb3J0IFN0cmVh
bU9wdGlvbnMKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1faHliaSBpbXBvcnQgY3JlYXRl
X2JpbmFyeV9mcmFtZQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9oeWJpIGltcG9ydCBj
cmVhdGVfY2xvc2VfZnJhbWUKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1faHliaSBpbXBv
cnQgY3JlYXRlX2Nsb3NpbmdfaGFuZHNoYWtlX2JvZHkKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9z
dHJlYW1faHliaSBpbXBvcnQgcGFyc2VfZnJhbWUKK2Zyb20gbW9kX3B5d2Vic29ja2V0LmV4dGVu
c2lvbnMgaW1wb3J0IE11eEV4dGVuc2lvblByb2Nlc3NvcgorCisKK2ltcG9ydCBtb2NrCisKKwor
X1RFU1RfSEVBREVSUyA9IHsnSG9zdCc6ICdzZXJ2ZXIuZXhhbXBsZS5jb20nLAorICAgICAgICAg
ICAgICAgICAnVXBncmFkZSc6ICd3ZWJzb2NrZXQnLAorICAgICAgICAgICAgICAgICAnQ29ubmVj
dGlvbic6ICdVcGdyYWRlJywKKyAgICAgICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5Jzog
J2RHaGxJSE5oYlhCc1pTQnViMjVqWlE9PScsCisgICAgICAgICAgICAgICAgICdTZWMtV2ViU29j
a2V0LVZlcnNpb24nOiAnMTMnLAorICAgICAgICAgICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9l
eGFtcGxlLmNvbSd9CisKKworY2xhc3MgX091dGdvaW5nQ2hhbm5lbERhdGEob2JqZWN0KToKKyAg
ICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubWVzc2FnZXMgPSBbXQorICAgICAg
ICBzZWxmLmNvbnRyb2xfbWVzc2FnZXMgPSBbXQorCisgICAgICAgIHNlbGYuYnVpbGRlciA9IG11
eC5fSW5uZXJNZXNzYWdlQnVpbGRlcigpCisKK2NsYXNzIF9Nb2NrTXV4Q29ubmVjdGlvbihtb2Nr
Lk1vY2tCbG9ja2luZ0Nvbm4pOgorICAgICIiIk1vY2sgY2xhc3Mgb2YgbW9kX3B5dGhvbiBjb25u
ZWN0aW9uIGZvciBtdXguIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIG1v
Y2suTW9ja0Jsb2NraW5nQ29ubi5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9jb250cm9s
X2Jsb2NrcyA9IFtdCisgICAgICAgIHNlbGYuX2NoYW5uZWxfZGF0YSA9IHt9CisKKyAgICAgICAg
c2VsZi5fY3VycmVudF9vcGNvZGUgPSBOb25lCisgICAgICAgIHNlbGYuX3BlbmRpbmdfZnJhZ21l
bnRzID0gW10KKworICAgICAgICBzZWxmLnNlcnZlcl9jbG9zZV9jb2RlID0gTm9uZQorCisgICAg
ZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJPdmVycmlkZSBNb2NrQmxvY2tpbmdD
b25uLndyaXRlLiIiIgorCisgICAgICAgIHNlbGYuX2N1cnJlbnRfZGF0YSA9IGRhdGEKKyAgICAg
ICAgc2VsZi5fcG9zaXRpb24gPSAwCisKKyAgICAgICAgZGVmIF9yZWNlaXZlX2J5dGVzKGxlbmd0
aCk6CisgICAgICAgICAgICBpZiBzZWxmLl9wb3NpdGlvbiArIGxlbmd0aCA+IGxlbihzZWxmLl9j
dXJyZW50X2RhdGEpOgorICAgICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25UZXJtaW5hdGVk
RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHJlY2VpdmUgJWQgYnl0
ZXMgZnJvbSBlbmNhcHN1bGF0ZWQgJworICAgICAgICAgICAgICAgICAgICAnZnJhbWUnICUgbGVu
Z3RoKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2N1cnJlbnRfZGF0YVtzZWxmLl9wb3NpdGlv
bjpzZWxmLl9wb3NpdGlvbitsZW5ndGhdCisgICAgICAgICAgICBzZWxmLl9wb3NpdGlvbiArPSBs
ZW5ndGgKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisKKyAgICAgICAgIyBQYXJzZSBwaHlzaWNh
bCBmcmFtZXMgYW5kIGFzc2VtYmxlIGEgbWVzc2FnZSBpZiB0aGUgbWVzc2FnZSBpcworICAgICAg
ICAjIGZyYWdtZW50ZWQuCisgICAgICAgIG9wY29kZSwgcGF5bG9hZCwgZmluLCByc3YxLCByc3Yy
LCByc3YzID0gKAorICAgICAgICAgICAgcGFyc2VfZnJhbWUoX3JlY2VpdmVfYnl0ZXMsIHVubWFz
a19yZWNlaXZlPUZhbHNlKSkKKworICAgICAgICBzZWxmLl9wZW5kaW5nX2ZyYWdtZW50cy5hcHBl
bmQocGF5bG9hZCkKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50X29wY29kZSBpcyBOb25lOgor
ICAgICAgICAgICAgaWYgb3Bjb2RlID09IGNvbW1vbi5PUENPREVfQ09OVElOVUFUSU9OOgorICAg
ICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignU2VuZGluZyBpbnZhbGlkIGNvbnRpbnVhdGlv
biBvcGNvZGUnKQorICAgICAgICAgICAgc2VsZi5fY3VycmVudF9vcGNvZGUgPSBvcGNvZGUKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG9wY29kZSAhPSBjb21tb24uT1BDT0RFX0NPTlRJ
TlVBVElPTjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1NlbmRpbmcgaW52YWxp
ZCBvcGNvZGUgJWQnICUgb3Bjb2RlKQorICAgICAgICBpZiBub3QgZmluOgorICAgICAgICAgICAg
cmV0dXJuCisKKyAgICAgICAgaW5uZXJfZnJhbWVfZGF0YSA9ICcnLmpvaW4oc2VsZi5fcGVuZGlu
Z19mcmFnbWVudHMpCisgICAgICAgIHNlbGYuX3BlbmRpbmdfZnJhZ21lbnRzID0gW10KKyAgICAg
ICAgc2VsZi5fY3VycmVudF9vcGNvZGUgPSBOb25lCisKKyAgICAgICAgIyBIYW5kbGUgYSBjb250
cm9sIG1lc3NhZ2Ugb24gdGhlIHBoeXNpY2FsIGNoYW5uZWwuCisgICAgICAgICMgVE9ETyhiYXNo
aSk6IFN1cHBvcnQgb3RoZXIgb3Bjb2RlcyBpZiBuZWVkZWQuCisgICAgICAgIGlmIG9wY29kZSA9
PSBjb21tb24uT1BDT0RFX0NMT1NFOgorICAgICAgICAgICAgaWYgbGVuKHBheWxvYWQpID49IDI6
CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfY2xvc2VfY29kZSA9IHN0cnVjdC51bnBhY2so
JyFIJywgcGF5bG9hZFs6Ml0pWzBdCisgICAgICAgICAgICBjbG9zZV9ib2R5ID0gY3JlYXRlX2Ns
b3NpbmdfaGFuZHNoYWtlX2JvZHkoCisgICAgICAgICAgICAgICAgY29tbW9uLlNUQVRVU19OT1JN
QUxfQ0xPU1VSRSwgJycpCisgICAgICAgICAgICBjbG9zZV9mcmFtZSA9IGNyZWF0ZV9jbG9zZV9m
cmFtZShjbG9zZV9ib2R5LCBtYXNrPVRydWUpCisgICAgICAgICAgICBzZWxmLnB1dF9ieXRlcyhj
bG9zZV9mcmFtZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgUGFyc2UgdGhlIHBh
eWxvYWQgb2YgdGhlIG1lc3NhZ2Ugb24gcGh5c2ljYWwgY2hhbm5lbC4KKyAgICAgICAgcGFyc2Vy
ID0gbXV4Ll9NdXhGcmFtZVBheWxvYWRQYXJzZXIoaW5uZXJfZnJhbWVfZGF0YSkKKyAgICAgICAg
Y2hhbm5lbF9pZCA9IHBhcnNlci5yZWFkX2NoYW5uZWxfaWQoKQorICAgICAgICBpZiBjaGFubmVs
X2lkID09IG11eC5fQ09OVFJPTF9DSEFOTkVMX0lEOgorICAgICAgICAgICAgc2VsZi5fY29udHJv
bF9ibG9ja3MuZXh0ZW5kKGxpc3QocGFyc2VyLnJlYWRfY29udHJvbF9ibG9ja3MoKSkpCisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3QgY2hhbm5lbF9pZCBpbiBzZWxmLl9jaGFu
bmVsX2RhdGE6CisgICAgICAgICAgICBzZWxmLl9jaGFubmVsX2RhdGFbY2hhbm5lbF9pZF0gPSBf
T3V0Z29pbmdDaGFubmVsRGF0YSgpCisgICAgICAgIGNoYW5uZWxfZGF0YSA9IHNlbGYuX2NoYW5u
ZWxfZGF0YVtjaGFubmVsX2lkXQorCisgICAgICAgICMgUGFyc2UgbG9naWNhbCBmcmFtZXMgYW5k
IGFzc2VtYmxlIGFuIGlubmVyIChsb2dpY2FsKSBtZXNzYWdlLgorICAgICAgICAoaW5uZXJfZmlu
LCBpbm5lcl9yc3YxLCBpbm5lcl9yc3YyLCBpbm5lcl9yc3YzLCBpbm5lcl9vcGNvZGUsCisgICAg
ICAgICBpbm5lcl9wYXlsb2FkKSA9IHBhcnNlci5yZWFkX2lubmVyX2ZyYW1lKCkKKyAgICAgICAg
aW5uZXJfZnJhbWUgPSBGcmFtZShpbm5lcl9maW4sIGlubmVyX3JzdjEsIGlubmVyX3JzdjIsIGlu
bmVyX3JzdjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJfb3Bjb2RlLCBpbm5l
cl9wYXlsb2FkKQorICAgICAgICBtZXNzYWdlID0gY2hhbm5lbF9kYXRhLmJ1aWxkZXIuYnVpbGQo
aW5uZXJfZnJhbWUpCisgICAgICAgIGlmIG1lc3NhZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJl
dHVybgorCisgICAgICAgIGlmIChtZXNzYWdlLm9wY29kZSA9PSBjb21tb24uT1BDT0RFX1RFWFQg
b3IKKyAgICAgICAgICAgIG1lc3NhZ2Uub3Bjb2RlID09IGNvbW1vbi5PUENPREVfQklOQVJZKToK
KyAgICAgICAgICAgIGNoYW5uZWxfZGF0YS5tZXNzYWdlcy5hcHBlbmQobWVzc2FnZS5wYXlsb2Fk
KQorCisgICAgICAgICAgICBzZWxmLm9uX2RhdGFfbWVzc2FnZShtZXNzYWdlLnBheWxvYWQpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBjaGFubmVsX2RhdGEuY29udHJvbF9tZXNzYWdlcy5h
cHBlbmQoCisgICAgICAgICAgICAgICAgeydvcGNvZGUnOiBtZXNzYWdlLm9wY29kZSwKKyAgICAg
ICAgICAgICAgICAgJ21lc3NhZ2UnOiBtZXNzYWdlLnBheWxvYWR9KQorCisgICAgZGVmIG9uX2Rh
dGFfbWVzc2FnZShzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGdldF93
cml0dGVuX2NvbnRyb2xfYmxvY2tzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29udHJv
bF9ibG9ja3MKKworICAgIGRlZiBnZXRfd3JpdHRlbl9tZXNzYWdlcyhzZWxmLCBjaGFubmVsX2lk
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NoYW5uZWxfZGF0YVtjaGFubmVsX2lkXS5tZXNzYWdl
cworCisgICAgZGVmIGdldF93cml0dGVuX2NvbnRyb2xfbWVzc2FnZXMoc2VsZiwgY2hhbm5lbF9p
ZCk6CisgICAgICAgIHJldHVybiBzZWxmLl9jaGFubmVsX2RhdGFbY2hhbm5lbF9pZF0uY29udHJv
bF9tZXNzYWdlcworCisKK2NsYXNzIF9GYWlsT25Xcml0ZUNvbm5lY3Rpb24oX01vY2tNdXhDb25u
ZWN0aW9uKToKKyAgICAiIiJTcGVjaWNpYWxpemVkIHZlcnNpb24gb2YgX01vY2tNdXhDb25uZWN0
aW9uLiBJdHMgd3JpdGUoKSBtZXRob2QgcmFpc2VzCisgICAgYW4gZXhjZXB0aW9uIGZvciB0ZXN0
aW5nIHdoZW4gYSBkYXRhIG1lc3NhZ2UgaXMgd3JpdHRlbi4KKyAgICAiIiIKKworICAgIGRlZiBv
bl9kYXRhX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICIiIk92ZXJyaWRlIHRvIHJh
aXNlIGFuIGV4Y2VwdGlvbi4iIiIKKworICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ludGVudGlv
bmFsIGZhaWx1cmUnKQorCisKK2NsYXNzIF9DaGFubmVsRXZlbnQob2JqZWN0KToKKyAgICAiIiJB
IHN0cnVjdHVyZSB0aGF0IHJlY29yZHMgY2hhbm5lbCBldmVudHMuIiIiCisKKyAgICBkZWYgX19p
bml0X18oc2VsZik6CisgICAgICAgIHNlbGYucmVxdWVzdCA9IE5vbmUKKyAgICAgICAgc2VsZi5t
ZXNzYWdlcyA9IFtdCisgICAgICAgIHNlbGYuZXhjZXB0aW9uID0gTm9uZQorICAgICAgICBzZWxm
LmNsaWVudF9pbml0aWF0ZWRfY2xvc2luZyA9IEZhbHNlCisKKworY2xhc3MgX011eE1vY2tEaXNw
YXRjaGVyKG9iamVjdCk6CisgICAgIiIiTW9jayBjbGFzcyBvZiBkaXNwYXRjaC5EaXNwYXRjaGVy
IGZvciBtdXguIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY2hh
bm5lbF9ldmVudHMgPSB7fQorCisgICAgZGVmIGRvX2V4dHJhX2hhbmRzaGFrZShzZWxmLCByZXF1
ZXN0KToKKyAgICAgICAgaWYgcmVxdWVzdC53c19yZXF1ZXN0ZWRfcHJvdG9jb2xzIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgcmVxdWVzdC53c19wcm90b2NvbCA9IHJlcXVlc3Qud3NfcmVxdWVz
dGVkX3Byb3RvY29sc1swXQorCisgICAgZGVmIF9kb19lY2hvKHNlbGYsIHJlcXVlc3QsIGNoYW5u
ZWxfZXZlbnRzKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBy
ZXF1ZXN0LndzX3N0cmVhbS5yZWNlaXZlX21lc3NhZ2UoKQorICAgICAgICAgICAgaWYgbWVzc2Fn
ZSA9PSBOb25lOgorICAgICAgICAgICAgICAgIGNoYW5uZWxfZXZlbnRzLmNsaWVudF9pbml0aWF0
ZWRfY2xvc2luZyA9IFRydWUKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlm
IG1lc3NhZ2UgPT0gJ0dvb2RieWUnOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAg
ICAgY2hhbm5lbF9ldmVudHMubWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCisgICAgICAgICAgICAj
IGVjaG8gYmFjaworICAgICAgICAgICAgcmVxdWVzdC53c19zdHJlYW0uc2VuZF9tZXNzYWdlKG1l
c3NhZ2UpCisKKyAgICBkZWYgX2RvX3Bpbmcoc2VsZiwgcmVxdWVzdCwgY2hhbm5lbF9ldmVudHMp
OgorICAgICAgICByZXF1ZXN0LndzX3N0cmVhbS5zZW5kX3BpbmcoJ1BpbmchJykKKworICAgIGRl
ZiBfZG9fcGluZ193aGlsZV9oZWxsb193b3JsZChzZWxmLCByZXF1ZXN0LCBjaGFubmVsX2V2ZW50
cyk6CisgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLnNlbmRfbWVzc2FnZSgnSGVsbG8gJywgZW5k
PUZhbHNlKQorICAgICAgICByZXF1ZXN0LndzX3N0cmVhbS5zZW5kX3BpbmcoJ1BpbmchJykKKyAg
ICAgICAgcmVxdWVzdC53c19zdHJlYW0uc2VuZF9tZXNzYWdlKCdXb3JsZCEnLCBlbmQ9VHJ1ZSkK
KworICAgIGRlZiBfZG9fdHdvX3Bpbmdfd2hpbGVfaGVsbG9fd29ybGQoc2VsZiwgcmVxdWVzdCwg
Y2hhbm5lbF9ldmVudHMpOgorICAgICAgICByZXF1ZXN0LndzX3N0cmVhbS5zZW5kX21lc3NhZ2Uo
J0hlbGxvICcsIGVuZD1GYWxzZSkKKyAgICAgICAgcmVxdWVzdC53c19zdHJlYW0uc2VuZF9waW5n
KCdQaW5nIScpCisgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLnNlbmRfcGluZygnUG9uZyEnKQor
ICAgICAgICByZXF1ZXN0LndzX3N0cmVhbS5zZW5kX21lc3NhZ2UoJ1dvcmxkIScsIGVuZD1UcnVl
KQorCisgICAgZGVmIHRyYW5zZmVyX2RhdGEoc2VsZiwgcmVxdWVzdCk6CisgICAgICAgIHNlbGYu
Y2hhbm5lbF9ldmVudHNbcmVxdWVzdC5jaGFubmVsX2lkXSA9IF9DaGFubmVsRXZlbnQoKQorICAg
ICAgICBzZWxmLmNoYW5uZWxfZXZlbnRzW3JlcXVlc3QuY2hhbm5lbF9pZF0ucmVxdWVzdCA9IHJl
cXVlc3QKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIE5vdGU6IG1vcmUgaGFuZGxlciB3
aWxsIGJlIGFkZGVkLgorICAgICAgICAgICAgaWYgcmVxdWVzdC51cmkuZW5kc3dpdGgoJ2VjaG8n
KToKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19lY2hvKHJlcXVlc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLmNoYW5uZWxfZXZlbnRzW3JlcXVlc3QuY2hhbm5lbF9pZF0p
CisgICAgICAgICAgICBlbGlmIHJlcXVlc3QudXJpLmVuZHN3aXRoKCdwaW5nJyk6CisgICAgICAg
ICAgICAgICAgc2VsZi5fZG9fcGluZyhyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5jaGFubmVsX2V2ZW50c1tyZXF1ZXN0LmNoYW5uZWxfaWRdKQorICAgICAgICAg
ICAgZWxpZiByZXF1ZXN0LnVyaS5lbmRzd2l0aCgndHdvX3Bpbmdfd2hpbGVfaGVsbG9fd29ybGQn
KToKKyAgICAgICAgICAgICAgICBzZWxmLl9kb190d29fcGluZ193aGlsZV9oZWxsb193b3JsZCgK
KyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgc2VsZi5jaGFubmVsX2V2ZW50c1tyZXF1ZXN0
LmNoYW5uZWxfaWRdKQorICAgICAgICAgICAgZWxpZiByZXF1ZXN0LnVyaS5lbmRzd2l0aCgncGlu
Z193aGlsZV9oZWxsb193b3JsZCcpOgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3Bpbmdfd2hp
bGVfaGVsbG9fd29ybGQoCisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsIHNlbGYuY2hhbm5l
bF9ldmVudHNbcmVxdWVzdC5jaGFubmVsX2lkXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGhhbmRsZSBwYXRoICVyJyAlIHJlcXVl
c3QucGF0aCkKKyAgICAgICAgICAgIGlmIG5vdCByZXF1ZXN0LnNlcnZlcl90ZXJtaW5hdGVkOgor
ICAgICAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3NlX2Nvbm5lY3Rpb24oKQorICAg
ICAgICBleGNlcHQgQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb24sIGU6CisgICAgICAgICAg
ICBzZWxmLmNoYW5uZWxfZXZlbnRzW3JlcXVlc3QuY2hhbm5lbF9pZF0uZXhjZXB0aW9uID0gZQor
ICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgc2VsZi5jaGFubmVsX2V2
ZW50c1tyZXF1ZXN0LmNoYW5uZWxfaWRdLmV4Y2VwdGlvbiA9IGUKKyAgICAgICAgICAgIHJhaXNl
CisKKworZGVmIF9jcmVhdGVfbW9ja19yZXF1ZXN0KGNvbm5lY3Rpb249Tm9uZSwgbG9naWNhbF9j
aGFubmVsX2V4dGVuc2lvbnM9Tm9uZSk6CisgICAgaWYgY29ubmVjdGlvbiBpcyBOb25lOgorICAg
ICAgICBjb25uZWN0aW9uID0gX01vY2tNdXhDb25uZWN0aW9uKCkKKworICAgIHJlcXVlc3QgPSBt
b2NrLk1vY2tSZXF1ZXN0KHVyaT0nL2VjaG8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlYWRlcnNfaW49X1RFU1RfSEVBREVSUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25uZWN0aW9uPWNvbm5lY3Rpb24pCisgICAgcmVxdWVzdC53c19zdHJlYW0gPSBTdHJl
YW0ocmVxdWVzdCwgb3B0aW9ucz1TdHJlYW1PcHRpb25zKCkpCisgICAgcmVxdWVzdC5tdXhfcHJv
Y2Vzc29yID0gTXV4RXh0ZW5zaW9uUHJvY2Vzc29yKAorICAgICAgICBjb21tb24uRXh0ZW5zaW9u
UGFyYW1ldGVyKGNvbW1vbi5NVVhfRVhURU5TSU9OKSkKKyAgICBpZiBsb2dpY2FsX2NoYW5uZWxf
ZXh0ZW5zaW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgcmVxdWVzdC5tdXhfcHJvY2Vzc29yLnNl
dF9leHRlbnNpb25zKGxvZ2ljYWxfY2hhbm5lbF9leHRlbnNpb25zKQorICAgIHJlcXVlc3QubXV4
X3Byb2Nlc3Nvci5zZXRfcXVvdGEoOCAqIDEwMjQpCisgICAgcmV0dXJuIHJlcXVlc3QKKworCitk
ZWYgX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1ZXN0X2ZyYW1lKGNoYW5uZWxfaWQsIGVuY29kaW5n
LCBlbmNvZGVkX2hhbmRzaGFrZSk6CisgICAgIyBBbGxvdyBpbnZhbGlkIGVuY29kaW5nIGZvciB0
ZXN0aW5nLgorICAgIGZpcnN0X2J5dGUgPSAoKG11eC5fTVVYX09QQ09ERV9BRERfQ0hBTk5FTF9S
RVFVRVNUIDw8IDUpIHwgZW5jb2RpbmcpCisgICAgcGF5bG9hZCA9IChjaHIoZmlyc3RfYnl0ZSkg
KworICAgICAgICAgICAgICAgbXV4Ll9lbmNvZGVfY2hhbm5lbF9pZChjaGFubmVsX2lkKSArCisg
ICAgICAgICAgICAgICBtdXguX2VuY29kZV9udW1iZXIobGVuKGVuY29kZWRfaGFuZHNoYWtlKSkg
KworICAgICAgICAgICAgICAgZW5jb2RlZF9oYW5kc2hha2UpCisgICAgcmV0dXJuIGNyZWF0ZV9i
aW5hcnlfZnJhbWUoCisgICAgICAgIChtdXguX2VuY29kZV9jaGFubmVsX2lkKG11eC5fQ09OVFJP
TF9DSEFOTkVMX0lEKSArIHBheWxvYWQpLCBtYXNrPVRydWUpCisKKworZGVmIF9jcmVhdGVfZHJv
cF9jaGFubmVsX2ZyYW1lKGNoYW5uZWxfaWQsIGNvZGU9Tm9uZSwgbWVzc2FnZT0nJyk6CisgICAg
cGF5bG9hZCA9IG11eC5fY3JlYXRlX2Ryb3BfY2hhbm5lbChjaGFubmVsX2lkLCBjb2RlLCBtZXNz
YWdlKQorICAgIHJldHVybiBjcmVhdGVfYmluYXJ5X2ZyYW1lKAorICAgICAgICAobXV4Ll9lbmNv
ZGVfY2hhbm5lbF9pZChtdXguX0NPTlRST0xfQ0hBTk5FTF9JRCkgKyBwYXlsb2FkKSwgbWFzaz1U
cnVlKQorCisKK2RlZiBfY3JlYXRlX2Zsb3dfY29udHJvbF9mcmFtZShjaGFubmVsX2lkLCByZXBs
ZW5pc2hlZF9xdW90YSk6CisgICAgcGF5bG9hZCA9IG11eC5fY3JlYXRlX2Zsb3dfY29udHJvbChj
aGFubmVsX2lkLCByZXBsZW5pc2hlZF9xdW90YSkKKyAgICByZXR1cm4gY3JlYXRlX2JpbmFyeV9m
cmFtZSgKKyAgICAgICAgKG11eC5fZW5jb2RlX2NoYW5uZWxfaWQobXV4Ll9DT05UUk9MX0NIQU5O
RUxfSUQpICsgcGF5bG9hZCksIG1hc2s9VHJ1ZSkKKworCitkZWYgX2NyZWF0ZV9sb2dpY2FsX2Zy
YW1lKGNoYW5uZWxfaWQsIG1lc3NhZ2UsIG9wY29kZT1jb21tb24uT1BDT0RFX0JJTkFSWSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmluPVRydWUsIHJzdjE9RmFsc2UsIHJzdjI9RmFsc2Us
IHJzdjM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2s9VHJ1ZSk6CisgICAg
Yml0cyA9IGNocigoZmluIDw8IDcpIHwgKHJzdjEgPDwgNikgfCAocnN2MiA8PCA1KSB8IChyc3Yz
IDw8IDQpIHwgb3Bjb2RlKQorICAgIHBheWxvYWQgPSBtdXguX2VuY29kZV9jaGFubmVsX2lkKGNo
YW5uZWxfaWQpICsgYml0cyArIG1lc3NhZ2UKKyAgICByZXR1cm4gY3JlYXRlX2JpbmFyeV9mcmFt
ZShwYXlsb2FkLCBtYXNrPVRydWUpCisKKworZGVmIF9jcmVhdGVfcmVxdWVzdF9oZWFkZXIocGF0
aD0nL2VjaG8nLCBleHRlbnNpb25zPU5vbmUpOgorICAgIGhlYWRlcnMgPSAoCisgICAgICAgICdH
RVQgJXMgSFRUUC8xLjFcclxuJworICAgICAgICAnSG9zdDogc2VydmVyLmV4YW1wbGUuY29tXHJc
bicKKyAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAgICAgICAnT3JpZ2luOiBo
dHRwOi8vZXhhbXBsZS5jb21cclxuJykgJSBwYXRoCisgICAgaWYgZXh0ZW5zaW9uczoKKyAgICAg
ICAgaGVhZGVycyArPSAnJXM6ICVzJyAlICgKKyAgICAgICAgICAgIGNvbW1vbi5TRUNfV0VCU09D
S0VUX0VYVEVOU0lPTlNfSEVBREVSLCBleHRlbnNpb25zKQorICAgIHJldHVybiBoZWFkZXJzCisK
KworY2xhc3MgTXV4VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSB1bml0dGVzdCBm
b3IgbXV4IG1vZHVsZS4iIiIKKworICAgIGRlZiB0ZXN0X2NoYW5uZWxfaWRfZGVjb2RlKHNlbGYp
OgorICAgICAgICBkYXRhID0gJ1x4MDBceDAxXHhiZlx4ZmZceGRmXHhmZlx4ZmZceGZmXHhmZlx4
ZmZceGZmJworICAgICAgICBwYXJzZXIgPSBtdXguX011eEZyYW1lUGF5bG9hZFBhcnNlcihkYXRh
KQorICAgICAgICBjaGFubmVsX2lkID0gcGFyc2VyLnJlYWRfY2hhbm5lbF9pZCgpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMCwgY2hhbm5lbF9pZCkKKyAgICAgICAgY2hhbm5lbF9pZCA9IHBh
cnNlci5yZWFkX2NoYW5uZWxfaWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGNoYW5u
ZWxfaWQpCisgICAgICAgIGNoYW5uZWxfaWQgPSBwYXJzZXIucmVhZF9jaGFubmVsX2lkKCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyICoqIDE0IC0gMSwgY2hhbm5lbF9pZCkKKyAgICAgICAg
Y2hhbm5lbF9pZCA9IHBhcnNlci5yZWFkX2NoYW5uZWxfaWQoKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKDIgKiogMjEgLSAxLCBjaGFubmVsX2lkKQorICAgICAgICBjaGFubmVsX2lkID0gcGFy
c2VyLnJlYWRfY2hhbm5lbF9pZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiAqKiAyOSAt
IDEsIGNoYW5uZWxfaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRhdGEpLCBwYXJz
ZXIuX3JlYWRfcG9zaXRpb24pCisKKyAgICBkZWYgdGVzdF9jaGFubmVsX2lkX2VuY29kZShzZWxm
KToKKyAgICAgICAgZW5jb2RlZCA9IG11eC5fZW5jb2RlX2NoYW5uZWxfaWQoMCkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnXHgwMCcsIGVuY29kZWQpCisgICAgICAgIGVuY29kZWQgPSBtdXgu
X2VuY29kZV9jaGFubmVsX2lkKDIgKiogMTQgLSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdceGJmXHhmZicsIGVuY29kZWQpCisgICAgICAgIGVuY29kZWQgPSBtdXguX2VuY29kZV9jaGFu
bmVsX2lkKDIgKiogMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4YzBAXHgwMCcsIGVu
Y29kZWQpCisgICAgICAgIGVuY29kZWQgPSBtdXguX2VuY29kZV9jaGFubmVsX2lkKDIgKiogMjEg
LSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceGRmXHhmZlx4ZmYnLCBlbmNvZGVkKQor
ICAgICAgICBlbmNvZGVkID0gbXV4Ll9lbmNvZGVfY2hhbm5lbF9pZCgyICoqIDIxKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdceGUwIFx4MDBceDAwJywgZW5jb2RlZCkKKyAgICAgICAgZW5j
b2RlZCA9IG11eC5fZW5jb2RlX2NoYW5uZWxfaWQoMiAqKiAyOSAtIDEpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ1x4ZmZceGZmXHhmZlx4ZmYnLCBlbmNvZGVkKQorICAgICAgICAjIGNoYW5u
ZWxfaWQgaXMgdG9vIGxhcmdlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgIG11eC5fZW5jb2RlX2NoYW5uZWxfaWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIDIgKiogMjkpCisKKyAgICBkZWYgdGVzdF9yZWFkX211bHRp
cGxlX2NvbnRyb2xfYmxvY2tzKHNlbGYpOgorICAgICAgICAjIFVzZSBBZGRDaGFubmVsUmVxdWVz
dCBiZWNhdXNlIGl0IGNhbiBjb250YWluIGFyYml0cmFyeSBsZW5ndGggb2YgZGF0YQorICAgICAg
ICBkYXRhID0gKCdceDAwXHgwMVx4MDFhJworICAgICAgICAgICAgICAgICdceDAwXHgwMlx4N2Ql
cycKKyAgICAgICAgICAgICAgICAnXHgwMFx4MDNceDdlXHhmZlx4ZmYlcycKKyAgICAgICAgICAg
ICAgICAnXHgwMFx4MDRceDdmXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDAlcycpICUg
KAorICAgICAgICAgICAgJ2EnICogMHg3ZCwgJ2InICogMHhmZmZmLCAnYycgKiAweDEwMDAwKQor
ICAgICAgICBwYXJzZXIgPSBtdXguX011eEZyYW1lUGF5bG9hZFBhcnNlcihkYXRhKQorICAgICAg
ICBibG9ja3MgPSBsaXN0KHBhcnNlci5yZWFkX2NvbnRyb2xfYmxvY2tzKCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoNCwgbGVuKGJsb2NrcykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChtdXguX01VWF9PUENPREVfQUREX0NIQU5ORUxfUkVRVUVTVCwgYmxvY2tzWzBdLm9wY29kZSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBibG9ja3NbMF0uY2hhbm5lbF9pZCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oYmxvY2tzWzBdLmVuY29kZWRfaGFuZHNoYWtlKSkK
KworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG11eC5fTVVYX09QQ09ERV9BRERfQ0hBTk5FTF9S
RVFVRVNULCBibG9ja3NbMV0ub3Bjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGJs
b2Nrc1sxXS5jaGFubmVsX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4N2QsIGxlbihi
bG9ja3NbMV0uZW5jb2RlZF9oYW5kc2hha2UpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bXV4Ll9NVVhfT1BDT0RFX0FERF9DSEFOTkVMX1JFUVVFU1QsIGJsb2Nrc1syXS5vcGNvZGUpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgYmxvY2tzWzJdLmNoYW5uZWxfaWQpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMHhmZmZmLCBsZW4oYmxvY2tzWzJdLmVuY29kZWRfaGFuZHNoYWtl
KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG11eC5fTVVYX09QQ09ERV9BRERfQ0hBTk5F
TF9SRVFVRVNULCBibG9ja3NbM10ub3Bjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQs
IGJsb2Nrc1szXS5jaGFubmVsX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4MTAwMDAs
IGxlbihibG9ja3NbM10uZW5jb2RlZF9oYW5kc2hha2UpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobGVuKGRhdGEpLCBwYXJzZXIuX3JlYWRfcG9zaXRpb24pCisKKyAgICBkZWYgdGVzdF9y
ZWFkX2FkZF9jaGFubmVsX3JlcXVlc3Qoc2VsZik6CisgICAgICAgIGRhdGEgPSAnXHgwMFx4MDFc
eDAxYScKKyAgICAgICAgcGFyc2VyID0gbXV4Ll9NdXhGcmFtZVBheWxvYWRQYXJzZXIoZGF0YSkK
KyAgICAgICAgYmxvY2tzID0gbGlzdChwYXJzZXIucmVhZF9jb250cm9sX2Jsb2NrcygpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKG11eC5fTVVYX09QQ09ERV9BRERfQ0hBTk5FTF9SRVFVRVNU
LCBibG9ja3NbMF0ub3Bjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGJsb2Nrc1sw
XS5jaGFubmVsX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihibG9ja3NbMF0u
ZW5jb2RlZF9oYW5kc2hha2UpKQorCisgICAgZGVmIHRlc3RfcmVhZF9kcm9wX2NoYW5uZWwoc2Vs
Zik6CisgICAgICAgIGRhdGEgPSAnXHg2MFx4MDFceDAwJworICAgICAgICBwYXJzZXIgPSBtdXgu
X011eEZyYW1lUGF5bG9hZFBhcnNlcihkYXRhKQorICAgICAgICBibG9ja3MgPSBsaXN0KHBhcnNl
ci5yZWFkX2NvbnRyb2xfYmxvY2tzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVu
KGJsb2NrcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgYmxvY2tzWzBdLmNoYW5uZWxf
aWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXV4Ll9NVVhfT1BDT0RFX0RST1BfQ0hBTk5F
TCwgYmxvY2tzWzBdLm9wY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBibG9j
a3NbMF0uZHJvcF9jb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihibG9ja3Nb
MF0uZHJvcF9tZXNzYWdlKSkKKworICAgICAgICBkYXRhID0gJ1x4NjBceDAyXHgwOVx4MDNceGU4
U3VjY2VzcycKKyAgICAgICAgcGFyc2VyID0gbXV4Ll9NdXhGcmFtZVBheWxvYWRQYXJzZXIoZGF0
YSkKKyAgICAgICAgYmxvY2tzID0gbGlzdChwYXJzZXIucmVhZF9jb250cm9sX2Jsb2NrcygpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihibG9ja3MpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKDIsIGJsb2Nrc1swXS5jaGFubmVsX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG11eC5fTVVYX09QQ09ERV9EUk9QX0NIQU5ORUwsIGJsb2Nrc1swXS5vcGNvZGUpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAwMCwgYmxvY2tzWzBdLmRyb3BfY29kZSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnU3VjY2VzcycsIGJsb2Nrc1swXS5kcm9wX21lc3NhZ2UpCisKKyAg
ICAgICAgIyBSZWFzb24gaXMgdG9vIHNob3J0LgorICAgICAgICBkYXRhID0gJ1x4NjBceDAxXHgw
MVx4MDAnCisgICAgICAgIHBhcnNlciA9IG11eC5fTXV4RnJhbWVQYXlsb2FkUGFyc2VyKGRhdGEp
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG11eC5QaHlzaWNhbENvbm5lY3Rpb25FcnJvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBsaXN0KHBhcnNlci5yZWFkX2NvbnRy
b2xfYmxvY2tzKCkpKQorCisgICAgZGVmIHRlc3RfcmVhZF9mbG93X2NvbnRyb2woc2VsZik6Cisg
ICAgICAgIGRhdGEgPSAnXHg0MFx4MDFceDAyJworICAgICAgICBwYXJzZXIgPSBtdXguX011eEZy
YW1lUGF5bG9hZFBhcnNlcihkYXRhKQorICAgICAgICBibG9ja3MgPSBsaXN0KHBhcnNlci5yZWFk
X2NvbnRyb2xfYmxvY2tzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGJsb2Nr
cykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgYmxvY2tzWzBdLmNoYW5uZWxfaWQpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXV4Ll9NVVhfT1BDT0RFX0ZMT1dfQ09OVFJPTCwgYmxv
Y2tzWzBdLm9wY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBibG9ja3NbMF0uc2Vu
ZF9xdW90YSkKKworICAgIGRlZiB0ZXN0X3JlYWRfbmV3X2NoYW5uZWxfc2xvdChzZWxmKToKKyAg
ICAgICAgZGF0YSA9ICdceDgwXHgwMVx4MDJceDAyXHgwMycKKyAgICAgICAgcGFyc2VyID0gbXV4
Ll9NdXhGcmFtZVBheWxvYWRQYXJzZXIoZGF0YSkKKyAgICAgICAgIyBUT0RPKGJhc2hpKTogSW1w
bGVtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG11eC5QaHlzaWNhbENvbm5lY3Rpb25F
cnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBsaXN0KHBhcnNlci5yZWFk
X2NvbnRyb2xfYmxvY2tzKCkpKQorCisgICAgZGVmIHRlc3RfcmVhZF9pbnZhbGlkX251bWJlcl9m
aWVsZF9pbl9jb250cm9sX2Jsb2NrKHNlbGYpOgorICAgICAgICAjIE5vIG51bWJlciBmaWVsZC4K
KyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIHBhcnNlciA9IG11eC5fTXV4RnJhbWVQYXlsb2Fk
UGFyc2VyKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNl
ci5fcmVhZF9udW1iZXIpCisKKyAgICAgICAgIyBUaGUgbGFzdCB0d28gYnl0ZXMgYXJlIG1pc3Np
bmcuCisgICAgICAgIGRhdGEgPSAnXHg3ZScKKyAgICAgICAgcGFyc2VyID0gbXV4Ll9NdXhGcmFt
ZVBheWxvYWRQYXJzZXIoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
ciwgcGFyc2VyLl9yZWFkX251bWJlcikKKworICAgICAgICAjIE1pc3NpbmcgdGhlIGxhc3Qgb25l
IGJ5dGUuCisgICAgICAgIGRhdGEgPSAnXHg3Zlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAn
CisgICAgICAgIHBhcnNlciA9IG11eC5fTXV4RnJhbWVQYXlsb2FkUGFyc2VyKGRhdGEpCisgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNlci5fcmVhZF9udW1iZXIpCisK
KyAgICAgICAgIyBUaGUgbGVuZ3RoIG9mIG51bWJlciBmaWVsZCBpcyB0b28gbGFyZ2UuCisgICAg
ICAgIGRhdGEgPSAnXHg3Zlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmJworICAgICAg
ICBwYXJzZXIgPSBtdXguX011eEZyYW1lUGF5bG9hZFBhcnNlcihkYXRhKQorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYXJzZXIuX3JlYWRfbnVtYmVyKQorCisgICAgICAg
ICMgVGhlIG1zYiBvZiB0aGUgZmlyc3QgYnl0ZSBpcyBzZXQuCisgICAgICAgIGRhdGEgPSAnXHg4
MCcKKyAgICAgICAgcGFyc2VyID0gbXV4Ll9NdXhGcmFtZVBheWxvYWRQYXJzZXIoZGF0YSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGFyc2VyLl9yZWFkX251bWJlcikK
KworICAgICAgICAjIFVzaW5nIDMgYnl0ZXMgZW5jb2RpbmcgZm9yIDEyNS4KKyAgICAgICAgZGF0
YSA9ICdceDdlXHgwMFx4N2QnCisgICAgICAgIHBhcnNlciA9IG11eC5fTXV4RnJhbWVQYXlsb2Fk
UGFyc2VyKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNl
ci5fcmVhZF9udW1iZXIpCisKKyAgICAgICAgIyBVc2luZyA5IGJ5dGVzIGVuY29kaW5nIGZvciAw
eGZmZmYKKyAgICAgICAgZGF0YSA9ICdceDdmXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhmZlx4
ZmYnCisgICAgICAgIHBhcnNlciA9IG11eC5fTXV4RnJhbWVQYXlsb2FkUGFyc2VyKGRhdGEpCisg
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNlci5fcmVhZF9udW1iZXIp
CisKKyAgICBkZWYgdGVzdF9yZWFkX2ludmFsaWRfc2l6ZV9hbmRfY29udGVudHMoc2VsZik6Cisg
ICAgICAgICMgT25seSBjb250YWluIG51bWJlciBmaWVsZC4KKyAgICAgICAgZGF0YSA9ICdceDAx
JworICAgICAgICBwYXJzZXIgPSBtdXguX011eEZyYW1lUGF5bG9hZFBhcnNlcihkYXRhKQorICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhtdXguUGh5c2ljYWxDb25uZWN0aW9uRXJyb3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5fcmVhZF9zaXplX2FuZF9jb250ZW50cykKKwor
ICAgIGRlZiB0ZXN0X2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXNwb25zZShzZWxmKToKKyAgICAgICAg
ZGF0YSA9IG11eC5fY3JlYXRlX2FkZF9jaGFubmVsX3Jlc3BvbnNlKGNoYW5uZWxfaWQ9MSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWRfaGFu
ZHNoYWtlPSdGb29CYXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5jb2Rpbmc9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlamVjdGVkPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdc
eDIwXHgwMVx4MDZGb29CYXInLCBkYXRhKQorCisgICAgICAgIGRhdGEgPSBtdXguX2NyZWF0ZV9h
ZGRfY2hhbm5lbF9yZXNwb25zZShjaGFubmVsX2lkPTIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZT0nSGVsbG8nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9MSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdGVk
PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MzFceDAyXHgwNUhlbGxvJywgZGF0
YSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kcm9wX2NoYW5uZWwoc2VsZik6CisgICAgICAgIGRh
dGEgPSBtdXguX2NyZWF0ZV9kcm9wX2NoYW5uZWwoY2hhbm5lbF9pZD0xKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdceDYwXHgwMVx4MDAnLCBkYXRhKQorCisgICAgICAgIGRhdGEgPSBtdXgu
X2NyZWF0ZV9kcm9wX2NoYW5uZWwoY2hhbm5lbF9pZD0xLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvZGU9MjAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlPSdlcnJvcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J1x4NjBceDAxXHgwN1x4MDdceGQwZXJyb3InLCBkYXRhKQorCisgICAgICAgICMgcmVhc29uIG11
c3QgYmUgZW1wdHkgaWYgY29kZSBpcyBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZh
bHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG11eC5fY3JlYXRlX2Ryb3BfY2hh
bm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgTm9uZSwgJ0Zvb0JhcicpCisKKyAg
ICBkZWYgdGVzdF9wYXJzZV9yZXF1ZXN0X3RleHQoc2VsZik6CisgICAgICAgIHJlcXVlc3RfdGV4
dCA9IF9jcmVhdGVfcmVxdWVzdF9oZWFkZXIoKQorICAgICAgICBjb21tYW5kLCBwYXRoLCB2ZXJz
aW9uLCBoZWFkZXJzID0gbXV4Ll9wYXJzZV9yZXF1ZXN0X3RleHQocmVxdWVzdF90ZXh0KQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdHRVQnLCBjb21tYW5kKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCcvZWNobycsIHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hUVFAvMS4x
JywgdmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4oaGVhZGVycykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NlcnZlci5leGFtcGxlLmNvbScsIGhlYWRlcnNbJ0hv
c3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaHR0cDovL2V4YW1wbGUuY29tJywgaGVh
ZGVyc1snT3JpZ2luJ10pCisKKworY2xhc3MgTXV4SGFuZGxlclRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgorCisgICAgZGVmIHRlc3RfYWRkX2NoYW5uZWwoc2VsZik6CisgICAgICAgIHJlcXVlc3Qg
PSBfY3JlYXRlX21vY2tfcmVxdWVzdCgpCisgICAgICAgIGRpc3BhdGNoZXIgPSBfTXV4TW9ja0Rp
c3BhdGNoZXIoKQorICAgICAgICBtdXhfaGFuZGxlciA9IG11eC5fTXV4SGFuZGxlcihyZXF1ZXN0
LCBkaXNwYXRjaGVyKQorICAgICAgICBtdXhfaGFuZGxlci5zdGFydCgpCisgICAgICAgIG11eF9o
YW5kbGVyLmFkZF9jaGFubmVsX3Nsb3RzKG11eC5fSU5JVElBTF9OVU1CRVJfT0ZfQ0hBTk5FTF9T
TE9UUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV4Ll9JTklUSUFM
X1FVT1RBX0ZPUl9DTElFTlQpCisKKyAgICAgICAgZW5jb2RlZF9oYW5kc2hha2UgPSBfY3JlYXRl
X3JlcXVlc3RfaGVhZGVyKHBhdGg9Jy9lY2hvJykKKyAgICAgICAgYWRkX2NoYW5uZWxfcmVxdWVz
dCA9IF9jcmVhdGVfYWRkX2NoYW5uZWxfcmVxdWVzdF9mcmFtZSgKKyAgICAgICAgICAgIGNoYW5u
ZWxfaWQ9MiwgZW5jb2Rpbmc9MCwKKyAgICAgICAgICAgIGVuY29kZWRfaGFuZHNoYWtlPWVuY29k
ZWRfaGFuZHNoYWtlKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGFkZF9j
aGFubmVsX3JlcXVlc3QpCisKKyAgICAgICAgZmxvd19jb250cm9sID0gX2NyZWF0ZV9mbG93X2Nv
bnRyb2xfZnJhbWUoY2hhbm5lbF9pZD0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXBsZW5pc2hlZF9xdW90YT02KQorICAgICAgICByZXF1ZXN0
LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGZsb3dfY29udHJvbCkKKworICAgICAgICBlbmNvZGVkX2hh
bmRzaGFrZSA9IF9jcmVhdGVfcmVxdWVzdF9oZWFkZXIocGF0aD0nL2VjaG8nKQorICAgICAgICBh
ZGRfY2hhbm5lbF9yZXF1ZXN0ID0gX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1ZXN0X2ZyYW1lKAor
ICAgICAgICAgICAgY2hhbm5lbF9pZD0zLCBlbmNvZGluZz0wLAorICAgICAgICAgICAgZW5jb2Rl
ZF9oYW5kc2hha2U9ZW5jb2RlZF9oYW5kc2hha2UpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlv
bi5wdXRfYnl0ZXMoYWRkX2NoYW5uZWxfcmVxdWVzdCkKKworICAgICAgICBmbG93X2NvbnRyb2wg
PSBfY3JlYXRlX2Zsb3dfY29udHJvbF9mcmFtZShjaGFubmVsX2lkPTMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaGVkX3F1b3RhPTYp
CisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoZmxvd19jb250cm9sKQorCisg
ICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRl
X2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0yLCBtZXNzYWdlPSdIZWxsbycpKQorICAgICAgICBy
ZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2Fs
X2ZyYW1lKGNoYW5uZWxfaWQ9MywgbWVzc2FnZT0nV29ybGQnKSkKKyAgICAgICAgcmVxdWVzdC5j
b25uZWN0aW9uLnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNhbF9mcmFtZShj
aGFubmVsX2lkPTEsIG1lc3NhZ2U9J0dvb2RieWUnKSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0
aW9uLnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNhbF9mcmFtZShjaGFubmVs
X2lkPTIsIG1lc3NhZ2U9J0dvb2RieWUnKSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1
dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNhbF9mcmFtZShjaGFubmVsX2lkPTMs
IG1lc3NhZ2U9J0dvb2RieWUnKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobXV4X2hhbmRs
ZXIud2FpdF91bnRpbF9kb25lKHRpbWVvdXQ9MikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChbXSwgZGlzcGF0Y2hlci5jaGFubmVsX2V2ZW50c1sxXS5tZXNzYWdlcykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChbJ0hlbGxvJ10sIGRpc3BhdGNoZXIuY2hhbm5lbF9ldmVudHNbMl0ubWVz
c2FnZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydXb3JsZCddLCBkaXNwYXRjaGVyLmNo
YW5uZWxfZXZlbnRzWzNdLm1lc3NhZ2VzKQorICAgICAgICAjIENoYW5uZWwgMgorICAgICAgICBt
ZXNzYWdlcyA9IHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfd3JpdHRlbl9tZXNzYWdlcygyKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihtZXNzYWdlcykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ0hlbGxvJywgbWVzc2FnZXNbMF0pCisgICAgICAgICMgQ2hhbm5lbCAzCisgICAg
ICAgIG1lc3NhZ2VzID0gcmVxdWVzdC5jb25uZWN0aW9uLmdldF93cml0dGVuX21lc3NhZ2VzKDMp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKG1lc3NhZ2VzKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnV29ybGQnLCBtZXNzYWdlc1swXSkKKyAgICAgICAgY29udHJvbF9ibG9j
a3MgPSByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X3dyaXR0ZW5fY29udHJvbF9ibG9ja3MoKQorICAg
ICAgICAjIFRoZXJlIHNob3VsZCBiZSA4IGNvbnRyb2wgYmxvY2tzOgorICAgICAgICAjICAgLSAx
IE5ld0NoYW5uZWxTbG90CisgICAgICAgICMgICAtIDIgQWRkQ2hhbm5lbFJlc3BvbnNlcyBmb3Ig
Y2hhbm5lbCBpZCAyIGFuZCAzCisgICAgICAgICMgICAtIDYgRmxvd0NvbnRyb2xzIGZvciBjaGFu
bmVsIGlkIDEgKGluaXRpYWxpemUpLCAnSGVsbG8nLCAnV29ybGQnLAorICAgICAgICAjICAgICBh
bmQgMyAnR29vZGJ5ZSdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOSwgbGVuKGNvbnRyb2xf
YmxvY2tzKSkKKworICAgIGRlZiB0ZXN0X3BoeXNpY2FsX2Nvbm5lY3Rpb25fd3JpdGVfZmFpbHVy
ZShzZWxmKToKKyAgICAgICAgIyBVc2UgX0ZhaWxPbldyaXRlQ29ubmVjdGlvbi4KKyAgICAgICAg
cmVxdWVzdCA9IF9jcmVhdGVfbW9ja19yZXF1ZXN0KGNvbm5lY3Rpb249X0ZhaWxPbldyaXRlQ29u
bmVjdGlvbigpKQorCisgICAgICAgIGRpc3BhdGNoZXIgPSBfTXV4TW9ja0Rpc3BhdGNoZXIoKQor
ICAgICAgICBtdXhfaGFuZGxlciA9IG11eC5fTXV4SGFuZGxlcihyZXF1ZXN0LCBkaXNwYXRjaGVy
KQorICAgICAgICBtdXhfaGFuZGxlci5zdGFydCgpCisKKyAgICAgICAgIyBMZXQgdGhlIHdvcmtl
ciBlY2hvIGJhY2sgJ0hlbGxvJy4gSXQgY2F1c2VzIF9GYWlsT25Xcml0ZUNvbm5lY3Rpb24KKyAg
ICAgICAgIyByYWlzaW5nIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9u
LnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNhbF9mcmFtZShjaGFubmVsX2lk
PTEsIG1lc3NhZ2U9J0hlbGxvJykpCisKKyAgICAgICAgIyBMZXQgdGhlIHdvcmtlciBleGl0LiBU
aGlzIHdpbGwgYmUgdW5uZWNlc3Nhcnkgd2hlbgorICAgICAgICAjIF9Mb2dpY2FsQ29ubmVjdGlv
bi53cml0ZSgpIGlzIGNoYW5nZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmCisgICAgICAgICMg
d29rZSB1cCBieSBvbl93cml0ZXJfZG9uZS4KKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1
dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNhbF9mcmFtZShjaGFubmVsX2lkPTEs
IG1lc3NhZ2U9J0dvb2RieWUnKSkKKworICAgICAgICAjIEFsbCB0aHJlYWRzIHNob3VsZCBiZSBk
b25lLgorICAgICAgICBzZWxmLmFzc2VydFRydWUobXV4X2hhbmRsZXIud2FpdF91bnRpbF9kb25l
KHRpbWVvdXQ9MikpCisKKyAgICBkZWYgdGVzdF9zZW5kX2Jsb2NrZWQoc2VsZik6CisgICAgICAg
IHJlcXVlc3QgPSBfY3JlYXRlX21vY2tfcmVxdWVzdCgpCisgICAgICAgIGRpc3BhdGNoZXIgPSBf
TXV4TW9ja0Rpc3BhdGNoZXIoKQorICAgICAgICBtdXhfaGFuZGxlciA9IG11eC5fTXV4SGFuZGxl
cihyZXF1ZXN0LCBkaXNwYXRjaGVyKQorICAgICAgICBtdXhfaGFuZGxlci5zdGFydCgpCisKKyAg
ICAgICAgbXV4X2hhbmRsZXIuYWRkX2NoYW5uZWxfc2xvdHMobXV4Ll9JTklUSUFMX05VTUJFUl9P
Rl9DSEFOTkVMX1NMT1RTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
dXguX0lOSVRJQUxfUVVPVEFfRk9SX0NMSUVOVCkKKworICAgICAgICBlbmNvZGVkX2hhbmRzaGFr
ZSA9IF9jcmVhdGVfcmVxdWVzdF9oZWFkZXIocGF0aD0nL2VjaG8nKQorICAgICAgICBhZGRfY2hh
bm5lbF9yZXF1ZXN0ID0gX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1ZXN0X2ZyYW1lKAorICAgICAg
ICAgICAgY2hhbm5lbF9pZD0yLCBlbmNvZGluZz0wLAorICAgICAgICAgICAgZW5jb2RlZF9oYW5k
c2hha2U9ZW5jb2RlZF9oYW5kc2hha2UpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRf
Ynl0ZXMoYWRkX2NoYW5uZWxfcmVxdWVzdCkKKworICAgICAgICAjIE9uIHJlY2VpdmluZyB0aGlz
ICdIZWxsbycsIHRoZSBzZXJ2ZXIgdHJpZXMgdG8gZWNobyBiYWNrICdIZWxsbycsCisgICAgICAg
ICMgYnV0IGl0IHdpbGwgYmUgYmxvY2tlZCBzaW5jZSB0aGVyZSdzIG5vIHNlbmQgcXVvdGEgYXZh
aWxhYmxlIGZvciB0aGUKKyAgICAgICAgIyBjaGFubmVsIDIuCisgICAgICAgIHJlcXVlc3QuY29u
bmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hh
bm5lbF9pZD0yLCBtZXNzYWdlPSdIZWxsbycpKQorCisgICAgICAgICMgV2FpdCB1bnRpbCB0aGUg
d29ya2VyIGlzIGJsb2NrZWQgZHVlIHRvIHNlbmQgcXVvdGEgc2hvcnRhZ2UuCisgICAgICAgIHRp
bWUuc2xlZXAoMSkKKworICAgICAgICAjIENsb3NlIHRoZSBjaGFubmVsIDIuIFRoZSB3b3JrZXIg
c2hvdWxkIGJlIG5vdGlmaWVkIG9mIHRoZSBlbmQgb2YKKyAgICAgICAgIyB3cml0ZXIgdGhyZWFk
IGFuZCBzdG9wIHdhaXRpbmcgZm9yIHNlbmQgcXVvdGEgdG8gYmUgcmVwbGVuaXNoZWQuCisgICAg
ICAgIGRyb3BfY2hhbm5lbCA9IF9jcmVhdGVfZHJvcF9jaGFubmVsX2ZyYW1lKGNoYW5uZWxfaWQ9
MikKKworICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGRyb3BfY2hhbm5lbCkK
KworICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgY2hhbm5lbCAxIGlzIGFsc28gY2xvc2VkLgorICAg
ICAgICBkcm9wX2NoYW5uZWwgPSBfY3JlYXRlX2Ryb3BfY2hhbm5lbF9mcmFtZShjaGFubmVsX2lk
PTEpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoZHJvcF9jaGFubmVsKQor
CisgICAgICAgICMgQWxsIHRocmVhZHMgc2hvdWxkIGJlIGRvbmUuCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShtdXhfaGFuZGxlci53YWl0X3VudGlsX2RvbmUodGltZW91dD0yKSkKKworICAgIGRl
ZiB0ZXN0X2FkZF9jaGFubmVsX2RlbHRhX2VuY29kaW5nKHNlbGYpOgorICAgICAgICByZXF1ZXN0
ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRjaGVyID0gX011eE1vY2tE
aXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011eEhhbmRsZXIocmVxdWVz
dCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQoKQorICAgICAgICBtdXhf
aGFuZGxlci5hZGRfY2hhbm5lbF9zbG90cyhtdXguX0lOSVRJQUxfTlVNQkVSX09GX0NIQU5ORUxf
U0xPVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11eC5fSU5JVElB
TF9RVU9UQV9GT1JfQ0xJRU5UKQorCisgICAgICAgIGRlbHRhID0gJ0dFVCAvZWNobyBIVFRQLzEu
MVxyXG5cclxuJworICAgICAgICBhZGRfY2hhbm5lbF9yZXF1ZXN0ID0gX2NyZWF0ZV9hZGRfY2hh
bm5lbF9yZXF1ZXN0X2ZyYW1lKAorICAgICAgICAgICAgY2hhbm5lbF9pZD0yLCBlbmNvZGluZz0x
LCBlbmNvZGVkX2hhbmRzaGFrZT1kZWx0YSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1
dF9ieXRlcyhhZGRfY2hhbm5lbF9yZXF1ZXN0KQorCisgICAgICAgIGZsb3dfY29udHJvbCA9IF9j
cmVhdGVfZmxvd19jb250cm9sX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoZWRfcXVvdGE9NikKKyAg
ICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhmbG93X2NvbnRyb2wpCisKKyAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9n
aWNhbF9mcmFtZShjaGFubmVsX2lkPTIsIG1lc3NhZ2U9J0hlbGxvJykpCisgICAgICAgIHJlcXVl
c3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJh
bWUoY2hhbm5lbF9pZD0xLCBtZXNzYWdlPSdHb29kYnllJykpCisgICAgICAgIHJlcXVlc3QuY29u
bmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hh
bm5lbF9pZD0yLCBtZXNzYWdlPSdHb29kYnllJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KG11eF9oYW5kbGVyLndhaXRfdW50aWxfZG9uZSh0aW1lb3V0PTIpKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoWydIZWxsbyddLCBkaXNwYXRjaGVyLmNoYW5uZWxfZXZlbnRzWzJdLm1lc3Nh
Z2VzKQorICAgICAgICBtZXNzYWdlcyA9IHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfd3JpdHRlbl9t
ZXNzYWdlcygyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihtZXNzYWdlcykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvJywgbWVzc2FnZXNbMF0pCisKKyAgICBkZWYg
dGVzdF9hZGRfY2hhbm5lbF9kZWx0YV9lbmNvZGluZ19vdmVycmlkZShzZWxmKToKKyAgICAgICAg
cmVxdWVzdCA9IF9jcmVhdGVfbW9ja19yZXF1ZXN0KCkKKyAgICAgICAgZGlzcGF0Y2hlciA9IF9N
dXhNb2NrRGlzcGF0Y2hlcigpCisgICAgICAgIG11eF9oYW5kbGVyID0gbXV4Ll9NdXhIYW5kbGVy
KHJlcXVlc3QsIGRpc3BhdGNoZXIpCisgICAgICAgIG11eF9oYW5kbGVyLnN0YXJ0KCkKKyAgICAg
ICAgbXV4X2hhbmRsZXIuYWRkX2NoYW5uZWxfc2xvdHMobXV4Ll9JTklUSUFMX05VTUJFUl9PRl9D
SEFOTkVMX1NMT1RTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXgu
X0lOSVRJQUxfUVVPVEFfRk9SX0NMSUVOVCkKKworICAgICAgICAjIE92ZXJyaWRlIFNlYy1XZWJT
b2NrZXQtUHJvdG9jb2wuCisgICAgICAgIGRlbHRhID0gKCdHRVQgL2VjaG8gSFRUUC8xLjFcclxu
JworICAgICAgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1Qcm90b2NvbDogeC1mb29cclxuJwor
ICAgICAgICAgICAgICAgICAnXHJcbicpCisgICAgICAgIGFkZF9jaGFubmVsX3JlcXVlc3QgPSBf
Y3JlYXRlX2FkZF9jaGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAgICAgICAgICBjaGFubmVsX2lk
PTIsIGVuY29kaW5nPTEsIGVuY29kZWRfaGFuZHNoYWtlPWRlbHRhKQorICAgICAgICByZXF1ZXN0
LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGFkZF9jaGFubmVsX3JlcXVlc3QpCisKKyAgICAgICAgZmxv
d19jb250cm9sID0gX2NyZWF0ZV9mbG93X2NvbnRyb2xfZnJhbWUoY2hhbm5lbF9pZD0yLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsZW5pc2hl
ZF9xdW90YT02KQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGZsb3dfY29u
dHJvbCkKKworICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAg
ICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MiwgbWVzc2FnZT0nSGVsbG8nKSkK
KyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVh
dGVfbG9naWNhbF9mcmFtZShjaGFubmVsX2lkPTEsIG1lc3NhZ2U9J0dvb2RieWUnKSkKKyAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9n
aWNhbF9mcmFtZShjaGFubmVsX2lkPTIsIG1lc3NhZ2U9J0dvb2RieWUnKSkKKworICAgICAgICBz
ZWxmLmFzc2VydFRydWUobXV4X2hhbmRsZXIud2FpdF91bnRpbF9kb25lKHRpbWVvdXQ9MikpCisK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ0hlbGxvJ10sIGRpc3BhdGNoZXIuY2hhbm5lbF9l
dmVudHNbMl0ubWVzc2FnZXMpCisgICAgICAgIG1lc3NhZ2VzID0gcmVxdWVzdC5jb25uZWN0aW9u
LmdldF93cml0dGVuX21lc3NhZ2VzKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVu
KG1lc3NhZ2VzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVsbG8nLCBtZXNzYWdlc1sw
XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneC1mb28nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpc3BhdGNoZXIuY2hhbm5lbF9ldmVudHNbMl0ucmVxdWVzdC53c19wcm90b2NvbCkK
KworICAgIGRlZiB0ZXN0X2FkZF9jaGFubmVsX2RlbHRhX2FmdGVyX2lkZW50aXR5KHNlbGYpOgor
ICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRj
aGVyID0gX011eE1vY2tEaXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011
eEhhbmRsZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQo
KQorICAgICAgICBtdXhfaGFuZGxlci5hZGRfY2hhbm5lbF9zbG90cyhtdXguX0lOSVRJQUxfTlVN
QkVSX09GX0NIQU5ORUxfU0xPVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG11eC5fSU5JVElBTF9RVU9UQV9GT1JfQ0xJRU5UKQorICAgICAgICAjIFNlYy1XZWJTb2Nr
ZXQtUHJvdG9jb2wgaXMgZGlmZmVyZW50IGZyb20gY2xpZW50J3Mgb3BlbmluZyBoYW5kc2hha2UK
KyAgICAgICAgIyBvZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbi4KKyAgICAgICAgIyBUT0RPKGJh
c2hpKTogUmVtb3ZlIFVwZ3JhZGUsIENvbm5lY3Rpb24sIFNlYy1XZWJTb2NrZXQtS2V5IGFuZAor
ICAgICAgICAjIFNlYy1XZWJTb2NrZXQtVmVyc2lvbi4KKyAgICAgICAgZW5jb2RlZF9oYW5kc2hh
a2UgPSAoCisgICAgICAgICAgICAnR0VUIC9lY2hvIEhUVFAvMS4xXHJcbicKKyAgICAgICAgICAg
ICdIb3N0OiBzZXJ2ZXIuZXhhbXBsZS5jb21cclxuJworICAgICAgICAgICAgJ1NlYy1XZWJTb2Nr
ZXQtUHJvdG9jb2w6IHgtZm9vXHJcbicKKyAgICAgICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRl
XHJcbicKKyAgICAgICAgICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nCisgICAg
ICAgICAgICAnXHJcbicpCisgICAgICAgIGFkZF9jaGFubmVsX3JlcXVlc3QgPSBfY3JlYXRlX2Fk
ZF9jaGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAgICAgICAgICBjaGFubmVsX2lkPTIsIGVuY29k
aW5nPTAsCisgICAgICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZT1lbmNvZGVkX2hhbmRzaGFrZSkK
KyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhhZGRfY2hhbm5lbF9yZXF1ZXN0
KQorCisgICAgICAgIGZsb3dfY29udHJvbCA9IF9jcmVhdGVfZmxvd19jb250cm9sX2ZyYW1lKGNo
YW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwbGVuaXNoZWRfcXVvdGE9NikKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1
dF9ieXRlcyhmbG93X2NvbnRyb2wpCisKKyAgICAgICAgZGVsdGEgPSAnR0VUIC9lY2hvIEhUVFAv
MS4xXHJcblxyXG4nCisgICAgICAgIGFkZF9jaGFubmVsX3JlcXVlc3QgPSBfY3JlYXRlX2FkZF9j
aGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAgICAgICAgICBjaGFubmVsX2lkPTMsIGVuY29kaW5n
PTEsIGVuY29kZWRfaGFuZHNoYWtlPWRlbHRhKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24u
cHV0X2J5dGVzKGFkZF9jaGFubmVsX3JlcXVlc3QpCisKKyAgICAgICAgZmxvd19jb250cm9sID0g
X2NyZWF0ZV9mbG93X2NvbnRyb2xfZnJhbWUoY2hhbm5lbF9pZD0zLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsZW5pc2hlZF9xdW90YT02KQor
ICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGZsb3dfY29udHJvbCkKKworICAg
ICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9s
b2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MiwgbWVzc2FnZT0nSGVsbG8nKSkKKyAgICAgICAgcmVx
dWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNhbF9m
cmFtZShjaGFubmVsX2lkPTMsIG1lc3NhZ2U9J1dvcmxkJykpCisgICAgICAgIHJlcXVlc3QuY29u
bmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hh
bm5lbF9pZD0xLCBtZXNzYWdlPSdHb29kYnllJykpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlv
bi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9p
ZD0yLCBtZXNzYWdlPSdHb29kYnllJykpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRf
Ynl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0zLCBt
ZXNzYWdlPSdHb29kYnllJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG11eF9oYW5kbGVy
LndhaXRfdW50aWxfZG9uZSh0aW1lb3V0PTIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
W10sIGRpc3BhdGNoZXIuY2hhbm5lbF9ldmVudHNbMV0ubWVzc2FnZXMpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoWydIZWxsbyddLCBkaXNwYXRjaGVyLmNoYW5uZWxfZXZlbnRzWzJdLm1lc3Nh
Z2VzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnV29ybGQnXSwgZGlzcGF0Y2hlci5jaGFu
bmVsX2V2ZW50c1szXS5tZXNzYWdlcykKKyAgICAgICAgIyBDaGFubmVsIDIKKyAgICAgICAgbWVz
c2FnZXMgPSByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X3dyaXR0ZW5fbWVzc2FnZXMoMikKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4obWVzc2FnZXMpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdIZWxsbycsIG1lc3NhZ2VzWzBdKQorICAgICAgICAjIENoYW5uZWwgMworICAgICAg
ICBtZXNzYWdlcyA9IHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfd3JpdHRlbl9tZXNzYWdlcygzKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihtZXNzYWdlcykpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ1dvcmxkJywgbWVzc2FnZXNbMF0pCisgICAgICAgICMgSGFuZHNoYWtlIGJh
c2Ugc2hvdWxkIGJlIHVwZGF0ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAg
ICAgICAneC1mb28nLAorICAgICAgICAgICAgbXV4X2hhbmRsZXIuX2hhbmRzaGFrZV9iYXNlLl9o
ZWFkZXJzWydTZWMtV2ViU29ja2V0LVByb3RvY29sJ10pCisKKyAgICBkZWYgdGVzdF9hZGRfY2hh
bm5lbF9kZWx0YV9yZW1vdmVfaGVhZGVyKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0
ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRjaGVyID0gX011eE1vY2tEaXNwYXRjaGVy
KCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011eEhhbmRsZXIocmVxdWVzdCwgZGlzcGF0
Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQoKQorICAgICAgICBtdXhfaGFuZGxlci5h
ZGRfY2hhbm5lbF9zbG90cyhtdXguX0lOSVRJQUxfTlVNQkVSX09GX0NIQU5ORUxfU0xPVFMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11eC5fSU5JVElBTF9RVU9UQV9G
T1JfQ0xJRU5UKQorICAgICAgICAjIE92ZXJyaWRlIGhhbmRzaGFrZSBkZWx0YSBiYXNlLgorICAg
ICAgICBlbmNvZGVkX2hhbmRzaGFrZSA9ICgKKyAgICAgICAgICAgICdHRVQgL2VjaG8gSFRUUC8x
LjFcclxuJworICAgICAgICAgICAgJ0hvc3Q6IHNlcnZlci5leGFtcGxlLmNvbVxyXG4nCisgICAg
ICAgICAgICAnU2VjLVdlYlNvY2tldC1Qcm90b2NvbDogeC1mb29cclxuJworICAgICAgICAgICAg
J0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAgICAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4
YW1wbGUuY29tXHJcbicKKyAgICAgICAgICAgICdcclxuJykKKyAgICAgICAgYWRkX2NoYW5uZWxf
cmVxdWVzdCA9IF9jcmVhdGVfYWRkX2NoYW5uZWxfcmVxdWVzdF9mcmFtZSgKKyAgICAgICAgICAg
IGNoYW5uZWxfaWQ9MiwgZW5jb2Rpbmc9MCwKKyAgICAgICAgICAgIGVuY29kZWRfaGFuZHNoYWtl
PWVuY29kZWRfaGFuZHNoYWtlKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVz
KGFkZF9jaGFubmVsX3JlcXVlc3QpCisKKyAgICAgICAgZmxvd19jb250cm9sID0gX2NyZWF0ZV9m
bG93X2NvbnRyb2xfZnJhbWUoY2hhbm5lbF9pZD0yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsZW5pc2hlZF9xdW90YT02KQorICAgICAgICBy
ZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGZsb3dfY29udHJvbCkKKworICAgICAgICAjIFJl
bW92ZSBTZWMtV2ViU29ja2V0LVByb3RvY29sIGhlYWRlci4KKyAgICAgICAgZGVsdGEgPSAoJ0dF
VCAvZWNobyBIVFRQLzEuMVxyXG4nCisgICAgICAgICAgICAgICAgICdTZWMtV2ViU29ja2V0LVBy
b3RvY29sOicKKyAgICAgICAgICAgICAgICAgJ1xyXG4nKQorICAgICAgICBhZGRfY2hhbm5lbF9y
ZXF1ZXN0ID0gX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1ZXN0X2ZyYW1lKAorICAgICAgICAgICAg
Y2hhbm5lbF9pZD0zLCBlbmNvZGluZz0xLCBlbmNvZGVkX2hhbmRzaGFrZT1kZWx0YSkKKyAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhhZGRfY2hhbm5lbF9yZXF1ZXN0KQorCisg
ICAgICAgIGZsb3dfY29udHJvbCA9IF9jcmVhdGVfZmxvd19jb250cm9sX2ZyYW1lKGNoYW5uZWxf
aWQ9MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVwbGVuaXNoZWRfcXVvdGE9NikKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRl
cyhmbG93X2NvbnRyb2wpCisKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygK
KyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNhbF9mcmFtZShjaGFubmVsX2lkPTIsIG1lc3NhZ2U9
J0hlbGxvJykpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAg
ICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0zLCBtZXNzYWdlPSdXb3JsZCcp
KQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2Ny
ZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MSwgbWVzc2FnZT0nR29vZGJ5ZScpKQorICAg
ICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9s
b2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MiwgbWVzc2FnZT0nR29vZGJ5ZScpKQorICAgICAgICBy
ZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2Fs
X2ZyYW1lKGNoYW5uZWxfaWQ9MywgbWVzc2FnZT0nR29vZGJ5ZScpKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShtdXhfaGFuZGxlci53YWl0X3VudGlsX2RvbmUodGltZW91dD0yKSkKKworICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBkaXNwYXRjaGVyLmNoYW5uZWxfZXZlbnRzWzFdLm1l
c3NhZ2VzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnSGVsbG8nXSwgZGlzcGF0Y2hlci5j
aGFubmVsX2V2ZW50c1syXS5tZXNzYWdlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ1dv
cmxkJ10sIGRpc3BhdGNoZXIuY2hhbm5lbF9ldmVudHNbM10ubWVzc2FnZXMpCisgICAgICAgICMg
Q2hhbm5lbCAyCisgICAgICAgIG1lc3NhZ2VzID0gcmVxdWVzdC5jb25uZWN0aW9uLmdldF93cml0
dGVuX21lc3NhZ2VzKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKG1lc3NhZ2Vz
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVsbG8nLCBtZXNzYWdlc1swXSkKKyAgICAg
ICAgIyBDaGFubmVsIDMKKyAgICAgICAgbWVzc2FnZXMgPSByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0
X3dyaXR0ZW5fbWVzc2FnZXMoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4obWVz
c2FnZXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdXb3JsZCcsIG1lc3NhZ2VzWzBdKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgJ3gtZm9vJywKKyAgICAgICAg
ICAgIGRpc3BhdGNoZXIuY2hhbm5lbF9ldmVudHNbMl0ucmVxdWVzdC53c19wcm90b2NvbCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICBk
aXNwYXRjaGVyLmNoYW5uZWxfZXZlbnRzWzNdLnJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBk
ZWYgdGVzdF9hZGRfY2hhbm5lbF9kZWx0YV9lbmNvZGluZ19wZXJtZXNzYWdlX2NvbXByZXNzKHNl
bGYpOgorICAgICAgICAjIEVuYWJsZSBwZXJtZXNzYWdlIGNvbXByZXNzIGV4dGVuc2lvbiBvbiB0
aGUgaW1wbGljaXRseSBvcGVuZWQgY2hhbm5lbC4KKyAgICAgICAgZXh0ZW5zaW9ucyA9IGNvbW1v
bi5wYXJzZV9leHRlbnNpb25zKAorICAgICAgICAgICAgJyVzOyBtZXRob2Q9ZGVmbGF0ZScgJSBj
b21tb24uUEVSTUVTU0FHRV9DT01QUkVTU0lPTl9FWFRFTlNJT04pCisgICAgICAgIHJlcXVlc3Qg
PSBfY3JlYXRlX21vY2tfcmVxdWVzdCgKKyAgICAgICAgICAgIGxvZ2ljYWxfY2hhbm5lbF9leHRl
bnNpb25zPWV4dGVuc2lvbnMpCisgICAgICAgIGRpc3BhdGNoZXIgPSBfTXV4TW9ja0Rpc3BhdGNo
ZXIoKQorICAgICAgICBtdXhfaGFuZGxlciA9IG11eC5fTXV4SGFuZGxlcihyZXF1ZXN0LCBkaXNw
YXRjaGVyKQorICAgICAgICBtdXhfaGFuZGxlci5zdGFydCgpCisgICAgICAgIG11eF9oYW5kbGVy
LmFkZF9jaGFubmVsX3Nsb3RzKG11eC5fSU5JVElBTF9OVU1CRVJfT0ZfQ0hBTk5FTF9TTE9UUywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV4Ll9JTklUSUFMX1FVT1RB
X0ZPUl9DTElFTlQpCisKKyAgICAgICAgZGVsdGEgPSAnR0VUIC9lY2hvIEhUVFAvMS4xXHJcblxy
XG4nCisgICAgICAgIGFkZF9jaGFubmVsX3JlcXVlc3QgPSBfY3JlYXRlX2FkZF9jaGFubmVsX3Jl
cXVlc3RfZnJhbWUoCisgICAgICAgICAgICBjaGFubmVsX2lkPTIsIGVuY29kaW5nPTEsIGVuY29k
ZWRfaGFuZHNoYWtlPWRlbHRhKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVz
KGFkZF9jaGFubmVsX3JlcXVlc3QpCisKKyAgICAgICAgZmxvd19jb250cm9sID0gX2NyZWF0ZV9m
bG93X2NvbnRyb2xfZnJhbWUoY2hhbm5lbF9pZD0yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsZW5pc2hlZF9xdW90YT0yMCkKKyAgICAgICAg
cmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhmbG93X2NvbnRyb2wpCisKKyAgICAgICAgIyBT
ZW5kIGNvbXByZXNzZWQgJ0hlbGxvJyBvbiBsb2dpY2FsIGNoYW5uZWwgMSBhbmQgMi4KKyAgICAg
ICAgY29tcHJlc3MgPSB6bGliLmNvbXByZXNzb2JqKAorICAgICAgICAgICAgemxpYi5aX0RFRkFV
TFRfQ09NUFJFU1NJT04sIHpsaWIuREVGTEFURUQsIC16bGliLk1BWF9XQklUUykKKyAgICAgICAg
Y29tcHJlc3NlZF9oZWxsbyA9IGNvbXByZXNzLmNvbXByZXNzKCdIZWxsbycpCisgICAgICAgIGNv
bXByZXNzZWRfaGVsbG8gKz0gY29tcHJlc3MuZmx1c2goemxpYi5aX1NZTkNfRkxVU0gpCisgICAg
ICAgIGNvbXByZXNzZWRfaGVsbG8gPSBjb21wcmVzc2VkX2hlbGxvWzotNF0KKworICAgICAgICBy
ZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2Fs
X2ZyYW1lKGNoYW5uZWxfaWQ9MSwgbWVzc2FnZT1jb21wcmVzc2VkX2hlbGxvLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJzdjE9VHJ1ZSkpCisgICAgICAgIHJlcXVlc3QuY29u
bmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hh
bm5lbF9pZD0yLCBtZXNzYWdlPWNvbXByZXNzZWRfaGVsbG8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcnN2MT1UcnVlKSkKKworICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24u
cHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9
MSwgbWVzc2FnZT0nR29vZGJ5ZScpKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5
dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MiwgbWVz
c2FnZT0nR29vZGJ5ZScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtdXhfaGFuZGxlci53
YWl0X3VudGlsX2RvbmUodGltZW91dD0yKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsn
SGVsbG8nXSwgZGlzcGF0Y2hlci5jaGFubmVsX2V2ZW50c1sxXS5tZXNzYWdlcykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChbJ0hlbGxvJ10sIGRpc3BhdGNoZXIuY2hhbm5lbF9ldmVudHNbMl0u
bWVzc2FnZXMpCisgICAgICAgICMgV3JpdHRlbiAnSGVsbG8ncyBzaG91bGQgYmUgY29tcHJlc3Nl
ZC4KKyAgICAgICAgbWVzc2FnZXMgPSByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X3dyaXR0ZW5fbWVz
c2FnZXMoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4obWVzc2FnZXMpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXByZXNzZWRfaGVsbG8sIG1lc3NhZ2VzWzBdKQorICAg
ICAgICBtZXNzYWdlcyA9IHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfd3JpdHRlbl9tZXNzYWdlcygy
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihtZXNzYWdlcykpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoY29tcHJlc3NlZF9oZWxsbywgbWVzc2FnZXNbMF0pCisKKyAgICBkZWYg
dGVzdF9hZGRfY2hhbm5lbF9kZWx0YV9lbmNvZGluZ19yZW1vdmVfZXh0ZW5zaW9ucyhzZWxmKToK
KyAgICAgICAgIyBFbmFibGUgcGVybWVzc2FnZSBjb21wcmVzcyBleHRlbnNpb24gb24gdGhlIGlt
cGxpY2l0bHkgb3BlbmVkIGNoYW5uZWwuCisgICAgICAgIGV4dGVuc2lvbnMgPSBjb21tb24ucGFy
c2VfZXh0ZW5zaW9ucygKKyAgICAgICAgICAgICclczsgbWV0aG9kPWRlZmxhdGUnICUgY29tbW9u
LlBFUk1FU1NBR0VfQ09NUFJFU1NJT05fRVhURU5TSU9OKQorICAgICAgICByZXF1ZXN0ID0gX2Ny
ZWF0ZV9tb2NrX3JlcXVlc3QoCisgICAgICAgICAgICBsb2dpY2FsX2NoYW5uZWxfZXh0ZW5zaW9u
cz1leHRlbnNpb25zKQorICAgICAgICBkaXNwYXRjaGVyID0gX011eE1vY2tEaXNwYXRjaGVyKCkK
KyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011eEhhbmRsZXIocmVxdWVzdCwgZGlzcGF0Y2hl
cikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQoKQorICAgICAgICBtdXhfaGFuZGxlci5hZGRf
Y2hhbm5lbF9zbG90cyhtdXguX0lOSVRJQUxfTlVNQkVSX09GX0NIQU5ORUxfU0xPVFMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11eC5fSU5JVElBTF9RVU9UQV9GT1Jf
Q0xJRU5UKQorCisgICAgICAgICMgUmVtb3ZlIHBlcm1lc3NhZ2UgY29tcHJlc3MgZXh0ZW5zaW9u
LgorICAgICAgICBkZWx0YSA9ICgnR0VUIC9lY2hvIEhUVFAvMS4xXHJcbicKKyAgICAgICAgICAg
ICAgICAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9uczpcclxuJworICAgICAgICAgICAgICAgICAn
XHJcbicpCisgICAgICAgIGFkZF9jaGFubmVsX3JlcXVlc3QgPSBfY3JlYXRlX2FkZF9jaGFubmVs
X3JlcXVlc3RfZnJhbWUoCisgICAgICAgICAgICBjaGFubmVsX2lkPTIsIGVuY29kaW5nPTEsIGVu
Y29kZWRfaGFuZHNoYWtlPWRlbHRhKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5
dGVzKGFkZF9jaGFubmVsX3JlcXVlc3QpCisKKyAgICAgICAgZmxvd19jb250cm9sID0gX2NyZWF0
ZV9mbG93X2NvbnRyb2xfZnJhbWUoY2hhbm5lbF9pZD0yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsZW5pc2hlZF9xdW90YT0yMCkKKyAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhmbG93X2NvbnRyb2wpCisKKyAgICAgICAg
IyBTZW5kIGNvbXByZXNzZWQgbWVzc2FnZSBvbiBsb2dpY2FsIGNoYW5uZWwgMi4gVGhlIG1lc3Nh
Z2Ugc2hvdWxkCisgICAgICAgICMgYmUgcmVqZWN0ZWQgKHNpbmNlIHJzdjEgaXMgc2V0KS4KKyAg
ICAgICAgY29tcHJlc3MgPSB6bGliLmNvbXByZXNzb2JqKAorICAgICAgICAgICAgemxpYi5aX0RF
RkFVTFRfQ09NUFJFU1NJT04sIHpsaWIuREVGTEFURUQsIC16bGliLk1BWF9XQklUUykKKyAgICAg
ICAgY29tcHJlc3NlZF9oZWxsbyA9IGNvbXByZXNzLmNvbXByZXNzKCdIZWxsbycpCisgICAgICAg
IGNvbXByZXNzZWRfaGVsbG8gKz0gY29tcHJlc3MuZmx1c2goemxpYi5aX1NZTkNfRkxVU0gpCisg
ICAgICAgIGNvbXByZXNzZWRfaGVsbG8gPSBjb21wcmVzc2VkX2hlbGxvWzotNF0KKyAgICAgICAg
cmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNh
bF9mcmFtZShjaGFubmVsX2lkPTIsIG1lc3NhZ2U9Y29tcHJlc3NlZF9oZWxsbywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByc3YxPVRydWUpKQorCisgICAgICAgIHJlcXVlc3Qu
Y29ubmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUo
Y2hhbm5lbF9pZD0xLCBtZXNzYWdlPSdHb29kYnllJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKG11eF9oYW5kbGVyLndhaXRfdW50aWxfZG9uZSh0aW1lb3V0PTIpKQorCisgICAgICAgIGRy
b3BfY2hhbm5lbCA9IG5leHQoCisgICAgICAgICAgICBiIGZvciBiIGluIHJlcXVlc3QuY29ubmVj
dGlvbi5nZXRfd3JpdHRlbl9jb250cm9sX2Jsb2NrcygpCisgICAgICAgICAgICBpZiBiLm9wY29k
ZSA9PSBtdXguX01VWF9PUENPREVfRFJPUF9DSEFOTkVMKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG11eC5fRFJPUF9DT0RFX05PUk1BTF9DTE9TVVJFLCBkcm9wX2NoYW5uZWwuZHJvcF9jb2Rl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGRyb3BfY2hhbm5lbC5jaGFubmVsX2lkKQor
ICAgICAgICAjIFVuc3VwcG9ydGVkRnJhbWVFeGNlcHRpb24gc2hvdWxkIGJlIHJhaXNlZCBvbiBs
b2dpY2FsIGNoYW5uZWwgMi4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZGlz
cGF0Y2hlci5jaGFubmVsX2V2ZW50c1syXS5leGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVuc3VwcG9ydGVkRnJhbWVFeGNlcHRpb24pKQorCisgICAgZGVmIHRl
c3RfYWRkX2NoYW5uZWxfaW52YWxpZF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9
IF9jcmVhdGVfbW9ja19yZXF1ZXN0KCkKKyAgICAgICAgZGlzcGF0Y2hlciA9IF9NdXhNb2NrRGlz
cGF0Y2hlcigpCisgICAgICAgIG11eF9oYW5kbGVyID0gbXV4Ll9NdXhIYW5kbGVyKHJlcXVlc3Qs
IGRpc3BhdGNoZXIpCisgICAgICAgIG11eF9oYW5kbGVyLnN0YXJ0KCkKKyAgICAgICAgbXV4X2hh
bmRsZXIuYWRkX2NoYW5uZWxfc2xvdHMobXV4Ll9JTklUSUFMX05VTUJFUl9PRl9DSEFOTkVMX1NM
T1RTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXguX0lOSVRJQUxf
UVVPVEFfRk9SX0NMSUVOVCkKKworICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZSA9IF9jcmVhdGVf
cmVxdWVzdF9oZWFkZXIocGF0aD0nL2VjaG8nKQorICAgICAgICBhZGRfY2hhbm5lbF9yZXF1ZXN0
ID0gX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1ZXN0X2ZyYW1lKAorICAgICAgICAgICAgY2hhbm5l
bF9pZD0yLCBlbmNvZGluZz0zLAorICAgICAgICAgICAgZW5jb2RlZF9oYW5kc2hha2U9ZW5jb2Rl
ZF9oYW5kc2hha2UpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoYWRkX2No
YW5uZWxfcmVxdWVzdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobXV4X2hhbmRsZXIud2Fp
dF91bnRpbF9kb25lKHRpbWVvdXQ9MikpCisKKyAgICAgICAgZHJvcF9jaGFubmVsID0gbmV4dCgK
KyAgICAgICAgICAgIGIgZm9yIGIgaW4gcmVxdWVzdC5jb25uZWN0aW9uLmdldF93cml0dGVuX2Nv
bnRyb2xfYmxvY2tzKCkKKyAgICAgICAgICAgIGlmIGIub3Bjb2RlID09IG11eC5fTVVYX09QQ09E
RV9EUk9QX0NIQU5ORUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXV4Ll9EUk9QX0NPREVf
VU5LTk9XTl9SRVFVRVNUX0VOQ09ESU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bf
Y2hhbm5lbC5kcm9wX2NvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9uLlNUQVRV
U19JTlRFUk5BTF9FTkRQT0lOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0LmNvbm5lY3Rpb24uc2VydmVyX2Nsb3NlX2NvZGUpCisKKyAgICBkZWYgdGVzdF9hZGRfY2hh
bm5lbF9pbmNvbXBsZXRlX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVh
dGVfbW9ja19yZXF1ZXN0KCkKKyAgICAgICAgZGlzcGF0Y2hlciA9IF9NdXhNb2NrRGlzcGF0Y2hl
cigpCisgICAgICAgIG11eF9oYW5kbGVyID0gbXV4Ll9NdXhIYW5kbGVyKHJlcXVlc3QsIGRpc3Bh
dGNoZXIpCisgICAgICAgIG11eF9oYW5kbGVyLnN0YXJ0KCkKKyAgICAgICAgbXV4X2hhbmRsZXIu
YWRkX2NoYW5uZWxfc2xvdHMobXV4Ll9JTklUSUFMX05VTUJFUl9PRl9DSEFOTkVMX1NMT1RTLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXguX0lOSVRJQUxfUVVPVEFf
Rk9SX0NMSUVOVCkKKworICAgICAgICBpbmNvbXBsZXRlX2VuY29kZWRfaGFuZHNoYWtlID0gJ0dF
VCAvZWNobyBIVFRQLzEuMScKKyAgICAgICAgYWRkX2NoYW5uZWxfcmVxdWVzdCA9IF9jcmVhdGVf
YWRkX2NoYW5uZWxfcmVxdWVzdF9mcmFtZSgKKyAgICAgICAgICAgIGNoYW5uZWxfaWQ9MiwgZW5j
b2Rpbmc9MCwKKyAgICAgICAgICAgIGVuY29kZWRfaGFuZHNoYWtlPWluY29tcGxldGVfZW5jb2Rl
ZF9oYW5kc2hha2UpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoYWRkX2No
YW5uZWxfcmVxdWVzdCkKKworICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAor
ICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MSwgbWVzc2FnZT0n
R29vZGJ5ZScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtdXhfaGFuZGxlci53YWl0X3Vu
dGlsX2RvbmUodGltZW91dD0yKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoMSBpbiBkaXNw
YXRjaGVyLmNoYW5uZWxfZXZlbnRzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IDIgaW4g
ZGlzcGF0Y2hlci5jaGFubmVsX2V2ZW50cykKKworICAgIGRlZiB0ZXN0X2FkZF9jaGFubmVsX2R1
cGxpY2F0ZV9jaGFubmVsX2lkKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9tb2Nr
X3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRjaGVyID0gX011eE1vY2tEaXNwYXRjaGVyKCkKKyAg
ICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011eEhhbmRsZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikK
KyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQoKQorICAgICAgICBtdXhfaGFuZGxlci5hZGRfY2hh
bm5lbF9zbG90cyhtdXguX0lOSVRJQUxfTlVNQkVSX09GX0NIQU5ORUxfU0xPVFMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11eC5fSU5JVElBTF9RVU9UQV9GT1JfQ0xJ
RU5UKQorCisgICAgICAgIGVuY29kZWRfaGFuZHNoYWtlID0gX2NyZWF0ZV9yZXF1ZXN0X2hlYWRl
cihwYXRoPScvZWNobycpCisgICAgICAgIGFkZF9jaGFubmVsX3JlcXVlc3QgPSBfY3JlYXRlX2Fk
ZF9jaGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAgICAgICAgICBjaGFubmVsX2lkPTIsIGVuY29k
aW5nPTAsCisgICAgICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZT1lbmNvZGVkX2hhbmRzaGFrZSkK
KyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhhZGRfY2hhbm5lbF9yZXF1ZXN0
KQorCisgICAgICAgIGVuY29kZWRfaGFuZHNoYWtlID0gX2NyZWF0ZV9yZXF1ZXN0X2hlYWRlcihw
YXRoPScvZWNobycpCisgICAgICAgIGFkZF9jaGFubmVsX3JlcXVlc3QgPSBfY3JlYXRlX2FkZF9j
aGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAgICAgICAgICBjaGFubmVsX2lkPTIsIGVuY29kaW5n
PTAsCisgICAgICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZT1lbmNvZGVkX2hhbmRzaGFrZSkKKyAg
ICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhhZGRfY2hhbm5lbF9yZXF1ZXN0KQor
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtdXhfaGFuZGxlci53YWl0X3VudGlsX2RvbmUodGlt
ZW91dD0yKSkKKworICAgICAgICBkcm9wX2NoYW5uZWwgPSBuZXh0KAorICAgICAgICAgICAgYiBm
b3IgYiBpbiByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X3dyaXR0ZW5fY29udHJvbF9ibG9ja3MoKQor
ICAgICAgICAgICAgaWYgYi5vcGNvZGUgPT0gbXV4Ll9NVVhfT1BDT0RFX0RST1BfQ0hBTk5FTCkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdXguX0RST1BfQ09ERV9DSEFOTkVMX0FMUkVBRFlf
RVhJU1RTLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BfY2hhbm5lbC5kcm9wX2NvZGUp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9uLlNUQVRVU19JTlRFUk5BTF9FTkRQT0lO
VF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24uc2Vy
dmVyX2Nsb3NlX2NvZGUpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX2Ryb3BfY2hhbm5lbChzZWxm
KToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfbW9ja19yZXF1ZXN0KCkKKyAgICAgICAgZGlz
cGF0Y2hlciA9IF9NdXhNb2NrRGlzcGF0Y2hlcigpCisgICAgICAgIG11eF9oYW5kbGVyID0gbXV4
Ll9NdXhIYW5kbGVyKHJlcXVlc3QsIGRpc3BhdGNoZXIpCisgICAgICAgIG11eF9oYW5kbGVyLnN0
YXJ0KCkKKyAgICAgICAgbXV4X2hhbmRsZXIuYWRkX2NoYW5uZWxfc2xvdHMobXV4Ll9JTklUSUFM
X05VTUJFUl9PRl9DSEFOTkVMX1NMT1RTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtdXguX0lOSVRJQUxfUVVPVEFfRk9SX0NMSUVOVCkKKworICAgICAgICBlbmNvZGVk
X2hhbmRzaGFrZSA9IF9jcmVhdGVfcmVxdWVzdF9oZWFkZXIocGF0aD0nL2VjaG8nKQorICAgICAg
ICBhZGRfY2hhbm5lbF9yZXF1ZXN0ID0gX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1ZXN0X2ZyYW1l
KAorICAgICAgICAgICAgY2hhbm5lbF9pZD0yLCBlbmNvZGluZz0wLAorICAgICAgICAgICAgZW5j
b2RlZF9oYW5kc2hha2U9ZW5jb2RlZF9oYW5kc2hha2UpCisgICAgICAgIHJlcXVlc3QuY29ubmVj
dGlvbi5wdXRfYnl0ZXMoYWRkX2NoYW5uZWxfcmVxdWVzdCkKKworICAgICAgICBkcm9wX2NoYW5u
ZWwgPSBfY3JlYXRlX2Ryb3BfY2hhbm5lbF9mcmFtZShjaGFubmVsX2lkPTIpCisgICAgICAgIHJl
cXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoZHJvcF9jaGFubmVsKQorCisgICAgICAgICMgVGVy
bWluYXRlIGltcGxpY2l0bHkgb3BlbmVkIGNoYW5uZWwuCisgICAgICAgIHJlcXVlc3QuY29ubmVj
dGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5l
bF9pZD0xLCBtZXNzYWdlPSdHb29kYnllJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG11
eF9oYW5kbGVyLndhaXRfdW50aWxfZG9uZSh0aW1lb3V0PTIpKQorCisgICAgICAgIGV4Y2VwdGlv
biA9IGRpc3BhdGNoZXIuY2hhbm5lbF9ldmVudHNbMl0uZXhjZXB0aW9uCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShleGNlcHRpb24uX19jbGFzc19fID09IENvbm5lY3Rpb25UZXJtaW5hdGVkRXhj
ZXB0aW9uKQorCisgICAgZGVmIHRlc3RfcmVjZWl2ZV9waW5nX2ZyYW1lKHNlbGYpOgorICAgICAg
ICByZXF1ZXN0ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRjaGVyID0g
X011eE1vY2tEaXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011eEhhbmRs
ZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQoKQorICAg
ICAgICBtdXhfaGFuZGxlci5hZGRfY2hhbm5lbF9zbG90cyhtdXguX0lOSVRJQUxfTlVNQkVSX09G
X0NIQU5ORUxfU0xPVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11
eC5fSU5JVElBTF9RVU9UQV9GT1JfQ0xJRU5UKQorCisgICAgICAgIGVuY29kZWRfaGFuZHNoYWtl
ID0gX2NyZWF0ZV9yZXF1ZXN0X2hlYWRlcihwYXRoPScvZWNobycpCisgICAgICAgIGFkZF9jaGFu
bmVsX3JlcXVlc3QgPSBfY3JlYXRlX2FkZF9jaGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAgICAg
ICAgICBjaGFubmVsX2lkPTIsIGVuY29kaW5nPTAsCisgICAgICAgICAgICBlbmNvZGVkX2hhbmRz
aGFrZT1lbmNvZGVkX2hhbmRzaGFrZSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9i
eXRlcyhhZGRfY2hhbm5lbF9yZXF1ZXN0KQorCisgICAgICAgIGZsb3dfY29udHJvbCA9IF9jcmVh
dGVfZmxvd19jb250cm9sX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoZWRfcXVvdGE9MTMpCisgICAg
ICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoZmxvd19jb250cm9sKQorCisgICAgICAg
IHBpbmdfZnJhbWUgPSBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9J0hlbGxvIFdvcmxk
IScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlPWNv
bW1vbi5PUENPREVfUElORykKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhw
aW5nX2ZyYW1lKQorCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoCisgICAg
ICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0xLCBtZXNzYWdlPSdHb29k
YnllJykpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAg
ICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0yLCBtZXNzYWdlPSdHb29kYnllJykp
CisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG11eF9oYW5kbGVyLndhaXRfdW50aWxfZG9uZSh0
aW1lb3V0PTIpKQorCisgICAgICAgIG1lc3NhZ2VzID0gcmVxdWVzdC5jb25uZWN0aW9uLmdldF93
cml0dGVuX2NvbnRyb2xfbWVzc2FnZXMoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21t
b24uT1BDT0RFX1BPTkcsIG1lc3NhZ2VzWzBdWydvcGNvZGUnXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnSGVsbG8gV29ybGQhJywgbWVzc2FnZXNbMF1bJ21lc3NhZ2UnXSkKKworICAgIGRl
ZiB0ZXN0X3JlY2VpdmVfZnJhZ21lbnRlZF9waW5nKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0g
X2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRjaGVyID0gX011eE1vY2tEaXNw
YXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011eEhhbmRsZXIocmVxdWVzdCwg
ZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQoKQorICAgICAgICBtdXhfaGFu
ZGxlci5hZGRfY2hhbm5lbF9zbG90cyhtdXguX0lOSVRJQUxfTlVNQkVSX09GX0NIQU5ORUxfU0xP
VFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11eC5fSU5JVElBTF9R
VU9UQV9GT1JfQ0xJRU5UKQorCisgICAgICAgIGVuY29kZWRfaGFuZHNoYWtlID0gX2NyZWF0ZV9y
ZXF1ZXN0X2hlYWRlcihwYXRoPScvZWNobycpCisgICAgICAgIGFkZF9jaGFubmVsX3JlcXVlc3Qg
PSBfY3JlYXRlX2FkZF9jaGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAgICAgICAgICBjaGFubmVs
X2lkPTIsIGVuY29kaW5nPTAsCisgICAgICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZT1lbmNvZGVk
X2hhbmRzaGFrZSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhhZGRfY2hh
bm5lbF9yZXF1ZXN0KQorCisgICAgICAgIGZsb3dfY29udHJvbCA9IF9jcmVhdGVfZmxvd19jb250
cm9sX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoZWRfcXVvdGE9MTMpCisgICAgICAgIHJlcXVlc3Qu
Y29ubmVjdGlvbi5wdXRfYnl0ZXMoZmxvd19jb250cm9sKQorCisgICAgICAgICMgU2VuZCBhIHBp
bmcgd2l0aCBtZXNzYWdlICdIZWxsbyB3b3JsZCEnIGluIHR3byBmcmFnbWVudGVkIGZyYW1lcy4K
KyAgICAgICAgcGluZ19mcmFtZTEgPSBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0y
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdI
ZWxsbyAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW49
RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29k
ZT1jb21tb24uT1BDT0RFX1BJTkcpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0
ZXMocGluZ19mcmFtZTEpCisgICAgICAgIHBpbmdfZnJhbWUyID0gX2NyZWF0ZV9sb2dpY2FsX2Zy
YW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWVzc2FnZT0nV29ybGQhJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmluPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wY29kZT1jb21tb24uT1BDT0RFX0NPTlRJTlVBVElPTikKKyAgICAgICAgcmVx
dWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhwaW5nX2ZyYW1lMikKKworICAgICAgICByZXF1ZXN0
LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1l
KGNoYW5uZWxfaWQ9MSwgbWVzc2FnZT0nR29vZGJ5ZScpKQorICAgICAgICByZXF1ZXN0LmNvbm5l
Y3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5u
ZWxfaWQ9MiwgbWVzc2FnZT0nR29vZGJ5ZScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSht
dXhfaGFuZGxlci53YWl0X3VudGlsX2RvbmUodGltZW91dD0yKSkKKworICAgICAgICBtZXNzYWdl
cyA9IHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfd3JpdHRlbl9jb250cm9sX21lc3NhZ2VzKDIpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9uLk9QQ09ERV9QT05HLCBtZXNzYWdlc1swXVsn
b3Bjb2RlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvIFdvcmxkIScsIG1lc3Nh
Z2VzWzBdWydtZXNzYWdlJ10pCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX2ZyYWdtZW50ZWRfcGlu
Z193aGlsZV9yZWNlaXZpbmdfZnJhZ21lbnRlZF9tZXNzYWdlKHNlbGYpOgorICAgICAgICByZXF1
ZXN0ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRjaGVyID0gX011eE1v
Y2tEaXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011eEhhbmRsZXIocmVx
dWVzdCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQoKQorICAgICAgICBt
dXhfaGFuZGxlci5hZGRfY2hhbm5lbF9zbG90cyhtdXguX0lOSVRJQUxfTlVNQkVSX09GX0NIQU5O
RUxfU0xPVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11eC5fSU5J
VElBTF9RVU9UQV9GT1JfQ0xJRU5UKQorCisgICAgICAgIGVuY29kZWRfaGFuZHNoYWtlID0gX2Ny
ZWF0ZV9yZXF1ZXN0X2hlYWRlcihwYXRoPScvZWNobycpCisgICAgICAgIGFkZF9jaGFubmVsX3Jl
cXVlc3QgPSBfY3JlYXRlX2FkZF9jaGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAgICAgICAgICBj
aGFubmVsX2lkPTIsIGVuY29kaW5nPTAsCisgICAgICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZT1l
bmNvZGVkX2hhbmRzaGFrZSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhh
ZGRfY2hhbm5lbF9yZXF1ZXN0KQorCisgICAgICAgIGZsb3dfY29udHJvbCA9IF9jcmVhdGVfZmxv
d19jb250cm9sX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoZWRfcXVvdGE9MTkpCisgICAgICAgIHJl
cXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoZmxvd19jb250cm9sKQorCisgICAgICAgICMgU2Vu
ZCBhIGZyYWdtZW50ZWQgZnJhbWUgb2YgbWVzc2FnZSAnSGVsbG8gJy4KKyAgICAgICAgaGVsbG8g
PSBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdIZWxsbyAnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaW49RmFsc2UpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlv
bi5wdXRfYnl0ZXMoaGVsbG8pCisKKyAgICAgICAgIyBCZWZvcmUgc2VuZGluZyB0aGUgbGFzdCBm
cmFnbWVudGVkIGZyYW1lIG9mIHRoZSBtZXNzYWdlLCBzZW5kIGEKKyAgICAgICAgIyBmcmFnbWVu
dGVkIHBpbmcuCisgICAgICAgIHBpbmcxID0gX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxf
aWQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0nUGkn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW49RmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZT1jb21tb24uT1BDT0RFX1BJ
TkcpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMocGluZzEpCisgICAgICAg
IHBpbmcyID0gX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0nbmchJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmluPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wY29kZT1jb21tb24uT1BDT0RFX0NPTlRJTlVBVElPTikKKyAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhwaW5nMikKKworICAgICAgICAjIFNlbmQg
dGhlIGxhc3QgZnJhZ21lbnRlZCBmcmFtZSBvZiB0aGUgbWVzc2FnZS4KKyAgICAgICAgd29ybGQg
PSBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdXb3JsZCEnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaW49VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3Bjb2RlPWNvbW1vbi5PUENPREVfQ09OVElOVUFUSU9OKQorICAgICAgICBy
ZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKHdvcmxkKQorCisgICAgICAgIHJlcXVlc3QuY29u
bmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hh
bm5lbF9pZD0xLCBtZXNzYWdlPSdHb29kYnllJykpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlv
bi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9p
ZD0yLCBtZXNzYWdlPSdHb29kYnllJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG11eF9o
YW5kbGVyLndhaXRfdW50aWxfZG9uZSh0aW1lb3V0PTIpKQorCisgICAgICAgIG1lc3NhZ2VzID0g
cmVxdWVzdC5jb25uZWN0aW9uLmdldF93cml0dGVuX21lc3NhZ2VzKDIpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoWydIZWxsbyBXb3JsZCEnXSwgbWVzc2FnZXMpCisgICAgICAgIGNvbnRyb2xf
bWVzc2FnZXMgPSByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X3dyaXR0ZW5fY29udHJvbF9tZXNzYWdl
cygyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1vbi5PUENPREVfUE9ORywgY29udHJv
bF9tZXNzYWdlc1swXVsnb3Bjb2RlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1Bpbmch
JywgY29udHJvbF9tZXNzYWdlc1swXVsnbWVzc2FnZSddKQorCisgICAgZGVmIHRlc3RfcmVjZWl2
ZV90d29fcGluZ193aGlsZV9yZWNlaXZpbmdfZnJhZ21lbnRlZF9tZXNzYWdlKHNlbGYpOgorICAg
ICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRjaGVy
ID0gX011eE1vY2tEaXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011eEhh
bmRsZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQoKQor
ICAgICAgICBtdXhfaGFuZGxlci5hZGRfY2hhbm5lbF9zbG90cyhtdXguX0lOSVRJQUxfTlVNQkVS
X09GX0NIQU5ORUxfU0xPVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG11eC5fSU5JVElBTF9RVU9UQV9GT1JfQ0xJRU5UKQorCisgICAgICAgIGVuY29kZWRfaGFuZHNo
YWtlID0gX2NyZWF0ZV9yZXF1ZXN0X2hlYWRlcihwYXRoPScvZWNobycpCisgICAgICAgIGFkZF9j
aGFubmVsX3JlcXVlc3QgPSBfY3JlYXRlX2FkZF9jaGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAg
ICAgICAgICBjaGFubmVsX2lkPTIsIGVuY29kaW5nPTAsCisgICAgICAgICAgICBlbmNvZGVkX2hh
bmRzaGFrZT1lbmNvZGVkX2hhbmRzaGFrZSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1
dF9ieXRlcyhhZGRfY2hhbm5lbF9yZXF1ZXN0KQorCisgICAgICAgIGZsb3dfY29udHJvbCA9IF9j
cmVhdGVfZmxvd19jb250cm9sX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoZWRfcXVvdGE9MjUpCisg
ICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoZmxvd19jb250cm9sKQorCisgICAg
ICAgICMgU2VuZCBhIGZyYWdtZW50ZWQgZnJhbWUgb2YgbWVzc2FnZSAnSGVsbG8gJy4KKyAgICAg
ICAgaGVsbG8gPSBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0yLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdIZWxsbyAnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW49RmFsc2UpCisgICAgICAgIHJlcXVlc3Qu
Y29ubmVjdGlvbi5wdXRfYnl0ZXMoaGVsbG8pCisKKyAgICAgICAgIyBCZWZvcmUgc2VuZGluZyB0
aGUgbGFzdCBmcmFnbWVudGVkIGZyYW1lIG9mIHRoZSBtZXNzYWdlLCBzZW5kIGEKKyAgICAgICAg
IyBmcmFnbWVudGVkIHBpbmcgYW5kIGEgbm9uLWZyYWdtZW50ZWQgcGluZy4KKyAgICAgICAgcGlu
ZzEgPSBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdQaScsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpbj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3Bjb2RlPWNvbW1vbi5PUENPREVfUElORykKKyAgICAgICAgcmVxdWVzdC5j
b25uZWN0aW9uLnB1dF9ieXRlcyhwaW5nMSkKKyAgICAgICAgcGluZzIgPSBfY3JlYXRlX2xvZ2lj
YWxfZnJhbWUoY2hhbm5lbF9pZD0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlPSduZyEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaW49VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2Rl
PWNvbW1vbi5PUENPREVfQ09OVElOVUFUSU9OKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24u
cHV0X2J5dGVzKHBpbmcyKQorICAgICAgICBwaW5nMyA9IF9jcmVhdGVfbG9naWNhbF9mcmFtZShj
aGFubmVsX2lkPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2U9J1BvbmchJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluPVRy
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZT1jb21tb24u
T1BDT0RFX1BJTkcpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMocGluZzMp
CisKKyAgICAgICAgIyBTZW5kIHRoZSBsYXN0IGZyYWdtZW50ZWQgZnJhbWUgb2YgdGhlIG1lc3Nh
Z2UuCisgICAgICAgIHdvcmxkID0gX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0nV29ybGQhJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluPVRydWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZT1jb21tb24uT1BDT0RFX0NPTlRJ
TlVBVElPTikKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyh3b3JsZCkKKwor
ICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0
ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MSwgbWVzc2FnZT0nR29vZGJ5ZScpKQorICAgICAg
ICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dp
Y2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MiwgbWVzc2FnZT0nR29vZGJ5ZScpKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShtdXhfaGFuZGxlci53YWl0X3VudGlsX2RvbmUodGltZW91dD0yKSkKKwor
ICAgICAgICBtZXNzYWdlcyA9IHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfd3JpdHRlbl9tZXNzYWdl
cygyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnSGVsbG8gV29ybGQhJ10sIG1lc3NhZ2Vz
KQorICAgICAgICBjb250cm9sX21lc3NhZ2VzID0gcmVxdWVzdC5jb25uZWN0aW9uLmdldF93cml0
dGVuX2NvbnRyb2xfbWVzc2FnZXMoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tb24u
T1BDT0RFX1BPTkcsIGNvbnRyb2xfbWVzc2FnZXNbMF1bJ29wY29kZSddKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdQaW5nIScsIGNvbnRyb2xfbWVzc2FnZXNbMF1bJ21lc3NhZ2UnXSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tb24uT1BDT0RFX1BPTkcsIGNvbnRyb2xfbWVzc2Fn
ZXNbMV1bJ29wY29kZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdQb25nIScsIGNvbnRy
b2xfbWVzc2FnZXNbMV1bJ21lc3NhZ2UnXSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfbWVzc2Fn
ZV93aGlsZV9yZWNlaXZpbmdfZnJhZ21lbnRlZF9waW5nKHNlbGYpOgorICAgICAgICByZXF1ZXN0
ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRjaGVyID0gX011eE1vY2tE
aXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011eEhhbmRsZXIocmVxdWVz
dCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQoKQorICAgICAgICBtdXhf
aGFuZGxlci5hZGRfY2hhbm5lbF9zbG90cyhtdXguX0lOSVRJQUxfTlVNQkVSX09GX0NIQU5ORUxf
U0xPVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11eC5fSU5JVElB
TF9RVU9UQV9GT1JfQ0xJRU5UKQorCisgICAgICAgIGVuY29kZWRfaGFuZHNoYWtlID0gX2NyZWF0
ZV9yZXF1ZXN0X2hlYWRlcihwYXRoPScvZWNobycpCisgICAgICAgIGFkZF9jaGFubmVsX3JlcXVl
c3QgPSBfY3JlYXRlX2FkZF9jaGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAgICAgICAgICBjaGFu
bmVsX2lkPTIsIGVuY29kaW5nPTAsCisgICAgICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZT1lbmNv
ZGVkX2hhbmRzaGFrZSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhhZGRf
Y2hhbm5lbF9yZXF1ZXN0KQorCisgICAgICAgIGZsb3dfY29udHJvbCA9IF9jcmVhdGVfZmxvd19j
b250cm9sX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaGVkX3F1b3RhPTE5KQorICAgICAgICByZXF1ZXN0
LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGZsb3dfY29udHJvbCkKKworICAgICAgICAjIFNlbmQgYSBm
cmFnbWVudGVkIHBpbmcuCisgICAgICAgIHBpbmcxID0gX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNo
YW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZT0nUGknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW49RmFsc2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZT1jb21tb24uT1BD
T0RFX1BJTkcpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMocGluZzEpCisK
KyAgICAgICAgIyBCZWZvcmUgc2VuZGluZyB0aGUgbGFzdCBmcmFnbWVudGVkIHBpbmcsIHNlbmQg
YSBtZXNzYWdlLgorICAgICAgICAjIFRoZSBsb2dpY2FsIGNoYW5uZWwgKDIpIHNob3VsZCBiZSBk
cm9wcGVkLgorICAgICAgICBtZXNzYWdlID0gX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxf
aWQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdI
ZWxsbyB3b3JsZCEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bj1UcnVlKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKG1lc3NhZ2UpCisK
KyAgICAgICAgIyBTZW5kIHRoZSBsYXN0IGZyYWdtZW50ZWQgZnJhbWUgb2YgdGhlIG1lc3NhZ2Uu
CisgICAgICAgIHBpbmcyID0gX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0nbmchJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluPVRydWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZT1jb21tb24uT1BDT0RFX0NPTlRJTlVBVElP
TikKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhwaW5nMikKKworICAgICAg
ICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dp
Y2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MSwgbWVzc2FnZT0nR29vZGJ5ZScpKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShtdXhfaGFuZGxlci53YWl0X3VudGlsX2RvbmUodGltZW91dD0yKSkKKwor
ICAgICAgICBkcm9wX2NoYW5uZWwgPSBuZXh0KAorICAgICAgICAgICAgYiBmb3IgYiBpbiByZXF1
ZXN0LmNvbm5lY3Rpb24uZ2V0X3dyaXR0ZW5fY29udHJvbF9ibG9ja3MoKQorICAgICAgICAgICAg
aWYgYi5vcGNvZGUgPT0gbXV4Ll9NVVhfT1BDT0RFX0RST1BfQ0hBTk5FTCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgyLCBkcm9wX2NoYW5uZWwuY2hhbm5lbF9pZCkKKyAgICAgICAgIyBObyBt
ZXNzYWdlIHNob3VsZCBiZSBzZW50IG9uIGNoYW5uZWwgMi4KKyAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoS2V5RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVj
dGlvbi5nZXRfd3JpdHRlbl9tZXNzYWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMikK
KyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfd3JpdHRlbl9jb250cm9sX21lc3NhZ2VzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAyKQorCisgICAgZGVmIHRlc3Rfc2VuZF9waW5nKHNl
bGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBk
aXNwYXRjaGVyID0gX011eE1vY2tEaXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBt
dXguX011eEhhbmRsZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIu
c3RhcnQoKQorICAgICAgICBtdXhfaGFuZGxlci5hZGRfY2hhbm5lbF9zbG90cyhtdXguX0lOSVRJ
QUxfTlVNQkVSX09GX0NIQU5ORUxfU0xPVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG11eC5fSU5JVElBTF9RVU9UQV9GT1JfQ0xJRU5UKQorCisgICAgICAgIGVuY29k
ZWRfaGFuZHNoYWtlID0gX2NyZWF0ZV9yZXF1ZXN0X2hlYWRlcihwYXRoPScvcGluZycpCisgICAg
ICAgIGFkZF9jaGFubmVsX3JlcXVlc3QgPSBfY3JlYXRlX2FkZF9jaGFubmVsX3JlcXVlc3RfZnJh
bWUoCisgICAgICAgICAgICBjaGFubmVsX2lkPTIsIGVuY29kaW5nPTAsCisgICAgICAgICAgICBl
bmNvZGVkX2hhbmRzaGFrZT1lbmNvZGVkX2hhbmRzaGFrZSkKKyAgICAgICAgcmVxdWVzdC5jb25u
ZWN0aW9uLnB1dF9ieXRlcyhhZGRfY2hhbm5lbF9yZXF1ZXN0KQorCisgICAgICAgIGZsb3dfY29u
dHJvbCA9IF9jcmVhdGVfZmxvd19jb250cm9sX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoZWRfcXVv
dGE9NikKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhmbG93X2NvbnRyb2wp
CisKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9j
cmVhdGVfbG9naWNhbF9mcmFtZShjaGFubmVsX2lkPTEsIG1lc3NhZ2U9J0dvb2RieWUnKSkKKwor
ICAgICAgICBzZWxmLmFzc2VydFRydWUobXV4X2hhbmRsZXIud2FpdF91bnRpbF9kb25lKHRpbWVv
dXQ9MikpCisKKyAgICAgICAgbWVzc2FnZXMgPSByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X3dyaXR0
ZW5fY29udHJvbF9tZXNzYWdlcygyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1vbi5P
UENPREVfUElORywgbWVzc2FnZXNbMF1bJ29wY29kZSddKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdQaW5nIScsIG1lc3NhZ2VzWzBdWydtZXNzYWdlJ10pCisKKyAgICBkZWYgdGVzdF9zZW5k
X2ZyYWdtZW50ZWRfcGluZyhzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfbW9ja19y
ZXF1ZXN0KCkKKyAgICAgICAgZGlzcGF0Y2hlciA9IF9NdXhNb2NrRGlzcGF0Y2hlcigpCisgICAg
ICAgIG11eF9oYW5kbGVyID0gbXV4Ll9NdXhIYW5kbGVyKHJlcXVlc3QsIGRpc3BhdGNoZXIpCisg
ICAgICAgIG11eF9oYW5kbGVyLnN0YXJ0KCkKKyAgICAgICAgbXV4X2hhbmRsZXIuYWRkX2NoYW5u
ZWxfc2xvdHMobXV4Ll9JTklUSUFMX05VTUJFUl9PRl9DSEFOTkVMX1NMT1RTLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXguX0lOSVRJQUxfUVVPVEFfRk9SX0NMSUVO
VCkKKworICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZSA9IF9jcmVhdGVfcmVxdWVzdF9oZWFkZXIo
cGF0aD0nL3BpbmcnKQorICAgICAgICBhZGRfY2hhbm5lbF9yZXF1ZXN0ID0gX2NyZWF0ZV9hZGRf
Y2hhbm5lbF9yZXF1ZXN0X2ZyYW1lKAorICAgICAgICAgICAgY2hhbm5lbF9pZD0yLCBlbmNvZGlu
Zz0wLAorICAgICAgICAgICAgZW5jb2RlZF9oYW5kc2hha2U9ZW5jb2RlZF9oYW5kc2hha2UpCisg
ICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoYWRkX2NoYW5uZWxfcmVxdWVzdCkK
KworICAgICAgICAjIFJlcGxlbmlzaCAzIGJ5dGVzLiBUaGlzIGlzbid0IGVub3VnaCB0byBzZW5k
IHRoZSB3aG9sZSBwaW5nIGZyYW1lCisgICAgICAgICMgYmVjYXVzZSB0aGUgZnJhbWUgd2lsbCBo
YXZlIDUgYnl0ZXMgbWVzc2FnZSgnUGluZyEnKS4gVGhlIGZyYW1lCisgICAgICAgICMgc2hvdWxk
IGJlIGZyYWdtZW50ZWQuCisgICAgICAgIGZsb3dfY29udHJvbCA9IF9jcmVhdGVfZmxvd19jb250
cm9sX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoZWRfcXVvdGE9MykKKyAgICAgICAgcmVxdWVzdC5j
b25uZWN0aW9uLnB1dF9ieXRlcyhmbG93X2NvbnRyb2wpCisKKyAgICAgICAgIyBXYWl0IHVudGls
IHRoZSB3b3JrZXIgaXMgYmxvY2tlZCBkdWUgdG8gc2VuZCBxdW90YSBzaG9ydGFnZS4KKyAgICAg
ICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgICMgUmVwbGVuaXNoIHJlbWFpbmluZyAyICsgMSBi
eXRlcyAoaW5jbHVkaW5nIGV4dHJhIGNvc3QpLgorICAgICAgICBmbG93X2NvbnRyb2wgPSBfY3Jl
YXRlX2Zsb3dfY29udHJvbF9mcmFtZShjaGFubmVsX2lkPTIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaGVkX3F1b3RhPTMpCisgICAg
ICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoZmxvd19jb250cm9sKQorCisgICAgICAg
IHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2lj
YWxfZnJhbWUoY2hhbm5lbF9pZD0xLCBtZXNzYWdlPSdHb29kYnllJykpCisKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKG11eF9oYW5kbGVyLndhaXRfdW50aWxfZG9uZSh0aW1lb3V0PTIpKQorCisg
ICAgICAgIG1lc3NhZ2VzID0gcmVxdWVzdC5jb25uZWN0aW9uLmdldF93cml0dGVuX2NvbnRyb2xf
bWVzc2FnZXMoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tb24uT1BDT0RFX1BJTkcs
IG1lc3NhZ2VzWzBdWydvcGNvZGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnUGluZyEn
LCBtZXNzYWdlc1swXVsnbWVzc2FnZSddKQorCisgICAgZGVmIHRlc3Rfc2VuZF9mcmFnbWVudGVk
X3Bpbmdfd2hpbGVfc2VuZGluZ19mcmFnbWVudGVkX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIHJl
cXVlc3QgPSBfY3JlYXRlX21vY2tfcmVxdWVzdCgpCisgICAgICAgIGRpc3BhdGNoZXIgPSBfTXV4
TW9ja0Rpc3BhdGNoZXIoKQorICAgICAgICBtdXhfaGFuZGxlciA9IG11eC5fTXV4SGFuZGxlcihy
ZXF1ZXN0LCBkaXNwYXRjaGVyKQorICAgICAgICBtdXhfaGFuZGxlci5zdGFydCgpCisgICAgICAg
IG11eF9oYW5kbGVyLmFkZF9jaGFubmVsX3Nsb3RzKG11eC5fSU5JVElBTF9OVU1CRVJfT0ZfQ0hB
Tk5FTF9TTE9UUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV4Ll9J
TklUSUFMX1FVT1RBX0ZPUl9DTElFTlQpCisKKyAgICAgICAgZW5jb2RlZF9oYW5kc2hha2UgPSBf
Y3JlYXRlX3JlcXVlc3RfaGVhZGVyKAorICAgICAgICAgICAgcGF0aD0nL3Bpbmdfd2hpbGVfaGVs
bG9fd29ybGQnKQorICAgICAgICBhZGRfY2hhbm5lbF9yZXF1ZXN0ID0gX2NyZWF0ZV9hZGRfY2hh
bm5lbF9yZXF1ZXN0X2ZyYW1lKAorICAgICAgICAgICAgY2hhbm5lbF9pZD0yLCBlbmNvZGluZz0w
LAorICAgICAgICAgICAgZW5jb2RlZF9oYW5kc2hha2U9ZW5jb2RlZF9oYW5kc2hha2UpCisgICAg
ICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoYWRkX2NoYW5uZWxfcmVxdWVzdCkKKwor
ICAgICAgICAjIEFwcGxpY2F0aW9uIHdpbGwgc2VuZDoKKyAgICAgICAgIyAtIHRleHQgbWVzc2Fn
ZSAnSGVsbG8gJyB3aXRoIGZpbj0wCisgICAgICAgICMgLSBwaW5nIHdpdGggJ1BpbmchJyBtZXNz
YWdlCisgICAgICAgICMgLSB0ZXh0IG1lc3NhZ2UgJ1dvcmxkIScgd2l0aCBmaW49MQorICAgICAg
ICAjIFJlcGxlbmlzaCAoNiArIDEpICsgKDIgKyAxKSBieXRlcyBzbyB0aGF0IHRoZSBwaW5nIHdp
bGwgYmUKKyAgICAgICAgIyBmcmFnbWVudGVkIG9uIHRoZSBsb2dpY2FsIGNoYW5uZWwuCisgICAg
ICAgIGZsb3dfY29udHJvbCA9IF9jcmVhdGVfZmxvd19jb250cm9sX2ZyYW1lKGNoYW5uZWxfaWQ9
MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVw
bGVuaXNoZWRfcXVvdGE9MTApCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMo
Zmxvd19jb250cm9sKQorCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICAjIFJlcGxl
bmlzaCByZW1haW5pbmcgMyArIDYgYnl0ZXMuCisgICAgICAgIGZsb3dfY29udHJvbCA9IF9jcmVh
dGVfZmxvd19jb250cm9sX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoZWRfcXVvdGE9OSkKKyAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhmbG93X2NvbnRyb2wpCisKKyAgICAgICAg
cmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNh
bF9mcmFtZShjaGFubmVsX2lkPTEsIG1lc3NhZ2U9J0dvb2RieWUnKSkKKworICAgICAgICBzZWxm
LmFzc2VydFRydWUobXV4X2hhbmRsZXIud2FpdF91bnRpbF9kb25lKHRpbWVvdXQ9MikpCisKKyAg
ICAgICAgbWVzc2FnZXMgPSByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X3dyaXR0ZW5fbWVzc2FnZXMo
MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ0hlbGxvIFdvcmxkISddLCBtZXNzYWdlcykK
KyAgICAgICAgY29udHJvbF9tZXNzYWdlcyA9IHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfd3JpdHRl
bl9jb250cm9sX21lc3NhZ2VzKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9uLk9Q
Q09ERV9QSU5HLCBjb250cm9sX21lc3NhZ2VzWzBdWydvcGNvZGUnXSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnUGluZyEnLCBjb250cm9sX21lc3NhZ2VzWzBdWydtZXNzYWdlJ10pCisKKyAg
ICBkZWYgdGVzdF9zZW5kX2ZyYWdtZW50ZWRfdHdvX3Bpbmdfd2hpbGVfc2VuZGluZ19mcmFnbWVu
dGVkX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX21vY2tfcmVxdWVz
dCgpCisgICAgICAgIGRpc3BhdGNoZXIgPSBfTXV4TW9ja0Rpc3BhdGNoZXIoKQorICAgICAgICBt
dXhfaGFuZGxlciA9IG11eC5fTXV4SGFuZGxlcihyZXF1ZXN0LCBkaXNwYXRjaGVyKQorICAgICAg
ICBtdXhfaGFuZGxlci5zdGFydCgpCisgICAgICAgIG11eF9oYW5kbGVyLmFkZF9jaGFubmVsX3Ns
b3RzKG11eC5fSU5JVElBTF9OVU1CRVJfT0ZfQ0hBTk5FTF9TTE9UUywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbXV4Ll9JTklUSUFMX1FVT1RBX0ZPUl9DTElFTlQpCisK
KyAgICAgICAgZW5jb2RlZF9oYW5kc2hha2UgPSBfY3JlYXRlX3JlcXVlc3RfaGVhZGVyKAorICAg
ICAgICAgICAgcGF0aD0nL3R3b19waW5nX3doaWxlX2hlbGxvX3dvcmxkJykKKyAgICAgICAgYWRk
X2NoYW5uZWxfcmVxdWVzdCA9IF9jcmVhdGVfYWRkX2NoYW5uZWxfcmVxdWVzdF9mcmFtZSgKKyAg
ICAgICAgICAgIGNoYW5uZWxfaWQ9MiwgZW5jb2Rpbmc9MCwKKyAgICAgICAgICAgIGVuY29kZWRf
aGFuZHNoYWtlPWVuY29kZWRfaGFuZHNoYWtlKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24u
cHV0X2J5dGVzKGFkZF9jaGFubmVsX3JlcXVlc3QpCisKKyAgICAgICAgIyBBcHBsaWNhdGlvbiB3
aWxsIHNlbmQ6CisgICAgICAgICMgLSB0ZXh0IG1lc3NhZ2UgJ0hlbGxvICcgd2l0aCBmaW49MAor
ICAgICAgICAjIC0gcGluZyB3aXRoICdQaW5nIScgbWVzc2FnZQorICAgICAgICAjIC0gcGluZyB3
aXRoICdQb25nIScgbWVzc2FnZQorICAgICAgICAjIC0gdGV4dCBtZXNzYWdlICdXb3JsZCEnIHdp
dGggZmluPTEKKyAgICAgICAgIyBSZXBsZW5pc2ggKDYgKyAxKSArICgyICsgMSkgYnl0ZXMgc28g
dGhhdCB0aGUgZmlyc3QgcGluZyB3aWxsIGJlCisgICAgICAgICMgZnJhZ21lbnRlZCBvbiB0aGUg
bG9naWNhbCBjaGFubmVsLgorICAgICAgICBmbG93X2NvbnRyb2wgPSBfY3JlYXRlX2Zsb3dfY29u
dHJvbF9mcmFtZShjaGFubmVsX2lkPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaGVkX3F1b3RhPTEwKQorICAgICAgICByZXF1ZXN0
LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGZsb3dfY29udHJvbCkKKworICAgICAgICB0aW1lLnNsZWVw
KDEpCisKKyAgICAgICAgIyBSZXBsZW5pc2ggcmVtYWluaW5nIDMgKyAoNSArIDEpICsgNiBieXRl
cy4gVGhlIHNlY29uZCBwaW5nIHdvbid0CisgICAgICAgICMgYmUgZnJhZ21lbnRlZCBvbiB0aGUg
bG9naWNhbCBjaGFubmVsLgorICAgICAgICBmbG93X2NvbnRyb2wgPSBfY3JlYXRlX2Zsb3dfY29u
dHJvbF9mcmFtZShjaGFubmVsX2lkPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaGVkX3F1b3RhPTE1KQorICAgICAgICByZXF1ZXN0
LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGZsb3dfY29udHJvbCkKKworICAgICAgICByZXF1ZXN0LmNv
bm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNo
YW5uZWxfaWQ9MSwgbWVzc2FnZT0nR29vZGJ5ZScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShtdXhfaGFuZGxlci53YWl0X3VudGlsX2RvbmUodGltZW91dD0yKSkKKworICAgICAgICBtZXNz
YWdlcyA9IHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfd3JpdHRlbl9tZXNzYWdlcygyKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKFsnSGVsbG8gV29ybGQhJ10sIG1lc3NhZ2VzKQorICAgICAgICBj
b250cm9sX21lc3NhZ2VzID0gcmVxdWVzdC5jb25uZWN0aW9uLmdldF93cml0dGVuX2NvbnRyb2xf
bWVzc2FnZXMoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tb24uT1BDT0RFX1BJTkcs
IGNvbnRyb2xfbWVzc2FnZXNbMF1bJ29wY29kZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdQaW5nIScsIGNvbnRyb2xfbWVzc2FnZXNbMF1bJ21lc3NhZ2UnXSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChjb21tb24uT1BDT0RFX1BJTkcsIGNvbnRyb2xfbWVzc2FnZXNbMV1bJ29wY29k
ZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdQb25nIScsIGNvbnRyb2xfbWVzc2FnZXNb
MV1bJ21lc3NhZ2UnXSkKKworICAgIGRlZiB0ZXN0X3NlbmRfZHJvcF9jaGFubmVsKHNlbGYpOgor
ICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRj
aGVyID0gX011eE1vY2tEaXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011
eEhhbmRsZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQo
KQorCisgICAgICAgICMgRHJvcENoYW5uZWwgZm9yIGNoYW5uZWwgaWQgMSB3aGljaCBkb2Vzbid0
IGhhdmUgcmVhc29uLgorICAgICAgICBmcmFtZSA9IGNyZWF0ZV9iaW5hcnlfZnJhbWUoJ1x4MDBc
eDYwXHgwMVx4MDAnLCBtYXNrPVRydWUpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRf
Ynl0ZXMoZnJhbWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG11eF9oYW5kbGVyLndhaXRf
dW50aWxfZG9uZSh0aW1lb3V0PTIpKQorCisgICAgICAgIGRyb3BfY2hhbm5lbCA9IG5leHQoCisg
ICAgICAgICAgICBiIGZvciBiIGluIHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfd3JpdHRlbl9jb250
cm9sX2Jsb2NrcygpCisgICAgICAgICAgICBpZiBiLm9wY29kZSA9PSBtdXguX01VWF9PUENPREVf
RFJPUF9DSEFOTkVMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG11eC5fRFJPUF9DT0RFX0FD
S05PV0xFREdFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wX2NoYW5uZWwuZHJvcF9j
b2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGRyb3BfY2hhbm5lbC5jaGFubmVsX2lk
KQorCisgICAgZGVmIHRlc3RfdHdvX2Zsb3dfY29udHJvbChzZWxmKToKKyAgICAgICAgcmVxdWVz
dCA9IF9jcmVhdGVfbW9ja19yZXF1ZXN0KCkKKyAgICAgICAgZGlzcGF0Y2hlciA9IF9NdXhNb2Nr
RGlzcGF0Y2hlcigpCisgICAgICAgIG11eF9oYW5kbGVyID0gbXV4Ll9NdXhIYW5kbGVyKHJlcXVl
c3QsIGRpc3BhdGNoZXIpCisgICAgICAgIG11eF9oYW5kbGVyLnN0YXJ0KCkKKyAgICAgICAgbXV4
X2hhbmRsZXIuYWRkX2NoYW5uZWxfc2xvdHMobXV4Ll9JTklUSUFMX05VTUJFUl9PRl9DSEFOTkVM
X1NMT1RTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXguX0lOSVRJ
QUxfUVVPVEFfRk9SX0NMSUVOVCkKKworICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZSA9IF9jcmVh
dGVfcmVxdWVzdF9oZWFkZXIocGF0aD0nL2VjaG8nKQorICAgICAgICBhZGRfY2hhbm5lbF9yZXF1
ZXN0ID0gX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1ZXN0X2ZyYW1lKAorICAgICAgICAgICAgY2hh
bm5lbF9pZD0yLCBlbmNvZGluZz0wLAorICAgICAgICAgICAgZW5jb2RlZF9oYW5kc2hha2U9ZW5j
b2RlZF9oYW5kc2hha2UpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoYWRk
X2NoYW5uZWxfcmVxdWVzdCkKKworICAgICAgICAjIFJlcGxlbmlzaCA1IGJ5dGVzLgorICAgICAg
ICBmbG93X2NvbnRyb2wgPSBfY3JlYXRlX2Zsb3dfY29udHJvbF9mcmFtZShjaGFubmVsX2lkPTIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxl
bmlzaGVkX3F1b3RhPTUpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoZmxv
d19jb250cm9sKQorCisgICAgICAgICMgU2VuZCAxMCBieXRlcy4gVGhlIHNlcnZlciB3aWxsIHRy
eSBlY2hvIGJhY2sgMTAgYnl0ZXMuCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0
ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0yLCBtZXNz
YWdlPSdIZWxsb1dvcmxkJykpCisKKyAgICAgICAgIyBSZXBsZW5pc2ggNSArIDEgKHBlci1tZXNz
YWdlIGV4dHJhIGNvc3QpIGJ5dGVzLgorICAgICAgICBmbG93X2NvbnRyb2wgPSBfY3JlYXRlX2Zs
b3dfY29udHJvbF9mcmFtZShjaGFubmVsX2lkPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaGVkX3F1b3RhPTYpCisgICAgICAgIHJl
cXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoZmxvd19jb250cm9sKQorCisgICAgICAgIHJlcXVl
c3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJh
bWUoY2hhbm5lbF9pZD0xLCBtZXNzYWdlPSdHb29kYnllJykpCisgICAgICAgIHJlcXVlc3QuY29u
bmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hh
bm5lbF9pZD0yLCBtZXNzYWdlPSdHb29kYnllJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KG11eF9oYW5kbGVyLndhaXRfdW50aWxfZG9uZSh0aW1lb3V0PTIpKQorCisgICAgICAgIG1lc3Nh
Z2VzID0gcmVxdWVzdC5jb25uZWN0aW9uLmdldF93cml0dGVuX21lc3NhZ2VzKDIpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoWydIZWxsb1dvcmxkJ10sIG1lc3NhZ2VzKQorICAgICAgICByZWNl
aXZlZF9mbG93X2NvbnRyb2xzID0gWworICAgICAgICAgICAgYiBmb3IgYiBpbiByZXF1ZXN0LmNv
bm5lY3Rpb24uZ2V0X3dyaXR0ZW5fY29udHJvbF9ibG9ja3MoKQorICAgICAgICAgICAgaWYgYi5v
cGNvZGUgPT0gbXV4Ll9NVVhfT1BDT0RFX0ZMT1dfQ09OVFJPTCBhbmQgYi5jaGFubmVsX2lkID09
IDJdCisgICAgICAgICMgUmVwbGVuaXNobWVudCBmb3IgJ0hlbGxvV29ybGQnICsgMQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKDExLCByZWNlaXZlZF9mbG93X2NvbnRyb2xzWzBdLnNlbmRfcXVv
dGEpCisgICAgICAgICMgUmVwbGVuaXNobWVudCBmb3IgJ0dvb2RieWUnICsgMQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKDgsIHJlY2VpdmVkX2Zsb3dfY29udHJvbHNbMV0uc2VuZF9xdW90YSkK
KworICAgIGRlZiB0ZXN0X25vX3NlbmRfcXVvdGFfb25fc2VydmVyKHNlbGYpOgorICAgICAgICBy
ZXF1ZXN0ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRjaGVyID0gX011
eE1vY2tEaXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011eEhhbmRsZXIo
cmVxdWVzdCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQoKQorICAgICAg
ICBtdXhfaGFuZGxlci5hZGRfY2hhbm5lbF9zbG90cyhtdXguX0lOSVRJQUxfTlVNQkVSX09GX0NI
QU5ORUxfU0xPVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11eC5f
SU5JVElBTF9RVU9UQV9GT1JfQ0xJRU5UKQorCisgICAgICAgIGVuY29kZWRfaGFuZHNoYWtlID0g
X2NyZWF0ZV9yZXF1ZXN0X2hlYWRlcihwYXRoPScvZWNobycpCisgICAgICAgIGFkZF9jaGFubmVs
X3JlcXVlc3QgPSBfY3JlYXRlX2FkZF9jaGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAgICAgICAg
ICBjaGFubmVsX2lkPTIsIGVuY29kaW5nPTAsCisgICAgICAgICAgICBlbmNvZGVkX2hhbmRzaGFr
ZT1lbmNvZGVkX2hhbmRzaGFrZSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRl
cyhhZGRfY2hhbm5lbF9yZXF1ZXN0KQorCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRf
Ynl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0yLCBt
ZXNzYWdlPSdIZWxsb1dvcmxkJykpCisKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9i
eXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNhbF9mcmFtZShjaGFubmVsX2lkPTEsIG1l
c3NhZ2U9J0dvb2RieWUnKSkKKworICAgICAgICAjIEp1c3Qgd2FpdCBmb3IgMSBzZWMgc28gdGhh
dCB0aGUgc2VydmVyIGF0dGVtcHRzIHRvIGVjaG8gYmFjaworICAgICAgICAjICdIZWxsb1dvcmxk
Jy4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtdXhfaGFuZGxlci53YWl0X3VudGlsX2RvbmUo
dGltZW91dD0xKSkKKworICAgICAgICAjIE5vIG1lc3NhZ2Ugc2hvdWxkIGJlIHNlbnQgb24gY2hh
bm5lbCAyLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLmdldF93cml0dGVuX21lc3NhZ2VzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAyKQorCisgICAgZGVmIHRlc3Rfbm9fc2VuZF9xdW90
YV9vbl9zZXJ2ZXJfZm9yX3Blcm1lc3NhZ2VfZXh0cmFfY29zdChzZWxmKToKKyAgICAgICAgcmVx
dWVzdCA9IF9jcmVhdGVfbW9ja19yZXF1ZXN0KCkKKyAgICAgICAgZGlzcGF0Y2hlciA9IF9NdXhN
b2NrRGlzcGF0Y2hlcigpCisgICAgICAgIG11eF9oYW5kbGVyID0gbXV4Ll9NdXhIYW5kbGVyKHJl
cXVlc3QsIGRpc3BhdGNoZXIpCisgICAgICAgIG11eF9oYW5kbGVyLnN0YXJ0KCkKKyAgICAgICAg
bXV4X2hhbmRsZXIuYWRkX2NoYW5uZWxfc2xvdHMobXV4Ll9JTklUSUFMX05VTUJFUl9PRl9DSEFO
TkVMX1NMT1RTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXguX0lO
SVRJQUxfUVVPVEFfRk9SX0NMSUVOVCkKKworICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZSA9IF9j
cmVhdGVfcmVxdWVzdF9oZWFkZXIocGF0aD0nL2VjaG8nKQorICAgICAgICBhZGRfY2hhbm5lbF9y
ZXF1ZXN0ID0gX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1ZXN0X2ZyYW1lKAorICAgICAgICAgICAg
Y2hhbm5lbF9pZD0yLCBlbmNvZGluZz0wLAorICAgICAgICAgICAgZW5jb2RlZF9oYW5kc2hha2U9
ZW5jb2RlZF9oYW5kc2hha2UpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMo
YWRkX2NoYW5uZWxfcmVxdWVzdCkKKworICAgICAgICBmbG93X2NvbnRyb2wgPSBfY3JlYXRlX2Zs
b3dfY29udHJvbF9mcmFtZShjaGFubmVsX2lkPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaGVkX3F1b3RhPTYpCisgICAgICAgIHJl
cXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoZmxvd19jb250cm9sKQorICAgICAgICByZXF1ZXN0
LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1l
KGNoYW5uZWxfaWQ9MiwgbWVzc2FnZT0nSGVsbG8nKSkKKyAgICAgICAgIyBSZXBsZW5pc2ggb25s
eSBsZW4oJ1dvcmxkJykgYnl0ZXMuCisgICAgICAgIGZsb3dfY29udHJvbCA9IF9jcmVhdGVfZmxv
d19jb250cm9sX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoZWRfcXVvdGE9NSkKKyAgICAgICAgcmVx
dWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhmbG93X2NvbnRyb2wpCisgICAgICAgICMgU2VydmVy
IHNob3VsZCBub3QgY2FsbGJhY2sgZm9yIHRoaXMgbWVzc2FnZS4KKyAgICAgICAgcmVxdWVzdC5j
b25uZWN0aW9uLnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNhbF9mcmFtZShj
aGFubmVsX2lkPTIsIG1lc3NhZ2U9J1dvcmxkJykpCisKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0
aW9uLnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNhbF9mcmFtZShjaGFubmVs
X2lkPTEsIG1lc3NhZ2U9J0dvb2RieWUnKSkKKworICAgICAgICAjIEp1c3Qgd2FpdCBmb3IgMSBz
ZWMgc28gdGhhdCB0aGUgc2VydmVyIGF0dGVtcHRzIHRvIGVjaG8gYmFjaworICAgICAgICAjICdX
b3JsZCcuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobXV4X2hhbmRsZXIud2FpdF91bnRpbF9k
b25lKHRpbWVvdXQ9MSkpCisKKyAgICAgICAgIyBPbmx5IG9uZSBtZXNzYWdlIHNob3VsZCBiZSBz
ZW50IG9uIGNoYW5uZWwgMi4KKyAgICAgICAgbWVzc2FnZXMgPSByZXF1ZXN0LmNvbm5lY3Rpb24u
Z2V0X3dyaXR0ZW5fbWVzc2FnZXMoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ0hlbGxv
J10sIG1lc3NhZ2VzKQorCisgICAgZGVmIHRlc3RfcXVvdGFfdmlvbGF0aW9uX2J5X2NsaWVudChz
ZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfbW9ja19yZXF1ZXN0KCkKKyAgICAgICAg
ZGlzcGF0Y2hlciA9IF9NdXhNb2NrRGlzcGF0Y2hlcigpCisgICAgICAgIG11eF9oYW5kbGVyID0g
bXV4Ll9NdXhIYW5kbGVyKHJlcXVlc3QsIGRpc3BhdGNoZXIpCisgICAgICAgIG11eF9oYW5kbGVy
LnN0YXJ0KCkKKyAgICAgICAgbXV4X2hhbmRsZXIuYWRkX2NoYW5uZWxfc2xvdHMobXV4Ll9JTklU
SUFMX05VTUJFUl9PRl9DSEFOTkVMX1NMT1RTLCAwKQorCisgICAgICAgIGVuY29kZWRfaGFuZHNo
YWtlID0gX2NyZWF0ZV9yZXF1ZXN0X2hlYWRlcihwYXRoPScvZWNobycpCisgICAgICAgIGFkZF9j
aGFubmVsX3JlcXVlc3QgPSBfY3JlYXRlX2FkZF9jaGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAg
ICAgICAgICBjaGFubmVsX2lkPTIsIGVuY29kaW5nPTAsCisgICAgICAgICAgICBlbmNvZGVkX2hh
bmRzaGFrZT1lbmNvZGVkX2hhbmRzaGFrZSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1
dF9ieXRlcyhhZGRfY2hhbm5lbF9yZXF1ZXN0KQorCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlv
bi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9p
ZD0yLCBtZXNzYWdlPSdIZWxsb1dvcmxkJykpCisKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9u
LnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNhbF9mcmFtZShjaGFubmVsX2lk
PTEsIG1lc3NhZ2U9J0dvb2RieWUnKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobXV4X2hh
bmRsZXIud2FpdF91bnRpbF9kb25lKHRpbWVvdXQ9MikpCisKKyAgICAgICAgY29udHJvbF9ibG9j
a3MgPSByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X3dyaXR0ZW5fY29udHJvbF9ibG9ja3MoKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKDUsIGxlbihjb250cm9sX2Jsb2NrcykpCisgICAgICAgIGRy
b3BfY2hhbm5lbCA9IG5leHQoCisgICAgICAgICAgICBiIGZvciBiIGluIGNvbnRyb2xfYmxvY2tz
CisgICAgICAgICAgICBpZiBiLm9wY29kZSA9PSBtdXguX01VWF9PUENPREVfRFJPUF9DSEFOTkVM
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG11eC5fRFJPUF9DT0RFX1NFTkRfUVVPVEFfVklP
TEFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BfY2hhbm5lbC5kcm9wX2NvZGUp
CisKKyAgICBkZWYgdGVzdF9jb25zdW1lX3F1b3RhX2VtcHR5X21lc3NhZ2Uoc2VsZik6CisgICAg
ICAgIHJlcXVlc3QgPSBfY3JlYXRlX21vY2tfcmVxdWVzdCgpCisgICAgICAgIGRpc3BhdGNoZXIg
PSBfTXV4TW9ja0Rpc3BhdGNoZXIoKQorICAgICAgICBtdXhfaGFuZGxlciA9IG11eC5fTXV4SGFu
ZGxlcihyZXF1ZXN0LCBkaXNwYXRjaGVyKQorICAgICAgICBtdXhfaGFuZGxlci5zdGFydCgpCisg
ICAgICAgICMgQ2xpZW50IGhhcyAxIGJ5dGUgcXVvdGEuCisgICAgICAgIG11eF9oYW5kbGVyLmFk
ZF9jaGFubmVsX3Nsb3RzKG11eC5fSU5JVElBTF9OVU1CRVJfT0ZfQ0hBTk5FTF9TTE9UUywgMSkK
KworICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZSA9IF9jcmVhdGVfcmVxdWVzdF9oZWFkZXIocGF0
aD0nL2VjaG8nKQorICAgICAgICBhZGRfY2hhbm5lbF9yZXF1ZXN0ID0gX2NyZWF0ZV9hZGRfY2hh
bm5lbF9yZXF1ZXN0X2ZyYW1lKAorICAgICAgICAgICAgY2hhbm5lbF9pZD0yLCBlbmNvZGluZz0w
LAorICAgICAgICAgICAgZW5jb2RlZF9oYW5kc2hha2U9ZW5jb2RlZF9oYW5kc2hha2UpCisgICAg
ICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoYWRkX2NoYW5uZWxfcmVxdWVzdCkKKwor
ICAgICAgICBmbG93X2NvbnRyb2wgPSBfY3JlYXRlX2Zsb3dfY29udHJvbF9mcmFtZShjaGFubmVs
X2lkPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcGxlbmlzaGVkX3F1b3RhPTIpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0
ZXMoZmxvd19jb250cm9sKQorICAgICAgICAjIFNlbmQgYW4gZW1wdHkgbWVzc2FnZS4gUHl3ZWJz
b2NrZXQgYWx3YXlzIHJlcGxlbmlzaGVzIDEgYnl0ZSBxdW90YQorICAgICAgICAjIGZvciBlbXB0
eSBtZXNzYWdlCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAg
ICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0yLCBtZXNzYWdlPScnKSkKKwor
ICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0
ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MSwgbWVzc2FnZT0nR29vZGJ5ZScpKQorICAgICAg
ICAjIFRoaXMgbWVzc2FnZSB2aW9sYXRlcyBxdW90YSBvbiBjaGFubmVsIGlkIDIuCisgICAgICAg
IHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2lj
YWxfZnJhbWUoY2hhbm5lbF9pZD0yLCBtZXNzYWdlPSdHb29kYnllJykpCisKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKG11eF9oYW5kbGVyLndhaXRfdW50aWxfZG9uZSh0aW1lb3V0PTIpKQorCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGRpc3BhdGNoZXIuY2hhbm5lbF9ldmVudHNb
Ml0ubWVzc2FnZXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBkaXNwYXRjaGVyLmNo
YW5uZWxfZXZlbnRzWzJdLm1lc3NhZ2VzWzBdKQorCisgICAgICAgIHJlY2VpdmVkX2Zsb3dfY29u
dHJvbHMgPSBbCisgICAgICAgICAgICBiIGZvciBiIGluIHJlcXVlc3QuY29ubmVjdGlvbi5nZXRf
d3JpdHRlbl9jb250cm9sX2Jsb2NrcygpCisgICAgICAgICAgICBpZiBiLm9wY29kZSA9PSBtdXgu
X01VWF9PUENPREVfRkxPV19DT05UUk9MIGFuZCBiLmNoYW5uZWxfaWQgPT0gMl0KKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ocmVjZWl2ZWRfZmxvd19jb250cm9scykpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMSwgcmVjZWl2ZWRfZmxvd19jb250cm9sc1swXS5zZW5kX3F1b3Rh
KQorCisgICAgICAgIGRyb3BfY2hhbm5lbCA9IG5leHQoCisgICAgICAgICAgICBiIGZvciBiIGlu
IHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfd3JpdHRlbl9jb250cm9sX2Jsb2NrcygpCisgICAgICAg
ICAgICBpZiBiLm9wY29kZSA9PSBtdXguX01VWF9PUENPREVfRFJPUF9DSEFOTkVMKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKDIsIGRyb3BfY2hhbm5lbC5jaGFubmVsX2lkKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKG11eC5fRFJPUF9DT0RFX1NFTkRfUVVPVEFfVklPTEFUSU9OLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGRyb3BfY2hhbm5lbC5kcm9wX2NvZGUpCisKKyAgICBkZWYg
dGVzdF9jb25zdW1lX3F1b3RhX2ZyYWdtZW50ZWRfbWVzc2FnZShzZWxmKToKKyAgICAgICAgcmVx
dWVzdCA9IF9jcmVhdGVfbW9ja19yZXF1ZXN0KCkKKyAgICAgICAgZGlzcGF0Y2hlciA9IF9NdXhN
b2NrRGlzcGF0Y2hlcigpCisgICAgICAgIG11eF9oYW5kbGVyID0gbXV4Ll9NdXhIYW5kbGVyKHJl
cXVlc3QsIGRpc3BhdGNoZXIpCisgICAgICAgIG11eF9oYW5kbGVyLnN0YXJ0KCkKKyAgICAgICAg
IyBDbGllbnQgaGFzIGxlbignSGVsbG8nKSArIGxlbignR29vZGJ5ZScpICsgMiBieXRlcyBxdW90
YS4KKyAgICAgICAgbXV4X2hhbmRsZXIuYWRkX2NoYW5uZWxfc2xvdHMobXV4Ll9JTklUSUFMX05V
TUJFUl9PRl9DSEFOTkVMX1NMT1RTLCAxNCkKKworICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZSA9
IF9jcmVhdGVfcmVxdWVzdF9oZWFkZXIocGF0aD0nL2VjaG8nKQorICAgICAgICBhZGRfY2hhbm5l
bF9yZXF1ZXN0ID0gX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1ZXN0X2ZyYW1lKAorICAgICAgICAg
ICAgY2hhbm5lbF9pZD0yLCBlbmNvZGluZz0wLAorICAgICAgICAgICAgZW5jb2RlZF9oYW5kc2hh
a2U9ZW5jb2RlZF9oYW5kc2hha2UpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0
ZXMoYWRkX2NoYW5uZWxfcmVxdWVzdCkKKworICAgICAgICBmbG93X2NvbnRyb2wgPSBfY3JlYXRl
X2Zsb3dfY29udHJvbF9mcmFtZShjaGFubmVsX2lkPTIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaGVkX3F1b3RhPTYpCisgICAgICAg
IHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoZmxvd19jb250cm9sKQorICAgICAgICByZXF1
ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2Zy
YW1lKGNoYW5uZWxfaWQ9MiwgbWVzc2FnZT0nSGUnLCBmaW49RmFsc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlPWNvbW1vbi5PUENPREVfVEVYVCkpCisgICAgICAg
IHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2lj
YWxfZnJhbWUoY2hhbm5lbF9pZD0yLCBtZXNzYWdlPSdsbG8nLCBmaW49VHJ1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGU9Y29tbW9uLk9QQ09ERV9DT05USU5VQVRJ
T04pKQorCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAg
ICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0xLCBtZXNzYWdlPSdHb29kYnllJykp
CisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3Jl
YXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0yLCBtZXNzYWdlPSdHb29kYnllJykpCisKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKG11eF9oYW5kbGVyLndhaXRfdW50aWxfZG9uZSh0aW1lb3V0
PTIpKQorCisgICAgICAgIG1lc3NhZ2VzID0gcmVxdWVzdC5jb25uZWN0aW9uLmdldF93cml0dGVu
X21lc3NhZ2VzKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydIZWxsbyddLCBtZXNzYWdl
cykKKworICAgIGRlZiB0ZXN0X2ZyYWdtZW50ZWRfY29udHJvbF9tZXNzYWdlKHNlbGYpOgorICAg
ICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRjaGVy
ID0gX011eE1vY2tEaXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011eEhh
bmRsZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQoKQor
ICAgICAgICBtdXhfaGFuZGxlci5hZGRfY2hhbm5lbF9zbG90cyhtdXguX0lOSVRJQUxfTlVNQkVS
X09GX0NIQU5ORUxfU0xPVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG11eC5fSU5JVElBTF9RVU9UQV9GT1JfQ0xJRU5UKQorCisgICAgICAgIGVuY29kZWRfaGFuZHNo
YWtlID0gX2NyZWF0ZV9yZXF1ZXN0X2hlYWRlcihwYXRoPScvcGluZycpCisgICAgICAgIGFkZF9j
aGFubmVsX3JlcXVlc3QgPSBfY3JlYXRlX2FkZF9jaGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAg
ICAgICAgICBjaGFubmVsX2lkPTIsIGVuY29kaW5nPTAsCisgICAgICAgICAgICBlbmNvZGVkX2hh
bmRzaGFrZT1lbmNvZGVkX2hhbmRzaGFrZSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1
dF9ieXRlcyhhZGRfY2hhbm5lbF9yZXF1ZXN0KQorCisgICAgICAgICMgUmVwbGVuaXNoIHRvdGFs
IDYgYnl0ZXMgaW4gMyBGbG93Q29udHJvbHMuCisgICAgICAgIGZsb3dfY29udHJvbCA9IF9jcmVh
dGVfZmxvd19jb250cm9sX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoZWRfcXVvdGE9MSkKKyAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhmbG93X2NvbnRyb2wpCisKKyAgICAgICAg
Zmxvd19jb250cm9sID0gX2NyZWF0ZV9mbG93X2NvbnRyb2xfZnJhbWUoY2hhbm5lbF9pZD0yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsZW5p
c2hlZF9xdW90YT0yKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGZsb3df
Y29udHJvbCkKKworICAgICAgICBmbG93X2NvbnRyb2wgPSBfY3JlYXRlX2Zsb3dfY29udHJvbF9m
cmFtZShjaGFubmVsX2lkPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcGxlbmlzaGVkX3F1b3RhPTMpCisgICAgICAgIHJlcXVlc3QuY29ubmVj
dGlvbi5wdXRfYnl0ZXMoZmxvd19jb250cm9sKQorCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlv
bi5wdXRfYnl0ZXMoCisgICAgICAgICAgICBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9p
ZD0xLCBtZXNzYWdlPSdHb29kYnllJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG11eF9o
YW5kbGVyLndhaXRfdW50aWxfZG9uZSh0aW1lb3V0PTIpKQorCisgICAgICAgIG1lc3NhZ2VzID0g
cmVxdWVzdC5jb25uZWN0aW9uLmdldF93cml0dGVuX2NvbnRyb2xfbWVzc2FnZXMoMikKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChjb21tb24uT1BDT0RFX1BJTkcsIG1lc3NhZ2VzWzBdWydvcGNv
ZGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnUGluZyEnLCBtZXNzYWdlc1swXVsnbWVz
c2FnZSddKQorCisgICAgZGVmIHRlc3RfY2hhbm5lbF9zbG90X3Zpb2xhdGlvbl9ieV9jbGllbnQo
c2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX21vY2tfcmVxdWVzdCgpCisgICAgICAg
IGRpc3BhdGNoZXIgPSBfTXV4TW9ja0Rpc3BhdGNoZXIoKQorICAgICAgICBtdXhfaGFuZGxlciA9
IG11eC5fTXV4SGFuZGxlcihyZXF1ZXN0LCBkaXNwYXRjaGVyKQorICAgICAgICBtdXhfaGFuZGxl
ci5zdGFydCgpCisgICAgICAgIG11eF9oYW5kbGVyLmFkZF9jaGFubmVsX3Nsb3RzKHNsb3RzPTEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfcXVvdGE9bXV4Ll9J
TklUSUFMX1FVT1RBX0ZPUl9DTElFTlQpCisKKyAgICAgICAgZW5jb2RlZF9oYW5kc2hha2UgPSBf
Y3JlYXRlX3JlcXVlc3RfaGVhZGVyKHBhdGg9Jy9lY2hvJykKKyAgICAgICAgYWRkX2NoYW5uZWxf
cmVxdWVzdCA9IF9jcmVhdGVfYWRkX2NoYW5uZWxfcmVxdWVzdF9mcmFtZSgKKyAgICAgICAgICAg
IGNoYW5uZWxfaWQ9MiwgZW5jb2Rpbmc9MCwKKyAgICAgICAgICAgIGVuY29kZWRfaGFuZHNoYWtl
PWVuY29kZWRfaGFuZHNoYWtlKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVz
KGFkZF9jaGFubmVsX3JlcXVlc3QpCisgICAgICAgIGZsb3dfY29udHJvbCA9IF9jcmVhdGVfZmxv
d19jb250cm9sX2ZyYW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoZWRfcXVvdGE9NikKKyAgICAgICAgcmVx
dWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhmbG93X2NvbnRyb2wpCisKKyAgICAgICAgcmVxdWVz
dC5jb25uZWN0aW9uLnB1dF9ieXRlcygKKyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNhbF9mcmFt
ZShjaGFubmVsX2lkPTIsIG1lc3NhZ2U9J0hlbGxvJykpCisKKyAgICAgICAgIyBUaGlzIHJlcXVl
c3Qgc2hvdWxkIGJlIHJlamVjdGVkLgorICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZSA9IF9jcmVh
dGVfcmVxdWVzdF9oZWFkZXIocGF0aD0nL2VjaG8nKQorICAgICAgICBhZGRfY2hhbm5lbF9yZXF1
ZXN0ID0gX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1ZXN0X2ZyYW1lKAorICAgICAgICAgICAgY2hh
bm5lbF9pZD0zLCBlbmNvZGluZz0wLAorICAgICAgICAgICAgZW5jb2RlZF9oYW5kc2hha2U9ZW5j
b2RlZF9oYW5kc2hha2UpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoYWRk
X2NoYW5uZWxfcmVxdWVzdCkKKyAgICAgICAgZmxvd19jb250cm9sID0gX2NyZWF0ZV9mbG93X2Nv
bnRyb2xfZnJhbWUoY2hhbm5lbF9pZD0zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXBsZW5pc2hlZF9xdW90YT02KQorICAgICAgICByZXF1ZXN0
LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGZsb3dfY29udHJvbCkKKworICAgICAgICByZXF1ZXN0LmNv
bm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNo
YW5uZWxfaWQ9MywgbWVzc2FnZT0nSGVsbG8nKSkKKworICAgICAgICByZXF1ZXN0LmNvbm5lY3Rp
b24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxf
aWQ9MSwgbWVzc2FnZT0nR29vZGJ5ZScpKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0
X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9Miwg
bWVzc2FnZT0nR29vZGJ5ZScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtdXhfaGFuZGxl
ci53YWl0X3VudGlsX2RvbmUodGltZW91dD0yKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KFtdLCBkaXNwYXRjaGVyLmNoYW5uZWxfZXZlbnRzWzFdLm1lc3NhZ2VzKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKFsnSGVsbG8nXSwgZGlzcGF0Y2hlci5jaGFubmVsX2V2ZW50c1syXS5tZXNz
YWdlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkaXNwYXRjaGVyLmNoYW5uZWxfZXZlbnRz
Lmhhc19rZXkoMykpCisgICAgICAgIGRyb3BfY2hhbm5lbCA9IG5leHQoCisgICAgICAgICAgICBi
IGZvciBiIGluIHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfd3JpdHRlbl9jb250cm9sX2Jsb2Nrcygp
CisgICAgICAgICAgICBpZiBiLm9wY29kZSA9PSBtdXguX01VWF9PUENPREVfRFJPUF9DSEFOTkVM
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGRyb3BfY2hhbm5lbC5jaGFubmVsX2lkKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG11eC5fRFJPUF9DT0RFX05FV19DSEFOTkVMX1NMT1Rf
VklPTEFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BfY2hhbm5lbC5kcm9wX2Nv
ZGUpCisKKyAgICBkZWYgdGVzdF9xdW90YV9vdmVyZmxvd19ieV9jbGllbnQoc2VsZik6CisgICAg
ICAgIHJlcXVlc3QgPSBfY3JlYXRlX21vY2tfcmVxdWVzdCgpCisgICAgICAgIGRpc3BhdGNoZXIg
PSBfTXV4TW9ja0Rpc3BhdGNoZXIoKQorICAgICAgICBtdXhfaGFuZGxlciA9IG11eC5fTXV4SGFu
ZGxlcihyZXF1ZXN0LCBkaXNwYXRjaGVyKQorICAgICAgICBtdXhfaGFuZGxlci5zdGFydCgpCisg
ICAgICAgIG11eF9oYW5kbGVyLmFkZF9jaGFubmVsX3Nsb3RzKHNsb3RzPTEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfcXVvdGE9bXV4Ll9JTklUSUFMX1FVT1RB
X0ZPUl9DTElFTlQpCisKKyAgICAgICAgZW5jb2RlZF9oYW5kc2hha2UgPSBfY3JlYXRlX3JlcXVl
c3RfaGVhZGVyKHBhdGg9Jy9lY2hvJykKKyAgICAgICAgYWRkX2NoYW5uZWxfcmVxdWVzdCA9IF9j
cmVhdGVfYWRkX2NoYW5uZWxfcmVxdWVzdF9mcmFtZSgKKyAgICAgICAgICAgIGNoYW5uZWxfaWQ9
MiwgZW5jb2Rpbmc9MCwKKyAgICAgICAgICAgIGVuY29kZWRfaGFuZHNoYWtlPWVuY29kZWRfaGFu
ZHNoYWtlKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGFkZF9jaGFubmVs
X3JlcXVlc3QpCisgICAgICAgICMgUmVwbGVuaXNoIDB4N0ZGRkZGRkZGRkZGRkZGRiBieXRlcyB0
d2ljZS4KKyAgICAgICAgZmxvd19jb250cm9sID0gX2NyZWF0ZV9mbG93X2NvbnRyb2xfZnJhbWUo
CisgICAgICAgICAgICBjaGFubmVsX2lkPTIsCisgICAgICAgICAgICByZXBsZW5pc2hlZF9xdW90
YT0weDdGRkZGRkZGRkZGRkZGRkYpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0
ZXMoZmxvd19jb250cm9sKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGZs
b3dfY29udHJvbCkKKworICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAg
ICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MSwgbWVzc2FnZT0nR29v
ZGJ5ZScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtdXhfaGFuZGxlci53YWl0X3VudGls
X2RvbmUodGltZW91dD0yKSkKKworICAgICAgICBkcm9wX2NoYW5uZWwgPSBuZXh0KAorICAgICAg
ICAgICAgYiBmb3IgYiBpbiByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X3dyaXR0ZW5fY29udHJvbF9i
bG9ja3MoKQorICAgICAgICAgICAgaWYgYi5vcGNvZGUgPT0gbXV4Ll9NVVhfT1BDT0RFX0RST1Bf
Q0hBTk5FTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBkcm9wX2NoYW5uZWwuY2hhbm5l
bF9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdXguX0RST1BfQ09ERV9TRU5EX1FVT1RB
X09WRVJGTE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BfY2hhbm5lbC5kcm9wX2Nv
ZGUpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2VuY2Fwc3VsYXRlZF9tZXNzYWdlKHNlbGYpOgor
ICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRj
aGVyID0gX011eE1vY2tEaXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011
eEhhbmRsZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQo
KQorCisgICAgICAgIGZpcnN0X2J5dGUgPSAobXV4Ll9NVVhfT1BDT0RFX0FERF9DSEFOTkVMX1JF
UVVFU1QgPDwgNSkKKyAgICAgICAgYmxvY2sgPSAoY2hyKGZpcnN0X2J5dGUpICsKKyAgICAgICAg
ICAgICAgICAgbXV4Ll9lbmNvZGVfY2hhbm5lbF9pZCgxKSArCisgICAgICAgICAgICAgICAgIG11
eC5fZW5jb2RlX251bWJlcigwKSkKKyAgICAgICAgcGF5bG9hZCA9IG11eC5fZW5jb2RlX2NoYW5u
ZWxfaWQobXV4Ll9DT05UUk9MX0NIQU5ORUxfSUQpICsgYmxvY2sKKyAgICAgICAgdGV4dF9mcmFt
ZSA9IGNyZWF0ZV9iaW5hcnlfZnJhbWUocGF5bG9hZCwgb3Bjb2RlPWNvbW1vbi5PUENPREVfVEVY
VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzaz1UcnVlKQor
ICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKHRleHRfZnJhbWUpCisKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG11eF9oYW5kbGVyLndhaXRfdW50aWxfZG9uZSh0aW1lb3V0PTIp
KQorCisgICAgICAgIGRyb3BfY2hhbm5lbCA9IG5leHQoCisgICAgICAgICAgICBiIGZvciBiIGlu
IHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfd3JpdHRlbl9jb250cm9sX2Jsb2NrcygpCisgICAgICAg
ICAgICBpZiBiLm9wY29kZSA9PSBtdXguX01VWF9PUENPREVfRFJPUF9DSEFOTkVMKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKG11eC5fRFJPUF9DT0RFX0lOVkFMSURfRU5DQVBTVUxBVElOR19N
RVNTQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BfY2hhbm5lbC5kcm9wX2NvZGUp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9uLlNUQVRVU19JTlRFUk5BTF9FTkRQT0lO
VF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24uc2Vy
dmVyX2Nsb3NlX2NvZGUpCisKKyAgICBkZWYgdGVzdF9jaGFubmVsX2lkX3RydW5jYXRlZChzZWxm
KToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfbW9ja19yZXF1ZXN0KCkKKyAgICAgICAgZGlz
cGF0Y2hlciA9IF9NdXhNb2NrRGlzcGF0Y2hlcigpCisgICAgICAgIG11eF9oYW5kbGVyID0gbXV4
Ll9NdXhIYW5kbGVyKHJlcXVlc3QsIGRpc3BhdGNoZXIpCisgICAgICAgIG11eF9oYW5kbGVyLnN0
YXJ0KCkKKworICAgICAgICAjIFRoZSBsYXN0IGJ5dGUgb2YgdGhlIGNoYW5uZWwgaWQgaXMgbWlz
c2luZy4KKyAgICAgICAgZnJhbWUgPSBjcmVhdGVfYmluYXJ5X2ZyYW1lKCdceDgwJywgbWFzaz1U
cnVlKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGZyYW1lKQorCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShtdXhfaGFuZGxlci53YWl0X3VudGlsX2RvbmUodGltZW91dD0y
KSkKKworICAgICAgICBkcm9wX2NoYW5uZWwgPSBuZXh0KAorICAgICAgICAgICAgYiBmb3IgYiBp
biByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X3dyaXR0ZW5fY29udHJvbF9ibG9ja3MoKQorICAgICAg
ICAgICAgaWYgYi5vcGNvZGUgPT0gbXV4Ll9NVVhfT1BDT0RFX0RST1BfQ0hBTk5FTCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChtdXguX0RST1BfQ09ERV9DSEFOTkVMX0lEX1RSVU5DQVRFRCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wX2NoYW5uZWwuZHJvcF9jb2RlKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGNvbW1vbi5TVEFUVVNfSU5URVJOQUxfRU5EUE9JTlRfRVJST1Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnNlcnZlcl9jbG9z
ZV9jb2RlKQorCisgICAgZGVmIHRlc3RfaW5uZXJfZnJhbWVfdHJ1bmNhdGVkKHNlbGYpOgorICAg
ICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBkaXNwYXRjaGVy
ID0gX011eE1vY2tEaXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRsZXIgPSBtdXguX011eEhh
bmRsZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hhbmRsZXIuc3RhcnQoKQor
CisgICAgICAgICMgSnVzdCBjb250YWluIGNoYW5uZWwgaWQgMS4KKyAgICAgICAgZnJhbWUgPSBj
cmVhdGVfYmluYXJ5X2ZyYW1lKCdceDAxJywgbWFzaz1UcnVlKQorICAgICAgICByZXF1ZXN0LmNv
bm5lY3Rpb24ucHV0X2J5dGVzKGZyYW1lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtdXhf
aGFuZGxlci53YWl0X3VudGlsX2RvbmUodGltZW91dD0yKSkKKworICAgICAgICBkcm9wX2NoYW5u
ZWwgPSBuZXh0KAorICAgICAgICAgICAgYiBmb3IgYiBpbiByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0
X3dyaXR0ZW5fY29udHJvbF9ibG9ja3MoKQorICAgICAgICAgICAgaWYgYi5vcGNvZGUgPT0gbXV4
Ll9NVVhfT1BDT0RFX0RST1BfQ0hBTk5FTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdXgu
X0RST1BfQ09ERV9FTkNBUFNVTEFURURfRlJBTUVfSVNfVFJVTkNBVEVELAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGRyb3BfY2hhbm5lbC5kcm9wX2NvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoY29tbW9uLlNUQVRVU19JTlRFUk5BTF9FTkRQT0lOVF9FUlJPUiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24uc2VydmVyX2Nsb3NlX2NvZGUpCisKKyAg
ICBkZWYgdGVzdF91bmtub3duX211eF9vcGNvZGUoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBf
Y3JlYXRlX21vY2tfcmVxdWVzdCgpCisgICAgICAgIGRpc3BhdGNoZXIgPSBfTXV4TW9ja0Rpc3Bh
dGNoZXIoKQorICAgICAgICBtdXhfaGFuZGxlciA9IG11eC5fTXV4SGFuZGxlcihyZXF1ZXN0LCBk
aXNwYXRjaGVyKQorICAgICAgICBtdXhfaGFuZGxlci5zdGFydCgpCisKKyAgICAgICAgIyBVbmRl
ZmluZWQgb3Bjb2RlIDUKKyAgICAgICAgZnJhbWUgPSBjcmVhdGVfYmluYXJ5X2ZyYW1lKCdceDAw
XHhhMCcsIG1hc2s9VHJ1ZSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhm
cmFtZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobXV4X2hhbmRsZXIud2FpdF91bnRpbF9k
b25lKHRpbWVvdXQ9MikpCisKKyAgICAgICAgZHJvcF9jaGFubmVsID0gbmV4dCgKKyAgICAgICAg
ICAgIGIgZm9yIGIgaW4gcmVxdWVzdC5jb25uZWN0aW9uLmdldF93cml0dGVuX2NvbnRyb2xfYmxv
Y2tzKCkKKyAgICAgICAgICAgIGlmIGIub3Bjb2RlID09IG11eC5fTVVYX09QQ09ERV9EUk9QX0NI
QU5ORUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXV4Ll9EUk9QX0NPREVfVU5LTk9XTl9N
VVhfT1BDT0RFLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BfY2hhbm5lbC5kcm9wX2Nv
ZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9uLlNUQVRVU19JTlRFUk5BTF9FTkRQ
T0lOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24u
c2VydmVyX2Nsb3NlX2NvZGUpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX211eF9jb250cm9sX2Js
b2NrKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAg
ICAgICBkaXNwYXRjaGVyID0gX011eE1vY2tEaXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hhbmRs
ZXIgPSBtdXguX011eEhhbmRsZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4X2hh
bmRsZXIuc3RhcnQoKQorCisgICAgICAgICMgRHJvcENoYW5uZWwgY29udGFpbnMgMSBieXRlIHJl
YXNvbgorICAgICAgICBmcmFtZSA9IGNyZWF0ZV9iaW5hcnlfZnJhbWUoJ1x4MDBceDYwXHgwMFx4
MDFceDAwJywgbWFzaz1UcnVlKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVz
KGZyYW1lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtdXhfaGFuZGxlci53YWl0X3VudGls
X2RvbmUodGltZW91dD0yKSkKKworICAgICAgICBkcm9wX2NoYW5uZWwgPSBuZXh0KAorICAgICAg
ICAgICAgYiBmb3IgYiBpbiByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X3dyaXR0ZW5fY29udHJvbF9i
bG9ja3MoKQorICAgICAgICAgICAgaWYgYi5vcGNvZGUgPT0gbXV4Ll9NVVhfT1BDT0RFX0RST1Bf
Q0hBTk5FTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdXguX0RST1BfQ09ERV9JTlZBTElE
X01VWF9DT05UUk9MX0JMT0NLLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BfY2hhbm5l
bC5kcm9wX2NvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9uLlNUQVRVU19JTlRF
Uk5BTF9FTkRQT0lOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNv
bm5lY3Rpb24uc2VydmVyX2Nsb3NlX2NvZGUpCisKKyAgICBkZWYgdGVzdF9wZXJtZXNzYWdlX2Nv
bXByZXNzKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9tb2NrX3JlcXVlc3QoKQor
ICAgICAgICBkaXNwYXRjaGVyID0gX011eE1vY2tEaXNwYXRjaGVyKCkKKyAgICAgICAgbXV4X2hh
bmRsZXIgPSBtdXguX011eEhhbmRsZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikKKyAgICAgICAgbXV4
X2hhbmRsZXIuc3RhcnQoKQorICAgICAgICBtdXhfaGFuZGxlci5hZGRfY2hhbm5lbF9zbG90cyht
dXguX0lOSVRJQUxfTlVNQkVSX09GX0NIQU5ORUxfU0xPVFMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG11eC5fSU5JVElBTF9RVU9UQV9GT1JfQ0xJRU5UKQorCisgICAg
ICAgICMgRW5hYmxlIHBlcm1lc3NhZ2UgY29tcHJlc3MgZXh0ZW5zaW9uIG9uIGxvZ2ljYWwgY2hh
bm5lbCAyLgorICAgICAgICBleHRlbnNpb25zID0gJyVzOyBtZXRob2Q9ZGVmbGF0ZScgJSAoCisg
ICAgICAgICAgICBjb21tb24uUEVSTUVTU0FHRV9DT01QUkVTU0lPTl9FWFRFTlNJT04pCisgICAg
ICAgIGVuY29kZWRfaGFuZHNoYWtlID0gX2NyZWF0ZV9yZXF1ZXN0X2hlYWRlcihwYXRoPScvZWNo
bycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eHRlbnNpb25zPWV4dGVuc2lvbnMpCisgICAgICAgIGFkZF9jaGFubmVsX3JlcXVlc3QgPSBfY3Jl
YXRlX2FkZF9jaGFubmVsX3JlcXVlc3RfZnJhbWUoCisgICAgICAgICAgICBjaGFubmVsX2lkPTIs
IGVuY29kaW5nPTAsCisgICAgICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZT1lbmNvZGVkX2hhbmRz
aGFrZSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhhZGRfY2hhbm5lbF9y
ZXF1ZXN0KQorCisgICAgICAgIGZsb3dfY29udHJvbCA9IF9jcmVhdGVfZmxvd19jb250cm9sX2Zy
YW1lKGNoYW5uZWxfaWQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwbGVuaXNoZWRfcXVvdGE9MjApCisgICAgICAgIHJlcXVlc3QuY29ubmVj
dGlvbi5wdXRfYnl0ZXMoZmxvd19jb250cm9sKQorCisgICAgICAgICMgU2VuZCBjb21wcmVzc2Vk
ICdIZWxsbycgdHdpY2UuCisgICAgICAgIGNvbXByZXNzID0gemxpYi5jb21wcmVzc29iaigKKyAg
ICAgICAgICAgIHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9OLCB6bGliLkRFRkxBVEVELCAtemxp
Yi5NQVhfV0JJVFMpCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8xID0gY29tcHJlc3MuY29tcHJl
c3MoJ0hlbGxvJykKKyAgICAgICAgY29tcHJlc3NlZF9oZWxsbzEgKz0gY29tcHJlc3MuZmx1c2go
emxpYi5aX1NZTkNfRkxVU0gpCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8xID0gY29tcHJlc3Nl
ZF9oZWxsbzFbOi00XQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAg
ICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MiwgbWVzc2FnZT1jb21w
cmVzc2VkX2hlbGxvMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3YxPVRy
dWUpKQorICAgICAgICBjb21wcmVzc2VkX2hlbGxvMiA9IGNvbXByZXNzLmNvbXByZXNzKCdIZWxs
bycpCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8yICs9IGNvbXByZXNzLmZsdXNoKHpsaWIuWl9T
WU5DX0ZMVVNIKQorICAgICAgICBjb21wcmVzc2VkX2hlbGxvMiA9IGNvbXByZXNzZWRfaGVsbG8y
WzotNF0KKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygKKyAgICAgICAgICAg
IF9jcmVhdGVfbG9naWNhbF9mcmFtZShjaGFubmVsX2lkPTIsIG1lc3NhZ2U9Y29tcHJlc3NlZF9o
ZWxsbzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN2MT1UcnVlKSkKKwor
ICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0
ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MSwgbWVzc2FnZT0nR29vZGJ5ZScpKQorICAgICAg
ICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dp
Y2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MiwgbWVzc2FnZT0nR29vZGJ5ZScpKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShtdXhfaGFuZGxlci53YWl0X3VudGlsX2RvbmUodGltZW91dD0yKSkKKwor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnSGVsbG8nLCAnSGVsbG8nXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBkaXNwYXRjaGVyLmNoYW5uZWxfZXZlbnRzWzJdLm1lc3NhZ2VzKQorICAg
ICAgICAjIFdyaXR0ZW4gJ0hlbGxvJ3Mgc2hvdWxkIGJlIGNvbXByZXNzZWQuCisgICAgICAgIG1l
c3NhZ2VzID0gcmVxdWVzdC5jb25uZWN0aW9uLmdldF93cml0dGVuX21lc3NhZ2VzKDIpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKG1lc3NhZ2VzKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChjb21wcmVzc2VkX2hlbGxvMSwgbWVzc2FnZXNbMF0pCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY29tcHJlc3NlZF9oZWxsbzIsIG1lc3NhZ2VzWzFdKQorCisKKyAgICBkZWYgdGVz
dF9wZXJtZXNzYWdlX2NvbXByZXNzX2ZyYWdtZW50ZWRfbWVzc2FnZShzZWxmKToKKyAgICAgICAg
ZXh0ZW5zaW9ucyA9IGNvbW1vbi5wYXJzZV9leHRlbnNpb25zKAorICAgICAgICAgICAgJyVzOyBt
ZXRob2Q9ZGVmbGF0ZScgJSBjb21tb24uUEVSTUVTU0FHRV9DT01QUkVTU0lPTl9FWFRFTlNJT04p
CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX21vY2tfcmVxdWVzdCgKKyAgICAgICAgICAgIGxv
Z2ljYWxfY2hhbm5lbF9leHRlbnNpb25zPWV4dGVuc2lvbnMpCisgICAgICAgIGRpc3BhdGNoZXIg
PSBfTXV4TW9ja0Rpc3BhdGNoZXIoKQorICAgICAgICBtdXhfaGFuZGxlciA9IG11eC5fTXV4SGFu
ZGxlcihyZXF1ZXN0LCBkaXNwYXRjaGVyKQorICAgICAgICBtdXhfaGFuZGxlci5zdGFydCgpCisg
ICAgICAgIG11eF9oYW5kbGVyLmFkZF9jaGFubmVsX3Nsb3RzKG11eC5fSU5JVElBTF9OVU1CRVJf
T0ZfQ0hBTk5FTF9TTE9UUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bXV4Ll9JTklUSUFMX1FVT1RBX0ZPUl9DTElFTlQpCisKKyAgICAgICAgIyBTZW5kIGNvbXByZXNz
ZWQgJ0hlbGxvSGVsbG9IZWxsbycgYXMgZnJhZ21lbnRlZCBtZXNzYWdlLgorICAgICAgICBjb21w
cmVzcyA9IHpsaWIuY29tcHJlc3NvYmooCisgICAgICAgICAgICB6bGliLlpfREVGQVVMVF9DT01Q
UkVTU0lPTiwgemxpYi5ERUZMQVRFRCwgLXpsaWIuTUFYX1dCSVRTKQorICAgICAgICBjb21wcmVz
c2VkX2hlbGxvID0gY29tcHJlc3MuY29tcHJlc3MoJ0hlbGxvSGVsbG9IZWxsbycpCisgICAgICAg
IGNvbXByZXNzZWRfaGVsbG8gKz0gY29tcHJlc3MuZmx1c2goemxpYi5aX1NZTkNfRkxVU0gpCisg
ICAgICAgIGNvbXByZXNzZWRfaGVsbG8gPSBjb21wcmVzc2VkX2hlbGxvWzotNF0KKworICAgICAg
ICBtID0gbGVuKGNvbXByZXNzZWRfaGVsbG8pIC8gMgorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rp
b24ucHV0X2J5dGVzKAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxf
aWQ9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPWNvbXByZXNz
ZWRfaGVsbG9bOm1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbj1GYWxz
ZSwgcnN2MT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZT1j
b21tb24uT1BDT0RFX1RFWFQpKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVz
KAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPWNvbXByZXNzZWRfaGVsbG9bbTpd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbj1UcnVlLCByc3YxPUZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZT1jb21tb24uT1BDT0RF
X0NPTlRJTlVBVElPTikpCisKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygK
KyAgICAgICAgICAgIF9jcmVhdGVfbG9naWNhbF9mcmFtZShjaGFubmVsX2lkPTEsIG1lc3NhZ2U9
J0dvb2RieWUnKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobXV4X2hhbmRsZXIud2FpdF91
bnRpbF9kb25lKHRpbWVvdXQ9MikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ0hlbGxv
SGVsbG9IZWxsbyddLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXIuY2hhbm5l
bF9ldmVudHNbMV0ubWVzc2FnZXMpCisgICAgICAgIG1lc3NhZ2VzID0gcmVxdWVzdC5jb25uZWN0
aW9uLmdldF93cml0dGVuX21lc3NhZ2VzKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwg
bGVuKG1lc3NhZ2VzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wcmVzc2VkX2hlbGxv
LCBtZXNzYWdlc1swXSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfYmFkX2ZyYWdtZW50ZWRfbWVz
c2FnZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfbW9ja19yZXF1ZXN0KCkKKyAg
ICAgICAgZGlzcGF0Y2hlciA9IF9NdXhNb2NrRGlzcGF0Y2hlcigpCisgICAgICAgIG11eF9oYW5k
bGVyID0gbXV4Ll9NdXhIYW5kbGVyKHJlcXVlc3QsIGRpc3BhdGNoZXIpCisgICAgICAgIG11eF9o
YW5kbGVyLnN0YXJ0KCkKKyAgICAgICAgbXV4X2hhbmRsZXIuYWRkX2NoYW5uZWxfc2xvdHMobXV4
Ll9JTklUSUFMX05VTUJFUl9PRl9DSEFOTkVMX1NMT1RTLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtdXguX0lOSVRJQUxfUVVPVEFfRk9SX0NMSUVOVCkKKworICAgICAg
ICBlbmNvZGVkX2hhbmRzaGFrZSA9IF9jcmVhdGVfcmVxdWVzdF9oZWFkZXIocGF0aD0nL2VjaG8n
KQorICAgICAgICBhZGRfY2hhbm5lbF9yZXF1ZXN0ID0gX2NyZWF0ZV9hZGRfY2hhbm5lbF9yZXF1
ZXN0X2ZyYW1lKAorICAgICAgICAgICAgY2hhbm5lbF9pZD0yLCBlbmNvZGluZz0wLAorICAgICAg
ICAgICAgZW5jb2RlZF9oYW5kc2hha2U9ZW5jb2RlZF9oYW5kc2hha2UpCisgICAgICAgIHJlcXVl
c3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoYWRkX2NoYW5uZWxfcmVxdWVzdCkKKworICAgICAgICAj
IFNlbmQgYSBmcmFtZSB3aXRoIGZpbj1GYWxzZSwgYW5kIHRoZW4gc2VuZCBhIGZyYW1lIHdpdGgK
KyAgICAgICAgIyBvcGNvZGU9VEVYVCAobm90IENPTlRJTlVBVElPTikuIExvZ2ljYWwgY2hhbm5l
bCAyIHNob3VsZCBiZSBkcm9wcGVkLgorICAgICAgICBmcmFtZTEgPSBfY3JlYXRlX2xvZ2ljYWxf
ZnJhbWUoY2hhbm5lbF9pZD0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZT0nSGVsbG8gJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
Y29kZT1jb21tb24uT1BDT0RFX1RFWFQpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRf
Ynl0ZXMoZnJhbWUxKQorICAgICAgICBmcmFtZTIgPSBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hh
bm5lbF9pZD0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZT0nV29ybGQhJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbj1U
cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlPWNvbW1v
bi5PUENPREVfVEVYVCkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcyhmcmFt
ZTIpCisKKyAgICAgICAgZW5jb2RlZF9oYW5kc2hha2UgPSBfY3JlYXRlX3JlcXVlc3RfaGVhZGVy
KHBhdGg9Jy9lY2hvJykKKyAgICAgICAgYWRkX2NoYW5uZWxfcmVxdWVzdCA9IF9jcmVhdGVfYWRk
X2NoYW5uZWxfcmVxdWVzdF9mcmFtZSgKKyAgICAgICAgICAgIGNoYW5uZWxfaWQ9MywgZW5jb2Rp
bmc9MCwKKyAgICAgICAgICAgIGVuY29kZWRfaGFuZHNoYWtlPWVuY29kZWRfaGFuZHNoYWtlKQor
ICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKGFkZF9jaGFubmVsX3JlcXVlc3Qp
CisKKyAgICAgICAgIyBTZW5kIGEgZnJhbWUgd2l0aCBvcGNvZGU9Q09OVElOVUFUSU9OIHdpdGhv
dXQgYSBwcmVjZWRpbmcgZnJhbWUKKyAgICAgICAgIyB0aGUgZmluIG9mIHdoaWNoIGlzIG5vdCBz
ZXQuIExvZ2ljYWwgY2hhbm5lbCAzIHNob3VsZCBiZSBkcm9wcGVkLgorICAgICAgICBmcmFtZTMg
PSBfY3JlYXRlX2xvZ2ljYWxfZnJhbWUoY2hhbm5lbF9pZD0zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0nSGVsbG8nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmluPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcGNvZGU9Y29tbW9uLk9QQ09ERV9DT05USU5VQVRJT04pCisgICAgICAg
IHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoZnJhbWUzKQorCisgICAgICAgIGVuY29kZWRf
aGFuZHNoYWtlID0gX2NyZWF0ZV9yZXF1ZXN0X2hlYWRlcihwYXRoPScvZWNobycpCisgICAgICAg
IGFkZF9jaGFubmVsX3JlcXVlc3QgPSBfY3JlYXRlX2FkZF9jaGFubmVsX3JlcXVlc3RfZnJhbWUo
CisgICAgICAgICAgICBjaGFubmVsX2lkPTQsIGVuY29kaW5nPTAsCisgICAgICAgICAgICBlbmNv
ZGVkX2hhbmRzaGFrZT1lbmNvZGVkX2hhbmRzaGFrZSkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0
aW9uLnB1dF9ieXRlcyhhZGRfY2hhbm5lbF9yZXF1ZXN0KQorCisgICAgICAgICMgU2VuZCBhIGZy
YW1lIHdpdGggb3Bjb2RlPVBJTkcgYW5kIGZpbj1GYWxzZSwgYW5kIHRoZW4gc2VuZCBhIGZyYW1l
CisgICAgICAgICMgd2l0aCBvcGNvZGU9VEVYVCAobm90IENPTlRJTlVBVElPTikuIExvZ2ljYWwg
Y2hhbm5lbCA0IHNob3VsZCBiZQorICAgICAgICAjIGRyb3BwZWQuCisgICAgICAgIGZyYW1lNCA9
IF9jcmVhdGVfbG9naWNhbF9mcmFtZShjaGFubmVsX2lkPTQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdQaW5nJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpbj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wY29kZT1jb21tb24uT1BDT0RFX1BJTkcpCisgICAgICAgIHJlcXVlc3Qu
Y29ubmVjdGlvbi5wdXRfYnl0ZXMoZnJhbWU0KQorICAgICAgICBmcmFtZTUgPSBfY3JlYXRlX2xv
Z2ljYWxfZnJhbWUoY2hhbm5lbF9pZD00LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZT0nSGVsbG8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmluPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcGNvZGU9Y29tbW9uLk9QQ09ERV9URVhUKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24u
cHV0X2J5dGVzKGZyYW1lNSkKKworICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVz
KAorICAgICAgICAgICAgX2NyZWF0ZV9sb2dpY2FsX2ZyYW1lKGNoYW5uZWxfaWQ9MSwgbWVzc2Fn
ZT0nR29vZGJ5ZScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtdXhfaGFuZGxlci53YWl0
X3VudGlsX2RvbmUodGltZW91dD0yKSkKKworICAgICAgICBkcm9wX2NoYW5uZWxzID0gWworICAg
ICAgICAgICAgYiBmb3IgYiBpbiByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X3dyaXR0ZW5fY29udHJv
bF9ibG9ja3MoKQorICAgICAgICAgICAgaWYgYi5vcGNvZGUgPT0gbXV4Ll9NVVhfT1BDT0RFX0RS
T1BfQ0hBTk5FTF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4oZHJvcF9jaGFubmVs
cykpCisgICAgICAgIGZvciBkIGluIGRyb3BfY2hhbm5lbHM6CisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKG11eC5fRFJPUF9DT0RFX0JBRF9GUkFHTUVOVEFUSU9OLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkLmRyb3BfY29kZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5
d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3Rfc3RyZWFtLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3Rfc3Ry
ZWFtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgxYWNmZWIwNDhkM2IyMDMyYTc5NDhjZmEyYWRlYTdjZTY0Zjk1
YWUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
d3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdF9zdHJlYW0ucHkKQEAgLTAs
MCArMSw3NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDExLCBH
b29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
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
CisiIiJUZXN0cyBmb3Igc3RyZWFtIG1vZHVsZS4iIiIKKworCitpbXBvcnQgdW5pdHRlc3QKKwor
aW1wb3J0IHNldF9zeXNfcGF0aCAgIyBVcGRhdGUgc3lzLnBhdGggdG8gbG9jYXRlIG1vZF9weXdl
YnNvY2tldCBtb2R1bGUuCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zy
b20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBzdHJlYW0KKworCitjbGFzcyBTdHJlYW1UZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJBIHVuaXR0ZXN0IGZvciBzdHJlYW0gbW9kdWxlLiIi
IgorCisgICAgZGVmIHRlc3RfY3JlYXRlX2hlYWRlcihzZWxmKToKKyAgICAgICAgIyBtb3JlLCBy
c3YxLCAuLi4sIHJzdjQgYXJlIGFsbCB0cnVlCisgICAgICAgIGhlYWRlciA9IHN0cmVhbS5jcmVh
dGVfaGVhZGVyKGNvbW1vbi5PUENPREVfVEVYVCwgMSwgMSwgMSwgMSwgMSwgMSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnXHhmMVx4ODEnLCBoZWFkZXIpCisKKyAgICAgICAgIyBNYXhpbXVt
IHBheWxvYWQgc2l6ZQorICAgICAgICBoZWFkZXIgPSBzdHJlYW0uY3JlYXRlX2hlYWRlcigKKyAg
ICAgICAgICAgIGNvbW1vbi5PUENPREVfVEVYVCwgKDEgPDwgNjMpIC0gMSwgMCwgMCwgMCwgMCwg
MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMVx4N2ZceDdmXHhmZlx4ZmZceGZmXHhm
Zlx4ZmZceGZmXHhmZicsIGhlYWRlcikKKworICAgICAgICAjIEludmFsaWQgb3Bjb2RlIDB4MTAK
KyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyZWFtLmNyZWF0ZV9oZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MTAsIDAsIDAsIDAsIDAsIDAsIDApCisKKyAgICAgICAgIyBJbnZhbGlkIHZhbHVlIDB4ZiBw
YXNzZWQgdG8gbW9yZSBwYXJhbWV0ZXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVF
cnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmNyZWF0ZV9oZWFkZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbi5PUENPREVfVEVYVCwgMCwgMHhmLCAwLCAw
LCAwLCAwKQorCisgICAgICAgICMgVG9vIGxvbmcgcGF5bG9hZF9sZW5ndGgKKyAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
ZWFtLmNyZWF0ZV9oZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbi5PUENP
REVfVEVYVCwgMSA8PCA2MywgMCwgMCwgMCwgMCwgMCkKKworCitpZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xz
L3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3Rfc3RyZWFtX2hpeGllNzUucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rl
c3QvdGVzdF9zdHJlYW1faGl4aWU3NS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTlhYzcxMzBiNzMwNGViOTJk
YmJiYzE1MzNhYTQxNTQ1ZTAyNDZkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rl
c3Rfc3RyZWFtX2hpeGllNzUucHkKQEAgLTAsMCArMSw1OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjCisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUZXN0cyBmb3Igc3RyZWFtIG1vZHVsZS4i
IiIKKworCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IHNldF9zeXNfcGF0aCAgIyBVcGRhdGUg
c3lzLnBhdGggdG8gbG9jYXRlIG1vZF9weXdlYnNvY2tldCBtb2R1bGUuCisKK2Zyb20gbW9kX3B5
d2Vic29ja2V0LnN0cmVhbSBpbXBvcnQgU3RyZWFtSGl4aWU3NQorZnJvbSB0ZXN0LnRlc3RfbXNn
dXRpbCBpbXBvcnQgX2NyZWF0ZV9yZXF1ZXN0X2hpeGllNzUKKworCitjbGFzcyBTdHJlYW1IaXhp
ZTc1VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSB1bml0dGVzdCBmb3IgU3RyZWFt
SGl4aWU3NSBjbGFzcy4iIiIKKworICAgIGRlZiB0ZXN0X3BheWxvYWRfbGVuZ3RoKHNlbGYpOgor
ICAgICAgICBmb3IgbGVuZ3RoLCBieXRlcyBpbiAoKDAsICdceDAwJyksICgweDdmLCAnXHg3Zicp
LCAoMHg4MCwgJ1x4ODFceDAwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgx
MjM0LCAnXHg4MFx4YTRceDM0JykpOgorICAgICAgICAgICAgdGVzdF9zdHJlYW0gPSBTdHJlYW1I
aXhpZTc1KF9jcmVhdGVfcmVxdWVzdF9oaXhpZTc1KGJ5dGVzKSkKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgbGVuZ3RoLCB0ZXN0X3N0cmVhbS5fcmVhZF9w
YXlsb2FkX2xlbmd0aF9oaXhpZTc1KCkpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
KyAgICB1bml0dGVzdC5tYWluKCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNv
Y2tldC9zcmMvdGVzdC90ZXN0X3V0aWwucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdF91dGlsLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIwZjRhYjA1OTY1MmM1ODY5ZWMyMDVhMTI4ZGY5MzkxNGNhOGM3MWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUv
dG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdF91dGlsLnB5CkBAIC0wLDAgKzEsMjAwIEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMu
CisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3Rz
IGZvciB1dGlsIG1vZHVsZS4iIiIKKworCitpbXBvcnQgb3MKK2ltcG9ydCByYW5kb20KK2ltcG9y
dCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgc2V0X3N5c19wYXRoICAjIFVwZGF0ZSBz
eXMucGF0aCB0byBsb2NhdGUgbW9kX3B5d2Vic29ja2V0IG1vZHVsZS4KKworZnJvbSBtb2RfcHl3
ZWJzb2NrZXQgaW1wb3J0IHV0aWwKKworCitfVEVTVF9EQVRBX0RJUiA9IG9zLnBhdGguam9pbihv
cy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSwgJ3Rlc3RkYXRhJykKKworCitjbGFzcyBVdGlsVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSB1bml0dGVzdCBmb3IgdXRpbCBtb2R1bGUu
IiIiCisKKyAgICBkZWYgdGVzdF9nZXRfc3RhY2tfdHJhY2Uoc2VsZik6CisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ05vbmVcbicsIHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGEgPSAxIC8gMCAgIyBJbnRlbnRpb25hbGx5IHJhaXNlIGV4Y2VwdGlv
bi4KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHRyYWNlID0gdXRpbC5n
ZXRfc3RhY2tfdHJhY2UoKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHRyYWNlLnN0YXJ0
c3dpdGgoJ1RyYWNlYmFjaycpKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHRyYWNlLmZp
bmQoJ1plcm9EaXZpc2lvbkVycm9yJykgIT0gLTEpCisKKyAgICBkZWYgdGVzdF9wcmVwZW5kX21l
c3NhZ2VfdG9fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBleGMgPSBFeGNlcHRpb24oJ1dvcmxk
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnV29ybGQnLCBzdHIoZXhjKSkKKyAgICAgICAg
dXRpbC5wcmVwZW5kX21lc3NhZ2VfdG9fZXhjZXB0aW9uKCdIZWxsbyAnLCBleGMpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvIFdvcmxkJywgc3RyKGV4YykpCisKKyAgICBkZWYgdGVz
dF9nZXRfc2NyaXB0X2ludGVycChzZWxmKToKKyAgICAgICAgY3lnd2luX3BhdGggPSAnYzpcXGN5
Z3dpblxcYmluJworICAgICAgICBjeWd3aW5fcGVybCA9IG9zLnBhdGguam9pbihjeWd3aW5fcGF0
aCwgJ3BlcmwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHV0aWwuZ2V0X3Njcmlw
dF9pbnRlcnAoCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfREFUQV9ESVIsICdSRUFE
TUUnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgdXRpbC5nZXRfc2NyaXB0X2lu
dGVycCgKKyAgICAgICAgICAgIG9zLnBhdGguam9pbihfVEVTVF9EQVRBX0RJUiwgJ1JFQURNRScp
LCBjeWd3aW5fcGF0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy91c3IvYmluL3Blcmwg
LXdUJywgdXRpbC5nZXRfc2NyaXB0X2ludGVycCgKKyAgICAgICAgICAgIG9zLnBhdGguam9pbihf
VEVTVF9EQVRBX0RJUiwgJ2hlbGxvLnBsJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN5
Z3dpbl9wZXJsICsgJyAtd1QnLCB1dGlsLmdldF9zY3JpcHRfaW50ZXJwKAorICAgICAgICAgICAg
b3MucGF0aC5qb2luKF9URVNUX0RBVEFfRElSLCAnaGVsbG8ucGwnKSwgY3lnd2luX3BhdGgpKQor
CisgICAgZGVmIHRlc3RfaGV4aWZ5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCc2
MSA3YSA0MSA1YSAzMCAzOSAyMCAwOSAwZCAwYSAwMCBmZicsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgdXRpbC5oZXhpZnkoJ2F6QVowOSBcdFxyXG5ceDAwXHhmZicpKQorCisKK2NsYXNzIFJl
cGVhdGVkWG9yTWFza2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSB1bml0dGVz
dCBmb3IgUmVwZWF0ZWRYb3JNYXNrZXIgY2xhc3MuIiIiCisKKyAgICBkZWYgdGVzdF9tYXNrKHNl
bGYpOgorICAgICAgICAjIFNhbXBsZSBpbnB1dCBlNiw5NyxhNSBpcyBVKzY1ZTUgaW4gVVRGLTgK
KyAgICAgICAgbWFza2VyID0gdXRpbC5SZXBlYXRlZFhvck1hc2tlcignXHhmZlx4ZmZceGZmXHhm
ZicpCisgICAgICAgIHJlc3VsdCA9IG1hc2tlci5tYXNrKCdceGU2XHg5N1x4YTUnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdceDE5XHg2OFx4NWEnLCByZXN1bHQpCisKKyAgICAgICAgbWFz
a2VyID0gdXRpbC5SZXBlYXRlZFhvck1hc2tlcignXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAg
IHJlc3VsdCA9IG1hc2tlci5tYXNrKCdceGU2XHg5N1x4YTUnKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdceGU2XHg5N1x4YTUnLCByZXN1bHQpCisKKyAgICAgICAgbWFza2VyID0gdXRpbC5S
ZXBlYXRlZFhvck1hc2tlcignXHhlNlx4OTdceGE1XHgyMCcpCisgICAgICAgIHJlc3VsdCA9IG1h
c2tlci5tYXNrKCdceGU2XHg5N1x4YTUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAw
XHgwMFx4MDAnLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9tYXNrX3R3aWNlKHNlbGYpOgorICAg
ICAgICBtYXNrZXIgPSB1dGlsLlJlcGVhdGVkWG9yTWFza2VyKCdceDAwXHg3Zlx4ZmZceDIwJykK
KyAgICAgICAgIyBtYXNrWzBdLCBtYXNrWzFdLCAuLi4gd2lsbCBiZSB1c2VkLgorICAgICAgICBy
ZXN1bHQgPSBtYXNrZXIubWFzaygnXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdceDAwXHg3Zlx4ZmZceDIwXHgwMCcsIHJlc3VsdCkKKyAgICAgICAgIyBt
YXNrWzJdLCBtYXNrWzBdLCAuLi4gd2lsbCBiZSB1c2VkIGZvciB0aGUgbmV4dCBjYWxsLgorICAg
ICAgICByZXN1bHQgPSBtYXNrZXIubWFzaygnXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdceDdmXHhmZlx4MjBceDAwXHg3ZicsIHJlc3VsdCkKKworICAg
IGRlZiB0ZXN0X21hc2tfbGFyZ2VfZGF0YShzZWxmKToKKyAgICAgICAgbWFza2VyID0gdXRpbC5S
ZXBlYXRlZFhvck1hc2tlcignbUFTaycpCisgICAgICAgIG9yaWdpbmFsID0gJycuam9pbihbY2hy
KGkgJSAyNTYpIGZvciBpIGluIHhyYW5nZSgxMDAwKV0pCisgICAgICAgIHJlc3VsdCA9IG1hc2tl
ci5tYXNrKG9yaWdpbmFsKQorICAgICAgICBleHBlY3RlZCA9ICcnLmpvaW4oCisgICAgICAgICAg
ICAgICAgW2NocigoaSAlIDI1NikgXiBvcmQoJ21BU2snW2kgJSA0XSkpIGZvciBpIGluIHhyYW5n
ZSgxMDAwKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCkKKwor
ICAgICAgICBtYXNrZXIgPSB1dGlsLlJlcGVhdGVkWG9yTWFza2VyKCdNYVNrJykKKyAgICAgICAg
Zmlyc3RfcGFydCA9ICdUaGUgV2ViU29ja2V0IFByb3RvY29sIGVuYWJsZXMgdHdvLXdheSBjb21t
dW5pY2F0aW9uLicKKyAgICAgICAgcmVzdWx0ID0gbWFza2VyLm1hc2soZmlyc3RfcGFydCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAnXHgxOVx0NktceDFhXHgw
NDE4Ilx4MDI4XHgwZTlBXHgwM1x4MTkiXHgxNTxceDA4Ilxyc1x4MGUjJworICAgICAgICAgICAg
ICAgICdceDAwMVx4MDcoXHgxMnNceDFmOlx4MGV+XHgxYyxceDE4c1x4MDgiXHgwYz5ceDFlI1x4
MDgwXG45JworICAgICAgICAgICAgICAgICdceDA4PFx4MDVjJywKKyAgICAgICAgICAgICAgICBy
ZXN1bHQpCisgICAgICAgIHNlY29uZF9wYXJ0ID0gJ0l0IGhhcyB0d28gcGFydHM6IGEgaGFuZHNo
YWtlIGFuZCB0aGUgZGF0YSB0cmFuc2Zlci4nCisgICAgICAgIHJlc3VsdCA9IG1hc2tlci5tYXNr
KHNlY29uZF9wYXJ0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAg
ICIoJ0slXHgwMCBLOVx4MTY8Sz1ceDAwIVx4MWY+W3Ncbm1cdDJceDA1KVx4MTI7XG4mXHgwNHNc
biMiCisgICAgICAgICAgICAgICAgIlx4MDVzXHgxZiVceDA0c1x4MGYsXHgxNTJLOVx4MTMyXHgw
NT5ceDA3Nlx4MTljIiwKKyAgICAgICAgICAgICAgICByZXN1bHQpCisKKworZGVmIGdldF9yYW5k
b21fc2VjdGlvbihzb3VyY2UsIG1pbl9udW1fY2h1bmtzKToKKyAgICBjaHVua3MgPSBbXQorICAg
IGJ5dGVzX2NodW5rZWQgPSAwCisKKyAgICB3aGlsZSBieXRlc19jaHVua2VkIDwgbGVuKHNvdXJj
ZSk6CisgICAgICAgIGNodW5rX3NpemUgPSByYW5kb20ucmFuZGludCgKKyAgICAgICAgICAgIDEs
CisgICAgICAgICAgICBtaW4obGVuKHNvdXJjZSkgLyBtaW5fbnVtX2NodW5rcywgbGVuKHNvdXJj
ZSkgLSBieXRlc19jaHVua2VkKSkKKyAgICAgICAgY2h1bmsgPSBzb3VyY2VbYnl0ZXNfY2h1bmtl
ZDpieXRlc19jaHVua2VkICsgY2h1bmtfc2l6ZV0KKyAgICAgICAgY2h1bmtzLmFwcGVuZChjaHVu
aykKKyAgICAgICAgYnl0ZXNfY2h1bmtlZCArPSBjaHVua19zaXplCisKKyAgICByZXR1cm4gY2h1
bmtzCisKKworY2xhc3MgSW5mbGF0ZXJEZWZsYXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgICIiIkEgdW5pdHRlc3QgZm9yIF9JbmZsYXRlciBhbmQgX0RlZmxhdGVyIGNsYXNzLiIiIgor
CisgICAgZGVmIHRlc3RfaW5mbGF0ZV9kZWZsYXRlX2RlZmF1bHQoc2VsZik6CisgICAgICAgIGlu
cHV0ID0gYidoZWxsbycgKyAnLScgKiAzMDAwMCArIGInaGVsbG8nCisgICAgICAgIGluZmxhdGVy
MTUgPSB1dGlsLl9JbmZsYXRlcigxNSkKKyAgICAgICAgZGVmbGF0ZXIxNSA9IHV0aWwuX0RlZmxh
dGVyKDE1KQorICAgICAgICBpbmZsYXRlcjggPSB1dGlsLl9JbmZsYXRlcig4KQorICAgICAgICBk
ZWZsYXRlcjggPSB1dGlsLl9EZWZsYXRlcig4KQorCisgICAgICAgIGNvbXByZXNzZWQxNSA9IGRl
ZmxhdGVyMTUuY29tcHJlc3NfYW5kX2ZpbmlzaChpbnB1dCkKKyAgICAgICAgY29tcHJlc3NlZDgg
PSBkZWZsYXRlcjguY29tcHJlc3NfYW5kX2ZpbmlzaChpbnB1dCkKKworICAgICAgICBpbmZsYXRl
cjE1LmFwcGVuZChjb21wcmVzc2VkMTUpCisgICAgICAgIGluZmxhdGVyOC5hcHBlbmQoY29tcHJl
c3NlZDgpCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjb21wcmVzc2VkMTUsIGNvbXBy
ZXNzZWQ4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlucHV0LCBpbmZsYXRlcjE1LmRlY29t
cHJlc3MoLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlucHV0LCBpbmZsYXRlcjguZGVj
b21wcmVzcygtMSkpCisKKyAgICBkZWYgdGVzdF9yYW5kb21fc2VjdGlvbihzZWxmKToKKyAgICAg
ICAgcmFuZG9tLnNlZWQoYT0wKQorICAgICAgICBzb3VyY2UgPSAnJy5qb2luKAorICAgICAgICAg
ICAgW2NocihyYW5kb20ucmFuZGludCgwLCAyNTUpKSBmb3IgaSBpbiB4cmFuZ2UoMTAwICogMTAy
NCldKQorCisgICAgICAgIGNodW5rZWRfaW5wdXQgPSBnZXRfcmFuZG9tX3NlY3Rpb24oc291cmNl
LCAxMCkKKyAgICAgICAgcHJpbnQgIklucHV0IGNodW5rIHNpemVzOiAlciIgJSBbbGVuKGMpIGZv
ciBjIGluIGNodW5rZWRfaW5wdXRdCisKKyAgICAgICAgZGVmbGF0ZXIgPSB1dGlsLl9EZWZsYXRl
cigxNSkKKyAgICAgICAgY29tcHJlc3NlZCA9IFtdCisgICAgICAgIGZvciBjaHVuayBpbiBjaHVu
a2VkX2lucHV0OgorICAgICAgICAgICAgY29tcHJlc3NlZC5hcHBlbmQoZGVmbGF0ZXIuY29tcHJl
c3MoY2h1bmspKQorICAgICAgICBjb21wcmVzc2VkLmFwcGVuZChkZWZsYXRlci5jb21wcmVzc19h
bmRfZmluaXNoKCcnKSkKKworICAgICAgICBjaHVua2VkX2V4cGVjdGF0aW9uID0gZ2V0X3JhbmRv
bV9zZWN0aW9uKHNvdXJjZSwgMTApCisgICAgICAgIHByaW50ICgiRXhwZWN0YXRpb24gY2h1bmsg
c2l6ZXM6ICVyIiAlCisgICAgICAgICAgICAgICBbbGVuKGMpIGZvciBjIGluIGNodW5rZWRfZXhw
ZWN0YXRpb25dKQorCisgICAgICAgIGluZmxhdGVyID0gdXRpbC5fSW5mbGF0ZXIoMTUpCisgICAg
ICAgIGluZmxhdGVyLmFwcGVuZCgnJy5qb2luKGNvbXByZXNzZWQpKQorICAgICAgICBmb3IgY2h1
bmsgaW4gY2h1bmtlZF9leHBlY3RhdGlvbjoKKyAgICAgICAgICAgIGRlY29tcHJlc3NlZCA9IGlu
ZmxhdGVyLmRlY29tcHJlc3MobGVuKGNodW5rKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoY2h1bmssIGRlY29tcHJlc3NlZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBp
bmZsYXRlci5kZWNvbXByZXNzKC0xKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgor
ICAgIHVuaXR0ZXN0Lm1haW4oKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29j
a2V0L3NyYy90ZXN0L3Rlc3RkYXRhL1JFQURNRSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9SRUFE
TUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzAwMWFhNTU5NWNkZDEzNDA3ZjU3MjhlY2Q1MzJhNWQxMjI2M2VmYQot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRz
ZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9SRUFETUUKQEAgLTAsMCAr
MSBAQAorVGVzdCBkYXRhIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3Rk
YXRhL2hhbmRsZXJzL2Fib3J0X2J5X3VzZXJfd3NoLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3RkYXRh
L2hhbmRsZXJzL2Fib3J0X2J5X3VzZXJfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2N2Y5OTMwZjc4MjRj
M2E1MzU5MTRhNWIzNzc5ZjZiNmZiYTI0M2YKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rl
c3QvdGVzdGRhdGEvaGFuZGxlcnMvYWJvcnRfYnlfdXNlcl93c2gucHkKQEAgLTAsMCArMSw0MiBA
QAorIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGhhbmRz
aGFrZQorCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAg
ICByYWlzZSBoYW5kc2hha2UuQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbigiYWJvcnQgZm9yIHRlc3Qi
KQorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcmFpc2Ug
aGFuZHNoYWtlLkFib3J0ZWRCeVVzZXJFeGNlcHRpb24oImFib3J0IGZvciB0ZXN0IikKKworCisj
IHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9oYW5k
bGVycy9ibGFua193c2gucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0
c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvYmxhbmtf
d3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjdmODdjNmFmMjNkZjA4ZWZlMzU3NWNhZTIwOGRlNTAyMmNiYWE2
NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
d3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvYmxh
bmtfd3NoLnB5CkBAIC0wLDAgKzEsMzEgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMu
CisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyMgaW50ZW50
aW9uYWxseSBsZWZ0IGJsYW5rCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdGRhdGEvaGFu
ZGxlcnMvb3JpZ2luX2NoZWNrX3dzaC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9oYW5kbGVy
cy9vcmlnaW5fY2hlY2tfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjMTM5ZmExNzZjYzM0MTdiZTk2ZGU3
OThlNmE4MWVkMTQ5YjE5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdGRh
dGEvaGFuZGxlcnMvb3JpZ2luX2NoZWNrX3dzaC5weQpAQCAtMCwwICsxLDQyIEBACisjIENvcHly
aWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
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
IERBTUFHRS4KKworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6
CisgICAgaWYgcmVxdWVzdC53c19vcmlnaW4gPT0gJ2h0dHA6Ly9leGFtcGxlLmNvbSc6CisgICAg
ICAgIHJldHVybgorICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWNjZXB0YWJsZSBvcmlnaW46ICVy
JyAlIHJlcXVlc3Qud3Nfb3JpZ2luKQorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEo
cmVxdWVzdCk6CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdvcmlnaW5fY2hlY2tfd3No
LnB5IGlzIGNhbGxlZCBmb3IgJXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChyZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0
cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9z
dWIvZXhjZXB0aW9uX2luX3RyYW5zZmVyX3dzaC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9o
YW5kbGVycy9zdWIvZXhjZXB0aW9uX2luX3RyYW5zZmVyX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOTgy
ZDAyMzFlZjAwZjAyZTBkOTBkZjY3OGViODA0YmE0Mzg2MmQ5Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29j
a2V0L3NyYy90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9leGNlcHRpb25faW5fdHJhbnNmZXJf
d3NoLnB5CkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisj
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
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIkV4Y2VwdGlv
biBpbiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEoKS4KKyIiIgorCisKK2RlZiB3ZWJfc29ja2V0
X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICBwYXNzCisKKworZGVmIHdlYl9zb2Nr
ZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICByYWlzZSBFeGNlcHRpb24oJ0ludGVudGlv
bmFsIEV4Y2VwdGlvbiBmb3IgJXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0
LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2
ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvbm9fd3No
X2F0X3RoZV9lbmQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2Vy
dmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL25vX3dz
aF9hdF90aGVfZW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3ZTdiZTE4MDJlM2M2NmM2Mzg0OTg3NWVhMzVl
MjQwNmEzODFlNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdGRhdGEvaGFu
ZGxlcnMvc3ViL25vX3dzaF9hdF90aGVfZW5kLnB5CkBAIC0wLDAgKzEsNDUgQEAKKyMgQ29weXJp
Z2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
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
REFNQUdFLgorCisKKyIiIkNvcnJlY3Qgc2lnbmF0dXJlcywgd3JvbmcgZmlsZSBuYW1lLgorIiIi
CisKKworZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBh
c3MKKworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHJlcXVl
c3QuY29ubmVjdGlvbi53cml0ZSgKKyAgICAgICAgICAgICdzdWIvbm9fd3NoX2F0X3RoZV9lbmQu
cHkgaXMgY2FsbGVkIGZvciAlcywgJXMnICUKKyAgICAgICAgICAgIChyZXF1ZXN0LndzX3Jlc291
cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9w
eXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvbm9uX2NhbGxhYmxlX3dz
aC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9w
eXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvbm9uX2NhbGxhYmxlX3dz
aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yNjM1MmViNGNhMjM4OTUyMjM5ZTM1NDI3MjhjZTNiMzhkODNkZDZi
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9u
b25fY2FsbGFibGVfd3NoLnB5CkBAIC0wLDAgKzEsMzkgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdv
b2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisK
KyIiIk5vbi1jYWxsYWJsZSBoYW5kbGVycy4KKyIiIgorCisKK3dlYl9zb2NrZXRfZG9fZXh0cmFf
aGFuZHNoYWtlID0gVHJ1ZQord2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhID0gMQorCisKKyMgdmk6
c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJz
L3N1Yi9wbGFpbl93c2gucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0
c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL3Bs
YWluX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYjNmZjY5MzAyNTZiYzFiMTNlMmM0YzJkMWM4NDNjNGI3
YzgwYWE0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJz
L3N1Yi9wbGFpbl93c2gucHkKQEAgLTAsMCArMSw0MCBAQAorIyBDb3B5cmlnaHQgMjAwOSwgR29v
Z2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwor
ZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBhc3MKKwor
CitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHJlcXVlc3QuY29u
bmVjdGlvbi53cml0ZSgnc3ViL3BsYWluX3dzaC5weSBpcyBjYWxsZWQgZm9yICVzLCAlcycgJQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC53c19yZXNvdXJjZSwgcmVxdWVz
dC53c19wcm90b2NvbCkpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvcHl3ZWJzb2NrZXQv
c3JjL3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL3dyb25nX2hhbmRzaGFrZV9zaWdfd3NoLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vi
c29ja2V0L3NyYy90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi93cm9uZ19oYW5kc2hha2Vfc2ln
X3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42YmY2NTliYzlhZjAxYzEwN2VmMzUwOGIyYjVkMDE3M2RjZjU5
MDA5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1
Yi93cm9uZ19oYW5kc2hha2Vfc2lnX3dzaC5weQpAQCAtMCwwICsxLDQ1IEBACisjIENvcHlyaWdo
dCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworCisiIiJXcm9uZyB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSBzaWduYXR1
cmUuCisiIiIKKworCitkZWYgbm9fd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVz
dCk6CisgICAgcGFzcworCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6
CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKAorICAgICAgICAgICAgJ3N1Yi93cm9uZ19o
YW5kc2hha2Vfc2lnX3dzaC5weSBpcyBjYWxsZWQgZm9yICVzLCAlcycgJQorICAgICAgICAgICAg
IChyZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0
cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9z
dWIvd3JvbmdfdHJhbnNmZXJfc2lnX3dzaC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9oYW5k
bGVycy9zdWIvd3JvbmdfdHJhbnNmZXJfc2lnX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMGUyZTU1MDc5
NGI3Yjk5MGUwYjQ0YjMzY2ZjMmQ0ZDE1MmU2YzA0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3B5d2Vic29ja2V0L3Ny
Yy90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi93cm9uZ190cmFuc2Zlcl9zaWdfd3NoLnB5CkBA
IC0wLDAgKzEsNDUgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMK
KyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
IyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIldyb25nIHdlYl9zb2NrZXRf
dHJhbnNmZXJfZGF0YSgpIHNpZ25hdHVyZS4KKyIiIgorCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4
dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICBwYXNzCisKKworZGVmIG5vX3dlYl9zb2NrZXRf
dHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoCisg
ICAgICAgICAgICAnc3ViL3dyb25nX3RyYW5zZmVyX3NpZ193c2gucHkgaXMgY2FsbGVkIGZvciAl
cywgJXMnICUKKyAgICAgICAgICAgIChyZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3By
b3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVz
dC90ZXN0ZGF0YS9oZWxsby5wbCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93
cHRzZXJ2ZS90b29scy9weXdlYnNvY2tldC9zcmMvdGVzdC90ZXN0ZGF0YS9oZWxsby5wbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ODJlZjVhMTAwNjVmZWI2OTFhZjVmNzE2YjFlNDk5NmIzOTdkYTY1Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rv
b2xzL3B5d2Vic29ja2V0L3NyYy90ZXN0L3Rlc3RkYXRhL2hlbGxvLnBsCkBAIC0wLDAgKzEsMzIg
QEAKKyMhL3Vzci9iaW4vcGVybCAtd1QKKyMKKyMgQ29weXJpZ2h0IDIwMTIsIEdvb2dsZSBJbmMu
CisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitwcmludCAiSGVs
bG9cbiI7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0
c2VydmUvdG9vbHMvd3B0c2VydmUvUkVBRE1FLm1kIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL1JFQURNRS5tZApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
MGM4OGUyYzM2Y2FmYjMyODI4ZjZkMTNiNWMzZWI3NDIxNzljNzhkCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNl
cnZlL1JFQURNRS5tZApAQCAtMCwwICsxLDQgQEAKK3dwdHNlcnZlCis9PT09PT09PQorCitXZWIg
c2VydmVyIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCB3ZWItcGxhdGZvcm0tdGVzdHMKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRz
ZXJ2ZS9kb2NzL01ha2VmaWxlIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3dwdHNlcnZlL2RvY3MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjUwYjZjODY0
N2Y4ZDk3ZjBhZWFjN2JjYjUzOGM2OTQ2ZmYzZWYyYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS9kb2Nz
L01ha2VmaWxlCkBAIC0wLDAgKzEsMTUzIEBACisjIE1ha2VmaWxlIGZvciBTcGhpbnggZG9jdW1l
bnRhdGlvbgorIworCisjIFlvdSBjYW4gc2V0IHRoZXNlIHZhcmlhYmxlcyBmcm9tIHRoZSBjb21t
YW5kIGxpbmUuCitTUEhJTlhPUFRTICAgID0KK1NQSElOWEJVSUxEICAgPSBzcGhpbngtYnVpbGQK
K1BBUEVSICAgICAgICAgPQorQlVJTERESVIgICAgICA9IF9idWlsZAorCisjIEludGVybmFsIHZh
cmlhYmxlcy4KK1BBUEVST1BUX2E0ICAgICA9IC1EIGxhdGV4X3BhcGVyX3NpemU9YTQKK1BBUEVS
T1BUX2xldHRlciA9IC1EIGxhdGV4X3BhcGVyX3NpemU9bGV0dGVyCitBTExTUEhJTlhPUFRTICAg
PSAtZCAkKEJVSUxERElSKS9kb2N0cmVlcyAkKFBBUEVST1BUXyQoUEFQRVIpKSAkKFNQSElOWE9Q
VFMpIC4KKyMgdGhlIGkxOG4gYnVpbGRlciBjYW5ub3Qgc2hhcmUgdGhlIGVudmlyb25tZW50IGFu
ZCBkb2N0cmVlcyB3aXRoIHRoZSBvdGhlcnMKK0kxOE5TUEhJTlhPUFRTICA9ICQoUEFQRVJPUFRf
JChQQVBFUikpICQoU1BISU5YT1BUUykgLgorCisuUEhPTlk6IGhlbHAgY2xlYW4gaHRtbCBkaXJo
dG1sIHNpbmdsZWh0bWwgcGlja2xlIGpzb24gaHRtbGhlbHAgcXRoZWxwIGRldmhlbHAgZXB1YiBs
YXRleCBsYXRleHBkZiB0ZXh0IG1hbiBjaGFuZ2VzIGxpbmtjaGVjayBkb2N0ZXN0IGdldHRleHQK
KworaGVscDoKKwlAZWNobyAiUGxlYXNlIHVzZSBcYG1ha2UgPHRhcmdldD4nIHdoZXJlIDx0YXJn
ZXQ+IGlzIG9uZSBvZiIKKwlAZWNobyAiICBodG1sICAgICAgIHRvIG1ha2Ugc3RhbmRhbG9uZSBI
VE1MIGZpbGVzIgorCUBlY2hvICIgIGRpcmh0bWwgICAgdG8gbWFrZSBIVE1MIGZpbGVzIG5hbWVk
IGluZGV4Lmh0bWwgaW4gZGlyZWN0b3JpZXMiCisJQGVjaG8gIiAgc2luZ2xlaHRtbCB0byBtYWtl
IGEgc2luZ2xlIGxhcmdlIEhUTUwgZmlsZSIKKwlAZWNobyAiICBwaWNrbGUgICAgIHRvIG1ha2Ug
cGlja2xlIGZpbGVzIgorCUBlY2hvICIgIGpzb24gICAgICAgdG8gbWFrZSBKU09OIGZpbGVzIgor
CUBlY2hvICIgIGh0bWxoZWxwICAgdG8gbWFrZSBIVE1MIGZpbGVzIGFuZCBhIEhUTUwgaGVscCBw
cm9qZWN0IgorCUBlY2hvICIgIHF0aGVscCAgICAgdG8gbWFrZSBIVE1MIGZpbGVzIGFuZCBhIHF0
aGVscCBwcm9qZWN0IgorCUBlY2hvICIgIGRldmhlbHAgICAgdG8gbWFrZSBIVE1MIGZpbGVzIGFu
ZCBhIERldmhlbHAgcHJvamVjdCIKKwlAZWNobyAiICBlcHViICAgICAgIHRvIG1ha2UgYW4gZXB1
YiIKKwlAZWNobyAiICBsYXRleCAgICAgIHRvIG1ha2UgTGFUZVggZmlsZXMsIHlvdSBjYW4gc2V0
IFBBUEVSPWE0IG9yIFBBUEVSPWxldHRlciIKKwlAZWNobyAiICBsYXRleHBkZiAgIHRvIG1ha2Ug
TGFUZVggZmlsZXMgYW5kIHJ1biB0aGVtIHRocm91Z2ggcGRmbGF0ZXgiCisJQGVjaG8gIiAgdGV4
dCAgICAgICB0byBtYWtlIHRleHQgZmlsZXMiCisJQGVjaG8gIiAgbWFuICAgICAgICB0byBtYWtl
IG1hbnVhbCBwYWdlcyIKKwlAZWNobyAiICB0ZXhpbmZvICAgIHRvIG1ha2UgVGV4aW5mbyBmaWxl
cyIKKwlAZWNobyAiICBpbmZvICAgICAgIHRvIG1ha2UgVGV4aW5mbyBmaWxlcyBhbmQgcnVuIHRo
ZW0gdGhyb3VnaCBtYWtlaW5mbyIKKwlAZWNobyAiICBnZXR0ZXh0ICAgIHRvIG1ha2UgUE8gbWVz
c2FnZSBjYXRhbG9ncyIKKwlAZWNobyAiICBjaGFuZ2VzICAgIHRvIG1ha2UgYW4gb3ZlcnZpZXcg
b2YgYWxsIGNoYW5nZWQvYWRkZWQvZGVwcmVjYXRlZCBpdGVtcyIKKwlAZWNobyAiICBsaW5rY2hl
Y2sgIHRvIGNoZWNrIGFsbCBleHRlcm5hbCBsaW5rcyBmb3IgaW50ZWdyaXR5IgorCUBlY2hvICIg
IGRvY3Rlc3QgICAgdG8gcnVuIGFsbCBkb2N0ZXN0cyBlbWJlZGRlZCBpbiB0aGUgZG9jdW1lbnRh
dGlvbiAoaWYgZW5hYmxlZCkiCisKK2NsZWFuOgorCS1ybSAtcmYgJChCVUlMRERJUikvKgorCito
dG1sOgorCSQoU1BISU5YQlVJTEQpIC1iIGh0bWwgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElS
KS9odG1sCisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQuIFRoZSBIVE1MIHBhZ2VzIGFy
ZSBpbiAkKEJVSUxERElSKS9odG1sLiIKKworZGlyaHRtbDoKKwkkKFNQSElOWEJVSUxEKSAtYiBk
aXJodG1sICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvZGlyaHRtbAorCUBlY2hvCisJQGVj
aG8gIkJ1aWxkIGZpbmlzaGVkLiBUaGUgSFRNTCBwYWdlcyBhcmUgaW4gJChCVUlMRERJUikvZGly
aHRtbC4iCisKK3NpbmdsZWh0bWw6CisJJChTUEhJTlhCVUlMRCkgLWIgc2luZ2xlaHRtbCAkKEFM
TFNQSElOWE9QVFMpICQoQlVJTERESVIpL3NpbmdsZWh0bWwKKwlAZWNobworCUBlY2hvICJCdWls
ZCBmaW5pc2hlZC4gVGhlIEhUTUwgcGFnZSBpcyBpbiAkKEJVSUxERElSKS9zaW5nbGVodG1sLiIK
KworcGlja2xlOgorCSQoU1BISU5YQlVJTEQpIC1iIHBpY2tsZSAkKEFMTFNQSElOWE9QVFMpICQo
QlVJTERESVIpL3BpY2tsZQorCUBlY2hvCisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVkOyBub3cgeW91
IGNhbiBwcm9jZXNzIHRoZSBwaWNrbGUgZmlsZXMuIgorCitqc29uOgorCSQoU1BISU5YQlVJTEQp
IC1iIGpzb24gJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9qc29uCisJQGVjaG8KKwlAZWNo
byAiQnVpbGQgZmluaXNoZWQ7IG5vdyB5b3UgY2FuIHByb2Nlc3MgdGhlIEpTT04gZmlsZXMuIgor
CitodG1saGVscDoKKwkkKFNQSElOWEJVSUxEKSAtYiBodG1saGVscCAkKEFMTFNQSElOWE9QVFMp
ICQoQlVJTERESVIpL2h0bWxoZWxwCisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQ7IG5v
dyB5b3UgY2FuIHJ1biBIVE1MIEhlbHAgV29ya3Nob3Agd2l0aCB0aGUiIFwKKwkgICAgICAiLmho
cCBwcm9qZWN0IGZpbGUgaW4gJChCVUlMRERJUikvaHRtbGhlbHAuIgorCitxdGhlbHA6CisJJChT
UEhJTlhCVUlMRCkgLWIgcXRoZWxwICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvcXRoZWxw
CisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQ7IG5vdyB5b3UgY2FuIHJ1biAicWNvbGxl
Y3Rpb25nZW5lcmF0b3IiIHdpdGggdGhlIiBcCisJICAgICAgIi5xaGNwIHByb2plY3QgZmlsZSBp
biAkKEJVSUxERElSKS9xdGhlbHAsIGxpa2UgdGhpczoiCisJQGVjaG8gIiMgcWNvbGxlY3Rpb25n
ZW5lcmF0b3IgJChCVUlMRERJUikvcXRoZWxwL3dwdHNlcnZlLnFoY3AiCisJQGVjaG8gIlRvIHZp
ZXcgdGhlIGhlbHAgZmlsZToiCisJQGVjaG8gIiMgYXNzaXN0YW50IC1jb2xsZWN0aW9uRmlsZSAk
KEJVSUxERElSKS9xdGhlbHAvd3B0c2VydmUucWhjIgorCitkZXZoZWxwOgorCSQoU1BISU5YQlVJ
TEQpIC1iIGRldmhlbHAgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9kZXZoZWxwCisJQGVj
aG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQuIgorCUBlY2hvICJUbyB2aWV3IHRoZSBoZWxwIGZp
bGU6IgorCUBlY2hvICIjIG1rZGlyIC1wICQkSE9NRS8ubG9jYWwvc2hhcmUvZGV2aGVscC93cHRz
ZXJ2ZSIKKwlAZWNobyAiIyBsbiAtcyAkKEJVSUxERElSKS9kZXZoZWxwICQkSE9NRS8ubG9jYWwv
c2hhcmUvZGV2aGVscC93cHRzZXJ2ZSIKKwlAZWNobyAiIyBkZXZoZWxwIgorCitlcHViOgorCSQo
U1BISU5YQlVJTEQpIC1iIGVwdWIgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9lcHViCisJ
QGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNoZWQuIFRoZSBlcHViIGZpbGUgaXMgaW4gJChCVUlM
RERJUikvZXB1Yi4iCisKK2xhdGV4OgorCSQoU1BISU5YQlVJTEQpIC1iIGxhdGV4ICQoQUxMU1BI
SU5YT1BUUykgJChCVUlMRERJUikvbGF0ZXgKKwlAZWNobworCUBlY2hvICJCdWlsZCBmaW5pc2hl
ZDsgdGhlIExhVGVYIGZpbGVzIGFyZSBpbiAkKEJVSUxERElSKS9sYXRleC4iCisJQGVjaG8gIlJ1
biBcYG1ha2UnIGluIHRoYXQgZGlyZWN0b3J5IHRvIHJ1biB0aGVzZSB0aHJvdWdoIChwZGYpbGF0
ZXgiIFwKKwkgICAgICAiKHVzZSBcYG1ha2UgbGF0ZXhwZGYnIGhlcmUgdG8gZG8gdGhhdCBhdXRv
bWF0aWNhbGx5KS4iCisKK2xhdGV4cGRmOgorCSQoU1BISU5YQlVJTEQpIC1iIGxhdGV4ICQoQUxM
U1BISU5YT1BUUykgJChCVUlMRERJUikvbGF0ZXgKKwlAZWNobyAiUnVubmluZyBMYVRlWCBmaWxl
cyB0aHJvdWdoIHBkZmxhdGV4Li4uIgorCSQoTUFLRSkgLUMgJChCVUlMRERJUikvbGF0ZXggYWxs
LXBkZgorCUBlY2hvICJwZGZsYXRleCBmaW5pc2hlZDsgdGhlIFBERiBmaWxlcyBhcmUgaW4gJChC
VUlMRERJUikvbGF0ZXguIgorCit0ZXh0OgorCSQoU1BISU5YQlVJTEQpIC1iIHRleHQgJChBTExT
UEhJTlhPUFRTKSAkKEJVSUxERElSKS90ZXh0CisJQGVjaG8KKwlAZWNobyAiQnVpbGQgZmluaXNo
ZWQuIFRoZSB0ZXh0IGZpbGVzIGFyZSBpbiAkKEJVSUxERElSKS90ZXh0LiIKKworbWFuOgorCSQo
U1BISU5YQlVJTEQpIC1iIG1hbiAkKEFMTFNQSElOWE9QVFMpICQoQlVJTERESVIpL21hbgorCUBl
Y2hvCisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVkLiBUaGUgbWFudWFsIHBhZ2VzIGFyZSBpbiAkKEJV
SUxERElSKS9tYW4uIgorCit0ZXhpbmZvOgorCSQoU1BISU5YQlVJTEQpIC1iIHRleGluZm8gJChB
TExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS90ZXhpbmZvCisJQGVjaG8KKwlAZWNobyAiQnVpbGQg
ZmluaXNoZWQuIFRoZSBUZXhpbmZvIGZpbGVzIGFyZSBpbiAkKEJVSUxERElSKS90ZXhpbmZvLiIK
KwlAZWNobyAiUnVuIFxgbWFrZScgaW4gdGhhdCBkaXJlY3RvcnkgdG8gcnVuIHRoZXNlIHRocm91
Z2ggbWFrZWluZm8iIFwKKwkgICAgICAiKHVzZSBcYG1ha2UgaW5mbycgaGVyZSB0byBkbyB0aGF0
IGF1dG9tYXRpY2FsbHkpLiIKKworaW5mbzoKKwkkKFNQSElOWEJVSUxEKSAtYiB0ZXhpbmZvICQo
QUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvdGV4aW5mbworCUBlY2hvICJSdW5uaW5nIFRleGlu
Zm8gZmlsZXMgdGhyb3VnaCBtYWtlaW5mby4uLiIKKwltYWtlIC1DICQoQlVJTERESVIpL3RleGlu
Zm8gaW5mbworCUBlY2hvICJtYWtlaW5mbyBmaW5pc2hlZDsgdGhlIEluZm8gZmlsZXMgYXJlIGlu
ICQoQlVJTERESVIpL3RleGluZm8uIgorCitnZXR0ZXh0OgorCSQoU1BISU5YQlVJTEQpIC1iIGdl
dHRleHQgJChJMThOU1BISU5YT1BUUykgJChCVUlMRERJUikvbG9jYWxlCisJQGVjaG8KKwlAZWNo
byAiQnVpbGQgZmluaXNoZWQuIFRoZSBtZXNzYWdlIGNhdGFsb2dzIGFyZSBpbiAkKEJVSUxERElS
KS9sb2NhbGUuIgorCitjaGFuZ2VzOgorCSQoU1BISU5YQlVJTEQpIC1iIGNoYW5nZXMgJChBTExT
UEhJTlhPUFRTKSAkKEJVSUxERElSKS9jaGFuZ2VzCisJQGVjaG8KKwlAZWNobyAiVGhlIG92ZXJ2
aWV3IGZpbGUgaXMgaW4gJChCVUlMRERJUikvY2hhbmdlcy4iCisKK2xpbmtjaGVjazoKKwkkKFNQ
SElOWEJVSUxEKSAtYiBsaW5rY2hlY2sgJChBTExTUEhJTlhPUFRTKSAkKEJVSUxERElSKS9saW5r
Y2hlY2sKKwlAZWNobworCUBlY2hvICJMaW5rIGNoZWNrIGNvbXBsZXRlOyBsb29rIGZvciBhbnkg
ZXJyb3JzIGluIHRoZSBhYm92ZSBvdXRwdXQgIiBcCisJICAgICAgIm9yIGluICQoQlVJTERESVIp
L2xpbmtjaGVjay9vdXRwdXQudHh0LiIKKworZG9jdGVzdDoKKwkkKFNQSElOWEJVSUxEKSAtYiBk
b2N0ZXN0ICQoQUxMU1BISU5YT1BUUykgJChCVUlMRERJUikvZG9jdGVzdAorCUBlY2hvICJUZXN0
aW5nIG9mIGRvY3Rlc3RzIGluIHRoZSBzb3VyY2VzIGZpbmlzaGVkLCBsb29rIGF0IHRoZSAiIFwK
KwkgICAgICAicmVzdWx0cyBpbiAkKEJVSUxERElSKS9kb2N0ZXN0L291dHB1dC50eHQuIgpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xz
L3dwdHNlcnZlL2RvY3MvY29uZi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS9kb2NzL2NvbmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWFlMWMy
MGNjZTUyMWI1NGU5Y2ZkZjgwOGZkMDE5OWJmMGIxOTE4YwotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS9k
b2NzL2NvbmYucHkKQEAgLTAsMCArMSwyNDMgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisj
CisjIHdwdHNlcnZlIGRvY3VtZW50YXRpb24gYnVpbGQgY29uZmlndXJhdGlvbiBmaWxlLCBjcmVh
dGVkIGJ5CisjIHNwaGlueC1xdWlja3N0YXJ0IG9uIFdlZCBBdWcgMTQgMTc6MjM6MjQgMjAxMy4K
KyMKKyMgVGhpcyBmaWxlIGlzIGV4ZWNmaWxlKClkIHdpdGggdGhlIGN1cnJlbnQgZGlyZWN0b3J5
IHNldCB0byBpdHMgY29udGFpbmluZyBkaXIuCisjCisjIE5vdGUgdGhhdCBub3QgYWxsIHBvc3Np
YmxlIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFyZSBwcmVzZW50IGluIHRoaXMKKyMgYXV0b2dlbmVy
YXRlZCBmaWxlLgorIworIyBBbGwgY29uZmlndXJhdGlvbiB2YWx1ZXMgaGF2ZSBhIGRlZmF1bHQ7
IHZhbHVlcyB0aGF0IGFyZSBjb21tZW50ZWQgb3V0CisjIHNlcnZlIHRvIHNob3cgdGhlIGRlZmF1
bHQuCisKK2ltcG9ydCBzeXMsIG9zCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5hYnNwYXRo
KCIuLiIpKQorCisjIElmIGV4dGVuc2lvbnMgKG9yIG1vZHVsZXMgdG8gZG9jdW1lbnQgd2l0aCBh
dXRvZG9jKSBhcmUgaW4gYW5vdGhlciBkaXJlY3RvcnksCisjIGFkZCB0aGVzZSBkaXJlY3Rvcmll
cyB0byBzeXMucGF0aCBoZXJlLiBJZiB0aGUgZGlyZWN0b3J5IGlzIHJlbGF0aXZlIHRvIHRoZQor
IyBkb2N1bWVudGF0aW9uIHJvb3QsIHVzZSBvcy5wYXRoLmFic3BhdGggdG8gbWFrZSBpdCBhYnNv
bHV0ZSwgbGlrZSBzaG93biBoZXJlLgorI3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmFic3Bh
dGgoJy4nKSkKKworIyAtLSBHZW5lcmFsIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB5b3VyIGRvY3VtZW50
YXRpb24gbmVlZHMgYSBtaW5pbWFsIFNwaGlueCB2ZXJzaW9uLCBzdGF0ZSBpdCBoZXJlLgorI25l
ZWRzX3NwaGlueCA9ICcxLjAnCisKKyMgQWRkIGFueSBTcGhpbnggZXh0ZW5zaW9uIG1vZHVsZSBu
YW1lcyBoZXJlLCBhcyBzdHJpbmdzLiBUaGV5IGNhbiBiZSBleHRlbnNpb25zCisjIGNvbWluZyB3
aXRoIFNwaGlueCAobmFtZWQgJ3NwaGlueC5leHQuKicpIG9yIHlvdXIgY3VzdG9tIG9uZXMuCitl
eHRlbnNpb25zID0gWydzcGhpbnguZXh0LmF1dG9kb2MnLCAnc3BoaW54LmV4dC52aWV3Y29kZSdd
CisKKyMgQWRkIGFueSBwYXRocyB0aGF0IGNvbnRhaW4gdGVtcGxhdGVzIGhlcmUsIHJlbGF0aXZl
IHRvIHRoaXMgZGlyZWN0b3J5LgordGVtcGxhdGVzX3BhdGggPSBbJ190ZW1wbGF0ZXMnXQorCisj
IFRoZSBzdWZmaXggb2Ygc291cmNlIGZpbGVuYW1lcy4KK3NvdXJjZV9zdWZmaXggPSAnLnJzdCcK
KworIyBUaGUgZW5jb2Rpbmcgb2Ygc291cmNlIGZpbGVzLgorI3NvdXJjZV9lbmNvZGluZyA9ICd1
dGYtOC1zaWcnCisKKyMgVGhlIG1hc3RlciB0b2N0cmVlIGRvY3VtZW50LgorbWFzdGVyX2RvYyA9
ICdpbmRleCcKKworIyBHZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9qZWN0LgorcHJv
amVjdCA9IHUnd3B0c2VydmUnCitjb3B5cmlnaHQgPSB1JzIwMTMsIE1vemlsbGEgRm91bmRhdGlv
biBhbmQgb3RoZXIgd3B0c2VydmUgY29udHJpYnV0ZXJzJworCisjIFRoZSB2ZXJzaW9uIGluZm8g
Zm9yIHRoZSBwcm9qZWN0IHlvdSdyZSBkb2N1bWVudGluZywgYWN0cyBhcyByZXBsYWNlbWVudCBm
b3IKKyMgfHZlcnNpb258IGFuZCB8cmVsZWFzZXwsIGFsc28gdXNlZCBpbiB2YXJpb3VzIG90aGVy
IHBsYWNlcyB0aHJvdWdob3V0IHRoZQorIyBidWlsdCBkb2N1bWVudHMuCisjCisjIFRoZSBzaG9y
dCBYLlkgdmVyc2lvbi4KK3ZlcnNpb24gPSAnMC4xJworIyBUaGUgZnVsbCB2ZXJzaW9uLCBpbmNs
dWRpbmcgYWxwaGEvYmV0YS9yYyB0YWdzLgorcmVsZWFzZSA9ICcwLjEnCisKKyMgVGhlIGxhbmd1
YWdlIGZvciBjb250ZW50IGF1dG9nZW5lcmF0ZWQgYnkgU3BoaW54LiBSZWZlciB0byBkb2N1bWVu
dGF0aW9uCisjIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGxhbmd1YWdlcy4KKyNsYW5ndWFnZSA9
IE5vbmUKKworIyBUaGVyZSBhcmUgdHdvIG9wdGlvbnMgZm9yIHJlcGxhY2luZyB8dG9kYXl8OiBl
aXRoZXIsIHlvdSBzZXQgdG9kYXkgdG8gc29tZQorIyBub24tZmFsc2UgdmFsdWUsIHRoZW4gaXQg
aXMgdXNlZDoKKyN0b2RheSA9ICcnCisjIEVsc2UsIHRvZGF5X2ZtdCBpcyB1c2VkIGFzIHRoZSBm
b3JtYXQgZm9yIGEgc3RyZnRpbWUgY2FsbC4KKyN0b2RheV9mbXQgPSAnJUIgJWQsICVZJworCisj
IExpc3Qgb2YgcGF0dGVybnMsIHJlbGF0aXZlIHRvIHNvdXJjZSBkaXJlY3RvcnksIHRoYXQgbWF0
Y2ggZmlsZXMgYW5kCisjIGRpcmVjdG9yaWVzIHRvIGlnbm9yZSB3aGVuIGxvb2tpbmcgZm9yIHNv
dXJjZSBmaWxlcy4KK2V4Y2x1ZGVfcGF0dGVybnMgPSBbJ19idWlsZCddCisKKyMgVGhlIHJlU1Qg
ZGVmYXVsdCByb2xlICh1c2VkIGZvciB0aGlzIG1hcmt1cDogYHRleHRgKSB0byB1c2UgZm9yIGFs
bCBkb2N1bWVudHMuCisjZGVmYXVsdF9yb2xlID0gTm9uZQorCisjIElmIHRydWUsICcoKScgd2ls
bCBiZSBhcHBlbmRlZCB0byA6ZnVuYzogZXRjLiBjcm9zcy1yZWZlcmVuY2UgdGV4dC4KKyNhZGRf
ZnVuY3Rpb25fcGFyZW50aGVzZXMgPSBUcnVlCisKKyMgSWYgdHJ1ZSwgdGhlIGN1cnJlbnQgbW9k
dWxlIG5hbWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gYWxsIGRlc2NyaXB0aW9uCisjIHVuaXQgdGl0
bGVzIChzdWNoIGFzIC4uIGZ1bmN0aW9uOjopLgorI2FkZF9tb2R1bGVfbmFtZXMgPSBUcnVlCisK
KyMgSWYgdHJ1ZSwgc2VjdGlvbmF1dGhvciBhbmQgbW9kdWxlYXV0aG9yIGRpcmVjdGl2ZXMgd2ls
bCBiZSBzaG93biBpbiB0aGUKKyMgb3V0cHV0LiBUaGV5IGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQu
Cisjc2hvd19hdXRob3JzID0gRmFsc2UKKworIyBUaGUgbmFtZSBvZiB0aGUgUHlnbWVudHMgKHN5
bnRheCBoaWdobGlnaHRpbmcpIHN0eWxlIHRvIHVzZS4KK3B5Z21lbnRzX3N0eWxlID0gJ3NwaGlu
eCcKKworIyBBIGxpc3Qgb2YgaWdub3JlZCBwcmVmaXhlcyBmb3IgbW9kdWxlIGluZGV4IHNvcnRp
bmcuCisjbW9kaW5kZXhfY29tbW9uX3ByZWZpeCA9IFtdCisKKworIyAtLSBPcHRpb25zIGZvciBI
VE1MIG91dHB1dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworIyBUaGUgdGhlbWUgdG8gdXNlIGZvciBIVE1MIGFuZCBIVE1MIEhlbHAgcGFnZXMu
ICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yCisjIGEgbGlzdCBvZiBidWlsdGluIHRoZW1lcy4K
K2h0bWxfdGhlbWUgPSAnZGVmYXVsdCcKKworIyBUaGVtZSBvcHRpb25zIGFyZSB0aGVtZS1zcGVj
aWZpYyBhbmQgY3VzdG9taXplIHRoZSBsb29rIGFuZCBmZWVsIG9mIGEgdGhlbWUKKyMgZnVydGhl
ci4gIEZvciBhIGxpc3Qgb2Ygb3B0aW9ucyBhdmFpbGFibGUgZm9yIGVhY2ggdGhlbWUsIHNlZSB0
aGUKKyMgZG9jdW1lbnRhdGlvbi4KKyNodG1sX3RoZW1lX29wdGlvbnMgPSB7fQorCisjIEFkZCBh
bnkgcGF0aHMgdGhhdCBjb250YWluIGN1c3RvbSB0aGVtZXMgaGVyZSwgcmVsYXRpdmUgdG8gdGhp
cyBkaXJlY3RvcnkuCisjaHRtbF90aGVtZV9wYXRoID0gW10KKworIyBUaGUgbmFtZSBmb3IgdGhp
cyBzZXQgb2YgU3BoaW54IGRvY3VtZW50cy4gIElmIE5vbmUsIGl0IGRlZmF1bHRzIHRvCisjICI8
cHJvamVjdD4gdjxyZWxlYXNlPiBkb2N1bWVudGF0aW9uIi4KKyNodG1sX3RpdGxlID0gTm9uZQor
CisjIEEgc2hvcnRlciB0aXRsZSBmb3IgdGhlIG5hdmlnYXRpb24gYmFyLiAgRGVmYXVsdCBpcyB0
aGUgc2FtZSBhcyBodG1sX3RpdGxlLgorI2h0bWxfc2hvcnRfdGl0bGUgPSBOb25lCisKKyMgVGhl
IG5hbWUgb2YgYW4gaW1hZ2UgZmlsZSAocmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkpIHRvIHBs
YWNlIGF0IHRoZSB0b3AKKyMgb2YgdGhlIHNpZGViYXIuCisjaHRtbF9sb2dvID0gTm9uZQorCisj
IFRoZSBuYW1lIG9mIGFuIGltYWdlIGZpbGUgKHdpdGhpbiB0aGUgc3RhdGljIHBhdGgpIHRvIHVz
ZSBhcyBmYXZpY29uIG9mIHRoZQorIyBkb2NzLiAgVGhpcyBmaWxlIHNob3VsZCBiZSBhIFdpbmRv
d3MgaWNvbiBmaWxlICguaWNvKSBiZWluZyAxNngxNiBvciAzMngzMgorIyBwaXhlbHMgbGFyZ2Uu
CisjaHRtbF9mYXZpY29uID0gTm9uZQorCisjIEFkZCBhbnkgcGF0aHMgdGhhdCBjb250YWluIGN1
c3RvbSBzdGF0aWMgZmlsZXMgKHN1Y2ggYXMgc3R5bGUgc2hlZXRzKSBoZXJlLAorIyByZWxhdGl2
ZSB0byB0aGlzIGRpcmVjdG9yeS4gVGhleSBhcmUgY29waWVkIGFmdGVyIHRoZSBidWlsdGluIHN0
YXRpYyBmaWxlcywKKyMgc28gYSBmaWxlIG5hbWVkICJkZWZhdWx0LmNzcyIgd2lsbCBvdmVyd3Jp
dGUgdGhlIGJ1aWx0aW4gImRlZmF1bHQuY3NzIi4KK2h0bWxfc3RhdGljX3BhdGggPSBbJ19zdGF0
aWMnXQorCisjIElmIG5vdCAnJywgYSAnTGFzdCB1cGRhdGVkIG9uOicgdGltZXN0YW1wIGlzIGlu
c2VydGVkIGF0IGV2ZXJ5IHBhZ2UgYm90dG9tLAorIyB1c2luZyB0aGUgZ2l2ZW4gc3RyZnRpbWUg
Zm9ybWF0LgorI2h0bWxfbGFzdF91cGRhdGVkX2ZtdCA9ICclYiAlZCwgJVknCisKKyMgSWYgdHJ1
ZSwgU21hcnR5UGFudHMgd2lsbCBiZSB1c2VkIHRvIGNvbnZlcnQgcXVvdGVzIGFuZCBkYXNoZXMg
dG8KKyMgdHlwb2dyYXBoaWNhbGx5IGNvcnJlY3QgZW50aXRpZXMuCisjaHRtbF91c2Vfc21hcnR5
cGFudHMgPSBUcnVlCisKKyMgQ3VzdG9tIHNpZGViYXIgdGVtcGxhdGVzLCBtYXBzIGRvY3VtZW50
IG5hbWVzIHRvIHRlbXBsYXRlIG5hbWVzLgorI2h0bWxfc2lkZWJhcnMgPSB7fQorCisjIEFkZGl0
aW9uYWwgdGVtcGxhdGVzIHRoYXQgc2hvdWxkIGJlIHJlbmRlcmVkIHRvIHBhZ2VzLCBtYXBzIHBh
Z2UgbmFtZXMgdG8KKyMgdGVtcGxhdGUgbmFtZXMuCisjaHRtbF9hZGRpdGlvbmFsX3BhZ2VzID0g
e30KKworIyBJZiBmYWxzZSwgbm8gbW9kdWxlIGluZGV4IGlzIGdlbmVyYXRlZC4KKyNodG1sX2Rv
bWFpbl9pbmRpY2VzID0gVHJ1ZQorCisjIElmIGZhbHNlLCBubyBpbmRleCBpcyBnZW5lcmF0ZWQu
CisjaHRtbF91c2VfaW5kZXggPSBUcnVlCisKKyMgSWYgdHJ1ZSwgdGhlIGluZGV4IGlzIHNwbGl0
IGludG8gaW5kaXZpZHVhbCBwYWdlcyBmb3IgZWFjaCBsZXR0ZXIuCisjaHRtbF9zcGxpdF9pbmRl
eCA9IEZhbHNlCisKKyMgSWYgdHJ1ZSwgbGlua3MgdG8gdGhlIHJlU1Qgc291cmNlcyBhcmUgYWRk
ZWQgdG8gdGhlIHBhZ2VzLgorI2h0bWxfc2hvd19zb3VyY2VsaW5rID0gVHJ1ZQorCisjIElmIHRy
dWUsICJDcmVhdGVkIHVzaW5nIFNwaGlueCIgaXMgc2hvd24gaW4gdGhlIEhUTUwgZm9vdGVyLiBE
ZWZhdWx0IGlzIFRydWUuCisjaHRtbF9zaG93X3NwaGlueCA9IFRydWUKKworIyBJZiB0cnVlLCAi
KEMpIENvcHlyaWdodCAuLi4iIGlzIHNob3duIGluIHRoZSBIVE1MIGZvb3Rlci4gRGVmYXVsdCBp
cyBUcnVlLgorI2h0bWxfc2hvd19jb3B5cmlnaHQgPSBUcnVlCisKKyMgSWYgdHJ1ZSwgYW4gT3Bl
blNlYXJjaCBkZXNjcmlwdGlvbiBmaWxlIHdpbGwgYmUgb3V0cHV0LCBhbmQgYWxsIHBhZ2VzIHdp
bGwKKyMgY29udGFpbiBhIDxsaW5rPiB0YWcgcmVmZXJyaW5nIHRvIGl0LiAgVGhlIHZhbHVlIG9m
IHRoaXMgb3B0aW9uIG11c3QgYmUgdGhlCisjIGJhc2UgVVJMIGZyb20gd2hpY2ggdGhlIGZpbmlz
aGVkIEhUTUwgaXMgc2VydmVkLgorI2h0bWxfdXNlX29wZW5zZWFyY2ggPSAnJworCisjIFRoaXMg
aXMgdGhlIGZpbGUgbmFtZSBzdWZmaXggZm9yIEhUTUwgZmlsZXMgKGUuZy4gIi54aHRtbCIpLgor
I2h0bWxfZmlsZV9zdWZmaXggPSBOb25lCisKKyMgT3V0cHV0IGZpbGUgYmFzZSBuYW1lIGZvciBI
VE1MIGhlbHAgYnVpbGRlci4KK2h0bWxoZWxwX2Jhc2VuYW1lID0gJ3dwdHNlcnZlZG9jJworCisK
KyMgLS0gT3B0aW9ucyBmb3IgTGFUZVggb3V0cHV0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xhdGV4X2VsZW1lbnRzID0geworIyBUaGUgcGFw
ZXIgc2l6ZSAoJ2xldHRlcnBhcGVyJyBvciAnYTRwYXBlcicpLgorIydwYXBlcnNpemUnOiAnbGV0
dGVycGFwZXInLAorCisjIFRoZSBmb250IHNpemUgKCcxMHB0JywgJzExcHQnIG9yICcxMnB0Jyku
CisjJ3BvaW50c2l6ZSc6ICcxMHB0JywKKworIyBBZGRpdGlvbmFsIHN0dWZmIGZvciB0aGUgTGFU
ZVggcHJlYW1ibGUuCisjJ3ByZWFtYmxlJzogJycsCit9CisKKyMgR3JvdXBpbmcgdGhlIGRvY3Vt
ZW50IHRyZWUgaW50byBMYVRlWCBmaWxlcy4gTGlzdCBvZiB0dXBsZXMKKyMgKHNvdXJjZSBzdGFy
dCBmaWxlLCB0YXJnZXQgbmFtZSwgdGl0bGUsIGF1dGhvciwgZG9jdW1lbnRjbGFzcyBbaG93dG8v
bWFudWFsXSkuCitsYXRleF9kb2N1bWVudHMgPSBbCisgICgnaW5kZXgnLCAnd3B0c2VydmUudGV4
JywgdSd3cHRzZXJ2ZSBEb2N1bWVudGF0aW9uJywKKyAgIHUnSmFtZXMgR3JhaGFtJywgJ21hbnVh
bCcpLAorXQorCisjIFRoZSBuYW1lIG9mIGFuIGltYWdlIGZpbGUgKHJlbGF0aXZlIHRvIHRoaXMg
ZGlyZWN0b3J5KSB0byBwbGFjZSBhdCB0aGUgdG9wIG9mCisjIHRoZSB0aXRsZSBwYWdlLgorI2xh
dGV4X2xvZ28gPSBOb25lCisKKyMgRm9yICJtYW51YWwiIGRvY3VtZW50cywgaWYgdGhpcyBpcyB0
cnVlLCB0aGVuIHRvcGxldmVsIGhlYWRpbmdzIGFyZSBwYXJ0cywKKyMgbm90IGNoYXB0ZXJzLgor
I2xhdGV4X3VzZV9wYXJ0cyA9IEZhbHNlCisKKyMgSWYgdHJ1ZSwgc2hvdyBwYWdlIHJlZmVyZW5j
ZXMgYWZ0ZXIgaW50ZXJuYWwgbGlua3MuCisjbGF0ZXhfc2hvd19wYWdlcmVmcyA9IEZhbHNlCisK
KyMgSWYgdHJ1ZSwgc2hvdyBVUkwgYWRkcmVzc2VzIGFmdGVyIGV4dGVybmFsIGxpbmtzLgorI2xh
dGV4X3Nob3dfdXJscyA9IEZhbHNlCisKKyMgRG9jdW1lbnRzIHRvIGFwcGVuZCBhcyBhbiBhcHBl
bmRpeCB0byBhbGwgbWFudWFscy4KKyNsYXRleF9hcHBlbmRpY2VzID0gW10KKworIyBJZiBmYWxz
ZSwgbm8gbW9kdWxlIGluZGV4IGlzIGdlbmVyYXRlZC4KKyNsYXRleF9kb21haW5faW5kaWNlcyA9
IFRydWUKKworCisjIC0tIE9wdGlvbnMgZm9yIG1hbnVhbCBwYWdlIG91dHB1dCAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIE9uZSBlbnRyeSBwZXIgbWFu
dWFsIHBhZ2UuIExpc3Qgb2YgdHVwbGVzCisjIChzb3VyY2Ugc3RhcnQgZmlsZSwgbmFtZSwgZGVz
Y3JpcHRpb24sIGF1dGhvcnMsIG1hbnVhbCBzZWN0aW9uKS4KK21hbl9wYWdlcyA9IFsKKyAgICAo
J2luZGV4JywgJ3dwdHNlcnZlJywgdSd3cHRzZXJ2ZSBEb2N1bWVudGF0aW9uJywKKyAgICAgW3Un
SmFtZXMgR3JhaGFtJ10sIDEpCitdCisKKyMgSWYgdHJ1ZSwgc2hvdyBVUkwgYWRkcmVzc2VzIGFm
dGVyIGV4dGVybmFsIGxpbmtzLgorI21hbl9zaG93X3VybHMgPSBGYWxzZQorCisKKyMgLS0gT3B0
aW9ucyBmb3IgVGV4aW5mbyBvdXRwdXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyMgR3JvdXBpbmcgdGhlIGRvY3VtZW50IHRyZWUgaW50byBUZXhp
bmZvIGZpbGVzLiBMaXN0IG9mIHR1cGxlcworIyAoc291cmNlIHN0YXJ0IGZpbGUsIHRhcmdldCBu
YW1lLCB0aXRsZSwgYXV0aG9yLAorIyAgZGlyIG1lbnUgZW50cnksIGRlc2NyaXB0aW9uLCBjYXRl
Z29yeSkKK3RleGluZm9fZG9jdW1lbnRzID0gWworICAoJ2luZGV4JywgJ3dwdHNlcnZlJywgdSd3
cHRzZXJ2ZSBEb2N1bWVudGF0aW9uJywKKyAgIHUnSmFtZXMgR3JhaGFtJywgJ3dwdHNlcnZlJywg
J09uZSBsaW5lIGRlc2NyaXB0aW9uIG9mIHByb2plY3QuJywKKyAgICdNaXNjZWxsYW5lb3VzJyks
CitdCisKKyMgRG9jdW1lbnRzIHRvIGFwcGVuZCBhcyBhbiBhcHBlbmRpeCB0byBhbGwgbWFudWFs
cy4KKyN0ZXhpbmZvX2FwcGVuZGljZXMgPSBbXQorCisjIElmIGZhbHNlLCBubyBtb2R1bGUgaW5k
ZXggaXMgZ2VuZXJhdGVkLgorI3RleGluZm9fZG9tYWluX2luZGljZXMgPSBUcnVlCisKKyMgSG93
IHRvIGRpc3BsYXkgVVJMIGFkZHJlc3NlczogJ2Zvb3Rub3RlJywgJ25vJywgb3IgJ2lubGluZScu
CisjdGV4aW5mb19zaG93X3VybHMgPSAnZm9vdG5vdGUnCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvZG9jcy9oYW5k
bGVycy5yc3QgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9v
bHMvd3B0c2VydmUvZG9jcy9oYW5kbGVycy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzE1YWFiNjM1ZDk2OTc2
YWY1OWM2MDZkODRkMGE1NzUwNzQzNTQ0YgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS9kb2NzL2hhbmRs
ZXJzLnJzdApAQCAtMCwwICsxLDExMSBAQAorSGFuZGxlcnMKKz09PT09PT09CisKK0hhbmRsZXJz
IGFyZSBmdW5jdGlvbnMgdGhhdCBoYXZlIHRoZSBnZW5lcmFsIHNpZ25hdHVyZTo6CisKKyAgaGFu
ZGxlcihyZXF1ZXN0LCByZXNwb25zZSkKKworSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgaGFuZGxl
ciB3aWxsIHVzZSBpbmZvcm1hdGlvbiBmcm9tCit0aGUgcmVxdWVzdCAoZS5nLiB0aGUgcGF0aCkg
ZWl0aGVyIHRvIHBvcHVsYXRlIHRoZSByZXNwb25zZQorb2JqZWN0IHdpdGggdGhlIGRhdGEgdG8g
c2VuZCwgb3IgdG8gZGlyZWN0bHkgd3JpdGUgdG8gdGhlCitvdXRwdXQgc3RyZWFtIHZpYSB0aGUg
UmVzcG9uc2VXcml0ZXIgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoCit0aGUgcmVxdWVzdC4gSWYg
YSBoYW5kbGVyIHdyaXRlcyB0byB0aGUgb3V0cHV0IHN0cmVhbSB0aGVuIHRoZQorc2VydmVyIHdp
bGwgbm90IGF0dGVtcHQgYWRkaXRpb25hbCB3cml0ZXMsIGkuZS4gdGhlIGNob2ljZSB0byB3cml0
ZQorZGlyZWN0bHkgaW4gdGhlIGhhbmRsZXIgb3Igbm90IGlzIGFsbC1vci1ub3RoaW5nLgorCitB
IG51bWJlciBvZiBnZW5lcmFsLXB1cnBvc2UgaGFuZGxlciBmdW5jdGlvbnMgYXJlIHByb3ZpZGVk
IGJ5IGRlZmF1bHQ6CisKKy4uIF9oYW5kbGVycy5QeXRob246CisKK1B5dGhvbiBIYW5kbGVycwor
LS0tLS0tLS0tLS0tLS0tCisKK1B5dGhvbiBoYW5kbGVycyBhcmUgZnVuY3Rpb25zIHdoaWNoIHBy
b3ZpZGUgYSBoaWdoZXItbGV2ZWwgQVBJIG92ZXIKK21hbnVhbGx5IHVwZGF0aW5nIHRoZSByZXNw
b25zZSBvYmplY3QsIGJ5IGNhdXNpbmcgdGhlIHJldHVybiB2YWx1ZSBvZgordGhlIGZ1bmN0aW9u
IHRvIHByb3ZpZGUgKHBhcnQgb2YpIHRoZSByZXNwb25zZS4gVGhlcmUgYXJlIHRocmVlCitwb3Nz
aWJsZSBzZXRzIG9mIHZhbHVlcyB0aGF0IG1heSBiZSByZXR1cm5lZDo6CisKKworICAoc3RhdHVz
LCBoZWFkZXJzLCBjb250ZW50KQorICAoaGVhZGVycywgY29udGVudCkKKyAgY29udGVudAorCitI
ZXJlIGBzdGF0dXNgIGlzIGVpdGhlciBhIHR1cGxlIChzdGF0dXMgY29kZSwgbWVzc2FnZSkgb3Ig
c2ltcGx5IGEKK2ludGVnZXIgc3RhdHVzIGNvZGUsIGBoZWFkZXJzYCBpcyBhIGxpc3Qgb2YgKGZp
ZWxkIG5hbWUsIHZhbHVlKSBwYWlycywKK2FuZCBgY29udGVudGAgaXMgYSBzdHJpbmcgb3IgYW4g
aXRlcmFibGUgcmV0dXJuaW5nIHN0cmluZ3MuIFN1Y2ggYQorZnVuY3Rpb24gbWF5IGFsc28gdXBk
YXRlIHRoZSByZXNwb25zZSBtYW51YWxseS4gRm9yIGV4YW1wbGUgb25lIG1heQordXNlIGByZXNw
b25zZS5oZWFkZXJzLnNldGAgdG8gc2V0IGEgcmVzcG9uc2UgaGVhZGVyLCBhbmQgb25seSByZXR1
cm4KK3RoZSBjb250ZW50LiBPbmUgbWF5IGV2ZW4gdXNlIHRoaXMga2luZCBvZiBoYW5kbGVyLCBi
dXQgbWFuaXB1bGF0ZQordGhlIG91dHB1dCBzb2NrZXQgZGlyZWN0bHksIGluIHdoaWNoIGNhc2Ug
dGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKK2Z1bmN0aW9uLCBhbmQgdGhlIHByb3BlcnRpZXMgb2Yg
dGhlIHJlc3BvbnNlIG9iamVjdCwgd2lsbCBiZSBpZ25vcmVkLgorCitUaGUgbW9zdCBjb21tb24g
d2F5IHRvIG1ha2UgYSB1c2VyIGZ1bmN0aW9uIGludG8gYSBweXRob24gaGFuZGxlciBpcwordG8g
dXNlIHRoZSBwcm92aWRlZCBgd3B0c2VydmUuaGFuZGxlcnMuaGFuZGxlcmAgZGVjb3JhdG9yOjoK
KworICBmcm9tIHdwdHNlcnZlLmhhbmRsZXJzIGltcG9ydCBoYW5kbGVyCisKKyAgQGhhbmRsZXIK
KyAgZGVmIHRlc3QocmVxdWVzdCwgcmVzcG9uc2UpOgorICAgICAgcmV0dXJuIFsoIlgtVGVzdCI6
ICJQQVNTIiksICgiQ29udGVudC1UeXBlIiwgInRleHQvcGxhaW4iKV0sICJ0ZXN0IgorCisgICNM
YXRlciwgYXNzdW1pbmcgd2UgaGF2ZSBhIFJvdXRlciBvYmplY3QgY2FsbGVkICdyb3V0ZXInCisK
KyAgcm91dGVyLnJlZ2lzdGVyKCJHRVQiLCAiL3Rlc3QiLCB0ZXN0KQorCitKU09OIEhhbmRsZXJz
CistLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgYSBzcGVjaWFsaXNhdGlvbiBvZiB0aGUgcHl0aG9u
IGhhbmRsZXIgdHlwZSBzcGVjaWZpY2FsbHkKK2Rlc2lnbmVkIHRvIGZhY2lsaXRhdGUgcHJvdmlk
aW5nIEpTT04gcmVzcG9uc2VzLiBUaGUgQVBJIGlzIGxhcmdlbHkKK3RoZSBzYW1lIGFzIGZvciBh
IG5vcm1hbCBweXRob24gaGFuZGxlciwgYnV0IHRoZSBgY29udGVudGAgcGFydCBvZiB0aGUKK3Jl
dHVybiB2YWx1ZSBpcyBKU09OIGVuY29kZWQsIGFuZCBhIGRlZmF1bHQgQ29udGVudC1UeXBlIGhl
YWRlciBvZgorYGFwcGxpY2F0aW9uL2pzb25gIGlzIGFkZGVkLiBBZ2FpbiB0aGlzIGhhbmRsZXIg
aXMgdXN1YWxseSB1c2VkIGFzIGEKK2RlY29yYXRvcjo6CisKKyAgZnJvbSB3cHRzZXJ2ZS5oYW5k
bGVycyBpbXBvcnQganNvbl9oYW5kbGVyCisKKyAgQGpzb25faGFuZGxlcgorICBkZWYgdGVzdChy
ZXF1ZXN0LCByZXNwb25zZSk6CisgICAgICByZXR1cm4geyJ0ZXN0IjogIlBBU1MifQorCitQeXRo
b24gRmlsZSBIYW5kbGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHl0aG9uIGZpbGUgaGFu
ZGxlcnMgYXJlIGRlc2lnbmVkIHRvIHByb3ZpZGUgYSB2YWd1ZWx5IFBIUC1saWtlIGludGVyZmFj
ZQord2hlcmUgZWFjaCByZXNvdXJjZSBjb3JyZXNwb25kcyB0byBhIHBhcnRpY3VsYXIgcHl0aG9u
IGZpbGUgb24gdGhlCitmaWxlc3lzdGVtLiBUeXBpY2FsbHkgdGhpcyBpcyBob29rZWQgdXAgdG8g
YSByb3V0ZSBsaWtlIGBgKCIqIiwKKyIqLnB5IiwgcHl0aG9uX2ZpbGVfaGFuZGxlcilgYCwgbWVh
bmluZyB0aGF0IGFueSAucHkgZmlsZSB3aWxsIGJlCit0cmVhdGVkIGFzIGEgaGFuZGxlciBmaWxl
IChub3RlIHRoYXQgdGhpcyBtYWtlcyBweXRob24gZmlsZXMgdW5zYWZlIGluCittdWNoIHRoZSBz
YW1lIHdheSB0aGF0IC5waHAgZmlsZXMgYXJlIHdoZW4gdXNpbmcgUEhQKS4KKworVW5saWtlIFBI
UCwgdGhlIHB5dGhvbiBmaWxlcyBkb24ndCB3b3JrIGJ5IG91dHB1dHRpbmcgdGV4dCB0byBzdGRv
dXQKK2Zyb20gdGhlIGdsb2JhbCBzY29wZS4gSW5zdGVhZCB0aGV5IG11c3QgZGVmaW5lIGEgc2lu
Z2xlIGZ1bmN0aW9uCitgbWFpbmAgd2l0aCB0aGUgc2lnbmF0dXJlOjoKKworICBtYWluKHJlcXVl
c3QsIHJlc3BvbnNlKQorCitUaGlzIGZ1bmN0aW9uIHRoZW4gYmVoYXZlcyBqdXN0IGxpa2UgdGhv
c2UgZGVzY3JpYmVkIGluCis6cmVmOmBoYW5kbGVycy5QeXRob25gIGFib3ZlLgorCithc2lzIEhh
bmRsZXJzCistLS0tLS0tLS0tLS0tCisKK1RoZXNlIGFyZSB1c2VkIHRvIHNlcnZlIGZpbGVzIGFz
IGxpdGVyYWwgYnl0ZSBzdHJlYW1zIGluY2x1ZGluZyB0aGUKK0hUVFAgc3RhdHVzIGxpbmUsIGhl
YWRlcnMgYW5kIGJvZHkuIEluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhpcworaGFuZGxl
ciBpcyBpbnZva2VkIGZvciBhbGwgZmlsZXMgd2l0aCBhIC5hc2lzIGV4dGVuc2lvbi4KKworRmls
ZSBIYW5kbGVycworLS0tLS0tLS0tLS0tLQorCitGaWxlIGhhbmRsZXJzIGFyZSB1c2VkIHRvIHNl
cnZlIHN0YXRpYyBmaWxlcy4gQnkgZGVmYXVsdCB0aGUgY29udGVudAordHlwZSBvZiB0aGVzZSBm
aWxlcyBpcyBzZXQgYnkgZXhhbWluaW5nIHRoZSBmaWxlIGV4dGVuc2lvbi4gSG93ZXZlcgordGhp
cyBjYW4gYmUgb3ZlcnJpZGRlbiwgb3IgYWRkaXRpb25hbCBoZWFkZXJzIHN1cHBsaWVkLCBieSBw
cm92aWRpbmcgYQorZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGZpbGUgYmVpbmcgc2Vy
dmVkIGJ1dCBhbiBhZGRpdGlvbmFsCisuaGVhZGVycyBzdWZmaXgsIGkuZS4gdGVzdC5odG1sIGhh
cyBpdHMgaGVhZGVycyBzZXQgZnJvbQordGVzdC5odG1sLmhlYWRlcnMuIFRoZSBmb3JtYXQgb2Yg
dGhlIC5oZWFkZXJzIGZpbGUgaXMgcGxhaW50ZXh0LCB3aXRoCitlYWNoIGxpbmUgY29udGFpbmlu
Zzo6CisKKyAgSGVhZGVyLU5hbWU6IGhlYWRlcl92YWx1ZQorCitJbiBhZGRpdGlvbiBoZWFkZXJz
IGNhbiBiZSBzZXQgZm9yIGEgd2hvbGUgZGlyZWN0b3J5IG9mIGZpbGVzIChidXQgbm90CitzdWJk
aXJlY3RvcmllcyksIHVzaW5nIGEgZmlsZSBjYWxsZWQgYF9fZGlyX18uaGVhZGVyc2AuCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMv
d3B0c2VydmUvZG9jcy9pbmRleC5yc3QgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvZG9jcy9pbmRleC5yc3QKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTlm
NjMwYzc2MGY2ZTBkMmIxNTZjZWI0NWM0NGFmNDIwMDc3NTdjMQotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2
ZS9kb2NzL2luZGV4LnJzdApAQCAtMCwwICsxLDM1IEBACisuLiB3cHRzZXJ2ZSBkb2N1bWVudGF0
aW9uIG1hc3RlciBmaWxlLCBjcmVhdGVkIGJ5CisgICBzcGhpbngtcXVpY2tzdGFydCBvbiBXZWQg
QXVnIDE0IDE3OjIzOjI0IDIwMTMuCisgICBZb3UgY2FuIGFkYXB0IHRoaXMgZmlsZSBjb21wbGV0
ZWx5IHRvIHlvdXIgbGlraW5nLCBidXQgaXQgc2hvdWxkIGF0IGxlYXN0CisgICBjb250YWluIHRo
ZSByb290IGB0b2N0cmVlYCBkaXJlY3RpdmUuCisKK1dlYiBQbGF0Zm9ybSBUZXN0IFNlcnZlcgor
PT09PT09PT09PT09PT09PT09PT09PT09CisKK0EgcHl0aG9uLWJhc2VkIEhUVFAgc2VydmVyIHNw
ZWNpZmljYWxseSB0YXJnZXRlZCBhdCBiZWluZyB1c2VkIGZvcgordGVzdGluZyB0aGUgd2ViIHBs
YXRmb3JtLiBUaGlzIG1lYW5zIHRoYXQgZXh0cmVtZSBmbGV4aWJpbGl0eSDigJQKK2luY2x1ZGlu
ZyB0aGUgcG9zc2liaWxpdHkgb2YgSFRUUCBub24tY29uZm9ybWFuY2Ug4oCUIGluIHRoZSByZXNw
b25zZSBpcworc3VwcG9ydGVkLgorCitDb250ZW50czoKKworLi4gdG9jdHJlZTo6CisgICA6bWF4
ZGVwdGg6IDIKKworICAgaW50cm9kdWN0aW9uCisgICBzZXJ2ZXIKKyAgIHJvdXRlcgorICAgcmVx
dWVzdAorICAgcmVzcG9uc2UKKyAgIHN0YXNoCisgICBoYW5kbGVycworICAgcGlwZXMKKworCitJ
bmRpY2VzIGFuZCB0YWJsZXMKKz09PT09PT09PT09PT09PT09PQorCisqIDpyZWY6YGdlbmluZGV4
YAorKiA6cmVmOmBtb2RpbmRleGAKKyogOnJlZjpgc2VhcmNoYAorCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvZG9j
cy9pbnRyb2R1Y3Rpb24ucnN0IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dw
dHNlcnZlL3Rvb2xzL3dwdHNlcnZlL2RvY3MvaW50cm9kdWN0aW9uLnJzdApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
NTg1YTk4M2EyZWQwZTZhYTk1YTZhZDhhMmNjMDgzYWZhMDkyN2Y1Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNl
cnZlL2RvY3MvaW50cm9kdWN0aW9uLnJzdApAQCAtMCwwICsxLDUxIEBACitJbnRyb2R1Y3Rpb24K
Kz09PT09PT09PT09PQorCit3cHRzZXJ2ZSBoYXMgYmVlbiBkZXNpZ25lZCB3aXRoIHRoZSBzcGVj
aWZpYyBnb2FsIG9mIG1ha2luZyBhIHNlcnZlcgordGhhdCBpcyBzdWl0YWJsZSBmb3Igd3JpdGlu
ZyB0ZXN0cyBmb3IgdGhlIHdlYiBwbGF0Zm9ybS4gVGhpcyBtZWFucwordGhhdCBpdCBjYW5ub3Qg
dXNlIGNvbW1vbiBhYnN0cmFjdGlvbnMgb3ZlciBIVFRQIHN1Y2ggYXMgV1NHSSwgc2luY2UKK3Ro
ZXNlIGFzc3VtZSB0aGF0IHRoZSBnb2FsIGlzIHRvIGdlbmVyYXRlIGEgd2VsbC1mb3JtZWQgSFRU
UAorcmVzcG9uc2UuIFRlc3RjYXNlcywgaG93ZXZlciwgb2Z0ZW4gcmVxdWlyZSBwcmVjaXNlIGNv
bnRyb2wgb2YgdGhlCitleGFjdCBieXRlcyBzZW50IG92ZXIgdGhlIHdpcmUgYW5kIHRoZWlyIHRp
bWluZy4gVGhlIGZ1bGwgbGlzdCBvZgorZGVzaWduIGdvYWxzIGZvciB0aGUgc2VydmVyIGFyZToK
KworKiBTdWl0YWJsZSB0byBydW4gb24gaW5kaXZpZHVhbCB0ZXN0IG1hY2hpbmVzIGFuZCBvdmVy
IHRoZSBwdWJsaWMgaW50ZXJuZXQuCisKKyogU3VwcG9ydCBwbGFpbiBUQ1AgYW5kIFNTTCBzZXJ2
ZXJzLgorCisqIFNlcnZlIHN0YXRpYyBmaWxlcyB3aXRoIHRoZSBtaW5pbXVtIG9mIGNvbmZpZ3Vy
YXRpb24uCisKKyogQWxsb3cgaGVhZGVycyB0byBiZSBvdmVyd3JpdHRlbiBvbiBhIHBlci1maWxl
IGFuZCBwZXItZGlyZWN0b3J5CisgIGJhc2lzLgorCisqIEZ1bGwgY3VzdG9taXNhdGlvbiBvZiBo
ZWFkZXJzIHNlbnQgKGUuZy4gYWx0ZXJpbmcgb3Igb21pdHRpbmcKKyAgIm1hbmRhdG9yeSIgaGVh
ZGVycykuCisKKyogU2ltcGxlIHBlci1jbGllbnQgc3RhdGUuCisKKyogQ29tcGxleCBsb2dpYyBp
biB0ZXN0cywgdXAgdG8gcHJlY2lzZSBjb250cm9sIG92ZXIgdGhlIGluZGl2aWR1YWwKKyAgYnl0
ZXMgc2VudCBhbmQgdGhlIHRpbWluZyBvZiBzZW5kaW5nIHRoZW0uCisKK1JlcXVlc3QgSGFuZGxp
bmcKKy0tLS0tLS0tLS0tLS0tLS0KKworQXQgdGhlIGhpZ2ggbGV2ZWwsIHRoZSBkZXNpZ24gb2Yg
dGhlIHNlcnZlciBpcyBiYXNlZCBhcm91bmQgc2ltaWxhcgorY29uY2VwdHMgdG8gdGhvc2UgZm91
bmQgaW4gY29tbW9uIHdlYiBmcmFtZXdvcmtzIGxpa2UgRGphbmdvLCBQeXJhbWlkCitvciBGbGFz
ay4gSW4gcGFydGljdWxhciB0aGUgbGlmZWN5Y2xlIG9mIGEgdHlwaWNhbCByZXF1ZXN0IHdpbGwg
YmUKK2ZhbWlsaWFyIHRvIHVzZXJzIG9mIHRoZXNlIHN5c3RlbXMuIEluY29taW5nIHJlcXVlc3Rz
IGFyZSBwYXJzZWQgYW5kIGEKKzpkb2M6YFJlcXVlc3QgPHJlcXVlc3Q+YCBvYmplY3QgaXMgY29u
c3RydWN0ZWQuIFRoaXMgb2JqZWN0IGlzIHBhc3NlZAordG8gYSA6cmVmOmBSb3V0ZXIgPHJvdXRl
ci5JbnRlcmZhY2U+YCBpbnN0YW5jZSwgd2hpY2ggaXMKK3Jlc3BvbnNpYmxlIGZvciBtYXBwaW5n
IHRoZSByZXF1ZXN0IG1ldGhvZCBhbmQgcGF0aCB0byBhIGhhbmRsZXIKK2Z1bmN0aW9uLiBUaGlz
IGhhbmRsZXIgaXMgcGFzc2VkIHR3byBhcmd1bWVudHM7IHRoZSByZXF1ZXN0IG9iamVjdCBhbmQK
K2EgOmRvYzpgUmVzcG9uc2UgPHJlc3BvbnNlPmAgb2JqZWN0LiBJbiBjYXNlcyB3aGVyZSBvbmx5
IHNpbXBsZQorcmVzcG9uc2VzIGFyZSByZXF1aXJlZCwgdGhlIGhhbmRsZXIgZnVuY3Rpb24gbWF5
IGZpbGwgaW4gdGhlCitwcm9wZXJ0aWVzIG9mIHRoZSByZXNwb25zZSBvYmplY3QgYW5kIHRoZSBz
ZXJ2ZXIgd2lsbCB0YWtlIGNhcmUgb2YKK2NvbnN0cnVjdGluZyB0aGUgcmVzcG9uc2UuIEhvd2V2
ZXIgZWFjaCBSZXNwb25zZSBhbHNvIGNvbnRhaW5zIGEKKzpyZWY6YFJlc3BvbnNlV3JpdGVyIDxy
ZXNwb25zZS5JbnRlcmZhY2U+YCB3aGljaCBjYW4gYmUKK3VzZWQgdG8gZGlyZWN0bHkgY29udHJv
bCB0aGUgVENQIHNvY2tldC4KKworQnkgZGVmYXVsdCB0aGVyZSBhcmUgc2V2ZXJhbCBidWlsdC1p
biBoYW5kbGVyIGZ1bmN0aW9ucyB0aGF0IHByb3ZpZGUgYQoraGlnaGVyIGxldmVsIEFQSSB0aGFu
IGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgdGhlIFJlc3BvbnNlCitvYmplY3QuIFRoZXNlIGFyZSBk
b2N1bWVudGVkIGluIDpkb2M6YGhhbmRsZXJzYC4KKworCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvZG9jcy9tYWtl
LmJhdCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93
cHRzZXJ2ZS9kb2NzL21ha2UuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwYzcxZmY1ZGRkZjIzMDFjMjI5YTNl
MGFlNmFmNTUwNTllYjI2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvZG9jcy9tYWtlLmJhdApAQCAt
MCwwICsxLDE5MCBAQAorQEVDSE8gT0ZGCisKK1JFTSBDb21tYW5kIGZpbGUgZm9yIFNwaGlueCBk
b2N1bWVudGF0aW9uCisKK2lmICIlU1BISU5YQlVJTEQlIiA9PSAiIiAoCisJc2V0IFNQSElOWEJV
SUxEPXNwaGlueC1idWlsZAorKQorc2V0IEJVSUxERElSPV9idWlsZAorc2V0IEFMTFNQSElOWE9Q
VFM9LWQgJUJVSUxERElSJS9kb2N0cmVlcyAlU1BISU5YT1BUUyUgLgorc2V0IEkxOE5TUEhJTlhP
UFRTPSVTUEhJTlhPUFRTJSAuCitpZiBOT1QgIiVQQVBFUiUiID09ICIiICgKKwlzZXQgQUxMU1BI
SU5YT1BUUz0tRCBsYXRleF9wYXBlcl9zaXplPSVQQVBFUiUgJUFMTFNQSElOWE9QVFMlCisJc2V0
IEkxOE5TUEhJTlhPUFRTPS1EIGxhdGV4X3BhcGVyX3NpemU9JVBBUEVSJSAlSTE4TlNQSElOWE9Q
VFMlCispCisKK2lmICIlMSIgPT0gIiIgZ290byBoZWxwCisKK2lmICIlMSIgPT0gImhlbHAiICgK
Kwk6aGVscAorCWVjaG8uUGxlYXNlIHVzZSBgbWFrZSBePHRhcmdldF4+YCB3aGVyZSBePHRhcmdl
dF4+IGlzIG9uZSBvZgorCWVjaG8uICBodG1sICAgICAgIHRvIG1ha2Ugc3RhbmRhbG9uZSBIVE1M
IGZpbGVzCisJZWNoby4gIGRpcmh0bWwgICAgdG8gbWFrZSBIVE1MIGZpbGVzIG5hbWVkIGluZGV4
Lmh0bWwgaW4gZGlyZWN0b3JpZXMKKwllY2hvLiAgc2luZ2xlaHRtbCB0byBtYWtlIGEgc2luZ2xl
IGxhcmdlIEhUTUwgZmlsZQorCWVjaG8uICBwaWNrbGUgICAgIHRvIG1ha2UgcGlja2xlIGZpbGVz
CisJZWNoby4gIGpzb24gICAgICAgdG8gbWFrZSBKU09OIGZpbGVzCisJZWNoby4gIGh0bWxoZWxw
ICAgdG8gbWFrZSBIVE1MIGZpbGVzIGFuZCBhIEhUTUwgaGVscCBwcm9qZWN0CisJZWNoby4gIHF0
aGVscCAgICAgdG8gbWFrZSBIVE1MIGZpbGVzIGFuZCBhIHF0aGVscCBwcm9qZWN0CisJZWNoby4g
IGRldmhlbHAgICAgdG8gbWFrZSBIVE1MIGZpbGVzIGFuZCBhIERldmhlbHAgcHJvamVjdAorCWVj
aG8uICBlcHViICAgICAgIHRvIG1ha2UgYW4gZXB1YgorCWVjaG8uICBsYXRleCAgICAgIHRvIG1h
a2UgTGFUZVggZmlsZXMsIHlvdSBjYW4gc2V0IFBBUEVSPWE0IG9yIFBBUEVSPWxldHRlcgorCWVj
aG8uICB0ZXh0ICAgICAgIHRvIG1ha2UgdGV4dCBmaWxlcworCWVjaG8uICBtYW4gICAgICAgIHRv
IG1ha2UgbWFudWFsIHBhZ2VzCisJZWNoby4gIHRleGluZm8gICAgdG8gbWFrZSBUZXhpbmZvIGZp
bGVzCisJZWNoby4gIGdldHRleHQgICAgdG8gbWFrZSBQTyBtZXNzYWdlIGNhdGFsb2dzCisJZWNo
by4gIGNoYW5nZXMgICAgdG8gbWFrZSBhbiBvdmVydmlldyBvdmVyIGFsbCBjaGFuZ2VkL2FkZGVk
L2RlcHJlY2F0ZWQgaXRlbXMKKwllY2hvLiAgbGlua2NoZWNrICB0byBjaGVjayBhbGwgZXh0ZXJu
YWwgbGlua3MgZm9yIGludGVncml0eQorCWVjaG8uICBkb2N0ZXN0ICAgIHRvIHJ1biBhbGwgZG9j
dGVzdHMgZW1iZWRkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gaWYgZW5hYmxlZAorCWdvdG8gZW5k
CispCisKK2lmICIlMSIgPT0gImNsZWFuIiAoCisJZm9yIC9kICUlaSBpbiAoJUJVSUxERElSJVwq
KSBkbyBybWRpciAvcSAvcyAlJWkKKwlkZWwgL3EgL3MgJUJVSUxERElSJVwqCisJZ290byBlbmQK
KykKKworaWYgIiUxIiA9PSAiaHRtbCIgKAorCSVTUEhJTlhCVUlMRCUgLWIgaHRtbCAlQUxMU1BI
SU5YT1BUUyUgJUJVSUxERElSJS9odG1sCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQorCWVj
aG8uCisJZWNoby5CdWlsZCBmaW5pc2hlZC4gVGhlIEhUTUwgcGFnZXMgYXJlIGluICVCVUlMRERJ
UiUvaHRtbC4KKwlnb3RvIGVuZAorKQorCitpZiAiJTEiID09ICJkaXJodG1sIiAoCisJJVNQSElO
WEJVSUxEJSAtYiBkaXJodG1sICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL2Rpcmh0bWwKKwlp
ZiBlcnJvcmxldmVsIDEgZXhpdCAvYiAxCisJZWNoby4KKwllY2hvLkJ1aWxkIGZpbmlzaGVkLiBU
aGUgSFRNTCBwYWdlcyBhcmUgaW4gJUJVSUxERElSJS9kaXJodG1sLgorCWdvdG8gZW5kCispCisK
K2lmICIlMSIgPT0gInNpbmdsZWh0bWwiICgKKwklU1BISU5YQlVJTEQlIC1iIHNpbmdsZWh0bWwg
JUFMTFNQSElOWE9QVFMlICVCVUlMRERJUiUvc2luZ2xlaHRtbAorCWlmIGVycm9ybGV2ZWwgMSBl
eGl0IC9iIDEKKwllY2hvLgorCWVjaG8uQnVpbGQgZmluaXNoZWQuIFRoZSBIVE1MIHBhZ2VzIGFy
ZSBpbiAlQlVJTERESVIlL3NpbmdsZWh0bWwuCisJZ290byBlbmQKKykKKworaWYgIiUxIiA9PSAi
cGlja2xlIiAoCisJJVNQSElOWEJVSUxEJSAtYiBwaWNrbGUgJUFMTFNQSElOWE9QVFMlICVCVUlM
RERJUiUvcGlja2xlCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQorCWVjaG8uCisJZWNoby5C
dWlsZCBmaW5pc2hlZDsgbm93IHlvdSBjYW4gcHJvY2VzcyB0aGUgcGlja2xlIGZpbGVzLgorCWdv
dG8gZW5kCispCisKK2lmICIlMSIgPT0gImpzb24iICgKKwklU1BISU5YQlVJTEQlIC1iIGpzb24g
JUFMTFNQSElOWE9QVFMlICVCVUlMRERJUiUvanNvbgorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9i
IDEKKwllY2hvLgorCWVjaG8uQnVpbGQgZmluaXNoZWQ7IG5vdyB5b3UgY2FuIHByb2Nlc3MgdGhl
IEpTT04gZmlsZXMuCisJZ290byBlbmQKKykKKworaWYgIiUxIiA9PSAiaHRtbGhlbHAiICgKKwkl
U1BISU5YQlVJTEQlIC1iIGh0bWxoZWxwICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL2h0bWxo
ZWxwCisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQorCWVjaG8uCisJZWNoby5CdWlsZCBmaW5p
c2hlZDsgbm93IHlvdSBjYW4gcnVuIEhUTUwgSGVscCBXb3Jrc2hvcCB3aXRoIHRoZSBeCisuaGhw
IHByb2plY3QgZmlsZSBpbiAlQlVJTERESVIlL2h0bWxoZWxwLgorCWdvdG8gZW5kCispCisKK2lm
ICIlMSIgPT0gInF0aGVscCIgKAorCSVTUEhJTlhCVUlMRCUgLWIgcXRoZWxwICVBTExTUEhJTlhP
UFRTJSAlQlVJTERESVIlL3F0aGVscAorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDEKKwllY2hv
LgorCWVjaG8uQnVpbGQgZmluaXNoZWQ7IG5vdyB5b3UgY2FuIHJ1biAicWNvbGxlY3Rpb25nZW5l
cmF0b3IiIHdpdGggdGhlIF4KKy5xaGNwIHByb2plY3QgZmlsZSBpbiAlQlVJTERESVIlL3F0aGVs
cCwgbGlrZSB0aGlzOgorCWVjaG8uXj4gcWNvbGxlY3Rpb25nZW5lcmF0b3IgJUJVSUxERElSJVxx
dGhlbHBcd3B0c2VydmUucWhjcAorCWVjaG8uVG8gdmlldyB0aGUgaGVscCBmaWxlOgorCWVjaG8u
Xj4gYXNzaXN0YW50IC1jb2xsZWN0aW9uRmlsZSAlQlVJTERESVIlXHF0aGVscFx3cHRzZXJ2ZS5n
aGMKKwlnb3RvIGVuZAorKQorCitpZiAiJTEiID09ICJkZXZoZWxwIiAoCisJJVNQSElOWEJVSUxE
JSAtYiBkZXZoZWxwICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL2RldmhlbHAKKwlpZiBlcnJv
cmxldmVsIDEgZXhpdCAvYiAxCisJZWNoby4KKwllY2hvLkJ1aWxkIGZpbmlzaGVkLgorCWdvdG8g
ZW5kCispCisKK2lmICIlMSIgPT0gImVwdWIiICgKKwklU1BISU5YQlVJTEQlIC1iIGVwdWIgJUFM
TFNQSElOWE9QVFMlICVCVUlMRERJUiUvZXB1YgorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDEK
KwllY2hvLgorCWVjaG8uQnVpbGQgZmluaXNoZWQuIFRoZSBlcHViIGZpbGUgaXMgaW4gJUJVSUxE
RElSJS9lcHViLgorCWdvdG8gZW5kCispCisKK2lmICIlMSIgPT0gImxhdGV4IiAoCisJJVNQSElO
WEJVSUxEJSAtYiBsYXRleCAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS9sYXRleAorCWlmIGVy
cm9ybGV2ZWwgMSBleGl0IC9iIDEKKwllY2hvLgorCWVjaG8uQnVpbGQgZmluaXNoZWQ7IHRoZSBM
YVRlWCBmaWxlcyBhcmUgaW4gJUJVSUxERElSJS9sYXRleC4KKwlnb3RvIGVuZAorKQorCitpZiAi
JTEiID09ICJ0ZXh0IiAoCisJJVNQSElOWEJVSUxEJSAtYiB0ZXh0ICVBTExTUEhJTlhPUFRTJSAl
QlVJTERESVIlL3RleHQKKwlpZiBlcnJvcmxldmVsIDEgZXhpdCAvYiAxCisJZWNoby4KKwllY2hv
LkJ1aWxkIGZpbmlzaGVkLiBUaGUgdGV4dCBmaWxlcyBhcmUgaW4gJUJVSUxERElSJS90ZXh0Lgor
CWdvdG8gZW5kCispCisKK2lmICIlMSIgPT0gIm1hbiIgKAorCSVTUEhJTlhCVUlMRCUgLWIgbWFu
ICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL21hbgorCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9i
IDEKKwllY2hvLgorCWVjaG8uQnVpbGQgZmluaXNoZWQuIFRoZSBtYW51YWwgcGFnZXMgYXJlIGlu
ICVCVUlMRERJUiUvbWFuLgorCWdvdG8gZW5kCispCisKK2lmICIlMSIgPT0gInRleGluZm8iICgK
KwklU1BISU5YQlVJTEQlIC1iIHRleGluZm8gJUFMTFNQSElOWE9QVFMlICVCVUlMRERJUiUvdGV4
aW5mbworCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDEKKwllY2hvLgorCWVjaG8uQnVpbGQgZmlu
aXNoZWQuIFRoZSBUZXhpbmZvIGZpbGVzIGFyZSBpbiAlQlVJTERESVIlL3RleGluZm8uCisJZ290
byBlbmQKKykKKworaWYgIiUxIiA9PSAiZ2V0dGV4dCIgKAorCSVTUEhJTlhCVUlMRCUgLWIgZ2V0
dGV4dCAlSTE4TlNQSElOWE9QVFMlICVCVUlMRERJUiUvbG9jYWxlCisJaWYgZXJyb3JsZXZlbCAx
IGV4aXQgL2IgMQorCWVjaG8uCisJZWNoby5CdWlsZCBmaW5pc2hlZC4gVGhlIG1lc3NhZ2UgY2F0
YWxvZ3MgYXJlIGluICVCVUlMRERJUiUvbG9jYWxlLgorCWdvdG8gZW5kCispCisKK2lmICIlMSIg
PT0gImNoYW5nZXMiICgKKwklU1BISU5YQlVJTEQlIC1iIGNoYW5nZXMgJUFMTFNQSElOWE9QVFMl
ICVCVUlMRERJUiUvY2hhbmdlcworCWlmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDEKKwllY2hvLgor
CWVjaG8uVGhlIG92ZXJ2aWV3IGZpbGUgaXMgaW4gJUJVSUxERElSJS9jaGFuZ2VzLgorCWdvdG8g
ZW5kCispCisKK2lmICIlMSIgPT0gImxpbmtjaGVjayIgKAorCSVTUEhJTlhCVUlMRCUgLWIgbGlu
a2NoZWNrICVBTExTUEhJTlhPUFRTJSAlQlVJTERESVIlL2xpbmtjaGVjaworCWlmIGVycm9ybGV2
ZWwgMSBleGl0IC9iIDEKKwllY2hvLgorCWVjaG8uTGluayBjaGVjayBjb21wbGV0ZTsgbG9vayBm
b3IgYW55IGVycm9ycyBpbiB0aGUgYWJvdmUgb3V0cHV0IF4KK29yIGluICVCVUlMRERJUiUvbGlu
a2NoZWNrL291dHB1dC50eHQuCisJZ290byBlbmQKKykKKworaWYgIiUxIiA9PSAiZG9jdGVzdCIg
KAorCSVTUEhJTlhCVUlMRCUgLWIgZG9jdGVzdCAlQUxMU1BISU5YT1BUUyUgJUJVSUxERElSJS9k
b2N0ZXN0CisJaWYgZXJyb3JsZXZlbCAxIGV4aXQgL2IgMQorCWVjaG8uCisJZWNoby5UZXN0aW5n
IG9mIGRvY3Rlc3RzIGluIHRoZSBzb3VyY2VzIGZpbmlzaGVkLCBsb29rIGF0IHRoZSBeCityZXN1
bHRzIGluICVCVUlMRERJUiUvZG9jdGVzdC9vdXRwdXQudHh0LgorCWdvdG8gZW5kCispCisKKzpl
bmQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2
ZS90b29scy93cHRzZXJ2ZS9kb2NzL3BpcGVzLnJzdCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS9kb2NzL3BpcGVzLnJzdApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lYzEzZGRjOTNmMWIyOGFmMDlhNmJlZGMwNzlkNjY3ZWNjNGM5ODNjCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xz
L3dwdHNlcnZlL2RvY3MvcGlwZXMucnN0CkBAIC0wLDAgKzEsMTQ2IEBACitQaXBlcworPT09PT09
CisKK1BpcGVzIGFyZSBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgdXNlZCB3aGVuIHNlcnZpbmcgZmls
ZXMgdG8gYWx0ZXIgcGFydHMKK29mIHRoZSByZXNwb25zZS4gVGhlc2UgYXJlIGludm9rZWQgYnkg
YWRkaW5nIGEgcGlwZT0gcXVlcnkgcGFyYW1ldGVyCit0YWtpbmcgYSB8IHNlcGFyYXRlZCBsaXN0
IG9mIHBpcGUgZnVuY3Rpb25zIGFuZCBwYXJhbWV0ZXJzLiBUaGUgcGlwZQorZnVuY3Rpb25zIGFy
ZSBhcHBsaWVkIHRvIHRoZSByZXNwb25zZSBmcm9tIGxlZnQgdG8gcmlnaHQuIEZvciBleGFtcGxl
OjoKKworICBHRVQgL3NhbXBsZS50eHQ/cGlwZT1zbGljZSgxLDIwMCl8c3RhdHVzKDQwNCkuCisK
K1RoaXMgd291bGQgc2VydmUgYnl0ZXMgMSB0byAxOTksIGluY2x1c2l2ZSwgb2YgZm9vLnR4dCB3
aXRoIHRoZSBIVFRQIHN0YXR1cworY29kZSA0MDQuCisKK1RoZXJlIGFyZSBzZXZlcmFsIGJ1aWx0
LWluIHBpcGUgZnVuY3Rpb25zLCBhbmQgaXQgaXMgcG9zc2libGUgdG8gYWRkCittb3JlIHVzaW5n
IHRoZSBgQHBpcGVgIGRlY29yYXRvciBvbiBhIGZ1bmN0aW9uLCBpZiByZXF1aXJlZC4KKworQnVp
bHQtSW4gUGlwZXMKKy0tLS0tLS0tLS0tLS0tCisKK3N1Ygorfn5+CisKK1VzZWQgdG8gc3Vic3Rp
dHV0ZSB2YXJpYWJsZXMgZnJvbSB0aGUgc2VydmVyIGVudmlyb25tZW50LCBvciBmcm9tIHRoZQor
cmVxdWVzdCBpbnRvIHRoZSByZXNwb25zZS4KKworU3Vic3RpdHV0aW9ucyBhcmUgbWFya2VkIGlu
IGEgZmlsZSB1c2luZyBhIGJsb2NrIGRlbGltaXRlZCBieSBge3tgCithbmQgYH19YC4gSW5zaWRl
IHRoZSBibG9jayB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlOgorCisgIGB7
e2hvc3R9fWAKKyAgICBUaGUgaG9zdCBuYW1lIG9mIHRoZSBzZXJ2ZXIgZXhjbHVkaW5nIGFueSBz
dWJkb21haW4gcGFydC4KKworICBge3tkb21haW5zW119fWAKKyAgICBUaGUgZG9tYWluIG5hbWUg
b2YgYSBwYXJ0aWN1bGFyIHN1YmRvbWFpbgorICAgICAgZS5nLiBge3tkb21haW5zW3d3d119fWAg
Zm9yIHRoZSBgd3d3YCBzdWJkb21haW4uCisKKyAgYHt7cG9ydHNbXVtdfX1gCisgICAgVGhlIHBv
cnQgbnVtYmVyIG9mIHNlcnZlcnMsIGJ5IHByb3RvY29sCisgICAgICBlLmcuIGB7e3BvcnRzW2h0
dHBdWzBdfX1gIGZvciB0aGUgZmlyc3QgKGFuZCwgZGVwZW5kaW5nIG9uIHNldHVwLAorICAgICAg
cG9zc2libHkgb25seSkgaHR0cCBzZXJ2ZXIKKworICBge3toZWFkZXJzW119fWAKKyAgICBUaGUg
SFRUUCBoZWFkZXJzIGluIHRoZSByZXF1ZXN0CisgICAgICBlLmcuIGB7e2hlYWRlcnNbWC1UZXN0
XX19YCBmb3IgYSBoeXBvdGhldGljYWwgYFgtVGVzdGAgaGVhZGVyLgorCisgIGB7e0dFVFtdfX1g
CisgICAgVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHRoZSByZXF1ZXN0CisgICAgICBlLmcuIGB7
e0dFVFtpZF19fWAgZm9yIGFuIGlkIHBhcmFtZXRlciBzZW50IHdpdGggdGhlIHJlcXVlc3QuCisK
K1NvLCBmb3IgZXhhbXBsZSwgdG8gd3JpdGUgYSBqYXZhc2NyaXB0IGZpbGUgY2FsbGVkIGB4aHIu
anNgIHRoYXQKK2RlcGVuZHMgb24gdGhlIGhvc3QgbmFtZSBvZiB0aGUgc2VydmVyLCB3aXRob3V0
IGhhcmRjb2RpbmcsIG9uZSBtaWdodAord3JpdGU6OgorCisgICAgdmFyIHNlcnZlcl91cmwgPSBo
dHRwOi8ve3tob3N0fX0vcGF0aC90by9yZXNvdXJjZTsKKyAgICAvL0NyZWF0ZSB0aGUgYWN0dWFs
IFhIUiBhbmQgc28gb24KKworVGhlIGZpbGUgd291bGQgdGhlbiBiZSBpbmNsdWRlZCBhczoKKwor
ICAgIDxzY3JpcHQgc3JjPSJ4aHIuanM/cGlwZT1zdWIiPjwvc2NyaXB0PgorCitzdGF0dXMKK35+
fn5+fgorCitVc2VkIHRvIHNldCB0aGUgSFRUUCBzdGF0dXMgb2YgdGhlIHJlc3BvbnNlLCBmb3Ig
ZXhhbXBsZTo6CisKKyAgICBleGFtcGxlLmpzP3BpcGU9c3RhdHVzKDQxMCkKKworaGVhZGVycwor
fn5+fn5+fgorCitVc2VkIHRvIGFkZCBvciByZXBsYWNlIGh0dHAgaGVhZGVycyBpbiB0aGUgcmVz
cG9uc2UuIFRha2VzIHR3byBvcgordGhyZWUgYXJndW1lbnRzOyB0aGUgaGVhZGVyIG5hbWUsIHRo
ZSBoZWFkZXIgdmFsdWUgYW5kIHdoZXRoZXIgdG8KK2FwcGVuZCB0aGUgaGVhZGVyIHJhdGhlciB0
aGFuIHJlcGxhY2UgYW4gZXhpc3RpbmcgaGVhZGVyIChkZWZhdWx0OgorRmFsc2UpLiBTbywgZm9y
IGV4YW1wbGUsIGEgcmVxdWVzdCBmb3I6OgorCisgICAgZXhhbXBsZS5odG1sP3BpcGU9aGVhZGVy
KENvbnRlbnQtVHlwZSx0ZXh0L3BsYWluKQorCitjYXVzZXMgZXhhbXBsZS5odG1sIHRvIGJlIHJl
dHVybmVkIHdpdGggYSB0ZXh0L3BsYWluIGNvbnRlbnQgdHlwZQord2hlcmVhczo6CisKKyAgICBl
eGFtcGxlLmh0bWw/cGlwZT1oZWFkZXIoQ29udGVudC1UeXBlLHRleHQvcGxhaW4sVHJ1ZSkKKwor
V2lsbCBjYXVzZSBleGFtcGxlLmh0bWwgdG8gYmUgcmV0dXJuZWQgd2l0aCBib3RoIHRleHQvaHRt
bCBhbmQKK3RleHQvcGxhaW4gY29udGVudC10eXBlIGhlYWRlcnMuCisKK3NsaWNlCit+fn5+fgor
CitVc2VkIHRvIHNlbmQgb25seSBwYXJ0IG9mIGEgcmVzcG9uc2UgYm9keS4gVGFrZXMgdGhlIHN0
YXJ0IGFuZCwKK29wdGlvbmFsbHksIGVuZCBieXRlcyBhcyBhcmd1bWVudHMsIGFsdGhvdWdoIGVp
dGhlciBjYW4gYmUgbnVsbCB0bworaW5kaWNhdGUgdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgZmls
ZSwgcmVzcGVjdGl2ZWx5LiBTbyBmb3IgZXhhbXBsZTo6CisKKyAgICBleGFtcGxlLnR4dD9waXBl
PXNsaWNlKDEwLDIwKQorCitXb3VsZCByZXN1bHQgaW4gYSByZXNwb25zZSB3aXRoIGEgYm9keSBj
b250YWluaW5nIDEwIGJ5dGVzIG9mCitleGFtcGxlLnR4dCBpbmNsdWRpbmcgYnl0ZSAxMCBidXQg
ZXhjbHVkaW5nIGJ5dGUgMjAuCisKKzo6CisKKyAgICBleGFtcGxlLnR4dD9waXBlPXNsaWNlKDEw
KQorCitXb3VsZCBjYXVzZSBhbGwgYnl0ZXMgZnJvbSBieXRlIDEwIG9mIGV4YW1wbGUudHh0IHRv
IGJlIHNlbnQsIGJ1dDo6CisKKyAgICBleGFtcGxlLnR4dD9waXBlPXNsaWNlKG51bGwsMjApCisK
K1dvdWxkIHNlbmQgdGhlIGZpcnN0IDIwIGJ5dGVzIG9mIGV4YW1wbGUudHh0LgorCit0cmlja2xl
Cit+fn5+fn5+CisKK1VzZWQgdG8gc2VuZCB0aGUgYm9keSBvZiBhIHJlc3BvbnNlIGluIGNodW5r
cyB3aXRoIGRlbGF5cy4gVGFrZXMgYQorc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMgYSBtaWNyb3N5
bnRheCBjb25zaXN0aW5nIG9mIGNvbG9uLXNlcGFyYXRlZAorY29tbWFuZHMuIFRoZXJlIGFyZSB0
aHJlZSB0eXBlcyBvZiBjb21tYW5kczoKKworKiBCYXJlIG51bWJlcnMgcmVwcmVzZW50IGEgbnVt
YmVyIG9mIGJ5dGVzIHRvIHNlbmQKKworKiBOdW1iZXJzIHByZWZpeGVkIGBkYCBpbmRpY2F0ZSBh
IGRlbGF5IGluIHNlY29uZHMKKworKiBOdW1iZXJzIHByZWZpeGVkIGByYCBtdXN0IG9ubHkgYXBw
ZWFyIGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQsIGFuZAorICBpbmRpY2F0ZSB0aGF0IHRoZSBw
cmVjZWRpbmcgTiBpdGVtcyBtdXN0IGJlIHJlcGVhdGVkIHVudGlsIHRoZXJlIGlzCisgIG5vIG1v
cmUgY29udGVudCB0byBzZW5kLiBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHJlcGVhdCBtdXN0IGJl
IGV2ZW4uCisKK0luIHRoZSBhYnNlbmNlIG9mIGEgcmVwZXRpdGlvbiBjb21tYW5kLCB0aGUgZW50
aXJlIHJlbWFpbmRlciBvZiB0aGUgY29udGVudCBpcworc2VudCBhdCBvbmNlIHdoZW4gdGhlIGNv
bW1hbmQgbGlzdCBpcyBleGhhdXN0ZWQuIFNvIGZvciBleGFtcGxlOjoKKworICAgIGV4YW1wbGUu
dHh0P3BpcGU9dHJpY2tsZShkMSkKKworY2F1c2VzIGEgMXMgZGVsYXkgYmVmb3JlIHNlbmRpbmcg
dGhlIGVudGlyZXR5IG9mIGV4YW1wbGUudHh0LgorCis6OgorCisgICAgZXhhbXBsZS50eHQ/cGlw
ZT10cmlja2xlKDEwMDpkMSkKKworY2F1c2VzIDEwMCBieXRlcyBvZiBleGFtcGxlLnR4dCB0byBi
ZSBzZW50LCBmb2xsb3dlZCBieSBhIDFzIGRlbGF5LAorYW5kIHRoZW4gdGhlIHJlbWFpbmRlciBv
ZiB0aGUgZmlsZSB0byBiZSBzZW50LiBPbiB0aGUgb3RoZXIgaGFuZDo6CisKKyAgICBleGFtcGxl
LnR4dD9waXBlPXRyaWNrbGUoMTAwOmQxOnIyKQorCitXaWxsIGNhdXNlIHRoZSBmaWxlIHRvIGJl
IHNlbnQgaW4gMTAwIGJ5dGUgY2h1bmtzIHNlcGFyYXRlZCBieSBhIDFzCitkZWxheSB1bnRpbCB0
aGUgd2hvbGUgY29udGVudCBoYXMgYmVlbiBzZW50LgorCisKKzptb2Q6YEludGVyZmFjZSA8cGlw
ZXM+YAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGF1dG9tb2R1bGU6OiB3cHRzZXJ2
ZS5waXBlcworICAgOm1lbWJlcnM6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvZG9jcy9yZXF1ZXN0LnJzdCBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS9k
b2NzL3JlcXVlc3QucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5MGU0ZjBiYjAyMzk3YzAwNmNiNTQ4MjNiOTBl
ODA4YTBkYmQ1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvZG9jcy9yZXF1ZXN0LnJzdApAQCAtMCww
ICsxLDEwIEBACitSZXF1ZXN0Cis9PT09PT09CisKK1JlcXVlc3Qgb2JqZWN0LgorCis6bW9kOmBJ
bnRlcmZhY2UgPHJlcXVlc3Q+YAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gYXV0
b21vZHVsZTo6IHdwdHNlcnZlLnJlcXVlc3QKKyAgIDptZW1iZXJzOgpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL2Rv
Y3MvcmVzcG9uc2UucnN0IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNl
cnZlL3Rvb2xzL3dwdHNlcnZlL2RvY3MvcmVzcG9uc2UucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYzNiNjVj
NzQ0NTY3OTI2OTA2ODdkOGFiYjFkMjAwYWExOTk2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvZG9j
cy9yZXNwb25zZS5yc3QKQEAgLTAsMCArMSwzMyBAQAorUmVzcG9uc2UKKz09PT09PT09CisKK1Jl
c3BvbnNlIG9iamVjdC4gVGhpcyBvYmplY3QgaXMgdXNlZCB0byBjb250cm9sIHRoZSByZXNwb25z
ZSB0aGF0IHdpbGwKK2JlIHNlbnQgdG8gdGhlIEhUVFAgY2xpZW50LiBBIGhhbmRsZXIgZnVuY3Rp
b24gd2lsbCB0YWtlIHRoZSByZXNwb25zZQorb2JqZWN0IGFuZCBmaWxsIGluIHZhcmlvdXMgcGFy
dHMgb2YgdGhlIHJlc3BvbnNlLiBGb3IgZXhhbXBsZSwgYSBwbGFpbgordGV4dCByZXNwb25zZSB3
aXRoIHRoZSBib2R5ICdTb21lIGV4YW1wbGUgY29udGVudCcgY291bGQgYmUgcHJvZHVjZWQgYXM6
OgorCisgIGRlZiBoYW5kbGVyKHJlcXVlc3QsIHJlc3BvbnNlKToKKyAgICAgIHJlc3BvbnNlLmhl
YWRlcnMuc2V0KCJDb250ZW50LVR5cGUiLCAidGV4dC9wbGFpbiIpCisgICAgICByZXNwb25zZS5j
b250ZW50ID0gIlNvbWUgZXhhbXBsZSBjb250ZW50IgorCitUaGUgcmVzcG9uc2Ugb2JqZWN0IGFs
c28gZ2l2ZXMgYWNjZXNzIHRvIGEgUmVzcG9uc2VXcml0ZXIsIHdoaWNoCithbGxvd3MgZGlyZWN0
IGFjY2VzcyB0byB0aGUgcmVzcG9uc2Ugc29ja2V0LiBGb3IgZXhhbXBsZSwgb25lIGNvdWxkCit3
cml0ZSBhIHNpbWlsYXIgcmVzcG9uc2UgYnV0IHdpdGggbW9yZSBleHBsaWNpdCBjb250cm9sIGFz
IGZvbGxvd3M6OgorCisgIGltcG9ydCB0aW1lCisKKyAgZGVmIGhhbmRsZXIocmVxdWVzdCwgcmVz
cG9uc2UpOgorICAgICAgcmVzcG9uc2UuYWRkX3JlcXVpcmVkX2hlYWRlcnMgPSBGYWxzZSAjIERv
bid0IGltcGxpY2l0bHkgYWRkIEhUVFAgaGVhZGVycworICAgICAgcmVzcG9uc2Uud3JpdGVyLndy
aXRlX2hlYWRlcigiQ29udGVudC1UeXBlIiwgInRleHQvcGxhaW4iKQorICAgICAgcmVzcG9uc2Uu
d3JpdGVyLmVuZF9oZWFkZXJzKCkKKyAgICAgIHJlc3BvbnNlLndyaXRlci53cml0ZSgiU29tZSAi
KQorICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgcmVzcG9uc2Uud3JpdGVyLndyaXRlKCJleGFt
cGxlIGNvbnRlbnQiKQorCisuLiBfcmVzcG9uc2UuSW50ZXJmYWNlOgorCis6bW9kOmBJbnRlcmZh
Y2UgPHJlc3BvbnNlPmAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBhdXRvbW9k
dWxlOjogd3B0c2VydmUucmVzcG9uc2UKKyAgIDptZW1iZXJzOgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL2RvY3Mv
cm91dGVyLnJzdCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90
b29scy93cHRzZXJ2ZS9kb2NzL3JvdXRlci5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjFkNjdkMjIyNjg5YzIx
YThhZWUxZjhiOTk1OTJjZjZkZTg2MDA4YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS9kb2NzL3JvdXRl
ci5yc3QKQEAgLTAsMCArMSw3OCBAQAorUm91dGVyCis9PT09PT0KKworVGhlIHJvdXRlciBpcyB1
c2VkIHRvIG1hdGNoIGluY29taW5nIHJlcXVlc3RzIHRvIHJlcXVlc3QgaGFuZGxlcgorZnVuY3Rp
b25zLiBUeXBpY2FsbHkgdXNlcnMgZG9uJ3QgaW50ZXJhY3Qgd2l0aCB0aGUgcm91dGVyIGRpcmVj
dGx5LAorYnV0IGluc3RlYWQgc2VuZCBhIGxpc3Qgb2Ygcm91dGVzIHRvIHJlZ2lzdGVyIHdoZW4g
c3RhcnRpbmcgdGhlCitzZXJ2ZXIuIEhvd2V2ZXIgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhZGQg
cm91dGVzIGFmdGVyIHN0YXJ0aW5nIHRoZQorc2VydmVyIGJ5IGNhbGxpbmcgdGhlIGByZWdpc3Rl
cmAgbWV0aG9kIG9uIHRoZSBzZXJ2ZXIncyBgcm91dGVyYAorcHJvcGVydHkuCisKK1JvdXRlcyBh
cmUgcmVwcmVzZW50ZWQgYnkgYSB0aHJlZSBpdGVtIHR1cGxlOjoKKworICAgKG1ldGhvZHMsIHBh
dGhfbWF0Y2gsIGhhbmRsZXIpCisKK2BtZXRob2RzYCBpcyBlaXRoZXIgYSBzdHJpbmcgb3IgYSBs
aXN0IG9mIHN0cmluZ3MgaW5kaWNhdGluZyB0aGUgSFRUUAorbWV0aG9kcyB0byBtYXRjaC4gSW4g
Y2FzZXMgd2hlcmUgYWxsIG1ldGhvZHMgc2hvdWxkIG1hdGNoIHRoZXJlIGlzIGEKK3NwZWNpYWwg
c2VudGluZWwgdmFsdWUgYGFueV9tZXRob2RgIHByb3ZpZGVkIGFzIGEgcHJvcGVydHkgb2YgdGhl
Citgcm91dGVyYCBtb2R1bGUgdGhhdCBjYW4gYmUgdXNlZC4KKworYHBhdGhfbWF0Y2hgIGlzIGFu
IGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCBhZ2FpbnN0IHRoZQorcmVxdWVzdCBw
YXRoIHRvIGRlY2lkZSBpZiB0aGUgaGFuZGxlciBzaG91bGQgbWF0Y2guIFRoZXNlIGV4cHJlc3Np
b25zCitmb2xsb3cgYSBjdXN0b20gc3ludGF4IGludGVuZGVkIHRvIG1ha2UgbWF0Y2hpbmcgVVJM
cyBzdHJhaWdodGZvcndhcmQKK2FuZCwgaW4gcGFydGljdWxhciwgdG8gYmUgZWFzaWVyIHRvIHVz
ZSB0aGFuIHJhdyByZWdleHAgZm9yIFVSTAorbWF0Y2hpbmcuIFRoZXJlIGFyZSB0aHJlZSBwb3Nz
aWJsZSBjb21wb25lbnRzIG9mIGEgbWF0Y2ggZXhwcmVzc2lvbjoKKworKiBMaXRlcmFscy4gVGhl
c2UgbWF0Y2ggYW55IGNoYXJhY3Rlci4gVGhlIHNwZWNpYWwgY2hhcmFjdGVycyBcKiwgXHsKKyAg
YW5kIFx9IG11c3QgYmUgZXNjYXBlZCBieSBwcmVmaXhpbmcgdGhlbSB3aXRoIGEgXFwuCisKKyog
TWF0Y2ggZ3JvdXBzLiBUaGVzZSBtYXRjaCBhbnkgY2hhcmFjdGVyIG90aGVyIHRoYW4gLyBhbmQg
c2F2ZSB0aGUKKyAgcmVzdWx0IGFzIGEgbmFtZWQgZ3JvdXAuIFRoZXkgYXJlIGRlbGltaXRlZCBi
eSBjdXJseSBicmFjZXM7IGZvcgorICBleGFtcGxlOjoKKworICAgIHthYmN9CisKKyAgd291bGQg
Y3JlYXRlIGEgbWF0Y2ggZ3JvdXAgd2l0aCB0aGUgbmFtZSBgYWJjYC4KKworKiBTdGFycy4gVGhl
c2UgYXJlIGRlbm90ZWQgd2l0aCBhIGAqYCBhbmQgbWF0Y2ggYW55IGNoYXJhY3RlcgorICBpbmNs
dWRpbmcgLy4gVGhlcmUgY2FuIGJlIGF0IG1vc3Qgb25lIHN0YXIKKyAgcGVyIHBhdHRlcm4gYW5k
IGl0IG11c3QgZm9sbG93IGFueSBtYXRjaCBncm91cHMuCisKK1BhdGggZXhwcmVzc2lvbnMgYWx3
YXlzIG1hdGNoIHRoZSBlbnRpcmUgcmVxdWVzdCBwYXRoIGFuZCBhIGxlYWRpbmcgLworaW4gdGhl
IGV4cHJlc3Npb24gaXMgaW1wbGllZCBldmVuIGlmIGl0IGlzIG5vdCBleHBsaWNpdGx5Citwcm92
aWRlZC4gVGhpcyBtZWFucyB0aGF0IGAvZm9vYCBhbmQgYGZvb2AgYXJlIGVxdWl2YWxlbnQuCisK
K0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHBhdHRlcm4gbWF0Y2hlcyBhbGwgcmVxdWVzdHMg
Zm9yIHJlc291cmNlcyB3aXRoIHRoZQorZXh0ZW5zaW9uIGAucHlgOjoKKworICAqLnB5CisKK1Ro
ZSBmb2xsb3dpbmcgZXhwcmVzc2lvbiBtYXRjaGVzIGFueXRoaW5nIGRpcmVjdGx5IHVuZGVyIGAv
cmVzb3VyY2VzYAord2l0aCBhIGAuaHRtbGAgZXh0ZW5zaW9uLCBhbmQgcGxhY2VzIHRoZSAiZmls
ZW5hbWUiIGluIHRoZSBgbmFtZWAKK2dyb3VwOjoKKworICAvcmVzb3VyY2VzL3tuYW1lfS5odG1s
CisKK1RoZSBncm91cHMsIGluY2x1ZGluZyBhbnl0aGluZyB0aGF0IG1hdGNoZXMgYSBgKmAgYXJl
IGF2YWlsYWJsZSBpbiB0aGUKK3JlcXVlc3Qgb2JqZWN0IHRocm91Z2ggdGhlIGByb3V0ZV9tYXRj
aGAgcHJvcGVydHkuIFRoaXMgaXMgYQorZGljdGlvbmFyeSBtYXBwaW5nIHRoZSBncm91cCBuYW1l
cywgYW5kIGFueSBtYXRjaCBmb3IgYCpgIHRvIHRoZQorbWF0Y2hpbmcgcGFydCBvZiB0aGUgcm91
dGUuIEZvciBleGFtcGxlLCBnaXZlbiBhIHJvdXRlOjoKKworICAvYXBpL3tzdWJfYXBpfS8qCisK
K2FuZCB0aGUgcmVxdWVzdCBwYXRoIGAvYXBpL3Rlc3QvaHRtbC90ZXN0Lmh0bWxgLCBgcm91dGVf
bWF0Y2hgIHdvdWxkCitiZTo6CisKKyAgeyJzdWJfYXBpIjogImh0bWwiLCAiKiI6ICJodG1sL3Rl
c3QuaHRtbCJ9CisKK2BoYW5kbGVyYCBpcyBhIGZ1bmN0aW9uIHRha2luZyBhIHJlcXVlc3QgYW5k
IGEgcmVzcG9uc2Ugb2JqZWN0IHRoYXQgaXMKK3Jlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3Rpbmcg
dGhlIHJlc3BvbnNlIHRvIHRoZSBIVFRQIHJlcXVlc3QuIFNlZQorOmRvYzpgaGFuZGxlcnNgIGZv
ciBtb3JlIGRldGFpbHMgb24gaGFuZGxlciBmdW5jdGlvbnMuCisKKy4uIF9yb3V0ZXIuSW50ZXJm
YWNlOgorCis6bW9kOmBJbnRlcmZhY2UgPHdwdHNlcnZlPmAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisuLiBhdXRvbW9kdWxlOjogd3B0c2VydmUucm91dGVyCisgICA6bWVtYmVyczoK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90
b29scy93cHRzZXJ2ZS9kb2NzL3NlcnZlci5yc3QgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvZG9jcy9zZXJ2ZXIucnN0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZjZjQ1NTMxZjc4NmI2MWRkZjFjOTdmMmRhMGZjY2FiZDEyODcwODcKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMv
d3B0c2VydmUvZG9jcy9zZXJ2ZXIucnN0CkBAIC0wLDAgKzEsMjAgQEAKK1NlcnZlcgorPT09PT09
CisKK0Jhc2ljIHNlcnZlciBjbGFzc2VzIGFuZCByb3V0ZXIuCisKK1RoZSBmb2xsb3dpbmcgZXhh
bXBsZSBjcmVhdGVzIGEgc2VydmVyIHRoYXQgc2VydmVzIHN0YXRpYyBmaWxlcyBmcm9tCit0aGUg
YGZpbGVzYCBzdWJkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBjYXVzZXMg
aXQgdG8KK3J1biBvbiBwb3J0IDgwODAgdW50aWwgaXQgaXMga2lsbGVkOjoKKworICBmcm9tIHdw
dHNlcnZlIGltcG9ydCBzZXJ2ZXIsIGhhbmRsZXJzCisKKyAgaHR0cGQgPSBzZXJ2ZXIuV2ViVGVz
dEh0dHBkKHBvcnQ9ODA4MCwgZG9jX3Jvb3Q9Ii4vZmlsZXMvIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJvdXRlcz1bKCJHRVQiLCAiLy4qIiwgaGFuZGxlcnMuZmlsZV9oYW5kbGVy
KV0pCisgIGh0dHBkLnN0YXJ0KGJsb2NrPVRydWUpCisKKzptb2Q6YEludGVyZmFjZSA8d3B0c2Vy
dmU+YAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGF1dG9tb2R1bGU6OiB3cHRz
ZXJ2ZS5zZXJ2ZXIKKyAgIDptZW1iZXJzOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL2RvY3Mvc3Rhc2gucnN0IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZl
L2RvY3Mvc3Rhc2gucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyMWMyZDM0NDU1ZmVhMmYxODM2Yjc5ZDE5Yjg4
ZDcwYWU0MDZjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvZG9jcy9zdGFzaC5yc3QKQEAgLTAsMCAr
MSwzMSBAQAorU3Rhc2gKKz09PT09CisKK09iamVjdCBmb3Igc3RvcmluZyBjcm9zcy1yZXF1ZXN0
IHN0YXRlLiBUaGlzIGlzIHVudXN1YWwgaW4gdGhhdCBrZXlzCittdXN0IGJlIFVVSURzLCBpbiBv
cmRlciB0byBwcmV2ZW50IGRpZmZlcmVudCBjbGllbnRzIHNldHRpbmcgdGhlIHNhbWUKK2tleSwg
YW5kIHZhbHVlcyBhcmUgd3JpdGUtb25jZSwgcmVhZC1vbmNlIHRvIG1pbmltaXNlIHRoZSBjaGFu
Y2VzIG9mCitzdGF0ZSBwZXJzaXN0aW5nIGluZGVmaW5pdGVseS4gVGhlIHN0YXNoIGRlZmluZXMg
dHdvIG9wZXJhdGlvbnM7CitgcHV0YCwgdG8gYWRkIHN0YXRlIGFuZCBgdGFrZWAgdG8gcmVtb3Zl
IHN0YXRlLiBGdXJ0aGVybW9yZSwgdGhlIHZpZXcKK29mIHRoZSBzdGFzaCBpcyBwYXRoLXNwZWNp
ZmljOyBieSBkZWZhdWx0IGEgcmVxdWVzdCB3aWxsIG9ubHkgc2VlIHRoZQorcGFydCBvZiB0aGUg
c3Rhc2ggY29ycmVzcG9uZGluZyB0byBpdHMgb3duIHBhdGguCisKK0EgdHlwaWNhbCBleGFtcGxl
IG9mIHVzaW5nIGEgc3Rhc2ggdG8gc3RvcmUgc3RhdGUgbWlnaHQgYmU6OgorCisgIEBoYW5kbGVy
CisgIGRlZiBoYW5kbGVyKHJlcXVlc3QsIHJlc3BvbnNlKToKKyAgICAgICMgV2UgYXNzdW1lIHRo
aXMgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgVVVJRAorICAgICAga2V5ID0gcmVxdWVzdC5H
RVQuZmlyc3QoImlkIikKKworICAgICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiOgorICAg
ICAgICAgIHJlcXVlc3Quc2VydmVyLnN0YXNoLnB1dChrZXksICJTb21lIHNhbXBsZSB2YWx1ZSIp
CisgICAgICAgICAgcmV0dXJuICJBZGRlZCB2YWx1ZSB0byBzdGFzaCIKKyAgICAgIGVsc2U6Cisg
ICAgICAgICAgdmFsdWUgPSByZXF1ZXN0LnNlcnZlci5zdGFzaC50YWtlKGtleSkKKyAgICAgICAg
ICBhc3NlcnQgcmVxdWVzdC5zZXJ2ZXIuc3Rhc2gudGFrZShrZXkpIGlzIE5vbmUKKyAgICAgICAg
ICByZXR1cm4ga2V5CisKKzptb2Q6YEludGVyZmFjZSA8c3Rhc2g+YAorLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKy4uIGF1dG9tb2R1bGU6OiB3cHRzZXJ2ZS5zdGFzaAorICAgOm1lbWJlcnM6
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUv
dG9vbHMvd3B0c2VydmUvc2V0dXAucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvc2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTk4NmZlNTVi
OTIzZjU2ZmUxZjk0YTQ4NGE4YjBmM2I2N2RiMDViZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS9zZXR1
cC5weQpAQCAtMCwwICsxLDIwIEBACitmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwCisKK1BB
Q0tBR0VfVkVSU0lPTiA9ICcwLjEnCitkZXBzID0gW10KKworc2V0dXAobmFtZT0nd3B0c2VydmUn
LAorICAgICAgdmVyc2lvbj1QQUNLQUdFX1ZFUlNJT04sCisgICAgICBkZXNjcmlwdGlvbj0iUHl0
aG9uIHdlYnNlcnZlciBpbnRlbmRlZCBmb3IgaW4gd2ViIGJyb3dzZXIgdGVzdGluZyIsCisgICAg
ICBsb25nX2Rlc2NyaXB0aW9uPW9wZW4oIlJFQURNRS5tZCIpLnJlYWQoKSwKKyAgICAgIGNsYXNz
aWZpZXJzPVtdLCAjIEdldCBzdHJpbmdzIGZyb20gaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBp
PyUzQWFjdGlvbj1saXN0X2NsYXNzaWZpZXJzCisgICAgICBrZXl3b3Jkcz0nJywKKyAgICAgIGF1
dGhvcj0nSmFtZXMgR3JhaGFtJywKKyAgICAgIGF1dGhvcl9lbWFpbD0namFtZXNAaG9wcGlwb2xs
YS5jby51aycsCisgICAgICB1cmw9J2h0dHA6Ly93cHRzZXJ2ZS5yZWFkdGhlZG9jcy5vcmcvJywK
KyAgICAgIGxpY2Vuc2U9J0JTRCcsCisgICAgICBwYWNrYWdlcz1bJ3dwdHNlcnZlJ10sCisgICAg
ICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAorICAgICAgemlwX3NhZmU9RmFsc2UsCisgICAg
ICBpbnN0YWxsX3JlcXVpcmVzPWRlcHMKKyAgICAgICkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5j
dGlvbmFsL2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2Vy
dmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC9iYXNlLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRm
MDNmNTY5NjdlNTlhYTY0ZmRiNTU5OGZhODE5YjFiZTk2OGQxODQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2Vy
dmUvdGVzdHMvZnVuY3Rpb25hbC9iYXNlLnB5CkBAIC0wLDAgKzEsNjEgQEAKK2ltcG9ydCBvcwor
aW1wb3J0IHVybHBhcnNlCitpbXBvcnQgdXJsbGliCitpbXBvcnQgdXJsbGliMgoraW1wb3J0IHVu
aXR0ZXN0CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJhc2U2NAorCitpbXBvcnQgd3B0c2VydmUK
KworbG9nZ2luZy5iYXNpY0NvbmZpZygpCisKK2hlcmUgPSBvcy5wYXRoLnNwbGl0KF9fZmlsZV9f
KVswXQorZG9jX3Jvb3QgPSBvcy5wYXRoLmpvaW4oaGVyZSwgImRvY3Jvb3QiKQorCitjbGFzcyBS
ZXF1ZXN0KHVybGxpYjIuUmVxdWVzdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAq
Kmt3YXJncyk6CisgICAgICAgIHVybGxpYjIuUmVxdWVzdC5fX2luaXRfXyhzZWxmLCAqYXJncywg
Kiprd2FyZ3MpCisgICAgICAgIHNlbGYubWV0aG9kID0gIkdFVCIKKworICAgIGRlZiBnZXRfbWV0
aG9kKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tZXRob2QKKworICAgIGRlZiBhZGRfZGF0
YShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgaGFzYXR0cihkYXRhLCAiaXRlcml0ZW1zIik6Cisg
ICAgICAgICAgICBkYXRhID0gdXJsbGliLnVybGVuY29kZShkYXRhKQorICAgICAgICBwcmludCBk
YXRhCisgICAgICAgIHNlbGYuYWRkX2hlYWRlcigiQ29udGVudC1MZW5ndGgiLCBzdHIobGVuKGRh
dGEpKSkKKyAgICAgICAgdXJsbGliMi5SZXF1ZXN0LmFkZF9kYXRhKHNlbGYsIGRhdGEpCisKK2Ns
YXNzIFRlc3RVc2luZ1NlcnZlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNl
bGYpOgorICAgICAgICBzZWxmLnNlcnZlciA9IHdwdHNlcnZlLnNlcnZlci5XZWJUZXN0SHR0cGQo
aG9zdD0ibG9jYWxob3N0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvcnQ9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZV9zc2w9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZT1Ob25lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jX3Jvb3Q9ZG9jX3Jvb3Qp
CisgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KEZhbHNlKQorCisgICAgZGVmIHRlYXJEb3duKHNl
bGYpOgorICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworICAgIGRlZiBhYnNfdXJsKHNlbGYs
IHBhdGgsIHF1ZXJ5PU5vbmUpOgorICAgICAgICByZXR1cm4gdXJscGFyc2UudXJsdW5zcGxpdCgo
Imh0dHAiLCAiJXM6JWkiICUgKHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpLCBw
YXRoLCBxdWVyeSwgTm9uZSkpCisKKyAgICBkZWYgcmVxdWVzdChzZWxmLCBwYXRoLCBxdWVyeT1O
b25lLCBtZXRob2Q9IkdFVCIsIGhlYWRlcnM9Tm9uZSwgYm9keT1Ob25lLCBhdXRoPU5vbmUpOgor
ICAgICAgICByZXEgPSBSZXF1ZXN0KHNlbGYuYWJzX3VybChwYXRoLCBxdWVyeSkpCisgICAgICAg
IHJlcS5tZXRob2QgPSBtZXRob2QKKyAgICAgICAgaWYgaGVhZGVycyBpcyBOb25lOgorICAgICAg
ICAgICAgaGVhZGVycyA9IHt9CisKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGhlYWRlcnMu
aXRlcml0ZW1zKCk6CisgICAgICAgICAgICByZXEuYWRkX2hlYWRlcihuYW1lLCB2YWx1ZSkKKwor
ICAgICAgICBpZiBib2R5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVxLmFkZF9kYXRhKGJv
ZHkpCisKKyAgICAgICAgaWYgYXV0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlcS5hZGRf
aGVhZGVyKCJBdXRob3JpemF0aW9uIiwgIkJhc2ljICVzIiAlIGJhc2U2NC5lbmNvZGVzdHJpbmco
JyVzOiVzJyAlIGF1dGgpKQorCisgICAgICAgIHJldHVybiB1cmxsaWIyLnVybG9wZW4ocmVxKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rv
b2xzL3dwdHNlcnZlL3Rlc3RzL2Z1bmN0aW9uYWwvZG9jcm9vdC9kb2N1bWVudC50eHQgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVz
dHMvZnVuY3Rpb25hbC9kb2Nyb290L2RvY3VtZW50LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTFkY2NkODQ0
ODdlNjQyOTYzMWJkN2FlOTIyNjhhNThlZmRkYTZiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3Rlc3Rz
L2Z1bmN0aW9uYWwvZG9jcm9vdC9kb2N1bWVudC50eHQKQEAgLTAsMCArMSBAQAorVGhpcyBpcyBh
IHRlc3QgZG9jdW1lbnQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL2RvY3Jvb3Qvc3Vi
LnR4dCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93
cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL2RvY3Jvb3Qvc3ViLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzAy
ZGIxNmEyZGE2MGU0NTFlNjBmZjc4NzBjODBlNGYyYTFjMTlkCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZl
L3Rlc3RzL2Z1bmN0aW9uYWwvZG9jcm9vdC9zdWIudHh0CkBAIC0wLDAgKzEgQEAKK3t7aG9zdH19
IHt7ZG9tYWluc1tdfX0ge3twb3J0c1todHRwXVswXX19CmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVu
Y3Rpb25hbC9kb2Nyb290L3N1Yl9oZWFkZXJzLnR4dCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL2RvY3Jv
b3Qvc3ViX2hlYWRlcnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlMDIxZWI4NjMzNzY3ZDVlNDJlMzU3M2Mz
ZTU3OWE1OWYwMDkyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC9kb2Ny
b290L3N1Yl9oZWFkZXJzLnR4dApAQCAtMCwwICsxIEBACit7e2hlYWRlcnNbWC1UZXN0XX19CmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9v
bHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC9kb2Nyb290L3N1Yl9wYXJhbXMudHh0IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3Rl
c3RzL2Z1bmN0aW9uYWwvZG9jcm9vdC9zdWJfcGFyYW1zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MzIzODc4
ZDZmODE4ODhhOWM4NDg3YmEzZTQyN2RhMTM1YzMxMTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3Rl
c3RzL2Z1bmN0aW9uYWwvZG9jcm9vdC9zdWJfcGFyYW1zLnR4dApAQCAtMCwwICsxIEBACit7e0dF
VFt0ZXN0XX19CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
d3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC9kb2Nyb290L3Rlc3QuYXNp
cyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRz
ZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL2RvY3Jvb3QvdGVzdC5hc2lzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwNWJh
N2RhODA5MzIwMzZjZWY4NjNhNTQxZDlmNDE3ZWJkMGRjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUv
dGVzdHMvZnVuY3Rpb25hbC9kb2Nyb290L3Rlc3QuYXNpcwpAQCAtMCwwICsxLDUgQEAKK0hUVFAv
MS4xIDIwMiBHaXJhZmZlDQorWC1URVNUOiBQQVNTDQorQ29udGVudC1MZW5ndGg6IDcNCisNCitD
b250ZW50ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1
bmN0aW9uYWwvZG9jcm9vdC90ZXN0X3N0cmluZy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL2RvY3Jv
b3QvdGVzdF9zdHJpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZhNjA1YmIxODE5NDBjZWExODQ3NzRmOTQw
MTVjZTQzYWQ5MzlhNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL2RvY3Jv
b3QvdGVzdF9zdHJpbmcucHkKQEAgLTAsMCArMSwzIEBACitkZWYgbWFpbihyZXF1ZXN0LCByZXNw
b25zZSk6CisgICAgcmVzcG9uc2UuaGVhZGVycy5zZXQoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L3Bs
YWluIikKKyAgICByZXR1cm4gIlBBU1MiCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC9k
b2Nyb290L3Rlc3RfdHVwbGVfMi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL2RvY3Jvb3QvdGVzdF90
dXBsZV8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhNzkxZmJkZGQyZTE3ODZhZGMzMDVjMmE0ZWU5YWIzZTIy
M2Q0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC9kb2Nyb290L3Rlc3Rf
dHVwbGVfMi5weQpAQCAtMCwwICsxLDIgQEAKK2RlZiBtYWluKHJlcXVlc3QsIHJlc3BvbnNlKToK
KyAgICByZXR1cm4gWygiQ29udGVudC1UeXBlIiwgInRleHQvaHRtbCIpLCAoIlgtVGVzdCIsICJQ
QVNTIildLCAiUEFTUyIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL2RvY3Jvb3QvdGVz
dF90dXBsZV8zLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZl
L3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1bmN0aW9uYWwvZG9jcm9vdC90ZXN0X3R1cGxlXzMucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmMyNjU2ZDA0N2JhODFlNjAwY2ZjYzMyZjUwYzljY2QzZmMwYjJhMgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2
ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL2RvY3Jvb3QvdGVzdF90dXBsZV8zLnB5
CkBAIC0wLDAgKzEsMiBAQAorZGVmIG1haW4ocmVxdWVzdCwgcmVzcG9uc2UpOgorICAgIHJldHVy
biAoMjAyLCAiR2lyYWZmZSIpLCBbKCJDb250ZW50LVR5cGUiLCAidGV4dC9odG1sIiksICgiWC1U
ZXN0IiwgIlBBU1MiKV0sICJQQVNTIgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1bmN0aW9uYWwvdGVz
dF9jb29raWVzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZl
L3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1bmN0aW9uYWwvdGVzdF9jb29raWVzLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhjZmQyNTY1Mjk2ZGViODEwNDIwM2E4ODkyYWY1NmUzOWNlNTY2NDYKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMv
d3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC90ZXN0X2Nvb2tpZXMucHkKQEAgLTAsMCArMSw2NSBA
QAoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1cmxsaWIyCitpbXBvcnQganNv
bgorCitpbXBvcnQgd3B0c2VydmUKK2Zyb20gYmFzZSBpbXBvcnQgVGVzdFVzaW5nU2VydmVyLCBk
b2Nfcm9vdAorCitjbGFzcyBUZXN0UmVzcG9uc2VTZXRDb29raWUoVGVzdFVzaW5nU2VydmVyKToK
KyAgICBkZWYgdGVzdF9uYW1lX3ZhbHVlKHNlbGYpOgorICAgICAgICBAd3B0c2VydmUuaGFuZGxl
cnMuaGFuZGxlcgorICAgICAgICBkZWYgaGFuZGxlcihyZXF1ZXN0LCByZXNwb25zZSk6CisgICAg
ICAgICAgICByZXNwb25zZS5zZXRfY29va2llKCJuYW1lIiwgInZhbHVlIikKKyAgICAgICAgICAg
IHJldHVybiAiVGVzdCIKKworICAgICAgICByb3V0ZSA9ICgiR0VUIiwgIi90ZXN0L25hbWVfdmFs
dWUiLCBoYW5kbGVyKQorICAgICAgICBzZWxmLnNlcnZlci5yb3V0ZXIucmVnaXN0ZXIoKnJvdXRl
KQorICAgICAgICByZXNwID0gc2VsZi5yZXF1ZXN0KHJvdXRlWzFdKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKHJlc3AuaW5mbygpWyJTZXQtQ29va2llIl0sICJuYW1lPXZhbHVlOyBQYXRo
PS8iKQorCisgICAgZGVmIHRlc3RfdW5zZXQoc2VsZik6CisgICAgICAgIEB3cHRzZXJ2ZS5oYW5k
bGVycy5oYW5kbGVyCisgICAgICAgIGRlZiBoYW5kbGVyKHJlcXVlc3QsIHJlc3BvbnNlKToKKyAg
ICAgICAgICAgIHJlc3BvbnNlLnNldF9jb29raWUoIm5hbWUiLCAidmFsdWUiKQorICAgICAgICAg
ICAgcmVzcG9uc2UudW5zZXRfY29va2llKCJuYW1lIikKKyAgICAgICAgICAgIHJldHVybiAiVGVz
dCIKKworICAgICAgICByb3V0ZSA9ICgiR0VUIiwgIi90ZXN0L3Vuc2V0IiwgaGFuZGxlcikKKyAg
ICAgICAgc2VsZi5zZXJ2ZXIucm91dGVyLnJlZ2lzdGVyKCpyb3V0ZSkKKyAgICAgICAgcmVzcCA9
IHNlbGYucmVxdWVzdChyb3V0ZVsxXSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoIlNldC1D
b29raWUiIG5vdCBpbiByZXNwLmluZm8oKSkKKworICAgIGRlZiB0ZXN0X2RlbGV0ZShzZWxmKToK
KyAgICAgICAgQHdwdHNlcnZlLmhhbmRsZXJzLmhhbmRsZXIKKyAgICAgICAgZGVmIGhhbmRsZXIo
cmVxdWVzdCwgcmVzcG9uc2UpOgorICAgICAgICAgICAgcmVzcG9uc2UuZGVsZXRlX2Nvb2tpZSgi
bmFtZSIpCisgICAgICAgICAgICByZXR1cm4gIlRlc3QiCisKKyAgICAgICAgcm91dGUgPSAoIkdF
VCIsICIvdGVzdC9kZWxldGUiLCBoYW5kbGVyKQorICAgICAgICBzZWxmLnNlcnZlci5yb3V0ZXIu
cmVnaXN0ZXIoKnJvdXRlKQorICAgICAgICByZXNwID0gc2VsZi5yZXF1ZXN0KHJvdXRlWzFdKQor
CisgICAgICAgIHBhcnRzID0gZGljdChpdGVtLnNwbGl0KCI9IikgZm9yCisgICAgICAgICAgICAg
ICAgICAgICBpdGVtIGluIHJlc3AuaW5mbygpWyJTZXQtQ29va2llIl0uc3BsaXQoIjsgIikgaWYg
aXRlbSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJ0c1sibmFtZSJdLCAiIikKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFydHNbIlBhdGgiXSwgIi8iKQorICAgICAgICAjU2hv
dWxkIGFsc28gY2hlY2sgdGhhdCBleHBpcmVzIGlzIGluIHRoZSBwYXN0CisKK2NsYXNzIFRlc3RS
ZXF1ZXN0Q29va2llcyhUZXN0VXNpbmdTZXJ2ZXIpOgorICAgIGRlZiB0ZXN0X3NldF9jb29raWUo
c2VsZik6CisgICAgICAgIEB3cHRzZXJ2ZS5oYW5kbGVycy5oYW5kbGVyCisgICAgICAgIGRlZiBo
YW5kbGVyKHJlcXVlc3QsIHJlc3BvbnNlKToKKyAgICAgICAgICAgIHJldHVybiByZXF1ZXN0LmNv
b2tpZXNbIm5hbWUiXS52YWx1ZQorCisgICAgICAgIHJvdXRlID0gKCJHRVQiLCAiL3Rlc3Qvc2V0
X2Nvb2tpZSIsIGhhbmRsZXIpCisgICAgICAgIHNlbGYuc2VydmVyLnJvdXRlci5yZWdpc3Rlcigq
cm91dGUpCisgICAgICAgIHJlc3AgPSBzZWxmLnJlcXVlc3Qocm91dGVbMV0sIGhlYWRlcnM9eyJD
b29raWUiOiAibmFtZT12YWx1ZSJ9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3Au
cmVhZCgpLCAidmFsdWUiKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0
ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1bmN0aW9uYWwvdGVzdF9oYW5kbGVycy5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRz
ZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL3Rlc3RfaGFuZGxlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk4MTg2
N2ZlNWQzOTVlNDJhZGIxODkyN2U0MGRiZTQ0MjJmNDVjYQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90
ZXN0cy9mdW5jdGlvbmFsL3Rlc3RfaGFuZGxlcnMucHkKQEAgLTAsMCArMSwyMDIgQEAKK2ltcG9y
dCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdXJsbGliMgoraW1wb3J0IGpzb24KKworaW1w
b3J0IHdwdHNlcnZlCitmcm9tIGJhc2UgaW1wb3J0IFRlc3RVc2luZ1NlcnZlciwgZG9jX3Jvb3QK
KworY2xhc3MgVGVzdEZpbGVIYW5kbGVyKFRlc3RVc2luZ1NlcnZlcik6CisgICAgZGVmIHRlc3Rf
R0VUKHNlbGYpOgorICAgICAgICByZXNwID0gc2VsZi5yZXF1ZXN0KCIvZG9jdW1lbnQudHh0IikK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMjAwLCByZXNwLmdldGNvZGUoKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoInRleHQvcGxhaW4iLCByZXNwLmluZm8oKVsiQ29udGVudC1UeXBl
Il0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wZW4ob3MucGF0aC5qb2luKGRvY19yb290
LCAiZG9jdW1lbnQudHh0IikpLnJlYWQoKSwgcmVzcC5yZWFkKCkpCisKKyAgICBkZWYgdGVzdF9y
YW5nZShzZWxmKToKKyAgICAgICAgcmVzcCA9IHNlbGYucmVxdWVzdCgiL2RvY3VtZW50LnR4dCIs
IGhlYWRlcnM9eyJSYW5nZSI6ImJ5dGVzPTEwLTE5In0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKDIwNiwgcmVzcC5nZXRjb2RlKCkpCisgICAgICAgIGRhdGEgPSByZXNwLnJlYWQoKQorICAg
ICAgICBleHBlY3RlZCA9IG9wZW4ob3MucGF0aC5qb2luKGRvY19yb290LCAiZG9jdW1lbnQudHh0
IikpLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMCwgbGVuKGRhdGEpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscygiYnl0ZXMgMTAtMTkvJWkiICUgbGVuKGV4cGVjdGVkKSwg
cmVzcC5pbmZvKClbJ0NvbnRlbnQtUmFuZ2UnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
IjEwIiwgcmVzcC5pbmZvKClbJ0NvbnRlbnQtTGVuZ3RoJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGV4cGVjdGVkWzEwOjIwXSwgZGF0YSkKKworICAgIGRlZiB0ZXN0X3JhbmdlX25vX2Vu
ZChzZWxmKToKKyAgICAgICAgcmVzcCA9IHNlbGYucmVxdWVzdCgiL2RvY3VtZW50LnR4dCIsIGhl
YWRlcnM9eyJSYW5nZSI6ImJ5dGVzPTEwLSJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygy
MDYsIHJlc3AuZ2V0Y29kZSgpKQorICAgICAgICBkYXRhID0gcmVzcC5yZWFkKCkKKyAgICAgICAg
ZXhwZWN0ZWQgPSBvcGVuKG9zLnBhdGguam9pbihkb2Nfcm9vdCwgImRvY3VtZW50LnR4dCIpKS5y
ZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGV4cGVjdGVkKSAtIDEwLCBsZW4o
ZGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJieXRlcyAxMC0laS8laSIgJSAobGVu
KGV4cGVjdGVkKSAtIDEsIGxlbihleHBlY3RlZCkpLCByZXNwLmluZm8oKVsnQ29udGVudC1SYW5n
ZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZFsxMDpdLCBkYXRhKQorCisg
ICAgZGVmIHRlc3RfcmFuZ2Vfbm9fc3RhcnQoc2VsZik6CisgICAgICAgIHJlc3AgPSBzZWxmLnJl
cXVlc3QoIi9kb2N1bWVudC50eHQiLCBoZWFkZXJzPXsiUmFuZ2UiOiJieXRlcz0tMTAifSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMjA2LCByZXNwLmdldGNvZGUoKSkKKyAgICAgICAgZGF0
YSA9IHJlc3AucmVhZCgpCisgICAgICAgIGV4cGVjdGVkID0gb3Blbihvcy5wYXRoLmpvaW4oZG9j
X3Jvb3QsICJkb2N1bWVudC50eHQiKSkucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KDEwLCBsZW4oZGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJieXRlcyAlaS0laS8l
aSIgJSAobGVuKGV4cGVjdGVkKSAtIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlbihleHBlY3RlZCkgLSAxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihleHBlY3RlZCkpLCByZXNwLmluZm8oKVsnQ29u
dGVudC1SYW5nZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZFstMTA6XSwg
ZGF0YSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX3JhbmdlcyhzZWxmKToKKyAgICAgICAgcmVz
cCA9IHNlbGYucmVxdWVzdCgiL2RvY3VtZW50LnR4dCIsIGhlYWRlcnM9eyJSYW5nZSI6ImJ5dGVz
PTEtMiw1LTcsNi0xMCJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygyMDYsIHJlc3AuZ2V0
Y29kZSgpKQorICAgICAgICBkYXRhID0gcmVzcC5yZWFkKCkKKyAgICAgICAgZXhwZWN0ZWQgPSBv
cGVuKG9zLnBhdGguam9pbihkb2Nfcm9vdCwgImRvY3VtZW50LnR4dCIpKS5yZWFkKCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKHJlc3AuaW5mbygpWyJDb250ZW50LVR5cGUiXS5zdGFydHN3aXRo
KCJtdWx0aXBhcnQvYnl0ZXJhbmdlczsgYm91bmRhcnk9IikpCisgICAgICAgIGJvdW5kYXJ5ID0g
cmVzcC5pbmZvKClbIkNvbnRlbnQtVHlwZSJdLnNwbGl0KCJib3VuZGFyeT0iKVsxXQorICAgICAg
ICBwYXJ0cyA9IGRhdGEuc3BsaXQoIi0tIiArIGJvdW5kYXJ5KQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscygiXHJcbiIsIHBhcnRzWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiLS0i
LCBwYXJ0c1stMV0pCisgICAgICAgIGV4cGVjdGVkX3BhcnRzID0gWygiMS0yIiwgZXhwZWN0ZWRb
MTozXSksICgiNS0xMCIsIGV4cGVjdGVkWzU6MTFdKV0KKyAgICAgICAgZm9yIGV4cGVjdGVkX3Bh
cnQsIHBhcnQgaW4gemlwKGV4cGVjdGVkX3BhcnRzLCBwYXJ0c1sxOi0xXSk6CisgICAgICAgICAg
ICBoZWFkZXJfc3RyaW5nLCBib2R5ID0gcGFydC5zcGxpdCgiXHJcblxyXG4iKQorICAgICAgICAg
ICAgaGVhZGVycyA9IGRpY3QoaXRlbS5zcGxpdCgiOiAiLCAxKSBmb3IgaXRlbSBpbiBoZWFkZXJf
c3RyaW5nLnNwbGl0KCJcclxuIikgaWYgaXRlbS5zdHJpcCgpKQorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoaGVhZGVyc1siQ29udGVudC1UeXBlIl0sICJ0ZXh0L3BsYWluIikKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhlYWRlcnNbIkNvbnRlbnQtUmFuZ2UiXSwgImJ5dGVz
ICVzLyVpIiAlIChleHBlY3RlZF9wYXJ0WzBdLCBsZW4oZXhwZWN0ZWQpKSkKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkX3BhcnRbMV0gKyAiXHJcbiIsIGJvZHkpCisKKyAg
ICBkZWYgdGVzdF9yYW5nZV9pbnZhbGlkKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0
UmFpc2VzKHVybGxpYjIuSFRUUEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYucmVxdWVz
dCgiL2RvY3VtZW50LnR4dCIsIGhlYWRlcnM9eyJSYW5nZSI6ImJ5dGVzPTExLTEwIn0pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNtLmV4Y2VwdGlvbi5jb2RlLCA0MTYpCisKKyAgICAgICAg
ZXhwZWN0ZWQgPSBvcGVuKG9zLnBhdGguam9pbihkb2Nfcm9vdCwgImRvY3VtZW50LnR4dCIpKS5y
ZWFkKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIyLkhUVFBFcnJvcikg
YXMgY206CisgICAgICAgICAgICBzZWxmLnJlcXVlc3QoIi9kb2N1bWVudC50eHQiLCBoZWFkZXJz
PXsiUmFuZ2UiOiJieXRlcz0laS0laSIgJSAobGVuKGV4cGVjdGVkKSwgbGVuKGV4cGVjdGVkKSAr
IDEwKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNtLmV4Y2VwdGlvbi5jb2RlLCA0MTYp
CisKKworY2xhc3MgVGVzdEZ1bmN0aW9uSGFuZGxlcihUZXN0VXNpbmdTZXJ2ZXIpOgorICAgIGRl
ZiB0ZXN0X3N0cmluZ19ydihzZWxmKToKKyAgICAgICAgQHdwdHNlcnZlLmhhbmRsZXJzLmhhbmRs
ZXIKKyAgICAgICAgZGVmIGhhbmRsZXIocmVxdWVzdCwgcmVzcG9uc2UpOgorICAgICAgICAgICAg
cmV0dXJuICJ0ZXN0IGRhdGEiCisKKyAgICAgICAgcm91dGUgPSAoIkdFVCIsICIvdGVzdC90ZXN0
X3N0cmluZ19ydiIsIGhhbmRsZXIpCisgICAgICAgIHNlbGYuc2VydmVyLnJvdXRlci5yZWdpc3Rl
cigqcm91dGUpCisgICAgICAgIHJlc3AgPSBzZWxmLnJlcXVlc3Qocm91dGVbMV0pCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcC5nZXRjb2RlKCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKCI5IiwgcmVzcC5pbmZvKClbIkNvbnRlbnQtTGVuZ3RoIl0pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKCJ0ZXN0IGRhdGEiLCByZXNwLnJlYWQoKSkKKworICAgIGRlZiB0ZXN0
X3R1cGxlXzJfcnYoc2VsZik6CisgICAgICAgIEB3cHRzZXJ2ZS5oYW5kbGVycy5oYW5kbGVyCisg
ICAgICAgIGRlZiBoYW5kbGVyKHJlcXVlc3QsIHJlc3BvbnNlKToKKyAgICAgICAgICAgIHJldHVy
biBbKCJDb250ZW50LUxlbmd0aCIsIDQpLCAoInRlc3QtaGVhZGVyIiwgInRlc3QtdmFsdWUiKV0s
ICJ0ZXN0IGRhdGEiCisKKyAgICAgICAgcm91dGUgPSAoIkdFVCIsICIvdGVzdC90ZXN0X3R1cGxl
XzJfcnYiLCBoYW5kbGVyKQorICAgICAgICBzZWxmLnNlcnZlci5yb3V0ZXIucmVnaXN0ZXIoKnJv
dXRlKQorICAgICAgICByZXNwID0gc2VsZi5yZXF1ZXN0KHJvdXRlWzFdKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscygyMDAsIHJlc3AuZ2V0Y29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscygiNCIsIHJlc3AuaW5mbygpWyJDb250ZW50LUxlbmd0aCJdKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscygidGVzdC12YWx1ZSIsIHJlc3AuaW5mbygpWyJ0ZXN0LWhlYWRlciJdKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscygidGVzdCIsIHJlc3AucmVhZCgpKQorCisgICAgZGVmIHRl
c3RfdHVwbGVfM19ydihzZWxmKToKKyAgICAgICAgQHdwdHNlcnZlLmhhbmRsZXJzLmhhbmRsZXIK
KyAgICAgICAgZGVmIGhhbmRsZXIocmVxdWVzdCwgcmVzcG9uc2UpOgorICAgICAgICAgICAgcmV0
dXJuIDIwMiwgWygidGVzdC1oZWFkZXIiLCAidGVzdC12YWx1ZSIpXSwgInRlc3QgZGF0YSIKKwor
ICAgICAgICByb3V0ZSA9ICgiR0VUIiwgIi90ZXN0L3Rlc3RfdHVwbGVfM19ydiIsIGhhbmRsZXIp
CisgICAgICAgIHNlbGYuc2VydmVyLnJvdXRlci5yZWdpc3Rlcigqcm91dGUpCisgICAgICAgIHJl
c3AgPSBzZWxmLnJlcXVlc3Qocm91dGVbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDIw
MiwgcmVzcC5nZXRjb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJ0ZXN0LXZhbHVl
IiwgcmVzcC5pbmZvKClbInRlc3QtaGVhZGVyIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KCJ0ZXN0IGRhdGEiLCByZXNwLnJlYWQoKSkKKworICAgIGRlZiB0ZXN0X3R1cGxlXzNfcnZfMShz
ZWxmKToKKyAgICAgICAgQHdwdHNlcnZlLmhhbmRsZXJzLmhhbmRsZXIKKyAgICAgICAgZGVmIGhh
bmRsZXIocmVxdWVzdCwgcmVzcG9uc2UpOgorICAgICAgICAgICAgcmV0dXJuICgyMDIsICJTb21l
IFN0YXR1cyIpLCBbKCJ0ZXN0LWhlYWRlciIsICJ0ZXN0LXZhbHVlIildLCAidGVzdCBkYXRhIgor
CisgICAgICAgIHJvdXRlID0gKCJHRVQiLCAiL3Rlc3QvdGVzdF90dXBsZV8zX3J2XzEiLCBoYW5k
bGVyKQorICAgICAgICBzZWxmLnNlcnZlci5yb3V0ZXIucmVnaXN0ZXIoKnJvdXRlKQorICAgICAg
ICByZXNwID0gc2VsZi5yZXF1ZXN0KHJvdXRlWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cygyMDIsIHJlc3AuZ2V0Y29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiU29tZSBT
dGF0dXMiLCByZXNwLm1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoInRlc3QtdmFsdWUi
LCByZXNwLmluZm8oKVsidGVzdC1oZWFkZXIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
InRlc3QgZGF0YSIsIHJlc3AucmVhZCgpKQorCitjbGFzcyBUZXN0SlNPTkhhbmRsZXIoVGVzdFVz
aW5nU2VydmVyKToKKyAgICBkZWYgdGVzdF9qc29uXzAoc2VsZik6CisgICAgICAgIEB3cHRzZXJ2
ZS5oYW5kbGVycy5qc29uX2hhbmRsZXIKKyAgICAgICAgZGVmIGhhbmRsZXIocmVxdWVzdCwgcmVz
cG9uc2UpOgorICAgICAgICAgICAgcmV0dXJuIHsiZGF0YSI6ICJ0ZXN0IGRhdGEifQorCisgICAg
ICAgIHJvdXRlID0gKCJHRVQiLCAiL3Rlc3QvdGVzdF9qc29uXzAiLCBoYW5kbGVyKQorICAgICAg
ICBzZWxmLnNlcnZlci5yb3V0ZXIucmVnaXN0ZXIoKnJvdXRlKQorICAgICAgICByZXNwID0gc2Vs
Zi5yZXF1ZXN0KHJvdXRlWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygyMDAsIHJlc3Au
Z2V0Y29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh7ImRhdGEiOiAidGVzdCBkYXRh
In0sIGpzb24ubG9hZChyZXNwKSkKKworICAgIGRlZiB0ZXN0X2pzb25fdHVwbGVfMihzZWxmKToK
KyAgICAgICAgQHdwdHNlcnZlLmhhbmRsZXJzLmpzb25faGFuZGxlcgorICAgICAgICBkZWYgaGFu
ZGxlcihyZXF1ZXN0LCByZXNwb25zZSk6CisgICAgICAgICAgICByZXR1cm4gWygiVGVzdC1IZWFk
ZXIiLCAidGVzdC12YWx1ZSIpXSwgeyJkYXRhIjogInRlc3QgZGF0YSJ9CisKKyAgICAgICAgcm91
dGUgPSAoIkdFVCIsICIvdGVzdC90ZXN0X2pzb25fdHVwbGVfMiIsIGhhbmRsZXIpCisgICAgICAg
IHNlbGYuc2VydmVyLnJvdXRlci5yZWdpc3Rlcigqcm91dGUpCisgICAgICAgIHJlc3AgPSBzZWxm
LnJlcXVlc3Qocm91dGVbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcC5n
ZXRjb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJ0ZXN0LXZhbHVlIiwgcmVzcC5p
bmZvKClbInRlc3QtaGVhZGVyIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHsiZGF0YSI6
ICJ0ZXN0IGRhdGEifSwganNvbi5sb2FkKHJlc3ApKQorCisgICAgZGVmIHRlc3RfanNvbl90dXBs
ZV8zKHNlbGYpOgorICAgICAgICBAd3B0c2VydmUuaGFuZGxlcnMuanNvbl9oYW5kbGVyCisgICAg
ICAgIGRlZiBoYW5kbGVyKHJlcXVlc3QsIHJlc3BvbnNlKToKKyAgICAgICAgICAgIHJldHVybiAo
MjAyLCAiR2lyYWZmZSIpLCBbKCJUZXN0LUhlYWRlciIsICJ0ZXN0LXZhbHVlIildLCB7ImRhdGEi
OiAidGVzdCBkYXRhIn0KKworICAgICAgICByb3V0ZSA9ICgiR0VUIiwgIi90ZXN0L3Rlc3RfanNv
bl90dXBsZV8yIiwgaGFuZGxlcikKKyAgICAgICAgc2VsZi5zZXJ2ZXIucm91dGVyLnJlZ2lzdGVy
KCpyb3V0ZSkKKyAgICAgICAgcmVzcCA9IHNlbGYucmVxdWVzdChyb3V0ZVsxXSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoMjAyLCByZXNwLmdldGNvZGUoKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoIkdpcmFmZmUiLCByZXNwLm1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
InRlc3QtdmFsdWUiLCByZXNwLmluZm8oKVsidGVzdC1oZWFkZXIiXSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoeyJkYXRhIjogInRlc3QgZGF0YSJ9LCBqc29uLmxvYWQocmVzcCkpCisKK2Ns
YXNzIFRlc3RQeXRob25IYW5kbGVyKFRlc3RVc2luZ1NlcnZlcik6CisgICAgZGVmIHRlc3Rfc3Ry
aW5nKHNlbGYpOgorICAgICAgICByZXNwID0gc2VsZi5yZXF1ZXN0KCIvdGVzdF9zdHJpbmcucHki
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygyMDAsIHJlc3AuZ2V0Y29kZSgpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscygidGV4dC9wbGFpbiIsIHJlc3AuaW5mbygpWyJDb250ZW50LVR5
cGUiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIlBBU1MiLCByZXNwLnJlYWQoKSkKKwor
ICAgIGRlZiB0ZXN0X3R1cGxlXzIoc2VsZik6CisgICAgICAgIHJlc3AgPSBzZWxmLnJlcXVlc3Qo
Ii90ZXN0X3R1cGxlXzIucHkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygyMDAsIHJlc3Au
Z2V0Y29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygidGV4dC9odG1sIiwgcmVzcC5p
bmZvKClbIkNvbnRlbnQtVHlwZSJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiUEFTUyIs
IHJlc3AuaW5mbygpWyJYLVRlc3QiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIlBBU1Mi
LCByZXNwLnJlYWQoKSkKKworICAgIGRlZiB0ZXN0X3R1cGxlXzMoc2VsZik6CisgICAgICAgIHJl
c3AgPSBzZWxmLnJlcXVlc3QoIi90ZXN0X3R1cGxlXzMucHkiKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscygyMDIsIHJlc3AuZ2V0Y29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygi
R2lyYWZmZSIsIHJlc3AubXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygidGV4dC9odG1s
IiwgcmVzcC5pbmZvKClbIkNvbnRlbnQtVHlwZSJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cygiUEFTUyIsIHJlc3AuaW5mbygpWyJYLVRlc3QiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoIlBBU1MiLCByZXNwLnJlYWQoKSkKKworY2xhc3MgVGVzdERpcmVjdG9yeUhhbmRsZXIoVGVz
dFVzaW5nU2VydmVyKToKKyAgICBkZWYgdGVzdF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHJl
c3AgPSBzZWxmLnJlcXVlc3QoIi8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygyMDAsIHJl
c3AuZ2V0Y29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygidGV4dC9odG1sIiwgcmVz
cC5pbmZvKClbIkNvbnRlbnQtVHlwZSJdKQorICAgICAgICAjQWRkIGEgY2hlY2sgdGhhdCB0aGUg
cmVzcG9uc2UgaXMgYWN0dWFsbHkgc2FuZQorCitjbGFzcyBUZXN0QXNJc0hhbmRsZXIoVGVzdFVz
aW5nU2VydmVyKToKKyAgICBkZWYgdGVzdF9hc19pcyhzZWxmKToKKyAgICAgICAgcmVzcCA9IHNl
bGYucmVxdWVzdCgiL3Rlc3QuYXNpcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDIwMiwg
cmVzcC5nZXRjb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJHaXJhZmZlIiwgcmVz
cC5tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJQQVNTIiwgcmVzcC5pbmZvKClbIlgt
VGVzdCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiQ29udGVudCIsIHJlc3AucmVhZCgp
KQorICAgICAgICAjQWRkIGEgY2hlY2sgdGhhdCB0aGUgcmVzcG9uc2UgaXMgYWN0dWFsbHkgc2Fu
ZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xz
L3dwdHNlcnZlL3Rlc3RzL2Z1bmN0aW9uYWwvdGVzdF9waXBlcy5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlv
bmFsL3Rlc3RfcGlwZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDhkZWFmMDFjZDcyMDFmNTk0OTlkZDgzYzkw
NGEwNDY2M2EyNzA2NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL3Rlc3Rf
cGlwZXMucHkKQEAgLTAsMCArMSw4MCBAQAoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2lt
cG9ydCB1cmxsaWIyCitpbXBvcnQganNvbgoraW1wb3J0IHRpbWUKKworaW1wb3J0IHdwdHNlcnZl
Citmcm9tIGJhc2UgaW1wb3J0IFRlc3RVc2luZ1NlcnZlciwgZG9jX3Jvb3QKKworY2xhc3MgVGVz
dFN0YXR1cyhUZXN0VXNpbmdTZXJ2ZXIpOgorICAgIGRlZiB0ZXN0X3N0YXR1cyhzZWxmKToKKyAg
ICAgICAgcmVzcCA9IHNlbGYucmVxdWVzdCgiL2RvY3VtZW50LnR4dCIsIHF1ZXJ5PSJwaXBlPXN0
YXR1cygyMDIpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcC5nZXRjb2RlKCksIDIw
MikKKworY2xhc3MgVGVzdEhlYWRlcihUZXN0VXNpbmdTZXJ2ZXIpOgorICAgIGRlZiB0ZXN0X25v
dF9zZXQoc2VsZik6CisgICAgICAgIHJlc3AgPSBzZWxmLnJlcXVlc3QoIi9kb2N1bWVudC50eHQi
LCBxdWVyeT0icGlwZT1oZWFkZXIoWC1URVNULFBBU1MpIikKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMocmVzcC5pbmZvKClbIlgtVEVTVCJdLCAiUEFTUyIpCisKKyAgICBkZWYgdGVzdF9zZXQo
c2VsZik6CisgICAgICAgIHJlc3AgPSBzZWxmLnJlcXVlc3QoIi9kb2N1bWVudC50eHQiLCBxdWVy
eT0icGlwZT1oZWFkZXIoQ29udGVudC1UeXBlLHRleHQvaHRtbCkiKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhyZXNwLmluZm8oKVsiQ29udGVudC1UeXBlIl0sICJ0ZXh0L2h0bWwiKQorCisg
ICAgZGVmIHRlc3RfbXVsdGlwbGUoc2VsZik6CisgICAgICAgIHJlc3AgPSBzZWxmLnJlcXVlc3Qo
Ii9kb2N1bWVudC50eHQiLCBxdWVyeT0icGlwZT1oZWFkZXIoWC1UZXN0LFBBU1MpfGhlYWRlcihD
b250ZW50LVR5cGUsdGV4dC9odG1sKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3Au
aW5mbygpWyJYLVRFU1QiXSwgIlBBU1MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXNw
LmluZm8oKVsiQ29udGVudC1UeXBlIl0sICJ0ZXh0L2h0bWwiKQorCisgICAgZGVmIHRlc3RfbXVs
dGlwbGVfc2FtZShzZWxmKToKKyAgICAgICAgcmVzcCA9IHNlbGYucmVxdWVzdCgiL2RvY3VtZW50
LnR4dCIsIHF1ZXJ5PSJwaXBlPWhlYWRlcihDb250ZW50LVR5cGUsRkFJTCl8aGVhZGVyKENvbnRl
bnQtVHlwZSx0ZXh0L2h0bWwpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcC5pbmZv
KClbIkNvbnRlbnQtVHlwZSJdLCAidGV4dC9odG1sIikKKworICAgIGRlZiB0ZXN0X211bHRpcGxl
X2FwcGVuZChzZWxmKToKKyAgICAgICAgcmVzcCA9IHNlbGYucmVxdWVzdCgiL2RvY3VtZW50LnR4
dCIsIHF1ZXJ5PSJwaXBlPWhlYWRlcihYLVRlc3QsMSl8aGVhZGVyKFgtVGVzdCwyLFRydWUpIikK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcC5pbmZvKClbIlgtVGVzdCJdLCAiMSwgMiIp
CisKK2NsYXNzIFRlc3RTbGljZShUZXN0VXNpbmdTZXJ2ZXIpOgorICAgIGRlZiB0ZXN0X2JvdGhf
Ym91bmRzKHNlbGYpOgorICAgICAgICByZXNwID0gc2VsZi5yZXF1ZXN0KCIvZG9jdW1lbnQudHh0
IiwgcXVlcnk9InBpcGU9c2xpY2UoMSwxMCkiKQorICAgICAgICBleHBlY3RlZCA9IG9wZW4ob3Mu
cGF0aC5qb2luKGRvY19yb290LCAiZG9jdW1lbnQudHh0IikpLnJlYWQoKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhyZXNwLnJlYWQoKSwgZXhwZWN0ZWRbMToxMF0pCisKKyAgICBkZWYgdGVz
dF9ub191cHBlcihzZWxmKToKKyAgICAgICAgcmVzcCA9IHNlbGYucmVxdWVzdCgiL2RvY3VtZW50
LnR4dCIsIHF1ZXJ5PSJwaXBlPXNsaWNlKDEpIikKKyAgICAgICAgZXhwZWN0ZWQgPSBvcGVuKG9z
LnBhdGguam9pbihkb2Nfcm9vdCwgImRvY3VtZW50LnR4dCIpKS5yZWFkKCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMocmVzcC5yZWFkKCksIGV4cGVjdGVkWzE6XSkKKworICAgIGRlZiB0ZXN0
X25vX2xvd2VyKHNlbGYpOgorICAgICAgICByZXNwID0gc2VsZi5yZXF1ZXN0KCIvZG9jdW1lbnQu
dHh0IiwgcXVlcnk9InBpcGU9c2xpY2UobnVsbCwxMCkiKQorICAgICAgICBleHBlY3RlZCA9IG9w
ZW4ob3MucGF0aC5qb2luKGRvY19yb290LCAiZG9jdW1lbnQudHh0IikpLnJlYWQoKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhyZXNwLnJlYWQoKSwgZXhwZWN0ZWRbOjEwXSkKKworY2xhc3Mg
VGVzdFN1YihUZXN0VXNpbmdTZXJ2ZXIpOgorICAgIGRlZiB0ZXN0X3N1Yl9jb25maWcoc2VsZik6
CisgICAgICAgIHJlc3AgPSBzZWxmLnJlcXVlc3QoIi9zdWIudHh0IiwgcXVlcnk9InBpcGU9c3Vi
IikKKyAgICAgICAgZXhwZWN0ZWQgPSAibG9jYWxob3N0IGxvY2FsaG9zdCAlaVxuIiAlIHNlbGYu
c2VydmVyLnBvcnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcC5yZWFkKCksIGV4cGVj
dGVkKQorCisgICAgZGVmIHRlc3Rfc3ViX2hlYWRlcnMoc2VsZik6CisgICAgICAgIHJlc3AgPSBz
ZWxmLnJlcXVlc3QoIi9zdWJfaGVhZGVycy50eHQiLCBxdWVyeT0icGlwZT1zdWIiLCBoZWFkZXJz
PXsiWC1UZXN0IjogIlBBU1MifSkKKyAgICAgICAgZXhwZWN0ZWQgPSAiUEFTU1xuIgorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhyZXNwLnJlYWQoKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVz
dF9zdWJfcGFyYW1zKHNlbGYpOgorICAgICAgICByZXNwID0gc2VsZi5yZXF1ZXN0KCIvc3ViX3Bh
cmFtcy50eHQiLCBxdWVyeT0idGVzdD1QQVNTJnBpcGU9c3ViIikKKyAgICAgICAgZXhwZWN0ZWQg
PSAiUEFTU1xuIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXNwLnJlYWQoKSwgZXhwZWN0
ZWQpCisKK2NsYXNzIFRlc3RUcmlja2xlKFRlc3RVc2luZ1NlcnZlcik6CisgICAgZGVmIHRlc3Rf
dHJpY2tsZShzZWxmKToKKyAgICAgICAgI0FjdHVhbGx5IHRlc3RpbmcgdGhhdCB0aGUgcmVzcG9u
c2UgdHJpY2tsZXMgaW4gaXMgbm90IHRoYXQgZWFzeQorICAgICAgICB0MCA9IHRpbWUudGltZSgp
CisgICAgICAgIHJlc3AgPSBzZWxmLnJlcXVlc3QoIi9kb2N1bWVudC50eHQiLCBxdWVyeT0icGlw
ZT10cmlja2xlKDE6ZDI6NTpkMTpyMikiKQorICAgICAgICB0MSA9IHRpbWUudGltZSgpCisgICAg
ICAgIGV4cGVjdGVkID0gb3Blbihvcy5wYXRoLmpvaW4oZG9jX3Jvb3QsICJkb2N1bWVudC50eHQi
KSkucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3AucmVhZCgpLCBleHBlY3Rl
ZCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKDYsIHQxLXQwKQorCitpZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1
bmN0aW9uYWwvdGVzdF9yZXF1ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1bmN0aW9uYWwvdGVzdF9yZXF1ZXN0
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRhYjY4ZTQ5NThmNWVmYTE3ZDAzMzc0NGZjY2JjMjQxZDYyMjQyNzgK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0
c2VydmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC90ZXN0X3JlcXVlc3QucHkKQEAg
LTAsMCArMSw4NiBAQAoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1cmxsaWIy
CitpbXBvcnQganNvbgoraW1wb3J0IHRpbWUKKworaW1wb3J0IHdwdHNlcnZlCitmcm9tIGJhc2Ug
aW1wb3J0IFRlc3RVc2luZ1NlcnZlciwgZG9jX3Jvb3QKKworY2xhc3MgVGVzdElucHV0RmlsZShU
ZXN0VXNpbmdTZXJ2ZXIpOgorICAgIGRlZiB0ZXN0X3NlZWsoc2VsZik6CisgICAgICAgIEB3cHRz
ZXJ2ZS5oYW5kbGVycy5oYW5kbGVyCisgICAgICAgIGRlZiBoYW5kbGVyKHJlcXVlc3QsIHJlc3Bv
bnNlKToKKyAgICAgICAgICAgIHJ2ID0gW10KKyAgICAgICAgICAgIGYgPSByZXF1ZXN0LnJhd19p
bnB1dAorICAgICAgICAgICAgZi5zZWVrKDUpCisgICAgICAgICAgICBydi5hcHBlbmQoZi5yZWFk
KDIpKQorICAgICAgICAgICAgcnYuYXBwZW5kKGYudGVsbCgpKQorICAgICAgICAgICAgZi5zZWVr
KDApCisgICAgICAgICAgICBydi5hcHBlbmQoZi5yZWFkbGluZSgpKQorICAgICAgICAgICAgcnYu
YXBwZW5kKGYudGVsbCgpKQorICAgICAgICAgICAgcnYuYXBwZW5kKGYucmVhZCgtMSkpCisgICAg
ICAgICAgICBydi5hcHBlbmQoZi50ZWxsKCkpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAg
ICAgICAgIHJ2LmFwcGVuZChmLnJlYWQoKSkKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAg
ICAgICAgcnYuZXh0ZW5kKGYucmVhZGxpbmVzKCkpCisKKyAgICAgICAgICAgIHJldHVybiAiICIu
am9pbihzdHIoaXRlbSkgZm9yIGl0ZW0gaW4gcnYpCisKKyAgICAgICAgcm91dGUgPSAoIlBPU1Qi
LCAiL3Rlc3QvdGVzdF9zZWVrIiwgaGFuZGxlcikKKyAgICAgICAgc2VsZi5zZXJ2ZXIucm91dGVy
LnJlZ2lzdGVyKCpyb3V0ZSkKKyAgICAgICAgcmVzcCA9IHNlbGYucmVxdWVzdChyb3V0ZVsxXSwg
bWV0aG9kPSJQT1NUIiwgYm9keT0iMTIzNDVhYlxuY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKDIwMCwgcmVzcC5nZXRjb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsi
YWIiLCAiNyIsICIxMjM0NWFiXG4iLCAiOCIsICJjZGVmIiwgIjEyIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIxMjM0NWFiXG5jZGVmIiwgIjEyMzQ1YWJcbiIsICJjZGVmIl0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3AucmVhZCgpLnNwbGl0KCIgIikpCisKKyAgICBkZWYg
dGVzdF9pdGVyKHNlbGYpOgorICAgICAgICBAd3B0c2VydmUuaGFuZGxlcnMuaGFuZGxlcgorICAg
ICAgICBkZWYgaGFuZGxlcihyZXF1ZXN0LCByZXNwb25zZSk6CisgICAgICAgICAgICBmID0gcmVx
dWVzdC5yYXdfaW5wdXQKKyAgICAgICAgICAgIHJldHVybiAiICIuam9pbihsaW5lIGZvciBsaW5l
IGluIGYpCisKKyAgICAgICAgcm91dGUgPSAoIlBPU1QiLCAiL3Rlc3QvdGVzdF9pdGVyIiwgaGFu
ZGxlcikKKyAgICAgICAgc2VsZi5zZXJ2ZXIucm91dGVyLnJlZ2lzdGVyKCpyb3V0ZSkKKyAgICAg
ICAgcmVzcCA9IHNlbGYucmVxdWVzdChyb3V0ZVsxXSwgbWV0aG9kPSJQT1NUIiwgYm9keT0iMTIz
NDVcbmFiY2RlZlxyXG56eXh3diIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDIwMCwgcmVz
cC5nZXRjb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsiMTIzNDVcbiIsICJhYmNk
ZWZcclxuIiwgInp5eHd2Il0sIHJlc3AucmVhZCgpLnNwbGl0KCIgIikpCisKK2NsYXNzIFRlc3RS
ZXF1ZXN0KFRlc3RVc2luZ1NlcnZlcik6CisgICAgZGVmIHRlc3RfYm9keShzZWxmKToKKyAgICAg
ICAgQHdwdHNlcnZlLmhhbmRsZXJzLmhhbmRsZXIKKyAgICAgICAgZGVmIGhhbmRsZXIocmVxdWVz
dCwgcmVzcG9uc2UpOgorICAgICAgICAgICAgcmVxdWVzdC5yYXdfaW5wdXQuc2Vlayg1KQorICAg
ICAgICAgICAgcmV0dXJuIHJlcXVlc3QuYm9keQorCisgICAgICAgIHJvdXRlID0gKCJQT1NUIiwg
Ii90ZXN0L3Rlc3RfYm9keSIsIGhhbmRsZXIpCisgICAgICAgIHNlbGYuc2VydmVyLnJvdXRlci5y
ZWdpc3Rlcigqcm91dGUpCisgICAgICAgIHJlc3AgPSBzZWxmLnJlcXVlc3Qocm91dGVbMV0sIG1l
dGhvZD0iUE9TVCIsIGJvZHk9IjEyMzQ1YWJcbmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscygiMTIzNDVhYlxuY2RlZiIsIHJlc3AucmVhZCgpKQorCisgICAgZGVmIHRlc3Rfcm91dGVf
bWF0Y2goc2VsZik6CisgICAgICAgIEB3cHRzZXJ2ZS5oYW5kbGVycy5oYW5kbGVyCisgICAgICAg
IGRlZiBoYW5kbGVyKHJlcXVlc3QsIHJlc3BvbnNlKToKKyAgICAgICAgICAgIHJldHVybiByZXF1
ZXN0LnJvdXRlX21hdGNoWyJtYXRjaCJdICsgIiAiICsgcmVxdWVzdC5yb3V0ZV9tYXRjaFsiKiJd
CisKKyAgICAgICAgcm91dGUgPSAoIkdFVCIsICIvdGVzdC97bWF0Y2h9XyoiLCBoYW5kbGVyKQor
ICAgICAgICBzZWxmLnNlcnZlci5yb3V0ZXIucmVnaXN0ZXIoKnJvdXRlKQorICAgICAgICByZXNw
ID0gc2VsZi5yZXF1ZXN0KCIvdGVzdC9zb21lX3JvdXRlIikKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoInNvbWUgcm91dGUiLCByZXNwLnJlYWQoKSkKKworY2xhc3MgVGVzdEF1dGgoVGVzdFVz
aW5nU2VydmVyKToKKyAgICBkZWYgdGVzdF9hdXRoKHNlbGYpOgorICAgICAgICBAd3B0c2VydmUu
aGFuZGxlcnMuaGFuZGxlcgorICAgICAgICBkZWYgaGFuZGxlcihyZXF1ZXN0LCByZXNwb25zZSk6
CisgICAgICAgICAgICByZXR1cm4gIiAiLmpvaW4oKHJlcXVlc3QuYXV0aC51c2VybmFtZSwgcmVx
dWVzdC5hdXRoLnBhc3N3b3JkKSkKKworICAgICAgICByb3V0ZSA9ICgiR0VUIiwgIi90ZXN0L3Rl
c3RfYXV0aCIsIGhhbmRsZXIpCisgICAgICAgIHNlbGYuc2VydmVyLnJvdXRlci5yZWdpc3Rlcigq
cm91dGUpCisgICAgICAgIHJlc3AgPSBzZWxmLnJlcXVlc3Qocm91dGVbMV0sIGF1dGg9KCJ0ZXN0
IiwgIlBBU1MiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMjAwLCByZXNwLmdldGNvZGUo
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWyJ0ZXN0IiwgIlBBU1MiXSwgcmVzcC5yZWFk
KCkuc3BsaXQoIiAiKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVz
dC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93
cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL3Rlc3RfcmVzcG9uc2UucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2Vy
dmUvdGVzdHMvZnVuY3Rpb25hbC90ZXN0X3Jlc3BvbnNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2Mzk4Njc3
ZTA5NTdmMjFkNTdhOGU2OTMwMTE4ZTllYjZlMjNiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVz
dHMvZnVuY3Rpb25hbC90ZXN0X3Jlc3BvbnNlLnB5CkBAIC0wLDAgKzEsNTEgQEAKK2ltcG9ydCBv
cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdXJsbGliMgoraW1wb3J0IGpzb24KK2ltcG9ydCB0
aW1lCitmcm9tIHR5cGVzIGltcG9ydCBNZXRob2RUeXBlCisKK2ltcG9ydCB3cHRzZXJ2ZQorZnJv
bSBiYXNlIGltcG9ydCBUZXN0VXNpbmdTZXJ2ZXIsIGRvY19yb290CisKK2RlZiBzZW5kX2JvZHlf
YXNfaGVhZGVyKHNlbGYpOgorICAgIGlmIHNlbGYuX3Jlc3BvbnNlLmFkZF9yZXF1aXJlZF9oZWFk
ZXJzOgorICAgICAgICBzZWxmLndyaXRlX2RlZmF1bHRfaGVhZGVycygpCisKKyAgICBzZWxmLndy
aXRlKCJYLUJvZHk6ICIpCisgICAgc2VsZi5faGVhZGVyc19jb21wbGV0ZSA9IFRydWUKKworY2xh
c3MgVGVzdFJlc3BvbnNlKFRlc3RVc2luZ1NlcnZlcik6CisgICAgZGVmIHRlc3RfaGVhZF93aXRo
b3V0X2JvZHkoc2VsZik6CisgICAgICAgIEB3cHRzZXJ2ZS5oYW5kbGVycy5oYW5kbGVyCisgICAg
ICAgIGRlZiBoYW5kbGVyKHJlcXVlc3QsIHJlc3BvbnNlKToKKyAgICAgICAgICAgIHJlc3BvbnNl
LndyaXRlci5lbmRfaGVhZGVycyA9IE1ldGhvZFR5cGUoc2VuZF9ib2R5X2FzX2hlYWRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9u
c2Uud3JpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cHRzZXJ2ZS5yZXNwb25zZS5SZXNwb25zZVdyaXRlcikKKyAgICAgICAgICAgIHJl
dHVybiBbKCJYLVRlc3QiLCAiVEVTVCIpXSwgImJvZHlcclxuIgorCisgICAgICAgIHJvdXRlID0g
KCJHRVQiLCAiL3Rlc3QvdGVzdF9oZWFkX3dpdGhvdXRfYm9keSIsIGhhbmRsZXIpCisgICAgICAg
IHNlbGYuc2VydmVyLnJvdXRlci5yZWdpc3Rlcigqcm91dGUpCisgICAgICAgIHJlc3AgPSBzZWxm
LnJlcXVlc3Qocm91dGVbMV0sIG1ldGhvZD0iSEVBRCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKCI2IiwgcmVzcC5pbmZvKClbJ0NvbnRlbnQtTGVuZ3RoJ10pCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKCJURVNUIiwgcmVzcC5pbmZvKClbJ3gtVGVzdCddKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscygiIiwgcmVzcC5pbmZvKClbJ3gtYm9keSddKQorCisgICAgZGVmIHRlc3RfaGVh
ZF93aXRoX2JvZHkoc2VsZik6CisgICAgICAgIEB3cHRzZXJ2ZS5oYW5kbGVycy5oYW5kbGVyCisg
ICAgICAgIGRlZiBoYW5kbGVyKHJlcXVlc3QsIHJlc3BvbnNlKToKKyAgICAgICAgICAgIHJlc3Bv
bnNlLnNlbmRfYm9keV9mb3JfaGVhZF9yZXF1ZXN0ID0gVHJ1ZQorICAgICAgICAgICAgcmVzcG9u
c2Uud3JpdGVyLmVuZF9oZWFkZXJzID0gTWV0aG9kVHlwZShzZW5kX2JvZHlfYXNfaGVhZGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNw
b25zZS53cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdwdHNlcnZlLnJlc3BvbnNlLlJlc3BvbnNlV3JpdGVyKQorICAgICAgICAgICAg
cmV0dXJuIFsoIlgtVGVzdCIsICJURVNUIildLCAiYm9keVxyXG4iCisKKyAgICAgICAgcm91dGUg
PSAoIkdFVCIsICIvdGVzdC90ZXN0X2hlYWRfd2l0aF9ib2R5IiwgaGFuZGxlcikKKyAgICAgICAg
c2VsZi5zZXJ2ZXIucm91dGVyLnJlZ2lzdGVyKCpyb3V0ZSkKKyAgICAgICAgcmVzcCA9IHNlbGYu
cmVxdWVzdChyb3V0ZVsxXSwgbWV0aG9kPSJIRUFEIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoIjYiLCByZXNwLmluZm8oKVsnQ29udGVudC1MZW5ndGgnXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoIlRFU1QiLCByZXNwLmluZm8oKVsneC1UZXN0J10pCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKCJib2R5IiwgcmVzcC5pbmZvKClbJ1gtQm9keSddKQorCitpZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1
bmN0aW9uYWwvdGVzdF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC90ZXN0X3NlcnZlci5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40NjMwZmZiOWZkZmMyN2U0NTViODkzM2Q3ZjQzMDBkODE1ZmFmOTg1Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNl
cnZlL3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1bmN0aW9uYWwvdGVzdF9zZXJ2ZXIucHkKQEAgLTAs
MCArMSw0MyBAQAoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1cmxsaWIyCitp
bXBvcnQganNvbgorCitpbXBvcnQgd3B0c2VydmUKK2Zyb20gYmFzZSBpbXBvcnQgVGVzdFVzaW5n
U2VydmVyLCBkb2Nfcm9vdAorCitjbGFzcyBUZXN0RmlsZUhhbmRsZXIoVGVzdFVzaW5nU2VydmVy
KToKKyAgICBkZWYgdGVzdF9ub3RfaGFuZGxlZChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFz
c2VydFJhaXNlcyh1cmxsaWIyLkhUVFBFcnJvcikgYXMgY206CisgICAgICAgICAgICByZXNwID0g
c2VsZi5yZXF1ZXN0KCIvbm90X2V4aXN0aW5nIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhjbS5leGNlcHRpb24uY29kZSwgNDA0KQorCitjbGFzcyBUZXN0UmV3cml0ZXIoVGVzdFVzaW5n
U2VydmVyKToKKyAgICBkZWYgdGVzdF9yZXdyaXRlKHNlbGYpOgorICAgICAgICBAd3B0c2VydmUu
aGFuZGxlcnMuaGFuZGxlcgorICAgICAgICBkZWYgaGFuZGxlcihyZXF1ZXN0LCByZXNwb25zZSk6
CisgICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5yZXF1ZXN0X3BhdGgKKworICAgICAgICByb3V0
ZSA9ICgiR0VUIiwgIi90ZXN0L3Jld3JpdHRlbiIsIGhhbmRsZXIpCisgICAgICAgIHNlbGYuc2Vy
dmVyLnJld3JpdGVyLnJlZ2lzdGVyKCJHRVQiLCAiL3Rlc3Qvb3JpZ2luYWwiLCByb3V0ZVsxXSkK
KyAgICAgICAgc2VsZi5zZXJ2ZXIucm91dGVyLnJlZ2lzdGVyKCpyb3V0ZSkKKyAgICAgICAgcmVz
cCA9IHNlbGYucmVxdWVzdCgiL3Rlc3Qvb3JpZ2luYWwiKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscygyMDAsIHJlc3AuZ2V0Y29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiL3Rl
c3QvcmV3cml0dGVuIiwgcmVzcC5yZWFkKCkpCisKK2NsYXNzIFRlc3RSZXF1ZXN0SGFuZGxlcihU
ZXN0VXNpbmdTZXJ2ZXIpOgorICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAg
QHdwdHNlcnZlLmhhbmRsZXJzLmhhbmRsZXIKKyAgICAgICAgZGVmIGhhbmRsZXIocmVxdWVzdCwg
cmVzcG9uc2UpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uCisKKyAgICAgICAgcm91dGUg
PSAoIkdFVCIsICIvdGVzdC9yYWlzZXMiLCBoYW5kbGVyKQorICAgICAgICBzZWxmLnNlcnZlci5y
b3V0ZXIucmVnaXN0ZXIoKnJvdXRlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHVy
bGxpYjIuSFRUUEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLnJlcXVlc3Qo
Ii90ZXN0L3JhaXNlcyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY20uZXhjZXB0aW9u
LmNvZGUsIDUwMCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5t
YWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRz
ZXJ2ZS90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL3Rlc3Rfc3Rhc2gucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVz
dHMvZnVuY3Rpb25hbC90ZXN0X3N0YXNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljYmZmM2E3YjZkYTQ3MDRj
YzY1MDM3ZGU1ZDNmMzBkMzg1MGYyNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rp
b25hbC90ZXN0X3N0YXNoLnB5CkBAIC0wLDAgKzEsMzkgQEAKK2ltcG9ydCBvcworaW1wb3J0IHVu
aXR0ZXN0CitpbXBvcnQgdXJsbGliMgoraW1wb3J0IGpzb24KK2ltcG9ydCB1dWlkCisKK2ltcG9y
dCB3cHRzZXJ2ZQorZnJvbSB3cHRzZXJ2ZS5yb3V0ZXIgaW1wb3J0IGFueV9tZXRob2QKK2Zyb20g
YmFzZSBpbXBvcnQgVGVzdFVzaW5nU2VydmVyLCBkb2Nfcm9vdAorCitjbGFzcyBUZXN0UmVzcG9u
c2VTZXRDb29raWUoVGVzdFVzaW5nU2VydmVyKToKKyAgICBkZWYgdGVzdF9wdXRfdGFrZShzZWxm
KToKKyAgICAgICAgQHdwdHNlcnZlLmhhbmRsZXJzLmhhbmRsZXIKKyAgICAgICAgZGVmIGhhbmRs
ZXIocmVxdWVzdCwgcmVzcG9uc2UpOgorICAgICAgICAgICAgaWYgcmVxdWVzdC5tZXRob2QgPT0g
IlBPU1QiOgorICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VydmVyLnN0YXNoLnB1dChyZXF1ZXN0
LlBPU1QuZmlyc3QoImlkIiksIHJlcXVlc3QuUE9TVC5maXJzdCgiZGF0YSIpKQorICAgICAgICAg
ICAgICAgIGRhdGEgPSAiT0siCisgICAgICAgICAgICBlbGlmIHJlcXVlc3QubWV0aG9kID09ICJH
RVQiOgorICAgICAgICAgICAgICAgIGRhdGEgPSByZXF1ZXN0LnNlcnZlci5zdGFzaC50YWtlKHJl
cXVlc3QuR0VULmZpcnN0KCJpZCIpKQorICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJOT1QgRk9VTkQiCisgICAgICAgICAgICByZXR1
cm4gZGF0YQorCisgICAgICAgIGlkID0gc3RyKHV1aWQudXVpZDQoKSkKKyAgICAgICAgcm91dGUg
PSAoYW55X21ldGhvZCwgIi90ZXN0L3B1dF90YWtlIiwgaGFuZGxlcikKKyAgICAgICAgc2VsZi5z
ZXJ2ZXIucm91dGVyLnJlZ2lzdGVyKCpyb3V0ZSkKKworICAgICAgICByZXNwID0gc2VsZi5yZXF1
ZXN0KHJvdXRlWzFdLCBtZXRob2Q9IlBPU1QiLCBib2R5PXsiaWQiOiBpZCwgImRhdGEiOiAiU2Ft
cGxlIGRhdGEifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcC5yZWFkKCksICJPSyIp
CisKKyAgICAgICAgcmVzcCA9IHNlbGYucmVxdWVzdChyb3V0ZVsxXSwgcXVlcnk9ImlkPSIgKyBp
ZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcC5yZWFkKCksICJTYW1wbGUgZGF0YSIp
CisKKyAgICAgICAgcmVzcCA9IHNlbGYucmVxdWVzdChyb3V0ZVsxXSwgcXVlcnk9ImlkPSIgKyBp
ZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcC5yZWFkKCksICJOT1QgRk9VTkQiKQor
CisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMv
d3B0c2VydmUvd3B0c2VydmUvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvX19pbml0X18ucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2FjNWFlYjNjYTlhNTE1MzUyN2YzZjczMmJjYmZjY2M5MmIxMWZjZQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90
b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDMgQEAKK2Zyb20g
c2VydmVyIGltcG9ydCBXZWJUZXN0SHR0cGQsIFdlYlRlc3RTZXJ2ZXIsIFJvdXRlcgorZnJvbSBy
ZXF1ZXN0IGltcG9ydCBSZXF1ZXN0Citmcm9tIHJlc3BvbnNlIGltcG9ydCBSZXNwb25zZQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xz
L3dwdHNlcnZlL3dwdHNlcnZlL2NvbnN0YW50cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9jb25zdGFudHMucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjNkOTU2YWRiZGUyY2NkNWJkY2NjZGE2ZGE1YzM3MDRkYzUyN2Q1OAotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2
ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9jb25zdGFudHMucHkKQEAgLTAsMCArMSw3OSBAQAor
aW1wb3J0IHV0aWxzCisKK2NvbnRlbnRfdHlwZXMgPSB1dGlscy5pbnZlcnRfZGljdCh7InRleHQv
aHRtbCI6IFsiaHRtIiwgImh0bWwiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImFwcGxpY2F0aW9uL3hodG1sK3htbCI6IFsieGh0IiwgInhodG0iLCAieGh0bWwiXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvamF2YXNjcmlwdCI6IFsianMi
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvY3NzIjogWyJjc3Mi
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvcGxhaW4iOiBbInR4
dCIsICJtZCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC94bWwi
OiBbInhtbCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1hZ2Uvc3Zn
K3htbCI6IFsic3ZnIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbWFn
ZS9qcGVnIjogWyJqcGciLCAianBlZyJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaW1hZ2UvcG5nIjogWyJwbmciXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInRleHQvZXZlbnQtc3RyZWFtIjogWyJldmVudF9zdHJlYW0iXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvY2FjaGUtbWFuaWZlc3QiOiBbIm1hbmlmZXN0
Il19KQorCityZXNwb25zZV9jb2RlcyA9IHsKKyAgICAxMDA6ICgnQ29udGludWUnLCAnUmVxdWVz
dCByZWNlaXZlZCwgcGxlYXNlIGNvbnRpbnVlJyksCisgICAgMTAxOiAoJ1N3aXRjaGluZyBQcm90
b2NvbHMnLAorICAgICAgICAgICdTd2l0Y2hpbmcgdG8gbmV3IHByb3RvY29sOyBvYmV5IFVwZ3Jh
ZGUgaGVhZGVyJyksCisKKyAgICAyMDA6ICgnT0snLCAnUmVxdWVzdCBmdWxmaWxsZWQsIGRvY3Vt
ZW50IGZvbGxvd3MnKSwKKyAgICAyMDE6ICgnQ3JlYXRlZCcsICdEb2N1bWVudCBjcmVhdGVkLCBV
UkwgZm9sbG93cycpLAorICAgIDIwMjogKCdBY2NlcHRlZCcsCisgICAgICAgICAgJ1JlcXVlc3Qg
YWNjZXB0ZWQsIHByb2Nlc3NpbmcgY29udGludWVzIG9mZi1saW5lJyksCisgICAgMjAzOiAoJ05v
bi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uJywgJ1JlcXVlc3QgZnVsZmlsbGVkIGZyb20gY2Fj
aGUnKSwKKyAgICAyMDQ6ICgnTm8gQ29udGVudCcsICdSZXF1ZXN0IGZ1bGZpbGxlZCwgbm90aGlu
ZyBmb2xsb3dzJyksCisgICAgMjA1OiAoJ1Jlc2V0IENvbnRlbnQnLCAnQ2xlYXIgaW5wdXQgZm9y
bSBmb3IgZnVydGhlciBpbnB1dC4nKSwKKyAgICAyMDY6ICgnUGFydGlhbCBDb250ZW50JywgJ1Bh
cnRpYWwgY29udGVudCBmb2xsb3dzLicpLAorCisgICAgMzAwOiAoJ011bHRpcGxlIENob2ljZXMn
LAorICAgICAgICAgICdPYmplY3QgaGFzIHNldmVyYWwgcmVzb3VyY2VzIC0tIHNlZSBVUkkgbGlz
dCcpLAorICAgIDMwMTogKCdNb3ZlZCBQZXJtYW5lbnRseScsICdPYmplY3QgbW92ZWQgcGVybWFu
ZW50bHkgLS0gc2VlIFVSSSBsaXN0JyksCisgICAgMzAyOiAoJ0ZvdW5kJywgJ09iamVjdCBtb3Zl
ZCB0ZW1wb3JhcmlseSAtLSBzZWUgVVJJIGxpc3QnKSwKKyAgICAzMDM6ICgnU2VlIE90aGVyJywg
J09iamVjdCBtb3ZlZCAtLSBzZWUgTWV0aG9kIGFuZCBVUkwgbGlzdCcpLAorICAgIDMwNDogKCdO
b3QgTW9kaWZpZWQnLAorICAgICAgICAgICdEb2N1bWVudCBoYXMgbm90IGNoYW5nZWQgc2luY2Ug
Z2l2ZW4gdGltZScpLAorICAgIDMwNTogKCdVc2UgUHJveHknLAorICAgICAgICAgICdZb3UgbXVz
dCB1c2UgcHJveHkgc3BlY2lmaWVkIGluIExvY2F0aW9uIHRvIGFjY2VzcyB0aGlzICcKKyAgICAg
ICAgICAncmVzb3VyY2UuJyksCisgICAgMzA3OiAoJ1RlbXBvcmFyeSBSZWRpcmVjdCcsCisgICAg
ICAgICAgJ09iamVjdCBtb3ZlZCB0ZW1wb3JhcmlseSAtLSBzZWUgVVJJIGxpc3QnKSwKKworICAg
IDQwMDogKCdCYWQgUmVxdWVzdCcsCisgICAgICAgICAgJ0JhZCByZXF1ZXN0IHN5bnRheCBvciB1
bnN1cHBvcnRlZCBtZXRob2QnKSwKKyAgICA0MDE6ICgnVW5hdXRob3JpemVkJywKKyAgICAgICAg
ICAnTm8gcGVybWlzc2lvbiAtLSBzZWUgYXV0aG9yaXphdGlvbiBzY2hlbWVzJyksCisgICAgNDAy
OiAoJ1BheW1lbnQgUmVxdWlyZWQnLAorICAgICAgICAgICdObyBwYXltZW50IC0tIHNlZSBjaGFy
Z2luZyBzY2hlbWVzJyksCisgICAgNDAzOiAoJ0ZvcmJpZGRlbicsCisgICAgICAgICAgJ1JlcXVl
c3QgZm9yYmlkZGVuIC0tIGF1dGhvcml6YXRpb24gd2lsbCBub3QgaGVscCcpLAorICAgIDQwNDog
KCdOb3QgRm91bmQnLCAnTm90aGluZyBtYXRjaGVzIHRoZSBnaXZlbiBVUkknKSwKKyAgICA0MDU6
ICgnTWV0aG9kIE5vdCBBbGxvd2VkJywKKyAgICAgICAgICAnU3BlY2lmaWVkIG1ldGhvZCBpcyBp
bnZhbGlkIGZvciB0aGlzIHJlc291cmNlLicpLAorICAgIDQwNjogKCdOb3QgQWNjZXB0YWJsZScs
ICdVUkkgbm90IGF2YWlsYWJsZSBpbiBwcmVmZXJyZWQgZm9ybWF0LicpLAorICAgIDQwNzogKCdQ
cm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCcsICdZb3UgbXVzdCBhdXRoZW50aWNhdGUgd2l0
aCAnCisgICAgICAgICAgJ3RoaXMgcHJveHkgYmVmb3JlIHByb2NlZWRpbmcuJyksCisgICAgNDA4
OiAoJ1JlcXVlc3QgVGltZW91dCcsICdSZXF1ZXN0IHRpbWVkIG91dDsgdHJ5IGFnYWluIGxhdGVy
LicpLAorICAgIDQwOTogKCdDb25mbGljdCcsICdSZXF1ZXN0IGNvbmZsaWN0LicpLAorICAgIDQx
MDogKCdHb25lJywKKyAgICAgICAgICAnVVJJIG5vIGxvbmdlciBleGlzdHMgYW5kIGhhcyBiZWVu
IHBlcm1hbmVudGx5IHJlbW92ZWQuJyksCisgICAgNDExOiAoJ0xlbmd0aCBSZXF1aXJlZCcsICdD
bGllbnQgbXVzdCBzcGVjaWZ5IENvbnRlbnQtTGVuZ3RoLicpLAorICAgIDQxMjogKCdQcmVjb25k
aXRpb24gRmFpbGVkJywgJ1ByZWNvbmRpdGlvbiBpbiBoZWFkZXJzIGlzIGZhbHNlLicpLAorICAg
IDQxMzogKCdSZXF1ZXN0IEVudGl0eSBUb28gTGFyZ2UnLCAnRW50aXR5IGlzIHRvbyBsYXJnZS4n
KSwKKyAgICA0MTQ6ICgnUmVxdWVzdC1VUkkgVG9vIExvbmcnLCAnVVJJIGlzIHRvbyBsb25nLicp
LAorICAgIDQxNTogKCdVbnN1cHBvcnRlZCBNZWRpYSBUeXBlJywgJ0VudGl0eSBib2R5IGluIHVu
c3VwcG9ydGVkIGZvcm1hdC4nKSwKKyAgICA0MTY6ICgnUmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRp
c2ZpYWJsZScsCisgICAgICAgICAgJ0Nhbm5vdCBzYXRpc2Z5IHJlcXVlc3QgcmFuZ2UuJyksCisg
ICAgNDE3OiAoJ0V4cGVjdGF0aW9uIEZhaWxlZCcsCisgICAgICAgICAgJ0V4cGVjdCBjb25kaXRp
b24gY291bGQgbm90IGJlIHNhdGlzZmllZC4nKSwKKworICAgIDUwMDogKCdJbnRlcm5hbCBTZXJ2
ZXIgRXJyb3InLCAnU2VydmVyIGdvdCBpdHNlbGYgaW4gdHJvdWJsZScpLAorICAgIDUwMTogKCdO
b3QgSW1wbGVtZW50ZWQnLAorICAgICAgICAgICdTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlz
IG9wZXJhdGlvbicpLAorICAgIDUwMjogKCdCYWQgR2F0ZXdheScsICdJbnZhbGlkIHJlc3BvbnNl
cyBmcm9tIGFub3RoZXIgc2VydmVyL3Byb3h5LicpLAorICAgIDUwMzogKCdTZXJ2aWNlIFVuYXZh
aWxhYmxlJywKKyAgICAgICAgICAnVGhlIHNlcnZlciBjYW5ub3QgcHJvY2VzcyB0aGUgcmVxdWVz
dCBkdWUgdG8gYSBoaWdoIGxvYWQnKSwKKyAgICA1MDQ6ICgnR2F0ZXdheSBUaW1lb3V0JywKKyAg
ICAgICAgICAnVGhlIGdhdGV3YXkgc2VydmVyIGRpZCBub3QgcmVjZWl2ZSBhIHRpbWVseSByZXNw
b25zZScpLAorICAgIDUwNTogKCdIVFRQIFZlcnNpb24gTm90IFN1cHBvcnRlZCcsICdDYW5ub3Qg
ZnVsZmlsbCByZXF1ZXN0LicpLAorICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9oYW5kbGVy
cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93
cHRzZXJ2ZS93cHRzZXJ2ZS9oYW5kbGVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmIzZGMxMzBkOWFlOWZh
OTZkMWJlM2JhM2UwNmZjNjBlMDc4MTI2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL2hh
bmRsZXJzLnB5CkBAIC0wLDAgKzEsMjMyIEBACitpbXBvcnQgY2dpCitpbXBvcnQganNvbgoraW1w
b3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHVybGxpYgor
aW1wb3J0IHVybHBhcnNlCisKK2Zyb20gY29uc3RhbnRzIGltcG9ydCBjb250ZW50X3R5cGVzCitm
cm9tIHBpcGVzIGltcG9ydCBQaXBlbGluZQorZnJvbSByYW5nZXMgaW1wb3J0IFJhbmdlUGFyc2Vy
Citmcm9tIHJlc3BvbnNlIGltcG9ydCBNdWx0aXBhcnRDb250ZW50Citmcm9tIHV0aWxzIGltcG9y
dCBIVFRQRXhjZXB0aW9uCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3cHRzZXJ2ZSIp
CisKK19fYWxsX18gPSBbImZpbGVfaGFuZGxlciIsICJweXRob25fc2NyaXB0X2hhbmRsZXIiLAor
ICAgICAgICAgICAiRnVuY3Rpb25IYW5kbGVyIiwgImhhbmRsZXIiLCAianNvbl9oYW5kbGVyIiwK
KyAgICAgICAgICAgImFzX2lzX2hhbmRsZXIiLCAiRXJyb3JIYW5kbGVyIl0KKworCitkZWYgZ3Vl
c3NfY29udGVudF90eXBlKHBhdGgpOgorICAgIGV4dCA9IG9zLnBhdGguc3BsaXRleHQocGF0aClb
MV0ubHN0cmlwKCIuIikKKyAgICBpZiBleHQgaW4gY29udGVudF90eXBlczoKKyAgICAgICAgcmV0
dXJuIGNvbnRlbnRfdHlwZXNbZXh0XQorCisgICAgcmV0dXJuICJhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0iCisKKworY2xhc3MgRGlyZWN0b3J5SGFuZGxlcihvYmplY3QpOgorICAgIGRlZiBfX2Nh
bGxfXyhzZWxmLCByZXF1ZXN0LCByZXNwb25zZSk6CisgICAgICAgIHBhdGggPSByZXF1ZXN0LmZp
bGVzeXN0ZW1fcGF0aAorICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZV9kaXJlY3RvcnkocGF0aCwg
cmVxdWVzdCwgcmVzcG9uc2UpCisgICAgICAgIAorICAgIGRlZiBzZXJ2ZV9kaXJlY3Rvcnkoc2Vs
ZiwgcGF0aCwgcmVxdWVzdCwgcmVzcG9uc2UpOgorICAgICAgICBhc3NlcnQgb3MucGF0aC5pc2Rp
cihwYXRoKQorCisgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBbKCJDb250ZW50LVR5cGUiLCAi
dGV4dC9odG1sIildCisgICAgICAgIHJlc3BvbnNlLmNvbnRlbnQgPSAiIiI8IWRvY3R5cGUgaHRt
bD4KKzx0aXRsZT5EaXJlY3RvcnkgbGlzdGluZyBmb3IgJShwYXRoKXM8L3RpdGxlPgorPGgxPkRp
cmVjdG9yeSBsaXN0aW5nIGZvciAlKHBhdGgpczwvaDE+Cis8dWw+CislKGl0ZW1zKXMKKzwvbGk+
CisiIiIgJSB7InBhdGgiOiBjZ2kuZXNjYXBlKHJlcXVlc3QudXJsX3BhcnRzLnBhdGgpLAorICAg
ICAgICJpdGVtcyI6ICJcbiIuam9pbihzZWxmLmxpc3RfaXRlbXMocmVxdWVzdCwgcGF0aCkpfQor
CisgICAgZGVmIGxpc3RfaXRlbXMoc2VsZiwgcmVxdWVzdCwgcGF0aCk6CisgICAgICAgIGJhc2Vf
cGF0aCA9IHJlcXVlc3QudXJsX3BhcnRzLnBhdGgKKyAgICAgICAgZmlsZXN5c3RlbV9iYXNlID0g
cmVxdWVzdC5maWxlc3lzdGVtX3BhdGgKKyAgICAgICAgaWYgbm90IGJhc2VfcGF0aC5lbmRzd2l0
aCgiLyIpOgorICAgICAgICAgICAgYmFzZV9wYXRoICs9ICIvIgorICAgICAgICBpZiBiYXNlX3Bh
dGggIT0gIi8iOgorICAgICAgICAgICAgbGluayA9IHVybHBhcnNlLnVybGpvaW4oYmFzZV9wYXRo
LCAiLi4iKQorICAgICAgICAgICAgeWllbGQgKCIiIjxsaSBjbGFzcz0iZGlyIj48YSBocmVmPSIl
KGxpbmspcyI+JShuYW1lKXM8L2E+IiIiICUKKyAgICAgICAgICAgICAgICAgICB7ImxpbmsiOiBs
aW5rLCAibmFtZSI6ICIuLiJ9KQorICAgICAgICBmb3IgaXRlbSBpbiBzb3J0ZWQob3MubGlzdGRp
cihwYXRoKSk6CisgICAgICAgICAgICBsaW5rID0gY2dpLmVzY2FwZSh1cmxsaWIucXVvdGUoaXRl
bSkpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihmaWxlc3lzdGVt
X2Jhc2UsIGl0ZW0pKToKKyAgICAgICAgICAgICAgICBsaW5rICs9ICIvIgorICAgICAgICAgICAg
ICAgIGNsYXNzXyA9ICJkaXIiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNs
YXNzXyA9ICJmaWxlIgorICAgICAgICAgICAgeWllbGQgKCIiIjxsaSBjbGFzcz0iJShjbGFzcylz
Ij48YSBocmVmPSIlKGxpbmspcyI+JShuYW1lKXM8L2E+IiIiICUKKyAgICAgICAgICAgICAgICAg
ICB7ImxpbmsiOiBsaW5rLCAibmFtZSI6IGNnaS5lc2NhcGUoaXRlbSksICJjbGFzcyI6IGNsYXNz
X30pCisKKworZGlyZWN0b3J5X2hhbmRsZXIgPSBEaXJlY3RvcnlIYW5kbGVyKCkKKworCitjbGFz
cyBGaWxlSGFuZGxlcihvYmplY3QpOgorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCByZXF1ZXN0LCBy
ZXNwb25zZSk6CisgICAgICAgIHBhdGggPSByZXF1ZXN0LmZpbGVzeXN0ZW1fcGF0aAorICAgICAg
ICByZXR1cm4gc2VsZi5zZXJ2ZV9maWxlKHBhdGgsIHJlcXVlc3QsIHJlc3BvbnNlKQorCisgICAg
ZGVmIHNlcnZlX2ZpbGUoc2VsZiwgcGF0aCwgcmVxdWVzdCwgcmVzcG9uc2UpOgorICAgICAgICBp
ZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIGRpcmVjdG9yeV9oYW5k
bGVyLnNlcnZlX2RpcmVjdG9yeShwYXRoLCByZXF1ZXN0LCByZXNwb25zZSkKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgI1RoaXMgaXMgcHJvYmFibHkgcmFjeSB3aXRoIHNvbWUgb3RoZXIgcHJv
Y2VzcyB0cnlpbmcgdG8gY2hhbmdlIHRoZSBmaWxlCisgICAgICAgICAgICBmaWxlX3NpemUgPSBv
cy5zdGF0KHBhdGgpLnN0X3NpemUKKyAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMudXBkYXRl
KHNlbGYuZ2V0X2hlYWRlcnMocGF0aCkpCisgICAgICAgICAgICBpZiAiUmFuZ2UiIGluIHJlcXVl
c3QuaGVhZGVyczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGJ5
dGVfcmFuZ2VzID0gUmFuZ2VQYXJzZXIoKShyZXF1ZXN0LmhlYWRlcnNbJ1JhbmdlJ10sIGZpbGVf
c2l6ZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgSFRUUEV4Y2VwdGlvbiBhcyBlOgorICAgICAg
ICAgICAgICAgICAgICBpZiBlLmNvZGUgPT0gNDE2OgorICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2UuaGVhZGVycy5zZXQoIkNvbnRlbnQtUmFuZ2UiLCAiYnl0ZXMgKi8laSIgJSBmaWxl
X3NpemUpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBieXRlX3JhbmdlcyA9IE5vbmUKKyAgICAgICAgICAgIGRhdGEgPSBz
ZWxmLmdldF9kYXRhKHJlc3BvbnNlLCBwYXRoLCBieXRlX3JhbmdlcykKKyAgICAgICAgICAgIHJl
c3BvbnNlLmNvbnRlbnQgPSBkYXRhCisgICAgICAgICAgICBxdWVyeSA9IHVybHBhcnNlLnBhcnNl
X3FzKHJlcXVlc3QudXJsX3BhcnRzLnF1ZXJ5KQorICAgICAgICAgICAgaWYgInBpcGUiIGluIHF1
ZXJ5OgorICAgICAgICAgICAgICAgIHBpcGVsaW5lID0gUGlwZWxpbmUocXVlcnlbInBpcGUiXVst
MV0pCisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBwaXBlbGluZShyZXF1ZXN0LCByZXNwb25z
ZSkKKworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlCisKKyAgICAgICAgZXhjZXB0IChPU0Vy
cm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgIHJhaXNlIEhUVFBFeGNlcHRpb24oNDA0KQorCisg
ICAgZGVmIGdldF9oZWFkZXJzKHNlbGYsIHBhdGgpOgorICAgICAgICBydiA9IHNlbGYuZGVmYXVs
dF9oZWFkZXJzKHBhdGgpCisgICAgICAgIHJ2LmV4dGVuZChzZWxmLmxvYWRfaGVhZGVycyhvcy5w
YXRoLmpvaW4ob3MucGF0aC5zcGxpdChwYXRoKVswXSwgIl9fZGlyX18iKSkpCisgICAgICAgIHJ2
LmV4dGVuZChzZWxmLmxvYWRfaGVhZGVycyhwYXRoKSkKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAg
ICBkZWYgbG9hZF9oZWFkZXJzKHNlbGYsIHBhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBoZWFkZXJzX2ZpbGUgPSBvcGVuKHBhdGggKyAiLmhlYWRlcnMiKQorICAgICAgICBleGNlcHQg
SU9FcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgcmV0dXJuIFt0dXBsZShpdGVtLnN0cmlwKCkgZm9yIGl0ZW0gaW4gbGluZS5zcGxpdCgiOiIs
IDEpKQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBoZWFkZXJzX2ZpbGUgaWYgbGlu
ZV0KKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCByZXNwb25zZSwgcGF0aCwgYnl0ZV9yYW5nZXMp
OgorICAgICAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZjoKKyAgICAgICAgICAgIGlmIGJ5dGVfcmFu
Z2VzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1cyA9IDIwNgorICAgICAgICAg
ICAgICAgIGlmIGxlbihieXRlX3JhbmdlcykgPiAxOgorICAgICAgICAgICAgICAgICAgICBwYXJ0
c19jb250ZW50X3R5cGUsIGNvbnRlbnQgPSBzZWxmLnNldF9yZXNwb25zZV9tdWx0aXBhcnQocmVz
cG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX3JhbmdlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGYpCisgICAgICAgICAgICAgICAgICAgIGZvciBieXRlX3JhbmdlIGluIGJ5dGVfcmFu
Z2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRfcGFydChzZWxmLmdl
dF9yYW5nZV9kYXRhKGYsIGJ5dGVfcmFuZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJ0c19jb250ZW50X3R5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFsoIkNvbnRlbnQtUmFuZ2UiLCBieXRlX3JhbmdlLmhl
YWRlcl92YWx1ZSgpKV0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50CisgICAg
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycy5z
ZXQoIkNvbnRlbnQtUmFuZ2UiLCBieXRlX3Jhbmdlc1swXS5oZWFkZXJfdmFsdWUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3JhbmdlX2RhdGEoZiwgYnl0ZV9yYW5nZXNb
MF0pCisKKyAgICBkZWYgc2V0X3Jlc3BvbnNlX211bHRpcGFydChzZWxmLCByZXNwb25zZSwgcmFu
Z2VzLCBmKToKKyAgICAgICAgcGFydHNfY29udGVudF90eXBlID0gcmVzcG9uc2UuaGVhZGVycy5n
ZXQoIkNvbnRlbnQtVHlwZSIpCisgICAgICAgIGlmIHBhcnRzX2NvbnRlbnRfdHlwZToKKyAgICAg
ICAgICAgIHBhcnRzX2NvbnRlbnRfdHlwZSA9IHBhcnRzX2NvbnRlbnRfdHlwZVstMV0KKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHBhcnRzX2NvbnRlbnRfdHlwZSA9IE5vbmUKKyAgICAgICAg
Y29udGVudCA9IE11bHRpcGFydENvbnRlbnQoKQorICAgICAgICByZXNwb25zZS5oZWFkZXJzLnNl
dCgiQ29udGVudC1UeXBlIiwgIm11bHRpcGFydC9ieXRlcmFuZ2VzOyBib3VuZGFyeT0lcyIgJSBj
b250ZW50LmJvdW5kYXJ5KQorICAgICAgICByZXR1cm4gcGFydHNfY29udGVudF90eXBlLCBjb250
ZW50CisKKyAgICBkZWYgZ2V0X3JhbmdlX2RhdGEoc2VsZiwgZiwgYnl0ZV9yYW5nZSk6CisgICAg
ICAgIGYuc2VlayhieXRlX3JhbmdlLmxvd2VyKQorICAgICAgICByZXR1cm4gZi5yZWFkKGJ5dGVf
cmFuZ2UudXBwZXIgLSBieXRlX3JhbmdlLmxvd2VyKQorCisgICAgZGVmIGRlZmF1bHRfaGVhZGVy
cyhzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIFsoIkNvbnRlbnQtVHlwZSIsIGd1ZXNzX2Nv
bnRlbnRfdHlwZShwYXRoKSldCisKKworZmlsZV9oYW5kbGVyID0gRmlsZUhhbmRsZXIoKQorCisK
K2RlZiBweXRob25fc2NyaXB0X2hhbmRsZXIocmVxdWVzdCwgcmVzcG9uc2UpOgorICAgIHBhdGgg
PSByZXF1ZXN0LmZpbGVzeXN0ZW1fcGF0aAorCisgICAgdHJ5OgorICAgICAgICBlbnZpcm9uID0g
eyJfX2ZpbGVfXyI6IHBhdGh9CisgICAgICAgIGV4ZWNmaWxlKHBhdGgsIGVudmlyb24sIGVudmly
b24pCisgICAgICAgIGlmICJtYWluIiBpbiBlbnZpcm9uOgorICAgICAgICAgICAgaGFuZGxlciA9
IEZ1bmN0aW9uSGFuZGxlcihlbnZpcm9uWyJtYWluIl0pCisgICAgICAgICAgICBoYW5kbGVyKHJl
cXVlc3QsIHJlc3BvbnNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgSFRUUEV4
Y2VwdGlvbig1MDApCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHJhaXNlIEhUVFBFeGNl
cHRpb24oNDA0KQorCisKK2RlZiBGdW5jdGlvbkhhbmRsZXIoZnVuYyk6CisgICAgZGVmIGlubmVy
KHJlcXVlc3QsIHJlc3BvbnNlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcnYgPSBmdW5j
KHJlcXVlc3QsIHJlc3BvbnNlKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBtc2cgPSB0
cmFjZWJhY2suZm9ybWF0X2V4YygpCisgICAgICAgICAgICByYWlzZSBIVFRQRXhjZXB0aW9uKDUw
MCwgbWVzc2FnZT1tc2cpCisgICAgICAgIGlmIHJ2IGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZShydiwgdHVwbGUpOgorICAgICAgICAgICAgICAgIGlmIGxlbihydikgPT0g
MzoKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBoZWFkZXJzLCBjb250ZW50ID0gcnYKKyAg
ICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzID0gc3RhdHVzCisgICAgICAgICAgICAg
ICAgZWxpZiBsZW4ocnYpID09IDI6CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMsIGNvbnRl
bnQgPSBydgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNl
IEhUVFBFeGNlcHRpb24oNTAwKQorICAgICAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMudXBk
YXRlKGhlYWRlcnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRlbnQg
PSBydgorICAgICAgICAgICAgcmVzcG9uc2UuY29udGVudCA9IGNvbnRlbnQKKyAgICByZXR1cm4g
aW5uZXIKKworCisjVGhlIGdlbmVyaWMgbmFtZSBoZXJlIGlzIHNvIHRoYXQgdGhpcyBjYW4gYmUg
dXNlZCBhcyBhIGRlY29yYXRvcgoraGFuZGxlciA9IEZ1bmN0aW9uSGFuZGxlcgorCisKK2RlZiBq
c29uX2hhbmRsZXIoZnVuYyk6CisgICAgZGVmIGlubmVyKHJlcXVlc3QsIHJlc3BvbnNlKToKKyAg
ICAgICAgcnYgPSBmdW5jKHJlcXVlc3QsIHJlc3BvbnNlKQorICAgICAgICByZXNwb25zZS5oZWFk
ZXJzLnNldCgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKQorICAgICAgICBlbmMg
PSBqc29uLmR1bXBzCisgICAgICAgIGlmIGlzaW5zdGFuY2UocnYsIHR1cGxlKToKKyAgICAgICAg
ICAgIHJ2ID0gbGlzdChydikKKyAgICAgICAgICAgIHZhbHVlID0gdHVwbGUocnZbOi0xXSArIFtl
bmMocnZbLTFdKV0pCisgICAgICAgICAgICBsZW5ndGggPSBsZW4odmFsdWVbLTFdKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgdmFsdWUgPSBlbmMocnYpCisgICAgICAgICAgICBsZW5ndGgg
PSBsZW4odmFsdWUpCisgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMuc2V0KCJDb250ZW50LUxlbmd0
aCIsIGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgcmV0dXJuIEZ1bmN0aW9uSGFu
ZGxlcihpbm5lcikKKworCitkZWYgYXNfaXNfaGFuZGxlcihyZXF1ZXN0LCByZXNwb25zZSk6Cisg
ICAgcGF0aCA9IHJlcXVlc3QuZmlsZXN5c3RlbV9wYXRoCisgICAgdHJ5OgorICAgICAgICB3aXRo
IG9wZW4ocGF0aCkgYXMgZjoKKyAgICAgICAgICAgIHJlc3BvbnNlLndyaXRlci53cml0ZV9jb250
ZW50KGYucmVhZCgpKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByYWlzZSBIVFRQRXhj
ZXB0aW9uKDQwNCkKKworCitjbGFzcyBFcnJvckhhbmRsZXIob2JqZWN0KToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgc3RhdHVzKToKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzdGF0dXMKKworICAg
IGRlZiBfX2NhbGxfXyhzZWxmLCByZXF1ZXN0LCByZXNwb25zZSk6CisgICAgICAgIHJlc3BvbnNl
LnNldF9lcnJvcihzZWxmLnN0YXR1cykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9waXBlcy5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2
ZS93cHRzZXJ2ZS9waXBlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTcwYzhlYjAyMTU3M2MzYTczYmFkMDMz
MjgyZGYwMTQxNTQ1ODI2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3BpcGVzLnB5CkBA
IC0wLDAgKzEsMzcxIEBACitmcm9tIGNnaSBpbXBvcnQgZXNjYXBlCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHJlCitpbXBvcnQgdGltZQoraW1wb3J0IHR5cGVzCisKKworbG9nZ2VyID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoIndwdHNlcnZlIikKKworCitkZWYgcmVzb2x2ZV9jb250ZW50KHJlc3BvbnNl
KToKKyAgICBydiA9ICIiLmpvaW4oaXRlbSBmb3IgaXRlbSBpbiByZXNwb25zZS5pdGVyX2NvbnRl
bnQoKSkKKyAgICBpZiB0eXBlKHJ2KSA9PSB1bmljb2RlOgorICAgICAgICBydiA9IHJ2LmVuY29k
ZShyZXNwb25zZS5lbmNvZGluZykKKyAgICByZXR1cm4gcnYKKworCitjbGFzcyBQaXBlbGluZShv
YmplY3QpOgorICAgIHBpcGVzID0ge30KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwaXBlX3N0
cmluZyk6CisgICAgICAgIHNlbGYucGlwZV9mdW5jdGlvbnMgPSBzZWxmLnBhcnNlKHBpcGVfc3Ry
aW5nKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIHBpcGVfc3RyaW5nKToKKyAgICAgICAgZnVuY3Rp
b25zID0gW10KKyAgICAgICAgZm9yIGl0ZW0gaW4gUGlwZVRva2VuaXplcigpLnRva2VuaXplKHBp
cGVfc3RyaW5nKToKKyAgICAgICAgICAgIGlmIG5vdCBpdGVtOgorICAgICAgICAgICAgICAgIGJy
ZWFrCisgICAgICAgICAgICBpZiBpdGVtWzBdID09ICJmdW5jdGlvbiI6CisgICAgICAgICAgICAg
ICAgZnVuY3Rpb25zLmFwcGVuZCgoc2VsZi5waXBlc1tpdGVtWzFdXSwgW10pKQorICAgICAgICAg
ICAgZWxpZiBpdGVtWzBdID09ICJhcmd1bWVudCI6CisgICAgICAgICAgICAgICAgZnVuY3Rpb25z
Wy0xXVsxXS5hcHBlbmQoaXRlbVsxXSkKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucworCisgICAg
ZGVmIF9fY2FsbF9fKHNlbGYsIHJlcXVlc3QsIHJlc3BvbnNlKToKKyAgICAgICAgZm9yIGZ1bmMs
IGFyZ3MgaW4gc2VsZi5waXBlX2Z1bmN0aW9uczoKKyAgICAgICAgICAgIHJlc3BvbnNlID0gZnVu
YyhyZXF1ZXN0LCByZXNwb25zZSwgKmFyZ3MpCisgICAgICAgIHJldHVybiByZXNwb25zZQorCisK
K2NsYXNzIFBpcGVUb2tlbml6ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6Cisg
ICAgICAgICNUaGlzIHdob2xlIGNsYXNzIGNhbiBsaWtlbHkgYmUgcmVwbGFjZWQgYnkgc29tZSBy
ZWdleHBzCisgICAgICAgIHNlbGYuc3RhdGUgPSBOb25lCisKKyAgICBkZWYgdG9rZW5pemUoc2Vs
Ziwgc3RyaW5nKToKKyAgICAgICAgc2VsZi5zdHJpbmcgPSBzdHJpbmcKKyAgICAgICAgc2VsZi5z
dGF0ZSA9IHNlbGYuZnVuY19uYW1lX3N0YXRlCisgICAgICAgIHNlbGYuX2luZGV4ID0gMAorICAg
ICAgICB3aGlsZSBzZWxmLnN0YXRlOgorICAgICAgICAgICAgeWllbGQgc2VsZi5zdGF0ZSgpCisg
ICAgICAgIHlpZWxkIE5vbmUKKworICAgIGRlZiBnZXRfY2hhcihzZWxmKToKKyAgICAgICAgaWYg
c2VsZi5faW5kZXggPj0gbGVuKHNlbGYuc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBOb25l
CisgICAgICAgIHJ2ID0gc2VsZi5zdHJpbmdbc2VsZi5faW5kZXhdCisgICAgICAgIHNlbGYuX2lu
ZGV4ICs9IDEKKyAgICAgICAgcmV0dXJuIHJ2CisKKyAgICBkZWYgZnVuY19uYW1lX3N0YXRlKHNl
bGYpOgorICAgICAgICBydiA9ICIiCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBj
aGFyID0gc2VsZi5nZXRfY2hhcigpCisgICAgICAgICAgICBpZiBjaGFyIGlzIE5vbmU6CisgICAg
ICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBydjoKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICgiZnVuY3Rpb24iLCBydikKKyAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZWxp
ZiBjaGFyID09ICIoIjoKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc2VsZi5hcmd1bWVu
dF9zdGF0ZQorICAgICAgICAgICAgICAgIHJldHVybiAoImZ1bmN0aW9uIiwgcnYpCisgICAgICAg
ICAgICBlbGlmIGNoYXIgPT0gInwiOgorICAgICAgICAgICAgICAgIGlmIHJ2OgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKCJmdW5jdGlvbiIsIHJ2KQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBydiArPSBjaGFyCisKKyAgICBkZWYgYXJndW1lbnRfc3RhdGUoc2VsZik6
CisgICAgICAgIHJ2ID0gIiIKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGNoYXIg
PSBzZWxmLmdldF9jaGFyKCkKKyAgICAgICAgICAgIGlmIGNoYXIgaXMgTm9uZToKKyAgICAgICAg
ICAgICAgICBzZWxmLnN0YXRlID0gTm9uZQorICAgICAgICAgICAgICAgIHJldHVybiAoImFyZ3Vt
ZW50IiwgcnYpCisgICAgICAgICAgICBlbGlmIGNoYXIgPT0gIlxcIjoKKyAgICAgICAgICAgICAg
ICBydiArPSBzZWxmLmdldF9lc2NhcGUoKQorICAgICAgICAgICAgICAgIGlmIHJ2IGlzIE5vbmU6
CisgICAgICAgICAgICAgICAgICAgICNUaGlzIHNob3VsZCBwZXJoYXBzIGJlIGFuIGVycm9yIGlu
c3RlYWQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiYXJndW1lbnQiLCBydikKKyAgICAg
ICAgICAgIGVsaWYgY2hhciA9PSAiLCI6CisgICAgICAgICAgICAgICAgcmV0dXJuICgiYXJndW1l
bnQiLCBydikKKyAgICAgICAgICAgIGVsaWYgY2hhciA9PSAiKSI6CisgICAgICAgICAgICAgICAg
c2VsZi5zdGF0ZSA9IHNlbGYuZnVuY19uYW1lX3N0YXRlCisgICAgICAgICAgICAgICAgcmV0dXJu
ICgiYXJndW1lbnQiLCBydikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcnYg
Kz0gY2hhcgorCisgICAgZGVmIGdldF9lc2NhcGUoc2VsZik6CisgICAgICAgIGNoYXIgPSBzZWxm
LmdldF9jaGFyKCkKKyAgICAgICAgZXNjYXBlcyA9IHsibiI6ICJcbiIsCisgICAgICAgICAgICAg
ICAgICAgInIiOiAiXHIiLAorICAgICAgICAgICAgICAgICAgICJ0IjogIlx0In0KKyAgICAgICAg
cmV0dXJuIGVzY2FwZXMuZ2V0KGNoYXIsIGNoYXIpCisKKworY2xhc3MgcGlwZShvYmplY3QpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJnX2NvbnZlcnRlcnMpOgorICAgICAgICBzZWxmLmFy
Z19jb252ZXJ0ZXJzID0gYXJnX2NvbnZlcnRlcnMKKyAgICAgICAgc2VsZi5tYXhfYXJncyA9IGxl
bihzZWxmLmFyZ19jb252ZXJ0ZXJzKQorICAgICAgICBzZWxmLm1pbl9hcmdzID0gMAorICAgICAg
ICBvcHRfc2VlbiA9IEZhbHNlCisgICAgICAgIGZvciBpdGVtIGluIHNlbGYuYXJnX2NvbnZlcnRl
cnM6CisgICAgICAgICAgICBpZiBub3Qgb3B0X3NlZW46CisgICAgICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShpdGVtLCBvcHQpOgorICAgICAgICAgICAgICAgICAgICBvcHRfc2VlbiA9IFRydWUK
KyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbl9hcmdz
ICs9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFu
Y2UoaXRlbSwgb3B0KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm9u
LW9wdGlvbmFsIGFyZ3VtZW50IGNhbm5vdCBmb2xsb3cgb3B0aW9uYWwgYXJndW1lbnQiKQorCisg
ICAgZGVmIF9fY2FsbF9fKHNlbGYsIGYpOgorICAgICAgICBkZWYgaW5uZXIocmVxdWVzdCwgcmVz
cG9uc2UsICphcmdzKToKKyAgICAgICAgICAgIGlmIG5vdCAoc2VsZi5taW5fYXJncyA8PSBsZW4o
YXJncykgPD0gc2VsZi5tYXhfYXJncyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigiRXhwZWN0ZWQgYmV0d2VlbiAlZCBhbmQgJWQgYXJncywgZ290ICVkIiAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5taW5fYXJncywgc2VsZi5tYXhfYXJncywgbGVu
KGFyZ3MpKSkKKyAgICAgICAgICAgIGFyZ192YWx1ZXMgPSB0dXBsZShmKHgpIGZvciBmLCB4IGlu
IHppcChzZWxmLmFyZ19jb252ZXJ0ZXJzLCBhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiBmKHJl
cXVlc3QsIHJlc3BvbnNlLCAqYXJnX3ZhbHVlcykKKyAgICAgICAgUGlwZWxpbmUucGlwZXNbZi5f
X25hbWVfX10gPSBpbm5lcgorICAgICAgICAjV2UgYWN0dWFsbHkgd2FudCB0aGUgdW5kZWNvcmF0
ZWQgZnVuY3Rpb24gaW4gdGhlIG1haW4gbmFtZXNwYWNlCisgICAgICAgIHJldHVybiBmCisKKwor
Y2xhc3Mgb3B0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGYpOgorICAgICAgICBz
ZWxmLmYgPSBmCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgYXJnKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuZihhcmcpCisKKworZGVmIG51bGxhYmxlKGZ1bmMpOgorICAgIGRlZiBpbm5lcihhcmcp
OgorICAgICAgICBpZiBhcmcubG93ZXIoKSA9PSAibnVsbCI6CisgICAgICAgICAgICByZXR1cm4g
Tm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoYXJnKQorICAgIHJl
dHVybiBpbm5lcgorCisKK2RlZiBib29sZWFuKGFyZyk6CisgICAgaWYgYXJnLmxvd2VyKCkgaW4g
KCJ0cnVlIiwgIjEiKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbGlmIGFyZy5sb3dlcigp
IGluICgiZmFsc2UiLCAiMCIpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByYWlzZSBWYWx1
ZUVycm9yCisKKworQHBpcGUoaW50KQorZGVmIHN0YXR1cyhyZXF1ZXN0LCByZXNwb25zZSwgY29k
ZSk6CisgICAgIiIiQWx0ZXIgdGhlIHN0YXR1cyBjb2RlLgorCisgICAgOnBhcmFtIGNvZGU6IFN0
YXR1cyBjb2RlIHRvIHVzZSBmb3IgdGhlIHJlc3BvbnNlLiIiIgorICAgIHJlc3BvbnNlLnN0YXR1
cyA9IGNvZGUKKyAgICByZXR1cm4gcmVzcG9uc2UKKworCitAcGlwZShzdHIsIHN0ciwgb3B0KGJv
b2xlYW4pKQorZGVmIGhlYWRlcihyZXF1ZXN0LCByZXNwb25zZSwgbmFtZSwgdmFsdWUsIGFwcGVu
ZD1GYWxzZSk6CisgICAgIiIiU2V0IGEgSFRUUCBoZWFkZXIuCisKKyAgICBSZXBsYWNlcyBhbnkg
ZXhpc3RpbmcgSFRUUCBoZWFkZXIgb2YgdGhlIHNhbWUgbmFtZSB1bmxlc3MKKyAgICBhcHBlbmQg
aXMgc2V0LCBpbiB3aGljaCBjYXNlIHRoZSBoZWFkZXIgaXMgYXBwZW5kZWQgd2l0aG91dAorICAg
IHJlcGxhY2VtZW50LgorCisgICAgOnBhcmFtIG5hbWU6IE5hbWUgb2YgdGhlIGhlYWRlciB0byBz
ZXQuCisgICAgOnBhcmFtIHZhbHVlOiBWYWx1ZSB0byB1c2UgZm9yIHRoZSBoZWFkZXIuCisgICAg
OnBhcmFtIGFwcGVuZDogVHJ1ZSBpZiBleGlzdGluZyBoZWFkZXJzIHNob3VsZCBub3QgYmUgcmVw
bGFjZWQKKyAgICAiIiIKKyAgICBpZiBub3QgYXBwZW5kOgorICAgICAgICByZXNwb25zZS5oZWFk
ZXJzLnNldChuYW1lLCB2YWx1ZSkKKyAgICBlbHNlOgorICAgICAgICByZXNwb25zZS5oZWFkZXJz
LmFwcGVuZChuYW1lLCB2YWx1ZSkKKyAgICByZXR1cm4gcmVzcG9uc2UKKworCitAcGlwZShzdHIp
CitkZWYgdHJpY2tsZShyZXF1ZXN0LCByZXNwb25zZSwgZGVsYXlzKToKKyAgICAiIiJTZW5kIHRo
ZSByZXNwb25zZSBpbiBwYXJ0cywgd2l0aCB0aW1lIGRlbGF5cy4KKworICAgIDpwYXJhbSBkZWxh
eXM6IEEgc3RyaW5nIG9mIGRlbGF5cyBhbmQgYW1vdW50cywgaW4gYnl0ZXMsIG9mIHRoZQorICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlIHRvIHNlbmQuIEVhY2ggY29tcG9uZW50IGlzIHNlcGFy
YXRlZCBieQorICAgICAgICAgICAgICAgICAgIGEgY29sb24uIEFtb3VudHMgaW4gYnl0ZXMgYXJl
IHBsYWluIGludGVnZXJzLCB3aGlsc3QKKyAgICAgICAgICAgICAgICAgICBkZWxheXMgYXJlIGZs
b2F0cyBwcmVmaXhlZCB3aXRoIGEgc2luZ2xlIGQgZS5nLgorICAgICAgICAgICAgICAgICAgIGQx
OjEwMDpkMgorICAgICAgICAgICAgICAgICAgIFdvdWxkIGNhdXNlIGEgMSBzZWNvbmQgZGVsYXks
IHdvdWxkIHRoZW4gc2VuZCAxMDAgYnl0ZXMKKyAgICAgICAgICAgICAgICAgICBvZiB0aGUgZmls
ZSwgYW5kIHRoZW4gY2F1c2UgYSAyIHNlY29uZCBkZWxheSwgYmVmb3JlIHNlbmRpbmcKKyAgICAg
ICAgICAgICAgICAgICB0aGUgcmVtYWluZGVyIG9mIHRoZSBmaWxlLgorCisgICAgICAgICAgICAg
ICAgICAgSWYgdGhlIGxhc3QgdG9rZW4gaXMgb2YgdGhlIGZvcm0gck4sIGluc3RlYWQgb2Ygc2Vu
ZGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICByZW1haW5kZXIgb2YgdGhlIGZpbGUsIHRoZSBw
cmV2aW91cyBOIGluc3RydWN0aW9ucyB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgcmVwZWF0
ZWQgdW50aWwgdGhlIHdob2xlIGZpbGUgaGFzIGJlZW4gc2VudCBlLmcuCisgICAgICAgICAgICAg
ICAgICAgZDE6MTAwOmQyOnIyCisgICAgICAgICAgICAgICAgICAgQ2F1c2VzIGEgZGVsYXkgb2Yg
MXMsIHRoZW4gMTAwIGJ5dGVzIHRvIGJlIHNlbnQsIHRoZW4gYSAycyBkZWxheQorICAgICAgICAg
ICAgICAgICAgIGFuZCB0aGVuIGEgZnVydGhlciAxMDAgYnl0ZXMgZm9sbG93ZWQgYnkgYSB0d28g
c2Vjb25kIGRlbGF5CisgICAgICAgICAgICAgICAgICAgdW50aWwgdGhlIHJlc3BvbnNlIGhhcyBi
ZWVuIGZ1bGx5IHNlbnQuCisgICAgICAgICAgICAgICAgICAgIiIiCisgICAgZGVmIHBhcnNlX2Rl
bGF5cygpOgorICAgICAgICBwYXJ0cyA9IGRlbGF5cy5zcGxpdCgiOiIpCisgICAgICAgIHJ2ID0g
W10KKyAgICAgICAgZm9yIGl0ZW0gaW4gcGFydHM6CisgICAgICAgICAgICBpZiBpdGVtLnN0YXJ0
c3dpdGgoImQiKToKKyAgICAgICAgICAgICAgICBpdGVtX3R5cGUgPSAiZGVsYXkiCisgICAgICAg
ICAgICAgICAgaXRlbSA9IGl0ZW1bMTpdCisgICAgICAgICAgICAgICAgdmFsdWUgPSBmbG9hdChp
dGVtKQorICAgICAgICAgICAgZWxpZiBpdGVtLnN0YXJ0c3dpdGgoInIiKToKKyAgICAgICAgICAg
ICAgICBpdGVtX3R5cGUgPSAicmVwZWF0IgorICAgICAgICAgICAgICAgIHZhbHVlID0gaW50KGl0
ZW1bMTpdKQorICAgICAgICAgICAgICAgIGlmIG5vdCB2YWx1ZSAlIDIgPT0gMDoKKyAgICAgICAg
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBpdGVtX3R5cGUgPSAiYnl0ZXMiCisgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnQo
aXRlbSkKKyAgICAgICAgICAgIGlmIGxlbihydikgYW5kIHJ2Wy0xXVswXSA9PSBpdGVtX3R5cGU6
CisgICAgICAgICAgICAgICAgcnZbLTFdWzFdICs9IHZhbHVlCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHJ2LmFwcGVuZCgoaXRlbV90eXBlLCB2YWx1ZSkpCisgICAgICAgIHJl
dHVybiBydgorCisgICAgZGVsYXlzID0gcGFyc2VfZGVsYXlzKCkKKyAgICBpZiBub3QgZGVsYXlz
OgorICAgICAgICByZXR1cm4gcmVzcG9uc2UKKyAgICBjb250ZW50ID0gcmVzb2x2ZV9jb250ZW50
KHJlc3BvbnNlKQorICAgIG1vZGlmaWVkX2NvbnRlbnQgPSBbXQorICAgIG9mZnNldCA9IFswXQor
CisgICAgZGVmIHNsZWVwKHNlY29uZHMpOgorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAg
ICAgIHRpbWUuc2xlZXAoc2Vjb25kcykKKyAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICBy
ZXR1cm4gaW5uZXIKKworICAgIGRlZiBhZGRfY29udGVudChkZWxheXMsIHJlcGVhdD1GYWxzZSk6
CisgICAgICAgIGZvciBpLCAoaXRlbV90eXBlLCB2YWx1ZSkgaW4gZW51bWVyYXRlKGRlbGF5cyk6
CisgICAgICAgICAgICBpZiBpdGVtX3R5cGUgPT0gImJ5dGVzIjoKKyAgICAgICAgICAgICAgICBt
b2RpZmllZF9jb250ZW50LmFwcGVuZChjb250ZW50W29mZnNldFswXTpvZmZzZXRbMF0gKyB2YWx1
ZV0pCisgICAgICAgICAgICAgICAgb2Zmc2V0WzBdICs9IHZhbHVlCisgICAgICAgICAgICBlbGlm
IGl0ZW1fdHlwZSA9PSAiZGVsYXkiOgorICAgICAgICAgICAgICAgIG1vZGlmaWVkX2NvbnRlbnQu
YXBwZW5kKHNsZWVwKHZhbHVlKSkKKyAgICAgICAgICAgIGVsaWYgaXRlbV90eXBlID09ICJyZXBl
YXQiOgorICAgICAgICAgICAgICAgIGFzc2VydCBpID09IGxlbihkZWxheXMpIC0gMQorICAgICAg
ICAgICAgICAgIHdoaWxlIG9mZnNldFswXSA8IGxlbihjb250ZW50KToKKyAgICAgICAgICAgICAg
ICAgICAgYWRkX2NvbnRlbnQoZGVsYXlzWy0odmFsdWUgKyAxKTotMV0sIFRydWUpCisKKyAgICAg
ICAgaWYgbm90IHJlcGVhdCBhbmQgb2Zmc2V0WzBdIDwgbGVuKGNvbnRlbnQpOgorICAgICAgICAg
ICAgbW9kaWZpZWRfY29udGVudC5hcHBlbmQoY29udGVudFtvZmZzZXRbMF06XSkKKworICAgIGFk
ZF9jb250ZW50KGRlbGF5cykKKworICAgIHJlc3BvbnNlLmNvbnRlbnQgPSBtb2RpZmllZF9jb250
ZW50CisgICAgcmV0dXJuIHJlc3BvbnNlCisKKworQHBpcGUobnVsbGFibGUoaW50KSwgb3B0KG51
bGxhYmxlKGludCkpKQorZGVmIHNsaWNlKHJlcXVlc3QsIHJlc3BvbnNlLCBzdGFydCwgZW5kPU5v
bmUpOgorICAgICIiIlNlbmQgYSBieXRlIHJhbmdlIG9mIHRoZSByZXNwb25zZSBib2R5CisKKyAg
ICA6cGFyYW0gc3RhcnQ6IFRoZSBzdGFydGluZyBvZmZzZXQuIEZvbGxvd3MgcHl0aG9uIHNlbWFu
dGljcyBpbmNsdWRpbmcKKyAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlIG51bWJlcnMuCisKKyAg
ICA6cGFyYW0gZW5kOiBUaGUgZW5kaW5nIG9mZnNldCwgYWdhaW4gd2l0aCBweXRob24gc2VtYW50
aWNzIGFuZCBOb25lCisgICAgICAgICAgICAgICAgKHNwZWxsZWQgIm51bGwiIGluIGEgcXVlcnkg
c3RyaW5nKSB0byBpbmRpY2F0ZSB0aGUgZW5kIG9mCisgICAgICAgICAgICAgICAgdGhlIGZpbGUu
CisgICAgIiIiCisgICAgY29udGVudCA9IHJlc29sdmVfY29udGVudChyZXNwb25zZSkKKyAgICBy
ZXNwb25zZS5jb250ZW50ID0gY29udGVudFtzdGFydDplbmRdCisgICAgcmV0dXJuIHJlc3BvbnNl
CisKKworY2xhc3MgUmVwbGFjZW1lbnRUb2tlbml6ZXIob2JqZWN0KToKKyAgICBkZWYgaWRlbnQo
c2Nhbm5lciwgdG9rZW4pOgorICAgICAgICByZXR1cm4gKCJpZGVudCIsIHRva2VuKQorCisgICAg
ZGVmIGluZGV4KHNjYW5uZXIsIHRva2VuKToKKyAgICAgICAgdG9rZW4gPSB0b2tlblsxOi0xXQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICB0b2tlbiA9IGludCh0b2tlbikKKyAgICAgICAgZXhj
ZXB0OgorICAgICAgICAgICAgdG9rZW4gPSB1bmljb2RlKHRva2VuKQorICAgICAgICByZXR1cm4g
KCJpbmRleCIsIHRva2VuKQorCisgICAgZGVmIHRva2VuaXplKHNlbGYsIHN0cmluZyk6CisgICAg
ICAgIHJldHVybiBzZWxmLnNjYW5uZXIuc2NhbihzdHJpbmcpWzBdCisKKyAgICBzY2FubmVyID0g
cmUuU2Nhbm5lcihbKHIiXHcrIiwgaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAo
ciJcW1teXF1dKlxdIiwgaW5kZXgpXSkKKworCitjbGFzcyBGaXJzdFdyYXBwZXIob2JqZWN0KToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyYW1zKToKKyAgICAgICAgc2VsZi5wYXJhbXMgPSBw
YXJhbXMKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4g
c2VsZi5wYXJhbXMuZmlyc3Qoa2V5KQorCisKK0BwaXBlKCkKK2RlZiBzdWIocmVxdWVzdCwgcmVz
cG9uc2UpOgorICAgICIiIlN1YnN0aXR1dGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gYWJvdXQg
dGhlIHNlcnZlciBhbmQgcmVxdWVzdCBpbnRvIHRoZSBzY3JpcHQuCisKKyAgICBUaGUgZm9ybWF0
IGlzIGEgdmVyeSBsaW1pdGVkIHRlbXBsYXRlIGxhbmd1YWdlLiBTdWJzdGl0dXRpb25zIGFyZQor
ICAgIGVuY2xvc2VkIGJ5IHt7IGFuZCB9fS4gVGhlcmUgYXJlIDUgZmllbGRzICJob3N0IiwgImRv
bWFpbnMiLAorICAgICJwb3J0cyIsICJoZWFkZXJzIiBhbmQgIkdFVCI6CisKKyAgICBob3N0Cisg
ICAgICBBIHNpbXBsZSBzdHJpbmcgdmFsdWUgYW5kIHJlcHJlc2VudHMgdGhlIHByaW1hcnkgaG9z
dCBmcm9tIHdoaWNoIHRoZQorICAgICAgdGVzdHMgYXJlIGJlaW5nIHJ1bi4KKyAgICBkb21haW5z
CisgICAgICBBIGRpY3Rpb25hcnkgb2YgYXZhaWxhYmxlIGRvbWFpbnMgaW5kZXhlZCBieSBzdWJk
b21haW4gbmFtZS4KKyAgICBwb3J0cworICAgICAgQSBkaWN0aW9uYXJ5IG9mIGxpc3RzIG9mIHBv
cnRzIGluZGV4ZWQgYnkgcHJvdG9jb2wuCisgICAgaGVhZGVycworICAgICAgQSBkaWN0aW9uYXJ5
IG9mIEhUVFAgaGVhZGVycyBpbiB0aGUgcmVxdWVzdC4KKyAgICBHRVQKKyAgICAgIEEgZGljdGlv
bmFyeSBvZiBxdWVyeSBwYXJhbWV0ZXJzIHN1cHBsaWVkIHdpdGggdGhlIHJlcXVlc3QuCisKKyAg
ICBTbyBmb3IgZXhhbXBsZSBpbiBhIHNldHVwIHJ1bm5pbmcgb24gbG9jYWxob3N0IHdpdGggYSB3
d3cKKyAgICBzdWJkb21haW4gYW5kIGEgaHR0cCBzZXJ2ZXIgb24gcG9ydHMgODAgYW5kIDgxOjoK
KworICAgICAge3tob3N0fX0gPT4gbG9jYWxob3N0CisgICAgICB7e2RvbWFpbnNbd3d3XX19ID0+
IHd3dy5sb2NhbGhvc3QKKyAgICAgIHt7cG9ydHNbaHR0cF1bMV19fSA9PiA4MQorICAgICIiIgor
ICAgICNUT0RPOiBUaGVyZSBiYXNpY2FsbHkgaXNuJ3QgYW55IGVycm9yIGhhbmRsaW5nIGhlcmUK
KyAgICBjb250ZW50ID0gcmVzb2x2ZV9jb250ZW50KHJlc3BvbnNlKQorICAgIHRva2VuaXplciA9
IFJlcGxhY2VtZW50VG9rZW5pemVyKCkKKworICAgIGRlZiBjb25maWdfcmVwbGFjZW1lbnQobWF0
Y2gpOgorICAgICAgICBjb250ZW50LCA9IG1hdGNoLmdyb3VwcygpCisKKyAgICAgICAgdG9rZW5z
ID0gdG9rZW5pemVyLnRva2VuaXplKGNvbnRlbnQpCisKKyAgICAgICAgYXNzZXJ0IHRva2Vuc1sw
XVswXSA9PSAiaWRlbnQiIGFuZCBhbGwoaXRlbVswXSA9PSAiaW5kZXgiIGZvciBpdGVtIGluIHRv
a2Vuc1sxOl0pLCB0b2tlbnMKKworICAgICAgICBmaWVsZCA9IHRva2Vuc1swXVsxXQorCisgICAg
ICAgIGlmIGZpZWxkID09ICJoZWFkZXJzIjoKKyAgICAgICAgICAgIHZhbHVlID0gcmVxdWVzdC5o
ZWFkZXJzCisgICAgICAgIGVsaWYgZmllbGQgPT0gIkdFVCI6CisgICAgICAgICAgICB2YWx1ZSA9
IEZpcnN0V3JhcHBlcihyZXF1ZXN0LkdFVCkKKyAgICAgICAgZWxpZiBmaWVsZCBpbiByZXF1ZXN0
LnNlcnZlci5jb25maWc6CisgICAgICAgICAgICB2YWx1ZSA9IHJlcXVlc3Quc2VydmVyLmNvbmZp
Z1t0b2tlbnNbMF1bMV1dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oIkludmFsaWQgZmllbGQiKQorCisgICAgICAgIGZvciBpdGVtIGluIHRva2Vuc1sxOl06Cisg
ICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW2l0ZW1bMV1dCisKKyAgICAgICAgYXNzZXJ0IGlzaW5z
dGFuY2UodmFsdWUsIChpbnQsKSArIHR5cGVzLlN0cmluZ1R5cGVzKSwgdG9rZW5zCisKKyAgICAg
ICAgI1Nob3VsZCBwb3NzaWJseSBzdXBwb3J0IGVzY2FwaW5nIGZvciBvdGhlciBjb250ZXh0cyBl
LmcuIHNjcmlwdAorICAgICAgICAjVE9ETzogcmVhZCB0aGUgZW5jb2Rpbmcgb2YgdGhlIHJlc3Bv
bnNlCisgICAgICAgIHJldHVybiBlc2NhcGUodW5pY29kZSh2YWx1ZSkpLmVuY29kZSgidXRmLTgi
KQorCisgICAgdGVtcGxhdGVfcmVnZXhwID0gcmUuY29tcGlsZShyInt7KFtefV0qKX19IikKKyAg
ICBuZXdfY29udGVudCwgY291bnQgPSB0ZW1wbGF0ZV9yZWdleHAuc3Vibihjb25maWdfcmVwbGFj
ZW1lbnQsIGNvbnRlbnQpCisKKyAgICByZXNwb25zZS5jb250ZW50ID0gbmV3X2NvbnRlbnQKKyAg
ICByZXR1cm4gcmVzcG9uc2UKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9yYW5nZXMucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvd3B0
c2VydmUvcmFuZ2VzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyOTM1ZmQ5MWIxZDAwOWVkNDI2NDRmZWMwNzkz
ZTlkOTEyZTdiMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvcmFuZ2VzLnB5CkBAIC0w
LDAgKzEsOTAgQEAKK2Zyb20gdXRpbHMgaW1wb3J0IEhUVFBFeGNlcHRpb24KKworCitjbGFzcyBS
YW5nZVBhcnNlcihvYmplY3QpOgorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBoZWFkZXIsIGZpbGVf
c2l6ZSk6CisgICAgICAgIHByZWZpeCA9ICJieXRlcz0iCisgICAgICAgIGlmIG5vdCBoZWFkZXIu
c3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgcmFpc2UgSFRUUEV4Y2VwdGlvbig0MTYs
IG1lc3NhZ2U9IlVucmVjb2duaXNlZCByYW5nZSB0eXBlICVzIiAlIChoZWFkZXIsKSkKKworICAg
ICAgICBwYXJ0cyA9IGhlYWRlcltsZW4ocHJlZml4KTpdLnNwbGl0KCIsIikKKyAgICAgICAgcmFu
Z2VzID0gW10KKyAgICAgICAgZm9yIGl0ZW0gaW4gcGFydHM6CisgICAgICAgICAgICBjb21wb25l
bnRzID0gaXRlbS5zcGxpdCgiLSIpCisgICAgICAgICAgICBpZiBsZW4oY29tcG9uZW50cykgIT0g
MjoKKyAgICAgICAgICAgICAgICByYWlzZSBIVFRQRXhjZXB0aW9uKDQxNiwgIkJhZCByYW5nZSBz
cGVjaWZpZXIgJXMiICUgKGl0ZW0pKQorICAgICAgICAgICAgZGF0YSA9IFtdCisgICAgICAgICAg
ICBmb3IgY29tcG9uZW50IGluIGNvbXBvbmVudHM6CisgICAgICAgICAgICAgICAgaWYgY29tcG9u
ZW50ID09ICIiOgorICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChOb25lKQorICAgICAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEuYXBwZW5kKGludChjb21wb25lbnQpKQorICAgICAgICAgICAgICAgICAg
ICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEhUVFBF
eGNlcHRpb24oNDE2LCAiQmFkIHJhbmdlIHNwZWNpZmllciAlcyIgJSAoaXRlbSkpCisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFuZ2VzLmFwcGVuZChSYW5nZShkYXRhWzBdLCBk
YXRhWzFdLCBmaWxlX3NpemUpKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAg
ICAgICAgICAgICAgcmFpc2UgSFRUUEV4Y2VwdGlvbig0MTYsICJCYWQgcmFuZ2Ugc3BlY2lmaWVy
ICVzIiAlIChpdGVtKSkKKworICAgICAgICByZXR1cm4gc2VsZi5jb2FsZXNjZV9yYW5nZXMocmFu
Z2VzLCBmaWxlX3NpemUpCisKKyAgICBkZWYgY29hbGVzY2VfcmFuZ2VzKHNlbGYsIHJhbmdlcywg
ZmlsZV9zaXplKToKKyAgICAgICAgcnYgPSBbXQorICAgICAgICB0YXJnZXQgPSBOb25lCisgICAg
ICAgIGZvciBjdXJyZW50IGluIHJldmVyc2VkKHNvcnRlZChyYW5nZXMpKToKKyAgICAgICAgICAg
IGlmIHRhcmdldCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHRhcmdldCA9IGN1cnJlbnQKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3ID0gdGFyZ2V0LmNvYWxlc2NlKGN1
cnJlbnQpCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3WzBdCisgICAgICAgICAgICAgICAg
aWYgbGVuKG5ldykgPiAxOgorICAgICAgICAgICAgICAgICAgICBydi5hcHBlbmQobmV3WzFdKQor
ICAgICAgICBydi5hcHBlbmQodGFyZ2V0KQorCisgICAgICAgIHJldHVybiBydls6Oi0xXQorCisK
K2NsYXNzIFJhbmdlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvd2VyLCB1cHBl
ciwgZmlsZV9zaXplKToKKyAgICAgICAgc2VsZi5maWxlX3NpemUgPSBmaWxlX3NpemUKKyAgICAg
ICAgc2VsZi5sb3dlciwgc2VsZi51cHBlciA9IHNlbGYuX2Ficyhsb3dlciwgdXBwZXIpCisgICAg
ICAgIGlmIHNlbGYubG93ZXIgPj0gc2VsZi51cHBlciBvciBzZWxmLmxvd2VyID49IHNlbGYuZmls
ZV9zaXplOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorCisgICAgZGVmIF9fcmVwcl9f
KHNlbGYpOgorICAgICAgICByZXR1cm4gIjxSYW5nZSAlcy0lcz4iICUgKHNlbGYubG93ZXIsIHNl
bGYudXBwZXIpCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJu
IHNlbGYubG93ZXIgPCBvdGhlci5sb3dlcgorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6
CisgICAgICAgIHJldHVybiBzZWxmLmxvd2VyID4gb3RoZXIubG93ZXIKKworICAgIGRlZiBfX2Vx
X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5sb3dlciA9PSBvdGhlci5sb3dl
ciBhbmQgc2VsZi51cHBlciA9PSBvdGhlci51cHBlcgorCisgICAgZGVmIF9hYnMoc2VsZiwgbG93
ZXIsIHVwcGVyKToKKyAgICAgICAgaWYgbG93ZXIgaXMgTm9uZSBhbmQgdXBwZXIgaXMgTm9uZToK
KyAgICAgICAgICAgIGxvd2VyLCB1cHBlciA9IDAsIHNlbGYuZmlsZV9zaXplCisgICAgICAgIGVs
aWYgbG93ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGxvd2VyLCB1cHBlciA9IG1heCgwLCBzZWxm
LmZpbGVfc2l6ZSAtIHVwcGVyKSwgc2VsZi5maWxlX3NpemUKKyAgICAgICAgZWxpZiB1cHBlciBp
cyBOb25lOgorICAgICAgICAgICAgbG93ZXIsIHVwcGVyID0gbG93ZXIsIHNlbGYuZmlsZV9zaXpl
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb3dlciwgdXBwZXIgPSBsb3dlciwgbWluKHNl
bGYuZmlsZV9zaXplLCB1cHBlciArIDEpCisKKyAgICAgICAgcmV0dXJuIGxvd2VyLCB1cHBlcgor
CisgICAgZGVmIGNvYWxlc2NlKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuZmls
ZV9zaXplID09IG90aGVyLmZpbGVfc2l6ZQorCisgICAgICAgIGlmIChzZWxmLnVwcGVyIDwgb3Ro
ZXIubG93ZXIgb3Igc2VsZi5sb3dlciA+IG90aGVyLnVwcGVyKToKKyAgICAgICAgICAgIHJldHVy
biBzb3J0ZWQoW3NlbGYsIG90aGVyXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVy
biBbUmFuZ2UobWluKHNlbGYubG93ZXIsIG90aGVyLmxvd2VyKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4KHNlbGYudXBwZXIsIG90aGVyLnVwcGVyKSAtIDEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuZmlsZV9zaXplKV0KKworICAgIGRlZiBoZWFkZXJfdmFsdWUoc2Vs
Zik6CisgICAgICAgIHJldHVybiAiYnl0ZXMgJWktJWkvJWkiICUgKHNlbGYubG93ZXIsIHNlbGYu
dXBwZXIgLSAxLCBzZWxmLmZpbGVfc2l6ZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9yZXF1ZXN0
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dw
dHNlcnZlL3dwdHNlcnZlL3JlcXVlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRiYzAyOGUzNjA1OWFlNTVm
Nzc3ZjFkZDBmNGI5YTNiZTE4YjZhMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9yZXF1
ZXN0LnB5CkBAIC0wLDAgKzEsNTg3IEBACitpbXBvcnQgYmFzZTY0CitpbXBvcnQgY2dpCitpbXBv
cnQgQ29va2llCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgU3RyaW5nSU8KK2lt
cG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVybHBhcnNlCisKK2ltcG9ydCBzdGFzaAorZnJvbSB1dGls
cyBpbXBvcnQgSFRUUEV4Y2VwdGlvbgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigid3B0
c2VydmUiKQorbWlzc2luZyA9IG9iamVjdCgpCisKKworY2xhc3MgU2VydmVyKG9iamVjdCk6Cisg
ICAgIiIiRGF0YSBhYm91dCB0aGUgc2VydmVyIGVudmlyb25tZW50CisKKyAgICAuLiBhdHRyaWJ1
dGU6OiBjb25maWcKKworICAgIEVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24g
d2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICB2YXJpb3VzIHNlcnZlcnMgcnVubmluZywg
dGhlaXIgaG9zdG5hbWVzIGFuZCBwb3J0cy4KKworICAgIC4uIGF0dHJpYnV0ZTo6IHN0YXNoCisK
KyAgICBTdGFzaCBvYmplY3QgaG9sZGluZyBzdGF0ZSBzdG9yZWQgb24gdGhlIHNlcnZlciBiZXR3
ZWVuIHJlcXVlc3RzLgorCisgICAgIiIiCisgICAgY29uZmlnID0gTm9uZQorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICBzZWxmLnN0YXNoID0gc3Rhc2guU3Rhc2go
cmVxdWVzdC51cmxfcGFydHMucGF0aCkKKworCitjbGFzcyBJbnB1dEZpbGUob2JqZWN0KToKKyAg
ICBtYXhfYnVmZmVyX3NpemUgPSAxMDI0KjEwMjQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBy
ZmlsZSwgbGVuZ3RoKToKKyAgICAgICAgIiIiRmlsZS1saWtlIG9iamVjdCB1c2VkIHRvIHByb3Zp
ZGUgYSBzZWVrYWJsZSB2aWV3IG9mIHJlcXVlc3QgYm9keSBkYXRhIiIiCisgICAgICAgIHNlbGYu
X2ZpbGUgPSByZmlsZQorICAgICAgICBzZWxmLmxlbmd0aCA9IGxlbmd0aAorCisgICAgICAgIHNl
bGYuX2ZpbGVfcG9zaXRpb24gPSAwCisKKyAgICAgICAgaWYgbGVuZ3RoID4gc2VsZi5tYXhfYnVm
ZmVyX3NpemU6CisgICAgICAgICAgICBzZWxmLl9idWYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxl
KG1vZGU9InJ3K2IiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fYnVmID0gU3Ry
aW5nSU8uU3RyaW5nSU8oKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9idWZfcG9zaXRpb24o
c2VsZik6CisgICAgICAgIHJ2ID0gc2VsZi5fYnVmLnRlbGwoKQorICAgICAgICBhc3NlcnQgcnYg
PD0gc2VsZi5fZmlsZV9wb3NpdGlvbgorICAgICAgICByZXR1cm4gcnYKKworICAgIGRlZiByZWFk
KHNlbGYsIGJ5dGVzPS0xKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2J1Zl9wb3NpdGlvbiA8PSBz
ZWxmLl9maWxlX3Bvc2l0aW9uCisKKyAgICAgICAgaWYgYnl0ZXMgPCAwOgorICAgICAgICAgICAg
Ynl0ZXMgPSBzZWxmLmxlbmd0aCAtIHNlbGYuX2J1Zl9wb3NpdGlvbgorICAgICAgICBieXRlc19y
ZW1haW5pbmcgPSBtaW4oYnl0ZXMsIHNlbGYubGVuZ3RoIC0gc2VsZi5fYnVmX3Bvc2l0aW9uKQor
CisgICAgICAgIGlmIGJ5dGVzX3JlbWFpbmluZyA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICIi
CisKKyAgICAgICAgaWYgc2VsZi5fYnVmX3Bvc2l0aW9uICE9IHNlbGYuX2ZpbGVfcG9zaXRpb246
CisgICAgICAgICAgICBidWZfYnl0ZXMgPSBtaW4oYnl0ZXNfcmVtYWluaW5nLCBzZWxmLl9maWxl
X3Bvc2l0aW9uIC0gc2VsZi5fYnVmX3Bvc2l0aW9uKQorICAgICAgICAgICAgb2xkX2RhdGEgPSBz
ZWxmLl9idWYucmVhZChidWZfYnl0ZXMpCisgICAgICAgICAgICBieXRlc19yZW1haW5pbmcgLT0g
YnVmX2J5dGVzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvbGRfZGF0YSA9ICIiCisKKyAg
ICAgICAgYXNzZXJ0IHNlbGYuX2J1Zl9wb3NpdGlvbiA9PSBzZWxmLl9maWxlX3Bvc2l0aW9uCisg
ICAgICAgIG5ld19kYXRhID0gc2VsZi5fZmlsZS5yZWFkKGJ5dGVzX3JlbWFpbmluZykKKyAgICAg
ICAgc2VsZi5fYnVmLndyaXRlKG5ld19kYXRhKQorICAgICAgICBzZWxmLl9maWxlX3Bvc2l0aW9u
ICs9IGJ5dGVzX3JlbWFpbmluZworICAgICAgICBhc3NlcnQgc2VsZi5fYnVmX3Bvc2l0aW9uID09
IHNlbGYuX2ZpbGVfcG9zaXRpb24KKworICAgICAgICByZXR1cm4gb2xkX2RhdGEgKyBuZXdfZGF0
YQorCisgICAgZGVmIHRlbGwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWZfcG9zaXRp
b24KKworICAgIGRlZiBzZWVrKHNlbGYsIG9mZnNldCk6CisgICAgICAgIGlmIG9mZnNldCA+IHNl
bGYubGVuZ3RoIG9yIG9mZnNldCA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisg
ICAgICAgIGlmIG9mZnNldCA8PSBzZWxmLl9maWxlX3Bvc2l0aW9uOgorICAgICAgICAgICAgc2Vs
Zi5fYnVmLnNlZWsob2Zmc2V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5yZWFk
KG9mZnNldCAtIHNlbGYuX2ZpbGVfcG9zaXRpb24pCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwg
bWF4X2J5dGVzPU5vbmUpOgorICAgICAgICBpZiBtYXhfYnl0ZXMgaXMgTm9uZToKKyAgICAgICAg
ICAgIG1heF9ieXRlcyA9IHNlbGYubGVuZ3RoIC0gc2VsZi5fYnVmX3Bvc2l0aW9uCisKKyAgICAg
ICAgaWYgc2VsZi5fYnVmX3Bvc2l0aW9uIDwgc2VsZi5fZmlsZV9wb3NpdGlvbjoKKyAgICAgICAg
ICAgIGRhdGEgPSBzZWxmLl9idWYucmVhZGxpbmUobWF4X2J5dGVzKQorICAgICAgICAgICAgaWYg
ZGF0YS5lbmRzd2l0aCgiXG4iKSBvciBsZW4oZGF0YSkgPT0gbWF4X2J5dGVzOgorICAgICAgICAg
ICAgICAgIHJldHVybiBkYXRhCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhID0gIiIK
KworICAgICAgICBhc3NlcnQgc2VsZi5fYnVmX3Bvc2l0aW9uID09IHNlbGYuX2ZpbGVfcG9zaXRp
b24KKworICAgICAgICBpbml0aWFsX3Bvc2l0aW9uID0gc2VsZi5fZmlsZV9wb3NpdGlvbgorICAg
ICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgIGJ1ZiA9IFtdCisgICAgICAgIG1heF9ieXRlcyAt
PSBsZW4oZGF0YSkKKyAgICAgICAgd2hpbGUgbm90IGZvdW5kOgorICAgICAgICAgICAgcmVhZGFo
ZWFkID0gc2VsZi5yZWFkKG1pbigyLCBtYXhfYnl0ZXMpKQorICAgICAgICAgICAgbWF4X2J5dGVz
IC09IGxlbihyZWFkYWhlYWQpCisgICAgICAgICAgICBmb3IgaSwgYyBpbiBlbnVtZXJhdGUocmVh
ZGFoZWFkKToKKyAgICAgICAgICAgICAgICBpZiBjID09ICJcbiI6CisgICAgICAgICAgICAgICAg
ICAgIGJ1Zi5hcHBlbmQocmVhZGFoZWFkWzppKzFdKQorICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBm
b3VuZDoKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKHJlYWRhaGVhZCkKKyAgICAgICAgICAg
IGlmIG5vdCByZWFkYWhlYWQgb3Igbm90IG1heF9ieXRlczoKKyAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICBuZXdfZGF0YSA9ICIiLmpvaW4oYnVmKQorICAgICAgICBkYXRhICs9IG5ld19k
YXRhCisgICAgICAgIHNlbGYuc2Vlayhpbml0aWFsX3Bvc2l0aW9uICsgbGVuKG5ld19kYXRhKSkK
KyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiByZWFkbGluZXMoc2VsZik6CisgICAgICAg
IHJ2ID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJl
YWRsaW5lKCkKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgcnYuYXBwZW5k
KGRhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAg
IHJldHVybiBydgorCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIGRhdGEgPSBzZWxmLnJl
YWRsaW5lKCkKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKKyAgICBkZWYgX19p
dGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKworY2xhc3MgUmVxdWVzdChvYmpl
Y3QpOgorICAgICIiIk9iamVjdCByZXByZXNlbnRpbmcgYSBIVFRQIHJlcXVlc3QuCisKKyAgICAu
LiBhdHRyaWJ1dGU6OiBkb2Nfcm9vdAorCisgICAgVGhlIGxvY2FsIGRpcmVjdG9yeSB0byB1c2Ug
YXMgYSBiYXNlIHdoZW4gcmVzb2x2aW5nIHBhdGhzCisKKyAgICAuLiBhdHRyaWJ1dGU6OiByb3V0
ZV9tYXRjaAorCisgICAgUmVnZXhwIG1hdGNoIG9iamVjdCBmcm9tIG1hdGNoaW5nIHRoZSByZXF1
ZXN0IHBhdGggdG8gdGhlIHJvdXRlCisgICAgc2VsZWN0ZWQgZm9yIHRoZSByZXF1ZXN0LgorCisg
ICAgLi4gYXR0cmlidXRlOjogcHJvdG9jb2xfdmVyc2lvbgorCisgICAgSFRUUCB2ZXJzaW9uIHNw
ZWNpZmllZCBpbiB0aGUgcmVxdWVzdC4KKworICAgIC4uIGF0dHJpYnV0ZTo6IG1ldGhvZAorCisg
ICAgSFRUUCBtZXRob2QgaW4gdGhlIHJlcXVlc3QuCisKKyAgICAuLiBhdHRyaWJ1dGU6OiByZXF1
ZXN0X3BhdGgKKworICAgIFJlcXVlc3QgcGF0aCBhcyBpdCBhcHBlYXJzIGluIHRoZSBIVFRQIHJl
cXVlc3QuCisKKyAgICAuLiBhdHRyaWJ1dGU6OiBmaWxlc3lzdGVtX3BhdGgKKworICAgIFJlcXVl
c3QgcGF0aCByZXNvbHZlZCByZWxhdGl2ZSB0byB0aGUgZG9jdW1lbnQgcm9vdC4KKworICAgIC4u
IGF0dHJpYnV0ZTo6IHVybAorCisgICAgQWJzb2x1dGUgVVJMIGZvciB0aGUgcmVxdWVzdC4KKwor
ICAgIC4uIGF0dHJpYnV0ZTo6IGhlYWRlcnMKKworICAgIExpc3Qgb2YgcmVxdWVzdCBoZWFkZXJz
LgorCisgICAgLi4gYXR0cmlidXRlOjogcmF3X2lucHV0CisKKyAgICBGaWxlLWxpa2Ugb2JqZWN0
IHJlcHJlc2VudGluZyB0aGUgYm9keSBvZiB0aGUgcmVxdWVzdC4KKworICAgIC4uIGF0dHJpYnV0
ZTo6IHVybF9wYXJ0cworCisgICAgUGFydHMgb2YgdGhlIHJlcXVlc3RlZCBVUkwgYXMgb2J0YWlu
ZWQgYnkgdXJscGFyc2UudXJsc3BsaXQocGF0aCkKKworICAgIC4uIGF0dHJpYnV0ZTo6IHJlcXVl
c3RfbGluZQorCisgICAgUmF3IHJlcXVlc3QgbGluZQorCisgICAgLi4gYXR0cmlidXRlOjogaGVh
ZGVycworCisgICAgUmVxdWVzdEhlYWRlcnMgb2JqZWN0IHByb3ZpZGluZyBhIGRpY3Rpb25hcnkt
bGlrZSByZXByZXNlbnRhdGlvbiBvZgorICAgIHRoZSByZXF1ZXN0IGhlYWRlcnMuCisKKyAgICAu
LiBhdHRyaWJ1dGU6OiBib2R5CisKKyAgICBSZXF1ZXN0IGJvZHkgYXMgYSBzdHJpbmcKKworICAg
IC4uIGF0dHJpYnV0ZTo6IEdFVAorCisgICAgTXVsdGlEaWN0IHJlcHJlc2VudGluZyB0aGUgcGFy
YW1ldGVycyBzdXBwbGllZCB3aXRoIHRoZSByZXF1ZXN0LgorICAgIE5vdGUgdGhhdCB0aGVzZSBt
YXkgYmUgcHJlc2VudCBvbiBub24tR0VUIHJlcXVlc3RzOyB0aGUgbmFtZSBpcworICAgIGNob3Nl
biB0byBiZSBmYW1pbGlhciB0byB1c2VycyBvZiBvdGhlciBzeXN0ZW1zIHN1Y2ggYXMgUEhQLgor
CisgICAgLi4gYXR0cmlidXRlOjogUE9TVAorCisgICAgTXVsdGlEaWN0IHJlcHJlc2VudGluZyB0
aGUgcmVxdWVzdCBib2R5IHBhcmFtZXRlcnMuIE1vc3QgcGFyYW1ldGVycworICAgIGFyZSBwcmVz
ZW50IGFzIHN0cmluZyB2YWx1ZXMsIGJ1dCBmaWxlIHVwbG9hZHMgaGF2ZSBmaWxlLWxpa2UKKyAg
ICB2YWx1ZXMuCisKKyAgICAuLiBhdHRyaWJ1dGU6OiBjb29raWVzCisKKyAgICBDb29raWVzIG9i
amVjdCByZXByZXNlbnRpbmcgY29va2llcyBzZW50IHdpdGggdGhlIHJlcXVlc3Qgd2l0aCBhCisg
ICAgZGljdGlvbmFyeS1saWtlIGludGVyZmFjZS4KKworICAgIC4uIGF0dHJpYnV0ZTo6IGF1dGgK
KworICAgIE9iamVjdCB3aXRoIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBwcm9wZXJ0aWVzIHJlcHJl
c2VudGluZyBhbnkKKyAgICBjcmVkZW50aWFscyBzdXBwbGllZCB1c2luZyBIVFRQIGF1dGhlbnRp
Y2F0aW9uLgorCisgICAgLi4gYXR0cmlidXRlOjogc2VydmVyCisKKyAgICBTZXJ2ZXIgb2JqZWN0
IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZlciBlbnZpcm9ubWVudC4KKyAg
ICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0X2hhbmRsZXIpOgorICAgICAg
ICBzZWxmLmRvY19yb290ID0gcmVxdWVzdF9oYW5kbGVyLnNlcnZlci5yb3V0ZXIuZG9jX3Jvb3QK
KyAgICAgICAgc2VsZi5yb3V0ZV9tYXRjaCA9IE5vbmUgICMgU2V0IGJ5IHRoZSByb3V0ZXIKKwor
ICAgICAgICBzZWxmLnByb3RvY29sX3ZlcnNpb24gPSByZXF1ZXN0X2hhbmRsZXIucHJvdG9jb2xf
dmVyc2lvbgorICAgICAgICBzZWxmLm1ldGhvZCA9IHJlcXVlc3RfaGFuZGxlci5jb21tYW5kCisK
KyAgICAgICAgc2NoZW1lID0gcmVxdWVzdF9oYW5kbGVyLnNlcnZlci5zY2hlbWUKKyAgICAgICAg
aG9zdCA9IHJlcXVlc3RfaGFuZGxlci5zZXJ2ZXIuc2VydmVyX2FkZHJlc3NbMF0KKyAgICAgICAg
cG9ydCA9IHJlcXVlc3RfaGFuZGxlci5zZXJ2ZXIuc2VydmVyX2FkZHJlc3NbMV0KKyAgICAgICAg
c2VsZi5yZXF1ZXN0X3BhdGggPSByZXF1ZXN0X2hhbmRsZXIucGF0aAorCisgICAgICAgIGlmIHNl
bGYucmVxdWVzdF9wYXRoLnN0YXJ0c3dpdGgoc2NoZW1lICsgIjovLyIpOgorICAgICAgICAgICAg
c2VsZi51cmwgPSByZXF1ZXN0X2hhbmRsZXIucGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgc2VsZi51cmwgPSAiJXM6Ly8lczolcyVzIiAlIChzY2hlbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYucmVxdWVzdF9wYXRoKQorICAgICAgICBzZWxmLnVybF9wYXJ0cyA9IHVybHBh
cnNlLnVybHNwbGl0KHNlbGYudXJsKQorCisgICAgICAgIHNlbGYuX3Jhd19oZWFkZXJzID0gcmVx
dWVzdF9oYW5kbGVyLmhlYWRlcnMKKworICAgICAgICBzZWxmLnJlcXVlc3RfbGluZSA9IHJlcXVl
c3RfaGFuZGxlci5yYXdfcmVxdWVzdGxpbmUKKworICAgICAgICBzZWxmLl9oZWFkZXJzID0gTm9u
ZQorCisgICAgICAgIHNlbGYucmF3X2lucHV0ID0gSW5wdXRGaWxlKHJlcXVlc3RfaGFuZGxlci5y
ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KHNlbGYuaGVhZGVy
cy5nZXQoIkNvbnRlbnQtTGVuZ3RoIiwgMCkpKQorICAgICAgICBzZWxmLl9ib2R5ID0gTm9uZQor
CisgICAgICAgIHNlbGYuX0dFVCA9IE5vbmUKKyAgICAgICAgc2VsZi5fUE9TVCA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fY29va2llcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fYXV0aCA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbV9wYXRoID0gTm9uZQorCisgICAgICAgIHNlbGYuc2VydmVy
ID0gU2VydmVyKHNlbGYpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVy
biAiPFJlcXVlc3QgJXMgJXM+IiAlIChzZWxmLm1ldGhvZCwgc2VsZi5wYXRoKQorCisgICAgQHBy
b3BlcnR5CisgICAgZGVmIEdFVChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fR0VUIGlzIE5vbmU6
CisgICAgICAgICAgICBwYXJhbXMgPSB1cmxwYXJzZS5wYXJzZV9xc2woc2VsZi51cmxfcGFydHMu
cXVlcnksIGtlZXBfYmxhbmtfdmFsdWVzPVRydWUpCisgICAgICAgICAgICBzZWxmLl9HRVQgPSBN
dWx0aURpY3QoKQorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gcGFyYW1zOgorICAgICAg
ICAgICAgICAgIHNlbGYuX0dFVC5hZGQoa2V5LCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
X0dFVAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIFBPU1Qoc2VsZik6CisgICAgICAgIGlmIHNl
bGYuX1BPU1QgaXMgTm9uZToKKyAgICAgICAgICAgICNXb3JrIG91dCB0aGUgcG9zdCBwYXJhbWV0
ZXJzCisgICAgICAgICAgICBwb3MgPSBzZWxmLnJhd19pbnB1dC50ZWxsKCkKKyAgICAgICAgICAg
IHNlbGYucmF3X2lucHV0LnNlZWsoMCkKKyAgICAgICAgICAgIGZzID0gY2dpLkZpZWxkU3RvcmFn
ZShmcD1zZWxmLnJhd19pbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bnZpcm9uPXsiUkVRVUVTVF9NRVRIT0QiOiBzZWxmLm1ldGhvZH0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVhZGVycz1zZWxmLmhlYWRlcnMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga2VlcF9ibGFua192YWx1ZXM9VHJ1ZSkKKyAgICAgICAgICAgIHNl
bGYuX1BPU1QgPSBNdWx0aURpY3QuZnJvbV9maWVsZF9zdG9yYWdlKGZzKQorICAgICAgICAgICAg
c2VsZi5yYXdfaW5wdXQuc2Vlayhwb3MpCisgICAgICAgIHJldHVybiBzZWxmLl9QT1NUCisKKyAg
ICBAcHJvcGVydHkKKyAgICBkZWYgY29va2llcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY29v
a2llcyBpcyBOb25lOgorICAgICAgICAgICAgcGFyc2VyID0gQ29va2llLkJhc2VDb29raWUoKQor
ICAgICAgICAgICAgY29va2llX2hlYWRlcnMgPSBzZWxmLmhlYWRlcnMuZ2V0KCJjb29raWUiLCAi
IikKKyAgICAgICAgICAgIHBhcnNlci5sb2FkKGNvb2tpZV9oZWFkZXJzKQorICAgICAgICAgICAg
Y29va2llcyA9IENvb2tpZXMoKQorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gcGFyc2Vy
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGNvb2tpZXNba2V5XSA9IENvb2tpZVZhbHVl
KHZhbHVlKQorICAgICAgICAgICAgc2VsZi5fY29va2llcyA9IGNvb2tpZXMKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2Nvb2tpZXMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoZWFkZXJzKHNlbGYp
OgorICAgICAgICBpZiBzZWxmLl9oZWFkZXJzIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9o
ZWFkZXJzID0gUmVxdWVzdEhlYWRlcnMoc2VsZi5fcmF3X2hlYWRlcnMpCisgICAgICAgIHJldHVy
biBzZWxmLl9oZWFkZXJzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYm9keShzZWxmKToKKyAg
ICAgICAgaWYgc2VsZi5fYm9keSBpcyBOb25lOgorICAgICAgICAgICAgcG9zID0gc2VsZi5yYXdf
aW5wdXQudGVsbCgpCisgICAgICAgICAgICBzZWxmLnJhd19pbnB1dC5zZWVrKDApCisgICAgICAg
ICAgICBzZWxmLl9ib2R5ID0gc2VsZi5yYXdfaW5wdXQucmVhZCgpCisgICAgICAgICAgICBzZWxm
LnJhd19pbnB1dC5zZWVrKHBvcykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2JvZHkKKworICAgIEBw
cm9wZXJ0eQorICAgIGRlZiBhdXRoKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9hdXRoIGlzIE5v
bmU6CisgICAgICAgICAgICBzZWxmLl9hdXRoID0gQXV0aGVudGljYXRpb24oc2VsZi5oZWFkZXJz
KQorICAgICAgICByZXR1cm4gc2VsZi5fYXV0aAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZp
bGVzeXN0ZW1fcGF0aChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbV9wYXRoIGlz
IE5vbmU6CisgICAgICAgICAgICBwYXRoID0gc2VsZi51cmxfcGFydHMucGF0aAorICAgICAgICAg
ICAgaWYgcGF0aC5zdGFydHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGhb
MTpdCisKKyAgICAgICAgICAgIGlmICIuLiIgaW4gcGF0aDoKKyAgICAgICAgICAgICAgICByYWlz
ZSBIVFRQRXhjZXB0aW9uKDUwMCkKKworICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbV9wYXRo
ID0gb3MucGF0aC5qb2luKHNlbGYuZG9jX3Jvb3QsIHBhdGgpCisgICAgICAgIGxvZ2dlci5kZWJ1
ZyhzZWxmLl9maWxlc3lzdGVtX3BhdGgpCisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVt
X3BhdGgKKworCitjbGFzcyBSZXF1ZXN0SGVhZGVycyhkaWN0KToKKyAgICAiIiJEaWN0aW9uYXJ5
LWxpa2UgQVBJIGZvciBhY2Nlc3NpbmcgcmVxdWVzdCBoZWFkZXJzLiIiIgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBpdGVtcyk6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHppcChpdGVtcy5r
ZXlzKCksIGl0ZW1zLnZhbHVlcygpKToKKyAgICAgICAgICAgIGtleSA9IGtleS5sb3dlcigpCisg
ICAgICAgICAgICBpZiBrZXkgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICBzZWxmW2tleV0uYXBw
ZW5kKHZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkaWN0Ll9fc2V0
aXRlbV9fKHNlbGYsIGtleSwgW3ZhbHVlXSkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBr
ZXkpOgorICAgICAgICAiIiJHZXQgYWxsIGhlYWRlcnMgb2YgYSBjZXJ0YWluIChjYXNlLWluc2Vu
c2l0aXZlKSBuYW1lLiBJZiB0aGVyZSBpcworICAgICAgICBtb3JlIHRoYW4gb25lLCB0aGUgdmFs
dWVzIGFyZSByZXR1cm5lZCBjb21tYSBzZXBhcmF0ZWQiIiIKKyAgICAgICAgdmFsdWVzID0gZGlj
dC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkubG93ZXIoKSkKKyAgICAgICAgaWYgbGVuKHZhbHVlcykg
PT0gMToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZXNbMF0KKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHJldHVybiAiLCAiLmpvaW4odmFsdWVzKQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNl
bGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uCisKKyAgICBkZWYgZ2V0
KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiR2V0IGEgc3RyaW5nIHJlcHJl
c2VudGluZyBhbGwgaGVhZGVycyB3aXRoIGEgcGFydGljdWxhciB2YWx1ZSwKKyAgICAgICAgd2l0
aCBtdWx0aXBsZSBoZWFkZXJzIHNlcGFyYXRlZCBieSBhIGNvbW1hLiBJZiBubyBoZWFkZXIgaXMg
Zm91bmQKKyAgICAgICAgcmV0dXJuIGEgZGVmYXVsdCB2YWx1ZQorCisgICAgICAgIDpwYXJhbSBr
ZXk6IFRoZSBoZWFkZXIgbmFtZSB0byBsb29rIHVwIChjYXNlLWluc2Vuc2l0aXZlKQorICAgICAg
ICA6cGFyYW0gZGVmYXVsdDogVGhlIHZhbHVlIHRvIHJldHVybiBpbiB0aGUgY2FzZSBvZiBubyBt
YXRjaAorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGZb
a2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVs
dAorCisgICAgZGVmIGdldF9saXN0KHNlbGYsIGtleSwgZGVmYXVsdD1taXNzaW5nKToKKyAgICAg
ICAgIiIiR2V0IGFsbCB0aGUgaGVhZGVyIHZhbHVlcyBmb3IgYSBwYXJ0aWN1bGFyIGZpZWxkIG5h
bWUgYXMKKyAgICAgICAgYSBsaXN0IiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVy
biBkaWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleS5sb3dlcigpKQorICAgICAgICBleGNlcHQ6Cisg
ICAgICAgICAgICBpZiBkZWZhdWx0IGlzIG5vdCBtaXNzaW5nOgorICAgICAgICAgICAgICAgIHJl
dHVybiBkZWZhdWx0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisK
KyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBkaWN0Ll9f
Y29udGFpbnNfXyhzZWxmLCBrZXkubG93ZXIoKSkKKworICAgIGRlZiBpdGVyaXRlbXMoc2VsZik6
CisgICAgICAgIGZvciBpdGVtIGluIHNlbGY6CisgICAgICAgICAgICB5aWVsZCBpdGVtLCBzZWxm
W2l0ZW1dCisKKyAgICBkZWYgaXRlcnZhbHVlcyhzZWxmKToKKyAgICAgICAgZm9yIGl0ZW0gaW4g
c2VsZjoKKyAgICAgICAgICAgIHlpZWxkIHNlbGZbaXRlbV0KKworY2xhc3MgQ29va2llVmFsdWUo
b2JqZWN0KToKKyAgICAiIiJSZXByZXNlbnRhdGlvbiBvZiBjb29raWVzLgorCisgICAgTm90ZSB0
aGF0IGNvb2tpZXMgYXJlIGNvbnNpZGVyZWQgcmVhZC1vbmx5IGFuZCB0aGUgc3RyaW5nIHZhbHVl
CisgICAgb2YgdGhlIGNvb2tpZSB3aWxsIG5vdCBjaGFuZ2UgaWYgeW91IHVwZGF0ZSB0aGUgZmll
bGQgdmFsdWVzLgorICAgIEhvd2V2ZXIgdGhpcyBpcyBub3QgZW5mb3JjZWQuCisKKyAgICAuLiBh
dHRyaWJ1dGU6OiBrZXkKKworICAgIFRoZSBuYW1lIG9mIHRoZSBjb29raWUuCisKKyAgICAuLiBh
dHRyaWJ1dGU6OiB2YWx1ZQorCisgICAgVGhlIHZhbHVlIG9mIHRoZSBjb29raWUKKworICAgIC4u
IGF0dHJpYnV0ZTo6IGV4cGlyZXMKKworICAgIFRoZSBleHBpcnkgZGF0ZSBvZiB0aGUgY29va2ll
CisKKyAgICAuLiBhdHRyaWJ1dGU6OiBwYXRoCisKKyAgICBUaGUgcGF0aCBvZiB0aGUgY29va2ll
CisKKyAgICAuLiBhdHRyaWJ1dGU6OiBjb21tZW50CisKKyAgICBUaGUgY29tbWVudCBvZiB0aGUg
Y29va2llLgorCisgICAgLi4gYXR0cmlidXRlOjogZG9tYWluCisKKyAgICBUaGUgZG9tYWluIHdp
dGggd2hpY2ggdGhlIGNvb2tpZSBpcyBhc3NvY2lhdGVkCisKKyAgICAuLiBhdHRyaWJ1dGU6OiBt
YXhfYWdlCisKKyAgICBUaGUgbWF4LWFnZSB2YWx1ZSBvZiB0aGUgY29va2llLgorCisgICAgLi4g
YXR0cmlidXRlOjogc2VjdXJlCisKKyAgICBXaGV0aGVyIHRoZSBjb29raWUgaXMgbWFya2VkIGFz
IHNlY3VyZQorCisgICAgLi4gYXR0cmlidXRlOjogaHR0cG9ubHkKKworICAgIFdoZXRoZXIgdGhl
IGNvb2tpZSBpcyBtYXJrZWQgYXMgaHR0cG9ubHkKKworICAgICIiIgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBtb3JzZWwpOgorICAgICAgICBzZWxmLmtleSA9IG1vcnNlbC5rZXkKKyAgICAgICAg
c2VsZi52YWx1ZSA9IG1vcnNlbC52YWx1ZQorCisgICAgICAgIGZvciBhdHRyIGluIFsiZXhwaXJl
cyIsICJwYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICJjb21tZW50IiwgImRvbWFpbiIsICJt
YXgtYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgICJzZWN1cmUiLCAidmVyc2lvbiIsICJodHRw
b25seSJdOgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBhdHRyLnJlcGxhY2UoIi0iLCAiXyIp
LCBtb3JzZWxbYXR0cl0pCisKKyAgICAgICAgc2VsZi5fc3RyID0gbW9yc2VsLk91dHB1dFN0cmlu
ZygpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0cgor
CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3RyCisKKyAg
ICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiRXF1YWxpdHkgY29tcGFyaXNv
biBmb3IgY29va2llcy4gQ29tcGFyZXMgdG8gb3RoZXIgY29va2llcworICAgICAgICBiYXNlZCBv
biB2YWx1ZSBhbG9uZSBhbmQgb24gbm9uLWNvb2tpZXMgYmFzZWQgb24gdGhlIGVxdWFsaXR5Cisg
ICAgICAgIG9mIHNlbGYudmFsdWUgd2l0aCB0aGUgb3RoZXIgb2JqZWN0IHNvIHRoYXQgYSBjb29r
aWUgd2l0aCB2YWx1ZQorICAgICAgICAiaGFtIiBjb21wYXJlcyBlcXVhbCB0byB0aGUgc3RyaW5n
ICJoYW0iCisgICAgICAgICIiIgorICAgICAgICBpZiBoYXNhdHRyKG90aGVyLCAidmFsdWUiKToK
KyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgIHJl
dHVybiBzZWxmLnZhbHVlID09IG90aGVyCisKKworY2xhc3MgTXVsdGlEaWN0KGRpY3QpOgorICAg
ICIiIkRpY3Rpb25hcnkgdHlwZSB0aGF0IGhvbGRzIG11bHRpcGxlIHZhbHVlcyBmb3IgZWFjaAor
ICAgIGtleSIiIgorICAgICNUT0RPOiB0aGlzIHNob3VsZCBwZXJoYXBzIGFsc28gb3JkZXIgdGhl
IGtleXMKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBf
X3NldGl0ZW1fXyhzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIGRpY3QuX19zZXRpdGVtX18o
c2VsZiwgbmFtZSwgW3ZhbHVlXSkKKworICAgIGRlZiBhZGQoc2VsZiwgbmFtZSwgdmFsdWUpOgor
ICAgICAgICBpZiBuYW1lIGluIHNlbGY6CisgICAgICAgICAgICBkaWN0Ll9fZ2V0aXRlbV9fKHNl
bGYsIG5hbWUpLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpY3Qu
X19zZXRpdGVtX18oc2VsZiwgbmFtZSwgW3ZhbHVlXSkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhz
ZWxmLCBrZXkpOgorICAgICAgICAiIiJHZXQgdGhlIGZpcnN0IHZhbHVlIHdpdGggYSBnaXZlbiBr
ZXkiIiIKKyAgICAgICAgI1RPRE86IHNob3VsZCB0aGlzIGluc3RlYWQgYmUgdGhlIGxhc3QgdmFs
dWU/CisgICAgICAgIHJldHVybiBzZWxmLmZpcnN0KGtleSkKKworICAgIGRlZiBmaXJzdChzZWxm
LCBrZXksIGRlZmF1bHQ9bWlzc2luZyk6CisgICAgICAgICIiIkdldCB0aGUgZmlyc3QgdmFsdWUg
d2l0aCBhIGdpdmVuIGtleQorCisgICAgICAgIDpwYXJhbSBrZXk6IFRoZSBrZXkgdG8gbG9va3Vw
CisgICAgICAgIDpwYXJhbSBkZWZhdWx0OiBUaGUgZGVmYXVsdCB0byByZXR1cm4gaWYga2V5IGlz
CisgICAgICAgICAgICAgICAgICAgICAgICBub3QgZm91bmQgKHRocm93cyBpZiBub3RoaW5nIGlz
CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQpCisgICAgICAgICIiIgorICAgICAg
ICBpZiBrZXkgaW4gc2VsZiBhbmQgZGljdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAg
ICAgICAgcmV0dXJuIGRpY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVswXQorICAgICAgICBlbGlm
IGRlZmF1bHQgaXMgbm90IG1pc3Npbmc6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAg
ICAgICByYWlzZSBLZXlFcnJvcgorCisgICAgZGVmIGxhc3Qoc2VsZiwga2V5LCBkZWZhdWx0PW1p
c3NpbmcpOgorICAgICAgICAiIiJHZXQgdGhlIGxhc3QgdmFsdWUgd2l0aCBhIGdpdmVuIGtleQor
CisgICAgICAgIDpwYXJhbSBrZXk6IFRoZSBrZXkgdG8gbG9va3VwCisgICAgICAgIDpwYXJhbSBk
ZWZhdWx0OiBUaGUgZGVmYXVsdCB0byByZXR1cm4gaWYga2V5IGlzCisgICAgICAgICAgICAgICAg
ICAgICAgICBub3QgZm91bmQgKHRocm93cyBpZiBub3RoaW5nIGlzCisgICAgICAgICAgICAgICAg
ICAgICAgICBzcGVjaWZpZWQpCisgICAgICAgICIiIgorICAgICAgICBpZiBrZXkgaW4gc2VsZiBh
bmQgZGljdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgcmV0dXJuIGRpY3Qu
X19nZXRpdGVtX18oc2VsZiwga2V5KVstMV0KKyAgICAgICAgZWxpZiBkZWZhdWx0IGlzIG5vdCBt
aXNzaW5nOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICAgICAgcmFpc2UgS2V5RXJy
b3IKKworICAgIGRlZiBnZXRfbGlzdChzZWxmLCBrZXkpOgorICAgICAgICAiIiJHZXQgYWxsIHZh
bHVlcyB3aXRoIGEgZ2l2ZW4ga2V5IGFzIGEgbGlzdAorCisgICAgICAgIDpwYXJhbSBrZXk6IFRo
ZSBrZXkgdG8gbG9va3VwCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gZGljdC5fX2dldGl0
ZW1fXyhzZWxmLCBrZXkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9maWVsZF9z
dG9yYWdlKGNscywgZnMpOgorICAgICAgICBzZWxmID0gY2xzKCkKKyAgICAgICAgaWYgZnMubGlz
dCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgZm9yIGtleSBpbiBm
czoKKyAgICAgICAgICAgIHZhbHVlcyA9IGZzW2tleV0KKyAgICAgICAgICAgIGlmIG5vdCBpc2lu
c3RhbmNlKHZhbHVlcywgbGlzdCk6CisgICAgICAgICAgICAgICAgdmFsdWVzID0gW3ZhbHVlc10K
KworICAgICAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlczoKKyAgICAgICAgICAgICAgICBpZiB2
YWx1ZS5maWxlbmFtZToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZQorICAgICAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWUK
KyAgICAgICAgICAgICAgICBzZWxmLmFkZChrZXksIHZhbHVlKQorICAgICAgICByZXR1cm4gc2Vs
ZgorCisKK2NsYXNzIENvb2tpZXMoTXVsdGlEaWN0KToKKyAgICAiIiJNdWx0aURpY3Qgc3BlY2lh
bGlzZWQgZm9yIENvb2tpZSB2YWx1ZXMiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAg
ICAgIHBhc3MKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1
cm4gc2VsZi5sYXN0KGtleSkKKworCitjbGFzcyBBdXRoZW50aWNhdGlvbihvYmplY3QpOgorICAg
ICIiIk9iamVjdCBmb3IgZGVhbGluZyB3aXRoIEhUVFAgQXV0aGVudGljYXRpb24KKworICAgIC4u
IGF0dHJpYnV0ZTo6IHVzZXJuYW1lCisKKyAgICBUaGUgdXNlcm5hbWUgc3VwcGxpZWQgaW4gdGhl
IEhUVFAgQXV0aG9yaXphdGlvbgorICAgIGhlYWRlciwgb3IgTm9uZQorCisgICAgLi4gYXR0cmli
dXRlOjogcGFzc3dvcmQKKworICAgIFRoZSBwYXNzd29yZCBzdXBwbGllZCBpbiB0aGUgSFRUUCBB
dXRob3JpemF0aW9uCisgICAgaGVhZGVyLCBvciBOb25lCisgICAgIiIiCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGhlYWRlcnMpOgorICAgICAgICBzZWxmLnVzZXJuYW1lID0gTm9uZQorICAgICAg
ICBzZWxmLnBhc3N3b3JkID0gTm9uZQorCisgICAgICAgIGF1dGhfc2NoZW1lcyA9IHsiQmFzaWMi
OiBzZWxmLmRlY29kZV9iYXNpY30KKworICAgICAgICBpZiAiYXV0aG9yaXphdGlvbiIgaW4gaGVh
ZGVyczoKKyAgICAgICAgICAgIGhlYWRlciA9IGhlYWRlcnMuZ2V0KCJhdXRob3JpemF0aW9uIikK
KyAgICAgICAgICAgIGF1dGhfdHlwZSwgZGF0YSA9IGhlYWRlci5zcGxpdCgiICIsIDEpCisgICAg
ICAgICAgICBpZiBhdXRoX3R5cGUgaW4gYXV0aF9zY2hlbWVzOgorICAgICAgICAgICAgICAgIHNl
bGYudXNlcm5hbWUsIHNlbGYucGFzc3dvcmQgPSBhdXRoX3NjaGVtZXNbYXV0aF90eXBlXShkYXRh
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBIVFRQRXhjZXB0aW9u
KDQwMCwgIlVuc3VwcG9ydGVkIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSAlcyIgJSBhdXRoX3R5cGUp
CisKKyAgICBkZWYgZGVjb2RlX2Jhc2ljKHNlbGYsIGRhdGEpOgorICAgICAgICBkZWNvZGVkX2Rh
dGEgPSBiYXNlNjQuZGVjb2Rlc3RyaW5nKGRhdGEpCisgICAgICAgIHJldHVybiBkZWNvZGVkX2Rh
dGEuc3BsaXQoIjoiLCAxKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3Jlc3BvbnNlLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3dw
dHNlcnZlL3Jlc3BvbnNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzZDdhY2NlMTNkMjg0ZmNmZTY3YTIxOGQw
YjczMzdkMTJkNWM5ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvcmVzcG9uc2UucHkK
QEAgLTAsMCArMSw0MzEgQEAKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Citm
cm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhCitpbXBvcnQgQ29va2llCitp
bXBvcnQganNvbgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0eXBlcworaW1wb3J0IHV1aWQKKwor
ZnJvbSBjb25zdGFudHMgaW1wb3J0IHJlc3BvbnNlX2NvZGVzCisKK2xvZ2dlciA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCJ3cHRzZXJ2ZSIpCittaXNzaW5nID0gb2JqZWN0KCkKKworCitjbGFzcyBSZXNw
b25zZShvYmplY3QpOgorICAgICIiIk9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlc3BvbnNlIHRv
IGEgSFRUUCByZXF1ZXN0CisKKyAgICA6cGFyYW0gaGFuZGxlcjogUmVxdWVzdEhhbmRsZXIgYmVp
bmcgdXNlZCBmb3IgdGhpcyByZXNwb25zZQorICAgIDpwYXJhbSByZXF1ZXN0OiBSZXF1ZXN0IHRo
YXQgdGhpcyBpcyB0aGUgcmVzcG9uc2UgZm9yCisKKyAgICAuLiBhdHRyaWJ1dGU6OiByZXF1ZXN0
CisKKyAgICAgICBSZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIFJlc3BvbnNlLgorCisgICAg
Li4gYXR0cmlidXRlOjogZW5jb2RpbmcKKworICAgICAgIFRoZSBlbmNvZGluZyB0byB1c2Ugd2hl
biBjb252ZXJ0aW5nIHVuaWNvZGUgdG8gc3RyaW5ncyBmb3Igb3V0cHV0LgorCisgICAgLi4gYXR0
cmlidXRlOjogYWRkX3JlcXVpcmVkX2hlYWRlcnMKKworICAgICAgIEJvb2xlYW4gaW5kaWNhdGlu
ZyB3aGV0aGVyIG1hbmRhdG9yeSBoZWFkZXJzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUKKyAgICAg
ICByZXNwb25zZS4KKworICAgIC4uIGF0dHJpYnV0ZTo6IHNlbmRfYm9keV9mb3JfaGVhZF9yZXF1
ZXN0CisKKyAgICAgICBCb29sZWFuLCBkZWZhdWx0IEZhbHNlLCBpbmRpY2F0aW5nIHdoZXRoZXIg
dGhlIGJvZHkgY29udGVudCBzaG91bGQgYmUKKyAgICAgICBzZW50IHdoZW4gdGhlIHJlcXVlc3Qg
bWV0aG9kIGlzIEhFQUQuCisKKyAgICAuLiBhdHRyaWJ1dGU6OiBleHBsaWNpdF9mbHVzaAorCisg
ICAgICAgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3V0cHV0IHNob3VsZCBiZSBmbHVzaGVk
IGF1dG9tYXRpY2FsbHkgb3Igb25seQorICAgICAgIHdoZW4gcmVxdWVzdGVkLgorCisgICAgLi4g
YXR0cmlidXRlOjogd3JpdGVyCisKKyAgICAgICBUaGUgUmVzcG9uc2VXcml0ZXIgZm9yIHRoaXMg
cmVzcG9uc2UKKworICAgIC4uIGF0dHJpYnV0ZTo6IHN0YXR1cworCisgICAgICAgU3RhdHVzIHR1
cGxlIChjb2RlLCBtZXNzYWdlKS4gQ2FuIGJlIHNldCB0byBhbiBpbnRlZ2VyLCBpbiB3aGljaCBj
YXNlIHRoZQorICAgICAgIG1lc3NhZ2UgcGFydCBpcyBmaWxsZWQgaW4gYXV0b21hdGljYWxseSwg
b3IgYSB0dXBsZS4KKworICAgIC4uIGF0dHJpYnV0ZTo6IGhlYWRlcnMKKworICAgICAgIExpc3Qg
b2YgSFRUUCBoZWFkZXJzIHRvIHNlbmQgd2l0aCB0aGUgcmVzcG9uc2UuIEVhY2ggaXRlbSBpbiB0
aGUgbGlzdCBpcyBhCisgICAgICAgdHVwbGUgb2YgKG5hbWUsIHZhbHVlKS4KKworICAgIC4uIGF0
dHJpYnV0ZTo6IGNvbnRlbnQKKworICAgICAgIFRoZSBib2R5IG9mIHRoZSByZXNwb25zZS4gVGhp
cyBjYW4gZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGEgaXRlcmFibGUgb2YgcmVzcG9uc2UKKyAgICAg
ICBwYXJ0cy4gSWYgaXQgaXMgYW4gaXRlcmFibGUsIGFueSBpdGVtIG1heSBiZSBhIHN0cmluZyBv
ciBhIGZ1bmN0aW9uIG9mIHplcm8KKyAgICAgICBwYXJhbWV0ZXJzIHdoaWNoLCB3aGVuIGNhbGxl
ZCwgcmV0dXJucyBhIHN0cmluZy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYW5kbGVy
LCByZXF1ZXN0KToKKyAgICAgICAgc2VsZi5yZXF1ZXN0ID0gcmVxdWVzdAorICAgICAgICBzZWxm
LmVuY29kaW5nID0gInV0ZjgiCisKKyAgICAgICAgc2VsZi5hZGRfcmVxdWlyZWRfaGVhZGVycyA9
IFRydWUKKyAgICAgICAgc2VsZi5zZW5kX2JvZHlfZm9yX2hlYWRfcmVxdWVzdCA9IEZhbHNlCisg
ICAgICAgIHNlbGYuZXhwbGljaXRfZmx1c2ggPSBGYWxzZQorCisgICAgICAgIHNlbGYud3JpdGVy
ID0gUmVzcG9uc2VXcml0ZXIoaGFuZGxlciwgc2VsZikKKworICAgICAgICBzZWxmLl9zdGF0dXMg
PSAoMjAwLCBOb25lKQorICAgICAgICBzZWxmLmhlYWRlcnMgPSBSZXNwb25zZUhlYWRlcnMoKQor
ICAgICAgICBzZWxmLmNvbnRlbnQgPSBbXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN0YXR1
cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXR1cworCisgICAgQHN0YXR1cy5zZXR0
ZXIKKyAgICBkZWYgc3RhdHVzKHNlbGYsIHZhbHVlKToKKyAgICAgICAgaWYgaGFzYXR0cih2YWx1
ZSwgIl9fbGVuX18iKToKKyAgICAgICAgICAgIGlmIGxlbih2YWx1ZSkgIT0gMjoKKyAgICAgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHNlbGYuX3N0YXR1cyA9IChpbnQodmFsdWVbMF0pLCBzdHIodmFsdWVbMV0pKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc3RhdHVzID0gKGludCh2YWx1ZSksIE5vbmUpCisK
KyAgICBkZWYgc2V0X2Nvb2tpZShzZWxmLCBuYW1lLCB2YWx1ZSwgcGF0aD0iLyIsIGRvbWFpbj1O
b25lLCBtYXhfYWdlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgZXhwaXJlcz1Ob25lLCBzZWN1
cmU9RmFsc2UsIGh0dHBvbmx5PUZhbHNlLCBjb21tZW50PU5vbmUpOgorICAgICAgICAiIiJTZXQg
YSBjb29raWUgdG8gYmUgc2VudCB3aXRoIGEgU2V0LUNvb2tpZSBoZWFkZXIgaW4gdGhlCisgICAg
ICAgIHJlc3BvbnNlCisKKyAgICAgICAgOnBhcmFtIG5hbWU6IFN0cmluZyBuYW1lIG9mIHRoZSBj
b29raWUKKyAgICAgICAgOnBhcmFtIHZhbHVlOiBTdHJpbmcgdmFsdWUgb2YgdGhlIGNvb2tpZQor
ICAgICAgICA6cGFyYW0gbWF4X2FnZTogZGF0ZXRpbWUudGltZWRlbHRhIGludCByZXByZXNlbnRp
bmcgdGhlIHRpbWUgKGluIHNlY29uZHMpCisgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbCB0
aGUgY29va2llIGV4cGlyZXMKKyAgICAgICAgOnBhcmFtIHBhdGg6IFN0cmluZyBwYXRoIHRvIHdo
aWNoIHRoZSBjb29raWUgYXBwbGllcworICAgICAgICA6cGFyYW0gZG9tYWluOiBTdHJpbmcgZG9t
YWluIHRvIHdoaWNoIHRoZSBjb29raWUgYXBwbGllcworICAgICAgICA6cGFyYW0gc2VjdXJlOiBC
b29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29va2llIGlzIG1hcmtlZCBhcyBzZWN1cmUK
KyAgICAgICAgOnBhcmFtIGh0dHBvbmx5OiBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUg
Y29va2llIGlzIG1hcmtlZCBhcworICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFAgT25seQor
ICAgICAgICA6cGFyYW0gY29tbWVudDogU3RyaW5nIGNvbW1lbnQKKyAgICAgICAgOnBhcmFtIGV4
cGlyZXM6IGRhdGV0aW1lLmRhdGV0aW1lIG9yIGRhdGV0aW1lLnRpbWVkZWx0YSBpbmRpY2F0aW5n
IGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgb3IgaW50ZXJ2YWwgZnJvbSBub3cgd2hl
biB0aGUgY29va2llIGV4cGlyZXMKKworICAgICAgICAiIiIKKyAgICAgICAgZGF5cyA9IGRpY3Qo
KGkrMSwgbmFtZSkgZm9yIGksIG5hbWUgaW4gZW51bWVyYXRlKFsiamFuIiwgImZlYiIsICJtYXIi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJhcHIiLCAibWF5IiwgImp1biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImp1bCIsICJhdWciLCAic2VwIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2N0Iiwg
Im5vdiIsICJkZWMiXSkpCisgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICB2
YWx1ZSA9ICcnCisgICAgICAgICAgICBtYXhfYWdlID0gMAorICAgICAgICAgICAgZXhwaXJlcyA9
IHRpbWVkZWx0YShkYXlzPS0xKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwaXJlcywgdGlt
ZWRlbHRhKToKKyAgICAgICAgICAgIGV4cGlyZXMgPSBkYXRldGltZS51dGNub3coKSArIGV4cGly
ZXMKKworICAgICAgICBpZiBleHBpcmVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZXhwaXJl
c19zdHIgPSBleHBpcmVzLnN0cmZ0aW1lKCIlZCAlJXMgJVkgJUg6JU06JVMgR01UIikKKyAgICAg
ICAgICAgIGV4cGlyZXNfc3RyID0gZXhwaXJlc19zdHIgJSBkYXlzW2V4cGlyZXMubW9udGhdCisg
ICAgICAgICAgICBleHBpcmVzID0gZXhwaXJlc19zdHIKKworICAgICAgICBpZiBtYXhfYWdlIGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgaWYgaGFzYXR0cihtYXhfYWdlLCAidG90YWxfc2Vjb25k
cyIpOgorICAgICAgICAgICAgICAgIG1heF9hZ2UgPSBpbnQobWF4X2FnZS50b3RhbF9zZWNvbmRz
KCkpCisgICAgICAgICAgICBtYXhfYWdlID0gIiUuMGQiICUgbWF4X2FnZQorCisgICAgICAgIG0g
PSBDb29raWUuTW9yc2VsKCkKKworICAgICAgICBkZWYgbWF5YmVfc2V0KGtleSwgdmFsdWUpOgor
ICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmUgYW5kIHZhbHVlIGlzIG5vdCBGYWxzZToK
KyAgICAgICAgICAgICAgICBtW2tleV0gPSB2YWx1ZQorCisgICAgICAgIG0uc2V0KG5hbWUsIHZh
bHVlLCB2YWx1ZSkKKyAgICAgICAgbWF5YmVfc2V0KCJwYXRoIiwgcGF0aCkKKyAgICAgICAgbWF5
YmVfc2V0KCJkb21haW4iLCBkb21haW4pCisgICAgICAgIG1heWJlX3NldCgiY29tbWVudCIsIGNv
bW1lbnQpCisgICAgICAgIG1heWJlX3NldCgiZXhwaXJlcyIsIGV4cGlyZXMpCisgICAgICAgIG1h
eWJlX3NldCgibWF4LWFnZSIsIG1heF9hZ2UpCisgICAgICAgIG1heWJlX3NldCgic2VjdXJlIiwg
c2VjdXJlKQorICAgICAgICBtYXliZV9zZXQoImh0dHBvbmx5IiwgaHR0cG9ubHkpCisKKyAgICAg
ICAgc2VsZi5oZWFkZXJzLmFwcGVuZCgiU2V0LUNvb2tpZSIsIG0uT3V0cHV0U3RyaW5nKCkpCisK
KyAgICBkZWYgdW5zZXRfY29va2llKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJSZW1vdmUgYSBj
b29raWUgZnJvbSB0aG9zZSB0aGF0IGFyZSBiZWluZyBzZW50IHdpdGggdGhlIHJlc3BvbnNlIiIi
CisgICAgICAgIGNvb2tpZXMgPSBzZWxmLmhlYWRlcnMuZ2V0KCJTZXQtQ29va2llIikKKyAgICAg
ICAgcGFyc2VyID0gQ29va2llLkJhc2VDb29raWUoKQorICAgICAgICBmb3IgY29va2llIGluIGNv
b2tpZXM6CisgICAgICAgICAgICBwYXJzZXIubG9hZChjb29raWUpCisKKyAgICAgICAgaWYgbmFt
ZSBpbiBwYXJzZXIua2V5cygpOgorICAgICAgICAgICAgZGVsIHNlbGYuaGVhZGVyc1siU2V0LUNv
b2tpZSJdCisgICAgICAgICAgICBmb3IgbSBpbiBwYXJzZXIudmFsdWVzKCk6CisgICAgICAgICAg
ICAgICAgaWYgbS5rZXkgIT0gbmFtZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oZWFkZXJz
LmFwcGVuZCgoIlNldC1Db29raWUiLCBtLk91dHB1dFN0cmluZygpKSkKKworICAgIGRlZiBkZWxl
dGVfY29va2llKHNlbGYsIG5hbWUsIHBhdGg9Ii8iLCBkb21haW49Tm9uZSk6CisgICAgICAgICIi
IkRlbGV0ZSBhIGNvb2tpZSBvbiB0aGUgY2xpZW50IGJ5IHNldHRpbmcgaXQgdG8gdGhlIGVtcHR5
IHN0cmluZworICAgICAgICBhbmQgdG8gZXhwaXJlIGluIHRoZSBwYXN0IiIiCisgICAgICAgIHNl
bGYuc2V0X2Nvb2tpZShuYW1lLCBOb25lLCBwYXRoPXBhdGgsIGRvbWFpbj1kb21haW4sIG1heF9h
Z2U9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZXM9dGltZWRlbHRhKGRheXM9LTEp
KQorCisgICAgZGVmIGl0ZXJfY29udGVudChzZWxmKToKKyAgICAgICAgIiIiSXRlcmF0b3IgcmV0
dXJuaW5nIGNodW5rcyBvZiByZXNwb25zZSBib2R5IGNvbnRlbnQuCisKKyAgICAgICAgSWYgYW55
IHBhcnQgb2YgdGhlIGNvbnRlbnQgaXMgYSBmdW5jdGlvbiwgdGhpcyB3aWxsIGJlIGNhbGxlZAor
ICAgICAgICBhbmQgdGhlIHJlc3VsdGluZyB2YWx1ZSAoaWYgYW55KSByZXR1cm5lZC4iIiIKKyAg
ICAgICAgaWYgdHlwZShzZWxmLmNvbnRlbnQpIGluIHR5cGVzLlN0cmluZ1R5cGVzOgorICAgICAg
ICAgICAgeWllbGQgc2VsZi5jb250ZW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3Ig
aXRlbSBpbiBzZWxmLmNvbnRlbnQ6CisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihpdGVtLCAi
X19jYWxsX18iKToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtKCkKKyAgICAgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW0KKyAgICAgICAg
ICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgdmFsdWUKKworICAg
IGRlZiB3cml0ZV9zdGF0dXNfaGVhZGVycyhzZWxmKToKKyAgICAgICAgIiIiV3JpdGUgb3V0IHRo
ZSBzdGF0dXMgbGluZSBhbmQgaGVhZGVycyBmb3IgdGhlIHJlc3BvbnNlIiIiCisgICAgICAgIHNl
bGYud3JpdGVyLndyaXRlX3N0YXR1cygqc2VsZi5zdGF0dXMpCisgICAgICAgIGZvciBpdGVtIGlu
IHNlbGYuaGVhZGVyczoKKyAgICAgICAgICAgIHNlbGYud3JpdGVyLndyaXRlX2hlYWRlcigqaXRl
bSkKKyAgICAgICAgc2VsZi53cml0ZXIuZW5kX2hlYWRlcnMoKQorCisgICAgZGVmIHdyaXRlX2Nv
bnRlbnQoc2VsZik6CisgICAgICAgICIiIldyaXRlIG91dCB0aGUgcmVzcG9uc2UgY29udGVudCIi
IgorICAgICAgICBpZiBzZWxmLnJlcXVlc3QubWV0aG9kICE9ICJIRUFEIiBvciBzZWxmLnNlbmRf
Ym9keV9mb3JfaGVhZF9yZXF1ZXN0OgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5pdGVy
X2NvbnRlbnQoKToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlci53cml0ZV9jb250ZW50KGl0
ZW0pCisKKyAgICBkZWYgd3JpdGUoc2VsZik6CisgICAgICAgICIiIldyaXRlIHRoZSB3aG9sZSBy
ZXNwb25zZSIiIgorICAgICAgICBzZWxmLndyaXRlX3N0YXR1c19oZWFkZXJzKCkKKyAgICAgICAg
c2VsZi53cml0ZV9jb250ZW50KCkKKworICAgIGRlZiBzZXRfZXJyb3Ioc2VsZiwgY29kZSwgbWVz
c2FnZT0iIik6CisgICAgICAgICIiIlNldCB0aGUgcmVzcG9uc2Ugc3RhdHVzIGhlYWRlcnMgYW5k
IGJvZHkgdG8gaW5kaWNhdGUgYW4KKyAgICAgICAgZXJyb3IiIiIKKyAgICAgICAgZXJyID0geyJj
b2RlIjogY29kZSwKKyAgICAgICAgICAgICAgICJtZXNzYWdlIjogbWVzc2FnZX0KKyAgICAgICAg
ZGF0YSA9IGpzb24uZHVtcHMoeyJlcnJvciI6IGVycn0pCisgICAgICAgIHNlbGYuc3RhdHVzID0g
Y29kZQorICAgICAgICBzZWxmLmhlYWRlcnMgPSBbKCJDb250ZW50LVR5cGUiLCAidGV4dC9qc29u
IiksCisgICAgICAgICAgICAgICAgICAgICAgICAoIkNvbnRlbnQtTGVuZ3RoIiwgbGVuKGRhdGEp
KV0KKyAgICAgICAgc2VsZi5jb250ZW50ID0gZGF0YQorICAgICAgICBpZiBjb2RlID09IDUwMDoK
KyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihtZXNzYWdlKQorCisKK2NsYXNzIE11bHRpcGFydENv
bnRlbnQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYm91bmRhcnk9Tm9uZSwgZGVm
YXVsdF9jb250ZW50X3R5cGU9Tm9uZSk6CisgICAgICAgIHNlbGYuaXRlbXMgPSBbXQorICAgICAg
ICBpZiBib3VuZGFyeSBpcyBOb25lOgorICAgICAgICAgICAgYm91bmRhcnkgPSBzdHIodXVpZC51
dWlkNCgpKQorICAgICAgICBzZWxmLmJvdW5kYXJ5ID0gYm91bmRhcnkKKyAgICAgICAgc2VsZi5k
ZWZhdWx0X2NvbnRlbnRfdHlwZSA9IGRlZmF1bHRfY29udGVudF90eXBlCisKKyAgICBkZWYgX19j
YWxsX18oc2VsZik6CisgICAgICAgIGJvdW5kYXJ5ID0gIi0tIiArIHNlbGYuYm91bmRhcnkKKyAg
ICAgICAgcnYgPSBbIiIsIGJvdW5kYXJ5XQorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLml0ZW1z
OgorICAgICAgICAgICAgcnYuYXBwZW5kKHN0cihpdGVtKSkKKyAgICAgICAgICAgIHJ2LmFwcGVu
ZChib3VuZGFyeSkKKyAgICAgICAgcnZbLTFdICs9ICItLSIKKyAgICAgICAgcmV0dXJuICJcclxu
Ii5qb2luKHJ2KQorCisgICAgZGVmIGFwcGVuZF9wYXJ0KHNlbGYsIGRhdGEsIGNvbnRlbnRfdHlw
ZT1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgICAgICBpZiBjb250ZW50X3R5cGUgaXMgTm9uZToK
KyAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IHNlbGYuZGVmYXVsdF9jb250ZW50X3R5cGUKKyAg
ICAgICAgc2VsZi5pdGVtcy5hcHBlbmQoTXVsdGlwYXJ0UGFydChkYXRhLCBjb250ZW50X3R5cGUs
IGhlYWRlcnMpKQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAjVGhpcyBpcyBo
YWNraXNoOyB3aGVuIHdyaXRpbmcgdGhlIHJlc3BvbnNlIHdlIG5lZWQgYW4gaXRlcmFibGUKKyAg
ICAgICAgI29yIGEgc3RyaW5nLiBGb3IgYSBtdWx0aXBhcnQvYnl0ZXJhbmdlIHJlc3BvbnNlIHdl
IHdhbnQgYW4KKyAgICAgICAgI2l0ZXJhYmxlIHRoYXQgY29udGFpbnMgYSBzaW5nbGUgY2FsbGFi
bGU7IHRoZSBNdWx0aXBhcnRDb250ZW50CisgICAgICAgICNvYmplY3QgaXRzZWxmCisgICAgICAg
IHlpZWxkIHNlbGYKKworCitjbGFzcyBNdWx0aXBhcnRQYXJ0KG9iamVjdCk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGRhdGEsIGNvbnRlbnRfdHlwZT1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAg
ICAgICBzZWxmLmhlYWRlcnMgPSBSZXNwb25zZUhlYWRlcnMoKQorCisgICAgICAgIGlmIGNvbnRl
bnRfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuaGVhZGVycy5zZXQoIkNvbnRl
bnQtVHlwZSIsIGNvbnRlbnRfdHlwZSkKKworICAgICAgICBpZiBoZWFkZXJzIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGhlYWRlcnM6CisgICAgICAgICAgICAg
ICAgaWYgbmFtZS5sb3dlcigpID09ICJjb250ZW50LXR5cGUiOgorICAgICAgICAgICAgICAgICAg
ICBmdW5jID0gc2VsZi5oZWFkZXJzLnNldAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgICAgIGZ1bmMgPSBzZWxmLmhlYWRlcnMuYXBwZW5kCisgICAgICAgICAgICAgICAg
ZnVuYyhuYW1lLCB2YWx1ZSkKKworICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisKKyAgICBkZWYg
X19zdHJfXyhzZWxmKToKKyAgICAgICAgcnYgPSBbXQorICAgICAgICBmb3IgaXRlbSBpbiBzZWxm
LmhlYWRlcnM6CisgICAgICAgICAgICBydi5hcHBlbmQoIiVzOiAlcyIgJSBpdGVtKQorICAgICAg
ICBydi5hcHBlbmQoIiIpCisgICAgICAgIHJ2LmFwcGVuZChzZWxmLmRhdGEpCisgICAgICAgIHJl
dHVybiAiXHJcbiIuam9pbihydikKKworCitjbGFzcyBSZXNwb25zZUhlYWRlcnMob2JqZWN0KToK
KyAgICAiIiJEaWN0aW9uYXJ5LWxpa2Ugb2JqZWN0IGhvbGRpbmcgdGhlIGhlYWRlcnMgZm9yIHRo
ZSByZXNwb25zZSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5kYXRh
ID0gT3JkZXJlZERpY3QoKQorCisgICAgZGVmIHNldChzZWxmLCBrZXksIHZhbHVlKToKKyAgICAg
ICAgIiIiU2V0IGEgaGVhZGVyIHRvIGEgc3BlY2lmaWMgdmFsdWUsIG92ZXJ3cml0aW5nIGFueSBw
cmV2aW91cyBoZWFkZXIKKyAgICAgICAgd2l0aCB0aGUgc2FtZSBuYW1lCisKKyAgICAgICAgOnBh
cmFtIGtleTogTmFtZSBvZiB0aGUgaGVhZGVyIHRvIHNldAorICAgICAgICA6cGFyYW0gdmFsdWU6
IFZhbHVlIHRvIHNldCB0aGUgaGVhZGVyIHRvCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmRh
dGFba2V5Lmxvd2VyKCldID0gKGtleSwgW3ZhbHVlXSkKKworICAgIGRlZiBhcHBlbmQoc2VsZiwg
a2V5LCB2YWx1ZSk6CisgICAgICAgICIiIkFkZCBhIG5ldyBoZWFkZXIgd2l0aCBhIGdpdmVuIG5h
bWUsIG5vdCBvdmVyd3JpdGluZyBhbnkgZXhpc3RpbmcKKyAgICAgICAgaGVhZGVycyB3aXRoIHRo
ZSBzYW1lIG5hbWUKKworICAgICAgICA6cGFyYW0ga2V5OiBOYW1lIG9mIHRoZSBoZWFkZXIgdG8g
YWRkCisgICAgICAgIDpwYXJhbSB2YWx1ZTogVmFsdWUgdG8gc2V0IGZvciB0aGUgaGVhZGVyCisg
ICAgICAgICIiIgorICAgICAgICBpZiBrZXkubG93ZXIoKSBpbiBzZWxmLmRhdGE6CisgICAgICAg
ICAgICBzZWxmLmRhdGFba2V5Lmxvd2VyKCldWzFdLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHNlbGYuc2V0KGtleSwgdmFsdWUpCisKKyAgICBkZWYgZ2V0KHNlbGYs
IGtleSwgZGVmYXVsdD1taXNzaW5nKToKKyAgICAgICAgIiIiR2V0IHRoZSBzZXQgdmFsdWVzIGZv
ciBhIHBhcnRpY3VsYXIgaGVhZGVyLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1
cm4gc2VsZltrZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGlmIGRl
ZmF1bHQgaXMgbWlzc2luZzoKKyAgICAgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgICAg
IHJldHVybiBkZWZhdWx0CisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAg
ICAgIiIiR2V0IGEgbGlzdCBvZiB2YWx1ZXMgZm9yIGEgcGFydGljdWxhciBoZWFkZXIKKworICAg
ICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVtrZXkubG93ZXIoKV1bMV0KKworICAg
IGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBkZWwgc2VsZi5kYXRhW2tleS5s
b3dlcigpXQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1
cm4ga2V5Lmxvd2VyKCkgaW4gc2VsZi5kYXRhCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwg
a2V5LCB2YWx1ZSk6CisgICAgICAgIHNlbGYuc2V0KGtleSwgdmFsdWUpCisKKyAgICBkZWYgX19p
dGVyX18oc2VsZik6CisgICAgICAgIGZvciBrZXksIHZhbHVlcyBpbiBzZWxmLmRhdGEuaXRlcnZh
bHVlcygpOgorICAgICAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlczoKKyAgICAgICAgICAgICAg
ICB5aWVsZCBrZXksIHZhbHVlCisKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgIHJldHVy
biBsaXN0KHNlbGYpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIGl0ZW1zX2l0ZXIpOgorICAgICAg
ICBmb3IgbmFtZSwgdmFsdWUgaW4gaXRlbXNfaXRlcjoKKyAgICAgICAgICAgIHNlbGYuc2V0KG5h
bWUsIHZhbHVlKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gcmVw
cihzZWxmLmRhdGEpCisKKworY2xhc3MgUmVzcG9uc2VXcml0ZXIob2JqZWN0KToKKyAgICAiIiJP
YmplY3QgcHJvdmlkaW5nIGFuIEFQSSB0byB3cml0ZSBvdXQgYSBIVFRQIHJlc3BvbnNlLgorCisg
ICAgOnBhcmFtIGhhbmRsZXI6IFRoZSBSZXF1ZXN0SGFuZGxlciBiZWluZyB1c2VkLgorICAgIDpw
YXJhbSByZXNwb25zZTogVGhlIFJlc3BvbnNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHdyaXRlci4K
KworICAgIEFmdGVyIGVhY2ggcGFydCBvZiB0aGUgcmVzcG9uc2UgaXMgd3JpdHRlbiwgdGhlIG91
dHB1dCBpcworICAgIGZsdXNoZWQgdW5sZXNzIHJlc3BvbnNlLmV4cGxpY2l0X2ZsdXNoIGlzIEZh
bHNlLCBpbiB3aGljaCBjYXNlCisgICAgdGhlIHVzZXIgbXVzdCBjYWxsIC5mbHVzaCgpIGV4cGxp
Y2l0bHkuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZXIsIHJlc3BvbnNlKToKKyAg
ICAgICAgc2VsZi5fd2ZpbGUgPSBoYW5kbGVyLndmaWxlCisgICAgICAgIHNlbGYuX3Jlc3BvbnNl
ID0gcmVzcG9uc2UKKyAgICAgICAgc2VsZi5faGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgc2Vs
Zi5faGVhZGVyc19zZWVuID0gc2V0KCkKKyAgICAgICAgc2VsZi5faGVhZGVyc19jb21wbGV0ZSA9
IEZhbHNlCisgICAgICAgIHNlbGYuY29udGVudF93cml0dGVuID0gRmFsc2UKKyAgICAgICAgc2Vs
Zi5yZXF1ZXN0ID0gcmVzcG9uc2UucmVxdWVzdAorCisgICAgZGVmIHdyaXRlX3N0YXR1cyhzZWxm
LCBjb2RlLCBtZXNzYWdlPU5vbmUpOgorICAgICAgICAiIiJXcml0ZSBvdXQgdGhlIHN0YXR1cyBs
aW5lIG9mIGEgcmVzcG9uc2UuCisKKyAgICAgICAgOnBhcmFtIGNvZGU6IFRoZSBpbnRlZ2VyIHN0
YXR1cyBjb2RlIG9mIHRoZSByZXNwb25zZS4KKyAgICAgICAgOnBhcmFtIG1lc3NhZ2U6IFRoZSBt
ZXNzYWdlIG9mIHRoZSByZXNwb25zZS4gRGVmYXVsdHMgdG8gdGhlIG1lc3NhZ2UgY29tbW9ubHkg
dXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgc3RhdHVzIGNvZGUuIiIiCisg
ICAgICAgIGlmIG1lc3NhZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGNvZGUgaW4gcmVzcG9u
c2VfY29kZXM6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IHJlc3BvbnNlX2NvZGVzW2NvZGVd
WzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnJworICAg
ICAgICBzZWxmLndyaXRlKCIlcyAlZCAlc1xyXG4iICUKKyAgICAgICAgICAgICAgICAgICAoc2Vs
Zi5fcmVzcG9uc2UucmVxdWVzdC5wcm90b2NvbF92ZXJzaW9uLCBjb2RlLCBtZXNzYWdlKSkKKwor
ICAgIGRlZiB3cml0ZV9oZWFkZXIoc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICAiIiJXcml0
ZSBvdXQgYSBzaW5nbGUgaGVhZGVyIGZvciB0aGUgcmVzcG9uc2UuCisKKyAgICAgICAgOnBhcmFt
IG5hbWU6IE5hbWUgb2YgdGhlIGhlYWRlciBmaWVsZAorICAgICAgICA6cGFyYW0gdmFsdWU6IFZh
bHVlIG9mIHRoZSBoZWFkZXIgZmllbGQKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2hlYWRl
cnNfc2Vlbi5hZGQobmFtZS5sb3dlcigpKQorICAgICAgICBzZWxmLndyaXRlKCIlczogJXNcclxu
IiAlIChuYW1lLCB2YWx1ZSkpCisgICAgICAgIGlmIG5vdCBzZWxmLl9yZXNwb25zZS5leHBsaWNp
dF9mbHVzaDoKKyAgICAgICAgICAgIHNlbGYuZmx1c2goKQorCisgICAgZGVmIHdyaXRlX2RlZmF1
bHRfaGVhZGVycyhzZWxmKToKKyAgICAgICAgZm9yIG5hbWUsIGYgaW4gWygiU2VydmVyIiwgc2Vs
Zi5faGFuZGxlci52ZXJzaW9uX3N0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAoIkRh
dGUiLCBzZWxmLl9oYW5kbGVyLmRhdGVfdGltZV9zdHJpbmcpXToKKyAgICAgICAgICAgIGlmIG5h
bWUubG93ZXIoKSBub3QgaW4gc2VsZi5faGVhZGVyc19zZWVuOgorICAgICAgICAgICAgICAgIHNl
bGYud3JpdGVfaGVhZGVyKG5hbWUsIGYoKSkKKworICAgICAgICBpZiAodHlwZShzZWxmLl9yZXNw
b25zZS5jb250ZW50KSBpbiAoc3RyLCB1bmljb2RlKSBhbmQKKyAgICAgICAgICAgICJjb250ZW50
LWxlbmd0aCIgbm90IGluIHNlbGYuX2hlYWRlcnNfc2Vlbik6CisgICAgICAgICAgICAjV291bGQg
YmUgbmljZSB0byBhdm9pZCBkb3VibGUtZW5jb2RpbmcgaGVyZQorICAgICAgICAgICAgc2VsZi53
cml0ZV9oZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIiwgbGVuKHNlbGYuZW5jb2RlKHNlbGYuX3Jlc3Bv
bnNlLmNvbnRlbnQpKSkKKworICAgIGRlZiBlbmRfaGVhZGVycyhzZWxmKToKKyAgICAgICAgIiIi
RmluaXNoIHdyaXRpbmcgaGVhZGVycyBhbmQgd3JpdGUgdGhlIHNlcGFyYXRvci4KKworICAgICAg
ICBVbmxlc3MgYWRkX3JlcXVpcmVkX2hlYWRlcnMgb24gdGhlIHJlc3BvbnNlIGlzIEZhbHNlLAor
ICAgICAgICB0aGlzIHdpbGwgYWxzbyBhZGQgSFRUUC1tYW5kYXRlZCBoZWFkZXJzIHRoYXQgaGF2
ZSBub3QgeWV0IGJlZW4gc3VwcGxpZWQKKyAgICAgICAgdG8gdGhlIHJlc3BvbnNlIGhlYWRlcnMi
IiIKKworICAgICAgICBpZiBzZWxmLl9yZXNwb25zZS5hZGRfcmVxdWlyZWRfaGVhZGVyczoKKyAg
ICAgICAgICAgIHNlbGYud3JpdGVfZGVmYXVsdF9oZWFkZXJzKCkKKworICAgICAgICBzZWxmLndy
aXRlKCJcclxuIikKKyAgICAgICAgaWYgbm90IHNlbGYuX3Jlc3BvbnNlLmV4cGxpY2l0X2ZsdXNo
OgorICAgICAgICAgICAgc2VsZi5mbHVzaCgpCisgICAgICAgIHNlbGYuX2hlYWRlcnNfY29tcGxl
dGUgPSBUcnVlCisKKyAgICBkZWYgd3JpdGVfY29udGVudChzZWxmLCBkYXRhKToKKyAgICAgICAg
IiIiV3JpdGUgdGhlIGJvZHkgb2YgdGhlIHJlc3BvbnNlLiIiIgorICAgICAgICBzZWxmLndyaXRl
KHNlbGYuZW5jb2RlKGRhdGEpKQorICAgICAgICBpZiBub3Qgc2VsZi5fcmVzcG9uc2UuZXhwbGlj
aXRfZmx1c2g6CisgICAgICAgICAgICBzZWxmLmZsdXNoKCkKKworICAgIGRlZiB3cml0ZShzZWxm
LCBkYXRhKToKKyAgICAgICAgIiIiV3JpdGUgZGlyZWN0bHkgdG8gdGhlIHJlc3BvbnNlLCBjb252
ZXJ0aW5nIHVuaWNvZGUgdG8gYnl0ZXMKKyAgICAgICAgYWNjb3JkaW5nIHRvIHJlc3BvbnNlLmVu
Y29kaW5nLiBEb2VzIG5vdCBmbHVzaC4iIiIKKyAgICAgICAgc2VsZi5jb250ZW50X3dyaXR0ZW4g
PSBUcnVlCisgICAgICAgIHNlbGYuX3dmaWxlLndyaXRlKHNlbGYuZW5jb2RlKGRhdGEpKQorCisg
ICAgZGVmIGVuY29kZShzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiQ29udmVydCB1bmljb2RlIHRv
IGJ5dGVzIGFjY29yZGluZyB0byByZXNwb25zZS5lbmNvZGluZy4iIiIKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShkYXRhLCBzdHIpOgorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgZWxp
ZiBpc2luc3RhbmNlKGRhdGEsIHVuaWNvZGUpOgorICAgICAgICAgICAgcmV0dXJuIGRhdGEuZW5j
b2RlKHNlbGYuX3Jlc3BvbnNlLmVuY29kaW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcgorCisgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICAiIiJGbHVz
aCB0aGUgb3V0cHV0LiIiIgorICAgICAgICBzZWxmLl93ZmlsZS5mbHVzaCgpCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2Vy
dmUvd3B0c2VydmUvcm91dGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3JvdXRlci5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
ZTdjYTE0Y2ZmNzljNTEwMWFlZDNhNzkzOTU3OTBkMmQzYzY4ZGJjCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNl
cnZlL3dwdHNlcnZlL3JvdXRlci5weQpAQCAtMCwwICsxLDE2NSBAQAoraW1wb3J0IGl0ZXJ0b29s
cworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHR5cGVzCisKK2xvZ2dlciA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCJ3cHRzZXJ2ZSIpCitsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJV
RykKKworYW55X21ldGhvZCA9IG9iamVjdCgpCisKK2NsYXNzIFJvdXRlVG9rZW5pemVyKG9iamVj
dCk6CisgICAgZGVmIGxpdGVyYWwoc2VsZiwgc2Nhbm5lciwgdG9rZW4pOgorICAgICAgICByZXR1
cm4gKCJsaXRlcmFsIiwgdG9rZW4pCisKKyAgICBkZWYgc2xhc2goc2VsZiwgc2Nhbm5lciwgdG9r
ZW4pOgorICAgICAgICByZXR1cm4gKCJzbGFzaCIsIE5vbmUpCisKKyAgICBkZWYgZ3JvdXAoc2Vs
Ziwgc2Nhbm5lciwgdG9rZW4pOgorICAgICAgICByZXR1cm4gKCJncm91cCIsIHRva2VuWzE6LTFd
KQorCisgICAgZGVmIHN0YXIoc2VsZiwgc2Nhbm5lciwgdG9rZW4pOgorICAgICAgICByZXR1cm4g
KCJzdGFyIiwgdG9rZW5bMTotM10pCisKKyAgICBkZWYgc2NhbihzZWxmLCBpbnB1dF9zdHIpOgor
ICAgICAgICBzY2FubmVyID0gcmUuU2Nhbm5lcihbKHIiLyIsIHNlbGYuc2xhc2gpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHIie1x3Kn0iLCBzZWxmLmdyb3VwKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChyIlwqIiwgc2VsZi5zdGFyKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChyIig/OlxcLnxbXntcKi9dKSoiLCBzZWxmLmxpdGVyYWwpLF0pCisg
ICAgICAgIHJldHVybiBzY2FubmVyLnNjYW4oaW5wdXRfc3RyKQorCitjbGFzcyBSb3V0ZUNvbXBp
bGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnJlc2V0
KCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5zdGFyX3NlZW4gPSBGYWxz
ZQorCisgICAgZGVmIGNvbXBpbGUoc2VsZiwgdG9rZW5zKToKKyAgICAgICAgc2VsZi5yZXNldCgp
CisKKyAgICAgICAgZnVuY19tYXAgPSB7InNsYXNoIjpzZWxmLnByb2Nlc3Nfc2xhc2gsCisgICAg
ICAgICAgICAgICAgICAgICJsaXRlcmFsIjpzZWxmLnByb2Nlc3NfbGl0ZXJhbCwKKyAgICAgICAg
ICAgICAgICAgICAgImdyb3VwIjpzZWxmLnByb2Nlc3NfZ3JvdXAsCisgICAgICAgICAgICAgICAg
ICAgICJzdGFyIjpzZWxmLnByb2Nlc3Nfc3Rhcn0KKworICAgICAgICByZV9wYXJ0cyA9IFsiXiJd
CisKKyAgICAgICAgaWYgbm90IHRva2VucyBvciB0b2tlbnNbMF1bMF0gIT0gInNsYXNoIjoKKyAg
ICAgICAgICAgIHRva2VucyA9IGl0ZXJ0b29scy5jaGFpbihbKCJzbGFzaCIsIE5vbmUpXSwgdG9r
ZW5zKQorCisgICAgICAgIGZvciB0b2tlbiBpbiB0b2tlbnM6CisgICAgICAgICAgICByZV9wYXJ0
cy5hcHBlbmQoZnVuY19tYXBbdG9rZW5bMF1dKHRva2VuKSkKKworICAgICAgICByZV9wYXJ0cy5h
cHBlbmQoIiQiKQorCisgICAgICAgIHJldHVybiByZS5jb21waWxlKCIiLmpvaW4ocmVfcGFydHMp
KQorCisgICAgZGVmIHByb2Nlc3NfbGl0ZXJhbChzZWxmLCB0b2tlbik6CisgICAgICAgIHJldHVy
biByZS5lc2NhcGUodG9rZW5bMV0pCisKKyAgICBkZWYgcHJvY2Vzc19zbGFzaChzZWxmLCB0b2tl
bik6CisgICAgICAgIHJldHVybiAiLyIKKworICAgIGRlZiBwcm9jZXNzX2dyb3VwKHNlbGYsIHRv
a2VuKToKKyAgICAgICAgaWYgc2VsZi5zdGFyX3NlZW46CisgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCJHcm91cCBzZWVuIGFmdGVyIHN0YXIgaW4gcmVnZXhwIikKKyAgICAgICAgcmV0dXJu
ICIoP1A8JXM+W14vXSspIiAlIHRva2VuWzFdCisKKyAgICBkZWYgcHJvY2Vzc19zdGFyKHNlbGYs
IHRva2VuKToKKyAgICAgICAgaWYgc2VsZi5zdGFyX3NlZW46CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJTdGFyIHNlZW4gYWZ0ZXIgc3RhciBpbiByZWdleHAiKQorICAgICAgICBzZWxm
LnN0YXJfc2VlbiA9IFRydWUKKyAgICAgICAgcmV0dXJuICIoLiopIgorCitkZWYgY29tcGlsZV9w
YXRoX21hdGNoKHJvdXRlX3BhdHRlcm4pOgorICAgICIiInRva2VuczogLyBvciBsaXRlcmFsIG9y
IG1hdGNoIG9yICoiIiIKKworICAgIHRva2VuaXplciA9IFJvdXRlVG9rZW5pemVyKCkKKyAgICB0
b2tlbnMsIHVubWF0Y2hlZCA9IHRva2VuaXplci5zY2FuKHJvdXRlX3BhdHRlcm4pCisKKyAgICBh
c3NlcnQgdW5tYXRjaGVkIGlzICIiLCB1bm1hdGNoZWQKKworICAgIGNvbXBpbGVyID0gUm91dGVD
b21waWxlcigpCisKKyAgICByZXR1cm4gY29tcGlsZXIuY29tcGlsZSh0b2tlbnMpCisKK2NsYXNz
IFJvdXRlcihvYmplY3QpOgorICAgICIiIk9iamVjdCBmb3IgbWF0Y2hpbmcgaGFuZGxlciBmdW5j
dGlvbnMgdG8gcmVxdWVzdHMuCisKKyAgICA6cGFyYW0gZG9jX3Jvb3Q6IEFic29sdXRlIHBhdGgg
b2YgdGhlIGZpbGVzeXN0ZW0gbG9jYXRpb24gZnJvbQorICAgICAgICAgICAgICAgICAgICAgd2hp
Y2ggdG8gc2VydmUgdGVzdHMKKyAgICA6cGFyYW0gcm91dGVzOiBJbml0aWFsIHJvdXRlcyB0byBh
ZGQ7IGEgbGlzdCBvZiB0aHJlZSBpdGVtIHR1cGxlcworICAgICAgICAgICAgICAgICAgIChtZXRo
b2QsIHBhdGhfcGF0dGVybiwgaGFuZGxlcl9mdW5jdGlvbiksIGRlZmluZWQKKyAgICAgICAgICAg
ICAgICAgICBhcyBmb3IgcmVnaXN0ZXIoKQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGRvY19yb290LCByb3V0ZXMpOgorICAgICAgICBzZWxmLmRvY19yb290ID0gZG9jX3Jvb3QK
KyAgICAgICAgc2VsZi5yb3V0ZXMgPSBbXQorICAgICAgICBmb3Igcm91dGUgaW4gcmV2ZXJzZWQo
cm91dGVzKToKKyAgICAgICAgICAgIHNlbGYucmVnaXN0ZXIoKnJvdXRlKQorCisgICAgZGVmIHJl
Z2lzdGVyKHNlbGYsIG1ldGhvZHMsIHBhdGgsIGhhbmRsZXIpOgorICAgICAgICAiIiJSZWdpc3Rl
ciBhIGhhbmRsZXIgZm9yIGEgc2V0IG9mIHBhdGhzLgorCisgICAgICAgIDpwYXJhbSBtZXRob2Rz
OiBTZXQgb2YgbWV0aG9kcyB0aGlzIHNob3VsZCBtYXRjaC4gIioiIGlzIGEKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNwZWNpYWwgdmFsdWUgaW5kaWNhdGluZyB0aGF0IGFsbCBtZXRob2RzIHNo
b3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgbWF0Y2hlZC4KKworICAgICAgICA6cGFy
YW0gcGF0aF9wYXR0ZXJuOiBNYXRjaCBwYXR0ZXJuIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRldGVy
bWluZSBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlcXVlc3QgcGF0aCBtYXRj
aGVzIHRoaXMgcm91dGUuIE1hdGNoIHBhdHRlcm5zCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnNpc3Qgb2YgZWl0aGVyIGxpdGVyYWwgdGV4dCwgbWF0Y2ggZ3JvdXBzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZW5vdGVkIHtuYW1lfSwgd2hpY2ggbWF0Y2ggYW55IGNo
YXJhY3RlciBleGNlcHQgLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kLCBhdCBt
b3N0IG9uZSBcKiwgd2hpY2ggbWF0Y2hlcyBhbnkgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJZiB0aGVyZSBpcyBubyBsZWFkaW5nICIvIiBvbiB0aGUgcGF0dGVybiwg
dGhpcyBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGltcGxp
ZWQuIEZvciBleGFtcGxlOjoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBp
L3tyZXNvdXJjZX0vKi5qc29uCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3VsZCBt
YXRjaCBgL2FwaS90ZXN0L2RhdGEuanNvbmAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBgL2FwaS90ZXN0L3Rlc3QyL2RhdGEuanNvbmAsIGJ1dCBub3QgYC9hcGkvdGVzdC9kYXRhLnB5
YC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRjaCBncm91cHMsIGFuZCBh
bnl0aGluZyBtYXRjaGluZyB0aGUgKiBhcmUgbWFkZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF2YWlsYWJsZSBpbiB0aGUgcmVxdWVzdCBvYmplY3QgYXMgYSBkaWN0aW9uYXJ5IHRocm91
Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcm91dGVfbWF0Y2ggcHJvcGVydHku
IEZvciBleGFtcGxlLCBnaXZlbiB0aGUgcm91dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXR0ZXJuIGFib3ZlIGFuZCB0aGUgcGF0aCBgL2FwaS90ZXN0L2RhdGEuanNvbmAsIHRoZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlX21hdGNoIHByb3BlcnR5IHdvdWxkIGNv
bnRhaW46OgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsicmVzb3VyY2UiOiAi
dGVzdCIsICIqIjogImRhdGEifQorCisgICAgICAgIDpwYXJhbSBoYW5kbGVyOiBGdW5jdGlvbiB0
aGF0IHdpbGwgYmUgY2FsbGVkIHRvIHByb2Nlc3MgbWF0Y2hpbmcKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3RzLiBUaGlzIG11c3QgdGFrZSB0d28gcGFyYW1ldGVycywgdGhlIHJlcXVl
c3QKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBhbmQgdGhlIHJlc3BvbnNlIG9iamVj
dC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHR5cGUobWV0aG9kcykgaW4gdHlwZXMuU3RyaW5n
VHlwZXMgb3IgbWV0aG9kcyBpcyBhbnlfbWV0aG9kOgorICAgICAgICAgICAgbWV0aG9kcyA9IFtt
ZXRob2RzXQorICAgICAgICBmb3IgbWV0aG9kIGluIG1ldGhvZHM6CisgICAgICAgICAgICBzZWxm
LnJvdXRlcy5hcHBlbmQoKG1ldGhvZCwgY29tcGlsZV9wYXRoX21hdGNoKHBhdGgpLCBoYW5kbGVy
KSkKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYucm91dGVzWy0xXVsxXS5wYXR0ZXJuKQor
CisgICAgZGVmIGdldF9oYW5kbGVyKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICAiIiJHZXQgYSBo
YW5kbGVyIGZvciBhIHJlcXVlc3Qgb3IgTm9uZSBpZiB0aGVyZSBpcyBubyBoYW5kbGVyLgorCisg
ICAgICAgIDpwYXJhbSByZXF1ZXN0OiBSZXF1ZXN0IHRvIGdldCBhIGhhbmRsZXIgZm9yLgorICAg
ICAgICA6cnR5cGU6IENhbGxhYmxlIG9yIE5vbmUKKyAgICAgICAgIiIiCisgICAgICAgIGZvciBt
ZXRob2QsIHJlZ2V4cCwgaGFuZGxlciBpbiByZXZlcnNlZChzZWxmLnJvdXRlcyk6CisgICAgICAg
ICAgICBpZiAocmVxdWVzdC5tZXRob2QgPT0gbWV0aG9kIG9yCisgICAgICAgICAgICAgICAgbWV0
aG9kIGlzIGFueV9tZXRob2Qgb3IKKyAgICAgICAgICAgICAgICAocmVxdWVzdC5tZXRob2QgPT0g
IkhFQUQiIGFuZCBtZXRob2QgPT0gIkdFVCIpKToKKyAgICAgICAgICAgICAgICBtID0gcmVnZXhw
Lm1hdGNoKHJlcXVlc3QudXJsX3BhcnRzLnBhdGgpCisgICAgICAgICAgICAgICAgaWYgbToKKyAg
ICAgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoaGFuZGxlciwgIl9fY2xhc3NfXyIpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGhhbmRsZXIuX19uYW1lX18KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBoYW5kbGVy
Ll9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkZv
dW5kIGhhbmRsZXIgJXMiICUgbmFtZSkKKworICAgICAgICAgICAgICAgICAgICBtYXRjaF9wYXJ0
cyA9IG0uZ3JvdXBkaWN0KCkuY29weSgpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihtYXRj
aF9wYXJ0cykgPCBsZW4obS5ncm91cHMoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRj
aF9wYXJ0c1siKiJdID0gbS5ncm91cHMoKVstMV0KKyAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dC5yb3V0ZV9tYXRjaCA9IG1hdGNoX3BhcnRzCisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGhhbmRsZXIKKyAgICAgICAgcmV0dXJuIE5vbmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9yb3V0
ZXMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMv
d3B0c2VydmUvd3B0c2VydmUvcm91dGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyYmRjZmIzMGVmZDY0Yzk0
ZGJmOWRkOTExMzdmYWIyYzYzMTA3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvcm91
dGVzLnB5CkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IGhhbmRsZXJzCitmcm9tIHJvdXRlciBpbXBv
cnQgYW55X21ldGhvZAorcm91dGVzID0gWyhhbnlfbWV0aG9kLCAiKi5weSIsIGhhbmRsZXJzLnB5
dGhvbl9zY3JpcHRfaGFuZGxlciksCisgICAgICAgICAgKCJHRVQiLCAiKi5hc2lzIiwgaGFuZGxl
cnMuYXNfaXNfaGFuZGxlciksCisgICAgICAgICAgKCJHRVQiLCAiKiIsIGhhbmRsZXJzLmZpbGVf
aGFuZGxlciksCisgICAgICAgICAgXQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3NlcnZlci5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2
ZS93cHRzZXJ2ZS9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA0M2E0MzdhMjExMjUzZGIyOWNlOTcx
ZDRkOTNjYjNkN2JiZWRlYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9zZXJ2ZXIucHkK
QEAgLTAsMCArMSwzMjQgQEAKK2ltcG9ydCBCYXNlSFRUUFNlcnZlcgoraW1wb3J0IGVycm5vCitp
bXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzb2NrZXQKK2Zyb20g
U29ja2V0U2VydmVyIGltcG9ydCBUaHJlYWRpbmdNaXhJbgoraW1wb3J0IHNzbAoraW1wb3J0IHN5
cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHR5cGVzCitpbXBv
cnQgdXJscGFyc2UKKworZnJvbSByZXF1ZXN0IGltcG9ydCBTZXJ2ZXIsIFJlcXVlc3QKK2Zyb20g
cmVzcG9uc2UgaW1wb3J0IFJlc3BvbnNlCitmcm9tIHJvdXRlciBpbXBvcnQgUm91dGVyCitpbXBv
cnQgcm91dGVzCitmcm9tIHV0aWxzIGltcG9ydCBIVFRQRXhjZXB0aW9uCisKKworbG9nZ2VyID0g
bG9nZ2luZy5nZXRMb2dnZXIoIndwdHNlcnZlIikKK2xvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRF
QlVHKQorCisiIiJIVFRQIHNlcnZlciBkZXNpZ25lZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwor
VGhlIHNlcnZlciBpcyBkZXNpZ25lZCB0byBwcm92aWRlIGZsZXhpYmlsaXR5IGluIHRoZSB3YXkg
dGhhdAorcmVxdWVzdHMgYXJlIGhhbmRsZWQsIGFuZCB0byBwcm92aWRlIGNvbnRyb2wgYm90aCBv
ZiBleGFjdGx5Cit3aGF0IGJ5dGVzIGFyZSBwdXQgb24gdGhlIHdpcmUgZm9yIHRoZSByZXNwb25z
ZSwgYW5kIGluIHRoZQordGltaW5nIG9mIHNlbmRpbmcgdGhvc2UgYnl0ZXMuCisKK1RoZSBzZXJ2
ZXIgaXMgYmFzZWQgb24gdGhlIHN0ZGxpYiBIVFRQU2VydmVyLCBidXQgd2l0aCBzb21lCitub3Rh
YmxlIGRpZmZlcmVuY2VzIGluIHRoZSB3YXkgdGhhdCByZXF1ZXN0cyBhcmUgcHJvY2Vzc2VkLgor
T3ZlcmFsbCBwcm9jZXNzaW5nIGlzIGhhbmRsZWQgYnkgYSBXZWJUZXN0UmVxdWVzdEhhbmRsZXIs
Cit3aGljaCBpcyBhIHN1YmNsYXNzIG9mIEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuIFRoaXMgaXMg
cmVzcG9uc2libGUKK2ZvciBwYXJzaW5nIHRoZSBpbmNvbWluZyByZXF1ZXN0LiBBIFJlcXVlc3RS
ZXdyaXRlciBpcyB0aGVuCithcHBsaWVkIGFuZCBtYXkgY2hhbmdlIHRoZSByZXF1ZXN0IGRhdGEg
aWYgaXQgbWF0Y2hlcyBhCitzdXBwbGllZCBydWxlLgorCitPbmNlIHRoZSByZXF1ZXN0IGRhdGEg
aGFkIGJlZW4gZmluYWxpc2VkLCBSZXF1ZXN0IGFuZCBSZXBvbnNlCitvYmplY3RzIGFyZSBjb25z
dHJ1Y3RlZC4gVGhlc2UgYXJlIHVzZWQgYnkgdGhlIG90aGVyIHBhcnRzIG9mIHRoZQorc3lzdGVt
IHRvIHJlYWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QgYW5kIG1hbmlwdWxhdGUgdGhl
CityZXNwb25zZS4KKworRWFjaCByZXF1ZXN0IGlzIGhhbmRsZWQgYnkgYSBwYXJ0aWN1bGFyIGhh
bmRsZXIgZnVuY3Rpb24uIFRoZQorbWFwcGluZyBiZXR3ZWVuIFJlcXVlc3QgYW5kIHRoZSBhcHBy
b3ByaWF0ZSBoYW5kbGVyIGlzIGRldGVybWluZWQKK2J5IGEgUm91dGVyLiBCeSBkZWZhdWx0IGhh
bmRsZXJzIGFyZSBpbnN0YWxsZWQgdG8gaW50ZXJwcmV0IGZpbGVzCit1bmRlciB0aGUgZG9jdW1l
bnQgcm9vdCB3aXRoIC5weSBleHRlbnNpb25zIGFzIGV4ZWN1dGFibGUgcHl0aG9uCitmaWxlcyAo
c2VlIGhhbmRsZXJzLnB5IGZvciB0aGUgYXBpIGZvciBzdWNoIGZpbGVzKSwgLmFzaXMgZmlsZXMg
YXMKK2J5dGVzdHJlYW1zIHRvIGJlIHNlbnQgbGl0ZXJhbGx5IGFuZCBhbGwgb3RoZXIgZmlsZXMg
dG8gYmUgc2VydmVkCitzdGF0aWNhbGx5LgorCitUaGUgaGFuZGxlciBmdW5jdGlvbnMgYXJlIHJl
c3BvbnNpYmxlIGZvciBlaXRoZXIgcG9wdWxhdGluZyB0aGUKK2ZpZWxkcyBvZiB0aGUgcmVzcG9u
c2Ugb2JqZWN0LCB3aGljaCB3aWxsIHRoZW4gYmUgd3JpdHRlbiB3aGVuIHRoZQoraGFuZGxlciBy
ZXR1cm5zLCBvciBmb3IgZGlyZWN0bHkgd3JpdGluZyB0byB0aGUgb3V0cHV0IHN0cmVhbS4KKyIi
IgorCisKK2NsYXNzIFJlcXVlc3RSZXdyaXRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBydWxlcyk6CisgICAgICAgICIiIk9iamVjdCBmb3IgcmV3cml0aW5nIHRoZSByZXF1ZXN0
IHBhdGguCisKKyAgICAgICAgOnBhcmFtIHJ1bGVzOiBJbml0aWFsIHJ1bGVzIHRvIGFkZDsgYSBs
aXN0IG9mIHRocmVlIGl0ZW0gdHVwbGVzCisgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZCwg
aW5wdXRfcGF0aCwgb3V0cHV0X3BhdGgpLCBkZWZpbmVkIGFzIGZvcgorICAgICAgICAgICAgICAg
ICAgICAgIHJlZ2lzdGVyKCkKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucnVsZXMgPSB7fQor
ICAgICAgICBmb3IgcnVsZSBpbiByZXZlcnNlZChydWxlcyk6CisgICAgICAgICAgICBzZWxmLnJl
Z2lzdGVyKCpydWxlKQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIG1ldGhvZHMsIGlucHV0X3Bh
dGgsIG91dHB1dF9wYXRoKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSByZXdyaXRlIHJ1bGUuCisK
KyAgICAgICAgOnBhcmFtIG1ldGhvZHM6IFNldCBvZiBtZXRob2RzIHRoaXMgc2hvdWxkIG1hdGNo
LiAiKiIgaXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCB2YWx1ZSBpbmRpY2F0
aW5nIHRoYXQgYWxsIG1ldGhvZHMgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICBiZSBt
YXRjaGVkLgorCisgICAgICAgIDpwYXJhbSBpbnB1dF9wYXRoOiBQYXRoIHRvIG1hdGNoIGZvciB0
aGUgaW5pdGlhbCByZXF1ZXN0LgorCisgICAgICAgIDpwYXJhbSBvdXRwdXRfcGF0aDogUGF0aCB0
byByZXBsYWNlIHRoZSBpbnB1dCBwYXRoIHdpdGggaW4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGUgcmVxdWVzdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHR5cGUobWV0aG9kcykg
aW4gdHlwZXMuU3RyaW5nVHlwZXM6CisgICAgICAgICAgICBtZXRob2RzID0gW21ldGhvZHNdCisg
ICAgICAgIHNlbGYucnVsZXNbaW5wdXRfcGF0aF0gPSAobWV0aG9kcywgb3V0cHV0X3BhdGgpCisK
KyAgICBkZWYgcmV3cml0ZShzZWxmLCByZXF1ZXN0X2hhbmRsZXIpOgorICAgICAgICAiIiJSZXdy
aXRlIHRoZSBwYXRoIGluIGEgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciBpbnN0YW5jZSwgaWYKKyAg
ICAgICAgICAgaXQgbWF0Y2hlcyBhIHJ1bGUuCisKKyAgICAgICAgOnBhcmFtIHJlcXVlc3RfaGFu
ZGxlcjogQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciBmb3Igd2hpY2ggdG8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV3cml0ZSB0aGUgcmVxdWVzdC4KKyAgICAgICAgIiIiCisgICAg
ICAgIGlmIHJlcXVlc3RfaGFuZGxlci5wYXRoIGluIHNlbGYucnVsZXM6CisgICAgICAgICAgICBt
ZXRob2RzLCBkZXN0aW5hdGlvbiA9IHNlbGYucnVsZXNbcmVxdWVzdF9oYW5kbGVyLnBhdGhdCisg
ICAgICAgICAgICBpZiAiKiIgaW4gbWV0aG9kcyBvciByZXF1ZXN0X2hhbmRsZXIuY29tbWFuZCBp
biBtZXRob2RzOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiUmV3cml0aW5nIHJlcXVl
c3QgcGF0aCAlcyB0byAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVz
dF9oYW5kbGVyLnBhdGgsIGRlc3RpbmF0aW9uKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0X2hh
bmRsZXIucGF0aCA9IGRlc3RpbmF0aW9uCisKKworY2xhc3MgV2ViVGVzdFNlcnZlcihUaHJlYWRp
bmdNaXhJbiwgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcik6CisgICAgYWxsb3dfcmV1c2VfYWRk
cmVzcyA9IFRydWUKKyAgICBhY2NlcHRhYmxlX2Vycm9ycyA9IChlcnJuby5FUElQRSwgZXJybm8u
RUNPTk5BQk9SVEVEKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9hZGRyZXNzLCBS
ZXF1ZXN0SGFuZGxlckNsYXNzLCByb3V0ZXIsIHJld3JpdGVyLCBjb25maWc9Tm9uZSwKKyAgICAg
ICAgICAgICAgICAgdXNlX3NzbD1GYWxzZSwgY2VydGlmaWNhdGU9Tm9uZSwgKiprd2FyZ3MpOgor
ICAgICAgICAiIiJTZXJ2ZXIgZm9yIEhUVFAocykgUmVxdWVzdHMKKworICAgICAgICA6cGFyYW0g
c2VydmVyX2FkZHJlc3M6IHR1cGxlIG9mIChzZXJ2ZXJfbmFtZSwgcG9ydCkKKworICAgICAgICA6
cGFyYW0gUmVxdWVzdEhhbmRsZXJDbGFzczogQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci1saWtlIGNs
YXNzIHRvIHVzZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRs
aW5nIHJlcXVlc3RzLgorCisgICAgICAgIDpwYXJhbSByb3V0ZXI6IFJvdXRlciBpbnN0YW5jZSB0
byB1c2UgZm9yIG1hdGNoaW5nIHJlcXVlc3RzIHRvIGhhbmRsZXIKKyAgICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb25zCisKKyAgICAgICAgOnBhcmFtIHJld3JpdGVyOiBSZXF1ZXN0UmV3cml0
ZXItbGlrZSBpbnN0YW5jZSB0byB1c2UgZm9yIHByZXByb2Nlc3NpbmcKKyAgICAgICAgICAgICAg
ICAgICAgICAgICByZXF1ZXN0cyBiZWZvcmUgdGhleSBhcmUgcm91dGVkCisKKyAgICAgICAgOnBh
cmFtIGNvbmZpZzogRGljdGlvbmFyeSBob2xkaW5nIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24g
c2V0dGluZ3MgZm9yCisgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzIHRvIHJlYWQsIG9y
IE5vbmUgdG8gdXNlIHRoZSBkZWZhdWx0IHZhbHVlcy4KKworICAgICAgICA6cGFyYW0gdXNlX3Nz
bDogQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNlcnZlciBzaG91bGQgdXNlIFNTTAor
CisgICAgICAgIDpjZXJ0aWZpY2F0ZTogQ2VydGlmaWNhdGUgdG8gdXNlIGlmIFNTTCBpcyBlbmFi
bGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5yb3V0ZXIgPSByb3V0ZXIKKyAgICAgICAg
c2VsZi5yZXdyaXRlciA9IHJld3JpdGVyCisKKyAgICAgICAgc2VsZi5zY2hlbWUgPSAiaHR0cHMi
IGlmIHVzZV9zc2wgZWxzZSAiaHR0cCIKKworICAgICAgICAjc3VwZXIgZG9lc24ndCB3b3JrIGhl
cmUgYmVjYXVzZSBCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyIGlzIG9sZC1zdHlsZQorICAgICAg
ICBCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyLl9faW5pdF9fKHNlbGYsIHNlcnZlcl9hZGRyZXNz
LCBSZXF1ZXN0SGFuZGxlckNsYXNzLCAqKmt3YXJncykKKworICAgICAgICBpZiBjb25maWcgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBTZXJ2ZXIuY29uZmlnID0gY29uZmlnCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIlVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlv
biIpCisgICAgICAgICAgICBTZXJ2ZXIuY29uZmlnID0geyJob3N0Ijogc2VydmVyX2FkZHJlc3Nb
MF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkb21haW5zIjogeyIiOiBzZXJ2ZXJf
YWRkcmVzc1swXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3J0cyI6IHsiaHR0
cCI6IFtzZWxmLnNlcnZlcl9hZGRyZXNzWzFdXX19CisKKyAgICAgICAgaWYgdXNlX3NzbDoKKyAg
ICAgICAgICAgIHNlbGYuc29ja2V0ID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29ja2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Y2VydGlmaWNh
dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lk
ZT1UcnVlKQorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRk
cmVzcyk6CisgICAgICAgIGVycm9yID0gc3lzLmV4Y192YWx1ZQorCisgICAgICAgIGlmICgoaXNp
bnN0YW5jZShlcnJvciwgc29ja2V0LmVycm9yKSBhbmQKKyAgICAgICAgICAgICBpc2luc3RhbmNl
KGVycm9yLmFyZ3MsIHR1cGxlKSBhbmQKKyAgICAgICAgICAgICBlcnJvci5hcmdzWzBdIGluIHNl
bGYuYWNjZXB0YWJsZV9lcnJvcnMpCisgICAgICAgICAgICBvcgorICAgICAgICAgICAgKGlzaW5z
dGFuY2UoZXJyb3IsIElPRXJyb3IpIGFuZAorICAgICAgICAgICAgIGVycm9yLmVycm5vIGluIHNl
bGYuYWNjZXB0YWJsZV9lcnJvcnMpKToKKyAgICAgICAgICAgIHBhc3MgICMgcmVtb3RlIGhhbmcg
dXAgYmVmb3JlIHRoZSByZXN1bHQgaXMgc2VudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
bG9nZ2VyLmVycm9yKHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisKKworY2xhc3MgV2ViVGVzdFJl
cXVlc3RIYW5kbGVyKEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIpOgorICAg
ICIiIlJlcXVlc3RIYW5kbGVyIGZvciBXZWJUZXN0SHR0cGQiIiIKKworICAgIGRlZiBoYW5kbGVf
b25lX3JlcXVlc3Qoc2VsZik6CisgICAgICAgIHJlc3BvbnNlID0gTm9uZQorICAgICAgICB0cnk6
CisgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSBGYWxzZQorICAgICAgICAgICAg
cmVxdWVzdF9saW5lX2lzX3ZhbGlkID0gc2VsZi5nZXRfcmVxdWVzdF9saW5lKCkKKworICAgICAg
ICAgICAgaWYgc2VsZi5jbG9zZV9jb25uZWN0aW9uOgorICAgICAgICAgICAgICAgIHJldHVybgor
CisgICAgICAgICAgICByZXF1ZXN0X2lzX3ZhbGlkID0gc2VsZi5wYXJzZV9yZXF1ZXN0KCkKKyAg
ICAgICAgICAgIGlmIG5vdCByZXF1ZXN0X2lzX3ZhbGlkOgorICAgICAgICAgICAgICAgICNwYXJz
ZV9yZXF1ZXN0KCkgYWN0dWFsbHkgc2VuZHMgaXRzIG93biBlcnJvciByZXNwb25zZXMKKyAgICAg
ICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucmV3cml0ZXIucmV3
cml0ZShzZWxmKQorCisgICAgICAgICAgICByZXF1ZXN0ID0gUmVxdWVzdChzZWxmKQorICAgICAg
ICAgICAgcmVzcG9uc2UgPSBSZXNwb25zZShzZWxmLCByZXF1ZXN0KQorCisgICAgICAgICAgICBp
ZiBub3QgcmVxdWVzdF9saW5lX2lzX3ZhbGlkOgorICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNl
dF9lcnJvcig0MTQpCisgICAgICAgICAgICAgICAgcmVzcG9uc2Uud3JpdGUoKQorICAgICAgICAg
ICAgICAgIHJldHVybgorCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVzICVzIiAlIChyZXF1
ZXN0Lm1ldGhvZCwgcmVxdWVzdC5yZXF1ZXN0X3BhdGgpKQorICAgICAgICAgICAgaGFuZGxlciA9
IHNlbGYuc2VydmVyLnJvdXRlci5nZXRfaGFuZGxlcihyZXF1ZXN0KQorICAgICAgICAgICAgaWYg
aGFuZGxlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldF9lcnJvcig0MDQp
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlcihyZXF1ZXN0LCByZXNwb25zZSkKKyAgICAgICAgICAgICAgICBleGNlcHQg
SFRUUEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRfZXJy
b3IoZS5jb2RlLCBlLm1lc3NhZ2UpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBh
cyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLm1lc3NhZ2U6CisgICAgICAgICAgICAgICAg
ICAgICAgICBlcnIgPSBlLm1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVyciA9IHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKyAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2Uuc2V0X2Vycm9yKDUwMCwgZXJyKQorICAgICAgICAgICAgbG9n
Z2VyLmluZm8oIiVpICVzICVzICVpIiAlIChyZXNwb25zZS5zdGF0dXNbMF0sIHJlcXVlc3QubWV0
aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnJl
cXVlc3RfcGF0aCwgcmVxdWVzdC5yYXdfaW5wdXQubGVuZ3RoKSkKKyAgICAgICAgICAgIGlmIG5v
dCByZXNwb25zZS53cml0ZXIuY29udGVudF93cml0dGVuOgorICAgICAgICAgICAgICAgIHJlc3Bv
bnNlLndyaXRlKCkKKworICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQsIGU6CisgICAgICAg
ICAgICBzZWxmLmxvZ19lcnJvcigiUmVxdWVzdCB0aW1lZCBvdXQ6ICVyIiwgZSkKKyAgICAgICAg
ICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAg
ICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGVyciA9IHRyYWNlYmFjay5m
b3JtYXRfZXhjKCkKKyAgICAgICAgICAgIGlmIHJlc3BvbnNlOgorICAgICAgICAgICAgICAgIHJl
c3BvbnNlLnNldF9lcnJvcig1MDAsIGVycikKKyAgICAgICAgICAgICAgICByZXNwb25zZS53cml0
ZSgpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoZXJyKQorCisgICAgZGVmIGdldF9yZXF1ZXN0
X2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYucmF3X3JlcXVlc3RsaW5lID0gc2VsZi5yZmlsZS5y
ZWFkbGluZSg2NTUzNykKKyAgICAgICAgaWYgbGVuKHNlbGYucmF3X3JlcXVlc3RsaW5lKSA+IDY1
NTM2OgorICAgICAgICAgICAgICAgIHNlbGYucmVxdWVzdGxpbmUgPSAnJworICAgICAgICAgICAg
ICAgIHNlbGYucmVxdWVzdF92ZXJzaW9uID0gJycKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1h
bmQgPSAnJworICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBub3Qgc2Vs
Zi5yYXdfcmVxdWVzdGxpbmU6CisgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSAx
CisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgV2ViVGVzdEh0dHBkKG9iamVjdCk6Cisg
ICAgIiIiCisgICAgOnBhcmFtIGhvc3Q6IEhvc3QgZnJvbSB3aGljaCB0byBzZXJ2ZSAoZGVmYXVs
dDogMTI3LjAuMC4xKQorICAgIDpwYXJhbSBwb3J0OiBQb3J0IGZyb20gd2hpY2ggdG8gc2VydmUg
KGRlZmF1bHQ6IDgwMDApCisgICAgOnBhcmFtIHNlcnZlcl9jbHM6IENsYXNzIHRvIHVzZSBmb3Ig
dGhlIHNlcnZlciAoZGVmYXVsdCBkZXBlbmRzIG9uIHNzbCB2cyBub24tc3NsKQorICAgIDpwYXJh
bSBoYW5kbGVyX2NsczogQ2xhc3MgdG8gdXNlIGZvciB0aGUgUmVxdWVzdEhhbmRsZXIKKyAgICA6
cGFyYW0gdXNlX3NzbDogVXNlIGEgU1NMIHNlcnZlciBpZiBubyBleHBsaWNpdCBzZXJ2ZXJfY2xz
IGlzIHN1cHBsaWVkCisgICAgOnBhcmFtIGNlcnRpZmljYXRlOiBDZXJ0aWZpY2F0ZSBmaWxlIHRv
IHVzZSBpZiBzc2wgaXMgZW5hYmxlZAorICAgIDpwYXJhbSByb3V0ZXJfY2xzOiBSb3V0ZXIgY2xh
c3MgdG8gdXNlIHdoZW4gbWF0Y2hpbmcgVVJMcyB0byBoYW5kbGVycworICAgIDpwYXJhbSBkb2Nf
cm9vdDogRG9jdW1lbnQgcm9vdCBmb3Igc2VydmluZyBmaWxlcworICAgIDpwYXJhbSByb3V0ZXM6
IExpc3Qgb2Ygcm91dGVzIHdpdGggd2hpY2ggdG8gaW5pdGlhbGl6ZSB0aGUgcm91dGVyCisgICAg
OnBhcmFtIHJld3JpdGVyX2NsczogQ2xhc3MgdG8gdXNlIGZvciByZXF1ZXN0IHJld3JpdGVyCisg
ICAgOnBhcmFtIHJld3JpdGVzOiBMaXN0IG9mIHJld3JpdGVzIHdpdGggd2hpY2ggdG8gaW5pdGlh
bGl6ZSB0aGUgcmV3cml0ZXJfY2xzCisgICAgOnBhcmFtIGNvbmZpZzogRGljdGlvbmFyeSBob2xk
aW5nIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yCisgICAgICAgICAgICAg
ICAgICAgaGFuZGxlcnMgdG8gcmVhZCwgb3IgTm9uZSB0byB1c2UgdGhlIGRlZmF1bHQgdmFsdWVz
LgorCisgICAgSFRUUCBzZXJ2ZXIgZGVzaWduZWQgZm9yIHRlc3Rpbmcgc2NlbmFyaW9zLgorCisg
ICAgVGFrZXMgYSByb3V0ZXIgY2xhc3Mgd2hpY2ggcHJvdmlkZXMgb25lIG1ldGhvZCBnZXRfaGFu
ZGxlciB3aGljaCB0YWtlcyBhIFJlcXVlc3QKKyAgICBhbmQgcmV0dXJucyBhIGhhbmRsZXIgZnVu
Y3Rpb24uIgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0PSIxMjcuMC4wLjEi
LCBwb3J0PTgwMDAsCisgICAgICAgICAgICAgICAgIHNlcnZlcl9jbHM9Tm9uZSwgaGFuZGxlcl9j
bHM9V2ViVGVzdFJlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICB1c2Vfc3NsPUZhbHNl
LCBjZXJ0aWZpY2F0ZT1Ob25lLCByb3V0ZXJfY2xzPVJvdXRlciwKKyAgICAgICAgICAgICAgICAg
ZG9jX3Jvb3Q9b3MuY3VyZGlyLCByb3V0ZXM9cm91dGVzLnJvdXRlcywKKyAgICAgICAgICAgICAg
ICAgcmV3cml0ZXJfY2xzPVJlcXVlc3RSZXdyaXRlciwgcmV3cml0ZXM9Tm9uZSwKKyAgICAgICAg
ICAgICAgICAgY29uZmlnPU5vbmUpOgorCisgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKKworICAg
ICAgICBzZWxmLnJvdXRlciA9IHJvdXRlcl9jbHMoZG9jX3Jvb3QsIHJvdXRlcykKKyAgICAgICAg
c2VsZi5yZXdyaXRlciA9IHJld3JpdGVyX2NscyhyZXdyaXRlcyBpZiByZXdyaXRlcyBpcyBub3Qg
Tm9uZSBlbHNlIFtdKQorCisgICAgICAgIHNlbGYudXNlX3NzbCA9IHVzZV9zc2wKKworICAgICAg
ICBpZiBzZXJ2ZXJfY2xzIGlzIE5vbmU6CisgICAgICAgICAgICBzZXJ2ZXJfY2xzID0gV2ViVGVz
dFNlcnZlcgorCisgICAgICAgIGlmIHVzZV9zc2w6CisgICAgICAgICAgICBhc3NlcnQgY2VydGlm
aWNhdGUgaXMgbm90IE5vbmUgYW5kIG9zLnBhdGguZXhpc3RzKGNlcnRpZmljYXRlKQorCisgICAg
ICAgIHNlbGYuaHR0cGQgPSBzZXJ2ZXJfY2xzKChob3N0LCBwb3J0KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlcl9jbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYucm91dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnJld3JpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc9Y29uZmln
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Vfc3NsPXVzZV9zc2wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlPWNlcnRpZmljYXRlKQorICAg
ICAgICBzZWxmLnN0YXJ0ZWQgPSBGYWxzZQorCisgICAgICAgIF9ob3N0LCBzZWxmLnBvcnQgPSBz
ZWxmLmh0dHBkLnNvY2tldC5nZXRzb2NrbmFtZSgpCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgYmxv
Y2s9RmFsc2UpOgorICAgICAgICAiIiJTdGFydCB0aGUgc2VydmVyLgorCisgICAgICAgIDpwYXJh
bSBibG9jazogVHJ1ZSB0byBydW4gdGhlIHNlcnZlciBvbiB0aGUgY3VycmVudCB0aHJlYWQsIGJs
b2NraW5nLAorICAgICAgICAgICAgICAgICAgICAgIEZhbHNlIHRvIHJ1biBvbiBhIHNlcGFyYXRl
IHRocmVhZC4iIiIKKyAgICAgICAgbG9nZ2VyLmluZm8oIlN0YXJ0aW5nIGh0dHAgc2VydmVyIG9u
ICVzOiVzIiAlIChzZWxmLmhvc3QsIHNlbGYucG9ydCkpCisgICAgICAgIHNlbGYuc3RhcnRlZCA9
IFRydWUKKyAgICAgICAgaWYgYmxvY2s6CisgICAgICAgICAgICBzZWxmLmh0dHBkLnNlcnZlX2Zv
cmV2ZXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfdGhyZWFkID0g
dGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5odHRwZC5zZXJ2ZV9mb3JldmVyKQorICAgICAg
ICAgICAgc2VsZi5zZXJ2ZXJfdGhyZWFkLnNldERhZW1vbihUcnVlKSAgIyBkb24ndCBoYW5nIG9u
IGV4aXQKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX3RocmVhZC5zdGFydCgpCisKKyAgICBkZWYg
c3RvcChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN0b3BzIHRoZSBzZXJ2ZXIuCisKKyAg
ICAgICAgSWYgdGhlIHNlcnZlciBpcyBub3QgcnVubmluZywgdGhpcyBtZXRob2QgaGFzIG5vIGVm
ZmVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuc3RhcnRlZDoKKyAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmh0dHBkLnNodXRkb3duKCkKKyAgICAgICAgICAg
ICAgICBzZWxmLmh0dHBkLnNlcnZlcl9jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2
ZXJfdGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3RocmVhZCA9IE5v
bmUKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiU3RvcHBlZCBodHRwIHNlcnZlciBvbiAl
czolcyIgJSAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJp
YnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYuc3RhcnRl
ZCA9IEZhbHNlCisgICAgICAgIHNlbGYuaHR0cGQgPSBOb25lCisKKyAgICBkZWYgZ2V0X3VybChz
ZWxmLCBwYXRoPSIvIiwgcXVlcnk9Tm9uZSwgZnJhZ21lbnQ9Tm9uZSk6CisgICAgICAgIGlmIG5v
dCBzZWxmLnN0YXJ0ZWQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHJldHVy
biB1cmxwYXJzZS51cmx1bnNwbGl0KCgiaHR0cCIgaWYgbm90IHNlbGYudXNlX3NzbCBlbHNlICJo
dHRwcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6JXMiICUgKHNl
bGYuaG9zdCwgc2VsZi5wb3J0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhdGgsIHF1ZXJ5LCBmcmFnbWVudCkpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvc3Rhc2gucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvd3B0c2VydmUvdG9vbHMvd3B0c2Vy
dmUvd3B0c2VydmUvc3Rhc2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzliZGUzZDY5MjY4Yzg1ZmJlNDhkMjM0
MGUxOTZhOTU0OWMyMWQ4MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9zdGFzaC5weQpA
QCAtMCwwICsxLDg0IEBACitpbXBvcnQgdXVpZAorCisjVE9ETzogQ29uc2lkZXIgZXhwaXJpbmcg
dmFsdWVzIGFmdGVyIHNvbWUgZml4ZWQgdGltZSBmb3IgbG9uZy1ydW5uaW5nCisjc2VydmVycwor
CisKK2NsYXNzIFN0YXNoKG9iamVjdCk6CisgICAgIiIiS2V5LXZhbHVlIHN0b3JlIGZvciBwZXJz
aXN0aW5nIGRhdGEgYWNyb3NzIEhUVFAgcmVxdWVzdHMuCisKKyAgICBUaGlzIGRhdGEgc3RvcmUg
c3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBwZXJzaXN0aW5nIGRhdGEgYWNyb3NzCisgICAgSFRU
UCByZXF1ZXN0cy4gSXQgaXMgZW50aXJlbHkgaW4tbWVtb3J5IHNvIGRhdGEgd2lsbCBub3QgYmUK
KyAgICBwZXJzaXN0ZWQgYWNyb3NzIHNlcnZlciByZXN0YXJ0cy4KKworICAgIFRoaXMgaGFzIHNl
dmVyYWwgdW51c3VhbCBwcm9wZXJ0aWVzLiBLZXlzIGFyZSBvZiB0aGUgZm9ybSAocGF0aCwKKyAg
ICB1dWlkKSwgd2hlcmUgcGF0aCBpcywgYnkgZGVmYXVsdCwgdGhlIHBhdGggaW4gdGhlIEhUVFAg
cmVxdWVzdCBhbmQKKyAgICB1dWlkIGlzIGEgdW5pcXVlIGlkLiBJbiBhZGRpdGlvbiwgdGhlIHN0
b3JlIGlzIHdyaXRlLW9uY2UsIHJlYWQtb25jZSwKKyAgICBpLmUuIHRoZSB2YWx1ZSBhc3NvY2lh
dGVkIHdpdGggYSBwYXJ0aWN1bGFyIGtleSBjYW5ub3QgYmUgY2hhbmdlZCBvbmNlCisgICAgd3Jp
dHRlbiBhbmQgdGhlIHJlYWQgb3BlcmF0aW9uIChjYWxsZWQgInRha2UiKSBpcyBkZXN0cnVjdGl2
ZS4gVGFrZW4gdG9nZXRoZXIsCisgICAgdGhlc2UgcHJvcGVydGllcyBtYWtlIGl0IGRpZmZpY3Vs
dCBmb3IgZGF0YSB0byBhY2NpZGVudGFsbHkgbGVhaworICAgIGJldHdlZW4gZGlmZmVyZW50IHJl
c291cmNlcyBvciBkaWZmZXJlbnQgcmVxdWVzdHMgZm9yIHRoZSBzYW1lCisgICAgcmVzb3VyY2Uu
CisKKyAgICAiIiIKKworICAgIGRhdGEgPSB7fQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRl
ZmF1bHRfcGF0aCk6CisgICAgICAgIHNlbGYuZGVmYXVsdF9wYXRoID0gZGVmYXVsdF9wYXRoCisK
KyAgICBkZWYgcHV0KHNlbGYsIGtleSwgdmFsdWUsIHBhdGg9Tm9uZSk6CisgICAgICAgICIiIlBs
YWNlIGEgdmFsdWUgaW4gdGhlIHN0YXNoLgorCisgICAgICAgIDpwYXJhbSBrZXk6IEEgVVVJRCB0
byB1c2UgYXMgdGhlIGRhdGEncyBrZXkuCisgICAgICAgIDpwYXJhbSB2YWx1ZTogVGhlIGRhdGEg
dG8gc3RvcmUuIFRoaXMgY2FuIGJlIGFueSBweXRob24gb2JqZWN0LgorICAgICAgICA6cGFyYW0g
cGF0aDogVGhlIHBhdGggdGhhdCBoYXMgYWNjZXNzIHRvIHJlYWQgdGhlIGRhdGEgKGJ5IGRlZmF1
bHQKKyAgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IHJlcXVlc3QgcGF0aCkiIiIKKyAg
ICAgICAgaWYgcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgcGF0aCA9IHNlbGYuZGVmYXVsdF9w
YXRoCisgICAgICAgIGlmIHBhdGggbm90IGluIHNlbGYuZGF0YToKKyAgICAgICAgICAgIHNlbGYu
ZGF0YVtwYXRoXSA9IFBhdGhTdGFzaChwYXRoKQorCisgICAgICAgIHNlbGYuZGF0YVtwYXRoXVtr
ZXldID0gdmFsdWUKKworICAgIGRlZiB0YWtlKHNlbGYsIGtleSwgcGF0aD1Ob25lKToKKyAgICAg
ICAgIiIiUmVtb3ZlIGEgdmFsdWUgZnJvbSB0aGUgc3Rhc2ggYW5kIHJldHVybiBpdC4KKworICAg
ICAgICA6cGFyYW0ga2V5OiBBIFVVSUQgdG8gdXNlIGFzIHRoZSBkYXRhJ3Mga2V5LgorICAgICAg
ICA6cGFyYW0gcGF0aDogVGhlIHBhdGggdGhhdCBoYXMgYWNjZXNzIHRvIHJlYWQgdGhlIGRhdGEg
KGJ5IGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IHJlcXVlc3QgcGF0
aCkiIiIKKyAgICAgICAgaWYgcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgcGF0aCA9IHNlbGYu
ZGVmYXVsdF9wYXRoCisKKyAgICAgICAgaWYgcGF0aCBpbiBzZWxmLmRhdGE6CisgICAgICAgICAg
ICB2YWx1ZSA9IHNlbGYuZGF0YVtwYXRoXVtrZXldCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICB2YWx1ZSA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKworY2xhc3MgUGF0aFN0YXNo
KGRpY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5wYXRo
ID0gcGF0aAorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAg
ICBrZXkgPSB1dWlkLlVVSUQoa2V5KQorICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcigiU3Rhc2ggdmFsdWUgbWF5IG5vdCBiZSBzZXQgdG8gTm9u
ZSIpCisgICAgICAgIGlmIGtleSBpbiBzZWxmOgorICAgICAgICAgICAgcmFpc2UgU3Rhc2hFcnJv
cigiVHJpZWQgdG8gb3ZlcndyaXRlIGV4aXN0aW5nIHN0YXNoIHZhbHVlICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImZvciBwYXRoICVzIGFuZCBrZXkgJXMgKG9sZCB2YWx1ZSB3YXMg
JXMsIG5ldyB2YWx1ZSBpcyAlcykiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNl
bGYucGF0aCwga2V5LCBzZWxmW3N0cihrZXkpXSwgdmFsdWUpKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgZGljdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKQorCisgICAgZGVmIF9f
Z2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGtleSA9IHV1aWQuVVVJRChrZXkpCisgICAg
ICAgIHJ2ID0gZGljdC5nZXQoc2VsZiwga2V5LCBOb25lKQorICAgICAgICBpZiBydiBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgIGRlbCBzZWxmW2tleV0KKyAgICAgICAgcmV0dXJuIHJ2CisKKwor
Y2xhc3MgU3Rhc2hFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRz
ZXJ2ZS91dGlscy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2
ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTdmZjE5NmE4
YTcwYzBiOTc1N2M0NmYzNWE5ZGFmYzNlODkyZTMzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNlcnZlL3dwdHNl
cnZlL3V0aWxzLnB5CkBAIC0wLDAgKzEsMTQgQEAKK2RlZiBpbnZlcnRfZGljdChkaWN0KToKKyAg
ICBydiA9IHt9CisgICAgZm9yIGtleSwgdmFsdWVzIGluIGRpY3QuaXRlcml0ZW1zKCk6CisgICAg
ICAgIGZvciB2YWx1ZSBpbiB2YWx1ZXM6CisgICAgICAgICAgICBpZiB2YWx1ZSBpbiBydjoKKyAg
ICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICAgICBydlt2YWx1ZV0gPSBr
ZXkKKyAgICByZXR1cm4gcnYKKworCitjbGFzcyBIVFRQRXhjZXB0aW9uKEV4Y2VwdGlvbik6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvZGUsIG1lc3NhZ2U9IiIpOgorICAgICAgICBzZWxmLmNv
ZGUgPSBjb2RlCisgICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS93
cHRzZXJ2ZS93cHRzZXJ2ZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS93
cHRzZXJ2ZS90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS93cHRzZXJ2ZS5weQpuZXcgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
MTZjOGE1YTZhYWVjMmFlOTg1YzNmYjNjZWViZDEyNTlhNWE0ZjIzCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3dwdHNlcnZlL3Rvb2xzL3dwdHNl
cnZlL3dwdHNlcnZlL3dwdHNlcnZlLnB5CkBAIC0wLDAgKzEsMzMgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgoraW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgb3MKKworaW1wb3J0IHNlcnZlcgorCitk
ZWYgYWJzX3BhdGgocGF0aCk6CisgICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChwYXRoKQorCisK
K2RlZiBwYXJzZV9hcmdzKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIo
ZGVzY3JpcHRpb249IkhUVFAgc2VydmVyIGRlc2lnbmVkIGZvciBleHRyZW1lIGZsZXhpYmlsaXR5
ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZWQgaW4gdGVz
dGluZyBzaXR1YXRpb25zLiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiZG9jdW1lbnRfcm9v
dCIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPWFic19wYXRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0iUm9vdCBkaXJlY3RvcnkgdG8gc2VydmUgZmlsZXMgZnJvbSIpCisgICAgcGFyc2Vy
LmFkZF9hcmd1bWVudCgiLS1wb3J0IiwgIi1wIiwgZGVzdD0icG9ydCIsIGFjdGlvbj0ic3RvcmUi
LAorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1pbnQsIGRlZmF1bHQ9ODAwMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9IlBvcnQgbnVtYmVyIHRvIHJ1biBzZXJ2ZXIgb24iKQor
ICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0taG9zdCIsICItSCIsIGRlc3Q9Imhvc3QiLCBhY3Rp
b249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c3RyLCBkZWZhdWx0PSIx
MjcuMC4wLjEiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iSG9zdCB0byBydW4gc2Vy
dmVyIG9uIikKKyAgICByZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisKK2RlZiBtYWluKCk6
CisgICAgYXJncyA9IHBhcnNlX2FyZ3MoKQorICAgIGh0dHBkID0gc2VydmVyLldlYlRlc3RIdHRw
ZChob3N0PWFyZ3MuaG9zdCwgcG9ydD1hcmdzLnBvcnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVzZV9zc2w9RmFsc2UsIGNlcnRpZmljYXRlPU5vbmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY19yb290PWFyZ3MuZG9jdW1lbnRfcm9vdCkKKyAgICBodHRw
ZC5zdGFydCgpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222470</attachid>
            <date>2014-01-28 11:49:05 -0800</date>
            <delta_ts>2014-01-30 14:06:26 -0800</delta_ts>
            <desc>Functional version</desc>
            <filename>bug-127094-20140128204904.patch</filename>
            <type>text/plain</type>
            <size>23176</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYyNDUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDQxNmI2YjJlMzlhZjVjY2VlYjFkMTcxZmI3ZjA0N2Q0
NjM2YmNjYy4uNzg4YzA1ZWEyODVlZTU1OTAwMjA2OGFkNjc1NDM2OWE2ZGM0MDI4MyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2
IEBACisyMDE0LTAxLTI4ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uZkBnbWFpbC5jb20+CisKKyAg
ICAgICAgSW50ZWdyYXRlIFdQIHB5dGhvbiBzZXJ2ZXIgaW50byBXZWJLaXQgdGVzdCBmcmFtZXdv
cmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzA5
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgQWRkZWQgd3B0X3NlcnZlci5weSB0byBzdGFydCBhbmQgc3RvcCB3cHQgc2VydmVyIGFzIGEg
cHl0aG9uIHByb2Nlc3MgCisgICAgICAgIEFkZGVkIGxhdW5jaGVyLnB5LCB0aGUgcHl0aG9uIHNj
cmlwdCB0aGF0IGlzIGV4ZWN1dGVkIHdpdGhpbiB0aGUgcHl0aG9uIHByb2Nlc3MgdG8gcnVuIHRo
ZSB3cHQgc2VydmVyCisgICAgICAgIFVwZGF0ZWQgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgdG8g
c3RhcnQvc3RvcCBXUFQgc2VydmVyIGZvciBXUFQgc3BlY2lmaWMgdGVzdHMKKyAgICAgICAgQWRk
ZWQgdGhlIHBvc3NpYmlsaXR5IHRvIHBhcmFtZXRlcml6ZSB0aGUgV1BUIHNlcnZlciBjb25maWd1
cmF0aW9uIAorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJv
bGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5OiBsYXVuY2hzIHdwdCBzZXJ2ZXIgaWYgbmVlZGVk
CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKExheW91dFRl
c3RSdW5uZXIucnVuX3Rlc3RzKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuc3RhcnRfc2Vy
dmVyc193aXRoX2xvY2spOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5zdG9wX3NlcnZlcnNf
d2l0aF9sb2NrKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250
cm9sbGVycy9tYW5hZ2VyLnB5OiBkZXRlY3RzIHdwdCB0ZXN0cyBiYXNlZCBvbiB3cHRfc3ViZGly
IHZhcmlhYmxlIAorICAgICAgICAoTWFuYWdlci5fX2luaXRfXyk6CisgICAgICAgIChNYW5hZ2Vy
Ll9pc193cHRfdGVzdCk6CisgICAgICAgIChNYW5hZ2VyLl90ZXN0X3JlcXVpcmVzX2xvY2spOgor
ICAgICAgICAoTWFuYWdlci5fcnVuX3Rlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5OiBBZGRlZCB3cHQgc2VydmVyIHNwZWNp
ZmljIHBhcmFtZXRlcnMKKyAgICAgICAgKHBhcnNlX2FyZ3MpOgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd3B0L2xhdW5jaGVyLnB5OiBBZGRlZCAoc2Ny
aXB0IHRoYXQgaXMgZXhlY3V0ZWQgd2l0aGluIGEgcHJvY2VzcyB0byBjb25maWd1cmUgYW5kIHJ1
biB0aGUgd3B0IHNlcnZlcikuCisgICAgICAgIChtYWluKToKKyAgICAgICAgKHBhcnNlX2FyZ3Mp
OgorICAgICAgICAoV1BUTGF1bmNoZXIpOgorICAgICAgICAoV1BUTGF1bmNoZXIuX19pbml0X18p
OgorICAgICAgICAoV1BUTGF1bmNoZXIuc3RhcnQpOgorICAgICAgICAoaW1wb3J0X3dwdHNlcnZl
cik6CisgICAgICAgIChpbXBvcnRfd3B0c2VydmVyLkV4dGVybmFsUmVzb3VyY2VIYW5kbGVyKToK
KyAgICAgICAgKGltcG9ydF93cHRzZXJ2ZXIuRXh0ZXJuYWxSZXNvdXJjZUhhbmRsZXIuX19pbml0
X18pOgorICAgICAgICAoaW1wb3J0X3dwdHNlcnZlci5FeHRlcm5hbFJlc291cmNlSGFuZGxlci5f
X2NhbGxfXyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVy
cy93cHRfc2VydmVyLnB5OiBBZGRlZCAocmVzcG9uc2libGUgdG8gbGF1bmNoIGFuZCB0ZXJtaW5h
dGUgdGhlIHdwdCBzZXJ2ZXIgcHJvY2VzcykKKyAgICAgICAgKHRvKToKKyAgICAgICAgKFdQVEh0
dHBkKToKKyAgICAgICAgKFdQVEh0dHBkLl9faW5pdF9fKToKKyAgICAgICAgKFdQVEh0dHBkLl9z
ZXRfc3RhcnRfY21kKToKKyAgICAgICAgKFdQVEh0dHBkLl9wcmVwYXJlX2NvbmZpZyk6CisgICAg
ICAgIChXUFRIdHRwZC5fc3Bhd25fcHJvY2Vzcyk6CisgICAgICAgIChXUFRIdHRwZC5fc3RvcF9y
dW5uaW5nX3NlcnZlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6
IEFkZGVkIHN0YXJ0L3N0b3Agd3B0IHNlcnZlciBtZXRob2RzCisgICAgICAgIChQb3J0Ll9faW5p
dF9fKToKKyAgICAgICAgKFBvcnQudG8uc3RhcnRfd3B0X3NlcnZlcik6CisgICAgICAgIChQb3J0
LnRvLnN0b3Bfd3B0X3NlcnZlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Ry
aXZlci5weTogQWRkZWQgIG1hcHBpbmcgYmV0d2VlbiB3cHQgdGVzdCBuYW1lcyBhbmQgd3B0IHRl
c3QgdXJscworICAgICAgICAoRHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAgKERyaXZlci5pc193
cHRfdGVzdCk6CisgICAgICAgIChEcml2ZXIudGVzdF90b191cmkpOgorICAgICAgICAoRHJpdmVy
LnVyaV90b190ZXN0KToKKyAgICAgICAgKERyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1
dCk6CisKIDIwMTQtMDEtMjEgIENoYW5nU2VvayBPaCAgPGNoYW5nc2Vvay5vaEBjb2xsYWJvcmEu
Y29tPgogCiAgICAgICAgIFtHVEtdIEZpeCBhIGMrKzExIGNvbXBsaWFuY2UgaXNzdWUgZm9yIGZv
bnRjb25maWcKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQppbmRleCBk
YzA5ZWFkMGI1NTIxMmZiODZjNzdmZTU5NzI0OTM3ZmJiYjJhOTQ2Li4wZmU5M2JkNWQzNjAwMWQ2
MmU5NzQxY2FjMjZmOWZiMWVlNDM0ODlhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rl
c3RfcnVubmVyLnB5CkBAIC03NCwxNiArNzQsMTggQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lcihv
YmplY3QpOgogICAgICAgICBzZWxmLl90ZXN0X2lucHV0cyA9IFtdCiAgICAgICAgIHNlbGYuX25l
ZWRzX2h0dHAgPSBOb25lCiAgICAgICAgIHNlbGYuX25lZWRzX3dlYnNvY2tldHMgPSBOb25lCisg
ICAgICAgIHNlbGYuX25lZWRzX3dwdCA9IE5vbmUKICAgICAgICAgc2VsZi5fcmV0cnlpbmcgPSBG
YWxzZQogCiAgICAgICAgIHNlbGYuX2N1cnJlbnRfcnVuX3Jlc3VsdHMgPSBOb25lCiAgICAgICAg
IHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hhcmRzID0gW10KICAgICAgICAgc2VsZi5faGFzX2h0
dHBfbG9jayA9IEZhbHNlCiAKLSAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGV4cGVjdGF0aW9ucywg
dGVzdF9pbnB1dHMsIHRlc3RzX3RvX3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19odHRwLCBuZWVk
c193ZWJzb2NrZXRzLCByZXRyeWluZyk6CisgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBleHBlY3Rh
dGlvbnMsIHRlc3RfaW5wdXRzLCB0ZXN0c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0
cCwgbmVlZHNfd2Vic29ja2V0cywgbmVlZHNfd3B0LCByZXRyeWluZyk6CiAgICAgICAgIHNlbGYu
X2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucwogICAgICAgICBzZWxmLl90ZXN0X2lucHV0cyA9
IHRlc3RfaW5wdXRzCiAgICAgICAgIHNlbGYuX25lZWRzX2h0dHAgPSBuZWVkc19odHRwCisgICAg
ICAgIHNlbGYuX25lZWRzX3dwdCA9IG5lZWRzX3dwdAogICAgICAgICBzZWxmLl9uZWVkc193ZWJz
b2NrZXRzID0gbmVlZHNfd2Vic29ja2V0cwogICAgICAgICBzZWxmLl9yZXRyeWluZyA9IHJldHJ5
aW5nCiAKQEAgLTIwNiw2ICsyMDgsOSBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyKG9iamVjdCk6
CiAgICAgICAgIGlmIHNlbGYuX25lZWRzX3dlYnNvY2tldHM6CiAgICAgICAgICAgICBzZWxmLl9w
cmludGVyLndyaXRlX3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQogICAg
ICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgaWYg
c2VsZi5fbmVlZHNfd3B0OgorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUo
J1N0YXJ0aW5nIFdQVCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRf
d3B0X3NlcnZlcigpCiAgICAgICAgIHNlbGYuX2hhc19odHRwX2xvY2sgPSBUcnVlCiAKICAgICBk
ZWYgc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKQEAgLTIxNiw2ICsyMjEsOSBAQCBjbGFz
cyBMYXlvdXRUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICBpZiBzZWxmLl9uZWVkc193
ZWJzb2NrZXRzOgogICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdT
dG9wcGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCiAgICAgICAgICAgICAgICAgc2VsZi5fcG9y
dC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICAgICAgaWYgc2VsZi5fbmVlZHNfd3B0
OgorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdG9wcGluZyBX
UFQgc2VydmVyIC4uLicpCisgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX3dwdF9zZXJ2
ZXIoKQogICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1JlbGVhc2luZyBz
ZXJ2ZXIgbG9jayAuLi4nKQogICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxlYXNlX2h0dHBfbG9j
aygpCiAgICAgICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gRmFsc2UKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5h
Z2VyLnB5CmluZGV4IGUxYTA4ZWFmMjU0ZDcyMGVhYjczZTQ5N2VmMjZiNDJkYmZjZDMyNjYuLmUz
NjUxODMyOTA1YTk5ODdiNWU2NjUwOTY0YzdmZjlmNDFiZjNjMjEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdl
ci5weQpAQCAtNzksNiArNzksNyBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgIHNl
bGYuSFRUUF9TVUJESVIgPSAnaHR0cCcgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IKICAgICAg
ICAgc2VsZi5QRVJGX1NVQkRJUiA9ICdwZXJmJwogICAgICAgICBzZWxmLldFQlNPQ0tFVF9TVUJE
SVIgPSAnd2Vic29ja2V0JyArIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgorICAgICAgICBzZWxm
LndwdF9zdWJkaXIgPSBvcHRpb25zLndwdF9kaXIgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IK
ICAgICAgICAgc2VsZi5MQVlPVVRfVEVTVFNfRElSRUNUT1JZID0gJ0xheW91dFRlc3RzJwogCiAg
ICAgICAgICMgZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRvIGluc3RhbGwgcHlPcGVuU1NMIG9u
IGJ1aWxkYm90cy4KQEAgLTk4LDYgKzk5LDkgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAg
IGRlZiBfaXNfd2Vic29ja2V0X3Rlc3Qoc2VsZiwgdGVzdCk6CiAgICAgICAgIHJldHVybiBzZWxm
LldFQlNPQ0tFVF9TVUJESVIgaW4gdGVzdAogCisgICAgZGVmIF9pc193cHRfdGVzdChzZWxmLCB0
ZXN0KToKKyAgICAgICAgcmV0dXJuIHNlbGYud3B0X3N1YmRpciBpbiB0ZXN0CisKICAgICBkZWYg
X2h0dHBfdGVzdHMoc2VsZiwgdGVzdF9uYW1lcyk6CiAgICAgICAgIHJldHVybiBzZXQodGVzdCBm
b3IgdGVzdCBpbiB0ZXN0X25hbWVzIGlmIHNlbGYuX2lzX2h0dHBfdGVzdCh0ZXN0KSkKIApAQCAt
MTMxLDcgKzEzNSw3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgcnVubmluZyBt
dWx0aXBsZSBjb3BpZXMgb2YgTlJXVHMuIFBlcmYgdGVzdHMgYXJlIGxvY2tlZAogICAgICAgICBi
ZWNhdXNlIGhlYXZ5IGxvYWQgY2F1c2VkIGJ5IHJ1bm5pbmcgb3RoZXIgdGVzdHMgaW4gcGFyYWxs
ZWwKICAgICAgICAgbWlnaHQgY2F1c2Ugc29tZSBvZiB0aGVtIHRvIHRpbWVvdXQuIiIiCi0gICAg
ICAgIHJldHVybiBzZWxmLl9pc19odHRwX3Rlc3QodGVzdF9maWxlKSBvciBzZWxmLl9pc19wZXJm
X3Rlc3QodGVzdF9maWxlKQorICAgICAgICByZXR1cm4gc2VsZi5faXNfaHR0cF90ZXN0KHRlc3Rf
ZmlsZSkgb3Igc2VsZi5faXNfcGVyZl90ZXN0KHRlc3RfZmlsZSkgb3Igc2VsZi5faXNfd3B0X3Rl
c3QodGVzdF9maWxlKQogCiAgICAgZGVmIF90ZXN0X2lzX3Nsb3coc2VsZiwgdGVzdF9maWxlKToK
ICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucy5tb2RlbCgpLmhhc19tb2RpZmllcih0
ZXN0X2ZpbGUsIHRlc3RfZXhwZWN0YXRpb25zLlNMT1cpCkBAIC0yNDYsNiArMjUwLDcgQEAgY2xh
c3MgTWFuYWdlcihvYmplY3QpOgogCiAgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgdGVzdHNfdG9f
cnVuLCB0ZXN0c190b19za2lwLCByZXBlYXRfZWFjaCwgaXRlcmF0aW9ucywgbnVtX3dvcmtlcnMs
IHJldHJ5aW5nKToKICAgICAgICAgbmVlZHNfaHR0cCA9IGFueShzZWxmLl9pc19odHRwX3Rlc3Qo
dGVzdCkgZm9yIHRlc3QgaW4gdGVzdHNfdG9fcnVuKQorICAgICAgICBuZWVkc193cHQgPSBhbnko
c2VsZi5faXNfd3B0X3Rlc3QodGVzdCkgZm9yIHRlc3QgaW4gdGVzdHNfdG9fcnVuKQogICAgICAg
ICBuZWVkc193ZWJzb2NrZXRzID0gYW55KHNlbGYuX2lzX3dlYnNvY2tldF90ZXN0KHRlc3QpIGZv
ciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKIAogICAgICAgICB0ZXN0X2lucHV0cyA9IFtdCkBAIC0y
NTMsNyArMjU4LDcgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICAgICAgZm9yIHRl
c3QgaW4gdGVzdHNfdG9fcnVuOgogICAgICAgICAgICAgICAgIGZvciBfIGluIHhyYW5nZShyZXBl
YXRfZWFjaCk6CiAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5wdXRzLmFwcGVuZChzZWxmLl90
ZXN0X2lucHV0X2Zvcl9maWxlKHRlc3QpKQotICAgICAgICByZXR1cm4gc2VsZi5fcnVubmVyLnJ1
bl90ZXN0cyhzZWxmLl9leHBlY3RhdGlvbnMsIHRlc3RfaW5wdXRzLCB0ZXN0c190b19za2lwLCBu
dW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVlZHNfd2Vic29ja2V0cywgcmV0cnlpbmcpCisgICAg
ICAgIHJldHVybiBzZWxmLl9ydW5uZXIucnVuX3Rlc3RzKHNlbGYuX2V4cGVjdGF0aW9ucywgdGVz
dF9pbnB1dHMsIHRlc3RzX3RvX3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19odHRwLCBuZWVkc193
ZWJzb2NrZXRzLCBuZWVkc193cHQsIHJldHJ5aW5nKQogCiAgICAgZGVmIF9jbGVhbl91cF9ydW4o
c2VsZik6CiAgICAgICAgIF9sb2cuZGVidWcoIkZsdXNoaW5nIHN0ZG91dCIpCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5w
eQppbmRleCA2OGRjOGUzMWRmYjEyNjRkYmJmYTRiYWZhMWFlM2JmMzlmZjVlYmVmLi40ZGQ3ZGEy
Y2U1MWI1N2M4ZWUyYzgwYjgyZWRmODhiMGNmZTRlMWJkIDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTI4
OSw2ICsyODksMTcgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncyk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImNvbmZpZ3VyYXRpb25zLiBEb2VzIG5vdCBydW4gYW55IHRlc3RzLiIpKSwKICAg
ICBdKSkKIAorICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQoKCJXZWIgUGxhdGZv
cm0gVGVzdHMgT3B0aW9ucyIsIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0td3B0
LWRpciIsIHR5cGU9InN0cmluZyIsIGRlZmF1bHQ9b3MucGF0aC5qb2luKCJpbXBvcnRlZCIsICJ3
M2MiKSwKKyAgICAgICAgICAgIGhlbHA9KCJzZXQgd2ViIHBsYXRmb3JtIHNlcnZlciBkb2N1bWVu
dCByb290LCByZWxhdGl2ZSB0byBMYXlvdXRUZXN0cyBkaXJlY3RvcnkiKSksCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdwdC1wb3J0IiwgdHlwZT0iaW50IiwgZGVmYXVsdD04ODAw
LAorICAgICAgICAgICAgaGVscD0oInNldCB3ZWIgcGxhdGZvcm0gbWFpbiBIVFRQIHNlcnZlciBw
b3J0LiIpKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0td3B0LWhvc3RuYW1lIiwg
dHlwZT0ic3RyaW5nIiwgZGVmYXVsdD0ibG9jYWxob3N0IiwKKyAgICAgICAgICAgIGhlbHA9KCJz
ZXQgd2ViIHBsYXRmb3JtIHNlcnZlciBob3N0IG5hbWUuIikpLAorICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbigiLS13cHQtcGFyYW1ldGVyIiwgdHlwZT0ic3RyaW5nIiwgYWN0aW9uPSJhcHBl
bmQiLCBkZWZhdWx0PVtdLAorICAgICAgICAgICAgaGVscD0oInNldCBhIHdlYiBwbGF0Zm9ybSBz
ZXJ2ZXIgcGFyYW1ldGVyICgtLXdwdC1wYXJhbWV0ZXI9bmFtZTp2YWx1ZSkiKSksCisgICAgXSkp
CisKICAgICAjIEZJWE1FOiBNb3ZlIHRoZXNlIGludG8ganNvbl9yZXN1bHRzX2dlbmVyYXRvci5w
eQogICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQoKCJSZXN1bHQgSlNPTiBPcHRp
b25zIiwgWwogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1tYXN0ZXItbmFtZSIsIGhl
bHA9IlRoZSBuYW1lIG9mIHRoZSBidWlsZGJvdCBtYXN0ZXIuIiksCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dwdC9sYXVuY2hlci5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd3B0L2xhdW5jaGVy
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ2NWI5MWUwMWZiZTMzNjI0YmViYmNiYmE3MDBjMWJhNjdjZmMwNmYK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9z
ZXJ2ZXJzL3dwdC9sYXVuY2hlci5weQpAQCAtMCwwICsxLDEzNSBAQAorIiIiU2NyaXB0IHRvIHNl
dCB1cCBhbmQgbGF1bmNoIHdlYiBwbGF0Zm9ybSB0ZXN0IHNlcnZlcnMgaW4gdGhlIGNvbnRleHQg
b2YgV2ViS2l0IGZyYW1ld29yay4iIiIKKworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCisKK2xvZ2dlciA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisK
KyMgVXNlZCB0byBkeW5hbWljYWxseSBsb2FkIFdQVCBzZXJ2ZS5weSBhbmQgc29tZSB3cHRzZXJ2
ZSBtb2R1bGVzIChGaWxlSGFuZGVyLCBIVFRQRXhjZXB0aW9uLi4uKQorV1BUU2VydmVyID0gTm9u
ZQorCisKK2RlZiBtYWluKGFyZ3YsIHN0ZG91dCwgc3RkZXJyKToKKyAgICBvcHRpb25zLCBhcmdz
ID0gcGFyc2VfYXJncyhhcmd2KQorICAgIGltcG9ydF93cHRzZXJ2ZXIob3B0aW9ucykKKyAgICBs
YXVuY2hlciA9IFdQVExhdW5jaGVyKG9wdGlvbnMpCisgICAgbGF1bmNoZXIuc3RhcnQoKQorCisK
K2RlZiBwYXJzZV9hcmdzKGFyZ3MpOgorICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRp
b25QYXJzZXIoKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiLS13ZWJraXQtYmFzZSIs
CisgICAgICAgIGRlZmF1bHQ9Ii4iLAorICAgICAgICBoZWxwPSgicGF0aCB0byB3ZWJraXQgYmFz
ZSBkaXJlY3RvcnkiKSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi0td3B0c2VydmVy
LWJhc2UiLAorICAgICAgICBkZWZhdWx0PW9zLnBhdGguam9pbigiVG9vbHMiLCAiU2NyaXB0cyIs
ICJ3ZWJraXRweSIsICJ0aGlyZHBhcnR5IiwgIndwdHNlcnZlciIpLAorICAgICAgICBoZWxwPSgi
cGF0aCB0byB3cHRzZXJ2ZSBiYXNlIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB3ZWJraXQgYmFzZSBk
aXJlY3RvcnkiKSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi0td3B0LXBvcnQiLCB0
eXBlPSJpbnQiLAorICAgICAgICBkZWZhdWx0PTg4MDAsCisgICAgICAgIGhlbHA9KCJwb3J0IG9m
IHRoZSBtYWluIEhUVFAgc2VydmVyIikpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCIt
LWRvYy1yb290IiwKKyAgICAgICAgZGVmYXVsdD1vcy5wYXRoLmpvaW4oIkxheW91dFRlc3RzIiwg
ImltcG9ydGVkIiwgICJ3M2MiKSwKKyAgICAgICAgaGVscD0oInBhdGggdG8gdGhlIGRvYyByb290
IGRpcmVjdG9yeSByZWxhdGl2ZSB0byB3ZWJraXQgYmFzZSBkaXJlY3RvcnkiKSkKKyAgICBvcHRp
b25fcGFyc2VyLmFkZF9vcHRpb24oIi0tZXh0ZXJuYWwtcmVzb3VyY2VzLWRpciIsCisgICAgICAg
IGRlZmF1bHQ9b3MucGF0aC5qb2luKCJMYXlvdXRUZXN0cyIsICJyZXNvdXJjZXMtZHVtbXkiKSwK
KyAgICAgICAgaGVscD0oInBhdGggdG8gdGhlIHJlc291cmNlcyBkaXJlY3RvcnkgcmVsYXRpdmUg
dG8gd2Via2l0IGJhc2UgZGlyZWN0b3J5IikpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9u
KCItLXVzZS1pbm5lci1yZXNvdXJjZXMtZGlyIiwKKyAgICAgICAgaGVscD0oImlmIHNldCwgdXNl
cyB0aGUgcmVzb3VyY2VzIGRpciBpbnNpZGUgZG9jLXJvb3QgZGlyZWN0b3J5LCBvdGhlcndpc2Ug
dXNlcyB0aGUgc3VwcGxpZWQgZXh0ZXJuYWwgcmVzb3VyY2VzIGRpciIpKQorICAgIG9wdGlvbl9w
YXJzZXIuYWRkX29wdGlvbigiLS1ob3N0bmFtZSIsCisgICAgICAgIGRlZmF1bHQ9ImxvY2FsaG9z
dCIsCisgICAgICAgIGhlbHA9KCJuYW1lIG9mIHRoZSBXUFQgc2VydmVyIGhvc3QiKSkKKyAgICBv
cHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi0tcmV3cml0ZSIsIHR5cGU9InN0cmluZyIsCisgICAg
ICAgIGRlZmF1bHQ9W10sIGFjdGlvbj0iYXBwZW5kIiwKKyAgICAgICAgaGVscD0oImFkZCBhIHVy
bCByZXdyaXRlIHJ1bGUuICgtLXJld3JpdGU9VkVSQjpvcmlnaW46dGFyZ2V0KSIpKQorCisgICAg
cmV0dXJuIG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisKK2NsYXNzIFdQVExhdW5j
aGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBo
dHRwX3BvcnQgPSBvcHRpb25zLndwdF9wb3J0CisgICAgICAgIGh0dHBfZG9jX3Jvb3QgPSBvcy5w
YXRoLmpvaW4ob3B0aW9ucy53ZWJraXRfYmFzZSwgb3B0aW9ucy5kb2Nfcm9vdCkKKworICAgICAg
ICBzZWxmLndwdHNlcnZlX2NvbmZpZyA9IHsKKyAgICAgICAgICAgICJob3N0Ijogb3B0aW9ucy5o
b3N0bmFtZSwKKyAgICAgICAgICAgICJodHRwX2RvY19yb290IjogaHR0cF9kb2Nfcm9vdCwKKyAg
ICAgICAgICAgICJ3c19kb2Nfcm9vdCI6IGh0dHBfZG9jX3Jvb3QsCisgICAgICAgICAgICAicG9y
dHMiOiB7CisgICAgICAgICAgICAgICAgImh0dHAiOiBbaHR0cF9wb3J0LCAiYXV0byJdLAorICAg
ICAgICAgICAgICAgICJodHRwcyI6IFsiYXV0byJdLAorICAgICAgICAgICAgICAgICJ3cyI6IFs0
OTAwMCArIGh0dHBfcG9ydCAtIDg4MDBdfSwKKyAgICAgICAgICAgICJjaGVja19zdWJkb21haW5z
IjogRmFsc2UsCisgICAgICAgICAgICAibG9nX2xldmVsIjogImRlYnVnIiwKKyAgICAgICAgfQor
CisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBXUFRTZXJ2ZXIubG9nZ2VyID0gV1BUU2Vy
dmVyLmRlZmF1bHRfbG9nZ2VyKHNlbGYud3B0c2VydmVfY29uZmlnWyJsb2dfbGV2ZWwiXSkKKyAg
ICAgICAgY29uZmlnXywgc3RhcnRlZF9zZXJ2ZXJzID0gV1BUU2VydmVyLnN0YXJ0KHNlbGYud3B0
c2VydmVfY29uZmlnKQorCisgICAgICAgIGZvciBwcm90b2NvbCwgc2VydmVycyBpbiBzdGFydGVk
X3NlcnZlcnMuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBwb3J0LCBwcm9jZXNzIGluIHNlcnZl
cnM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIiVzLCBwb3J0OiVkLCBwaWQ6JWQiICUg
KHByb3RvY29sLCBwb3J0LCBwcm9jZXNzLnByb2MucGlkKSkKKworICAgICAgICAjIFdhaXQgdW50
aWw6CisgICAgICAgICMgMSB1c2VyIHByZXNzZXMgZW50ZXIKKyAgICAgICAgIyAyIHRoZSBtYXN0
ZXIgc2VuZHMgZW50ZXIKKyAgICAgICAgIyAzIHRoZSBtYXN0ZXIgcHJvY2VzcyBpcyBzdG9wcGVk
IChzdGRpbiBpcyBjbG9zZWQpCisgICAgICAgIHN5cy5zdGRpbi5yZWFkKDEpCisKKworZGVmIGlt
cG9ydF93cHRzZXJ2ZXIob3B0aW9ucyk6CisgICAgZ2xvYmFsIFdQVFNlcnZlcgorCisgICAgd3B0
c2VydmVyX2Jhc2UgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy53ZWJraXRfYmFzZSwgb3B0aW9ucy53
cHRzZXJ2ZXJfYmFzZSkKKyAgICB3cHRzZXJ2ZV9wYXRoID0gb3MucGF0aC5qb2luKHdwdHNlcnZl
cl9iYXNlLCAidG9vbHMiLCAid3B0c2VydmUiLCAid3B0c2VydmUiKQorCisgICAgc3lzLnBhdGgu
aW5zZXJ0KDEsIHdwdHNlcnZlcl9iYXNlKQorICAgIHN5cy5wYXRoLmluc2VydCgxLCB3cHRzZXJ2
ZV9wYXRoKQorCisgICAgZnJvbSBoYW5kbGVycyBpbXBvcnQgRmlsZUhhbmRsZXIKKyAgICBmcm9t
IHV0aWxzIGltcG9ydCBIVFRQRXhjZXB0aW9uCisgICAgaW1wb3J0IHNlcnZlIGFzIFdQVFNlcnZl
cgorCisgICAgIyBUT0RPIHJlbW92ZSBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2Jsb2IvbWFzdGVyL3NlcnZlLnB5CisgICAgIyBhbGxvd3Mgc2V0dGluZyBo
dHRwIGFuZCB3cyBkb2Nfcm9vdCB0aHJvdWdoIGpzb24gY29uZmlnCisgICAgaHR0cF9kb2Nfcm9v
dCA9IG9zLnBhdGguam9pbihvcHRpb25zLndlYmtpdF9iYXNlLCBvcHRpb25zLmRvY19yb290KQor
ICAgIFdQVFNlcnZlci5odHRwX2RvY19yb290ID0gaHR0cF9kb2Nfcm9vdAorICAgIFdQVFNlcnZl
ci53c19kb2Nfcm9vdCA9IGh0dHBfZG9jX3Jvb3QKKyAgICBXUFRTZXJ2ZXIuZG9jX3Jvb3QgPSBo
dHRwX2RvY19yb290CisKKyAgICAjIEV4dGVybmFsUmVzb3VyY2VIYW5kbGVyIGFsbG93cyBzZXJ2
aW5nIGZpbGVzIG91dHNpZGUgZG9jX3Jvb3QKKyAgICAjIEl0IGlzIHVzZWQgZm9yIC9yZXNvdXJj
ZXMvIFVSTFMKKyAgICBjbGFzcyBFeHRlcm5hbFJlc291cmNlSGFuZGxlcihGaWxlSGFuZGxlcik6
CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhbGlhcywgcmVzb3VyY2VfcGF0aCk6CisgICAg
ICAgICAgICBGaWxlSGFuZGxlci5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgc2VsZi5hbGlh
cyA9IGFsaWFzCisgICAgICAgICAgICBzZWxmLnJlc291cmNlX3BhdGggPSByZXNvdXJjZV9wYXRo
CisKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHJlcXVlc3QsIHJlc3BvbnNlKToKKyAgICAg
ICAgICAgIHJlbGF0aXZlX3BhdGggPSByZXF1ZXN0LnVybF9wYXJ0cy5wYXRoCisgICAgICAgICAg
ICBpZiByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoc2VsZi5hbGlhcyk6CisgICAgICAgICAgICAg
ICAgcmVsYXRpdmVfcGF0aCA9IHJlbGF0aXZlX3BhdGhbbGVuKHNlbGYuYWxpYXMpOl0KKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgSFRUUEV4Y2VwdGlvbig0MDQpCisg
ICAgICAgICAgICBpZiByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAg
ICAgICByZWxhdGl2ZV9wYXRoID0gcmVsYXRpdmVfcGF0aFsxOl0KKyAgICAgICAgICAgIHBhdGgg
PSBvcy5wYXRoLmpvaW4oc2VsZi5yZXNvdXJjZV9wYXRoLCByZWxhdGl2ZV9wYXRoKQorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuc2VydmVfZmlsZShwYXRoLCByZXF1ZXN0LCByZXNwb25zZSkKKwor
ICAgIGlmIG5vdCBvcHRpb25zLnVzZV9pbm5lcl9yZXNvdXJjZXNfZGlyOgorICAgICAgICByZXNv
dXJjZXNfcGF0aCA9IG9zLnBhdGguam9pbihvcHRpb25zLndlYmtpdF9iYXNlLCBvcHRpb25zLmV4
dGVybmFsX3Jlc291cmNlc19kaXIpCisgICAgICAgIFdQVFNlcnZlci5yb3V0ZXMuaW5zZXJ0KDMs
ICgiR0VUIiwgIi9yZXNvdXJjZXMvKiIsIEV4dGVybmFsUmVzb3VyY2VIYW5kbGVyKCIvcmVzb3Vy
Y2VzLyIsIHJlc291cmNlc19wYXRoKSkpCisKKyAgICAjIHNldCBzZXJ2ZXIgcmV3cml0ZXMgaWYg
YW55IHBhc3NlZCBhcyBwYXJhbWV0ZXIKKyAgICBmb3IgcmV3cml0ZSBpbiBvcHRpb25zLnJld3Jp
dGU6CisgICAgICAgIHJ1bGUgPSByZXdyaXRlLnNwbGl0KCI6IikKKyAgICAgICAgaWYgbGVuKHJ1
bGUpID09IDM6CisgICAgICAgICAgICBXUFRTZXJ2ZXIucmV3cml0ZXMuYXBwZW5kKHJ1bGUpCisK
KworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2
WzE6XSwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dwdF9zZXJ2ZXIucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dwdF9zZXJ2ZXIucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uN2YwMTlmODBkODU0ZDU0OGNkOWJkYzE2YjJhYmU4YjBiNDUxMzExZgotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd3B0X3Nl
cnZlci5weQpAQCAtMCwwICsxLDczIEBACisiIiJBIGNsYXNzIHRvIHN0YXJ0L3N0b3AgdGhlIHdl
YiBwbGF0Zm9ybSB0ZXN0IHNlcnZlcnMgdXNlZCBieSBsYXlvdXQgdGVzdHMuIiIiCisKKworaW1w
b3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MK
K2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0
IGh0dHBfc2VydmVyX2Jhc2UKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQor
CitwYXRoX3Jvb3QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0p
CisKKworY2xhc3MgV1BUSHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBvdXRwdXRfZGlyLCBwaWRmaWxl
PU5vbmUpOgorICAgICAgICAiIiJBcmdzOgorICAgICAgICAgIG91dHB1dF9kaXI6IHRoZSBhYnNv
bHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgZGlyZWN0b3J5CisgICAgICAgICIi
IgorICAgICAgICBodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlLl9faW5pdF9fKHNlbGYs
IHBvcnRfb2JqKQorICAgICAgICBzZWxmLl93ZWJraXRfYmFzZSA9IHBvcnRfb2JqLnBhdGhfZnJv
bV93ZWJraXRfYmFzZSgpCisgICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisg
ICAgICAgIHNlbGYuX3NldF9zdGFydF9jbWQocG9ydF9vYmopCisKKyAgICAgICAgc2VsZi5fbmFt
ZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fbG9nX2ZpbGVfbmFtZSA9ICclc19wcm9jZXNzX2xvZy5v
dXQudHh0JyAlIChzZWxmLl9uYW1lKQorCisgICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQorICAg
ICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQorICAgICAgICBzZWxmLl9waWRfZmlsZSA9IHBpZGZp
bGUKKyAgICAgICAgaWYgbm90IHNlbGYuX3BpZF9maWxlOgorICAgICAgICAgICAgc2VsZi5fcGlk
X2ZpbGUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fcnVudGltZV9wYXRoLCAnJXMucGlk
JyAlIHNlbGYuX25hbWUpCisKKyAgICBkZWYgX3NldF9zdGFydF9jbWQoc2VsZiwgcG9ydF9vYmop
OgorICAgICAgICBzZWxmLl9zdGFydF9jbWQgPSBbInB5dGhvbiIsICJsYXVuY2hlci5weSIsICIt
LXdlYmtpdC1iYXNlIiwgc2VsZi5fd2Via2l0X2Jhc2VdCisgICAgICAgIGlmIChwb3J0X29iai5n
ZXRfb3B0aW9uKCJ3cHRfcG9ydCIpKToKKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0X2NtZC5leHRl
bmQoWyItLXdwdC1wb3J0Iiwgc3RyKHBvcnRfb2JqLmdldF9vcHRpb24oIndwdF9wb3J0IikpXSkK
KyAgICAgICAgaWYgKHBvcnRfb2JqLmdldF9vcHRpb24oIndwdF9wYXJhbWV0ZXIiKSk6CisgICAg
ICAgICAgICBmb3IgcGFyYW1ldGVyIGluIHBvcnRfb2JqLmdldF9vcHRpb24oIndwdF9wYXJhbWV0
ZXIiKToKKyAgICAgICAgICAgICAgICBrZXlWYWx1ZVNwbGl0ID0gcGFyYW1ldGVyLmZpbmQoIj0i
KQorICAgICAgICAgICAgICAgIGlmIGtleVZhbHVlU3BsaXQgIT0gLTE6CisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3N0YXJ0X2NtZC5leHRlbmQoWyItLSIgKyBwYXJhbWV0ZXJbOmtleVZhbHVl
U3BsaXRdLCBwYXJhbWV0ZXJba2V5VmFsdWVTcGxpdCArIDE6XV0pCisgICAgICAgIGlmIChwb3J0
X29iai5nZXRfb3B0aW9uKCJ3cHRfZGlyIikpOgorICAgICAgICAgICAgc2VsZi5fc3RhcnRfY21k
LmV4dGVuZChbIi0tZG9jLXJvb3QiLCBvcy5wYXRoLmpvaW4oIkxheW91dFRlc3RzIiwgcG9ydF9v
YmouZ2V0X29wdGlvbigid3B0X2RpciIpKV0pCisgICAgICAgIGlmIChwb3J0X29iai5nZXRfb3B0
aW9uKCJ3cHRfaG9zdG5hbWUiKSk6CisgICAgICAgICAgICBzZWxmLl9zdGFydF9jbWQuZXh0ZW5k
KFsiLS1ob3N0bmFtZSIsIHBvcnRfb2JqLmdldF9vcHRpb24oIndwdF9ob3N0bmFtZSIpXSkKKyAg
ICAgICAgc2VsZi5fY3dkID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBhdGhfcm9vdCwgIndwdCIp
CisKKyAgICBkZWYgX3ByZXBhcmVfY29uZmlnKHNlbGYpOgorICAgICAgICBvdXRwdXRfbG9nID0g
c2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX291dHB1dF9kaXIsIHNlbGYuX2xvZ19maWxlX25h
bWUpCisgICAgICAgIHNlbGYuX3dzb3V0ID0gc2VsZi5fZmlsZXN5c3RlbS5vcGVuX3RleHRfZmls
ZV9mb3Jfd3JpdGluZyhvdXRwdXRfbG9nKQorCisgICAgZGVmIF9zcGF3bl9wcm9jZXNzKHNlbGYp
OgorICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyAlcyBzZXJ2ZXIsIGNtZD0iJXMiJyAlIChz
ZWxmLl9uYW1lLCBzZWxmLl9zdGFydF9jbWQpKQorICAgICAgICBzZWxmLl9wcm9jZXNzID0gc3Vi
cHJvY2Vzcy5Qb3BlbihzZWxmLl9zdGFydF9jbWQsIGN3ZD1zZWxmLl9jd2QsIHNoZWxsPUZhbHNl
LCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zZWxmLl93c291dCwgc3RkZXJyPXNlbGYu
X2V4ZWN1dGl2ZS5TVERPVVQpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9m
aWxlKHNlbGYuX3BpZF9maWxlLCBzdHIoc2VsZi5fcHJvY2Vzcy5waWQpKQorICAgICAgICByZXR1
cm4gc2VsZi5fcHJvY2Vzcy5waWQKKworICAgIGRlZiBfc3RvcF9ydW5uaW5nX3NlcnZlcihzZWxm
KToKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBpbmcgJXMgc2VydmVyJyAlIChzZWxmLl9uYW1l
KSkKKyAgICAgICAgaWYgc2VsZi5fcGlkIGFuZCBub3Qgc2VsZi5fZXhlY3V0aXZlLmNoZWNrX3J1
bm5pbmdfcGlkKHNlbGYuX3BpZCk6CisgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92
ZShzZWxmLl9waWRfZmlsZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLl9w
cm9jZXNzOgorICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy5jb21tdW5pY2F0ZShpbnB1dD0nXG4n
KQorICAgICAgICBpZiBzZWxmLl93c291dDoKKyAgICAgICAgICAgIHNlbGYuX3dzb3V0LmNsb3Nl
KCkKKyAgICAgICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9leGVj
dXRpdmUuY2hlY2tfcnVubmluZ19waWQoc2VsZi5fcGlkKToKKyAgICAgICAgICAgIHJhaXNlIGh0
dHBfc2VydmVyX2Jhc2UuU2VydmVyRXJyb3IoJ0ZhaWxlZCB0byBzdG9wICVzOiBwbGVhc2UgZ28g
dG8gd3B0IGxvZyBmaWxlIHRvIGdldCB0aGUgUElEIGxpc3QnICUgKHNlbGYuX25hbWUpKQorICAg
ICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZShzZWxmLl9waWRfZmlsZSkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2Jhc2UucHkKaW5kZXggZTcyMTJlNWQ2YzAzY2Y3OGViMTMyMDhhNWI2NzAzMzI0
MmIyODA0NC4uYWNlMGFmYjJjNzkzYTE2YmQ1NTFkNjhjMjI4ZTRkYjk3MTFkMzY5NiAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKQEAgLTY1LDYgKzY1LDcgQEAgZnJvbSB3ZWJraXRw
eS5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcwogZnJvbSB3ZWJraXRweS5wb3J0LmZhY3Rvcnkg
aW1wb3J0IFBvcnRGYWN0b3J5CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGlt
cG9ydCBhcGFjaGVfaHR0cF9zZXJ2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZl
cnMgaW1wb3J0IGh0dHBfc2VydmVyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJz
IGltcG9ydCB3cHRfc2VydmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGlt
cG9ydCB3ZWJzb2NrZXRfc2VydmVyCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKQEAgLTEyMiw2ICsxMjMsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNlbGYu
X2hlbHBlciA9IE5vbmUKICAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIgPSBOb25lCiAgICAgICAg
IHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dwdF9zZXJ2ZXIg
PSBOb25lCiAgICAgICAgIHNlbGYuX2ltYWdlX2RpZmZlciA9IE5vbmUKICAgICAgICAgc2VsZi5f
c2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNz
ICAjIG92ZXJyaWRhYmxlIGZvciB0ZXN0aW5nCiAgICAgICAgIHNlbGYuX2h0dHBfbG9jayA9IE5v
bmUgICMgRklYTUU6IFdoeSBkb2VzIHRoaXMgbGl2ZSBvbiB0aGUgcG9ydCBvYmplY3Q/CkBAIC04
OTMsNiArODk1LDE1IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgc2VydmVyLnN0YXJ0
KCkKICAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlciA9IHNlcnZlcgogCisgICAgZGVmIHN0
YXJ0X3dwdF9zZXJ2ZXIoc2VsZiwgYWRkaXRpb25hbF9kaXJzPU5vbmUsIG51bWJlcl9vZl9zZXJ2
ZXJzPU5vbmUpOgorICAgICAgICAiIiJTdGFydCBhIHdlYiBzZXJ2ZXIuIFJhaXNlIGFuIGVycm9y
IGlmIGl0IGNhbid0IHN0YXJ0IG9yIGlzIGFscmVhZHkgcnVubmluZy4KKworICAgICAgICBQb3J0
cyBjYW4gc3R1YiB0aGlzIG91dCBpZiB0aGV5IGRvbid0IG5lZWQgYSB3ZWIgc2VydmVyIHRvIGJl
IHJ1bm5pbmcuIiIiCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fd3B0X3NlcnZlciwgJ0FscmVh
ZHkgcnVubmluZyBhIFdQVCBzZXJ2ZXIuJworCisgICAgICAgIHNlbGYuX3dwdF9zZXJ2ZXIgPSB3
cHRfc2VydmVyLldQVEh0dHBkKHNlbGYsICJ3ayIsIHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSkK
KyAgICAgICAgc2VsZi5fd3B0X3NlcnZlci5zdGFydCgpCisKICAgICBkZWYgaHR0cF9zZXJ2ZXJf
c3VwcG9ydHNfaXB2NihzZWxmKToKICAgICAgICAgIyBDeWd3aW4gaXMgdGhlIG9ubHkgcGxhdGZv
cm0gdG8gc3RpbGwgdXNlIEFwYWNoZSAxLjMsIHdoaWNoIG9ubHkgc3VwcG9ydHMgSVBWNC4KICAg
ICAgICAgIyBPbmNlIGl0IG1vdmVzIHRvIEFwYWNoZSAyLCB3ZSBjYW4gZHJvcCB0aGlzIG1ldGhv
ZCBhbHRvZ2V0aGVyLgpAQCAtOTIyLDYgKzkzMywxMiBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAg
ICAgICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyLnN0b3AoKQogICAgICAgICAgICAgc2Vs
Zi5fd2Vic29ja2V0X3NlcnZlciA9IE5vbmUKIAorICAgIGRlZiBzdG9wX3dwdF9zZXJ2ZXIoc2Vs
Zik6CisgICAgICAgICIiIlNodXQgZG93biB0aGUgd3B0IHNlcnZlciBpZiBpdCBpcyBydW5uaW5n
LiBEbyBub3RoaW5nIGlmIGl0IGlzbid0LiIiIgorICAgICAgICBpZiBzZWxmLl93cHRfc2VydmVy
OgorICAgICAgICAgICAgc2VsZi5fd3B0X3NlcnZlci5zdG9wKCkKKyAgICAgICAgICAgIHNlbGYu
X3dwdF9zZXJ2ZXIgPSBOb25lCisKICAgICBkZWYgcmVsZWFzZV9odHRwX2xvY2soc2VsZik6CiAg
ICAgICAgIGlmIHNlbGYuX2h0dHBfbG9jazoKICAgICAgICAgICAgIHNlbGYuX2h0dHBfbG9jay5j
bGVhbnVwX2h0dHBfbG9jaygpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQppbmRl
eCBjNThlOWFlYWQ1NmRiZTExNGM1YTMxNjZmNWY5NWQ5NWJhOTQ2YTVlLi45YzVhMTgyODIxM2Qy
NThjNmY0MWY4ZTQyOTRiNmNkZjg0Yjg2NDYyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZHJpdmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9k
cml2ZXIucHkKQEAgLTE1MSw2ICsxNTEsMTEgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9wcm9maWxlciA9IE5vbmUKIAorICAgICAgICAj
VE9ETyB1c2Ugd3d3LndlYi1wbGF0Zm9ybS50ZXN0IGFuZCBub3QgbG9jYWxob3N0PworICAgICAg
ICAjc2VsZi53cHRfYmFzZV91cmkgPSAiaHR0cDovL3d3dy4iICsgc2VsZi5fcG9ydC5nZXRfb3B0
aW9uKCJ3cHRfaG9zdG5hbWUiKSArICI6IiArIHN0cihzZWxmLl9wb3J0LmdldF9vcHRpb24oIndw
dF9wb3J0IikpICsgIi8iCisgICAgICAgIHNlbGYud3B0X2Jhc2VfdXJpID0gImh0dHA6Ly9sb2Nh
bGhvc3Q6IiArIHN0cihzZWxmLl9wb3J0LmdldF9vcHRpb24oIndwdF9wb3J0IikpICsgIi8iCisg
ICAgICAgIHNlbGYud3B0X2RpciA9IHNlbGYuX3BvcnQuZ2V0X29wdGlvbigid3B0X2RpciIpICsg
Ii8iCisKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgc2VsZi5zdG9wKCkKIApAQCAt
MjI5LDggKzIzNCwxNCBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICBkZWYgaXNfaHR0cF90
ZXN0KHNlbGYsIHRlc3RfbmFtZSk6CiAgICAgICAgIHJldHVybiB0ZXN0X25hbWUuc3RhcnRzd2l0
aChzZWxmLkhUVFBfRElSKSBhbmQgbm90IHRlc3RfbmFtZS5zdGFydHN3aXRoKHNlbGYuSFRUUF9M
T0NBTF9ESVIpCiAKKyAgICBkZWYgaXNfd3B0X3Rlc3Qoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAg
ICAgcmV0dXJuIHRlc3RfbmFtZS5zdGFydHN3aXRoKHNlbGYud3B0X2RpcikKKwogICAgIGRlZiB0
ZXN0X3RvX3VyaShzZWxmLCB0ZXN0X25hbWUpOgogICAgICAgICAiIiJDb252ZXJ0IGEgdGVzdCBu
YW1lIHRvIGEgVVJJLiIiIgorICAgICAgICBpZiBzZWxmLmlzX3dwdF90ZXN0KHRlc3RfbmFtZSk6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi53cHRfYmFzZV91cmkgKyB0ZXN0X25hbWVbbGVuKHNl
bGYud3B0X2Rpcik6XQorCiAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2h0dHBfdGVzdCh0ZXN0X25h
bWUpOgogICAgICAgICAgICAgcmV0dXJuIHBhdGguYWJzcGF0aF90b191cmkoc2VsZi5fcG9ydC5o
b3N0LnBsYXRmb3JtLCBzZWxmLl9wb3J0LmFic3BhdGhfZm9yX3Rlc3QodGVzdF9uYW1lKSkKIApA
QCAtMjU0LDcgKzI2NSw5IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICAgICAgaWYg
bm90IHByZWZpeC5lbmRzd2l0aCgnLycpOgogICAgICAgICAgICAgICAgIHByZWZpeCArPSAnLycK
ICAgICAgICAgICAgIHJldHVybiB1cmlbbGVuKHByZWZpeCk6XQotICAgICAgICBpZiB1cmkuc3Rh
cnRzd2l0aCgiaHR0cDovLyIpOgorICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aChzZWxmLndwdF9i
YXNlX3VyaSk6CisgICAgICAgICAgICByZXR1cm4gdXJpLnJlcGxhY2Uoc2VsZi53cHRfYmFzZV91
cmksIHNlbGYud3B0X2RpcikKKyAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImh0dHA6Ly8xMjcu
MC4wLjE6ODAwMCIpOgogICAgICAgICAgICAgcmV0dXJuIHVyaS5yZXBsYWNlKCdodHRwOi8vMTI3
LjAuMC4xOjgwMDAvJywgc2VsZi5IVFRQX0RJUikKICAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgo
Imh0dHBzOi8vIik6CiAgICAgICAgICAgICByZXR1cm4gdXJpLnJlcGxhY2UoJ2h0dHBzOi8vMTI3
LjAuMC4xOjg0NDMvJywgc2VsZi5IVFRQX0RJUikKQEAgLTM4Miw3ICszOTUsNyBAQCBjbGFzcyBE
cml2ZXIob2JqZWN0KToKICAgICAgICAgIyBGSVhNRTogcGVyZm9ybWFuY2UgdGVzdHMgcGFzcyBp
biBmdWxsIFVSTHMgaW5zdGVhZCBvZiB0ZXN0IG5hbWVzLgogICAgICAgICBpZiBkcml2ZXJfaW5w
dXQudGVzdF9uYW1lLnN0YXJ0c3dpdGgoJ2h0dHA6Ly8nKSBvciBkcml2ZXJfaW5wdXQudGVzdF9u
YW1lLnN0YXJ0c3dpdGgoJ2h0dHBzOi8vJykgIG9yIGRyaXZlcl9pbnB1dC50ZXN0X25hbWUgPT0g
KCdhYm91dDpibGFuaycpOgogICAgICAgICAgICAgY29tbWFuZCA9IGRyaXZlcl9pbnB1dC50ZXN0
X25hbWUKLSAgICAgICAgZWxpZiBzZWxmLmlzX2h0dHBfdGVzdChkcml2ZXJfaW5wdXQudGVzdF9u
YW1lKToKKyAgICAgICAgZWxpZiBzZWxmLmlzX2h0dHBfdGVzdChkcml2ZXJfaW5wdXQudGVzdF9u
YW1lKSBvciAgc2VsZi5pc193cHRfdGVzdChkcml2ZXJfaW5wdXQudGVzdF9uYW1lKToKICAgICAg
ICAgICAgIGNvbW1hbmQgPSBzZWxmLnRlc3RfdG9fdXJpKGRyaXZlcl9pbnB1dC50ZXN0X25hbWUp
CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb21tYW5kID0gc2VsZi5fcG9ydC5hYnNwYXRo
X2Zvcl90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222731</attachid>
            <date>2014-01-30 14:06:38 -0800</date>
            <delta_ts>2014-02-14 00:55:34 -0800</delta_ts>
            <desc>Added auto-install and unit tests</desc>
            <filename>bug-127094-20140130230635.patch</filename>
            <type>text/plain</type>
            <size>45017</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYyNDUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDQxNmI2YjJlMzlhZjVjY2VlYjFkMTcxZmI3ZjA0N2Q0
NjM2YmNjYy4uODNhMjMzMzFlOGViZGRlNTk2MDg5NDFjMDgwNDBjZDgwMGU4MzQ4MCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgw
IEBACisyMDE0LTAxLTMwICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uZkBnbWFpbC5jb20+CisKKyAg
ICAgICAgSW50ZWdyYXRlIFdQIHB5dGhvbiBzZXJ2ZXIgaW50byBXZWJLaXQgdGVzdCBmcmFtZXdv
cmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzA5
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVk
IHdlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5weSB0byBzdGFydCBhbmQgc3RvcCB3cHQgc2VydmVy
IGFzIGEgcHl0aG9uIHByb2Nlc3MKKyAgICAgICAgQWRkZWQgd2ViX3BsYXRmb3JtX3Rlc3RfbGF1
bmNoZXIucHksIHRoZSBweXRob24gc2NyaXB0IHRoYXQgaXMgZXhlY3V0ZWQgd2l0aGluIHRoZSBw
eXRob24gcHJvY2VzcyB0byBydW4gdGhlIHdwdCBzZXJ2ZXIKKyAgICAgICAgVXBkYXRlZCBleGlz
dGluZyBpbmZyYXN0cnVjdHVyZSB0byBzdGFydC9zdG9wIFdlYiBQbGF0Zm9ybSBUZXN0IHNlcnZl
ciBmb3IgdGVzdHMgdW5kZXIgaW1wb3J0ZWQvdzNjCisgICAgICAgIEFkZGVkIHRoZSBwb3NzaWJp
bGl0eSB0byBwYXJhbWV0ZXJpemUgdGhlIFdlYiBQbGF0Zm9ybSBUZXN0IHNlcnZlciBjb25maWd1
cmF0aW9uIAorICAgICAgICBVcGRhdGVkIHVuaXQgdGVzdHMKKworICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weTog
TGF1bmNocyB3ZWIgcGxhdGZvcm0gdGVzdCBzZXJ2ZXIgaWYgbmVlZGVkCisgICAgICAgIChMYXlv
dXRUZXN0UnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIucnVuX3Rl
c3RzKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuc3RhcnRfc2VydmVyc193aXRoX2xvY2sp
OgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRf
dGVzdF9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMu
X3J1bl90ZXN0cyk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJz
X3N0YXJ0ZWQuc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKToKKyAgICAgICAgKExheW91
dFRlc3RSdW5uZXJUZXN0cy50ZXN0X3NlcnZlcnNfc3RhcnRlZC5zdG9wX3dlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlcik6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMpOgorICAgICAgICAo
TGF5b3V0VGVzdFJ1bm5lclRlc3RzLnRlc3Rfc2VydmVyc19zdGFydGVkKToKKyAgICAgICAgKFNo
YXJkZXJUZXN0cy50ZXN0X3NoYXJkX2V2ZXJ5X2ZpbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHk6IGRldGVjdHMgd3B0IHRl
c3RzIGJhc2VkIG9uICJ3cHRzZXJ2ZXJfZG9jX3Jvb3QiIG9wdGlvbgorICAgICAgICAoTWFuYWdl
ci5fX2luaXRfXyk6CisgICAgICAgIChNYW5hZ2VyLl9pc193ZWJfcGxhdGZvcm1fdGVzdCk6Cisg
ICAgICAgIChNYW5hZ2VyLl90ZXN0X3JlcXVpcmVzX2xvY2spOgorICAgICAgICAoTWFuYWdlci5f
cnVuX3Rlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250
cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoTWFuYWdlclRlc3QudGVzdF9u
ZWVkc19zZXJ2ZXJzLmdldF9tYW5hZ2VyKToKKyAgICAgICAgKE1hbmFnZXJUZXN0LnRlc3RfbmVl
ZHNfc2VydmVycyk6CisgICAgICAgIChNYW5hZ2VyVGVzdC5pbnRlZ3JhdGlvbl90ZXN0X25lZWRz
X3NlcnZlcnMuZ2V0X21hbmFnZXIpOgorICAgICAgICAoTWFuYWdlclRlc3QudGVzdF9sb29rX2Zv
cl9uZXdfY3Jhc2hfbG9ncy5nZXRfbWFuYWdlcik6CisgICAgICAgIChNYW5hZ2VyVGVzdCk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5w
eTogQWRkZWQgd2ViIHBsYXRmb3JtIHRlc3Qgc2VydmVyIHNwZWNpZmljIHBhcmFtZXRlcnMKKyAg
ICAgICAgKHBhcnNlX2FyZ3MpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNoZXIucHk6IEFkZGVkIChzY3JpcHQg
dGhhdCBpcyBleGVjdXRlZCB3aXRoaW4gYSBwcm9jZXNzIHRvIGNvbmZpZ3VyZSBhbmQgcnVuIHRo
ZSB3ZWIgcGxhdGZvcm0gdGVzdCBzZXJ2ZXIpLgorICAgICAgICAobWFpbik6CisgICAgICAgIChw
YXJzZV9hcmdzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtVGVzdExhdW5jaGVyKToKKyAgICAgICAg
KFdlYlBsYXRmb3JtVGVzdExhdW5jaGVyLl9faW5pdF9fKToKKyAgICAgICAgKFdlYlBsYXRmb3Jt
VGVzdExhdW5jaGVyLnN0YXJ0KToKKyAgICAgICAgKGltcG9ydF93cHRzZXJ2ZXIpOgorICAgICAg
ICAoaW1wb3J0X3dwdHNlcnZlci5FeHRlcm5hbFJlc291cmNlSGFuZGxlcik6CisgICAgICAgIChp
bXBvcnRfd3B0c2VydmVyLkV4dGVybmFsUmVzb3VyY2VIYW5kbGVyLl9faW5pdF9fKToKKyAgICAg
ICAgKGltcG9ydF93cHRzZXJ2ZXIuRXh0ZXJuYWxSZXNvdXJjZUhhbmRsZXIuX19jYWxsX18pOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyLnB5OiBBZGRlZCAocmVzcG9uc2libGUgdG8gbGF1bmNoIGFuZCB0ZXJt
aW5hdGUgdGhlIHdlYiBwbGF0Zm9ybSB0ZXN0IHNlcnZlciBtYWluIHByb2Nlc3MpLgorICAgICAg
ICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyKToKKyAgICAgICAgKFdlYlBsYXRmb3JtVGVzdFNlcnZl
ci5fX2luaXRfXyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3NldF9zdGFydF9j
bWQpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9wcmVwYXJlX2NvbmZpZyk6Cisg
ICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3NwYXduX3Byb2Nlc3MpOgorICAgICAgICAo
V2ViUGxhdGZvcm1UZXN0U2VydmVyLl9zdG9wX3J1bm5pbmdfc2VydmVyKToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3Nl
cnZlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0V2ViUGxhdGZvcm1UZXN0U2Vy
dmVyKToKKyAgICAgICAgKFRlc3RXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIudGVzdF9zdGFydF9jbWQp
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OiBBZGRlZCBzdGFydC9z
dG9wIHdlYiBwbGF0Zm9ybSB0ZXN0IHNlcnZlciBtZXRob2RzCisgICAgICAgIChQb3J0Ll9faW5p
dF9fKToKKyAgICAgICAgKFBvcnQudG8uc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKToK
KyAgICAgICAgKFBvcnQudG8uc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIpOgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6IEFkZGVkIG1hcHBpbmcgYmV0d2Vl
biB3ZWIgcGxhdGZvcm0gdGVzdCBuYW1lcyBhbmQgdXJscworICAgICAgICAoRHJpdmVyLl9faW5p
dF9fKToKKyAgICAgICAgKERyaXZlci5pc193ZWJfcGxhdGZvcm1fdGVzdCk6CisgICAgICAgIChE
cml2ZXIudGVzdF90b191cmkpOgorICAgICAgICAoRHJpdmVyLnVyaV90b190ZXN0KToKKyAgICAg
ICAgKERyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dCk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weToKKyAgICAgICAgKERyaXZlclRlc3Qu
bWFrZV9wb3J0KToKKyAgICAgICAgKERyaXZlclRlc3QuX2Fzc2VydF93cmFwcGVyKToKKyAgICAg
ICAgKERyaXZlclRlc3QudGVzdF90ZXN0X3RvX3VyaSk6CisgICAgICAgIChEcml2ZXJUZXN0LnRl
c3RfdXJpX3RvX3Rlc3QpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9f
X2luaXRfXy5weTogQWRkZWQgYXV0by1pbnN0YWxsIG9mIHNwZWNpZmljIHZlcnNpb25zIG9mIHdw
dHNlcnZlLCBweXdlYnNvY2tldCwgc2VydmUucHkKKyAgICAgICAgKEF1dG9pbnN0YWxsSW1wb3J0
SG9vay5maW5kX21vZHVsZSk6CisgICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suX2luc3Rh
bGxfd3B0c2VydmVyKToKKwogMjAxNC0wMS0yMSAgQ2hhbmdTZW9rIE9oICA8Y2hhbmdzZW9rLm9o
QGNvbGxhYm9yYS5jb20+CiAKICAgICAgICAgW0dUS10gRml4IGEgYysrMTEgY29tcGxpYW5jZSBp
c3N1ZSBmb3IgZm9udGNvbmZpZwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVy
LnB5CmluZGV4IGRjMDllYWQwYjU1MjEyZmI4NmM3N2ZlNTk3MjQ5MzdmYmJiMmE5NDYuLjNhMTVl
ZDJkMjE2ZGM2ODk2YWI3ZjllNGIyMTJjOTdmZTlhYTVjMGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5l
ci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVy
cy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKQEAgLTc0LDE2ICs3NCwxOCBAQCBjbGFzcyBMYXlvdXRU
ZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3Rlc3RfaW5wdXRzID0gW10KICAgICAg
ICAgc2VsZi5fbmVlZHNfaHR0cCA9IE5vbmUKICAgICAgICAgc2VsZi5fbmVlZHNfd2Vic29ja2V0
cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0g
Tm9uZQogICAgICAgICBzZWxmLl9yZXRyeWluZyA9IEZhbHNlCiAKICAgICAgICAgc2VsZi5fY3Vy
cmVudF9ydW5fcmVzdWx0cyA9IE5vbmUKICAgICAgICAgc2VsZi5fcmVtYWluaW5nX2xvY2tlZF9z
aGFyZHMgPSBbXQogICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gRmFsc2UKIAotICAgIGRl
ZiBydW5fdGVzdHMoc2VsZiwgZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9fc2tp
cCwgbnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIHJldHJ5aW5nKToK
KyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGV4cGVjdGF0aW9ucywgdGVzdF9pbnB1dHMsIHRlc3Rz
X3RvX3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19odHRwLCBuZWVkc193ZWJzb2NrZXRzLCBuZWVk
c193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIsIHJldHJ5aW5nKToKICAgICAgICAgc2VsZi5fZXhw
ZWN0YXRpb25zID0gZXhwZWN0YXRpb25zCiAgICAgICAgIHNlbGYuX3Rlc3RfaW5wdXRzID0gdGVz
dF9pbnB1dHMKICAgICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IG5lZWRzX2h0dHAKKyAgICAgICAg
c2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gbmVlZHNfd2ViX3BsYXRmb3Jt
X3Rlc3Rfc2VydmVyCiAgICAgICAgIHNlbGYuX25lZWRzX3dlYnNvY2tldHMgPSBuZWVkc193ZWJz
b2NrZXRzCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gcmV0cnlpbmcKIApAQCAtMjA2LDYgKzIw
OCw5IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgaWYgc2VsZi5f
bmVlZHNfd2Vic29ja2V0czoKICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRl
KCdTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCiAgICAgICAgICAgICBzZWxmLl9wb3J0
LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJfcGxh
dGZvcm1fdGVzdF9zZXJ2ZXI6CisgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0
ZSgnU3RhcnRpbmcgV2ViIFBsYXRmb3JtIFRlc3Qgc2VydmVyIC4uLicpCisgICAgICAgICAgICBz
ZWxmLl9wb3J0LnN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcigpCiAgICAgICAgIHNlbGYu
X2hhc19odHRwX2xvY2sgPSBUcnVlCiAKICAgICBkZWYgc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jayhz
ZWxmKToKQEAgLTIxNiw2ICsyMjEsOSBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyKG9iamVjdCk6
CiAgICAgICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJzb2NrZXRzOgogICAgICAgICAgICAgICAg
IHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdG9wcGluZyBXZWJTb2NrZXQgc2VydmVyIC4u
LicpCiAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQor
ICAgICAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyOgorICAg
ICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdG9wcGluZyBXZWIgUGxh
dGZvcm0gVGVzdCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bf
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKCkKICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3Jp
dGVfdXBkYXRlKCdSZWxlYXNpbmcgc2VydmVyIGxvY2sgLi4uJykKICAgICAgICAgICAgIHNlbGYu
X3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQogICAgICAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9j
ayA9IEZhbHNlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJf
dW5pdHRlc3QucHkKaW5kZXggODA5NzdlNTc2ZTk2ZjVmMDA2N2ZlMTAxY2RlOThlOGJmODc3Nzlh
Mi4uMTNhNzI2NmQzMTQwODQyNjY4NjQ0YzlhZmMyNWMzM2Q0Nzg1ZmUxZCAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rl
c3RfcnVubmVyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weQpAQCAtMTA2
LDcgKzEwNiw3IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgIGV4cGVjdGF0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnMocnVubmVyLl9wb3J0
LCB0ZXN0cykKICAgICAgICAgZXhwZWN0YXRpb25zLnBhcnNlX2FsbF9leHBlY3RhdGlvbnMoKQog
ICAgICAgICBydW5uZXIucnVuX3Rlc3RzKGV4cGVjdGF0aW9ucywgdGVzdF9pbnB1dHMsIHNldCgp
LAotICAgICAgICAgICAgbnVtX3dvcmtlcnM9MSwgbmVlZHNfaHR0cD1hbnkoJ2h0dHAnIGluIHRl
c3QgZm9yIHRlc3QgaW4gdGVzdHMpLCBuZWVkc193ZWJzb2NrZXRzPWFueShbJ3dlYnNvY2tldCcg
aW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0c10pLCByZXRyeWluZz1GYWxzZSkKKyAgICAgICAgICAg
IG51bV93b3JrZXJzPTEsIG5lZWRzX2h0dHA9YW55KCdodHRwJyBpbiB0ZXN0IGZvciB0ZXN0IGlu
IHRlc3RzKSwgbmVlZHNfd2Vic29ja2V0cz1hbnkoWyd3ZWJzb2NrZXQnIGluIHRlc3QgZm9yIHRl
c3QgaW4gdGVzdHNdKSwgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyPWFueShbJ2ltcG9y
dGVkL3czYycgaW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0c10pLCByZXRyeWluZz1GYWxzZSkKIAog
ICAgIGRlZiB0ZXN0X2h0dHBfbG9ja2luZyhzZWxmKToKICAgICAgICAgcnVubmVyID0gc2VsZi5f
cnVubmVyKCkKQEAgLTE3Niw0OSArMTc2LDgzIEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXJUZXN0
cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGRlZiBzdGFydF93ZWJzb2NrZXRfc2VydmVy
KCk6CiAgICAgICAgICAgICBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gVHJ1ZQogCisgICAgICAg
IGRlZiBzdGFydF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoKToKKyAgICAgICAgICAgIHNlbGYu
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBUcnVlCisKICAgICAgICAgZGVmIHN0
b3BfaHR0cF9zZXJ2ZXIoKToKICAgICAgICAgICAgIHNlbGYuaHR0cF9zdG9wcGVkID0gVHJ1ZQog
CiAgICAgICAgIGRlZiBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKToKICAgICAgICAgICAgIHNlbGYu
d2Vic29ja2V0X3N0b3BwZWQgPSBUcnVlCiAKKyAgICAgICAgZGVmIHN0b3Bfd2ViX3BsYXRmb3Jt
X3Rlc3Rfc2VydmVyKCk6CisgICAgICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
cl9zdG9wcGVkID0gVHJ1ZQorCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgIHBv
cnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3QtbWFjLWxlb3BhcmQnKQogICAgICAgICBw
b3J0LnN0YXJ0X2h0dHBfc2VydmVyID0gc3RhcnRfaHR0cF9zZXJ2ZXIKICAgICAgICAgcG9ydC5z
dGFydF93ZWJzb2NrZXRfc2VydmVyID0gc3RhcnRfd2Vic29ja2V0X3NlcnZlcgorICAgICAgICBw
b3J0LnN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IHN0YXJ0X3dlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlcgogICAgICAgICBwb3J0LnN0b3BfaHR0cF9zZXJ2ZXIgPSBzdG9wX2h0dHBfc2Vy
dmVyCiAgICAgICAgIHBvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyID0gc3RvcF93ZWJzb2NrZXRf
c2VydmVyCisgICAgICAgIHBvcnQuc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBzdG9w
X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcgogCiAgICAgICAgIHNlbGYuaHR0cF9zdGFydGVkID0g
c2VsZi5odHRwX3N0b3BwZWQgPSBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2VsZi53ZWJzb2Nr
ZXRfc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
X3N0YXJ0ZWQgPSBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkID0gRmFsc2UK
ICAgICAgICAgcnVubmVyID0gc2VsZi5fcnVubmVyKHBvcnQ9cG9ydCkKICAgICAgICAgcnVubmVy
Ll9uZWVkc19odHRwID0gVHJ1ZQogICAgICAgICBydW5uZXIuX25lZWRzX3dlYnNvY2tldHMgPSBG
YWxzZQorICAgICAgICBydW5uZXIuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IEZh
bHNlCiAgICAgICAgIHJ1bm5lci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhudW1iZXJfb2Zfc2Vy
dmVycz00KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdGFydGVkLCBUcnVl
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIEZhbHNl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
X3N0YXJ0ZWQsIEZhbHNlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIFRydWUpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCwgRmFsc2UpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBl
ZCwgRmFsc2UpCiAKICAgICAgICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBzZWxmLmh0dHBfc3RvcHBl
ZCA9IHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tldF9zdG9wcGVkID0gRmFs
c2UKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCA9IHNlbGYu
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQgPSBGYWxzZQogICAgICAgICBydW5uZXIu
X25lZWRzX2h0dHAgPSBUcnVlCiAgICAgICAgIHJ1bm5lci5fbmVlZHNfd2Vic29ja2V0cyA9IFRy
dWUKKyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBGYWxz
ZQogICAgICAgICBydW5uZXIuc3RhcnRfc2VydmVyc193aXRoX2xvY2sobnVtYmVyX29mX3NlcnZl
cnM9NCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RhcnRlZCwgVHJ1ZSkK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdGFydGVkLCBUcnVlKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0
YXJ0ZWQsIEZhbHNlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIFRydWUpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCwgVHJ1ZSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkLCBG
YWxzZSkKKworICAgICAgICBzZWxmLmh0dHBfc3RhcnRlZCA9IHNlbGYuaHR0cF9zdG9wcGVkID0g
c2VsZi53ZWJzb2NrZXRfc3RhcnRlZCA9IHNlbGYud2Vic29ja2V0X3N0b3BwZWQgPSBGYWxzZQor
ICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVkID0gc2VsZi53ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVl
ZHNfaHR0cCA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2Vic29ja2V0cyA9IEZhbHNl
CisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gRmFsc2UK
KyAgICAgICAgcnVubmVyLnN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKG51bWJlcl9vZl9zZXJ2ZXJz
PTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0YXJ0ZWQsIEZhbHNlKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIEZhbHNlKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0
YXJ0ZWQsIEZhbHNlKQorICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIEZhbHNlKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0b3BwZWQsIEZhbHNlKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQs
IEZhbHNlKQogCiAgICAgICAgIHNlbGYuaHR0cF9zdGFydGVkID0gc2VsZi5odHRwX3N0b3BwZWQg
PSBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNl
CisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndl
Yl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkID0gRmFsc2UKICAgICAgICAgcnVubmVyLl9u
ZWVkc19odHRwID0gRmFsc2UKICAgICAgICAgcnVubmVyLl9uZWVkc193ZWJzb2NrZXRzID0gRmFs
c2UKKyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBUcnVl
CiAgICAgICAgIHJ1bm5lci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhudW1iZXJfb2Zfc2VydmVy
cz00KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdGFydGVkLCBGYWxzZSkK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdGFydGVkLCBGYWxzZSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9z
dGFydGVkLCBUcnVlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIEZhbHNlKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0b3BwZWQsIEZhbHNlKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQs
IFRydWUpCiAKIAogY2xhc3MgU2hhcmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTI4
MCw3ICszMTQsNyBAQCBjbGFzcyBTaGFyZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICAgICAgICgnLicsIFsnaHR0cC90ZXN0cy9zZWN1cml0eS92aWV3LXNvdXJjZS1uby1yZWZy
ZXNoLmh0bWwnXSksCiAgICAgICAgICAgICAgKCcuJywgWydodHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy93ZWJzb2NrZXQtcHJvdG9jb2wtaWdub3JlZC5odG1sJ10pLAogICAgICAgICAgICAgICgn
LicsIFsnaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBwb3J0ZWQteG1sLWNvbnRlbnQtdHlw
ZXMuaHRtbCddKSwKLSAgICAgICAgICAgICAoJy4nLCBbJ3BlcmYvb2JqZWN0LWtleXMuaHRtbCdd
KV0pLAorICAgICAgICAgICAgICgnLicsIFsncGVyZi9vYmplY3Qta2V5cy5odG1sJ10pXSkKICAg
ICAgICAgc2VsZi5hc3NlcnRfc2hhcmRzKHVubG9ja2VkLAogICAgICAgICAgICAgWygnLicsIFsn
YW5pbWF0aW9ucy9rZXlmcmFtZXMuaHRtbCddKSwKICAgICAgICAgICAgICAoJy4nLCBbJ2Zhc3Qv
Y3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdlLWNyYXNoLmh0bWwnXSksCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9t
YW5hZ2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxl
cnMvbWFuYWdlci5weQppbmRleCBlMWEwOGVhZjI1NGQ3MjBlYWI3M2U0OTdlZjI2YjQyZGJmY2Qz
MjY2Li41MTlhZmJlMTRiZjAzMmEwNmE5NWJjZTViMWEzMjQ2MjI1NDRkZTkyIDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2Vy
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L21hbmFnZXIucHkKQEAgLTc5LDYgKzc5LDcgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAg
ICAgICBzZWxmLkhUVFBfU1VCRElSID0gJ2h0dHAnICsgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9S
CiAgICAgICAgIHNlbGYuUEVSRl9TVUJESVIgPSAncGVyZicKICAgICAgICAgc2VsZi5XRUJTT0NL
RVRfU1VCRElSID0gJ3dlYnNvY2tldCcgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IKKyAgICAg
ICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zdWJkaXIgPSBvcHRpb25zLndwdHNlcnZlcl9kb2Nf
cm9vdCArIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgogICAgICAgICBzZWxmLkxBWU9VVF9URVNU
U19ESVJFQ1RPUlkgPSAnTGF5b3V0VGVzdHMnCiAKICAgICAgICAgIyBkaXNhYmxlIHdzcyBzZXJ2
ZXIuIG5lZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wgb24gYnVpbGRib3RzLgpAQCAtOTgsNiArOTks
OSBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgZGVmIF9pc193ZWJzb2NrZXRfdGVzdChz
ZWxmLCB0ZXN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuV0VCU09DS0VUX1NVQkRJUiBpbiB0ZXN0
CiAKKyAgICBkZWYgX2lzX3dlYl9wbGF0Zm9ybV90ZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICBy
ZXR1cm4gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zdWJkaXIgaW4gdGVzdAorCiAgICAgZGVmIF9o
dHRwX3Rlc3RzKHNlbGYsIHRlc3RfbmFtZXMpOgogICAgICAgICByZXR1cm4gc2V0KHRlc3QgZm9y
IHRlc3QgaW4gdGVzdF9uYW1lcyBpZiBzZWxmLl9pc19odHRwX3Rlc3QodGVzdCkpCiAKQEAgLTEz
MSw3ICsxMzUsNyBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgIHJ1bm5pbmcgbXVs
dGlwbGUgY29waWVzIG9mIE5SV1RzLiBQZXJmIHRlc3RzIGFyZSBsb2NrZWQKICAgICAgICAgYmVj
YXVzZSBoZWF2eSBsb2FkIGNhdXNlZCBieSBydW5uaW5nIG90aGVyIHRlc3RzIGluIHBhcmFsbGVs
CiAgICAgICAgIG1pZ2h0IGNhdXNlIHNvbWUgb2YgdGhlbSB0byB0aW1lb3V0LiIiIgotICAgICAg
ICByZXR1cm4gc2VsZi5faXNfaHR0cF90ZXN0KHRlc3RfZmlsZSkgb3Igc2VsZi5faXNfcGVyZl90
ZXN0KHRlc3RfZmlsZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lzX2h0dHBfdGVzdCh0ZXN0X2Zp
bGUpIG9yIHNlbGYuX2lzX3BlcmZfdGVzdCh0ZXN0X2ZpbGUpIG9yIHNlbGYuX2lzX3dlYl9wbGF0
Zm9ybV90ZXN0KHRlc3RfZmlsZSkKIAogICAgIGRlZiBfdGVzdF9pc19zbG93KHNlbGYsIHRlc3Rf
ZmlsZSk6CiAgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RhdGlvbnMubW9kZWwoKS5oYXNfbW9k
aWZpZXIodGVzdF9maWxlLCB0ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKQpAQCAtMjQ2LDYgKzI1MCw3
IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKIAogICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIHRl
c3RzX3RvX3J1biwgdGVzdHNfdG9fc2tpcCwgcmVwZWF0X2VhY2gsIGl0ZXJhdGlvbnMsIG51bV93
b3JrZXJzLCByZXRyeWluZyk6CiAgICAgICAgIG5lZWRzX2h0dHAgPSBhbnkoc2VsZi5faXNfaHR0
cF90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKKyAgICAgICAgbmVlZHNfd2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gYW55KHNlbGYuX2lzX3dlYl9wbGF0Zm9ybV90ZXN0KHRl
c3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKICAgICAgICAgbmVlZHNfd2Vic29ja2V0cyA9
IGFueShzZWxmLl9pc193ZWJzb2NrZXRfdGVzdCh0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0c190b19y
dW4pCiAKICAgICAgICAgdGVzdF9pbnB1dHMgPSBbXQpAQCAtMjUzLDcgKzI1OCw3IEBAIGNsYXNz
IE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bjoK
ICAgICAgICAgICAgICAgICBmb3IgXyBpbiB4cmFuZ2UocmVwZWF0X2VhY2gpOgogICAgICAgICAg
ICAgICAgICAgICB0ZXN0X2lucHV0cy5hcHBlbmQoc2VsZi5fdGVzdF9pbnB1dF9mb3JfZmlsZSh0
ZXN0KSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bm5lci5ydW5fdGVzdHMoc2VsZi5fZXhwZWN0
YXRpb25zLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9fc2tpcCwgbnVtX3dvcmtlcnMsIG5lZWRzX2h0
dHAsIG5lZWRzX3dlYnNvY2tldHMsIHJldHJ5aW5nKQorICAgICAgICByZXR1cm4gc2VsZi5fcnVu
bmVyLnJ1bl90ZXN0cyhzZWxmLl9leHBlY3RhdGlvbnMsIHRlc3RfaW5wdXRzLCB0ZXN0c190b19z
a2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVlZHNfd2Vic29ja2V0cywgbmVlZHNfd2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyLCByZXRyeWluZykKIAogICAgIGRlZiBfY2xlYW5fdXBfcnVu
KHNlbGYpOgogICAgICAgICBfbG9nLmRlYnVnKCJGbHVzaGluZyBzdGRvdXQiKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdl
cl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkKaW5kZXggM2FlZmMzZDZjZDQ3OTZjNzI5MzcwNDA4
MTUwODJlMzczZTBjNzFkNS4uMWQyZDZlNmE4ZmY3NmFiYTE3YTcyMjBmY2YzOWYzY2NkNGRhZmY1
NSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJv
bGxlcnMvbWFuYWdlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5CkBAIC00Niw3ICs0Niw3
IEBAIGNsYXNzIE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZGVmIGdl
dF9tYW5hZ2VyKCk6CiAgICAgICAgICAgICBwb3J0ID0gTW9jaygpICAjIEZJWE1FOiBVc2UgYSB0
aWdodGVyIG1vY2suCiAgICAgICAgICAgICBwb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IgPSAnLycK
LSAgICAgICAgICAgIG1hbmFnZXIgPSBNYW5hZ2VyKHBvcnQsIG9wdGlvbnM9TW9ja09wdGlvbnMo
aHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xKSwgcHJpbnRlcj1Nb2NrKCkpCisgICAgICAg
ICAgICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0LCBvcHRpb25zPU1vY2tPcHRpb25zKGh0dHA9VHJ1
ZSwgbWF4X2xvY2tlZF9zaGFyZHM9MSwgd3B0c2VydmVyX2RvY19yb290PSdpbXBvcnRlZC93M2Mn
KSwgcHJpbnRlcj1Nb2NrKCkpCiAgICAgICAgICAgICByZXR1cm4gbWFuYWdlcgogCiAgICAgICAg
IG1hbmFnZXIgPSBnZXRfbWFuYWdlcigpCkBAIC01NSwxMSArNTUsMTcgQEAgY2xhc3MgTWFuYWdl
clRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBtYW5hZ2VyID0gZ2V0X21hbmFnZXIo
KQogICAgICAgICBzZWxmLmFzc2VydFRydWUobWFuYWdlci5uZWVkc19zZXJ2ZXJzKFsnaHR0cC90
ZXN0cy9taXNjJ10pKQogCisgICAgICAgIG1hbmFnZXIgPSBnZXRfbWFuYWdlcigpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShtYW5hZ2VyLm5lZWRzX3NlcnZlcnMoWydpbXBvcnRlZC93M2MvdGVz
dCddKSkKKworICAgICAgICBtYW5hZ2VyID0gZ2V0X21hbmFnZXIoKQorICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKG1hbmFnZXIubmVlZHNfc2VydmVycyhbJ2ltcG9ydGVkL3Rlc3QnXSkpCisKICAg
ICBkZWYgaW50ZWdyYXRpb25fdGVzdF9uZWVkc19zZXJ2ZXJzKHNlbGYpOgogICAgICAgICBkZWYg
Z2V0X21hbmFnZXIoKToKICAgICAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgICAg
ICBwb3J0ID0gaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KCkKLSAgICAgICAgICAgIG1hbmFnZXIgPSBN
YW5hZ2VyKHBvcnQsIG9wdGlvbnM9TW9ja09wdGlvbnModGVzdF9saXN0PU5vbmUsIGh0dHA9VHJ1
ZSwgbWF4X2xvY2tlZF9zaGFyZHM9MSksIHByaW50ZXI9TW9jaygpKQorICAgICAgICAgICAgbWFu
YWdlciA9IE1hbmFnZXIocG9ydCwgb3B0aW9ucz1Nb2NrT3B0aW9ucyh0ZXN0X2xpc3Q9Tm9uZSwg
aHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xLCB3cHRzZXJ2ZXJfZG9jX3Jvb3Q9J2ltcG9y
dGVkL3czYycpLCBwcmludGVyPU1vY2soKSkKICAgICAgICAgICAgIHJldHVybiBtYW5hZ2VyCiAK
ICAgICAgICAgbWFuYWdlciA9IGdldF9tYW5hZ2VyKCkKQEAgLTc5LDcgKzg1LDcgQEAgY2xhc3Mg
TWFuYWdlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBkZWYgZ2V0X21hbmFnZXIo
KToKICAgICAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgICAgICBwb3J0ID0gaG9z
dC5wb3J0X2ZhY3RvcnkuZ2V0KCd0ZXN0LW1hYy1sZW9wYXJkJykKLSAgICAgICAgICAgIG1hbmFn
ZXIgPSBNYW5hZ2VyKHBvcnQsIG9wdGlvbnM9TW9ja09wdGlvbnModGVzdF9saXN0PU5vbmUsIGh0
dHA9VHJ1ZSwgbWF4X2xvY2tlZF9zaGFyZHM9MSksIHByaW50ZXI9TW9jaygpKQorICAgICAgICAg
ICAgbWFuYWdlciA9IE1hbmFnZXIocG9ydCwgb3B0aW9ucz1Nb2NrT3B0aW9ucyh0ZXN0X2xpc3Q9
Tm9uZSwgaHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xLCB3cHRzZXJ2ZXJfZG9jX3Jvb3Q9
J2ltcG9ydGVkL3czYycpLCBwcmludGVyPU1vY2soKSkKICAgICAgICAgICAgIHJldHVybiBtYW5h
Z2VyCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgIHBvcnQgPSBob3N0LnBvcnRf
ZmFjdG9yeS5nZXQoJ3Rlc3QtbWFjLWxlb3BhcmQnKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggNjhkYzhl
MzFkZmIxMjY0ZGJiZmE0YmFmYTFhZTNiZjM5ZmY1ZWJlZi4uZWU4ZDkyNGZkYzBiM2Y1NjkxODBm
OTc2ZDUyNzM5ODQ0OTZhODAyMiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0yODksNiArMjg5LDE3IEBA
IGRlZiBwYXJzZV9hcmdzKGFyZ3MpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25m
aWd1cmF0aW9ucy4gRG9lcyBub3QgcnVuIGFueSB0ZXN0cy4iKSksCiAgICAgXSkpCiAKKyAgICBv
cHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgiV2ViIFBsYXRmb3JtIFRlc3QgU2VydmVy
IE9wdGlvbnMiLCBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdwdHNlcnZlci1k
b2Mtcm9vdCIsIHR5cGU9InN0cmluZyIsIGRlZmF1bHQ9b3MucGF0aC5qb2luKCJpbXBvcnRlZCIs
ICJ3M2MiKSwKKyAgICAgICAgICAgIGhlbHA9KCJTZXQgd2ViIHBsYXRmb3JtIHNlcnZlciBkb2N1
bWVudCByb290LCByZWxhdGl2ZSB0byBMYXlvdXRUZXN0cyBkaXJlY3RvcnkiKSksCisgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdwdHNlcnZlci1wb3J0IiwgdHlwZT0iaW50IiwgZGVm
YXVsdD04ODAwLAorICAgICAgICAgICAgaGVscD0oIlNldCB3ZWIgcGxhdGZvcm0gbWFpbiBIVFRQ
IHNlcnZlciBwb3J0LiIpKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0td3B0c2Vy
dmVyLWhvc3RuYW1lIiwgdHlwZT0ic3RyaW5nIiwgZGVmYXVsdD0ibG9jYWxob3N0IiwKKyAgICAg
ICAgICAgIGhlbHA9KCJTZXQgd2ViIHBsYXRmb3JtIHNlcnZlciBob3N0IG5hbWUuIikpLAorICAg
ICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS13cHRzZXJ2ZXItcGFyYW1ldGVyIiwgdHlwZT0i
c3RyaW5nIiwgYWN0aW9uPSJhcHBlbmQiLCBkZWZhdWx0PVtdLAorICAgICAgICAgICAgaGVscD0o
IlNldCBhIHdlYiBwbGF0Zm9ybSBzZXJ2ZXIgcGFyYW1ldGVyICgtLXdwdHNlcnZlci1wYXJhbWV0
ZXI9bmFtZTp2YWx1ZSkiKSksCisgICAgXSkpCisKICAgICAjIEZJWE1FOiBNb3ZlIHRoZXNlIGlu
dG8ganNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQogICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9u
cy5hcHBlbmQoKCJSZXN1bHQgSlNPTiBPcHRpb25zIiwgWwogICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbigiLS1tYXN0ZXItbmFtZSIsIGhlbHA9IlRoZSBuYW1lIG9mIHRoZSBidWlsZGJvdCBt
YXN0ZXIuIiksCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X2xhdW5jaGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9sYXVuY2hlci5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kOTk4MTVmZmYyYjBjZTM5YTAwNmU2YmNiYzk4Y2Y1MzYzYzk0MjAzCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2Vy
dmVycy93ZWJfcGxhdGZvcm1fdGVzdF9sYXVuY2hlci5weQpAQCAtMCwwICsxLDE0OSBAQAorIyAg
Q29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMgIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIyAgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVz
IG9mCisjICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyMgIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorIyAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisjICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyAgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBv
cnQgb3B0cGFyc2UKK2ltcG9ydCBvcworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25h
bWVfXykKK2xvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisjIFVzZWQgdG8gZHluYW1p
Y2FsbHkgbG9hZCB3ZWIgcGxhdGZvcm0gdGVzdCBtYWluIHNjcmlwdCAoc2VydmUucHkpIGFuZCBz
b21lIHdwdHNlcnZlIG1vZHVsZXMgKEZpbGVIYW5kZXIgYW5kIEhUVFBFeGNlcHRpb24pCitXZWJQ
bGF0Zm9ybVRlc3RTZXJ2ZXIgPSBOb25lCisKKworZGVmIG1haW4oYXJndiwgc3Rkb3V0LCBzdGRl
cnIpOgorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9hcmdzKGFyZ3YpCisgICAgaW1wb3J0X3dw
dHNlcnZlcihvcHRpb25zKQorICAgIGxhdW5jaGVyID0gV2ViUGxhdGZvcm1UZXN0TGF1bmNoZXIo
b3B0aW9ucykKKyAgICBsYXVuY2hlci5zdGFydCgpCisKKworZGVmIHBhcnNlX2FyZ3MoYXJncyk6
CisgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCisgICAgb3B0aW9u
X3BhcnNlci5hZGRfb3B0aW9uKCItLXdlYmtpdC1iYXNlIiwKKyAgICAgICAgZGVmYXVsdD1vcy5w
YXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdKSwgIi4u
IiwgIi4uIiwgIi4uIiwgIi4uIiwgIi4uIiksCisgICAgICAgIGhlbHA9KCJQYXRoIHRvIHdlYmtp
dCBiYXNlIGRpcmVjdG9yeSIpKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiLS1wb3J0
IiwgdHlwZT0iaW50IiwKKyAgICAgICAgZGVmYXVsdD04ODAwLAorICAgICAgICBoZWxwPSgiUG9y
dCBvZiB0aGUgbWFpbiBIVFRQIHNlcnZlciIpKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlv
bigiLS1kb2Mtcm9vdCIsCisgICAgICAgIGRlZmF1bHQ9b3MucGF0aC5qb2luKCJMYXlvdXRUZXN0
cyIsICJpbXBvcnRlZCIsICAidzNjIiksCisgICAgICAgIGhlbHA9KCJQYXRoIHRvIHRoZSBkb2Mg
cm9vdCBkaXJlY3RvcnkgcmVsYXRpdmUgdG8gd2Via2l0IGJhc2UgZGlyZWN0b3J5IikpCisgICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCItLWV4dGVybmFsLXJlc291cmNlcy1kaXIiLAorICAg
ICAgICBkZWZhdWx0PW9zLnBhdGguam9pbigiTGF5b3V0VGVzdHMiLCAicmVzb3VyY2VzIiksCisg
ICAgICAgIGhlbHA9KCJQYXRoIHRvIHRoZSByZXNvdXJjZXMgZGlyZWN0b3J5IHJlbGF0aXZlIHRv
IHdlYmtpdCBiYXNlIGRpcmVjdG9yeSIpKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigi
LS11c2UtaW5uZXItcmVzb3VyY2VzLWRpciIsCisgICAgICAgIGhlbHA9KCJJZiBzZXQsIHVzZXMg
dGhlIHJlc291cmNlcyBkaXIgaW5zaWRlIGRvYy1yb290IGRpcmVjdG9yeSwgb3RoZXJ3aXNlIHVz
ZXMgdGhlIHN1cHBsaWVkIGV4dGVybmFsIHJlc291cmNlcyBkaXIiKSkKKyAgICBvcHRpb25fcGFy
c2VyLmFkZF9vcHRpb24oIi0taG9zdG5hbWUiLAorICAgICAgICBkZWZhdWx0PSJsb2NhbGhvc3Qi
LAorICAgICAgICBoZWxwPSgiTmFtZSBvZiB0aGUgd2ViIHBsYXRmb3JtIHRlc3Qgc2VydmVyIGhv
c3QiKSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi0tcmV3cml0ZSIsIHR5cGU9InN0
cmluZyIsCisgICAgICAgIGRlZmF1bHQ9W10sIGFjdGlvbj0iYXBwZW5kIiwKKyAgICAgICAgaGVs
cD0oIkFkZCBhIHVybCByZXdyaXRlIHJ1bGUuICgtLXJld3JpdGU9VkVSQjpvcmlnaW46dGFyZ2V0
KSIpKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiLS13cHRzZXJ2ZXItYmFzZSIsCisg
ICAgICAgIGRlZmF1bHQ9b3MucGF0aC5qb2luKCJUb29scyIsICJTY3JpcHRzIiwgIndlYmtpdHB5
IiwgInRoaXJkcGFydHkiLCAiYXV0b2luc3RhbGxlZCIsICJ3cHRzZXJ2ZXIiKSwKKyAgICAgICAg
aGVscD0oIlBhdGggdG8gd3B0c2VydmVyIGJhc2UgZGlyZWN0b3J5IChjb250YWluaW5nIHNlcnZl
LnB5KSByZWxhdGl2ZSB0byB3ZWJraXQgYmFzZSBkaXJlY3RvcnkiKSkKKworICAgIHJldHVybiBv
cHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworCitjbGFzcyBXZWJQbGF0Zm9ybVRlc3RM
YXVuY2hlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zKToKKyAgICAg
ICAgaHR0cF9wb3J0ID0gb3B0aW9ucy5wb3J0CisgICAgICAgIGh0dHBfZG9jX3Jvb3QgPSBvcy5w
YXRoLmpvaW4ob3B0aW9ucy53ZWJraXRfYmFzZSwgb3B0aW9ucy5kb2Nfcm9vdCkKKworICAgICAg
ICBzZWxmLndwdHNlcnZlcl9jb25maWcgPSB7CisgICAgICAgICAgICAiaG9zdCI6IG9wdGlvbnMu
aG9zdG5hbWUsCisgICAgICAgICAgICAiZG9jX3Jvb3QiOiBodHRwX2RvY19yb290LAorICAgICAg
ICAgICAgImh0dHBfZG9jX3Jvb3QiOiBodHRwX2RvY19yb290LAorICAgICAgICAgICAgIndzX2Rv
Y19yb290IjogaHR0cF9kb2Nfcm9vdCwKKyAgICAgICAgICAgICJwb3J0cyI6IHsKKyAgICAgICAg
ICAgICAgICAiaHR0cCI6IFtodHRwX3BvcnQsICJhdXRvIl0sCisgICAgICAgICAgICAgICAgImh0
dHBzIjogWyJhdXRvIl0sCisgICAgICAgICAgICAgICAgIndzIjogWzQ5MDAwICsgaHR0cF9wb3J0
IC0gODgwMF19LAorICAgICAgICAgICAgImNoZWNrX3N1YmRvbWFpbnMiOiBGYWxzZSwKKyAgICAg
ICAgICAgICJsb2dfbGV2ZWwiOiAiZGVidWciLAorICAgICAgICB9CisKKyAgICBkZWYgc3RhcnQo
c2VsZik6CisgICAgICAgIFdlYlBsYXRmb3JtVGVzdFNlcnZlci5sb2dnZXIgPSBXZWJQbGF0Zm9y
bVRlc3RTZXJ2ZXIuZGVmYXVsdF9sb2dnZXIoc2VsZi53cHRzZXJ2ZXJfY29uZmlnWyJsb2dfbGV2
ZWwiXSkKKyAgICAgICAgY29uZmlnXywgc3RhcnRlZF9zZXJ2ZXJzID0gV2ViUGxhdGZvcm1UZXN0
U2VydmVyLnN0YXJ0KHNlbGYud3B0c2VydmVyX2NvbmZpZykKKworICAgICAgICBmb3IgcHJvdG9j
b2wsIHNlcnZlcnMgaW4gc3RhcnRlZF9zZXJ2ZXJzLml0ZW1zKCk6CisgICAgICAgICAgICBmb3Ig
cG9ydCwgcHJvY2VzcyBpbiBzZXJ2ZXJzOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCIl
cywgcG9ydDolZCwgcGlkOiVkIiAlIChwcm90b2NvbCwgcG9ydCwgcHJvY2Vzcy5wcm9jLnBpZCkp
CisKKyAgICAgICAgIyBXYWl0IHVudGlsOgorICAgICAgICAjIDEuIHVzZXIgcHJlc3NlcyBlbnRl
ciAoaW4gY2FzZSBzY3JpcHQgZXhlY3V0ZWQgaW4gY29tbWFuZCBsaW5lKQorICAgICAgICAjIDIu
IHRoZSBtYXN0ZXIgcHJvY2VzcyBzZW5kcyBlbnRlciAocmVndWxhciBzdG9wIGNvbW1hbmQpCisg
ICAgICAgICMgMy4gdGhlIG1hc3RlciBwcm9jZXNzIGlzIHN0b3BwZWQgKGFuZCBzdGRpbiBpcyBj
bG9zZWQpCisgICAgICAgIHN5cy5zdGRpbi5yZWFkKDEpCisKKworZGVmIGltcG9ydF93cHRzZXJ2
ZXIob3B0aW9ucyk6CisgICAgZ2xvYmFsIFdlYlBsYXRmb3JtVGVzdFNlcnZlcgorCisgICAgd3B0
c2VydmVyX2Jhc2UgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy53ZWJraXRfYmFzZSwgb3B0aW9ucy53
cHRzZXJ2ZXJfYmFzZSkKKyAgICB3cHRzZXJ2ZV9wYXRoID0gb3MucGF0aC5qb2luKHdwdHNlcnZl
cl9iYXNlLCAidG9vbHMiLCAid3B0c2VydmUiLCAid3B0c2VydmUiKQorCisgICAgc3lzLnBhdGgu
aW5zZXJ0KDEsIHdwdHNlcnZlcl9iYXNlKQorICAgIHN5cy5wYXRoLmluc2VydCgxLCB3cHRzZXJ2
ZV9wYXRoKQorCisgICAgZnJvbSBoYW5kbGVycyBpbXBvcnQgRmlsZUhhbmRsZXIKKyAgICBmcm9t
IHV0aWxzIGltcG9ydCBIVFRQRXhjZXB0aW9uCisgICAgaW1wb3J0IHNlcnZlIGFzIFdlYlBsYXRm
b3JtVGVzdFNlcnZlcgorCisgICAgIyBFeHRlcm5hbFJlc291cmNlSGFuZGxlciBhbGxvd3Mgc2Vy
dmluZyBmaWxlcyBvdXRzaWRlIGRvY19yb290CisgICAgIyBJdCBpcyB1c2VkIGZvciAiL3Jlc291
cmNlcy8iIFVSTFMKKyAgICBjbGFzcyBFeHRlcm5hbFJlc291cmNlSGFuZGxlcihGaWxlSGFuZGxl
cik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhbGlhcywgcmVzb3VyY2VfcGF0aCk6Cisg
ICAgICAgICAgICBGaWxlSGFuZGxlci5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgc2VsZi5h
bGlhcyA9IGFsaWFzCisgICAgICAgICAgICBzZWxmLnJlc291cmNlX3BhdGggPSByZXNvdXJjZV9w
YXRoCisKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHJlcXVlc3QsIHJlc3BvbnNlKToKKyAg
ICAgICAgICAgIHJlbGF0aXZlX3BhdGggPSByZXF1ZXN0LnVybF9wYXJ0cy5wYXRoCisgICAgICAg
ICAgICBpZiByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoc2VsZi5hbGlhcyk6CisgICAgICAgICAg
ICAgICAgcmVsYXRpdmVfcGF0aCA9IHJlbGF0aXZlX3BhdGhbbGVuKHNlbGYuYWxpYXMpOl0KKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgSFRUUEV4Y2VwdGlvbig0MDQp
CisgICAgICAgICAgICBpZiByZWxhdGl2ZV9wYXRoLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAg
ICAgICAgICByZWxhdGl2ZV9wYXRoID0gcmVsYXRpdmVfcGF0aFsxOl0KKyAgICAgICAgICAgIHBh
dGggPSBvcy5wYXRoLmpvaW4oc2VsZi5yZXNvdXJjZV9wYXRoLCByZWxhdGl2ZV9wYXRoKQorICAg
ICAgICAgICAgcmV0dXJuIEZpbGVIYW5kbGVyLnNlcnZlX2ZpbGUoc2VsZiwgcGF0aCwgcmVxdWVz
dCwgcmVzcG9uc2UpCisKKyAgICBpZiBub3Qgb3B0aW9ucy51c2VfaW5uZXJfcmVzb3VyY2VzX2Rp
cjoKKyAgICAgICAgcmVzb3VyY2VzX3BhdGggPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy53ZWJraXRf
YmFzZSwgb3B0aW9ucy5leHRlcm5hbF9yZXNvdXJjZXNfZGlyKQorICAgICAgICBXZWJQbGF0Zm9y
bVRlc3RTZXJ2ZXIucm91dGVzLmluc2VydCgzLCAoIkdFVCIsICIvcmVzb3VyY2VzLyoiLCBFeHRl
cm5hbFJlc291cmNlSGFuZGxlcigiL3Jlc291cmNlcy8iLCByZXNvdXJjZXNfcGF0aCkpKQorCisg
ICAgIyBTZXQgc2VydmVyIHJld3JpdGVzIGlmIGFueSBwYXNzZWQgYXMgcGFyYW1ldGVyCisgICAg
Zm9yIHJld3JpdGUgaW4gb3B0aW9ucy5yZXdyaXRlOgorICAgICAgICBydWxlID0gcmV3cml0ZS5z
cGxpdCgiOiIpCisgICAgICAgIGlmIGxlbihydWxlKSA9PSAzOgorICAgICAgICAgICAgV2ViUGxh
dGZvcm1UZXN0U2VydmVyLnJld3JpdGVzLmFwcGVuZChydWxlKQorCisKK2lmIF9fbmFtZV9fID09
ICJfX21haW5fXyI6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5cy5zdGRvdXQs
IHN5cy5zdGRlcnIpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MTlkYTBjZDdlNjZkYjhkMDM1MTIxN2ZkNzMyYTM2N2QxZDg3NzA3Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2Vy
dmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkKQEAgLTAsMCArMSwxMDAgQEAKKyMgIENv
cHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjICAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjICAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMgIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZgorIyAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjICBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisjICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisjICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjICBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKKyMgIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjICBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgorIyAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN1YnByb2Nlc3MK
K2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQg
aHR0cF9zZXJ2ZXJfYmFzZQorIyBJbXBvcnQgdG8gdHJpZ2dlciBhdXRvaW5zdGFsbCBvZiB3cHRz
ZXJ2ZXIgbW9kdWxlcyB1c2VkIGJ5IGRlZmF1bHQgYnkgd2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNo
ZXIucHkKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQud3B0c2VydmVy
CisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBXZWJQbGF0
Zm9ybVRlc3RTZXJ2ZXIoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBvdXRwdXRfZGlyLCBwaWRmaWxlPU5vbmUp
OgorICAgICAgICAiIiJBcmdzOgorICAgICAgICAgIG91dHB1dF9kaXI6IHRoZSBhYnNvbHV0ZSBw
YXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgZGlyZWN0b3J5CisgICAgICAgICIiIgorICAg
ICAgICBodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlLl9faW5pdF9fKHNlbGYsIHBvcnRf
b2JqKQorICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgorICAgICAgICBzZWxm
Ll9zZXRfc3RhcnRfY21kKHBvcnRfb2JqKQorCisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisg
ICAgICAgIHNlbGYuX2xvZ19maWxlX25hbWUgPSAnJXNfcHJvY2Vzc19sb2cub3V0LnR4dCcgJSAo
c2VsZi5fbmFtZSkKKworICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKKyAgICAgICAgc2VsZi5f
cHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGlkX2ZpbGUgPSBwaWRmaWxlCisgICAgICAg
IGlmIG5vdCBzZWxmLl9waWRfZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3BpZF9maWxlID0gc2Vs
Zi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3J1bnRpbWVfcGF0aCwgJyVzLnBpZCcgJSBzZWxmLl9u
YW1lKQorICAgICAgICBzZWxmLl9zdGRvdXRfZGF0YSA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3Rk
ZXJyX2RhdGEgPSBOb25lCisKKyAgICBkZWYgX3NldF9zdGFydF9jbWQoc2VsZiwgcG9ydF9vYmop
OgorICAgICAgICBzZWxmLl9zdGFydF9jbWQgPSBbInB5dGhvbiIsICJ3ZWJfcGxhdGZvcm1fdGVz
dF9sYXVuY2hlci5weSJdCisKKyAgICAgICAgaWYgKHBvcnRfb2JqLmdldF9vcHRpb24oIndwdHNl
cnZlcl9wb3J0IikpOgorICAgICAgICAgICAgc2VsZi5fc3RhcnRfY21kLmV4dGVuZChbIi0tcG9y
dCIsIHN0cihwb3J0X29iai5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfcG9ydCIpKV0pCisgICAgICAg
IGlmIChwb3J0X29iai5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfZG9jX3Jvb3QiKSk6CisgICAgICAg
ICAgICBzZWxmLl9zdGFydF9jbWQuZXh0ZW5kKFsiLS1kb2Mtcm9vdCIsIHNlbGYuX2ZpbGVzeXN0
ZW0uam9pbigiTGF5b3V0VGVzdHMiLCBwb3J0X29iai5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfZG9j
X3Jvb3QiKSldKQorICAgICAgICBpZiAocG9ydF9vYmouZ2V0X29wdGlvbigid3B0c2VydmVyX2hv
c3RuYW1lIikpOgorICAgICAgICAgICAgc2VsZi5fc3RhcnRfY21kLmV4dGVuZChbIi0taG9zdG5h
bWUiLCBwb3J0X29iai5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfaG9zdG5hbWUiKV0pCisgICAgICAg
IGlmIChwb3J0X29iai5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfcGFyYW1ldGVyIikpOgorICAgICAg
ICAgICAgZm9yIHBhcmFtZXRlciBpbiBwb3J0X29iai5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfcGFy
YW1ldGVyIik6CisgICAgICAgICAgICAgICAga2V5VmFsdWVTcGxpdCA9IHBhcmFtZXRlci5maW5k
KCI9IikKKyAgICAgICAgICAgICAgICBpZiBrZXlWYWx1ZVNwbGl0ICE9IC0xOgorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9zdGFydF9jbWQuZXh0ZW5kKFsiLS0iICsgcGFyYW1ldGVyWzprZXlW
YWx1ZVNwbGl0XSwgcGFyYW1ldGVyW2tleVZhbHVlU3BsaXQgKyAxOl1dKQorCisgICAgICAgIHNl
bGYuX2N3ZCA9IHNlbGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChzZWxmLl9maWxlc3lzdGVtLnNwbGl0
KF9fZmlsZV9fKVswXSkKKworICAgIGRlZiBfcHJlcGFyZV9jb25maWcoc2VsZik6CisgICAgICAg
IGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYuX291dHB1dF9kaXIpOgorICAgICAgICAg
ICAgb3V0cHV0X2xvZyA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9vdXRwdXRfZGlyLCBz
ZWxmLl9sb2dfZmlsZV9uYW1lKQorICAgICAgICAgICAgc2VsZi5fd3NvdXQgPSBzZWxmLl9maWxl
c3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKG91dHB1dF9sb2cpCisKKyAgICBkZWYg
X3NwYXduX3Byb2Nlc3Moc2VsZik6CisgICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nICVzIHNl
cnZlciwgY21kPSIlcyInICUgKHNlbGYuX25hbWUsIHNlbGYuX3N0YXJ0X2NtZCkpCisgICAgICAg
IHNlbGYuX3N0ZG91dF9kYXRhID0gTm9uZQorICAgICAgICBzZWxmLl9zdGRlcnJfZGF0YSA9IE5v
bmUKKyAgICAgICAgaWYgc2VsZi5fd3NvdXQ6CisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzID0g
c3VicHJvY2Vzcy5Qb3BlbihzZWxmLl9zdGFydF9jbWQsIGN3ZD1zZWxmLl9jd2QsIHNoZWxsPUZh
bHNlLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zZWxmLl93c291dCwgc3RkZXJyPXNl
bGYuX3dzb3V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHN1
YnByb2Nlc3MuUG9wZW4oc2VsZi5fc3RhcnRfY21kLCBjd2Q9c2VsZi5fY3dkLCBzaGVsbD1GYWxz
ZSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9
c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9m
aWxlKHNlbGYuX3BpZF9maWxlLCBzdHIoc2VsZi5fcHJvY2Vzcy5waWQpKQorICAgICAgICByZXR1
cm4gc2VsZi5fcHJvY2Vzcy5waWQKKworICAgIGRlZiBfc3RvcF9ydW5uaW5nX3NlcnZlcihzZWxm
KToKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBpbmcgJXMgc2VydmVyJyAlIChzZWxmLl9uYW1l
KSkKKyAgICAgICAgaWYgc2VsZi5fcGlkIGFuZCBub3Qgc2VsZi5fZXhlY3V0aXZlLmNoZWNrX3J1
bm5pbmdfcGlkKHNlbGYuX3BpZCk6CisgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92
ZShzZWxmLl9waWRfZmlsZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLl9w
cm9jZXNzOgorICAgICAgICAgICAgKHNlbGYuX3N0ZG91dF9kYXRhLCBzZWxmLl9zdGRlcnJfZGF0
YSkgPSBzZWxmLl9wcm9jZXNzLmNvbW11bmljYXRlKGlucHV0PSdcbicpCisgICAgICAgIGlmIHNl
bGYuX3dzb3V0OgorICAgICAgICAgICAgc2VsZi5fd3NvdXQuY2xvc2UoKQorICAgICAgICAgICAg
c2VsZi5fd3NvdXQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX2V4ZWN1dGl2ZS5jaGVja19ydW5u
aW5nX3BpZChzZWxmLl9waWQpOgorICAgICAgICAgICAgcmFpc2UgaHR0cF9zZXJ2ZXJfYmFzZS5T
ZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0b3AgJXM6IHBsZWFzZSBnbyB0byB3ZWIgcGxhdGZvcm0g
dGVzdCBzZXJ2ZXIgbG9nIGZpbGUgdG8gZ2V0IHRoZSBQSUQgbGlzdCcgJSAoc2VsZi5fbmFtZSkp
CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKHNlbGYuX3BpZF9maWxlKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxh
dGZvcm1fdGVzdF9zZXJ2ZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl91bml0dGVzdC5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41NGMyNzUwZDQ5YmI0Nzc2YTA3NmQzMDBkMGQwMGM3YjdkOTQyYzk2Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVy
cy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfdW5pdHRlc3QucHkKQEAgLTAsMCArMSw0NyBAQAor
IyAgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
ICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMgIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIyAgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5h
bWVzIG9mCisjICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyMgIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorIyAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyAgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3Qy
IGFzIHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9j
a0hvc3QKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgUG9ydAorZnJvbSB3ZWJraXRweS50b29s
Lm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucworCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5zZXJ2ZXJzLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciBpbXBvcnQgV2ViUGxhdGZvcm1UZXN0
U2VydmVyCisKKworY2xhc3MgVGVzdFdlYlBsYXRmb3JtVGVzdFNlcnZlcih1bml0dGVzdC5UZXN0
Q2FzZSk6CisgICAgZGVmIHRlc3Rfc3RhcnRfY21kKHNlbGYpOgorCisgICAgICAgIHBvcnQgPSBQ
b3J0KE1vY2tIb3N0KCksICJ0ZXN0IiwgTW9ja09wdGlvbnMod3B0c2VydmVyX3BvcnQ9ODgwMCwg
d3B0c2VydmVyX2RvY19yb290PSJpbXBvcnRlZC93M2MiKSkKKyAgICAgICAgc2VydmVyID0gV2Vi
UGxhdGZvcm1UZXN0U2VydmVyKHBvcnQsICJ3cHR0ZXN0IiwgIi9tb2NrL291dHB1dF9kaXIiLCAi
L21vY2svb3V0cHV0X2Rpci9waWQudHh0IikKKworICAgICAgICBzZXJ2ZXIuX3ByZXBhcmVfY29u
ZmlnKCkKKyAgICAgICAgc2VydmVyLl93c291dCA9IE5vbmUKKyAgICAgICAgc2VydmVyLl9zcGF3
bl9wcm9jZXNzKCkKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBzZXJ2ZXIuX3N0b3Bf
cnVubmluZ19zZXJ2ZXIoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlN0YXJ0ZWQgc2VydmVy
IGF0IGh0dHA6Ly9sb2NhbGhvc3Q6ODgwMCIsIHNlcnZlci5fc3Rkb3V0X2RhdGEpCisgICAgICAg
IHNlbGYuYXNzZXJ0SW4oIlN0YXJ0ZWQgc2VydmVyIGF0IHdzOi8vbG9jYWxob3N0OjQ5MDAwIiwg
c2VydmVyLl9zdGRvdXRfZGF0YSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKaW5kZXgg
ZTcyMTJlNWQ2YzAzY2Y3OGViMTMyMDhhNWI2NzAzMzI0MmIyODA0NC4uMzE1Mzk2ZTYyY2FhNWRm
MzBhYWZlM2Y4NWQ4OTUzN2E5MWNmYjU3YiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkKQEAgLTY1LDYgKzY1LDcgQEAgZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJv
Y2VzcwogZnJvbSB3ZWJraXRweS5wb3J0LmZhY3RvcnkgaW1wb3J0IFBvcnRGYWN0b3J5CiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBhcGFjaGVfaHR0cF9zZXJ2ZXIK
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyCitm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCB3ZWJfcGxhdGZvcm1fdGVz
dF9zZXJ2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IHdlYnNv
Y2tldF9zZXJ2ZXIKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtMTIy
LDYgKzEyMyw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgc2VsZi5faGVscGVyID0g
Tm9uZQogICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5fd2Vi
c29ja2V0X3NlcnZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyID0gTm9uZQogICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBOb25lCiAgICAgICAgIHNl
bGYuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gc2VydmVyX3Byb2Nlc3MuU2VydmVyUHJv
Y2VzcyAgIyBvdmVycmlkYWJsZSBmb3IgdGVzdGluZwogICAgICAgICBzZWxmLl9odHRwX2xvY2sg
PSBOb25lICAjIEZJWE1FOiBXaHkgZG9lcyB0aGlzIGxpdmUgb24gdGhlIHBvcnQgb2JqZWN0PwpA
QCAtODkzLDYgKzg5NSwxNSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNlcnZlci5z
dGFydCgpCiAgICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIgPSBzZXJ2ZXIKIAorICAgIGRl
ZiBzdGFydF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoc2VsZiwgYWRkaXRpb25hbF9kaXJzPU5v
bmUsIG51bWJlcl9vZl9zZXJ2ZXJzPU5vbmUpOgorICAgICAgICAiIiJTdGFydCBhIHdlYiBzZXJ2
ZXIuIFJhaXNlIGFuIGVycm9yIGlmIGl0IGNhbid0IHN0YXJ0IG9yIGlzIGFscmVhZHkgcnVubmlu
Zy4KKworICAgICAgICBQb3J0cyBjYW4gc3R1YiB0aGlzIG91dCBpZiB0aGV5IGRvbid0IG5lZWQg
YSB3ZWIgc2VydmVyIHRvIGJlIHJ1bm5pbmcuIiIiCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5f
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLCAnQWxyZWFkeSBydW5uaW5nIGEgV2ViIFBsYXRmb3Jt
IFRlc3Qgc2VydmVyLicKKworICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIg
PSB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIuV2ViUGxhdGZvcm1UZXN0U2VydmVyKHNlbGYsICJ3
cHR3ayIsIHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSkKKyAgICAgICAgc2VsZi5fd2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyLnN0YXJ0KCkKKwogICAgIGRlZiBodHRwX3NlcnZlcl9zdXBwb3J0c19p
cHY2KHNlbGYpOgogICAgICAgICAjIEN5Z3dpbiBpcyB0aGUgb25seSBwbGF0Zm9ybSB0byBzdGls
bCB1c2UgQXBhY2hlIDEuMywgd2hpY2ggb25seSBzdXBwb3J0cyBJUFY0LgogICAgICAgICAjIE9u
Y2UgaXQgbW92ZXMgdG8gQXBhY2hlIDIsIHdlIGNhbiBkcm9wIHRoaXMgbWV0aG9kIGFsdG9nZXRo
ZXIuCkBAIC05MjIsNiArOTMzLDEyIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgICAg
IHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIuc3RvcCgpCiAgICAgICAgICAgICBzZWxmLl93ZWJzb2Nr
ZXRfc2VydmVyID0gTm9uZQogCisgICAgZGVmIHN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
KHNlbGYpOgorICAgICAgICAiIiJTaHV0IGRvd24gdGhlIHdlYiBwbGF0Zm9ybSB0ZXN0IHNlcnZl
ciBpZiBpdCBpcyBydW5uaW5nLiBEbyBub3RoaW5nIGlmIGl0IGlzbid0LiIiIgorICAgICAgICBp
ZiBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI6CisgICAgICAgICAgICBzZWxmLl93ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXIuc3RvcCgpCisgICAgICAgICAgICBzZWxmLl93ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXIgPSBOb25lCisKICAgICBkZWYgcmVsZWFzZV9odHRwX2xvY2soc2VsZik6
CiAgICAgICAgIGlmIHNlbGYuX2h0dHBfbG9jazoKICAgICAgICAgICAgIHNlbGYuX2h0dHBfbG9j
ay5jbGVhbnVwX2h0dHBfbG9jaygpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQpp
bmRleCBjNThlOWFlYWQ1NmRiZTExNGM1YTMxNjZmNWY5NWQ5NWJhOTQ2YTVlLi4wOGM3ZjAwMTZl
MDhkODJkNWUzNzE2M2YwMWIxY2M0OGExYWJiZmNhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9kcml2ZXIucHkKQEAgLTE1MSw2ICsxNTEsMTEgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAg
ICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9wcm9maWxlciA9IE5vbmUKIAorICAgICAg
ICAjVE9ETyB1c2Ugd3d3LndlYi1wbGF0Zm9ybS50ZXN0IGFuZCBub3QgbG9jYWxob3N0PworICAg
ICAgICAjc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9iYXNlX3VyaSA9ICJodHRwOi8vd3d3LiIgKyBz
ZWxmLl9wb3J0LmdldF9vcHRpb24oIndwdHNlcnZlcl9ob3N0bmFtZSIpICsgIjoiICsgc3RyKHNl
bGYuX3BvcnQuZ2V0X29wdGlvbigid3B0c2VydmVyX3BvcnQiKSkgKyAiLyIKKyAgICAgICAgc2Vs
Zi53ZWJfcGxhdGZvcm1fdGVzdF9iYXNlX3VyaSA9ICJodHRwOi8vbG9jYWxob3N0OiIgKyBzdHIo
c2VsZi5fcG9ydC5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfcG9ydCIpKSArICIvIgorICAgICAgICBz
ZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2RpciA9IChzZWxmLl9wb3J0LmdldF9vcHRpb24oIndwdHNl
cnZlcl9kb2Nfcm9vdCIpIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigid3B0c2VydmVyX2RvY19y
b290IikgZWxzZSAiLiIpICsgIi8iCisKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAg
c2VsZi5zdG9wKCkKIApAQCAtMjI5LDggKzIzNCwxNCBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToK
ICAgICBkZWYgaXNfaHR0cF90ZXN0KHNlbGYsIHRlc3RfbmFtZSk6CiAgICAgICAgIHJldHVybiB0
ZXN0X25hbWUuc3RhcnRzd2l0aChzZWxmLkhUVFBfRElSKSBhbmQgbm90IHRlc3RfbmFtZS5zdGFy
dHN3aXRoKHNlbGYuSFRUUF9MT0NBTF9ESVIpCiAKKyAgICBkZWYgaXNfd2ViX3BsYXRmb3JtX3Rl
c3Qoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgcmV0dXJuIHRlc3RfbmFtZS5zdGFydHN3aXRo
KHNlbGYud2ViX3BsYXRmb3JtX3Rlc3RfZGlyKQorCiAgICAgZGVmIHRlc3RfdG9fdXJpKHNlbGYs
IHRlc3RfbmFtZSk6CiAgICAgICAgICIiIkNvbnZlcnQgYSB0ZXN0IG5hbWUgdG8gYSBVUkkuIiIi
CisgICAgICAgIGlmIHNlbGYuaXNfd2ViX3BsYXRmb3JtX3Rlc3QodGVzdF9uYW1lKToKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2Jhc2VfdXJpICsgdGVzdF9uYW1l
W2xlbihzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2Rpcik6XQorCiAgICAgICAgIGlmIG5vdCBzZWxm
LmlzX2h0dHBfdGVzdCh0ZXN0X25hbWUpOgogICAgICAgICAgICAgcmV0dXJuIHBhdGguYWJzcGF0
aF90b191cmkoc2VsZi5fcG9ydC5ob3N0LnBsYXRmb3JtLCBzZWxmLl9wb3J0LmFic3BhdGhfZm9y
X3Rlc3QodGVzdF9uYW1lKSkKIApAQCAtMjU0LDcgKzI2NSw5IEBAIGNsYXNzIERyaXZlcihvYmpl
Y3QpOgogICAgICAgICAgICAgaWYgbm90IHByZWZpeC5lbmRzd2l0aCgnLycpOgogICAgICAgICAg
ICAgICAgIHByZWZpeCArPSAnLycKICAgICAgICAgICAgIHJldHVybiB1cmlbbGVuKHByZWZpeCk6
XQotICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cDovLyIpOgorICAgICAgICBpZiB1cmku
c3RhcnRzd2l0aChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2Jhc2VfdXJpKToKKyAgICAgICAgICAg
IHJldHVybiB1cmkucmVwbGFjZShzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2Jhc2VfdXJpLCBzZWxm
LndlYl9wbGF0Zm9ybV90ZXN0X2RpcikKKyAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImh0dHA6
Ly8xMjcuMC4wLjE6ODAwMCIpOgogICAgICAgICAgICAgcmV0dXJuIHVyaS5yZXBsYWNlKCdodHRw
Oi8vMTI3LjAuMC4xOjgwMDAvJywgc2VsZi5IVFRQX0RJUikKICAgICAgICAgaWYgdXJpLnN0YXJ0
c3dpdGgoImh0dHBzOi8vIik6CiAgICAgICAgICAgICByZXR1cm4gdXJpLnJlcGxhY2UoJ2h0dHBz
Oi8vMTI3LjAuMC4xOjg0NDMvJywgc2VsZi5IVFRQX0RJUikKQEAgLTM4Miw3ICszOTUsNyBAQCBj
bGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgIyBGSVhNRTogcGVyZm9ybWFuY2UgdGVzdHMg
cGFzcyBpbiBmdWxsIFVSTHMgaW5zdGVhZCBvZiB0ZXN0IG5hbWVzLgogICAgICAgICBpZiBkcml2
ZXJfaW5wdXQudGVzdF9uYW1lLnN0YXJ0c3dpdGgoJ2h0dHA6Ly8nKSBvciBkcml2ZXJfaW5wdXQu
dGVzdF9uYW1lLnN0YXJ0c3dpdGgoJ2h0dHBzOi8vJykgIG9yIGRyaXZlcl9pbnB1dC50ZXN0X25h
bWUgPT0gKCdhYm91dDpibGFuaycpOgogICAgICAgICAgICAgY29tbWFuZCA9IGRyaXZlcl9pbnB1
dC50ZXN0X25hbWUKLSAgICAgICAgZWxpZiBzZWxmLmlzX2h0dHBfdGVzdChkcml2ZXJfaW5wdXQu
dGVzdF9uYW1lKToKKyAgICAgICAgZWxpZiBzZWxmLmlzX2h0dHBfdGVzdChkcml2ZXJfaW5wdXQu
dGVzdF9uYW1lKSBvciAgc2VsZi5pc193ZWJfcGxhdGZvcm1fdGVzdChkcml2ZXJfaW5wdXQudGVz
dF9uYW1lKToKICAgICAgICAgICAgIGNvbW1hbmQgPSBzZWxmLnRlc3RfdG9fdXJpKGRyaXZlcl9p
bnB1dC50ZXN0X25hbWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb21tYW5kID0gc2Vs
Zi5fcG9ydC5hYnNwYXRoX2Zvcl90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQppbmRleCA3ODdmMmRj
ZjUwOGE2NDNiZDg2M2Y0MmRlZThjNzhkMjJmMWM0YmVmLi41NDI3MGRkNDA5ZDQ0MzI0N2E1MGJj
NmJiYmVhNDg5NDk5ODA2MGJmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZHJpdmVyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9k
cml2ZXJfdW5pdHRlc3QucHkKQEAgLTg2LDYgKzg2LDcgQEAgY2xhc3MgRHJpdmVyVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBvcnQuX2NvbmZpZy5idWlsZF9kaXJlY3RvcnkgPSBs
YW1iZGEgY29uZmlndXJhdGlvbjogJy9tb2NrLWJ1aWxkJwogICAgICAgICByZXR1cm4gcG9ydAog
CisKICAgICBkZWYgX2Fzc2VydF93cmFwcGVyKHNlbGYsIHdyYXBwZXJfc3RyaW5nLCBleHBlY3Rl
ZF93cmFwcGVyKToKICAgICAgICAgd3JhcHBlciA9IERyaXZlcihzZWxmLm1ha2VfcG9ydChvcHRp
b25zPU1vY2tPcHRpb25zKHdyYXBwZXI9d3JhcHBlcl9zdHJpbmcpKSwgTm9uZSwgcGl4ZWxfdGVz
dHM9RmFsc2UpLl9jb21tYW5kX3dyYXBwZXIoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdy
YXBwZXIsIGV4cGVjdGVkX3dyYXBwZXIpCkBAIC0xMDQsMTggKzEwNSwyMCBAQCBjbGFzcyBEcml2
ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2
ZXIuX2NvbW1hbmRfd3JhcHBlcigpLCBbJ3BlcmYnLCAncmVjb3JkJywgJy0tY2FsbC1ncmFwaCcs
ICctLW91dHB1dCcsICcvbW9jay1idWlsZC9sYXlvdXQtdGVzdC1yZXN1bHRzL3Rlc3QuZGF0YSdd
KQogCiAgICAgZGVmIHRlc3RfdGVzdF90b191cmkoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxm
Lm1ha2VfcG9ydCgpCisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tP
cHRpb25zKHdwdHNlcnZlcl9wb3J0PTg4MDAsIHdwdHNlcnZlcl9kb2Nfcm9vdD0iaW1wb3J0ZWQv
dzNjIikpCiAgICAgICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCBOb25lLCBwaXhlbF90ZXN0cz1G
YWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudGVzdF90b191cmkoJ2Zvby9i
YXIuaHRtbCcpLCAnZmlsZTovLyVzL2Zvby9iYXIuaHRtbCcgJSBwb3J0LmxheW91dF90ZXN0c19k
aXIoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudGVzdF90b191cmkoJ2h0dHAv
dGVzdHMvZm9vLmh0bWwnKSwgJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28uaHRtbCcpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnRlc3RfdG9fdXJpKCdodHRwL3Rlc3RzL3NzbC9i
YXIuaHRtbCcpLCAnaHR0cHM6Ly8xMjcuMC4wLjE6ODQ0My9zc2wvYmFyLmh0bWwnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci50ZXN0X3RvX3VyaSgnaW1wb3J0ZWQvdzNjL2Zvby9i
YXIuaHRtbCcpLCAnaHR0cDovL2xvY2FsaG9zdDo4ODgwL2Zvby9iYXIuaHRtbCcpCiAKICAgICBk
ZWYgdGVzdF91cmlfdG9fdGVzdChzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0
KCkKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlvbnMod3B0
c2VydmVyX3BvcnQ9ODg4MCwgd3B0c2VydmVyX2RvY19yb290PSJpbXBvcnRlZC93M2MiKSkKICAg
ICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIE5vbmUsIHBpeGVsX3Rlc3RzPUZhbHNlKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci51cmlfdG9fdGVzdCgnZmlsZTovLyVzL2Zvby9i
YXIuaHRtbCcgJSBwb3J0LmxheW91dF90ZXN0c19kaXIoKSksICdmb28vYmFyLmh0bWwnKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci51cmlfdG9fdGVzdCgnaHR0cDovLzEyNy4wLjAu
MTo4MDAwL2Zvby5odG1sJyksICdodHRwL3Rlc3RzL2Zvby5odG1sJykKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChkcml2ZXIudXJpX3RvX3Rlc3QoJ2h0dHBzOi8vMTI3LjAuMC4xOjg0NDMvc3Ns
L2Jhci5odG1sJyksICdodHRwL3Rlc3RzL3NzbC9iYXIuaHRtbCcpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZHJpdmVyLnVyaV90b190ZXN0KCdodHRwOi8vbG9jYWxob3N0Ojg4ODAvZm9vL2Jh
ci5odG1sJyksICdpbXBvcnRlZC93M2MvZm9vL2Jhci5odG1sJykKIAogICAgIGRlZiB0ZXN0X3Jl
YWRfYmxvY2soc2VsZik6CiAgICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9ydCgpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkKaW5kZXggYzY5Mzc0MzUy
OGExZjBkMzI3MzZkYmEwMzhlZjEyMGYwNTg4YTQzMS4uMDQzODMzNjliNTQxNzNjMjFmN2Y4ZTRl
Zjc0ZmRlNTM5NzBlY2M1MSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L19faW5pdF9fLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9fX2luaXRfXy5weQpAQCAtOTEsNiArOTEsOCBAQCBjbGFzcyBBdXRvaW5zdGFsbEltcG9ydEhv
b2sob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfaXJjKCkKICAgICAgICAgZWxp
ZiAnLmJ1aWxkYm90JyBpbiBmdWxsbmFtZToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfYnVp
bGRib3QoKQorICAgICAgICBlbGlmICcud3B0c2VydmVyJyBpbiBmdWxsbmFtZToKKyAgICAgICAg
ICAgIHNlbGYuX2luc3RhbGxfd3B0c2VydmVyKCkKIAogICAgIGRlZiBfaW5zdGFsbF9tZWNoYW5p
emUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9pbnN0YWxsKCJodHRwOi8vcHlwaS5weXRo
b24ub3JnL3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9tZWNoYW5pemUtMC4yLjUudGFyLmd6
IiwKQEAgLTE1NSw2ICsxNTcsMTcgQEAgY2xhc3MgQXV0b2luc3RhbGxJbXBvcnRIb29rKG9iamVj
dCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPSJpcmNib3QucHkiKQog
ICAgICAgICByZXR1cm4gZGlkX2luc3RhbGxfc29tZXRoaW5nCiAKKyAgICBkZWYgX2luc3RhbGxf
d3B0c2VydmVyKHNlbGYpOgorICAgICAgICB3cHRzZXJ2ZXJfZGlyID0gc2VsZi5fZnMuam9pbihf
QVVUT0lOU1RBTExFRF9ESVIsICJ3cHRzZXJ2ZXIiKQorICAgICAgICBpbnN0YWxsZXIgPSBBdXRv
SW5zdGFsbGVyKHRhcmdldF9kaXI9d3B0c2VydmVyX2RpcikKKyAgICAgICAgZGlkX2luc3RhbGxf
c29tZXRoaW5nID0gaW5zdGFsbGVyLmluc3RhbGwodXJsPSJodHRwczovL3Jhdy5naXRodWIuY29t
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvMTM2NDdmNmNhYjU0YzAwZjcwMmFjODg0ZjFiOTAxZGE4
ZmFhYzg4Yi9zZXJ2ZS5weSIsIHRhcmdldF9uYW1lPSJzZXJ2ZS5weSIpCisgICAgICAgIHRvb2xz
X2RpciA9IHNlbGYuX2ZzLmpvaW4oX0FVVE9JTlNUQUxMRURfRElSLCAid3B0c2VydmVyIiwgInRv
b2xzIikKKyAgICAgICAgaW5zdGFsbGVyID0gQXV0b0luc3RhbGxlcih0YXJnZXRfZGlyPXRvb2xz
X2RpcikKKyAgICAgICAgI1RPRE86IHN3aXRjaCB0byBXM0Mgd3B0c2VydmUgcmVwb3NpdG9yeSBv
bmNlIEZpbGVIYW5kbGVyIHB1bGwgcmVxdWVzdCBtZXJnZWQKKyAgICAgICAgZGlkX2luc3RhbGxf
c29tZXRoaW5nIHw9IGluc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0cHM6Ly9naXRodWIuY29tL3lv
dWVubmYvd3B0c2VydmUvYXJjaGl2ZS9jMTNmZmFhOWE5MmU1MTM2NWRkYzhkZDRiOGNiZDU0YWNi
ODFjNTA3LnRhci5neiIsIHVybF9zdWJwYXRoPSJ3cHRzZXJ2ZS1jMTNmZmFhOWE5MmU1MTM2NWRk
YzhkZDRiOGNiZDU0YWNiODFjNTA3IiwgdGFyZ2V0X25hbWU9IndwdHNlcnZlIikKKyAgICAgICAg
ZGlkX2luc3RhbGxfc29tZXRoaW5nIHw9IGluc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0cHM6Ly9n
aXRodWIuY29tL3czYy9weXdlYnNvY2tldC9hcmNoaXZlLzhkNzA2MzE4ZTFjNWU5YjY4ZDQzOGQy
NzM0YzZkMDMwNjc4NjYwN2QudGFyLmd6IiwgdXJsX3N1YnBhdGg9InB5d2Vic29ja2V0LThkNzA2
MzE4ZTFjNWU5YjY4ZDQzOGQyNzM0YzZkMDMwNjc4NjYwN2QiLCB0YXJnZXRfbmFtZT0icHl3ZWJz
b2NrZXQiKQorICAgICAgICByZXR1cm4gZGlkX2luc3RhbGxfc29tZXRoaW5nCisKICAgICBkZWYg
X2luc3RhbGxfdW5pdHRlc3QyKHNlbGYpOgogICAgICAgICBzZWxmLl9lbnN1cmVfYXV0b2luc3Rh
bGxlZF9kaXJfaXNfaW5fc3lzX3BhdGgoKQogICAgICAgICByZXR1cm4gc2VsZi5faW5zdGFsbCh1
cmw9Imh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3UvdW5pdHRlc3QyL3Vu
aXR0ZXN0Mi0wLjUuMS50YXIuZ3ojbWQ1PWEwYWY1Y2FjOTJiYmJmYTBjM2IwZTk5NTcxMzkwZTBm
IiwgdXJsX3N1YnBhdGg9InVuaXR0ZXN0Mi0wLjUuMS91bml0dGVzdDIiKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224176</attachid>
            <date>2014-02-14 00:56:38 -0800</date>
            <delta_ts>2014-06-19 08:08:49 -0700</delta_ts>
            <desc>fixed default websocket handlers path</desc>
            <filename>bug-127094-20140214095630.patch</filename>
            <type>text/plain</type>
            <size>45066</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0MDI4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMmZhMWRjMjM2OGY2YzkwOGNmMWMyOTU0YWFhNzU5MDli
ZGJiODM5MS4uMDU3Y2EzZTI5NmRhM2NjMzMwMmM1YmIxNDVhODE5ZjQ5YzFmMzQ5NyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgw
IEBACisyMDE0LTAyLTE0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgSW50ZWdyYXRlIFdQIHB5dGhvbiBzZXJ2ZXIgaW50byBXZWJLaXQgdGVz
dCBmcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNzA5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGVkIHdlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5weSB0byBzdGFydCBhbmQgc3RvcCB3
cHQgc2VydmVyIGFzIGEgcHl0aG9uIHByb2Nlc3MKKyAgICAgICAgQWRkZWQgd2ViX3BsYXRmb3Jt
X3Rlc3RfbGF1bmNoZXIucHksIHRoZSBweXRob24gc2NyaXB0IHRoYXQgaXMgZXhlY3V0ZWQgd2l0
aGluIHRoZSBweXRob24gcHJvY2VzcyB0byBydW4gdGhlIHdwdCBzZXJ2ZXIKKyAgICAgICAgVXBk
YXRlZCBleGlzdGluZyBpbmZyYXN0cnVjdHVyZSB0byBzdGFydC9zdG9wIFdlYiBQbGF0Zm9ybSBU
ZXN0IHNlcnZlciBmb3IgdGVzdHMgdW5kZXIgaW1wb3J0ZWQvdzNjCisgICAgICAgIEFkZGVkIHRo
ZSBwb3NzaWJpbGl0eSB0byBwYXJhbWV0ZXJpemUgdGhlIFdlYiBQbGF0Zm9ybSBUZXN0IHNlcnZl
ciBjb25maWd1cmF0aW9uIAorICAgICAgICBVcGRhdGVkIHVuaXQgdGVzdHMKKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1
bm5lci5weTogTGF1bmNocyB3ZWIgcGxhdGZvcm0gdGVzdCBzZXJ2ZXIgaWYgbmVlZGVkCisgICAg
ICAgIChMYXlvdXRUZXN0UnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKExheW91dFRlc3RSdW5u
ZXIucnVuX3Rlc3RzKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuc3RhcnRfc2VydmVyc193
aXRoX2xvY2spOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5zdG9wX3NlcnZlcnNfd2l0aF9s
b2NrKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVy
cy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChMYXlvdXRUZXN0UnVu
bmVyVGVzdHMuX3J1bl90ZXN0cyk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMudGVz
dF9zZXJ2ZXJzX3N0YXJ0ZWQuc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKToKKyAgICAg
ICAgKExheW91dFRlc3RSdW5uZXJUZXN0cy50ZXN0X3NlcnZlcnNfc3RhcnRlZC5zdG9wX3dlYl9w
bGF0Zm9ybV90ZXN0X3NlcnZlcik6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMpOgor
ICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lclRlc3RzLnRlc3Rfc2VydmVyc19zdGFydGVkKToKKyAg
ICAgICAgKFNoYXJkZXJUZXN0cy50ZXN0X3NoYXJkX2V2ZXJ5X2ZpbGUpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHk6IGRldGVj
dHMgd3B0IHRlc3RzIGJhc2VkIG9uICJ3cHRzZXJ2ZXJfZG9jX3Jvb3QiIG9wdGlvbgorICAgICAg
ICAoTWFuYWdlci5fX2luaXRfXyk6CisgICAgICAgIChNYW5hZ2VyLl9pc193ZWJfcGxhdGZvcm1f
dGVzdCk6CisgICAgICAgIChNYW5hZ2VyLl90ZXN0X3JlcXVpcmVzX2xvY2spOgorICAgICAgICAo
TWFuYWdlci5fcnVuX3Rlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoTWFuYWdlclRl
c3QudGVzdF9uZWVkc19zZXJ2ZXJzLmdldF9tYW5hZ2VyKToKKyAgICAgICAgKE1hbmFnZXJUZXN0
LnRlc3RfbmVlZHNfc2VydmVycyk6CisgICAgICAgIChNYW5hZ2VyVGVzdC5pbnRlZ3JhdGlvbl90
ZXN0X25lZWRzX3NlcnZlcnMuZ2V0X21hbmFnZXIpOgorICAgICAgICAoTWFuYWdlclRlc3QudGVz
dF9sb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncy5nZXRfbWFuYWdlcik6CisgICAgICAgIChNYW5hZ2Vy
VGVzdCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weTogQWRkZWQgd2ViIHBsYXRmb3JtIHRlc3Qgc2VydmVyIHNwZWNpZmljIHBhcmFt
ZXRlcnMKKyAgICAgICAgKHBhcnNlX2FyZ3MpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNoZXIucHk6IEFkZGVk
IChzY3JpcHQgdGhhdCBpcyBleGVjdXRlZCB3aXRoaW4gYSBwcm9jZXNzIHRvIGNvbmZpZ3VyZSBh
bmQgcnVuIHRoZSB3ZWIgcGxhdGZvcm0gdGVzdCBzZXJ2ZXIpLgorICAgICAgICAobWFpbik6Cisg
ICAgICAgIChwYXJzZV9hcmdzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtVGVzdExhdW5jaGVyKToK
KyAgICAgICAgKFdlYlBsYXRmb3JtVGVzdExhdW5jaGVyLl9faW5pdF9fKToKKyAgICAgICAgKFdl
YlBsYXRmb3JtVGVzdExhdW5jaGVyLnN0YXJ0KToKKyAgICAgICAgKGltcG9ydF93cHRzZXJ2ZXIp
OgorICAgICAgICAoaW1wb3J0X3dwdHNlcnZlci5FeHRlcm5hbFJlc291cmNlSGFuZGxlcik6Cisg
ICAgICAgIChpbXBvcnRfd3B0c2VydmVyLkV4dGVybmFsUmVzb3VyY2VIYW5kbGVyLl9faW5pdF9f
KToKKyAgICAgICAgKGltcG9ydF93cHRzZXJ2ZXIuRXh0ZXJuYWxSZXNvdXJjZUhhbmRsZXIuX19j
YWxsX18pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMv
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLnB5OiBBZGRlZCAocmVzcG9uc2libGUgdG8gbGF1bmNo
IGFuZCB0ZXJtaW5hdGUgdGhlIHdlYiBwbGF0Zm9ybSB0ZXN0IHNlcnZlciBtYWluIHByb2Nlc3Mp
LgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyKToKKyAgICAgICAgKFdlYlBsYXRmb3Jt
VGVzdFNlcnZlci5fX2luaXRfXyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3Nl
dF9zdGFydF9jbWQpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9wcmVwYXJlX2Nv
bmZpZyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3NwYXduX3Byb2Nlc3MpOgor
ICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9zdG9wX3J1bm5pbmdfc2VydmVyKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9y
bV90ZXN0X3NlcnZlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0V2ViUGxhdGZv
cm1UZXN0U2VydmVyKToKKyAgICAgICAgKFRlc3RXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIudGVzdF9z
dGFydF9jbWQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OiBBZGRl
ZCBzdGFydC9zdG9wIHdlYiBwbGF0Zm9ybSB0ZXN0IHNlcnZlciBtZXRob2RzCisgICAgICAgIChQ
b3J0Ll9faW5pdF9fKToKKyAgICAgICAgKFBvcnQudG8uc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyKToKKyAgICAgICAgKFBvcnQudG8uc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIp
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6IEFkZGVkIG1hcHBp
bmcgYmV0d2VlbiB3ZWIgcGxhdGZvcm0gdGVzdCBuYW1lcyBhbmQgdXJscworICAgICAgICAoRHJp
dmVyLl9faW5pdF9fKToKKyAgICAgICAgKERyaXZlci5pc193ZWJfcGxhdGZvcm1fdGVzdCk6Cisg
ICAgICAgIChEcml2ZXIudGVzdF90b191cmkpOgorICAgICAgICAoRHJpdmVyLnVyaV90b190ZXN0
KToKKyAgICAgICAgKERyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dCk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weToKKyAgICAgICAgKERy
aXZlclRlc3QubWFrZV9wb3J0KToKKyAgICAgICAgKERyaXZlclRlc3QuX2Fzc2VydF93cmFwcGVy
KToKKyAgICAgICAgKERyaXZlclRlc3QudGVzdF90ZXN0X3RvX3VyaSk6CisgICAgICAgIChEcml2
ZXJUZXN0LnRlc3RfdXJpX3RvX3Rlc3QpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9fX2luaXRfXy5weTogQWRkZWQgYXV0by1pbnN0YWxsIG9mIHNwZWNpZmljIHZlcnNp
b25zIG9mIHdwdHNlcnZlLCBweXdlYnNvY2tldCwgc2VydmUucHkKKyAgICAgICAgKEF1dG9pbnN0
YWxsSW1wb3J0SG9vay5maW5kX21vZHVsZSk6CisgICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhv
b2suX2luc3RhbGxfd3B0c2VydmVyKToKKwogMjAxNC0wMi0xMyAgU2VyZ2lvIFZpbGxhciBTZW5p
biAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBNb3ZlZCBteXNl
bGYgdG8gdGhlIGxpc3Qgb2YgcmV2aWV3ZXJzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rl
c3RfcnVubmVyLnB5CmluZGV4IGRjMDllYWQwYjU1MjEyZmI4NmM3N2ZlNTk3MjQ5MzdmYmJiMmE5
NDYuLjNhMTVlZDJkMjE2ZGM2ODk2YWI3ZjllNGIyMTJjOTdmZTlhYTVjMGUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90
ZXN0X3J1bm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKQEAgLTc0LDE2ICs3NCwxOCBAQCBjbGFz
cyBMYXlvdXRUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3Rlc3RfaW5wdXRzID0g
W10KICAgICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IE5vbmUKICAgICAgICAgc2VsZi5fbmVlZHNf
d2Vic29ja2V0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyID0gTm9uZQogICAgICAgICBzZWxmLl9yZXRyeWluZyA9IEZhbHNlCiAKICAgICAgICAg
c2VsZi5fY3VycmVudF9ydW5fcmVzdWx0cyA9IE5vbmUKICAgICAgICAgc2VsZi5fcmVtYWluaW5n
X2xvY2tlZF9zaGFyZHMgPSBbXQogICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gRmFsc2UK
IAotICAgIGRlZiBydW5fdGVzdHMoc2VsZiwgZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVz
dHNfdG9fc2tpcCwgbnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIHJl
dHJ5aW5nKToKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGV4cGVjdGF0aW9ucywgdGVzdF9pbnB1
dHMsIHRlc3RzX3RvX3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19odHRwLCBuZWVkc193ZWJzb2Nr
ZXRzLCBuZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIsIHJldHJ5aW5nKToKICAgICAgICAg
c2VsZi5fZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zCiAgICAgICAgIHNlbGYuX3Rlc3RfaW5w
dXRzID0gdGVzdF9pbnB1dHMKICAgICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IG5lZWRzX2h0dHAK
KyAgICAgICAgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gbmVlZHNfd2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyCiAgICAgICAgIHNlbGYuX25lZWRzX3dlYnNvY2tldHMgPSBu
ZWVkc193ZWJzb2NrZXRzCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gcmV0cnlpbmcKIApAQCAt
MjA2LDYgKzIwOCw5IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAg
aWYgc2VsZi5fbmVlZHNfd2Vic29ja2V0czoKICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3Jp
dGVfdXBkYXRlKCdTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCiAgICAgICAgICAgICBz
ZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICBpZiBzZWxmLl9uZWVk
c193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI6CisgICAgICAgICAgICBzZWxmLl9wcmludGVyLndy
aXRlX3VwZGF0ZSgnU3RhcnRpbmcgV2ViIFBsYXRmb3JtIFRlc3Qgc2VydmVyIC4uLicpCisgICAg
ICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcigpCiAgICAg
ICAgIHNlbGYuX2hhc19odHRwX2xvY2sgPSBUcnVlCiAKICAgICBkZWYgc3RvcF9zZXJ2ZXJzX3dp
dGhfbG9jayhzZWxmKToKQEAgLTIxNiw2ICsyMjEsOSBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVy
KG9iamVjdCk6CiAgICAgICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJzb2NrZXRzOgogICAgICAg
ICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdG9wcGluZyBXZWJTb2NrZXQg
c2VydmVyIC4uLicpCiAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9z
ZXJ2ZXIoKQorICAgICAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyOgorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdG9wcGlu
ZyBXZWIgUGxhdGZvcm0gVGVzdCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgICAgICBzZWxmLl9w
b3J0LnN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKCkKICAgICAgICAgICAgIHNlbGYuX3By
aW50ZXIud3JpdGVfdXBkYXRlKCdSZWxlYXNpbmcgc2VydmVyIGxvY2sgLi4uJykKICAgICAgICAg
ICAgIHNlbGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQogICAgICAgICAgICAgc2VsZi5faGFz
X2h0dHBfbG9jayA9IEZhbHNlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVz
dF9ydW5uZXJfdW5pdHRlc3QucHkKaW5kZXggODA5NzdlNTc2ZTk2ZjVmMDA2N2ZlMTAxY2RlOThl
OGJmODc3NzlhMi4uMTNhNzI2NmQzMTQwODQyNjY4NjQ0YzlhZmMyNWMzM2Q0Nzg1ZmUxZCAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5w
eQpAQCAtMTA2LDcgKzEwNiw3IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXJUZXN0cyh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgICAgIGV4cGVjdGF0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnMocnVu
bmVyLl9wb3J0LCB0ZXN0cykKICAgICAgICAgZXhwZWN0YXRpb25zLnBhcnNlX2FsbF9leHBlY3Rh
dGlvbnMoKQogICAgICAgICBydW5uZXIucnVuX3Rlc3RzKGV4cGVjdGF0aW9ucywgdGVzdF9pbnB1
dHMsIHNldCgpLAotICAgICAgICAgICAgbnVtX3dvcmtlcnM9MSwgbmVlZHNfaHR0cD1hbnkoJ2h0
dHAnIGluIHRlc3QgZm9yIHRlc3QgaW4gdGVzdHMpLCBuZWVkc193ZWJzb2NrZXRzPWFueShbJ3dl
YnNvY2tldCcgaW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0c10pLCByZXRyeWluZz1GYWxzZSkKKyAg
ICAgICAgICAgIG51bV93b3JrZXJzPTEsIG5lZWRzX2h0dHA9YW55KCdodHRwJyBpbiB0ZXN0IGZv
ciB0ZXN0IGluIHRlc3RzKSwgbmVlZHNfd2Vic29ja2V0cz1hbnkoWyd3ZWJzb2NrZXQnIGluIHRl
c3QgZm9yIHRlc3QgaW4gdGVzdHNdKSwgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyPWFu
eShbJ2ltcG9ydGVkL3czYycgaW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0c10pLCByZXRyeWluZz1G
YWxzZSkKIAogICAgIGRlZiB0ZXN0X2h0dHBfbG9ja2luZyhzZWxmKToKICAgICAgICAgcnVubmVy
ID0gc2VsZi5fcnVubmVyKCkKQEAgLTE3Niw0OSArMTc2LDgzIEBAIGNsYXNzIExheW91dFRlc3RS
dW5uZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGRlZiBzdGFydF93ZWJzb2Nr
ZXRfc2VydmVyKCk6CiAgICAgICAgICAgICBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gVHJ1ZQog
CisgICAgICAgIGRlZiBzdGFydF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoKToKKyAgICAgICAg
ICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBUcnVlCisKICAgICAg
ICAgZGVmIHN0b3BfaHR0cF9zZXJ2ZXIoKToKICAgICAgICAgICAgIHNlbGYuaHR0cF9zdG9wcGVk
ID0gVHJ1ZQogCiAgICAgICAgIGRlZiBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKToKICAgICAgICAg
ICAgIHNlbGYud2Vic29ja2V0X3N0b3BwZWQgPSBUcnVlCiAKKyAgICAgICAgZGVmIHN0b3Bfd2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyKCk6CisgICAgICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlcl9zdG9wcGVkID0gVHJ1ZQorCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAg
ICAgICAgIHBvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3QtbWFjLWxlb3BhcmQnKQog
ICAgICAgICBwb3J0LnN0YXJ0X2h0dHBfc2VydmVyID0gc3RhcnRfaHR0cF9zZXJ2ZXIKICAgICAg
ICAgcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyID0gc3RhcnRfd2Vic29ja2V0X3NlcnZlcgor
ICAgICAgICBwb3J0LnN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IHN0YXJ0X3dlYl9w
bGF0Zm9ybV90ZXN0X3NlcnZlcgogICAgICAgICBwb3J0LnN0b3BfaHR0cF9zZXJ2ZXIgPSBzdG9w
X2h0dHBfc2VydmVyCiAgICAgICAgIHBvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyID0gc3RvcF93
ZWJzb2NrZXRfc2VydmVyCisgICAgICAgIHBvcnQuc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2
ZXIgPSBzdG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcgogCiAgICAgICAgIHNlbGYuaHR0cF9z
dGFydGVkID0gc2VsZi5odHRwX3N0b3BwZWQgPSBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2Vs
Zi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVk
ID0gRmFsc2UKICAgICAgICAgcnVubmVyID0gc2VsZi5fcnVubmVyKHBvcnQ9cG9ydCkKICAgICAg
ICAgcnVubmVyLl9uZWVkc19odHRwID0gVHJ1ZQogICAgICAgICBydW5uZXIuX25lZWRzX3dlYnNv
Y2tldHMgPSBGYWxzZQorICAgICAgICBydW5uZXIuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3Nl
cnZlciA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhudW1i
ZXJfb2Zfc2VydmVycz00KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdGFy
dGVkLCBUcnVlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0YXJ0
ZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyX3N0YXJ0ZWQsIEZhbHNlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dp
dGhfbG9jaygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIFRy
dWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCwgRmFs
c2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2
ZXJfc3RvcHBlZCwgRmFsc2UpCiAKICAgICAgICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBzZWxmLmh0
dHBfc3RvcHBlZCA9IHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tldF9zdG9w
cGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRl
ZCA9IHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQgPSBGYWxzZQogICAgICAg
ICBydW5uZXIuX25lZWRzX2h0dHAgPSBUcnVlCiAgICAgICAgIHJ1bm5lci5fbmVlZHNfd2Vic29j
a2V0cyA9IFRydWUKKyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2
ZXIgPSBGYWxzZQogICAgICAgICBydW5uZXIuc3RhcnRfc2VydmVyc193aXRoX2xvY2sobnVtYmVy
X29mX3NlcnZlcnM9NCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RhcnRl
ZCwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdGFydGVk
LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyX3N0YXJ0ZWQsIEZhbHNlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhf
bG9jaygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIFRydWUp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCwgVHJ1ZSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9z
dG9wcGVkLCBGYWxzZSkKKworICAgICAgICBzZWxmLmh0dHBfc3RhcnRlZCA9IHNlbGYuaHR0cF9z
dG9wcGVkID0gc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCA9IHNlbGYud2Vic29ja2V0X3N0b3BwZWQg
PSBGYWxzZQorICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVkID0g
c2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHJ1
bm5lci5fbmVlZHNfaHR0cCA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2Vic29ja2V0
cyA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
ID0gRmFsc2UKKyAgICAgICAgcnVubmVyLnN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKG51bWJlcl9v
Zl9zZXJ2ZXJzPTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0YXJ0ZWQs
IEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQs
IEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyX3N0YXJ0ZWQsIEZhbHNlKQorICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhf
bG9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIEZhbHNl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0b3BwZWQsIEZhbHNl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
X3N0b3BwZWQsIEZhbHNlKQogCiAgICAgICAgIHNlbGYuaHR0cF9zdGFydGVkID0gc2VsZi5odHRw
X3N0b3BwZWQgPSBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2VsZi53ZWJzb2NrZXRfc3RvcHBl
ZCA9IEZhbHNlCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQg
PSBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkID0gRmFsc2UKICAgICAgICAg
cnVubmVyLl9uZWVkc19odHRwID0gRmFsc2UKICAgICAgICAgcnVubmVyLl9uZWVkc193ZWJzb2Nr
ZXRzID0gRmFsc2UKKyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2
ZXIgPSBUcnVlCiAgICAgICAgIHJ1bm5lci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhudW1iZXJf
b2Zfc2VydmVycz00KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdGFydGVk
LCBGYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdGFydGVk
LCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlcl9zdGFydGVkLCBUcnVlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhf
bG9jaygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIEZhbHNl
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0b3BwZWQsIEZhbHNl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
X3N0b3BwZWQsIFRydWUpCiAKIAogY2xhc3MgU2hhcmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNl
KToKQEAgLTI4MCw3ICszMTQsNyBAQCBjbGFzcyBTaGFyZGVyVGVzdHModW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICAgICAgICgnLicsIFsnaHR0cC90ZXN0cy9zZWN1cml0eS92aWV3LXNvdXJj
ZS1uby1yZWZyZXNoLmh0bWwnXSksCiAgICAgICAgICAgICAgKCcuJywgWydodHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy93ZWJzb2NrZXQtcHJvdG9jb2wtaWdub3JlZC5odG1sJ10pLAogICAgICAg
ICAgICAgICgnLicsIFsnaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBwb3J0ZWQteG1sLWNv
bnRlbnQtdHlwZXMuaHRtbCddKSwKLSAgICAgICAgICAgICAoJy4nLCBbJ3BlcmYvb2JqZWN0LWtl
eXMuaHRtbCddKV0pLAorICAgICAgICAgICAgICgnLicsIFsncGVyZi9vYmplY3Qta2V5cy5odG1s
J10pXSkKICAgICAgICAgc2VsZi5hc3NlcnRfc2hhcmRzKHVubG9ja2VkLAogICAgICAgICAgICAg
WygnLicsIFsnYW5pbWF0aW9ucy9rZXlmcmFtZXMuaHRtbCddKSwKICAgICAgICAgICAgICAoJy4n
LCBbJ2Zhc3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdlLWNyYXNoLmh0bWwn
XSksCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250
cm9sbGVycy9tYW5hZ2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
Y29udHJvbGxlcnMvbWFuYWdlci5weQppbmRleCBmYmFmNzM3ZWRhZmMzMDQ2MDJhZTc1YTMzZDA2
ZDM1Y2FkNGM5MDBhLi45MWYxOWJlZTQ4YTMyMzRkNmIwZDVlMDQxNGQxYmI1YzMxMTliNjVjIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVy
cy9tYW5hZ2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2Nv
bnRyb2xsZXJzL21hbmFnZXIucHkKQEAgLTc5LDYgKzc5LDcgQEAgY2xhc3MgTWFuYWdlcihvYmpl
Y3QpOgogICAgICAgICBzZWxmLkhUVFBfU1VCRElSID0gJ2h0dHAnICsgcG9ydC5URVNUX1BBVEhf
U0VQQVJBVE9SCiAgICAgICAgIHNlbGYuUEVSRl9TVUJESVIgPSAncGVyZicKICAgICAgICAgc2Vs
Zi5XRUJTT0NLRVRfU1VCRElSID0gJ3dlYnNvY2tldCcgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFU
T1IKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zdWJkaXIgPSBvcHRpb25zLndwdHNl
cnZlcl9kb2Nfcm9vdCArIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgogICAgICAgICBzZWxmLkxB
WU9VVF9URVNUU19ESVJFQ1RPUlkgPSAnTGF5b3V0VGVzdHMnCiAKICAgICAgICAgIyBkaXNhYmxl
IHdzcyBzZXJ2ZXIuIG5lZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wgb24gYnVpbGRib3RzLgpAQCAt
OTgsNiArOTksOSBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgZGVmIF9pc193ZWJzb2Nr
ZXRfdGVzdChzZWxmLCB0ZXN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuV0VCU09DS0VUX1NVQkRJ
UiBpbiB0ZXN0CiAKKyAgICBkZWYgX2lzX3dlYl9wbGF0Zm9ybV90ZXN0KHNlbGYsIHRlc3QpOgor
ICAgICAgICByZXR1cm4gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zdWJkaXIgaW4gdGVzdAorCiAg
ICAgZGVmIF9odHRwX3Rlc3RzKHNlbGYsIHRlc3RfbmFtZXMpOgogICAgICAgICByZXR1cm4gc2V0
KHRlc3QgZm9yIHRlc3QgaW4gdGVzdF9uYW1lcyBpZiBzZWxmLl9pc19odHRwX3Rlc3QodGVzdCkp
CiAKQEAgLTEzMSw3ICsxMzUsNyBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgIHJ1
bm5pbmcgbXVsdGlwbGUgY29waWVzIG9mIE5SV1RzLiBQZXJmIHRlc3RzIGFyZSBsb2NrZWQKICAg
ICAgICAgYmVjYXVzZSBoZWF2eSBsb2FkIGNhdXNlZCBieSBydW5uaW5nIG90aGVyIHRlc3RzIGlu
IHBhcmFsbGVsCiAgICAgICAgIG1pZ2h0IGNhdXNlIHNvbWUgb2YgdGhlbSB0byB0aW1lb3V0LiIi
IgotICAgICAgICByZXR1cm4gc2VsZi5faXNfaHR0cF90ZXN0KHRlc3RfZmlsZSkgb3Igc2VsZi5f
aXNfcGVyZl90ZXN0KHRlc3RfZmlsZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lzX2h0dHBfdGVz
dCh0ZXN0X2ZpbGUpIG9yIHNlbGYuX2lzX3BlcmZfdGVzdCh0ZXN0X2ZpbGUpIG9yIHNlbGYuX2lz
X3dlYl9wbGF0Zm9ybV90ZXN0KHRlc3RfZmlsZSkKIAogICAgIGRlZiBfdGVzdF9pc19zbG93KHNl
bGYsIHRlc3RfZmlsZSk6CiAgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RhdGlvbnMubW9kZWwo
KS5oYXNfbW9kaWZpZXIodGVzdF9maWxlLCB0ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKQpAQCAtMjQ2
LDYgKzI1MCw3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKIAogICAgIGRlZiBfcnVuX3Rlc3Rz
KHNlbGYsIHRlc3RzX3RvX3J1biwgdGVzdHNfdG9fc2tpcCwgcmVwZWF0X2VhY2gsIGl0ZXJhdGlv
bnMsIG51bV93b3JrZXJzLCByZXRyeWluZyk6CiAgICAgICAgIG5lZWRzX2h0dHAgPSBhbnkoc2Vs
Zi5faXNfaHR0cF90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKKyAgICAgICAg
bmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gYW55KHNlbGYuX2lzX3dlYl9wbGF0Zm9y
bV90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKICAgICAgICAgbmVlZHNfd2Vi
c29ja2V0cyA9IGFueShzZWxmLl9pc193ZWJzb2NrZXRfdGVzdCh0ZXN0KSBmb3IgdGVzdCBpbiB0
ZXN0c190b19ydW4pCiAKICAgICAgICAgdGVzdF9pbnB1dHMgPSBbXQpAQCAtMjUzLDcgKzI1OCw3
IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3Rz
X3RvX3J1bjoKICAgICAgICAgICAgICAgICBmb3IgXyBpbiB4cmFuZ2UocmVwZWF0X2VhY2gpOgog
ICAgICAgICAgICAgICAgICAgICB0ZXN0X2lucHV0cy5hcHBlbmQoc2VsZi5fdGVzdF9pbnB1dF9m
b3JfZmlsZSh0ZXN0KSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bm5lci5ydW5fdGVzdHMoc2Vs
Zi5fZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9fc2tpcCwgbnVtX3dvcmtlcnMs
IG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIHJldHJ5aW5nKQorICAgICAgICByZXR1cm4g
c2VsZi5fcnVubmVyLnJ1bl90ZXN0cyhzZWxmLl9leHBlY3RhdGlvbnMsIHRlc3RfaW5wdXRzLCB0
ZXN0c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVlZHNfd2Vic29ja2V0cywg
bmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLCByZXRyeWluZykKIAogICAgIGRlZiBfY2xl
YW5fdXBfcnVuKHNlbGYpOgogICAgICAgICBfbG9nLmRlYnVnKCJGbHVzaGluZyBzdGRvdXQiKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxl
cnMvbWFuYWdlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkKaW5kZXggM2FlZmMzZDZjZDQ3OTZj
NzI5MzcwNDA4MTUwODJlMzczZTBjNzFkNS4uMWQyZDZlNmE4ZmY3NmFiYTE3YTcyMjBmY2YzOWYz
Y2NkNGRhZmY1NSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5CkBAIC00
Niw3ICs0Niw3IEBAIGNsYXNzIE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAg
ICAgZGVmIGdldF9tYW5hZ2VyKCk6CiAgICAgICAgICAgICBwb3J0ID0gTW9jaygpICAjIEZJWE1F
OiBVc2UgYSB0aWdodGVyIG1vY2suCiAgICAgICAgICAgICBwb3J0LlRFU1RfUEFUSF9TRVBBUkFU
T1IgPSAnLycKLSAgICAgICAgICAgIG1hbmFnZXIgPSBNYW5hZ2VyKHBvcnQsIG9wdGlvbnM9TW9j
a09wdGlvbnMoaHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xKSwgcHJpbnRlcj1Nb2NrKCkp
CisgICAgICAgICAgICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0LCBvcHRpb25zPU1vY2tPcHRpb25z
KGh0dHA9VHJ1ZSwgbWF4X2xvY2tlZF9zaGFyZHM9MSwgd3B0c2VydmVyX2RvY19yb290PSdpbXBv
cnRlZC93M2MnKSwgcHJpbnRlcj1Nb2NrKCkpCiAgICAgICAgICAgICByZXR1cm4gbWFuYWdlcgog
CiAgICAgICAgIG1hbmFnZXIgPSBnZXRfbWFuYWdlcigpCkBAIC01NSwxMSArNTUsMTcgQEAgY2xh
c3MgTWFuYWdlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBtYW5hZ2VyID0gZ2V0
X21hbmFnZXIoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobWFuYWdlci5uZWVkc19zZXJ2ZXJz
KFsnaHR0cC90ZXN0cy9taXNjJ10pKQogCisgICAgICAgIG1hbmFnZXIgPSBnZXRfbWFuYWdlcigp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5hZ2VyLm5lZWRzX3NlcnZlcnMoWydpbXBvcnRl
ZC93M2MvdGVzdCddKSkKKworICAgICAgICBtYW5hZ2VyID0gZ2V0X21hbmFnZXIoKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKG1hbmFnZXIubmVlZHNfc2VydmVycyhbJ2ltcG9ydGVkL3Rlc3Qn
XSkpCisKICAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9uZWVkc19zZXJ2ZXJzKHNlbGYpOgogICAg
ICAgICBkZWYgZ2V0X21hbmFnZXIoKToKICAgICAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAg
ICAgICAgICAgICBwb3J0ID0gaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KCkKLSAgICAgICAgICAgIG1h
bmFnZXIgPSBNYW5hZ2VyKHBvcnQsIG9wdGlvbnM9TW9ja09wdGlvbnModGVzdF9saXN0PU5vbmUs
IGh0dHA9VHJ1ZSwgbWF4X2xvY2tlZF9zaGFyZHM9MSksIHByaW50ZXI9TW9jaygpKQorICAgICAg
ICAgICAgbWFuYWdlciA9IE1hbmFnZXIocG9ydCwgb3B0aW9ucz1Nb2NrT3B0aW9ucyh0ZXN0X2xp
c3Q9Tm9uZSwgaHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xLCB3cHRzZXJ2ZXJfZG9jX3Jv
b3Q9J2ltcG9ydGVkL3czYycpLCBwcmludGVyPU1vY2soKSkKICAgICAgICAgICAgIHJldHVybiBt
YW5hZ2VyCiAKICAgICAgICAgbWFuYWdlciA9IGdldF9tYW5hZ2VyKCkKQEAgLTc5LDcgKzg1LDcg
QEAgY2xhc3MgTWFuYWdlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBkZWYgZ2V0
X21hbmFnZXIoKToKICAgICAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgICAgICBw
b3J0ID0gaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KCd0ZXN0LW1hYy1sZW9wYXJkJykKLSAgICAgICAg
ICAgIG1hbmFnZXIgPSBNYW5hZ2VyKHBvcnQsIG9wdGlvbnM9TW9ja09wdGlvbnModGVzdF9saXN0
PU5vbmUsIGh0dHA9VHJ1ZSwgbWF4X2xvY2tlZF9zaGFyZHM9MSksIHByaW50ZXI9TW9jaygpKQor
ICAgICAgICAgICAgbWFuYWdlciA9IE1hbmFnZXIocG9ydCwgb3B0aW9ucz1Nb2NrT3B0aW9ucyh0
ZXN0X2xpc3Q9Tm9uZSwgaHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xLCB3cHRzZXJ2ZXJf
ZG9jX3Jvb3Q9J2ltcG9ydGVkL3czYycpLCBwcmludGVyPU1vY2soKSkKICAgICAgICAgICAgIHJl
dHVybiBtYW5hZ2VyCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgIHBvcnQgPSBo
b3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3QtbWFjLWxlb3BhcmQnKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5k
ZXggNjhkYzhlMzFkZmIxMjY0ZGJiZmE0YmFmYTFhZTNiZjM5ZmY1ZWJlZi4uMDg1MGZmOGFhNGUy
ZmVhMTc5MWNlYzU4NjMwMWVhM2I5N2JiMjhhYiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0yODksNiAr
Mjg5LDE3IEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3MpOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJjb25maWd1cmF0aW9ucy4gRG9lcyBub3QgcnVuIGFueSB0ZXN0cy4iKSksCiAgICAgXSkp
CiAKKyAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgiV2ViIFBsYXRmb3JtIFRl
c3QgU2VydmVyIE9wdGlvbnMiLCBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdw
dHNlcnZlci1kb2Mtcm9vdCIsIHR5cGU9InN0cmluZyIsIGRlZmF1bHQ9b3MucGF0aC5qb2luKCJp
bXBvcnRlZCIsICJ3M2MiKSwKKyAgICAgICAgICAgIGhlbHA9KCJTZXQgd2ViIHBsYXRmb3JtIHNl
cnZlciBkb2N1bWVudCByb290LCByZWxhdGl2ZSB0byBMYXlvdXRUZXN0cyBkaXJlY3RvcnkiKSks
CisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdwdHNlcnZlci1wb3J0IiwgdHlwZT0i
aW50IiwgZGVmYXVsdD04ODAwLAorICAgICAgICAgICAgaGVscD0oIlNldCB3ZWIgcGxhdGZvcm0g
bWFpbiBIVFRQIHNlcnZlciBwb3J0LiIpKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Ii0td3B0c2VydmVyLWhvc3RuYW1lIiwgdHlwZT0ic3RyaW5nIiwgZGVmYXVsdD0ibG9jYWxob3N0
IiwKKyAgICAgICAgICAgIGhlbHA9KCJTZXQgd2ViIHBsYXRmb3JtIHNlcnZlciBob3N0IG5hbWUu
IikpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS13cHRzZXJ2ZXItcGFyYW1ldGVy
IiwgdHlwZT0ic3RyaW5nIiwgYWN0aW9uPSJhcHBlbmQiLCBkZWZhdWx0PVtdLAorICAgICAgICAg
ICAgaGVscD0oIlNldCBhIHdlYiBwbGF0Zm9ybSBzZXJ2ZXIgcGFyYW1ldGVyICgtLXdwdHNlcnZl
ci1wYXJhbWV0ZXI9TkFNRT1WQUxVRSkiKSksCisgICAgXSkpCisKICAgICAjIEZJWE1FOiBNb3Zl
IHRoZXNlIGludG8ganNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQogICAgIG9wdGlvbl9ncm91cF9k
ZWZpbml0aW9ucy5hcHBlbmQoKCJSZXN1bHQgSlNPTiBPcHRpb25zIiwgWwogICAgICAgICBvcHRw
YXJzZS5tYWtlX29wdGlvbigiLS1tYXN0ZXItbmFtZSIsIGhlbHA9IlRoZSBuYW1lIG9mIHRoZSBi
dWlsZGJvdCBtYXN0ZXIuIiksCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X2xhdW5jaGVyLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9s
YXVuY2hlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYmRjYjI0OTIzMmM0ZjQ5Nzk2NjYwOGNlYmE0ZDhmMTk5
YmU1MWVlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9sYXVuY2hlci5weQpAQCAtMCwwICsxLDE0
OSBAQAorIyAgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMgIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIyAgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3Ig
dGhlIG5hbWVzIG9mCisjICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyMgIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgorIyAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyAgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IK
KyMgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyAgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dn
aW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworCitsb2dnZXIgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKK2xvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisjIFVzZWQg
dG8gZHluYW1pY2FsbHkgbG9hZCB3ZWIgcGxhdGZvcm0gdGVzdCBtYWluIHNjcmlwdCAoc2VydmUu
cHkpIGFuZCBzb21lIHdwdHNlcnZlIG1vZHVsZXMgKEZpbGVIYW5kZXIgYW5kIEhUVFBFeGNlcHRp
b24pCitXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIgPSBOb25lCisKKworZGVmIG1haW4oYXJndiwgc3Rk
b3V0LCBzdGRlcnIpOgorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9hcmdzKGFyZ3YpCisgICAg
aW1wb3J0X3dwdHNlcnZlcihvcHRpb25zKQorICAgIGxhdW5jaGVyID0gV2ViUGxhdGZvcm1UZXN0
TGF1bmNoZXIob3B0aW9ucykKKyAgICBsYXVuY2hlci5zdGFydCgpCisKKworZGVmIHBhcnNlX2Fy
Z3MoYXJncyk6CisgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCisg
ICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCItLXdlYmtpdC1iYXNlIiwKKyAgICAgICAgZGVm
YXVsdD1vcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKG9zLnBhdGguc3BsaXQoX19maWxlX18p
WzBdKSwgIi4uIiwgIi4uIiwgIi4uIiwgIi4uIiwgIi4uIiksCisgICAgICAgIGhlbHA9KCJQYXRo
IHRvIHdlYmtpdCBiYXNlIGRpcmVjdG9yeSIpKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlv
bigiLS1wb3J0IiwgdHlwZT0iaW50IiwKKyAgICAgICAgZGVmYXVsdD04ODAwLAorICAgICAgICBo
ZWxwPSgiUG9ydCBvZiB0aGUgbWFpbiBIVFRQIHNlcnZlciIpKQorICAgIG9wdGlvbl9wYXJzZXIu
YWRkX29wdGlvbigiLS1kb2Mtcm9vdCIsCisgICAgICAgIGRlZmF1bHQ9b3MucGF0aC5qb2luKCJM
YXlvdXRUZXN0cyIsICJpbXBvcnRlZCIsICAidzNjIiksCisgICAgICAgIGhlbHA9KCJQYXRoIHRv
IHRoZSBkb2Mgcm9vdCBkaXJlY3RvcnkgcmVsYXRpdmUgdG8gd2Via2l0IGJhc2UgZGlyZWN0b3J5
IikpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCItLWV4dGVybmFsLXJlc291cmNlcy1k
aXIiLAorICAgICAgICBkZWZhdWx0PW9zLnBhdGguam9pbigiTGF5b3V0VGVzdHMiLCAicmVzb3Vy
Y2VzIiksCisgICAgICAgIGhlbHA9KCJQYXRoIHRvIHRoZSByZXNvdXJjZXMgZGlyZWN0b3J5IHJl
bGF0aXZlIHRvIHdlYmtpdCBiYXNlIGRpcmVjdG9yeSIpKQorICAgIG9wdGlvbl9wYXJzZXIuYWRk
X29wdGlvbigiLS11c2UtaW5uZXItcmVzb3VyY2VzLWRpciIsCisgICAgICAgIGhlbHA9KCJJZiBz
ZXQsIHVzZXMgdGhlIHJlc291cmNlcyBkaXIgaW5zaWRlIGRvYy1yb290IGRpcmVjdG9yeSwgb3Ro
ZXJ3aXNlIHVzZXMgdGhlIHN1cHBsaWVkIGV4dGVybmFsIHJlc291cmNlcyBkaXIiKSkKKyAgICBv
cHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi0taG9zdG5hbWUiLAorICAgICAgICBkZWZhdWx0PSJs
b2NhbGhvc3QiLAorICAgICAgICBoZWxwPSgiTmFtZSBvZiB0aGUgd2ViIHBsYXRmb3JtIHRlc3Qg
c2VydmVyIGhvc3QiKSkKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi0tcmV3cml0ZSIs
IHR5cGU9InN0cmluZyIsCisgICAgICAgIGRlZmF1bHQ9W10sIGFjdGlvbj0iYXBwZW5kIiwKKyAg
ICAgICAgaGVscD0oIkFkZCBhIHVybCByZXdyaXRlIHJ1bGUuICgtLXJld3JpdGU9VkVSQjpvcmln
aW46dGFyZ2V0KSIpKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiLS13cHRzZXJ2ZXIt
YmFzZSIsCisgICAgICAgIGRlZmF1bHQ9b3MucGF0aC5qb2luKCJUb29scyIsICJTY3JpcHRzIiwg
IndlYmtpdHB5IiwgInRoaXJkcGFydHkiLCAiYXV0b2luc3RhbGxlZCIsICJ3cHRzZXJ2ZXIiKSwK
KyAgICAgICAgaGVscD0oIlBhdGggdG8gd3B0c2VydmVyIGJhc2UgZGlyZWN0b3J5IChjb250YWlu
aW5nIHNlcnZlLnB5KSByZWxhdGl2ZSB0byB3ZWJraXQgYmFzZSBkaXJlY3RvcnkiKSkKKworICAg
IHJldHVybiBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworCitjbGFzcyBXZWJQbGF0
Zm9ybVRlc3RMYXVuY2hlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25z
KToKKyAgICAgICAgaHR0cF9wb3J0ID0gb3B0aW9ucy5wb3J0CisgICAgICAgIGh0dHBfZG9jX3Jv
b3QgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy53ZWJraXRfYmFzZSwgb3B0aW9ucy5kb2Nfcm9vdCkK
KworICAgICAgICBzZWxmLndwdHNlcnZlcl9jb25maWcgPSB7CisgICAgICAgICAgICAiaG9zdCI6
IG9wdGlvbnMuaG9zdG5hbWUsCisgICAgICAgICAgICAiZG9jX3Jvb3QiOiBodHRwX2RvY19yb290
LAorICAgICAgICAgICAgImh0dHBfZG9jX3Jvb3QiOiBodHRwX2RvY19yb290LAorICAgICAgICAg
ICAgIndzX2RvY19yb290Ijogb3MucGF0aC5qb2luKGh0dHBfZG9jX3Jvb3QsICJ3ZWJzb2NrZXRz
IiwgImhhbmRsZXJzIiksCisgICAgICAgICAgICAicG9ydHMiOiB7CisgICAgICAgICAgICAgICAg
Imh0dHAiOiBbaHR0cF9wb3J0LCAiYXV0byJdLAorICAgICAgICAgICAgICAgICJodHRwcyI6IFsi
YXV0byJdLAorICAgICAgICAgICAgICAgICJ3cyI6IFs0OTAwMCArIGh0dHBfcG9ydCAtIDg4MDBd
fSwKKyAgICAgICAgICAgICJjaGVja19zdWJkb21haW5zIjogRmFsc2UsCisgICAgICAgICAgICAi
bG9nX2xldmVsIjogImRlYnVnIiwKKyAgICAgICAgfQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgor
ICAgICAgICBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIubG9nZ2VyID0gV2ViUGxhdGZvcm1UZXN0U2Vy
dmVyLmRlZmF1bHRfbG9nZ2VyKHNlbGYud3B0c2VydmVyX2NvbmZpZ1sibG9nX2xldmVsIl0pCisg
ICAgICAgIGNvbmZpZ18sIHN0YXJ0ZWRfc2VydmVycyA9IFdlYlBsYXRmb3JtVGVzdFNlcnZlci5z
dGFydChzZWxmLndwdHNlcnZlcl9jb25maWcpCisKKyAgICAgICAgZm9yIHByb3RvY29sLCBzZXJ2
ZXJzIGluIHN0YXJ0ZWRfc2VydmVycy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIHBvcnQsIHBy
b2Nlc3MgaW4gc2VydmVyczoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiJXMsIHBvcnQ6
JWQsIHBpZDolZCIgJSAocHJvdG9jb2wsIHBvcnQsIHByb2Nlc3MucHJvYy5waWQpKQorCisgICAg
ICAgICMgV2FpdCB1bnRpbDoKKyAgICAgICAgIyAxLiB1c2VyIHByZXNzZXMgZW50ZXIgKGluIGNh
c2Ugc2NyaXB0IGV4ZWN1dGVkIGluIGNvbW1hbmQgbGluZSkKKyAgICAgICAgIyAyLiB0aGUgbWFz
dGVyIHByb2Nlc3Mgc2VuZHMgZW50ZXIgKHJlZ3VsYXIgc3RvcCBjb21tYW5kKQorICAgICAgICAj
IDMuIHRoZSBtYXN0ZXIgcHJvY2VzcyBpcyBzdG9wcGVkIChhbmQgc3RkaW4gaXMgY2xvc2VkKQor
ICAgICAgICBzeXMuc3RkaW4ucmVhZCgxKQorCisKK2RlZiBpbXBvcnRfd3B0c2VydmVyKG9wdGlv
bnMpOgorICAgIGdsb2JhbCBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIKKworICAgIHdwdHNlcnZlcl9i
YXNlID0gb3MucGF0aC5qb2luKG9wdGlvbnMud2Via2l0X2Jhc2UsIG9wdGlvbnMud3B0c2VydmVy
X2Jhc2UpCisgICAgd3B0c2VydmVfcGF0aCA9IG9zLnBhdGguam9pbih3cHRzZXJ2ZXJfYmFzZSwg
InRvb2xzIiwgIndwdHNlcnZlIiwgIndwdHNlcnZlIikKKworICAgIHN5cy5wYXRoLmluc2VydCgx
LCB3cHRzZXJ2ZXJfYmFzZSkKKyAgICBzeXMucGF0aC5pbnNlcnQoMSwgd3B0c2VydmVfcGF0aCkK
KworICAgIGZyb20gaGFuZGxlcnMgaW1wb3J0IEZpbGVIYW5kbGVyCisgICAgZnJvbSB1dGlscyBp
bXBvcnQgSFRUUEV4Y2VwdGlvbgorICAgIGltcG9ydCBzZXJ2ZSBhcyBXZWJQbGF0Zm9ybVRlc3RT
ZXJ2ZXIKKworICAgICMgRXh0ZXJuYWxSZXNvdXJjZUhhbmRsZXIgYWxsb3dzIHNlcnZpbmcgZmls
ZXMgb3V0c2lkZSBkb2Nfcm9vdAorICAgICMgSXQgaXMgdXNlZCBmb3IgIi9yZXNvdXJjZXMvIiBV
UkxTCisgICAgY2xhc3MgRXh0ZXJuYWxSZXNvdXJjZUhhbmRsZXIoRmlsZUhhbmRsZXIpOgorICAg
ICAgICBkZWYgX19pbml0X18oc2VsZiwgYWxpYXMsIHJlc291cmNlX3BhdGgpOgorICAgICAgICAg
ICAgRmlsZUhhbmRsZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgIHNlbGYuYWxpYXMgPSBh
bGlhcworICAgICAgICAgICAgc2VsZi5yZXNvdXJjZV9wYXRoID0gcmVzb3VyY2VfcGF0aAorCisg
ICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCByZXF1ZXN0LCByZXNwb25zZSk6CisgICAgICAgICAg
ICByZWxhdGl2ZV9wYXRoID0gcmVxdWVzdC51cmxfcGFydHMucGF0aAorICAgICAgICAgICAgaWYg
cmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKHNlbGYuYWxpYXMpOgorICAgICAgICAgICAgICAgIHJl
bGF0aXZlX3BhdGggPSByZWxhdGl2ZV9wYXRoW2xlbihzZWxmLmFsaWFzKTpdCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEhUVFBFeGNlcHRpb24oNDA0KQorICAgICAg
ICAgICAgaWYgcmVsYXRpdmVfcGF0aC5zdGFydHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAg
cmVsYXRpdmVfcGF0aCA9IHJlbGF0aXZlX3BhdGhbMTpdCisgICAgICAgICAgICBwYXRoID0gb3Mu
cGF0aC5qb2luKHNlbGYucmVzb3VyY2VfcGF0aCwgcmVsYXRpdmVfcGF0aCkKKyAgICAgICAgICAg
IHJldHVybiBGaWxlSGFuZGxlci5zZXJ2ZV9maWxlKHNlbGYsIHBhdGgsIHJlcXVlc3QsIHJlc3Bv
bnNlKQorCisgICAgaWYgbm90IG9wdGlvbnMudXNlX2lubmVyX3Jlc291cmNlc19kaXI6CisgICAg
ICAgIHJlc291cmNlc19wYXRoID0gb3MucGF0aC5qb2luKG9wdGlvbnMud2Via2l0X2Jhc2UsIG9w
dGlvbnMuZXh0ZXJuYWxfcmVzb3VyY2VzX2RpcikKKyAgICAgICAgV2ViUGxhdGZvcm1UZXN0U2Vy
dmVyLnJvdXRlcy5pbnNlcnQoMywgKCJHRVQiLCAiL3Jlc291cmNlcy8qIiwgRXh0ZXJuYWxSZXNv
dXJjZUhhbmRsZXIoIi9yZXNvdXJjZXMvIiwgcmVzb3VyY2VzX3BhdGgpKSkKKworICAgICMgU2V0
IHNlcnZlciByZXdyaXRlcyBpZiBhbnkgcGFzc2VkIGFzIHBhcmFtZXRlcgorICAgIGZvciByZXdy
aXRlIGluIG9wdGlvbnMucmV3cml0ZToKKyAgICAgICAgcnVsZSA9IHJld3JpdGUuc3BsaXQoIjoi
KQorICAgICAgICBpZiBsZW4ocnVsZSkgPT0gMzoKKyAgICAgICAgICAgIFdlYlBsYXRmb3JtVGVz
dFNlcnZlci5yZXdyaXRlcy5hcHBlbmQocnVsZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWlu
X18iOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdLCBzeXMuc3Rkb3V0LCBzeXMuc3Rk
ZXJyKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Nl
cnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODE5ZGEwY2Q3ZTY2ZGI4ZDAzNTEyMTdmZDczMmEzNjdkMWQ4NzcwNwotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyLnB5CkBAIC0wLDAgKzEsMTAwIEBACisjICBDb3B5cmlnaHQg
KGMpIDIwMTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjICBhcmUgbWV0OgorIyAgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisjICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyAgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyAgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisj
ICBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisjICBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyAgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjICBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyAg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQg
c3lzCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2Vy
dmVyX2Jhc2UKKyMgSW1wb3J0IHRvIHRyaWdnZXIgYXV0b2luc3RhbGwgb2Ygd3B0c2VydmVyIG1v
ZHVsZXMgdXNlZCBieSBkZWZhdWx0IGJ5IHdlYl9wbGF0Zm9ybV90ZXN0X2xhdW5jaGVyLnB5Citp
bXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLndwdHNlcnZlcgorCitfbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgV2ViUGxhdGZvcm1UZXN0
U2VydmVyKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgb3V0cHV0X2RpciwgcGlkZmlsZT1Ob25lKToKKyAgICAg
ICAgIiIiQXJnczoKKyAgICAgICAgICBvdXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0
aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGRpcmVjdG9yeQorICAgICAgICAiIiIKKyAgICAgICAgaHR0
cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZS5fX2luaXRfXyhzZWxmLCBwb3J0X29iaikKKyAg
ICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKKyAgICAgICAgc2VsZi5fc2V0X3N0
YXJ0X2NtZChwb3J0X29iaikKKworICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBz
ZWxmLl9sb2dfZmlsZV9uYW1lID0gJyVzX3Byb2Nlc3NfbG9nLm91dC50eHQnICUgKHNlbGYuX25h
bWUpCisKKyAgICAgICAgc2VsZi5fd3NvdXQgPSBOb25lCisgICAgICAgIHNlbGYuX3Byb2Nlc3Mg
PSBOb25lCisgICAgICAgIHNlbGYuX3BpZF9maWxlID0gcGlkZmlsZQorICAgICAgICBpZiBub3Qg
c2VsZi5fcGlkX2ZpbGU6CisgICAgICAgICAgICBzZWxmLl9waWRfZmlsZSA9IHNlbGYuX2ZpbGVz
eXN0ZW0uam9pbihzZWxmLl9ydW50aW1lX3BhdGgsICclcy5waWQnICUgc2VsZi5fbmFtZSkKKyAg
ICAgICAgc2VsZi5fc3Rkb3V0X2RhdGEgPSBOb25lCisgICAgICAgIHNlbGYuX3N0ZGVycl9kYXRh
ID0gTm9uZQorCisgICAgZGVmIF9zZXRfc3RhcnRfY21kKHNlbGYsIHBvcnRfb2JqKToKKyAgICAg
ICAgc2VsZi5fc3RhcnRfY21kID0gWyJweXRob24iLCAid2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNo
ZXIucHkiXQorCisgICAgICAgIGlmIChwb3J0X29iai5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfcG9y
dCIpKToKKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0X2NtZC5leHRlbmQoWyItLXBvcnQiLCBzdHIo
cG9ydF9vYmouZ2V0X29wdGlvbigid3B0c2VydmVyX3BvcnQiKSldKQorICAgICAgICBpZiAocG9y
dF9vYmouZ2V0X29wdGlvbigid3B0c2VydmVyX2RvY19yb290IikpOgorICAgICAgICAgICAgc2Vs
Zi5fc3RhcnRfY21kLmV4dGVuZChbIi0tZG9jLXJvb3QiLCBzZWxmLl9maWxlc3lzdGVtLmpvaW4o
IkxheW91dFRlc3RzIiwgcG9ydF9vYmouZ2V0X29wdGlvbigid3B0c2VydmVyX2RvY19yb290Iikp
XSkKKyAgICAgICAgaWYgKHBvcnRfb2JqLmdldF9vcHRpb24oIndwdHNlcnZlcl9ob3N0bmFtZSIp
KToKKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0X2NtZC5leHRlbmQoWyItLWhvc3RuYW1lIiwgcG9y
dF9vYmouZ2V0X29wdGlvbigid3B0c2VydmVyX2hvc3RuYW1lIildKQorICAgICAgICBpZiAocG9y
dF9vYmouZ2V0X29wdGlvbigid3B0c2VydmVyX3BhcmFtZXRlciIpKToKKyAgICAgICAgICAgIGZv
ciBwYXJhbWV0ZXIgaW4gcG9ydF9vYmouZ2V0X29wdGlvbigid3B0c2VydmVyX3BhcmFtZXRlciIp
OgorICAgICAgICAgICAgICAgIGtleVZhbHVlU3BsaXQgPSBwYXJhbWV0ZXIuZmluZCgiPSIpCisg
ICAgICAgICAgICAgICAgaWYga2V5VmFsdWVTcGxpdCAhPSAtMToKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fc3RhcnRfY21kLmV4dGVuZChbIi0tIiArIHBhcmFtZXRlcls6a2V5VmFsdWVTcGxp
dF0sIHBhcmFtZXRlcltrZXlWYWx1ZVNwbGl0ICsgMTpdXSkKKworICAgICAgICBzZWxmLl9jd2Qg
PSBzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgoc2VsZi5fZmlsZXN5c3RlbS5zcGxpdChfX2ZpbGVf
XylbMF0pCisKKyAgICBkZWYgX3ByZXBhcmVfY29uZmlnKHNlbGYpOgorICAgICAgICBpZiBzZWxm
Ll9maWxlc3lzdGVtLmV4aXN0cyhzZWxmLl9vdXRwdXRfZGlyKToKKyAgICAgICAgICAgIG91dHB1
dF9sb2cgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fb3V0cHV0X2Rpciwgc2VsZi5fbG9n
X2ZpbGVfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX3dzb3V0ID0gc2VsZi5fZmlsZXN5c3RlbS5v
cGVuX3RleHRfZmlsZV9mb3Jfd3JpdGluZyhvdXRwdXRfbG9nKQorCisgICAgZGVmIF9zcGF3bl9w
cm9jZXNzKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyAlcyBzZXJ2ZXIsIGNt
ZD0iJXMiJyAlIChzZWxmLl9uYW1lLCBzZWxmLl9zdGFydF9jbWQpKQorICAgICAgICBzZWxmLl9z
dGRvdXRfZGF0YSA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3RkZXJyX2RhdGEgPSBOb25lCisgICAg
ICAgIGlmIHNlbGYuX3dzb3V0OgorICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHN1YnByb2Nl
c3MuUG9wZW4oc2VsZi5fc3RhcnRfY21kLCBjd2Q9c2VsZi5fY3dkLCBzaGVsbD1GYWxzZSwgc3Rk
aW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c2VsZi5fd3NvdXQsIHN0ZGVycj1zZWxmLl93c291
dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzdWJwcm9jZXNz
LlBvcGVuKHNlbGYuX3N0YXJ0X2NtZCwgY3dkPXNlbGYuX2N3ZCwgc2hlbGw9RmFsc2UsIHN0ZGlu
PXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nl
c3MuU1RET1VUKQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShzZWxm
Ll9waWRfZmlsZSwgc3RyKHNlbGYuX3Byb2Nlc3MucGlkKSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3Byb2Nlc3MucGlkCisKKyAgICBkZWYgX3N0b3BfcnVubmluZ19zZXJ2ZXIoc2VsZik6CisgICAg
ICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nICVzIHNlcnZlcicgJSAoc2VsZi5fbmFtZSkpCisgICAg
ICAgIGlmIHNlbGYuX3BpZCBhbmQgbm90IHNlbGYuX2V4ZWN1dGl2ZS5jaGVja19ydW5uaW5nX3Bp
ZChzZWxmLl9waWQpOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUoc2VsZi5f
cGlkX2ZpbGUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoK
KyAgICAgICAgICAgIChzZWxmLl9zdGRvdXRfZGF0YSwgc2VsZi5fc3RkZXJyX2RhdGEpID0gc2Vs
Zi5fcHJvY2Vzcy5jb21tdW5pY2F0ZShpbnB1dD0nXG4nKQorICAgICAgICBpZiBzZWxmLl93c291
dDoKKyAgICAgICAgICAgIHNlbGYuX3dzb3V0LmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3dz
b3V0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9leGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQo
c2VsZi5fcGlkKToKKyAgICAgICAgICAgIHJhaXNlIGh0dHBfc2VydmVyX2Jhc2UuU2VydmVyRXJy
b3IoJ0ZhaWxlZCB0byBzdG9wICVzOiBwbGVhc2UgZ28gdG8gd2ViIHBsYXRmb3JtIHRlc3Qgc2Vy
dmVyIGxvZyBmaWxlIHRvIGdldCB0aGUgUElEIGxpc3QnICUgKHNlbGYuX25hbWUpKQorICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZShzZWxmLl9waWRfZmlsZSkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTRjMjc1MGQ0OWJiNDc3NmEwNzZkMzAwZDBkMDBjN2I3ZDk0MmM5NgotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3Bs
YXRmb3JtX3Rlc3Rfc2VydmVyX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsNDcgQEAKKyMgIENvcHly
aWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjICAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMgIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgor
IyAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisj
ICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjICBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKKyMgIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjICBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorIyAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0MiBhcyB1bml0
dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21vY2sgaW1wb3J0IE1vY2tIb3N0Citm
cm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IFBvcnQKK2Zyb20gd2Via2l0cHkudG9vbC5tb2NrdG9v
bCBpbXBvcnQgTW9ja09wdGlvbnMKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVy
cy53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgaW1wb3J0IFdlYlBsYXRmb3JtVGVzdFNlcnZlcgor
CisKK2NsYXNzIFRlc3RXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIodW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgIGRlZiB0ZXN0X3N0YXJ0X2NtZChzZWxmKToKKworICAgICAgICBwb3J0ID0gUG9ydChNb2Nr
SG9zdCgpLCAidGVzdCIsIE1vY2tPcHRpb25zKHdwdHNlcnZlcl9wb3J0PTg4MDAsIHdwdHNlcnZl
cl9kb2Nfcm9vdD0iaW1wb3J0ZWQvdzNjIikpCisgICAgICAgIHNlcnZlciA9IFdlYlBsYXRmb3Jt
VGVzdFNlcnZlcihwb3J0LCAid3B0dGVzdCIsICIvbW9jay9vdXRwdXRfZGlyIiwgIi9tb2NrL291
dHB1dF9kaXIvcGlkLnR4dCIpCisKKyAgICAgICAgc2VydmVyLl9wcmVwYXJlX2NvbmZpZygpCisg
ICAgICAgIHNlcnZlci5fd3NvdXQgPSBOb25lCisgICAgICAgIHNlcnZlci5fc3Bhd25fcHJvY2Vz
cygpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgc2VydmVyLl9zdG9wX3J1bm5pbmdf
c2VydmVyKCkKKworICAgICAgICBzZWxmLmFzc2VydEluKCJTdGFydGVkIHNlcnZlciBhdCBodHRw
Oi8vbG9jYWxob3N0Ojg4MDAiLCBzZXJ2ZXIuX3N0ZG91dF9kYXRhKQorICAgICAgICBzZWxmLmFz
c2VydEluKCJTdGFydGVkIHNlcnZlciBhdCB3czovL2xvY2FsaG9zdDo0OTAwMCIsIHNlcnZlci5f
c3Rkb3V0X2RhdGEpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFz
ZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CmluZGV4IGU3MjEyZTVk
NmMwM2NmNzhlYjEzMjA4YTViNjcwMzMyNDJiMjgwNDQuLjMxNTM5NmU2MmNhYTVkZjMwYWFmZTNm
ODVkODk1MzdhOTFjZmI1N2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CkBAIC02
NSw2ICs2NSw3IEBAIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgc2VydmVyX3Byb2Nlc3MKIGZy
b20gd2Via2l0cHkucG9ydC5mYWN0b3J5IGltcG9ydCBQb3J0RmFjdG9yeQogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgYXBhY2hlX2h0dHBfc2VydmVyCiBmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBodHRwX3NlcnZlcgorZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCB3ZWJzb2NrZXRfc2Vy
dmVyCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKQEAgLTEyMiw2ICsxMjMs
NyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2hlbHBlciA9IE5vbmUKICAg
ICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3dlYnNvY2tldF9z
ZXJ2ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IE5v
bmUKICAgICAgICAgc2VsZi5faW1hZ2VfZGlmZmVyID0gTm9uZQogICAgICAgICBzZWxmLl9zZXJ2
ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MgICMg
b3ZlcnJpZGFibGUgZm9yIHRlc3RpbmcKICAgICAgICAgc2VsZi5faHR0cF9sb2NrID0gTm9uZSAg
IyBGSVhNRTogV2h5IGRvZXMgdGhpcyBsaXZlIG9uIHRoZSBwb3J0IG9iamVjdD8KQEAgLTg5Myw2
ICs4OTUsMTUgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBzZXJ2ZXIuc3RhcnQoKQog
ICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyID0gc2VydmVyCiAKKyAgICBkZWYgc3RhcnRf
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKHNlbGYsIGFkZGl0aW9uYWxfZGlycz1Ob25lLCBudW1i
ZXJfb2Zfc2VydmVycz1Ob25lKToKKyAgICAgICAgIiIiU3RhcnQgYSB3ZWIgc2VydmVyLiBSYWlz
ZSBhbiBlcnJvciBpZiBpdCBjYW4ndCBzdGFydCBvciBpcyBhbHJlYWR5IHJ1bm5pbmcuCisKKyAg
ICAgICAgUG9ydHMgY2FuIHN0dWIgdGhpcyBvdXQgaWYgdGhleSBkb24ndCBuZWVkIGEgd2ViIHNl
cnZlciB0byBiZSBydW5uaW5nLiIiIgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3dlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlciwgJ0FscmVhZHkgcnVubmluZyBhIFdlYiBQbGF0Zm9ybSBUZXN0IHNl
cnZlci4nCisKKyAgICAgICAgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gd2ViX3Bs
YXRmb3JtX3Rlc3Rfc2VydmVyLldlYlBsYXRmb3JtVGVzdFNlcnZlcihzZWxmLCAid3B0d2siLCBz
ZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCkpCisgICAgICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlci5zdGFydCgpCisKICAgICBkZWYgaHR0cF9zZXJ2ZXJfc3VwcG9ydHNfaXB2NihzZWxm
KToKICAgICAgICAgIyBDeWd3aW4gaXMgdGhlIG9ubHkgcGxhdGZvcm0gdG8gc3RpbGwgdXNlIEFw
YWNoZSAxLjMsIHdoaWNoIG9ubHkgc3VwcG9ydHMgSVBWNC4KICAgICAgICAgIyBPbmNlIGl0IG1v
dmVzIHRvIEFwYWNoZSAyLCB3ZSBjYW4gZHJvcCB0aGlzIG1ldGhvZCBhbHRvZ2V0aGVyLgpAQCAt
OTIyLDYgKzkzMywxMiBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLl93
ZWJzb2NrZXRfc2VydmVyLnN0b3AoKQogICAgICAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZl
ciA9IE5vbmUKIAorICAgIGRlZiBzdG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcihzZWxmKToK
KyAgICAgICAgIiIiU2h1dCBkb3duIHRoZSB3ZWIgcGxhdGZvcm0gdGVzdCBzZXJ2ZXIgaWYgaXQg
aXMgcnVubmluZy4gRG8gbm90aGluZyBpZiBpdCBpc24ndC4iIiIKKyAgICAgICAgaWYgc2VsZi5f
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyOgorICAgICAgICAgICAgc2VsZi5fd2ViX3BsYXRmb3Jt
X3Rlc3Rfc2VydmVyLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyID0gTm9uZQorCiAgICAgZGVmIHJlbGVhc2VfaHR0cF9sb2NrKHNlbGYpOgogICAgICAg
ICBpZiBzZWxmLl9odHRwX2xvY2s6CiAgICAgICAgICAgICBzZWxmLl9odHRwX2xvY2suY2xlYW51
cF9odHRwX2xvY2soKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Ry
aXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKaW5kZXggYzU4
ZTlhZWFkNTZkYmUxMTRjNWEzMTY2ZjVmOTVkOTViYTk0NmE1ZS4uMDhjN2YwMDE2ZTA4ZDgyZDVl
MzcxNjNmMDFiMWNjNDhhMWFiYmZjYSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2RyaXZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVy
LnB5CkBAIC0xNTEsNiArMTUxLDExIEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBl
bHNlOgogICAgICAgICAgICAgc2VsZi5fcHJvZmlsZXIgPSBOb25lCiAKKyAgICAgICAgI1RPRE8g
dXNlIHd3dy53ZWItcGxhdGZvcm0udGVzdCBhbmQgbm90IGxvY2FsaG9zdD8KKyAgICAgICAgI3Nl
bGYud2ViX3BsYXRmb3JtX3Rlc3RfYmFzZV91cmkgPSAiaHR0cDovL3d3dy4iICsgc2VsZi5fcG9y
dC5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfaG9zdG5hbWUiKSArICI6IiArIHN0cihzZWxmLl9wb3J0
LmdldF9vcHRpb24oIndwdHNlcnZlcl9wb3J0IikpICsgIi8iCisgICAgICAgIHNlbGYud2ViX3Bs
YXRmb3JtX3Rlc3RfYmFzZV91cmkgPSAiaHR0cDovL2xvY2FsaG9zdDoiICsgc3RyKHNlbGYuX3Bv
cnQuZ2V0X29wdGlvbigid3B0c2VydmVyX3BvcnQiKSkgKyAiLyIKKyAgICAgICAgc2VsZi53ZWJf
cGxhdGZvcm1fdGVzdF9kaXIgPSAoc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfZG9j
X3Jvb3QiKSBpZiBzZWxmLl9wb3J0LmdldF9vcHRpb24oIndwdHNlcnZlcl9kb2Nfcm9vdCIpIGVs
c2UgIi4iKSArICIvIgorCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuc3Rv
cCgpCiAKQEAgLTIyOSw4ICsyMzQsMTQgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgZGVm
IGlzX2h0dHBfdGVzdChzZWxmLCB0ZXN0X25hbWUpOgogICAgICAgICByZXR1cm4gdGVzdF9uYW1l
LnN0YXJ0c3dpdGgoc2VsZi5IVFRQX0RJUikgYW5kIG5vdCB0ZXN0X25hbWUuc3RhcnRzd2l0aChz
ZWxmLkhUVFBfTE9DQUxfRElSKQogCisgICAgZGVmIGlzX3dlYl9wbGF0Zm9ybV90ZXN0KHNlbGYs
IHRlc3RfbmFtZSk6CisgICAgICAgIHJldHVybiB0ZXN0X25hbWUuc3RhcnRzd2l0aChzZWxmLndl
Yl9wbGF0Zm9ybV90ZXN0X2RpcikKKwogICAgIGRlZiB0ZXN0X3RvX3VyaShzZWxmLCB0ZXN0X25h
bWUpOgogICAgICAgICAiIiJDb252ZXJ0IGEgdGVzdCBuYW1lIHRvIGEgVVJJLiIiIgorICAgICAg
ICBpZiBzZWxmLmlzX3dlYl9wbGF0Zm9ybV90ZXN0KHRlc3RfbmFtZSk6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9iYXNlX3VyaSArIHRlc3RfbmFtZVtsZW4oc2Vs
Zi53ZWJfcGxhdGZvcm1fdGVzdF9kaXIpOl0KKwogICAgICAgICBpZiBub3Qgc2VsZi5pc19odHRw
X3Rlc3QodGVzdF9uYW1lKToKICAgICAgICAgICAgIHJldHVybiBwYXRoLmFic3BhdGhfdG9fdXJp
KHNlbGYuX3BvcnQuaG9zdC5wbGF0Zm9ybSwgc2VsZi5fcG9ydC5hYnNwYXRoX2Zvcl90ZXN0KHRl
c3RfbmFtZSkpCiAKQEAgLTI1NCw3ICsyNjUsOSBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAg
ICAgICAgICAgIGlmIG5vdCBwcmVmaXguZW5kc3dpdGgoJy8nKToKICAgICAgICAgICAgICAgICBw
cmVmaXggKz0gJy8nCiAgICAgICAgICAgICByZXR1cm4gdXJpW2xlbihwcmVmaXgpOl0KLSAgICAg
ICAgaWYgdXJpLnN0YXJ0c3dpdGgoImh0dHA6Ly8iKToKKyAgICAgICAgaWYgdXJpLnN0YXJ0c3dp
dGgoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9iYXNlX3VyaSk6CisgICAgICAgICAgICByZXR1cm4g
dXJpLnJlcGxhY2Uoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9iYXNlX3VyaSwgc2VsZi53ZWJfcGxh
dGZvcm1fdGVzdF9kaXIpCisgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJodHRwOi8vMTI3LjAu
MC4xOjgwMDAiKToKICAgICAgICAgICAgIHJldHVybiB1cmkucmVwbGFjZSgnaHR0cDovLzEyNy4w
LjAuMTo4MDAwLycsIHNlbGYuSFRUUF9ESVIpCiAgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJo
dHRwczovLyIpOgogICAgICAgICAgICAgcmV0dXJuIHVyaS5yZXBsYWNlKCdodHRwczovLzEyNy4w
LjAuMTo4NDQzLycsIHNlbGYuSFRUUF9ESVIpCkBAIC0zODIsNyArMzk1LDcgQEAgY2xhc3MgRHJp
dmVyKG9iamVjdCk6CiAgICAgICAgICMgRklYTUU6IHBlcmZvcm1hbmNlIHRlc3RzIHBhc3MgaW4g
ZnVsbCBVUkxzIGluc3RlYWQgb2YgdGVzdCBuYW1lcy4KICAgICAgICAgaWYgZHJpdmVyX2lucHV0
LnRlc3RfbmFtZS5zdGFydHN3aXRoKCdodHRwOi8vJykgb3IgZHJpdmVyX2lucHV0LnRlc3RfbmFt
ZS5zdGFydHN3aXRoKCdodHRwczovLycpICBvciBkcml2ZXJfaW5wdXQudGVzdF9uYW1lID09ICgn
YWJvdXQ6YmxhbmsnKToKICAgICAgICAgICAgIGNvbW1hbmQgPSBkcml2ZXJfaW5wdXQudGVzdF9u
YW1lCi0gICAgICAgIGVsaWYgc2VsZi5pc19odHRwX3Rlc3QoZHJpdmVyX2lucHV0LnRlc3RfbmFt
ZSk6CisgICAgICAgIGVsaWYgc2VsZi5pc19odHRwX3Rlc3QoZHJpdmVyX2lucHV0LnRlc3RfbmFt
ZSkgb3IgIHNlbGYuaXNfd2ViX3BsYXRmb3JtX3Rlc3QoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSk6
CiAgICAgICAgICAgICBjb21tYW5kID0gc2VsZi50ZXN0X3RvX3VyaShkcml2ZXJfaW5wdXQudGVz
dF9uYW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYuX3BvcnQu
YWJzcGF0aF9mb3JfdGVzdChkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkKaW5kZXggNzg3ZjJkY2Y1MDhhNjQz
YmQ4NjNmNDJkZWU4Yzc4ZDIyZjFjNGJlZi4uNTQyNzBkZDQwOWQ0NDMyNDdhNTBiYzZiYmJlYTQ4
OTQ5OTgwNjBiZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZl
cl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3Vu
aXR0ZXN0LnB5CkBAIC04Niw2ICs4Niw3IEBAIGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICBwb3J0Ll9jb25maWcuYnVpbGRfZGlyZWN0b3J5ID0gbGFtYmRhIGNv
bmZpZ3VyYXRpb246ICcvbW9jay1idWlsZCcKICAgICAgICAgcmV0dXJuIHBvcnQKIAorCiAgICAg
ZGVmIF9hc3NlcnRfd3JhcHBlcihzZWxmLCB3cmFwcGVyX3N0cmluZywgZXhwZWN0ZWRfd3JhcHBl
cik6CiAgICAgICAgIHdyYXBwZXIgPSBEcml2ZXIoc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1Nb2Nr
T3B0aW9ucyh3cmFwcGVyPXdyYXBwZXJfc3RyaW5nKSksIE5vbmUsIHBpeGVsX3Rlc3RzPUZhbHNl
KS5fY29tbWFuZF93cmFwcGVyKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLCBl
eHBlY3RlZF93cmFwcGVyKQpAQCAtMTA0LDE4ICsxMDUsMjAgQEAgY2xhc3MgRHJpdmVyVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLl9jb21t
YW5kX3dyYXBwZXIoKSwgWydwZXJmJywgJ3JlY29yZCcsICctLWNhbGwtZ3JhcGgnLCAnLS1vdXRw
dXQnLCAnL21vY2stYnVpbGQvbGF5b3V0LXRlc3QtcmVzdWx0cy90ZXN0LmRhdGEnXSkKIAogICAg
IGRlZiB0ZXN0X3Rlc3RfdG9fdXJpKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3Bv
cnQoKQorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyh3
cHRzZXJ2ZXJfcG9ydD04ODAwLCB3cHRzZXJ2ZXJfZG9jX3Jvb3Q9ImltcG9ydGVkL3czYyIpKQog
ICAgICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgTm9uZSwgcGl4ZWxfdGVzdHM9RmFsc2UpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnRlc3RfdG9fdXJpKCdmb28vYmFyLmh0bWwn
KSwgJ2ZpbGU6Ly8lcy9mb28vYmFyLmh0bWwnICUgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnRlc3RfdG9fdXJpKCdodHRwL3Rlc3RzL2Zv
by5odG1sJyksICdodHRwOi8vMTI3LjAuMC4xOjgwMDAvZm9vLmh0bWwnKQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGRyaXZlci50ZXN0X3RvX3VyaSgnaHR0cC90ZXN0cy9zc2wvYmFyLmh0bWwn
KSwgJ2h0dHBzOi8vMTI3LjAuMC4xOjg0NDMvc3NsL2Jhci5odG1sJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChkcml2ZXIudGVzdF90b191cmkoJ2ltcG9ydGVkL3czYy9mb28vYmFyLmh0bWwn
KSwgJ2h0dHA6Ly9sb2NhbGhvc3Q6ODg4MC9mb28vYmFyLmh0bWwnKQogCiAgICAgZGVmIHRlc3Rf
dXJpX3RvX3Rlc3Qoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAg
ICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKHdwdHNlcnZlcl9w
b3J0PTg4ODAsIHdwdHNlcnZlcl9kb2Nfcm9vdD0iaW1wb3J0ZWQvdzNjIikpCiAgICAgICAgIGRy
aXZlciA9IERyaXZlcihwb3J0LCBOb25lLCBwaXhlbF90ZXN0cz1GYWxzZSkKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChkcml2ZXIudXJpX3RvX3Rlc3QoJ2ZpbGU6Ly8lcy9mb28vYmFyLmh0bWwn
ICUgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpLCAnZm9vL2Jhci5odG1sJykKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChkcml2ZXIudXJpX3RvX3Rlc3QoJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9m
b28uaHRtbCcpLCAnaHR0cC90ZXN0cy9mb28uaHRtbCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZHJpdmVyLnVyaV90b190ZXN0KCdodHRwczovLzEyNy4wLjAuMTo4NDQzL3NzbC9iYXIuaHRt
bCcpLCAnaHR0cC90ZXN0cy9zc2wvYmFyLmh0bWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGRyaXZlci51cmlfdG9fdGVzdCgnaHR0cDovL2xvY2FsaG9zdDo4ODgwL2Zvby9iYXIuaHRtbCcp
LCAnaW1wb3J0ZWQvdzNjL2Zvby9iYXIuaHRtbCcpCiAKICAgICBkZWYgdGVzdF9yZWFkX2Jsb2Nr
KHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5CmluZGV4IGM2OTM3NDM1MjhhMWYwZDMy
NzM2ZGJhMDM4ZWYxMjBmMDU4OGE0MzEuLjA0MzgzMzY5YjU0MTczYzIxZjdmOGU0ZWY3NGZkZTUz
OTcwZWNjNTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9f
X2luaXRfXy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0
X18ucHkKQEAgLTkxLDYgKzkxLDggQEAgY2xhc3MgQXV0b2luc3RhbGxJbXBvcnRIb29rKG9iamVj
dCk6CiAgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX2lyYygpCiAgICAgICAgIGVsaWYgJy5idWls
ZGJvdCcgaW4gZnVsbG5hbWU6CiAgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX2J1aWxkYm90KCkK
KyAgICAgICAgZWxpZiAnLndwdHNlcnZlcicgaW4gZnVsbG5hbWU6CisgICAgICAgICAgICBzZWxm
Ll9pbnN0YWxsX3dwdHNlcnZlcigpCiAKICAgICBkZWYgX2luc3RhbGxfbWVjaGFuaXplKHNlbGYp
OgogICAgICAgICByZXR1cm4gc2VsZi5faW5zdGFsbCgiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9w
YWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUvbWVjaGFuaXplLTAuMi41LnRhci5neiIsCkBAIC0x
NTUsNiArMTU3LDE3IEBAIGNsYXNzIEF1dG9pbnN0YWxsSW1wb3J0SG9vayhvYmplY3QpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cmxfc3VicGF0aD0iaXJjYm90LnB5IikKICAgICAgICAg
cmV0dXJuIGRpZF9pbnN0YWxsX3NvbWV0aGluZwogCisgICAgZGVmIF9pbnN0YWxsX3dwdHNlcnZl
cihzZWxmKToKKyAgICAgICAgd3B0c2VydmVyX2RpciA9IHNlbGYuX2ZzLmpvaW4oX0FVVE9JTlNU
QUxMRURfRElSLCAid3B0c2VydmVyIikKKyAgICAgICAgaW5zdGFsbGVyID0gQXV0b0luc3RhbGxl
cih0YXJnZXRfZGlyPXdwdHNlcnZlcl9kaXIpCisgICAgICAgIGRpZF9pbnN0YWxsX3NvbWV0aGlu
ZyA9IGluc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzLzEzNjQ3ZjZjYWI1NGMwMGY3MDJhYzg4NGYxYjkwMWRhOGZhYWM4OGIv
c2VydmUucHkiLCB0YXJnZXRfbmFtZT0ic2VydmUucHkiKQorICAgICAgICB0b29sc19kaXIgPSBz
ZWxmLl9mcy5qb2luKF9BVVRPSU5TVEFMTEVEX0RJUiwgIndwdHNlcnZlciIsICJ0b29scyIpCisg
ICAgICAgIGluc3RhbGxlciA9IEF1dG9JbnN0YWxsZXIodGFyZ2V0X2Rpcj10b29sc19kaXIpCisg
ICAgICAgICNUT0RPOiBzd2l0Y2ggdG8gVzNDIHdwdHNlcnZlIHJlcG9zaXRvcnkgb25jZSBGaWxl
SGFuZGxlciBwdWxsIHJlcXVlc3QgbWVyZ2VkCisgICAgICAgIGRpZF9pbnN0YWxsX3NvbWV0aGlu
ZyB8PSBpbnN0YWxsZXIuaW5zdGFsbCh1cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS95b3Vlbm5mL3dw
dHNlcnZlL2FyY2hpdmUvYzEzZmZhYTlhOTJlNTEzNjVkZGM4ZGQ0YjhjYmQ1NGFjYjgxYzUwNy50
YXIuZ3oiLCB1cmxfc3VicGF0aD0id3B0c2VydmUtYzEzZmZhYTlhOTJlNTEzNjVkZGM4ZGQ0Yjhj
YmQ1NGFjYjgxYzUwNyIsIHRhcmdldF9uYW1lPSJ3cHRzZXJ2ZSIpCisgICAgICAgIGRpZF9pbnN0
YWxsX3NvbWV0aGluZyB8PSBpbnN0YWxsZXIuaW5zdGFsbCh1cmw9Imh0dHBzOi8vZ2l0aHViLmNv
bS93M2MvcHl3ZWJzb2NrZXQvYXJjaGl2ZS84ZDcwNjMxOGUxYzVlOWI2OGQ0MzhkMjczNGM2ZDAz
MDY3ODY2MDdkLnRhci5neiIsIHVybF9zdWJwYXRoPSJweXdlYnNvY2tldC04ZDcwNjMxOGUxYzVl
OWI2OGQ0MzhkMjczNGM2ZDAzMDY3ODY2MDdkIiwgdGFyZ2V0X25hbWU9InB5d2Vic29ja2V0IikK
KyAgICAgICAgcmV0dXJuIGRpZF9pbnN0YWxsX3NvbWV0aGluZworCiAgICAgZGVmIF9pbnN0YWxs
X3VuaXR0ZXN0MihzZWxmKToKICAgICAgICAgc2VsZi5fZW5zdXJlX2F1dG9pbnN0YWxsZWRfZGly
X2lzX2luX3N5c19wYXRoKCkKICAgICAgICAgcmV0dXJuIHNlbGYuX2luc3RhbGwodXJsPSJodHRw
Oi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS91L3VuaXR0ZXN0Mi91bml0dGVzdDIt
MC41LjEudGFyLmd6I21kNT1hMGFmNWNhYzkyYmJiZmEwYzNiMGU5OTU3MTM5MGUwZiIsIHVybF9z
dWJwYXRoPSJ1bml0dGVzdDItMC41LjEvdW5pdHRlc3QyIikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233360</attachid>
            <date>2014-06-19 08:09:07 -0700</date>
            <delta_ts>2014-09-16 00:13:23 -0700</delta_ts>
            <desc>WIP: Removed wptserve autoinstall and direct use of imported W3C repo wptserve</desc>
            <filename>bug-127094-20140619170844.patch</filename>
            <type>text/plain</type>
            <size>36200</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwMDk5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjc1MWFmN2MzMzFlZjg1YWY1NzY2YjgxNDI4ZWEzYTEz
OWEzNmY1YS4uMjA3YjBjYzYxMjQ3ZTg3MGRiZmYwZTEwYWQ3MzYzMDAzYTY5MjRjNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYz
IEBACisyMDE0LTA2LTE5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgSW50ZWdyYXRlIFdQIHB5dGhvbiBzZXJ2ZXIgaW50byBXZWJLaXQgdGVz
dCBmcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNzA5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rl
c3RfcnVubmVyLnB5OgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5fX2luaXRfXyk6CisgICAg
ICAgIChMYXlvdXRUZXN0UnVubmVyLnJ1bl90ZXN0cyk6CisgICAgICAgIChMYXlvdXRUZXN0UnVu
bmVyLnN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIu
c3RvcF9zZXJ2ZXJzX3dpdGhfbG9jayk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoTGF5b3V0VGVzdFJ1bm5lclRlc3RzLl9ydW5fdGVzdHMpOgorICAgICAgICAoTGF5b3V0
VGVzdFJ1bm5lclRlc3RzLnRlc3Rfc2VydmVyc19zdGFydGVkLnN0YXJ0X3dlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlcik6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJz
X3N0YXJ0ZWQuc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIpOgorICAgICAgICAoTGF5b3V0
VGVzdFJ1bm5lclRlc3RzKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXJUZXN0cy50ZXN0X3Nl
cnZlcnNfc3RhcnRlZCk6CisgICAgICAgIChTaGFyZGVyVGVzdHMudGVzdF9zaGFyZF9ldmVyeV9m
aWxlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVy
cy9tYW5hZ2VyLnB5OgorICAgICAgICAoTWFuYWdlci5fX2luaXRfXyk6CisgICAgICAgIChNYW5h
Z2VyLl9pc193ZWJfcGxhdGZvcm1fdGVzdCk6CisgICAgICAgIChNYW5hZ2VyLl90ZXN0X3JlcXVp
cmVzX2xvY2spOgorICAgICAgICAoTWFuYWdlci5fcnVuX3Rlc3RzKToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5
OgorICAgICAgICAoTWFuYWdlclRlc3QudGVzdF9uZWVkc19zZXJ2ZXJzLmdldF9tYW5hZ2VyKToK
KyAgICAgICAgKE1hbmFnZXJUZXN0LnRlc3RfbmVlZHNfc2VydmVycyk6CisgICAgICAgIChNYW5h
Z2VyVGVzdC5pbnRlZ3JhdGlvbl90ZXN0X25lZWRzX3NlcnZlcnMuZ2V0X21hbmFnZXIpOgorICAg
ICAgICAoTWFuYWdlclRlc3QudGVzdF9sb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncy5nZXRfbWFuYWdl
cik6CisgICAgICAgIChNYW5hZ2VyVGVzdCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKHBhcnNlX2FyZ3MpOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRm
b3JtX3Rlc3RfbGF1bmNoZXIucHk6IEFkZGVkLgorICAgICAgICAobWFpbik6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9z
ZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyKToKKyAgICAg
ICAgKFdlYlBsYXRmb3JtVGVzdFNlcnZlci5fX2luaXRfXyk6CisgICAgICAgIChXZWJQbGF0Zm9y
bVRlc3RTZXJ2ZXIuX3NldF9zdGFydF9jbWQpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2Vy
dmVyLl9wcmVwYXJlX2NvbmZpZyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3Nw
YXduX3Byb2Nlc3MpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9zdG9wX3J1bm5p
bmdfc2VydmVyKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2
ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAg
IChUZXN0V2ViUGxhdGZvcm1UZXN0U2VydmVyKToKKyAgICAgICAgKFRlc3RXZWJQbGF0Zm9ybVRl
c3RTZXJ2ZXIudGVzdF9zdGFydF9jbWQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5fX2luaXRfXyk6CisgICAgICAgIChQb3J0LnRvLnN0
YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcik6CisgICAgICAgIChQb3J0LnRvLnN0b3Bfd2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAgKERyaXZlci5p
c193ZWJfcGxhdGZvcm1fdGVzdCk6CisgICAgICAgIChEcml2ZXIudGVzdF90b191cmkpOgorICAg
ICAgICAoRHJpdmVyLnVyaV90b190ZXN0KToKKyAgICAgICAgKERyaXZlci5fY29tbWFuZF9mcm9t
X2RyaXZlcl9pbnB1dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91
bml0dGVzdC5weToKKyAgICAgICAgKERyaXZlclRlc3QubWFrZV9wb3J0KToKKyAgICAgICAgKERy
aXZlclRlc3QudGVzdF90ZXN0X3RvX3VyaSk6CisgICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdXJp
X3RvX3Rlc3QpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRf
Xy5weToKKwogMjAxNC0wNi0xNyAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+
CiAKICAgICAgICAgW0VGTF0gVHVybiBvbiBOT1NOSUZGIGluIEZlYXR1cmVMaXN0LnBtCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9s
YXlvdXRfdGVzdF9ydW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKaW5kZXggMGZkZjBkNjhlMTIxNmQ1
NjU5YWJhZmZmM2E5NjhiZGI3ZGZjOGI0NS4uYWM2OWQ4MzAwZGU5MzMwNjk1YjU2MjBhNzA5Y2Zi
OTk1ZGE4NmMwMCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQpA
QCAtNzQsMTYgKzc0LDE4IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAg
ICAgc2VsZi5fdGVzdF9pbnB1dHMgPSBbXQogICAgICAgICBzZWxmLl9uZWVkc19odHRwID0gTm9u
ZQogICAgICAgICBzZWxmLl9uZWVkc193ZWJzb2NrZXRzID0gTm9uZQorICAgICAgICBzZWxmLl9u
ZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3JldHJ5
aW5nID0gRmFsc2UKIAogICAgICAgICBzZWxmLl9jdXJyZW50X3J1bl9yZXN1bHRzID0gTm9uZQog
ICAgICAgICBzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkcyA9IFtdCiAgICAgICAgIHNlbGYu
X2hhc19odHRwX2xvY2sgPSBGYWxzZQogCi0gICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBleHBlY3Rh
dGlvbnMsIHRlc3RfaW5wdXRzLCB0ZXN0c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0
cCwgbmVlZHNfd2Vic29ja2V0cywgcmV0cnlpbmcpOgorICAgIGRlZiBydW5fdGVzdHMoc2VsZiwg
ZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9fc2tpcCwgbnVtX3dvcmtlcnMsIG5l
ZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIG5lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
ciwgcmV0cnlpbmcpOgogICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnMK
ICAgICAgICAgc2VsZi5fdGVzdF9pbnB1dHMgPSB0ZXN0X2lucHV0cwogICAgICAgICBzZWxmLl9u
ZWVkc19odHRwID0gbmVlZHNfaHR0cAorICAgICAgICBzZWxmLl9uZWVkc193ZWJfcGxhdGZvcm1f
dGVzdF9zZXJ2ZXIgPSBuZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIKICAgICAgICAgc2Vs
Zi5fbmVlZHNfd2Vic29ja2V0cyA9IG5lZWRzX3dlYnNvY2tldHMKICAgICAgICAgc2VsZi5fcmV0
cnlpbmcgPSByZXRyeWluZwogCkBAIC0yMDYsNiArMjA4LDkgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1
bm5lcihvYmplY3QpOgogICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJzb2NrZXRzOgogICAgICAg
ICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0YXJ0aW5nIFdlYlNvY2tldCBzZXJ2
ZXIgLi4uJykKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigp
CisgICAgICAgIGlmIHNlbGYuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcjoKKyAgICAg
ICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdGFydGluZyBXZWIgUGxhdGZvcm0g
VGVzdCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyKCkKICAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9jayA9IFRydWUKIAog
ICAgIGRlZiBzdG9wX3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgpAQCAtMjE2LDYgKzIyMSw5IEBA
IGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgICAgIGlmIHNlbGYuX25l
ZWRzX3dlYnNvY2tldHM6CiAgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRh
dGUoJ1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKICAgICAgICAgICAgICAgICBzZWxm
Ll9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgICAgICBpZiBzZWxmLl9uZWVk
c193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRl
ci53cml0ZV91cGRhdGUoJ1N0b3BwaW5nIFdlYiBQbGF0Zm9ybSBUZXN0IHNlcnZlciAuLi4nKQor
ICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIo
KQogICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1JlbGVhc2luZyBzZXJ2
ZXIgbG9jayAuLi4nKQogICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxlYXNlX2h0dHBfbG9jaygp
CiAgICAgICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gRmFsc2UKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0
X3J1bm5lcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weQppbmRleCA4MDk3N2U1
NzZlOTZmNWYwMDY3ZmUxMDFjZGU5OGU4YmY4Nzc3OWEyLi4xM2E3MjY2ZDMxNDA4NDI2Njg2NDRj
OWFmYzI1YzMzZDQ3ODVmZTFkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0
X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CkBAIC0xMDYsNyArMTA2LDcgQEAgY2xhc3MgTGF5b3V0
VGVzdFJ1bm5lclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZXhwZWN0YXRpb25z
ID0gVGVzdEV4cGVjdGF0aW9ucyhydW5uZXIuX3BvcnQsIHRlc3RzKQogICAgICAgICBleHBlY3Rh
dGlvbnMucGFyc2VfYWxsX2V4cGVjdGF0aW9ucygpCiAgICAgICAgIHJ1bm5lci5ydW5fdGVzdHMo
ZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgc2V0KCksCi0gICAgICAgICAgICBudW1fd29ya2Vy
cz0xLCBuZWVkc19odHRwPWFueSgnaHR0cCcgaW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0cyksIG5l
ZWRzX3dlYnNvY2tldHM9YW55KFsnd2Vic29ja2V0JyBpbiB0ZXN0IGZvciB0ZXN0IGluIHRlc3Rz
XSksIHJldHJ5aW5nPUZhbHNlKQorICAgICAgICAgICAgbnVtX3dvcmtlcnM9MSwgbmVlZHNfaHR0
cD1hbnkoJ2h0dHAnIGluIHRlc3QgZm9yIHRlc3QgaW4gdGVzdHMpLCBuZWVkc193ZWJzb2NrZXRz
PWFueShbJ3dlYnNvY2tldCcgaW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0c10pLCBuZWVkc193ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXI9YW55KFsnaW1wb3J0ZWQvdzNjJyBpbiB0ZXN0IGZvciB0ZXN0
IGluIHRlc3RzXSksIHJldHJ5aW5nPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfaHR0cF9sb2NraW5n
KHNlbGYpOgogICAgICAgICBydW5uZXIgPSBzZWxmLl9ydW5uZXIoKQpAQCAtMTc2LDQ5ICsxNzYs
ODMgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgZGVmIHN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKToKICAgICAgICAgICAgIHNlbGYud2Vi
c29ja2V0X3N0YXJ0ZWQgPSBUcnVlCiAKKyAgICAgICAgZGVmIHN0YXJ0X3dlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlcigpOgorICAgICAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJf
c3RhcnRlZCA9IFRydWUKKwogICAgICAgICBkZWYgc3RvcF9odHRwX3NlcnZlcigpOgogICAgICAg
ICAgICAgc2VsZi5odHRwX3N0b3BwZWQgPSBUcnVlCiAKICAgICAgICAgZGVmIHN0b3Bfd2Vic29j
a2V0X3NlcnZlcigpOgogICAgICAgICAgICAgc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IFRydWUK
IAorICAgICAgICBkZWYgc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoKToKKyAgICAgICAg
ICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQgPSBUcnVlCisKICAgICAg
ICAgaG9zdCA9IE1vY2tIb3N0KCkKICAgICAgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5Lmdl
dCgndGVzdC1tYWMtbGVvcGFyZCcpCiAgICAgICAgIHBvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIgPSBz
dGFydF9odHRwX3NlcnZlcgogICAgICAgICBwb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIgPSBz
dGFydF93ZWJzb2NrZXRfc2VydmVyCisgICAgICAgIHBvcnQuc3RhcnRfd2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyID0gc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyCiAgICAgICAgIHBvcnQu
c3RvcF9odHRwX3NlcnZlciA9IHN0b3BfaHR0cF9zZXJ2ZXIKICAgICAgICAgcG9ydC5zdG9wX3dl
YnNvY2tldF9zZXJ2ZXIgPSBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIKKyAgICAgICAgcG9ydC5zdG9w
X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IHN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
CiAKICAgICAgICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBzZWxmLmh0dHBfc3RvcHBlZCA9IHNlbGYu
d2Vic29ja2V0X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tldF9zdG9wcGVkID0gRmFsc2UKKyAgICAg
ICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQgPSBGYWxzZQogICAgICAgICBydW5uZXIgPSBzZWxmLl9y
dW5uZXIocG9ydD1wb3J0KQogICAgICAgICBydW5uZXIuX25lZWRzX2h0dHAgPSBUcnVlCiAgICAg
ICAgIHJ1bm5lci5fbmVlZHNfd2Vic29ja2V0cyA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVl
ZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gRmFsc2UKICAgICAgICAgcnVubmVyLnN0YXJ0
X3NlcnZlcnNfd2l0aF9sb2NrKG51bWJlcl9vZl9zZXJ2ZXJzPTQpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5odHRwX3N0YXJ0ZWQsIFRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCwgRmFsc2UpCiAgICAgICAg
IHJ1bm5lci5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLmh0dHBfc3RvcHBlZCwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
LndlYnNvY2tldF9zdG9wcGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
LndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkLCBGYWxzZSkKIAogICAgICAgICBzZWxm
Lmh0dHBfc3RhcnRlZCA9IHNlbGYuaHR0cF9zdG9wcGVkID0gc2VsZi53ZWJzb2NrZXRfc3RhcnRl
ZCA9IHNlbGYud2Vic29ja2V0X3N0b3BwZWQgPSBGYWxzZQorICAgICAgICBzZWxmLndlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVkID0gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJf
c3RvcHBlZCA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5fbmVlZHNfaHR0cCA9IFRydWUKICAgICAg
ICAgcnVubmVyLl9uZWVkc193ZWJzb2NrZXRzID0gVHJ1ZQorICAgICAgICBydW5uZXIuX25lZWRz
X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5zdGFydF9z
ZXJ2ZXJzX3dpdGhfbG9jayhudW1iZXJfb2Zfc2VydmVycz00KQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYuaHR0cF9zdGFydGVkLCBUcnVlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCwgRmFsc2UpCiAgICAgICAgIHJ1
bm5lci5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLmh0dHBfc3RvcHBlZCwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndl
YnNvY2tldF9zdG9wcGVkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQsIEZhbHNlKQorCisgICAgICAgIHNlbGYuaHR0
cF9zdGFydGVkID0gc2VsZi5odHRwX3N0b3BwZWQgPSBzZWxmLndlYnNvY2tldF9zdGFydGVkID0g
c2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3Jt
X3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9w
cGVkID0gRmFsc2UKKyAgICAgICAgcnVubmVyLl9uZWVkc19odHRwID0gRmFsc2UKKyAgICAgICAg
cnVubmVyLl9uZWVkc193ZWJzb2NrZXRzID0gRmFsc2UKKyAgICAgICAgcnVubmVyLl9uZWVkc193
ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBGYWxzZQorICAgICAgICBydW5uZXIuc3RhcnRfc2Vy
dmVyc193aXRoX2xvY2sobnVtYmVyX29mX3NlcnZlcnM9NCkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLmh0dHBfc3RhcnRlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi53ZWJzb2NrZXRfc3RhcnRlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCwgRmFsc2UpCisgICAgICAgIHJ1
bm5lci5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLmh0dHBfc3RvcHBlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53
ZWJzb2NrZXRfc3RvcHBlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53
ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCwgRmFsc2UpCiAKICAgICAgICAgc2VsZi5o
dHRwX3N0YXJ0ZWQgPSBzZWxmLmh0dHBfc3RvcHBlZCA9IHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQg
PSBzZWxmLndlYnNvY2tldF9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0
b3BwZWQgPSBGYWxzZQogICAgICAgICBydW5uZXIuX25lZWRzX2h0dHAgPSBGYWxzZQogICAgICAg
ICBydW5uZXIuX25lZWRzX3dlYnNvY2tldHMgPSBGYWxzZQorICAgICAgICBydW5uZXIuX25lZWRz
X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IFRydWUKICAgICAgICAgcnVubmVyLnN0YXJ0X3Nl
cnZlcnNfd2l0aF9sb2NrKG51bWJlcl9vZl9zZXJ2ZXJzPTQpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VsZi5odHRwX3N0YXJ0ZWQsIEZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQsIFRydWUpCiAgICAgICAgIHJ1
bm5lci5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLmh0dHBfc3RvcHBlZCwgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53
ZWJzb2NrZXRfc3RvcHBlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53
ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCwgVHJ1ZSkKIAogCiBjbGFzcyBTaGFyZGVy
VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjgwLDcgKzMxNCw3IEBAIGNsYXNzIFNoYXJk
ZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAgKCcuJywgWydodHRwL3Rl
c3RzL3NlY3VyaXR5L3ZpZXctc291cmNlLW5vLXJlZnJlc2guaHRtbCddKSwKICAgICAgICAgICAg
ICAoJy4nLCBbJ2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90b2NvbC1p
Z25vcmVkLmh0bWwnXSksCiAgICAgICAgICAgICAgKCcuJywgWydodHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3N1cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sJ10pLAotICAgICAgICAgICAg
ICgnLicsIFsncGVyZi9vYmplY3Qta2V5cy5odG1sJ10pXSksCisgICAgICAgICAgICAgKCcuJywg
WydwZXJmL29iamVjdC1rZXlzLmh0bWwnXSldKQogICAgICAgICBzZWxmLmFzc2VydF9zaGFyZHMo
dW5sb2NrZWQsCiAgICAgICAgICAgICBbKCcuJywgWydhbmltYXRpb25zL2tleWZyYW1lcy5odG1s
J10pLAogICAgICAgICAgICAgICgnLicsIFsnZmFzdC9jc3MvZGlzcGxheS1ub25lLWlubGluZS1z
dHlsZS1jaGFuZ2UtY3Jhc2guaHRtbCddKSwKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CmluZGV4IGZiYWY3
MzdlZGFmYzMwNDYwMmFlNzVhMzNkMDZkMzVjYWQ0YzkwMGEuLjkxZjE5YmVlNDhhMzIzNGQ2YjBk
NWUwNDE0ZDFiYjVjMzExOWI2NWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQpAQCAtNzksNiArNzks
NyBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuSFRUUF9TVUJESVIgPSAn
aHR0cCcgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IKICAgICAgICAgc2VsZi5QRVJGX1NVQkRJ
UiA9ICdwZXJmJwogICAgICAgICBzZWxmLldFQlNPQ0tFVF9TVUJESVIgPSAnd2Vic29ja2V0JyAr
IHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgorICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0
X3N1YmRpciA9IG9wdGlvbnMud3B0c2VydmVyX2RvY19yb290ICsgcG9ydC5URVNUX1BBVEhfU0VQ
QVJBVE9SCiAgICAgICAgIHNlbGYuTEFZT1VUX1RFU1RTX0RJUkVDVE9SWSA9ICdMYXlvdXRUZXN0
cycKIAogICAgICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3Bl
blNTTCBvbiBidWlsZGJvdHMuCkBAIC05OCw2ICs5OSw5IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0
KToKICAgICBkZWYgX2lzX3dlYnNvY2tldF90ZXN0KHNlbGYsIHRlc3QpOgogICAgICAgICByZXR1
cm4gc2VsZi5XRUJTT0NLRVRfU1VCRElSIGluIHRlc3QKIAorICAgIGRlZiBfaXNfd2ViX3BsYXRm
b3JtX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHJldHVybiBzZWxmLndlYl9wbGF0Zm9ybV90
ZXN0X3N1YmRpciBpbiB0ZXN0CisKICAgICBkZWYgX2h0dHBfdGVzdHMoc2VsZiwgdGVzdF9uYW1l
cyk6CiAgICAgICAgIHJldHVybiBzZXQodGVzdCBmb3IgdGVzdCBpbiB0ZXN0X25hbWVzIGlmIHNl
bGYuX2lzX2h0dHBfdGVzdCh0ZXN0KSkKIApAQCAtMTMxLDcgKzEzNSw3IEBAIGNsYXNzIE1hbmFn
ZXIob2JqZWN0KToKICAgICAgICAgcnVubmluZyBtdWx0aXBsZSBjb3BpZXMgb2YgTlJXVHMuIFBl
cmYgdGVzdHMgYXJlIGxvY2tlZAogICAgICAgICBiZWNhdXNlIGhlYXZ5IGxvYWQgY2F1c2VkIGJ5
IHJ1bm5pbmcgb3RoZXIgdGVzdHMgaW4gcGFyYWxsZWwKICAgICAgICAgbWlnaHQgY2F1c2Ugc29t
ZSBvZiB0aGVtIHRvIHRpbWVvdXQuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9pc19odHRwX3Rl
c3QodGVzdF9maWxlKSBvciBzZWxmLl9pc19wZXJmX3Rlc3QodGVzdF9maWxlKQorICAgICAgICBy
ZXR1cm4gc2VsZi5faXNfaHR0cF90ZXN0KHRlc3RfZmlsZSkgb3Igc2VsZi5faXNfcGVyZl90ZXN0
KHRlc3RfZmlsZSkgb3Igc2VsZi5faXNfd2ViX3BsYXRmb3JtX3Rlc3QodGVzdF9maWxlKQogCiAg
ICAgZGVmIF90ZXN0X2lzX3Nsb3coc2VsZiwgdGVzdF9maWxlKToKICAgICAgICAgcmV0dXJuIHNl
bGYuX2V4cGVjdGF0aW9ucy5tb2RlbCgpLmhhc19tb2RpZmllcih0ZXN0X2ZpbGUsIHRlc3RfZXhw
ZWN0YXRpb25zLlNMT1cpCkBAIC0yNDYsNiArMjUwLDcgQEAgY2xhc3MgTWFuYWdlcihvYmplY3Qp
OgogCiAgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgdGVzdHNfdG9fcnVuLCB0ZXN0c190b19za2lw
LCByZXBlYXRfZWFjaCwgaXRlcmF0aW9ucywgbnVtX3dvcmtlcnMsIHJldHJ5aW5nKToKICAgICAg
ICAgbmVlZHNfaHR0cCA9IGFueShzZWxmLl9pc19odHRwX3Rlc3QodGVzdCkgZm9yIHRlc3QgaW4g
dGVzdHNfdG9fcnVuKQorICAgICAgICBuZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBh
bnkoc2VsZi5faXNfd2ViX3BsYXRmb3JtX3Rlc3QodGVzdCkgZm9yIHRlc3QgaW4gdGVzdHNfdG9f
cnVuKQogICAgICAgICBuZWVkc193ZWJzb2NrZXRzID0gYW55KHNlbGYuX2lzX3dlYnNvY2tldF90
ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKIAogICAgICAgICB0ZXN0X2lucHV0
cyA9IFtdCkBAIC0yNTMsNyArMjU4LDcgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAg
ICAgICAgZm9yIHRlc3QgaW4gdGVzdHNfdG9fcnVuOgogICAgICAgICAgICAgICAgIGZvciBfIGlu
IHhyYW5nZShyZXBlYXRfZWFjaCk6CiAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5wdXRzLmFw
cGVuZChzZWxmLl90ZXN0X2lucHV0X2Zvcl9maWxlKHRlc3QpKQotICAgICAgICByZXR1cm4gc2Vs
Zi5fcnVubmVyLnJ1bl90ZXN0cyhzZWxmLl9leHBlY3RhdGlvbnMsIHRlc3RfaW5wdXRzLCB0ZXN0
c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVlZHNfd2Vic29ja2V0cywgcmV0
cnlpbmcpCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5uZXIucnVuX3Rlc3RzKHNlbGYuX2V4cGVj
dGF0aW9ucywgdGVzdF9pbnB1dHMsIHRlc3RzX3RvX3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19o
dHRwLCBuZWVkc193ZWJzb2NrZXRzLCBuZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIsIHJl
dHJ5aW5nKQogCiAgICAgZGVmIF9jbGVhbl91cF9ydW4oc2VsZik6CiAgICAgICAgIF9sb2cuZGVi
dWcoIkZsdXNoaW5nIHN0ZG91dCIpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5w
eQppbmRleCAzYWVmYzNkNmNkNDc5NmM3MjkzNzA0MDgxNTA4MmUzNzNlMGM3MWQ1Li4xZDJkNmU2
YThmZjc2YWJhMTdhNzIyMGZjZjM5ZjNjY2Q0ZGFmZjU1IDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21h
bmFnZXJfdW5pdHRlc3QucHkKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgTWFuYWdlclRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICBkZWYgZ2V0X21hbmFnZXIoKToKICAgICAgICAgICAg
IHBvcnQgPSBNb2NrKCkgICMgRklYTUU6IFVzZSBhIHRpZ2h0ZXIgbW9jay4KICAgICAgICAgICAg
IHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUiA9ICcvJwotICAgICAgICAgICAgbWFuYWdlciA9IE1h
bmFnZXIocG9ydCwgb3B0aW9ucz1Nb2NrT3B0aW9ucyhodHRwPVRydWUsIG1heF9sb2NrZWRfc2hh
cmRzPTEpLCBwcmludGVyPU1vY2soKSkKKyAgICAgICAgICAgIG1hbmFnZXIgPSBNYW5hZ2VyKHBv
cnQsIG9wdGlvbnM9TW9ja09wdGlvbnMoaHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xLCB3
cHRzZXJ2ZXJfZG9jX3Jvb3Q9J2ltcG9ydGVkL3czYycpLCBwcmludGVyPU1vY2soKSkKICAgICAg
ICAgICAgIHJldHVybiBtYW5hZ2VyCiAKICAgICAgICAgbWFuYWdlciA9IGdldF9tYW5hZ2VyKCkK
QEAgLTU1LDExICs1NSwxNyBAQCBjbGFzcyBNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgICAgIG1hbmFnZXIgPSBnZXRfbWFuYWdlcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShtYW5hZ2VyLm5lZWRzX3NlcnZlcnMoWydodHRwL3Rlc3RzL21pc2MnXSkpCiAKKyAgICAgICAg
bWFuYWdlciA9IGdldF9tYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hbmFnZXIu
bmVlZHNfc2VydmVycyhbJ2ltcG9ydGVkL3czYy90ZXN0J10pKQorCisgICAgICAgIG1hbmFnZXIg
PSBnZXRfbWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWFuYWdlci5uZWVkc19z
ZXJ2ZXJzKFsnaW1wb3J0ZWQvdGVzdCddKSkKKwogICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X25l
ZWRzX3NlcnZlcnMoc2VsZik6CiAgICAgICAgIGRlZiBnZXRfbWFuYWdlcigpOgogICAgICAgICAg
ICAgaG9zdCA9IE1vY2tIb3N0KCkKICAgICAgICAgICAgIHBvcnQgPSBob3N0LnBvcnRfZmFjdG9y
eS5nZXQoKQotICAgICAgICAgICAgbWFuYWdlciA9IE1hbmFnZXIocG9ydCwgb3B0aW9ucz1Nb2Nr
T3B0aW9ucyh0ZXN0X2xpc3Q9Tm9uZSwgaHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xKSwg
cHJpbnRlcj1Nb2NrKCkpCisgICAgICAgICAgICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0LCBvcHRp
b25zPU1vY2tPcHRpb25zKHRlc3RfbGlzdD1Ob25lLCBodHRwPVRydWUsIG1heF9sb2NrZWRfc2hh
cmRzPTEsIHdwdHNlcnZlcl9kb2Nfcm9vdD0naW1wb3J0ZWQvdzNjJyksIHByaW50ZXI9TW9jaygp
KQogICAgICAgICAgICAgcmV0dXJuIG1hbmFnZXIKIAogICAgICAgICBtYW5hZ2VyID0gZ2V0X21h
bmFnZXIoKQpAQCAtNzksNyArODUsNyBAQCBjbGFzcyBNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIGRlZiBnZXRfbWFuYWdlcigpOgogICAgICAgICAgICAgaG9zdCA9IE1v
Y2tIb3N0KCkKICAgICAgICAgICAgIHBvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3Qt
bWFjLWxlb3BhcmQnKQotICAgICAgICAgICAgbWFuYWdlciA9IE1hbmFnZXIocG9ydCwgb3B0aW9u
cz1Nb2NrT3B0aW9ucyh0ZXN0X2xpc3Q9Tm9uZSwgaHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJk
cz0xKSwgcHJpbnRlcj1Nb2NrKCkpCisgICAgICAgICAgICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0
LCBvcHRpb25zPU1vY2tPcHRpb25zKHRlc3RfbGlzdD1Ob25lLCBodHRwPVRydWUsIG1heF9sb2Nr
ZWRfc2hhcmRzPTEsIHdwdHNlcnZlcl9kb2Nfcm9vdD0naW1wb3J0ZWQvdzNjJyksIHByaW50ZXI9
TW9jaygpKQogICAgICAgICAgICAgcmV0dXJuIG1hbmFnZXIKICAgICAgICAgaG9zdCA9IE1vY2tI
b3N0KCkKICAgICAgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldCgndGVzdC1tYWMtbGVv
cGFyZCcpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cnVuX3dlYmtpdF90ZXN0cy5weQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4
IGQwYWE2ZGYwZWU4NzAzYmQ4ZWJiNGUzMzhlNjhjOTU2MWRkNzA2NjIuLmMzZTY2Yjc4OWYwNDM5
MTFhNTU1Yjk3YzcxMGNiZGU2ZTA3ZDIzMzkKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0yOTAsNiArMjkwLDE1IEBA
IGRlZiBwYXJzZV9hcmdzKGFyZ3MpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25m
aWd1cmF0aW9ucy4gRG9lcyBub3QgcnVuIGFueSB0ZXN0cy4iKSksCiAgICAgXSkpCiAKKyAgICBv
cHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgiV2ViIFBsYXRmb3JtIFRlc3QgU2VydmVy
IE9wdGlvbnMiLCBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdwdHNlcnZlci1k
b2Mtcm9vdCIsIHR5cGU9InN0cmluZyIsIGRlZmF1bHQ9b3MucGF0aC5qb2luKCJpbXBvcnRlZCIs
ICJ3M2MiLCAid3B0IiksCisgICAgICAgICAgICBoZWxwPSgiU2V0IHdlYiBwbGF0Zm9ybSBzZXJ2
ZXIgZG9jdW1lbnQgcm9vdCwgcmVsYXRpdmUgdG8gTGF5b3V0VGVzdHMgZGlyZWN0b3J5IikpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS13cHRzZXJ2ZXItaHR0cC1wb3J0IiwgdHlw
ZT0iaW50IiwgZGVmYXVsdD04ODAwLAorICAgICAgICAgICAgaGVscD0oIlNldCB3ZWIgcGxhdGZv
cm0gbWFpbiBIVFRQIHNlcnZlciBwb3J0LiIpKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oIi0td3B0c2VydmVyLWhvc3RuYW1lIiwgdHlwZT0ic3RyaW5nIiwgZGVmYXVsdD0ibG9jYWxo
b3N0IiwKKyAgICAgICAgICAgIGhlbHA9KCJTZXQgd2ViIHBsYXRmb3JtIHNlcnZlciBob3N0IG5h
bWUuIikpLAorICAgIF0pKQorCiAgICAgIyBGSVhNRTogTW92ZSB0aGVzZSBpbnRvIGpzb25fcmVz
dWx0c19nZW5lcmF0b3IucHkKICAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgi
UmVzdWx0IEpTT04gT3B0aW9ucyIsIFsKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0t
bWFzdGVyLW5hbWUiLCBoZWxwPSJUaGUgbmFtZSBvZiB0aGUgYnVpbGRib3QgbWFzdGVyLiIpLApk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93
ZWJfcGxhdGZvcm1fdGVzdF9sYXVuY2hlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNoZXIucHkKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMDNjYTQ5MjBjYTM5YjBhNjQ3YjVlZjE5OGQyMWQwMzA1YThlZGU1YgotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3Bs
YXRmb3JtX3Rlc3RfbGF1bmNoZXIucHkKQEAgLTAsMCArMSw1NiBAQAorIyAgQ29weXJpZ2h0IChj
KSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMgIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCisjICAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorIyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
Q0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyAg
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorIyAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
CisjICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyAgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UK
K2ltcG9ydCBvcworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKK2xvZ2dl
ci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisjIFRoc2kgc2NyaXB0IGlzIHVzZWQgdG8gbGF1
bmNoIHRoZSB3ZWIgcGxhdGZvcm0gdGVzdCBzZXJ2ZXIgbWFpbiBzY3JpcHQgKHNlcnZlLnB5KSBh
bmQgc3RvcCBpdCB3aGVuIGFza2VkIGJ5IHJ1bi13ZWJraXQtdGVzdHMKKworc3lzLnBhdGguaW5z
ZXJ0KDEsICIuIikKK2ltcG9ydCBzZXJ2ZSBhcyBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIKKworCitk
ZWYgbWFpbihhcmd2LCBzdGRvdXQsIHN0ZGVycik6CisgICAgIyBUaGlzIGlzIGEgY29weSBvZiBz
ZXJ2ZS5weSBtYWluIGZ1bmN0aW9uLCBleGNlcHQgZm9yIHRoZSB3YWl0IHN0ZXA/CisgICAgY29u
ZmlnID0gV2ViUGxhdGZvcm1UZXN0U2VydmVyLmxvYWRfY29uZmlnKCJjb25maWcuZGVmYXVsdC5q
c29uIiwgImNvbmZpZy5qc29uIikKKyAgICBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIubG9nZ2VyID0g
V2ViUGxhdGZvcm1UZXN0U2VydmVyLmRlZmF1bHRfbG9nZ2VyKGNvbmZpZ1sibG9nX2xldmVsIl0p
CisgICAgY29uZmlnXywgc3RhcnRlZF9zZXJ2ZXJzID0gV2ViUGxhdGZvcm1UZXN0U2VydmVyLnN0
YXJ0KGNvbmZpZykKKworICAgIGZvciBwcm90b2NvbCwgc2VydmVycyBpbiBzdGFydGVkX3NlcnZl
cnMuaXRlbXMoKToKKyAgICAgICAgZm9yIHBvcnQsIHByb2Nlc3MgaW4gc2VydmVyczoKKyAgICAg
ICAgICAgIGxvZ2dlci5pbmZvKCIlcywgcG9ydDolZCwgcGlkOiVkIiAlIChwcm90b2NvbCwgcG9y
dCwgcHJvY2Vzcy5wcm9jLnBpZCkpCisKKyAgICAjIFdhaXQgdW50aWw6CisgICAgIyAxLiB1c2Vy
IHByZXNzZXMgZW50ZXIgKGluIGNhc2Ugc2NyaXB0IGV4ZWN1dGVkIGluIGNvbW1hbmQgbGluZSkK
KyAgICAjIDIuIHRoZSBtYXN0ZXIgcHJvY2VzcyBzZW5kcyBlbnRlciAocmVndWxhciBzdG9wIGNv
bW1hbmQpCisgICAgIyAzLiB0aGUgbWFzdGVyIHByb2Nlc3MgaXMgc3RvcHBlZCAoYW5kIHN0ZGlu
IGlzIGNsb3NlZCkKKyAgICBzeXMuc3RkaW4ucmVhZCgxKQorCisKK2lmIF9fbmFtZV9fID09ICJf
X21haW5fXyI6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5cy5zdGRvdXQsIHN5
cy5zdGRlcnIpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5weQpu
ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44YmIwODRlNDY2NGM4ZjY0N2QyN2I4ZTY0NmY4NGUxZTNiMjM0ZWJlCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVy
cy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkKQEAgLTAsMCArMSw4NiBAQAorIyAgQ29weXJp
Z2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMgIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IyAgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCisj
ICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorIyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMg
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorIyAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyAgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3VicHJvY2VzcworaW1w
b3J0IHN5cworCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBodHRw
X3NlcnZlcl9iYXNlCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitj
bGFzcyBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFz
ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBvdXRwdXRfZGlyLCBw
aWRmaWxlPU5vbmUpOgorICAgICAgICAiIiJBcmdzOgorICAgICAgICAgIG91dHB1dF9kaXI6IHRo
ZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgZGlyZWN0b3J5CisgICAg
ICAgICIiIgorICAgICAgICBodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlLl9faW5pdF9f
KHNlbGYsIHBvcnRfb2JqKQorICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2Rpcgor
ICAgICAgICBzZWxmLl9zZXRfc3RhcnRfY21kKHBvcnRfb2JqKQorCisgICAgICAgIHNlbGYuX25h
bWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2xvZ19maWxlX25hbWUgPSAnJXNfcHJvY2Vzc19sb2cu
b3V0LnR4dCcgJSAoc2VsZi5fbmFtZSkKKworICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGlkX2ZpbGUgPSBwaWRm
aWxlCisgICAgICAgIGlmIG5vdCBzZWxmLl9waWRfZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3Bp
ZF9maWxlID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3J1bnRpbWVfcGF0aCwgJyVzLnBp
ZCcgJSBzZWxmLl9uYW1lKQorICAgICAgICBzZWxmLl9zdGRvdXRfZGF0YSA9IE5vbmUKKyAgICAg
ICAgc2VsZi5fc3RkZXJyX2RhdGEgPSBOb25lCisKKyAgICBkZWYgX3NldF9zdGFydF9jbWQoc2Vs
ZiwgcG9ydF9vYmopOgorICAgICAgICBmaWxlX3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmFic3Bh
dGgoc2VsZi5fZmlsZXN5c3RlbS5zcGxpdChfX2ZpbGVfXylbMF0pCisgICAgICAgIHNlbGYuX3N0
YXJ0X2NtZCA9IFsicHl0aG9uIiwgc2VsZi5fZmlsZXN5c3RlbS5qb2luKGZpbGVfcGF0aCwgIndl
Yl9wbGF0Zm9ybV90ZXN0X2xhdW5jaGVyLnB5IildCisgICAgICAgIHNlbGYuX2N3ZCA9IHBvcnRf
b2JqLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgiTGF5b3V0VGVzdHMiLCBwb3J0X29iai5nZXRfb3B0
aW9uKCJ3cHRzZXJ2ZXJfZG9jX3Jvb3QiKSkKKyAgICAgICAgI1RPRE86IHdyaXRlIGNvbmZpZy5q
c29uIGFjY29yZGluZyBwb3J0X29iai5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfaHR0cF9wb3J0Iikg
YW5kIHBvcnRfb2JqLmdldF9vcHRpb24oIndwdHNlcnZlcl9ob3N0bmFtZSIpCisKKyAgICBkZWYg
X3ByZXBhcmVfY29uZmlnKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0
cyhzZWxmLl9vdXRwdXRfZGlyKToKKyAgICAgICAgICAgIG91dHB1dF9sb2cgPSBzZWxmLl9maWxl
c3lzdGVtLmpvaW4oc2VsZi5fb3V0cHV0X2Rpciwgc2VsZi5fbG9nX2ZpbGVfbmFtZSkKKyAgICAg
ICAgICAgIHNlbGYuX3dzb3V0ID0gc2VsZi5fZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3Jf
d3JpdGluZyhvdXRwdXRfbG9nKQorCisgICAgZGVmIF9zcGF3bl9wcm9jZXNzKHNlbGYpOgorICAg
ICAgICBzZWxmLl9zdGRvdXRfZGF0YSA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3RkZXJyX2RhdGEg
PSBOb25lCisgICAgICAgIGlmIHNlbGYuX3dzb3V0OgorICAgICAgICAgICAgc2VsZi5fcHJvY2Vz
cyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5fc3RhcnRfY21kLCBjd2Q9c2VsZi5fY3dkLCBzaGVs
bD1GYWxzZSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c2VsZi5fd3NvdXQsIHN0ZGVy
cj1zZWxmLl93c291dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mg
PSBzdWJwcm9jZXNzLlBvcGVuKHNlbGYuX3N0YXJ0X2NtZCwgY3dkPXNlbGYuX2N3ZCwgc2hlbGw9
RmFsc2UsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3Rk
ZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3Rl
eHRfZmlsZShzZWxmLl9waWRfZmlsZSwgc3RyKHNlbGYuX3Byb2Nlc3MucGlkKSkKKyAgICAgICAg
cmV0dXJuIHNlbGYuX3Byb2Nlc3MucGlkCisKKyAgICBkZWYgX3N0b3BfcnVubmluZ19zZXJ2ZXIo
c2VsZik6CisgICAgICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nICVzIHNlcnZlcicgJSAoc2VsZi5f
bmFtZSkpCisgICAgICAgIGlmIHNlbGYuX3BpZCBhbmQgbm90IHNlbGYuX2V4ZWN1dGl2ZS5jaGVj
a19ydW5uaW5nX3BpZChzZWxmLl9waWQpOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5y
ZW1vdmUoc2VsZi5fcGlkX2ZpbGUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2Vs
Zi5fcHJvY2VzczoKKyAgICAgICAgICAgIChzZWxmLl9zdGRvdXRfZGF0YSwgc2VsZi5fc3RkZXJy
X2RhdGEpID0gc2VsZi5fcHJvY2Vzcy5jb21tdW5pY2F0ZShpbnB1dD0nXG4nKQorICAgICAgICBp
ZiBzZWxmLl93c291dDoKKyAgICAgICAgICAgIHNlbGYuX3dzb3V0LmNsb3NlKCkKKyAgICAgICAg
ICAgIHNlbGYuX3dzb3V0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9leGVjdXRpdmUuY2hlY2tf
cnVubmluZ19waWQoc2VsZi5fcGlkKToKKyAgICAgICAgICAgIHJhaXNlIGh0dHBfc2VydmVyX2Jh
c2UuU2VydmVyRXJyb3IoJ0ZhaWxlZCB0byBzdG9wICVzOiBwbGVhc2UgZ28gdG8gd2ViIHBsYXRm
b3JtIHRlc3Qgc2VydmVyIGxvZyBmaWxlIHRvIGdldCB0aGUgUElEIGxpc3QnICUgKHNlbGYuX25h
bWUpKQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZShzZWxmLl9waWRfZmlsZSkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfdW5pdHRlc3Qu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTRjMjc1MGQ0OWJiNDc3NmEwNzZkMzAwZDBkMDBjN2I3ZDk0MmM5Ngot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Nl
cnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsNDcg
QEAKKyMgIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjICAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMgIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZgorIyAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjICBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisjICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjICBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjICBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyMgIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisj
ICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorIyAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0
ZXN0MiBhcyB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21vY2sgaW1wb3J0
IE1vY2tIb3N0Citmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IFBvcnQKK2Zyb20gd2Via2l0cHku
dG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKKworZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMuc2VydmVycy53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgaW1wb3J0IFdlYlBsYXRmb3Jt
VGVzdFNlcnZlcgorCisKK2NsYXNzIFRlc3RXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIodW5pdHRlc3Qu
VGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3N0YXJ0X2NtZChzZWxmKToKKworICAgICAgICBwb3J0
ID0gUG9ydChNb2NrSG9zdCgpLCAidGVzdCIsIE1vY2tPcHRpb25zKHdwdHNlcnZlcl9wb3J0PTg4
MDAsIHdwdHNlcnZlcl9kb2Nfcm9vdD0iaW1wb3J0ZWQvdzNjIikpCisgICAgICAgIHNlcnZlciA9
IFdlYlBsYXRmb3JtVGVzdFNlcnZlcihwb3J0LCAid3B0dGVzdCIsICIvbW9jay9vdXRwdXRfZGly
IiwgIi9tb2NrL291dHB1dF9kaXIvcGlkLnR4dCIpCisKKyAgICAgICAgc2VydmVyLl9wcmVwYXJl
X2NvbmZpZygpCisgICAgICAgIHNlcnZlci5fd3NvdXQgPSBOb25lCisgICAgICAgIHNlcnZlci5f
c3Bhd25fcHJvY2VzcygpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgc2VydmVyLl9z
dG9wX3J1bm5pbmdfc2VydmVyKCkKKworICAgICAgICBzZWxmLmFzc2VydEluKCJTdGFydGVkIHNl
cnZlciBhdCBodHRwOi8vbG9jYWxob3N0Ojg4MDAiLCBzZXJ2ZXIuX3N0ZG91dF9kYXRhKQorICAg
ICAgICBzZWxmLmFzc2VydEluKCJTdGFydGVkIHNlcnZlciBhdCB3czovL2xvY2FsaG9zdDo0OTAw
MCIsIHNlcnZlci5fc3Rkb3V0X2RhdGEpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5Cmlu
ZGV4IDcyNmI1OTc3Njc5ZTY4YTM2YzEzY2VhZGZiOGY1MzIxM2IxZTNiMDYuLmVmZmY2ZDdiMDM4
NDhkNDBjMjNiNzcwM2EyMGQ0ZmYwYjA4M2VkMDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9i
YXNlLnB5CkBAIC02NSw2ICs2NSw3IEBAIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgc2VydmVy
X3Byb2Nlc3MKIGZyb20gd2Via2l0cHkucG9ydC5mYWN0b3J5IGltcG9ydCBQb3J0RmFjdG9yeQog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgYXBhY2hlX2h0dHBfc2Vy
dmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBodHRwX3NlcnZl
cgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgd2ViX3BsYXRmb3Jt
X3Rlc3Rfc2VydmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCB3
ZWJzb2NrZXRfc2VydmVyCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKQEAg
LTEyMiw2ICsxMjMsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2hlbHBl
ciA9IE5vbmUKICAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYu
X3dlYnNvY2tldF9zZXJ2ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5faW1hZ2VfZGlmZmVyID0gTm9uZQogICAgICAg
ICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZl
clByb2Nlc3MgICMgb3ZlcnJpZGFibGUgZm9yIHRlc3RpbmcKICAgICAgICAgc2VsZi5faHR0cF9s
b2NrID0gTm9uZSAgIyBGSVhNRTogV2h5IGRvZXMgdGhpcyBsaXZlIG9uIHRoZSBwb3J0IG9iamVj
dD8KQEAgLTg5Nyw2ICs4OTksMTUgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBzZXJ2
ZXIuc3RhcnQoKQogICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyID0gc2VydmVyCiAKKyAg
ICBkZWYgc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKHNlbGYsIGFkZGl0aW9uYWxfZGly
cz1Ob25lLCBudW1iZXJfb2Zfc2VydmVycz1Ob25lKToKKyAgICAgICAgIiIiU3RhcnQgYSB3ZWIg
c2VydmVyLiBSYWlzZSBhbiBlcnJvciBpZiBpdCBjYW4ndCBzdGFydCBvciBpcyBhbHJlYWR5IHJ1
bm5pbmcuCisKKyAgICAgICAgUG9ydHMgY2FuIHN0dWIgdGhpcyBvdXQgaWYgdGhleSBkb24ndCBu
ZWVkIGEgd2ViIHNlcnZlciB0byBiZSBydW5uaW5nLiIiIgorICAgICAgICBhc3NlcnQgbm90IHNl
bGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciwgJ0FscmVhZHkgcnVubmluZyBhIFdlYiBQbGF0
Zm9ybSBUZXN0IHNlcnZlci4nCisKKyAgICAgICAgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyID0gd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLldlYlBsYXRmb3JtVGVzdFNlcnZlcihzZWxm
LCAid3B0d2siLCBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCkpCisgICAgICAgIHNlbGYuX3dlYl9w
bGF0Zm9ybV90ZXN0X3NlcnZlci5zdGFydCgpCisKICAgICBkZWYgaHR0cF9zZXJ2ZXJfc3VwcG9y
dHNfaXB2NihzZWxmKToKICAgICAgICAgIyBDeWd3aW4gaXMgdGhlIG9ubHkgcGxhdGZvcm0gdG8g
c3RpbGwgdXNlIEFwYWNoZSAxLjMsIHdoaWNoIG9ubHkgc3VwcG9ydHMgSVBWNC4KICAgICAgICAg
IyBPbmNlIGl0IG1vdmVzIHRvIEFwYWNoZSAyLCB3ZSBjYW4gZHJvcCB0aGlzIG1ldGhvZCBhbHRv
Z2V0aGVyLgpAQCAtOTI2LDYgKzkzNywxMiBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAg
ICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyLnN0b3AoKQogICAgICAgICAgICAgc2VsZi5fd2Vi
c29ja2V0X3NlcnZlciA9IE5vbmUKIAorICAgIGRlZiBzdG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3Nl
cnZlcihzZWxmKToKKyAgICAgICAgIiIiU2h1dCBkb3duIHRoZSB3ZWIgcGxhdGZvcm0gdGVzdCBz
ZXJ2ZXIgaWYgaXQgaXMgcnVubmluZy4gRG8gbm90aGluZyBpZiBpdCBpc24ndC4iIiIKKyAgICAg
ICAgaWYgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyOgorICAgICAgICAgICAgc2VsZi5f
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5fd2ViX3Bs
YXRmb3JtX3Rlc3Rfc2VydmVyID0gTm9uZQorCiAgICAgZGVmIHJlbGVhc2VfaHR0cF9sb2NrKHNl
bGYpOgogICAgICAgICBpZiBzZWxmLl9odHRwX2xvY2s6CiAgICAgICAgICAgICBzZWxmLl9odHRw
X2xvY2suY2xlYW51cF9odHRwX2xvY2soKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIu
cHkKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBjZmRjZTM2MDU5N2YzMjEz
NzQwZTk2OThhMmY3ZTM4MTNhZWVlZGY4Li43MjM4Nzk0ZGVmMDgzNTMxODI2NmYzYmU4NDJmZjZk
NWY4MzY1Yzg1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQpAQCAtMTUxLDYgKzE1MSw5
IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2Vs
Zi5fcHJvZmlsZXIgPSBOb25lCiAKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9iYXNl
X3VyaSA9ICJodHRwOi8vIiArIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigid3B0c2VydmVyX2hvc3Ru
YW1lIikgKyAiOiIgKyBzdHIoc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfaHR0cF9w
b3J0IikpICsgIi8iCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3RfZGlyID0gKHNlbGYu
X3BvcnQuZ2V0X29wdGlvbigid3B0c2VydmVyX2RvY19yb290IikgaWYgc2VsZi5fcG9ydC5nZXRf
b3B0aW9uKCJ3cHRzZXJ2ZXJfZG9jX3Jvb3QiKSBlbHNlICIuIikgKyAiLyIKKwogICAgIGRlZiBf
X2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLnN0b3AoKQogCkBAIC0yMjksOCArMjMyLDE0IEBA
IGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgIGRlZiBpc19odHRwX3Rlc3Qoc2VsZiwgdGVzdF9u
YW1lKToKICAgICAgICAgcmV0dXJuIHRlc3RfbmFtZS5zdGFydHN3aXRoKHNlbGYuSFRUUF9ESVIp
IGFuZCBub3QgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoc2VsZi5IVFRQX0xPQ0FMX0RJUikKIAorICAg
IGRlZiBpc193ZWJfcGxhdGZvcm1fdGVzdChzZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICByZXR1
cm4gdGVzdF9uYW1lLnN0YXJ0c3dpdGgoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9kaXIpCisKICAg
ICBkZWYgdGVzdF90b191cmkoc2VsZiwgdGVzdF9uYW1lKToKICAgICAgICAgIiIiQ29udmVydCBh
IHRlc3QgbmFtZSB0byBhIFVSSS4iIiIKKyAgICAgICAgaWYgc2VsZi5pc193ZWJfcGxhdGZvcm1f
dGVzdCh0ZXN0X25hbWUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYud2ViX3BsYXRmb3JtX3Rl
c3RfYmFzZV91cmkgKyB0ZXN0X25hbWVbbGVuKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3RfZGlyKTpd
CisKICAgICAgICAgaWYgbm90IHNlbGYuaXNfaHR0cF90ZXN0KHRlc3RfbmFtZSk6CiAgICAgICAg
ICAgICByZXR1cm4gcGF0aC5hYnNwYXRoX3RvX3VyaShzZWxmLl9wb3J0Lmhvc3QucGxhdGZvcm0s
IHNlbGYuX3BvcnQuYWJzcGF0aF9mb3JfdGVzdCh0ZXN0X25hbWUpKQogCkBAIC0yNTQsNyArMjYz
LDkgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgICAgICBpZiBub3QgcHJlZml4LmVu
ZHN3aXRoKCcvJyk6CiAgICAgICAgICAgICAgICAgcHJlZml4ICs9ICcvJwogICAgICAgICAgICAg
cmV0dXJuIHVyaVtsZW4ocHJlZml4KTpdCi0gICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJodHRw
Oi8vIik6CisgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rf
YmFzZV91cmkpOgorICAgICAgICAgICAgcmV0dXJuIHVyaS5yZXBsYWNlKHNlbGYud2ViX3BsYXRm
b3JtX3Rlc3RfYmFzZV91cmksIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3RfZGlyKQorICAgICAgICBp
ZiB1cmkuc3RhcnRzd2l0aCgiaHR0cDovLzEyNy4wLjAuMTo4MDAwIik6CiAgICAgICAgICAgICBy
ZXR1cm4gdXJpLnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC8nLCBzZWxmLkhUVFBfRElS
KQogICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cHM6Ly8iKToKICAgICAgICAgICAgIHJl
dHVybiB1cmkucmVwbGFjZSgnaHR0cHM6Ly8xMjcuMC4wLjE6ODQ0My8nLCBzZWxmLkhUVFBfRElS
KQpAQCAtMzgyLDcgKzM5Myw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICAjIEZJ
WE1FOiBwZXJmb3JtYW5jZSB0ZXN0cyBwYXNzIGluIGZ1bGwgVVJMcyBpbnN0ZWFkIG9mIHRlc3Qg
bmFtZXMuCiAgICAgICAgIGlmIGRyaXZlcl9pbnB1dC50ZXN0X25hbWUuc3RhcnRzd2l0aCgnaHR0
cDovLycpIG9yIGRyaXZlcl9pbnB1dC50ZXN0X25hbWUuc3RhcnRzd2l0aCgnaHR0cHM6Ly8nKSAg
b3IgZHJpdmVyX2lucHV0LnRlc3RfbmFtZSA9PSAoJ2Fib3V0OmJsYW5rJyk6CiAgICAgICAgICAg
ICBjb21tYW5kID0gZHJpdmVyX2lucHV0LnRlc3RfbmFtZQotICAgICAgICBlbGlmIHNlbGYuaXNf
aHR0cF90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpOgorICAgICAgICBlbGlmIHNlbGYuaXNf
aHR0cF90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpIG9yICBzZWxmLmlzX3dlYl9wbGF0Zm9y
bV90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpOgogICAgICAgICAgICAgY29tbWFuZCA9IHNl
bGYudGVzdF90b191cmkoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkKICAgICAgICAgZWxzZToKICAg
ICAgICAgICAgIGNvbW1hbmQgPSBzZWxmLl9wb3J0LmFic3BhdGhfZm9yX3Rlc3QoZHJpdmVyX2lu
cHV0LnRlc3RfbmFtZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9k
cml2ZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3Vu
aXR0ZXN0LnB5CmluZGV4IGIyZmMzZmU0NmViMDg1MTUwNmYzNTk0ZDI3ZWY0OTk4MjAxYTE5NjMu
Ljc5MTI4ZjE1YzkzZjczYjZlY2E4ZWJhODMxZGYwZmY0ZmRmYTQzMWEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQpAQCAtODYsNiArODYsNyBA
QCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcG9ydC5fY29u
ZmlnLmJ1aWxkX2RpcmVjdG9yeSA9IGxhbWJkYSBjb25maWd1cmF0aW9uOiAnL21vY2stYnVpbGQn
CiAgICAgICAgIHJldHVybiBwb3J0CiAKKwogICAgIGRlZiBfYXNzZXJ0X3dyYXBwZXIoc2VsZiwg
d3JhcHBlcl9zdHJpbmcsIGV4cGVjdGVkX3dyYXBwZXIpOgogICAgICAgICB3cmFwcGVyID0gRHJp
dmVyKHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlvbnMod3JhcHBlcj13cmFwcGVyX3N0
cmluZykpLCBOb25lLCBwaXhlbF90ZXN0cz1GYWxzZSkuX2NvbW1hbmRfd3JhcHBlcigpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlciwgZXhwZWN0ZWRfd3JhcHBlcikKQEAgLTEwNCwx
OCArMTA1LDIwIEBAIGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci5fY29tbWFuZF93cmFwcGVyKCksIFsncGVyZicsICdy
ZWNvcmQnLCAnLWcnLCAnLS1vdXRwdXQnLCAnL21vY2stYnVpbGQvbGF5b3V0LXRlc3QtcmVzdWx0
cy90ZXN0LmRhdGEnXSkKIAogICAgIGRlZiB0ZXN0X3Rlc3RfdG9fdXJpKHNlbGYpOgotICAgICAg
ICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
b3B0aW9ucz1Nb2NrT3B0aW9ucyh3cHRzZXJ2ZXJfcG9ydD04ODAwLCB3cHRzZXJ2ZXJfZG9jX3Jv
b3Q9ImltcG9ydGVkL3czYyIpKQogICAgICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgTm9uZSwg
cGl4ZWxfdGVzdHM9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnRlc3Rf
dG9fdXJpKCdmb28vYmFyLmh0bWwnKSwgJ2ZpbGU6Ly8lcy9mb28vYmFyLmh0bWwnICUgcG9ydC5s
YXlvdXRfdGVzdHNfZGlyKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnRlc3Rf
dG9fdXJpKCdodHRwL3Rlc3RzL2Zvby5odG1sJyksICdodHRwOi8vMTI3LjAuMC4xOjgwMDAvZm9v
Lmh0bWwnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci50ZXN0X3RvX3VyaSgnaHR0
cC90ZXN0cy9zc2wvYmFyLmh0bWwnKSwgJ2h0dHBzOi8vMTI3LjAuMC4xOjg0NDMvc3NsL2Jhci5o
dG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudGVzdF90b191cmkoJ2ltcG9y
dGVkL3czYy9mb28vYmFyLmh0bWwnKSwgJ2h0dHA6Ly9sb2NhbGhvc3Q6ODg4MC9mb28vYmFyLmh0
bWwnKQogCiAgICAgZGVmIHRlc3RfdXJpX3RvX3Rlc3Qoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBz
ZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1v
Y2tPcHRpb25zKHdwdHNlcnZlcl9wb3J0PTg4ODAsIHdwdHNlcnZlcl9kb2Nfcm9vdD0iaW1wb3J0
ZWQvdzNjIikpCiAgICAgICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCBOb25lLCBwaXhlbF90ZXN0
cz1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudXJpX3RvX3Rlc3QoJ2Zp
bGU6Ly8lcy9mb28vYmFyLmh0bWwnICUgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpLCAnZm9vL2Jh
ci5odG1sJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudXJpX3RvX3Rlc3QoJ2h0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28uaHRtbCcpLCAnaHR0cC90ZXN0cy9mb28uaHRtbCcpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnVyaV90b190ZXN0KCdodHRwczovLzEyNy4w
LjAuMTo4NDQzL3NzbC9iYXIuaHRtbCcpLCAnaHR0cC90ZXN0cy9zc2wvYmFyLmh0bWwnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci51cmlfdG9fdGVzdCgnaHR0cDovL2xvY2FsaG9z
dDo4ODgwL2Zvby9iYXIuaHRtbCcpLCAnaW1wb3J0ZWQvdzNjL2Zvby9iYXIuaHRtbCcpCiAKICAg
ICBkZWYgdGVzdF9yZWFkX2Jsb2NrKHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBv
cnQoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238156</attachid>
            <date>2014-09-16 00:13:36 -0700</date>
            <delta_ts>2014-09-26 06:34:35 -0700</delta_ts>
            <desc>some clean up</desc>
            <filename>bug-127094-20140916091332.patch</filename>
            <type>text/plain</type>
            <size>38398</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNDI0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmI5MGRiMzg0NGM1MmEwNDg5ZDQxOTJiMmZkNGRjNTNk
OWYyMWRkNy4uOTMyMDRlMThjNGI2NTE2NWMyODMxM2I3NDlhMjEwOWYzNGY1NzAxNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcz
IEBACisyMDE0LTA5LTE1ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgSW50ZWdyYXRlIFdQIHB5dGhvbiBzZXJ2ZXIgaW50byBXZWJLaXQgdGVz
dCBmcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNzA5NAorCisgICAgICAgIEFkZGluZyBhIG5ldyBIVFRQIHRlc3Qgc2VydmVyIHVzaW5n
IFczQyBXUFQgcHl0aG9uIHdlYiBzZXJ2ZXIuCisgICAgICAgIFdlYlBsYXRmb3JtVGVzdFNlcnZl
ciBpcyBjb250cm9sbGluZyB0aGUgcHl0aG9uIHdlYiBzZXJ2ZXIuCisgICAgICAgIFRoZSB3M2Mg
cHl0aG9uIHdlYiBzZXJ2ZXIgaXMgZXhwZWN0ZWQgdG8gYmUgaW1wb3J0ZWQgYXMgcGFydCBvZiB0
aGUgbGFyZ2VyIGltcG9ydCBvZiB0aGUgVzNDIHRlc3Qgc3VpdGUuCisgICAgICAgIFRoZSBXZWJQ
bGF0Zm9ybVRlc3RTZXJ2ZXIgaXMgc3RhcnRlZCB3aGVuZXZlciB0ZXN0cyB0byBydW4gaW5jbHVk
ZSBhIHRlc3Qgd2l0aGluIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93cHQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weToKKyAgICAgICAgKE1vY2tQcm9jZXNzLmNv
bW11bmljYXRlKTogQWRkZWQgbWlzc2luZyBmdW5jdGlvbiB0byBwYXNzIHVuaXQgdGVzdC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRf
dGVzdF9ydW5uZXIucHk6IFN0YXJ0aW5nL3N0b3BwaW5nIFdlYlBsYXRmb3JtVGVzdFNlcnZlciBh
Y2NvcmRpbmcgdGVzdCBuZWVkcy4KKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuX19pbml0X18p
OgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5ydW5fdGVzdHMpOgorICAgICAgICAoTGF5b3V0
VGVzdFJ1bm5lci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayk6CisgICAgICAgIChMYXlvdXRUZXN0
UnVubmVyLnN0b3Bfc2VydmVyc193aXRoX2xvY2spOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5w
eTogQWRkaW5nIHRlc3QgY292ZXJhZ2UuCisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMu
X3J1bl90ZXN0cyk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJz
X3N0YXJ0ZWQuc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKToKKyAgICAgICAgKExheW91
dFRlc3RSdW5uZXJUZXN0cy50ZXN0X3NlcnZlcnNfc3RhcnRlZC5zdG9wX3dlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlcik6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMpOgorICAgICAgICAo
TGF5b3V0VGVzdFJ1bm5lclRlc3RzLnRlc3Rfc2VydmVyc19zdGFydGVkKToKKyAgICAgICAgKFNo
YXJkZXJUZXN0cy50ZXN0X3NoYXJkX2V2ZXJ5X2ZpbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHk6IEFkZGluZyBkZXRlY3Rp
b24gb2YgV2ViUGxhdGZvcm1TZXJ2ZXIgbmVlZCBhY2NvcmRpbmcgdGVzdHMgdG8gcnVuLgorICAg
ICAgICAoTWFuYWdlci5fX2luaXRfXyk6CisgICAgICAgIChNYW5hZ2VyLl9pc19odHRwX3Rlc3Qp
OgorICAgICAgICAoTWFuYWdlci5faXNfd2ViX3BsYXRmb3JtX3Rlc3QpOgorICAgICAgICAoTWFu
YWdlci5fdGVzdF9yZXF1aXJlc19sb2NrKToKKyAgICAgICAgKE1hbmFnZXIuX3J1bl90ZXN0cyk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFu
YWdlcl91bml0dGVzdC5weTogQWRkaW5nIHRlc3QgY292ZXJhZ2UuCisgICAgICAgIChNYW5hZ2Vy
VGVzdC50ZXN0X25lZWRzX3NlcnZlcnMuZ2V0X21hbmFnZXIpOgorICAgICAgICAoTWFuYWdlclRl
c3QudGVzdF9uZWVkc19zZXJ2ZXJzKToKKyAgICAgICAgKE1hbmFnZXJUZXN0LmludGVncmF0aW9u
X3Rlc3RfbmVlZHNfc2VydmVycy5nZXRfbWFuYWdlcik6CisgICAgICAgIChNYW5hZ2VyVGVzdC50
ZXN0X2xvb2tfZm9yX25ld19jcmFzaF9sb2dzLmdldF9tYW5hZ2VyKToKKyAgICAgICAgKE1hbmFn
ZXJUZXN0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Vi
a2l0X3Rlc3RzLnB5OgorICAgICAgICAocGFyc2VfYXJncyk6IEFkZGluZyB0d28gV1BUIHNwZWNp
ZmljIHBhcmFtZXRlcnMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
c2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9sYXVuY2hlci5weTogQWRkZWQuCisgICAgICAgICht
YWluKTogTWFpbiBzY3JpcHQgdXNlZCB0byBsYXVuY2ggdGhlIFczQyBweXRob24gdGVzdCBzZXJ2
ZXIgYXMgYSBzZXBhcmF0ZSBwcm9jZXNzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLnB5OiBBZGRlZC4KKyAg
ICAgICAgKFdlYlBsYXRmb3JtVGVzdFNlcnZlcik6IFJlc3BvbnNpYmxlIHRvIHN0YXJ0IGFuZCBz
dG9wIHRoZSBXM0MgcHl0aG9uIHRlc3Qgc2VydmVyIGFzIGEgc2VwYXJhdGUgcHJvY2VzcworICAg
ICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9faW5pdF9fKToKKyAgICAgICAgKFdlYlBsYXRm
b3JtVGVzdFNlcnZlci5fc2V0X3N0YXJ0X2NtZCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RT
ZXJ2ZXIuX3ByZXBhcmVfY29uZmlnKToKKyAgICAgICAgKFdlYlBsYXRmb3JtVGVzdFNlcnZlci5f
c3Bhd25fcHJvY2Vzcyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3N0b3BfcnVu
bmluZ19zZXJ2ZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Nl
cnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAg
ICAgKFRlc3RXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIpOgorICAgICAgICAoVGVzdFdlYlBsYXRmb3Jt
VGVzdFNlcnZlci50ZXN0X3N0YXJ0X2NtZCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Jhc2UucHk6IEFkZGluZyBzdXBwb3J0IGZvciBzdGFydGluZyBhbmQgc3RvcHBpbmcgV2Vi
UGxhdGZvcm1UZXN0U2VydmVyLgorICAgICAgICAoUG9ydC5fX2luaXRfXyk6CisgICAgICAgIChQ
b3J0LnRvLnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIpOgorICAgICAgICAoUG9ydC50byk6CisgICAg
ICAgIChQb3J0LnRvLnN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcik6CisgICAgICAgIChQ
b3J0LnRvLnN0b3Bfd2Vic29ja2V0X3NlcnZlcik6CisgICAgICAgIChQb3J0LnRvLnN0b3Bfd2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZHJpdmVyLnB5OiBBZGRpbmcgc3VwcG9ydCB0byBkZXRlY3Qgd2hldGhlciBhIGdpdmVuIHRlc3Qg
cmVxdWlyZXMgVzNDIHB5dGhvbiB0ZXN0IHNlcnZlciBhbmQgVVJMPC0+dGVzdCBtYXBwaW5nLgor
ICAgICAgICAoRHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAgKERyaXZlci5pc193ZWJfcGxhdGZv
cm1fdGVzdCk6CisgICAgICAgIChEcml2ZXIudGVzdF90b191cmkpOgorICAgICAgICAoRHJpdmVy
LnVyaV90b190ZXN0KToKKyAgICAgICAgKERyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1
dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weTog
QWRkaW5nIHRlc3QgY292ZXJhZ2UuCisgICAgICAgIChEcml2ZXJUZXN0Lm1ha2VfcG9ydCk6Cisg
ICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdGVzdF90b191cmkpOgorICAgICAgICAoRHJpdmVyVGVz
dC50ZXN0X3VyaV90b190ZXN0KToKKwogMjAxNC0wNy0yMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVu
bmZAZ21haWwuY29tPgogCiAgICAgICAgIFczQyBpbXBvcnRlciBzaG91bGQgaW1wb3J0IGh0bWwg
ZmlsZXMgd2l0aGluIHJlc291cmNlcyBmb2xkZXJzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX21vY2sucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX21vY2sucHkKaW5kZXggYTM4NzBiMTMx
Y2RjYzRmMGU2ZjlhMTJiNmU2NWY3ZTE2MjMxMGEzYy4uYzExYzM4MGM1OGFjOGQ4YjExNmY4ZGM5
MmNkMTA0M2M0NzQ5MWQ4YSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weQpAQCAtNDYsNiArNDYsOSBAQCBjbGFzcyBN
b2NrUHJvY2VzcyhvYmplY3QpOgogICAgIGRlZiB3YWl0KHNlbGYpOgogICAgICAgICByZXR1cm4K
IAorICAgIGRlZiBjb21tdW5pY2F0ZShzZWxmLCBpbnB1dD1Ob25lKToKKyAgICAgICAgcmV0dXJu
IChzZWxmLnN0ZG91dCwgc2VsZi5zdGRlcnIpCisKICMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIHVu
aWZpZWQgd2l0aCBNb2NrRXhlY3V0aXZlMgogY2xhc3MgTW9ja0V4ZWN1dGl2ZShvYmplY3QpOgog
ICAgIFBJUEUgPSAiTU9DSyBQSVBFIgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVu
bmVyLnB5CmluZGV4IDUyYWE4ZTBkMGMyZjZjNDQ1YjQ4MzQ4ZmUzOGYzNDUxYTk5ZTk1Y2MuLmNm
NDYzOWUzOGFmMTFlMGQwZmRmNDQxZDZkY2U2MjgwZjUyNDAwYTIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1
bm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKQEAgLTc0LDE2ICs3NCwxOCBAQCBjbGFzcyBMYXlv
dXRUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3Rlc3RfaW5wdXRzID0gW10KICAg
ICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IE5vbmUKICAgICAgICAgc2VsZi5fbmVlZHNfd2Vic29j
a2V0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
ID0gTm9uZQogICAgICAgICBzZWxmLl9yZXRyeWluZyA9IEZhbHNlCiAKICAgICAgICAgc2VsZi5f
Y3VycmVudF9ydW5fcmVzdWx0cyA9IE5vbmUKICAgICAgICAgc2VsZi5fcmVtYWluaW5nX2xvY2tl
ZF9zaGFyZHMgPSBbXQogICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gRmFsc2UKIAotICAg
IGRlZiBydW5fdGVzdHMoc2VsZiwgZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9f
c2tpcCwgbnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIHJldHJ5aW5n
KToKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGV4cGVjdGF0aW9ucywgdGVzdF9pbnB1dHMsIHRl
c3RzX3RvX3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19odHRwLCBuZWVkc193ZWJzb2NrZXRzLCBu
ZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIsIHJldHJ5aW5nKToKICAgICAgICAgc2VsZi5f
ZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zCiAgICAgICAgIHNlbGYuX3Rlc3RfaW5wdXRzID0g
dGVzdF9pbnB1dHMKICAgICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IG5lZWRzX2h0dHAKKyAgICAg
ICAgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gbmVlZHNfd2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyCiAgICAgICAgIHNlbGYuX25lZWRzX3dlYnNvY2tldHMgPSBuZWVkc193
ZWJzb2NrZXRzCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gcmV0cnlpbmcKIApAQCAtMjA2LDYg
KzIwOCw5IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgaWYgc2Vs
Zi5fbmVlZHNfd2Vic29ja2V0czoKICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBk
YXRlKCdTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCiAgICAgICAgICAgICBzZWxmLl9w
b3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXI6CisgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3Vw
ZGF0ZSgnU3RhcnRpbmcgV2ViIFBsYXRmb3JtIFRlc3Qgc2VydmVyIC4uLicpCisgICAgICAgICAg
ICBzZWxmLl9wb3J0LnN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcigpCiAgICAgICAgIHNl
bGYuX2hhc19odHRwX2xvY2sgPSBUcnVlCiAKICAgICBkZWYgc3RvcF9zZXJ2ZXJzX3dpdGhfbG9j
ayhzZWxmKToKQEAgLTIxNiw2ICsyMjEsOSBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyKG9iamVj
dCk6CiAgICAgICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJzb2NrZXRzOgogICAgICAgICAgICAg
ICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdG9wcGluZyBXZWJTb2NrZXQgc2VydmVy
IC4uLicpCiAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIo
KQorICAgICAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyOgor
ICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdG9wcGluZyBXZWIg
UGxhdGZvcm0gVGVzdCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0
b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKCkKICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIu
d3JpdGVfdXBkYXRlKCdSZWxlYXNpbmcgc2VydmVyIGxvY2sgLi4uJykKICAgICAgICAgICAgIHNl
bGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQogICAgICAgICAgICAgc2VsZi5faGFzX2h0dHBf
bG9jayA9IEZhbHNlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5u
ZXJfdW5pdHRlc3QucHkKaW5kZXggODA5NzdlNTc2ZTk2ZjVmMDA2N2ZlMTAxY2RlOThlOGJmODc3
NzlhMi4uMTNhNzI2NmQzMTQwODQyNjY4NjQ0YzlhZmMyNWMzM2Q0Nzg1ZmUxZCAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0
X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weQpAQCAt
MTA2LDcgKzEwNiw3IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXJUZXN0cyh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIGV4cGVjdGF0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnMocnVubmVyLl9w
b3J0LCB0ZXN0cykKICAgICAgICAgZXhwZWN0YXRpb25zLnBhcnNlX2FsbF9leHBlY3RhdGlvbnMo
KQogICAgICAgICBydW5uZXIucnVuX3Rlc3RzKGV4cGVjdGF0aW9ucywgdGVzdF9pbnB1dHMsIHNl
dCgpLAotICAgICAgICAgICAgbnVtX3dvcmtlcnM9MSwgbmVlZHNfaHR0cD1hbnkoJ2h0dHAnIGlu
IHRlc3QgZm9yIHRlc3QgaW4gdGVzdHMpLCBuZWVkc193ZWJzb2NrZXRzPWFueShbJ3dlYnNvY2tl
dCcgaW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0c10pLCByZXRyeWluZz1GYWxzZSkKKyAgICAgICAg
ICAgIG51bV93b3JrZXJzPTEsIG5lZWRzX2h0dHA9YW55KCdodHRwJyBpbiB0ZXN0IGZvciB0ZXN0
IGluIHRlc3RzKSwgbmVlZHNfd2Vic29ja2V0cz1hbnkoWyd3ZWJzb2NrZXQnIGluIHRlc3QgZm9y
IHRlc3QgaW4gdGVzdHNdKSwgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyPWFueShbJ2lt
cG9ydGVkL3czYycgaW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0c10pLCByZXRyeWluZz1GYWxzZSkK
IAogICAgIGRlZiB0ZXN0X2h0dHBfbG9ja2luZyhzZWxmKToKICAgICAgICAgcnVubmVyID0gc2Vs
Zi5fcnVubmVyKCkKQEAgLTE3Niw0OSArMTc2LDgzIEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXJU
ZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGRlZiBzdGFydF93ZWJzb2NrZXRfc2Vy
dmVyKCk6CiAgICAgICAgICAgICBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gVHJ1ZQogCisgICAg
ICAgIGRlZiBzdGFydF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoKToKKyAgICAgICAgICAgIHNl
bGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBUcnVlCisKICAgICAgICAgZGVm
IHN0b3BfaHR0cF9zZXJ2ZXIoKToKICAgICAgICAgICAgIHNlbGYuaHR0cF9zdG9wcGVkID0gVHJ1
ZQogCiAgICAgICAgIGRlZiBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKToKICAgICAgICAgICAgIHNl
bGYud2Vic29ja2V0X3N0b3BwZWQgPSBUcnVlCiAKKyAgICAgICAgZGVmIHN0b3Bfd2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyKCk6CisgICAgICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3Nl
cnZlcl9zdG9wcGVkID0gVHJ1ZQorCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAg
IHBvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3QtbWFjLWxlb3BhcmQnKQogICAgICAg
ICBwb3J0LnN0YXJ0X2h0dHBfc2VydmVyID0gc3RhcnRfaHR0cF9zZXJ2ZXIKICAgICAgICAgcG9y
dC5zdGFydF93ZWJzb2NrZXRfc2VydmVyID0gc3RhcnRfd2Vic29ja2V0X3NlcnZlcgorICAgICAg
ICBwb3J0LnN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IHN0YXJ0X3dlYl9wbGF0Zm9y
bV90ZXN0X3NlcnZlcgogICAgICAgICBwb3J0LnN0b3BfaHR0cF9zZXJ2ZXIgPSBzdG9wX2h0dHBf
c2VydmVyCiAgICAgICAgIHBvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyID0gc3RvcF93ZWJzb2Nr
ZXRfc2VydmVyCisgICAgICAgIHBvcnQuc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBz
dG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcgogCiAgICAgICAgIHNlbGYuaHR0cF9zdGFydGVk
ID0gc2VsZi5odHRwX3N0b3BwZWQgPSBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2VsZi53ZWJz
b2NrZXRfc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyX3N0YXJ0ZWQgPSBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkID0gRmFs
c2UKICAgICAgICAgcnVubmVyID0gc2VsZi5fcnVubmVyKHBvcnQ9cG9ydCkKICAgICAgICAgcnVu
bmVyLl9uZWVkc19odHRwID0gVHJ1ZQogICAgICAgICBydW5uZXIuX25lZWRzX3dlYnNvY2tldHMg
PSBGYWxzZQorICAgICAgICBydW5uZXIuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9
IEZhbHNlCiAgICAgICAgIHJ1bm5lci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhudW1iZXJfb2Zf
c2VydmVycz00KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdGFydGVkLCBU
cnVlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIEZh
bHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyX3N0YXJ0ZWQsIEZhbHNlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9j
aygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIFRydWUpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCwgRmFsc2UpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3Rv
cHBlZCwgRmFsc2UpCiAKICAgICAgICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBzZWxmLmh0dHBfc3Rv
cHBlZCA9IHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tldF9zdG9wcGVkID0g
RmFsc2UKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCA9IHNl
bGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQgPSBGYWxzZQogICAgICAgICBydW5u
ZXIuX25lZWRzX2h0dHAgPSBUcnVlCiAgICAgICAgIHJ1bm5lci5fbmVlZHNfd2Vic29ja2V0cyA9
IFRydWUKKyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBG
YWxzZQogICAgICAgICBydW5uZXIuc3RhcnRfc2VydmVyc193aXRoX2xvY2sobnVtYmVyX29mX3Nl
cnZlcnM9NCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RhcnRlZCwgVHJ1
ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdGFydGVkLCBUcnVl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
X3N0YXJ0ZWQsIEZhbHNlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIFRydWUpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCwgVHJ1ZSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVk
LCBGYWxzZSkKKworICAgICAgICBzZWxmLmh0dHBfc3RhcnRlZCA9IHNlbGYuaHR0cF9zdG9wcGVk
ID0gc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCA9IHNlbGYud2Vic29ja2V0X3N0b3BwZWQgPSBGYWxz
ZQorICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVkID0gc2VsZi53
ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5f
bmVlZHNfaHR0cCA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2Vic29ja2V0cyA9IEZh
bHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gRmFs
c2UKKyAgICAgICAgcnVubmVyLnN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKG51bWJlcl9vZl9zZXJ2
ZXJzPTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0YXJ0ZWQsIEZhbHNl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIEZhbHNl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
X3N0YXJ0ZWQsIEZhbHNlKQorICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIEZhbHNlKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0b3BwZWQsIEZhbHNlKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3Bw
ZWQsIEZhbHNlKQogCiAgICAgICAgIHNlbGYuaHR0cF9zdGFydGVkID0gc2VsZi5odHRwX3N0b3Bw
ZWQgPSBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZh
bHNlCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBzZWxm
LndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkID0gRmFsc2UKICAgICAgICAgcnVubmVy
Ll9uZWVkc19odHRwID0gRmFsc2UKICAgICAgICAgcnVubmVyLl9uZWVkc193ZWJzb2NrZXRzID0g
RmFsc2UKKyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBU
cnVlCiAgICAgICAgIHJ1bm5lci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhudW1iZXJfb2Zfc2Vy
dmVycz00KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdGFydGVkLCBGYWxz
ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdGFydGVkLCBGYWxz
ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
cl9zdGFydGVkLCBUcnVlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIEZhbHNlKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0b3BwZWQsIEZhbHNlKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3Bw
ZWQsIFRydWUpCiAKIAogY2xhc3MgU2hhcmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAg
LTI4MCw3ICszMTQsNyBAQCBjbGFzcyBTaGFyZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICAgICAgICAgICgnLicsIFsnaHR0cC90ZXN0cy9zZWN1cml0eS92aWV3LXNvdXJjZS1uby1y
ZWZyZXNoLmh0bWwnXSksCiAgICAgICAgICAgICAgKCcuJywgWydodHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy93ZWJzb2NrZXQtcHJvdG9jb2wtaWdub3JlZC5odG1sJ10pLAogICAgICAgICAgICAg
ICgnLicsIFsnaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBwb3J0ZWQteG1sLWNvbnRlbnQt
dHlwZXMuaHRtbCddKSwKLSAgICAgICAgICAgICAoJy4nLCBbJ3BlcmYvb2JqZWN0LWtleXMuaHRt
bCddKV0pLAorICAgICAgICAgICAgICgnLicsIFsncGVyZi9vYmplY3Qta2V5cy5odG1sJ10pXSkK
ICAgICAgICAgc2VsZi5hc3NlcnRfc2hhcmRzKHVubG9ja2VkLAogICAgICAgICAgICAgWygnLics
IFsnYW5pbWF0aW9ucy9rZXlmcmFtZXMuaHRtbCddKSwKICAgICAgICAgICAgICAoJy4nLCBbJ2Zh
c3QvY3NzL2Rpc3BsYXktbm9uZS1pbmxpbmUtc3R5bGUtY2hhbmdlLWNyYXNoLmh0bWwnXSksCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVy
cy9tYW5hZ2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJv
bGxlcnMvbWFuYWdlci5weQppbmRleCA1ZDY4NjEyZTA5YzRlZTRiZmVmNTMyMDY2NGIzMjhlMzEy
ZmUxMTU2Li5iZDdjMjU5OWNmNmI2MTEzZjNjMWZmYjdiM2I5NDQ2NDQ5YzJkOGM3IDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5h
Z2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL21hbmFnZXIucHkKQEAgLTgwLDYgKzgwLDcgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgog
ICAgICAgICBzZWxmLkhUVFBfU1VCRElSID0gJ2h0dHAnICsgcG9ydC5URVNUX1BBVEhfU0VQQVJB
VE9SCiAgICAgICAgIHNlbGYuUEVSRl9TVUJESVIgPSAncGVyZicKICAgICAgICAgc2VsZi5XRUJT
T0NLRVRfU1VCRElSID0gJ3dlYnNvY2tldCcgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IKKyAg
ICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zdWJkaXIgPSBvcHRpb25zLndwdHNlcnZlcl9k
b2Nfcm9vdCArIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgogICAgICAgICBzZWxmLkxBWU9VVF9U
RVNUU19ESVJFQ1RPUlkgPSAnTGF5b3V0VGVzdHMnCiAKICAgICAgICAgIyBkaXNhYmxlIHdzcyBz
ZXJ2ZXIuIG5lZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wgb24gYnVpbGRib3RzLgpAQCAtOTQsMTEg
Kzk1LDE0IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX2Zp
bmRlci5maW5kX3Rlc3RzKHNlbGYuX29wdGlvbnMsIGFyZ3MpCiAKICAgICBkZWYgX2lzX2h0dHBf
dGVzdChzZWxmLCB0ZXN0KToKLSAgICAgICAgcmV0dXJuIHNlbGYuSFRUUF9TVUJESVIgaW4gdGVz
dCBvciBzZWxmLl9pc193ZWJzb2NrZXRfdGVzdCh0ZXN0KQorICAgICAgICByZXR1cm4gKHNlbGYu
SFRUUF9TVUJESVIgaW4gdGVzdCBvciBzZWxmLl9pc193ZWJzb2NrZXRfdGVzdCh0ZXN0KSkgYW5k
IG5vdCBzZWxmLl9pc193ZWJfcGxhdGZvcm1fdGVzdCh0ZXN0KQogCiAgICAgZGVmIF9pc193ZWJz
b2NrZXRfdGVzdChzZWxmLCB0ZXN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuV0VCU09DS0VUX1NV
QkRJUiBpbiB0ZXN0CiAKKyAgICBkZWYgX2lzX3dlYl9wbGF0Zm9ybV90ZXN0KHNlbGYsIHRlc3Qp
OgorICAgICAgICByZXR1cm4gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zdWJkaXIgaW4gdGVzdAor
CiAgICAgZGVmIF9odHRwX3Rlc3RzKHNlbGYsIHRlc3RfbmFtZXMpOgogICAgICAgICByZXR1cm4g
c2V0KHRlc3QgZm9yIHRlc3QgaW4gdGVzdF9uYW1lcyBpZiBzZWxmLl9pc19odHRwX3Rlc3QodGVz
dCkpCiAKQEAgLTEzMiw3ICsxMzYsNyBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAg
IHJ1bm5pbmcgbXVsdGlwbGUgY29waWVzIG9mIE5SV1RzLiBQZXJmIHRlc3RzIGFyZSBsb2NrZWQK
ICAgICAgICAgYmVjYXVzZSBoZWF2eSBsb2FkIGNhdXNlZCBieSBydW5uaW5nIG90aGVyIHRlc3Rz
IGluIHBhcmFsbGVsCiAgICAgICAgIG1pZ2h0IGNhdXNlIHNvbWUgb2YgdGhlbSB0byB0aW1lb3V0
LiIiIgotICAgICAgICByZXR1cm4gc2VsZi5faXNfaHR0cF90ZXN0KHRlc3RfZmlsZSkgb3Igc2Vs
Zi5faXNfcGVyZl90ZXN0KHRlc3RfZmlsZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lzX2h0dHBf
dGVzdCh0ZXN0X2ZpbGUpIG9yIHNlbGYuX2lzX3BlcmZfdGVzdCh0ZXN0X2ZpbGUpIG9yIHNlbGYu
X2lzX3dlYl9wbGF0Zm9ybV90ZXN0KHRlc3RfZmlsZSkKIAogICAgIGRlZiBfdGVzdF9pc19zbG93
KHNlbGYsIHRlc3RfZmlsZSk6CiAgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RhdGlvbnMubW9k
ZWwoKS5oYXNfbW9kaWZpZXIodGVzdF9maWxlLCB0ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKQpAQCAt
MjQ3LDYgKzI1MSw3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKIAogICAgIGRlZiBfcnVuX3Rl
c3RzKHNlbGYsIHRlc3RzX3RvX3J1biwgdGVzdHNfdG9fc2tpcCwgcmVwZWF0X2VhY2gsIGl0ZXJh
dGlvbnMsIG51bV93b3JrZXJzLCByZXRyeWluZyk6CiAgICAgICAgIG5lZWRzX2h0dHAgPSBhbnko
c2VsZi5faXNfaHR0cF90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKKyAgICAg
ICAgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gYW55KHNlbGYuX2lzX3dlYl9wbGF0
Zm9ybV90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKICAgICAgICAgbmVlZHNf
d2Vic29ja2V0cyA9IGFueShzZWxmLl9pc193ZWJzb2NrZXRfdGVzdCh0ZXN0KSBmb3IgdGVzdCBp
biB0ZXN0c190b19ydW4pCiAKICAgICAgICAgdGVzdF9pbnB1dHMgPSBbXQpAQCAtMjU0LDcgKzI1
OSw3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRl
c3RzX3RvX3J1bjoKICAgICAgICAgICAgICAgICBmb3IgXyBpbiB4cmFuZ2UocmVwZWF0X2VhY2gp
OgogICAgICAgICAgICAgICAgICAgICB0ZXN0X2lucHV0cy5hcHBlbmQoc2VsZi5fdGVzdF9pbnB1
dF9mb3JfZmlsZSh0ZXN0KSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bm5lci5ydW5fdGVzdHMo
c2VsZi5fZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9fc2tpcCwgbnVtX3dvcmtl
cnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIHJldHJ5aW5nKQorICAgICAgICByZXR1
cm4gc2VsZi5fcnVubmVyLnJ1bl90ZXN0cyhzZWxmLl9leHBlY3RhdGlvbnMsIHRlc3RfaW5wdXRz
LCB0ZXN0c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVlZHNfd2Vic29ja2V0
cywgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLCByZXRyeWluZykKIAogICAgIGRlZiBf
Y2xlYW5fdXBfcnVuKHNlbGYpOgogICAgICAgICBfbG9nLmRlYnVnKCJGbHVzaGluZyBzdGRvdXQi
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJv
bGxlcnMvbWFuYWdlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkKaW5kZXggM2FlZmMzZDZjZDQ3
OTZjNzI5MzcwNDA4MTUwODJlMzczZTBjNzFkNS4uMWQyZDZlNmE4ZmY3NmFiYTE3YTcyMjBmY2Yz
OWYzY2NkNGRhZmY1NSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5CkBA
IC00Niw3ICs0Niw3IEBAIGNsYXNzIE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgZGVmIGdldF9tYW5hZ2VyKCk6CiAgICAgICAgICAgICBwb3J0ID0gTW9jaygpICAjIEZJ
WE1FOiBVc2UgYSB0aWdodGVyIG1vY2suCiAgICAgICAgICAgICBwb3J0LlRFU1RfUEFUSF9TRVBB
UkFUT1IgPSAnLycKLSAgICAgICAgICAgIG1hbmFnZXIgPSBNYW5hZ2VyKHBvcnQsIG9wdGlvbnM9
TW9ja09wdGlvbnMoaHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xKSwgcHJpbnRlcj1Nb2Nr
KCkpCisgICAgICAgICAgICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0LCBvcHRpb25zPU1vY2tPcHRp
b25zKGh0dHA9VHJ1ZSwgbWF4X2xvY2tlZF9zaGFyZHM9MSwgd3B0c2VydmVyX2RvY19yb290PSdp
bXBvcnRlZC93M2MnKSwgcHJpbnRlcj1Nb2NrKCkpCiAgICAgICAgICAgICByZXR1cm4gbWFuYWdl
cgogCiAgICAgICAgIG1hbmFnZXIgPSBnZXRfbWFuYWdlcigpCkBAIC01NSwxMSArNTUsMTcgQEAg
Y2xhc3MgTWFuYWdlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBtYW5hZ2VyID0g
Z2V0X21hbmFnZXIoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobWFuYWdlci5uZWVkc19zZXJ2
ZXJzKFsnaHR0cC90ZXN0cy9taXNjJ10pKQogCisgICAgICAgIG1hbmFnZXIgPSBnZXRfbWFuYWdl
cigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5hZ2VyLm5lZWRzX3NlcnZlcnMoWydpbXBv
cnRlZC93M2MvdGVzdCddKSkKKworICAgICAgICBtYW5hZ2VyID0gZ2V0X21hbmFnZXIoKQorICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKG1hbmFnZXIubmVlZHNfc2VydmVycyhbJ2ltcG9ydGVkL3Rl
c3QnXSkpCisKICAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9uZWVkc19zZXJ2ZXJzKHNlbGYpOgog
ICAgICAgICBkZWYgZ2V0X21hbmFnZXIoKToKICAgICAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgp
CiAgICAgICAgICAgICBwb3J0ID0gaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KCkKLSAgICAgICAgICAg
IG1hbmFnZXIgPSBNYW5hZ2VyKHBvcnQsIG9wdGlvbnM9TW9ja09wdGlvbnModGVzdF9saXN0PU5v
bmUsIGh0dHA9VHJ1ZSwgbWF4X2xvY2tlZF9zaGFyZHM9MSksIHByaW50ZXI9TW9jaygpKQorICAg
ICAgICAgICAgbWFuYWdlciA9IE1hbmFnZXIocG9ydCwgb3B0aW9ucz1Nb2NrT3B0aW9ucyh0ZXN0
X2xpc3Q9Tm9uZSwgaHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xLCB3cHRzZXJ2ZXJfZG9j
X3Jvb3Q9J2ltcG9ydGVkL3czYycpLCBwcmludGVyPU1vY2soKSkKICAgICAgICAgICAgIHJldHVy
biBtYW5hZ2VyCiAKICAgICAgICAgbWFuYWdlciA9IGdldF9tYW5hZ2VyKCkKQEAgLTc5LDcgKzg1
LDcgQEAgY2xhc3MgTWFuYWdlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBkZWYg
Z2V0X21hbmFnZXIoKToKICAgICAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgICAg
ICBwb3J0ID0gaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KCd0ZXN0LW1hYy1sZW9wYXJkJykKLSAgICAg
ICAgICAgIG1hbmFnZXIgPSBNYW5hZ2VyKHBvcnQsIG9wdGlvbnM9TW9ja09wdGlvbnModGVzdF9s
aXN0PU5vbmUsIGh0dHA9VHJ1ZSwgbWF4X2xvY2tlZF9zaGFyZHM9MSksIHByaW50ZXI9TW9jaygp
KQorICAgICAgICAgICAgbWFuYWdlciA9IE1hbmFnZXIocG9ydCwgb3B0aW9ucz1Nb2NrT3B0aW9u
cyh0ZXN0X2xpc3Q9Tm9uZSwgaHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xLCB3cHRzZXJ2
ZXJfZG9jX3Jvb3Q9J2ltcG9ydGVkL3czYycpLCBwcmludGVyPU1vY2soKSkKICAgICAgICAgICAg
IHJldHVybiBtYW5hZ2VyCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgIHBvcnQg
PSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3QtbWFjLWxlb3BhcmQnKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkK
b2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAxMjQ1NDgwZDQ0M2ZmMWFjNGU5
YTg4YjkyYmEwN2Q4MTAyNTUzMjFkLi5jM2Q0MTVkMmM2NWExOTNiMmFhNmZhNzM5ZmQwNjU4YTFj
ZThjNTc2Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJr
aXRfdGVzdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weQpAQCAtMjk1LDYgKzI5NSwxNSBAQCBkZWYgcGFyc2VfYXJncyhhcmdz
KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZmlndXJhdGlvbnMuIERvZXMgbm90
IHJ1biBhbnkgdGVzdHMuIikpLAogICAgIF0pKQogCisgICAgb3B0aW9uX2dyb3VwX2RlZmluaXRp
b25zLmFwcGVuZCgoIldlYiBQbGF0Zm9ybSBUZXN0IFNlcnZlciBPcHRpb25zIiwgWworICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS13cHRzZXJ2ZXItZG9jLXJvb3QiLCB0eXBlPSJzdHJp
bmciLCBkZWZhdWx0PW9zLnBhdGguam9pbigiaW1wb3J0ZWQiLCAidzNjIiwgIndwdCIpLAorICAg
ICAgICAgICAgaGVscD0oIlNldCB3ZWIgcGxhdGZvcm0gc2VydmVyIGRvY3VtZW50IHJvb3QsIHJl
bGF0aXZlIHRvIExheW91dFRlc3RzIGRpcmVjdG9yeSIpKSwKKyAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oIi0td3B0c2VydmVyLWh0dHAtcG9ydCIsIHR5cGU9ImludCIsIGRlZmF1bHQ9ODgw
MCwKKyAgICAgICAgICAgIGhlbHA9KCJTZXQgd2ViIHBsYXRmb3JtIG1haW4gSFRUUCBzZXJ2ZXIg
cG9ydC4iKSksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdwdHNlcnZlci1ob3N0
bmFtZSIsIHR5cGU9InN0cmluZyIsIGRlZmF1bHQ9ImxvY2FsaG9zdCIsCisgICAgICAgICAgICBo
ZWxwPSgiU2V0IHdlYiBwbGF0Zm9ybSBzZXJ2ZXIgaG9zdCBuYW1lLiIpKSwKKyAgICBdKSkKKwog
ICAgICMgRklYTUU6IE1vdmUgdGhlc2UgaW50byBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CiAg
ICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoIlJlc3VsdCBKU09OIE9wdGlvbnMi
LCBbCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLW1hc3Rlci1uYW1lIiwgaGVscD0i
VGhlIG5hbWUgb2YgdGhlIGJ1aWxkYm90IG1hc3Rlci4iKSwKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3RfbGF1
bmNoZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dl
Yl9wbGF0Zm9ybV90ZXN0X2xhdW5jaGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzY2E0OTIwY2EzOWIwYTY0
N2I1ZWYxOThkMjFkMDMwNWE4ZWRlNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X2xhdW5jaGVy
LnB5CkBAIC0wLDAgKzEsNTYgQEAKKyMgIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBt
ZXQ6CisjICAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorIyAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjICBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyAgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjICBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQg
c3lzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKKworbG9nZ2Vy
ID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCitsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5E
RUJVRykKKworIyBUaHNpIHNjcmlwdCBpcyB1c2VkIHRvIGxhdW5jaCB0aGUgd2ViIHBsYXRmb3Jt
IHRlc3Qgc2VydmVyIG1haW4gc2NyaXB0IChzZXJ2ZS5weSkgYW5kIHN0b3AgaXQgd2hlbiBhc2tl
ZCBieSBydW4td2Via2l0LXRlc3RzCisKK3N5cy5wYXRoLmluc2VydCgxLCAiLiIpCitpbXBvcnQg
c2VydmUgYXMgV2ViUGxhdGZvcm1UZXN0U2VydmVyCisKKworZGVmIG1haW4oYXJndiwgc3Rkb3V0
LCBzdGRlcnIpOgorICAgICMgVGhpcyBpcyBhIGNvcHkgb2Ygc2VydmUucHkgbWFpbiBmdW5jdGlv
biwgZXhjZXB0IGZvciB0aGUgd2FpdCBzdGVwPworICAgIGNvbmZpZyA9IFdlYlBsYXRmb3JtVGVz
dFNlcnZlci5sb2FkX2NvbmZpZygiY29uZmlnLmRlZmF1bHQuanNvbiIsICJjb25maWcuanNvbiIp
CisgICAgV2ViUGxhdGZvcm1UZXN0U2VydmVyLmxvZ2dlciA9IFdlYlBsYXRmb3JtVGVzdFNlcnZl
ci5kZWZhdWx0X2xvZ2dlcihjb25maWdbImxvZ19sZXZlbCJdKQorICAgIGNvbmZpZ18sIHN0YXJ0
ZWRfc2VydmVycyA9IFdlYlBsYXRmb3JtVGVzdFNlcnZlci5zdGFydChjb25maWcpCisKKyAgICBm
b3IgcHJvdG9jb2wsIHNlcnZlcnMgaW4gc3RhcnRlZF9zZXJ2ZXJzLml0ZW1zKCk6CisgICAgICAg
IGZvciBwb3J0LCBwcm9jZXNzIGluIHNlcnZlcnM6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygi
JXMsIHBvcnQ6JWQsIHBpZDolZCIgJSAocHJvdG9jb2wsIHBvcnQsIHByb2Nlc3MucHJvYy5waWQp
KQorCisgICAgIyBXYWl0IHVudGlsOgorICAgICMgMS4gdXNlciBwcmVzc2VzIGVudGVyIChpbiBj
YXNlIHNjcmlwdCBleGVjdXRlZCBpbiBjb21tYW5kIGxpbmUpCisgICAgIyAyLiB0aGUgbWFzdGVy
IHByb2Nlc3Mgc2VuZHMgZW50ZXIgKHJlZ3VsYXIgc3RvcCBjb21tYW5kKQorICAgICMgMy4gdGhl
IG1hc3RlciBwcm9jZXNzIGlzIHN0b3BwZWQgKGFuZCBzdGRpbiBpcyBjbG9zZWQpCisgICAgc3lz
LnN0ZGluLnJlYWQoMSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5l
eGl0KG1haW4oc3lzLmFyZ3ZbMTpdLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
c2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU2NDBkNDVl
NjQ4ZTMzNzNkYzI0YjM2NTliN2RmOTg5MWM4ZmY4NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyLnB5CkBAIC0wLDAgKzEsODYgQEAKKyMgIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24g
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
IGFyZSBtZXQ6CisjICAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorIyAgICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMg
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjICBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisj
ICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisjICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyAgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjICBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgbG9nZ2luZworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQorCitfbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgV2ViUGxhdGZvcm1UZXN0
U2VydmVyKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgb3V0cHV0X2RpciwgcGlkZmlsZT1Ob25lKToKKyAgICAg
ICAgIiIiQXJnczoKKyAgICAgICAgICBvdXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0
aGUgbGF5b3V0IHRlc3QgcmVzdWx0IGRpcmVjdG9yeQorICAgICAgICAiIiIKKyAgICAgICAgaHR0
cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZS5fX2luaXRfXyhzZWxmLCBwb3J0X29iaikKKyAg
ICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IG91dHB1dF9kaXIKKyAgICAgICAgc2VsZi5fc2V0X3N0
YXJ0X2NtZChwb3J0X29iaikKKworICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBz
ZWxmLl9sb2dfZmlsZV9uYW1lID0gJyVzX3Byb2Nlc3NfbG9nLm91dC50eHQnICUgKHNlbGYuX25h
bWUpCisKKyAgICAgICAgc2VsZi5fd3NvdXQgPSBOb25lCisgICAgICAgIHNlbGYuX3Byb2Nlc3Mg
PSBOb25lCisgICAgICAgIHNlbGYuX3BpZF9maWxlID0gcGlkZmlsZQorICAgICAgICBpZiBub3Qg
c2VsZi5fcGlkX2ZpbGU6CisgICAgICAgICAgICBzZWxmLl9waWRfZmlsZSA9IHNlbGYuX2ZpbGVz
eXN0ZW0uam9pbihzZWxmLl9ydW50aW1lX3BhdGgsICclcy5waWQnICUgc2VsZi5fbmFtZSkKKyAg
ICAgICAgc2VsZi5fc3Rkb3V0X2RhdGEgPSBOb25lCisgICAgICAgIHNlbGYuX3N0ZGVycl9kYXRh
ID0gTm9uZQorCisgICAgZGVmIF9zZXRfc3RhcnRfY21kKHNlbGYsIHBvcnRfb2JqKToKKyAgICAg
ICAgZmlsZV9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5hYnNwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0u
c3BsaXQoX19maWxlX18pWzBdKQorICAgICAgICBzZWxmLl9zdGFydF9jbWQgPSBbInB5dGhvbiIs
IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihmaWxlX3BhdGgsICJ3ZWJfcGxhdGZvcm1fdGVzdF9sYXVu
Y2hlci5weSIpXQorICAgICAgICBzZWxmLl9jd2QgPSBwb3J0X29iai5wYXRoX2Zyb21fd2Via2l0
X2Jhc2UoIkxheW91dFRlc3RzIiwgcG9ydF9vYmouZ2V0X29wdGlvbigid3B0c2VydmVyX2RvY19y
b290IikpCisgICAgICAgICNUT0RPOiB3cml0ZSBjb25maWcuanNvbiBhY2NvcmRpbmcgcG9ydF9v
YmouZ2V0X29wdGlvbigid3B0c2VydmVyX2h0dHBfcG9ydCIpIGFuZCBwb3J0X29iai5nZXRfb3B0
aW9uKCJ3cHRzZXJ2ZXJfaG9zdG5hbWUiKQorCisgICAgZGVmIF9wcmVwYXJlX2NvbmZpZyhzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5fb3V0cHV0X2Rpcik6
CisgICAgICAgICAgICBvdXRwdXRfbG9nID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX291
dHB1dF9kaXIsIHNlbGYuX2xvZ19maWxlX25hbWUpCisgICAgICAgICAgICBzZWxmLl93c291dCA9
IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcob3V0cHV0X2xvZykK
KworICAgIGRlZiBfc3Bhd25fcHJvY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5fc3Rkb3V0X2Rh
dGEgPSBOb25lCisgICAgICAgIHNlbGYuX3N0ZGVycl9kYXRhID0gTm9uZQorICAgICAgICBpZiBz
ZWxmLl93c291dDoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLl9leGVjdXRpdmUu
cG9wZW4oc2VsZi5fc3RhcnRfY21kLCBjd2Q9c2VsZi5fY3dkLCBzaGVsbD1GYWxzZSwgc3RkaW49
c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c2VsZi5fd3NvdXQsIHN0ZGVycj1zZWxmLl93c291dCkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLl9leGVjdXRp
dmUucG9wZW4oc2VsZi5fc3RhcnRfY21kLCBjd2Q9c2VsZi5fY3dkLCBzaGVsbD1GYWxzZSwgc3Rk
aW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJv
Y2Vzcy5TVERPVVQpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHNl
bGYuX3BpZF9maWxlLCBzdHIoc2VsZi5fcHJvY2Vzcy5waWQpKQorICAgICAgICByZXR1cm4gc2Vs
Zi5fcHJvY2Vzcy5waWQKKworICAgIGRlZiBfc3RvcF9ydW5uaW5nX3NlcnZlcihzZWxmKToKKyAg
ICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBpbmcgJXMgc2VydmVyJyAlIChzZWxmLl9uYW1lKSkKKyAg
ICAgICAgaWYgc2VsZi5fcGlkIGFuZCBub3Qgc2VsZi5fZXhlY3V0aXZlLmNoZWNrX3J1bm5pbmdf
cGlkKHNlbGYuX3BpZCk6CisgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZShzZWxm
Ll9waWRfZmlsZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLl9wcm9jZXNz
OgorICAgICAgICAgICAgKHNlbGYuX3N0ZG91dF9kYXRhLCBzZWxmLl9zdGRlcnJfZGF0YSkgPSBz
ZWxmLl9wcm9jZXNzLmNvbW11bmljYXRlKGlucHV0PSdcbicpCisgICAgICAgIGlmIHNlbGYuX3dz
b3V0OgorICAgICAgICAgICAgc2VsZi5fd3NvdXQuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5f
d3NvdXQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX2V4ZWN1dGl2ZS5jaGVja19ydW5uaW5nX3Bp
ZChzZWxmLl9waWQpOgorICAgICAgICAgICAgcmFpc2UgaHR0cF9zZXJ2ZXJfYmFzZS5TZXJ2ZXJF
cnJvcignRmFpbGVkIHRvIHN0b3AgJXM6IHBsZWFzZSBnbyB0byB3ZWIgcGxhdGZvcm0gdGVzdCBz
ZXJ2ZXIgbG9nIGZpbGUgdG8gZ2V0IHRoZSBQSUQgbGlzdCcgJSAoc2VsZi5fbmFtZSkpCisgICAg
ICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKHNlbGYuX3BpZF9maWxlKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1f
dGVzdF9zZXJ2ZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl91bml0dGVzdC5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wNGU3OWZhZWUxNDY3NzU0MjViMmNhZDc2ODYxMjUyZmRiYmM2ZWE5Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXJfdW5pdHRlc3QucHkKQEAgLTAsMCArMSw0NCBAQAorIyAgQ29w
eXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMgIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIyAgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9m
CisjICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyMgIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisjICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyAgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QyIGFzIHVu
aXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QK
K2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgUG9ydAorZnJvbSB3ZWJraXRweS50b29sLm1vY2t0
b29sIGltcG9ydCBNb2NrT3B0aW9ucworCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2
ZXJzLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciBpbXBvcnQgV2ViUGxhdGZvcm1UZXN0U2VydmVy
CisKKworY2xhc3MgVGVzdFdlYlBsYXRmb3JtVGVzdFNlcnZlcih1bml0dGVzdC5UZXN0Q2FzZSk6
CisgICAgZGVmIHRlc3Rfc3RhcnRfY21kKHNlbGYpOgorCisgICAgICAgIHBvcnQgPSBQb3J0KE1v
Y2tIb3N0KCksICJ0ZXN0IiwgTW9ja09wdGlvbnMod3B0c2VydmVyX3BvcnQ9ODgwMCwgd3B0c2Vy
dmVyX2RvY19yb290PSJpbXBvcnRlZC93M2MiKSkKKyAgICAgICAgc2VydmVyID0gV2ViUGxhdGZv
cm1UZXN0U2VydmVyKHBvcnQsICJ3cHR0ZXN0IiwgIi9tb2NrL291dHB1dF9kaXIiLCAiL21vY2sv
b3V0cHV0X2Rpci9waWQudHh0IikKKworICAgICAgICBzZXJ2ZXIuX3ByZXBhcmVfY29uZmlnKCkK
KyAgICAgICAgc2VydmVyLl93c291dCA9IE5vbmUKKyAgICAgICAgc2VydmVyLl9zcGF3bl9wcm9j
ZXNzKCkKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBzZXJ2ZXIuX3N0b3BfcnVubmlu
Z19zZXJ2ZXIoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQppbmRleCBjMzc3ZTU5YzBh
YzI0ZDM4NzQwZDE1NzI0NDYyNzNiMmIyMTU4NWViLi4wZGY1NzM3Mjg1YTAwNTRmMzg2ZTBmNTcz
YWZjMjA4ODJhODYxM2U3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
YmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQpAQCAtNjUs
NiArNjUsNyBAQCBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHNlcnZlcl9wcm9jZXNzCiBmcm9t
IHdlYmtpdHB5LnBvcnQuZmFjdG9yeSBpbXBvcnQgUG9ydEZhY3RvcnkKIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGFwYWNoZV9odHRwX3NlcnZlcgogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgaHR0cF9zZXJ2ZXIKK2Zyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IHdlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcgog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgd2Vic29ja2V0X3NlcnZl
cgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC0xMjIsNiArMTIzLDcg
QEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBzZWxmLl9oZWxwZXIgPSBOb25lCiAgICAg
ICAgIHNlbGYuX2h0dHBfc2VydmVyID0gTm9uZQogICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2Vy
dmVyID0gTm9uZQorICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBOb25l
CiAgICAgICAgIHNlbGYuX2ltYWdlX2RpZmZlciA9IE5vbmUKICAgICAgICAgc2VsZi5fc2VydmVy
X3Byb2Nlc3NfY29uc3RydWN0b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzICAjIG92
ZXJyaWRhYmxlIGZvciB0ZXN0aW5nCiAgICAgICAgIHNlbGYuX2h0dHBfbG9jayA9IE5vbmUgICMg
RklYTUU6IFdoeSBkb2VzIHRoaXMgbGl2ZSBvbiB0aGUgcG9ydCBvYmplY3Q/CkBAIC05MDMsNiAr
OTA1LDE1IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgc2VydmVyLnN0YXJ0KCkKICAg
ICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlciA9IHNlcnZlcgogCisgICAgZGVmIHN0YXJ0X3dl
Yl9wbGF0Zm9ybV90ZXN0X3NlcnZlcihzZWxmLCBhZGRpdGlvbmFsX2RpcnM9Tm9uZSwgbnVtYmVy
X29mX3NlcnZlcnM9Tm9uZSk6CisgICAgICAgICIiIlN0YXJ0IGEgd2ViIHNlcnZlci4gUmFpc2Ug
YW4gZXJyb3IgaWYgaXQgY2FuJ3Qgc3RhcnQgb3IgaXMgYWxyZWFkeSBydW5uaW5nLgorCisgICAg
ICAgIFBvcnRzIGNhbiBzdHViIHRoaXMgb3V0IGlmIHRoZXkgZG9uJ3QgbmVlZCBhIHdlYiBzZXJ2
ZXIgdG8gYmUgcnVubmluZy4iIiIKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl93ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXIsICdBbHJlYWR5IHJ1bm5pbmcgYSBXZWIgUGxhdGZvcm0gVGVzdCBzZXJ2
ZXIuJworCisgICAgICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IHdlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlci5XZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIoc2VsZiwgIndwdHdrIiwgc2Vs
Zi5yZXN1bHRzX2RpcmVjdG9yeSgpKQorICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9z
ZXJ2ZXIuc3RhcnQoKQorCiAgICAgZGVmIGh0dHBfc2VydmVyX3N1cHBvcnRzX2lwdjYoc2VsZik6
CiAgICAgICAgICMgQ3lnd2luIGlzIHRoZSBvbmx5IHBsYXRmb3JtIHRvIHN0aWxsIHVzZSBBcGFj
aGUgMS4zLCB3aGljaCBvbmx5IHN1cHBvcnRzIElQVjQuCiAgICAgICAgICMgT25jZSBpdCBtb3Zl
cyB0byBBcGFjaGUgMiwgd2UgY2FuIGRyb3AgdGhpcyBtZXRob2QgYWx0b2dldGhlci4KQEAgLTkz
Miw2ICs5NDMsMTIgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5fd2Vi
c29ja2V0X3NlcnZlci5zdG9wKCkKICAgICAgICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIg
PSBOb25lCiAKKyAgICBkZWYgc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoc2VsZik6Cisg
ICAgICAgICIiIlNodXQgZG93biB0aGUgd2ViIHBsYXRmb3JtIHRlc3Qgc2VydmVyIGlmIGl0IGlz
IHJ1bm5pbmcuIERvIG5vdGhpbmcgaWYgaXQgaXNuJ3QuIiIiCisgICAgICAgIGlmIHNlbGYuX3dl
Yl9wbGF0Zm9ybV90ZXN0X3NlcnZlcjoKKyAgICAgICAgICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlci5zdG9wKCkKKyAgICAgICAgICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3Nl
cnZlciA9IE5vbmUKKwogICAgIGRlZiByZWxlYXNlX2h0dHBfbG9jayhzZWxmKToKICAgICAgICAg
aWYgc2VsZi5faHR0cF9sb2NrOgogICAgICAgICAgICAgc2VsZi5faHR0cF9sb2NrLmNsZWFudXBf
aHR0cF9sb2NrKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2
ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5Cm9sZCBtb2RlIDEw
MDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNTM2Mzk1ZTFkNGEyODc0NzQ0NzAzZTcyODU3ZTYw
MTI0ZWZhOTRiOC4uZDU5MThiM2ZlZjJlNmNlMzU4NGQzODdjYjkxNDM3MTcwZGI3ZjY3YQotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKQEAgLTE1MSw2ICsxNTEsMTEgQEAgY2xhc3MgRHJp
dmVyKG9iamVjdCk6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9wcm9maWxlciA9
IE5vbmUKIAorICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2Jhc2VfdXJpID0gc3RyKCkK
KyAgICAgICAgaWYgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfaG9zdG5hbWUiKSBh
bmQgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfaHR0cF9wb3J0Iik6CisgICAgICAg
ICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2Jhc2VfdXJpID0gImh0dHA6Ly8iICsgc2VsZi5f
cG9ydC5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfaG9zdG5hbWUiKSArICI6IiArIHN0cihzZWxmLl9w
b3J0LmdldF9vcHRpb24oIndwdHNlcnZlcl9odHRwX3BvcnQiKSkgKyAiLyIKKyAgICAgICAgc2Vs
Zi53ZWJfcGxhdGZvcm1fdGVzdF9kaXIgPSAoc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCJ3cHRzZXJ2
ZXJfZG9jX3Jvb3QiKSBpZiBzZWxmLl9wb3J0LmdldF9vcHRpb24oIndwdHNlcnZlcl9kb2Nfcm9v
dCIpIGVsc2UgIi4iKSArICIvIgorCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNl
bGYuc3RvcCgpCiAKQEAgLTIyOCw4ICsyMzMsMTQgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAg
ICAgZGVmIGlzX2h0dHBfdGVzdChzZWxmLCB0ZXN0X25hbWUpOgogICAgICAgICByZXR1cm4gdGVz
dF9uYW1lLnN0YXJ0c3dpdGgoc2VsZi5IVFRQX0RJUikgYW5kIG5vdCB0ZXN0X25hbWUuc3RhcnRz
d2l0aChzZWxmLkhUVFBfTE9DQUxfRElSKQogCisgICAgZGVmIGlzX3dlYl9wbGF0Zm9ybV90ZXN0
KHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHJldHVybiB0ZXN0X25hbWUuc3RhcnRzd2l0aChz
ZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2RpcikKKwogICAgIGRlZiB0ZXN0X3RvX3VyaShzZWxmLCB0
ZXN0X25hbWUpOgogICAgICAgICAiIiJDb252ZXJ0IGEgdGVzdCBuYW1lIHRvIGEgVVJJLiIiIgor
ICAgICAgICBpZiBzZWxmLmlzX3dlYl9wbGF0Zm9ybV90ZXN0KHRlc3RfbmFtZSk6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9iYXNlX3VyaSArIHRlc3RfbmFtZVts
ZW4oc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9kaXIpOl0KKwogICAgICAgICBpZiBub3Qgc2VsZi5p
c19odHRwX3Rlc3QodGVzdF9uYW1lKToKICAgICAgICAgICAgIHJldHVybiBwYXRoLmFic3BhdGhf
dG9fdXJpKHNlbGYuX3BvcnQuaG9zdC5wbGF0Zm9ybSwgc2VsZi5fcG9ydC5hYnNwYXRoX2Zvcl90
ZXN0KHRlc3RfbmFtZSkpCiAKQEAgLTI1Myw3ICsyNjQsOSBAQCBjbGFzcyBEcml2ZXIob2JqZWN0
KToKICAgICAgICAgICAgIGlmIG5vdCBwcmVmaXguZW5kc3dpdGgoJy8nKToKICAgICAgICAgICAg
ICAgICBwcmVmaXggKz0gJy8nCiAgICAgICAgICAgICByZXR1cm4gdXJpW2xlbihwcmVmaXgpOl0K
LSAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImh0dHA6Ly8iKToKKyAgICAgICAgaWYgc2VsZi53
ZWJfcGxhdGZvcm1fdGVzdF9iYXNlX3VyaSBhbmQgdXJpLnN0YXJ0c3dpdGgoc2VsZi53ZWJfcGxh
dGZvcm1fdGVzdF9iYXNlX3VyaSk6CisgICAgICAgICAgICByZXR1cm4gdXJpLnJlcGxhY2Uoc2Vs
Zi53ZWJfcGxhdGZvcm1fdGVzdF9iYXNlX3VyaSwgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9kaXIp
CisgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJodHRwOi8vMTI3LjAuMC4xOjgwMDAiKToKICAg
ICAgICAgICAgIHJldHVybiB1cmkucmVwbGFjZSgnaHR0cDovLzEyNy4wLjAuMTo4MDAwLycsIHNl
bGYuSFRUUF9ESVIpCiAgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJodHRwczovLyIpOgogICAg
ICAgICAgICAgcmV0dXJuIHVyaS5yZXBsYWNlKCdodHRwczovLzEyNy4wLjAuMTo4NDQzLycsIHNl
bGYuSFRUUF9ESVIpCkBAIC0zODEsNyArMzk0LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAg
ICAgICAgICMgRklYTUU6IHBlcmZvcm1hbmNlIHRlc3RzIHBhc3MgaW4gZnVsbCBVUkxzIGluc3Rl
YWQgb2YgdGVzdCBuYW1lcy4KICAgICAgICAgaWYgZHJpdmVyX2lucHV0LnRlc3RfbmFtZS5zdGFy
dHN3aXRoKCdodHRwOi8vJykgb3IgZHJpdmVyX2lucHV0LnRlc3RfbmFtZS5zdGFydHN3aXRoKCdo
dHRwczovLycpICBvciBkcml2ZXJfaW5wdXQudGVzdF9uYW1lID09ICgnYWJvdXQ6YmxhbmsnKToK
ICAgICAgICAgICAgIGNvbW1hbmQgPSBkcml2ZXJfaW5wdXQudGVzdF9uYW1lCi0gICAgICAgIGVs
aWYgc2VsZi5pc19odHRwX3Rlc3QoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSk6CisgICAgICAgIGVs
aWYgc2VsZi5pc19odHRwX3Rlc3QoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkgb3IgIHNlbGYuaXNf
d2ViX3BsYXRmb3JtX3Rlc3QoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSk6CiAgICAgICAgICAgICBj
b21tYW5kID0gc2VsZi50ZXN0X3RvX3VyaShkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQogICAgICAg
ICBlbHNlOgogICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYuX3BvcnQuYWJzcGF0aF9mb3JfdGVz
dChkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9kcml2ZXJfdW5pdHRlc3QucHkKaW5kZXggYjJmYzNmZTQ2ZWIwODUxNTA2ZjM1OTRkMjdlZjQ5
OTgyMDFhMTk2My4uNjAzOWRkZTA1MWQ0ZThhMmYzNTVkODNiNGNmZjE5ZDM2NzA4Yjk1NiAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5CkBAIC04
Niw2ICs4Niw3IEBAIGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICBwb3J0Ll9jb25maWcuYnVpbGRfZGlyZWN0b3J5ID0gbGFtYmRhIGNvbmZpZ3VyYXRpb246ICcv
bW9jay1idWlsZCcKICAgICAgICAgcmV0dXJuIHBvcnQKIAorCiAgICAgZGVmIF9hc3NlcnRfd3Jh
cHBlcihzZWxmLCB3cmFwcGVyX3N0cmluZywgZXhwZWN0ZWRfd3JhcHBlcik6CiAgICAgICAgIHdy
YXBwZXIgPSBEcml2ZXIoc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyh3cmFwcGVy
PXdyYXBwZXJfc3RyaW5nKSksIE5vbmUsIHBpeGVsX3Rlc3RzPUZhbHNlKS5fY29tbWFuZF93cmFw
cGVyKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLCBleHBlY3RlZF93cmFwcGVy
KQpAQCAtMTA0LDE4ICsxMDUsMjAgQEAgY2xhc3MgRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLl9jb21tYW5kX3dyYXBwZXIoKSwg
WydwZXJmJywgJ3JlY29yZCcsICctZycsICctLW91dHB1dCcsICcvbW9jay1idWlsZC9sYXlvdXQt
dGVzdC1yZXN1bHRzL3Rlc3QuZGF0YSddKQogCiAgICAgZGVmIHRlc3RfdGVzdF90b191cmkoc2Vs
Zik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHBvcnQgPSBzZWxm
Lm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKHdwdHNlcnZlcl9ob3N0bmFtZT0nbG9jYWxo
b3N0Jywgd3B0c2VydmVyX2h0dHBfcG9ydD0nODg4MCcsIHdwdHNlcnZlcl9kb2Nfcm9vdD0naW1w
b3J0ZWQvdzNjJykpCiAgICAgICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCBOb25lLCBwaXhlbF90
ZXN0cz1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudGVzdF90b191cmko
J2Zvby9iYXIuaHRtbCcpLCAnZmlsZTovLyVzL2Zvby9iYXIuaHRtbCcgJSBwb3J0LmxheW91dF90
ZXN0c19kaXIoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudGVzdF90b191cmko
J2h0dHAvdGVzdHMvZm9vLmh0bWwnKSwgJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28uaHRtbCcp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnRlc3RfdG9fdXJpKCdodHRwL3Rlc3Rz
L3NzbC9iYXIuaHRtbCcpLCAnaHR0cHM6Ly8xMjcuMC4wLjE6ODQ0My9zc2wvYmFyLmh0bWwnKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci50ZXN0X3RvX3VyaSgnaW1wb3J0ZWQvdzNj
L2Zvby9iYXIuaHRtbCcpLCAnaHR0cDovL2xvY2FsaG9zdDo4ODgwL2Zvby9iYXIuaHRtbCcpCiAK
ICAgICBkZWYgdGVzdF91cmlfdG9fdGVzdChzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFr
ZV9wb3J0KCkKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlv
bnMod3B0c2VydmVyX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB3cHRzZXJ2ZXJfaHR0cF9wb3J0PSc4
ODgwJywgd3B0c2VydmVyX2RvY19yb290PSJpbXBvcnRlZC93M2MiKSkKICAgICAgICAgZHJpdmVy
ID0gRHJpdmVyKHBvcnQsIE5vbmUsIHBpeGVsX3Rlc3RzPUZhbHNlKQogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGRyaXZlci51cmlfdG9fdGVzdCgnZmlsZTovLyVzL2Zvby9iYXIuaHRtbCcgJSBw
b3J0LmxheW91dF90ZXN0c19kaXIoKSksICdmb28vYmFyLmh0bWwnKQogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGRyaXZlci51cmlfdG9fdGVzdCgnaHR0cDovLzEyNy4wLjAuMTo4MDAwL2Zvby5o
dG1sJyksICdodHRwL3Rlc3RzL2Zvby5odG1sJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChk
cml2ZXIudXJpX3RvX3Rlc3QoJ2h0dHBzOi8vMTI3LjAuMC4xOjg0NDMvc3NsL2Jhci5odG1sJyks
ICdodHRwL3Rlc3RzL3NzbC9iYXIuaHRtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJp
dmVyLnVyaV90b190ZXN0KCdodHRwOi8vbG9jYWxob3N0Ojg4ODAvZm9vL2Jhci5odG1sJyksICdp
bXBvcnRlZC93M2MvZm9vL2Jhci5odG1sJykKIAogICAgIGRlZiB0ZXN0X3JlYWRfYmxvY2soc2Vs
Zik6CiAgICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9ydCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238712</attachid>
            <date>2014-09-26 06:34:45 -0700</date>
            <delta_ts>2014-12-19 10:58:55 -0800</delta_ts>
            <desc>updated according bug 134763 discussions</desc>
            <filename>bug-127094-20140926153444.patch</filename>
            <type>text/plain</type>
            <size>38029</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczOTQ3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWRlZGU2M2M3MzJlYWVkYjhlZGUzMzA0MTY5YjNmNGU5
MzQ3NDBlOC4uODQ2Nzc0NTBlMmEwMzRiZWQ3YmVlOWFhN2FiYWZkYTBkZDIzMzU3NyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgw
IEBACisyMDE0LTA5LTI2ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgSW50ZWdyYXRlIFdQIHB5dGhvbiBzZXJ2ZXIgaW50byBXZWJLaXQgdGVz
dCBmcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNzA5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyBXM0Mgd2ViIHNlcnZlciAod3B0c2VydmVyKSBhcyBhIG5ldyBI
VFRQIHNlcnZlci4KKyAgICAgICAgd3B0c2VydmVyIGltcGxlbWVudGF0aW9uIHNob3VsZCBiZSBp
bXBvcnRlZCB3aXRoaW4gdGhlIGltcG9ydAorICAgICAgICBvZiB0aGUgV2ViIFBsYXRmb3JtIFRl
c3Qgc3VpdGUgKHRvIGVuc3VyZSBrZWVwaW5nIHNlcnZlciBhbmQgdGVzdHMgaW4gc3luYykgaW4K
KyAgICAgICAgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dwdC4KKyAgICAgICAgd3B0c2VydmVy
IGlzIHVzZWQgdG8gc2VydmUgYWxsIHRlc3RzIGluc2lkZSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd3B0LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1
dGl2ZV9tb2NrLnB5OiBBZGRpbmcgbW9jaworICAgICAgICBmdW5jdGlvbiB0byBwcm9wZXJseSBy
dW4gd3B0IHNlcnZlciB1bml0IHRlc3RzLgorICAgICAgICAoTW9ja1Byb2Nlc3MuY29tbXVuaWNh
dGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L2xheW91dF90ZXN0X3J1bm5lci5weTogQWRkaW5nIHN0YXJ0L3N0b3Agb2Ygd2ViIHBsYXRmb3Jt
IHRlc3Qgc2VydmVyIGFjY29yZGluZyBib29sZWFuIHBhcmFtZXRlci4KKyAgICAgICAgKExheW91
dFRlc3RSdW5uZXIuX19pbml0X18pOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5ydW5fdGVz
dHMpOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayk6
CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyLnN0b3Bfc2VydmVyc193aXRoX2xvY2spOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90
ZXN0X3J1bm5lcl91bml0dGVzdC5weTogVXBkYXRlZCB0byBjaGVjayBmb3Igd3B0IHNlcnZlciBz
dGFydC9zdG9wLgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lclRlc3RzLl9ydW5fdGVzdHMpOgor
ICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lclRlc3RzLnRlc3Rfc2VydmVyc19zdGFydGVkLnN0YXJ0
X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcik6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVz
dHMudGVzdF9zZXJ2ZXJzX3N0YXJ0ZWQuc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIpOgor
ICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lclRlc3RzKToKKyAgICAgICAgKExheW91dFRlc3RSdW5u
ZXJUZXN0cy50ZXN0X3NlcnZlcnNfc3RhcnRlZCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weTogVXBkYXRlZCB0byBjaGVjayB3
aGV0aGVyIGEgdGVzdCBpcyBhIHdwdCB0ZXN0IGFuZCB3aGV0aGVyIHdwdCBzZXJ2ZXIgbGF1bmNo
IGlzIG5lZWRlZC4KKyAgICAgICAgKE1hbmFnZXIuX19pbml0X18pOgorICAgICAgICAoTWFuYWdl
ci5faXNfaHR0cF90ZXN0KToKKyAgICAgICAgKE1hbmFnZXIuX2lzX3dlYl9wbGF0Zm9ybV90ZXN0
KToKKyAgICAgICAgKE1hbmFnZXIuX3Rlc3RfcmVxdWlyZXNfbG9jayk6CisgICAgICAgIChNYW5h
Z2VyLl9ydW5fdGVzdHMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHk6CisgICAgICAgIFVwZGF0ZWQgdG8gY2hl
Y2sgdGhhdCB3cHQgc2VydmVyIGxhdW5jaCBpcyBuZWVkZWQgYWNjb3JkaW5nIHRlc3QgcGF0aC4K
KyAgICAgICAgKE1hbmFnZXJUZXN0LnRlc3RfbmVlZHNfc2VydmVycy5nZXRfd3B0X2RvY19yb290
KToKKyAgICAgICAgKE1hbmFnZXJUZXN0LnRlc3RfbmVlZHNfc2VydmVycy5nZXRfbWFuYWdlcik6
CisgICAgICAgIChNYW5hZ2VyVGVzdC50ZXN0X25lZWRzX3NlcnZlcnMpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6IEFkZGVkIGFu
IG9wdGlvbiB0byBjb250cm9sIHRoZSBkb2Nfcm9vdCBvZiB0aGUgd3B0IHNlcnZlci4KKyAgICAg
ICAgKHBhcnNlX2FyZ3MpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNoZXIucHk6CisgICAgICAgIEFkZGVkOiBp
dCBzZXJ2ZXMgYXMgbWFpbiBlbnRyeSBwb2ludCB0byB3cHQgc3Bhd25lZCBwcm9jZXNzKS4KKyAg
ICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Nl
cnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLnB5OgorICAgICAgICBBZGRlZDogaXQgaXMg
cmVzcG9uc2libGUgdG8gc3RhcnQvc3RvcCB0aGUgd3B0IHNlcnZlciBwcm9jZXNzLiBJdCBhbHNv
CisgICAgICAgIHNldHMgdXAgdGhlIHNlcnZlciBjb25maWcgYW5kIHRlc3RoYXJuZXNzLmpzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzCisgICAgICAgIGZpbGVzIGF0IHN0YXJ0IGFuZCBzdG9wIG9mIHRo
ZSB3cHQgc2VydmVyLgorICAgICAgICAoZG9jX3Jvb3QpOgorICAgICAgICAoV2ViUGxhdGZvcm1U
ZXN0U2VydmVyKToKKyAgICAgICAgKFdlYlBsYXRmb3JtVGVzdFNlcnZlci5fX2luaXRfXyk6Cisg
ICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3NldF9zdGFydF9jbWQpOgorICAgICAgICAo
V2ViUGxhdGZvcm1UZXN0U2VydmVyLl9jb3B5X3dlYmtpdF90ZXN0X2ZpbGVzKToKKyAgICAgICAg
KFdlYlBsYXRmb3JtVGVzdFNlcnZlci5fY2xlYW5fd2Via2l0X3Rlc3RfZmlsZXMpOgorICAgICAg
ICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9wcmVwYXJlX2NvbmZpZyk6CisgICAgICAgIChXZWJQ
bGF0Zm9ybVRlc3RTZXJ2ZXIuX3NwYXduX3Byb2Nlc3MpOgorICAgICAgICAoV2ViUGxhdGZvcm1U
ZXN0U2VydmVyLl9zdG9wX3J1bm5pbmdfc2VydmVyKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl91bml0dGVz
dC5weTogQWRkZWQuCisgICAgICAgIChUZXN0V2ViUGxhdGZvcm1UZXN0U2VydmVyKToKKyAgICAg
ICAgKFRlc3RXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIudGVzdF9zdGFydF9jbWQpOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OiBBZGRlZCBuZWVkZWQgZnVuY3Rpb25zIHRv
IHN0YXJ0L3N0b3Agd3B0IHNlcnZlci4KKyAgICAgICAgKFBvcnQuX19pbml0X18pOgorICAgICAg
ICAoUG9ydC50by5zdGFydF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIpOgorICAgICAgICAoUG9y
dC50byk6CisgICAgICAgIChQb3J0LnRvLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9kb2Nfcm9v
dCk6CisgICAgICAgIChQb3J0LnRvLnN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5OiBVcGRhdGVkIHRoZSB0ZXN0
IG5hbWUgPC0+IHRlc3QgVVJMIGNvbnZlcnNpb24gcm91dGluZXMuCisgICAgICAgIChEcml2ZXIu
X19pbml0X18pOgorICAgICAgICAoRHJpdmVyKToKKyAgICAgICAgKERyaXZlci5pc193ZWJfcGxh
dGZvcm1fdGVzdCk6CisgICAgICAgIChEcml2ZXIudGVzdF90b191cmkpOgorICAgICAgICAoRHJp
dmVyLnVyaV90b190ZXN0KToKKyAgICAgICAgKERyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9p
bnB1dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5w
eTogVXBkYXRlZCB0ZXN0cyBhY2NvcmRpbmcgbmV3IGNvbnZlcnNpb24gcnVsZXMuCisgICAgICAg
IChEcml2ZXJUZXN0Lm1ha2VfcG9ydCk6CisgICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdGVzdF90
b191cmkpOgorICAgICAgICAoRHJpdmVyVGVzdC50ZXN0X3VyaV90b190ZXN0KToKKwogMjAxNC0w
OS0yMyAgRGF2aWQgRmFybGVyICA8ZGZhcmxlckBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10g
cnVuLXdlYmtpdC10ZXN0cyBzaG91bGQgc3VwcG9ydCBtaW5vciB2ZXJzaW9ucyB1bmRlciBkZXZp
Y2VzIGFuZCBjcmVhdGUgYSB0ZXN0aW5nIGRldmljZSB1bmRlciB0aGUgcmlnaHQgcnVudGltZQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2
ZV9tb2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2
ZV9tb2NrLnB5CmluZGV4IGEzODcwYjEzMWNkY2M0ZjBlNmY5YTEyYjZlNjVmN2UxNjIzMTBhM2Mu
LmMxMWMzODBjNThhYzhkOGIxMTZmOGRjOTJjZDEwNDNjNDc0OTFkOGEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX21vY2sucHkK
QEAgLTQ2LDYgKzQ2LDkgQEAgY2xhc3MgTW9ja1Byb2Nlc3Mob2JqZWN0KToKICAgICBkZWYgd2Fp
dChzZWxmKToKICAgICAgICAgcmV0dXJuCiAKKyAgICBkZWYgY29tbXVuaWNhdGUoc2VsZiwgaW5w
dXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiAoc2VsZi5zdGRvdXQsIHNlbGYuc3RkZXJyKQorCiAj
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSB1bmlmaWVkIHdpdGggTW9ja0V4ZWN1dGl2ZTIKIGNsYXNz
IE1vY2tFeGVjdXRpdmUob2JqZWN0KToKICAgICBQSVBFID0gIk1PQ0sgUElQRSIKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91
dF90ZXN0X3J1bm5lci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2Nv
bnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQppbmRleCA1MmFhOGUwZDBjMmY2YzQ0NWI0
ODM0OGZlMzhmMzQ1MWE5OWU5NWNjLi4zMDhiOTE0YTZmZjkwYzk0NzkxMzllM2VlYTFiNGQ1ZWU1
NWZlNzkyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5CkBAIC03
NCwxNyArNzQsMTkgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICBz
ZWxmLl90ZXN0X2lucHV0cyA9IFtdCiAgICAgICAgIHNlbGYuX25lZWRzX2h0dHAgPSBOb25lCiAg
ICAgICAgIHNlbGYuX25lZWRzX3dlYnNvY2tldHMgPSBOb25lCisgICAgICAgIHNlbGYuX25lZWRz
X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5fcmV0cnlpbmcg
PSBGYWxzZQogCiAgICAgICAgIHNlbGYuX2N1cnJlbnRfcnVuX3Jlc3VsdHMgPSBOb25lCiAgICAg
ICAgIHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hhcmRzID0gW10KICAgICAgICAgc2VsZi5faGFz
X2h0dHBfbG9jayA9IEZhbHNlCiAKLSAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGV4cGVjdGF0aW9u
cywgdGVzdF9pbnB1dHMsIHRlc3RzX3RvX3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19odHRwLCBu
ZWVkc193ZWJzb2NrZXRzLCByZXRyeWluZyk6CisgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBleHBl
Y3RhdGlvbnMsIHRlc3RfaW5wdXRzLCB0ZXN0c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNf
aHR0cCwgbmVlZHNfd2Vic29ja2V0cywgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLCBy
ZXRyeWluZyk6CiAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucwogICAg
ICAgICBzZWxmLl90ZXN0X2lucHV0cyA9IHRlc3RfaW5wdXRzCiAgICAgICAgIHNlbGYuX25lZWRz
X2h0dHAgPSBuZWVkc19odHRwCiAgICAgICAgIHNlbGYuX25lZWRzX3dlYnNvY2tldHMgPSBuZWVk
c193ZWJzb2NrZXRzCisgICAgICAgIHNlbGYuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
ciA9IG5lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcgogICAgICAgICBzZWxmLl9yZXRyeWlu
ZyA9IHJldHJ5aW5nCiAKICAgICAgICAgIyBGSVhNRTogcmVuYW1lIGFsbCB2YXJpYWJsZXMgdG8g
dGVzdF9ydW5fcmVzdWx0cyBvciBzb21lIHN1Y2ggLi4uCkBAIC0yMDYsNiArMjA4LDkgQEAgY2xh
c3MgTGF5b3V0VGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJz
b2NrZXRzOgogICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0YXJ0aW5n
IFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vi
c29ja2V0X3NlcnZlcigpCisgICAgICAgIGlmIHNlbGYuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlcjoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdGFydGlu
ZyBXZWIgUGxhdGZvcm0gVGVzdCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQu
c3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKCkKICAgICAgICAgc2VsZi5faGFzX2h0dHBf
bG9jayA9IFRydWUKIAogICAgIGRlZiBzdG9wX3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgpAQCAt
MjE2LDYgKzIyMSw5IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAg
ICAgIGlmIHNlbGYuX25lZWRzX3dlYnNvY2tldHM6CiAgICAgICAgICAgICAgICAgc2VsZi5fcHJp
bnRlci53cml0ZV91cGRhdGUoJ1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKICAgICAg
ICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgICAg
ICBpZiBzZWxmLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI6CisgICAgICAgICAgICAg
ICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0b3BwaW5nIFdlYiBQbGF0Zm9ybSBUZXN0
IHNlcnZlciAuLi4nKQorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXIoKQogICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUo
J1JlbGVhc2luZyBzZXJ2ZXIgbG9jayAuLi4nKQogICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxl
YXNlX2h0dHBfbG9jaygpCiAgICAgICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gRmFsc2UK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5w
eQppbmRleCA4MDk3N2U1NzZlOTZmNWYwMDY3ZmUxMDFjZGU5OGU4YmY4Nzc3OWEyLi5hMjRlYzZk
MGQzNWU0M2FkNDM4NDgyMzkwNmRhZTZkNjZiNGM1ZWQ3IDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJf
dW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CkBAIC0xMDYsNyArMTA2LDcg
QEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAg
ICAgZXhwZWN0YXRpb25zID0gVGVzdEV4cGVjdGF0aW9ucyhydW5uZXIuX3BvcnQsIHRlc3RzKQog
ICAgICAgICBleHBlY3RhdGlvbnMucGFyc2VfYWxsX2V4cGVjdGF0aW9ucygpCiAgICAgICAgIHJ1
bm5lci5ydW5fdGVzdHMoZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgc2V0KCksCi0gICAgICAg
ICAgICBudW1fd29ya2Vycz0xLCBuZWVkc19odHRwPWFueSgnaHR0cCcgaW4gdGVzdCBmb3IgdGVz
dCBpbiB0ZXN0cyksIG5lZWRzX3dlYnNvY2tldHM9YW55KFsnd2Vic29ja2V0JyBpbiB0ZXN0IGZv
ciB0ZXN0IGluIHRlc3RzXSksIHJldHJ5aW5nPUZhbHNlKQorICAgICAgICAgICAgbnVtX3dvcmtl
cnM9MSwgbmVlZHNfaHR0cD1hbnkoJ2h0dHAnIGluIHRlc3QgZm9yIHRlc3QgaW4gdGVzdHMpLCBu
ZWVkc193ZWJzb2NrZXRzPWFueShbJ3dlYnNvY2tldCcgaW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0
c10pLCBuZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI9YW55KFsnaW1wb3J0ZWQvdzNjJyBp
biB0ZXN0IGZvciB0ZXN0IGluIHRlc3RzXSksIHJldHJ5aW5nPUZhbHNlKQogCiAgICAgZGVmIHRl
c3RfaHR0cF9sb2NraW5nKHNlbGYpOgogICAgICAgICBydW5uZXIgPSBzZWxmLl9ydW5uZXIoKQpA
QCAtMTc2LDQ5ICsxNzYsODMgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lclRlc3RzKHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICAgICAgZGVmIHN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKToKICAgICAg
ICAgICAgIHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQgPSBUcnVlCiAKKyAgICAgICAgZGVmIHN0YXJ0
X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcigpOgorICAgICAgICAgICAgc2VsZi53ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCA9IFRydWUKKwogICAgICAgICBkZWYgc3RvcF9odHRwX3Nl
cnZlcigpOgogICAgICAgICAgICAgc2VsZi5odHRwX3N0b3BwZWQgPSBUcnVlCiAKICAgICAgICAg
ZGVmIHN0b3Bfd2Vic29ja2V0X3NlcnZlcigpOgogICAgICAgICAgICAgc2VsZi53ZWJzb2NrZXRf
c3RvcHBlZCA9IFRydWUKIAorICAgICAgICBkZWYgc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2
ZXIoKToKKyAgICAgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQg
PSBUcnVlCisKICAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKICAgICAgICAgcG9ydCA9IGhvc3Qu
cG9ydF9mYWN0b3J5LmdldCgndGVzdC1tYWMtbGVvcGFyZCcpCiAgICAgICAgIHBvcnQuc3RhcnRf
aHR0cF9zZXJ2ZXIgPSBzdGFydF9odHRwX3NlcnZlcgogICAgICAgICBwb3J0LnN0YXJ0X3dlYnNv
Y2tldF9zZXJ2ZXIgPSBzdGFydF93ZWJzb2NrZXRfc2VydmVyCisgICAgICAgIHBvcnQuc3RhcnRf
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
CiAgICAgICAgIHBvcnQuc3RvcF9odHRwX3NlcnZlciA9IHN0b3BfaHR0cF9zZXJ2ZXIKICAgICAg
ICAgcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIgPSBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIKKyAg
ICAgICAgcG9ydC5zdG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IHN0b3Bfd2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyCiAKICAgICAgICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBzZWxmLmh0dHBf
c3RvcHBlZCA9IHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tldF9zdG9wcGVk
ID0gRmFsc2UKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCA9
IHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQgPSBGYWxzZQogICAgICAgICBy
dW5uZXIgPSBzZWxmLl9ydW5uZXIocG9ydD1wb3J0KQogICAgICAgICBydW5uZXIuX25lZWRzX2h0
dHAgPSBUcnVlCiAgICAgICAgIHJ1bm5lci5fbmVlZHNfd2Vic29ja2V0cyA9IEZhbHNlCisgICAg
ICAgIHJ1bm5lci5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gRmFsc2UKICAgICAg
ICAgcnVubmVyLnN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKG51bWJlcl9vZl9zZXJ2ZXJzPTQpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0YXJ0ZWQsIFRydWUpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCwgRmFsc2UpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCwg
RmFsc2UpCiAgICAgICAgIHJ1bm5lci5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RvcHBlZCwgVHJ1ZSkKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdG9wcGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkLCBGYWxzZSkK
IAogICAgICAgICBzZWxmLmh0dHBfc3RhcnRlZCA9IHNlbGYuaHR0cF9zdG9wcGVkID0gc2VsZi53
ZWJzb2NrZXRfc3RhcnRlZCA9IHNlbGYud2Vic29ja2V0X3N0b3BwZWQgPSBGYWxzZQorICAgICAg
ICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVkID0gc2VsZi53ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5fbmVlZHNfaHR0
cCA9IFRydWUKICAgICAgICAgcnVubmVyLl9uZWVkc193ZWJzb2NrZXRzID0gVHJ1ZQorICAgICAg
ICBydW5uZXIuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IEZhbHNlCiAgICAgICAg
IHJ1bm5lci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhudW1iZXJfb2Zfc2VydmVycz00KQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdGFydGVkLCBUcnVlKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIFRydWUpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCwgRmFs
c2UpCiAgICAgICAgIHJ1bm5lci5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RvcHBlZCwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLndlYnNvY2tldF9zdG9wcGVkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQsIEZhbHNlKQorCisg
ICAgICAgIHNlbGYuaHR0cF9zdGFydGVkID0gc2VsZi5odHRwX3N0b3BwZWQgPSBzZWxmLndlYnNv
Y2tldF9zdGFydGVkID0gc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHNl
bGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlcl9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgcnVubmVyLl9uZWVkc19odHRwID0g
RmFsc2UKKyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJzb2NrZXRzID0gRmFsc2UKKyAgICAgICAg
cnVubmVyLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBGYWxzZQorICAgICAgICBy
dW5uZXIuc3RhcnRfc2VydmVyc193aXRoX2xvY2sobnVtYmVyX29mX3NlcnZlcnM9NCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RhcnRlZCwgRmFsc2UpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCwgRmFsc2UpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCwgRmFs
c2UpCisgICAgICAgIHJ1bm5lci5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RvcHBlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCwgRmFsc2UpCiAK
ICAgICAgICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBzZWxmLmh0dHBfc3RvcHBlZCA9IHNlbGYud2Vi
c29ja2V0X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tldF9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAg
c2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2ViX3BsYXRmb3Jt
X3Rlc3Rfc2VydmVyX3N0b3BwZWQgPSBGYWxzZQogICAgICAgICBydW5uZXIuX25lZWRzX2h0dHAg
PSBGYWxzZQogICAgICAgICBydW5uZXIuX25lZWRzX3dlYnNvY2tldHMgPSBGYWxzZQorICAgICAg
ICBydW5uZXIuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IFRydWUKICAgICAgICAg
cnVubmVyLnN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKG51bWJlcl9vZl9zZXJ2ZXJzPTQpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0YXJ0ZWQsIEZhbHNlKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIEZhbHNlKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQsIFRy
dWUpCiAgICAgICAgIHJ1bm5lci5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RvcHBlZCwgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCwgVHJ1ZSkKIAog
CiBjbGFzcyBTaGFyZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIu
cHkKaW5kZXggNWQ2ODYxMmUwOWM0ZWU0YmZlZjUzMjA2NjRiMzI4ZTMxMmZlMTE1Ni4uNzQxZTA3
OGQxN2M0NTJjYjQyODg1ZDk3YzhmZWIxYzgzYjVlYjUzYSAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5
CkBAIC04MCw2ICs4MCw3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5I
VFRQX1NVQkRJUiA9ICdodHRwJyArIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgogICAgICAgICBz
ZWxmLlBFUkZfU1VCRElSID0gJ3BlcmYnCiAgICAgICAgIHNlbGYuV0VCU09DS0VUX1NVQkRJUiA9
ICd3ZWJzb2NrZXQnICsgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SCisgICAgICAgIHNlbGYud2Vi
X3BsYXRmb3JtX3Rlc3Rfc3ViZGlyID0gc2VsZi5fcG9ydC53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2
ZXJfZG9jX3Jvb3QoKSArIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgogICAgICAgICBzZWxmLkxB
WU9VVF9URVNUU19ESVJFQ1RPUlkgPSAnTGF5b3V0VGVzdHMnCiAKICAgICAgICAgIyBkaXNhYmxl
IHdzcyBzZXJ2ZXIuIG5lZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wgb24gYnVpbGRib3RzLgpAQCAt
OTQsMTEgKzk1LDE0IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNl
bGYuX2ZpbmRlci5maW5kX3Rlc3RzKHNlbGYuX29wdGlvbnMsIGFyZ3MpCiAKICAgICBkZWYgX2lz
X2h0dHBfdGVzdChzZWxmLCB0ZXN0KToKLSAgICAgICAgcmV0dXJuIHNlbGYuSFRUUF9TVUJESVIg
aW4gdGVzdCBvciBzZWxmLl9pc193ZWJzb2NrZXRfdGVzdCh0ZXN0KQorICAgICAgICByZXR1cm4g
KHNlbGYuSFRUUF9TVUJESVIgaW4gdGVzdCBvciBzZWxmLl9pc193ZWJzb2NrZXRfdGVzdCh0ZXN0
KSBvciBzZWxmLl9pc193ZWJfcGxhdGZvcm1fdGVzdCh0ZXN0KSkKIAogICAgIGRlZiBfaXNfd2Vi
c29ja2V0X3Rlc3Qoc2VsZiwgdGVzdCk6CiAgICAgICAgIHJldHVybiBzZWxmLldFQlNPQ0tFVF9T
VUJESVIgaW4gdGVzdAogCisgICAgZGVmIF9pc193ZWJfcGxhdGZvcm1fdGVzdChzZWxmLCB0ZXN0
KToKKyAgICAgICAgcmV0dXJuIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc3ViZGlyIGluIHRlc3QK
KwogICAgIGRlZiBfaHR0cF90ZXN0cyhzZWxmLCB0ZXN0X25hbWVzKToKICAgICAgICAgcmV0dXJu
IHNldCh0ZXN0IGZvciB0ZXN0IGluIHRlc3RfbmFtZXMgaWYgc2VsZi5faXNfaHR0cF90ZXN0KHRl
c3QpKQogCkBAIC0yNDYsNyArMjUwLDggQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcml6ZWRfcmVzdWx0cywg
aW5pdGlhbF9yZXN1bHRzLCByZXRyeV9yZXN1bHRzLCBlbmFibGVkX3BpeGVsX3Rlc3RzX2luX3Jl
dHJ5KQogCiAgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgdGVzdHNfdG9fcnVuLCB0ZXN0c190b19z
a2lwLCByZXBlYXRfZWFjaCwgaXRlcmF0aW9ucywgbnVtX3dvcmtlcnMsIHJldHJ5aW5nKToKLSAg
ICAgICAgbmVlZHNfaHR0cCA9IGFueShzZWxmLl9pc19odHRwX3Rlc3QodGVzdCkgZm9yIHRlc3Qg
aW4gdGVzdHNfdG9fcnVuKQorICAgICAgICBuZWVkc19odHRwID0gYW55KChzZWxmLl9pc19odHRw
X3Rlc3QodGVzdCkgYW5kIG5vdCBzZWxmLl9pc193ZWJfcGxhdGZvcm1fdGVzdCh0ZXN0KSkgZm9y
IHRlc3QgaW4gdGVzdHNfdG9fcnVuKQorICAgICAgICBuZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9z
ZXJ2ZXIgPSBhbnkoc2VsZi5faXNfd2ViX3BsYXRmb3JtX3Rlc3QodGVzdCkgZm9yIHRlc3QgaW4g
dGVzdHNfdG9fcnVuKQogICAgICAgICBuZWVkc193ZWJzb2NrZXRzID0gYW55KHNlbGYuX2lzX3dl
YnNvY2tldF90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKIAogICAgICAgICB0
ZXN0X2lucHV0cyA9IFtdCkBAIC0yNTQsNyArMjU5LDcgQEAgY2xhc3MgTWFuYWdlcihvYmplY3Qp
OgogICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHNfdG9fcnVuOgogICAgICAgICAgICAgICAg
IGZvciBfIGluIHhyYW5nZShyZXBlYXRfZWFjaCk6CiAgICAgICAgICAgICAgICAgICAgIHRlc3Rf
aW5wdXRzLmFwcGVuZChzZWxmLl90ZXN0X2lucHV0X2Zvcl9maWxlKHRlc3QpKQotICAgICAgICBy
ZXR1cm4gc2VsZi5fcnVubmVyLnJ1bl90ZXN0cyhzZWxmLl9leHBlY3RhdGlvbnMsIHRlc3RfaW5w
dXRzLCB0ZXN0c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVlZHNfd2Vic29j
a2V0cywgcmV0cnlpbmcpCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5uZXIucnVuX3Rlc3RzKHNl
bGYuX2V4cGVjdGF0aW9ucywgdGVzdF9pbnB1dHMsIHRlc3RzX3RvX3NraXAsIG51bV93b3JrZXJz
LCBuZWVkc19odHRwLCBuZWVkc193ZWJzb2NrZXRzLCBuZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9z
ZXJ2ZXIsIHJldHJ5aW5nKQogCiAgICAgZGVmIF9jbGVhbl91cF9ydW4oc2VsZik6CiAgICAgICAg
IF9sb2cuZGVidWcoIkZsdXNoaW5nIHN0ZG91dCIpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91
bml0dGVzdC5weQppbmRleCAzYWVmYzNkNmNkNDc5NmM3MjkzNzA0MDgxNTA4MmUzNzNlMGM3MWQ1
Li5jZjFhMWU5ZmVkODhmMmJjYThkZjY1MWUzNjc1MTJiYTNkZjg3NTAwIDEwMDY0NAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3Vu
aXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkKQEAgLTQzLDkgKzQzLDEzIEBAIGZyb20gd2Via2l0
cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKIAogY2xhc3MgTWFuYWdlclRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X25lZWRzX3NlcnZlcnMoc2VsZik6Cisg
ICAgICAgIGRlZiBnZXRfd3B0X2RvY19yb290KCk6CisgICAgICAgICAgICByZXR1cm4gJ2ltcG9y
dGVkL3czYy93cHQnCisKICAgICAgICAgZGVmIGdldF9tYW5hZ2VyKCk6CiAgICAgICAgICAgICBw
b3J0ID0gTW9jaygpICAjIEZJWE1FOiBVc2UgYSB0aWdodGVyIG1vY2suCiAgICAgICAgICAgICBw
b3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IgPSAnLycKKyAgICAgICAgICAgIHBvcnQud2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyX2RvY19yb290ID0gZ2V0X3dwdF9kb2Nfcm9vdAogICAgICAgICAgICAg
bWFuYWdlciA9IE1hbmFnZXIocG9ydCwgb3B0aW9ucz1Nb2NrT3B0aW9ucyhodHRwPVRydWUsIG1h
eF9sb2NrZWRfc2hhcmRzPTEpLCBwcmludGVyPU1vY2soKSkKICAgICAgICAgICAgIHJldHVybiBt
YW5hZ2VyCiAKQEAgLTU1LDYgKzU5LDEyIEBAIGNsYXNzIE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgbWFuYWdlciA9IGdldF9tYW5hZ2VyKCkKICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKG1hbmFnZXIubmVlZHNfc2VydmVycyhbJ2h0dHAvdGVzdHMvbWlzYyddKSkKIAor
ICAgICAgICBtYW5hZ2VyID0gZ2V0X21hbmFnZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
bWFuYWdlci5uZWVkc19zZXJ2ZXJzKFsnaW1wb3J0ZWQvdzNjL3dwdC90ZXN0J10pKQorCisgICAg
ICAgIG1hbmFnZXIgPSBnZXRfbWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWFu
YWdlci5uZWVkc19zZXJ2ZXJzKFsnaW1wb3J0ZWQvdzNjJ10pKQorCiAgICAgZGVmIGludGVncmF0
aW9uX3Rlc3RfbmVlZHNfc2VydmVycyhzZWxmKToKICAgICAgICAgZGVmIGdldF9tYW5hZ2VyKCk6
CiAgICAgICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKb2xkIG1vZGUgMTAw
NjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBjMTQzMDU2YWE4ZTNjNzA4ZjkxNmI0NTAxMDA5NDdl
MTk4NjMzNzBkLi41MGY3MmM5MmFkMDZlMWJmZjRlZmY2YWM4ZjUxZWM0NWRjMTA1MTVhCi0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
cy5weQpAQCAtMjk1LDYgKzI5NSwxMCBAQCBkZWYgcGFyc2VfYXJncyhhcmdzKToKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiY29uZmlndXJhdGlvbnMuIERvZXMgbm90IHJ1biBhbnkgdGVz
dHMuIikpLAogICAgIF0pKQogCisgICAgb3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgo
IldlYiBQbGF0Zm9ybSBUZXN0IFNlcnZlciBPcHRpb25zIiwgWworICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbigiLS13cHRzZXJ2ZXItZG9jLXJvb3QiLCB0eXBlPSJzdHJpbmciLCBoZWxwPSgi
U2V0IHdlYiBwbGF0Zm9ybSBzZXJ2ZXIgZG9jdW1lbnQgcm9vdCwgcmVsYXRpdmUgdG8gTGF5b3V0
VGVzdHMgZGlyZWN0b3J5IikpLAorICAgIF0pKQorCiAgICAgIyBGSVhNRTogTW92ZSB0aGVzZSBp
bnRvIGpzb25fcmVzdWx0c19nZW5lcmF0b3IucHkKICAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlv
bnMuYXBwZW5kKCgiUmVzdWx0IEpTT04gT3B0aW9ucyIsIFsKICAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oIi0tbWFzdGVyLW5hbWUiLCBoZWxwPSJUaGUgbmFtZSBvZiB0aGUgYnVpbGRib3Qg
bWFzdGVyLiIpLApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9sYXVuY2hlci5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNoZXIu
cHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZWFhYWE5ZDJhMWJiMDBlZmMyN2M1N2I1NDBjYzRlNDMyMzA2MmI3Mwot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Nl
cnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNoZXIucHkKQEAgLTAsMCArMSw1NiBAQAorIyAg
Q29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMgIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIyAgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVz
IG9mCisjICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyMgIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorIyAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisjICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyAgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBv
cnQgb3B0cGFyc2UKK2ltcG9ydCBvcworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25h
bWVfXykKK2xvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisjIFRoaXMgc2NyaXB0IGlz
IHVzZWQgdG8gbGF1bmNoIHRoZSB3ZWIgcGxhdGZvcm0gdGVzdCBzZXJ2ZXIgbWFpbiBzY3JpcHQg
KHNlcnZlLnB5KSBhbmQgc3RvcCBpdCB3aGVuIGFza2VkIGJ5IHJ1bi13ZWJraXQtdGVzdHMKKwor
c3lzLnBhdGguaW5zZXJ0KDEsICIuIikKK2ltcG9ydCBzZXJ2ZSBhcyBXZWJQbGF0Zm9ybVRlc3RT
ZXJ2ZXIKKworCitkZWYgbWFpbihhcmd2LCBzdGRvdXQsIHN0ZGVycik6CisgICAgIyBUaGlzIGlz
IGEgY29weSBvZiBzZXJ2ZS5weSBtYWluIGZ1bmN0aW9uLCBleGNlcHQgZm9yIHRoZSB3YWl0IHN0
ZXAKKyAgICBjb25maWcgPSBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIubG9hZF9jb25maWcoImNvbmZp
Zy5kZWZhdWx0Lmpzb24iLCAiY29uZmlnLmpzb24iKQorICAgIFdlYlBsYXRmb3JtVGVzdFNlcnZl
ci5sb2dnZXIgPSBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuZGVmYXVsdF9sb2dnZXIoY29uZmlnWyJs
b2dfbGV2ZWwiXSkKKyAgICBjb25maWdfLCBzdGFydGVkX3NlcnZlcnMgPSBXZWJQbGF0Zm9ybVRl
c3RTZXJ2ZXIuc3RhcnQoY29uZmlnKQorCisgICAgZm9yIHByb3RvY29sLCBzZXJ2ZXJzIGluIHN0
YXJ0ZWRfc2VydmVycy5pdGVtcygpOgorICAgICAgICBmb3IgcG9ydCwgcHJvY2VzcyBpbiBzZXJ2
ZXJzOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIiVzLCBwb3J0OiVkLCBwaWQ6JWQiICUgKHBy
b3RvY29sLCBwb3J0LCBwcm9jZXNzLnByb2MucGlkKSkKKworICAgICMgV2FpdCB1bnRpbDoKKyAg
ICAjIDEuIHVzZXIgcHJlc3NlcyBlbnRlciAoaW4gY2FzZSBzY3JpcHQgZXhlY3V0ZWQgaW4gY29t
bWFuZCBsaW5lKQorICAgICMgMi4gdGhlIG1hc3RlciBwcm9jZXNzIHNlbmRzIGVudGVyIChyZWd1
bGFyIHN0b3AgY29tbWFuZCkKKyAgICAjIDMuIHRoZSBtYXN0ZXIgcHJvY2VzcyBpcyBzdG9wcGVk
IChhbmQgc3RkaW4gaXMgY2xvc2VkKQorICAgIHN5cy5zdGRpbi5yZWFkKDEpCisKKworaWYgX19u
YW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSwgc3lz
LnN0ZG91dCwgc3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3ZmY3MmU1M2Y0OTVmYTAzNzgxODhhMjY1MjZkOTBkMjVl
ZTNlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5weQpAQCAtMCwwICsxLDEyMiBA
QAorIyAgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMgIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIyAgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhl
IG5hbWVzIG9mCisjICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyMgIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyAgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMg
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisjICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyAgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3Vi
cHJvY2VzcworaW1wb3J0IHN5cworCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJz
IGltcG9ydCBodHRwX3NlcnZlcl9iYXNlCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25h
bWVfXykKKworCitkZWYgZG9jX3Jvb3QocG9ydCk6CisgICAgZG9jX3Jvb3QgPSBwb3J0LmdldF9v
cHRpb24oIndwdHNlcnZlcl9kb2Nfcm9vdCIpCisgICAgaWYgZG9jX3Jvb3QgaXMgTm9uZToKKyAg
ICAgICAgcmV0dXJuIHBvcnQuaG9zdC5maWxlc3lzdGVtLmpvaW4oImltcG9ydGVkIiwgInczYyIs
ICJ3cHQiKQorICAgIHJldHVybiBkb2Nfcm9vdAorCisKK2NsYXNzIFdlYlBsYXRmb3JtVGVzdFNl
cnZlcihodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydF9vYmosIG5hbWUsIG91dHB1dF9kaXIsIHBpZGZpbGU9Tm9uZSk6CisgICAgICAg
ICIiIkFyZ3M6CisgICAgICAgICAgb3V0cHV0X2RpcjogdGhlIGFic29sdXRlIHBhdGggdG8gdGhl
IGxheW91dCB0ZXN0IHJlc3VsdCBkaXJlY3RvcnkKKyAgICAgICAgIiIiCisgICAgICAgIGh0dHBf
c2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18oc2VsZiwgcG9ydF9vYmopCisgICAg
ICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisKKyAgICAgICAgc2VsZi5fbmFtZSA9
IG5hbWUKKyAgICAgICAgc2VsZi5fbG9nX2ZpbGVfbmFtZSA9ICclc19wcm9jZXNzX2xvZy5vdXQu
dHh0JyAlIChzZWxmLl9uYW1lKQorCisgICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQorICAgICAg
ICBzZWxmLl9wcm9jZXNzID0gTm9uZQorICAgICAgICBzZWxmLl9waWRfZmlsZSA9IHBpZGZpbGUK
KyAgICAgICAgaWYgbm90IHNlbGYuX3BpZF9maWxlOgorICAgICAgICAgICAgc2VsZi5fcGlkX2Zp
bGUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fcnVudGltZV9wYXRoLCAnJXMucGlkJyAl
IHNlbGYuX25hbWUpCisgICAgICAgIHNlbGYuX3N0ZG91dF9kYXRhID0gTm9uZQorICAgICAgICBz
ZWxmLl9zdGRlcnJfZGF0YSA9IE5vbmUKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHBvcnRf
b2JqLmhvc3QuZmlsZXN5c3RlbQorICAgICAgICBzZWxmLl9sYXlvdXRfcm9vdCA9IHBvcnRfb2Jq
LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgiTGF5b3V0VGVzdHMiKQorICAgICAgICBzZWxmLl9kb2Nf
cm9vdCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9sYXlvdXRfcm9vdCwgZG9jX3Jvb3Qo
cG9ydF9vYmopKQorCisgICAgICAgIHNlbGYuX3Jlc291cmNlc19maWxlc190b19jb3B5ID0gWyd0
ZXN0aGFybmVzcy5qcycsICd0ZXN0aGFybmVzcy5jc3MnLCAndGVzdGhhcm5lc3NyZXBvcnQuanMn
XQorCisgICAgICAgIHNlbGYuX3NldF9zdGFydF9jbWQocG9ydF9vYmopCisKKyAgICBkZWYgX3Nl
dF9zdGFydF9jbWQoc2VsZiwgcG9ydF9vYmopOgorICAgICAgICBmaWxlX3BhdGggPSBzZWxmLl9m
aWxlc3lzdGVtLmFic3BhdGgoc2VsZi5fZmlsZXN5c3RlbS5zcGxpdChfX2ZpbGVfXylbMF0pCisg
ICAgICAgIHNlbGYuX3N0YXJ0X2NtZCA9IFsicHl0aG9uIiwgc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KGZpbGVfcGF0aCwgIndlYl9wbGF0Zm9ybV90ZXN0X2xhdW5jaGVyLnB5IildCisgICAgICAgIHNl
bGYuX2N3ZCA9IHBvcnRfb2JqLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgiTGF5b3V0VGVzdHMiLCBz
ZWxmLl9kb2Nfcm9vdCkKKworICAgIGRlZiBfY29weV93ZWJraXRfdGVzdF9maWxlcyhzZWxmKToK
KyAgICAgICAgX2xvZy5kZWJ1ZygnQ29weWluZyBXZWJLaXQgcmVzb3VyY2VzIGZpbGVzJykKKyAg
ICAgICAgZm9yIGYgaW4gc2VsZi5fcmVzb3VyY2VzX2ZpbGVzX3RvX2NvcHk6CisgICAgICAgICAg
ICB3ZWJraXRfZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0X3Jv
b3QsICJyZXNvdXJjZXMiLCBmKQorICAgICAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5pc2Zp
bGUod2Via2l0X2ZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLmNv
cHlmaWxlKHdlYmtpdF9maWxlbmFtZSwgc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2RvY19y
b290LCAicmVzb3VyY2VzIiwgZikpCisgICAgICAgIF9sb2cuZGVidWcoJ0NvcHlpbmcgV2ViS2l0
IHdlYiBwbGF0Zm9ybSBzZXJ2ZXIgY29uZmlnLmpzb24nKQorICAgICAgICBjb25maWdfd2tfZmls
ZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0X3Jvb3QsICJpbXBvcnRl
ZCIsICJ3M2MiLCAicmVzb3VyY2VzIiwgImNvbmZpZy5qc29uIikKKyAgICAgICAgaWYgc2VsZi5f
ZmlsZXN5c3RlbS5pc2ZpbGUoY29uZmlnX3drX2ZpbGVuYW1lKToKKyAgICAgICAgICAgIHNlbGYu
X2ZpbGVzeXN0ZW0uY29weWZpbGUoY29uZmlnX3drX2ZpbGVuYW1lLCBzZWxmLl9maWxlc3lzdGVt
LmpvaW4oc2VsZi5fZG9jX3Jvb3QsICJjb25maWcuanNvbiIpKQorCisgICAgZGVmIF9jbGVhbl93
ZWJraXRfdGVzdF9maWxlcyhzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1ZygnQ2xlYW5pbmcgV1BU
IHJlc291cmNlcyBmaWxlcycpCisgICAgICAgIGZvciBmIGluIHNlbGYuX3Jlc291cmNlc19maWxl
c190b19jb3B5OgorICAgICAgICAgICAgd3B0X2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5q
b2luKHNlbGYuX2RvY19yb290LCAicmVzb3VyY2VzIiwgZikKKyAgICAgICAgICAgIGlmIHNlbGYu
X2ZpbGVzeXN0ZW0uaXNmaWxlKHdwdF9maWxlbmFtZSk6CisgICAgICAgICAgICAgICAgc2VsZi5f
ZmlsZXN5c3RlbS5yZW1vdmUod3B0X2ZpbGVuYW1lKQorICAgICAgICBfbG9nLmRlYnVnKCdDbGVh
bmluZyBXUFQgd2ViIHBsYXRmb3JtIHNlcnZlciBjb25maWcuanNvbicpCisgICAgICAgIGNvbmZp
Z193cHRfZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fZG9jX3Jvb3QsICJj
b25maWcuanNvbiIpCisgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uaXNmaWxlKGNvbmZpZ193
cHRfZmlsZW5hbWUpOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUoY29uZmln
X3dwdF9maWxlbmFtZSkKKworICAgIGRlZiBfcHJlcGFyZV9jb25maWcoc2VsZik6CisgICAgICAg
IGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYuX291dHB1dF9kaXIpOgorICAgICAgICAg
ICAgb3V0cHV0X2xvZyA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9vdXRwdXRfZGlyLCBz
ZWxmLl9sb2dfZmlsZV9uYW1lKQorICAgICAgICAgICAgc2VsZi5fd3NvdXQgPSBzZWxmLl9maWxl
c3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKG91dHB1dF9sb2cpCisgICAgICAgIHNl
bGYuX2NvcHlfd2Via2l0X3Rlc3RfZmlsZXMoKQorCisgICAgZGVmIF9zcGF3bl9wcm9jZXNzKHNl
bGYpOgorICAgICAgICBzZWxmLl9zdGRvdXRfZGF0YSA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3Rk
ZXJyX2RhdGEgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3dzb3V0OgorICAgICAgICAgICAgc2Vs
Zi5fcHJvY2VzcyA9IHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihzZWxmLl9zdGFydF9jbWQsIGN3ZD1z
ZWxmLl9jd2QsIHNoZWxsPUZhbHNlLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zZWxm
Ll93c291dCwgc3RkZXJyPXNlbGYuX3dzb3V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
c2VsZi5fcHJvY2VzcyA9IHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihzZWxmLl9zdGFydF9jbWQsIGN3
ZD1zZWxmLl9jd2QsIHNoZWxsPUZhbHNlLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1z
dWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgc2VsZi5f
ZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5fcGlkX2ZpbGUsIHN0cihzZWxmLl9wcm9j
ZXNzLnBpZCkpCisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jZXNzLnBpZAorCisgICAgZGVmIF9z
dG9wX3J1bm5pbmdfc2VydmVyKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyAl
cyBzZXJ2ZXInICUgKHNlbGYuX25hbWUpKQorICAgICAgICBzZWxmLl9jbGVhbl93ZWJraXRfdGVz
dF9maWxlcygpCisgICAgICAgIGlmIHNlbGYuX3BpZCBhbmQgbm90IHNlbGYuX2V4ZWN1dGl2ZS5j
aGVja19ydW5uaW5nX3BpZChzZWxmLl9waWQpOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3Rl
bS5yZW1vdmUoc2VsZi5fcGlkX2ZpbGUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYg
c2VsZi5fcHJvY2VzczoKKyAgICAgICAgICAgIChzZWxmLl9zdGRvdXRfZGF0YSwgc2VsZi5fc3Rk
ZXJyX2RhdGEpID0gc2VsZi5fcHJvY2Vzcy5jb21tdW5pY2F0ZShpbnB1dD0nXG4nKQorICAgICAg
ICBpZiBzZWxmLl93c291dDoKKyAgICAgICAgICAgIHNlbGYuX3dzb3V0LmNsb3NlKCkKKyAgICAg
ICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9leGVjdXRpdmUuY2hl
Y2tfcnVubmluZ19waWQoc2VsZi5fcGlkKToKKyAgICAgICAgICAgIHJhaXNlIGh0dHBfc2VydmVy
X2Jhc2UuU2VydmVyRXJyb3IoJ0ZhaWxlZCB0byBzdG9wICVzOiBwbGVhc2UgZ28gdG8gd2ViIHBs
YXRmb3JtIHRlc3Qgc2VydmVyIGxvZyBmaWxlIHRvIGdldCB0aGUgUElEIGxpc3QnICUgKHNlbGYu
X25hbWUpKQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZShzZWxmLl9waWRfZmlsZSkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMv
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfdW5pdHRl
c3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGRmOTcyYTJiZjQzZjY5NjUwZTY4ODA0NGYyMGRkNzkwODYzNjAw
MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEs
NDQgQEAKKyMgIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjICAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMgIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9y
IHRoZSBuYW1lcyBvZgorIyAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjICBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisjICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjICBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjICBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKKyMgIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorIyAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdGltZQoraW1wb3J0IHVu
aXR0ZXN0MiBhcyB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21vY2sgaW1w
b3J0IE1vY2tIb3N0Citmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IFBvcnQKK2Zyb20gd2Via2l0
cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKKworZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMuc2VydmVycy53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgaW1wb3J0IFdlYlBsYXRm
b3JtVGVzdFNlcnZlcgorCisKK2NsYXNzIFRlc3RXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIodW5pdHRl
c3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3N0YXJ0X2NtZChzZWxmKToKKworICAgICAgICBw
b3J0ID0gUG9ydChNb2NrSG9zdCgpLCAidGVzdCIpCisgICAgICAgIHNlcnZlciA9IFdlYlBsYXRm
b3JtVGVzdFNlcnZlcihwb3J0LCAid3B0dGVzdCIsICIvbW9jay9vdXRwdXRfZGlyIiwgIi9tb2Nr
L291dHB1dF9kaXIvcGlkLnR4dCIpCisKKyAgICAgICAgc2VydmVyLl9wcmVwYXJlX2NvbmZpZygp
CisgICAgICAgIHNlcnZlci5fd3NvdXQgPSBOb25lCisgICAgICAgIHNlcnZlci5fc3Bhd25fcHJv
Y2VzcygpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgc2VydmVyLl9zdG9wX3J1bm5p
bmdfc2VydmVyKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNl
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKaW5kZXggNjY1NjM0MTU5
NDQ2NzQyOTZkYTk0MTQwOTAxZWU3NjFhMDFkNDc1OC4uMzgyZjAwNDg1ZmIzNzVhNjM2ZjhkYTRh
ZTUyZDk3NGNhZjIxY2U5NCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKQEAgLTY1
LDYgKzY1LDcgQEAgZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcwogZnJv
bSB3ZWJraXRweS5wb3J0LmZhY3RvcnkgaW1wb3J0IFBvcnRGYWN0b3J5CiBmcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBhcGFjaGVfaHR0cF9zZXJ2ZXIKIGZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyCitmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIK
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IHdlYnNvY2tldF9zZXJ2
ZXIKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtMTIyLDYgKzEyMyw3
IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgc2VsZi5faGVscGVyID0gTm9uZQogICAg
ICAgICBzZWxmLl9odHRwX3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5fd2Vic29ja2V0X3Nl
cnZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gTm9u
ZQogICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3NlcnZl
cl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gc2VydmVyX3Byb2Nlc3MuU2VydmVyUHJvY2VzcyAgIyBv
dmVycmlkYWJsZSBmb3IgdGVzdGluZwogICAgICAgICBzZWxmLl9odHRwX2xvY2sgPSBOb25lICAj
IEZJWE1FOiBXaHkgZG9lcyB0aGlzIGxpdmUgb24gdGhlIHBvcnQgb2JqZWN0PwpAQCAtOTAzLDYg
KzkwNSwxOCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNlcnZlci5zdGFydCgpCiAg
ICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIgPSBzZXJ2ZXIKIAorICAgIGRlZiBzdGFydF93
ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoc2VsZiwgYWRkaXRpb25hbF9kaXJzPU5vbmUsIG51bWJl
cl9vZl9zZXJ2ZXJzPU5vbmUpOgorICAgICAgICAiIiJTdGFydCBhIHdlYiBzZXJ2ZXIuIFJhaXNl
IGFuIGVycm9yIGlmIGl0IGNhbid0IHN0YXJ0IG9yIGlzIGFscmVhZHkgcnVubmluZy4KKworICAg
ICAgICBQb3J0cyBjYW4gc3R1YiB0aGlzIG91dCBpZiB0aGV5IGRvbid0IG5lZWQgYSB3ZWIgc2Vy
dmVyIHRvIGJlIHJ1bm5pbmcuIiIiCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fd2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyLCAnQWxyZWFkeSBydW5uaW5nIGEgV2ViIFBsYXRmb3JtIFRlc3Qgc2Vy
dmVyLicKKworICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSB3ZWJfcGxh
dGZvcm1fdGVzdF9zZXJ2ZXIuV2ViUGxhdGZvcm1UZXN0U2VydmVyKHNlbGYsICJ3cHR3ayIsIHNl
bGYucmVzdWx0c19kaXJlY3RvcnkoKSkKKyAgICAgICAgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyLnN0YXJ0KCkKKworICAgIGRlZiB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfZG9jX3Jv
b3Qoc2VsZik6CisgICAgICAgIHJldHVybiB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIuZG9jX3Jv
b3Qoc2VsZikKKwogICAgIGRlZiBodHRwX3NlcnZlcl9zdXBwb3J0c19pcHY2KHNlbGYpOgogICAg
ICAgICAjIEN5Z3dpbiBpcyB0aGUgb25seSBwbGF0Zm9ybSB0byBzdGlsbCB1c2UgQXBhY2hlIDEu
Mywgd2hpY2ggb25seSBzdXBwb3J0cyBJUFY0LgogICAgICAgICAjIE9uY2UgaXQgbW92ZXMgdG8g
QXBhY2hlIDIsIHdlIGNhbiBkcm9wIHRoaXMgbWV0aG9kIGFsdG9nZXRoZXIuCkBAIC05MzIsNiAr
OTQ2LDEyIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX3dlYnNvY2tl
dF9zZXJ2ZXIuc3RvcCgpCiAgICAgICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyID0gTm9u
ZQogCisgICAgZGVmIHN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKHNlbGYpOgorICAgICAg
ICAiIiJTaHV0IGRvd24gdGhlIHdlYiBwbGF0Zm9ybSB0ZXN0IHNlcnZlciBpZiBpdCBpcyBydW5u
aW5nLiBEbyBub3RoaW5nIGlmIGl0IGlzbid0LiIiIgorICAgICAgICBpZiBzZWxmLl93ZWJfcGxh
dGZvcm1fdGVzdF9zZXJ2ZXI6CisgICAgICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9z
ZXJ2ZXIuc3RvcCgpCisgICAgICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIg
PSBOb25lCisKICAgICBkZWYgcmVsZWFzZV9odHRwX2xvY2soc2VsZik6CiAgICAgICAgIGlmIHNl
bGYuX2h0dHBfbG9jazoKICAgICAgICAgICAgIHNlbGYuX2h0dHBfbG9jay5jbGVhbnVwX2h0dHBf
bG9jaygpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQpvbGQgbW9kZSAxMDA2NDQK
bmV3IG1vZGUgMTAwNzU1CmluZGV4IGYwMzhmMmE2MTE5NjVkMzlhMzZlOWYwZDRmZGIxOTY2NWMy
NWEwODEuLmEyZDI1YzBiNWI5ZDQ5NDVlNDNkMjNkM2IwMDQxN2NkYzViNzk3ZDAKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZHJpdmVyLnB5CkBAIC0xNTcsNiArMTU3LDggQEAgY2xhc3MgRHJpdmVyKG9i
amVjdCk6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9wcm9maWxlciA9IE5vbmUK
IAorICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2RpciA9IHNlbGYuX3BvcnQud2ViX3Bs
YXRmb3JtX3Rlc3Rfc2VydmVyX2RvY19yb290KCkgKyAiLyIKKwogICAgIGRlZiBfX2RlbF9fKHNl
bGYpOgogICAgICAgICBzZWxmLnN0b3AoKQogCkBAIC0yMzAsMTIgKzIzMiwyMCBAQCBjbGFzcyBE
cml2ZXIob2JqZWN0KToKIAogICAgIEhUVFBfRElSID0gImh0dHAvdGVzdHMvIgogICAgIEhUVFBf
TE9DQUxfRElSID0gImh0dHAvdGVzdHMvbG9jYWwvIgorICAgICMgQW55IGNoYW5nZSB0byBXUFRf
QkFTRV9VUkwgc2hvdWxkIGJlIHN5bmNlZCB3aXRoIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9y
ZXNvdXJjZXMvY29uZmlnLmpzb24KKyAgICBXUFRfQkFTRV9VUkwgPSAiaHR0cDovL2xvY2FsaG9z
dDo4ODAwLyIKIAogICAgIGRlZiBpc19odHRwX3Rlc3Qoc2VsZiwgdGVzdF9uYW1lKToKICAgICAg
ICAgcmV0dXJuIHRlc3RfbmFtZS5zdGFydHN3aXRoKHNlbGYuSFRUUF9ESVIpIGFuZCBub3QgdGVz
dF9uYW1lLnN0YXJ0c3dpdGgoc2VsZi5IVFRQX0xPQ0FMX0RJUikKIAorICAgIGRlZiBpc193ZWJf
cGxhdGZvcm1fdGVzdChzZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICByZXR1cm4gdGVzdF9uYW1l
LnN0YXJ0c3dpdGgoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9kaXIpCisKICAgICBkZWYgdGVzdF90
b191cmkoc2VsZiwgdGVzdF9uYW1lKToKICAgICAgICAgIiIiQ29udmVydCBhIHRlc3QgbmFtZSB0
byBhIFVSSS4iIiIKKyAgICAgICAgaWYgc2VsZi5pc193ZWJfcGxhdGZvcm1fdGVzdCh0ZXN0X25h
bWUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuV1BUX0JBU0VfVVJMICsgdGVzdF9uYW1lW2xl
bihzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2Rpcik6XQorCiAgICAgICAgIGlmIG5vdCBzZWxmLmlz
X2h0dHBfdGVzdCh0ZXN0X25hbWUpOgogICAgICAgICAgICAgcmV0dXJuIHBhdGguYWJzcGF0aF90
b191cmkoc2VsZi5fcG9ydC5ob3N0LnBsYXRmb3JtLCBzZWxmLl9wb3J0LmFic3BhdGhfZm9yX3Rl
c3QodGVzdF9uYW1lKSkKIApAQCAtMjU5LDYgKzI2OSw4IEBAIGNsYXNzIERyaXZlcihvYmplY3Qp
OgogICAgICAgICAgICAgaWYgbm90IHByZWZpeC5lbmRzd2l0aCgnLycpOgogICAgICAgICAgICAg
ICAgIHByZWZpeCArPSAnLycKICAgICAgICAgICAgIHJldHVybiB1cmlbbGVuKHByZWZpeCk6XQor
ICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aChzZWxmLldQVF9CQVNFX1VSTCk6CisgICAgICAgICAg
ICByZXR1cm4gdXJpLnJlcGxhY2Uoc2VsZi5XUFRfQkFTRV9VUkwsIHNlbGYud2ViX3BsYXRmb3Jt
X3Rlc3RfZGlyKQogICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cDovLyIpOgogICAgICAg
ICAgICAgcmV0dXJuIHVyaS5yZXBsYWNlKCdodHRwOi8vMTI3LjAuMC4xOjgwMDAvJywgc2VsZi5I
VFRQX0RJUikKICAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImh0dHBzOi8vIik6CkBAIC0zODcs
NyArMzk5LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgICMgRklYTUU6IHBlcmZv
cm1hbmNlIHRlc3RzIHBhc3MgaW4gZnVsbCBVUkxzIGluc3RlYWQgb2YgdGVzdCBuYW1lcy4KICAg
ICAgICAgaWYgZHJpdmVyX2lucHV0LnRlc3RfbmFtZS5zdGFydHN3aXRoKCdodHRwOi8vJykgb3Ig
ZHJpdmVyX2lucHV0LnRlc3RfbmFtZS5zdGFydHN3aXRoKCdodHRwczovLycpICBvciBkcml2ZXJf
aW5wdXQudGVzdF9uYW1lID09ICgnYWJvdXQ6YmxhbmsnKToKICAgICAgICAgICAgIGNvbW1hbmQg
PSBkcml2ZXJfaW5wdXQudGVzdF9uYW1lCi0gICAgICAgIGVsaWYgc2VsZi5pc19odHRwX3Rlc3Qo
ZHJpdmVyX2lucHV0LnRlc3RfbmFtZSk6CisgICAgICAgIGVsaWYgc2VsZi5pc19odHRwX3Rlc3Qo
ZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkgb3IgIHNlbGYuaXNfd2ViX3BsYXRmb3JtX3Rlc3QoZHJp
dmVyX2lucHV0LnRlc3RfbmFtZSk6CiAgICAgICAgICAgICBjb21tYW5kID0gc2VsZi50ZXN0X3Rv
X3VyaShkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAg
Y29tbWFuZCA9IHNlbGYuX3BvcnQuYWJzcGF0aF9mb3JfdGVzdChkcml2ZXJfaW5wdXQudGVzdF9u
YW1lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0
dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkK
aW5kZXggYjJmYzNmZTQ2ZWIwODUxNTA2ZjM1OTRkMjdlZjQ5OTgyMDFhMTk2My4uMmU2NjRmODkz
ODE1YWM1NzVhOWVhYzQ5OWRlODQxOTVkZDhiZDI5OSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5CkBAIC04Niw2ICs4Niw3IEBAIGNsYXNzIERy
aXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBwb3J0Ll9jb25maWcuYnVpbGRf
ZGlyZWN0b3J5ID0gbGFtYmRhIGNvbmZpZ3VyYXRpb246ICcvbW9jay1idWlsZCcKICAgICAgICAg
cmV0dXJuIHBvcnQKIAorCiAgICAgZGVmIF9hc3NlcnRfd3JhcHBlcihzZWxmLCB3cmFwcGVyX3N0
cmluZywgZXhwZWN0ZWRfd3JhcHBlcik6CiAgICAgICAgIHdyYXBwZXIgPSBEcml2ZXIoc2VsZi5t
YWtlX3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyh3cmFwcGVyPXdyYXBwZXJfc3RyaW5nKSksIE5v
bmUsIHBpeGVsX3Rlc3RzPUZhbHNlKS5fY29tbWFuZF93cmFwcGVyKCkKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCh3cmFwcGVyLCBleHBlY3RlZF93cmFwcGVyKQpAQCAtMTA5LDYgKzExMCw3IEBA
IGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGRyaXZlci50ZXN0X3RvX3VyaSgnZm9vL2Jhci5odG1sJyksICdmaWxlOi8vJXMvZm9v
L2Jhci5odG1sJyAlIHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGRyaXZlci50ZXN0X3RvX3VyaSgnaHR0cC90ZXN0cy9mb28uaHRtbCcpLCAnaHR0cDov
LzEyNy4wLjAuMTo4MDAwL2Zvby5odG1sJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2
ZXIudGVzdF90b191cmkoJ2h0dHAvdGVzdHMvc3NsL2Jhci5odG1sJyksICdodHRwczovLzEyNy4w
LjAuMTo4NDQzL3NzbC9iYXIuaHRtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVy
LnRlc3RfdG9fdXJpKCdpbXBvcnRlZC93M2Mvd3B0L2Zvby9iYXIuaHRtbCcpLCAnaHR0cDovL2xv
Y2FsaG9zdDo4ODAwL2Zvby9iYXIuaHRtbCcpCiAKICAgICBkZWYgdGVzdF91cmlfdG9fdGVzdChz
ZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKQEAgLTExNiw2ICsxMTgsNyBA
QCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChkcml2ZXIudXJpX3RvX3Rlc3QoJ2ZpbGU6Ly8lcy9mb28vYmFyLmh0bWwnICUgcG9y
dC5sYXlvdXRfdGVzdHNfZGlyKCkpLCAnZm9vL2Jhci5odG1sJykKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChkcml2ZXIudXJpX3RvX3Rlc3QoJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28uaHRt
bCcpLCAnaHR0cC90ZXN0cy9mb28uaHRtbCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJp
dmVyLnVyaV90b190ZXN0KCdodHRwczovLzEyNy4wLjAuMTo4NDQzL3NzbC9iYXIuaHRtbCcpLCAn
aHR0cC90ZXN0cy9zc2wvYmFyLmh0bWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZl
ci51cmlfdG9fdGVzdCgnaHR0cDovL2xvY2FsaG9zdDo4ODAwL2Zvby9iYXIuaHRtbCcpLCAnaW1w
b3J0ZWQvdzNjL3dwdC9mb28vYmFyLmh0bWwnKQogCiAgICAgZGVmIHRlc3RfcmVhZF9ibG9jayhz
ZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9yZXNvdXJjZXMvY29uZmlnLmpzb24gYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvcmVzb3VyY2VzL2NvbmZpZy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmYjMwZTAxYWJh
ZmQxNmRlOGRiMGUxMDk0ZGMwNGRmNDgzZDJhYWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2MvcmVzb3VyY2VzL2NvbmZpZy5qc29uCkBAIC0wLDAgKzEsNyBAQAor
eyJob3N0IjogImxvY2FsaG9zdCIsCisgInBvcnRzIjp7Imh0dHAiOls4ODAwLCA4ODAxXSwKKyAg
ICAgICAgICAiaHR0cHMiOltdLAorICAgICAgICAgICJ3cyI6WzQ5MDAxXX0sCisgImNoZWNrX3N1
YmRvbWFpbnMiOiBmYWxzZSwKKyAibG9nX2xldmVsIjoiZGVidWciLAorICJiaW5kX2hvc3RuYW1l
IjogZmFsc2V9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243556</attachid>
            <date>2014-12-19 10:59:03 -0800</date>
            <delta_ts>2014-12-23 06:47:19 -0800</delta_ts>
            <desc>Updated according review</desc>
            <filename>bug-127094-20141219195901.patch</filename>
            <type>text/plain</type>
            <size>37026</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3NTY2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGY3MjE1ZDc1ZWIwYzliMDQzN2Y1MDI4Mjc3NTIxM2Fh
ZjJiYjU1My4uZDU1MmUyODBmMzc4NmQ4YzU4Yjk2Zjc5ZTk4ZGQ2OWQ5Njk4YzRlOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgw
IEBACisyMDE0LTEyLTE5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgSW50ZWdyYXRlIFdQIHB5dGhvbiBzZXJ2ZXIgaW50byBXZWJLaXQgdGVz
dCBmcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNzA5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyBXM0Mgd2ViIHNlcnZlciAod3B0c2VydmVyKSBhcyBhIG5ldyBI
VFRQIHNlcnZlci4KKyAgICAgICAgd3B0c2VydmVyIGltcGxlbWVudGF0aW9uIHNob3VsZCBiZSBp
bXBvcnRlZCB3aXRoaW4gdGhlIGltcG9ydAorICAgICAgICBvZiB0aGUgV2ViIFBsYXRmb3JtIFRl
c3Qgc3VpdGUgKHRvIGVuc3VyZSBrZWVwaW5nIHNlcnZlciBhbmQgdGVzdHMgaW4gc3luYykgaW4K
KyAgICAgICAgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dwdC4KKyAgICAgICAgd3B0c2VydmVy
IGlzIHVzZWQgdG8gc2VydmUgYWxsIHRlc3RzIGluc2lkZSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd3B0LgorCisgICAgICAgIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMv
d2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNoZXIucHkgc2VydmVzIGFzIG1haW4gZW50cnkgcG9pbnQg
dG8gd3B0IHNwYXduZWQgcHJvY2VzcykuCisgICAgICAgIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLnB5IGlzIHJlc3BvbnNpYmxl
IHRvIHN0YXJ0L3N0b3AgdGhlIHdwdCBzZXJ2ZXIgcHJvY2Vzcy4gSXQgYWxzbworICAgICAgICBz
ZXRzIHVwIHRoZSBzZXJ2ZXIgY29uZmlnIGFuZCB0ZXN0aGFybmVzcy5qcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcworICAgICAgICBmaWxlcyBhdCBzdGFydCBhbmQgc3RvcCBvZiB0aGUgd3B0IHNlcnZl
ci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weToKKyAgICAgICAg
KE1vY2tQcm9jZXNzLmNvbW11bmljYXRlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHk6IEFkZGluZyBzdGFy
dC9zdG9wIG9mIHdlYiBwbGF0Zm9ybSB0ZXN0IHNlcnZlciBhY2NvcmRpbmcgYm9vbGVhbiBwYXJh
bWV0ZXIuCisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKExh
eW91dFRlc3RSdW5uZXIucnVuX3Rlc3RzKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuc3Rh
cnRfc2VydmVycyk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyLnN0b3Bfc2VydmVycyk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0
X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5OiBVcGRhdGVkIHRvIGNoZWNrIGZvciB3cHQgc2VydmVy
IHN0YXJ0L3N0b3AuCisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMuX3J1bl90ZXN0cyk6
CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJzX3N0YXJ0ZWQuc3Rh
cnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXJU
ZXN0cy50ZXN0X3NlcnZlcnNfc3RhcnRlZC5zdG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcik6
CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMpOgorICAgICAgICAoTGF5b3V0VGVzdFJ1
bm5lclRlc3RzLnRlc3Rfc2VydmVyc19zdGFydGVkKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5OiAgVXBkYXRlZCB0byBjaGVj
ayB3aGV0aGVyIGEgdGVzdCBpcyBhIHdwdCB0ZXN0IGFuZCB3aGV0aGVyIHdwdCBzZXJ2ZXIgbGF1
bmNoIGlzIG5lZWRlZC4KKyAgICAgICAgKE1hbmFnZXIuX19pbml0X18pOgorICAgICAgICAoTWFu
YWdlci5faXNfaHR0cF90ZXN0KToKKyAgICAgICAgKE1hbmFnZXIuX2lzX3dlYl9wbGF0Zm9ybV90
ZXN0KToKKyAgICAgICAgKE1hbmFnZXIuX3J1bl90ZXN0cyk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weToKKyAg
ICAgICAgKE1hbmFnZXJUZXN0LnRlc3RfbmVlZHNfc2VydmVycy5nZXRfd3B0X2RvY19yb290KToK
KyAgICAgICAgKE1hbmFnZXJUZXN0LnRlc3RfbmVlZHNfc2VydmVycy5nZXRfbWFuYWdlcik6Cisg
ICAgICAgIChNYW5hZ2VyVGVzdC50ZXN0X25lZWRzX3NlcnZlcnMpOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6IEFkZGVkIGFuIG9w
dGlvbiB0byBjb250cm9sIHRoZSBkb2Nfcm9vdCBvZiB0aGUgd3B0IHNlcnZlci4KKyAgICAgICAg
KHBhcnNlX2FyZ3MpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Nl
cnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNoZXIucHk6IEFkZGVkLgorICAgICAgICAobWFp
bik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAoZG9jX3Jvb3QpOgorICAg
ICAgICAoYmFzZV91cmwpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyKToKKyAgICAg
ICAgKFdlYlBsYXRmb3JtVGVzdFNlcnZlci5fX2luaXRfXyk6CisgICAgICAgIChXZWJQbGF0Zm9y
bVRlc3RTZXJ2ZXIuX3NldF9zdGFydF9jbWQpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2Vy
dmVyLl9jb3B5X3dlYmtpdF90ZXN0X2ZpbGVzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtVGVzdFNl
cnZlci5fY2xlYW5fd2Via2l0X3Rlc3RfZmlsZXMpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0
U2VydmVyLl9wcmVwYXJlX2NvbmZpZyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIu
X3NwYXduX3Byb2Nlc3MpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9zdG9wX3J1
bm5pbmdfc2VydmVyKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9z
ZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgIChUZXN0V2ViUGxhdGZvcm1UZXN0U2VydmVyKToKKyAgICAgICAgKFRlc3RXZWJQbGF0Zm9y
bVRlc3RTZXJ2ZXIudGVzdF9zdGFydF9jbWQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
cG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5fX2luaXRfXyk6CisgICAgICAgIChQb3J0LnRv
LnN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcik6CisgICAgICAgIChQb3J0LnRvKToKKyAg
ICAgICAgKFBvcnQudG8ud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX2RvY19yb290KToKKyAgICAg
ICAgKFBvcnQudG8ud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX2Jhc2VfdXJsKToKKyAgICAgICAg
KFBvcnQudG8uc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIpOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6IFVwZGF0ZWQgdGhlIHRlc3QgbmFtZSA8LT4gdGVz
dCBVUkwgY29udmVyc2lvbiByb3V0aW5lcy4KKyAgICAgICAgKERyaXZlci5fX2luaXRfXyk6Cisg
ICAgICAgIChEcml2ZXIuaXNfd2ViX3BsYXRmb3JtX3Rlc3QpOgorICAgICAgICAoRHJpdmVyLnRl
c3RfdG9fdXJpKToKKyAgICAgICAgKERyaXZlci51cmlfdG9fdGVzdCk6CisgICAgICAgIChEcml2
ZXIuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHk6ICBVcGRhdGVkIHRlc3RzIGFjY29yZGluZyBuZXcg
Y29udmVyc2lvbiBydWxlcy4KKyAgICAgICAgKERyaXZlclRlc3QudGVzdF90ZXN0X3RvX3VyaSk6
CisgICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdXJpX3RvX3Rlc3QpOgorCiAyMDE0LTEyLTE4ICBL
d2FuZ0h5dWsgS2ltICA8aHl1a2kua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIG1vdmVkIG15c2VsZiB0byB0aGUgbGlzdCBvZiBjb21taXR0ZXJzLgpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5Cmlu
ZGV4IDE4MWE1ZjlhNzFjZTU1OTY2NmE4MjllNjYzZDUxYWE1ZWEyMTQ5YTcuLjlmMTE0ZDFiMWNi
ZDBiMzA5OTUxNDBkMjYzNTczNjhmZDcxNmU2MGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX21vY2sucHkKQEAgLTQ2LDYgKzQ2
LDkgQEAgY2xhc3MgTW9ja1Byb2Nlc3Mob2JqZWN0KToKICAgICBkZWYgd2FpdChzZWxmKToKICAg
ICAgICAgcmV0dXJuCiAKKyAgICBkZWYgY29tbXVuaWNhdGUoc2VsZiwgaW5wdXQ9Tm9uZSk6Cisg
ICAgICAgIHJldHVybiAoc2VsZi5zdGRvdXQsIHNlbGYuc3RkZXJyKQorCiAjIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSB1bmlmaWVkIHdpdGggTW9ja0V4ZWN1dGl2ZTIKIGNsYXNzIE1vY2tFeGVjdXRp
dmUob2JqZWN0KToKICAgICBQSVBFID0gIk1PQ0sgUElQRSIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5l
ci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xh
eW91dF90ZXN0X3J1bm5lci5weQppbmRleCA5MDI3YWY3Zjg1NWZiNWU0NGVmOWUwYzkyNGQwNGU3
MGM1NDMzZGEyLi43ZjNiYTY0NTVhNGFjMTU5Zjg4NzI0ZmZiNTY4M2JkYzNlZjgyMjdmIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9s
YXlvdXRfdGVzdF9ydW5uZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5CkBAIC03NCwxNCArNzQsMTYg
QEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICBzZWxmLl90ZXN0X2lu
cHV0cyA9IFtdCiAgICAgICAgIHNlbGYuX25lZWRzX2h0dHAgPSBOb25lCiAgICAgICAgIHNlbGYu
X25lZWRzX3dlYnNvY2tldHMgPSBOb25lCisgICAgICAgIHNlbGYuX25lZWRzX3dlYl9wbGF0Zm9y
bV90ZXN0X3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5fcmV0cnlpbmcgPSBGYWxzZQogICAg
ICAgICBzZWxmLl9jdXJyZW50X3J1bl9yZXN1bHRzID0gTm9uZQogCi0gICAgZGVmIHJ1bl90ZXN0
cyhzZWxmLCBleHBlY3RhdGlvbnMsIHRlc3RfaW5wdXRzLCB0ZXN0c190b19za2lwLCBudW1fd29y
a2VycywgbmVlZHNfaHR0cCwgbmVlZHNfd2Vic29ja2V0cywgcmV0cnlpbmcpOgorICAgIGRlZiBy
dW5fdGVzdHMoc2VsZiwgZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9fc2tpcCwg
bnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIG5lZWRzX3dlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlciwgcmV0cnlpbmcpOgogICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMg
PSBleHBlY3RhdGlvbnMKICAgICAgICAgc2VsZi5fdGVzdF9pbnB1dHMgPSB0ZXN0X2lucHV0cwog
ICAgICAgICBzZWxmLl9uZWVkc19odHRwID0gbmVlZHNfaHR0cAogICAgICAgICBzZWxmLl9uZWVk
c193ZWJzb2NrZXRzID0gbmVlZHNfd2Vic29ja2V0cworICAgICAgICBzZWxmLl9uZWVkc193ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBuZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIKICAg
ICAgICAgc2VsZi5fcmV0cnlpbmcgPSByZXRyeWluZwogCiAgICAgICAgICMgRklYTUU6IHJlbmFt
ZSBhbGwgdmFyaWFibGVzIHRvIHRlc3RfcnVuX3Jlc3VsdHMgb3Igc29tZSBzdWNoIC4uLgpAQCAt
MTAxLDcgKzEwMyw3IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAg
c2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1NoYXJkaW5nIHRlc3RzIC4uLicpCiAgICAgICAg
IGFsbF9zaGFyZHMgPSBzZWxmLl9zaGFyZGVyLnNoYXJkX3Rlc3RzKHRlc3RfaW5wdXRzLCBpbnQo
c2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpLCBzZWxmLl9vcHRpb25zLmZ1bGx5X3BhcmFs
bGVsKQogCi0gICAgICAgIGlmIHNlbGYuX25lZWRzX2h0dHAgYW5kIHNlbGYuX29wdGlvbnMuaHR0
cDoKKyAgICAgICAgaWYgKHNlbGYuX25lZWRzX2h0dHAgYW5kIHNlbGYuX29wdGlvbnMuaHR0cCkg
b3Igc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyOgogICAgICAgICAgICAgc2Vs
Zi5zdGFydF9zZXJ2ZXJzKCkKIAogICAgICAgICBudW1fd29ya2VycyA9IG1pbihudW1fd29ya2Vy
cywgbGVuKGFsbF9zaGFyZHMpKQpAQCAtMTg5LDYgKzE5MSw5IEBAIGNsYXNzIExheW91dFRlc3RS
dW5uZXIob2JqZWN0KToKICAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2Vic29ja2V0czoKICAgICAg
ICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdGFydGluZyBXZWJTb2NrZXQgc2Vy
dmVyIC4uLicpCiAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIo
KQorICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI6CisgICAg
ICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3RhcnRpbmcgV2ViIFBsYXRmb3Jt
IFRlc3Qgc2VydmVyIC4uLicpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlcigpCiAKICAgICBkZWYgc3RvcF9zZXJ2ZXJzKHNlbGYpOgogICAgICAg
ICBpZiBzZWxmLl9uZWVkc19odHRwOgpAQCAtMTk3LDYgKzIwMiw5IEBAIGNsYXNzIExheW91dFRl
c3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2Vic29ja2V0czoKICAg
ICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdG9wcGluZyBXZWJTb2NrZXQg
c2VydmVyIC4uLicpCiAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZl
cigpCisgICAgICAgIGlmIHNlbGYuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcjoKKyAg
ICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdG9wcGluZyBXZWIgUGxhdGZv
cm0gVGVzdCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJfcGxh
dGZvcm1fdGVzdF9zZXJ2ZXIoKQogCiAgICAgZGVmIGhhbmRsZShzZWxmLCBuYW1lLCBzb3VyY2Us
ICphcmdzKToKICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLCAnX2hhbmRsZV8nICsgbmFt
ZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVz
dC5weQppbmRleCA4NTE0MWU2NTdkMGVkNjlkODQ5OWQ0N2UwZDlhNTBlYzcwYmY4MDQ5Li5mODk4
MzYzMmY4MjM0ZDk5NTM2MzYzMTI0YTU4N2MzM2VjNzc4OTA2IDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5u
ZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
Y29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CkBAIC04NSw3ICs4NSw3
IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ICAgIGV4cGVjdGF0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnMocnVubmVyLl9wb3J0LCB0ZXN0cykK
ICAgICAgICAgZXhwZWN0YXRpb25zLnBhcnNlX2FsbF9leHBlY3RhdGlvbnMoKQogICAgICAgICBy
dW5uZXIucnVuX3Rlc3RzKGV4cGVjdGF0aW9ucywgdGVzdF9pbnB1dHMsIHNldCgpLAotICAgICAg
ICAgICAgbnVtX3dvcmtlcnM9MSwgbmVlZHNfaHR0cD1hbnkoJ2h0dHAnIGluIHRlc3QgZm9yIHRl
c3QgaW4gdGVzdHMpLCBuZWVkc193ZWJzb2NrZXRzPWFueShbJ3dlYnNvY2tldCcgaW4gdGVzdCBm
b3IgdGVzdCBpbiB0ZXN0c10pLCByZXRyeWluZz1GYWxzZSkKKyAgICAgICAgICAgIG51bV93b3Jr
ZXJzPTEsIG5lZWRzX2h0dHA9YW55KCdodHRwJyBpbiB0ZXN0IGZvciB0ZXN0IGluIHRlc3RzKSwg
bmVlZHNfd2Vic29ja2V0cz1hbnkoWyd3ZWJzb2NrZXQnIGluIHRlc3QgZm9yIHRlc3QgaW4gdGVz
dHNdKSwgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyPWFueShbJ2ltcG9ydGVkL3czYycg
aW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0c10pLCByZXRyeWluZz1GYWxzZSkKIAogICAgIGRlZiB0
ZXN0X2ludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0cyhzZWxmKToKICAgICAgICAgcnVubmVy
ID0gc2VsZi5fcnVubmVyKCkKQEAgLTE0Nyw0OSArMTQ3LDgzIEBAIGNsYXNzIExheW91dFRlc3RS
dW5uZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGRlZiBzdGFydF93ZWJzb2Nr
ZXRfc2VydmVyKCk6CiAgICAgICAgICAgICBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gVHJ1ZQog
CisgICAgICAgIGRlZiBzdGFydF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoKToKKyAgICAgICAg
ICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBUcnVlCisKICAgICAg
ICAgZGVmIHN0b3BfaHR0cF9zZXJ2ZXIoKToKICAgICAgICAgICAgIHNlbGYuaHR0cF9zdG9wcGVk
ID0gVHJ1ZQogCiAgICAgICAgIGRlZiBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKToKICAgICAgICAg
ICAgIHNlbGYud2Vic29ja2V0X3N0b3BwZWQgPSBUcnVlCiAKKyAgICAgICAgZGVmIHN0b3Bfd2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyKCk6CisgICAgICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlcl9zdG9wcGVkID0gVHJ1ZQorCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAg
ICAgICAgIHBvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3QtbWFjLWxlb3BhcmQnKQog
ICAgICAgICBwb3J0LnN0YXJ0X2h0dHBfc2VydmVyID0gc3RhcnRfaHR0cF9zZXJ2ZXIKICAgICAg
ICAgcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyID0gc3RhcnRfd2Vic29ja2V0X3NlcnZlcgor
ICAgICAgICBwb3J0LnN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IHN0YXJ0X3dlYl9w
bGF0Zm9ybV90ZXN0X3NlcnZlcgogICAgICAgICBwb3J0LnN0b3BfaHR0cF9zZXJ2ZXIgPSBzdG9w
X2h0dHBfc2VydmVyCiAgICAgICAgIHBvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyID0gc3RvcF93
ZWJzb2NrZXRfc2VydmVyCisgICAgICAgIHBvcnQuc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2
ZXIgPSBzdG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcgogCiAgICAgICAgIHNlbGYuaHR0cF9z
dGFydGVkID0gc2VsZi5odHRwX3N0b3BwZWQgPSBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2Vs
Zi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVk
ID0gRmFsc2UKICAgICAgICAgcnVubmVyID0gc2VsZi5fcnVubmVyKHBvcnQ9cG9ydCkKICAgICAg
ICAgcnVubmVyLl9uZWVkc19odHRwID0gVHJ1ZQogICAgICAgICBydW5uZXIuX25lZWRzX3dlYnNv
Y2tldHMgPSBGYWxzZQorICAgICAgICBydW5uZXIuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3Nl
cnZlciA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5zdGFydF9zZXJ2ZXJzKCkKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RhcnRlZCwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLndlYnNvY2tldF9zdGFydGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVkLCBGYWxzZSkKICAg
ICAgICAgcnVubmVyLnN0b3Bfc2VydmVycygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi5odHRwX3N0b3BwZWQsIFRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJz
b2NrZXRfc3RvcHBlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCwgRmFsc2UpCiAKICAgICAgICAgc2VsZi5odHRw
X3N0YXJ0ZWQgPSBzZWxmLmh0dHBfc3RvcHBlZCA9IHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQgPSBz
ZWxmLndlYnNvY2tldF9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1f
dGVzdF9zZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3Bw
ZWQgPSBGYWxzZQogICAgICAgICBydW5uZXIuX25lZWRzX2h0dHAgPSBUcnVlCiAgICAgICAgIHJ1
bm5lci5fbmVlZHNfd2Vic29ja2V0cyA9IFRydWUKKyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBGYWxzZQogICAgICAgICBydW5uZXIuc3RhcnRfc2VydmVy
cygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0YXJ0ZWQsIFRydWUpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCwgVHJ1ZSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFy
dGVkLCBGYWxzZSkKICAgICAgICAgcnVubmVyLnN0b3Bfc2VydmVycygpCiAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIFRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkLCBGYWxzZSkKKworICAg
ICAgICBzZWxmLmh0dHBfc3RhcnRlZCA9IHNlbGYuaHR0cF9zdG9wcGVkID0gc2VsZi53ZWJzb2Nr
ZXRfc3RhcnRlZCA9IHNlbGYud2Vic29ja2V0X3N0b3BwZWQgPSBGYWxzZQorICAgICAgICBzZWxm
LndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVkID0gc2VsZi53ZWJfcGxhdGZvcm1fdGVz
dF9zZXJ2ZXJfc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfaHR0cCA9IEZh
bHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2Vic29ja2V0cyA9IEZhbHNlCisgICAgICAgIHJ1
bm5lci5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gVHJ1ZQorICAgICAgICBydW5u
ZXIuc3RhcnRfc2VydmVycygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0
YXJ0ZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0
YXJ0ZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3Jt
X3Rlc3Rfc2VydmVyX3N0YXJ0ZWQsIFRydWUpCisgICAgICAgIHJ1bm5lci5zdG9wX3NlcnZlcnMo
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdG9wcGVkLCBGYWxzZSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdG9wcGVkLCBGYWxzZSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9w
cGVkLCBUcnVlKQogCiAgICAgICAgIHNlbGYuaHR0cF9zdGFydGVkID0gc2VsZi5odHRwX3N0b3Bw
ZWQgPSBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZh
bHNlCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBzZWxm
LndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkID0gRmFsc2UKICAgICAgICAgcnVubmVy
Ll9uZWVkc19odHRwID0gRmFsc2UKICAgICAgICAgcnVubmVyLl9uZWVkc193ZWJzb2NrZXRzID0g
RmFsc2UKKyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBG
YWxzZQogICAgICAgICBydW5uZXIuc3RhcnRfc2VydmVycygpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VsZi5odHRwX3N0YXJ0ZWQsIEZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQsIEZhbHNlKQogICAgICAgICBy
dW5uZXIuc3RvcF9zZXJ2ZXJzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBf
c3RvcHBlZCwgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRf
c3RvcHBlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCwgRmFsc2UpCiAKIAogY2xhc3MgU2hhcmRlclRlc3RzKHVu
aXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CmluZGV4IDMzODVhMDFkODA4MzY1
ZjA2MjRhMmZhYTJhNTY4NzNhYTQzY2FhZjAuLjNiMzdlNjBmMmMzNzFhNDY1MDIwOGNkMjExNTlm
MDkyNjdkMzQxYTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQpAQCAtNzksNiArNzksNyBAQCBjbGFz
cyBNYW5hZ2VyKG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5IVFRQX1NVQkRJUiA9ICdodHRwJyAr
IHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgogICAgICAgICBzZWxmLldFQlNPQ0tFVF9TVUJESVIg
PSAnd2Vic29ja2V0JyArIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgorICAgICAgICBzZWxmLndl
Yl9wbGF0Zm9ybV90ZXN0X3N1YmRpciA9IHNlbGYuX3BvcnQud2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyX2RvY19yb290KCkKICAgICAgICAgc2VsZi5MQVlPVVRfVEVTVFNfRElSRUNUT1JZID0gJ0xh
eW91dFRlc3RzJwogCiAgICAgICAgICMgZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRvIGluc3Rh
bGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4KQEAgLTkzLDExICs5NCwxNCBAQCBjbGFzcyBNYW5h
Z2VyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBzZWxmLl9maW5kZXIuZmluZF90ZXN0cyhzZWxm
Ll9vcHRpb25zLCBhcmdzKQogCiAgICAgZGVmIF9pc19odHRwX3Rlc3Qoc2VsZiwgdGVzdCk6Ci0g
ICAgICAgIHJldHVybiBzZWxmLkhUVFBfU1VCRElSIGluIHRlc3Qgb3Igc2VsZi5faXNfd2Vic29j
a2V0X3Rlc3QodGVzdCkKKyAgICAgICAgcmV0dXJuIChzZWxmLkhUVFBfU1VCRElSIGluIHRlc3Qg
b3Igc2VsZi5faXNfd2Vic29ja2V0X3Rlc3QodGVzdCkgb3Igc2VsZi5faXNfd2ViX3BsYXRmb3Jt
X3Rlc3QodGVzdCkpCiAKICAgICBkZWYgX2lzX3dlYnNvY2tldF90ZXN0KHNlbGYsIHRlc3QpOgog
ICAgICAgICByZXR1cm4gc2VsZi5XRUJTT0NLRVRfU1VCRElSIGluIHRlc3QKIAorICAgIGRlZiBf
aXNfd2ViX3BsYXRmb3JtX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHJldHVybiBzZWxmLndl
Yl9wbGF0Zm9ybV90ZXN0X3N1YmRpciBpbiB0ZXN0CisKICAgICBkZWYgX2h0dHBfdGVzdHMoc2Vs
ZiwgdGVzdF9uYW1lcyk6CiAgICAgICAgIHJldHVybiBzZXQodGVzdCBmb3IgdGVzdCBpbiB0ZXN0
X25hbWVzIGlmIHNlbGYuX2lzX2h0dHBfdGVzdCh0ZXN0KSkKIApAQCAtMjM1LDcgKzIzOSw4IEBA
IGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdW1tYXJpemVkX3Jlc3VsdHMsIGluaXRpYWxfcmVzdWx0cywgcmV0cnlfcmVz
dWx0cywgZW5hYmxlZF9waXhlbF90ZXN0c19pbl9yZXRyeSkKIAogICAgIGRlZiBfcnVuX3Rlc3Rz
KHNlbGYsIHRlc3RzX3RvX3J1biwgdGVzdHNfdG9fc2tpcCwgcmVwZWF0X2VhY2gsIGl0ZXJhdGlv
bnMsIG51bV93b3JrZXJzLCByZXRyeWluZyk6Ci0gICAgICAgIG5lZWRzX2h0dHAgPSBhbnkoc2Vs
Zi5faXNfaHR0cF90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKKyAgICAgICAg
bmVlZHNfaHR0cCA9IGFueSgoc2VsZi5faXNfaHR0cF90ZXN0KHRlc3QpIGFuZCBub3Qgc2VsZi5f
aXNfd2ViX3BsYXRmb3JtX3Rlc3QodGVzdCkpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKKyAg
ICAgICAgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gYW55KHNlbGYuX2lzX3dlYl9w
bGF0Zm9ybV90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKICAgICAgICAgbmVl
ZHNfd2Vic29ja2V0cyA9IGFueShzZWxmLl9pc193ZWJzb2NrZXRfdGVzdCh0ZXN0KSBmb3IgdGVz
dCBpbiB0ZXN0c190b19ydW4pCiAKICAgICAgICAgdGVzdF9pbnB1dHMgPSBbXQpAQCAtMjQzLDcg
KzI0OCw3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAgIGZvciB0ZXN0IGlu
IHRlc3RzX3RvX3J1bjoKICAgICAgICAgICAgICAgICBmb3IgXyBpbiB4cmFuZ2UocmVwZWF0X2Vh
Y2gpOgogICAgICAgICAgICAgICAgICAgICB0ZXN0X2lucHV0cy5hcHBlbmQoc2VsZi5fdGVzdF9p
bnB1dF9mb3JfZmlsZSh0ZXN0KSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bm5lci5ydW5fdGVz
dHMoc2VsZi5fZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9fc2tpcCwgbnVtX3dv
cmtlcnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIHJldHJ5aW5nKQorICAgICAgICBy
ZXR1cm4gc2VsZi5fcnVubmVyLnJ1bl90ZXN0cyhzZWxmLl9leHBlY3RhdGlvbnMsIHRlc3RfaW5w
dXRzLCB0ZXN0c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVlZHNfd2Vic29j
a2V0cywgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLCByZXRyeWluZykKIAogICAgIGRl
ZiBfY2xlYW5fdXBfcnVuKHNlbGYpOgogICAgICAgICBfbG9nLmRlYnVnKCJGbHVzaGluZyBzdGRv
dXQiKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkKaW5kZXggZDRhZmI2MDk3
YzkyNzY0NjAwZmE4MjJiMTBlOWU0ZGI0YTViMzFiYy4uNGVjNjNmZGVlYjU0Yjg2MWNkMjdhMDRl
YWExZmMyYmRjM2Y4NjFlZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5
CkBAIC00Myw5ICs0MywxMyBAQCBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1v
Y2tPcHRpb25zCiAKIGNsYXNzIE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBk
ZWYgdGVzdF9uZWVkc19zZXJ2ZXJzKHNlbGYpOgorICAgICAgICBkZWYgZ2V0X3dwdF9kb2Nfcm9v
dCgpOgorICAgICAgICAgICAgcmV0dXJuICdpbXBvcnRlZC93M2Mvd3B0JworCiAgICAgICAgIGRl
ZiBnZXRfbWFuYWdlcigpOgogICAgICAgICAgICAgcG9ydCA9IE1vY2soKSAgIyBGSVhNRTogVXNl
IGEgdGlnaHRlciBtb2NrLgogICAgICAgICAgICAgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SID0g
Jy8nCisgICAgICAgICAgICBwb3J0LndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9kb2Nfcm9vdCA9
IGdldF93cHRfZG9jX3Jvb3QKICAgICAgICAgICAgIG1hbmFnZXIgPSBNYW5hZ2VyKHBvcnQsIG9w
dGlvbnM9TW9ja09wdGlvbnMoaHR0cD1UcnVlKSwgcHJpbnRlcj1Nb2NrKCkpCiAgICAgICAgICAg
ICByZXR1cm4gbWFuYWdlcgogCkBAIC01NSw2ICs1OSwxMiBAQCBjbGFzcyBNYW5hZ2VyVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG1hbmFnZXIgPSBnZXRfbWFuYWdlcigpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5hZ2VyLm5lZWRzX3NlcnZlcnMoWydodHRwL3Rlc3RzL21p
c2MnXSkpCiAKKyAgICAgICAgbWFuYWdlciA9IGdldF9tYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKG1hbmFnZXIubmVlZHNfc2VydmVycyhbJ2ltcG9ydGVkL3czYy93cHQvdGVzdCdd
KSkKKworICAgICAgICBtYW5hZ2VyID0gZ2V0X21hbmFnZXIoKQorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKG1hbmFnZXIubmVlZHNfc2VydmVycyhbJ2ltcG9ydGVkL3czYyddKSkKKwogICAgIGRl
ZiBpbnRlZ3JhdGlvbl90ZXN0X25lZWRzX3NlcnZlcnMoc2VsZik6CiAgICAgICAgIGRlZiBnZXRf
bWFuYWdlcigpOgogICAgICAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5Cm9s
ZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZmEyOWEzMDg4NjA4NjMzMTkxZTcz
MTIyOGMxODZlZTkwYjI5MGQwNC4uMmNlZTY5Y2EyNDZhZDlkN2JlNDc3MDkxZjM5ZmM3ZDYzYjYx
Nzc4OAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHMucHkKQEAgLTI5NSw2ICsyOTUsMTAgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncyk6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbmZpZ3VyYXRpb25zLiBEb2VzIG5vdCBy
dW4gYW55IHRlc3RzLiIpKSwKICAgICBdKSkKIAorICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9u
cy5hcHBlbmQoKCJXZWIgUGxhdGZvcm0gVGVzdCBTZXJ2ZXIgT3B0aW9ucyIsIFsKKyAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oIi0td3B0c2VydmVyLWRvYy1yb290IiwgdHlwZT0ic3RyaW5n
IiwgaGVscD0oIlNldCB3ZWIgcGxhdGZvcm0gc2VydmVyIGRvY3VtZW50IHJvb3QsIHJlbGF0aXZl
IHRvIExheW91dFRlc3RzIGRpcmVjdG9yeSIpKSwKKyAgICBdKSkKKwogICAgICMgRklYTUU6IE1v
dmUgdGhlc2UgaW50byBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CiAgICAgb3B0aW9uX2dyb3Vw
X2RlZmluaXRpb25zLmFwcGVuZCgoIlJlc3VsdCBKU09OIE9wdGlvbnMiLCBbCiAgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCItLW1hc3Rlci1uYW1lIiwgaGVscD0iVGhlIG5hbWUgb2YgdGhl
IGJ1aWxkYm90IG1hc3Rlci4iKSwKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNoZXIucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0
X2xhdW5jaGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2YWViZDNjZjA2ZWZhNjAwNDFlYTM4NzA1OGI4MzJm
ZDg5Y2VhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X2xhdW5jaGVyLnB5CkBAIC0wLDAgKzEs
MzMgQEAKKyMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9m
IHRoZSAzLWNsYXVzZSBCU0QgTGljZW5zZQorIyBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVt
L0xlZ2FsLzIwMDgvMDMtYnNkLWxpY2Vuc2UuaHRtbAorCitpbXBvcnQgaW1wCitpbXBvcnQgc3lz
CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKKworbG9nZ2VyID0g
bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCitsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJV
RykKKworc3lzLnBhdGguaW5zZXJ0KDEsICIuIikKK2ltcG9ydCBzZXJ2ZSBhcyBXZWJQbGF0Zm9y
bVRlc3RTZXJ2ZXIKKworIyBUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIGxhdW5jaCB0aGUgd2ViIHBs
YXRmb3JtIHRlc3Qgc2VydmVyIG1haW4gc2NyaXB0IChzZXJ2ZS5weSkgYW5kIHN0b3AgaXQgd2hl
biBhc2tlZCBieSBydW4td2Via2l0LXRlc3RzCisKKworZGVmIG1haW4oYXJndiwgc3Rkb3V0LCBz
dGRlcnIpOgorICAgICMgVGhpcyBpcyBhIGNvcHkgb2Ygc2VydmUucHkgbWFpbiBmdW5jdGlvbiwg
ZXhjZXB0IGZvciB0aGUgd2FpdCBzdGVwCisgICAgY29uZmlnID0gV2ViUGxhdGZvcm1UZXN0U2Vy
dmVyLmxvYWRfY29uZmlnKCJjb25maWcuZGVmYXVsdC5qc29uIiwgImNvbmZpZy5qc29uIikKKyAg
ICBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuc2V0dXBfbG9nZ2VyKGNvbmZpZ1sibG9nX2xldmVsIl0p
CisgICAgY29uZmlnXywgc3RhcnRlZF9zZXJ2ZXJzID0gV2ViUGxhdGZvcm1UZXN0U2VydmVyLnN0
YXJ0KGNvbmZpZykKKworICAgIGZvciBwcm90b2NvbCwgc2VydmVycyBpbiBzdGFydGVkX3NlcnZl
cnMuaXRlbXMoKToKKyAgICAgICAgZm9yIHBvcnQsIHByb2Nlc3MgaW4gc2VydmVyczoKKyAgICAg
ICAgICAgIGxvZ2dlci5pbmZvKCIlcywgcG9ydDolZCwgcGlkOiVkIiAlIChwcm90b2NvbCwgcG9y
dCwgcHJvY2Vzcy5wcm9jLnBpZCkpCisKKyAgICBzeXMuc3RkaW4ucmVhZCgxKQorCisKK2lmIF9f
bmFtZV9fID09ICJfX21haW5fXyI6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5
cy5zdGRvdXQsIHN5cy5zdGRlcnIpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjE5NDMyZmUzMzk2MTFmNzMzOGE5ZWZkMzc5YjNmZTQz
M2ViNTI1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkKQEAgLTAsMCArMSwxMjgg
QEAKKyMgIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjICAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMgIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZgorIyAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjICBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisjICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjICBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjICBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyMgIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisj
ICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorIyAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQganNvbgoraW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKKworX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2RlZiBkb2Nfcm9vdChwb3J0KToKKyAgICBkb2Nfcm9v
dCA9IHBvcnQuZ2V0X29wdGlvbigid3B0c2VydmVyX2RvY19yb290IikKKyAgICBpZiBkb2Nfcm9v
dCBpcyBOb25lOgorICAgICAgICByZXR1cm4gcG9ydC5ob3N0LmZpbGVzeXN0ZW0uam9pbigiaW1w
b3J0ZWQiLCAidzNjIiwgIndwdCIpCisgICAgcmV0dXJuIGRvY19yb290CisKKworZGVmIGJhc2Vf
dXJsKHBvcnRfb2JqKToKKyAgICBjb25maWdfd2tfZmlsZW5hbWUgPSBwb3J0X29iai5wYXRoX2Zy
b21fd2Via2l0X2Jhc2UoIkxheW91dFRlc3RzIiwgImltcG9ydGVkIiwgInczYyIsICJyZXNvdXJj
ZXMiLCAiY29uZmlnLmpzb24iKQorICAgIGpzb25fZGF0YSA9IHBvcnRfb2JqLl9maWxlc3lzdGVt
LnJlYWRfdGV4dF9maWxlKGNvbmZpZ193a19maWxlbmFtZSkKKyAgICBjb25maWcgPSBqc29uLmxv
YWRzKGpzb25fZGF0YSkKKyAgICBwb3J0cyA9IGNvbmZpZ1sicG9ydHMiXQorICAgIHJldHVybiAi
aHR0cDovLyIgKyBjb25maWdbImhvc3QiXSArICI6IiArIHN0cihwb3J0c1siaHR0cCJdWzBdKSAr
ICIvIgorCisKK2NsYXNzIFdlYlBsYXRmb3JtVGVzdFNlcnZlcihodHRwX3NlcnZlcl9iYXNlLkh0
dHBTZXJ2ZXJCYXNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGxh
eW91dF90ZXN0X3Jlc3VsdHNfZGlyLCBwaWRmaWxlPU5vbmUpOgorICAgICAgICBodHRwX3NlcnZl
cl9iYXNlLkh0dHBTZXJ2ZXJCYXNlLl9faW5pdF9fKHNlbGYsIHBvcnRfb2JqKQorICAgICAgICBz
ZWxmLl9vdXRwdXRfZGlyID0gbGF5b3V0X3Rlc3RfcmVzdWx0c19kaXIKKworICAgICAgICBzZWxm
Ll9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9sb2dfZmlsZV9uYW1lID0gJyVzX3Byb2Nlc3Nf
bG9nLm91dC50eHQnICUgKHNlbGYuX25hbWUpCisKKyAgICAgICAgc2VsZi5fd3NvdXQgPSBOb25l
CisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3BpZF9maWxlID0g
cGlkZmlsZQorICAgICAgICBpZiBub3Qgc2VsZi5fcGlkX2ZpbGU6CisgICAgICAgICAgICBzZWxm
Ll9waWRfZmlsZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9ydW50aW1lX3BhdGgsICcl
cy5waWQnICUgc2VsZi5fbmFtZSkKKyAgICAgICAgc2VsZi5fc3Rkb3V0X2RhdGEgPSBOb25lCisg
ICAgICAgIHNlbGYuX3N0ZGVycl9kYXRhID0gTm9uZQorICAgICAgICBzZWxmLl9maWxlc3lzdGVt
ID0gcG9ydF9vYmouaG9zdC5maWxlc3lzdGVtCisgICAgICAgIHNlbGYuX2xheW91dF9yb290ID0g
cG9ydF9vYmoucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCJMYXlvdXRUZXN0cyIpCisgICAgICAgIHNl
bGYuX2RvY19yb290ID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2xheW91dF9yb290LCBk
b2Nfcm9vdChwb3J0X29iaikpCisKKyAgICAgICAgc2VsZi5fcmVzb3VyY2VzX2ZpbGVzX3RvX2Nv
cHkgPSBbJ3Rlc3RoYXJuZXNzLmpzJywgJ3Rlc3RoYXJuZXNzLmNzcycsICd0ZXN0aGFybmVzc3Jl
cG9ydC5qcyddCisKKyAgICAgICAgc2VsZi5fc2V0X3N0YXJ0X2NtZChwb3J0X29iaikKKworICAg
IGRlZiBfc2V0X3N0YXJ0X2NtZChzZWxmLCBwb3J0X29iaik6CisgICAgICAgIGZpbGVfcGF0aCA9
IHNlbGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChzZWxmLl9maWxlc3lzdGVtLnNwbGl0KF9fZmlsZV9f
KVswXSkKKyAgICAgICAgc2VsZi5fc3RhcnRfY21kID0gWyJweXRob24iLCBzZWxmLl9maWxlc3lz
dGVtLmpvaW4oZmlsZV9wYXRoLCAid2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNoZXIucHkiKV0KKyAg
ICAgICAgc2VsZi5fY3dkID0gcG9ydF9vYmoucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCJMYXlvdXRU
ZXN0cyIsIHNlbGYuX2RvY19yb290KQorCisgICAgZGVmIF9jb3B5X3dlYmtpdF90ZXN0X2ZpbGVz
KHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdDb3B5aW5nIFdlYktpdCByZXNvdXJjZXMgZmls
ZXMnKQorICAgICAgICBmb3IgZiBpbiBzZWxmLl9yZXNvdXJjZXNfZmlsZXNfdG9fY29weToKKyAg
ICAgICAgICAgIHdlYmtpdF9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9s
YXlvdXRfcm9vdCwgInJlc291cmNlcyIsIGYpCisgICAgICAgICAgICBpZiBzZWxmLl9maWxlc3lz
dGVtLmlzZmlsZSh3ZWJraXRfZmlsZW5hbWUpOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVz
eXN0ZW0uY29weWZpbGUod2Via2l0X2ZpbGVuYW1lLCBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2Vs
Zi5fZG9jX3Jvb3QsICJyZXNvdXJjZXMiLCBmKSkKKyAgICAgICAgX2xvZy5kZWJ1ZygnQ29weWlu
ZyBXZWJLaXQgd2ViIHBsYXRmb3JtIHNlcnZlciBjb25maWcuanNvbicpCisgICAgICAgIGNvbmZp
Z193a19maWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9sYXlvdXRfcm9vdCwg
ImltcG9ydGVkIiwgInczYyIsICJyZXNvdXJjZXMiLCAiY29uZmlnLmpzb24iKQorICAgICAgICBp
ZiBzZWxmLl9maWxlc3lzdGVtLmlzZmlsZShjb25maWdfd2tfZmlsZW5hbWUpOgorICAgICAgICAg
ICAgc2VsZi5fZmlsZXN5c3RlbS5jb3B5ZmlsZShjb25maWdfd2tfZmlsZW5hbWUsIHNlbGYuX2Zp
bGVzeXN0ZW0uam9pbihzZWxmLl9kb2Nfcm9vdCwgImNvbmZpZy5qc29uIikpCisKKyAgICBkZWYg
X2NsZWFuX3dlYmtpdF90ZXN0X2ZpbGVzKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdDbGVh
bmluZyBXUFQgcmVzb3VyY2VzIGZpbGVzJykKKyAgICAgICAgZm9yIGYgaW4gc2VsZi5fcmVzb3Vy
Y2VzX2ZpbGVzX3RvX2NvcHk6CisgICAgICAgICAgICB3cHRfZmlsZW5hbWUgPSBzZWxmLl9maWxl
c3lzdGVtLmpvaW4oc2VsZi5fZG9jX3Jvb3QsICJyZXNvdXJjZXMiLCBmKQorICAgICAgICAgICAg
aWYgc2VsZi5fZmlsZXN5c3RlbS5pc2ZpbGUod3B0X2ZpbGVuYW1lKToKKyAgICAgICAgICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZSh3cHRfZmlsZW5hbWUpCisgICAgICAgIF9sb2cuZGVi
dWcoJ0NsZWFuaW5nIFdQVCB3ZWIgcGxhdGZvcm0gc2VydmVyIGNvbmZpZy5qc29uJykKKyAgICAg
ICAgY29uZmlnX3dwdF9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9kb2Nf
cm9vdCwgImNvbmZpZy5qc29uIikKKyAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5pc2ZpbGUo
Y29uZmlnX3dwdF9maWxlbmFtZSk6CisgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92
ZShjb25maWdfd3B0X2ZpbGVuYW1lKQorCisgICAgZGVmIF9wcmVwYXJlX2NvbmZpZyhzZWxmKToK
KyAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5fb3V0cHV0X2Rpcik6Cisg
ICAgICAgICAgICBvdXRwdXRfbG9nID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX291dHB1
dF9kaXIsIHNlbGYuX2xvZ19maWxlX25hbWUpCisgICAgICAgICAgICBzZWxmLl93c291dCA9IHNl
bGYuX2ZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcob3V0cHV0X2xvZykKKyAg
ICAgICAgc2VsZi5fY29weV93ZWJraXRfdGVzdF9maWxlcygpCisKKyAgICBkZWYgX3NwYXduX3By
b2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuX3N0ZG91dF9kYXRhID0gTm9uZQorICAgICAgICBz
ZWxmLl9zdGRlcnJfZGF0YSA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fd3NvdXQ6CisgICAgICAg
ICAgICBzZWxmLl9wcm9jZXNzID0gc2VsZi5fZXhlY3V0aXZlLnBvcGVuKHNlbGYuX3N0YXJ0X2Nt
ZCwgY3dkPXNlbGYuX2N3ZCwgc2hlbGw9RmFsc2UsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rk
b3V0PXNlbGYuX3dzb3V0LCBzdGRlcnI9c2VsZi5fd3NvdXQpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLl9wcm9jZXNzID0gc2VsZi5fZXhlY3V0aXZlLnBvcGVuKHNlbGYuX3N0YXJ0
X2NtZCwgY3dkPXNlbGYuX2N3ZCwgc2hlbGw9RmFsc2UsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwg
c3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShzZWxmLl9waWRfZmlsZSwgc3RyKHNl
bGYuX3Byb2Nlc3MucGlkKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Nlc3MucGlkCisKKyAg
ICBkZWYgX3N0b3BfcnVubmluZ19zZXJ2ZXIoc2VsZik6CisgICAgICAgIF9sb2cuZGVidWcoJ1N0
b3BwaW5nICVzIHNlcnZlcicgJSAoc2VsZi5fbmFtZSkpCisgICAgICAgIHNlbGYuX2NsZWFuX3dl
YmtpdF90ZXN0X2ZpbGVzKCkKKyAgICAgICAgaWYgc2VsZi5fcGlkIGFuZCBub3Qgc2VsZi5fZXhl
Y3V0aXZlLmNoZWNrX3J1bm5pbmdfcGlkKHNlbGYuX3BpZCk6CisgICAgICAgICAgICBzZWxmLl9m
aWxlc3lzdGVtLnJlbW92ZShzZWxmLl9waWRfZmlsZSkKKyAgICAgICAgICAgIHJldHVybgorICAg
ICAgICBpZiBzZWxmLl9wcm9jZXNzOgorICAgICAgICAgICAgKHNlbGYuX3N0ZG91dF9kYXRhLCBz
ZWxmLl9zdGRlcnJfZGF0YSkgPSBzZWxmLl9wcm9jZXNzLmNvbW11bmljYXRlKGlucHV0PSdcbicp
CisgICAgICAgIGlmIHNlbGYuX3dzb3V0OgorICAgICAgICAgICAgc2VsZi5fd3NvdXQuY2xvc2Uo
KQorICAgICAgICAgICAgc2VsZi5fd3NvdXQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX2V4ZWN1
dGl2ZS5jaGVja19ydW5uaW5nX3BpZChzZWxmLl9waWQpOgorICAgICAgICAgICAgcmFpc2UgaHR0
cF9zZXJ2ZXJfYmFzZS5TZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0b3AgJXM6IHBsZWFzZSBnbyB0
byB3ZWIgcGxhdGZvcm0gdGVzdCBzZXJ2ZXIgbG9nIGZpbGUgdG8gZ2V0IHRoZSBQSUQgbGlzdCcg
JSAoc2VsZi5fbmFtZSkpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKHNlbGYuX3Bp
ZF9maWxlKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
c2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
cl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZGY5NzJhMmJmNDNmNjk2NTBlNjg4MDQ0ZjIwZGQ3
OTA4NjM2MDAzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfdW5pdHRlc3QucHkKQEAg
LTAsMCArMSw0NCBAQAorIyAgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMg
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24g
SW5jLiBub3IgdGhlIG5hbWVzIG9mCisjICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMg
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyMgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyAgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyAgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB0aW1lCitp
bXBvcnQgdW5pdHRlc3QyIGFzIHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3Rf
bW9jayBpbXBvcnQgTW9ja0hvc3QKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgUG9ydAorZnJv
bSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucworCitmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciBpbXBvcnQg
V2ViUGxhdGZvcm1UZXN0U2VydmVyCisKKworY2xhc3MgVGVzdFdlYlBsYXRmb3JtVGVzdFNlcnZl
cih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc3RhcnRfY21kKHNlbGYpOgorCisg
ICAgICAgIHBvcnQgPSBQb3J0KE1vY2tIb3N0KCksICJ0ZXN0IikKKyAgICAgICAgc2VydmVyID0g
V2ViUGxhdGZvcm1UZXN0U2VydmVyKHBvcnQsICJ3cHR0ZXN0IiwgIi9tb2NrL291dHB1dF9kaXIi
LCAiL21vY2svb3V0cHV0X2Rpci9waWQudHh0IikKKworICAgICAgICBzZXJ2ZXIuX3ByZXBhcmVf
Y29uZmlnKCkKKyAgICAgICAgc2VydmVyLl93c291dCA9IE5vbmUKKyAgICAgICAgc2VydmVyLl9z
cGF3bl9wcm9jZXNzKCkKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBzZXJ2ZXIuX3N0
b3BfcnVubmluZ19zZXJ2ZXIoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQppbmRleCBj
OWU4NDlkNTQ0ZDQ0MDE5YzkyNDRiMmVkZjRjNTlkMWQ3OGQ2MTA5Li5jMjk0ZTQ4Yzg3ZTU1OWQx
OTQ4OWJlMjdjOTA4ZTdiN2FmZjhiOGRiIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5w
eQpAQCAtNTksNiArNTksNyBAQCBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHNlcnZlcl9wcm9j
ZXNzCiBmcm9tIHdlYmtpdHB5LnBvcnQuZmFjdG9yeSBpbXBvcnQgUG9ydEZhY3RvcnkKIGZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGFwYWNoZV9odHRwX3NlcnZlcgog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgaHR0cF9zZXJ2ZXIKK2Zy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IHdlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgd2Vic29j
a2V0X3NlcnZlcgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC0xMTYs
NiArMTE3LDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBzZWxmLl9oZWxwZXIgPSBO
b25lCiAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyID0gTm9uZQogICAgICAgICBzZWxmLl93ZWJz
b2NrZXRfc2VydmVyID0gTm9uZQorICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2
ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX2ltYWdlX2RpZmZlciA9IE5vbmUKICAgICAgICAgc2Vs
Zi5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9j
ZXNzICAjIG92ZXJyaWRhYmxlIGZvciB0ZXN0aW5nCiAKQEAgLTg4MSw2ICs4ODMsMTggQEAgY2xh
c3MgUG9ydChvYmplY3QpOgogICAgICAgICBzZXJ2ZXIuc3RhcnQoKQogICAgICAgICBzZWxmLl93
ZWJzb2NrZXRfc2VydmVyID0gc2VydmVyCiAKKyAgICBkZWYgc3RhcnRfd2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyKHNlbGYsIGFkZGl0aW9uYWxfZGlycz1Ob25lLCBudW1iZXJfb2Zfc2VydmVycz1O
b25lKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIs
ICdBbHJlYWR5IHJ1bm5pbmcgYSBXZWIgUGxhdGZvcm0gVGVzdCBzZXJ2ZXIuJworCisgICAgICAg
IHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IHdlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
ci5XZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIoc2VsZiwgIndwdHdrIiwgc2VsZi5yZXN1bHRzX2RpcmVj
dG9yeSgpKQorICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIuc3RhcnQoKQor
CisgICAgZGVmIHdlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9kb2Nfcm9vdChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHdlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5kb2Nfcm9vdChzZWxmKSArIHNlbGYu
VEVTVF9QQVRIX1NFUEFSQVRPUgorCisgICAgZGVmIHdlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9i
YXNlX3VybChzZWxmKToKKyAgICAgICAgcmV0dXJuIHdlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5i
YXNlX3VybChzZWxmKQorCiAgICAgZGVmIGh0dHBfc2VydmVyX3N1cHBvcnRzX2lwdjYoc2VsZik6
CiAgICAgICAgICMgQ3lnd2luIGlzIHRoZSBvbmx5IHBsYXRmb3JtIHRvIHN0aWxsIHVzZSBBcGFj
aGUgMS4zLCB3aGljaCBvbmx5IHN1cHBvcnRzIElQVjQuCiAgICAgICAgICMgT25jZSBpdCBtb3Zl
cyB0byBBcGFjaGUgMiwgd2UgY2FuIGRyb3AgdGhpcyBtZXRob2QgYWx0b2dldGhlci4KQEAgLTkw
Niw2ICs5MjAsMTEgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5fd2Vi
c29ja2V0X3NlcnZlci5zdG9wKCkKICAgICAgICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIg
PSBOb25lCiAKKyAgICBkZWYgc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcjoKKyAgICAgICAgICAgIHNl
bGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5zdG9wKCkKKyAgICAgICAgICAgIHNlbGYuX3dl
Yl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IE5vbmUKKwogICAgIGRlZiBleGl0X2NvZGVfZnJvbV9z
dW1tYXJpemVkX3Jlc3VsdHMoc2VsZiwgdW5leHBlY3RlZF9yZXN1bHRzKToKICAgICAgICAgIiIi
R2l2ZW4gc3VtbWFyaXplZCByZXN1bHRzLCBjb21wdXRlIHRoZSBleGl0IGNvZGUgdG8gYmUgcmV0
dXJuZWQgYnkgbmV3LXJ1bi13ZWJraXQtdGVzdHMuCiAgICAgICAgIEJvdHMgdHVybiByZWQgd2hl
biB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBub24temVybyB2YWx1ZS4gQnkgZGVmYXVsdCwgcmV0
dXJuIHRoZSBudW1iZXIgb2YgcmVncmVzc2lvbnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJp
dmVyLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggY2RiNzNjY2U0NzJm
MzIyMGQ4ZGZhODQyYjcxNTQ2ZDgwNTM4MmQ0OS4uYjUxNzRlOWMwMWJlZDY2MmYxOGIxZDgyMWE1
Nzc3ODYwMTFkYWRlOQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKQEAgLTM3LDcgKzM3
LDcgQEAgaW1wb3J0IG9zCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgcGF0
aAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnByb2ZpbGVyIGltcG9ydCBQcm9maWxlckZh
Y3RvcnkKLQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycy53ZWJfcGxhdGZvcm1f
dGVzdF9zZXJ2ZXIgaW1wb3J0IFdlYlBsYXRmb3JtVGVzdFNlcnZlcgogCiBfbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoX19uYW1lX18pCiAKQEAgLTE1OSw2ICsxNTksOSBAQCBjbGFzcyBEcml2ZXIo
b2JqZWN0KToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVyID0gTm9u
ZQogCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3RfZGlyID0gc2VsZi5fcG9ydC53ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXJfZG9jX3Jvb3QoKQorICAgICAgICBzZWxmLndlYl9wbGF0Zm9y
bV90ZXN0X2Jhc2VfdXJsID0gc2VsZi5fcG9ydC53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfYmFz
ZV91cmwoKQorCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuc3RvcCgpCiAK
QEAgLTI0NCw4ICsyNDcsMTQgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgZGVmIGlzX2h0
dHBfdGVzdChzZWxmLCB0ZXN0X25hbWUpOgogICAgICAgICByZXR1cm4gdGVzdF9uYW1lLnN0YXJ0
c3dpdGgoc2VsZi5IVFRQX0RJUikgYW5kIG5vdCB0ZXN0X25hbWUuc3RhcnRzd2l0aChzZWxmLkhU
VFBfTE9DQUxfRElSKQogCisgICAgZGVmIGlzX3dlYl9wbGF0Zm9ybV90ZXN0KHNlbGYsIHRlc3Rf
bmFtZSk6CisgICAgICAgIHJldHVybiB0ZXN0X25hbWUuc3RhcnRzd2l0aChzZWxmLndlYl9wbGF0
Zm9ybV90ZXN0X2RpcikKKwogICAgIGRlZiB0ZXN0X3RvX3VyaShzZWxmLCB0ZXN0X25hbWUpOgog
ICAgICAgICAiIiJDb252ZXJ0IGEgdGVzdCBuYW1lIHRvIGEgVVJJLiIiIgorICAgICAgICBpZiBz
ZWxmLmlzX3dlYl9wbGF0Zm9ybV90ZXN0KHRlc3RfbmFtZSk6CisgICAgICAgICAgICByZXR1cm4g
c2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9iYXNlX3VybCArIHRlc3RfbmFtZVtsZW4oc2VsZi53ZWJf
cGxhdGZvcm1fdGVzdF9kaXIpOl0KKwogICAgICAgICBpZiBub3Qgc2VsZi5pc19odHRwX3Rlc3Qo
dGVzdF9uYW1lKToKICAgICAgICAgICAgIHJldHVybiBwYXRoLmFic3BhdGhfdG9fdXJpKHNlbGYu
X3BvcnQuaG9zdC5wbGF0Zm9ybSwgc2VsZi5fcG9ydC5hYnNwYXRoX2Zvcl90ZXN0KHRlc3RfbmFt
ZSkpCiAKQEAgLTI2OSw2ICsyNzgsOCBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAg
ICAgIGlmIG5vdCBwcmVmaXguZW5kc3dpdGgoJy8nKToKICAgICAgICAgICAgICAgICBwcmVmaXgg
Kz0gJy8nCiAgICAgICAgICAgICByZXR1cm4gdXJpW2xlbihwcmVmaXgpOl0KKyAgICAgICAgaWYg
dXJpLnN0YXJ0c3dpdGgoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9iYXNlX3VybCk6CisgICAgICAg
ICAgICByZXR1cm4gdXJpLnJlcGxhY2Uoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9iYXNlX3VybCwg
c2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9kaXIpCiAgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJo
dHRwOi8vIik6CiAgICAgICAgICAgICByZXR1cm4gdXJpLnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4w
LjE6ODAwMC8nLCBzZWxmLkhUVFBfRElSKQogICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgiaHR0
cHM6Ly8iKToKQEAgLTQwMCw3ICs0MTEsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAg
ICAgIyBGSVhNRTogcGVyZm9ybWFuY2UgdGVzdHMgcGFzcyBpbiBmdWxsIFVSTHMgaW5zdGVhZCBv
ZiB0ZXN0IG5hbWVzLgogICAgICAgICBpZiBkcml2ZXJfaW5wdXQudGVzdF9uYW1lLnN0YXJ0c3dp
dGgoJ2h0dHA6Ly8nKSBvciBkcml2ZXJfaW5wdXQudGVzdF9uYW1lLnN0YXJ0c3dpdGgoJ2h0dHBz
Oi8vJykgIG9yIGRyaXZlcl9pbnB1dC50ZXN0X25hbWUgPT0gKCdhYm91dDpibGFuaycpOgogICAg
ICAgICAgICAgY29tbWFuZCA9IGRyaXZlcl9pbnB1dC50ZXN0X25hbWUKLSAgICAgICAgZWxpZiBz
ZWxmLmlzX2h0dHBfdGVzdChkcml2ZXJfaW5wdXQudGVzdF9uYW1lKToKKyAgICAgICAgZWxpZiBz
ZWxmLmlzX2h0dHBfdGVzdChkcml2ZXJfaW5wdXQudGVzdF9uYW1lKSBvciBzZWxmLmlzX3dlYl9w
bGF0Zm9ybV90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpOgogICAgICAgICAgICAgY29tbWFu
ZCA9IHNlbGYudGVzdF90b191cmkoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkKICAgICAgICAgZWxz
ZToKICAgICAgICAgICAgIGNvbW1hbmQgPSBzZWxmLl9wb3J0LmFic3BhdGhfZm9yX3Rlc3QoZHJp
dmVyX2lucHV0LnRlc3RfbmFtZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9kcml2ZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJp
dmVyX3VuaXR0ZXN0LnB5CmluZGV4IGM2MmE1NDliNTJmMjQ5MWNmZGEzNTRmMDU3YWQ4NjI4MmE4
NGNmYTQuLjgzNTFjNTgzZTYxZTg1MGE0MzY2ZDJmYzgyOGFjYjExMmIwNzM1MzMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQpAQCAtMTA5LDYg
KzEwOSw3IEBAIGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGRyaXZlci50ZXN0X3RvX3VyaSgnZm9vL2Jhci5odG1sJyksICdmaWxl
Oi8vJXMvZm9vL2Jhci5odG1sJyAlIHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGRyaXZlci50ZXN0X3RvX3VyaSgnaHR0cC90ZXN0cy9mb28uaHRtbCcp
LCAnaHR0cDovLzEyNy4wLjAuMTo4MDAwL2Zvby5odG1sJykKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChkcml2ZXIudGVzdF90b191cmkoJ2h0dHAvdGVzdHMvc3NsL2Jhci5odG1sJyksICdodHRw
czovLzEyNy4wLjAuMTo4NDQzL3NzbC9iYXIuaHRtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZHJpdmVyLnRlc3RfdG9fdXJpKCdpbXBvcnRlZC93M2Mvd3B0L2Zvby9iYXIuaHRtbCcpLCAn
aHR0cDovL2xvY2FsaG9zdDo4ODAwL2Zvby9iYXIuaHRtbCcpCiAKICAgICBkZWYgdGVzdF91cmlf
dG9fdGVzdChzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKQEAgLTExNiw2
ICsxMTcsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudXJpX3RvX3Rlc3QoJ2ZpbGU6Ly8lcy9mb28vYmFyLmh0
bWwnICUgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpLCAnZm9vL2Jhci5odG1sJykKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudXJpX3RvX3Rlc3QoJ2h0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9mb28uaHRtbCcpLCAnaHR0cC90ZXN0cy9mb28uaHRtbCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZHJpdmVyLnVyaV90b190ZXN0KCdodHRwczovLzEyNy4wLjAuMTo4NDQzL3NzbC9iYXIu
aHRtbCcpLCAnaHR0cC90ZXN0cy9zc2wvYmFyLmh0bWwnKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGRyaXZlci51cmlfdG9fdGVzdCgnaHR0cDovL2xvY2FsaG9zdDo4ODAwL2Zvby9iYXIuaHRt
bCcpLCAnaW1wb3J0ZWQvdzNjL3dwdC9mb28vYmFyLmh0bWwnKQogCiAgICAgZGVmIHRlc3RfcmVh
ZF9ibG9jayhzZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IDVmNTQxMjdlMzFmMDk4NzRkY2Q5MDQ5N2E0NGExOTA5
ZDQ1ODE0ZTcuLjY4MWRmMDZkMmJkODFjYjFkZGZlZjY1ODRkZTAyNmVlMDIyOWZjNjYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE0LTEyLTE5ICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgSW50
ZWdyYXRlIFdQIHB5dGhvbiBzZXJ2ZXIgaW50byBXZWJLaXQgdGVzdCBmcmFtZXdvcmsKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzA5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbnRhaW5zIHBhcmFt
ZXRlcnMgb2Ygd2ViIHBsYXRmb3JtIHRlc3Qgc2VydmVyLgorCisgICAgICAgICogcmVzb3VyY2Vz
L2NvbmZpZy5qc29uOiBBZGRlZC4KKwogMjAxNC0xMS0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxz
YWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIEltcG9ydCB3M2MgdGVzdHMgZm9yIGNh
bnZhcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy9jb25m
aWcuanNvbiBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9yZXNvdXJjZXMvY29uZmlnLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGZiMzBlMDFhYmFmZDE2ZGU4ZGIwZTEwOTRkYzA0ZGY0ODNkMmFhYgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9yZXNvdXJjZXMvY29uZmln
Lmpzb24KQEAgLTAsMCArMSw3IEBACit7Imhvc3QiOiAibG9jYWxob3N0IiwKKyAicG9ydHMiOnsi
aHR0cCI6Wzg4MDAsIDg4MDFdLAorICAgICAgICAgICJodHRwcyI6W10sCisgICAgICAgICAgIndz
IjpbNDkwMDFdfSwKKyAiY2hlY2tfc3ViZG9tYWlucyI6IGZhbHNlLAorICJsb2dfbGV2ZWwiOiJk
ZWJ1ZyIsCisgImJpbmRfaG9zdG5hbWUiOiBmYWxzZX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243671</attachid>
            <date>2014-12-23 06:47:27 -0800</date>
            <delta_ts>2014-12-29 12:08:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127094-20141223154727.patch</filename>
            <type>text/plain</type>
            <size>37187</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3NjIwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGM2N2ZmOWVjZDIxOWYwYjhjOGEyZDcwNmY1MWQ2Yjgx
NjU3Y2UxYS4uY2E0MzFkNWVjNTZhZjY1ZDZmZGQ4ZmNlOTcyMDVlN2MxYTQxNzdjMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3
IEBACisyMDE0LTEyLTIwICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgSW50ZWdyYXRlIFdQIHB5dGhvbiBzZXJ2ZXIgaW50byBXZWJLaXQgdGVz
dCBmcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNzA5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyBXM0Mgd2ViIHNlcnZlciAod3B0c2VydmVyKSBhcyBhIG5ldyBI
VFRQIHNlcnZlci4KKyAgICAgICAgd3B0c2VydmVyIGlzIHVzZWQgdG8gc2VydmUgYWxsIHRlc3Rz
IGluc2lkZSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd3B0LgorICAgICAgICB3cHRzZXJ2ZXIg
aW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIGltcG9ydGVkIHdpdGhpbiB0aGUgaW1wb3J0IG9mIHRo
ZSBXZWIgUGxhdGZvcm0gVGVzdCBzdWl0ZSAodG8gZW5zdXJlIGtlZXBpbmcgc2VydmVyIGFuZCB0
ZXN0cyBpbiBzeW5jKSBpbiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd3B0LgorCisgICAgICAg
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rf
bGF1bmNoZXIucHkgc2VydmVzIGFzIG1haW4gZW50cnkgcG9pbnQgdG8gd3B0IHNwYXduZWQgcHJv
Y2Vzcy4KKyAgICAgICAgU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkgaXMgcmVzcG9uc2libGUgdG8gc3RhcnQvc3RvcCB0aGUg
d3B0IHNlcnZlciBwcm9jZXNzLgorICAgICAgICBJdCBhbHNvIHNldHMgdXAgdGhlIHNlcnZlciBj
b25maWcgYW5kIHRlc3RoYXJuZXNzLmpzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIGZpbGVzIGF0IHN0
YXJ0IGFuZCBzdG9wIG9mIHRoZSB3cHQgc2VydmVyLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2V4ZWN1dGl2ZV9tb2NrLnB5OgorICAgICAgICAoTW9ja1Byb2Nlc3MuY29tbXVuaWNhdGUpOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91
dF90ZXN0X3J1bm5lci5weTogQWRkaW5nIHN0YXJ0L3N0b3Agb2Ygd2ViIHBsYXRmb3JtIHRlc3Qg
c2VydmVyIGFjY29yZGluZyBib29sZWFuIHBhcmFtZXRlci4KKyAgICAgICAgKExheW91dFRlc3RS
dW5uZXIuX19pbml0X18pOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5ydW5fdGVzdHMpOgor
ICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5zdGFydF9zZXJ2ZXJzKToKKyAgICAgICAgKExheW91
dFRlc3RSdW5uZXIuc3RvcF9zZXJ2ZXJzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHk6IFVw
ZGF0ZWQgdG8gY2hlY2sgZm9yIHdwdCBzZXJ2ZXIgc3RhcnQvc3RvcC4KKyAgICAgICAgKExheW91
dFRlc3RSdW5uZXJUZXN0cy5fcnVuX3Rlc3RzKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXJU
ZXN0cy50ZXN0X3NlcnZlcnNfc3RhcnRlZC5zdGFydF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIp
OgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lclRlc3RzLnRlc3Rfc2VydmVyc19zdGFydGVkLnN0
b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXJU
ZXN0cyk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJzX3N0YXJ0
ZWQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L21hbmFnZXIucHk6ICBVcGRhdGVkIHRvIGNoZWNrIHdoZXRoZXIgYSB0ZXN0IGlzIGEgd3B0IHRl
c3QgYW5kIHdoZXRoZXIgd3B0IHNlcnZlciBsYXVuY2ggaXMgbmVlZGVkLgorICAgICAgICAoTWFu
YWdlci5fX2luaXRfXyk6CisgICAgICAgIChNYW5hZ2VyLl9pc19odHRwX3Rlc3QpOgorICAgICAg
ICAoTWFuYWdlci5faXNfd2ViX3BsYXRmb3JtX3Rlc3QpOgorICAgICAgICAoTWFuYWdlci5fcnVu
X3Rlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoTWFuYWdlclRlc3QudGVzdF9uZWVk
c19zZXJ2ZXJzLmdldF93cHRfZG9jX3Jvb3QpOgorICAgICAgICAoTWFuYWdlclRlc3QudGVzdF9u
ZWVkc19zZXJ2ZXJzLmdldF9tYW5hZ2VyKToKKyAgICAgICAgKE1hbmFnZXJUZXN0LnRlc3RfbmVl
ZHNfc2VydmVycyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weTogQWRkZWQgYW4gb3B0aW9uIHRvIGNvbnRyb2wgdGhlIGRvY19yb290
IG9mIHRoZSB3cHQgc2VydmVyLgorICAgICAgICAocGFyc2VfYXJncyk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9sYXVu
Y2hlci5weTogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5weTogQWRk
ZWQuCisgICAgICAgIChkb2Nfcm9vdCk6CisgICAgICAgIChiYXNlX3VybCk6CisgICAgICAgIChX
ZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9f
aW5pdF9fKToKKyAgICAgICAgKFdlYlBsYXRmb3JtVGVzdFNlcnZlci5fc2V0X3N0YXJ0X2NtZCk6
CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX2NvcHlfd2Via2l0X3Rlc3RfZmlsZXMp
OgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9jbGVhbl93ZWJraXRfdGVzdF9maWxl
cyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3ByZXBhcmVfY29uZmlnKToKKyAg
ICAgICAgKFdlYlBsYXRmb3JtVGVzdFNlcnZlci5fc3Bhd25fcHJvY2Vzcyk6CisgICAgICAgIChX
ZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3N0b3BfcnVubmluZ19zZXJ2ZXIpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJQbGF0Zm9ybVRlc3RTZXJ2
ZXIpOgorICAgICAgICAoVGVzdFdlYlBsYXRmb3JtVGVzdFNlcnZlci50ZXN0X3N0YXJ0X2NtZCk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0
Ll9faW5pdF9fKToKKyAgICAgICAgKFBvcnQudG8uc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyKToKKyAgICAgICAgKFBvcnQudG8pOgorICAgICAgICAoUG9ydC50by53ZWJfcGxhdGZvcm1f
dGVzdF9zZXJ2ZXJfZG9jX3Jvb3QpOgorICAgICAgICAoUG9ydC50by53ZWJfcGxhdGZvcm1fdGVz
dF9zZXJ2ZXJfYmFzZV91cmwpOgorICAgICAgICAoUG9ydC50by5zdG9wX3dlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weTog
VXBkYXRlZCB0aGUgdGVzdCBuYW1lIDwtPiB0ZXN0IFVSTCBjb252ZXJzaW9uIHJvdXRpbmVzLgor
ICAgICAgICAoRHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAgKERyaXZlci5pc193ZWJfcGxhdGZv
cm1fdGVzdCk6CisgICAgICAgIChEcml2ZXIudGVzdF90b191cmkpOgorICAgICAgICAoRHJpdmVy
LnVyaV90b190ZXN0KToKKyAgICAgICAgKERyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1
dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weTog
IFVwZGF0ZWQgdGVzdHMgYWNjb3JkaW5nIG5ldyBjb252ZXJzaW9uIHJ1bGVzLgorICAgICAgICAo
RHJpdmVyVGVzdC50ZXN0X3Rlc3RfdG9fdXJpKToKKyAgICAgICAgKERyaXZlclRlc3QudGVzdF91
cmlfdG9fdGVzdCk6CisKIDIwMTQtMTItMTkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBs
ZS5jb20+CiAKICAgICAgICAgW1dpbl0gUmV2aXNlIERSVCBsb2dpYyB0byBtYXRjaCBNYWMuCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZl
X21vY2sucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZl
X21vY2sucHkKaW5kZXggMTgxYTVmOWE3MWNlNTU5NjY2YTgyOWU2NjNkNTFhYTVlYTIxNDlhNy4u
OWYxMTRkMWIxY2JkMGIzMDk5NTE0MGQyNjM1NzM2OGZkNzE2ZTYwYyAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weQpA
QCAtNDYsNiArNDYsOSBAQCBjbGFzcyBNb2NrUHJvY2VzcyhvYmplY3QpOgogICAgIGRlZiB3YWl0
KHNlbGYpOgogICAgICAgICByZXR1cm4KIAorICAgIGRlZiBjb21tdW5pY2F0ZShzZWxmLCBpbnB1
dD1Ob25lKToKKyAgICAgICAgcmV0dXJuIChzZWxmLnN0ZG91dCwgc2VsZi5zdGRlcnIpCisKICMg
RklYTUU6IFRoaXMgc2hvdWxkIGJlIHVuaWZpZWQgd2l0aCBNb2NrRXhlY3V0aXZlMgogY2xhc3Mg
TW9ja0V4ZWN1dGl2ZShvYmplY3QpOgogICAgIFBJUEUgPSAiTU9DSyBQSVBFIgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0
X3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5CmluZGV4IDkwMjdhZjdmODU1ZmI1ZTQ0ZWY5
ZTBjOTI0ZDA0ZTcwYzU0MzNkYTIuLjdmM2JhNjQ1NWE0YWMxNTlmODg3MjRmZmI1NjgzYmRjM2Vm
ODIyN2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2Nv
bnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKQEAgLTc0
LDE0ICs3NCwxNiBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgIHNl
bGYuX3Rlc3RfaW5wdXRzID0gW10KICAgICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IE5vbmUKICAg
ICAgICAgc2VsZi5fbmVlZHNfd2Vic29ja2V0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fbmVlZHNf
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gTm9uZQogICAgICAgICBzZWxmLl9yZXRyeWluZyA9
IEZhbHNlCiAgICAgICAgIHNlbGYuX2N1cnJlbnRfcnVuX3Jlc3VsdHMgPSBOb25lCiAKLSAgICBk
ZWYgcnVuX3Rlc3RzKHNlbGYsIGV4cGVjdGF0aW9ucywgdGVzdF9pbnB1dHMsIHRlc3RzX3RvX3Nr
aXAsIG51bV93b3JrZXJzLCBuZWVkc19odHRwLCBuZWVkc193ZWJzb2NrZXRzLCByZXRyeWluZyk6
CisgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBleHBlY3RhdGlvbnMsIHRlc3RfaW5wdXRzLCB0ZXN0
c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVlZHNfd2Vic29ja2V0cywgbmVl
ZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLCByZXRyeWluZyk6CiAgICAgICAgIHNlbGYuX2V4
cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucwogICAgICAgICBzZWxmLl90ZXN0X2lucHV0cyA9IHRl
c3RfaW5wdXRzCiAgICAgICAgIHNlbGYuX25lZWRzX2h0dHAgPSBuZWVkc19odHRwCiAgICAgICAg
IHNlbGYuX25lZWRzX3dlYnNvY2tldHMgPSBuZWVkc193ZWJzb2NrZXRzCisgICAgICAgIHNlbGYu
X25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IG5lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlcgogICAgICAgICBzZWxmLl9yZXRyeWluZyA9IHJldHJ5aW5nCiAKICAgICAgICAgIyBG
SVhNRTogcmVuYW1lIGFsbCB2YXJpYWJsZXMgdG8gdGVzdF9ydW5fcmVzdWx0cyBvciBzb21lIHN1
Y2ggLi4uCkBAIC0xMDEsNyArMTAzLDcgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lcihvYmplY3Qp
OgogICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMgLi4u
JykKICAgICAgICAgYWxsX3NoYXJkcyA9IHNlbGYuX3NoYXJkZXIuc2hhcmRfdGVzdHModGVzdF9p
bnB1dHMsIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyksIHNlbGYuX29wdGlvbnMu
ZnVsbHlfcGFyYWxsZWwpCiAKLSAgICAgICAgaWYgc2VsZi5fbmVlZHNfaHR0cCBhbmQgc2VsZi5f
b3B0aW9ucy5odHRwOgorICAgICAgICBpZiAoc2VsZi5fbmVlZHNfaHR0cCBhbmQgc2VsZi5fb3B0
aW9ucy5odHRwKSBvciBzZWxmLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI6CiAgICAg
ICAgICAgICBzZWxmLnN0YXJ0X3NlcnZlcnMoKQogCiAgICAgICAgIG51bV93b3JrZXJzID0gbWlu
KG51bV93b3JrZXJzLCBsZW4oYWxsX3NoYXJkcykpCkBAIC0xODksNiArMTkxLDkgQEAgY2xhc3Mg
TGF5b3V0VGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJzb2Nr
ZXRzOgogICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0YXJ0aW5nIFdl
YlNvY2tldCBzZXJ2ZXIgLi4uJykKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vic29j
a2V0X3NlcnZlcigpCisgICAgICAgIGlmIHNlbGYuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3Nl
cnZlcjoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdGFydGluZyBX
ZWIgUGxhdGZvcm0gVGVzdCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3Rh
cnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKCkKIAogICAgIGRlZiBzdG9wX3NlcnZlcnMoc2Vs
Zik6CiAgICAgICAgIGlmIHNlbGYuX25lZWRzX2h0dHA6CkBAIC0xOTcsNiArMjAyLDkgQEAgY2xh
c3MgTGF5b3V0VGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJz
b2NrZXRzOgogICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0b3BwaW5n
IFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJz
b2NrZXRfc2VydmVyKCkKKyAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyOgorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0b3BwaW5n
IFdlYiBQbGF0Zm9ybSBUZXN0IHNlcnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5z
dG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcigpCiAKICAgICBkZWYgaGFuZGxlKHNlbGYsIG5h
bWUsIHNvdXJjZSwgKmFyZ3MpOgogICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYsICdfaGFu
ZGxlXycgKyBuYW1lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVu
bmVyX3VuaXR0ZXN0LnB5CmluZGV4IDg1MTQxZTY1N2QwZWQ2OWQ4NDk5ZDQ3ZTBkOWE1MGVjNzBi
ZjgwNDkuLmY4OTgzNjMyZjgyMzRkOTk1MzYzNjMxMjRhNTg3YzMzZWM3Nzg5MDYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91
dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkKQEAg
LTg1LDcgKzg1LDcgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lclRlc3RzKHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICAgICAgZXhwZWN0YXRpb25zID0gVGVzdEV4cGVjdGF0aW9ucyhydW5uZXIuX3Bv
cnQsIHRlc3RzKQogICAgICAgICBleHBlY3RhdGlvbnMucGFyc2VfYWxsX2V4cGVjdGF0aW9ucygp
CiAgICAgICAgIHJ1bm5lci5ydW5fdGVzdHMoZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgc2V0
KCksCi0gICAgICAgICAgICBudW1fd29ya2Vycz0xLCBuZWVkc19odHRwPWFueSgnaHR0cCcgaW4g
dGVzdCBmb3IgdGVzdCBpbiB0ZXN0cyksIG5lZWRzX3dlYnNvY2tldHM9YW55KFsnd2Vic29ja2V0
JyBpbiB0ZXN0IGZvciB0ZXN0IGluIHRlc3RzXSksIHJldHJ5aW5nPUZhbHNlKQorICAgICAgICAg
ICAgbnVtX3dvcmtlcnM9MSwgbmVlZHNfaHR0cD1hbnkoJ2h0dHAnIGluIHRlc3QgZm9yIHRlc3Qg
aW4gdGVzdHMpLCBuZWVkc193ZWJzb2NrZXRzPWFueShbJ3dlYnNvY2tldCcgaW4gdGVzdCBmb3Ig
dGVzdCBpbiB0ZXN0c10pLCBuZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI9YW55KFsnaW1w
b3J0ZWQvdzNjJyBpbiB0ZXN0IGZvciB0ZXN0IGluIHRlc3RzXSksIHJldHJ5aW5nPUZhbHNlKQog
CiAgICAgZGVmIHRlc3RfaW50ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXRzKHNlbGYpOgogICAg
ICAgICBydW5uZXIgPSBzZWxmLl9ydW5uZXIoKQpAQCAtMTQ3LDQ5ICsxNDcsODMgQEAgY2xhc3Mg
TGF5b3V0VGVzdFJ1bm5lclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZGVmIHN0
YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKToKICAgICAgICAgICAgIHNlbGYud2Vic29ja2V0X3N0YXJ0
ZWQgPSBUcnVlCiAKKyAgICAgICAgZGVmIHN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcigp
OgorICAgICAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCA9IFRy
dWUKKwogICAgICAgICBkZWYgc3RvcF9odHRwX3NlcnZlcigpOgogICAgICAgICAgICAgc2VsZi5o
dHRwX3N0b3BwZWQgPSBUcnVlCiAKICAgICAgICAgZGVmIHN0b3Bfd2Vic29ja2V0X3NlcnZlcigp
OgogICAgICAgICAgICAgc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IFRydWUKIAorICAgICAgICBk
ZWYgc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoKToKKyAgICAgICAgICAgIHNlbGYud2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQgPSBUcnVlCisKICAgICAgICAgaG9zdCA9IE1v
Y2tIb3N0KCkKICAgICAgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldCgndGVzdC1tYWMt
bGVvcGFyZCcpCiAgICAgICAgIHBvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIgPSBzdGFydF9odHRwX3Nl
cnZlcgogICAgICAgICBwb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIgPSBzdGFydF93ZWJzb2Nr
ZXRfc2VydmVyCisgICAgICAgIHBvcnQuc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0g
c3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyCiAgICAgICAgIHBvcnQuc3RvcF9odHRwX3Nl
cnZlciA9IHN0b3BfaHR0cF9zZXJ2ZXIKICAgICAgICAgcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2
ZXIgPSBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIKKyAgICAgICAgcG9ydC5zdG9wX3dlYl9wbGF0Zm9y
bV90ZXN0X3NlcnZlciA9IHN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyCiAKICAgICAgICAg
c2VsZi5odHRwX3N0YXJ0ZWQgPSBzZWxmLmh0dHBfc3RvcHBlZCA9IHNlbGYud2Vic29ja2V0X3N0
YXJ0ZWQgPSBzZWxmLndlYnNvY2tldF9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi53ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyX3N0b3BwZWQgPSBGYWxzZQogICAgICAgICBydW5uZXIgPSBzZWxmLl9ydW5uZXIocG9ydD1w
b3J0KQogICAgICAgICBydW5uZXIuX25lZWRzX2h0dHAgPSBUcnVlCiAgICAgICAgIHJ1bm5lci5f
bmVlZHNfd2Vic29ja2V0cyA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyID0gRmFsc2UKICAgICAgICAgcnVubmVyLnN0YXJ0X3NlcnZlcnMoKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdGFydGVkLCBUcnVlKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIEZhbHNlKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQs
IEZhbHNlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzKCkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLmh0dHBfc3RvcHBlZCwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLndlYnNvY2tldF9zdG9wcGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkLCBGYWxzZSkKIAogICAgICAg
ICBzZWxmLmh0dHBfc3RhcnRlZCA9IHNlbGYuaHR0cF9zdG9wcGVkID0gc2VsZi53ZWJzb2NrZXRf
c3RhcnRlZCA9IHNlbGYud2Vic29ja2V0X3N0b3BwZWQgPSBGYWxzZQorICAgICAgICBzZWxmLndl
Yl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVkID0gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9z
ZXJ2ZXJfc3RvcHBlZCA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5fbmVlZHNfaHR0cCA9IFRydWUK
ICAgICAgICAgcnVubmVyLl9uZWVkc193ZWJzb2NrZXRzID0gVHJ1ZQorICAgICAgICBydW5uZXIu
X25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5z
dGFydF9zZXJ2ZXJzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RhcnRl
ZCwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdGFydGVk
LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyX3N0YXJ0ZWQsIEZhbHNlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzKCkKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RvcHBlZCwgVHJ1ZSkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdG9wcGVkLCBUcnVlKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQsIEZh
bHNlKQorCisgICAgICAgIHNlbGYuaHR0cF9zdGFydGVkID0gc2VsZi5odHRwX3N0b3BwZWQgPSBz
ZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNlCisg
ICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndlYl9w
bGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgcnVubmVyLl9uZWVk
c19odHRwID0gRmFsc2UKKyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJzb2NrZXRzID0gRmFsc2UK
KyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBUcnVlCisg
ICAgICAgIHJ1bm5lci5zdGFydF9zZXJ2ZXJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLmh0dHBfc3RhcnRlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53
ZWJzb2NrZXRfc3RhcnRlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53
ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCwgVHJ1ZSkKKyAgICAgICAgcnVubmVyLnN0
b3Bfc2VydmVycygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQs
IEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0b3BwZWQs
IEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyX3N0b3BwZWQsIFRydWUpCiAKICAgICAgICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBzZWxm
Lmh0dHBfc3RvcHBlZCA9IHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tldF9z
dG9wcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3Rh
cnRlZCA9IHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQgPSBGYWxzZQogICAg
ICAgICBydW5uZXIuX25lZWRzX2h0dHAgPSBGYWxzZQogICAgICAgICBydW5uZXIuX25lZWRzX3dl
YnNvY2tldHMgPSBGYWxzZQorICAgICAgICBydW5uZXIuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlciA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5zdGFydF9zZXJ2ZXJzKCkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RhcnRlZCwgRmFsc2UpCiAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCwgRmFsc2UpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCwgRmFsc2Up
CiAgICAgICAgIHJ1bm5lci5zdG9wX3NlcnZlcnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuaHR0cF9zdG9wcGVkLCBGYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
LndlYnNvY2tldF9zdG9wcGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
LndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkLCBGYWxzZSkKIAogCiBjbGFzcyBTaGFy
ZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKaW5kZXggMzM4
NWEwMWQ4MDgzNjVmMDYyNGEyZmFhMmE1Njg3M2FhNDNjYWFmMC4uZmRiYTJiZWNmMDNhZTY3YWQz
NjBiMWZiMTI3MmQ3M2ZlZGI3NDA5ZCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CkBAIC03OSw2ICs3
OSw3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKIAogICAgICAgICBzZWxmLkhUVFBfU1VCRElS
ID0gJ2h0dHAnICsgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SCiAgICAgICAgIHNlbGYuV0VCU09D
S0VUX1NVQkRJUiA9ICd3ZWJzb2NrZXQnICsgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SCisgICAg
ICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc3ViZGlyID0gc2VsZi5fcG9ydC53ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXJfZG9jX3Jvb3QoKQogICAgICAgICBzZWxmLkxBWU9VVF9URVNUU19ESVJF
Q1RPUlkgPSAnTGF5b3V0VGVzdHMnCiAKICAgICAgICAgIyBkaXNhYmxlIHdzcyBzZXJ2ZXIuIG5l
ZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wgb24gYnVpbGRib3RzLgpAQCAtOTMsMTEgKzk0LDE0IEBA
IGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRlci5maW5k
X3Rlc3RzKHNlbGYuX29wdGlvbnMsIGFyZ3MpCiAKICAgICBkZWYgX2lzX2h0dHBfdGVzdChzZWxm
LCB0ZXN0KToKLSAgICAgICAgcmV0dXJuIHNlbGYuSFRUUF9TVUJESVIgaW4gdGVzdCBvciBzZWxm
Ll9pc193ZWJzb2NrZXRfdGVzdCh0ZXN0KQorICAgICAgICByZXR1cm4gc2VsZi5IVFRQX1NVQkRJ
UiBpbiB0ZXN0IG9yIHNlbGYuX2lzX3dlYnNvY2tldF90ZXN0KHRlc3QpIG9yIHNlbGYuX2lzX3dl
Yl9wbGF0Zm9ybV90ZXN0KHRlc3QpCiAKICAgICBkZWYgX2lzX3dlYnNvY2tldF90ZXN0KHNlbGYs
IHRlc3QpOgogICAgICAgICByZXR1cm4gc2VsZi5XRUJTT0NLRVRfU1VCRElSIGluIHRlc3QKIAor
ICAgIGRlZiBfaXNfd2ViX3BsYXRmb3JtX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHJldHVy
biBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3N1YmRpciBpbiB0ZXN0CisKICAgICBkZWYgX2h0dHBf
dGVzdHMoc2VsZiwgdGVzdF9uYW1lcyk6CiAgICAgICAgIHJldHVybiBzZXQodGVzdCBmb3IgdGVz
dCBpbiB0ZXN0X25hbWVzIGlmIHNlbGYuX2lzX2h0dHBfdGVzdCh0ZXN0KSkKIApAQCAtMjM1LDcg
KzIzOSw4IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdW1tYXJpemVkX3Jlc3VsdHMsIGluaXRpYWxfcmVzdWx0cywg
cmV0cnlfcmVzdWx0cywgZW5hYmxlZF9waXhlbF90ZXN0c19pbl9yZXRyeSkKIAogICAgIGRlZiBf
cnVuX3Rlc3RzKHNlbGYsIHRlc3RzX3RvX3J1biwgdGVzdHNfdG9fc2tpcCwgcmVwZWF0X2VhY2gs
IGl0ZXJhdGlvbnMsIG51bV93b3JrZXJzLCByZXRyeWluZyk6Ci0gICAgICAgIG5lZWRzX2h0dHAg
PSBhbnkoc2VsZi5faXNfaHR0cF90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikK
KyAgICAgICAgbmVlZHNfaHR0cCA9IGFueSgoc2VsZi5faXNfaHR0cF90ZXN0KHRlc3QpIGFuZCBu
b3Qgc2VsZi5faXNfd2ViX3BsYXRmb3JtX3Rlc3QodGVzdCkpIGZvciB0ZXN0IGluIHRlc3RzX3Rv
X3J1bikKKyAgICAgICAgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gYW55KHNlbGYu
X2lzX3dlYl9wbGF0Zm9ybV90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKICAg
ICAgICAgbmVlZHNfd2Vic29ja2V0cyA9IGFueShzZWxmLl9pc193ZWJzb2NrZXRfdGVzdCh0ZXN0
KSBmb3IgdGVzdCBpbiB0ZXN0c190b19ydW4pCiAKICAgICAgICAgdGVzdF9pbnB1dHMgPSBbXQpA
QCAtMjQzLDcgKzI0OCw3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAgIGZv
ciB0ZXN0IGluIHRlc3RzX3RvX3J1bjoKICAgICAgICAgICAgICAgICBmb3IgXyBpbiB4cmFuZ2Uo
cmVwZWF0X2VhY2gpOgogICAgICAgICAgICAgICAgICAgICB0ZXN0X2lucHV0cy5hcHBlbmQoc2Vs
Zi5fdGVzdF9pbnB1dF9mb3JfZmlsZSh0ZXN0KSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bm5l
ci5ydW5fdGVzdHMoc2VsZi5fZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9fc2tp
cCwgbnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIHJldHJ5aW5nKQor
ICAgICAgICByZXR1cm4gc2VsZi5fcnVubmVyLnJ1bl90ZXN0cyhzZWxmLl9leHBlY3RhdGlvbnMs
IHRlc3RfaW5wdXRzLCB0ZXN0c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVl
ZHNfd2Vic29ja2V0cywgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLCByZXRyeWluZykK
IAogICAgIGRlZiBfY2xlYW5fdXBfcnVuKHNlbGYpOgogICAgICAgICBfbG9nLmRlYnVnKCJGbHVz
aGluZyBzdGRvdXQiKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkKaW5kZXgg
ZDRhZmI2MDk3YzkyNzY0NjAwZmE4MjJiMTBlOWU0ZGI0YTViMzFiYy4uNGVjNjNmZGVlYjU0Yjg2
MWNkMjdhMDRlYWExZmMyYmRjM2Y4NjFlZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3Vu
aXR0ZXN0LnB5CkBAIC00Myw5ICs0MywxMyBAQCBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wg
aW1wb3J0IE1vY2tPcHRpb25zCiAKIGNsYXNzIE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICBkZWYgdGVzdF9uZWVkc19zZXJ2ZXJzKHNlbGYpOgorICAgICAgICBkZWYgZ2V0X3dw
dF9kb2Nfcm9vdCgpOgorICAgICAgICAgICAgcmV0dXJuICdpbXBvcnRlZC93M2Mvd3B0JworCiAg
ICAgICAgIGRlZiBnZXRfbWFuYWdlcigpOgogICAgICAgICAgICAgcG9ydCA9IE1vY2soKSAgIyBG
SVhNRTogVXNlIGEgdGlnaHRlciBtb2NrLgogICAgICAgICAgICAgcG9ydC5URVNUX1BBVEhfU0VQ
QVJBVE9SID0gJy8nCisgICAgICAgICAgICBwb3J0LndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9k
b2Nfcm9vdCA9IGdldF93cHRfZG9jX3Jvb3QKICAgICAgICAgICAgIG1hbmFnZXIgPSBNYW5hZ2Vy
KHBvcnQsIG9wdGlvbnM9TW9ja09wdGlvbnMoaHR0cD1UcnVlKSwgcHJpbnRlcj1Nb2NrKCkpCiAg
ICAgICAgICAgICByZXR1cm4gbWFuYWdlcgogCkBAIC01NSw2ICs1OSwxMiBAQCBjbGFzcyBNYW5h
Z2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG1hbmFnZXIgPSBnZXRfbWFuYWdl
cigpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5hZ2VyLm5lZWRzX3NlcnZlcnMoWydodHRw
L3Rlc3RzL21pc2MnXSkpCiAKKyAgICAgICAgbWFuYWdlciA9IGdldF9tYW5hZ2VyKCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG1hbmFnZXIubmVlZHNfc2VydmVycyhbJ2ltcG9ydGVkL3czYy93
cHQvdGVzdCddKSkKKworICAgICAgICBtYW5hZ2VyID0gZ2V0X21hbmFnZXIoKQorICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKG1hbmFnZXIubmVlZHNfc2VydmVycyhbJ2ltcG9ydGVkL3czYyddKSkK
KwogICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X25lZWRzX3NlcnZlcnMoc2VsZik6CiAgICAgICAg
IGRlZiBnZXRfbWFuYWdlcigpOgogICAgICAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVz
dHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZmEyOWEzMDg4NjA4
NjMzMTkxZTczMTIyOGMxODZlZTkwYjI5MGQwNC4uMmNlZTY5Y2EyNDZhZDlkN2JlNDc3MDkxZjM5
ZmM3ZDYzYjYxNzc4OAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTI5NSw2ICsyOTUsMTAgQEAgZGVmIHBhcnNlX2Fy
Z3MoYXJncyk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbmZpZ3VyYXRpb25zLiBE
b2VzIG5vdCBydW4gYW55IHRlc3RzLiIpKSwKICAgICBdKSkKIAorICAgIG9wdGlvbl9ncm91cF9k
ZWZpbml0aW9ucy5hcHBlbmQoKCJXZWIgUGxhdGZvcm0gVGVzdCBTZXJ2ZXIgT3B0aW9ucyIsIFsK
KyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0td3B0c2VydmVyLWRvYy1yb290IiwgdHlw
ZT0ic3RyaW5nIiwgaGVscD0oIlNldCB3ZWIgcGxhdGZvcm0gc2VydmVyIGRvY3VtZW50IHJvb3Qs
IHJlbGF0aXZlIHRvIExheW91dFRlc3RzIGRpcmVjdG9yeSIpKSwKKyAgICBdKSkKKwogICAgICMg
RklYTUU6IE1vdmUgdGhlc2UgaW50byBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CiAgICAgb3B0
aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoIlJlc3VsdCBKU09OIE9wdGlvbnMiLCBbCiAg
ICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLW1hc3Rlci1uYW1lIiwgaGVscD0iVGhlIG5h
bWUgb2YgdGhlIGJ1aWxkYm90IG1hc3Rlci4iKSwKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNoZXIu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0
Zm9ybV90ZXN0X2xhdW5jaGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2YWViZDNjZjA2ZWZhNjAwNDFlYTM4
NzA1OGI4MzJmZDg5Y2VhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X2xhdW5jaGVyLnB5CkBA
IC0wLDAgKzEsMzMgQEAKKyMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhl
IHRlcm1zIG9mIHRoZSAzLWNsYXVzZSBCU0QgTGljZW5zZQorIyBodHRwOi8vd3d3LnczLm9yZy9D
b25zb3J0aXVtL0xlZ2FsLzIwMDgvMDMtYnNkLWxpY2Vuc2UuaHRtbAorCitpbXBvcnQgaW1wCitp
bXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKKwor
bG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCitsb2dnZXIuc2V0TGV2ZWwobG9n
Z2luZy5ERUJVRykKKworc3lzLnBhdGguaW5zZXJ0KDEsICIuIikKK2ltcG9ydCBzZXJ2ZSBhcyBX
ZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIKKworIyBUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIGxhdW5jaCB0
aGUgd2ViIHBsYXRmb3JtIHRlc3Qgc2VydmVyIG1haW4gc2NyaXB0IChzZXJ2ZS5weSkgYW5kIHN0
b3AgaXQgd2hlbiBhc2tlZCBieSBydW4td2Via2l0LXRlc3RzCisKKworZGVmIG1haW4oYXJndiwg
c3Rkb3V0LCBzdGRlcnIpOgorICAgICMgVGhpcyBpcyBhIGNvcHkgb2Ygc2VydmUucHkgbWFpbiBm
dW5jdGlvbiwgZXhjZXB0IGZvciB0aGUgd2FpdCBzdGVwCisgICAgY29uZmlnID0gV2ViUGxhdGZv
cm1UZXN0U2VydmVyLmxvYWRfY29uZmlnKCJjb25maWcuZGVmYXVsdC5qc29uIiwgImNvbmZpZy5q
c29uIikKKyAgICBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuc2V0dXBfbG9nZ2VyKGNvbmZpZ1sibG9n
X2xldmVsIl0pCisgICAgY29uZmlnXywgc3RhcnRlZF9zZXJ2ZXJzID0gV2ViUGxhdGZvcm1UZXN0
U2VydmVyLnN0YXJ0KGNvbmZpZykKKworICAgIGZvciBwcm90b2NvbCwgc2VydmVycyBpbiBzdGFy
dGVkX3NlcnZlcnMuaXRlbXMoKToKKyAgICAgICAgZm9yIHBvcnQsIHByb2Nlc3MgaW4gc2VydmVy
czoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCIlcywgcG9ydDolZCwgcGlkOiVkIiAlIChwcm90
b2NvbCwgcG9ydCwgcHJvY2Vzcy5wcm9jLnBpZCkpCisKKyAgICBzeXMuc3RkaW4ucmVhZCgxKQor
CisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJn
dlsxOl0sIHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTFmZDRiNzgwNDY3MzBlNmU3ODk4MGQ2
NzYwZjE2MjU3NjViMmFiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkKQEAgLTAs
MCArMSwxMzIgQEAKKyMgIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjICAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZgorIyAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjICBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisjICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjICBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisjICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQganNvbgoraW1w
b3J0IGxvZ2dpbmcKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKKworX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2RlZiBkb2Nfcm9vdChwb3J0X29iaik6
CisgICAgZG9jX3Jvb3QgPSBwb3J0X29iai5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfZG9jX3Jvb3Qi
KQorICAgIGlmIGRvY19yb290IGlzIE5vbmU6CisgICAgICAgIHJldHVybiBwb3J0X29iai5ob3N0
LmZpbGVzeXN0ZW0uam9pbigiaW1wb3J0ZWQiLCAidzNjIiwgIndwdCIpCisgICAgcmV0dXJuIGRv
Y19yb290CisKKworZGVmIGJhc2VfdXJsKHBvcnRfb2JqKToKKyAgICBjb25maWdfd2tfZmlsZW5h
bWUgPSBwb3J0X29iai5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoIkxheW91dFRlc3RzIiwgImltcG9y
dGVkIiwgInczYyIsICJyZXNvdXJjZXMiLCAiY29uZmlnLmpzb24iKQorICAgIGlmIG5vdCBwb3J0
X29iai5ob3N0LmZpbGVzeXN0ZW0uaXNmaWxlKGNvbmZpZ193a19maWxlbmFtZSk6CisgICAgICAg
ICMgVGhpcyBzaG91bGQgb25seSBiZSBoaXQgYnkgd2Via2l0cHkgdW5pdCB0ZXN0cworICAgICAg
ICBfbG9nLmRlYnVnKCJObyBXUFQgY29uZmlnIGZpbGUgZm91bmQiKQorICAgICAgICByZXR1cm4g
Imh0dHA6Ly9sb2NhbGhvc3Q6ODgwMC8iCisgICAganNvbl9kYXRhID0gcG9ydF9vYmouX2ZpbGVz
eXN0ZW0ucmVhZF90ZXh0X2ZpbGUoY29uZmlnX3drX2ZpbGVuYW1lKQorICAgIGNvbmZpZyA9IGpz
b24ubG9hZHMoanNvbl9kYXRhKQorICAgIHBvcnRzID0gY29uZmlnWyJwb3J0cyJdCisgICAgcmV0
dXJuICJodHRwOi8vIiArIGNvbmZpZ1siaG9zdCJdICsgIjoiICsgc3RyKHBvcnRzWyJodHRwIl1b
MF0pICsgIi8iCisKKworY2xhc3MgV2ViUGxhdGZvcm1UZXN0U2VydmVyKGh0dHBfc2VydmVyX2Jh
c2UuSHR0cFNlcnZlckJhc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgbmFt
ZSwgbGF5b3V0X3Rlc3RfcmVzdWx0c19kaXIsIHBpZGZpbGU9Tm9uZSk6CisgICAgICAgIGh0dHBf
c2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18oc2VsZiwgcG9ydF9vYmopCisgICAg
ICAgIHNlbGYuX291dHB1dF9kaXIgPSBsYXlvdXRfdGVzdF9yZXN1bHRzX2RpcgorCisgICAgICAg
IHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2xvZ19maWxlX25hbWUgPSAnJXNfcHJv
Y2Vzc19sb2cub3V0LnR4dCcgJSAoc2VsZi5fbmFtZSkKKworICAgICAgICBzZWxmLl93c291dCA9
IE5vbmUKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGlkX2Zp
bGUgPSBwaWRmaWxlCisgICAgICAgIGlmIG5vdCBzZWxmLl9waWRfZmlsZToKKyAgICAgICAgICAg
IHNlbGYuX3BpZF9maWxlID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3J1bnRpbWVfcGF0
aCwgJyVzLnBpZCcgJSBzZWxmLl9uYW1lKQorICAgICAgICBzZWxmLl9zdGRvdXRfZGF0YSA9IE5v
bmUKKyAgICAgICAgc2VsZi5fc3RkZXJyX2RhdGEgPSBOb25lCisgICAgICAgIHNlbGYuX2ZpbGVz
eXN0ZW0gPSBwb3J0X29iai5ob3N0LmZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi5fbGF5b3V0X3Jv
b3QgPSBwb3J0X29iai5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoIkxheW91dFRlc3RzIikKKyAgICAg
ICAgc2VsZi5fZG9jX3Jvb3QgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0X3Jv
b3QsIGRvY19yb290KHBvcnRfb2JqKSkKKworICAgICAgICBzZWxmLl9yZXNvdXJjZXNfZmlsZXNf
dG9fY29weSA9IFsndGVzdGhhcm5lc3MuanMnLCAndGVzdGhhcm5lc3MuY3NzJywgJ3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzJ10KKworICAgICAgICBzZWxmLl9zZXRfc3RhcnRfY21kKHBvcnRfb2JqKQor
CisgICAgZGVmIF9zZXRfc3RhcnRfY21kKHNlbGYsIHBvcnRfb2JqKToKKyAgICAgICAgZmlsZV9w
YXRoID0gc2VsZi5fZmlsZXN5c3RlbS5hYnNwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0uc3BsaXQoX19m
aWxlX18pWzBdKQorICAgICAgICBzZWxmLl9zdGFydF9jbWQgPSBbInB5dGhvbiIsIHNlbGYuX2Zp
bGVzeXN0ZW0uam9pbihmaWxlX3BhdGgsICJ3ZWJfcGxhdGZvcm1fdGVzdF9sYXVuY2hlci5weSIp
XQorICAgICAgICBzZWxmLl9jd2QgPSBwb3J0X29iai5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoIkxh
eW91dFRlc3RzIiwgc2VsZi5fZG9jX3Jvb3QpCisKKyAgICBkZWYgX2NvcHlfd2Via2l0X3Rlc3Rf
ZmlsZXMoc2VsZik6CisgICAgICAgIF9sb2cuZGVidWcoJ0NvcHlpbmcgV2ViS2l0IHJlc291cmNl
cyBmaWxlcycpCisgICAgICAgIGZvciBmIGluIHNlbGYuX3Jlc291cmNlc19maWxlc190b19jb3B5
OgorICAgICAgICAgICAgd2Via2l0X2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNl
bGYuX2xheW91dF9yb290LCAicmVzb3VyY2VzIiwgZikKKyAgICAgICAgICAgIGlmIHNlbGYuX2Zp
bGVzeXN0ZW0uaXNmaWxlKHdlYmtpdF9maWxlbmFtZSk6CisgICAgICAgICAgICAgICAgc2VsZi5f
ZmlsZXN5c3RlbS5jb3B5ZmlsZSh3ZWJraXRfZmlsZW5hbWUsIHNlbGYuX2ZpbGVzeXN0ZW0uam9p
bihzZWxmLl9kb2Nfcm9vdCwgInJlc291cmNlcyIsIGYpKQorICAgICAgICBfbG9nLmRlYnVnKCdD
b3B5aW5nIFdlYktpdCB3ZWIgcGxhdGZvcm0gc2VydmVyIGNvbmZpZy5qc29uJykKKyAgICAgICAg
Y29uZmlnX3drX2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2xheW91dF9y
b290LCAiaW1wb3J0ZWQiLCAidzNjIiwgInJlc291cmNlcyIsICJjb25maWcuanNvbiIpCisgICAg
ICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uaXNmaWxlKGNvbmZpZ193a19maWxlbmFtZSk6CisgICAg
ICAgICAgICBzZWxmLl9maWxlc3lzdGVtLmNvcHlmaWxlKGNvbmZpZ193a19maWxlbmFtZSwgc2Vs
Zi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2RvY19yb290LCAiY29uZmlnLmpzb24iKSkKKworICAg
IGRlZiBfY2xlYW5fd2Via2l0X3Rlc3RfZmlsZXMoc2VsZik6CisgICAgICAgIF9sb2cuZGVidWco
J0NsZWFuaW5nIFdQVCByZXNvdXJjZXMgZmlsZXMnKQorICAgICAgICBmb3IgZiBpbiBzZWxmLl9y
ZXNvdXJjZXNfZmlsZXNfdG9fY29weToKKyAgICAgICAgICAgIHdwdF9maWxlbmFtZSA9IHNlbGYu
X2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9kb2Nfcm9vdCwgInJlc291cmNlcyIsIGYpCisgICAgICAg
ICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmlzZmlsZSh3cHRfZmlsZW5hbWUpOgorICAgICAgICAg
ICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKHdwdF9maWxlbmFtZSkKKyAgICAgICAgX2xv
Zy5kZWJ1ZygnQ2xlYW5pbmcgV1BUIHdlYiBwbGF0Zm9ybSBzZXJ2ZXIgY29uZmlnLmpzb24nKQor
ICAgICAgICBjb25maWdfd3B0X2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYu
X2RvY19yb290LCAiY29uZmlnLmpzb24iKQorICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmlz
ZmlsZShjb25maWdfd3B0X2ZpbGVuYW1lKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0u
cmVtb3ZlKGNvbmZpZ193cHRfZmlsZW5hbWUpCisKKyAgICBkZWYgX3ByZXBhcmVfY29uZmlnKHNl
bGYpOgorICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhzZWxmLl9vdXRwdXRfZGly
KToKKyAgICAgICAgICAgIG91dHB1dF9sb2cgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5f
b3V0cHV0X2Rpciwgc2VsZi5fbG9nX2ZpbGVfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX3dzb3V0
ID0gc2VsZi5fZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3Jfd3JpdGluZyhvdXRwdXRfbG9n
KQorICAgICAgICBzZWxmLl9jb3B5X3dlYmtpdF90ZXN0X2ZpbGVzKCkKKworICAgIGRlZiBfc3Bh
d25fcHJvY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5fc3Rkb3V0X2RhdGEgPSBOb25lCisgICAg
ICAgIHNlbGYuX3N0ZGVycl9kYXRhID0gTm9uZQorICAgICAgICBpZiBzZWxmLl93c291dDoKKyAg
ICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLl9leGVjdXRpdmUucG9wZW4oc2VsZi5fc3Rh
cnRfY21kLCBjd2Q9c2VsZi5fY3dkLCBzaGVsbD1GYWxzZSwgc3RkaW49c3VicHJvY2Vzcy5QSVBF
LCBzdGRvdXQ9c2VsZi5fd3NvdXQsIHN0ZGVycj1zZWxmLl93c291dCkKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLl9leGVjdXRpdmUucG9wZW4oc2VsZi5f
c3RhcnRfY21kLCBjd2Q9c2VsZi5fY3dkLCBzaGVsbD1GYWxzZSwgc3RkaW49c3VicHJvY2Vzcy5Q
SVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisg
ICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHNlbGYuX3BpZF9maWxlLCBz
dHIoc2VsZi5fcHJvY2Vzcy5waWQpKQorICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2Vzcy5waWQK
KworICAgIGRlZiBfc3RvcF9ydW5uaW5nX3NlcnZlcihzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1
ZygnU3RvcHBpbmcgJXMgc2VydmVyJyAlIChzZWxmLl9uYW1lKSkKKyAgICAgICAgc2VsZi5fY2xl
YW5fd2Via2l0X3Rlc3RfZmlsZXMoKQorICAgICAgICBpZiBzZWxmLl9waWQgYW5kIG5vdCBzZWxm
Ll9leGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoc2VsZi5fcGlkKToKKyAgICAgICAgICAgIHNl
bGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKHNlbGYuX3BpZF9maWxlKQorICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICAoc2VsZi5fc3Rkb3V0X2Rh
dGEsIHNlbGYuX3N0ZGVycl9kYXRhKSA9IHNlbGYuX3Byb2Nlc3MuY29tbXVuaWNhdGUoaW5wdXQ9
J1xuJykKKyAgICAgICAgaWYgc2VsZi5fd3NvdXQ6CisgICAgICAgICAgICBzZWxmLl93c291dC5j
bG9zZSgpCisgICAgICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5f
ZXhlY3V0aXZlLmNoZWNrX3J1bm5pbmdfcGlkKHNlbGYuX3BpZCk6CisgICAgICAgICAgICByYWlz
ZSBodHRwX3NlcnZlcl9iYXNlLlNlcnZlckVycm9yKCdGYWlsZWQgdG8gc3RvcCAlczogcGxlYXNl
IGdvIHRvIHdlYiBwbGF0Zm9ybSB0ZXN0IHNlcnZlciBsb2cgZmlsZSB0byBnZXQgdGhlIFBJRCBs
aXN0JyAlIChzZWxmLl9uYW1lKSkKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUoc2Vs
Zi5fcGlkX2ZpbGUpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl91bml0dGVzdC5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlNWRlNTFhNTIzZGFhMjg4YTI2ZmMyOWJk
YzFiMzE3NTZhYzE2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl91bml0dGVzdC5w
eQpAQCAtMCwwICsxLDQ0IEBACisjICBDb3B5cmlnaHQgKGMpIDIwMTQsIENhbm9uIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjICBhcmUgbWV0
OgorIyAgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBD
YW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyAgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyAgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjICBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjICBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjICBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHRp
bWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21vY2sgaW1w
b3J0IE1vY2tIb3N0Citmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IFBvcnQKK2Zyb20gd2Via2l0
cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKKworZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMuc2VydmVycy53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgaW1wb3J0IFdlYlBsYXRm
b3JtVGVzdFNlcnZlcgorCisKK2NsYXNzIFRlc3RXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIodW5pdHRl
c3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3N0YXJ0X2NtZChzZWxmKToKKworICAgICAgICBw
b3J0ID0gUG9ydChNb2NrSG9zdCgpLCAidGVzdCIpCisgICAgICAgIHNlcnZlciA9IFdlYlBsYXRm
b3JtVGVzdFNlcnZlcihwb3J0LCAid3B0dGVzdCIsICIvbW9jay9vdXRwdXRfZGlyIiwgIi9tb2Nr
L291dHB1dF9kaXIvcGlkLnR4dCIpCisKKyAgICAgICAgc2VydmVyLl9wcmVwYXJlX2NvbmZpZygp
CisgICAgICAgIHNlcnZlci5fd3NvdXQgPSBOb25lCisgICAgICAgIHNlcnZlci5fc3Bhd25fcHJv
Y2VzcygpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgc2VydmVyLl9zdG9wX3J1bm5p
bmdfc2VydmVyKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNl
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKaW5kZXggYzllODQ5ZDU0
NGQ0NDAxOWM5MjQ0YjJlZGY0YzU5ZDFkNzhkNjEwOS4uYzI5NGU0OGM4N2U1NTlkMTk0ODliZTI3
YzkwOGU3YjdhZmY4YjhkYiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKQEAgLTU5
LDYgKzU5LDcgQEAgZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcwogZnJv
bSB3ZWJraXRweS5wb3J0LmZhY3RvcnkgaW1wb3J0IFBvcnRGYWN0b3J5CiBmcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBhcGFjaGVfaHR0cF9zZXJ2ZXIKIGZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyCitmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIK
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IHdlYnNvY2tldF9zZXJ2
ZXIKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtMTE2LDYgKzExNyw3
IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgc2VsZi5faGVscGVyID0gTm9uZQogICAg
ICAgICBzZWxmLl9odHRwX3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5fd2Vic29ja2V0X3Nl
cnZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gTm9u
ZQogICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3NlcnZl
cl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gc2VydmVyX3Byb2Nlc3MuU2VydmVyUHJvY2VzcyAgIyBv
dmVycmlkYWJsZSBmb3IgdGVzdGluZwogCkBAIC04ODEsNiArODgzLDE4IEBAIGNsYXNzIFBvcnQo
b2JqZWN0KToKICAgICAgICAgc2VydmVyLnN0YXJ0KCkKICAgICAgICAgc2VsZi5fd2Vic29ja2V0
X3NlcnZlciA9IHNlcnZlcgogCisgICAgZGVmIHN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
cihzZWxmLCBhZGRpdGlvbmFsX2RpcnM9Tm9uZSwgbnVtYmVyX29mX3NlcnZlcnM9Tm9uZSk6Cisg
ICAgICAgIGFzc2VydCBub3Qgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLCAnQWxyZWFk
eSBydW5uaW5nIGEgV2ViIFBsYXRmb3JtIFRlc3Qgc2VydmVyLicKKworICAgICAgICBzZWxmLl93
ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIuV2ViUGxh
dGZvcm1UZXN0U2VydmVyKHNlbGYsICJ3cHR3ayIsIHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSkK
KyAgICAgICAgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLnN0YXJ0KCkKKworICAgIGRl
ZiB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfZG9jX3Jvb3Qoc2VsZik6CisgICAgICAgIHJldHVy
biB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIuZG9jX3Jvb3Qoc2VsZikgKyBzZWxmLlRFU1RfUEFU
SF9TRVBBUkFUT1IKKworICAgIGRlZiB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfYmFzZV91cmwo
c2VsZik6CisgICAgICAgIHJldHVybiB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIuYmFzZV91cmwo
c2VsZikKKwogICAgIGRlZiBodHRwX3NlcnZlcl9zdXBwb3J0c19pcHY2KHNlbGYpOgogICAgICAg
ICAjIEN5Z3dpbiBpcyB0aGUgb25seSBwbGF0Zm9ybSB0byBzdGlsbCB1c2UgQXBhY2hlIDEuMywg
d2hpY2ggb25seSBzdXBwb3J0cyBJUFY0LgogICAgICAgICAjIE9uY2UgaXQgbW92ZXMgdG8gQXBh
Y2hlIDIsIHdlIGNhbiBkcm9wIHRoaXMgbWV0aG9kIGFsdG9nZXRoZXIuCkBAIC05MDYsNiArOTIw
LDExIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX3dlYnNvY2tldF9z
ZXJ2ZXIuc3RvcCgpCiAgICAgICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyID0gTm9uZQog
CisgICAgZGVmIHN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI6CisgICAgICAgICAgICBzZWxmLl93ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXIuc3RvcCgpCisgICAgICAgICAgICBzZWxmLl93ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXIgPSBOb25lCisKICAgICBkZWYgZXhpdF9jb2RlX2Zyb21fc3VtbWFyaXpl
ZF9yZXN1bHRzKHNlbGYsIHVuZXhwZWN0ZWRfcmVzdWx0cyk6CiAgICAgICAgICIiIkdpdmVuIHN1
bW1hcml6ZWQgcmVzdWx0cywgY29tcHV0ZSB0aGUgZXhpdCBjb2RlIHRvIGJlIHJldHVybmVkIGJ5
IG5ldy1ydW4td2Via2l0LXRlc3RzLgogICAgICAgICBCb3RzIHR1cm4gcmVkIHdoZW4gdGhpcyBm
dW5jdGlvbiByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUuIEJ5IGRlZmF1bHQsIHJldHVybiB0aGUg
bnVtYmVyIG9mIHJlZ3Jlc3Npb25zCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQpv
bGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGNkYjczY2NlNDcyZjMyMjBkOGRm
YTg0MmI3MTU0NmQ4MDUzODJkNDkuLjUxNDRlMzQ1NmRkMzliZWU4YWU3YzJmYjlmOGI5MGI4Mzhm
YTRjZDEKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CkBAIC0zNyw2ICszNyw3IEBAIGlt
cG9ydCBvcwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHBhdGgKIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5wcm9maWxlciBpbXBvcnQgUHJvZmlsZXJGYWN0b3J5Citm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
ciBpbXBvcnQgV2ViUGxhdGZvcm1UZXN0U2VydmVyCiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKF9fbmFtZV9fKQpAQCAtMTU5LDYgKzE2MCw5IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgog
ICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fcHJvZmlsZXIgPSBOb25lCiAKKyAgICAg
ICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9kaXIgPSBzZWxmLl9wb3J0LndlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlcl9kb2Nfcm9vdCgpCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3RfYmFz
ZV91cmwgPSBzZWxmLl9wb3J0LndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9iYXNlX3VybCgpCisK
ICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgc2VsZi5zdG9wKCkKIApAQCAtMjQ0LDgg
KzI0OCwxNCBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICBkZWYgaXNfaHR0cF90ZXN0KHNl
bGYsIHRlc3RfbmFtZSk6CiAgICAgICAgIHJldHVybiB0ZXN0X25hbWUuc3RhcnRzd2l0aChzZWxm
LkhUVFBfRElSKSBhbmQgbm90IHRlc3RfbmFtZS5zdGFydHN3aXRoKHNlbGYuSFRUUF9MT0NBTF9E
SVIpCiAKKyAgICBkZWYgaXNfd2ViX3BsYXRmb3JtX3Rlc3Qoc2VsZiwgdGVzdF9uYW1lKToKKyAg
ICAgICAgcmV0dXJuIHRlc3RfbmFtZS5zdGFydHN3aXRoKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rf
ZGlyKQorCiAgICAgZGVmIHRlc3RfdG9fdXJpKHNlbGYsIHRlc3RfbmFtZSk6CiAgICAgICAgICIi
IkNvbnZlcnQgYSB0ZXN0IG5hbWUgdG8gYSBVUkkuIiIiCisgICAgICAgIGlmIHNlbGYuaXNfd2Vi
X3BsYXRmb3JtX3Rlc3QodGVzdF9uYW1lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLndlYl9w
bGF0Zm9ybV90ZXN0X2Jhc2VfdXJsICsgdGVzdF9uYW1lW2xlbihzZWxmLndlYl9wbGF0Zm9ybV90
ZXN0X2Rpcik6XQorCiAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2h0dHBfdGVzdCh0ZXN0X25hbWUp
OgogICAgICAgICAgICAgcmV0dXJuIHBhdGguYWJzcGF0aF90b191cmkoc2VsZi5fcG9ydC5ob3N0
LnBsYXRmb3JtLCBzZWxmLl9wb3J0LmFic3BhdGhfZm9yX3Rlc3QodGVzdF9uYW1lKSkKIApAQCAt
MjY5LDYgKzI3OSw4IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICAgICAgaWYgbm90
IHByZWZpeC5lbmRzd2l0aCgnLycpOgogICAgICAgICAgICAgICAgIHByZWZpeCArPSAnLycKICAg
ICAgICAgICAgIHJldHVybiB1cmlbbGVuKHByZWZpeCk6XQorICAgICAgICBpZiB1cmkuc3RhcnRz
d2l0aChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2Jhc2VfdXJsKToKKyAgICAgICAgICAgIHJldHVy
biB1cmkucmVwbGFjZShzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X2Jhc2VfdXJsLCBzZWxmLndlYl9w
bGF0Zm9ybV90ZXN0X2RpcikKICAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImh0dHA6Ly8iKToK
ICAgICAgICAgICAgIHJldHVybiB1cmkucmVwbGFjZSgnaHR0cDovLzEyNy4wLjAuMTo4MDAwLycs
IHNlbGYuSFRUUF9ESVIpCiAgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJodHRwczovLyIpOgpA
QCAtNDAwLDcgKzQxMiw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICAjIEZJWE1F
OiBwZXJmb3JtYW5jZSB0ZXN0cyBwYXNzIGluIGZ1bGwgVVJMcyBpbnN0ZWFkIG9mIHRlc3QgbmFt
ZXMuCiAgICAgICAgIGlmIGRyaXZlcl9pbnB1dC50ZXN0X25hbWUuc3RhcnRzd2l0aCgnaHR0cDov
LycpIG9yIGRyaXZlcl9pbnB1dC50ZXN0X25hbWUuc3RhcnRzd2l0aCgnaHR0cHM6Ly8nKSAgb3Ig
ZHJpdmVyX2lucHV0LnRlc3RfbmFtZSA9PSAoJ2Fib3V0OmJsYW5rJyk6CiAgICAgICAgICAgICBj
b21tYW5kID0gZHJpdmVyX2lucHV0LnRlc3RfbmFtZQotICAgICAgICBlbGlmIHNlbGYuaXNfaHR0
cF90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpOgorICAgICAgICBlbGlmIHNlbGYuaXNfaHR0
cF90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpIG9yIHNlbGYuaXNfd2ViX3BsYXRmb3JtX3Rl
c3QoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSk6CiAgICAgICAgICAgICBjb21tYW5kID0gc2VsZi50
ZXN0X3RvX3VyaShkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQogICAgICAgICBlbHNlOgogICAgICAg
ICAgICAgY29tbWFuZCA9IHNlbGYuX3BvcnQuYWJzcGF0aF9mb3JfdGVzdChkcml2ZXJfaW5wdXQu
dGVzdF9uYW1lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZl
cl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRl
c3QucHkKaW5kZXggYzYyYTU0OWI1MmYyNDkxY2ZkYTM1NGYwNTdhZDg2MjgyYTg0Y2ZhNC4uODM1
MWM1ODNlNjFlODUwYTQzNjZkMmZjODI4YWNiMTEyYjA3MzUzMyAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5CkBAIC0xMDksNiArMTA5LDcgQEAg
Y2xhc3MgRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZHJpdmVyLnRlc3RfdG9fdXJpKCdmb28vYmFyLmh0bWwnKSwgJ2ZpbGU6Ly8lcy9mb28v
YmFyLmh0bWwnICUgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZHJpdmVyLnRlc3RfdG9fdXJpKCdodHRwL3Rlc3RzL2Zvby5odG1sJyksICdodHRwOi8v
MTI3LjAuMC4xOjgwMDAvZm9vLmh0bWwnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZl
ci50ZXN0X3RvX3VyaSgnaHR0cC90ZXN0cy9zc2wvYmFyLmh0bWwnKSwgJ2h0dHBzOi8vMTI3LjAu
MC4xOjg0NDMvc3NsL2Jhci5odG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIu
dGVzdF90b191cmkoJ2ltcG9ydGVkL3czYy93cHQvZm9vL2Jhci5odG1sJyksICdodHRwOi8vbG9j
YWxob3N0Ojg4MDAvZm9vL2Jhci5odG1sJykKIAogICAgIGRlZiB0ZXN0X3VyaV90b190ZXN0KHNl
bGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQpAQCAtMTE2LDYgKzExNyw3IEBA
IGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGRyaXZlci51cmlfdG9fdGVzdCgnZmlsZTovLyVzL2Zvby9iYXIuaHRtbCcgJSBwb3J0
LmxheW91dF90ZXN0c19kaXIoKSksICdmb28vYmFyLmh0bWwnKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGRyaXZlci51cmlfdG9fdGVzdCgnaHR0cDovLzEyNy4wLjAuMTo4MDAwL2Zvby5odG1s
JyksICdodHRwL3Rlc3RzL2Zvby5odG1sJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2
ZXIudXJpX3RvX3Rlc3QoJ2h0dHBzOi8vMTI3LjAuMC4xOjg0NDMvc3NsL2Jhci5odG1sJyksICdo
dHRwL3Rlc3RzL3NzbC9iYXIuaHRtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVy
LnVyaV90b190ZXN0KCdodHRwOi8vbG9jYWxob3N0Ojg4MDAvZm9vL2Jhci5odG1sJyksICdpbXBv
cnRlZC93M2Mvd3B0L2Zvby9iYXIuaHRtbCcpCiAKICAgICBkZWYgdGVzdF9yZWFkX2Jsb2NrKHNl
bGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9D
aGFuZ2VMb2cKaW5kZXggNWY1NDEyN2UzMWYwOTg3NGRjZDkwNDk3YTQ0YTE5MDlkNDU4MTRlNy4u
OGRhZWIxNmE0MmZhOTI2Y2QyNmU4MGM2MmNhMGE4MjM0ZWRhNWVlYyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMTItMjAgIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBJbnRlZ3JhdGUgV1Ag
cHl0aG9uIHNlcnZlciBpbnRvIFdlYktpdCB0ZXN0IGZyYW1ld29yaworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MDk0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udGFpbnMgcGFyYW1ldGVycyBvZiB3
ZWIgcGxhdGZvcm0gdGVzdCBzZXJ2ZXIuCisKKyAgICAgICAgKiByZXNvdXJjZXMvY29uZmlnLmpz
b246IEFkZGVkLgorCiAyMDE0LTExLTE0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3
YUBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wb3J0IHczYyB0ZXN0cyBmb3IgY2FudmFzCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvcmVzb3VyY2VzL2NvbmZpZy5qc29uIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy9jb25maWcuanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44ZmIzMGUwMWFiYWZkMTZkZThkYjBlMTA5NGRjMDRkZjQ4M2QyYWFiCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy9jb25maWcuanNvbgpAQCAt
MCwwICsxLDcgQEAKK3siaG9zdCI6ICJsb2NhbGhvc3QiLAorICJwb3J0cyI6eyJodHRwIjpbODgw
MCwgODgwMV0sCisgICAgICAgICAgImh0dHBzIjpbXSwKKyAgICAgICAgICAid3MiOls0OTAwMV19
LAorICJjaGVja19zdWJkb21haW5zIjogZmFsc2UsCisgImxvZ19sZXZlbCI6ImRlYnVnIiwKKyAi
YmluZF9ob3N0bmFtZSI6IGZhbHNlfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243806</attachid>
            <date>2014-12-29 12:08:52 -0800</date>
            <delta_ts>2015-01-13 06:36:47 -0800</delta_ts>
            <desc>Improving variable names</desc>
            <filename>bug-127094-20141229210853.patch</filename>
            <type>text/plain</type>
            <size>37233</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3Nzk1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzFhYWU3NzNkNjhkMjkyYzlmNWQxODg1MWUzNDYwMDI1
NDc1YWYzMS4uYzQwNDgzNTI3MDQ3MDk4Yzk0ODA2M2I1ODIyZjVmOTc3NjRlOTkwMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3
IEBACisyMDE0LTEyLTI5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgSW50ZWdyYXRlIFdQIHB5dGhvbiBzZXJ2ZXIgaW50byBXZWJLaXQgdGVz
dCBmcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNzA5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyBXM0Mgd2ViIHNlcnZlciAod3B0c2VydmVyKSBhcyBhIG5ldyBI
VFRQIHNlcnZlci4KKyAgICAgICAgd3B0c2VydmVyIGlzIHVzZWQgdG8gc2VydmUgYWxsIHRlc3Rz
IGluc2lkZSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd3B0LgorICAgICAgICB3cHRzZXJ2ZXIg
aW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIGltcG9ydGVkIHdpdGhpbiB0aGUgaW1wb3J0IG9mIHRo
ZSBXZWIgUGxhdGZvcm0gVGVzdCBzdWl0ZSAodG8gZW5zdXJlIGtlZXBpbmcgc2VydmVyIGFuZCB0
ZXN0cyBpbiBzeW5jKSBpbiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd3B0LgorCisgICAgICAg
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rf
bGF1bmNoZXIucHkgc2VydmVzIGFzIG1haW4gZW50cnkgcG9pbnQgdG8gd3B0IHNwYXduZWQgcHJv
Y2Vzcy4KKyAgICAgICAgU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkgaXMgcmVzcG9uc2libGUgdG8gc3RhcnQvc3RvcCB0aGUg
d3B0IHNlcnZlciBwcm9jZXNzLgorICAgICAgICBJdCBhbHNvIHNldHMgdXAgdGhlIHNlcnZlciBj
b25maWcgYW5kIHRlc3RoYXJuZXNzLmpzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIGZpbGVzIGF0IHN0
YXJ0IGFuZCBzdG9wIG9mIHRoZSB3cHQgc2VydmVyLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2V4ZWN1dGl2ZV9tb2NrLnB5OgorICAgICAgICAoTW9ja1Byb2Nlc3MuY29tbXVuaWNhdGUpOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91
dF90ZXN0X3J1bm5lci5weTogQWRkaW5nIHN0YXJ0L3N0b3Agb2Ygd2ViIHBsYXRmb3JtIHRlc3Qg
c2VydmVyIGFjY29yZGluZyBib29sZWFuIHBhcmFtZXRlci4KKyAgICAgICAgKExheW91dFRlc3RS
dW5uZXIuX19pbml0X18pOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5ydW5fdGVzdHMpOgor
ICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5zdGFydF9zZXJ2ZXJzKToKKyAgICAgICAgKExheW91
dFRlc3RSdW5uZXIuc3RvcF9zZXJ2ZXJzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHk6IFVw
ZGF0ZWQgdG8gY2hlY2sgZm9yIHdwdCBzZXJ2ZXIgc3RhcnQvc3RvcC4KKyAgICAgICAgKExheW91
dFRlc3RSdW5uZXJUZXN0cy5fcnVuX3Rlc3RzKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXJU
ZXN0cy50ZXN0X3NlcnZlcnNfc3RhcnRlZC5zdGFydF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIp
OgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lclRlc3RzLnRlc3Rfc2VydmVyc19zdGFydGVkLnN0
b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXJU
ZXN0cyk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJzX3N0YXJ0
ZWQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L21hbmFnZXIucHk6ICBVcGRhdGVkIHRvIGNoZWNrIHdoZXRoZXIgYSB0ZXN0IGlzIGEgd3B0IHRl
c3QgYW5kIHdoZXRoZXIgd3B0IHNlcnZlciBsYXVuY2ggaXMgbmVlZGVkLgorICAgICAgICAoTWFu
YWdlci5fX2luaXRfXyk6CisgICAgICAgIChNYW5hZ2VyLl9pc19odHRwX3Rlc3QpOgorICAgICAg
ICAoTWFuYWdlci5faXNfd2ViX3BsYXRmb3JtX3Rlc3QpOgorICAgICAgICAoTWFuYWdlci5fcnVu
X3Rlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoTWFuYWdlclRlc3QudGVzdF9uZWVk
c19zZXJ2ZXJzLmdldF93cHRfZG9jX3Jvb3QpOgorICAgICAgICAoTWFuYWdlclRlc3QudGVzdF9u
ZWVkc19zZXJ2ZXJzLmdldF9tYW5hZ2VyKToKKyAgICAgICAgKE1hbmFnZXJUZXN0LnRlc3RfbmVl
ZHNfc2VydmVycyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weTogQWRkZWQgYW4gb3B0aW9uIHRvIGNvbnRyb2wgdGhlIGRvY19yb290
IG9mIHRoZSB3cHQgc2VydmVyLgorICAgICAgICAocGFyc2VfYXJncyk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9sYXVu
Y2hlci5weTogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5weTogQWRk
ZWQuCisgICAgICAgIChkb2Nfcm9vdCk6CisgICAgICAgIChiYXNlX3VybCk6CisgICAgICAgIChX
ZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9f
aW5pdF9fKToKKyAgICAgICAgKFdlYlBsYXRmb3JtVGVzdFNlcnZlci5fc2V0X3N0YXJ0X2NtZCk6
CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX2NvcHlfd2Via2l0X3Rlc3RfZmlsZXMp
OgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9jbGVhbl93ZWJraXRfdGVzdF9maWxl
cyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3ByZXBhcmVfY29uZmlnKToKKyAg
ICAgICAgKFdlYlBsYXRmb3JtVGVzdFNlcnZlci5fc3Bhd25fcHJvY2Vzcyk6CisgICAgICAgIChX
ZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3N0b3BfcnVubmluZ19zZXJ2ZXIpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJQbGF0Zm9ybVRlc3RTZXJ2
ZXIpOgorICAgICAgICAoVGVzdFdlYlBsYXRmb3JtVGVzdFNlcnZlci50ZXN0X3N0YXJ0X2NtZCk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0
Ll9faW5pdF9fKToKKyAgICAgICAgKFBvcnQudG8uc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyKToKKyAgICAgICAgKFBvcnQudG8pOgorICAgICAgICAoUG9ydC50by53ZWJfcGxhdGZvcm1f
dGVzdF9zZXJ2ZXJfZG9jX3Jvb3QpOgorICAgICAgICAoUG9ydC50by53ZWJfcGxhdGZvcm1fdGVz
dF9zZXJ2ZXJfYmFzZV91cmwpOgorICAgICAgICAoUG9ydC50by5zdG9wX3dlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weTog
VXBkYXRlZCB0aGUgdGVzdCBuYW1lIDwtPiB0ZXN0IFVSTCBjb252ZXJzaW9uIHJvdXRpbmVzLgor
ICAgICAgICAoRHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAgKERyaXZlci5pc193ZWJfcGxhdGZv
cm1fdGVzdCk6CisgICAgICAgIChEcml2ZXIudGVzdF90b191cmkpOgorICAgICAgICAoRHJpdmVy
LnVyaV90b190ZXN0KToKKyAgICAgICAgKERyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1
dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weTog
IFVwZGF0ZWQgdGVzdHMgYWNjb3JkaW5nIG5ldyBjb252ZXJzaW9uIHJ1bGVzLgorICAgICAgICAo
RHJpdmVyVGVzdC50ZXN0X3Rlc3RfdG9fdXJpKToKKyAgICAgICAgKERyaXZlclRlc3QudGVzdF91
cmlfdG9fdGVzdCk6CisKIDIwMTQtMTItMjkgIEZhYmllbiBWYWxsw6llICA8ZnZhbGxlZUBjb25u
ZWN0ZWQtbGFicy5jb20+CiAKICAgICAgICAgW2poQnVpbGRdIGNhaXJvIGJ1aWxkIGVycm9yICgt
Zmx0bykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9l
eGVjdXRpdmVfbW9jay5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9l
eGVjdXRpdmVfbW9jay5weQppbmRleCAxODFhNWY5YTcxY2U1NTk2NjZhODI5ZTY2M2Q1MWFhNWVh
MjE0OWE3Li45ZjExNGQxYjFjYmQwYjMwOTk1MTQwZDI2MzU3MzY4ZmQ3MTZlNjBjIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX21vY2su
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9t
b2NrLnB5CkBAIC00Niw2ICs0Niw5IEBAIGNsYXNzIE1vY2tQcm9jZXNzKG9iamVjdCk6CiAgICAg
ZGVmIHdhaXQoc2VsZik6CiAgICAgICAgIHJldHVybgogCisgICAgZGVmIGNvbW11bmljYXRlKHNl
bGYsIGlucHV0PU5vbmUpOgorICAgICAgICByZXR1cm4gKHNlbGYuc3Rkb3V0LCBzZWxmLnN0ZGVy
cikKKwogIyBGSVhNRTogVGhpcyBzaG91bGQgYmUgdW5pZmllZCB3aXRoIE1vY2tFeGVjdXRpdmUy
CiBjbGFzcyBNb2NrRXhlY3V0aXZlKG9iamVjdCk6CiAgICAgUElQRSA9ICJNT0NLIFBJUEUiCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVy
cy9sYXlvdXRfdGVzdF9ydW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKaW5kZXggOTAyN2FmN2Y4NTVm
YjVlNDRlZjllMGM5MjRkMDRlNzBjNTQzM2RhMi4uN2YzYmE2NDU1YTRhYzE1OWY4ODcyNGZmYjU2
ODNiZGMzZWY4MjI3ZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5w
eQpAQCAtNzQsMTQgKzc0LDE2IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAg
ICAgICAgc2VsZi5fdGVzdF9pbnB1dHMgPSBbXQogICAgICAgICBzZWxmLl9uZWVkc19odHRwID0g
Tm9uZQogICAgICAgICBzZWxmLl9uZWVkc193ZWJzb2NrZXRzID0gTm9uZQorICAgICAgICBzZWxm
Ll9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3Jl
dHJ5aW5nID0gRmFsc2UKICAgICAgICAgc2VsZi5fY3VycmVudF9ydW5fcmVzdWx0cyA9IE5vbmUK
IAotICAgIGRlZiBydW5fdGVzdHMoc2VsZiwgZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVz
dHNfdG9fc2tpcCwgbnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIHJl
dHJ5aW5nKToKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGV4cGVjdGF0aW9ucywgdGVzdF9pbnB1
dHMsIHRlc3RzX3RvX3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19odHRwLCBuZWVkc193ZWJzb2Nr
ZXRzLCBuZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIsIHJldHJ5aW5nKToKICAgICAgICAg
c2VsZi5fZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zCiAgICAgICAgIHNlbGYuX3Rlc3RfaW5w
dXRzID0gdGVzdF9pbnB1dHMKICAgICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IG5lZWRzX2h0dHAK
ICAgICAgICAgc2VsZi5fbmVlZHNfd2Vic29ja2V0cyA9IG5lZWRzX3dlYnNvY2tldHMKKyAgICAg
ICAgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gbmVlZHNfd2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gcmV0cnlpbmcKIAogICAg
ICAgICAjIEZJWE1FOiByZW5hbWUgYWxsIHZhcmlhYmxlcyB0byB0ZXN0X3J1bl9yZXN1bHRzIG9y
IHNvbWUgc3VjaCAuLi4KQEAgLTEwMSw3ICsxMDMsNyBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVy
KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTaGFyZGluZyB0
ZXN0cyAuLi4nKQogICAgICAgICBhbGxfc2hhcmRzID0gc2VsZi5fc2hhcmRlci5zaGFyZF90ZXN0
cyh0ZXN0X2lucHV0cywgaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSwgc2VsZi5f
b3B0aW9ucy5mdWxseV9wYXJhbGxlbCkKIAotICAgICAgICBpZiBzZWxmLl9uZWVkc19odHRwIGFu
ZCBzZWxmLl9vcHRpb25zLmh0dHA6CisgICAgICAgIGlmIChzZWxmLl9uZWVkc19odHRwIGFuZCBz
ZWxmLl9vcHRpb25zLmh0dHApIG9yIHNlbGYuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
cjoKICAgICAgICAgICAgIHNlbGYuc3RhcnRfc2VydmVycygpCiAKICAgICAgICAgbnVtX3dvcmtl
cnMgPSBtaW4obnVtX3dvcmtlcnMsIGxlbihhbGxfc2hhcmRzKSkKQEAgLTE4OSw2ICsxOTEsOSBA
QCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgIGlmIHNlbGYuX25lZWRz
X3dlYnNvY2tldHM6CiAgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3Rh
cnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQogICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFy
dF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3Jt
X3Rlc3Rfc2VydmVyOgorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0
YXJ0aW5nIFdlYiBQbGF0Zm9ybSBUZXN0IHNlcnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5f
cG9ydC5zdGFydF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoKQogCiAgICAgZGVmIHN0b3Bfc2Vy
dmVycyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5fbmVlZHNfaHR0cDoKQEAgLTE5Nyw2ICsyMDIs
OSBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgIGlmIHNlbGYuX25l
ZWRzX3dlYnNvY2tldHM6CiAgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgn
U3RvcHBpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQogICAgICAgICAgICAgc2VsZi5fcG9ydC5z
dG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXI6CisgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgn
U3RvcHBpbmcgV2ViIFBsYXRmb3JtIFRlc3Qgc2VydmVyIC4uLicpCisgICAgICAgICAgICBzZWxm
Ll9wb3J0LnN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKCkKIAogICAgIGRlZiBoYW5kbGUo
c2VsZiwgbmFtZSwgc291cmNlLCAqYXJncyk6CiAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2Vs
ZiwgJ19oYW5kbGVfJyArIG5hbWUpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRf
dGVzdF9ydW5uZXJfdW5pdHRlc3QucHkKaW5kZXggODUxNDFlNjU3ZDBlZDY5ZDg0OTlkNDdlMGQ5
YTUwZWM3MGJmODA0OS4uZjg5ODM2MzJmODIzNGQ5OTUzNjM2MzEyNGE1ODdjMzNlYzc3ODkwNiAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxl
cnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVz
dC5weQpAQCAtODUsNyArODUsNyBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyVGVzdHModW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICBleHBlY3RhdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zKHJ1
bm5lci5fcG9ydCwgdGVzdHMpCiAgICAgICAgIGV4cGVjdGF0aW9ucy5wYXJzZV9hbGxfZXhwZWN0
YXRpb25zKCkKICAgICAgICAgcnVubmVyLnJ1bl90ZXN0cyhleHBlY3RhdGlvbnMsIHRlc3RfaW5w
dXRzLCBzZXQoKSwKLSAgICAgICAgICAgIG51bV93b3JrZXJzPTEsIG5lZWRzX2h0dHA9YW55KCdo
dHRwJyBpbiB0ZXN0IGZvciB0ZXN0IGluIHRlc3RzKSwgbmVlZHNfd2Vic29ja2V0cz1hbnkoWyd3
ZWJzb2NrZXQnIGluIHRlc3QgZm9yIHRlc3QgaW4gdGVzdHNdKSwgcmV0cnlpbmc9RmFsc2UpCisg
ICAgICAgICAgICBudW1fd29ya2Vycz0xLCBuZWVkc19odHRwPWFueSgnaHR0cCcgaW4gdGVzdCBm
b3IgdGVzdCBpbiB0ZXN0cyksIG5lZWRzX3dlYnNvY2tldHM9YW55KFsnd2Vic29ja2V0JyBpbiB0
ZXN0IGZvciB0ZXN0IGluIHRlc3RzXSksIG5lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcj1h
bnkoWydpbXBvcnRlZC93M2MnIGluIHRlc3QgZm9yIHRlc3QgaW4gdGVzdHNdKSwgcmV0cnlpbmc9
RmFsc2UpCiAKICAgICBkZWYgdGVzdF9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdHMoc2Vs
Zik6CiAgICAgICAgIHJ1bm5lciA9IHNlbGYuX3J1bm5lcigpCkBAIC0xNDcsNDkgKzE0Nyw4MyBA
QCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICBkZWYgc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpOgogICAgICAgICAgICAgc2VsZi53ZWJzb2Nr
ZXRfc3RhcnRlZCA9IFRydWUKIAorICAgICAgICBkZWYgc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyKCk6CisgICAgICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFy
dGVkID0gVHJ1ZQorCiAgICAgICAgIGRlZiBzdG9wX2h0dHBfc2VydmVyKCk6CiAgICAgICAgICAg
ICBzZWxmLmh0dHBfc3RvcHBlZCA9IFRydWUKIAogICAgICAgICBkZWYgc3RvcF93ZWJzb2NrZXRf
c2VydmVyKCk6CiAgICAgICAgICAgICBzZWxmLndlYnNvY2tldF9zdG9wcGVkID0gVHJ1ZQogCisg
ICAgICAgIGRlZiBzdG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcigpOgorICAgICAgICAgICAg
c2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCA9IFRydWUKKwogICAgICAgICBo
b3N0ID0gTW9ja0hvc3QoKQogICAgICAgICBwb3J0ID0gaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KCd0
ZXN0LW1hYy1sZW9wYXJkJykKICAgICAgICAgcG9ydC5zdGFydF9odHRwX3NlcnZlciA9IHN0YXJ0
X2h0dHBfc2VydmVyCiAgICAgICAgIHBvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlciA9IHN0YXJ0
X3dlYnNvY2tldF9zZXJ2ZXIKKyAgICAgICAgcG9ydC5zdGFydF93ZWJfcGxhdGZvcm1fdGVzdF9z
ZXJ2ZXIgPSBzdGFydF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIKICAgICAgICAgcG9ydC5zdG9w
X2h0dHBfc2VydmVyID0gc3RvcF9odHRwX3NlcnZlcgogICAgICAgICBwb3J0LnN0b3Bfd2Vic29j
a2V0X3NlcnZlciA9IHN0b3Bfd2Vic29ja2V0X3NlcnZlcgorICAgICAgICBwb3J0LnN0b3Bfd2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIKIAog
ICAgICAgICBzZWxmLmh0dHBfc3RhcnRlZCA9IHNlbGYuaHR0cF9zdG9wcGVkID0gc2VsZi53ZWJz
b2NrZXRfc3RhcnRlZCA9IHNlbGYud2Vic29ja2V0X3N0b3BwZWQgPSBGYWxzZQorICAgICAgICBz
ZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVkID0gc2VsZi53ZWJfcGxhdGZvcm1f
dGVzdF9zZXJ2ZXJfc3RvcHBlZCA9IEZhbHNlCiAgICAgICAgIHJ1bm5lciA9IHNlbGYuX3J1bm5l
cihwb3J0PXBvcnQpCiAgICAgICAgIHJ1bm5lci5fbmVlZHNfaHR0cCA9IFRydWUKICAgICAgICAg
cnVubmVyLl9uZWVkc193ZWJzb2NrZXRzID0gRmFsc2UKKyAgICAgICAgcnVubmVyLl9uZWVkc193
ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBGYWxzZQogICAgICAgICBydW5uZXIuc3RhcnRfc2Vy
dmVycygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0YXJ0ZWQsIFRydWUp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCwgRmFsc2Up
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJf
c3RhcnRlZCwgRmFsc2UpCiAgICAgICAgIHJ1bm5lci5zdG9wX3NlcnZlcnMoKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdG9wcGVkLCBUcnVlKQogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0b3BwZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQsIEZhbHNlKQog
CiAgICAgICAgIHNlbGYuaHR0cF9zdGFydGVkID0gc2VsZi5odHRwX3N0b3BwZWQgPSBzZWxmLndl
YnNvY2tldF9zdGFydGVkID0gc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNlCisgICAgICAg
IHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndlYl9wbGF0Zm9y
bV90ZXN0X3NlcnZlcl9zdG9wcGVkID0gRmFsc2UKICAgICAgICAgcnVubmVyLl9uZWVkc19odHRw
ID0gVHJ1ZQogICAgICAgICBydW5uZXIuX25lZWRzX3dlYnNvY2tldHMgPSBUcnVlCisgICAgICAg
IHJ1bm5lci5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gRmFsc2UKICAgICAgICAg
cnVubmVyLnN0YXJ0X3NlcnZlcnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0
cF9zdGFydGVkLCBUcnVlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0
X3N0YXJ0ZWQsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCwgRmFsc2UpCiAgICAgICAgIHJ1bm5lci5zdG9wX3NlcnZl
cnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdG9wcGVkLCBUcnVlKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0b3BwZWQsIFRydWUpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3Rv
cHBlZCwgRmFsc2UpCisKKyAgICAgICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBzZWxmLmh0dHBfc3Rv
cHBlZCA9IHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tldF9zdG9wcGVkID0g
RmFsc2UKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCA9IHNl
bGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQgPSBGYWxzZQorICAgICAgICBydW5u
ZXIuX25lZWRzX2h0dHAgPSBGYWxzZQorICAgICAgICBydW5uZXIuX25lZWRzX3dlYnNvY2tldHMg
PSBGYWxzZQorICAgICAgICBydW5uZXIuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9
IFRydWUKKyAgICAgICAgcnVubmVyLnN0YXJ0X3NlcnZlcnMoKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYuaHR0cF9zdGFydGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLndlYnNvY2tldF9zdGFydGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVkLCBUcnVlKQorICAgICAgICBy
dW5uZXIuc3RvcF9zZXJ2ZXJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBf
c3RvcHBlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRf
c3RvcHBlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCwgVHJ1ZSkKIAogICAgICAgICBzZWxmLmh0dHBfc3RhcnRl
ZCA9IHNlbGYuaHR0cF9zdG9wcGVkID0gc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCA9IHNlbGYud2Vi
c29ja2V0X3N0b3BwZWQgPSBGYWxzZQorICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3Nl
cnZlcl9zdGFydGVkID0gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCA9IEZh
bHNlCiAgICAgICAgIHJ1bm5lci5fbmVlZHNfaHR0cCA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5f
bmVlZHNfd2Vic29ja2V0cyA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyID0gRmFsc2UKICAgICAgICAgcnVubmVyLnN0YXJ0X3NlcnZlcnMoKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdGFydGVkLCBGYWxzZSkKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdGFydGVkLCBGYWxzZSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVk
LCBGYWxzZSkKICAgICAgICAgcnVubmVyLnN0b3Bfc2VydmVycygpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIEZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlbGYud2Vic29ja2V0X3N0b3BwZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQsIEZhbHNlKQogCiAKIGNs
YXNzIFNoYXJkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQpp
bmRleCAzMzg1YTAxZDgwODM2NWYwNjI0YTJmYWEyYTU2ODczYWE0M2NhYWYwLi5mZGJhMmJlY2Yw
M2FlNjdhZDM2MGIxZmIxMjcyZDczZmVkYjc0MDlkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKQEAg
LTc5LDYgKzc5LDcgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogCiAgICAgICAgIHNlbGYuSFRU
UF9TVUJESVIgPSAnaHR0cCcgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IKICAgICAgICAgc2Vs
Zi5XRUJTT0NLRVRfU1VCRElSID0gJ3dlYnNvY2tldCcgKyBwb3J0LlRFU1RfUEFUSF9TRVBBUkFU
T1IKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zdWJkaXIgPSBzZWxmLl9wb3J0Lndl
Yl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9kb2Nfcm9vdCgpCiAgICAgICAgIHNlbGYuTEFZT1VUX1RF
U1RTX0RJUkVDVE9SWSA9ICdMYXlvdXRUZXN0cycKIAogICAgICAgICAjIGRpc2FibGUgd3NzIHNl
cnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMuCkBAIC05MywxMSAr
OTQsMTQgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICByZXR1cm4gc2VsZi5fZmlu
ZGVyLmZpbmRfdGVzdHMoc2VsZi5fb3B0aW9ucywgYXJncykKIAogICAgIGRlZiBfaXNfaHR0cF90
ZXN0KHNlbGYsIHRlc3QpOgotICAgICAgICByZXR1cm4gc2VsZi5IVFRQX1NVQkRJUiBpbiB0ZXN0
IG9yIHNlbGYuX2lzX3dlYnNvY2tldF90ZXN0KHRlc3QpCisgICAgICAgIHJldHVybiBzZWxmLkhU
VFBfU1VCRElSIGluIHRlc3Qgb3Igc2VsZi5faXNfd2Vic29ja2V0X3Rlc3QodGVzdCkgb3Igc2Vs
Zi5faXNfd2ViX3BsYXRmb3JtX3Rlc3QodGVzdCkKIAogICAgIGRlZiBfaXNfd2Vic29ja2V0X3Rl
c3Qoc2VsZiwgdGVzdCk6CiAgICAgICAgIHJldHVybiBzZWxmLldFQlNPQ0tFVF9TVUJESVIgaW4g
dGVzdAogCisgICAgZGVmIF9pc193ZWJfcGxhdGZvcm1fdGVzdChzZWxmLCB0ZXN0KToKKyAgICAg
ICAgcmV0dXJuIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc3ViZGlyIGluIHRlc3QKKwogICAgIGRl
ZiBfaHR0cF90ZXN0cyhzZWxmLCB0ZXN0X25hbWVzKToKICAgICAgICAgcmV0dXJuIHNldCh0ZXN0
IGZvciB0ZXN0IGluIHRlc3RfbmFtZXMgaWYgc2VsZi5faXNfaHR0cF90ZXN0KHRlc3QpKQogCkBA
IC0yMzUsNyArMjM5LDggQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcml6ZWRfcmVzdWx0cywgaW5pdGlhbF9y
ZXN1bHRzLCByZXRyeV9yZXN1bHRzLCBlbmFibGVkX3BpeGVsX3Rlc3RzX2luX3JldHJ5KQogCiAg
ICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgdGVzdHNfdG9fcnVuLCB0ZXN0c190b19za2lwLCByZXBl
YXRfZWFjaCwgaXRlcmF0aW9ucywgbnVtX3dvcmtlcnMsIHJldHJ5aW5nKToKLSAgICAgICAgbmVl
ZHNfaHR0cCA9IGFueShzZWxmLl9pc19odHRwX3Rlc3QodGVzdCkgZm9yIHRlc3QgaW4gdGVzdHNf
dG9fcnVuKQorICAgICAgICBuZWVkc19odHRwID0gYW55KChzZWxmLl9pc19odHRwX3Rlc3QodGVz
dCkgYW5kIG5vdCBzZWxmLl9pc193ZWJfcGxhdGZvcm1fdGVzdCh0ZXN0KSkgZm9yIHRlc3QgaW4g
dGVzdHNfdG9fcnVuKQorICAgICAgICBuZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBh
bnkoc2VsZi5faXNfd2ViX3BsYXRmb3JtX3Rlc3QodGVzdCkgZm9yIHRlc3QgaW4gdGVzdHNfdG9f
cnVuKQogICAgICAgICBuZWVkc193ZWJzb2NrZXRzID0gYW55KHNlbGYuX2lzX3dlYnNvY2tldF90
ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKIAogICAgICAgICB0ZXN0X2lucHV0
cyA9IFtdCkBAIC0yNDMsNyArMjQ4LDcgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAg
ICAgICAgZm9yIHRlc3QgaW4gdGVzdHNfdG9fcnVuOgogICAgICAgICAgICAgICAgIGZvciBfIGlu
IHhyYW5nZShyZXBlYXRfZWFjaCk6CiAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5wdXRzLmFw
cGVuZChzZWxmLl90ZXN0X2lucHV0X2Zvcl9maWxlKHRlc3QpKQotICAgICAgICByZXR1cm4gc2Vs
Zi5fcnVubmVyLnJ1bl90ZXN0cyhzZWxmLl9leHBlY3RhdGlvbnMsIHRlc3RfaW5wdXRzLCB0ZXN0
c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVlZHNfd2Vic29ja2V0cywgcmV0
cnlpbmcpCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5uZXIucnVuX3Rlc3RzKHNlbGYuX2V4cGVj
dGF0aW9ucywgdGVzdF9pbnB1dHMsIHRlc3RzX3RvX3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19o
dHRwLCBuZWVkc193ZWJzb2NrZXRzLCBuZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIsIHJl
dHJ5aW5nKQogCiAgICAgZGVmIF9jbGVhbl91cF9ydW4oc2VsZik6CiAgICAgICAgIF9sb2cuZGVi
dWcoIkZsdXNoaW5nIHN0ZG91dCIpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5w
eQppbmRleCBkNGFmYjYwOTdjOTI3NjQ2MDBmYTgyMmIxMGU5ZTRkYjRhNWIzMWJjLi40ZWM2M2Zk
ZWViNTRiODYxY2QyN2EwNGVhYTFmYzJiZGMzZjg2MWVmIDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21h
bmFnZXJfdW5pdHRlc3QucHkKQEAgLTQzLDkgKzQzLDEzIEBAIGZyb20gd2Via2l0cHkudG9vbC5t
b2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKIAogY2xhc3MgTWFuYWdlclRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X25lZWRzX3NlcnZlcnMoc2VsZik6CisgICAgICAgIGRl
ZiBnZXRfd3B0X2RvY19yb290KCk6CisgICAgICAgICAgICByZXR1cm4gJ2ltcG9ydGVkL3czYy93
cHQnCisKICAgICAgICAgZGVmIGdldF9tYW5hZ2VyKCk6CiAgICAgICAgICAgICBwb3J0ID0gTW9j
aygpICAjIEZJWE1FOiBVc2UgYSB0aWdodGVyIG1vY2suCiAgICAgICAgICAgICBwb3J0LlRFU1Rf
UEFUSF9TRVBBUkFUT1IgPSAnLycKKyAgICAgICAgICAgIHBvcnQud2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyX2RvY19yb290ID0gZ2V0X3dwdF9kb2Nfcm9vdAogICAgICAgICAgICAgbWFuYWdlciA9
IE1hbmFnZXIocG9ydCwgb3B0aW9ucz1Nb2NrT3B0aW9ucyhodHRwPVRydWUpLCBwcmludGVyPU1v
Y2soKSkKICAgICAgICAgICAgIHJldHVybiBtYW5hZ2VyCiAKQEAgLTU1LDYgKzU5LDEyIEBAIGNs
YXNzIE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgbWFuYWdlciA9IGdl
dF9tYW5hZ2VyKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hbmFnZXIubmVlZHNfc2VydmVy
cyhbJ2h0dHAvdGVzdHMvbWlzYyddKSkKIAorICAgICAgICBtYW5hZ2VyID0gZ2V0X21hbmFnZXIo
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFuYWdlci5uZWVkc19zZXJ2ZXJzKFsnaW1wb3J0
ZWQvdzNjL3dwdC90ZXN0J10pKQorCisgICAgICAgIG1hbmFnZXIgPSBnZXRfbWFuYWdlcigpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWFuYWdlci5uZWVkc19zZXJ2ZXJzKFsnaW1wb3J0ZWQv
dzNjJ10pKQorCiAgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfbmVlZHNfc2VydmVycyhzZWxmKToK
ICAgICAgICAgZGVmIGdldF9tYW5hZ2VyKCk6CiAgICAgICAgICAgICBob3N0ID0gTW9ja0hvc3Qo
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHMucHkKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBmYTI5
YTMwODg2MDg2MzMxOTFlNzMxMjI4YzE4NmVlOTBiMjkwZDA0Li4yY2VlNjljYTI0NmFkOWQ3YmU0
NzcwOTFmMzlmYzdkNjNiNjE3Nzg4Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtMjk1LDYgKzI5NSwxMCBAQCBkZWYg
cGFyc2VfYXJncyhhcmdzKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZmlndXJh
dGlvbnMuIERvZXMgbm90IHJ1biBhbnkgdGVzdHMuIikpLAogICAgIF0pKQogCisgICAgb3B0aW9u
X2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoIldlYiBQbGF0Zm9ybSBUZXN0IFNlcnZlciBPcHRp
b25zIiwgWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS13cHRzZXJ2ZXItZG9jLXJv
b3QiLCB0eXBlPSJzdHJpbmciLCBoZWxwPSgiU2V0IHdlYiBwbGF0Zm9ybSBzZXJ2ZXIgZG9jdW1l
bnQgcm9vdCwgcmVsYXRpdmUgdG8gTGF5b3V0VGVzdHMgZGlyZWN0b3J5IikpLAorICAgIF0pKQor
CiAgICAgIyBGSVhNRTogTW92ZSB0aGVzZSBpbnRvIGpzb25fcmVzdWx0c19nZW5lcmF0b3IucHkK
ICAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgiUmVzdWx0IEpTT04gT3B0aW9u
cyIsIFsKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbWFzdGVyLW5hbWUiLCBoZWxw
PSJUaGUgbmFtZSBvZiB0aGUgYnVpbGRib3QgbWFzdGVyLiIpLApkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9s
YXVuY2hlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMv
d2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNoZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTZhZWJkM2NmMDZlZmE2
MDA0MWVhMzg3MDU4YjgzMmZkODljZWE1NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNo
ZXIucHkKQEAgLTAsMCArMSwzMyBAQAorIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVj
dCB0byB0aGUgdGVybXMgb2YgdGhlIDMtY2xhdXNlIEJTRCBMaWNlbnNlCisjIGh0dHA6Ly93d3cu
dzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwOC8wMy1ic2QtbGljZW5zZS5odG1sCisKK2ltcG9y
dCBpbXAKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9y
dCBvcworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKK2xvZ2dlci5zZXRM
ZXZlbChsb2dnaW5nLkRFQlVHKQorCitzeXMucGF0aC5pbnNlcnQoMSwgIi4iKQoraW1wb3J0IHNl
cnZlIGFzIFdlYlBsYXRmb3JtVGVzdFNlcnZlcgorCisjIFRoaXMgc2NyaXB0IGlzIHVzZWQgdG8g
bGF1bmNoIHRoZSB3ZWIgcGxhdGZvcm0gdGVzdCBzZXJ2ZXIgbWFpbiBzY3JpcHQgKHNlcnZlLnB5
KSBhbmQgc3RvcCBpdCB3aGVuIGFza2VkIGJ5IHJ1bi13ZWJraXQtdGVzdHMKKworCitkZWYgbWFp
bihhcmd2LCBzdGRvdXQsIHN0ZGVycik6CisgICAgIyBUaGlzIGlzIGEgY29weSBvZiBzZXJ2ZS5w
eSBtYWluIGZ1bmN0aW9uLCBleGNlcHQgZm9yIHRoZSB3YWl0IHN0ZXAKKyAgICBjb25maWcgPSBX
ZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIubG9hZF9jb25maWcoImNvbmZpZy5kZWZhdWx0Lmpzb24iLCAi
Y29uZmlnLmpzb24iKQorICAgIFdlYlBsYXRmb3JtVGVzdFNlcnZlci5zZXR1cF9sb2dnZXIoY29u
ZmlnWyJsb2dfbGV2ZWwiXSkKKyAgICBjb25maWdfLCBzdGFydGVkX3NlcnZlcnMgPSBXZWJQbGF0
Zm9ybVRlc3RTZXJ2ZXIuc3RhcnQoY29uZmlnKQorCisgICAgZm9yIHByb3RvY29sLCBzZXJ2ZXJz
IGluIHN0YXJ0ZWRfc2VydmVycy5pdGVtcygpOgorICAgICAgICBmb3IgcG9ydCwgcHJvY2VzcyBp
biBzZXJ2ZXJzOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIiVzLCBwb3J0OiVkLCBwaWQ6JWQi
ICUgKHByb3RvY29sLCBwb3J0LCBwcm9jZXNzLnByb2MucGlkKSkKKworICAgIHN5cy5zdGRpbi5y
ZWFkKDEpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzeXMuZXhpdChtYWlu
KHN5cy5hcmd2WzE6XSwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMv
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmYzkzYTRmYjlmNTlkMTAw
NzQyYmNhOTgyYjBkMzJjNTBjMzI1ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5w
eQpAQCAtMCwwICsxLDEyOSBAQAorIyAgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1l
dDoKKyMgIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
Q2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCisjICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyAgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyAgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjICBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorIyAgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBq
c29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQor
CitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworZGVmIGRvY19yb290KHBv
cnRfb2JqKToKKyAgICBkb2Nfcm9vdCA9IHBvcnRfb2JqLmdldF9vcHRpb24oIndwdHNlcnZlcl9k
b2Nfcm9vdCIpCisgICAgaWYgZG9jX3Jvb3QgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIHBvcnRf
b2JqLmhvc3QuZmlsZXN5c3RlbS5qb2luKCJpbXBvcnRlZCIsICJ3M2MiLCAid3B0IikKKyAgICBy
ZXR1cm4gZG9jX3Jvb3QKKworCitkZWYgYmFzZV91cmwocG9ydF9vYmopOgorICAgIGNvbmZpZ193
a19maWxlcGF0aCA9IHBvcnRfb2JqLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgiTGF5b3V0VGVzdHMi
LCAiaW1wb3J0ZWQiLCAidzNjIiwgInJlc291cmNlcyIsICJjb25maWcuanNvbiIpCisgICAgaWYg
bm90IHBvcnRfb2JqLmhvc3QuZmlsZXN5c3RlbS5pc2ZpbGUoY29uZmlnX3drX2ZpbGVwYXRoKToK
KyAgICAgICAgIyBUaGlzIHNob3VsZCBvbmx5IGJlIGhpdCBieSB3ZWJraXRweSB1bml0IHRlc3Rz
CisgICAgICAgIF9sb2cuZGVidWcoIk5vIFdQVCBjb25maWcgZmlsZSBmb3VuZCIpCisgICAgICAg
IHJldHVybiAiaHR0cDovL2xvY2FsaG9zdDo4ODAwLyIKKyAgICBqc29uX2RhdGEgPSBwb3J0X29i
ai5fZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShjb25maWdfd2tfZmlsZXBhdGgpCisgICAgY29u
ZmlnID0ganNvbi5sb2Fkcyhqc29uX2RhdGEpCisgICAgcG9ydHMgPSBjb25maWdbInBvcnRzIl0K
KyAgICByZXR1cm4gImh0dHA6Ly8iICsgY29uZmlnWyJob3N0Il0gKyAiOiIgKyBzdHIocG9ydHNb
Imh0dHAiXVswXSkgKyAiLyIKKworCitjbGFzcyBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIoaHR0cF9z
ZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRf
b2JqLCBuYW1lLCBsYXlvdXRfdGVzdF9yZXN1bHRzX2RpciwgcGlkZmlsZT1Ob25lKToKKyAgICAg
ICAgaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZS5fX2luaXRfXyhzZWxmLCBwb3J0X29i
aikKKyAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9IGxheW91dF90ZXN0X3Jlc3VsdHNfZGlyCisK
KyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fbG9nX2ZpbGVfbmFtZSA9
ICclc19wcm9jZXNzX2xvZy5vdXQudHh0JyAlIChzZWxmLl9uYW1lKQorCisgICAgICAgIHNlbGYu
X3dzb3V0ID0gTm9uZQorICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQorICAgICAgICBzZWxm
Ll9waWRfZmlsZSA9IHBpZGZpbGUKKyAgICAgICAgaWYgbm90IHNlbGYuX3BpZF9maWxlOgorICAg
ICAgICAgICAgc2VsZi5fcGlkX2ZpbGUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fcnVu
dGltZV9wYXRoLCAnJXMucGlkJyAlIHNlbGYuX25hbWUpCisgICAgICAgIHNlbGYuX3N0ZG91dF9k
YXRhID0gTm9uZQorICAgICAgICBzZWxmLl9zdGRlcnJfZGF0YSA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5fZmlsZXN5c3RlbSA9IHBvcnRfb2JqLmhvc3QuZmlsZXN5c3RlbQorICAgICAgICBzZWxmLl9s
YXlvdXRfcm9vdCA9IHBvcnRfb2JqLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgiTGF5b3V0VGVzdHMi
KQorICAgICAgICBzZWxmLl9kb2Nfcm9vdCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9s
YXlvdXRfcm9vdCwgZG9jX3Jvb3QocG9ydF9vYmopKQorCisgICAgICAgIHNlbGYuX3Jlc291cmNl
c19maWxlc190b19jb3B5ID0gWyd0ZXN0aGFybmVzcy5qcycsICd0ZXN0aGFybmVzcy5jc3MnLCAn
dGVzdGhhcm5lc3NyZXBvcnQuanMnXQorCisgICAgICAgIGN1cnJlbnRfZGlyX3BhdGggPSBzZWxm
Ll9maWxlc3lzdGVtLmFic3BhdGgoc2VsZi5fZmlsZXN5c3RlbS5zcGxpdChfX2ZpbGVfXylbMF0p
CisgICAgICAgIHNlbGYuX3N0YXJ0X2NtZCA9IFsicHl0aG9uIiwgc2VsZi5fZmlsZXN5c3RlbS5q
b2luKGN1cnJlbnRfZGlyX3BhdGgsICJ3ZWJfcGxhdGZvcm1fdGVzdF9sYXVuY2hlci5weSIpXQor
ICAgICAgICBzZWxmLl9kb2Nfcm9vdF9wYXRoID0gcG9ydF9vYmoucGF0aF9mcm9tX3dlYmtpdF9i
YXNlKCJMYXlvdXRUZXN0cyIsIHNlbGYuX2RvY19yb290KQorCisgICAgZGVmIF9jb3B5X3dlYmtp
dF90ZXN0X2ZpbGVzKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdDb3B5aW5nIFdlYktpdCBy
ZXNvdXJjZXMgZmlsZXMnKQorICAgICAgICBmb3IgZiBpbiBzZWxmLl9yZXNvdXJjZXNfZmlsZXNf
dG9fY29weToKKyAgICAgICAgICAgIHdlYmtpdF9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0u
am9pbihzZWxmLl9sYXlvdXRfcm9vdCwgInJlc291cmNlcyIsIGYpCisgICAgICAgICAgICBpZiBz
ZWxmLl9maWxlc3lzdGVtLmlzZmlsZSh3ZWJraXRfZmlsZW5hbWUpOgorICAgICAgICAgICAgICAg
IHNlbGYuX2ZpbGVzeXN0ZW0uY29weWZpbGUod2Via2l0X2ZpbGVuYW1lLCBzZWxmLl9maWxlc3lz
dGVtLmpvaW4oc2VsZi5fZG9jX3Jvb3QsICJyZXNvdXJjZXMiLCBmKSkKKyAgICAgICAgX2xvZy5k
ZWJ1ZygnQ29weWluZyBXZWJLaXQgd2ViIHBsYXRmb3JtIHNlcnZlciBjb25maWcuanNvbicpCisg
ICAgICAgIGNvbmZpZ193a19maWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9s
YXlvdXRfcm9vdCwgImltcG9ydGVkIiwgInczYyIsICJyZXNvdXJjZXMiLCAiY29uZmlnLmpzb24i
KQorICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmlzZmlsZShjb25maWdfd2tfZmlsZW5hbWUp
OgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5jb3B5ZmlsZShjb25maWdfd2tfZmlsZW5h
bWUsIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9kb2Nfcm9vdCwgImNvbmZpZy5qc29uIikp
CisKKyAgICBkZWYgX2NsZWFuX3dlYmtpdF90ZXN0X2ZpbGVzKHNlbGYpOgorICAgICAgICBfbG9n
LmRlYnVnKCdDbGVhbmluZyBXUFQgcmVzb3VyY2VzIGZpbGVzJykKKyAgICAgICAgZm9yIGYgaW4g
c2VsZi5fcmVzb3VyY2VzX2ZpbGVzX3RvX2NvcHk6CisgICAgICAgICAgICB3cHRfZmlsZW5hbWUg
PSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fZG9jX3Jvb3QsICJyZXNvdXJjZXMiLCBmKQor
ICAgICAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5pc2ZpbGUod3B0X2ZpbGVuYW1lKToKKyAg
ICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZSh3cHRfZmlsZW5hbWUpCisgICAg
ICAgIF9sb2cuZGVidWcoJ0NsZWFuaW5nIFdQVCB3ZWIgcGxhdGZvcm0gc2VydmVyIGNvbmZpZy5q
c29uJykKKyAgICAgICAgY29uZmlnX3dwdF9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9p
bihzZWxmLl9kb2Nfcm9vdCwgImNvbmZpZy5qc29uIikKKyAgICAgICAgaWYgc2VsZi5fZmlsZXN5
c3RlbS5pc2ZpbGUoY29uZmlnX3dwdF9maWxlbmFtZSk6CisgICAgICAgICAgICBzZWxmLl9maWxl
c3lzdGVtLnJlbW92ZShjb25maWdfd3B0X2ZpbGVuYW1lKQorCisgICAgZGVmIF9wcmVwYXJlX2Nv
bmZpZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5fb3V0
cHV0X2Rpcik6CisgICAgICAgICAgICBvdXRwdXRfbG9nID0gc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KHNlbGYuX291dHB1dF9kaXIsIHNlbGYuX2xvZ19maWxlX25hbWUpCisgICAgICAgICAgICBzZWxm
Ll93c291dCA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcob3V0
cHV0X2xvZykKKyAgICAgICAgc2VsZi5fY29weV93ZWJraXRfdGVzdF9maWxlcygpCisKKyAgICBk
ZWYgX3NwYXduX3Byb2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuX3N0ZG91dF9kYXRhID0gTm9u
ZQorICAgICAgICBzZWxmLl9zdGRlcnJfZGF0YSA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fd3Nv
dXQ6CisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzID0gc2VsZi5fZXhlY3V0aXZlLnBvcGVuKHNl
bGYuX3N0YXJ0X2NtZCwgY3dkPXNlbGYuX2RvY19yb290X3BhdGgsIHNoZWxsPUZhbHNlLCBzdGRp
bj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zZWxmLl93c291dCwgc3RkZXJyPXNlbGYuX3dzb3V0
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHNlbGYuX2V4ZWN1
dGl2ZS5wb3BlbihzZWxmLl9zdGFydF9jbWQsIGN3ZD1zZWxmLl9kb2Nfcm9vdF9wYXRoLCBzaGVs
bD1GYWxzZSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBz
dGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVf
dGV4dF9maWxlKHNlbGYuX3BpZF9maWxlLCBzdHIoc2VsZi5fcHJvY2Vzcy5waWQpKQorICAgICAg
ICByZXR1cm4gc2VsZi5fcHJvY2Vzcy5waWQKKworICAgIGRlZiBfc3RvcF9ydW5uaW5nX3NlcnZl
cihzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBpbmcgJXMgc2VydmVyJyAlIChzZWxm
Ll9uYW1lKSkKKyAgICAgICAgc2VsZi5fY2xlYW5fd2Via2l0X3Rlc3RfZmlsZXMoKQorICAgICAg
ICBpZiBzZWxmLl9waWQgYW5kIG5vdCBzZWxmLl9leGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQo
c2VsZi5fcGlkKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKHNlbGYuX3Bp
ZF9maWxlKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Cisg
ICAgICAgICAgICAoc2VsZi5fc3Rkb3V0X2RhdGEsIHNlbGYuX3N0ZGVycl9kYXRhKSA9IHNlbGYu
X3Byb2Nlc3MuY29tbXVuaWNhdGUoaW5wdXQ9J1xuJykKKyAgICAgICAgaWYgc2VsZi5fd3NvdXQ6
CisgICAgICAgICAgICBzZWxmLl93c291dC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl93c291
dCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fZXhlY3V0aXZlLmNoZWNrX3J1bm5pbmdfcGlkKHNl
bGYuX3BpZCk6CisgICAgICAgICAgICByYWlzZSBodHRwX3NlcnZlcl9iYXNlLlNlcnZlckVycm9y
KCdGYWlsZWQgdG8gc3RvcCAlczogcGxlYXNlIGdvIHRvIHdlYiBwbGF0Zm9ybSB0ZXN0IHNlcnZl
ciBsb2cgZmlsZSB0byBnZXQgdGhlIFBJRCBsaXN0JyAlIChzZWxmLl9uYW1lKSkKKyAgICAgICAg
c2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUoc2VsZi5fcGlkX2ZpbGUpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhlNWRlNTFhNTIzZGFhMjg4YTI2ZmMyOWJkYzFiMzE3NTZhYzE2MGYKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlcl91bml0dGVzdC5weQpAQCAtMCwwICsxLDQ0IEBACisjICBDb3B5cmln
aHQgKGMpIDIwMTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjICBhcmUgbWV0OgorIyAgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
ICAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMg
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisjICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyAg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyAgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjICBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjICBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyAgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjICBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi5ob3N0X21vY2sgaW1wb3J0IE1vY2tIb3N0Citmcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IFBvcnQKK2Zyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09w
dGlvbnMKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycy53ZWJfcGxhdGZvcm1f
dGVzdF9zZXJ2ZXIgaW1wb3J0IFdlYlBsYXRmb3JtVGVzdFNlcnZlcgorCisKK2NsYXNzIFRlc3RX
ZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3N0
YXJ0X2NtZChzZWxmKToKKworICAgICAgICBwb3J0ID0gUG9ydChNb2NrSG9zdCgpLCAidGVzdCIp
CisgICAgICAgIHNlcnZlciA9IFdlYlBsYXRmb3JtVGVzdFNlcnZlcihwb3J0LCAid3B0dGVzdCIs
ICIvbW9jay9vdXRwdXRfZGlyIiwgIi9tb2NrL291dHB1dF9kaXIvcGlkLnR4dCIpCisKKyAgICAg
ICAgc2VydmVyLl9wcmVwYXJlX2NvbmZpZygpCisgICAgICAgIHNlcnZlci5fd3NvdXQgPSBOb25l
CisgICAgICAgIHNlcnZlci5fc3Bhd25fcHJvY2VzcygpCisgICAgICAgIHRpbWUuc2xlZXAoMSkK
KyAgICAgICAgc2VydmVyLl9zdG9wX3J1bm5pbmdfc2VydmVyKCkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Jhc2UucHkKaW5kZXggYzllODQ5ZDU0NGQ0NDAxOWM5MjQ0YjJlZGY0YzU5ZDFkNzhkNjEw
OS4uYzI5NGU0OGM4N2U1NTlkMTk0ODliZTI3YzkwOGU3YjdhZmY4YjhkYiAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2Jhc2UucHkKQEAgLTU5LDYgKzU5LDcgQEAgZnJvbSB3ZWJraXRweS5wb3J0
IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcwogZnJvbSB3ZWJraXRweS5wb3J0LmZhY3RvcnkgaW1wb3J0
IFBvcnRGYWN0b3J5CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBh
cGFjaGVfaHR0cF9zZXJ2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1w
b3J0IGh0dHBfc2VydmVyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9y
dCB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNl
cnZlcnMgaW1wb3J0IHdlYnNvY2tldF9zZXJ2ZXIKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KF9fbmFtZV9fKQpAQCAtMTE2LDYgKzExNyw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAg
ICAgc2VsZi5faGVscGVyID0gTm9uZQogICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9IE5vbmUK
ICAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fd2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gTm9uZQogICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIg
PSBOb25lCiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gc2VydmVy
X3Byb2Nlc3MuU2VydmVyUHJvY2VzcyAgIyBvdmVycmlkYWJsZSBmb3IgdGVzdGluZwogCkBAIC04
ODEsNiArODgzLDE4IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgc2VydmVyLnN0YXJ0
KCkKICAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlciA9IHNlcnZlcgogCisgICAgZGVmIHN0
YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcihzZWxmLCBhZGRpdGlvbmFsX2RpcnM9Tm9uZSwg
bnVtYmVyX29mX3NlcnZlcnM9Tm9uZSk6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fd2ViX3Bs
YXRmb3JtX3Rlc3Rfc2VydmVyLCAnQWxyZWFkeSBydW5uaW5nIGEgV2ViIFBsYXRmb3JtIFRlc3Qg
c2VydmVyLicKKworICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSB3ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXIuV2ViUGxhdGZvcm1UZXN0U2VydmVyKHNlbGYsICJ3cHR3ayIs
IHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSkKKyAgICAgICAgc2VsZi5fd2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyLnN0YXJ0KCkKKworICAgIGRlZiB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfZG9j
X3Jvb3Qoc2VsZik6CisgICAgICAgIHJldHVybiB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIuZG9j
X3Jvb3Qoc2VsZikgKyBzZWxmLlRFU1RfUEFUSF9TRVBBUkFUT1IKKworICAgIGRlZiB3ZWJfcGxh
dGZvcm1fdGVzdF9zZXJ2ZXJfYmFzZV91cmwoc2VsZik6CisgICAgICAgIHJldHVybiB3ZWJfcGxh
dGZvcm1fdGVzdF9zZXJ2ZXIuYmFzZV91cmwoc2VsZikKKwogICAgIGRlZiBodHRwX3NlcnZlcl9z
dXBwb3J0c19pcHY2KHNlbGYpOgogICAgICAgICAjIEN5Z3dpbiBpcyB0aGUgb25seSBwbGF0Zm9y
bSB0byBzdGlsbCB1c2UgQXBhY2hlIDEuMywgd2hpY2ggb25seSBzdXBwb3J0cyBJUFY0LgogICAg
ICAgICAjIE9uY2UgaXQgbW92ZXMgdG8gQXBhY2hlIDIsIHdlIGNhbiBkcm9wIHRoaXMgbWV0aG9k
IGFsdG9nZXRoZXIuCkBAIC05MDYsNiArOTIwLDExIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAg
ICAgICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIuc3RvcCgpCiAgICAgICAgICAgICBzZWxm
Ll93ZWJzb2NrZXRfc2VydmVyID0gTm9uZQogCisgICAgZGVmIHN0b3Bfd2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2
ZXI6CisgICAgICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIuc3RvcCgpCisg
ICAgICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBOb25lCisKICAgICBk
ZWYgZXhpdF9jb2RlX2Zyb21fc3VtbWFyaXplZF9yZXN1bHRzKHNlbGYsIHVuZXhwZWN0ZWRfcmVz
dWx0cyk6CiAgICAgICAgICIiIkdpdmVuIHN1bW1hcml6ZWQgcmVzdWx0cywgY29tcHV0ZSB0aGUg
ZXhpdCBjb2RlIHRvIGJlIHJldHVybmVkIGJ5IG5ldy1ydW4td2Via2l0LXRlc3RzLgogICAgICAg
ICBCb3RzIHR1cm4gcmVkIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLXplcm8gdmFs
dWUuIEJ5IGRlZmF1bHQsIHJldHVybiB0aGUgbnVtYmVyIG9mIHJlZ3Jlc3Npb25zCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1
CmluZGV4IDQ1YjM3OTRkNDk1N2VkZjRiM2ViYjQ2ZDk1NzkyZWNiMzk1YTBjODEuLjMyNWE1MDAy
NzM2ZWM4MzE0YzMwNmQ4YmI5YzJiMjc3YmE3ZmQwMjEKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2RyaXZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJp
dmVyLnB5CkBAIC0zNyw2ICszNyw3IEBAIGltcG9ydCBvcwogCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0gaW1wb3J0IHBhdGgKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5wcm9maWxl
ciBpbXBvcnQgUHJvZmlsZXJGYWN0b3J5Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2
ZXJzLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciBpbXBvcnQgV2ViUGxhdGZvcm1UZXN0U2VydmVy
CiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtMTU5LDYgKzE2MCw5
IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2Vs
Zi5fcHJvZmlsZXIgPSBOb25lCiAKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2
ZXJfZG9jX3Jvb3QgPSBzZWxmLl9wb3J0LndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9kb2Nfcm9v
dCgpCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX2Jhc2VfdXJsID0gc2Vs
Zi5fcG9ydC53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfYmFzZV91cmwoKQorCiAgICAgZGVmIF9f
ZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuc3RvcCgpCiAKQEAgLTI0NCw4ICsyNDgsMTQgQEAg
Y2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgZGVmIGlzX2h0dHBfdGVzdChzZWxmLCB0ZXN0X25h
bWUpOgogICAgICAgICByZXR1cm4gdGVzdF9uYW1lLnN0YXJ0c3dpdGgoc2VsZi5IVFRQX0RJUikg
YW5kIG5vdCB0ZXN0X25hbWUuc3RhcnRzd2l0aChzZWxmLkhUVFBfTE9DQUxfRElSKQogCisgICAg
ZGVmIGlzX3dlYl9wbGF0Zm9ybV90ZXN0KHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHJldHVy
biB0ZXN0X25hbWUuc3RhcnRzd2l0aChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9kb2Nf
cm9vdCkKKwogICAgIGRlZiB0ZXN0X3RvX3VyaShzZWxmLCB0ZXN0X25hbWUpOgogICAgICAgICAi
IiJDb252ZXJ0IGEgdGVzdCBuYW1lIHRvIGEgVVJJLiIiIgorICAgICAgICBpZiBzZWxmLmlzX3dl
Yl9wbGF0Zm9ybV90ZXN0KHRlc3RfbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi53ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXJfYmFzZV91cmwgKyB0ZXN0X25hbWVbbGVuKHNlbGYud2ViX3Bs
YXRmb3JtX3Rlc3Rfc2VydmVyX2RvY19yb290KTpdCisKICAgICAgICAgaWYgbm90IHNlbGYuaXNf
aHR0cF90ZXN0KHRlc3RfbmFtZSk6CiAgICAgICAgICAgICByZXR1cm4gcGF0aC5hYnNwYXRoX3Rv
X3VyaShzZWxmLl9wb3J0Lmhvc3QucGxhdGZvcm0sIHNlbGYuX3BvcnQuYWJzcGF0aF9mb3JfdGVz
dCh0ZXN0X25hbWUpKQogCkBAIC0yNjksNiArMjc5LDggQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6
CiAgICAgICAgICAgICBpZiBub3QgcHJlZml4LmVuZHN3aXRoKCcvJyk6CiAgICAgICAgICAgICAg
ICAgcHJlZml4ICs9ICcvJwogICAgICAgICAgICAgcmV0dXJuIHVyaVtsZW4ocHJlZml4KTpdCisg
ICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX2Jh
c2VfdXJsKToKKyAgICAgICAgICAgIHJldHVybiB1cmkucmVwbGFjZShzZWxmLndlYl9wbGF0Zm9y
bV90ZXN0X3NlcnZlcl9iYXNlX3VybCwgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfZG9j
X3Jvb3QpCiAgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCJodHRwOi8vIik6CiAgICAgICAgICAg
ICByZXR1cm4gdXJpLnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC8nLCBzZWxmLkhUVFBf
RElSKQogICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cHM6Ly8iKToKQEAgLTM5OCw3ICs0
MTAsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgIyBGSVhNRTogcGVyZm9ybWFu
Y2UgdGVzdHMgcGFzcyBpbiBmdWxsIFVSTHMgaW5zdGVhZCBvZiB0ZXN0IG5hbWVzLgogICAgICAg
ICBpZiBkcml2ZXJfaW5wdXQudGVzdF9uYW1lLnN0YXJ0c3dpdGgoJ2h0dHA6Ly8nKSBvciBkcml2
ZXJfaW5wdXQudGVzdF9uYW1lLnN0YXJ0c3dpdGgoJ2h0dHBzOi8vJykgIG9yIGRyaXZlcl9pbnB1
dC50ZXN0X25hbWUgPT0gKCdhYm91dDpibGFuaycpOgogICAgICAgICAgICAgY29tbWFuZCA9IGRy
aXZlcl9pbnB1dC50ZXN0X25hbWUKLSAgICAgICAgZWxpZiBzZWxmLmlzX2h0dHBfdGVzdChkcml2
ZXJfaW5wdXQudGVzdF9uYW1lKToKKyAgICAgICAgZWxpZiBzZWxmLmlzX2h0dHBfdGVzdChkcml2
ZXJfaW5wdXQudGVzdF9uYW1lKSBvciBzZWxmLmlzX3dlYl9wbGF0Zm9ybV90ZXN0KGRyaXZlcl9p
bnB1dC50ZXN0X25hbWUpOgogICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYudGVzdF90b191cmko
ZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvbW1h
bmQgPSBzZWxmLl9wb3J0LmFic3BhdGhfZm9yX3Rlc3QoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3Qu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5CmluZGV4
IGM2MmE1NDliNTJmMjQ5MWNmZGEzNTRmMDU3YWQ4NjI4MmE4NGNmYTQuLjgzNTFjNTgzZTYxZTg1
MGE0MzY2ZDJmYzgyOGFjYjExMmIwNzM1MzMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQpAQCAtMTA5LDYgKzEwOSw3IEBAIGNsYXNzIERyaXZl
clRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZl
ci50ZXN0X3RvX3VyaSgnZm9vL2Jhci5odG1sJyksICdmaWxlOi8vJXMvZm9vL2Jhci5odG1sJyAl
IHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZl
ci50ZXN0X3RvX3VyaSgnaHR0cC90ZXN0cy9mb28uaHRtbCcpLCAnaHR0cDovLzEyNy4wLjAuMTo4
MDAwL2Zvby5odG1sJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudGVzdF90b191
cmkoJ2h0dHAvdGVzdHMvc3NsL2Jhci5odG1sJyksICdodHRwczovLzEyNy4wLjAuMTo4NDQzL3Nz
bC9iYXIuaHRtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnRlc3RfdG9fdXJp
KCdpbXBvcnRlZC93M2Mvd3B0L2Zvby9iYXIuaHRtbCcpLCAnaHR0cDovL2xvY2FsaG9zdDo4ODAw
L2Zvby9iYXIuaHRtbCcpCiAKICAgICBkZWYgdGVzdF91cmlfdG9fdGVzdChzZWxmKToKICAgICAg
ICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKQEAgLTExNiw2ICsxMTcsNyBAQCBjbGFzcyBEcml2
ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2
ZXIudXJpX3RvX3Rlc3QoJ2ZpbGU6Ly8lcy9mb28vYmFyLmh0bWwnICUgcG9ydC5sYXlvdXRfdGVz
dHNfZGlyKCkpLCAnZm9vL2Jhci5odG1sJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2
ZXIudXJpX3RvX3Rlc3QoJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28uaHRtbCcpLCAnaHR0cC90
ZXN0cy9mb28uaHRtbCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnVyaV90b190
ZXN0KCdodHRwczovLzEyNy4wLjAuMTo4NDQzL3NzbC9iYXIuaHRtbCcpLCAnaHR0cC90ZXN0cy9z
c2wvYmFyLmh0bWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci51cmlfdG9fdGVz
dCgnaHR0cDovL2xvY2FsaG9zdDo4ODAwL2Zvby9iYXIuaHRtbCcpLCAnaW1wb3J0ZWQvdzNjL3dw
dC9mb28vYmFyLmh0bWwnKQogCiAgICAgZGVmIHRlc3RfcmVhZF9ibG9jayhzZWxmKToKICAgICAg
ICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmlu
ZGV4IDVmNTQxMjdlMzFmMDk4NzRkY2Q5MDQ5N2E0NGExOTA5ZDQ1ODE0ZTcuLmRhZmY3NWQ3MTVm
NjJmZmQ0MWI2NmY2MzU5MTUzZjMyMzA2MTA4N2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE0LTEyLTI5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5u
LmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgSW50ZWdyYXRlIFdQIHB5dGhvbiBzZXJ2
ZXIgaW50byBXZWJLaXQgdGVzdCBmcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzA5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENvbnRhaW5zIHBhcmFtZXRlcnMgb2Ygd2ViIHBsYXRmb3Jt
IHRlc3Qgc2VydmVyLgorCisgICAgICAgICogcmVzb3VyY2VzL2NvbmZpZy5qc29uOiBBZGRlZC4K
KwogMjAxNC0xMS0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29t
PgogCiAgICAgICAgIEltcG9ydCB3M2MgdGVzdHMgZm9yIGNhbnZhcwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy9jb25maWcuanNvbiBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy9yZXNvdXJjZXMvY29uZmlnLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZiMzBlMDFh
YmFmZDE2ZGU4ZGIwZTEwOTRkYzA0ZGY0ODNkMmFhYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9yZXNvdXJjZXMvY29uZmlnLmpzb24KQEAgLTAsMCArMSw3IEBA
Cit7Imhvc3QiOiAibG9jYWxob3N0IiwKKyAicG9ydHMiOnsiaHR0cCI6Wzg4MDAsIDg4MDFdLAor
ICAgICAgICAgICJodHRwcyI6W10sCisgICAgICAgICAgIndzIjpbNDkwMDFdfSwKKyAiY2hlY2tf
c3ViZG9tYWlucyI6IGZhbHNlLAorICJsb2dfbGV2ZWwiOiJkZWJ1ZyIsCisgImJpbmRfaG9zdG5h
bWUiOiBmYWxzZX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244510</attachid>
            <date>2015-01-13 06:36:57 -0800</date>
            <delta_ts>2015-01-26 11:48:36 -0800</delta_ts>
            <desc>Updating SSL support</desc>
            <filename>bug-127094-20150113153701.patch</filename>
            <type>text/plain</type>
            <size>37975</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc4MjU1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmVjY2Q3OTg5N2VjMTU5NDA2YTk3ZmYyNDBhNGYwMzA3
NzBmNmFjYS4uNzllYzFkODQ2ZDBlOTBkYWNkMzNhZTQ5YjdkN2U1OTYzMDlmY2NlNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3
IEBACisyMDE0LTEyLTI5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgSW50ZWdyYXRlIFdQIHB5dGhvbiBzZXJ2ZXIgaW50byBXZWJLaXQgdGVz
dCBmcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNzA5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyBXM0Mgd2ViIHNlcnZlciAod3B0c2VydmVyKSBhcyBhIG5ldyBI
VFRQIHNlcnZlci4KKyAgICAgICAgd3B0c2VydmVyIGlzIHVzZWQgdG8gc2VydmUgYWxsIHRlc3Rz
IGluc2lkZSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd3B0LgorICAgICAgICB3cHRzZXJ2ZXIg
aW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIGltcG9ydGVkIHdpdGhpbiB0aGUgaW1wb3J0IG9mIHRo
ZSBXZWIgUGxhdGZvcm0gVGVzdCBzdWl0ZSAodG8gZW5zdXJlIGtlZXBpbmcgc2VydmVyIGFuZCB0
ZXN0cyBpbiBzeW5jKSBpbiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd3B0LgorCisgICAgICAg
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rf
bGF1bmNoZXIucHkgc2VydmVzIGFzIG1haW4gZW50cnkgcG9pbnQgdG8gd3B0IHNwYXduZWQgcHJv
Y2Vzcy4KKyAgICAgICAgU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkgaXMgcmVzcG9uc2libGUgdG8gc3RhcnQvc3RvcCB0aGUg
d3B0IHNlcnZlciBwcm9jZXNzLgorICAgICAgICBJdCBhbHNvIHNldHMgdXAgdGhlIHNlcnZlciBj
b25maWcgYW5kIHRlc3RoYXJuZXNzLmpzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIGZpbGVzIGF0IHN0
YXJ0IGFuZCBzdG9wIG9mIHRoZSB3cHQgc2VydmVyLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2V4ZWN1dGl2ZV9tb2NrLnB5OgorICAgICAgICAoTW9ja1Byb2Nlc3MuY29tbXVuaWNhdGUpOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91
dF90ZXN0X3J1bm5lci5weTogQWRkaW5nIHN0YXJ0L3N0b3Agb2Ygd2ViIHBsYXRmb3JtIHRlc3Qg
c2VydmVyIGFjY29yZGluZyBib29sZWFuIHBhcmFtZXRlci4KKyAgICAgICAgKExheW91dFRlc3RS
dW5uZXIuX19pbml0X18pOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5ydW5fdGVzdHMpOgor
ICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5zdGFydF9zZXJ2ZXJzKToKKyAgICAgICAgKExheW91
dFRlc3RSdW5uZXIuc3RvcF9zZXJ2ZXJzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHk6IFVw
ZGF0ZWQgdG8gY2hlY2sgZm9yIHdwdCBzZXJ2ZXIgc3RhcnQvc3RvcC4KKyAgICAgICAgKExheW91
dFRlc3RSdW5uZXJUZXN0cy5fcnVuX3Rlc3RzKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXJU
ZXN0cy50ZXN0X3NlcnZlcnNfc3RhcnRlZC5zdGFydF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIp
OgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lclRlc3RzLnRlc3Rfc2VydmVyc19zdGFydGVkLnN0
b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXJU
ZXN0cyk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJzX3N0YXJ0
ZWQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L21hbmFnZXIucHk6ICBVcGRhdGVkIHRvIGNoZWNrIHdoZXRoZXIgYSB0ZXN0IGlzIGEgd3B0IHRl
c3QgYW5kIHdoZXRoZXIgd3B0IHNlcnZlciBsYXVuY2ggaXMgbmVlZGVkLgorICAgICAgICAoTWFu
YWdlci5fX2luaXRfXyk6CisgICAgICAgIChNYW5hZ2VyLl9pc19odHRwX3Rlc3QpOgorICAgICAg
ICAoTWFuYWdlci5faXNfd2ViX3BsYXRmb3JtX3Rlc3QpOgorICAgICAgICAoTWFuYWdlci5fcnVu
X3Rlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoTWFuYWdlclRlc3QudGVzdF9uZWVk
c19zZXJ2ZXJzLmdldF93cHRfZG9jX3Jvb3QpOgorICAgICAgICAoTWFuYWdlclRlc3QudGVzdF9u
ZWVkc19zZXJ2ZXJzLmdldF9tYW5hZ2VyKToKKyAgICAgICAgKE1hbmFnZXJUZXN0LnRlc3RfbmVl
ZHNfc2VydmVycyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weTogQWRkZWQgYW4gb3B0aW9uIHRvIGNvbnRyb2wgdGhlIGRvY19yb290
IG9mIHRoZSB3cHQgc2VydmVyLgorICAgICAgICAocGFyc2VfYXJncyk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9sYXVu
Y2hlci5weTogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5weTogQWRk
ZWQuCisgICAgICAgIChkb2Nfcm9vdCk6CisgICAgICAgIChiYXNlX3VybCk6CisgICAgICAgIChX
ZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9f
aW5pdF9fKToKKyAgICAgICAgKFdlYlBsYXRmb3JtVGVzdFNlcnZlci5fc2V0X3N0YXJ0X2NtZCk6
CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX2NvcHlfd2Via2l0X3Rlc3RfZmlsZXMp
OgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9jbGVhbl93ZWJraXRfdGVzdF9maWxl
cyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3ByZXBhcmVfY29uZmlnKToKKyAg
ICAgICAgKFdlYlBsYXRmb3JtVGVzdFNlcnZlci5fc3Bhd25fcHJvY2Vzcyk6CisgICAgICAgIChX
ZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3N0b3BfcnVubmluZ19zZXJ2ZXIpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJQbGF0Zm9ybVRlc3RTZXJ2
ZXIpOgorICAgICAgICAoVGVzdFdlYlBsYXRmb3JtVGVzdFNlcnZlci50ZXN0X3N0YXJ0X2NtZCk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0
Ll9faW5pdF9fKToKKyAgICAgICAgKFBvcnQudG8uc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyKToKKyAgICAgICAgKFBvcnQudG8pOgorICAgICAgICAoUG9ydC50by53ZWJfcGxhdGZvcm1f
dGVzdF9zZXJ2ZXJfZG9jX3Jvb3QpOgorICAgICAgICAoUG9ydC50by53ZWJfcGxhdGZvcm1fdGVz
dF9zZXJ2ZXJfYmFzZV91cmwpOgorICAgICAgICAoUG9ydC50by5zdG9wX3dlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weTog
VXBkYXRlZCB0aGUgdGVzdCBuYW1lIDwtPiB0ZXN0IFVSTCBjb252ZXJzaW9uIHJvdXRpbmVzLgor
ICAgICAgICAoRHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAgKERyaXZlci5pc193ZWJfcGxhdGZv
cm1fdGVzdCk6CisgICAgICAgIChEcml2ZXIudGVzdF90b191cmkpOgorICAgICAgICAoRHJpdmVy
LnVyaV90b190ZXN0KToKKyAgICAgICAgKERyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1
dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weTog
IFVwZGF0ZWQgdGVzdHMgYWNjb3JkaW5nIG5ldyBjb252ZXJzaW9uIHJ1bGVzLgorICAgICAgICAo
RHJpdmVyVGVzdC50ZXN0X3Rlc3RfdG9fdXJpKToKKyAgICAgICAgKERyaXZlclRlc3QudGVzdF91
cmlfdG9fdGVzdCk6CisKIDIwMTUtMDEtMTAgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFy
b0BpZ2FsaWEuY29tPgogCiAgICAgICAgIGJ1aWxkLXdlYmtpdDogc2lsZW5jZSBvdXRwdXQgb2Yg
J3doaWNoJwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2V4ZWN1dGl2ZV9tb2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2V4ZWN1dGl2ZV9tb2NrLnB5CmluZGV4IDE4MWE1ZjlhNzFjZTU1OTY2NmE4MjllNjYzZDUxYWE1
ZWEyMTQ5YTcuLjlmMTE0ZDFiMWNiZDBiMzA5OTUxNDBkMjYzNTczNjhmZDcxNmU2MGMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9j
ay5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZl
X21vY2sucHkKQEAgLTQ2LDYgKzQ2LDkgQEAgY2xhc3MgTW9ja1Byb2Nlc3Mob2JqZWN0KToKICAg
ICBkZWYgd2FpdChzZWxmKToKICAgICAgICAgcmV0dXJuCiAKKyAgICBkZWYgY29tbXVuaWNhdGUo
c2VsZiwgaW5wdXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiAoc2VsZi5zdGRvdXQsIHNlbGYuc3Rk
ZXJyKQorCiAjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSB1bmlmaWVkIHdpdGggTW9ja0V4ZWN1dGl2
ZTIKIGNsYXNzIE1vY2tFeGVjdXRpdmUob2JqZWN0KToKICAgICBQSVBFID0gIk1PQ0sgUElQRSIK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL2xheW91dF90ZXN0X3J1bm5lci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQppbmRleCA5MDI3YWY3Zjg1
NWZiNWU0NGVmOWUwYzkyNGQwNGU3MGM1NDMzZGEyLi43ZjNiYTY0NTVhNGFjMTU5Zjg4NzI0ZmZi
NTY4M2JkYzNlZjgyMjdmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVy
LnB5CkBAIC03NCwxNCArNzQsMTYgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lcihvYmplY3QpOgog
ICAgICAgICBzZWxmLl90ZXN0X2lucHV0cyA9IFtdCiAgICAgICAgIHNlbGYuX25lZWRzX2h0dHAg
PSBOb25lCiAgICAgICAgIHNlbGYuX25lZWRzX3dlYnNvY2tldHMgPSBOb25lCisgICAgICAgIHNl
bGYuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5f
cmV0cnlpbmcgPSBGYWxzZQogICAgICAgICBzZWxmLl9jdXJyZW50X3J1bl9yZXN1bHRzID0gTm9u
ZQogCi0gICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBleHBlY3RhdGlvbnMsIHRlc3RfaW5wdXRzLCB0
ZXN0c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVlZHNfd2Vic29ja2V0cywg
cmV0cnlpbmcpOgorICAgIGRlZiBydW5fdGVzdHMoc2VsZiwgZXhwZWN0YXRpb25zLCB0ZXN0X2lu
cHV0cywgdGVzdHNfdG9fc2tpcCwgbnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNv
Y2tldHMsIG5lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciwgcmV0cnlpbmcpOgogICAgICAg
ICBzZWxmLl9leHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnMKICAgICAgICAgc2VsZi5fdGVzdF9p
bnB1dHMgPSB0ZXN0X2lucHV0cwogICAgICAgICBzZWxmLl9uZWVkc19odHRwID0gbmVlZHNfaHR0
cAogICAgICAgICBzZWxmLl9uZWVkc193ZWJzb2NrZXRzID0gbmVlZHNfd2Vic29ja2V0cworICAg
ICAgICBzZWxmLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBuZWVkc193ZWJfcGxh
dGZvcm1fdGVzdF9zZXJ2ZXIKICAgICAgICAgc2VsZi5fcmV0cnlpbmcgPSByZXRyeWluZwogCiAg
ICAgICAgICMgRklYTUU6IHJlbmFtZSBhbGwgdmFyaWFibGVzIHRvIHRlc3RfcnVuX3Jlc3VsdHMg
b3Igc29tZSBzdWNoIC4uLgpAQCAtMTAxLDcgKzEwMyw3IEBAIGNsYXNzIExheW91dFRlc3RSdW5u
ZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1NoYXJkaW5n
IHRlc3RzIC4uLicpCiAgICAgICAgIGFsbF9zaGFyZHMgPSBzZWxmLl9zaGFyZGVyLnNoYXJkX3Rl
c3RzKHRlc3RfaW5wdXRzLCBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpLCBzZWxm
Ll9vcHRpb25zLmZ1bGx5X3BhcmFsbGVsKQogCi0gICAgICAgIGlmIHNlbGYuX25lZWRzX2h0dHAg
YW5kIHNlbGYuX29wdGlvbnMuaHR0cDoKKyAgICAgICAgaWYgKHNlbGYuX25lZWRzX2h0dHAgYW5k
IHNlbGYuX29wdGlvbnMuaHR0cCkgb3Igc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2Vy
dmVyOgogICAgICAgICAgICAgc2VsZi5zdGFydF9zZXJ2ZXJzKCkKIAogICAgICAgICBudW1fd29y
a2VycyA9IG1pbihudW1fd29ya2VycywgbGVuKGFsbF9zaGFyZHMpKQpAQCAtMTg5LDYgKzE5MSw5
IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgaWYgc2VsZi5fbmVl
ZHNfd2Vic29ja2V0czoKICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdT
dGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCiAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0
YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXI6CisgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgn
U3RhcnRpbmcgV2ViIFBsYXRmb3JtIFRlc3Qgc2VydmVyIC4uLicpCisgICAgICAgICAgICBzZWxm
Ll9wb3J0LnN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcigpCiAKICAgICBkZWYgc3RvcF9z
ZXJ2ZXJzKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9uZWVkc19odHRwOgpAQCAtMTk3LDYgKzIw
Miw5IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgaWYgc2VsZi5f
bmVlZHNfd2Vic29ja2V0czoKICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRl
KCdTdG9wcGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCiAgICAgICAgICAgICBzZWxmLl9wb3J0
LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgIGlmIHNlbGYuX25lZWRzX3dlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlcjoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRl
KCdTdG9wcGluZyBXZWIgUGxhdGZvcm0gVGVzdCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNl
bGYuX3BvcnQuc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoKQogCiAgICAgZGVmIGhhbmRs
ZShzZWxmLCBuYW1lLCBzb3VyY2UsICphcmdzKToKICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihz
ZWxmLCAnX2hhbmRsZV8nICsgbmFtZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91
dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weQppbmRleCA4NTE0MWU2NTdkMGVkNjlkODQ5OWQ0N2Uw
ZDlhNTBlYzcwYmY4MDQ5Li5mODk4MzYzMmY4MjM0ZDk5NTM2MzYzMTI0YTU4N2MzM2VjNzc4OTA2
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0
ZXN0LnB5CkBAIC04NSw3ICs4NSw3IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXJUZXN0cyh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGV4cGVjdGF0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnMo
cnVubmVyLl9wb3J0LCB0ZXN0cykKICAgICAgICAgZXhwZWN0YXRpb25zLnBhcnNlX2FsbF9leHBl
Y3RhdGlvbnMoKQogICAgICAgICBydW5uZXIucnVuX3Rlc3RzKGV4cGVjdGF0aW9ucywgdGVzdF9p
bnB1dHMsIHNldCgpLAotICAgICAgICAgICAgbnVtX3dvcmtlcnM9MSwgbmVlZHNfaHR0cD1hbnko
J2h0dHAnIGluIHRlc3QgZm9yIHRlc3QgaW4gdGVzdHMpLCBuZWVkc193ZWJzb2NrZXRzPWFueShb
J3dlYnNvY2tldCcgaW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0c10pLCByZXRyeWluZz1GYWxzZSkK
KyAgICAgICAgICAgIG51bV93b3JrZXJzPTEsIG5lZWRzX2h0dHA9YW55KCdodHRwJyBpbiB0ZXN0
IGZvciB0ZXN0IGluIHRlc3RzKSwgbmVlZHNfd2Vic29ja2V0cz1hbnkoWyd3ZWJzb2NrZXQnIGlu
IHRlc3QgZm9yIHRlc3QgaW4gdGVzdHNdKSwgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
PWFueShbJ2ltcG9ydGVkL3czYycgaW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0c10pLCByZXRyeWlu
Zz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X2ludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0cyhz
ZWxmKToKICAgICAgICAgcnVubmVyID0gc2VsZi5fcnVubmVyKCkKQEAgLTE0Nyw0OSArMTQ3LDgz
IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ICAgIGRlZiBzdGFydF93ZWJzb2NrZXRfc2VydmVyKCk6CiAgICAgICAgICAgICBzZWxmLndlYnNv
Y2tldF9zdGFydGVkID0gVHJ1ZQogCisgICAgICAgIGRlZiBzdGFydF93ZWJfcGxhdGZvcm1fdGVz
dF9zZXJ2ZXIoKToKKyAgICAgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0
YXJ0ZWQgPSBUcnVlCisKICAgICAgICAgZGVmIHN0b3BfaHR0cF9zZXJ2ZXIoKToKICAgICAgICAg
ICAgIHNlbGYuaHR0cF9zdG9wcGVkID0gVHJ1ZQogCiAgICAgICAgIGRlZiBzdG9wX3dlYnNvY2tl
dF9zZXJ2ZXIoKToKICAgICAgICAgICAgIHNlbGYud2Vic29ja2V0X3N0b3BwZWQgPSBUcnVlCiAK
KyAgICAgICAgZGVmIHN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKCk6CisgICAgICAgICAg
ICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkID0gVHJ1ZQorCiAgICAgICAg
IGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgIHBvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQo
J3Rlc3QtbWFjLWxlb3BhcmQnKQogICAgICAgICBwb3J0LnN0YXJ0X2h0dHBfc2VydmVyID0gc3Rh
cnRfaHR0cF9zZXJ2ZXIKICAgICAgICAgcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyID0gc3Rh
cnRfd2Vic29ja2V0X3NlcnZlcgorICAgICAgICBwb3J0LnN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlciA9IHN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcgogICAgICAgICBwb3J0LnN0
b3BfaHR0cF9zZXJ2ZXIgPSBzdG9wX2h0dHBfc2VydmVyCiAgICAgICAgIHBvcnQuc3RvcF93ZWJz
b2NrZXRfc2VydmVyID0gc3RvcF93ZWJzb2NrZXRfc2VydmVyCisgICAgICAgIHBvcnQuc3RvcF93
ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBzdG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcgog
CiAgICAgICAgIHNlbGYuaHR0cF9zdGFydGVkID0gc2VsZi5odHRwX3N0b3BwZWQgPSBzZWxmLndl
YnNvY2tldF9zdGFydGVkID0gc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNlCisgICAgICAg
IHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndlYl9wbGF0Zm9y
bV90ZXN0X3NlcnZlcl9zdG9wcGVkID0gRmFsc2UKICAgICAgICAgcnVubmVyID0gc2VsZi5fcnVu
bmVyKHBvcnQ9cG9ydCkKICAgICAgICAgcnVubmVyLl9uZWVkc19odHRwID0gVHJ1ZQogICAgICAg
ICBydW5uZXIuX25lZWRzX3dlYnNvY2tldHMgPSBGYWxzZQorICAgICAgICBydW5uZXIuX25lZWRz
X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5zdGFydF9z
ZXJ2ZXJzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RhcnRlZCwgVHJ1
ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdGFydGVkLCBGYWxz
ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
cl9zdGFydGVkLCBGYWxzZSkKICAgICAgICAgcnVubmVyLnN0b3Bfc2VydmVycygpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIFRydWUpCiAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCwgRmFsc2UpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCwgRmFsc2Up
CiAKICAgICAgICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBzZWxmLmh0dHBfc3RvcHBlZCA9IHNlbGYu
d2Vic29ja2V0X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tldF9zdG9wcGVkID0gRmFsc2UKKyAgICAg
ICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQgPSBGYWxzZQogICAgICAgICBydW5uZXIuX25lZWRzX2h0
dHAgPSBUcnVlCiAgICAgICAgIHJ1bm5lci5fbmVlZHNfd2Vic29ja2V0cyA9IFRydWUKKyAgICAg
ICAgcnVubmVyLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBGYWxzZQogICAgICAg
ICBydW5uZXIuc3RhcnRfc2VydmVycygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5o
dHRwX3N0YXJ0ZWQsIFRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2Nr
ZXRfc3RhcnRlZCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVkLCBGYWxzZSkKICAgICAgICAgcnVubmVyLnN0b3Bfc2Vy
dmVycygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIFRydWUp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCwgVHJ1ZSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9z
dG9wcGVkLCBGYWxzZSkKKworICAgICAgICBzZWxmLmh0dHBfc3RhcnRlZCA9IHNlbGYuaHR0cF9z
dG9wcGVkID0gc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCA9IHNlbGYud2Vic29ja2V0X3N0b3BwZWQg
PSBGYWxzZQorICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVkID0g
c2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHJ1
bm5lci5fbmVlZHNfaHR0cCA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2Vic29ja2V0
cyA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
ID0gVHJ1ZQorICAgICAgICBydW5uZXIuc3RhcnRfc2VydmVycygpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5odHRwX3N0YXJ0ZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQsIFRydWUpCisgICAgICAg
IHJ1bm5lci5zdG9wX3NlcnZlcnMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0
cF9zdG9wcGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tl
dF9zdG9wcGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkLCBUcnVlKQogCiAgICAgICAgIHNlbGYuaHR0cF9zdGFy
dGVkID0gc2VsZi5odHRwX3N0b3BwZWQgPSBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2VsZi53
ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkID0g
RmFsc2UKICAgICAgICAgcnVubmVyLl9uZWVkc19odHRwID0gRmFsc2UKICAgICAgICAgcnVubmVy
Ll9uZWVkc193ZWJzb2NrZXRzID0gRmFsc2UKKyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJfcGxh
dGZvcm1fdGVzdF9zZXJ2ZXIgPSBGYWxzZQogICAgICAgICBydW5uZXIuc3RhcnRfc2VydmVycygp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0YXJ0ZWQsIEZhbHNlKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIEZhbHNlKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0
ZWQsIEZhbHNlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzKCkKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWxmLmh0dHBfc3RvcHBlZCwgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCwgRmFsc2UpCiAKIAog
Y2xhc3MgU2hhcmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5
CmluZGV4IDMzODVhMDFkODA4MzY1ZjA2MjRhMmZhYTJhNTY4NzNhYTQzY2FhZjAuLmZkYmEyYmVj
ZjAzYWU2N2FkMzYwYjFmYjEyNzJkNzNmZWRiNzQwOWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQpA
QCAtNzksNiArNzksNyBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5I
VFRQX1NVQkRJUiA9ICdodHRwJyArIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgogICAgICAgICBz
ZWxmLldFQlNPQ0tFVF9TVUJESVIgPSAnd2Vic29ja2V0JyArIHBvcnQuVEVTVF9QQVRIX1NFUEFS
QVRPUgorICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3N1YmRpciA9IHNlbGYuX3BvcnQu
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX2RvY19yb290KCkKICAgICAgICAgc2VsZi5MQVlPVVRf
VEVTVFNfRElSRUNUT1JZID0gJ0xheW91dFRlc3RzJwogCiAgICAgICAgICMgZGlzYWJsZSB3c3Mg
c2VydmVyLiBuZWVkIHRvIGluc3RhbGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4KQEAgLTkzLDEx
ICs5NCwxNCBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBzZWxmLl9m
aW5kZXIuZmluZF90ZXN0cyhzZWxmLl9vcHRpb25zLCBhcmdzKQogCiAgICAgZGVmIF9pc19odHRw
X3Rlc3Qoc2VsZiwgdGVzdCk6Ci0gICAgICAgIHJldHVybiBzZWxmLkhUVFBfU1VCRElSIGluIHRl
c3Qgb3Igc2VsZi5faXNfd2Vic29ja2V0X3Rlc3QodGVzdCkKKyAgICAgICAgcmV0dXJuIHNlbGYu
SFRUUF9TVUJESVIgaW4gdGVzdCBvciBzZWxmLl9pc193ZWJzb2NrZXRfdGVzdCh0ZXN0KSBvciBz
ZWxmLl9pc193ZWJfcGxhdGZvcm1fdGVzdCh0ZXN0KQogCiAgICAgZGVmIF9pc193ZWJzb2NrZXRf
dGVzdChzZWxmLCB0ZXN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuV0VCU09DS0VUX1NVQkRJUiBp
biB0ZXN0CiAKKyAgICBkZWYgX2lzX3dlYl9wbGF0Zm9ybV90ZXN0KHNlbGYsIHRlc3QpOgorICAg
ICAgICByZXR1cm4gc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zdWJkaXIgaW4gdGVzdAorCiAgICAg
ZGVmIF9odHRwX3Rlc3RzKHNlbGYsIHRlc3RfbmFtZXMpOgogICAgICAgICByZXR1cm4gc2V0KHRl
c3QgZm9yIHRlc3QgaW4gdGVzdF9uYW1lcyBpZiBzZWxmLl9pc19odHRwX3Rlc3QodGVzdCkpCiAK
QEAgLTIzNSw3ICsyMzksOCBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyaXplZF9yZXN1bHRzLCBpbml0aWFs
X3Jlc3VsdHMsIHJldHJ5X3Jlc3VsdHMsIGVuYWJsZWRfcGl4ZWxfdGVzdHNfaW5fcmV0cnkpCiAK
ICAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCB0ZXN0c190b19ydW4sIHRlc3RzX3RvX3NraXAsIHJl
cGVhdF9lYWNoLCBpdGVyYXRpb25zLCBudW1fd29ya2VycywgcmV0cnlpbmcpOgotICAgICAgICBu
ZWVkc19odHRwID0gYW55KHNlbGYuX2lzX2h0dHBfdGVzdCh0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0
c190b19ydW4pCisgICAgICAgIG5lZWRzX2h0dHAgPSBhbnkoKHNlbGYuX2lzX2h0dHBfdGVzdCh0
ZXN0KSBhbmQgbm90IHNlbGYuX2lzX3dlYl9wbGF0Zm9ybV90ZXN0KHRlc3QpKSBmb3IgdGVzdCBp
biB0ZXN0c190b19ydW4pCisgICAgICAgIG5lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9
IGFueShzZWxmLl9pc193ZWJfcGxhdGZvcm1fdGVzdCh0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0c190
b19ydW4pCiAgICAgICAgIG5lZWRzX3dlYnNvY2tldHMgPSBhbnkoc2VsZi5faXNfd2Vic29ja2V0
X3Rlc3QodGVzdCkgZm9yIHRlc3QgaW4gdGVzdHNfdG9fcnVuKQogCiAgICAgICAgIHRlc3RfaW5w
dXRzID0gW10KQEAgLTI0Myw3ICsyNDgsNyBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAg
ICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0c190b19ydW46CiAgICAgICAgICAgICAgICAgZm9yIF8g
aW4geHJhbmdlKHJlcGVhdF9lYWNoKToKICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbnB1dHMu
YXBwZW5kKHNlbGYuX3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdCkpCi0gICAgICAgIHJldHVybiBz
ZWxmLl9ydW5uZXIucnVuX3Rlc3RzKHNlbGYuX2V4cGVjdGF0aW9ucywgdGVzdF9pbnB1dHMsIHRl
c3RzX3RvX3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19odHRwLCBuZWVkc193ZWJzb2NrZXRzLCBy
ZXRyeWluZykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bm5lci5ydW5fdGVzdHMoc2VsZi5fZXhw
ZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9fc2tpcCwgbnVtX3dvcmtlcnMsIG5lZWRz
X2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIG5lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciwg
cmV0cnlpbmcpCiAKICAgICBkZWYgX2NsZWFuX3VwX3J1bihzZWxmKToKICAgICAgICAgX2xvZy5k
ZWJ1ZygiRmx1c2hpbmcgc3Rkb3V0IikKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0
LnB5CmluZGV4IGQ0YWZiNjA5N2M5Mjc2NDYwMGZhODIyYjEwZTllNGRiNGE1YjMxYmMuLjRlYzYz
ZmRlZWI1NGI4NjFjZDI3YTA0ZWFhMWZjMmJkYzNmODYxZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3Qu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bWFuYWdlcl91bml0dGVzdC5weQpAQCAtNDMsOSArNDMsMTMgQEAgZnJvbSB3ZWJraXRweS50b29s
Lm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwogCiBjbGFzcyBNYW5hZ2VyVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfbmVlZHNfc2VydmVycyhzZWxmKToKKyAgICAgICAg
ZGVmIGdldF93cHRfZG9jX3Jvb3QoKToKKyAgICAgICAgICAgIHJldHVybiAnaW1wb3J0ZWQvdzNj
L3dwdCcKKwogICAgICAgICBkZWYgZ2V0X21hbmFnZXIoKToKICAgICAgICAgICAgIHBvcnQgPSBN
b2NrKCkgICMgRklYTUU6IFVzZSBhIHRpZ2h0ZXIgbW9jay4KICAgICAgICAgICAgIHBvcnQuVEVT
VF9QQVRIX1NFUEFSQVRPUiA9ICcvJworICAgICAgICAgICAgcG9ydC53ZWJfcGxhdGZvcm1fdGVz
dF9zZXJ2ZXJfZG9jX3Jvb3QgPSBnZXRfd3B0X2RvY19yb290CiAgICAgICAgICAgICBtYW5hZ2Vy
ID0gTWFuYWdlcihwb3J0LCBvcHRpb25zPU1vY2tPcHRpb25zKGh0dHA9VHJ1ZSksIHByaW50ZXI9
TW9jaygpKQogICAgICAgICAgICAgcmV0dXJuIG1hbmFnZXIKIApAQCAtNTUsNiArNTksMTIgQEAg
Y2xhc3MgTWFuYWdlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBtYW5hZ2VyID0g
Z2V0X21hbmFnZXIoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobWFuYWdlci5uZWVkc19zZXJ2
ZXJzKFsnaHR0cC90ZXN0cy9taXNjJ10pKQogCisgICAgICAgIG1hbmFnZXIgPSBnZXRfbWFuYWdl
cigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5hZ2VyLm5lZWRzX3NlcnZlcnMoWydpbXBv
cnRlZC93M2Mvd3B0L3Rlc3QnXSkpCisKKyAgICAgICAgbWFuYWdlciA9IGdldF9tYW5hZ2VyKCkK
KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYW5hZ2VyLm5lZWRzX3NlcnZlcnMoWydpbXBvcnRl
ZC93M2MnXSkpCisKICAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9uZWVkc19zZXJ2ZXJzKHNlbGYp
OgogICAgICAgICBkZWYgZ2V0X21hbmFnZXIoKToKICAgICAgICAgICAgIGhvc3QgPSBNb2NrSG9z
dCgpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGZh
MjlhMzA4ODYwODYzMzE5MWU3MzEyMjhjMTg2ZWU5MGIyOTBkMDQuLjJjZWU2OWNhMjQ2YWQ5ZDdi
ZTQ3NzA5MWYzOWZjN2Q2M2I2MTc3ODgKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0yOTUsNiArMjk1LDEwIEBAIGRl
ZiBwYXJzZV9hcmdzKGFyZ3MpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25maWd1
cmF0aW9ucy4gRG9lcyBub3QgcnVuIGFueSB0ZXN0cy4iKSksCiAgICAgXSkpCiAKKyAgICBvcHRp
b25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgiV2ViIFBsYXRmb3JtIFRlc3QgU2VydmVyIE9w
dGlvbnMiLCBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdwdHNlcnZlci1kb2Mt
cm9vdCIsIHR5cGU9InN0cmluZyIsIGhlbHA9KCJTZXQgd2ViIHBsYXRmb3JtIHNlcnZlciBkb2N1
bWVudCByb290LCByZWxhdGl2ZSB0byBMYXlvdXRUZXN0cyBkaXJlY3RvcnkiKSksCisgICAgXSkp
CisKICAgICAjIEZJWE1FOiBNb3ZlIHRoZXNlIGludG8ganNvbl9yZXN1bHRzX2dlbmVyYXRvci5w
eQogICAgIG9wdGlvbl9ncm91cF9kZWZpbml0aW9ucy5hcHBlbmQoKCJSZXN1bHQgSlNPTiBPcHRp
b25zIiwgWwogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1tYXN0ZXItbmFtZSIsIGhl
bHA9IlRoZSBuYW1lIG9mIHRoZSBidWlsZGJvdCBtYXN0ZXIuIiksCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0
X2xhdW5jaGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVy
cy93ZWJfcGxhdGZvcm1fdGVzdF9sYXVuY2hlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGEzMzU4ZWI4Yzlm
ZGYwNWIyNjEwYWU5NTJlNjI1ODEyMDZhYjM0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9sYXVu
Y2hlci5weQpAQCAtMCwwICsxLDM1IEBACisjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJq
ZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgMy1jbGF1c2UgQlNEIExpY2Vuc2UKKyMgaHR0cDovL3d3
dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDA4LzAzLWJzZC1saWNlbnNlLmh0bWwKKworaW1w
b3J0IGltcAoraW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1w
b3J0IG9zCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorbG9nZ2VyLnNl
dExldmVsKGxvZ2dpbmcuREVCVUcpCisKK3N5cy5wYXRoLmluc2VydCgxLCAiLiIpCitpbXBvcnQg
c2VydmUgYXMgV2ViUGxhdGZvcm1UZXN0U2VydmVyCisKKyMgVGhpcyBzY3JpcHQgaXMgdXNlZCB0
byBsYXVuY2ggdGhlIHdlYiBwbGF0Zm9ybSB0ZXN0IHNlcnZlciBtYWluIHNjcmlwdCAoc2VydmUu
cHkpIGFuZCBzdG9wIGl0IHdoZW4gYXNrZWQgYnkgcnVuLXdlYmtpdC10ZXN0cworCisKK2RlZiBt
YWluKGFyZ3YsIHN0ZG91dCwgc3RkZXJyKToKKyAgICAjIFRoaXMgaXMgYSBjb3B5IG9mIHNlcnZl
LnB5IG1haW4gZnVuY3Rpb24sIGV4Y2VwdCBmb3IgdGhlIHdhaXQgc3RlcAorICAgIGNvbmZpZyA9
IFdlYlBsYXRmb3JtVGVzdFNlcnZlci5sb2FkX2NvbmZpZygiY29uZmlnLmRlZmF1bHQuanNvbiIs
ICJjb25maWcuanNvbiIpCisgICAgV2ViUGxhdGZvcm1UZXN0U2VydmVyLnNldHVwX2xvZ2dlcihj
b25maWdbImxvZ19sZXZlbCJdKQorICAgIHNzbF9lbnYgPSBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIu
Z2V0X3NzbF9lbnZpcm9ubWVudChjb25maWcpCisgICAgd2l0aCBXZWJQbGF0Zm9ybVRlc3RTZXJ2
ZXIuZ2V0X3NzbF9lbnZpcm9ubWVudChjb25maWcpIGFzIHNzbF9lbnY6CisgICAgICAgIGNvbmZp
Z18sIHN0YXJ0ZWRfc2VydmVycyA9IFdlYlBsYXRmb3JtVGVzdFNlcnZlci5zdGFydChjb25maWcs
IHNzbF9lbnYpCisKKyAgICAgICAgZm9yIHByb3RvY29sLCBzZXJ2ZXJzIGluIHN0YXJ0ZWRfc2Vy
dmVycy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIHBvcnQsIHByb2Nlc3MgaW4gc2VydmVyczoK
KyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiJXMsIHBvcnQ6JWQsIHBpZDolZCIgJSAocHJv
dG9jb2wsIHBvcnQsIHByb2Nlc3MucHJvYy5waWQpKQorCisgICAgc3lzLnN0ZGluLnJlYWQoMSkK
KworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFy
Z3ZbMTpdLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxh
dGZvcm1fdGVzdF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWYxZmQ0MGZkZWI4ZDEzMmI5YWUwZDVk
MjY3ZDgyZjgzNDhhNGFiOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLnB5CkBAIC0w
LDAgKzEsMTMzIEBACisjICBDb3B5cmlnaHQgKGMpIDIwMTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjICBhcmUgbWV0OgorIyAg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorIyAgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyAgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjICBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjICBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisj
ICBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGpzb24KK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBodHRwX3NlcnZlcl9iYXNlCisKK19sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitkZWYgZG9jX3Jvb3QocG9ydF9vYmopOgorICAg
IGRvY19yb290ID0gcG9ydF9vYmouZ2V0X29wdGlvbigid3B0c2VydmVyX2RvY19yb290IikKKyAg
ICBpZiBkb2Nfcm9vdCBpcyBOb25lOgorICAgICAgICByZXR1cm4gcG9ydF9vYmouaG9zdC5maWxl
c3lzdGVtLmpvaW4oImltcG9ydGVkIiwgInczYyIsICJ3ZWItcGxhdGZvcm0tdGVzdHMiKQorICAg
IHJldHVybiBkb2Nfcm9vdAorCisKK2RlZiBiYXNlX3VybChwb3J0X29iaik6CisgICAgY29uZmln
X3drX2ZpbGVwYXRoID0gcG9ydF9vYmoucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCJMYXlvdXRUZXN0
cyIsICJpbXBvcnRlZCIsICJ3M2MiLCAicmVzb3VyY2VzIiwgImNvbmZpZy5qc29uIikKKyAgICBp
ZiBub3QgcG9ydF9vYmouaG9zdC5maWxlc3lzdGVtLmlzZmlsZShjb25maWdfd2tfZmlsZXBhdGgp
OgorICAgICAgICAjIFRoaXMgc2hvdWxkIG9ubHkgYmUgaGl0IGJ5IHdlYmtpdHB5IHVuaXQgdGVz
dHMKKyAgICAgICAgX2xvZy5kZWJ1ZygiTm8gV1BUIGNvbmZpZyBmaWxlIGZvdW5kIikKKyAgICAg
ICAgcmV0dXJuICJodHRwOi8vbG9jYWxob3N0Ojg4MDAvIgorICAgIGpzb25fZGF0YSA9IHBvcnRf
b2JqLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGNvbmZpZ193a19maWxlcGF0aCkKKyAgICBj
b25maWcgPSBqc29uLmxvYWRzKGpzb25fZGF0YSkKKyAgICBwb3J0cyA9IGNvbmZpZ1sicG9ydHMi
XQorICAgIHJldHVybiAiaHR0cDovLyIgKyBjb25maWdbImhvc3QiXSArICI6IiArIHN0cihwb3J0
c1siaHR0cCJdWzBdKSArICIvIgorCisKK2NsYXNzIFdlYlBsYXRmb3JtVGVzdFNlcnZlcihodHRw
X3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9y
dF9vYmosIG5hbWUsIGxheW91dF90ZXN0X3Jlc3VsdHNfZGlyLCBwaWRmaWxlPU5vbmUpOgorICAg
ICAgICBodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlLl9faW5pdF9fKHNlbGYsIHBvcnRf
b2JqKQorICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gbGF5b3V0X3Rlc3RfcmVzdWx0c19kaXIK
KworICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9sb2dfZmlsZV9uYW1l
ID0gJyVzX3Byb2Nlc3NfbG9nLm91dC50eHQnICUgKHNlbGYuX25hbWUpCisKKyAgICAgICAgc2Vs
Zi5fd3NvdXQgPSBOb25lCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNl
bGYuX3BpZF9maWxlID0gcGlkZmlsZQorICAgICAgICBpZiBub3Qgc2VsZi5fcGlkX2ZpbGU6Cisg
ICAgICAgICAgICBzZWxmLl9waWRfZmlsZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9y
dW50aW1lX3BhdGgsICclcy5waWQnICUgc2VsZi5fbmFtZSkKKyAgICAgICAgc2VsZi5fc3Rkb3V0
X2RhdGEgPSBOb25lCisgICAgICAgIHNlbGYuX3N0ZGVycl9kYXRhID0gTm9uZQorICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtID0gcG9ydF9vYmouaG9zdC5maWxlc3lzdGVtCisgICAgICAgIHNlbGYu
X2xheW91dF9yb290ID0gcG9ydF9vYmoucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCJMYXlvdXRUZXN0
cyIpCisgICAgICAgIHNlbGYuX2RvY19yb290ID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYu
X2xheW91dF9yb290LCBkb2Nfcm9vdChwb3J0X29iaikpCisKKyAgICAgICAgc2VsZi5fcmVzb3Vy
Y2VzX2ZpbGVzX3RvX2NvcHkgPSBbJ3Rlc3RoYXJuZXNzLmpzJywgJ3Rlc3RoYXJuZXNzLmNzcycs
ICd0ZXN0aGFybmVzc3JlcG9ydC5qcyddCisKKyAgICAgICAgY3VycmVudF9kaXJfcGF0aCA9IHNl
bGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChzZWxmLl9maWxlc3lzdGVtLnNwbGl0KF9fZmlsZV9fKVsw
XSkKKyAgICAgICAgc2VsZi5fc3RhcnRfY21kID0gWyJweXRob24iLCBzZWxmLl9maWxlc3lzdGVt
LmpvaW4oY3VycmVudF9kaXJfcGF0aCwgIndlYl9wbGF0Zm9ybV90ZXN0X2xhdW5jaGVyLnB5Iild
CisgICAgICAgIHNlbGYuX2RvY19yb290X3BhdGggPSBwb3J0X29iai5wYXRoX2Zyb21fd2Via2l0
X2Jhc2UoIkxheW91dFRlc3RzIiwgc2VsZi5fZG9jX3Jvb3QpCisKKyAgICBkZWYgX2NvcHlfd2Vi
a2l0X3Rlc3RfZmlsZXMoc2VsZik6CisgICAgICAgIF9sb2cuZGVidWcoJ0NvcHlpbmcgV2ViS2l0
IHJlc291cmNlcyBmaWxlcycpCisgICAgICAgIGZvciBmIGluIHNlbGYuX3Jlc291cmNlc19maWxl
c190b19jb3B5OgorICAgICAgICAgICAgd2Via2l0X2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHNlbGYuX2xheW91dF9yb290LCAicmVzb3VyY2VzIiwgZikKKyAgICAgICAgICAgIGlm
IHNlbGYuX2ZpbGVzeXN0ZW0uaXNmaWxlKHdlYmtpdF9maWxlbmFtZSk6CisgICAgICAgICAgICAg
ICAgc2VsZi5fZmlsZXN5c3RlbS5jb3B5ZmlsZSh3ZWJraXRfZmlsZW5hbWUsIHNlbGYuX2ZpbGVz
eXN0ZW0uam9pbihzZWxmLl9kb2Nfcm9vdCwgInJlc291cmNlcyIsIGYpKQorICAgICAgICBfbG9n
LmRlYnVnKCdDb3B5aW5nIFdlYktpdCB3ZWIgcGxhdGZvcm0gc2VydmVyIGNvbmZpZy5qc29uJykK
KyAgICAgICAgY29uZmlnX3drX2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYu
X2xheW91dF9yb290LCAiaW1wb3J0ZWQiLCAidzNjIiwgInJlc291cmNlcyIsICJjb25maWcuanNv
biIpCisgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uaXNmaWxlKGNvbmZpZ193a19maWxlbmFt
ZSk6CisgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLmNvcHlmaWxlKGNvbmZpZ193a19maWxl
bmFtZSwgc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2RvY19yb290LCAiY29uZmlnLmpzb24i
KSkKKworICAgIGRlZiBfY2xlYW5fd2Via2l0X3Rlc3RfZmlsZXMoc2VsZik6CisgICAgICAgIF9s
b2cuZGVidWcoJ0NsZWFuaW5nIFdQVCByZXNvdXJjZXMgZmlsZXMnKQorICAgICAgICBmb3IgZiBp
biBzZWxmLl9yZXNvdXJjZXNfZmlsZXNfdG9fY29weToKKyAgICAgICAgICAgIHdwdF9maWxlbmFt
ZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9kb2Nfcm9vdCwgInJlc291cmNlcyIsIGYp
CisgICAgICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmlzZmlsZSh3cHRfZmlsZW5hbWUpOgor
ICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKHdwdF9maWxlbmFtZSkKKyAg
ICAgICAgX2xvZy5kZWJ1ZygnQ2xlYW5pbmcgV1BUIHdlYiBwbGF0Zm9ybSBzZXJ2ZXIgY29uZmln
Lmpzb24nKQorICAgICAgICBjb25maWdfd3B0X2ZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5q
b2luKHNlbGYuX2RvY19yb290LCAiY29uZmlnLmpzb24iKQorICAgICAgICBpZiBzZWxmLl9maWxl
c3lzdGVtLmlzZmlsZShjb25maWdfd3B0X2ZpbGVuYW1lKToKKyAgICAgICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0ucmVtb3ZlKGNvbmZpZ193cHRfZmlsZW5hbWUpCisKKyAgICBkZWYgX3ByZXBhcmVf
Y29uZmlnKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhzZWxmLl9v
dXRwdXRfZGlyKToKKyAgICAgICAgICAgIG91dHB1dF9sb2cgPSBzZWxmLl9maWxlc3lzdGVtLmpv
aW4oc2VsZi5fb3V0cHV0X2Rpciwgc2VsZi5fbG9nX2ZpbGVfbmFtZSkKKyAgICAgICAgICAgIHNl
bGYuX3dzb3V0ID0gc2VsZi5fZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3Jfd3JpdGluZyhv
dXRwdXRfbG9nKQorICAgICAgICBzZWxmLl9jb3B5X3dlYmtpdF90ZXN0X2ZpbGVzKCkKKworICAg
IGRlZiBfc3Bhd25fcHJvY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5fc3Rkb3V0X2RhdGEgPSBO
b25lCisgICAgICAgIHNlbGYuX3N0ZGVycl9kYXRhID0gTm9uZQorICAgICAgICBpZiBzZWxmLl93
c291dDoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLl9leGVjdXRpdmUucG9wZW4o
c2VsZi5fc3RhcnRfY21kLCBjd2Q9c2VsZi5fZG9jX3Jvb3RfcGF0aCwgc2hlbGw9RmFsc2UsIHN0
ZGluPXNlbGYuX2V4ZWN1dGl2ZS5QSVBFLCBzdGRvdXQ9c2VsZi5fd3NvdXQsIHN0ZGVycj1zZWxm
Ll93c291dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxm
Ll9leGVjdXRpdmUucG9wZW4oc2VsZi5fc3RhcnRfY21kLCBjd2Q9c2VsZi5fZG9jX3Jvb3RfcGF0
aCwgc2hlbGw9RmFsc2UsIHN0ZGluPXNlbGYuX2V4ZWN1dGl2ZS5QSVBFLCBzdGRvdXQ9c2VsZi5f
ZXhlY3V0aXZlLlBJUEUsIHN0ZGVycj1zZWxmLl9leGVjdXRpdmUuU1RET1VUKQorICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShzZWxmLl9waWRfZmlsZSwgc3RyKHNlbGYu
X3Byb2Nlc3MucGlkKSkKKworICAgICAgICAjIFdhaXQgYSBzZWNvbmQgZm9yIHRoZSBzZXJ2ZXIg
dG8gYWN0dWFsbHkgc3RhcnQgc28gdGhhdCB0ZXN0cyBkbyBub3Qgc3RhcnQgdW50aWwgc2VydmVy
IGlzIHJ1bm5pbmcuCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICByZXR1cm4gc2Vs
Zi5fcHJvY2Vzcy5waWQKKworICAgIGRlZiBfc3RvcF9ydW5uaW5nX3NlcnZlcihzZWxmKToKKyAg
ICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBpbmcgJXMgc2VydmVyJyAlIChzZWxmLl9uYW1lKSkKKyAg
ICAgICAgc2VsZi5fY2xlYW5fd2Via2l0X3Rlc3RfZmlsZXMoKQorICAgICAgICBpZiBzZWxmLl9w
aWQgYW5kIG5vdCBzZWxmLl9leGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoc2VsZi5fcGlkKToK
KyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKHNlbGYuX3BpZF9maWxlKQorICAg
ICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICAo
c2VsZi5fc3Rkb3V0X2RhdGEsIHNlbGYuX3N0ZGVycl9kYXRhKSA9IHNlbGYuX3Byb2Nlc3MuY29t
bXVuaWNhdGUoaW5wdXQ9J1xuJykKKyAgICAgICAgaWYgc2VsZi5fd3NvdXQ6CisgICAgICAgICAg
ICBzZWxmLl93c291dC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKKyAg
ICAgICAgaWYgc2VsZi5fZXhlY3V0aXZlLmNoZWNrX3J1bm5pbmdfcGlkKHNlbGYuX3BpZCk6Cisg
ICAgICAgICAgICByYWlzZSBodHRwX3NlcnZlcl9iYXNlLlNlcnZlckVycm9yKCdGYWlsZWQgdG8g
c3RvcCAlczogcGxlYXNlIGdvIHRvIHdlYiBwbGF0Zm9ybSB0ZXN0IHNlcnZlciBsb2cgZmlsZSB0
byBnZXQgdGhlIFBJRCBsaXN0JyAlIChzZWxmLl9uYW1lKSkKKyAgICAgICAgc2VsZi5fZmlsZXN5
c3RlbS5yZW1vdmUoc2VsZi5fcGlkX2ZpbGUpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl91bml0
dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2Vi
X3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlNWRlNTFhNTIz
ZGFhMjg4YTI2ZmMyOWJkYzFiMzE3NTZhYzE2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X3Nl
cnZlcl91bml0dGVzdC5weQpAQCAtMCwwICsxLDQ0IEBACisjICBDb3B5cmlnaHQgKGMpIDIwMTQs
IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjICBhcmUgbWV0OgorIyAgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisjICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyAgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
Q0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjICBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisjICBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksCisjICBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyAgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi5ob3N0X21vY2sgaW1wb3J0IE1vY2tIb3N0Citmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IFBv
cnQKK2Zyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKKworZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycy53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIg
aW1wb3J0IFdlYlBsYXRmb3JtVGVzdFNlcnZlcgorCisKK2NsYXNzIFRlc3RXZWJQbGF0Zm9ybVRl
c3RTZXJ2ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3N0YXJ0X2NtZChzZWxm
KToKKworICAgICAgICBwb3J0ID0gUG9ydChNb2NrSG9zdCgpLCAidGVzdCIpCisgICAgICAgIHNl
cnZlciA9IFdlYlBsYXRmb3JtVGVzdFNlcnZlcihwb3J0LCAid3B0dGVzdCIsICIvbW9jay9vdXRw
dXRfZGlyIiwgIi9tb2NrL291dHB1dF9kaXIvcGlkLnR4dCIpCisKKyAgICAgICAgc2VydmVyLl9w
cmVwYXJlX2NvbmZpZygpCisgICAgICAgIHNlcnZlci5fd3NvdXQgPSBOb25lCisgICAgICAgIHNl
cnZlci5fc3Bhd25fcHJvY2VzcygpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgc2Vy
dmVyLl9zdG9wX3J1bm5pbmdfc2VydmVyKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkK
aW5kZXggYzllODQ5ZDU0NGQ0NDAxOWM5MjQ0YjJlZGY0YzU5ZDFkNzhkNjEwOS4uYzI5NGU0OGM4
N2U1NTlkMTk0ODliZTI3YzkwOGU3YjdhZmY4YjhkYiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Jhc2UucHkKQEAgLTU5LDYgKzU5LDcgQEAgZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBzZXJ2
ZXJfcHJvY2VzcwogZnJvbSB3ZWJraXRweS5wb3J0LmZhY3RvcnkgaW1wb3J0IFBvcnRGYWN0b3J5
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBhcGFjaGVfaHR0cF9z
ZXJ2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2Vy
dmVyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCB3ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0
IHdlYnNvY2tldF9zZXJ2ZXIKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpA
QCAtMTE2LDYgKzExNyw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgc2VsZi5faGVs
cGVyID0gTm9uZQogICAgICAgICBzZWxmLl9odHRwX3NlcnZlciA9IE5vbmUKICAgICAgICAgc2Vs
Zi5fd2Vic29ja2V0X3NlcnZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fd2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyID0gTm9uZQogICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBOb25lCiAgICAg
ICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gc2VydmVyX3Byb2Nlc3MuU2Vy
dmVyUHJvY2VzcyAgIyBvdmVycmlkYWJsZSBmb3IgdGVzdGluZwogCkBAIC04ODEsNiArODgzLDE4
IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgc2VydmVyLnN0YXJ0KCkKICAgICAgICAg
c2VsZi5fd2Vic29ja2V0X3NlcnZlciA9IHNlcnZlcgogCisgICAgZGVmIHN0YXJ0X3dlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlcihzZWxmLCBhZGRpdGlvbmFsX2RpcnM9Tm9uZSwgbnVtYmVyX29mX3Nl
cnZlcnM9Tm9uZSk6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyLCAnQWxyZWFkeSBydW5uaW5nIGEgV2ViIFBsYXRmb3JtIFRlc3Qgc2VydmVyLicKKwor
ICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSB3ZWJfcGxhdGZvcm1fdGVz
dF9zZXJ2ZXIuV2ViUGxhdGZvcm1UZXN0U2VydmVyKHNlbGYsICJ3cHR3ayIsIHNlbGYucmVzdWx0
c19kaXJlY3RvcnkoKSkKKyAgICAgICAgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLnN0
YXJ0KCkKKworICAgIGRlZiB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfZG9jX3Jvb3Qoc2VsZik6
CisgICAgICAgIHJldHVybiB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIuZG9jX3Jvb3Qoc2VsZikg
KyBzZWxmLlRFU1RfUEFUSF9TRVBBUkFUT1IKKworICAgIGRlZiB3ZWJfcGxhdGZvcm1fdGVzdF9z
ZXJ2ZXJfYmFzZV91cmwoc2VsZik6CisgICAgICAgIHJldHVybiB3ZWJfcGxhdGZvcm1fdGVzdF9z
ZXJ2ZXIuYmFzZV91cmwoc2VsZikKKwogICAgIGRlZiBodHRwX3NlcnZlcl9zdXBwb3J0c19pcHY2
KHNlbGYpOgogICAgICAgICAjIEN5Z3dpbiBpcyB0aGUgb25seSBwbGF0Zm9ybSB0byBzdGlsbCB1
c2UgQXBhY2hlIDEuMywgd2hpY2ggb25seSBzdXBwb3J0cyBJUFY0LgogICAgICAgICAjIE9uY2Ug
aXQgbW92ZXMgdG8gQXBhY2hlIDIsIHdlIGNhbiBkcm9wIHRoaXMgbWV0aG9kIGFsdG9nZXRoZXIu
CkBAIC05MDYsNiArOTIwLDExIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgICAgIHNl
bGYuX3dlYnNvY2tldF9zZXJ2ZXIuc3RvcCgpCiAgICAgICAgICAgICBzZWxmLl93ZWJzb2NrZXRf
c2VydmVyID0gTm9uZQogCisgICAgZGVmIHN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKHNl
bGYpOgorICAgICAgICBpZiBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI6CisgICAgICAg
ICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIuc3RvcCgpCisgICAgICAgICAgICBz
ZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBOb25lCisKICAgICBkZWYgZXhpdF9jb2Rl
X2Zyb21fc3VtbWFyaXplZF9yZXN1bHRzKHNlbGYsIHVuZXhwZWN0ZWRfcmVzdWx0cyk6CiAgICAg
ICAgICIiIkdpdmVuIHN1bW1hcml6ZWQgcmVzdWx0cywgY29tcHV0ZSB0aGUgZXhpdCBjb2RlIHRv
IGJlIHJldHVybmVkIGJ5IG5ldy1ydW4td2Via2l0LXRlc3RzLgogICAgICAgICBCb3RzIHR1cm4g
cmVkIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUuIEJ5IGRlZmF1
bHQsIHJldHVybiB0aGUgbnVtYmVyIG9mIHJlZ3Jlc3Npb25zCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2RyaXZlci5weQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDRlNThl
Yjg3OWNmNjIwN2ZlNWQ1NjliMWYzZmY3ODkxNjk5N2I1OGIuLmQ0ZTkxNjE5NjM1OWJjYmZhZmQ1
ZGQ1Yzg2MzdmYThjZjIyYzcxMjMKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Ry
aXZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CkBAIC0z
Nyw2ICszNyw3IEBAIGltcG9ydCBvcwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1w
b3J0IHBhdGgKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5wcm9maWxlciBpbXBvcnQgUHJv
ZmlsZXJGYWN0b3J5Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzLndlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlciBpbXBvcnQgV2ViUGxhdGZvcm1UZXN0U2VydmVyCiAKIAogX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtMTU1LDYgKzE1Niw5IEBAIGNsYXNzIERy
aXZlcihvYmplY3QpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fcHJvZmlsZXIg
PSBOb25lCiAKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfZG9jX3Jvb3Qg
PSBzZWxmLl9wb3J0LndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9kb2Nfcm9vdCgpCisgICAgICAg
IHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX2Jhc2VfdXJsID0gc2VsZi5fcG9ydC53ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXJfYmFzZV91cmwoKQorCiAgICAgZGVmIF9fZGVsX18oc2VsZik6
CiAgICAgICAgIHNlbGYuc3RvcCgpCiAKQEAgLTIzNyw4ICsyNDEsMTQgQEAgY2xhc3MgRHJpdmVy
KG9iamVjdCk6CiAgICAgZGVmIGlzX2h0dHBfdGVzdChzZWxmLCB0ZXN0X25hbWUpOgogICAgICAg
ICByZXR1cm4gdGVzdF9uYW1lLnN0YXJ0c3dpdGgoc2VsZi5IVFRQX0RJUikgYW5kIG5vdCB0ZXN0
X25hbWUuc3RhcnRzd2l0aChzZWxmLkhUVFBfTE9DQUxfRElSKQogCisgICAgZGVmIGlzX3dlYl9w
bGF0Zm9ybV90ZXN0KHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHJldHVybiB0ZXN0X25hbWUu
c3RhcnRzd2l0aChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9kb2Nfcm9vdCkKKwogICAg
IGRlZiB0ZXN0X3RvX3VyaShzZWxmLCB0ZXN0X25hbWUpOgogICAgICAgICAiIiJDb252ZXJ0IGEg
dGVzdCBuYW1lIHRvIGEgVVJJLiIiIgorICAgICAgICBpZiBzZWxmLmlzX3dlYl9wbGF0Zm9ybV90
ZXN0KHRlc3RfbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi53ZWJfcGxhdGZvcm1fdGVz
dF9zZXJ2ZXJfYmFzZV91cmwgKyB0ZXN0X25hbWVbbGVuKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyX2RvY19yb290KTpdCisKICAgICAgICAgaWYgbm90IHNlbGYuaXNfaHR0cF90ZXN0KHRl
c3RfbmFtZSk6CiAgICAgICAgICAgICByZXR1cm4gcGF0aC5hYnNwYXRoX3RvX3VyaShzZWxmLl9w
b3J0Lmhvc3QucGxhdGZvcm0sIHNlbGYuX3BvcnQuYWJzcGF0aF9mb3JfdGVzdCh0ZXN0X25hbWUp
KQogCkBAIC0yNjIsNiArMjcyLDggQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgICAg
ICBpZiBub3QgcHJlZml4LmVuZHN3aXRoKCcvJyk6CiAgICAgICAgICAgICAgICAgcHJlZml4ICs9
ICcvJwogICAgICAgICAgICAgcmV0dXJuIHVyaVtsZW4ocHJlZml4KTpdCisgICAgICAgIGlmIHVy
aS5zdGFydHN3aXRoKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX2Jhc2VfdXJsKToKKyAg
ICAgICAgICAgIHJldHVybiB1cmkucmVwbGFjZShzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
cl9iYXNlX3VybCwgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfZG9jX3Jvb3QpCiAgICAg
ICAgIGlmIHVyaS5zdGFydHN3aXRoKCJodHRwOi8vIik6CiAgICAgICAgICAgICByZXR1cm4gdXJp
LnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC8nLCBzZWxmLkhUVFBfRElSKQogICAgICAg
ICBpZiB1cmkuc3RhcnRzd2l0aCgiaHR0cHM6Ly8iKToKQEAgLTM5NCw3ICs0MDYsNyBAQCBjbGFz
cyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgIyBGSVhNRTogcGVyZm9ybWFuY2UgdGVzdHMgcGFz
cyBpbiBmdWxsIFVSTHMgaW5zdGVhZCBvZiB0ZXN0IG5hbWVzLgogICAgICAgICBpZiBkcml2ZXJf
aW5wdXQudGVzdF9uYW1lLnN0YXJ0c3dpdGgoJ2h0dHA6Ly8nKSBvciBkcml2ZXJfaW5wdXQudGVz
dF9uYW1lLnN0YXJ0c3dpdGgoJ2h0dHBzOi8vJykgIG9yIGRyaXZlcl9pbnB1dC50ZXN0X25hbWUg
PT0gKCdhYm91dDpibGFuaycpOgogICAgICAgICAgICAgY29tbWFuZCA9IGRyaXZlcl9pbnB1dC50
ZXN0X25hbWUKLSAgICAgICAgZWxpZiBzZWxmLmlzX2h0dHBfdGVzdChkcml2ZXJfaW5wdXQudGVz
dF9uYW1lKToKKyAgICAgICAgZWxpZiBzZWxmLmlzX2h0dHBfdGVzdChkcml2ZXJfaW5wdXQudGVz
dF9uYW1lKSBvciBzZWxmLmlzX3dlYl9wbGF0Zm9ybV90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25h
bWUpOgogICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYudGVzdF90b191cmkoZHJpdmVyX2lucHV0
LnRlc3RfbmFtZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvbW1hbmQgPSBzZWxmLl9w
b3J0LmFic3BhdGhfZm9yX3Rlc3QoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5CmluZGV4IDMyMWIxMDM2N2Y0
YjBhNTlmOWZlZmQwOWExODgwMzcxYTg2NDkxYjQuLmRmNWYwN2IyYmUyZmYwYTM1NzU5Nzg3Y2U4
MDU4MjM3YmYwNTgzYzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9k
cml2ZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZl
cl91bml0dGVzdC5weQpAQCAtMTA5LDYgKzEwOSw3IEBAIGNsYXNzIERyaXZlclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci50ZXN0X3RvX3Vy
aSgnZm9vL2Jhci5odG1sJyksICdmaWxlOi8vJXMvZm9vL2Jhci5odG1sJyAlIHBvcnQubGF5b3V0
X3Rlc3RzX2RpcigpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci50ZXN0X3RvX3Vy
aSgnaHR0cC90ZXN0cy9mb28uaHRtbCcpLCAnaHR0cDovLzEyNy4wLjAuMTo4MDAwL2Zvby5odG1s
JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudGVzdF90b191cmkoJ2h0dHAvdGVz
dHMvc3NsL2Jhci5odG1sJyksICdodHRwczovLzEyNy4wLjAuMTo4NDQzL3NzbC9iYXIuaHRtbCcp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnRlc3RfdG9fdXJpKCdpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Zvby9iYXIuaHRtbCcpLCAnaHR0cDovL2xvY2FsaG9zdDo4
ODAwL2Zvby9iYXIuaHRtbCcpCiAKICAgICBkZWYgdGVzdF91cmlfdG9fdGVzdChzZWxmKToKICAg
ICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKQEAgLTExNiw2ICsxMTcsNyBAQCBjbGFzcyBE
cml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChk
cml2ZXIudXJpX3RvX3Rlc3QoJ2ZpbGU6Ly8lcy9mb28vYmFyLmh0bWwnICUgcG9ydC5sYXlvdXRf
dGVzdHNfZGlyKCkpLCAnZm9vL2Jhci5odG1sJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChk
cml2ZXIudXJpX3RvX3Rlc3QoJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28uaHRtbCcpLCAnaHR0
cC90ZXN0cy9mb28uaHRtbCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnVyaV90
b190ZXN0KCdodHRwczovLzEyNy4wLjAuMTo4NDQzL3NzbC9iYXIuaHRtbCcpLCAnaHR0cC90ZXN0
cy9zc2wvYmFyLmh0bWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci51cmlfdG9f
dGVzdCgnaHR0cDovL2xvY2FsaG9zdDo4ODAwL2Zvby9iYXIuaHRtbCcpLCAnaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9mb28vYmFyLmh0bWwnKQogCiAgICAgZGVmIHRlc3RfcmVhZF9i
bG9jayhzZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2MvQ2hhbmdlTG9nCmluZGV4IDVmNTQxMjdlMzFmMDk4NzRkY2Q5MDQ5N2E0NGExOTA5ZDQ1
ODE0ZTcuLmRhZmY3NWQ3MTVmNjJmZmQ0MWI2NmY2MzU5MTUzZjMyMzA2MTA4N2UgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE0LTEyLTI5ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgSW50ZWdy
YXRlIFdQIHB5dGhvbiBzZXJ2ZXIgaW50byBXZWJLaXQgdGVzdCBmcmFtZXdvcmsKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzA5NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbnRhaW5zIHBhcmFtZXRl
cnMgb2Ygd2ViIHBsYXRmb3JtIHRlc3Qgc2VydmVyLgorCisgICAgICAgICogcmVzb3VyY2VzL2Nv
bmZpZy5qc29uOiBBZGRlZC4KKwogMjAxNC0xMS0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJv
dWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIEltcG9ydCB3M2MgdGVzdHMgZm9yIGNhbnZh
cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy9jb25maWcu
anNvbiBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9yZXNvdXJjZXMvY29uZmlnLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2UzMGYxZmNmZWRiOTUyNDg3Y2VkMTFiMzU3M2I1ZmEzMmQ0ODU3YgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9yZXNvdXJjZXMvY29uZmlnLmpz
b24KQEAgLTAsMCArMSwyMSBAQAoreyJob3N0IjogImxvY2FsaG9zdCIsCisgInBvcnRzIjp7Imh0
dHAiOls4ODAwLCA4ODAxXSwKKyAgICAgICAgICAiaHR0cHMiOls4NDQzXSwKKyAgICAgICAgICAi
d3MiOls0OTAwMV19LAorICJjaGVja19zdWJkb21haW5zIjogZmFsc2UsCisgImxvZ19sZXZlbCI6
ImRlYnVnIiwKKyAiYmluZF9ob3N0bmFtZSI6IGZhbHNlLAorICJzc2wiOiB7InR5cGUiOiAib3Bl
bnNzbCIsCisgICAgICAgICAiZW5jcnlwdF9hZnRlcl9jb25uZWN0IjogZmFsc2UsCisgICAgICAg
ICAib3BlbnNzbCI6IHsKKyAgICAgICAgICAgICAib3BlbnNzbF9iaW5hcnkiOiAib3BlbnNzbCIs
CisgICAgICAgICAgICAgImJhc2VfcGF0aCI6ICJfY2VydHMiLAorICAgICAgICAgICAgICJmb3Jj
ZV9yZWdlbmVyYXRlIjogZmFsc2UKKyAgICAgICAgIH0sCisgICAgICAgICAicHJlZ2VuZXJhdGVk
IjogeworICAgICAgICAgICAgICJob3N0X2tleV9wYXRoIjogbnVsbCwKKyAgICAgICAgICAgICAi
aG9zdF9jZXJ0X3BhdGgiOiBudWxsCisgICAgICAgICB9LAorICAgICAgICAgIm5vbmUiOiB7fQor
ICAgICAgICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245361</attachid>
            <date>2015-01-26 11:48:55 -0800</date>
            <delta_ts>2015-01-26 12:41:23 -0800</delta_ts>
            <desc>fixing change log</desc>
            <filename>bug-127094-20150126204855.patch</filename>
            <type>text/plain</type>
            <size>37944</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MTI0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmMxNTgyYmE3NzU3OGVmNWY2ODE2MjM2ZmIwNTQ4MmUw
ZmY3MmM5OC4uNmNiMDQ1YjdiOThkZTEyN2U4NTJkMjNmMDkwMTlhZGZiOTNiYjhmOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1
IEBACisyMDE1LTAxLTI2ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgSW50ZWdyYXRlIFdQIHB5dGhvbiBzZXJ2ZXIgaW50byBXZWJLaXQgdGVz
dCBmcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNzA5NAorCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFkZHMgVzNDIHdlYiBzZXJ2ZXIgKHdwdHNlcnZlcikgYXMgYSBuZXcgSFRU
UCBzZXJ2ZXIuCisgICAgICAgIHdwdHNlcnZlciBpcyB1c2VkIHRvIHNlcnZlIGFsbCB0ZXN0cyBp
bnNpZGUgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dwdC4KKyAgICAgICAgd3B0c2VydmVyIGlt
cGxlbWVudGF0aW9uIHNob3VsZCBiZSBpbXBvcnRlZCB3aXRoaW4gdGhlIGltcG9ydCBvZiB0aGUg
V2ViIFBsYXRmb3JtIFRlc3Qgc3VpdGUgKHRvIGVuc3VyZSBrZWVwaW5nIHNlcnZlciBhbmQgdGVz
dHMgaW4gc3luYykgaW4gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dwdC4KKworICAgICAgICBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X2xh
dW5jaGVyLnB5IHNlcnZlcyBhcyBtYWluIGVudHJ5IHBvaW50IHRvIHdwdCBzcGF3bmVkIHByb2Nl
c3MuCisgICAgICAgIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3Bs
YXRmb3JtX3Rlc3Rfc2VydmVyLnB5IGlzIHJlc3BvbnNpYmxlIHRvIHN0YXJ0L3N0b3AgdGhlIHdw
dCBzZXJ2ZXIgcHJvY2Vzcy4KKyAgICAgICAgSXQgYWxzbyBzZXRzIHVwIHRoZSBzZXJ2ZXIgY29u
ZmlnIGFuZCB0ZXN0aGFybmVzcy5qcy90ZXN0aGFybmVzc3JlcG9ydC5qcyBmaWxlcyBhdCBzdGFy
dCBhbmQgc3RvcCBvZiB0aGUgd3B0IHNlcnZlci4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weToKKyAgICAgICAgKE1vY2tQcm9jZXNz
LmNvbW11bmljYXRlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHk6IEFkZGluZyBzdGFydC9zdG9wIG9mIHdl
YiBwbGF0Zm9ybSB0ZXN0IHNlcnZlciBhY2NvcmRpbmcgYm9vbGVhbiBwYXJhbWV0ZXIuCisgICAg
ICAgIChMYXlvdXRUZXN0UnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKExheW91dFRlc3RSdW5u
ZXIucnVuX3Rlc3RzKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuc3RhcnRfc2VydmVycyk6
CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyLnN0b3Bfc2VydmVycyk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVy
X3VuaXR0ZXN0LnB5OiBVcGRhdGVkIHRvIGNoZWNrIGZvciB3cHQgc2VydmVyIHN0YXJ0L3N0b3Au
CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMuX3J1bl90ZXN0cyk6CisgICAgICAgIChM
YXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJzX3N0YXJ0ZWQuc3RhcnRfd2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXJUZXN0cy50ZXN0X3Nl
cnZlcnNfc3RhcnRlZC5zdG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcik6CisgICAgICAgIChM
YXlvdXRUZXN0UnVubmVyVGVzdHMpOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lclRlc3RzLnRl
c3Rfc2VydmVyc19zdGFydGVkKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5OiAgVXBkYXRlZCB0byBjaGVjayB3aGV0aGVyIGEg
dGVzdCBpcyBhIHdwdCB0ZXN0IGFuZCB3aGV0aGVyIHdwdCBzZXJ2ZXIgbGF1bmNoIGlzIG5lZWRl
ZC4KKyAgICAgICAgKE1hbmFnZXIuX19pbml0X18pOgorICAgICAgICAoTWFuYWdlci5faXNfaHR0
cF90ZXN0KToKKyAgICAgICAgKE1hbmFnZXIuX2lzX3dlYl9wbGF0Zm9ybV90ZXN0KToKKyAgICAg
ICAgKE1hbmFnZXIuX3J1bl90ZXN0cyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weToKKyAgICAgICAgKE1hbmFn
ZXJUZXN0LnRlc3RfbmVlZHNfc2VydmVycy5nZXRfd3B0X2RvY19yb290KToKKyAgICAgICAgKE1h
bmFnZXJUZXN0LnRlc3RfbmVlZHNfc2VydmVycy5nZXRfbWFuYWdlcik6CisgICAgICAgIChNYW5h
Z2VyVGVzdC50ZXN0X25lZWRzX3NlcnZlcnMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6IEFkZGVkIGFuIG9wdGlvbiB0byBjb250
cm9sIHRoZSBkb2Nfcm9vdCBvZiB0aGUgd3B0IHNlcnZlci4KKyAgICAgICAgKHBhcnNlX2FyZ3Mp
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3Bs
YXRmb3JtX3Rlc3RfbGF1bmNoZXIucHk6IEFkZGVkLgorICAgICAgICAobWFpbik6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVz
dF9zZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAoZG9jX3Jvb3QpOgorICAgICAgICAoYmFzZV91
cmwpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyKToKKyAgICAgICAgKFdlYlBsYXRm
b3JtVGVzdFNlcnZlci5fX2luaXRfXyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIu
X3NldF9zdGFydF9jbWQpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9jb3B5X3dl
YmtpdF90ZXN0X2ZpbGVzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtVGVzdFNlcnZlci5fY2xlYW5f
d2Via2l0X3Rlc3RfZmlsZXMpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9wcmVw
YXJlX2NvbmZpZyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuX3NwYXduX3Byb2Nl
c3MpOgorICAgICAgICAoV2ViUGxhdGZvcm1UZXN0U2VydmVyLl9zdG9wX3J1bm5pbmdfc2VydmVy
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9w
bGF0Zm9ybV90ZXN0X3NlcnZlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0V2Vi
UGxhdGZvcm1UZXN0U2VydmVyKToKKyAgICAgICAgKFRlc3RXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIu
dGVzdF9zdGFydF9jbWQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5
OgorICAgICAgICAoUG9ydC5fX2luaXRfXyk6CisgICAgICAgIChQb3J0LnRvLnN0YXJ0X3dlYl9w
bGF0Zm9ybV90ZXN0X3NlcnZlcik6CisgICAgICAgIChQb3J0LnRvKToKKyAgICAgICAgKFBvcnQu
dG8ud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX2RvY19yb290KToKKyAgICAgICAgKFBvcnQudG8u
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX2Jhc2VfdXJsKToKKyAgICAgICAgKFBvcnQudG8uc3Rv
cF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
cG9ydC9kcml2ZXIucHk6IFVwZGF0ZWQgdGhlIHRlc3QgbmFtZSA8LT4gdGVzdCBVUkwgY29udmVy
c2lvbiByb3V0aW5lcy4KKyAgICAgICAgKERyaXZlci5fX2luaXRfXyk6CisgICAgICAgIChEcml2
ZXIuaXNfd2ViX3BsYXRmb3JtX3Rlc3QpOgorICAgICAgICAoRHJpdmVyLnRlc3RfdG9fdXJpKToK
KyAgICAgICAgKERyaXZlci51cmlfdG9fdGVzdCk6CisgICAgICAgIChEcml2ZXIuX2NvbW1hbmRf
ZnJvbV9kcml2ZXJfaW5wdXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2
ZXJfdW5pdHRlc3QucHk6ICBVcGRhdGVkIHRlc3RzIGFjY29yZGluZyBuZXcgY29udmVyc2lvbiBy
dWxlcy4KKyAgICAgICAgKERyaXZlclRlc3QudGVzdF90ZXN0X3RvX3VyaSk6CisgICAgICAgIChE
cml2ZXJUZXN0LnRlc3RfdXJpX3RvX3Rlc3QpOgorCiAyMDE1LTAxLTI2ICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBib3QgYXNzaWdubWVudHMu
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0
aXZlX21vY2sucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0
aXZlX21vY2sucHkKaW5kZXggMTgxYTVmOWE3MWNlNTU5NjY2YTgyOWU2NjNkNTFhYTVlYTIxNDlh
Ny4uOWYxMTRkMWIxY2JkMGIzMDk5NTE0MGQyNjM1NzM2OGZkNzE2ZTYwYyAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5w
eQpAQCAtNDYsNiArNDYsOSBAQCBjbGFzcyBNb2NrUHJvY2VzcyhvYmplY3QpOgogICAgIGRlZiB3
YWl0KHNlbGYpOgogICAgICAgICByZXR1cm4KIAorICAgIGRlZiBjb21tdW5pY2F0ZShzZWxmLCBp
bnB1dD1Ob25lKToKKyAgICAgICAgcmV0dXJuIChzZWxmLnN0ZG91dCwgc2VsZi5zdGRlcnIpCisK
ICMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIHVuaWZpZWQgd2l0aCBNb2NrRXhlY3V0aXZlMgogY2xh
c3MgTW9ja0V4ZWN1dGl2ZShvYmplY3QpOgogICAgIFBJUEUgPSAiTU9DSyBQSVBFIgpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5
b3V0X3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
Y29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5CmluZGV4IDkwMjdhZjdmODU1ZmI1ZTQ0
ZWY5ZTBjOTI0ZDA0ZTcwYzU0MzNkYTIuLjdmM2JhNjQ1NWE0YWMxNTlmODg3MjRmZmI1NjgzYmRj
M2VmODIyN2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKQEAg
LTc0LDE0ICs3NCwxNiBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAg
IHNlbGYuX3Rlc3RfaW5wdXRzID0gW10KICAgICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IE5vbmUK
ICAgICAgICAgc2VsZi5fbmVlZHNfd2Vic29ja2V0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fbmVl
ZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gTm9uZQogICAgICAgICBzZWxmLl9yZXRyeWlu
ZyA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2N1cnJlbnRfcnVuX3Jlc3VsdHMgPSBOb25lCiAKLSAg
ICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGV4cGVjdGF0aW9ucywgdGVzdF9pbnB1dHMsIHRlc3RzX3Rv
X3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19odHRwLCBuZWVkc193ZWJzb2NrZXRzLCByZXRyeWlu
Zyk6CisgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBleHBlY3RhdGlvbnMsIHRlc3RfaW5wdXRzLCB0
ZXN0c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVlZHNfd2Vic29ja2V0cywg
bmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLCByZXRyeWluZyk6CiAgICAgICAgIHNlbGYu
X2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucwogICAgICAgICBzZWxmLl90ZXN0X2lucHV0cyA9
IHRlc3RfaW5wdXRzCiAgICAgICAgIHNlbGYuX25lZWRzX2h0dHAgPSBuZWVkc19odHRwCiAgICAg
ICAgIHNlbGYuX25lZWRzX3dlYnNvY2tldHMgPSBuZWVkc193ZWJzb2NrZXRzCisgICAgICAgIHNl
bGYuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IG5lZWRzX3dlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlcgogICAgICAgICBzZWxmLl9yZXRyeWluZyA9IHJldHJ5aW5nCiAKICAgICAgICAg
IyBGSVhNRTogcmVuYW1lIGFsbCB2YXJpYWJsZXMgdG8gdGVzdF9ydW5fcmVzdWx0cyBvciBzb21l
IHN1Y2ggLi4uCkBAIC0xMDEsNyArMTAzLDcgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lcihvYmpl
Y3QpOgogICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMg
Li4uJykKICAgICAgICAgYWxsX3NoYXJkcyA9IHNlbGYuX3NoYXJkZXIuc2hhcmRfdGVzdHModGVz
dF9pbnB1dHMsIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyksIHNlbGYuX29wdGlv
bnMuZnVsbHlfcGFyYWxsZWwpCiAKLSAgICAgICAgaWYgc2VsZi5fbmVlZHNfaHR0cCBhbmQgc2Vs
Zi5fb3B0aW9ucy5odHRwOgorICAgICAgICBpZiAoc2VsZi5fbmVlZHNfaHR0cCBhbmQgc2VsZi5f
b3B0aW9ucy5odHRwKSBvciBzZWxmLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI6CiAg
ICAgICAgICAgICBzZWxmLnN0YXJ0X3NlcnZlcnMoKQogCiAgICAgICAgIG51bV93b3JrZXJzID0g
bWluKG51bV93b3JrZXJzLCBsZW4oYWxsX3NoYXJkcykpCkBAIC0xODksNiArMTkxLDkgQEAgY2xh
c3MgTGF5b3V0VGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJz
b2NrZXRzOgogICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0YXJ0aW5n
IFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vi
c29ja2V0X3NlcnZlcigpCisgICAgICAgIGlmIHNlbGYuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlcjoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdGFydGlu
ZyBXZWIgUGxhdGZvcm0gVGVzdCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQu
c3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyKCkKIAogICAgIGRlZiBzdG9wX3NlcnZlcnMo
c2VsZik6CiAgICAgICAgIGlmIHNlbGYuX25lZWRzX2h0dHA6CkBAIC0xOTcsNiArMjAyLDkgQEAg
Y2xhc3MgTGF5b3V0VGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICBpZiBzZWxmLl9uZWVkc193
ZWJzb2NrZXRzOgogICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0b3Bw
aW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93
ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyOgorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0b3Bw
aW5nIFdlYiBQbGF0Zm9ybSBUZXN0IHNlcnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9y
dC5zdG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcigpCiAKICAgICBkZWYgaGFuZGxlKHNlbGYs
IG5hbWUsIHNvdXJjZSwgKmFyZ3MpOgogICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYsICdf
aGFuZGxlXycgKyBuYW1lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3Rf
cnVubmVyX3VuaXR0ZXN0LnB5CmluZGV4IDg1MTQxZTY1N2QwZWQ2OWQ4NDk5ZDQ3ZTBkOWE1MGVj
NzBiZjgwNDkuLmY4OTgzNjMyZjgyMzRkOTk1MzYzNjMxMjRhNTg3YzMzZWM3Nzg5MDYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xh
eW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkK
QEAgLTg1LDcgKzg1LDcgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lclRlc3RzKHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgZXhwZWN0YXRpb25zID0gVGVzdEV4cGVjdGF0aW9ucyhydW5uZXIu
X3BvcnQsIHRlc3RzKQogICAgICAgICBleHBlY3RhdGlvbnMucGFyc2VfYWxsX2V4cGVjdGF0aW9u
cygpCiAgICAgICAgIHJ1bm5lci5ydW5fdGVzdHMoZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywg
c2V0KCksCi0gICAgICAgICAgICBudW1fd29ya2Vycz0xLCBuZWVkc19odHRwPWFueSgnaHR0cCcg
aW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0cyksIG5lZWRzX3dlYnNvY2tldHM9YW55KFsnd2Vic29j
a2V0JyBpbiB0ZXN0IGZvciB0ZXN0IGluIHRlc3RzXSksIHJldHJ5aW5nPUZhbHNlKQorICAgICAg
ICAgICAgbnVtX3dvcmtlcnM9MSwgbmVlZHNfaHR0cD1hbnkoJ2h0dHAnIGluIHRlc3QgZm9yIHRl
c3QgaW4gdGVzdHMpLCBuZWVkc193ZWJzb2NrZXRzPWFueShbJ3dlYnNvY2tldCcgaW4gdGVzdCBm
b3IgdGVzdCBpbiB0ZXN0c10pLCBuZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI9YW55KFsn
aW1wb3J0ZWQvdzNjJyBpbiB0ZXN0IGZvciB0ZXN0IGluIHRlc3RzXSksIHJldHJ5aW5nPUZhbHNl
KQogCiAgICAgZGVmIHRlc3RfaW50ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXRzKHNlbGYpOgog
ICAgICAgICBydW5uZXIgPSBzZWxmLl9ydW5uZXIoKQpAQCAtMTQ3LDQ5ICsxNDcsODMgQEAgY2xh
c3MgTGF5b3V0VGVzdFJ1bm5lclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZGVm
IHN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKToKICAgICAgICAgICAgIHNlbGYud2Vic29ja2V0X3N0
YXJ0ZWQgPSBUcnVlCiAKKyAgICAgICAgZGVmIHN0YXJ0X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
cigpOgorICAgICAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCA9
IFRydWUKKwogICAgICAgICBkZWYgc3RvcF9odHRwX3NlcnZlcigpOgogICAgICAgICAgICAgc2Vs
Zi5odHRwX3N0b3BwZWQgPSBUcnVlCiAKICAgICAgICAgZGVmIHN0b3Bfd2Vic29ja2V0X3NlcnZl
cigpOgogICAgICAgICAgICAgc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IFRydWUKIAorICAgICAg
ICBkZWYgc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoKToKKyAgICAgICAgICAgIHNlbGYu
d2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQgPSBUcnVlCisKICAgICAgICAgaG9zdCA9
IE1vY2tIb3N0KCkKICAgICAgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldCgndGVzdC1t
YWMtbGVvcGFyZCcpCiAgICAgICAgIHBvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIgPSBzdGFydF9odHRw
X3NlcnZlcgogICAgICAgICBwb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIgPSBzdGFydF93ZWJz
b2NrZXRfc2VydmVyCisgICAgICAgIHBvcnQuc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVy
ID0gc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyCiAgICAgICAgIHBvcnQuc3RvcF9odHRw
X3NlcnZlciA9IHN0b3BfaHR0cF9zZXJ2ZXIKICAgICAgICAgcG9ydC5zdG9wX3dlYnNvY2tldF9z
ZXJ2ZXIgPSBzdG9wX3dlYnNvY2tldF9zZXJ2ZXIKKyAgICAgICAgcG9ydC5zdG9wX3dlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlciA9IHN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyCiAKICAgICAg
ICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBzZWxmLmh0dHBfc3RvcHBlZCA9IHNlbGYud2Vic29ja2V0
X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tldF9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi53
ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyX3N0b3BwZWQgPSBGYWxzZQogICAgICAgICBydW5uZXIgPSBzZWxmLl9ydW5uZXIocG9y
dD1wb3J0KQogICAgICAgICBydW5uZXIuX25lZWRzX2h0dHAgPSBUcnVlCiAgICAgICAgIHJ1bm5l
ci5fbmVlZHNfd2Vic29ja2V0cyA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2ViX3Bs
YXRmb3JtX3Rlc3Rfc2VydmVyID0gRmFsc2UKICAgICAgICAgcnVubmVyLnN0YXJ0X3NlcnZlcnMo
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdGFydGVkLCBUcnVlKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIEZhbHNlKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0
ZWQsIEZhbHNlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzKCkKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWxmLmh0dHBfc3RvcHBlZCwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLndlYnNvY2tldF9zdG9wcGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkLCBGYWxzZSkKIAogICAg
ICAgICBzZWxmLmh0dHBfc3RhcnRlZCA9IHNlbGYuaHR0cF9zdG9wcGVkID0gc2VsZi53ZWJzb2Nr
ZXRfc3RhcnRlZCA9IHNlbGYud2Vic29ja2V0X3N0b3BwZWQgPSBGYWxzZQorICAgICAgICBzZWxm
LndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdGFydGVkID0gc2VsZi53ZWJfcGxhdGZvcm1fdGVz
dF9zZXJ2ZXJfc3RvcHBlZCA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5fbmVlZHNfaHR0cCA9IFRy
dWUKICAgICAgICAgcnVubmVyLl9uZWVkc193ZWJzb2NrZXRzID0gVHJ1ZQorICAgICAgICBydW5u
ZXIuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IEZhbHNlCiAgICAgICAgIHJ1bm5l
ci5zdGFydF9zZXJ2ZXJzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3Rh
cnRlZCwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdGFy
dGVkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyX3N0YXJ0ZWQsIEZhbHNlKQogICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzKCkK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RvcHBlZCwgVHJ1ZSkKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNvY2tldF9zdG9wcGVkLCBUcnVlKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQs
IEZhbHNlKQorCisgICAgICAgIHNlbGYuaHR0cF9zdGFydGVkID0gc2VsZi5odHRwX3N0b3BwZWQg
PSBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNl
CisgICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndl
Yl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgcnVubmVyLl9u
ZWVkc19odHRwID0gRmFsc2UKKyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJzb2NrZXRzID0gRmFs
c2UKKyAgICAgICAgcnVubmVyLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBUcnVl
CisgICAgICAgIHJ1bm5lci5zdGFydF9zZXJ2ZXJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLmh0dHBfc3RhcnRlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi53ZWJzb2NrZXRfc3RhcnRlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCwgVHJ1ZSkKKyAgICAgICAgcnVubmVy
LnN0b3Bfc2VydmVycygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3Bw
ZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0b3Bw
ZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyX3N0b3BwZWQsIFRydWUpCiAKICAgICAgICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBz
ZWxmLmh0dHBfc3RvcHBlZCA9IHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tl
dF9zdG9wcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJf
c3RhcnRlZCA9IHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0b3BwZWQgPSBGYWxzZQog
ICAgICAgICBydW5uZXIuX25lZWRzX2h0dHAgPSBGYWxzZQogICAgICAgICBydW5uZXIuX25lZWRz
X3dlYnNvY2tldHMgPSBGYWxzZQorICAgICAgICBydW5uZXIuX25lZWRzX3dlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlciA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5zdGFydF9zZXJ2ZXJzKCkKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RhcnRlZCwgRmFsc2UpCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCwgRmFsc2UpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfc3RhcnRlZCwgRmFs
c2UpCiAgICAgICAgIHJ1bm5lci5zdG9wX3NlcnZlcnMoKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlbGYuaHR0cF9zdG9wcGVkLCBGYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLndlYnNvY2tldF9zdG9wcGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkLCBGYWxzZSkKIAogCiBjbGFzcyBT
aGFyZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKaW5kZXgg
MzM4NWEwMWQ4MDgzNjVmMDYyNGEyZmFhMmE1Njg3M2FhNDNjYWFmMC4uZmRiYTJiZWNmMDNhZTY3
YWQzNjBiMWZiMTI3MmQ3M2ZlZGI3NDA5ZCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CkBAIC03OSw2
ICs3OSw3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKIAogICAgICAgICBzZWxmLkhUVFBfU1VC
RElSID0gJ2h0dHAnICsgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SCiAgICAgICAgIHNlbGYuV0VC
U09DS0VUX1NVQkRJUiA9ICd3ZWJzb2NrZXQnICsgcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SCisg
ICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc3ViZGlyID0gc2VsZi5fcG9ydC53ZWJfcGxh
dGZvcm1fdGVzdF9zZXJ2ZXJfZG9jX3Jvb3QoKQogICAgICAgICBzZWxmLkxBWU9VVF9URVNUU19E
SVJFQ1RPUlkgPSAnTGF5b3V0VGVzdHMnCiAKICAgICAgICAgIyBkaXNhYmxlIHdzcyBzZXJ2ZXIu
IG5lZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wgb24gYnVpbGRib3RzLgpAQCAtOTMsMTEgKzk0LDE0
IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRlci5m
aW5kX3Rlc3RzKHNlbGYuX29wdGlvbnMsIGFyZ3MpCiAKICAgICBkZWYgX2lzX2h0dHBfdGVzdChz
ZWxmLCB0ZXN0KToKLSAgICAgICAgcmV0dXJuIHNlbGYuSFRUUF9TVUJESVIgaW4gdGVzdCBvciBz
ZWxmLl9pc193ZWJzb2NrZXRfdGVzdCh0ZXN0KQorICAgICAgICByZXR1cm4gc2VsZi5IVFRQX1NV
QkRJUiBpbiB0ZXN0IG9yIHNlbGYuX2lzX3dlYnNvY2tldF90ZXN0KHRlc3QpIG9yIHNlbGYuX2lz
X3dlYl9wbGF0Zm9ybV90ZXN0KHRlc3QpCiAKICAgICBkZWYgX2lzX3dlYnNvY2tldF90ZXN0KHNl
bGYsIHRlc3QpOgogICAgICAgICByZXR1cm4gc2VsZi5XRUJTT0NLRVRfU1VCRElSIGluIHRlc3QK
IAorICAgIGRlZiBfaXNfd2ViX3BsYXRmb3JtX3Rlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHJl
dHVybiBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3N1YmRpciBpbiB0ZXN0CisKICAgICBkZWYgX2h0
dHBfdGVzdHMoc2VsZiwgdGVzdF9uYW1lcyk6CiAgICAgICAgIHJldHVybiBzZXQodGVzdCBmb3Ig
dGVzdCBpbiB0ZXN0X25hbWVzIGlmIHNlbGYuX2lzX2h0dHBfdGVzdCh0ZXN0KSkKIApAQCAtMjM1
LDcgKzIzOSw4IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJpemVkX3Jlc3VsdHMsIGluaXRpYWxfcmVzdWx0
cywgcmV0cnlfcmVzdWx0cywgZW5hYmxlZF9waXhlbF90ZXN0c19pbl9yZXRyeSkKIAogICAgIGRl
ZiBfcnVuX3Rlc3RzKHNlbGYsIHRlc3RzX3RvX3J1biwgdGVzdHNfdG9fc2tpcCwgcmVwZWF0X2Vh
Y2gsIGl0ZXJhdGlvbnMsIG51bV93b3JrZXJzLCByZXRyeWluZyk6Ci0gICAgICAgIG5lZWRzX2h0
dHAgPSBhbnkoc2VsZi5faXNfaHR0cF90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1
bikKKyAgICAgICAgbmVlZHNfaHR0cCA9IGFueSgoc2VsZi5faXNfaHR0cF90ZXN0KHRlc3QpIGFu
ZCBub3Qgc2VsZi5faXNfd2ViX3BsYXRmb3JtX3Rlc3QodGVzdCkpIGZvciB0ZXN0IGluIHRlc3Rz
X3RvX3J1bikKKyAgICAgICAgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gYW55KHNl
bGYuX2lzX3dlYl9wbGF0Zm9ybV90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikK
ICAgICAgICAgbmVlZHNfd2Vic29ja2V0cyA9IGFueShzZWxmLl9pc193ZWJzb2NrZXRfdGVzdCh0
ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0c190b19ydW4pCiAKICAgICAgICAgdGVzdF9pbnB1dHMgPSBb
XQpAQCAtMjQzLDcgKzI0OCw3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAg
IGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bjoKICAgICAgICAgICAgICAgICBmb3IgXyBpbiB4cmFu
Z2UocmVwZWF0X2VhY2gpOgogICAgICAgICAgICAgICAgICAgICB0ZXN0X2lucHV0cy5hcHBlbmQo
c2VsZi5fdGVzdF9pbnB1dF9mb3JfZmlsZSh0ZXN0KSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1
bm5lci5ydW5fdGVzdHMoc2VsZi5fZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9f
c2tpcCwgbnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIHJldHJ5aW5n
KQorICAgICAgICByZXR1cm4gc2VsZi5fcnVubmVyLnJ1bl90ZXN0cyhzZWxmLl9leHBlY3RhdGlv
bnMsIHRlc3RfaW5wdXRzLCB0ZXN0c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwg
bmVlZHNfd2Vic29ja2V0cywgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLCByZXRyeWlu
ZykKIAogICAgIGRlZiBfY2xlYW5fdXBfcnVuKHNlbGYpOgogICAgICAgICBfbG9nLmRlYnVnKCJG
bHVzaGluZyBzdGRvdXQiKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkKaW5k
ZXggZDRhZmI2MDk3YzkyNzY0NjAwZmE4MjJiMTBlOWU0ZGI0YTViMzFiYy4uNGVjNjNmZGVlYjU0
Yjg2MWNkMjdhMDRlYWExZmMyYmRjM2Y4NjFlZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2Vy
X3VuaXR0ZXN0LnB5CkBAIC00Myw5ICs0MywxMyBAQCBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rv
b2wgaW1wb3J0IE1vY2tPcHRpb25zCiAKIGNsYXNzIE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICBkZWYgdGVzdF9uZWVkc19zZXJ2ZXJzKHNlbGYpOgorICAgICAgICBkZWYgZ2V0
X3dwdF9kb2Nfcm9vdCgpOgorICAgICAgICAgICAgcmV0dXJuICdpbXBvcnRlZC93M2Mvd3B0Jwor
CiAgICAgICAgIGRlZiBnZXRfbWFuYWdlcigpOgogICAgICAgICAgICAgcG9ydCA9IE1vY2soKSAg
IyBGSVhNRTogVXNlIGEgdGlnaHRlciBtb2NrLgogICAgICAgICAgICAgcG9ydC5URVNUX1BBVEhf
U0VQQVJBVE9SID0gJy8nCisgICAgICAgICAgICBwb3J0LndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
cl9kb2Nfcm9vdCA9IGdldF93cHRfZG9jX3Jvb3QKICAgICAgICAgICAgIG1hbmFnZXIgPSBNYW5h
Z2VyKHBvcnQsIG9wdGlvbnM9TW9ja09wdGlvbnMoaHR0cD1UcnVlKSwgcHJpbnRlcj1Nb2NrKCkp
CiAgICAgICAgICAgICByZXR1cm4gbWFuYWdlcgogCkBAIC01NSw2ICs1OSwxMiBAQCBjbGFzcyBN
YW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG1hbmFnZXIgPSBnZXRfbWFu
YWdlcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5hZ2VyLm5lZWRzX3NlcnZlcnMoWydo
dHRwL3Rlc3RzL21pc2MnXSkpCiAKKyAgICAgICAgbWFuYWdlciA9IGdldF9tYW5hZ2VyKCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hbmFnZXIubmVlZHNfc2VydmVycyhbJ2ltcG9ydGVkL3cz
Yy93cHQvdGVzdCddKSkKKworICAgICAgICBtYW5hZ2VyID0gZ2V0X21hbmFnZXIoKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKG1hbmFnZXIubmVlZHNfc2VydmVycyhbJ2ltcG9ydGVkL3czYydd
KSkKKwogICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X25lZWRzX3NlcnZlcnMoc2VsZik6CiAgICAg
ICAgIGRlZiBnZXRfbWFuYWdlcigpOgogICAgICAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYzAyOTJiMmFm
MGZlZmIwZGIzOTJhZjA3ZDdkNDE5NjhiOTYzZTQwYS4uYmU3MjVlNjU2M2FkNzYzMTBlNzc1Mzll
YzExNmZlNThiODkwYWQyNQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTI5NSw2ICsyOTUsMTAgQEAgZGVmIHBhcnNl
X2FyZ3MoYXJncyk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbmZpZ3VyYXRpb25z
LiBEb2VzIG5vdCBydW4gYW55IHRlc3RzLiIpKSwKICAgICBdKSkKIAorICAgIG9wdGlvbl9ncm91
cF9kZWZpbml0aW9ucy5hcHBlbmQoKCJXZWIgUGxhdGZvcm0gVGVzdCBTZXJ2ZXIgT3B0aW9ucyIs
IFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0td3B0c2VydmVyLWRvYy1yb290Iiwg
dHlwZT0ic3RyaW5nIiwgaGVscD0oIlNldCB3ZWIgcGxhdGZvcm0gc2VydmVyIGRvY3VtZW50IHJv
b3QsIHJlbGF0aXZlIHRvIExheW91dFRlc3RzIGRpcmVjdG9yeSIpKSwKKyAgICBdKSkKKwogICAg
ICMgRklYTUU6IE1vdmUgdGhlc2UgaW50byBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CiAgICAg
b3B0aW9uX2dyb3VwX2RlZmluaXRpb25zLmFwcGVuZCgoIlJlc3VsdCBKU09OIE9wdGlvbnMiLCBb
CiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLW1hc3Rlci1uYW1lIiwgaGVscD0iVGhl
IG5hbWUgb2YgdGhlIGJ1aWxkYm90IG1hc3Rlci4iKSwKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNo
ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9w
bGF0Zm9ybV90ZXN0X2xhdW5jaGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0YTMzNThlYjhjOWZkZjA1YjI2
MTBhZTk1MmU2MjU4MTIwNmFiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90ZXN0X2xhdW5jaGVyLnB5
CkBAIC0wLDAgKzEsMzUgQEAKKyMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8g
dGhlIHRlcm1zIG9mIHRoZSAzLWNsYXVzZSBCU0QgTGljZW5zZQorIyBodHRwOi8vd3d3LnczLm9y
Zy9Db25zb3J0aXVtL0xlZ2FsLzIwMDgvMDMtYnNkLWxpY2Vuc2UuaHRtbAorCitpbXBvcnQgaW1w
CitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MK
KworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCitsb2dnZXIuc2V0TGV2ZWwo
bG9nZ2luZy5ERUJVRykKKworc3lzLnBhdGguaW5zZXJ0KDEsICIuIikKK2ltcG9ydCBzZXJ2ZSBh
cyBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIKKworIyBUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIGxhdW5j
aCB0aGUgd2ViIHBsYXRmb3JtIHRlc3Qgc2VydmVyIG1haW4gc2NyaXB0IChzZXJ2ZS5weSkgYW5k
IHN0b3AgaXQgd2hlbiBhc2tlZCBieSBydW4td2Via2l0LXRlc3RzCisKKworZGVmIG1haW4oYXJn
diwgc3Rkb3V0LCBzdGRlcnIpOgorICAgICMgVGhpcyBpcyBhIGNvcHkgb2Ygc2VydmUucHkgbWFp
biBmdW5jdGlvbiwgZXhjZXB0IGZvciB0aGUgd2FpdCBzdGVwCisgICAgY29uZmlnID0gV2ViUGxh
dGZvcm1UZXN0U2VydmVyLmxvYWRfY29uZmlnKCJjb25maWcuZGVmYXVsdC5qc29uIiwgImNvbmZp
Zy5qc29uIikKKyAgICBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIuc2V0dXBfbG9nZ2VyKGNvbmZpZ1si
bG9nX2xldmVsIl0pCisgICAgc3NsX2VudiA9IFdlYlBsYXRmb3JtVGVzdFNlcnZlci5nZXRfc3Ns
X2Vudmlyb25tZW50KGNvbmZpZykKKyAgICB3aXRoIFdlYlBsYXRmb3JtVGVzdFNlcnZlci5nZXRf
c3NsX2Vudmlyb25tZW50KGNvbmZpZykgYXMgc3NsX2VudjoKKyAgICAgICAgY29uZmlnXywgc3Rh
cnRlZF9zZXJ2ZXJzID0gV2ViUGxhdGZvcm1UZXN0U2VydmVyLnN0YXJ0KGNvbmZpZywgc3NsX2Vu
dikKKworICAgICAgICBmb3IgcHJvdG9jb2wsIHNlcnZlcnMgaW4gc3RhcnRlZF9zZXJ2ZXJzLml0
ZW1zKCk6CisgICAgICAgICAgICBmb3IgcG9ydCwgcHJvY2VzcyBpbiBzZXJ2ZXJzOgorICAgICAg
ICAgICAgICAgIGxvZ2dlci5pbmZvKCIlcywgcG9ydDolZCwgcGlkOiVkIiAlIChwcm90b2NvbCwg
cG9ydCwgcHJvY2Vzcy5wcm9jLnBpZCkpCisKKyAgICBzeXMuc3RkaW4ucmVhZCgxKQorCisKK2lm
IF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0s
IHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYl9wbGF0Zm9ybV90
ZXN0X3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjFmZDQwZmRlYjhkMTMyYjlhZTBkNWQyNjdkODJm
ODM0OGE0YWI5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkKQEAgLTAsMCArMSwx
MzMgQEAKKyMgIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjICAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMgIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9y
IHRoZSBuYW1lcyBvZgorIyAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjICBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisjICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjICBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjICBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKKyMgIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorIyAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQganNvbgoraW1wb3J0IGxv
Z2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKKworX2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKF9fbmFtZV9fKQorCisKK2RlZiBkb2Nfcm9vdChwb3J0X29iaik6CisgICAgZG9jX3Jv
b3QgPSBwb3J0X29iai5nZXRfb3B0aW9uKCJ3cHRzZXJ2ZXJfZG9jX3Jvb3QiKQorICAgIGlmIGRv
Y19yb290IGlzIE5vbmU6CisgICAgICAgIHJldHVybiBwb3J0X29iai5ob3N0LmZpbGVzeXN0ZW0u
am9pbigiaW1wb3J0ZWQiLCAidzNjIiwgIndlYi1wbGF0Zm9ybS10ZXN0cyIpCisgICAgcmV0dXJu
IGRvY19yb290CisKKworZGVmIGJhc2VfdXJsKHBvcnRfb2JqKToKKyAgICBjb25maWdfd2tfZmls
ZXBhdGggPSBwb3J0X29iai5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoIkxheW91dFRlc3RzIiwgImlt
cG9ydGVkIiwgInczYyIsICJyZXNvdXJjZXMiLCAiY29uZmlnLmpzb24iKQorICAgIGlmIG5vdCBw
b3J0X29iai5ob3N0LmZpbGVzeXN0ZW0uaXNmaWxlKGNvbmZpZ193a19maWxlcGF0aCk6CisgICAg
ICAgICMgVGhpcyBzaG91bGQgb25seSBiZSBoaXQgYnkgd2Via2l0cHkgdW5pdCB0ZXN0cworICAg
ICAgICBfbG9nLmRlYnVnKCJObyBXUFQgY29uZmlnIGZpbGUgZm91bmQiKQorICAgICAgICByZXR1
cm4gImh0dHA6Ly9sb2NhbGhvc3Q6ODgwMC8iCisgICAganNvbl9kYXRhID0gcG9ydF9vYmouX2Zp
bGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoY29uZmlnX3drX2ZpbGVwYXRoKQorICAgIGNvbmZpZyA9
IGpzb24ubG9hZHMoanNvbl9kYXRhKQorICAgIHBvcnRzID0gY29uZmlnWyJwb3J0cyJdCisgICAg
cmV0dXJuICJodHRwOi8vIiArIGNvbmZpZ1siaG9zdCJdICsgIjoiICsgc3RyKHBvcnRzWyJodHRw
Il1bMF0pICsgIi8iCisKKworY2xhc3MgV2ViUGxhdGZvcm1UZXN0U2VydmVyKGh0dHBfc2VydmVy
X2Jhc2UuSHR0cFNlcnZlckJhc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwg
bmFtZSwgbGF5b3V0X3Rlc3RfcmVzdWx0c19kaXIsIHBpZGZpbGU9Tm9uZSk6CisgICAgICAgIGh0
dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18oc2VsZiwgcG9ydF9vYmopCisg
ICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBsYXlvdXRfdGVzdF9yZXN1bHRzX2RpcgorCisgICAg
ICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2xvZ19maWxlX25hbWUgPSAnJXNf
cHJvY2Vzc19sb2cub3V0LnR4dCcgJSAoc2VsZi5fbmFtZSkKKworICAgICAgICBzZWxmLl93c291
dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGlk
X2ZpbGUgPSBwaWRmaWxlCisgICAgICAgIGlmIG5vdCBzZWxmLl9waWRfZmlsZToKKyAgICAgICAg
ICAgIHNlbGYuX3BpZF9maWxlID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3J1bnRpbWVf
cGF0aCwgJyVzLnBpZCcgJSBzZWxmLl9uYW1lKQorICAgICAgICBzZWxmLl9zdGRvdXRfZGF0YSA9
IE5vbmUKKyAgICAgICAgc2VsZi5fc3RkZXJyX2RhdGEgPSBOb25lCisgICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0gPSBwb3J0X29iai5ob3N0LmZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi5fbGF5b3V0
X3Jvb3QgPSBwb3J0X29iai5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoIkxheW91dFRlc3RzIikKKyAg
ICAgICAgc2VsZi5fZG9jX3Jvb3QgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0
X3Jvb3QsIGRvY19yb290KHBvcnRfb2JqKSkKKworICAgICAgICBzZWxmLl9yZXNvdXJjZXNfZmls
ZXNfdG9fY29weSA9IFsndGVzdGhhcm5lc3MuanMnLCAndGVzdGhhcm5lc3MuY3NzJywgJ3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzJ10KKworICAgICAgICBjdXJyZW50X2Rpcl9wYXRoID0gc2VsZi5fZmls
ZXN5c3RlbS5hYnNwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0uc3BsaXQoX19maWxlX18pWzBdKQorICAg
ICAgICBzZWxmLl9zdGFydF9jbWQgPSBbInB5dGhvbiIsIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihj
dXJyZW50X2Rpcl9wYXRoLCAid2ViX3BsYXRmb3JtX3Rlc3RfbGF1bmNoZXIucHkiKV0KKyAgICAg
ICAgc2VsZi5fZG9jX3Jvb3RfcGF0aCA9IHBvcnRfb2JqLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgi
TGF5b3V0VGVzdHMiLCBzZWxmLl9kb2Nfcm9vdCkKKworICAgIGRlZiBfY29weV93ZWJraXRfdGVz
dF9maWxlcyhzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1ZygnQ29weWluZyBXZWJLaXQgcmVzb3Vy
Y2VzIGZpbGVzJykKKyAgICAgICAgZm9yIGYgaW4gc2VsZi5fcmVzb3VyY2VzX2ZpbGVzX3RvX2Nv
cHk6CisgICAgICAgICAgICB3ZWJraXRfZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4o
c2VsZi5fbGF5b3V0X3Jvb3QsICJyZXNvdXJjZXMiLCBmKQorICAgICAgICAgICAgaWYgc2VsZi5f
ZmlsZXN5c3RlbS5pc2ZpbGUod2Via2l0X2ZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBzZWxm
Ll9maWxlc3lzdGVtLmNvcHlmaWxlKHdlYmtpdF9maWxlbmFtZSwgc2VsZi5fZmlsZXN5c3RlbS5q
b2luKHNlbGYuX2RvY19yb290LCAicmVzb3VyY2VzIiwgZikpCisgICAgICAgIF9sb2cuZGVidWco
J0NvcHlpbmcgV2ViS2l0IHdlYiBwbGF0Zm9ybSBzZXJ2ZXIgY29uZmlnLmpzb24nKQorICAgICAg
ICBjb25maWdfd2tfZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0
X3Jvb3QsICJpbXBvcnRlZCIsICJ3M2MiLCAicmVzb3VyY2VzIiwgImNvbmZpZy5qc29uIikKKyAg
ICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5pc2ZpbGUoY29uZmlnX3drX2ZpbGVuYW1lKToKKyAg
ICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0uY29weWZpbGUoY29uZmlnX3drX2ZpbGVuYW1lLCBz
ZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fZG9jX3Jvb3QsICJjb25maWcuanNvbiIpKQorCisg
ICAgZGVmIF9jbGVhbl93ZWJraXRfdGVzdF9maWxlcyhzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1
ZygnQ2xlYW5pbmcgV1BUIHJlc291cmNlcyBmaWxlcycpCisgICAgICAgIGZvciBmIGluIHNlbGYu
X3Jlc291cmNlc19maWxlc190b19jb3B5OgorICAgICAgICAgICAgd3B0X2ZpbGVuYW1lID0gc2Vs
Zi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2RvY19yb290LCAicmVzb3VyY2VzIiwgZikKKyAgICAg
ICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uaXNmaWxlKHdwdF9maWxlbmFtZSk6CisgICAgICAg
ICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUod3B0X2ZpbGVuYW1lKQorICAgICAgICBf
bG9nLmRlYnVnKCdDbGVhbmluZyBXUFQgd2ViIHBsYXRmb3JtIHNlcnZlciBjb25maWcuanNvbicp
CisgICAgICAgIGNvbmZpZ193cHRfZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2Vs
Zi5fZG9jX3Jvb3QsICJjb25maWcuanNvbiIpCisgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0u
aXNmaWxlKGNvbmZpZ193cHRfZmlsZW5hbWUpOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3Rl
bS5yZW1vdmUoY29uZmlnX3dwdF9maWxlbmFtZSkKKworICAgIGRlZiBfcHJlcGFyZV9jb25maWco
c2VsZik6CisgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYuX291dHB1dF9k
aXIpOgorICAgICAgICAgICAgb3V0cHV0X2xvZyA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxm
Ll9vdXRwdXRfZGlyLCBzZWxmLl9sb2dfZmlsZV9uYW1lKQorICAgICAgICAgICAgc2VsZi5fd3Nv
dXQgPSBzZWxmLl9maWxlc3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKG91dHB1dF9s
b2cpCisgICAgICAgIHNlbGYuX2NvcHlfd2Via2l0X3Rlc3RfZmlsZXMoKQorCisgICAgZGVmIF9z
cGF3bl9wcm9jZXNzKHNlbGYpOgorICAgICAgICBzZWxmLl9zdGRvdXRfZGF0YSA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fc3RkZXJyX2RhdGEgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3dzb3V0Ogor
ICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihzZWxmLl9z
dGFydF9jbWQsIGN3ZD1zZWxmLl9kb2Nfcm9vdF9wYXRoLCBzaGVsbD1GYWxzZSwgc3RkaW49c2Vs
Zi5fZXhlY3V0aXZlLlBJUEUsIHN0ZG91dD1zZWxmLl93c291dCwgc3RkZXJyPXNlbGYuX3dzb3V0
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHNlbGYuX2V4ZWN1
dGl2ZS5wb3BlbihzZWxmLl9zdGFydF9jbWQsIGN3ZD1zZWxmLl9kb2Nfcm9vdF9wYXRoLCBzaGVs
bD1GYWxzZSwgc3RkaW49c2VsZi5fZXhlY3V0aXZlLlBJUEUsIHN0ZG91dD1zZWxmLl9leGVjdXRp
dmUuUElQRSwgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5TVERPVVQpCisgICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHNlbGYuX3BpZF9maWxlLCBzdHIoc2VsZi5fcHJvY2Vz
cy5waWQpKQorCisgICAgICAgICMgV2FpdCBhIHNlY29uZCBmb3IgdGhlIHNlcnZlciB0byBhY3R1
YWxseSBzdGFydCBzbyB0aGF0IHRlc3RzIGRvIG5vdCBzdGFydCB1bnRpbCBzZXJ2ZXIgaXMgcnVu
bmluZy4KKyAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgIHJldHVybiBzZWxmLl9wcm9j
ZXNzLnBpZAorCisgICAgZGVmIF9zdG9wX3J1bm5pbmdfc2VydmVyKHNlbGYpOgorICAgICAgICBf
bG9nLmRlYnVnKCdTdG9wcGluZyAlcyBzZXJ2ZXInICUgKHNlbGYuX25hbWUpKQorICAgICAgICBz
ZWxmLl9jbGVhbl93ZWJraXRfdGVzdF9maWxlcygpCisgICAgICAgIGlmIHNlbGYuX3BpZCBhbmQg
bm90IHNlbGYuX2V4ZWN1dGl2ZS5jaGVja19ydW5uaW5nX3BpZChzZWxmLl9waWQpOgorICAgICAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUoc2VsZi5fcGlkX2ZpbGUpCisgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKKyAgICAgICAgICAgIChzZWxmLl9z
dGRvdXRfZGF0YSwgc2VsZi5fc3RkZXJyX2RhdGEpID0gc2VsZi5fcHJvY2Vzcy5jb21tdW5pY2F0
ZShpbnB1dD0nXG4nKQorICAgICAgICBpZiBzZWxmLl93c291dDoKKyAgICAgICAgICAgIHNlbGYu
X3dzb3V0LmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQorICAgICAgICBp
ZiBzZWxmLl9leGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoc2VsZi5fcGlkKToKKyAgICAgICAg
ICAgIHJhaXNlIGh0dHBfc2VydmVyX2Jhc2UuU2VydmVyRXJyb3IoJ0ZhaWxlZCB0byBzdG9wICVz
OiBwbGVhc2UgZ28gdG8gd2ViIHBsYXRmb3JtIHRlc3Qgc2VydmVyIGxvZyBmaWxlIHRvIGdldCB0
aGUgUElEIGxpc3QnICUgKHNlbGYuX25hbWUpKQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJl
bW92ZShzZWxmLl9waWRfZmlsZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3VuaXR0ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGU1ZGU1MWE1MjNkYWEyODhh
MjZmYzI5YmRjMWIzMTc1NmFjMTYwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3Vu
aXR0ZXN0LnB5CkBAIC0wLDAgKzEsNDQgQEAKKyMgIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24g
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
IGFyZSBtZXQ6CisjICAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorIyAgICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMg
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjICBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisj
ICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisjICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyAgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjICBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3Rf
bW9jayBpbXBvcnQgTW9ja0hvc3QKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgUG9ydAorZnJv
bSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucworCitmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciBpbXBvcnQg
V2ViUGxhdGZvcm1UZXN0U2VydmVyCisKKworY2xhc3MgVGVzdFdlYlBsYXRmb3JtVGVzdFNlcnZl
cih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc3RhcnRfY21kKHNlbGYpOgorCisg
ICAgICAgIHBvcnQgPSBQb3J0KE1vY2tIb3N0KCksICJ0ZXN0IikKKyAgICAgICAgc2VydmVyID0g
V2ViUGxhdGZvcm1UZXN0U2VydmVyKHBvcnQsICJ3cHR0ZXN0IiwgIi9tb2NrL291dHB1dF9kaXIi
LCAiL21vY2svb3V0cHV0X2Rpci9waWQudHh0IikKKworICAgICAgICBzZXJ2ZXIuX3ByZXBhcmVf
Y29uZmlnKCkKKyAgICAgICAgc2VydmVyLl93c291dCA9IE5vbmUKKyAgICAgICAgc2VydmVyLl9z
cGF3bl9wcm9jZXNzKCkKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBzZXJ2ZXIuX3N0
b3BfcnVubmluZ19zZXJ2ZXIoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQppbmRleCBk
ZmM4Mzc2ZGUyYTBkYzJjYWI3ZThiMjhlMTdmYjM2YWM0NzQzZDdlLi4yY2IxYjA1NDRmMWY1NDhj
ZDgyYTg2ZmM4NWZjZTJkMmFhZjAwY2JiIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5w
eQpAQCAtNTksNiArNTksNyBAQCBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHNlcnZlcl9wcm9j
ZXNzCiBmcm9tIHdlYmtpdHB5LnBvcnQuZmFjdG9yeSBpbXBvcnQgUG9ydEZhY3RvcnkKIGZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGFwYWNoZV9odHRwX3NlcnZlcgog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgaHR0cF9zZXJ2ZXIKK2Zy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IHdlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgd2Vic29j
a2V0X3NlcnZlcgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC0xMjUs
NiArMTI2LDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBzZWxmLl9oZWxwZXIgPSBO
b25lCiAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyID0gTm9uZQogICAgICAgICBzZWxmLl93ZWJz
b2NrZXRfc2VydmVyID0gTm9uZQorICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2
ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX2ltYWdlX2RpZmZlciA9IE5vbmUKICAgICAgICAgc2Vs
Zi5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9j
ZXNzICAjIG92ZXJyaWRhYmxlIGZvciB0ZXN0aW5nCiAKQEAgLTg5NCw2ICs4OTYsMTggQEAgY2xh
c3MgUG9ydChvYmplY3QpOgogICAgICAgICBzZXJ2ZXIuc3RhcnQoKQogICAgICAgICBzZWxmLl93
ZWJzb2NrZXRfc2VydmVyID0gc2VydmVyCiAKKyAgICBkZWYgc3RhcnRfd2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyKHNlbGYsIGFkZGl0aW9uYWxfZGlycz1Ob25lLCBudW1iZXJfb2Zfc2VydmVycz1O
b25lKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIs
ICdBbHJlYWR5IHJ1bm5pbmcgYSBXZWIgUGxhdGZvcm0gVGVzdCBzZXJ2ZXIuJworCisgICAgICAg
IHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IHdlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
ci5XZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIoc2VsZiwgIndwdHdrIiwgc2VsZi5yZXN1bHRzX2RpcmVj
dG9yeSgpKQorICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIuc3RhcnQoKQor
CisgICAgZGVmIHdlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9kb2Nfcm9vdChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHdlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5kb2Nfcm9vdChzZWxmKSArIHNlbGYu
VEVTVF9QQVRIX1NFUEFSQVRPUgorCisgICAgZGVmIHdlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9i
YXNlX3VybChzZWxmKToKKyAgICAgICAgcmV0dXJuIHdlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5i
YXNlX3VybChzZWxmKQorCiAgICAgZGVmIGh0dHBfc2VydmVyX3N1cHBvcnRzX2lwdjYoc2VsZik6
CiAgICAgICAgICMgQ3lnd2luIGlzIHRoZSBvbmx5IHBsYXRmb3JtIHRvIHN0aWxsIHVzZSBBcGFj
aGUgMS4zLCB3aGljaCBvbmx5IHN1cHBvcnRzIElQVjQuCiAgICAgICAgICMgT25jZSBpdCBtb3Zl
cyB0byBBcGFjaGUgMiwgd2UgY2FuIGRyb3AgdGhpcyBtZXRob2QgYWx0b2dldGhlci4KQEAgLTkx
OSw2ICs5MzMsMTEgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5fd2Vi
c29ja2V0X3NlcnZlci5zdG9wKCkKICAgICAgICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIg
PSBOb25lCiAKKyAgICBkZWYgc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcjoKKyAgICAgICAgICAgIHNl
bGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlci5zdG9wKCkKKyAgICAgICAgICAgIHNlbGYuX3dl
Yl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IE5vbmUKKwogICAgIGRlZiBleGl0X2NvZGVfZnJvbV9z
dW1tYXJpemVkX3Jlc3VsdHMoc2VsZiwgdW5leHBlY3RlZF9yZXN1bHRzKToKICAgICAgICAgIiIi
R2l2ZW4gc3VtbWFyaXplZCByZXN1bHRzLCBjb21wdXRlIHRoZSBleGl0IGNvZGUgdG8gYmUgcmV0
dXJuZWQgYnkgbmV3LXJ1bi13ZWJraXQtdGVzdHMuCiAgICAgICAgIEJvdHMgdHVybiByZWQgd2hl
biB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBub24temVybyB2YWx1ZS4gQnkgZGVmYXVsdCwgcmV0
dXJuIHRoZSBudW1iZXIgb2YgcmVncmVzc2lvbnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJp
dmVyLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYWY0NzBmNTM3MjA2
N2NmZTE3NDdmNzBlZTE5ODU5NzJhYmUzNDUyMS4uY2M0ZDliMzdkNjAyODA5ZTY2ZDFiZDE2NDhk
OTE3NjZlYTlkMDdmMQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKQEAgLTM3LDYgKzM3
LDcgQEAgaW1wb3J0IG9zCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgcGF0
aAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnByb2ZpbGVyIGltcG9ydCBQcm9maWxlckZh
Y3RvcnkKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMud2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyIGltcG9ydCBXZWJQbGF0Zm9ybVRlc3RTZXJ2ZXIKIAogCiBfbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC0xNTUsNiArMTU2LDkgQEAgY2xhc3MgRHJpdmVyKG9i
amVjdCk6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9wcm9maWxlciA9IE5vbmUK
IAorICAgICAgICBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9kb2Nfcm9vdCA9IHNlbGYu
X3BvcnQud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX2RvY19yb290KCkKKyAgICAgICAgc2VsZi53
ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfYmFzZV91cmwgPSBzZWxmLl9wb3J0LndlYl9wbGF0Zm9y
bV90ZXN0X3NlcnZlcl9iYXNlX3VybCgpCisKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAg
ICAgc2VsZi5zdG9wKCkKIApAQCAtMjM4LDggKzI0MiwxNCBAQCBjbGFzcyBEcml2ZXIob2JqZWN0
KToKICAgICBkZWYgaXNfaHR0cF90ZXN0KHNlbGYsIHRlc3RfbmFtZSk6CiAgICAgICAgIHJldHVy
biB0ZXN0X25hbWUuc3RhcnRzd2l0aChzZWxmLkhUVFBfRElSKSBhbmQgbm90IHRlc3RfbmFtZS5z
dGFydHN3aXRoKHNlbGYuSFRUUF9MT0NBTF9ESVIpCiAKKyAgICBkZWYgaXNfd2ViX3BsYXRmb3Jt
X3Rlc3Qoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgcmV0dXJuIHRlc3RfbmFtZS5zdGFydHN3
aXRoKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX2RvY19yb290KQorCiAgICAgZGVmIHRl
c3RfdG9fdXJpKHNlbGYsIHRlc3RfbmFtZSk6CiAgICAgICAgICIiIkNvbnZlcnQgYSB0ZXN0IG5h
bWUgdG8gYSBVUkkuIiIiCisgICAgICAgIGlmIHNlbGYuaXNfd2ViX3BsYXRmb3JtX3Rlc3QodGVz
dF9uYW1lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
cl9iYXNlX3VybCArIHRlc3RfbmFtZVtsZW4oc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJf
ZG9jX3Jvb3QpOl0KKwogICAgICAgICBpZiBub3Qgc2VsZi5pc19odHRwX3Rlc3QodGVzdF9uYW1l
KToKICAgICAgICAgICAgIHJldHVybiBwYXRoLmFic3BhdGhfdG9fdXJpKHNlbGYuX3BvcnQuaG9z
dC5wbGF0Zm9ybSwgc2VsZi5fcG9ydC5hYnNwYXRoX2Zvcl90ZXN0KHRlc3RfbmFtZSkpCiAKQEAg
LTI2Myw2ICsyNzMsOCBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgICAgIGlmIG5v
dCBwcmVmaXguZW5kc3dpdGgoJy8nKToKICAgICAgICAgICAgICAgICBwcmVmaXggKz0gJy8nCiAg
ICAgICAgICAgICByZXR1cm4gdXJpW2xlbihwcmVmaXgpOl0KKyAgICAgICAgaWYgdXJpLnN0YXJ0
c3dpdGgoc2VsZi53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXJfYmFzZV91cmwpOgorICAgICAgICAg
ICAgcmV0dXJuIHVyaS5yZXBsYWNlKHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX2Jhc2Vf
dXJsLCBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9kb2Nfcm9vdCkKICAgICAgICAgaWYg
dXJpLnN0YXJ0c3dpdGgoImh0dHA6Ly8iKToKICAgICAgICAgICAgIHJldHVybiB1cmkucmVwbGFj
ZSgnaHR0cDovLzEyNy4wLjAuMTo4MDAwLycsIHNlbGYuSFRUUF9ESVIpCiAgICAgICAgIGlmIHVy
aS5zdGFydHN3aXRoKCJodHRwczovLyIpOgpAQCAtMzk1LDcgKzQwNyw3IEBAIGNsYXNzIERyaXZl
cihvYmplY3QpOgogICAgICAgICAjIEZJWE1FOiBwZXJmb3JtYW5jZSB0ZXN0cyBwYXNzIGluIGZ1
bGwgVVJMcyBpbnN0ZWFkIG9mIHRlc3QgbmFtZXMuCiAgICAgICAgIGlmIGRyaXZlcl9pbnB1dC50
ZXN0X25hbWUuc3RhcnRzd2l0aCgnaHR0cDovLycpIG9yIGRyaXZlcl9pbnB1dC50ZXN0X25hbWUu
c3RhcnRzd2l0aCgnaHR0cHM6Ly8nKSAgb3IgZHJpdmVyX2lucHV0LnRlc3RfbmFtZSA9PSAoJ2Fi
b3V0OmJsYW5rJyk6CiAgICAgICAgICAgICBjb21tYW5kID0gZHJpdmVyX2lucHV0LnRlc3RfbmFt
ZQotICAgICAgICBlbGlmIHNlbGYuaXNfaHR0cF90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUp
OgorICAgICAgICBlbGlmIHNlbGYuaXNfaHR0cF90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUp
IG9yIHNlbGYuaXNfd2ViX3BsYXRmb3JtX3Rlc3QoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSk6CiAg
ICAgICAgICAgICBjb21tYW5kID0gc2VsZi50ZXN0X3RvX3VyaShkcml2ZXJfaW5wdXQudGVzdF9u
YW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYuX3BvcnQuYWJz
cGF0aF9mb3JfdGVzdChkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkKaW5kZXggMmEyMTgzNzMyMzE5OTAyNjBi
NWVlNjQxOTBkNWY5M2NiYTQwOWMwYS4uNzlhMjcyNDgzYmUyODUxODU1NDJjMzJiZmVkOGE4MTE5
OTNmNjEyMSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91
bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0
ZXN0LnB5CkBAIC0xMTMsNiArMTEzLDcgQEAgY2xhc3MgRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnRlc3RfdG9fdXJpKCdmb28v
YmFyLmh0bWwnKSwgJ2ZpbGU6Ly8lcy9mb28vYmFyLmh0bWwnICUgcG9ydC5sYXlvdXRfdGVzdHNf
ZGlyKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnRlc3RfdG9fdXJpKCdodHRw
L3Rlc3RzL2Zvby5odG1sJyksICdodHRwOi8vMTI3LjAuMC4xOjgwMDAvZm9vLmh0bWwnKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci50ZXN0X3RvX3VyaSgnaHR0cC90ZXN0cy9zc2wv
YmFyLmh0bWwnKSwgJ2h0dHBzOi8vMTI3LjAuMC4xOjg0NDMvc3NsL2Jhci5odG1sJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudGVzdF90b191cmkoJ2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvZm9vL2Jhci5odG1sJyksICdodHRwOi8vbG9jYWxob3N0Ojg4MDAvZm9v
L2Jhci5odG1sJykKIAogICAgIGRlZiB0ZXN0X3VyaV90b190ZXN0KHNlbGYpOgogICAgICAgICBw
b3J0ID0gc2VsZi5tYWtlX3BvcnQoKQpAQCAtMTIwLDYgKzEyMSw3IEBAIGNsYXNzIERyaXZlclRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci51
cmlfdG9fdGVzdCgnZmlsZTovLyVzL2Zvby9iYXIuaHRtbCcgJSBwb3J0LmxheW91dF90ZXN0c19k
aXIoKSksICdmb28vYmFyLmh0bWwnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRyaXZlci51
cmlfdG9fdGVzdCgnaHR0cDovLzEyNy4wLjAuMTo4MDAwL2Zvby5odG1sJyksICdodHRwL3Rlc3Rz
L2Zvby5odG1sJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkcml2ZXIudXJpX3RvX3Rlc3Qo
J2h0dHBzOi8vMTI3LjAuMC4xOjg0NDMvc3NsL2Jhci5odG1sJyksICdodHRwL3Rlc3RzL3NzbC9i
YXIuaHRtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHJpdmVyLnVyaV90b190ZXN0KCdo
dHRwOi8vbG9jYWxob3N0Ojg4MDAvZm9vL2Jhci5odG1sJyksICdpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2Zvby9iYXIuaHRtbCcpCiAKICAgICBkZWYgdGVzdF9yZWFkX2Jsb2NrKHNl
bGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9D
aGFuZ2VMb2cKaW5kZXggNTY3NTk3YjIxZDJhM2Q0NTAxYTQ2N2IwY2I3MmFkMjkzNDlkYjhiNi4u
YTgyNzI4ZWQwOTczYjU0MWFjZjEyYjVlMTcyOThmMGM1YzE0NDgwNSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUtMDEtMjYgIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBJbnRlZ3JhdGUgV1Ag
cHl0aG9uIHNlcnZlciBpbnRvIFdlYktpdCB0ZXN0IGZyYW1ld29yaworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MDk0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgIENvbnRhaW5zIHBhcmFtZXRlcnMgb2Ygd2Vi
IHBsYXRmb3JtIHRlc3Qgc2VydmVyLgorCisgICAgICAgICogcmVzb3VyY2VzL2NvbmZpZy5qc29u
OiBBZGRlZC4KKwogMjAxNS0wMS0yMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgdzNjL2NhbnZhcy9yZXNvdXJjZXMvIGNvbW1vbiBy
ZXNvdXJjZXMgdG8gdzNjL3Jlc291cmNlcy8uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvcmVzb3VyY2VzL2NvbmZpZy5qc29uIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3Jlc291cmNlcy9jb25maWcuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZTMwZjFmY2ZlZGI5NTI0ODdjZWQx
MWIzNTczYjVmYTMyZDQ4NTdiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3Jlc291cmNlcy9jb25maWcuanNvbgpAQCAtMCwwICsxLDIxIEBACit7Imhvc3QiOiAi
bG9jYWxob3N0IiwKKyAicG9ydHMiOnsiaHR0cCI6Wzg4MDAsIDg4MDFdLAorICAgICAgICAgICJo
dHRwcyI6Wzg0NDNdLAorICAgICAgICAgICJ3cyI6WzQ5MDAxXX0sCisgImNoZWNrX3N1YmRvbWFp
bnMiOiBmYWxzZSwKKyAibG9nX2xldmVsIjoiZGVidWciLAorICJiaW5kX2hvc3RuYW1lIjogZmFs
c2UsCisgInNzbCI6IHsidHlwZSI6ICJvcGVuc3NsIiwKKyAgICAgICAgICJlbmNyeXB0X2FmdGVy
X2Nvbm5lY3QiOiBmYWxzZSwKKyAgICAgICAgICJvcGVuc3NsIjogeworICAgICAgICAgICAgICJv
cGVuc3NsX2JpbmFyeSI6ICJvcGVuc3NsIiwKKyAgICAgICAgICAgICAiYmFzZV9wYXRoIjogIl9j
ZXJ0cyIsCisgICAgICAgICAgICAgImZvcmNlX3JlZ2VuZXJhdGUiOiBmYWxzZQorICAgICAgICAg
fSwKKyAgICAgICAgICJwcmVnZW5lcmF0ZWQiOiB7CisgICAgICAgICAgICAgImhvc3Rfa2V5X3Bh
dGgiOiBudWxsLAorICAgICAgICAgICAgICJob3N0X2NlcnRfcGF0aCI6IG51bGwKKyAgICAgICAg
IH0sCisgICAgICAgICAibm9uZSI6IHt9CisgICAgICAgIH0KK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>