<?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>84008</bug_id>
          
          <creation_ts>2012-04-15 23:27:20 -0700</creation_ts>
          <short_desc>Add public page loading performance tests using web-page-replay</short_desc>
          <delta_ts>2012-07-27 00:14:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>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>
          <dependson>86191</dependson>
    
    <dependson>87326</dependson>
    
    <dependson>87893</dependson>
          <blocked>77037</blocked>
    
    <blocked>88041</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>dpranke</cc>
    
    <cc>efidler</cc>
    
    <cc>eric</cc>
    
    <cc>gregsimon</cc>
    
    <cc>hausmann</cc>
    
    <cc>jhammel</cc>
    
    <cc>joel.maher</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>slewis</cc>
    
    <cc>svillar</cc>
    
    <cc>tony</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>602912</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-15 23:27:20 -0700</bug_when>
    <thetext>Google&apos;s page cycler and Apple&apos;s PLT test suites are both private due to copyright law restrictions, and people outside of these two organizations cannot see the contents. This severely limits the utility and the effectiveness of these test suites because not all contributors can run them locally.

We should add a publicly distributable version of these two test suites that tests page loading time of real websites. The idea here is to load pages out of archive.org. Because archive.org provides a content snapshot at a specific time, we can always pull the same data by simply specifying the URL, eliminating the need for distributing the page contents with the test suite but still allowing all contributors to obtain the same page test data when running the tests. Credit: Greg Simon for this clever idea.

In order to avoid DoS&apos;ing archive.org, we can use web-page-replay: http://code.google.com/p/web-page-replay/ to cache data locally and make any other necessary modifications to the page for the purpose of performance tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602916</commentid>
    <comment_count>1</comment_count>
      <attachid>137280</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-15 23:31:12 -0700</bug_when>
    <thetext>Created attachment 137280
Adds basic replay mechanism</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602918</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-15 23:32:38 -0700</bug_when>
    <thetext>Everything in Tools/WebPageReplay has been imported from http://code.google.com/p/web-page-replay/.

I still need to do some polishing but the basic machinery is there already. You can add a bunch of URLs to Replay/replaytest.list and run-perf-tests will automatically create replay tests for you :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602922</commentid>
    <comment_count>3</comment_count>
      <attachid>137283</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-15 23:43:13 -0700</bug_when>
    <thetext>Created attachment 137283
Missing replaytest.py

Note: to use this patch, you have to go to Mac&apos;s system preference and setup http/https proxies at 8080 and 8413</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615094</commentid>
    <comment_count>4</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-05-03 01:38:43 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Everything in Tools/WebPageReplay has been imported from http://code.google.com/p/web-page-replay/.

Is there any chance that it will work on linux if I install the dependencies?  

&gt; I still need to do some polishing but the basic machinery is there already. You can add a bunch of URLs to Replay/replaytest.list and run-perf-tests will automatically create replay tests for you :)

Hmm, is the ResourceLoadDelegate.mm the only mac specific change?

Btw, do you have a recent version of the patch or the latest sits here? :)

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615132</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-03 03:27:02 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; I still need to do some polishing but the basic machinery is there already. You can add a bunch of URLs to Replay/replaytest.list and run-perf-tests will automatically create replay tests for you :)
&gt; 
&gt; Hmm, is the ResourceLoadDelegate.mm the only mac specific change?

I suspect a similar change needs to be made on all ports.

&gt; Btw, do you have a recent version of the patch or the latest sits here? :)

I&apos;m working on it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615761</commentid>
    <comment_count>6</comment_count>
      <attachid>140121</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-03 16:17:58 -0700</bug_when>
    <thetext>Created attachment 140121
work in progress

Something is broken on web-page-replay side, and I can&apos;t get it to work. Everything results in 404 :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615762</commentid>
    <comment_count>7</comment_count>
      <attachid>140122</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-03 16:19:13 -0700</bug_when>
    <thetext>Created attachment 140122
work in progress (got rid of the useless change log entry)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621050</commentid>
    <comment_count>8</comment_count>
      <attachid>141276</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-10 15:13:50 -0700</bug_when>
    <thetext>Created attachment 141276
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632167</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-23 16:29:26 -0700</bug_when>
    <thetext>Here&apos;s a list of popular 60+ web pages (except ad provider, porn, etc...) that were available on archive.org:

http://web.archive.org/web/20110729013436/http://www.google.com/
http://web.archive.org/web/20110101045027/http://www.youtube.com/
http://web.archive.org/web/20101029215059/http://www.yahoo.com/
http://web.archive.org/web/20110726050652/http://www.baidu.com/
http://web.archive.org/web/20110713210358/http://news.baidu.com/
http://web.archive.org/web/20110729021258/http://en.wikipedia.org/wiki/Main_Page
http://web.archive.org/web/20110716004235/http://en.wikipedia.org/wiki/The_Beatles
http://web.archive.org/web/20110131013707/http://www.qq.com/
http://web.archive.org/web/20110729032327/http://www.amazon.com/
http://web.archive.org/web/20110729033222/http://googleblog.blogspot.com/
http://web.archive.org/web/20100209183352/http://www.taobao.com/index_global.php
http://web.archive.org/web/20110726224242/http://www.sina.com.cn/
http://web.archive.org/web/20110728224518/http://www.yahoo.co.jp/
http://web.archive.org/web/20110728062744/http://www.msn.com/
http://web.archive.org/web/20110729040307/http://wordpress.com/
http://web.archive.org/web/20110721134904/http://en.blog.wordpress.com/
http://web.archive.org/web/20110721020325/http://www.google.com.hk/
http://web.archive.org/web/20110729062331/http://www.ebay.com/
http://web.archive.org/web/20110721133155/http://www.yandex.ru/
http://web.archive.org/web/20110720113906/http://www.163.com/
http://web.archive.org/web/20110728224522/http://weibo.com/
http://web.archive.org/web/20110426114921/http://weibo.com/yaochen
http://web.archive.org/web/20110630155134/http://www.bing.com/news
http://web.archive.org/web/20110712090452/http://windows.microsoft.com/en-US/windows/home
http://web.archive.org/web/20110723131535/http://news.soso.com/
http://web.archive.org/web/20110721002024/http://staff.tumblr.com/
http://web.archive.org/web/20110728143621/https://www.paypal.com/
http://web.archive.org/web/20110608070205/https://www.apple.com/
http://web.archive.org/web/20110729034928/http://www.google.ru/
http://web.archive.org/web/20110728224803/http://www.sohu.com/
http://web.archive.org/web/20110725235527/http://sfbay.craigslist.org/
http://web.archive.org/web/20110624121311/http://sfbay.craigslist.org/apa/
http://web.archive.org/web/20110728165802/http://www.imdb.com/
http://web.archive.org/web/20110729013439/http://www.bbc.co.uk/
http://web.archive.org/web/20110728190248/http://www.tudou.com/
http://web.archive.org/web/20100613214720/http://sl65amg.blog32.fc2.com/
http://web.archive.org/web/20110708184935/http://blog.goo.ne.jp/isehakusandou
http://web.archive.org/web/20110721233757/http://www.ifeng.com/
http://web.archive.org/web/20110728092214/http://www.ask.com/
http://liveweb.archive.org/http://www.ask.com/wiki
http://web.archive.org/web/20110726103516/http://www.youku.com/
http://web.archive.org/web/20110710095406/http://imgur.com/gallery
http://web.archive.org/web/20110729013512/http://www.cnn.com/
http://web.archive.org/web/20110716175917/http://www.hao123.com/
http://web.archive.org/web/20110728094718/http://www.aol.com/
http://web.archive.org/web/20110728190308/http://espn.go.com/
http://web.archive.org/web/20110724020539/http://www.alibaba.com/
http://web.archive.org/web/20110725075627/http://www.avg.com/us-en/homepage
http://web.archive.org/web/20110723060303/http://www.rakuten.co.jp/
http://web.archive.org/web/20110707075549/http://www.about.com/travel/
http://web.archive.org/web/20110727034228/http://www.chinaz.com/
http://web.archive.org/web/20110729082516/http://wordpress.org/
http://web.archive.org/web/20110722032538/http://official.ameba.jp/ranking/day/officialAccessRankingTop.html
http://web.archive.org/web/20110709073905/https://www.alipay.com/
http://web.archive.org/web/20110722061518/http://www.uol.com.br/
http://web.archive.org/web/20110721223556/http://www.amazon.co.jp/
http://web.archive.org/web/20110512210519/http://stackoverflow.com/
http://web.archive.org/web/20110729043303/http://www.huffingtonpost.com/
http://web.archive.org/web/20100627183250/http://www.cnet.com/
http://web.archive.org/web/20110416045031/http://www.dailymotion.com/us</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634514</commentid>
    <comment_count>10</comment_count>
      <attachid>144180</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-25 18:40:23 -0700</bug_when>
    <thetext>Created attachment 144180
work in progress 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637412</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-30 10:51:10 -0700</bug_when>
    <thetext>It appears that some of the pages can&apos;t be loaded properly in DRT using web-page-replay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637867</commentid>
    <comment_count>12</comment_count>
      <attachid>144957</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-30 17:44:46 -0700</bug_when>
    <thetext>Created attachment 144957
Initial implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637914</commentid>
    <comment_count>13</comment_count>
      <attachid>144957</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-30 18:48:31 -0700</bug_when>
    <thetext>Comment on attachment 144957
Initial implementation

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

Patch generally looks good, just some minor comments

&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit.py:533
&gt; +            command = driver_input.test_name

Seems like this should just go in is_http_test()? I understand that you might be thinking &apos;that&apos;s just for tests in the http/ directory&apos;, but it&apos;s probably more confusing this way.

&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:72
&gt; +        if not output or output.text == None or output.error:

when would output be None here? driver.run_test() should always return something; can you call run_failed() outside of run()?

&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:176
&gt; +    def run(self, port, driver, time_out_ms):

Does it make more sense to pass the port to __init__()?

&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:210
&gt; +        return driver.run_test(DriverInput(self.path_or_url(), time_out_ms, None, False))

Maybe this should go up into PerfTest() and then PerfTest.run() can just call this to avoid the repetition?

&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:219
&gt; +        replay_path = os.path.join(os.path.dirname(webkitpy.thirdparty.autoinstalled.webpagereplay.__file__), &apos;replay.py&apos;)

can you get this from just webkitpy.thirdparty.autoinstalled.webpagereplay.replay.__file__ ?

&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:230
&gt; +                connection = socket.create_connection((&apos;localhost&apos;, &apos;8080&apos;), timeout=100)

timeouts are in seconds, are you really trying to wait for 100 seconds and retrying 100 times, or did you mean for this to be msecs?

&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:239
&gt; +            self._process.send_signal(signal.SIGINT)

curious why this is SIGINT instead of TERM or KILL?

&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:311
&gt; +            filesystem = driver._port.host.filesystem

You can just access port.host.filesystem directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638855</commentid>
    <comment_count>14</comment_count>
      <attachid>144957</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-31 17:55:44 -0700</bug_when>
    <thetext>Comment on attachment 144957
Initial implementation

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit.py:533
&gt;&gt; +            command = driver_input.test_name
&gt; 
&gt; Seems like this should just go in is_http_test()? I understand that you might be thinking &apos;that&apos;s just for tests in the http/ directory&apos;, but it&apos;s probably more confusing this way.

That&apos;s problematic because of code like:
    def test_to_uri(self, test_name):
        &quot;&quot;&quot;Convert a test name to a URI.&quot;&quot;&quot;
        if not self.is_http_test(test_name):
            return path.abspath_to_uri(self._port.abspath_for_test(test_name))

I&apos;ve added is_external_http_test to base.py instead.

&gt;&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:72
&gt;&gt; +        if not output or output.text == None or output.error:
&gt; 
&gt; when would output be None here? driver.run_test() should always return something; can you call run_failed() outside of run()?

run_single will return None if the web page replay didn&apos;t start properly.
Moved the condition to PageLoadingPerfTest.run.

&gt;&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:176
&gt;&gt; +    def run(self, port, driver, time_out_ms):
&gt; 
&gt; Does it make more sense to pass the port to __init__()?

That&apos;s a good idea how that both run and prepare take port.

&gt;&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:210
&gt;&gt; +        return driver.run_test(DriverInput(self.path_or_url(), time_out_ms, None, False))
&gt; 
&gt; Maybe this should go up into PerfTest() and then PerfTest.run() can just call this to avoid the repetition?

Done.

&gt;&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:219
&gt;&gt; +        replay_path = os.path.join(os.path.dirname(webkitpy.thirdparty.autoinstalled.webpagereplay.__file__), &apos;replay.py&apos;)
&gt; 
&gt; can you get this from just webkitpy.thirdparty.autoinstalled.webpagereplay.replay.__file__ ?

Done.

&gt;&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:230
&gt;&gt; +                connection = socket.create_connection((&apos;localhost&apos;, &apos;8080&apos;), timeout=100)
&gt; 
&gt; timeouts are in seconds, are you really trying to wait for 100 seconds and retrying 100 times, or did you mean for this to be msecs?

Fixed. It appears that create_connection bails out immediately when there&apos;s nobody listening on the specified port.
So I&apos;ve added an explicit sleep of 1s to avoid the busy loop.

&gt;&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:239
&gt;&gt; +            self._process.send_signal(signal.SIGINT)
&gt; 
&gt; curious why this is SIGINT instead of TERM or KILL?

Changed it to SIGTERM.

&gt;&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:311
&gt;&gt; +            filesystem = driver._port.host.filesystem
&gt; 
&gt; You can just access port.host.filesystem directly.

Yeah, I forgot to update that. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638876</commentid>
    <comment_count>15</comment_count>
      <attachid>145188</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-31 18:21:38 -0700</bug_when>
    <thetext>Created attachment 145188
Addressed Dirk&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638918</commentid>
    <comment_count>16</comment_count>
      <attachid>145188</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-31 19:38:49 -0700</bug_when>
    <thetext>Comment on attachment 145188
Addressed Dirk&apos;s comments.

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:134
&gt; +

Turns out I don&apos;t want this ... see below (and sorry!)

&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit.py:533
&gt; +            command = driver_input.test_name

Okay, I see the problem here, which is that driver_input.test_name isn&apos;t actually a test_name, it&apos;s a full URL. DriverInputs aren&apos;t supposed to be full URLs, they&apos;re supposed to be test names :). 

However, it would be lame if that kept you from using the driver, so we need some other way of distinguishing that this is a URL and not a test name. I&apos;m not sure what the best way to do that is yet, and I don&apos;t want to block you on this ... Can you add a #FIXME for now, flip this clause so that it&apos;s tested first, and go back to what you were doing before? e.g.:

# FIXME: perf tests can pass in full URLs, not just test names ...
if driver_input.test_name.startswith(&apos;http://&apos;) or driver_input.test_name.startswith(&apos;https://&apos;):
   command = driver_input.test_name
else:
   ...

sorry for the back-and-forth on this.

Everything else looks fine. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638920</commentid>
    <comment_count>17</comment_count>
      <attachid>145188</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-31 19:43:23 -0700</bug_when>
    <thetext>Comment on attachment 145188
Addressed Dirk&apos;s comments.

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/webkit.py:533
&gt;&gt; +            command = driver_input.test_name
&gt; 
&gt; Okay, I see the problem here, which is that driver_input.test_name isn&apos;t actually a test_name, it&apos;s a full URL. DriverInputs aren&apos;t supposed to be full URLs, they&apos;re supposed to be test names :). 
&gt; 
&gt; However, it would be lame if that kept you from using the driver, so we need some other way of distinguishing that this is a URL and not a test name. I&apos;m not sure what the best way to do that is yet, and I don&apos;t want to block you on this ... Can you add a #FIXME for now, flip this clause so that it&apos;s tested first, and go back to what you were doing before? e.g.:
&gt; 
&gt; # FIXME: perf tests can pass in full URLs, not just test names ...
&gt; if driver_input.test_name.startswith(&apos;http://&apos;) or driver_input.test_name.startswith(&apos;https://&apos;):
&gt;    command = driver_input.test_name
&gt; else:
&gt;    ...
&gt; 
&gt; sorry for the back-and-forth on this.
&gt; 
&gt; Everything else looks fine. Thanks!

Okay. WIll do that. I think we should just rename test_name to path_or_url.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638936</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-31 20:19:37 -0700</bug_when>
    <thetext>Committed r119188: &lt;http://trac.webkit.org/changeset/119188&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638938</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-31 20:22:36 -0700</bug_when>
    <thetext>Thanks for the review, Dirk. I&apos;m thrilled to land this patch :) An open performance test suite is coming!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639475</commentid>
    <comment_count>20</comment_count>
    <who name="Jeff Hammel">jhammel</who>
    <bug_when>2012-06-01 09:59:58 -0700</bug_when>
    <thetext>Mozilla-side work recorded here: https://bugzilla.mozilla.org/show_bug.cgi?id=760574</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680184</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-27 00:14:53 -0700</bug_when>
    <thetext>FYI, I&apos;ve added some explanation about this on http://trac.webkit.org/wiki/Writing%20Performance%20Tests</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137280</attachid>
            <date>2012-04-15 23:31:12 -0700</date>
            <delta_ts>2012-05-03 16:17:58 -0700</delta_ts>
            <desc>Adds basic replay mechanism</desc>
            <filename>bug-84008-20120415233110.patch</filename>
            <type>text/plain</type>
            <size>967293</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExNDIyNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE2OTEgQEAKKzIwMTItMDQtMTUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgQWRkIHB1YmxpYyBwYWdlIGxvYWRpbmcgcGVyZm9ybWFuY2UgdGVzdHMgdXNp
bmcgd2ViLXBhZ2UtcmVwbGF5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04NDAwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Jlc291cmNlTG9hZERlbGVnYXRlLm1tOgor
ICAgICAgICAoaXNMb2NhbGhvc3QpOgorICAgICAgICAoLVtSZXNvdXJjZUxvYWREZWxlZ2F0ZSB3
ZWJWaWV3OnJlc291cmNlOndpbGxTZW5kUmVxdWVzdDpyZWRpcmVjdFJlc3BvbnNlOmZyb21EYXRh
U291cmNlOl0pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
d2Via2l0LnB5OgorICAgICAgICAoV2ViS2l0RHJpdmVyLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lu
cHV0KToKKyAgICAgICAgKFdlYktpdERyaXZlci5fcHJvY2Vzc19zdGRvdXRfbGluZSk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdC5weToKKyAg
ICAgICAgKFBlcmZUZXN0LnByZXBhcmUpOgorICAgICAgICAoUGVyZlRlc3QpOgorICAgICAgICAo
UGVyZlRlc3QucnVuKToKKyAgICAgICAgKFBhZ2VMb2FkaW5nUGVyZlRlc3QucnVuX3NpbmdsZSk6
CisgICAgICAgIChQYWdlTG9hZGluZ1BlcmZUZXN0KToKKyAgICAgICAgKFBhZ2VMb2FkaW5nUGVy
ZlRlc3QucnVuKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3Rz
L3BlcmZ0ZXN0c3J1bm5lci5weToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fY29sbGVjdF90
ZXN0cy5faXNfdGVzdF9maWxlX29yX2xpc3QpOgorICAgICAgICAoUGVyZlRlc3RzUnVubmVyLl9j
b2xsZWN0X3Rlc3RzKToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fcnVuX3Rlc3RzX3NldCk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNy
dW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgICh0ZXN0X3J1bl90ZXN0X3NldF9raWxsc19kcnRf
cGVyX3J1bik6CisgICAgICAgICogV2ViUGFnZVJlcGxheTogQWRkZWQuCisgICAgICAgICogV2Vi
UGFnZVJlcGxheS9DT1BZSU5HOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L2NhY2hl
bWlzc2FyY2hpdmUucHk6IEFkZGVkLgorICAgICAgICAoZm9ybWF0X3JlcXVlc3QpOgorICAgICAg
ICAoQ2FjaGVNaXNzQXJjaGl2ZSk6CisgICAgICAgIChDYWNoZU1pc3NBcmNoaXZlLl9faW5pdF9f
KToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmUucmVjb3JkX2NhY2hlX21pc3MpOgorICAgICAg
ICAoQ2FjaGVNaXNzQXJjaGl2ZS5zZXRfdXJsc19saXN0KToKKyAgICAgICAgKENhY2hlTWlzc0Fy
Y2hpdmUucmVjb3JkX3JlcXVlc3QpOgorICAgICAgICAoQ2FjaGVNaXNzQXJjaGl2ZS5fcmVjb3Jk
X3JlcXVlc3QpOgorICAgICAgICAoQ2FjaGVNaXNzQXJjaGl2ZS5yZXF1ZXN0X2RpZmYpOgorICAg
ICAgICAoQ2FjaGVNaXNzQXJjaGl2ZS5fbWF0Y2hfdXJscyk6CisgICAgICAgIChDYWNoZU1pc3NB
cmNoaXZlLl9hcHBlbmRfYXJjaGl2ZSk6CisgICAgICAgIChDYWNoZU1pc3NBcmNoaXZlLl9fcmVw
cl9fKToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmUuUGVyc2lzdCk6CisgICAgICAgIChDYWNo
ZU1pc3NBcmNoaXZlLmdldF90b3RhbF9yZWZlcmVycyk6CisgICAgICAgIChDYWNoZU1pc3NBcmNo
aXZlLmdldF90b3RhbF9jYWNoZV9taXNzZXMpOgorICAgICAgICAoQ2FjaGVNaXNzQXJjaGl2ZS5n
ZXRfdG90YWxfcmVmZXJlcl9jYWNoZV9taXNzZXMpOgorICAgICAgICAoQ2FjaGVNaXNzQXJjaGl2
ZS5nZXRfY2FjaGVfbWlzc2VzKToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmUuZ2V0X2FsbF9j
YWNoZV9taXNzZXMpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvY2FjaGVtaXNzYXJjaGl2ZV90
ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmVUZXN0KToKKyAgICAgICAg
KENhY2hlTWlzc0FyY2hpdmVUZXN0LnNldFVwKToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmVU
ZXN0LmxvYWRfbW9ja19hcmNoaXZlKToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmVUZXN0LnRl
c3RfaW5pdCk6CisgICAgICAgIChDYWNoZU1pc3NBcmNoaXZlVGVzdC50ZXN0X3JlY29yZF9jYWNo
ZV9taXNzKToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmVUZXN0LnRlc3RfX21hdGNoX3VybHMp
OgorICAgICAgICAoQ2FjaGVNaXNzQXJjaGl2ZVRlc3QudGVzdF9nZXRfdG90YWxfcmVmZXJlcnNf
c21hbGwpOgorICAgICAgICAoQ2FjaGVNaXNzQXJjaGl2ZVRlc3QudGVzdF9nZXRfdG90YWxfcmVm
ZXJlcnNfbGFyZ2UpOgorICAgICAgICAoQ2FjaGVNaXNzQXJjaGl2ZVRlc3QudGVzdF9nZXRfdG90
YWxfY2FjaGVfbWlzc2VzKToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmVUZXN0LnRlc3RfZ2V0
X3RvdGFsX3JlZmVyZXJfY2FjaGVfbWlzc2VzKToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmVU
ZXN0LnRlc3RfcmVjb3JkX3JlcXVlc3QpOgorICAgICAgICAoQ2FjaGVNaXNzQXJjaGl2ZVRlc3Qu
dGVzdF9nZXRfY2FjaGVfbWlzc2VzKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L2N1c3RvbWhh
bmRsZXJzLnB5OiBBZGRlZC4KKyAgICAgICAgKFNpbXBsZVJlc3BvbnNlKToKKyAgICAgICAgKEpz
b25SZXNwb25zZSk6CisgICAgICAgIChDdXN0b21IYW5kbGVycyk6CisgICAgICAgIChDdXN0b21I
YW5kbGVycy5fX2luaXRfXyk6CisgICAgICAgIChDdXN0b21IYW5kbGVycy5oYW5kbGUpOgorICAg
ICAgICAoQ3VzdG9tSGFuZGxlcnMuZ2V0X2dlbmVyYXRvcl91cmxfcmVzcG9uc2VfY29kZSk6Cisg
ICAgICAgIChDdXN0b21IYW5kbGVycy5oYW5kbGVfcG9zc2libGVfcG9zdF9pbWFnZSk6CisgICAg
ICAgIChDdXN0b21IYW5kbGVycy5hZGRfc2VydmVyX21hbmFnZXJfaGFuZGxlcik6CisgICAgICAg
IChDdXN0b21IYW5kbGVycy5oYW5kbGVfc2VydmVyX21hbmFnZXJfY29tbWFuZCk6CisgICAgICAg
ICogV2ViUGFnZVJlcGxheS9kYWVtb25zZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAoRGFlbW9u
U2VydmVyKToKKyAgICAgICAgKERhZW1vblNlcnZlci53aGljaCk6CisgICAgICAgIChEYWVtb25T
ZXJ2ZXIuX19lbnRlcl9fKToKKyAgICAgICAgKERhZW1vblNlcnZlci5fX2V4aXRfXyk6CisgICAg
ICAgICogV2ViUGFnZVJlcGxheS9kZXRlcm1pbmlzdGljLmpzOiBBZGRlZC4KKyAgICAgICAgKiBX
ZWJQYWdlUmVwbGF5L2Ruc3Byb3h5LnB5OiBBZGRlZC4KKyAgICAgICAgKERuc1Byb3h5RXhjZXB0
aW9uKToKKyAgICAgICAgKFJlYWxEbnNMb29rdXApOgorICAgICAgICAoUmVhbERuc0xvb2t1cC5f
X2luaXRfXyk6CisgICAgICAgIChSZWFsRG5zTG9va3VwLl9fY2FsbF9fKToKKyAgICAgICAgKFJl
YWxEbnNMb29rdXAuQ2xlYXJDYWNoZSk6CisgICAgICAgIChQcml2YXRlSXBEbnNMb29rdXApOgor
ICAgICAgICAoUHJpdmF0ZUlwRG5zTG9va3VwLl9faW5pdF9fKToKKyAgICAgICAgKFByaXZhdGVJ
cERuc0xvb2t1cC5fX2NhbGxfXyk6CisgICAgICAgIChQcml2YXRlSXBEbnNMb29rdXAuSW5pdGlh
bGl6ZUFyY2hpdmVIb3N0cyk6CisgICAgICAgIChVZHBEbnNIYW5kbGVyKToKKyAgICAgICAgKFVk
cERuc0hhbmRsZXIuaGFuZGxlKToKKyAgICAgICAgKFVkcERuc0hhbmRsZXIuX2RvbWFpbik6Cisg
ICAgICAgIChVZHBEbnNIYW5kbGVyLmdldF9kbnNfcmVzcG9uc2UpOgorICAgICAgICAoVWRwRG5z
SGFuZGxlci5nZXRfZG5zX3Jlc3BvbnNlLm9mKToKKyAgICAgICAgKFVkcERuc0hhbmRsZXIuZ2V0
X2Ruc19ub19zdWNoX25hbWVfcmVzcG9uc2UpOgorICAgICAgICAoRG5zUHJveHlTZXJ2ZXIpOgor
ICAgICAgICAoRG5zUHJveHlTZXJ2ZXIuX19pbml0X18pOgorICAgICAgICAoRG5zUHJveHlTZXJ2
ZXIuY2xlYW51cCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS9odHRwYXJjaGl2ZS5weTogQWRk
ZWQuCisgICAgICAgIChIdHRwQXJjaGl2ZUV4Y2VwdGlvbik6CisgICAgICAgIChIdHRwQXJjaGl2
ZUV4Y2VwdGlvbi5mb3IpOgorICAgICAgICAoSHR0cEFyY2hpdmUpOgorICAgICAgICAoSHR0cEFy
Y2hpdmUuX19pbml0X18pOgorICAgICAgICAoSHR0cEFyY2hpdmUuZ2V0X3NlcnZlcl9ydHQpOgor
ICAgICAgICAoSHR0cEFyY2hpdmUuZ2V0KToKKyAgICAgICAgKEh0dHBBcmNoaXZlLmdldF9jb25k
aXRpb25hbF9yZXNwb25zZSk6CisgICAgICAgIChIdHRwQXJjaGl2ZS5nZXRfY29uZGl0aW9uYWxf
c3RhdHVzKToKKyAgICAgICAgKEh0dHBBcmNoaXZlLmlzX2V0YWdfbWF0Y2gpOgorICAgICAgICAo
SHR0cEFyY2hpdmUuZ2V0X3JlcXVlc3RzKToKKyAgICAgICAgKEh0dHBBcmNoaXZlLmxzKToKKyAg
ICAgICAgKEh0dHBBcmNoaXZlLmNhdCk6CisgICAgICAgIChIdHRwQXJjaGl2ZS5lZGl0KToKKyAg
ICAgICAgKEh0dHBBcmNoaXZlLl9mb3JtYXRfcmVxdWVzdF9saW5lcyk6CisgICAgICAgIChIdHRw
QXJjaGl2ZS5maW5kX2Nsb3Nlc3RfcmVxdWVzdCk6CisgICAgICAgIChIdHRwQXJjaGl2ZS5kaWZm
KToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJlcXVlc3QpOgorICAgICAgICAoQXJjaGl2ZWRIdHRw
UmVxdWVzdC5fX2luaXRfXyk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXF1ZXN0Ll9fc3RyX18p
OgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVxdWVzdC52ZXJib3NlKToKKyAgICAgICAgKEFyY2hp
dmVkSHR0cFJlcXVlc3QuX19yZXByX18pOgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVxdWVzdC5f
X2hhc2hfXyk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXF1ZXN0Ll9fZXFfXyk6CisgICAgICAg
IChBcmNoaXZlZEh0dHBSZXF1ZXN0Ll9fc2V0c3RhdGVfXyk6CisgICAgICAgIChBcmNoaXZlZEh0
dHBSZXF1ZXN0Ll9fZ2V0c3RhdGVfXyk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXF1ZXN0Lm1h
dGNoZXMpOgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVxdWVzdC5fVHJpbUhlYWRlcnMpOgorICAg
ICAgICAoQXJjaGl2ZWRIdHRwUmVxdWVzdC5pc19jb25kaXRpb25hbCk6CisgICAgICAgIChBcmNo
aXZlZEh0dHBSZXF1ZXN0LmNyZWF0ZV9yZXF1ZXN0X3dpdGhvdXRfY29uZGl0aW9ucyk6CisgICAg
ICAgIChBcmNoaXZlZEh0dHBSZXNwb25zZSk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXNwb25z
ZS5fX2luaXRfXyk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXNwb25zZS5maXhfY2h1bmtfZGVs
YXlzKToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJlc3BvbnNlLl9fcmVwcl9fKToKKyAgICAgICAg
KEFyY2hpdmVkSHR0cFJlc3BvbnNlLl9faGFzaF9fKToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJl
c3BvbnNlLl9fZXFfXyk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXNwb25zZS5fX3NldHN0YXRl
X18pOgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVzcG9uc2UuZ2V0X2hlYWRlcik6CisgICAgICAg
IChBcmNoaXZlZEh0dHBSZXNwb25zZS5nZXRfaGVhZGVyX2Nhc2VfaW5zZW5zaXRpdmUpOgorICAg
ICAgICAoQXJjaGl2ZWRIdHRwUmVzcG9uc2Uuc2V0X2hlYWRlcik6CisgICAgICAgIChBcmNoaXZl
ZEh0dHBSZXNwb25zZS5yZW1vdmVfaGVhZGVyKToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJlc3Bv
bnNlLmlzX2d6aXApOgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVzcG9uc2UuaXNfY29tcHJlc3Nl
ZCk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXNwb25zZS5nZXRfZGF0YV9hc190ZXh0KToKKyAg
ICAgICAgKEFyY2hpdmVkSHR0cFJlc3BvbnNlLmdldF9zZXJ2ZXJfZGVsYXlzX2FzX3RleHQpOgor
ICAgICAgICAoQXJjaGl2ZWRIdHRwUmVzcG9uc2UuZ2V0X3Jlc3BvbnNlX2FzX3RleHQpOgorICAg
ICAgICAoQXJjaGl2ZWRIdHRwUmVzcG9uc2Uuc2V0X2RhdGEpOgorICAgICAgICAoQXJjaGl2ZWRI
dHRwUmVzcG9uc2Uuc2V0X3NlcnZlcl9kZWxheXMpOgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVz
cG9uc2Uuc2V0X3Jlc3BvbnNlX2Zyb21fdGV4dCk6CisgICAgICAgIChjcmVhdGVfcmVzcG9uc2Up
OgorICAgICAgICAoUGxhaW5IZWxwRm9ybWF0dGVyKToKKyAgICAgICAgKFBsYWluSGVscEZvcm1h
dHRlci5mb3JtYXRfZGVzY3JpcHRpb24pOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvaHR0cGFy
Y2hpdmVfdGVzdC5weTogQWRkZWQuCisgICAgICAgIChjcmVhdGVfcmVxdWVzdCk6CisgICAgICAg
IChjcmVhdGVfcmVzcG9uc2UpOgorICAgICAgICAoSHR0cEFyY2hpdmVUZXN0KToKKyAgICAgICAg
KEh0dHBBcmNoaXZlVGVzdC5zZXRVcCk6CisgICAgICAgIChIdHRwQXJjaGl2ZVRlc3QudGVhckRv
d24pOgorICAgICAgICAoSHR0cEFyY2hpdmVUZXN0LnRlc3RfaW5pdCk6CisgICAgICAgIChIdHRw
QXJjaGl2ZVRlc3QudGVzdF9fVHJpbUhlYWRlcnMpOgorICAgICAgICAoSHR0cEFyY2hpdmVUZXN0
LnRlc3RfbWF0Y2hlcyk6CisgICAgICAgIChIdHRwQXJjaGl2ZVRlc3Quc2V0dXBfZmluZF9jbG9z
ZXN0X3JlcXVlc3QpOgorICAgICAgICAoSHR0cEFyY2hpdmVUZXN0LnRlc3RfZmluZF9jbG9zZXN0
X3JlcXVlc3QpOgorICAgICAgICAoSHR0cEFyY2hpdmVUZXN0LnRlc3RfZmluZF9jbG9zZXN0X3Jl
cXVlc3RfZGVsZXRlX3NpbXBsZSk6CisgICAgICAgIChIdHRwQXJjaGl2ZVRlc3QudGVzdF9maW5k
X2Nsb3Nlc3RfcmVxdWVzdF9kZWxldGVfY29tcGxleCk6CisgICAgICAgIChIdHRwQXJjaGl2ZVRl
c3QudGVzdF9nZXRfc2ltcGxlKToKKyAgICAgICAgKEh0dHBBcmNoaXZlVGVzdC50ZXN0X2dldF9t
b2RpZmllZF9oZWFkZXJzKToKKyAgICAgICAgKEh0dHBBcmNoaXZlVGVzdC50ZXN0X2dldF91bm1v
ZGlmaWVkX2hlYWRlcnMpOgorICAgICAgICAoSHR0cEFyY2hpdmVUZXN0LnRlc3RfZ2V0X2V0YWdz
KToKKyAgICAgICAgKEh0dHBBcmNoaXZlVGVzdC50ZXN0X2dldF9tdWx0aXBsZV9tYXRjaF9oZWFk
ZXJzKToKKyAgICAgICAgKEh0dHBBcmNoaXZlVGVzdC50ZXN0X2dldF9tdWx0aXBsZV9ub25lX21h
dGNoX2hlYWRlcnMpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvaHR0cGNsaWVudC5weTogQWRk
ZWQuCisgICAgICAgIChHZXRJbmplY3RTY3JpcHQpOgorICAgICAgICAoX0luamVjdFNjcmlwdHMp
OgorICAgICAgICAoX0luamVjdFNjcmlwdHMuSW5zZXJ0U2NyaXB0QWZ0ZXIpOgorICAgICAgICAo
RGV0YWlsZWRIVFRQUmVzcG9uc2UpOgorICAgICAgICAoRGV0YWlsZWRIVFRQUmVzcG9uc2UucmVh
ZF9jaHVua3MpOgorICAgICAgICAoRGV0YWlsZWRIVFRQUmVzcG9uc2UuX3JlYWRfY2h1bmtfc2l6
ZSk6CisgICAgICAgIChEZXRhaWxlZEhUVFBDb25uZWN0aW9uKToKKyAgICAgICAgKERldGFpbGVk
SFRUUFNSZXNwb25zZSk6CisgICAgICAgIChEZXRhaWxlZEhUVFBTQ29ubmVjdGlvbik6CisgICAg
ICAgIChSZWFsSHR0cEZldGNoKToKKyAgICAgICAgKFJlYWxIdHRwRmV0Y2guX19pbml0X18pOgor
ICAgICAgICAoUmVhbEh0dHBGZXRjaC5fX2NhbGxfXyk6CisgICAgICAgIChSZWNvcmRIdHRwQXJj
aGl2ZUZldGNoKToKKyAgICAgICAgKFJlY29yZEh0dHBBcmNoaXZlRmV0Y2guX19pbml0X18pOgor
ICAgICAgICAoUmVjb3JkSHR0cEFyY2hpdmVGZXRjaC5fX2NhbGxfXyk6CisgICAgICAgIChSZXBs
YXlIdHRwQXJjaGl2ZUZldGNoKToKKyAgICAgICAgKFJlcGxheUh0dHBBcmNoaXZlRmV0Y2guX19p
bml0X18pOgorICAgICAgICAoUmVwbGF5SHR0cEFyY2hpdmVGZXRjaC5fX2NhbGxfXyk6CisgICAg
ICAgIChDb250cm9sbGFibGVIdHRwQXJjaGl2ZUZldGNoKToKKyAgICAgICAgKENvbnRyb2xsYWJs
ZUh0dHBBcmNoaXZlRmV0Y2guX19pbml0X18pOgorICAgICAgICAoQ29udHJvbGxhYmxlSHR0cEFy
Y2hpdmVGZXRjaC5TZXRSZWNvcmRNb2RlKToKKyAgICAgICAgKENvbnRyb2xsYWJsZUh0dHBBcmNo
aXZlRmV0Y2guU2V0UmVwbGF5TW9kZSk6CisgICAgICAgIChDb250cm9sbGFibGVIdHRwQXJjaGl2
ZUZldGNoLl9fY2FsbF9fKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L2h0dHBwcm94eS5weTog
QWRkZWQuCisgICAgICAgIChIdHRwUHJveHlFcnJvcik6CisgICAgICAgIChIdHRwUHJveHlTZXJ2
ZXJFcnJvcik6CisgICAgICAgIChIdHRwQXJjaGl2ZUhhbmRsZXIpOgorICAgICAgICAoSHR0cEFy
Y2hpdmVIYW5kbGVyLmxvZ19yZXF1ZXN0KToKKyAgICAgICAgKEh0dHBBcmNoaXZlSGFuZGxlci5s
b2dfZXJyb3IpOgorICAgICAgICAoSHR0cEFyY2hpdmVIYW5kbGVyLmxvZ19tZXNzYWdlKToKKyAg
ICAgICAgKEh0dHBBcmNoaXZlSGFuZGxlci5yZWFkX3JlcXVlc3RfYm9keSk6CisgICAgICAgIChI
dHRwQXJjaGl2ZUhhbmRsZXIuZ2V0X2hlYWRlcl9kaWN0KToKKyAgICAgICAgKEh0dHBBcmNoaXZl
SGFuZGxlci5nZXRfYXJjaGl2ZWRfaHR0cF9yZXF1ZXN0KToKKyAgICAgICAgKEh0dHBBcmNoaXZl
SGFuZGxlci5zZW5kX2FyY2hpdmVkX2h0dHBfcmVzcG9uc2UpOgorICAgICAgICAoSHR0cEFyY2hp
dmVIYW5kbGVyLmRvX1BPU1QpOgorICAgICAgICAoSHR0cEFyY2hpdmVIYW5kbGVyLmRvX0hFQUQp
OgorICAgICAgICAoSHR0cEFyY2hpdmVIYW5kbGVyLnNlbmRfZXJyb3IpOgorICAgICAgICAoSHR0
cEFyY2hpdmVIYW5kbGVyLmRvX0dFVCk6CisgICAgICAgIChIdHRwUHJveHlTZXJ2ZXIpOgorICAg
ICAgICAoSHR0cFByb3h5U2VydmVyLl9faW5pdF9fKToKKyAgICAgICAgKEh0dHBQcm94eVNlcnZl
ci5jbGVhbnVwKToKKyAgICAgICAgKEh0dHBzQXJjaGl2ZUhhbmRsZXIpOgorICAgICAgICAoSHR0
cHNBcmNoaXZlSGFuZGxlci5nZXRfYXJjaGl2ZWRfaHR0cF9yZXF1ZXN0KToKKyAgICAgICAgKEh0
dHBzUHJveHlTZXJ2ZXIpOgorICAgICAgICAoSHR0cHNQcm94eVNlcnZlci5fX2luaXRfXyk6Cisg
ICAgICAgICogV2ViUGFnZVJlcGxheS9odHRwemxpYi5weTogQWRkZWQuCisgICAgICAgIChjb21w
cmVzc19jaHVua3MpOgorICAgICAgICAodW5jb21wcmVzc19jaHVua3MpOgorICAgICAgICAqIFdl
YlBhZ2VSZXBsYXkvbW9jay1hcmNoaXZlLnR4dDogQWRkZWQuCisgICAgICAgICogV2ViUGFnZVJl
cGxheS9tb2NraHR0cHJlcXVlc3QucHk6IEFkZGVkLgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVx
dWVzdCk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXF1ZXN0Ll9faW5pdF9fKToKKyAgICAgICAg
KEFyY2hpdmVkSHR0cFJlcXVlc3QuX19zdHJfXyk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXF1
ZXN0Ll9fcmVwcl9fKToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJlcXVlc3QuX19oYXNoX18pOgor
ICAgICAgICAoQXJjaGl2ZWRIdHRwUmVxdWVzdC5fX2VxX18pOgorICAgICAgICAoQXJjaGl2ZWRI
dHRwUmVxdWVzdC5tYXRjaGVzKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3BlcnNpc3RlbnRt
aXhpbi5weTogQWRkZWQuCisgICAgICAgIChQZXJzaXN0ZW50TWl4aW4pOgorICAgICAgICAoUGVy
c2lzdGVudE1peGluLndoaWNoKToKKyAgICAgICAgKFBlcnNpc3RlbnRNaXhpbi5Bc3NlcnRXcml0
YWJsZSk6CisgICAgICAgIChQZXJzaXN0ZW50TWl4aW4uTG9hZCk6CisgICAgICAgIChQZXJzaXN0
ZW50TWl4aW4uUGVyc2lzdCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS9wbGF0Zm9ybXNldHRp
bmdzLnB5OiBBZGRlZC4KKyAgICAgICAgKFBsYXRmb3JtU2V0dGluZ3NFcnJvcik6CisgICAgICAg
IChEbnNSZWFkRXJyb3IpOgorICAgICAgICAoRG5zVXBkYXRlRXJyb3IpOgorICAgICAgICAoTm90
QWRtaW5pc3RyYXRvckVycm9yKToKKyAgICAgICAgKF9jaGVja19vdXRwdXQpOgorICAgICAgICAo
UGxhdGZvcm1TZXR0aW5ncyk6CisgICAgICAgIChQbGF0Zm9ybVNldHRpbmdzLl9faW5pdF9fKToK
KyAgICAgICAgKFBsYXRmb3JtU2V0dGluZ3MuZ2V0X3ByaW1hcnlfZG5zKToKKyAgICAgICAgKFBs
YXRmb3JtU2V0dGluZ3MuX3NldF9wcmltYXJ5X2Rucyk6CisgICAgICAgIChQbGF0Zm9ybVNldHRp
bmdzLmdldF9vcmlnaW5hbF9wcmltYXJ5X2Rucyk6CisgICAgICAgIChQbGF0Zm9ybVNldHRpbmdz
LnNldF9wcmltYXJ5X2Rucyk6CisgICAgICAgIChQbGF0Zm9ybVNldHRpbmdzLnJlc3RvcmVfcHJp
bWFyeV9kbnMpOgorICAgICAgICAoUGxhdGZvcm1TZXR0aW5ncy5nZXRfY3duZCk6CisgICAgICAg
IChQbGF0Zm9ybVNldHRpbmdzLl9zZXRfY3duZCk6CisgICAgICAgIChQbGF0Zm9ybVNldHRpbmdz
LmdldF9vcmlnaW5hbF9jd25kKToKKyAgICAgICAgKFBsYXRmb3JtU2V0dGluZ3Muc2V0X2N3bmQp
OgorICAgICAgICAoUGxhdGZvcm1TZXR0aW5ncy5yZXN0b3JlX2N3bmQpOgorICAgICAgICAoUGxh
dGZvcm1TZXR0aW5ncy5faXBmd19iaW4pOgorICAgICAgICAoUGxhdGZvcm1TZXR0aW5ncy5pcGZ3
KToKKyAgICAgICAgKFBsYXRmb3JtU2V0dGluZ3MuZ2V0X2lwZndfcXVldWVfc2xvdHMpOgorICAg
ICAgICAoUGxhdGZvcm1TZXR0aW5ncy5nZXRfc2VydmVyX2lwX2FkZHJlc3MpOgorICAgICAgICAo
UGxhdGZvcm1TZXR0aW5ncy5jb25maWd1cmVfbG9vcGJhY2spOgorICAgICAgICAoUGxhdGZvcm1T
ZXR0aW5ncy51bmNvbmZpZ3VyZV9sb29wYmFjayk6CisgICAgICAgIChQbGF0Zm9ybVNldHRpbmdz
LmdldF9zeXN0ZW1fbG9nZ2luZ19oYW5kbGVyKToKKyAgICAgICAgKFBsYXRmb3JtU2V0dGluZ3Mu
cGluZyk6CisgICAgICAgIChQbGF0Zm9ybVNldHRpbmdzLnJlcnVuX2FzX2FkbWluaXN0cmF0b3Ip
OgorICAgICAgICAoUGxhdGZvcm1TZXR0aW5ncy5jcmVhdGVfY2VydGZpbGUpOgorICAgICAgICAo
UG9zaXhQbGF0Zm9ybVNldHRpbmdzKToKKyAgICAgICAgKFBvc2l4UGxhdGZvcm1TZXR0aW5ncy5f
Z2V0X2Ruc191cGRhdGVfZXJyb3IpOgorICAgICAgICAoUG9zaXhQbGF0Zm9ybVNldHRpbmdzLl9z
eXNjdGwpOgorICAgICAgICAoUG9zaXhQbGF0Zm9ybVNldHRpbmdzLmhhc19zeXNjdGwpOgorICAg
ICAgICAoUG9zaXhQbGF0Zm9ybVNldHRpbmdzLnNldF9zeXNjdGwpOgorICAgICAgICAoUG9zaXhQ
bGF0Zm9ybVNldHRpbmdzLmdldF9zeXNjdGwpOgorICAgICAgICAoUG9zaXhQbGF0Zm9ybVNldHRp
bmdzLnBpbmcpOgorICAgICAgICAoUG9zaXhQbGF0Zm9ybVNldHRpbmdzLnJlcnVuX2FzX2FkbWlu
aXN0cmF0b3IpOgorICAgICAgICAoUG9zaXhQbGF0Zm9ybVNldHRpbmdzLmNyZWF0ZV9jZXJ0Zmls
ZSk6CisgICAgICAgIChQb3NpeFBsYXRmb3JtU2V0dGluZ3MuX2lwZndfYmluKToKKyAgICAgICAg
KE9zeFBsYXRmb3JtU2V0dGluZ3MpOgorICAgICAgICAoT3N4UGxhdGZvcm1TZXR0aW5ncy5fc2N1
dGlsKToKKyAgICAgICAgKE9zeFBsYXRmb3JtU2V0dGluZ3MuX2lmY29uZmlnKToKKyAgICAgICAg
KE9zeFBsYXRmb3JtU2V0dGluZ3Muc2V0X3N5c2N0bCk6CisgICAgICAgIChPc3hQbGF0Zm9ybVNl
dHRpbmdzLl9nZXRfZG5zX3NlcnZpY2Vfa2V5KToKKyAgICAgICAgKE9zeFBsYXRmb3JtU2V0dGlu
Z3MuZ2V0X3ByaW1hcnlfZG5zKToKKyAgICAgICAgKE9zeFBsYXRmb3JtU2V0dGluZ3MuX3NldF9w
cmltYXJ5X2Rucyk6CisgICAgICAgIChPc3hQbGF0Zm9ybVNldHRpbmdzLmdldF9jd25kKToKKyAg
ICAgICAgKE9zeFBsYXRmb3JtU2V0dGluZ3MuX3NldF9jd25kKToKKyAgICAgICAgKE9zeFBsYXRm
b3JtU2V0dGluZ3MuZ2V0X2xvb3BiYWNrX210dSk6CisgICAgICAgIChPc3hQbGF0Zm9ybVNldHRp
bmdzLmNvbmZpZ3VyZV9sb29wYmFjayk6CisgICAgICAgIChPc3hQbGF0Zm9ybVNldHRpbmdzLnVu
Y29uZmlndXJlX2xvb3BiYWNrKToKKyAgICAgICAgKExpbnV4UGxhdGZvcm1TZXR0aW5ncyk6Cisg
ICAgICAgIChMaW51eFBsYXRmb3JtU2V0dGluZ3MuZ2V0X3ByaW1hcnlfZG5zKToKKyAgICAgICAg
KExpbnV4UGxhdGZvcm1TZXR0aW5ncy5fc2V0X3ByaW1hcnlfZG5zKToKKyAgICAgICAgKExpbnV4
UGxhdGZvcm1TZXR0aW5ncy5fd3JpdGVfcmVzb2x2ZV9jb25mKToKKyAgICAgICAgKExpbnV4UGxh
dGZvcm1TZXR0aW5ncy5nZXRfY3duZCk6CisgICAgICAgIChMaW51eFBsYXRmb3JtU2V0dGluZ3Mu
X3NldF9jd25kKToKKyAgICAgICAgKExpbnV4UGxhdGZvcm1TZXR0aW5ncy5jb25maWd1cmVfbG9v
cGJhY2spOgorICAgICAgICAoTGludXhQbGF0Zm9ybVNldHRpbmdzLnVuY29uZmlndXJlX2xvb3Bi
YWNrKToKKyAgICAgICAgKFdpbmRvd3NQbGF0Zm9ybVNldHRpbmdzKToKKyAgICAgICAgKFdpbmRv
d3NQbGF0Zm9ybVNldHRpbmdzLl9nZXRfZG5zX3VwZGF0ZV9lcnJvcik6CisgICAgICAgIChXaW5k
b3dzUGxhdGZvcm1TZXR0aW5ncy5fbmV0c2hfc2hvd19kbnMpOgorICAgICAgICAoV2luZG93c1Bs
YXRmb3JtU2V0dGluZ3MuZ2V0X3ByaW1hcnlfZG5zKToKKyAgICAgICAgKFdpbmRvd3NQbGF0Zm9y
bVNldHRpbmdzLl9zZXRfcHJpbWFyeV9kbnMpOgorICAgICAgICAoX2FycCk6CisgICAgICAgIChf
cm91dGUpOgorICAgICAgICAoX2lwY29uZmlnKToKKyAgICAgICAgKGdldF9tYWNfYWRkcmVzcyk6
CisgICAgICAgIChjb25maWd1cmVfbG9vcGJhY2spOgorICAgICAgICAodW5jb25maWd1cmVfbG9v
cGJhY2spOgorICAgICAgICAoZ2V0X3N5c3RlbV9sb2dnaW5nX2hhbmRsZXIpOgorICAgICAgICAo
Z2V0X3N5c3RlbV9sb2dnaW5nX2hhbmRsZXIuRGVidWdWaWV3SGFuZGxlcik6CisgICAgICAgIChn
ZXRfc3lzdGVtX2xvZ2dpbmdfaGFuZGxlci5EZWJ1Z1ZpZXdIYW5kbGVyLmVtaXQpOgorICAgICAg
ICAocmVydW5fYXNfYWRtaW5pc3RyYXRvcik6CisgICAgICAgIChjcmVhdGVfY2VydGZpbGUpOgor
ICAgICAgICAoV2luZG93c1hwUGxhdGZvcm1TZXR0aW5ncyk6CisgICAgICAgIChXaW5kb3dzWHBQ
bGF0Zm9ybVNldHRpbmdzLl9pcGZ3X2Jpbik6CisgICAgICAgIChfbmV3X3BsYXRmb3JtX3NldHRp
bmdzKToKKyAgICAgICAgKGdldF9wbGF0Zm9ybV9zZXR0aW5ncyk6CisgICAgICAgICogV2ViUGFn
ZVJlcGxheS9wbGF0Zm9ybXNldHRpbmdzX3Rlc3QucHk6IEFkZGVkLgorICAgICAgICAoV2luN1Nl
dHRpbmdzKToKKyAgICAgICAgKFdpbjdTZXR0aW5ncy5faXBjb25maWcpOgorICAgICAgICAoV2lu
WHBTZXR0aW5ncyk6CisgICAgICAgIChXaW5YcFNldHRpbmdzLl9pcGNvbmZpZyk6CisgICAgICAg
IChXaW5kb3dzUGxhdGZvcm1TZXR0aW5nc1Rlc3QpOgorICAgICAgICAoV2luZG93c1BsYXRmb3Jt
U2V0dGluZ3NUZXN0LnRlc3RfZ2V0X21hY19hZGRyZXNzX3hwKToKKyAgICAgICAgKHRlc3RfZ2V0
X21hY19hZGRyZXNzXzcpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvcmVwbGF5LnB5OiBBZGRl
ZC4KKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nKToKKyAgICAgICAgKEFkZERuc0ZvcndhcmQp
OgorICAgICAgICAoQWRkRG5zRm9yd2FyZC5EbnNGb3J3YXJkQ29udGV4dCk6CisgICAgICAgIChB
ZGREbnNQcm94eSk6CisgICAgICAgIChBZGRUZW1wb3JhcnlDZXJ0RmlsZSk6CisgICAgICAgIChB
ZGRUZW1wb3JhcnlDZXJ0RmlsZS5UZW1wb3JhcnlDZXJ0RmlsZUNvbnRleHQpOgorICAgICAgICAo
QWRkV2ViUHJveHkpOgorICAgICAgICAoQWRkVHJhZmZpY1NoYXBlcik6CisgICAgICAgIChPcHRp
b25zV3JhcHBlcik6CisgICAgICAgIChPcHRpb25zV3JhcHBlci5fX2luaXRfXyk6CisgICAgICAg
IChPcHRpb25zV3JhcHBlci5fQ2hlY2tDb25mbGljdHMpOgorICAgICAgICAoT3B0aW9uc1dyYXBw
ZXIuX01hc3NhZ2VWYWx1ZXMpOgorICAgICAgICAoT3B0aW9uc1dyYXBwZXIuX19nZXRhdHRyX18p
OgorICAgICAgICAoT3B0aW9uc1dyYXBwZXIuSGFzVHJhZmZpY1NoYXBpbmcpOgorICAgICAgICAo
T3B0aW9uc1dyYXBwZXIuSXNSb290UmVxdWlyZWQpOgorICAgICAgICAobWFpbik6CisgICAgICAg
IChQbGFpbkhlbHBGb3JtYXR0ZXIpOgorICAgICAgICAoUGxhaW5IZWxwRm9ybWF0dGVyLmZvcm1h
dF9kZXNjcmlwdGlvbik6CisgICAgICAgICogV2ViUGFnZVJlcGxheS9yZXBsYXlzcGR5c2VydmVy
LnB5OiBBZGRlZC4KKyAgICAgICAgKFJlcGxheVNwZHlTZXJ2ZXIpOgorICAgICAgICAoUmVwbGF5
U3BkeVNlcnZlci5fX2luaXRfXyk6CisgICAgICAgIChSZXBsYXlTcGR5U2VydmVyLnNlcnZlX2Zv
cmV2ZXIpOgorICAgICAgICAoUmVwbGF5U3BkeVNlcnZlci5jbGVhbnVwKToKKyAgICAgICAgKFJl
cGxheVNwZHlTZXJ2ZXIucmVxdWVzdF9oYW5kbGVyKToKKyAgICAgICAgKFJlcGxheVNwZHlTZXJ2
ZXIucmVxdWVzdF9oYW5kbGVyLnNpbXBsZV9yZXNwb25kZXIpOgorICAgICAgICAqIFdlYlBhZ2VS
ZXBsYXkvc2VydmVybWFuYWdlci5weTogQWRkZWQuCisgICAgICAgIChTZXJ2ZXJNYW5hZ2VyKToK
KyAgICAgICAgKFNlcnZlck1hbmFnZXIuX19pbml0X18pOgorICAgICAgICAoU2VydmVyTWFuYWdl
ci5BcHBlbmQpOgorICAgICAgICAoU2VydmVyTWFuYWdlci5BcHBlbmRSZWNvcmRDYWxsYmFjayk6
CisgICAgICAgIChTZXJ2ZXJNYW5hZ2VyLkFwcGVuZFJlcGxheUNhbGxiYWNrKToKKyAgICAgICAg
KFNlcnZlck1hbmFnZXIuSXNSZWNvcmRNb2RlKToKKyAgICAgICAgKFNlcnZlck1hbmFnZXIuU2V0
UmVjb3JkTW9kZSk6CisgICAgICAgIChTZXJ2ZXJNYW5hZ2VyLlNldFJlcGxheU1vZGUpOgorICAg
ICAgICAoU2VydmVyTWFuYWdlci5SdW4pOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRf
cGFydHk6IEFkZGVkLgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvX19pbml0
X18ucHk6IEFkZGVkLgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zOiBB
ZGRlZC4KKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9MSUNFTlNFOiBB
ZGRlZC4KKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9fX2luaXRfXy5w
eTogQWRkZWQuCisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvZG5zc2Vj
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVua25vd25BbGdvcml0aG0pOgorICAgICAgICAoYWxnb3Jp
dGhtX2Zyb21fdGV4dCk6CisgICAgICAgIChhbGdvcml0aG1fdG9fdGV4dCk6CisgICAgICAgICog
V2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvZTE2NC5weTogQWRkZWQuCisgICAgICAgIChm
cm9tX2UxNjQpOgorICAgICAgICAodG9fZTE2NCk6CisgICAgICAgIChxdWVyeSk6CisgICAgICAg
ICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvZWRucy5weTogQWRkZWQuCisgICAgICAg
IChPcHRpb24pOgorICAgICAgICAoT3B0aW9uLmZvcik6CisgICAgICAgIChPcHRpb24uX19pbml0
X18pOgorICAgICAgICAoT3B0aW9uLnRvX3dpcmUpOgorICAgICAgICAoT3B0aW9uLmZyb21fd2ly
ZSk6CisgICAgICAgIChPcHRpb24uX2NtcCk6CisgICAgICAgIChPcHRpb24uX19lcV9fKToKKyAg
ICAgICAgKE9wdGlvbi5fX25lX18pOgorICAgICAgICAoT3B0aW9uLl9fbHRfXyk6CisgICAgICAg
IChPcHRpb24uX19sZV9fKToKKyAgICAgICAgKE9wdGlvbi5fX2dlX18pOgorICAgICAgICAoT3B0
aW9uLl9fZ3RfXyk6CisgICAgICAgIChHZW5lcmljT3B0aW9uKToKKyAgICAgICAgKEdlbmVyaWNP
cHRpb24uaXMpOgorICAgICAgICAoR2VuZXJpY09wdGlvbi5fX2luaXRfXyk6CisgICAgICAgIChH
ZW5lcmljT3B0aW9uLnRvX3dpcmUpOgorICAgICAgICAoR2VuZXJpY09wdGlvbi5mcm9tX3dpcmUp
OgorICAgICAgICAoR2VuZXJpY09wdGlvbi5fY21wKToKKyAgICAgICAgKGdldF9vcHRpb25fY2xh
c3MpOgorICAgICAgICAob3B0aW9uX2Zyb21fd2lyZSk6CisgICAgICAgICogV2ViUGFnZVJlcGxh
eS90aGlyZF9wYXJ0eS9kbnMvZW50cm9weS5weTogQWRkZWQuCisgICAgICAgIChFbnRyb3B5UG9v
bCk6CisgICAgICAgIChFbnRyb3B5UG9vbC5fX2luaXRfXyk6CisgICAgICAgIChFbnRyb3B5UG9v
bC5zdGlyKToKKyAgICAgICAgKEVudHJvcHlQb29sLl9tYXliZV9zZWVkKToKKyAgICAgICAgKEVu
dHJvcHlQb29sLnJhbmRvbV84KToKKyAgICAgICAgKEVudHJvcHlQb29sLnJhbmRvbV8xNik6Cisg
ICAgICAgIChFbnRyb3B5UG9vbC5yYW5kb21fMzIpOgorICAgICAgICAoRW50cm9weVBvb2wucmFu
ZG9tX2JldHdlZW4pOgorICAgICAgICAocmFuZG9tXzE2KToKKyAgICAgICAgKGJldHdlZW4pOgor
ICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL2V4Y2VwdGlvbi5weTogQWRk
ZWQuCisgICAgICAgIChETlNFeGNlcHRpb24pOgorICAgICAgICAoRE5TRXhjZXB0aW9uLnNoYXJl
ZCk6CisgICAgICAgIChGb3JtRXJyb3IpOgorICAgICAgICAoU3ludGF4RXJyb3IpOgorICAgICAg
ICAoVW5leHBlY3RlZEVuZCk6CisgICAgICAgIChUb29CaWcpOgorICAgICAgICAoVGltZW91dCk6
CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvZmxhZ3MucHk6IEFkZGVk
LgorICAgICAgICAoX29yZGVyX2ZsYWdzKToKKyAgICAgICAgKF9mcm9tX3RleHQpOgorICAgICAg
ICAoX3RvX3RleHQpOgorICAgICAgICAoZnJvbV90ZXh0KToKKyAgICAgICAgKHRvX3RleHQpOgor
ICAgICAgICAoZWRuc19mcm9tX3RleHQpOgorICAgICAgICAoZWRuc190b190ZXh0KToKKyAgICAg
ICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9pbmV0LnB5OiBBZGRlZC4KKyAgICAg
ICAgKGluZXRfcHRvbik6CisgICAgICAgIChpbmV0X250b3ApOgorICAgICAgICAoYWZfZm9yX2Fk
ZHJlc3MpOgorICAgICAgICAoaXNfbXVsdGljYXN0KToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5
L3RoaXJkX3BhcnR5L2Rucy9pcHY0LnB5OiBBZGRlZC4KKyAgICAgICAgKGluZXRfYXRvbik6Cisg
ICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvaXB2Ni5weTogQWRkZWQuCisg
ICAgICAgIChpbmV0X250b2EpOgorICAgICAgICAoaW5ldF9hdG9uKToKKyAgICAgICAgKiBXZWJQ
YWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9tZXNzYWdlLnB5OiBBZGRlZC4KKyAgICAgICAgKFNo
b3J0SGVhZGVyKToKKyAgICAgICAgKFRyYWlsaW5nSnVuayk6CisgICAgICAgIChVbmtub3duSGVh
ZGVyRmllbGQpOgorICAgICAgICAoQmFkRUROUyk6CisgICAgICAgIChCYWRUU0lHKToKKyAgICAg
ICAgKFVua25vd25UU0lHS2V5KToKKyAgICAgICAgKE1lc3NhZ2UpOgorICAgICAgICAoTWVzc2Fn
ZS5fX2luaXRfXyk6CisgICAgICAgIChNZXNzYWdlLl9fcmVwcl9fKToKKyAgICAgICAgKE1lc3Nh
Z2UuX19zdHJfXyk6CisgICAgICAgIChNZXNzYWdlLnRvX3RleHQpOgorICAgICAgICAoTWVzc2Fn
ZS5fX2VxX18pOgorICAgICAgICAoTWVzc2FnZS5fX25lX18pOgorICAgICAgICAoTWVzc2FnZS5p
c19yZXNwb25zZSk6CisgICAgICAgIChNZXNzYWdlLnNlY3Rpb25fbnVtYmVyKToKKyAgICAgICAg
KE1lc3NhZ2UuZmluZF9ycnNldCk6CisgICAgICAgIChNZXNzYWdlLmZpbmRfcnJzZXQub2YpOgor
ICAgICAgICAoTWVzc2FnZS5nZXRfcnJzZXQpOgorICAgICAgICAoTWVzc2FnZS5nZXRfcnJzZXQu
b2YpOgorICAgICAgICAoTWVzc2FnZS50b193aXJlKToKKyAgICAgICAgKE1lc3NhZ2UudXNlX3Rz
aWcpOgorICAgICAgICAoTWVzc2FnZS51c2VfZWRucyk6CisgICAgICAgIChNZXNzYWdlLndhbnRf
ZG5zc2VjKToKKyAgICAgICAgKE1lc3NhZ2UucmNvZGUpOgorICAgICAgICAoTWVzc2FnZS5zZXRf
cmNvZGUpOgorICAgICAgICAoTWVzc2FnZS5vcGNvZGUpOgorICAgICAgICAoTWVzc2FnZS5zZXRf
b3Bjb2RlKToKKyAgICAgICAgKF9XaXJlUmVhZGVyKToKKyAgICAgICAgKF9XaXJlUmVhZGVyLm9m
KToKKyAgICAgICAgKF9XaXJlUmVhZGVyLl9faW5pdF9fKToKKyAgICAgICAgKF9XaXJlUmVhZGVy
Ll9nZXRfcXVlc3Rpb24pOgorICAgICAgICAoX1dpcmVSZWFkZXIuX2dldF9zZWN0aW9uKToKKyAg
ICAgICAgKF9XaXJlUmVhZGVyLnJlYWQpOgorICAgICAgICAoZnJvbV93aXJlKToKKyAgICAgICAg
KF9UZXh0UmVhZGVyKToKKyAgICAgICAgKF9UZXh0UmVhZGVyLm9mKToKKyAgICAgICAgKF9UZXh0
UmVhZGVyLl9faW5pdF9fKToKKyAgICAgICAgKF9UZXh0UmVhZGVyLl9oZWFkZXJfbGluZSk6Cisg
ICAgICAgIChfVGV4dFJlYWRlci5fcXVlc3Rpb25fbGluZSk6CisgICAgICAgIChfVGV4dFJlYWRl
ci5fcnJfbGluZSk6CisgICAgICAgIChfVGV4dFJlYWRlci5yZWFkKToKKyAgICAgICAgKGZyb21f
dGV4dCk6CisgICAgICAgIChmcm9tX2ZpbGUpOgorICAgICAgICAobWFrZV9xdWVyeSk6CisgICAg
ICAgIChtYWtlX3F1ZXJ5Lm1heSk6CisgICAgICAgIChtYWtlX3F1ZXJ5LklOKToKKyAgICAgICAg
KG1ha2VfcmVzcG9uc2UpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5z
L25hbWUucHk6IEFkZGVkLgorICAgICAgICAoRW1wdHlMYWJlbCk6CisgICAgICAgIChCYWRFc2Nh
cGUpOgorICAgICAgICAoQmFkUG9pbnRlcik6CisgICAgICAgIChCYWRMYWJlbFR5cGUpOgorICAg
ICAgICAoTmVlZEFic29sdXRlTmFtZU9yT3JpZ2luKToKKyAgICAgICAgKE5hbWVUb29Mb25nKToK
KyAgICAgICAgKExhYmVsVG9vTG9uZyk6CisgICAgICAgIChBYnNvbHV0ZUNvbmNhdGVuYXRpb24p
OgorICAgICAgICAoTm9QYXJlbnQpOgorICAgICAgICAoX2VzY2FwaWZ5KToKKyAgICAgICAgKF92
YWxpZGF0ZV9sYWJlbHMpOgorICAgICAgICAoTmFtZSk6CisgICAgICAgIChOYW1lLnJlcHJlc2Vu
dHMpOgorICAgICAgICAoTmFtZS5hcmUpOgorICAgICAgICAoTmFtZS5fX2luaXRfXyk6CisgICAg
ICAgIChOYW1lLl9fc2V0YXR0cl9fKToKKyAgICAgICAgKE5hbWUuaXNfYWJzb2x1dGUpOgorICAg
ICAgICAoTmFtZS5pc193aWxkKToKKyAgICAgICAgKE5hbWUuX19oYXNoX18pOgorICAgICAgICAo
TmFtZS5mdWxsY29tcGFyZSk6CisgICAgICAgIChOYW1lLmlzX3N1YmRvbWFpbik6CisgICAgICAg
IChOYW1lLmlzX3N1cGVyZG9tYWluKToKKyAgICAgICAgKE5hbWUuY2Fub25pY2FsaXplKToKKyAg
ICAgICAgKE5hbWUuX19lcV9fKToKKyAgICAgICAgKE5hbWUuX19uZV9fKToKKyAgICAgICAgKE5h
bWUuX19sdF9fKToKKyAgICAgICAgKE5hbWUuX19sZV9fKToKKyAgICAgICAgKE5hbWUuX19nZV9f
KToKKyAgICAgICAgKE5hbWUuX19ndF9fKToKKyAgICAgICAgKE5hbWUuX19yZXByX18pOgorICAg
ICAgICAoTmFtZS5fX3N0cl9fKToKKyAgICAgICAgKE5hbWUudG9fdGV4dCk6CisgICAgICAgIChO
YW1lLnRvX3VuaWNvZGUpOgorICAgICAgICAoTmFtZS50b19kaWdlc3RhYmxlKToKKyAgICAgICAg
KE5hbWUudG9fd2lyZSk6CisgICAgICAgIChOYW1lLl9fbGVuX18pOgorICAgICAgICAoTmFtZS5f
X2dldGl0ZW1fXyk6CisgICAgICAgIChOYW1lLl9fZ2V0c2xpY2VfXyk6CisgICAgICAgIChOYW1l
Ll9fYWRkX18pOgorICAgICAgICAoTmFtZS5fX3N1Yl9fKToKKyAgICAgICAgKE5hbWUuc3BsaXQp
OgorICAgICAgICAoTmFtZS5jb25jYXRlbmF0ZSk6CisgICAgICAgIChOYW1lLnJlbGF0aXZpemUp
OgorICAgICAgICAoTmFtZS5kZXJlbGF0aXZpemUpOgorICAgICAgICAoTmFtZS5jaG9vc2VfcmVs
YXRpdml0eSk6CisgICAgICAgIChOYW1lLnBhcmVudCk6CisgICAgICAgIChmcm9tX3VuaWNvZGUp
OgorICAgICAgICAoZnJvbV90ZXh0KToKKyAgICAgICAgKGZyb21fd2lyZSk6CisgICAgICAgICog
V2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvbmFtZWRpY3QucHk6IEFkZGVkLgorICAgICAg
ICAoTmFtZURpY3QpOgorICAgICAgICAoTmFtZURpY3QuX19pbml0X18pOgorICAgICAgICAoTmFt
ZURpY3QuX19zZXRpdGVtX18pOgorICAgICAgICAoTmFtZURpY3QuZ2V0X2RlZXBlc3RfbWF0Y2gp
OgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL25vZGUucHk6IEFkZGVk
LgorICAgICAgICAoTm9kZSk6CisgICAgICAgIChOb2RlLl9faW5pdF9fKToKKyAgICAgICAgKE5v
ZGUudG9fdGV4dCk6CisgICAgICAgIChOb2RlLl9fcmVwcl9fKToKKyAgICAgICAgKE5vZGUuX19l
cV9fKToKKyAgICAgICAgKE5vZGUuX19uZV9fKToKKyAgICAgICAgKE5vZGUuX19sZW5fXyk6Cisg
ICAgICAgIChOb2RlLl9faXRlcl9fKToKKyAgICAgICAgKE5vZGUuZmluZF9yZGF0YXNldCk6Cisg
ICAgICAgIChOb2RlLmZpbmRfcmRhdGFzZXQub2YpOgorICAgICAgICAoTm9kZS5maW5kX3JkYXRh
c2V0LmRvZXMpOgorICAgICAgICAoTm9kZS5nZXRfcmRhdGFzZXQpOgorICAgICAgICAoTm9kZS5n
ZXRfcmRhdGFzZXQuZG9lcyk6CisgICAgICAgIChOb2RlLmdldF9yZGF0YXNldC5vZik6CisgICAg
ICAgIChOb2RlLmRlbGV0ZV9yZGF0YXNldCk6CisgICAgICAgIChOb2RlLmRlbGV0ZV9yZGF0YXNl
dC5vZik6CisgICAgICAgIChOb2RlLnJlcGxhY2VfcmRhdGFzZXQpOgorICAgICAgICAqIFdlYlBh
Z2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL29wY29kZS5weTogQWRkZWQuCisgICAgICAgIChVbmtu
b3duT3Bjb2RlKToKKyAgICAgICAgKGZyb21fdGV4dCk6CisgICAgICAgIChmcm9tX2ZsYWdzKToK
KyAgICAgICAgKHRvX2ZsYWdzKToKKyAgICAgICAgKHRvX3RleHQpOgorICAgICAgICAoaXNfdXBk
YXRlKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9xdWVyeS5weTog
QWRkZWQuCisgICAgICAgIChVbmV4cGVjdGVkU291cmNlKToKKyAgICAgICAgKEJhZFJlc3BvbnNl
KToKKyAgICAgICAgKF9jb21wdXRlX2V4cGlyYXRpb24pOgorICAgICAgICAoX3dhaXRfZm9yKToK
KyAgICAgICAgKF93YWl0X2Zvcl9yZWFkYWJsZSk6CisgICAgICAgIChfd2FpdF9mb3Jfd3JpdGFi
bGUpOgorICAgICAgICAoX2FkZHJlc3Nlc19lcXVhbCk6CisgICAgICAgICh1ZHApOgorICAgICAg
ICAoX25ldF9yZWFkKToKKyAgICAgICAgKF9uZXRfd3JpdGUpOgorICAgICAgICAoX2Nvbm5lY3Qp
OgorICAgICAgICAodGNwKToKKyAgICAgICAgKHhmcik6CisgICAgICAgICh4ZnIub2YpOgorICAg
ICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3Jjb2RlLnB5OiBBZGRlZC4KKyAg
ICAgICAgKFVua25vd25SY29kZSk6CisgICAgICAgIChmcm9tX3RleHQpOgorICAgICAgICAoZnJv
bV9mbGFncyk6CisgICAgICAgICh0b19mbGFncyk6CisgICAgICAgICh0b190ZXh0KToKKyAgICAg
ICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZGF0YS5weTogQWRkZWQuCisgICAg
ICAgIChfaGV4aWZ5KToKKyAgICAgICAgKF9iYXNlNjRpZnkpOgorICAgICAgICAoX2VzY2FwaWZ5
KToKKyAgICAgICAgKF90cnVuY2F0ZV9iaXRtYXApOgorICAgICAgICAoUmRhdGEpOgorICAgICAg
ICAoUmRhdGEuZm9yKToKKyAgICAgICAgKFJkYXRhLl9faW5pdF9fKToKKyAgICAgICAgKFJkYXRh
LmNvdmVycyk6CisgICAgICAgIChSZGF0YS5leHRlbmRlZF9yZGF0YXR5cGUpOgorICAgICAgICAo
UmRhdGEudG9fdGV4dCk6CisgICAgICAgIChSZGF0YS50b193aXJlKToKKyAgICAgICAgKFJkYXRh
LnRvX2RpZ2VzdGFibGUpOgorICAgICAgICAoUmRhdGEudmFsaWRhdGUpOgorICAgICAgICAoUmRh
dGEuX19yZXByX18pOgorICAgICAgICAoUmRhdGEuX19zdHJfXyk6CisgICAgICAgIChSZGF0YS5f
Y21wKToKKyAgICAgICAgKFJkYXRhLl9fZXFfXyk6CisgICAgICAgIChSZGF0YS5fX2VxX18ub3Ip
OgorICAgICAgICAoUmRhdGEuX19uZV9fKToKKyAgICAgICAgKFJkYXRhLl9fbmVfXy5vcik6Cisg
ICAgICAgIChSZGF0YS5fX2x0X18pOgorICAgICAgICAoUmRhdGEuX19sdF9fLm9yKToKKyAgICAg
ICAgKFJkYXRhLl9fbGVfXyk6CisgICAgICAgIChSZGF0YS5fX2xlX18ub3IpOgorICAgICAgICAo
UmRhdGEuX19nZV9fKToKKyAgICAgICAgKFJkYXRhLl9fZ2VfXy5vcik6CisgICAgICAgIChSZGF0
YS5fX2d0X18pOgorICAgICAgICAoUmRhdGEuX19ndF9fLm9yKToKKyAgICAgICAgKFJkYXRhLmZy
b21fdGV4dCk6CisgICAgICAgIChSZGF0YS5mcm9tX3dpcmUpOgorICAgICAgICAoUmRhdGEuY2hv
b3NlX3JlbGF0aXZpdHkpOgorICAgICAgICAoR2VuZXJpY1JkYXRhKToKKyAgICAgICAgKEdlbmVy
aWNSZGF0YS5pcyk6CisgICAgICAgIChHZW5lcmljUmRhdGEuX19pbml0X18pOgorICAgICAgICAo
R2VuZXJpY1JkYXRhLnRvX3RleHQpOgorICAgICAgICAoR2VuZXJpY1JkYXRhLmZyb21fdGV4dCk6
CisgICAgICAgIChHZW5lcmljUmRhdGEudG9fd2lyZSk6CisgICAgICAgIChHZW5lcmljUmRhdGEu
ZnJvbV93aXJlKToKKyAgICAgICAgKEdlbmVyaWNSZGF0YS5fY21wKToKKyAgICAgICAgKGdldF9y
ZGF0YV9jbGFzcyk6CisgICAgICAgIChnZXRfcmRhdGFfY2xhc3MuaW1wb3J0X21vZHVsZSk6Cisg
ICAgICAgIChmcm9tX3RleHQpOgorICAgICAgICAoZnJvbV90ZXh0LndoaWNoKToKKyAgICAgICAg
KGZyb21fdGV4dC5hbmQpOgorICAgICAgICAoZnJvbV90ZXh0LmlzKToKKyAgICAgICAgKGZyb21f
d2lyZSk6CisgICAgICAgIChmcm9tX3dpcmUud2hpY2gpOgorICAgICAgICAoZnJvbV93aXJlLmFu
ZCk6CisgICAgICAgIChmcm9tX3dpcmUuaXMpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhp
cmRfcGFydHkvZG5zL3JkYXRhY2xhc3MucHk6IEFkZGVkLgorICAgICAgICAodGV4dHVhbCk6Cisg
ICAgICAgICh2YWx1ZSk6CisgICAgICAgIChpcyk6CisgICAgICAgIChVbmtub3duUmRhdGFjbGFz
cyk6CisgICAgICAgIChVbmtub3duUmRhdGFjbGFzcy5pcyk6CisgICAgICAgIChmcm9tX3RleHQp
OgorICAgICAgICAoZnJvbV90ZXh0LnZhbHVlKToKKyAgICAgICAgKGZyb21fdGV4dC5pcyk6Cisg
ICAgICAgIChmcm9tX3RleHQubXVzdCk6CisgICAgICAgICh0b190ZXh0KToKKyAgICAgICAgKHRv
X3RleHQudG8pOgorICAgICAgICAodG9fdGV4dC52YWx1ZSk6CisgICAgICAgICh0b190ZXh0Lm11
c3QpOgorICAgICAgICAoaXNfbWV0YWNsYXNzKToKKyAgICAgICAgKGlzX21ldGFjbGFzcy5pcyk6
CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmRhdGFzZXQucHk6IEFk
ZGVkLgorICAgICAgICAoRGlmZmVyaW5nQ292ZXJzKToKKyAgICAgICAgKEluY29tcGF0aWJsZVR5
cGVzKToKKyAgICAgICAgKFJkYXRhc2V0KToKKyAgICAgICAgKFJkYXRhc2V0Lm9mKToKKyAgICAg
ICAgKFJkYXRhc2V0Ll9faW5pdF9fKToKKyAgICAgICAgKFJkYXRhc2V0Ll9faW5pdF9fLmFuZCk6
CisgICAgICAgIChSZGF0YXNldC5fX2luaXRfXy5pbnN0YW5jZSk6CisgICAgICAgIChSZGF0YXNl
dC5fY2xvbmUpOgorICAgICAgICAoUmRhdGFzZXQudXBkYXRlX3R0bCk6CisgICAgICAgIChSZGF0
YXNldC5hZGQpOgorICAgICAgICAoUmRhdGFzZXQuYWRkLm9yKToKKyAgICAgICAgKFJkYXRhc2V0
LnVuaW9uX3VwZGF0ZSk6CisgICAgICAgIChSZGF0YXNldC5pbnRlcnNlY3Rpb25fdXBkYXRlKToK
KyAgICAgICAgKFJkYXRhc2V0LnVwZGF0ZSk6CisgICAgICAgIChSZGF0YXNldC5fX3JlcHJfXyk6
CisgICAgICAgIChSZGF0YXNldC5fX3N0cl9fKToKKyAgICAgICAgKFJkYXRhc2V0Ll9fZXFfXyk6
CisgICAgICAgIChSZGF0YXNldC5fX2VxX18ub3IpOgorICAgICAgICAoUmRhdGFzZXQuX19uZV9f
KToKKyAgICAgICAgKFJkYXRhc2V0LnRvX3RleHQpOgorICAgICAgICAoUmRhdGFzZXQudG9fdGV4
dC5pcyk6CisgICAgICAgIChSZGF0YXNldC50b193aXJlKToKKyAgICAgICAgKFJkYXRhc2V0LnRv
X3dpcmUuaXMpOgorICAgICAgICAoUmRhdGFzZXQubWF0Y2gpOgorICAgICAgICAoUmRhdGFzZXQu
bWF0Y2guYW5kKToKKyAgICAgICAgKGZyb21fdGV4dF9saXN0KToKKyAgICAgICAgKGZyb21fdGV4
dCk6CisgICAgICAgIChmcm9tX3JkYXRhX2xpc3QpOgorICAgICAgICAoZnJvbV9yZGF0YSk6Cisg
ICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmRhdGF0eXBlLnB5OiBBZGRl
ZC4KKyAgICAgICAgKFVua25vd25SZGF0YXR5cGUpOgorICAgICAgICAoZnJvbV90ZXh0KToKKyAg
ICAgICAgKHRvX3RleHQpOgorICAgICAgICAoaXNfbWV0YXR5cGUpOgorICAgICAgICAoaXNfc2lu
Z2xldG9uKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVz
OiBBZGRlZC4KKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVz
L0FOWTogQWRkZWQuCisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0
eXBlcy9BTlkvQUZTREIucHk6IEFkZGVkLgorICAgICAgICAoQUZTREIpOgorICAgICAgICAoQUZT
REIuZ2V0X3N1YnR5cGUpOgorICAgICAgICAoQUZTREIuc2V0X3N1YnR5cGUpOgorICAgICAgICAo
QUZTREIuZ2V0X2hvc3RuYW1lKToKKyAgICAgICAgKEFGU0RCLnNldF9ob3N0bmFtZSk6CisgICAg
ICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvQ0VSVC5weTog
QWRkZWQuCisgICAgICAgIChfY3R5cGVfZnJvbV90ZXh0KToKKyAgICAgICAgKF9jdHlwZV90b190
ZXh0KToKKyAgICAgICAgKENFUlQpOgorICAgICAgICAoQ0VSVC5fX2luaXRfXyk6CisgICAgICAg
IChDRVJULnRvX3RleHQpOgorICAgICAgICAoQ0VSVC5mcm9tX3RleHQpOgorICAgICAgICAoQ0VS
VC50b193aXJlKToKKyAgICAgICAgKENFUlQuZnJvbV93aXJlKToKKyAgICAgICAgKENFUlQuX2Nt
cCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkv
Q05BTUUucHk6IEFkZGVkLgorICAgICAgICAoQ05BTUUpOgorICAgICAgICAqIFdlYlBhZ2VSZXBs
YXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0RMVi5weTogQWRkZWQuCisgICAgICAgIChE
TFYpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5Z
L0ROQU1FLnB5OiBBZGRlZC4KKyAgICAgICAgKEROQU1FKToKKyAgICAgICAgKEROQU1FLnRvX2Rp
Z2VzdGFibGUpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlw
ZXMvQU5ZL0ROU0tFWS5weTogQWRkZWQuCisgICAgICAgIChETlNLRVkpOgorICAgICAgICAqIFdl
YlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0RTLnB5OiBBZGRlZC4KKyAg
ICAgICAgKERTKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5
cGVzL0FOWS9HUE9TLnB5OiBBZGRlZC4KKyAgICAgICAgKF92YWxpZGF0ZV9mbG9hdF9zdHJpbmcp
OgorICAgICAgICAoR1BPUyk6CisgICAgICAgIChHUE9TLl9faW5pdF9fKToKKyAgICAgICAgKEdQ
T1MudG9fdGV4dCk6CisgICAgICAgIChHUE9TLmZyb21fdGV4dCk6CisgICAgICAgIChHUE9TLnRv
X3dpcmUpOgorICAgICAgICAoR1BPUy5mcm9tX3dpcmUpOgorICAgICAgICAoR1BPUy5fY21wKToK
KyAgICAgICAgKEdQT1MuX2dldF9mbG9hdF9sYXRpdHVkZSk6CisgICAgICAgIChHUE9TLl9zZXRf
ZmxvYXRfbGF0aXR1ZGUpOgorICAgICAgICAoR1BPUy5fZ2V0X2Zsb2F0X2xvbmdpdHVkZSk6Cisg
ICAgICAgIChHUE9TLl9zZXRfZmxvYXRfbG9uZ2l0dWRlKToKKyAgICAgICAgKEdQT1MuX2dldF9m
bG9hdF9hbHRpdHVkZSk6CisgICAgICAgIChHUE9TLl9zZXRfZmxvYXRfYWx0aXR1ZGUpOgorICAg
ICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0hJTkZPLnB5
OiBBZGRlZC4KKyAgICAgICAgKEhJTkZPKToKKyAgICAgICAgKEhJTkZPLl9faW5pdF9fKToKKyAg
ICAgICAgKEhJTkZPLnRvX3RleHQpOgorICAgICAgICAoSElORk8uZnJvbV90ZXh0KToKKyAgICAg
ICAgKEhJTkZPLnRvX3dpcmUpOgorICAgICAgICAoSElORk8uZnJvbV93aXJlKToKKyAgICAgICAg
KEhJTkZPLl9jbXApOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3Jk
dHlwZXMvQU5ZL0hJUC5weTogQWRkZWQuCisgICAgICAgIChISVApOgorICAgICAgICAoSElQLl9f
aW5pdF9fKToKKyAgICAgICAgKEhJUC50b190ZXh0KToKKyAgICAgICAgKEhJUC5mcm9tX3RleHQp
OgorICAgICAgICAoSElQLnRvX3dpcmUpOgorICAgICAgICAoSElQLmZyb21fd2lyZSk6CisgICAg
ICAgIChISVAuY2hvb3NlX3JlbGF0aXZpdHkpOgorICAgICAgICAoSElQLl9jbXApOgorICAgICAg
ICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0lTRE4ucHk6IEFk
ZGVkLgorICAgICAgICAoSVNETik6CisgICAgICAgIChJU0ROLl9faW5pdF9fKToKKyAgICAgICAg
KElTRE4udG9fdGV4dCk6CisgICAgICAgIChJU0ROLmZyb21fdGV4dCk6CisgICAgICAgIChJU0RO
LnRvX3dpcmUpOgorICAgICAgICAoSVNETi5mcm9tX3dpcmUpOgorICAgICAgICAoSVNETi5fY21w
KToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9L
RVkucHk6IEFkZGVkLgorICAgICAgICAoS0VZKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3Ro
aXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9MT0MucHk6IEFkZGVkLgorICAgICAgICAoX2V4cG9u
ZW50X29mKToKKyAgICAgICAgKF9mbG9hdF90b190dXBsZSk6CisgICAgICAgIChfdHVwbGVfdG9f
ZmxvYXQpOgorICAgICAgICAoX2VuY29kZV9zaXplKToKKyAgICAgICAgKF9kZWNvZGVfc2l6ZSk6
CisgICAgICAgIChMT0MpOgorICAgICAgICAoTE9DLl9faW5pdF9fKToKKyAgICAgICAgKExPQy50
b190ZXh0KToKKyAgICAgICAgKExPQy5mcm9tX3RleHQpOgorICAgICAgICAoTE9DLnRvX3dpcmUp
OgorICAgICAgICAoTE9DLmZyb21fd2lyZSk6CisgICAgICAgIChMT0MuX2NtcCk6CisgICAgICAg
IChMT0MuX2dldF9mbG9hdF9sYXRpdHVkZSk6CisgICAgICAgIChMT0MuX3NldF9mbG9hdF9sYXRp
dHVkZSk6CisgICAgICAgIChMT0MuX2dldF9mbG9hdF9sb25naXR1ZGUpOgorICAgICAgICAoTE9D
Ll9zZXRfZmxvYXRfbG9uZ2l0dWRlKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3Bh
cnR5L2Rucy9yZHR5cGVzL0FOWS9NWC5weTogQWRkZWQuCisgICAgICAgIChNWCk6CisgICAgICAg
ICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvTlMucHk6IEFkZGVk
LgorICAgICAgICAoTlMpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5z
L3JkdHlwZXMvQU5ZL05TRUMucHk6IEFkZGVkLgorICAgICAgICAoTlNFQyk6CisgICAgICAgIChO
U0VDLl9faW5pdF9fKToKKyAgICAgICAgKE5TRUMudG9fdGV4dCk6CisgICAgICAgIChOU0VDLmZy
b21fdGV4dCk6CisgICAgICAgIChOU0VDLnRvX3dpcmUpOgorICAgICAgICAoTlNFQy5mcm9tX3dp
cmUpOgorICAgICAgICAoTlNFQy5jaG9vc2VfcmVsYXRpdml0eSk6CisgICAgICAgIChOU0VDLl9j
bXApOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5Z
L05TRUMzLnB5OiBBZGRlZC4KKyAgICAgICAgKE5TRUMzKToKKyAgICAgICAgKE5TRUMzLl9faW5p
dF9fKToKKyAgICAgICAgKE5TRUMzLnRvX3RleHQpOgorICAgICAgICAoTlNFQzMuZnJvbV90ZXh0
KToKKyAgICAgICAgKE5TRUMzLnRvX3dpcmUpOgorICAgICAgICAoTlNFQzMuZnJvbV93aXJlKToK
KyAgICAgICAgKE5TRUMzLl9jbXApOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvZG5zL3JkdHlwZXMvQU5ZL05TRUMzUEFSQU0ucHk6IEFkZGVkLgorICAgICAgICAoTlNFQzNQ
QVJBTSk6CisgICAgICAgIChOU0VDM1BBUkFNLl9faW5pdF9fKToKKyAgICAgICAgKE5TRUMzUEFS
QU0udG9fdGV4dCk6CisgICAgICAgIChOU0VDM1BBUkFNLmZyb21fdGV4dCk6CisgICAgICAgIChO
U0VDM1BBUkFNLnRvX3dpcmUpOgorICAgICAgICAoTlNFQzNQQVJBTS5mcm9tX3dpcmUpOgorICAg
ICAgICAoTlNFQzNQQVJBTS5fY21wKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3Bh
cnR5L2Rucy9yZHR5cGVzL0FOWS9OWFQucHk6IEFkZGVkLgorICAgICAgICAoTlhUKToKKyAgICAg
ICAgKE5YVC5fX2luaXRfXyk6CisgICAgICAgIChOWFQudG9fdGV4dCk6CisgICAgICAgIChOWFQu
ZnJvbV90ZXh0KToKKyAgICAgICAgKE5YVC50b193aXJlKToKKyAgICAgICAgKE5YVC50b19kaWdl
c3RhYmxlKToKKyAgICAgICAgKE5YVC5mcm9tX3dpcmUpOgorICAgICAgICAoTlhULmNob29zZV9y
ZWxhdGl2aXR5KToKKyAgICAgICAgKE5YVC5fY21wKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5
L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9QVFIucHk6IEFkZGVkLgorICAgICAgICAoUFRS
KToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9S
UC5weTogQWRkZWQuCisgICAgICAgIChSUCk6CisgICAgICAgIChSUC5fX2luaXRfXyk6CisgICAg
ICAgIChSUC50b190ZXh0KToKKyAgICAgICAgKFJQLmZyb21fdGV4dCk6CisgICAgICAgIChSUC50
b193aXJlKToKKyAgICAgICAgKFJQLnRvX2RpZ2VzdGFibGUpOgorICAgICAgICAoUlAuZnJvbV93
aXJlKToKKyAgICAgICAgKFJQLmNob29zZV9yZWxhdGl2aXR5KToKKyAgICAgICAgKFJQLl9jbXAp
OgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL1JS
U0lHLnB5OiBBZGRlZC4KKyAgICAgICAgKFJSU0lHKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5
L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9SVC5weTogQWRkZWQuCisgICAgICAgIChSVCk6
CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvU0lH
LnB5OiBBZGRlZC4KKyAgICAgICAgKFNJRyk6CisgICAgICAgIChTSUcudG9fZGlnZXN0YWJsZSk6
CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvU09B
LnB5OiBBZGRlZC4KKyAgICAgICAgKFNPQSk6CisgICAgICAgIChTT0EuX19pbml0X18pOgorICAg
ICAgICAoU09BLnRvX3RleHQpOgorICAgICAgICAoU09BLmZyb21fdGV4dCk6CisgICAgICAgIChT
T0EudG9fd2lyZSk6CisgICAgICAgIChTT0EudG9fZGlnZXN0YWJsZSk6CisgICAgICAgIChTT0Eu
ZnJvbV93aXJlKToKKyAgICAgICAgKFNPQS5jaG9vc2VfcmVsYXRpdml0eSk6CisgICAgICAgIChT
T0EuX2NtcCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBl
cy9BTlkvU1BGLnB5OiBBZGRlZC4KKyAgICAgICAgKFNQRik6CisgICAgICAgICogV2ViUGFnZVJl
cGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvU1NIRlAucHk6IEFkZGVkLgorICAgICAg
ICAoU1NIRlApOgorICAgICAgICAoU1NIRlAuX19pbml0X18pOgorICAgICAgICAoU1NIRlAudG9f
dGV4dCk6CisgICAgICAgIChTU0hGUC5mcm9tX3RleHQpOgorICAgICAgICAoU1NIRlAudG9fd2ly
ZSk6CisgICAgICAgIChTU0hGUC5mcm9tX3dpcmUpOgorICAgICAgICAoU1NIRlAuX2NtcCk6Cisg
ICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvVFhULnB5
OiBBZGRlZC4KKyAgICAgICAgKFRYVCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9w
YXJ0eS9kbnMvcmR0eXBlcy9BTlkvWDI1LnB5OiBBZGRlZC4KKyAgICAgICAgKFgyNSk6CisgICAg
ICAgIChYMjUuX19pbml0X18pOgorICAgICAgICAoWDI1LnRvX3RleHQpOgorICAgICAgICAoWDI1
LmZyb21fdGV4dCk6CisgICAgICAgIChYMjUudG9fd2lyZSk6CisgICAgICAgIChYMjUuZnJvbV93
aXJlKToKKyAgICAgICAgKFgyNS5fY21wKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJk
X3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogV2Vi
UGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTjogQWRkZWQuCisgICAgICAgICog
V2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9BLnB5OiBBZGRlZC4KKyAg
ICAgICAgKEEpOgorICAgICAgICAoQS5fX2luaXRfXyk6CisgICAgICAgIChBLnRvX3RleHQpOgor
ICAgICAgICAoQS5mcm9tX3RleHQpOgorICAgICAgICAoQS50b193aXJlKToKKyAgICAgICAgKEEu
ZnJvbV93aXJlKToKKyAgICAgICAgKEEuX2NtcCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90
aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9BQUFBLnB5OiBBZGRlZC4KKyAgICAgICAgKEFBQUEp
OgorICAgICAgICAoQUFBQS5fX2luaXRfXyk6CisgICAgICAgIChBQUFBLnRvX3RleHQpOgorICAg
ICAgICAoQUFBQS5mcm9tX3RleHQpOgorICAgICAgICAoQUFBQS50b193aXJlKToKKyAgICAgICAg
KEFBQUEuZnJvbV93aXJlKToKKyAgICAgICAgKEFBQUEuX2NtcCk6CisgICAgICAgICogV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9BUEwucHk6IEFkZGVkLgorICAgICAg
ICAoQVBMSXRlbSk6CisgICAgICAgIChBUExJdGVtLl9faW5pdF9fKToKKyAgICAgICAgKEFQTEl0
ZW0uX19zdHJfXyk6CisgICAgICAgIChBUExJdGVtLnRvX3dpcmUpOgorICAgICAgICAoQVBMKToK
KyAgICAgICAgKEFQTC5fX2luaXRfXyk6CisgICAgICAgIChBUEwudG9fdGV4dCk6CisgICAgICAg
IChBUEwuZnJvbV90ZXh0KToKKyAgICAgICAgKEFQTC50b193aXJlKToKKyAgICAgICAgKEFQTC5m
cm9tX3dpcmUpOgorICAgICAgICAoQVBMLl9jbXApOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkv
dGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvSU4vREhDSUQucHk6IEFkZGVkLgorICAgICAgICAoREhD
SUQpOgorICAgICAgICAoREhDSUQuX19pbml0X18pOgorICAgICAgICAoREhDSUQudG9fdGV4dCk6
CisgICAgICAgIChESENJRC5mcm9tX3RleHQpOgorICAgICAgICAoREhDSUQudG9fd2lyZSk6Cisg
ICAgICAgIChESENJRC5mcm9tX3dpcmUpOgorICAgICAgICAoREhDSUQuX2NtcCk6CisgICAgICAg
ICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9JUFNFQ0tFWS5weTog
QWRkZWQuCisgICAgICAgIChJUFNFQ0tFWSk6CisgICAgICAgIChJUFNFQ0tFWS5fX2luaXRfXyk6
CisgICAgICAgIChJUFNFQ0tFWS50b190ZXh0KToKKyAgICAgICAgKElQU0VDS0VZLmZyb21fdGV4
dCk6CisgICAgICAgIChJUFNFQ0tFWS50b193aXJlKToKKyAgICAgICAgKElQU0VDS0VZLmZyb21f
d2lyZSk6CisgICAgICAgIChJUFNFQ0tFWS5fY21wKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5
L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0lOL0tYLnB5OiBBZGRlZC4KKyAgICAgICAgKEtYKToK
KyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0lOL05BUFRS
LnB5OiBBZGRlZC4KKyAgICAgICAgKF93cml0ZV9zdHJpbmcpOgorICAgICAgICAoTkFQVFIpOgor
ICAgICAgICAoTkFQVFIuX19pbml0X18pOgorICAgICAgICAoTkFQVFIudG9fdGV4dCk6CisgICAg
ICAgIChOQVBUUi5mcm9tX3RleHQpOgorICAgICAgICAoTkFQVFIudG9fd2lyZSk6CisgICAgICAg
IChOQVBUUi5mcm9tX3dpcmUpOgorICAgICAgICAoTkFQVFIuY2hvb3NlX3JlbGF0aXZpdHkpOgor
ICAgICAgICAoTkFQVFIuX2NtcCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0
eS9kbnMvcmR0eXBlcy9JTi9OU0FQLnB5OiBBZGRlZC4KKyAgICAgICAgKE5TQVApOgorICAgICAg
ICAoTlNBUC5fX2luaXRfXyk6CisgICAgICAgIChOU0FQLnRvX3RleHQpOgorICAgICAgICAoTlNB
UC5mcm9tX3RleHQpOgorICAgICAgICAoTlNBUC50b193aXJlKToKKyAgICAgICAgKE5TQVAuZnJv
bV93aXJlKToKKyAgICAgICAgKE5TQVAuX2NtcCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90
aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9OU0FQX1BUUi5weTogQWRkZWQuCisgICAgICAgIChO
U0FQX1BUUik6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBl
cy9JTi9QWC5weTogQWRkZWQuCisgICAgICAgIChQWCk6CisgICAgICAgIChQWC5fX2luaXRfXyk6
CisgICAgICAgIChQWC50b190ZXh0KToKKyAgICAgICAgKFBYLmZyb21fdGV4dCk6CisgICAgICAg
IChQWC50b193aXJlKToKKyAgICAgICAgKFBYLmZyb21fd2lyZSk6CisgICAgICAgIChQWC5jaG9v
c2VfcmVsYXRpdml0eSk6CisgICAgICAgIChQWC5fY21wKToKKyAgICAgICAgKiBXZWJQYWdlUmVw
bGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0lOL1NSVi5weTogQWRkZWQuCisgICAgICAgIChT
UlYpOgorICAgICAgICAoU1JWLl9faW5pdF9fKToKKyAgICAgICAgKFNSVi50b190ZXh0KToKKyAg
ICAgICAgKFNSVi5mcm9tX3RleHQpOgorICAgICAgICAoU1JWLnRvX3dpcmUpOgorICAgICAgICAo
U1JWLmZyb21fd2lyZSk6CisgICAgICAgIChTUlYuY2hvb3NlX3JlbGF0aXZpdHkpOgorICAgICAg
ICAoU1JWLl9jbXApOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3Jk
dHlwZXMvSU4vV0tTLnB5OiBBZGRlZC4KKyAgICAgICAgKFdLUyk6CisgICAgICAgIChXS1MuX19p
bml0X18pOgorICAgICAgICAoV0tTLnRvX3RleHQpOgorICAgICAgICAoV0tTLmZyb21fdGV4dCk6
CisgICAgICAgIChXS1MudG9fd2lyZSk6CisgICAgICAgIChXS1MuZnJvbV93aXJlKToKKyAgICAg
ICAgKFdLUy5fY21wKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9y
ZHR5cGVzL0lOL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3Ro
aXJkX3BhcnR5L2Rucy9yZHR5cGVzL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBXZWJQ
YWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL2RzYmFzZS5weTogQWRkZWQuCisgICAg
ICAgIChEU0Jhc2UpOgorICAgICAgICAoRFNCYXNlLmZvcik6CisgICAgICAgIChEU0Jhc2UuX19p
bml0X18pOgorICAgICAgICAoRFNCYXNlLnRvX3RleHQpOgorICAgICAgICAoRFNCYXNlLmZyb21f
dGV4dCk6CisgICAgICAgIChEU0Jhc2UudG9fd2lyZSk6CisgICAgICAgIChEU0Jhc2UuZnJvbV93
aXJlKToKKyAgICAgICAgKERTQmFzZS5fY21wKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3Ro
aXJkX3BhcnR5L2Rucy9yZHR5cGVzL2tleWJhc2UucHk6IEFkZGVkLgorICAgICAgICAoS0VZQmFz
ZSk6CisgICAgICAgIChLRVlCYXNlLl9faW5pdF9fKToKKyAgICAgICAgKEtFWUJhc2UudG9fdGV4
dCk6CisgICAgICAgIChLRVlCYXNlLmZyb21fdGV4dCk6CisgICAgICAgIChLRVlCYXNlLnRvX3dp
cmUpOgorICAgICAgICAoS0VZQmFzZS5mcm9tX3dpcmUpOgorICAgICAgICAoS0VZQmFzZS5fY21w
KToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL214YmFz
ZS5weTogQWRkZWQuCisgICAgICAgIChNWEJhc2UpOgorICAgICAgICAoTVhCYXNlLmZvcik6Cisg
ICAgICAgIChNWEJhc2UuX19pbml0X18pOgorICAgICAgICAoTVhCYXNlLnRvX3RleHQpOgorICAg
ICAgICAoTVhCYXNlLmZyb21fdGV4dCk6CisgICAgICAgIChNWEJhc2UudG9fd2lyZSk6CisgICAg
ICAgIChNWEJhc2UudG9fZGlnZXN0YWJsZSk6CisgICAgICAgIChNWEJhc2UuZnJvbV93aXJlKToK
KyAgICAgICAgKE1YQmFzZS5jaG9vc2VfcmVsYXRpdml0eSk6CisgICAgICAgIChNWEJhc2UuX2Nt
cCk6CisgICAgICAgIChVbmNvbXByZXNzZWRNWCk6CisgICAgICAgIChVbmNvbXByZXNzZWRNWC5m
b3IpOgorICAgICAgICAoVW5jb21wcmVzc2VkTVgudG9fd2lyZSk6CisgICAgICAgIChVbmNvbXBy
ZXNzZWRNWC50b19kaWdlc3RhYmxlKToKKyAgICAgICAgKFVuY29tcHJlc3NlZERvd25jYXNpbmdN
WCk6CisgICAgICAgIChVbmNvbXByZXNzZWREb3duY2FzaW5nTVguZm9yKToKKyAgICAgICAgKFVu
Y29tcHJlc3NlZERvd25jYXNpbmdNWC50b193aXJlKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5
L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL25zYmFzZS5weTogQWRkZWQuCisgICAgICAgIChOU0Jh
c2UpOgorICAgICAgICAoTlNCYXNlLmZvcik6CisgICAgICAgIChOU0Jhc2UuX19pbml0X18pOgor
ICAgICAgICAoTlNCYXNlLnRvX3RleHQpOgorICAgICAgICAoTlNCYXNlLmZyb21fdGV4dCk6Cisg
ICAgICAgIChOU0Jhc2UudG9fd2lyZSk6CisgICAgICAgIChOU0Jhc2UudG9fZGlnZXN0YWJsZSk6
CisgICAgICAgIChOU0Jhc2UuZnJvbV93aXJlKToKKyAgICAgICAgKE5TQmFzZS5jaG9vc2VfcmVs
YXRpdml0eSk6CisgICAgICAgIChOU0Jhc2UuX2NtcCk6CisgICAgICAgIChVbmNvbXByZXNzZWRO
Uyk6CisgICAgICAgIChVbmNvbXByZXNzZWROUy5mb3IpOgorICAgICAgICAoVW5jb21wcmVzc2Vk
TlMudG9fd2lyZSk6CisgICAgICAgIChVbmNvbXByZXNzZWROUy50b19kaWdlc3RhYmxlKToKKyAg
ICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL3NpZ2Jhc2UucHk6
IEFkZGVkLgorICAgICAgICAoQmFkU2lnVGltZSk6CisgICAgICAgIChzaWd0aW1lX3RvX3Bvc2l4
dGltZSk6CisgICAgICAgIChwb3NpeHRpbWVfdG9fc2lndGltZSk6CisgICAgICAgIChTSUdCYXNl
KToKKyAgICAgICAgKFNJR0Jhc2UuX19pbml0X18pOgorICAgICAgICAoU0lHQmFzZS5jb3ZlcnMp
OgorICAgICAgICAoU0lHQmFzZS50b190ZXh0KToKKyAgICAgICAgKFNJR0Jhc2UuZnJvbV90ZXh0
KToKKyAgICAgICAgKFNJR0Jhc2UudG9fd2lyZSk6CisgICAgICAgIChTSUdCYXNlLmZyb21fd2ly
ZSk6CisgICAgICAgIChTSUdCYXNlLmNob29zZV9yZWxhdGl2aXR5KToKKyAgICAgICAgKFNJR0Jh
c2UuX2NtcCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBl
cy90eHRiYXNlLnB5OiBBZGRlZC4KKyAgICAgICAgKFRYVEJhc2UpOgorICAgICAgICAoVFhUQmFz
ZS5mb3IpOgorICAgICAgICAoVFhUQmFzZS5fX2luaXRfXyk6CisgICAgICAgIChUWFRCYXNlLnRv
X3RleHQpOgorICAgICAgICAoVFhUQmFzZS5mcm9tX3RleHQpOgorICAgICAgICAoVFhUQmFzZS50
b193aXJlKToKKyAgICAgICAgKFRYVEJhc2UuZnJvbV93aXJlKToKKyAgICAgICAgKFRYVEJhc2Uu
X2NtcCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmVuZGVyZXIu
cHk6IEFkZGVkLgorICAgICAgICAoUmVuZGVyZXIpOgorICAgICAgICAoUmVuZGVyZXIuZm9yKToK
KyAgICAgICAgKFJlbmRlcmVyLmFuZCk6CisgICAgICAgIChSZW5kZXJlci5pcyk6CisgICAgICAg
IChSZW5kZXJlci5fX2luaXRfXyk6CisgICAgICAgIChSZW5kZXJlci5fcm9sbGJhY2spOgorICAg
ICAgICAoUmVuZGVyZXIuX3NldF9zZWN0aW9uKToKKyAgICAgICAgKFJlbmRlcmVyLmFkZF9xdWVz
dGlvbik6CisgICAgICAgIChSZW5kZXJlci5hZGRfcnJzZXQpOgorICAgICAgICAoUmVuZGVyZXIu
YWRkX3JkYXRhc2V0KToKKyAgICAgICAgKFJlbmRlcmVyLmFkZF9lZG5zKToKKyAgICAgICAgKFJl
bmRlcmVyLmFkZF90c2lnKToKKyAgICAgICAgKFJlbmRlcmVyLndyaXRlX2hlYWRlcik6CisgICAg
ICAgIChSZW5kZXJlci5nZXRfd2lyZSk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9w
YXJ0eS9kbnMvcmVzb2x2ZXIucHk6IEFkZGVkLgorICAgICAgICAoTlhET01BSU4pOgorICAgICAg
ICAoTm9BbnN3ZXIpOgorICAgICAgICAoTm9OYW1lc2VydmVycyk6CisgICAgICAgIChOb3RBYnNv
bHV0ZSk6CisgICAgICAgIChOb1Jvb3RTT0EpOgorICAgICAgICAoQW5zd2VyKToKKyAgICAgICAg
KEFuc3dlci5idW5kbGUpOgorICAgICAgICAoQW5zd2VyLl9faW5pdF9fKToKKyAgICAgICAgKEFu
c3dlci5fX2dldGF0dHJfXyk6CisgICAgICAgIChBbnN3ZXIuX19sZW5fXyk6CisgICAgICAgIChB
bnN3ZXIuX19pdGVyX18pOgorICAgICAgICAoQW5zd2VyLl9fZ2V0aXRlbV9fKToKKyAgICAgICAg
KEFuc3dlci5fX2RlbGl0ZW1fXyk6CisgICAgICAgIChBbnN3ZXIuX19nZXRzbGljZV9fKToKKyAg
ICAgICAgKEFuc3dlci5fX2RlbHNsaWNlX18pOgorICAgICAgICAoQ2FjaGUpOgorICAgICAgICAo
Q2FjaGUuX19pbml0X18pOgorICAgICAgICAoQ2FjaGUubWF5YmVfY2xlYW4pOgorICAgICAgICAo
Q2FjaGUuZ2V0KToKKyAgICAgICAgKENhY2hlLnB1dCk6CisgICAgICAgIChDYWNoZS5mbHVzaCk6
CisgICAgICAgIChSZXNvbHZlcik6CisgICAgICAgIChSZXNvbHZlci5fX2luaXRfXyk6CisgICAg
ICAgIChSZXNvbHZlci5yZXNldCk6CisgICAgICAgIChSZXNvbHZlci5yZWFkX3Jlc29sdl9jb25m
KToKKyAgICAgICAgKFJlc29sdmVyLl9kZXRlcm1pbmVfc3BsaXRfY2hhcik6CisgICAgICAgIChS
ZXNvbHZlci5fY29uZmlnX3dpbjMyX25hbWVzZXJ2ZXJzKToKKyAgICAgICAgKFJlc29sdmVyLl9j
b25maWdfd2luMzJfZG9tYWluKToKKyAgICAgICAgKFJlc29sdmVyLl9jb25maWdfd2luMzJfc2Vh
cmNoKToKKyAgICAgICAgKFJlc29sdmVyLl9jb25maWdfd2luMzJfZnJvbWtleSk6CisgICAgICAg
IChSZXNvbHZlci5yZWFkX3JlZ2lzdHJ5KToKKyAgICAgICAgKFJlc29sdmVyLl93aW4zMl9pc19u
aWNfZW5hYmxlZCk6CisgICAgICAgIChSZXNvbHZlci5fY29tcHV0ZV90aW1lb3V0KToKKyAgICAg
ICAgKFJlc29sdmVyLnF1ZXJ5KToKKyAgICAgICAgKFJlc29sdmVyLnVzZV90c2lnKToKKyAgICAg
ICAgKFJlc29sdmVyLnVzZV9lZG5zKToKKyAgICAgICAgKGdldF9kZWZhdWx0X3Jlc29sdmVyKToK
KyAgICAgICAgKHF1ZXJ5KToKKyAgICAgICAgKHpvbmVfZm9yX25hbWUpOgorICAgICAgICAqIFdl
YlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JldmVyc2VuYW1lLnB5OiBBZGRlZC4KKyAgICAg
ICAgKGZyb21fYWRkcmVzcyk6CisgICAgICAgICh0b19hZGRyZXNzKToKKyAgICAgICAgKiBXZWJQ
YWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9ycnNldC5weTogQWRkZWQuCisgICAgICAgIChSUnNl
dCk6CisgICAgICAgIChSUnNldC5fX2luaXRfXyk6CisgICAgICAgIChSUnNldC5fY2xvbmUpOgor
ICAgICAgICAoUlJzZXQuX19yZXByX18pOgorICAgICAgICAoUlJzZXQuX19zdHJfXyk6CisgICAg
ICAgIChSUnNldC5fX2VxX18pOgorICAgICAgICAoUlJzZXQubWF0Y2gpOgorICAgICAgICAoUlJz
ZXQudG9fdGV4dCk6CisgICAgICAgIChSUnNldC50b193aXJlKToKKyAgICAgICAgKFJSc2V0LnRv
X3JkYXRhc2V0KToKKyAgICAgICAgKGZyb21fdGV4dF9saXN0KToKKyAgICAgICAgKGZyb21fdGV4
dCk6CisgICAgICAgIChmcm9tX3JkYXRhX2xpc3QpOgorICAgICAgICAoZnJvbV9yZGF0YSk6Cisg
ICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvc2V0LnB5OiBBZGRlZC4KKyAg
ICAgICAgKFNldCk6CisgICAgICAgIChTZXQuaW1wbGVtZW50cyk6CisgICAgICAgIChTZXQuX19p
bml0X18pOgorICAgICAgICAoU2V0Ll9fcmVwcl9fKToKKyAgICAgICAgKFNldC5hZGQpOgorICAg
ICAgICAoU2V0LnJlbW92ZSk6CisgICAgICAgIChTZXQuZGlzY2FyZCk6CisgICAgICAgIChTZXQu
X2Nsb25lKToKKyAgICAgICAgKFNldC5fX2NvcHlfXyk6CisgICAgICAgIChTZXQuY29weSk6Cisg
ICAgICAgIChTZXQudW5pb25fdXBkYXRlKToKKyAgICAgICAgKFNldC5pbnRlcnNlY3Rpb25fdXBk
YXRlKToKKyAgICAgICAgKFNldC5kaWZmZXJlbmNlX3VwZGF0ZSk6CisgICAgICAgIChTZXQudW5p
b24pOgorICAgICAgICAoU2V0LmludGVyc2VjdGlvbik6CisgICAgICAgIChTZXQuZGlmZmVyZW5j
ZSk6CisgICAgICAgIChTZXQuX19vcl9fKToKKyAgICAgICAgKFNldC5fX2FuZF9fKToKKyAgICAg
ICAgKFNldC5fX2FkZF9fKToKKyAgICAgICAgKFNldC5fX3N1Yl9fKToKKyAgICAgICAgKFNldC5f
X2lvcl9fKToKKyAgICAgICAgKFNldC5fX2lhbmRfXyk6CisgICAgICAgIChTZXQuX19pYWRkX18p
OgorICAgICAgICAoU2V0Ll9faXN1Yl9fKToKKyAgICAgICAgKFNldC51cGRhdGUpOgorICAgICAg
ICAoU2V0LmNsZWFyKToKKyAgICAgICAgKFNldC5fX2VxX18pOgorICAgICAgICAoU2V0Ll9fbmVf
Xyk6CisgICAgICAgIChTZXQuX19sZW5fXyk6CisgICAgICAgIChTZXQuX19pdGVyX18pOgorICAg
ICAgICAoU2V0Ll9fZ2V0aXRlbV9fKToKKyAgICAgICAgKFNldC5fX2RlbGl0ZW1fXyk6CisgICAg
ICAgIChTZXQuX19nZXRzbGljZV9fKToKKyAgICAgICAgKFNldC5fX2RlbHNsaWNlX18pOgorICAg
ICAgICAoU2V0Lmlzc3Vic2V0KToKKyAgICAgICAgKFNldC5pc3N1cGVyc2V0KToKKyAgICAgICAg
KiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy90b2tlbml6ZXIucHk6IEFkZGVkLgorICAg
ICAgICAoVW5nZXRCdWZmZXJGdWxsKToKKyAgICAgICAgKFRva2VuKToKKyAgICAgICAgKFRva2Vu
Ll9faW5pdF9fKToKKyAgICAgICAgKFRva2VuLmlzX2VvZik6CisgICAgICAgIChUb2tlbi5pc19l
b2wpOgorICAgICAgICAoVG9rZW4uaXNfd2hpdGVzcGFjZSk6CisgICAgICAgIChUb2tlbi5pc19p
ZGVudGlmaWVyKToKKyAgICAgICAgKFRva2VuLmlzX3F1b3RlZF9zdHJpbmcpOgorICAgICAgICAo
VG9rZW4uaXNfY29tbWVudCk6CisgICAgICAgIChUb2tlbi5pc19kZWxpbWl0ZXIpOgorICAgICAg
ICAoVG9rZW4uaXNfZW9sX29yX2VvZik6CisgICAgICAgIChUb2tlbi5fX2VxX18pOgorICAgICAg
ICAoVG9rZW4uX19uZV9fKToKKyAgICAgICAgKFRva2VuLl9fc3RyX18pOgorICAgICAgICAoVG9r
ZW4udW5lc2NhcGUpOgorICAgICAgICAoVG9rZW4uX19sZW5fXyk6CisgICAgICAgIChUb2tlbi5f
X2l0ZXJfXyk6CisgICAgICAgIChUb2tlbi5fX2dldGl0ZW1fXyk6CisgICAgICAgIChUb2tlbml6
ZXIpOgorICAgICAgICAoVG9rZW5pemVyLl9faW5pdF9fKToKKyAgICAgICAgKFRva2VuaXplci5f
Z2V0X2NoYXIpOgorICAgICAgICAoVG9rZW5pemVyLndoZXJlKToKKyAgICAgICAgKFRva2VuaXpl
ci5fdW5nZXRfY2hhcik6CisgICAgICAgIChUb2tlbml6ZXIuc2tpcF93aGl0ZXNwYWNlKToKKyAg
ICAgICAgKFRva2VuaXplci5nZXQpOgorICAgICAgICAoVG9rZW5pemVyLnVuZ2V0KToKKyAgICAg
ICAgKFRva2VuaXplci5uZXh0KToKKyAgICAgICAgKFRva2VuaXplci5fX2l0ZXJfXyk6CisgICAg
ICAgIChUb2tlbml6ZXIuZ2V0X2ludCk6CisgICAgICAgIChUb2tlbml6ZXIuZ2V0X3VpbnQ4KToK
KyAgICAgICAgKFRva2VuaXplci5nZXRfdWludDE2KToKKyAgICAgICAgKFRva2VuaXplci5nZXRf
dWludDMyKToKKyAgICAgICAgKFRva2VuaXplci5nZXRfc3RyaW5nKToKKyAgICAgICAgKFRva2Vu
aXplci5nZXRfaWRlbnRpZmllcik6CisgICAgICAgIChUb2tlbml6ZXIuZ2V0X25hbWUpOgorICAg
ICAgICAoVG9rZW5pemVyLmdldF9lb2wpOgorICAgICAgICAoVG9rZW5pemVyLmdldF90dGwpOgor
ICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3RzaWcucHk6IEFkZGVkLgor
ICAgICAgICAoQmFkVGltZSk6CisgICAgICAgIChCYWRTaWduYXR1cmUpOgorICAgICAgICAoUGVl
ckVycm9yKToKKyAgICAgICAgKFBlZXJFcnJvci5mb3IpOgorICAgICAgICAoUGVlckJhZEtleSk6
CisgICAgICAgIChQZWVyQmFkU2lnbmF0dXJlKToKKyAgICAgICAgKFBlZXJCYWRUaW1lKToKKyAg
ICAgICAgKFBlZXJCYWRUcnVuY2F0aW9uKToKKyAgICAgICAgKHNpZ24pOgorICAgICAgICAoaG1h
Y19tZDUpOgorICAgICAgICAodmFsaWRhdGUpOgorICAgICAgICAoZ2V0X2FsZ29yaXRobSk6Cisg
ICAgICAgIChnZXRfYWxnb3JpdGhtLkhhc2hsaWJXcmFwcGVyKToKKyAgICAgICAgKGdldF9hbGdv
cml0aG0uSGFzaGxpYldyYXBwZXIuX19pbml0X18pOgorICAgICAgICAoZ2V0X2FsZ29yaXRobS5I
YXNobGliV3JhcHBlci5uZXcpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkv
ZG5zL3RzaWdrZXlyaW5nLnB5OiBBZGRlZC4KKyAgICAgICAgKGZyb21fdGV4dCk6CisgICAgICAg
ICh0b190ZXh0KToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy90dGwu
cHk6IEFkZGVkLgorICAgICAgICAoQmFkVFRMKToKKyAgICAgICAgKGZyb21fdGV4dCk6CisgICAg
ICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvdXBkYXRlLnB5OiBBZGRlZC4KKyAg
ICAgICAgKFVwZGF0ZSk6CisgICAgICAgIChVcGRhdGUuX19pbml0X18pOgorICAgICAgICAoVXBk
YXRlLl9faW5pdF9fLm9mKToKKyAgICAgICAgKFVwZGF0ZS5fYWRkX3JyKToKKyAgICAgICAgKFVw
ZGF0ZS5fYWRkKToKKyAgICAgICAgKFVwZGF0ZS5hZGQpOgorICAgICAgICAoVXBkYXRlLmRlbGV0
ZSk6CisgICAgICAgIChVcGRhdGUucmVwbGFjZSk6CisgICAgICAgIChVcGRhdGUucHJlc2VudCk6
CisgICAgICAgIChVcGRhdGUuYWJzZW50KToKKyAgICAgICAgKFVwZGF0ZS50b193aXJlKToKKyAg
ICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy92ZXJzaW9uLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy96b25lLnB5OiBBZGRlZC4K
KyAgICAgICAgKEJhZFpvbmUpOgorICAgICAgICAoTm9TT0EpOgorICAgICAgICAoTm9OUyk6Cisg
ICAgICAgIChVbmtub3duT3JpZ2luKToKKyAgICAgICAgKFpvbmUpOgorICAgICAgICAoWm9uZS5J
Tik6CisgICAgICAgIChab25lLm9yKToKKyAgICAgICAgKFpvbmUuX19pbml0X18pOgorICAgICAg
ICAoWm9uZS5fX2luaXRfXy5JTik6CisgICAgICAgIChab25lLl9fZXFfXyk6CisgICAgICAgICha
b25lLl9fZXFfXy5vcik6CisgICAgICAgIChab25lLl9fbmVfXyk6CisgICAgICAgIChab25lLl92
YWxpZGF0ZV9uYW1lKToKKyAgICAgICAgKFpvbmUuX19nZXRpdGVtX18pOgorICAgICAgICAoWm9u
ZS5fX3NldGl0ZW1fXyk6CisgICAgICAgIChab25lLl9fZGVsaXRlbV9fKToKKyAgICAgICAgKFpv
bmUuX19pdGVyX18pOgorICAgICAgICAoWm9uZS5pdGVya2V5cyk6CisgICAgICAgIChab25lLmtl
eXMpOgorICAgICAgICAoWm9uZS5pdGVydmFsdWVzKToKKyAgICAgICAgKFpvbmUudmFsdWVzKToK
KyAgICAgICAgKFpvbmUuaXRlcml0ZW1zKToKKyAgICAgICAgKFpvbmUuaXRlbXMpOgorICAgICAg
ICAoWm9uZS5nZXQpOgorICAgICAgICAoWm9uZS5fX2NvbnRhaW5zX18pOgorICAgICAgICAoWm9u
ZS5maW5kX25vZGUpOgorICAgICAgICAoWm9uZS5nZXRfbm9kZSk6CisgICAgICAgIChab25lLmRl
bGV0ZV9ub2RlKToKKyAgICAgICAgKFpvbmUuZmluZF9yZGF0YXNldCk6CisgICAgICAgIChab25l
LmdldF9yZGF0YXNldCk6CisgICAgICAgIChab25lLmRlbGV0ZV9yZGF0YXNldCk6CisgICAgICAg
IChab25lLnJlcGxhY2VfcmRhdGFzZXQpOgorICAgICAgICAoWm9uZS5maW5kX3Jyc2V0KToKKyAg
ICAgICAgKFpvbmUuZ2V0X3Jyc2V0KToKKyAgICAgICAgKFpvbmUuaXRlcmF0ZV9yZGF0YXNldHMp
OgorICAgICAgICAoWm9uZS5pdGVyYXRlX3JkYXRhcyk6CisgICAgICAgIChab25lLnRvX2ZpbGUp
OgorICAgICAgICAoWm9uZS5jaGVja19vcmlnaW4pOgorICAgICAgICAoX01hc3RlclJlYWRlcik6
CisgICAgICAgIChfTWFzdGVyUmVhZGVyLl9faW5pdF9fKToKKyAgICAgICAgKF9NYXN0ZXJSZWFk
ZXIuX2VhdF9saW5lKToKKyAgICAgICAgKF9NYXN0ZXJSZWFkZXIuX3JyX2xpbmUpOgorICAgICAg
ICAoX01hc3RlclJlYWRlci5fcnJfbGluZS5pcyk6CisgICAgICAgIChfTWFzdGVyUmVhZGVyLnJl
YWQpOgorICAgICAgICAoZnJvbV90ZXh0KToKKyAgICAgICAgKGZyb21fdGV4dC5JTik6CisgICAg
ICAgIChmcm9tX2ZpbGUpOgorICAgICAgICAoZnJvbV9maWxlLklOKToKKyAgICAgICAgKGZyb21f
eGZyKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2lwYWRkcjogQWRkZWQu
CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9pcGFkZHIvQ09QWUlORzogQWRk
ZWQuCisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9pcGFkZHIvTUFOSUZFU1Qu
aW46IEFkZGVkLgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvaXBhZGRyL09X
TkVSUzogQWRkZWQuCisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9pcGFkZHIv
UkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2lwYWRk
ci9pcGFkZHIucHk6IEFkZGVkLgorICAgICAgICAoQWRkcmVzc1ZhbHVlRXJyb3IpOgorICAgICAg
ICAoTmV0bWFza1ZhbHVlRXJyb3IpOgorICAgICAgICAoSVBBZGRyZXNzKToKKyAgICAgICAgKElQ
TmV0d29yayk6CisgICAgICAgICh2NF9pbnRfdG9fcGFja2VkKToKKyAgICAgICAgKHY2X2ludF90
b19wYWNrZWQpOgorICAgICAgICAoX2ZpbmRfYWRkcmVzc19yYW5nZSk6CisgICAgICAgIChfZ2V0
X3ByZWZpeF9sZW5ndGgpOgorICAgICAgICAoX2NvdW50X3JpZ2h0aGFuZF96ZXJvX2JpdHMpOgor
ICAgICAgICAoc3VtbWFyaXplX2FkZHJlc3NfcmFuZ2UpOgorICAgICAgICAoX2NvbGxhcHNlX2Fk
ZHJlc3NfbGlzdF9yZWN1cnNpdmUpOgorICAgICAgICAoY29sbGFwc2VfYWRkcmVzc19saXN0KToK
KyAgICAgICAgKEJ5dGVzKToKKyAgICAgICAgKEJ5dGVzLl9fcmVwcl9fKToKKyAgICAgICAgKGdl
dF9taXhlZF90eXBlX2tleSk6CisgICAgICAgIChfSVBBZGRyQmFzZSk6CisgICAgICAgIChfSVBB
ZGRyQmFzZS5fX2luZGV4X18pOgorICAgICAgICAoX0lQQWRkckJhc2UuX19pbnRfXyk6CisgICAg
ICAgIChfSVBBZGRyQmFzZS5fX2hleF9fKToKKyAgICAgICAgKF9JUEFkZHJCYXNlLmV4cGxvZGVk
KToKKyAgICAgICAgKF9JUEFkZHJCYXNlLmNvbXByZXNzZWQpOgorICAgICAgICAoX0Jhc2VJUCk6
CisgICAgICAgIChfQmFzZUlQLmNvbnRhaW5zKToKKyAgICAgICAgKF9CYXNlSVAuX19lcV9fKToK
KyAgICAgICAgKF9CYXNlSVAuX19uZV9fKToKKyAgICAgICAgKF9CYXNlSVAuX19sZV9fKToKKyAg
ICAgICAgKF9CYXNlSVAuX19nZV9fKToKKyAgICAgICAgKF9CYXNlSVAuX19sdF9fKToKKyAgICAg
ICAgKF9CYXNlSVAuX19ndF9fKToKKyAgICAgICAgKF9CYXNlSVAuX19hZGRfXyk6CisgICAgICAg
IChfQmFzZUlQLl9fc3ViX18pOgorICAgICAgICAoX0Jhc2VJUC5fX3JlcHJfXyk6CisgICAgICAg
IChfQmFzZUlQLl9fc3RyX18pOgorICAgICAgICAoX0Jhc2VJUC5fX2hhc2hfXyk6CisgICAgICAg
IChfQmFzZUlQLl9nZXRfYWRkcmVzc19rZXkpOgorICAgICAgICAoX0Jhc2VJUC52ZXJzaW9uKToK
KyAgICAgICAgKF9CYXNlTmV0KToKKyAgICAgICAgKF9CYXNlTmV0LmNvbnRhaW5zKToKKyAgICAg
ICAgKF9CYXNlTmV0Ll9faW5pdF9fKToKKyAgICAgICAgKF9CYXNlTmV0Ll9fcmVwcl9fKToKKyAg
ICAgICAgKF9CYXNlTmV0Lml0ZXJob3N0cyk6CisgICAgICAgIChfQmFzZU5ldC5fX2l0ZXJfXyk6
CisgICAgICAgIChfQmFzZU5ldC5fX2dldGl0ZW1fXyk6CisgICAgICAgIChfQmFzZU5ldC5fX2x0
X18pOgorICAgICAgICAoX0Jhc2VOZXQuX19ndF9fKToKKyAgICAgICAgKF9CYXNlTmV0Ll9fbGVf
Xyk6CisgICAgICAgIChfQmFzZU5ldC5fX2dlX18pOgorICAgICAgICAoX0Jhc2VOZXQuX19lcV9f
KToKKyAgICAgICAgKF9CYXNlTmV0Ll9fbmVfXyk6CisgICAgICAgIChfQmFzZU5ldC5fX3N0cl9f
KToKKyAgICAgICAgKF9CYXNlTmV0Ll9faGFzaF9fKToKKyAgICAgICAgKF9CYXNlTmV0Ll9fY29u
dGFpbnNfXyk6CisgICAgICAgIChfQmFzZU5ldC5vdmVybGFwcyk6CisgICAgICAgIChfQmFzZU5l
dC5uZXR3b3JrKToKKyAgICAgICAgKF9CYXNlTmV0LmJyb2FkY2FzdCk6CisgICAgICAgIChfQmFz
ZU5ldC5ob3N0bWFzayk6CisgICAgICAgIChfQmFzZU5ldC53aXRoX3ByZWZpeGxlbik6CisgICAg
ICAgIChfQmFzZU5ldC53aXRoX25ldG1hc2spOgorICAgICAgICAoX0Jhc2VOZXQud2l0aF9ob3N0
bWFzayk6CisgICAgICAgIChfQmFzZU5ldC5udW1ob3N0cyk6CisgICAgICAgIChfQmFzZU5ldC52
ZXJzaW9uKToKKyAgICAgICAgKF9CYXNlTmV0LnByZWZpeGxlbik6CisgICAgICAgIChfQmFzZU5l
dC5hZGRyZXNzX2V4Y2x1ZGUpOgorICAgICAgICAoX0Jhc2VOZXQuY29tcGFyZV9uZXR3b3Jrcyk6
CisgICAgICAgIChfQmFzZU5ldC5fZ2V0X25ldHdvcmtzX2tleSk6CisgICAgICAgIChfQmFzZU5l
dC5faXBfaW50X2Zyb21fcHJlZml4KToKKyAgICAgICAgKF9CYXNlTmV0Ll9wcmVmaXhfZnJvbV9p
cF9pbnQpOgorICAgICAgICAoX0Jhc2VOZXQuX2lwX3N0cmluZ19mcm9tX3ByZWZpeCk6CisgICAg
ICAgIChfQmFzZU5ldC5pdGVyX3N1Ym5ldHMpOgorICAgICAgICAoX0Jhc2VOZXQubWFza2VkKToK
KyAgICAgICAgKF9CYXNlTmV0LnN1Ym5ldCk6CisgICAgICAgIChfQmFzZU5ldC5zdXBlcm5ldCk6
CisgICAgICAgIChfQmFzZVY0KToKKyAgICAgICAgKF9CYXNlVjQuX19pbml0X18pOgorICAgICAg
ICAoX0Jhc2VWNC5fZXhwbG9kZV9zaG9ydGhhbmRfaXBfc3RyaW5nKToKKyAgICAgICAgKF9CYXNl
VjQuX2lwX2ludF9mcm9tX3N0cmluZyk6CisgICAgICAgIChfQmFzZVY0Ll9wYXJzZV9vY3RldCk6
CisgICAgICAgIChfQmFzZVY0Ll9zdHJpbmdfZnJvbV9pcF9pbnQpOgorICAgICAgICAoX0Jhc2VW
NC5tYXhfcHJlZml4bGVuKToKKyAgICAgICAgKF9CYXNlVjQucGFja2VkKToKKyAgICAgICAgKF9C
YXNlVjQudmVyc2lvbik6CisgICAgICAgIChfQmFzZVY0LmlzX3Jlc2VydmVkKToKKyAgICAgICAg
KF9CYXNlVjQuaXNfcHJpdmF0ZSk6CisgICAgICAgIChfQmFzZVY0LmlzX211bHRpY2FzdCk6Cisg
ICAgICAgIChfQmFzZVY0LmlzX3Vuc3BlY2lmaWVkKToKKyAgICAgICAgKF9CYXNlVjQuaXNfbG9v
cGJhY2spOgorICAgICAgICAoX0Jhc2VWNC5pc19saW5rX2xvY2FsKToKKyAgICAgICAgKElQdjRB
ZGRyZXNzKToKKyAgICAgICAgKElQdjRBZGRyZXNzLl9faW5pdF9fKToKKyAgICAgICAgKElQdjRO
ZXR3b3JrKToKKyAgICAgICAgKElQdjROZXR3b3JrLnJlcHJlc2VudHMpOgorICAgICAgICAoSVB2
NE5ldHdvcmsuX19pbml0X18pOgorICAgICAgICAoSVB2NE5ldHdvcmsuX2lzX2hvc3RtYXNrKToK
KyAgICAgICAgKElQdjROZXR3b3JrLl9pc192YWxpZF9uZXRtYXNrKToKKyAgICAgICAgKF9CYXNl
VjYpOgorICAgICAgICAoX0Jhc2VWNi5fX2luaXRfXyk6CisgICAgICAgIChfQmFzZVY2Ll9pcF9p
bnRfZnJvbV9zdHJpbmcpOgorICAgICAgICAoX0Jhc2VWNi5fcGFyc2VfaGV4dGV0KToKKyAgICAg
ICAgKF9CYXNlVjYuX2NvbXByZXNzX2hleHRldHMpOgorICAgICAgICAoX0Jhc2VWNi5fc3RyaW5n
X2Zyb21faXBfaW50KToKKyAgICAgICAgKF9CYXNlVjYuX2V4cGxvZGVfc2hvcnRoYW5kX2lwX3N0
cmluZyk6CisgICAgICAgIChfQmFzZVY2Lm1heF9wcmVmaXhsZW4pOgorICAgICAgICAoX0Jhc2VW
Ni5wYWNrZWQpOgorICAgICAgICAoX0Jhc2VWNi52ZXJzaW9uKToKKyAgICAgICAgKF9CYXNlVjYu
aXNfbXVsdGljYXN0KToKKyAgICAgICAgKF9CYXNlVjYuaXNfcmVzZXJ2ZWQpOgorICAgICAgICAo
X0Jhc2VWNi5pc191bnNwZWNpZmllZCk6CisgICAgICAgIChfQmFzZVY2LmlzX2xvb3BiYWNrKToK
KyAgICAgICAgKF9CYXNlVjYuaXNfbGlua19sb2NhbCk6CisgICAgICAgIChfQmFzZVY2LmlzX3Np
dGVfbG9jYWwpOgorICAgICAgICAoX0Jhc2VWNi5pc19wcml2YXRlKToKKyAgICAgICAgKF9CYXNl
VjYuaXB2NF9tYXBwZWQpOgorICAgICAgICAoX0Jhc2VWNi50ZXJlZG8pOgorICAgICAgICAoX0Jh
c2VWNi5zaXh0b2ZvdXIpOgorICAgICAgICAoSVB2NkFkZHJlc3MpOgorICAgICAgICAoSVB2NkFk
ZHJlc3MuX19pbml0X18pOgorICAgICAgICAoSVB2Nk5ldHdvcmspOgorICAgICAgICAoSVB2Nk5l
dHdvcmsucmVwcmVzZW50cyk6CisgICAgICAgIChJUHY2TmV0d29yay5fX2luaXRfXyk6CisgICAg
ICAgIChJUHY2TmV0d29yay5faXNfdmFsaWRfbmV0bWFzayk6CisgICAgICAgIChJUHY2TmV0d29y
ay53aXRoX25ldG1hc2spOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvaXBh
ZGRyL2lwYWRkcl90ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKElwYWRkclVuaXRUZXN0KToKKyAg
ICAgICAgKElwYWRkclVuaXRUZXN0LnNldFVwKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRl
YXJEb3duKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RSZXByKToKKyAgICAgICAgKElw
YWRkclVuaXRUZXN0LnRlc3RBdXRvTWFza2luZyk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50
ZXN0QWRkcmVzc0ludE1hdGgpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEludmFsaWRT
dHJpbmdzKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RJbnZhbGlkU3RyaW5ncy5Bc3Nl
cnRJbnZhbGlkSVApOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEdldE5ldHdvcmspOgor
ICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEJhZFZlcnNpb25Db21wYXJpc29uKToKKyAgICAg
ICAgKElwYWRkclVuaXRUZXN0LnRlc3RNaXhlZFR5cGVDb21wYXJpc29uKToKKyAgICAgICAgKElw
YWRkclVuaXRUZXN0LnRlc3RJcEZyb21JbnQpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVz
dElwRnJvbVBhY2tlZCk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0R2V0SXApOgorICAg
ICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEdldE5ldG1hc2spOgorICAgICAgICAoSXBhZGRyVW5p
dFRlc3QudGVzdFplcm9OZXRtYXNrKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RHZXRC
cm9hZGNhc3QpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEdldFByZWZpeGxlbik6Cisg
ICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0R2V0U3VwZXJuZXQpOgorICAgICAgICAoSXBhZGRy
VW5pdFRlc3QudGVzdEdldFN1cGVybmV0Myk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0
R2V0U3VwZXJuZXQ0KToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RJdGVyU3VibmV0cyk6
CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0SXRlckhvc3RzKToKKyAgICAgICAgKElwYWRk
clVuaXRUZXN0LnRlc3RGYW5jeVN1Ym5ldHRpbmcpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3Qu
dGVzdEdldFN1Ym5ldCk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0R2V0U3VibmV0Rm9y
U2luZ2xlMzIpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEdldFN1Ym5ldEZvclNpbmds
ZTEyOCk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0U3VibmV0Mik6CisgICAgICAgIChJ
cGFkZHJVbml0VGVzdC50ZXN0U3VibmV0RmFpbHNGb3JMYXJnZUNpZHJEaWZmKToKKyAgICAgICAg
KElwYWRkclVuaXRUZXN0LnRlc3RTdXBlcm5ldEZhaWxzRm9yTGFyZ2VDaWRyRGlmZik6CisgICAg
ICAgIChJcGFkZHJVbml0VGVzdC50ZXN0U3VibmV0RmFpbHNGb3JOZWdhdGl2ZUNpZHJEaWZmKToK
KyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RHZXROdW1Ib3N0cyk6CisgICAgICAgIChJcGFk
ZHJVbml0VGVzdC50ZXN0Q29udGFpbnMpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEJh
ZEFkZHJlc3MpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEJhZE5ldE1hc2spOgorICAg
ICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdE50aCk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50
ZXN0R2V0aXRlbSk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0RXF1YWwpOgorICAgICAg
ICAoSXBhZGRyVW5pdFRlc3QudGVzdE5vdEVxdWFsKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0
LnRlc3RTbGFzaDMyQ29uc3RydWN0b3IpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdFNs
YXNoMTI4Q29uc3RydWN0b3IpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdFNsYXNoMENv
bnN0cnVjdG9yKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RDb2xsYXBzaW5nKToKKyAg
ICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RTdW1tYXJpemluZyk6CisgICAgICAgIChJcGFkZHJV
bml0VGVzdC50ZXN0QWRkcmVzc0NvbXBhcmlzb24pOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3Qu
dGVzdE5ldHdvcmtDb21wYXJpc29uKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RTdHJp
Y3ROZXR3b3Jrcyk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0T3ZlcmxhcHMpOgorICAg
ICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEVtYmVkZGVkSXB2NCk6CisgICAgICAgIChJcGFkZHJV
bml0VGVzdC50ZXN0SVB2NkFkZHJlc3NUb29MYXJnZSk6CisgICAgICAgIChJcGFkZHJVbml0VGVz
dC50ZXN0SVBWZXJzaW9uKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RNYXhQcmVmaXhM
ZW5ndGgpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdFBhY2tlZCk6CisgICAgICAgIChJ
cGFkZHJVbml0VGVzdC50ZXN0SXBTdHJGcm9tUHJlZml4bGVuKToKKyAgICAgICAgKElwYWRkclVu
aXRUZXN0LnRlc3RJcFR5cGUpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdFJlc2VydmVk
SXB2NCk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0UmVzZXJ2ZWRJcHY2KToKKyAgICAg
ICAgKElwYWRkclVuaXRUZXN0LnRlc3RJcHY0TWFwcGVkKToKKyAgICAgICAgKElwYWRkclVuaXRU
ZXN0LnRlc3RBZGRyRXhjbHVkZSk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0SGFzaCk6
CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0Q29weUNvbnN0cnVjdG9yKToKKyAgICAgICAg
KElwYWRkclVuaXRUZXN0LnRlc3RDb21wcmVzc0lQdjZBZGRyZXNzKToKKyAgICAgICAgKElwYWRk
clVuaXRUZXN0LnRlc3RFeHBsb2RlU2hvcnRIYW5kSXBTdHIpOgorICAgICAgICAoSXBhZGRyVW5p
dFRlc3QudGVzdEludFJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRl
c3RIZXhSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0QmFja3dh
cmRzQ29tcGFiaWxpdHkpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEZvcmNlVmVyc2lv
bik6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0V2l0aFN0YXIpOgorICAgICAgICAoSXBh
ZGRyVW5pdFRlc3QudGVzdE5ldHdvcmtFbGVtZW50Q2FjaGluZyk6CisgICAgICAgIChJcGFkZHJV
bml0VGVzdC50ZXN0VGVyZWRvKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RzaXh0b2Zv
dXIpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvaXBhZGRyL3NldHVwLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2lwYWRkci90ZXN0
LTJ0bzMuc2g6IEFkZGVkLgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJo
dHRwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0cC9M
SUNFTlNFOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0
cC9SRUFETUUud2ViLXBhZ2UtcmVwbGF5OiBBZGRlZC4KKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5
L3RoaXJkX3BhcnR5L25iaHR0cC9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvY196bGliLnB5OiBBZGRlZC4KKyAgICAgICAgKF96
X3N0cmVhbSk6CisgICAgICAgIChDb21wcmVzc29yKToKKyAgICAgICAgKENvbXByZXNzb3IuX19p
bml0X18pOgorICAgICAgICAoQ29tcHJlc3Nvci5fX2NhbGxfXyk6CisgICAgICAgIChDb21wcmVz
c29yLl9fZGVsX18pOgorICAgICAgICAoRGVjb21wcmVzc29yKToKKyAgICAgICAgKERlY29tcHJl
c3Nvci5fX2luaXRfXyk6CisgICAgICAgIChEZWNvbXByZXNzb3IuX19jYWxsX18pOgorICAgICAg
ICAoRGVjb21wcmVzc29yLl9fZGVsX18pOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRf
cGFydHkvbmJodHRwL2NsaWVudC5weTogQWRkZWQuCisgICAgICAgIChDbGllbnQpOgorICAgICAg
ICAoQ2xpZW50Ll9faW5pdF9fKToKKyAgICAgICAgKENsaWVudC5yZXFfc3RhcnQpOgorICAgICAg
ICAoQ2xpZW50LnJlcV9ib2R5KToKKyAgICAgICAgKENsaWVudC5yZXFfZG9uZSk6CisgICAgICAg
IChDbGllbnQucmVzX2JvZHlfcGF1c2UpOgorICAgICAgICAoQ2xpZW50Ll9oYW5kbGVfY29ubmVj
dCk6CisgICAgICAgIChDbGllbnQuX2hhbmRsZV9jb25uZWN0X2Vycm9yKToKKyAgICAgICAgKENs
aWVudC5fY29ubl9jbG9zZWQpOgorICAgICAgICAoQ2xpZW50Ll9yZXRyeSk6CisgICAgICAgIChD
bGllbnQuX3JlcV9ib2R5X3BhdXNlKToKKyAgICAgICAgKENsaWVudC5faW5wdXRfc3RhcnQpOgor
ICAgICAgICAoQ2xpZW50Ll9pbnB1dF9ib2R5KToKKyAgICAgICAgKENsaWVudC5faW5wdXRfZW5k
KToKKyAgICAgICAgKENsaWVudC5faW5wdXRfZXJyb3IpOgorICAgICAgICAoQ2xpZW50Ll9vdXRw
dXQpOgorICAgICAgICAoQ2xpZW50Ll9oYW5kbGVfZXJyb3IpOgorICAgICAgICAoX0h0dHBDb25u
ZWN0aW9uUG9vbCk6CisgICAgICAgIChfSHR0cENvbm5lY3Rpb25Qb29sLmF0dGFjaCk6CisgICAg
ICAgIChfSHR0cENvbm5lY3Rpb25Qb29sLnJlbGVhc2UpOgorICAgICAgICAoX0h0dHBDb25uZWN0
aW9uUG9vbC5yZWxlYXNlLmlkbGVfY2xvc2UpOgorICAgICAgICAodGVzdF9jbGllbnQpOgorICAg
ICAgICAodGVzdF9jbGllbnQucHJpbnRlcik6CisgICAgICAgICh0ZXN0X2NsaWVudC5wcmludGVy
LmJvZHkpOgorICAgICAgICAodGVzdF9jbGllbnQucHJpbnRlci5kb25lKToKKyAgICAgICAgKiBX
ZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0cC9lcnJvci5weTogQWRkZWQuCisgICAgICAg
ICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvaHR0cF9jb21tb24ucHk6IEFkZGVk
LgorICAgICAgICAoZHVtbXkpOgorICAgICAgICAoaGVhZGVyX2RpY3QpOgorICAgICAgICAoZ2V0
X2hkcik6CisgICAgICAgIChIdHRwTWVzc2FnZUhhbmRsZXIpOgorICAgICAgICAoSHR0cE1lc3Nh
Z2VIYW5kbGVyLmZvcik6CisgICAgICAgIChIdHRwTWVzc2FnZUhhbmRsZXIuX19pbml0X18pOgor
ICAgICAgICAoSHR0cE1lc3NhZ2VIYW5kbGVyLl9pbnB1dF9zdGFydCk6CisgICAgICAgIChIdHRw
TWVzc2FnZUhhbmRsZXIuX2lucHV0X2JvZHkpOgorICAgICAgICAoSHR0cE1lc3NhZ2VIYW5kbGVy
Ll9pbnB1dF9lbmQpOgorICAgICAgICAoSHR0cE1lc3NhZ2VIYW5kbGVyLl9pbnB1dF9lcnJvcik6
CisgICAgICAgIChIdHRwTWVzc2FnZUhhbmRsZXIuX2hhbmRsZV9pbnB1dCk6CisgICAgICAgIChI
dHRwTWVzc2FnZUhhbmRsZXIuX2hhbmRsZV9ub2JvZHkpOgorICAgICAgICAoSHR0cE1lc3NhZ2VI
YW5kbGVyLl9oYW5kbGVfY2xvc2UpOgorICAgICAgICAoSHR0cE1lc3NhZ2VIYW5kbGVyLl9oYW5k
bGVfY2h1bmtlZCk6CisgICAgICAgIChIdHRwTWVzc2FnZUhhbmRsZXIuX2hhbmRsZV9jaHVua19u
ZXcpOgorICAgICAgICAoSHR0cE1lc3NhZ2VIYW5kbGVyLl9oYW5kbGVfY2h1bmtfYm9keSk6Cisg
ICAgICAgIChIdHRwTWVzc2FnZUhhbmRsZXIuX2hhbmRsZV9jaHVua19kb25lKToKKyAgICAgICAg
KEh0dHBNZXNzYWdlSGFuZGxlci5faGFuZGxlX2NvdW50ZWQpOgorICAgICAgICAoSHR0cE1lc3Nh
Z2VIYW5kbGVyLl9wYXJzZV9oZWFkZXJzKToKKyAgICAgICAgKEh0dHBNZXNzYWdlSGFuZGxlci5f
b3V0cHV0KToKKyAgICAgICAgKEh0dHBNZXNzYWdlSGFuZGxlci5faGFuZGxlX2Vycm9yKToKKyAg
ICAgICAgKEh0dHBNZXNzYWdlSGFuZGxlci5fb3V0cHV0X3N0YXJ0KToKKyAgICAgICAgKEh0dHBN
ZXNzYWdlSGFuZGxlci5fb3V0cHV0X2JvZHkpOgorICAgICAgICAoSHR0cE1lc3NhZ2VIYW5kbGVy
Ll9vdXRwdXRfZW5kKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0
cC9wdXNoX3RjcC5weTogQWRkZWQuCisgICAgICAgIChlcnJvcl9oYW5kbGVyKToKKyAgICAgICAg
KGNvbm5faGFuZGxlcik6CisgICAgICAgIChyZWFkX2NiKToKKyAgICAgICAgKGNsb3NlX2NiKToK
KyAgICAgICAgKHBhdXNlX2NiKToKKyAgICAgICAgKF9UY3BDb25uZWN0aW9uKToKKyAgICAgICAg
KF9UY3BDb25uZWN0aW9uLmZvcik6CisgICAgICAgIChfVGNwQ29ubmVjdGlvbi5fX2luaXRfXyk6
CisgICAgICAgIChfVGNwQ29ubmVjdGlvbi5oYW5kbGVfcmVhZCk6CisgICAgICAgIChfVGNwQ29u
bmVjdGlvbi5oYW5kbGVfd3JpdGUpOgorICAgICAgICAoX1RjcENvbm5lY3Rpb24uY29ubl9jbG9z
ZWQpOgorICAgICAgICAoX1RjcENvbm5lY3Rpb24ud3JpdGUpOgorICAgICAgICAocGF1c2UpOgor
ICAgICAgICAoY2xvc2UpOgorICAgICAgICAocmVhZGFibGUpOgorICAgICAgICAod3JpdGFibGUp
OgorICAgICAgICAoaGFuZGxlX2Vycm9yKToKKyAgICAgICAgKGNyZWF0ZV9zZXJ2ZXIpOgorICAg
ICAgICAoY3JlYXRlX3NlcnZlci5fX2luaXRfXyk6CisgICAgICAgIChjcmVhdGVfc2VydmVyLmhh
bmRsZV9hY2NlcHQpOgorICAgICAgICAoY3JlYXRlX3NlcnZlci5oYW5kbGVfZXJyb3IpOgorICAg
ICAgICAoY3JlYXRlX2NsaWVudCk6CisgICAgICAgIChjcmVhdGVfY2xpZW50Ll9faW5pdF9fKToK
KyAgICAgICAgKGNyZWF0ZV9jbGllbnQuaGFuZGxlX2Nvbm5lY3QpOgorICAgICAgICAoY3JlYXRl
X2NsaWVudC5oYW5kbGVfd3JpdGUpOgorICAgICAgICAoY3JlYXRlX2NsaWVudC5oYW5kbGVfZXJy
b3IpOgorICAgICAgICAoX0FzeW5jb3JlTG9vcCk6CisgICAgICAgIChfQXN5bmNvcmVMb29wLl9f
aW5pdF9fKToKKyAgICAgICAgKF9Bc3luY29yZUxvb3AucnVuKToKKyAgICAgICAgKF9Bc3luY29y
ZUxvb3Auc3RvcCk6CisgICAgICAgIChfQXN5bmNvcmVMb29wLnNjaGVkdWxlKToKKyAgICAgICAg
KF9Bc3luY29yZUxvb3Auc2NoZWR1bGUuY2IpOgorICAgICAgICAoX0FzeW5jb3JlTG9vcC5zY2hl
ZHVsZS5ldmVudF9ob2xkZXIpOgorICAgICAgICAoX0FzeW5jb3JlTG9vcC5zY2hlZHVsZS5ldmVu
dF9ob2xkZXIuX19pbml0X18pOgorICAgICAgICAoX0FzeW5jb3JlTG9vcC5zY2hlZHVsZS5ldmVu
dF9ob2xkZXIuZGVsZXRlKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25i
aHR0cC9zZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAoU2VydmVyKToKKyAgICAgICAgKFNlcnZl
ci5fX2luaXRfXyk6CisgICAgICAgIChTZXJ2ZXIuaGFuZGxlX2Nvbm5lY3Rpb24pOgorICAgICAg
ICAoSHR0cFNlcnZlckNvbm5lY3Rpb24pOgorICAgICAgICAoSHR0cFNlcnZlckNvbm5lY3Rpb24u
X19pbml0X18pOgorICAgICAgICAoSHR0cFNlcnZlckNvbm5lY3Rpb24ucmVzX3N0YXJ0KToKKyAg
ICAgICAgKEh0dHBTZXJ2ZXJDb25uZWN0aW9uLnJlc19ib2R5KToKKyAgICAgICAgKEh0dHBTZXJ2
ZXJDb25uZWN0aW9uLnJlc19kb25lKToKKyAgICAgICAgKEh0dHBTZXJ2ZXJDb25uZWN0aW9uLnJl
cV9ib2R5X3BhdXNlKToKKyAgICAgICAgKEh0dHBTZXJ2ZXJDb25uZWN0aW9uLl9yZXNfYm9keV9w
YXVzZSk6CisgICAgICAgIChIdHRwU2VydmVyQ29ubmVjdGlvbi5fY29ubl9jbG9zZWQpOgorICAg
ICAgICAoSHR0cFNlcnZlckNvbm5lY3Rpb24uX291dHB1dCk6CisgICAgICAgIChIdHRwU2VydmVy
Q29ubmVjdGlvbi5faW5wdXRfc3RhcnQpOgorICAgICAgICAoSHR0cFNlcnZlckNvbm5lY3Rpb24u
X2lucHV0X2JvZHkpOgorICAgICAgICAoSHR0cFNlcnZlckNvbm5lY3Rpb24uX2lucHV0X2VuZCk6
CisgICAgICAgIChIdHRwU2VydmVyQ29ubmVjdGlvbi5faW5wdXRfZXJyb3IpOgorICAgICAgICAo
SHR0cFNlcnZlckNvbm5lY3Rpb24uX2hhbmRsZV9lcnJvcik6CisgICAgICAgICh0ZXN0X2hhbmRs
ZXIpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJodHRwL3NwZHlfY2xp
ZW50LnB5OiBBZGRlZC4KKyAgICAgICAgKFNwZHlDbGllbnQpOgorICAgICAgICAoU3BkeUNsaWVu
dC5yZXFfc3RhcnQpOgorICAgICAgICAoU3BkeUNvbm5lY3Rpb24pOgorICAgICAgICAoU3BkeUNv
bm5lY3Rpb24uX19pbml0X18pOgorICAgICAgICAoU3BkeUNvbm5lY3Rpb24ucmVxX3N0YXJ0KToK
KyAgICAgICAgKFNwZHlDb25uZWN0aW9uLnJlcV9zdGFydC5yZXFfYm9keSk6CisgICAgICAgIChT
cGR5Q29ubmVjdGlvbi5yZXFfc3RhcnQucmVxX2RvbmUpOgorICAgICAgICAoU3BkeUNvbm5lY3Rp
b24ucmVxX2JvZHkpOgorICAgICAgICAoU3BkeUNvbm5lY3Rpb24ucmVxX2RvbmUpOgorICAgICAg
ICAoU3BkeUNvbm5lY3Rpb24ucmVzX2JvZHlfcGF1c2UpOgorICAgICAgICAoU3BkeUNvbm5lY3Rp
b24uaGFuZGxlX2Nvbm5lY3QpOgorICAgICAgICAoU3BkeUNvbm5lY3Rpb24uaGFuZGxlX2Nvbm5l
Y3RfZXJyb3IpOgorICAgICAgICAoU3BkeUNvbm5lY3Rpb24uX2Nvbm5fY2xvc2VkKToKKyAgICAg
ICAgKFNwZHlDb25uZWN0aW9uLl9yZXFfYm9keV9wYXVzZSk6CisgICAgICAgIChTcGR5Q29ubmVj
dGlvbi5faW5wdXRfc3RhcnQpOgorICAgICAgICAoU3BkeUNvbm5lY3Rpb24uX2lucHV0X2JvZHkp
OgorICAgICAgICAoU3BkeUNvbm5lY3Rpb24uX2lucHV0X2VuZCk6CisgICAgICAgIChTcGR5Q29u
bmVjdGlvbi5faW5wdXRfZXJyb3IpOgorICAgICAgICAoU3BkeUNvbm5lY3Rpb24uX291dHB1dCk6
CisgICAgICAgIChTcGR5Q29ubmVjdGlvbi5faGFuZGxlX2Vycm9yKToKKyAgICAgICAgKF9TcGR5
Q29ubmVjdGlvblBvb2wpOgorICAgICAgICAoX1NwZHlDb25uZWN0aW9uUG9vbC5nZXQpOgorICAg
ICAgICAodGVzdF9jbGllbnQpOgorICAgICAgICAodGVzdF9jbGllbnQucHJpbnRlcik6CisgICAg
ICAgICh0ZXN0X2NsaWVudC5wcmludGVyLmJvZHkpOgorICAgICAgICAodGVzdF9jbGllbnQucHJp
bnRlci5kb25lKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0cC9z
cGR5X2NvbW1vbi5weTogQWRkZWQuCisgICAgICAgIChTcGR5TWVzc2FnZUhhbmRsZXIpOgorICAg
ICAgICAoU3BkeU1lc3NhZ2VIYW5kbGVyLmZvcik6CisgICAgICAgIChTcGR5TWVzc2FnZUhhbmRs
ZXIuX19pbml0X18pOgorICAgICAgICAoU3BkeU1lc3NhZ2VIYW5kbGVyLl9pbnB1dF9zdGFydCk6
CisgICAgICAgIChTcGR5TWVzc2FnZUhhbmRsZXIuX2lucHV0X2JvZHkpOgorICAgICAgICAoU3Bk
eU1lc3NhZ2VIYW5kbGVyLl9pbnB1dF9lbmQpOgorICAgICAgICAoU3BkeU1lc3NhZ2VIYW5kbGVy
Ll9pbnB1dF9lcnJvcik6CisgICAgICAgIChTcGR5TWVzc2FnZUhhbmRsZXIuX2hhbmRsZV9pbnB1
dCk6CisgICAgICAgIChTcGR5TWVzc2FnZUhhbmRsZXIuX3BhcnNlX2hkcnMpOgorICAgICAgICAo
U3BkeU1lc3NhZ2VIYW5kbGVyLl9vdXRwdXQpOgorICAgICAgICAoU3BkeU1lc3NhZ2VIYW5kbGVy
Ll9oYW5kbGVfZXJyb3IpOgorICAgICAgICAoU3BkeU1lc3NhZ2VIYW5kbGVyLl9zZXJfc3luX2Zy
YW1lKToKKyAgICAgICAgKFNwZHlNZXNzYWdlSGFuZGxlci5fc2VyX2N0bF9mcmFtZSk6CisgICAg
ICAgIChTcGR5TWVzc2FnZUhhbmRsZXIuX3Nlcl9kYXRhX2ZyYW1lKToKKyAgICAgICAgKFNwZHlN
ZXNzYWdlSGFuZGxlci5fc2VyX2hkcnMpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRf
cGFydHkvbmJodHRwL3NwZHlfc2VydmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKFNwZHlTZXJ2ZXIp
OgorICAgICAgICAoU3BkeVNlcnZlci5fX2luaXRfXyk6CisgICAgICAgIChTcGR5U2VydmVyLmhh
bmRsZV9jb25uZWN0aW9uKToKKyAgICAgICAgKFNwZHlTZXJ2ZXJDb25uZWN0aW9uKToKKyAgICAg
ICAgKFNwZHlTZXJ2ZXJDb25uZWN0aW9uLl9faW5pdF9fKToKKyAgICAgICAgKFNwZHlTZXJ2ZXJD
b25uZWN0aW9uLnJlc19zdGFydCk6CisgICAgICAgIChTcGR5U2VydmVyQ29ubmVjdGlvbi5yZXNf
c3RhcnQucmVzX2JvZHkpOgorICAgICAgICAoU3BkeVNlcnZlckNvbm5lY3Rpb24ucmVzX3N0YXJ0
LnJlc19kb25lKToKKyAgICAgICAgKFNwZHlTZXJ2ZXJDb25uZWN0aW9uLnJlc19ib2R5KToKKyAg
ICAgICAgKFNwZHlTZXJ2ZXJDb25uZWN0aW9uLnJlc19kb25lKToKKyAgICAgICAgKFNwZHlTZXJ2
ZXJDb25uZWN0aW9uLnJlcV9ib2R5X3BhdXNlKToKKyAgICAgICAgKFNwZHlTZXJ2ZXJDb25uZWN0
aW9uLl9yZXNfYm9keV9wYXVzZSk6CisgICAgICAgIChTcGR5U2VydmVyQ29ubmVjdGlvbi5fY29u
bl9jbG9zZWQpOgorICAgICAgICAoU3BkeVNlcnZlckNvbm5lY3Rpb24uX2hhc193cml0ZV9kYXRh
KToKKyAgICAgICAgKFNwZHlTZXJ2ZXJDb25uZWN0aW9uLl93cml0ZV9mcmFtZV9jYWxsYmFjayk6
CisgICAgICAgIChTcGR5U2VydmVyQ29ubmVjdGlvbi5fc2NoZWR1bGVfd3JpdGUpOgorICAgICAg
ICAoU3BkeVNlcnZlckNvbm5lY3Rpb24uX3F1ZXVlX2ZyYW1lKToKKyAgICAgICAgKFNwZHlTZXJ2
ZXJDb25uZWN0aW9uLl9vdXRwdXQpOgorICAgICAgICAoU3BkeVNlcnZlckNvbm5lY3Rpb24uX2lu
cHV0X3N0YXJ0KToKKyAgICAgICAgKFNwZHlTZXJ2ZXJDb25uZWN0aW9uLl9pbnB1dF9zdGFydC5y
ZXNfc3RhcnQpOgorICAgICAgICAoU3BkeVNlcnZlckNvbm5lY3Rpb24uX2lucHV0X2JvZHkpOgor
ICAgICAgICAoU3BkeVNlcnZlckNvbm5lY3Rpb24uX2lucHV0X2VuZCk6CisgICAgICAgIChTcGR5
U2VydmVyQ29ubmVjdGlvbi5faW5wdXRfZXJyb3IpOgorICAgICAgICAoU3BkeVNlcnZlckNvbm5l
Y3Rpb24uX2hhbmRsZV9lcnJvcik6CisgICAgICAgICh0ZXN0X2hhbmRsZXIpOgorICAgICAgICAq
IFdlYlBhZ2VSZXBsYXkvdHJhZmZpY3NoYXBlci5weTogQWRkZWQuCisgICAgICAgIChUcmFmZmlj
U2hhcGVyRXhjZXB0aW9uKToKKyAgICAgICAgKEJhbmR3aWR0aFZhbHVlRXJyb3IpOgorICAgICAg
ICAoQmFuZHdpZHRoVmFsdWVFcnJvci5fX2luaXRfXyk6CisgICAgICAgIChCYW5kd2lkdGhWYWx1
ZUVycm9yLl9fc3RyX18pOgorICAgICAgICAoVHJhZmZpY1NoYXBlcik6CisgICAgICAgIChUcmFm
ZmljU2hhcGVyLl9faW5pdF9fKToKKyAgICAgICAgKFRyYWZmaWNTaGFwZXIuX19lbnRlcl9fKToK
KyAgICAgICAgKFRyYWZmaWNTaGFwZXIuX19leGl0X18pOgorICAgICAgICAoVHJhZmZpY1NoYXBl
ci5fZGVsZXRlX3J1bGVzKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RyYWZmaWNzaGFwZXJf
dGVzdC5weTogQWRkZWQuCisgICAgICAgIChHZXRFbGFwc2VkTXMpOgorICAgICAgICAoVHJhZmZp
Y1NoYXBlclRlc3QpOgorICAgICAgICAoVHJhZmZpY1NoYXBlclRlc3QudGVzdEJhZEJhbmR3aWR0
aFJhaXNlcyk6CisgICAgICAgIChUaW1lZFVkcEhhbmRsZXIpOgorICAgICAgICAoVGltZWRVZHBI
YW5kbGVyLmhhbmRsZSk6CisgICAgICAgIChUaW1lZFRjcEhhbmRsZXIpOgorICAgICAgICAoVGlt
ZWRUY3BIYW5kbGVyLmhhbmRsZSk6CisgICAgICAgIChUaW1lZFVkcFNlcnZlcik6CisgICAgICAg
IChUaW1lZFVkcFNlcnZlci5fX2luaXRfXyk6CisgICAgICAgIChUaW1lZFVkcFNlcnZlci5jbGVh
bnVwKToKKyAgICAgICAgKFRpbWVkVGNwU2VydmVyKToKKyAgICAgICAgKFRpbWVkVGNwU2VydmVy
Ll9faW5pdF9fKToKKyAgICAgICAgKFRpbWVkVGNwU2VydmVyLmNsZWFudXApOgorICAgICAgICAo
VGNwVGVzdFNvY2tldENyZWF0b3IpOgorICAgICAgICAoVGNwVGVzdFNvY2tldENyZWF0b3IuX19p
bml0X18pOgorICAgICAgICAoVGNwVGVzdFNvY2tldENyZWF0b3IuX19lbnRlcl9fKToKKyAgICAg
ICAgKFRjcFRlc3RTb2NrZXRDcmVhdG9yLl9fZXhpdF9fKToKKyAgICAgICAgKFRpbWVkVGVzdENh
c2UpOgorICAgICAgICAoVGltZWRUZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbCk6CisgICAgICAg
IChUY3BUcmFmZmljU2hhcGVyVGVzdCk6CisgICAgICAgIChUY3BUcmFmZmljU2hhcGVyVGVzdC5z
ZXRVcCk6CisgICAgICAgIChUY3BUcmFmZmljU2hhcGVyVGVzdC5UcmFmZmljU2hhcGVyKToKKyAg
ICAgICAgKFRjcFRyYWZmaWNTaGFwZXJUZXN0LkdldFRjcFNlbmRUaW1lTXMpOgorICAgICAgICAo
VGNwVHJhZmZpY1NoYXBlclRlc3QuR2V0VGNwUmVjZWl2ZVRpbWVNcyk6CisgICAgICAgIChUY3BU
cmFmZmljU2hhcGVyVGVzdC50ZXN0VGNwQ29ubmVjdFRvSXApOgorICAgICAgICAoVGNwVHJhZmZp
Y1NoYXBlclRlc3QudGVzdFRjcFVwbG9hZFNoYXBpbmcpOgorICAgICAgICAoVGNwVHJhZmZpY1No
YXBlclRlc3QudGVzdFRjcERvd25sb2FkU2hhcGluZyk6CisgICAgICAgIChUY3BUcmFmZmljU2hh
cGVyVGVzdC50ZXN0VGNwSW50ZXJsZWF2ZWREb3dubG9hZHMpOgorICAgICAgICAoVWRwVHJhZmZp
Y1NoYXBlclRlc3QpOgorICAgICAgICAoVWRwVHJhZmZpY1NoYXBlclRlc3Quc2V0VXApOgorICAg
ICAgICAoVWRwVHJhZmZpY1NoYXBlclRlc3QuVHJhZmZpY1NoYXBlcik6CisgICAgICAgIChVZHBU
cmFmZmljU2hhcGVyVGVzdC5HZXRVZHBTZW5kUmVjZWl2ZVRpbWVzTXMpOgorICAgICAgICAoVWRw
VHJhZmZpY1NoYXBlclRlc3QudGVzdFVkcERlbGF5KToKKyAgICAgICAgKFVkcFRyYWZmaWNTaGFw
ZXJUZXN0LnRlc3RVZHBJbnRlcmxlYXZlZERlbGF5KToKKyAgICAgICAgKFRjcEFuZFVkcFRyYWZm
aWNTaGFwZXJUZXN0KToKKwogMjAxMi0wNC0xMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBDaHJvbWl1bSBwZXJmIGJvdHMgc2hvdWxkIG5vdCBidWlsZApJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Jlc291cmNlTG9hZERlbGVnYXRlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5t
bQkocmV2aXNpb24gMTE0MDkwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Jlc291cmNl
TG9hZERlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDExIEBAIC0gKGlk
KXdlYlZpZXc6IChXZWJWaWV3ICopd3YgaWRlbnRpZmllckYKICAgICByZXR1cm4gQCI8dW5rbm93
bj4iOwogfQogCitCT09MIGlzTG9jYWxob3N0KGNvbnN0IE5TU3RyaW5nKiBob3N0KQoreworICAg
IHJldHVybiBOU09yZGVyZWRTYW1lID09IFtob3N0IGNvbXBhcmU6QCIxMjcuMC4wLjEiXSB8fCBO
U09yZGVyZWRTYW1lID09IFtob3N0IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJsb2NhbGhvc3Qi
XTsKK30KKwogLShOU1VSTFJlcXVlc3QgKil3ZWJWaWV3OiAoV2ViVmlldyAqKXd2IHJlc291cmNl
OmlkZW50aWZpZXIgd2lsbFNlbmRSZXF1ZXN0OiAoTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCByZWRp
cmVjdFJlc3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVkaXJlY3RSZXNwb25zZSBmcm9tRGF0YVNv
dXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKIHsKICAgICBpZiAoIWRvbmUgJiYgZ0xh
eW91dFRlc3RDb250cm9sbGVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKQEAgLTE0
OSwxMyArMTU0LDE0IEBAIC0oTlNVUkxSZXF1ZXN0ICopd2ViVmlldzogKFdlYlZpZXcgKil3diAK
IAogICAgIE5TVVJMICp1cmwgPSBbcmVxdWVzdCBVUkxdOwogICAgIE5TU3RyaW5nICpob3N0ID0g
W3VybCBob3N0XTsKLSAgICBpZiAoaG9zdAotICAgICAgICAmJiAoTlNPcmRlcmVkU2FtZSA9PSBb
W3VybCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJodHRwIl0gfHwgTlNPcmRlcmVk
U2FtZSA9PSBbW3VybCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJodHRwcyJdKQot
ICAgICAgICAmJiBOU09yZGVyZWRTYW1lICE9IFtob3N0IGNvbXBhcmU6QCIxMjcuMC4wLjEiXQot
ICAgICAgICAmJiBOU09yZGVyZWRTYW1lICE9IFtob3N0IGNvbXBhcmU6QCIyNTUuMjU1LjI1NS4y
NTUiXSAvLyB1c2VkIGluIHNvbWUgdGVzdHMgdGhhdCBleHBlY3QgdG8gZ2V0IGJhY2sgYW4gZXJy
b3IKLSAgICAgICAgJiYgTlNPcmRlcmVkU2FtZSAhPSBbaG9zdCBjYXNlSW5zZW5zaXRpdmVDb21w
YXJlOkAibG9jYWxob3N0Il0pIHsKLSAgICAgICAgcHJpbnRmKCJCbG9ja2VkIGFjY2VzcyB0byBl
eHRlcm5hbCBVUkwgJXNcbiIsIFtbdXJsIGFic29sdXRlU3RyaW5nXSBjU3RyaW5nVXNpbmdFbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOwotICAgICAgICByZXR1cm4gbmlsOworICAgIGlm
IChob3N0ICYmIChOU09yZGVyZWRTYW1lID09IFtbdXJsIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZl
Q29tcGFyZTpAImh0dHAiXSB8fCBOU09yZGVyZWRTYW1lID09IFtbdXJsIHNjaGVtZV0gY2FzZUlu
c2Vuc2l0aXZlQ29tcGFyZTpAImh0dHBzIl0pKSB7CisgICAgICAgIE5TVVJMICp0ZXN0VXJsID0g
ZG9uZSA/IDAgOiBbW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0cmluZzogW05TU3RyaW5nIHN0cmlu
Z1dpdGhVVEY4U3RyaW5nOiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPnRlc3RQYXRoT3JVUkwoKS5j
X3N0cigpXV07CisgICAgICAgIE5TU3RyaW5nICp0ZXN0VXJsSG9zdCA9IHRlc3RVcmwgPyBbdGVz
dFVybCBob3N0XSA6IDA7CisgICAgICAgIGlmICghdGVzdFVybEhvc3QgfHwgKGlzTG9jYWxob3N0
KHRlc3RVcmxIb3N0KSAmJiAoIWlzTG9jYWxob3N0KGhvc3QpCisgICAgICAgICAgICB8fCBbaG9z
dCBjb21wYXJlOkAiMjU1LjI1NS4yNTUuMjU1Il0pKSkgeyAvLyB1c2VkIGluIHNvbWUgdGVzdHMg
dGhhdCBleHBlY3QgdG8gZ2V0IGJhY2sgYW4gZXJyb3IKKyAgICAgICAgICAgIHByaW50ZigiQmxv
Y2tlZCBhY2Nlc3MgdG8gZXh0ZXJuYWwgVVJMICVzXG4iLCBbW3VybCBhYnNvbHV0ZVN0cmluZ10g
Y1N0cmluZ1VzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKKyAgICAgICAgICAg
IHJldHVybiBuaWw7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoZGlzYWxsb3dlZFVSTHMg
JiYgQ0ZTZXRDb250YWluc1ZhbHVlKGRpc2FsbG93ZWRVUkxzLCB1cmwpKQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkJKHJl
dmlzaW9uIDExNDE2MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvd2Via2l0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDggQEAgY2xhc3MgV2Vi
S2l0RHJpdmVyKERyaXZlcik6CiAgICAgZGVmIF9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KHNl
bGYsIGRyaXZlcl9pbnB1dCk6CiAgICAgICAgIGlmIHNlbGYuaXNfaHR0cF90ZXN0KGRyaXZlcl9p
bnB1dC50ZXN0X25hbWUpOgogICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYudGVzdF90b191cmko
ZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkKKyAgICAgICAgZWxpZiBkcml2ZXJfaW5wdXQudGVzdF9u
YW1lLnN0YXJ0c3dpdGgoJ2h0dHA6Ly8nKSBvciBkcml2ZXJfaW5wdXQudGVzdF9uYW1lLnN0YXJ0
c3dpdGgoJ2h0dHBzOi8vJyk6CisgICAgICAgICAgICBjb21tYW5kID0gZHJpdmVyX2lucHV0LnRl
c3RfbmFtZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYuX3BvcnQu
YWJzcGF0aF9mb3JfdGVzdChkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQogICAgICAgICAgICAgaWYg
c3lzLnBsYXRmb3JtID09ICdjeWd3aW4nOgpAQCAtNTgzLDYgKzU4NSw4IEBAIGNsYXNzIFdlYktp
dERyaXZlcihEcml2ZXIpOgogCiAgICAgZGVmIF9wcm9jZXNzX3N0ZG91dF9saW5lKHNlbGYsIGJs
b2NrLCBsaW5lKToKICAgICAgICAgaWYgKHNlbGYuX3JlYWRfaGVhZGVyKGJsb2NrLCBsaW5lLCAn
Q29udGVudC1UeXBlOiAnLCAnY29udGVudF90eXBlJykKKyAgICAgICAgICAgIG9yIHNlbGYuX3Jl
YWRfaGVhZGVyKGJsb2NrLCBsaW5lLCAnWC1XZWJLaXRUZXN0UnVubmVyLVN0YXJ0VGltZTogJywg
J3N0YXJ0X3RpbWUnLCBpbnQpCisgICAgICAgICAgICBvciBzZWxmLl9yZWFkX2hlYWRlcihibG9j
aywgbGluZSwgJ1gtV2ViS2l0VGVzdFJ1bm5lci1FbmRUaW1lOiAnLCAnZW5kX3RpbWUnLCBpbnQp
CiAgICAgICAgICAgICBvciBzZWxmLl9yZWFkX2hlYWRlcihibG9jaywgbGluZSwgJ0NvbnRlbnQt
VHJhbnNmZXItRW5jb2Rpbmc6ICcsICdlbmNvZGluZycpCiAgICAgICAgICAgICBvciBzZWxmLl9y
ZWFkX2hlYWRlcihibG9jaywgbGluZSwgJ0NvbnRlbnQtTGVuZ3RoOiAnLCAnX2NvbnRlbnRfbGVu
Z3RoJywgaW50KQogICAgICAgICAgICAgb3Igc2VsZi5fcmVhZF9oZWFkZXIoYmxvY2ssIGxpbmUs
ICdBY3R1YWxIYXNoOiAnLCAnY29udGVudF9oYXNoJykpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5CShyZXZpc2lv
biAxMTQxNjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3Bl
cmZ0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSwxMSBAQCBjbGFzcyBQZXJmVGVz
dChvYmplY3QpOgogICAgIGRlZiBwYXRoX29yX3VybChzZWxmKToKICAgICAgICAgcmV0dXJuIHNl
bGYuX3BhdGhfb3JfdXJsCiAKLSAgICBkZWYgcnVuKHNlbGYsIGRyaXZlciwgdGltZW91dF9tcywg
cHJpbnRlciwgYnVpbGRib3Rfb3V0cHV0KToKLSAgICAgICAgb3V0cHV0ID0gZHJpdmVyLnJ1bl90
ZXN0KERyaXZlcklucHV0KHNlbGYucGF0aF9vcl91cmwoKSwgdGltZW91dF9tcywgTm9uZSwgRmFs
c2UpKQorICAgIGRlZiBwcmVwYXJlKHNlbGYsIGRyaXZlciwgdGltZV9vdXRfbXMsIGZpbGVzeXN0
ZW0sIHByaW50ZXIpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJ1bihzZWxmLCBk
cml2ZXIsIHRpbWVfb3V0X21zLCBwcmludGVyLCBidWlsZGJvdF9vdXRwdXQpOgorICAgICAgICBv
dXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQoc2VsZi5wYXRoX29yX3VybCgpLCB0
aW1lX291dF9tcywgTm9uZSwgRmFsc2UpKQogICAgICAgICBpZiBzZWxmLnJ1bl9mYWlsZWQob3V0
cHV0LCBwcmludGVyKToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHJldHVybiBz
ZWxmLnBhcnNlX291dHB1dChvdXRwdXQsIHByaW50ZXIsIGJ1aWxkYm90X291dHB1dCkKQEAgLTE1
MSwxMSArMTU0LDE0IEBAIGNsYXNzIFBhZ2VMb2FkaW5nUGVyZlRlc3QoUGVyZlRlc3QpOgogICAg
IGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X25hbWUsIGRpcm5hbWUsIHBhdGhfb3JfdXJsKToKICAg
ICAgICAgc3VwZXIoUGFnZUxvYWRpbmdQZXJmVGVzdCwgc2VsZikuX19pbml0X18odGVzdF9uYW1l
LCBkaXJuYW1lLCBwYXRoX29yX3VybCkKIAotICAgIGRlZiBydW4oc2VsZiwgZHJpdmVyLCB0aW1l
b3V0X21zLCBwcmludGVyLCBidWlsZGJvdF9vdXRwdXQpOgorICAgIGRlZiBydW5fc2luZ2xlKHNl
bGYsIGRyaXZlciwgdGltZV9vdXRfbXMpOgorICAgICAgICByZXR1cm4gZHJpdmVyLnJ1bl90ZXN0
KERyaXZlcklucHV0KHNlbGYucGF0aF9vcl91cmwoKSwgdGltZV9vdXRfbXMsIE5vbmUsIEZhbHNl
KSkKKworICAgIGRlZiBydW4oc2VsZiwgZHJpdmVyLCB0aW1lX291dF9tcywgcHJpbnRlciwgYnVp
bGRib3Rfb3V0cHV0KToKICAgICAgICAgdGVzdF90aW1lcyA9IFtdCiAKICAgICAgICAgZm9yIGkg
aW4gcmFuZ2UoMCwgMjApOgotICAgICAgICAgICAgb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KERy
aXZlcklucHV0KHNlbGYucGF0aF9vcl91cmwoKSwgdGltZW91dF9tcywgTm9uZSwgRmFsc2UpKQor
ICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5ydW5fc2luZ2xlKGRyaXZlciwgdGltZV9vdXRfbXMp
CiAgICAgICAgICAgICBpZiBzZWxmLnJ1bl9mYWlsZWQob3V0cHV0LCBwcmludGVyKToKICAgICAg
ICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgaWYgaSA9PSAwOgpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9w
ZXJmdGVzdHNydW5uZXIucHkJKHJldmlzaW9uIDExNDE2MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC00Myw2ICs0Myw3IEBAIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdzIGltcG9y
dCAKIGZyb20gd2Via2l0cHkucGVyZm9ybWFuY2VfdGVzdHMucGVyZnRlc3QgaW1wb3J0IENocm9t
aXVtU3R5bGVQZXJmVGVzdAogZnJvbSB3ZWJraXRweS5wZXJmb3JtYW5jZV90ZXN0cy5wZXJmdGVz
dCBpbXBvcnQgUGFnZUxvYWRpbmdQZXJmVGVzdAogZnJvbSB3ZWJraXRweS5wZXJmb3JtYW5jZV90
ZXN0cy5wZXJmdGVzdCBpbXBvcnQgUGVyZlRlc3QKK2Zyb20gd2Via2l0cHkucGVyZm9ybWFuY2Vf
dGVzdHMucmVwbGF5dGVzdCBpbXBvcnQgUmVwbGF5UGVyZlRlc3QKIAogCiBfbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC0xMTMsOCArMTE0LDggQEAgY2xhc3MgUGVyZlRlc3Rz
UnVubmVyKG9iamVjdCk6CiAgICAgZGVmIF9jb2xsZWN0X3Rlc3RzKHNlbGYpOgogICAgICAgICAi
IiJSZXR1cm4gdGhlIGxpc3Qgb2YgdGVzdHMgZm91bmQuIiIiCiAKLSAgICAgICAgZGVmIF9pc190
ZXN0X2ZpbGUoZmlsZXN5c3RlbSwgZGlybmFtZSwgZmlsZW5hbWUpOgotICAgICAgICAgICAgcmV0
dXJuIGZpbGVzeXN0ZW0uc3BsaXRleHQoZmlsZW5hbWUpWzFdIGluIFsnLmh0bWwnLCAnLnN2Zydd
CisgICAgICAgIGRlZiBfaXNfdGVzdF9maWxlX29yX2xpc3QoZmlsZXN5c3RlbSwgZGlybmFtZSwg
ZmlsZW5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIGZpbGVzeXN0ZW0uc3BsaXRleHQoZmlsZW5h
bWUpWzFdIGluIFsnLmh0bWwnLCAnLnN2ZyddIG9yIGZpbGVuYW1lID09ICdyZXBsYXl0ZXN0Lmxp
c3QnCiAKICAgICAgICAgZmlsZXN5c3RlbSA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbQogCkBAIC0x
MjYsMTMgKzEyNywxOSBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAgICAg
ICAgICAgICBwYXRocy5hcHBlbmQocmVscGF0aCkKIAogICAgICAgICBza2lwcGVkX2RpcmVjdG9y
aWVzID0gc2V0KFsnLnN2bicsICdyZXNvdXJjZXMnXSkKLSAgICAgICAgdGVzdF9maWxlcyA9IGZp
bmRfZmlsZXMuZmluZChmaWxlc3lzdGVtLCBzZWxmLl9iYXNlX3BhdGgsIHBhdGhzLCBza2lwcGVk
X2RpcmVjdG9yaWVzLCBfaXNfdGVzdF9maWxlKQorICAgICAgICB0ZXN0c19hbmRfbGlzdHMgPSBm
aW5kX2ZpbGVzLmZpbmQoZmlsZXN5c3RlbSwgc2VsZi5fYmFzZV9wYXRoLCBwYXRocywgc2tpcHBl
ZF9kaXJlY3RvcmllcywgX2lzX3Rlc3RfZmlsZV9vcl9saXN0KQogICAgICAgICB0ZXN0cyA9IFtd
Ci0gICAgICAgIGZvciBwYXRoIGluIHRlc3RfZmlsZXM6CisgICAgICAgIGZvciBwYXRoIGluIHRl
c3RzX2FuZF9saXN0czoKICAgICAgICAgICAgIHJlbGF0aXZlX3BhdGggPSBzZWxmLl9wb3J0LnJl
bGF0aXZlX3BlcmZfdGVzdF9maWxlbmFtZShwYXRoKQotICAgICAgICAgICAgaWYgc2VsZi5fcG9y
dC5za2lwc19wZXJmX3Rlc3QocmVsYXRpdmVfcGF0aCk6CisgICAgICAgICAgICBpZiBmaWxlc3lz
dGVtLnNwbGl0KHBhdGgpWzFdID09ICdyZXBsYXl0ZXN0Lmxpc3QnOgorICAgICAgICAgICAgICAg
ICMgRklYTUU6IHN1cHBvcnQgc2tpcHBlZCBsaXN0CisgICAgICAgICAgICAgICAgdGVzdHMgKz0g
UmVwbGF5UGVyZlRlc3QucGFyc2VfcmVwbGF5X3Rlc3RfbGlzdChwYXRoLCByZWxhdGl2ZV9wYXRo
LCBmaWxlc3lzdGVtKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKICAgICAgICAgICAgIHRl
c3RfbmFtZSA9IHJlbGF0aXZlX3BhdGgucmVwbGFjZSgnXFwnLCAnLycpCisgICAgICAgICAgICBp
ZiBzZWxmLl9wb3J0LnNraXBzX3BlcmZfdGVzdCh0ZXN0X25hbWUpOgorICAgICAgICAgICAgICAg
IGNvbnRpbnVlCisKICAgICAgICAgICAgIGRpcm5hbWUgPSBmaWxlc3lzdGVtLmRpcm5hbWUocGF0
aCkKICAgICAgICAgICAgIGlmIHNlbGYuX3BhdHRlcm5fZm9yX2Nocm9taXVtX3N0eWxlX3Rlc3Rz
Lm1hdGNoKHJlbGF0aXZlX3BhdGgpOgogICAgICAgICAgICAgICAgIHRlc3RzLmFwcGVuZChDaHJv
bWl1bVN0eWxlUGVyZlRlc3QodGVzdF9uYW1lLCBkaXJuYW1lLCBwYXRoKSkKQEAgLTIzNiw3ICsy
NDMsMTEgQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6CiAgICAgICAgIHJlc3VsdF9j
b3VudCA9IGxlbih0ZXN0cykKICAgICAgICAgZXhwZWN0ZWQgPSAwCiAgICAgICAgIHVuZXhwZWN0
ZWQgPSAwCi0gICAgICAgIGRyaXZlciA9IE5vbmUKKworICAgICAgICBzaGFyZWRfZHJpdmVyID0g
cG9ydC5jcmVhdGVfZHJpdmVyKHdvcmtlcl9udW1iZXI9MSwgbm9fdGltZW91dD1UcnVlKQorICAg
ICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHRlc3QucHJlcGFyZShzZWxmLl9w
b3J0LCBzZWxmLl9vcHRpb25zLnRpbWVfb3V0X21zLCBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0sIHNl
bGYuX3ByaW50ZXIpCisgICAgICAgIHNoYXJlZF9kcml2ZXIuc3RvcCgpCiAKICAgICAgICAgZm9y
IHRlc3QgaW4gdGVzdHM6CiAgICAgICAgICAgICBkcml2ZXIgPSBwb3J0LmNyZWF0ZV9kcml2ZXIo
d29ya2VyX251bWJlcj0xLCBub190aW1lb3V0PVRydWUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl91bml0dGVzdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0
ZXN0c3J1bm5lcl91bml0dGVzdC5weQkocmV2aXNpb24gMTE0MTYxKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfdW5pdHRlc3QucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NCw3ICsxODQsNyBAQCBtYXggMTEyMAogICAgICAgICAgICAg
J2luc3BlY3Rvci90b25ndWV5Lmh0bWwnLCAnaW5zcGVjdG9yL3RpbWVvdXQuaHRtbCcsICdpbnNw
ZWN0b3IvY3Jhc2guaHRtbCddKQogCiAgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0X2NvdW50ID0g
cnVubmVyLl9ydW5fdGVzdHNfc2V0KHRlc3RzLCBydW5uZXIuX3BvcnQpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoVGVzdERyaXZlcldpdGhTdG9wQ291bnQuc3RvcF9jb3VudCwgNikKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0RHJpdmVyV2l0aFN0b3BDb3VudC5zdG9wX2NvdW50LCA3
KQogCiAgICAgZGVmIHRlc3RfcnVuX3Rlc3RfcGF1c2VfYmVmb3JlX3Rlc3Rpbmcoc2VsZik6CiAg
ICAgICAgIGNsYXNzIFRlc3REcml2ZXJXaXRoU3RhcnRDb3VudChNYWluVGVzdC5UZXN0RHJpdmVy
KToKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvQ09QWUlORwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJQYWdlUmVwbGF5L0NPUFlJTkcJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVw
bGF5L0NPUFlJTkcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAyIEBACisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAg
ICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJ
T05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZp
bml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25k
aXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMg
ZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAg
ICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0
aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRo
ZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBv
ZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNv
bnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250
cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9u
LAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVj
dCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVu
dGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93
bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRz
dGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50
aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwg
b3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkg
dGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZl
cnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQg
bm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAg
IHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0g
c2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFu
c2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0
CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRv
Y3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMu
CisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRo
ZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIg
dGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRo
YXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFt
cGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0
aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmpl
Y3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdv
cmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRp
b25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2Vu
dCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1
cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90
IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJl
bHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRo
ZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRp
b24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0
aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3Ig
YWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9m
LCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3Ig
aW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5
IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJl
aGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0
aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVj
dHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0
aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGlt
aXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMs
IHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBz
eXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBM
aWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBX
b3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3Vv
dXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkg
dGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNv
bnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdh
bCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVu
IHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRl
ZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBT
dWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNl
LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAg
ICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJy
ZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBE
ZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVy
Zm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNo
IERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFu
dCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg
b2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRv
IFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hh
cmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBp
biB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAg
IHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVy
IHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9z
ZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhh
dCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24o
cykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAg
ICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0
ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55
IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBp
biBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0
aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAg
ICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxp
Y2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQg
V29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlv
biBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFu
ZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3Jr
cyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0
aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAg
ICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3Qg
Z2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2
YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3Ug
bXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMK
KyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAg
ICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0
aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwg
cGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJv
bSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3Nl
IG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRo
ZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVz
IGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0
aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAor
ICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3Rp
Y2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRp
bmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBh
cnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9m
IHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1
dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRo
ZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFs
b25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRp
c3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAg
ICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUg
Y29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlv
bmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5z
ZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdp
dGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAg
ICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3Jr
LCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5v
dGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGlj
ZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0
byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9y
IGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCBy
ZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisg
ICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZ
b3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29y
ayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGlu
IHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxl
c3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlv
biBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAg
ICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29u
ZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRl
cm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3Ro
aW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2Yg
YW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAg
ICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBU
cmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2Ug
dGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJv
ZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9y
IHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9y
aWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElD
RSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQg
YnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNv
ciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVz
IGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisg
ICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRp
ZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNI
QU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZ
b3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHBy
b3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3Vt
ZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1p
c3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxp
dHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVy
IGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwK
KyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVy
YXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3Ig
ZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAg
aW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJp
c2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNl
IG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBs
aW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3Bw
YWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAg
ICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250
cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3Vj
aCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFi
aWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZl
IFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJn
ZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwK
KyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNp
c3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3Vj
aCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxm
IGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9m
IGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlm
eSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3Ig
YW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2Fp
bnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcg
YW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBU
RVJNUyBBTkQgQ09ORElUSU9OUworCisgICBBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFj
aGUgTGljZW5zZSB0byB5b3VyIHdvcmsuCisKKyAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGlj
ZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCisgICAgICBib2lsZXJwbGF0
ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyAiW10iCisgICAg
ICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3Qg
aW5jbHVkZQorICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3Nl
ZCBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBm
b3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQorICAgICAgZmlsZSBvciBjbGFzcyBuYW1l
IGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZQorICAgICAgc2Ft
ZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCisgICAg
ICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCisKKyAgIENvcHly
aWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQorCisgICBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4KKyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAg
ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAg
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxh
eS9jYWNoZW1pc3NhcmNoaXZlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkv
Y2FjaGVtaXNzYXJjaGl2ZS5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkv
Y2FjaGVtaXNzYXJjaGl2ZS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTUgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp
b24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNv
cHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj
ZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3
IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VU
IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
KworIiIiQ3JlYXRlIGFuZCB2aWV3IGNhY2hlIG1pc3MgYXJjaGl2ZXMuCisKK1VzYWdlOgorLi9j
YWNoZW1pc3NhcmNoaXZlLnB5IDxwYXRoIHRvIENhY2hlTWlzc0FyY2hpdmUgZmlsZT4KKworVGhp
cyB3aWxsIHByaW50IG91dCBzb21lIHN0YXRpc3RpY3Mgb2YgdGhlIGNhY2hlIGFyY2hpdmUuCisi
IiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHBlcnNp
c3RlbnRtaXhpbgorCisKK2RlZiBmb3JtYXRfcmVxdWVzdChyZXF1ZXN0LCBqb2luX3ZhbD0nICcs
IHVzZV9wYXRoPVRydWUsCisgICAgICAgICAgICAgICAgICAgdXNlX3JlcXVlc3RfYm9keT1GYWxz
ZSwgaGVhZGVycz1GYWxzZSk6CisgIGlmIHVzZV9wYXRoOgorICAgIHJlcXVlc3RfcGFydHMgPSBb
cmVxdWVzdC5jb21tYW5kLCByZXF1ZXN0Lmhvc3QgKyByZXF1ZXN0LnBhdGhdCisgIGVsc2U6Cisg
ICAgcmVxdWVzdF9wYXJ0cyA9IFtyZXF1ZXN0LmNvbW1hbmQsIHJlcXVlc3QuaG9zdF0KKyAgaWYg
dXNlX3JlcXVlc3RfYm9keToKKyAgICByZXF1ZXN0X3BhcnRzLmFwcGVuZChyZXF1ZXN0LnJlcXVl
c3RfYm9keSkKKyAgaWYgaGVhZGVyczoKKyAgICByZXF1ZXN0X3BhcnRzLmFwcGVuZChyZXF1ZXN0
LmhlYWRlcnMpCisgIHJldHVybiBqb2luX3ZhbC5qb2luKFtzdHIoeCkgZm9yIHggaW4gcmVxdWVz
dF9wYXJ0c10pCisKKworY2xhc3MgQ2FjaGVNaXNzQXJjaGl2ZShwZXJzaXN0ZW50bWl4aW4uUGVy
c2lzdGVudE1peGluKToKKyAgIiIiQXJjaGl2ZXMgY2FjaGUgbWlzc2VzIGZyb20gcGxheWJhY2sg
bW9kZS4KKworICBVc2VzIHJ1bm5lcl9jZmcudXJscyBmb3IgdHJhY2tpbmcgdGhlIGN1cnJlbnQg
cGFnZSB1cmwuCisKKyAgQXR0cmlidXRlczoKKyAgICBhcmNoaXZlX2ZpbGU6IG91dHB1dCBmaWxl
IHRvIHN0b3JlIGNhY2hlIG1pc3MgZGF0YQorICAgIGN1cnJlbnRfcGFnZV91cmw6IGFueSBjYWNo
ZSBtaXNzZXMgd2lsbCBiZSBtYXJrZWQgYXMgY2F1c2VkIGJ5IHRoaXMgVVJMCisgICAgcGFnZV91
cmxzOiB0aGUgbGlzdCBvZiB1cmxzIHRvIHJlY29yZCBhbmQga2VlcCB0cmFjayBvZgorICAgIGFy
Y2hpdmU6IGRpY3Qgb2YgY2FjaGUgbWlzc2VzLCB3aGVyZSB0aGUga2V5IGlzIGEgcGFnZSBVUkwg
YW5kCisgICAgICB0aGUgdmFsdWUgaXMgYSBsaXN0IG9mIEFyY2hpdmVkSHR0cFJlcXVlc3Qgb2Jq
ZWN0cworICAgIHJlcXVlc3RfY291bnRzOiBkaWN0IHRoYXQgcmVjb3JkcyB0aGUgbnVtYmVyIG9m
IHRpbWVzIGEgcmVxdWVzdCBpcyBpc3N1ZWQgaW4KKyAgICAgIGJvdGggcmVjb3JkIGFuZCByZXBs
YXkgbW9kZQorICAiIiIKKworICBkZWYgX19pbml0X18oc2VsZiwgYXJjaGl2ZV9maWxlKToKKyAg
ICAiIiJJbml0aWFsaXplIENhY2hlTWlzc0FyY2hpdmUuCisKKyAgICBBcmdzOgorICAgICAgYXJj
aGl2ZV9maWxlOiBvdXRwdXQgZmlsZSB0byBzdG9yZSBkYXRhCisgICAgIiIiCisgICAgc2VsZi5h
cmNoaXZlX2ZpbGUgPSBhcmNoaXZlX2ZpbGUKKyAgICBzZWxmLmN1cnJlbnRfcGFnZV91cmwgPSBO
b25lCisKKyAgICAjIHsgVVJMOiBbYXJjaGl2ZWRfaHR0cF9yZXF1ZXN0LCAuLi5dLCAuLi4gfQor
ICAgIHNlbGYuYXJjaGl2ZSA9IHt9CisKKyAgICAjIHsgYXJjaGl2ZWRfaHR0cF9yZXF1ZXN0OiAo
bnVtX3JlY29yZF9yZXF1ZXN0cywgbnVtX3JlcGxheV9yZXF1ZXN0cyksIC4uLiB9CisgICAgc2Vs
Zi5yZXF1ZXN0X2NvdW50cyA9IHt9CisKKyAgZGVmIHJlY29yZF9jYWNoZV9taXNzKHNlbGYsIHJl
cXVlc3QsIHBhZ2VfdXJsPU5vbmUpOgorICAgICIiIlJlY29yZHMgYSBjYWNoZSBtaXNzIGZvciBn
aXZlbiByZXF1ZXN0LgorCisgICAgQXJnczoKKyAgICAgIHJlcXVlc3Q6IGluc3RhbmNlIG9mIEFy
Y2hpdmVkSHR0cFJlcXVlc3QgdGhhdCBjYXVzZXMgYSBjYWNoZSBtaXNzCisgICAgICBwYWdlX3Vy
bDogc3BlY2lmeSB0aGUgcmVmZXJlciBVUkwgdGhhdCBjYXVzZWQgdGhpcyBjYWNoZSBtaXNzCisg
ICAgIiIiCisgICAgaWYgbm90IHBhZ2VfdXJsOgorICAgICAgcGFnZV91cmwgPSBzZWxmLmN1cnJl
bnRfcGFnZV91cmwKKyAgICBsb2dnaW5nLmRlYnVnKCdDYWNoZSBtaXNzIG9uICVzJywgcmVxdWVz
dCkKKyAgICBzZWxmLl9hcHBlbmRfYXJjaGl2ZShwYWdlX3VybCwgcmVxdWVzdCkKKworICBkZWYg
c2V0X3VybHNfbGlzdChzZWxmLCB1cmxzKToKKyAgICBzZWxmLnBhZ2VfdXJscyA9IHVybHMKKwor
ICBkZWYgcmVjb3JkX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgaXNfcmVjb3JkX21vZGUsIGlzX2Nh
Y2hlX21pc3M9RmFsc2UpOgorICAgICIiIlJlY29yZHMgdGhlIHJlcXVlc3QgaW50byB0aGUgY2Fj
aGUgYXJjaGl2ZS4KKworICAgIFNob3VsZCBiZSB1cGRhdGVkIG9uIGV2ZXJ5IEhUVFAgcmVxdWVz
dC4KKworICAgIEFsc28gdXBkYXRlcyB0aGUgY3VycmVudCBwYWdlX3VybCBjb250YWluZWQgaW4g
cnVubmVyX2NmZy51cmxzLgorCisgICAgQXJnczoKKyAgICAgIHJlcXVlc3Q6IGluc3RhbmNlIG9m
IEFyY2hpdmVkSHR0cFJlcXVlc3QKKyAgICAgIGlzX3JlY29yZF9tb2RlOiBpbmRpY2F0ZXMgd2hl
dGhlciBXUFIgaXMgb24gcmVjb3JkIG1vZGUKKyAgICAgIGlzX2NhY2hlX21pc3M6IGlmIFRydWUs
IHJlY29yZHMgdGhlIHJlcXVlc3QgYXMgYSBjYWNoZSBtaXNzCisgICAgIiIiCisgICAgc2VsZi5f
cmVjb3JkX3JlcXVlc3QocmVxdWVzdCwgaXNfcmVjb3JkX21vZGUpCisKKyAgICBwYWdlX3VybCA9
IHJlcXVlc3QuaG9zdCArIHJlcXVlc3QucGF0aAorCisgICAgZm9yIHVybCBpbiBzZWxmLnBhZ2Vf
dXJsczoKKyAgICAgIGlmIHNlbGYuX21hdGNoX3VybHMocGFnZV91cmwsIHVybCk6CisgICAgICAg
IHNlbGYuY3VycmVudF9wYWdlX3VybCA9IHVybAorICAgICAgICBsb2dnaW5nLmRlYnVnKCdVcGRh
dGVkIGN1cnJlbnQgdXJsIHRvICVzJywgc2VsZi5jdXJyZW50X3BhZ2VfdXJsKQorICAgICAgICBi
cmVhaworCisgICAgaWYgaXNfY2FjaGVfbWlzczoKKyAgICAgIHNlbGYucmVjb3JkX2NhY2hlX21p
c3MocmVxdWVzdCkKKworICBkZWYgX3JlY29yZF9yZXF1ZXN0KHNlbGYsIHJlcXVlc3QsIGlzX3Jl
Y29yZF9tb2RlKToKKyAgICAiIiJBZGRzIDEgdG8gdGhlIGFwcHJvcHJpYXRlIHJlcXVlc3QgY291
bnQuCisKKyAgICBBcmdzOgorICAgICAgcmVxdWVzdDogaW5zdGFuY2Ugb2YgQXJjaGl2ZWRIdHRw
UmVxdWVzdAorICAgICAgaXNfcmVjb3JkX21vZGU6IGluZGljYXRlcyB3aGV0aGVyIFdQUiBpcyBv
biByZWNvcmQgbW9kZQorICAgICIiIgorICAgIG51bV9yZWNvcmQsIG51bV9yZXBsYXkgPSBzZWxm
LnJlcXVlc3RfY291bnRzLmdldChyZXF1ZXN0LCAoMCwgMCkpCisgICAgaWYgaXNfcmVjb3JkX21v
ZGU6CisgICAgICBudW1fcmVjb3JkICs9IDEKKyAgICBlbHNlOgorICAgICAgbnVtX3JlcGxheSAr
PSAxCisgICAgc2VsZi5yZXF1ZXN0X2NvdW50c1tyZXF1ZXN0XSA9IChudW1fcmVjb3JkLCBudW1f
cmVwbGF5KQorCisgIGRlZiByZXF1ZXN0X2RpZmYoc2VsZiwgaXNfc2hvd19hbGw9RmFsc2UpOgor
ICAgICIiIkNhbGN1bGF0ZXMgaWYgdGhlcmUgYXJlIHJlcXVlc3RzIHNlbnQgaW4gcmVjb3JkIG1v
ZGUgdGhhdCBhcmUKKyAgICBub3Qgc2VudCBpbiByZXBsYXkgbW9kZSBhbmQgdmljZSB2ZXJzYS4K
KworICAgIEFyZ3M6CisgICAgICBpc19zaG93X2FsbDogSWYgVHJ1ZSwgb25seSBpbmNsdWRlcyBp
bnN0YW5jZSB3aGVyZSB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzCisgICAgICAgIGlzc3VlZCBpbiBy
ZWNvcmQvcmVwbGF5IG1vZGUgZGlmZmVycy4gSWYgRmFsc2UsIGluY2x1ZGVzIGFsbCBpbnN0YW5j
ZXMuCisgICAgUmV0dXJuczoKKyAgICAgIEEgc3RyaW5nIGRpc3BsYXlpbmcgZGlmZmVyZW5jZSBp
biByZXF1ZXN0cyBiZXR3ZWVuIHJlY29yZCBhbmQgcmVwbGF5IG1vZGVzCisgICAgIiIiCisgICAg
c3RyX2xpc3QgPSBbJ0RpZmYgb2YgcmVxdWVzdHMgc2VudCBpbiByZWNvcmQgbW9kZSB2ZXJzdXMg
cmVwbGF5IG1vZGVcbiddCisgICAgbGVzcyA9IFtdCisgICAgZXF1YWwgPSBbXQorICAgIG1vcmUg
PSBbXQorCisgICAgZm9yIHJlcXVlc3QsIChudW1fcmVjb3JkLCBudW1fcmVwbGF5KSBpbiBzZWxm
LnJlcXVlc3RfY291bnRzLml0ZW1zKCk6CisgICAgICBmb3JtYXRfcmVxID0gZm9ybWF0X3JlcXVl
c3QocmVxdWVzdCwgam9pbl92YWw9JyAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVzZV9wYXRoPVRydWUsIHVzZV9yZXF1ZXN0X2JvZHk9RmFsc2UpCisgICAgICByZXF1ZXN0
X2xpbmUgPSAnJXMgcmVjb3JkOiAlZCwgcmVwbGF5OiAlZCcgJSAoCisgICAgICAgICAgZm9ybWF0
X3JlcSwgbnVtX3JlY29yZCwgbnVtX3JlcGxheSkKKyAgICAgIGlmIG51bV9yZWNvcmQgPCBudW1f
cmVwbGF5OgorICAgICAgICBsZXNzLmFwcGVuZChyZXF1ZXN0X2xpbmUpCisgICAgICBlbGlmIG51
bV9yZWNvcmQgPT0gbnVtX3JlcGxheToKKyAgICAgICAgZXF1YWwuYXBwZW5kKHJlcXVlc3RfbGlu
ZSkKKyAgICAgIGVsc2U6CisgICAgICAgIG1vcmUuYXBwZW5kKHJlcXVlc3RfbGluZSkKKworICAg
IGlmIGlzX3Nob3dfYWxsOgorICAgICAgc3RyX2xpc3QuZXh0ZW5kKHNvcnRlZChlcXVhbCkpCisK
KyAgICBzdHJfbGlzdC5hcHBlbmQoJycpCisgICAgc3RyX2xpc3QuZXh0ZW5kKHNvcnRlZChsZXNz
KSkKKyAgICBzdHJfbGlzdC5hcHBlbmQoJycpCisgICAgc3RyX2xpc3QuZXh0ZW5kKHNvcnRlZCht
b3JlKSkKKworICAgIHJldHVybiAnXG4nLmpvaW4oc3RyX2xpc3QpCisKKyAgZGVmIF9tYXRjaF91
cmxzKHNlbGYsIHVybF8xLCB1cmxfMik6CisgICAgIiIiUmV0dXJucyB0cnVlIGlmIHVybHMgbWF0
Y2guCisKKyAgICBBcmdzOgorICAgICAgdXJsXzE6IHVybCBzdHJpbmcgKGUuZy4gJ2h0dHA6Ly93
d3cuY25uLmNvbScpCisgICAgICB1cmxfMjogc2FtZSBhcyB1cmxfMQorICAgIFJldHVybnM6Cisg
ICAgICBUcnVlIGlmIHRoZSB0d28gdXJscyBtYXRjaCwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgIiIi
CisgICAgc2NoZW1lID0gJ2h0dHA6Ly8nCisgICAgaWYgdXJsXzEuc3RhcnRzd2l0aChzY2hlbWUp
OgorICAgICAgdXJsXzEgPSB1cmxfMVtsZW4oc2NoZW1lKTpdCisgICAgaWYgdXJsXzIuc3RhcnRz
d2l0aChzY2hlbWUpOgorICAgICAgdXJsXzIgPSB1cmxfMltsZW4oc2NoZW1lKTpdCisgICAgcmV0
dXJuIHVybF8xID09IHVybF8yCisKKyAgZGVmIF9hcHBlbmRfYXJjaGl2ZShzZWxmLCBwYWdlX3Vy
bCwgcmVxdWVzdCk6CisgICAgIiIiQXBwZW5kcyB0aGUgY29ycmVzcG9uZGluZyAocGFnZV91cmws
cmVxdWVzdCkgcGFpciB0byBhcmNoaXZlZCBkaWN0aW9uYXJ5LgorCisgICAgQXJnczoKKyAgICAg
IHBhZ2VfdXJsOiBwYWdlX3VybCBzdHJpbmcgKGUuZy4gJ2h0dHA6Ly93d3cuY25uLmNvbScpCisg
ICAgICByZXF1ZXN0OiBpbnN0YW5jZSBvZiBBcmNoaXZlZEh0dHBSZXF1ZXN0CisgICAgIiIiCisg
ICAgc2VsZi5hcmNoaXZlLnNldGRlZmF1bHQocGFnZV91cmwsIFtdKQorICAgIHNlbGYuYXJjaGl2
ZVtwYWdlX3VybF0uYXBwZW5kKHJlcXVlc3QpCisKKyAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAg
IHJldHVybiByZXByKChzZWxmLmFyY2hpdmVfZmlsZSwgc2VsZi5hcmNoaXZlKSkKKworICBkZWYg
UGVyc2lzdChzZWxmKToKKyAgICBzZWxmLmN1cnJlbnRfcGFnZV91cmwgPSBOb25lCisgICAgcGVy
c2lzdGVudG1peGluLlBlcnNpc3RlbnRNaXhpbi5QZXJzaXN0KHNlbGYsIHNlbGYuYXJjaGl2ZV9m
aWxlKQorCisgIGRlZiBnZXRfdG90YWxfcmVmZXJlcnMoc2VsZik6CisgICAgcmV0dXJuIGxlbihz
ZWxmLmFyY2hpdmUpCisKKyAgZGVmIGdldF90b3RhbF9jYWNoZV9taXNzZXMoc2VsZik6CisgICAg
Y291bnQgPSAwCisgICAgZm9yIGsgaW4gc2VsZi5hcmNoaXZlOgorICAgICAgY291bnQgKz0gbGVu
KHNlbGYuYXJjaGl2ZVtrXSkKKyAgICByZXR1cm4gY291bnQKKworICBkZWYgZ2V0X3RvdGFsX3Jl
ZmVyZXJfY2FjaGVfbWlzc2VzKHNlbGYpOgorICAgIGNvdW50ID0gMAorICAgIGlmIHNlbGYucGFn
ZV91cmxzOgorICAgICAgY291bnQgPSBzdW0obGVuKHYpIGZvciBrLCB2IGluIHNlbGYuYXJjaGl2
ZS5pdGVtcygpCisgICAgICAgICAgICAgICAgICBpZiBrIGluIHNlbGYucGFnZV91cmxzKQorICAg
IHJldHVybiBjb3VudAorCisgIGRlZiBnZXRfY2FjaGVfbWlzc2VzKHNlbGYsIHBhZ2VfdXJsLCBq
b2luX3ZhbD0nICcsCisgICAgICAgICAgICAgICAgICAgICAgIHVzZV9wYXRoPUZhbHNlLCB1c2Vf
cmVxdWVzdF9ib2R5PUZhbHNlKToKKyAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBjYWNoZSBtaXNz
IHJlcXVlc3RzIGZyb20gdGhlIHBhZ2VfdXJsLgorCisgICAgQXJnczoKKyAgICAgIHBhZ2VfdXJs
OiB1cmwgb2YgdGhlIHJlcXVlc3QgKGUuZy4gaHR0cDovL3d3dy56YXBwb3MuY29tLykKKyAgICAg
IGpvaW5fdmFsOiB2YWx1ZSB0byBqb2luIG91dHB1dCBzdHJpbmcgd2l0aAorICAgICAgdXNlX3Bh
dGg6IHRydWUgaWYgcGF0aCBpcyB0byBiZSBpbmNsdWRlZCBpbiBvdXRwdXQgZGlzcGxheQorICAg
ICAgdXNlX3JlcXVlc3RfYm9keTogdHJ1ZSBpZiByZXF1ZXN0X2JvZHkgaXMgdG8gYmUgaW5jbHVk
ZWQgaW4gb3V0cHV0IGRpc3BsYXkKKyAgICBSZXR1cm5zOgorICAgICAgQSBsaXN0IG9mIGNhY2hl
IG1pc3MgcmVxdWVzdHMgKGluIHRleHR1YWwgcmVwcmVzZW50YXRpb24pIGZyb20gcGFnZV91cmwK
KyAgICAiIiIKKyAgICBtaXNzZXMgPSBbXQorICAgIGlmIHBhZ2VfdXJsIGluIHNlbGYuYXJjaGl2
ZToKKyAgICAgIGNhY2hlX21pc3NlcyA9IHNlbGYuYXJjaGl2ZVtwYWdlX3VybF0KKyAgICAgIGZv
ciBrIGluIGNhY2hlX21pc3NlczoKKyAgICAgICAgbWlzc2VzLmFwcGVuZChmb3JtYXRfcmVxdWVz
dChrLCBqb2luX3ZhbCwgdXNlX3BhdGgsIHVzZV9yZXF1ZXN0X2JvZHkpKQorICAgIHJldHVybiBt
aXNzZXMKKworICBkZWYgZ2V0X2FsbF9jYWNoZV9taXNzZXMoc2VsZiwgdXNlX3BhdGg9RmFsc2Up
OgorICAgICIiIkZvcm1hdCBjYWNoZSBtaXNzZXMgaW50byBjb25jaXNlIHZpc3VhbGl6YXRpb24u
IiIiCisgICAgYWxsX2NhY2hlX21pc3NlcyA9ICcnCisgICAgZm9yIHBhZ2VfdXJsIGluIHNlbGYu
YXJjaGl2ZToKKyAgICAgIG1pc3NlcyA9IHNlbGYuZ2V0X2NhY2hlX21pc3NlcyhwYWdlX3VybCwg
dXNlX3BhdGg9dXNlX3BhdGgpCisgICAgICBhbGxfY2FjaGVfbWlzc2VzID0gJyVzJXMgLS0tPlxu
ICAlc1xuXG4nICUgKAorICAgICAgICAgIGFsbF9jYWNoZV9taXNzZXMsIHBhZ2VfdXJsLCAnXG4g
ICcuam9pbihtaXNzZXMpKQorICAgIHJldHVybiBhbGxfY2FjaGVfbWlzc2VzCisKKworaWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgYXJjaGl2ZV9maWxlID0gc3lzLmFyZ3ZbMV0KKyAgY2Fj
aGVfYXJjaGl2ZSA9IENhY2hlTWlzc0FyY2hpdmUuTG9hZChhcmNoaXZlX2ZpbGUpCisKKyAgcHJp
bnQgJ1RvdGFsIGNhY2hlIG1pc3NlczogJWQnICUgY2FjaGVfYXJjaGl2ZS5nZXRfdG90YWxfY2Fj
aGVfbWlzc2VzKCkKKyAgcHJpbnQgJ1RvdGFsIHBhZ2VfdXJscyBjYWNoZSBtaXNzZXM6ICVkJyAl
ICgKKyAgICAgIGNhY2hlX2FyY2hpdmUuZ2V0X3RvdGFsX3JlZmVyZXJfY2FjaGVfbWlzc2VzKCkp
CisgIHByaW50ICdUb3RhbCByZWZlcmVyczogJWRcbicgJSBjYWNoZV9hcmNoaXZlLmdldF90b3Rh
bF9yZWZlcmVycygpCisgIHByaW50ICdSZWZlcmVycyBhcmU6JworICBmb3IgcmVmIGluIGNhY2hl
X2FyY2hpdmUuYXJjaGl2ZToKKyAgICBwcmludCAnJXMgIHdpdGggJWQgY2FjaGUgbWlzc2VzJyAl
IChyZWYsIGxlbihjYWNoZV9hcmNoaXZlLmFyY2hpdmVbcmVmXSkpCisgIHByaW50CisgIHByaW50
IGNhY2hlX2FyY2hpdmUuZ2V0X2FsbF9jYWNoZV9taXNzZXModXNlX3BhdGg9VHJ1ZSkKKyAgcHJp
bnQKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1dlYlBhZ2VSZXBsYXkvY2FjaGVtaXNzYXJj
aGl2ZS5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBU
b29scy9XZWJQYWdlUmVwbGF5L2NhY2hlbWlzc2FyY2hpdmVfdGVzdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJQYWdlUmVwbGF5L2NhY2hlbWlzc2FyY2hpdmVfdGVzdC5weQkocmV2aXNpb24g
MCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvY2FjaGVtaXNzYXJjaGl2ZV90ZXN0LnB5CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHly
aWdodCAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2Vk
IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwor
IyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIwor
IyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBV
bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
IHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vu
c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisj
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQgYXN0CitpbXBvcnQgY2Fj
aGVtaXNzYXJjaGl2ZQorZnJvbSBtb2NraHR0cHJlcXVlc3QgaW1wb3J0IEFyY2hpdmVkSHR0cFJl
cXVlc3QKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKK0JBU0VfRElSID0gb3MucGF0aC5k
aXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCitNT0NLX0FSQ0hJVkUgPSBvcy5wYXRo
LmpvaW4oQkFTRV9ESVIsICdtb2NrLWFyY2hpdmUudHh0JykKKworCitjbGFzcyBDYWNoZU1pc3NB
cmNoaXZlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgSEVBREVSUyA9IFsoJ2FjY2VwdC1l
bmNvZGluZycsICdnemlwLGRlZmxhdGUnKV0KKyAgUkVRVUVTVCA9IEFyY2hpdmVkSHR0cFJlcXVl
c3QoCisgICAgICAnR0VUJywgJ3d3dy50ZXN0LmNvbScsICcvJywgTm9uZSwgSEVBREVSUykKKwor
ICBkZWYgc2V0VXAoc2VsZik6CisgICAgc2VsZi5sb2FkX21vY2tfYXJjaGl2ZSgpCisKKyAgZGVm
IGxvYWRfbW9ja19hcmNoaXZlKHNlbGYpOgorICAgIHNlbGYuY2FjaGVfYXJjaGl2ZSA9IGNhY2hl
bWlzc2FyY2hpdmUuQ2FjaGVNaXNzQXJjaGl2ZSgnbW9jay1hcmNoaXZlJykKKyAgICBzZWxmLm51
bV9yZXF1ZXN0cyA9IDAKKyAgICB1cmxzX2xpc3QgPSBbCisgICAgICAgICdodHRwOi8vd3d3Lnph
cHBvcy5jb20vJywKKyAgICAgICAgJ2h0dHA6Ly93d3cubXNuLmNvbS8nLAorICAgICAgICAnaHR0
cDovL3d3dy5hbWF6b24uY29tLycsCisgICAgICAgICdodHRwOi8vd3d3Lmdvb2dsZS5jb20vJywK
KyAgICBdCisgICAgc2VsZi5jYWNoZV9hcmNoaXZlLnNldF91cmxzX2xpc3QodXJsc19saXN0KQor
ICAgIHdpdGggb3BlbihNT0NLX0FSQ0hJVkUpIGFzIGY6CisgICAgICBmb3IgbGluZSBpbiBmOgor
ICAgICAgICAjIEVhY2ggbGluZSBjb250YWluczogKGNvbW1hbmQsIGhvc3QsIHBhdGgsIHJlcXVl
c3RfYm9keSwgaGVhZGVycykKKyAgICAgICAgIyBEZWxpbWl0ZWQgYnkgJyUnCisgICAgICAgIGFy
Z3MgPSBsaW5lLnNwbGl0KCclJykKKyAgICAgICAgaGVhZGVycyA9IGFzdC5saXRlcmFsX2V2YWwo
YXJnc1s0XS5zdHJpcCgnXG4gJykpCisgICAgICAgIHJlcXVlc3QgPSBBcmNoaXZlZEh0dHBSZXF1
ZXN0KAorICAgICAgICAgICAgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgaGVh
ZGVycykKKyAgICAgICAgc2VsZi5jYWNoZV9hcmNoaXZlLnJlY29yZF9yZXF1ZXN0KHJlcXVlc3Qs
IGlzX3JlY29yZF9tb2RlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXNfY2FjaGVfbWlzcz1UcnVlKQorICAgICAgICBzZWxmLm51bV9yZXF1ZXN0cyAr
PSAxCisKKyAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICBlbXB0eV9hcmNoaXZlID0gY2FjaGVt
aXNzYXJjaGl2ZS5DYWNoZU1pc3NBcmNoaXZlKCdlbXB0eS1hcmNoaXZlJykKKyAgICBzZWxmLmFz
c2VydF8obm90IGVtcHR5X2FyY2hpdmUuYXJjaGl2ZSkKKworICBkZWYgdGVzdF9yZWNvcmRfY2Fj
aGVfbWlzcyhzZWxmKToKKyAgICBjYWNoZV9hcmNoaXZlID0gY2FjaGVtaXNzYXJjaGl2ZS5DYWNo
ZU1pc3NBcmNoaXZlKCdlbXB0eS1hcmNoaXZlJykKKyAgICByZWZlcmVyID0gJ21vY2tfcmVmZXJl
cicKKyAgICBjYWNoZV9hcmNoaXZlLnJlY29yZF9jYWNoZV9taXNzKHNlbGYuUkVRVUVTVCwgcGFn
ZV91cmw9cmVmZXJlcikKKyAgICBzZWxmLmFzc2VydF8oY2FjaGVfYXJjaGl2ZS5hcmNoaXZlW3Jl
ZmVyZXJdKQorCisgIGRlZiB0ZXN0X19tYXRjaF91cmxzKHNlbGYpOgorICAgIHNlbGYuYXNzZXJ0
XyhzZWxmLmNhY2hlX2FyY2hpdmUuX21hdGNoX3VybHMoCisgICAgICAgICdodHRwOi8vd3d3LmNu
bi5jb20nLCAnaHR0cDovL3d3dy5jbm4uY29tJykpCisgICAgc2VsZi5hc3NlcnRfKHNlbGYuY2Fj
aGVfYXJjaGl2ZS5fbWF0Y2hfdXJscygKKyAgICAgICAgJ2h0dHA6Ly93d3cuY25uLmNvbScsICd3
d3cuY25uLmNvbScpKQorICAgIHNlbGYuYXNzZXJ0Xyhub3Qgc2VsZi5jYWNoZV9hcmNoaXZlLl9t
YXRjaF91cmxzKAorICAgICAgICAnaHR0cDovL3d3dy56YXBwb3MuY29tJywgJ2h0dHA6Ly93d3cu
Y25uLmNvbScpKQorICAgIHNlbGYuYXNzZXJ0Xyhub3Qgc2VsZi5jYWNoZV9hcmNoaXZlLl9tYXRj
aF91cmxzKAorICAgICAgICAnd3d3LnphcHBvcy5jb20nLCAnd3d3LmFtYXpvbi5jb20nKSkKKwor
ICBkZWYgdGVzdF9nZXRfdG90YWxfcmVmZXJlcnNfc21hbGwoc2VsZik6CisgICAgY2FjaGVfYXJj
aGl2ZSA9IGNhY2hlbWlzc2FyY2hpdmUuQ2FjaGVNaXNzQXJjaGl2ZSgnZW1wdHktYXJjaGl2ZScp
CisgICAgc2VsZi5hc3NlcnRFcXVhbChjYWNoZV9hcmNoaXZlLmdldF90b3RhbF9yZWZlcmVycygp
LCAwKQorICAgIHJlZmVyZXIgPSAnbW9ja19yZWZlcmVyJworICAgIGNhY2hlX2FyY2hpdmUucmVj
b3JkX2NhY2hlX21pc3Moc2VsZi5SRVFVRVNULCBwYWdlX3VybD1yZWZlcmVyKQorICAgIHNlbGYu
YXNzZXJ0RXF1YWwoY2FjaGVfYXJjaGl2ZS5nZXRfdG90YWxfcmVmZXJlcnMoKSwgMSkKKworICBk
ZWYgdGVzdF9nZXRfdG90YWxfcmVmZXJlcnNfbGFyZ2Uoc2VsZik6CisgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLmNhY2hlX2FyY2hpdmUuZ2V0X3RvdGFsX3JlZmVyZXJzKCksIDQpCisKKyAgZGVm
IHRlc3RfZ2V0X3RvdGFsX2NhY2hlX21pc3NlcyhzZWxmKToKKyAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuY2FjaGVfYXJjaGl2ZS5nZXRfdG90YWxfY2FjaGVfbWlzc2VzKCksCisgICAgICAgICAg
ICAgICAgICAgICBzZWxmLm51bV9yZXF1ZXN0cykKKworICBkZWYgdGVzdF9nZXRfdG90YWxfcmVm
ZXJlcl9jYWNoZV9taXNzZXMoc2VsZik6CisgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNhY2hl
X2FyY2hpdmUuZ2V0X3RvdGFsX3JlZmVyZXJfY2FjaGVfbWlzc2VzKCksCisgICAgICAgICAgICAg
ICAgICAgICBzZWxmLm51bV9yZXF1ZXN0cykKKworICBkZWYgdGVzdF9yZWNvcmRfcmVxdWVzdChz
ZWxmKToKKyAgICByZXF1ZXN0ID0gc2VsZi5SRVFVRVNUCisgICAgY2FjaGVfYXJjaGl2ZSA9IGNh
Y2hlbWlzc2FyY2hpdmUuQ2FjaGVNaXNzQXJjaGl2ZSgnZW1wdHktYXJjaGl2ZScpCisgICAgc2Vs
Zi5hc3NlcnRFcXVhbChsZW4oY2FjaGVfYXJjaGl2ZS5yZXF1ZXN0X2NvdW50cyksIDApCisKKyAg
ICBjYWNoZV9hcmNoaXZlLnJlY29yZF9yZXF1ZXN0KHJlcXVlc3QsIGlzX3JlY29yZF9tb2RlPVRy
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19jYWNoZV9taXNzPUZhbHNl
KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNhY2hlX2FyY2hpdmUucmVxdWVzdF9jb3VudHMp
LCAxKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FjaGVfYXJjaGl2ZS5yZXF1ZXN0X2NvdW50c1ty
ZXF1ZXN0XSwgKDEsIDApKQorCisgICAgY2FjaGVfYXJjaGl2ZS5yZWNvcmRfcmVxdWVzdChyZXF1
ZXN0LCBpc19yZWNvcmRfbW9kZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlzX2NhY2hlX21pc3M9RmFsc2UpCisgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2FjaGVf
YXJjaGl2ZS5yZXF1ZXN0X2NvdW50cyksIDEpCisgICAgc2VsZi5hc3NlcnRFcXVhbChjYWNoZV9h
cmNoaXZlLnJlcXVlc3RfY291bnRzW3JlcXVlc3RdLCAoMSwgMSkpCisKKyAgZGVmIHRlc3RfZ2V0
X2NhY2hlX21pc3NlcyhzZWxmKToKKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICBsZW4o
c2VsZi5jYWNoZV9hcmNoaXZlLmdldF9jYWNoZV9taXNzZXMoJ2h0dHA6Ly93d3cuemFwcG9zLmNv
bS8nKSksIDUpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgbGVuKHNlbGYuY2FjaGVf
YXJjaGl2ZS5nZXRfY2FjaGVfbWlzc2VzKCdodHRwOi8vd3d3Lm1zbi5jb20vJykpLCAzKQorICAg
IHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIGxlbihzZWxmLmNhY2hlX2FyY2hpdmUuZ2V0X2Nh
Y2hlX21pc3NlcygnaHR0cDovL3d3dy5nb29nbGUuY29tLycpKSwgMSkKKyAgICBzZWxmLmFzc2Vy
dEVxdWFsKAorICAgICAgICBsZW4oc2VsZi5jYWNoZV9hcmNoaXZlLmdldF9jYWNoZV9taXNzZXMo
J2h0dHA6Ly93d3cuYW1hem9uLmNvbS8nKSksIDEpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5f
Xyc6CisgIHVuaXR0ZXN0Lm1haW4oKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvV2ViUGFn
ZVJlcGxheS9jYWNoZW1pc3NhcmNoaXZlX3Rlc3QucHkKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4
ZWN1dGFibGUKICAgKyAqCgpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS9jdXN0b21oYW5kbGVy
cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L2N1c3RvbWhhbmRsZXJzLnB5
CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS9jdXN0b21oYW5kbGVycy5weQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBD
b3B5cmlnaHQgMjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNl
bnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2Ui
KTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
IHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMK
KyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0
aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBM
aWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu
ZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIiIiSGFuZGxlIHNwZWNpYWwg
SFRUUCByZXF1ZXN0cy4KKworL3dlYi1wYWdlLXJlcGxheS1nZW5lcmF0ZS1bUkVTUE9OU0VfQ09E
RV0KKyAgLSBSZXR1cm4gdGhlIGdpdmVuIFJFU1BPTlNFX0NPREUuCisvd2ViLXBhZ2UtcmVwbGF5
LXBvc3QtaW1hZ2UtW0ZJTEVOQU1FXQorICAtIFNhdmUgdGhlIHBvc3RlZCBpbWFnZSB0byBsb2Nh
bCBkaXNrLgorL3dlYi1wYWdlLXJlcGxheS1jb21tYW5kLVtyZWNvcmR8cmVwbGF5fHN0YXR1c10K
KyAgLSBPcHRpb25hbC4gRW5hYmxlIGJ5IGNhbGxpbmcgY3VzdG9tX2hhbmRsZXJzLmFkZF9zZXJ2
ZXJfbWFuYWdlcl9oYW5kbGVyKC4uLikuCisgIC0gQ2hhbmdlIHRoZSBzZXJ2ZXIgbW9kZSB0byBl
aXRoZXIgcmVjb3JkIG9yIHJlcGxheS4KKyAgICArIFdoZW4gc3dpdGNoaW5nIHRvIHJlY29yZCwg
dGhlIGh0dHBfYXJjaGl2ZSBpcyBjbGVhcmVkLgorICAgICsgV2hlbiBzd2l0Y2hpbmcgdG8gcmVw
bGF5LCB0aGUgaHR0cF9hcmNoaXZlIGlzIG1haW50YWluZWQuCisiIiIKKworaW1wb3J0IGJhc2U2
NAoraW1wb3J0IGh0dHBhcmNoaXZlCitpbXBvcnQgaHR0cGxpYgoraW1wb3J0IGpzb24KK2ltcG9y
dCBsb2dnaW5nCitpbXBvcnQgb3MKKworQ09NTU9OX1VSTF9QUkVGSVggPSAnL3dlYi1wYWdlLXJl
cGxheS0nCitDT01NQU5EX1VSTF9QUkVGSVggPSBDT01NT05fVVJMX1BSRUZJWCArICdjb21tYW5k
LScKK0dFTkVSQVRPUl9VUkxfUFJFRklYID0gQ09NTU9OX1VSTF9QUkVGSVggKyAnZ2VuZXJhdGUt
JworUE9TVF9JTUFHRV9VUkxfUFJFRklYID0gQ09NTU9OX1VSTF9QUkVGSVggKyAncG9zdC1pbWFn
ZS0nCitJTUFHRV9EQVRBX1BSRUZJWCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsJworCisKK2Rl
ZiBTaW1wbGVSZXNwb25zZShzdGF0dXMpOgorICAiIiJSZXR1cm4gYSBBcmNoaXZlZEh0dHBSZXNw
b25zZSB3aXRoIHxzdGF0dXN8IGNvZGUgYW5kIGEgc2ltcGxlIHRleHQgYm9keS4iIiIKKyAgcmV0
dXJuIGh0dHBhcmNoaXZlLmNyZWF0ZV9yZXNwb25zZShzdGF0dXMpCisKKworZGVmIEpzb25SZXNw
b25zZShkYXRhKToKKyAgIiIiUmV0dXJuIGEgQXJjaGl2ZWRIdHRwUmVzcG9uc2Ugd2l0aCB8ZGF0
YXwgZW5jb2RlZCBhcyBqc29uIGluIHRoZSBib2R5LiIiIgorICBzdGF0dXMgPSAyMDAKKyAgcmVh
c29uID0gJ09LJworICBoZWFkZXJzID0gWygnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pz
b24nKV0KKyAgYm9keSA9IGpzb24uZHVtcHMoZGF0YSkKKyAgcmV0dXJuIGh0dHBhcmNoaXZlLmNy
ZWF0ZV9yZXNwb25zZShzdGF0dXMsIHJlYXNvbiwgaGVhZGVycywgYm9keSkKKworCitjbGFzcyBD
dXN0b21IYW5kbGVycyhvYmplY3QpOgorCisgIGRlZiBfX2luaXRfXyhzZWxmLCBzY3JlZW5zaG90
X2Rpcj1Ob25lKToKKyAgICAiIiJJbml0aWFsaXplIEN1c3RvbUhhbmRsZXJzLgorCisgICAgQXJn
czoKKyAgICAgIHNjcmVlbnNob3RfZGlyOiBhIHBhdGggdG8gd2hpY2ggc2NyZWVuc2hvdHMgYXJl
IHNhdmVkLgorICAgICIiIgorICAgIHNlbGYuaGFuZGxlcnMgPSBbCisgICAgICAgIChHRU5FUkFU
T1JfVVJMX1BSRUZJWCwgc2VsZi5nZXRfZ2VuZXJhdG9yX3VybF9yZXNwb25zZV9jb2RlKV0KKyAg
ICBpZiBzY3JlZW5zaG90X2RpcjoKKyAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzY3JlZW5z
aG90X2Rpcik6CisgICAgICAgIHRyeToKKyAgICAgICAgICBvcy5tYWtlZGlycyhzY3JlZW5zaG90
X2RpcikKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgbG9nZ2luZy5lcnJvcign
VW5hYmxlIHRvIGNyZWF0ZSBzY3JlZW5zaG90IGRpcjogJXMnLCBzY3JlZW5zaG90X2RpcikKKyAg
ICAgICAgICBzY3JlZW5zaG90X2RpciA9IE5vbmUKKyAgICAgIGlmIHNjcmVlbnNob3RfZGlyOgor
ICAgICAgICBzZWxmLnNjcmVlbnNob3RfZGlyID0gc2NyZWVuc2hvdF9kaXIKKyAgICAgICAgc2Vs
Zi5oYW5kbGVycy5hcHBlbmQoCisgICAgICAgICAgICAoUE9TVF9JTUFHRV9VUkxfUFJFRklYLCBz
ZWxmLmhhbmRsZV9wb3NzaWJsZV9wb3N0X2ltYWdlKSkKKworICBkZWYgaGFuZGxlKHNlbGYsIHJl
cXVlc3QpOgorICAgICIiIkRpc3BhdGNoZXMgcmVxdWVzdHMgdG8gbWF0Y2hpbmcgaGFuZGxlcnMu
CisKKyAgICBBcmdzOgorICAgICAgcmVxdWVzdDogYW4gaHR0cCByZXF1ZXN0CisgICAgUmV0dXJu
czoKKyAgICAgIEFyY2hpdmVkSHR0cFJlc3BvbnNlIG9yIE5vbmUuCisgICAgIiIiCisgICAgZm9y
IHByZWZpeCwgaGFuZGxlciBpbiBzZWxmLmhhbmRsZXJzOgorICAgICAgaWYgcmVxdWVzdC5wYXRo
LnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIocmVxdWVzdCwgcmVx
dWVzdC5wYXRoW2xlbihwcmVmaXgpOl0pCisgICAgcmV0dXJuIE5vbmUKKworICBkZWYgZ2V0X2dl
bmVyYXRvcl91cmxfcmVzcG9uc2VfY29kZShzZWxmLCByZXF1ZXN0LCB1cmxfc3VmZml4KToKKyAg
ICAiIiJQYXJzZSBzcGVjaWFsIGdlbmVyYXRvciBVUkxzIGZvciB0aGUgZW1iZWRkZWQgcmVzcG9u
c2UgY29kZS4KKworICAgIENsaWVudHMgbGlrZSBwZXJmdHJhY2tlciBjYW4gdXNlIFVSTHMgb2Yg
dGhpcyBmb3JtIHRvIHJlcXVlc3QKKyAgICBhIHJlc3BvbnNlIHdpdGggYSBwYXJ0aWN1bGFyIHJl
c3BvbnNlIGNvZGUuCisKKyAgICBBcmdzOgorICAgICAgcmVxdWVzdDogYW4gQXJjaGl2ZWRIdHRw
UmVxdWVzdCBpbnN0YW5jZQorICAgICAgdXJsX3N1ZmZpeDogc3RyaW5nIHRoYXQgaXMgYWZ0ZXIg
dGhlIGhhbmRsZXIgcHJlZml4IChlLmcuIDMwNCkKKyAgICBSZXR1cm5zOgorICAgICAgT24gYSBt
YXRjaCwgYW4gQXJjaGl2ZWRIdHRwUmVzcG9uc2UuCisgICAgICBPdGhlcndpc2UsIE5vbmUuCisg
ICAgIiIiCisgICAgdHJ5OgorICAgICAgcmVzcG9uc2VfY29kZSA9IGludCh1cmxfc3VmZml4KQor
ICAgICAgcmV0dXJuIFNpbXBsZVJlc3BvbnNlKHJlc3BvbnNlX2NvZGUpCisgICAgZXhjZXB0IFZh
bHVlRXJyb3I6CisgICAgICByZXR1cm4gTm9uZQorCisgIGRlZiBoYW5kbGVfcG9zc2libGVfcG9z
dF9pbWFnZShzZWxmLCByZXF1ZXN0LCB1cmxfc3VmZml4KToKKyAgICAiIiJJZiBzZW50LCBzYXZl
cyBlbWJlZGRlZCBpbWFnZSB0byBsb2NhbCBkaXJlY3RvcnkuCisKKyAgICBFeHBlY3RzIGEgc3Bl
Y2lhbCB1cmwgY29udGFpbmluZyB0aGUgZmlsZW5hbWUuIElmIHNlbnQsIHNhdmVzIHRoZSBiYXNl
NjQKKyAgICBlbmNvZGVkIHJlcXVlc3QgYm9keSBhcyBhIFBORyBpbWFnZSBsb2NhbGx5LiBUaGlz
IGZlYXR1cmUgaXMgZW5hYmxlZCBieQorICAgIHBhc3NpbmcgaW4gc2NyZWVuc2hvdF9kaXIgdG8g
dGhlIGluaXRpYWxpemVyIGZvciB0aGlzIGNsYXNzLgorCisgICAgQXJnczoKKyAgICAgIHJlcXVl
c3Q6IGFuIEFyY2hpdmVkSHR0cFJlcXVlc3QgaW5zdGFuY2UKKyAgICAgIHVybF9zdWZmaXg6IHN0
cmluZyB0aGF0IGlzIGFmdGVyIHRoZSBoYW5kbGVyIHByZWZpeCAoZS5nLiAnZm9vLnBuZycpCisg
ICAgUmV0dXJuczoKKyAgICAgIE9uIGEgbWF0Y2gsIGFuIEFyY2hpdmVkSHR0cFJlc3BvbnNlLgor
ICAgICAgT3RoZXJ3aXNlLCBOb25lLgorICAgICIiIgorICAgIGJhc2VuYW1lID0gdXJsX3N1ZmZp
eAorICAgIGlmIG5vdCBiYXNlbmFtZToKKyAgICAgIHJldHVybiBOb25lCisKKyAgICBkYXRhID0g
cmVxdWVzdC5yZXF1ZXN0X2JvZHkKKyAgICBpZiBub3QgZGF0YS5zdGFydHN3aXRoKElNQUdFX0RB
VEFfUFJFRklYKToKKyAgICAgIGxvZ2dpbmcuZXJyb3IoJ1VuZXhwZWN0ZWQgaW1hZ2UgZm9ybWF0
IGZvcjogJXMnLCBiYXNlbmFtZSkKKyAgICAgIHJldHVybiBTaW1wbGVSZXNwb25zZSg0MDApCisK
KyAgICBkYXRhID0gZGF0YVtsZW4oSU1BR0VfREFUQV9QUkVGSVgpOl0KKyAgICBwbmcgPSBiYXNl
NjQuYjY0ZGVjb2RlKGRhdGEpCisgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5zY3Jl
ZW5zaG90X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMtJXMucG5nJyAlIChy
ZXF1ZXN0Lmhvc3QsIGJhc2VuYW1lKSkKKyAgICBpZiBub3Qgb3MuYWNjZXNzKHNlbGYuc2NyZWVu
c2hvdF9kaXIsIG9zLldfT0spOgorICAgICAgbG9nZ2luZy5lcnJvcignVW5hYmxlIHRvIHdyaXRl
IHRvOiAlcycsIGZpbGVuYW1lKQorICAgICAgcmV0dXJuIFNpbXBsZVJlc3BvbnNlKDQwMCkKKwor
ICAgIHdpdGggZmlsZShmaWxlbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgZi53cml0ZShwbmcpCisg
ICAgcmV0dXJuIFNpbXBsZVJlc3BvbnNlKDIwMCkKKworICBkZWYgYWRkX3NlcnZlcl9tYW5hZ2Vy
X2hhbmRsZXIoc2VsZiwgc2VydmVyX21hbmFnZXIpOgorICAgICIiIkFkZCB0aGUgYWJpbGl0eSB0
byBjaGFuZ2UgdGhlIHNlcnZlciBtb2RlIChlLmcuIHRvIHJlY29yZCBtb2RlKS4KKyAgICBBcmdz
OgorICAgICAgc2VydmVyX21hbmFnZXI6IGEgc2VydmVybWFuYWdlci5TZXJ2ZXJNYW5hZ2VyIGlu
c3RhbmNlLgorICAgICIiIgorICAgIHNlbGYuc2VydmVyX21hbmFnZXIgPSBzZXJ2ZXJfbWFuYWdl
cgorICAgIHNlbGYuaGFuZGxlcnMuYXBwZW5kKAorICAgICAgICAoQ09NTUFORF9VUkxfUFJFRklY
LCBzZWxmLmhhbmRsZV9zZXJ2ZXJfbWFuYWdlcl9jb21tYW5kKSkKKworICBkZWYgaGFuZGxlX3Nl
cnZlcl9tYW5hZ2VyX2NvbW1hbmQoc2VsZiwgcmVxdWVzdCwgdXJsX3N1ZmZpeCk6CisgICAgIiIi
UGFyc2Ugc3BlY2lhbCBVUkxzIGZvciB0aGUgZW1iZWRkZWQgc2VydmVyIG1hbmFnZXIgY29tbWFu
ZC4KKworICAgIENsaWVudHMgbGlrZSB3ZWJwYWdldGVzdC5vcmcgY2FuIHVzZSBVUkxzIG9mIHRo
aXMgZm9ybSB0byBjaGFuZ2UKKyAgICB0aGUgcmVwbGF5IHNlcnZlciBmcm9tIHJlY29yZCBtb2Rl
IHRvIHJlcGxheSBtb2RlLgorCisgICAgVGhpcyBoYW5kbGVyIGlzIG5vdCBpbiB0aGUgZGVmYXVs
dCBsaXN0IG9mIGhhbmRsZXJzLiBDYWxsCisgICAgYWRkX3NlcnZlcl9tYW5hZ2VyX2hhbmRsZXIg
dG8gYWRkIGl0LgorCisgICAgSW4gdGhlIGZ1dHVyZSwgdGhpcyBjb3VsZCBiZSBleHBhbmRlZCB0
byBzYXZlIG9yIHNlcnZlIGFyY2hpdmUgZmlsZXMuCisKKyAgICBBcmdzOgorICAgICAgcmVxdWVz
dDogYW4gQXJjaGl2ZWRIdHRwUmVxdWVzdCBpbnN0YW5jZQorICAgICAgdXJsX3N1ZmZpeDogc3Ry
aW5nIHRoYXQgaXMgYWZ0ZXIgdGhlIGhhbmRsZXIgcHJlZml4IChlLmcuICdyZWNvcmQnKQorICAg
IFJldHVybnM6CisgICAgICBPbiBhIG1hdGNoLCBhbiBBcmNoaXZlZEh0dHBSZXNwb25zZS4KKyAg
ICAgIE90aGVyd2lzZSwgTm9uZS4KKyAgICAiIiIKKyAgICBjb21tYW5kID0gdXJsX3N1ZmZpeAor
ICAgIGlmIGNvbW1hbmQgPT0gJ3JlY29yZCc6CisgICAgICBzZWxmLnNlcnZlcl9tYW5hZ2VyLlNl
dFJlY29yZE1vZGUoKQorICAgICAgcmV0dXJuIFNpbXBsZVJlc3BvbnNlKDIwMCkKKyAgICBlbGlm
IGNvbW1hbmQgPT0gJ3JlcGxheSc6CisgICAgICBzZWxmLnNlcnZlcl9tYW5hZ2VyLlNldFJlcGxh
eU1vZGUoKQorICAgICAgcmV0dXJuIFNpbXBsZVJlc3BvbnNlKDIwMCkKKyAgICBlbGlmIGNvbW1h
bmQgPT0gJ3N0YXR1cyc6CisgICAgICBpc19yZWNvcmRfbW9kZSA9IHNlbGYuc2VydmVyX21hbmFn
ZXIuSXNSZWNvcmRNb2RlKCkKKyAgICAgIHJldHVybiBKc29uUmVzcG9uc2Uoeydpc19yZWNvcmRf
bW9kZSc6IGlzX3JlY29yZF9tb2RlfSkKKyAgICByZXR1cm4gTm9uZQpJbmRleDogVG9vbHMvV2Vi
UGFnZVJlcGxheS9kYWVtb25zZXJ2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJl
cGxheS9kYWVtb25zZXJ2ZXIucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5
L2RhZW1vbnNlcnZlci5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAyMDEwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
LjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNl
cy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig
YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM
aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5p
bmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitp
bXBvcnQgdGhyZWFkaW5nCisKKworY2xhc3MgRGFlbW9uU2VydmVyKG9iamVjdCk6CisgICIiIkJh
c2UgY2xhc3Mgd2hpY2ggbWFuYWdlcyBjcmVhdGlvbiBhbmQgY2xlYW51cCBvZiBkYWVtb24gc3R5
bGUgc2VydmVycy4iIiIKKworICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICMgVE9ETzogQmVj
YXVzZSBvZiBweXRob24ncyBHbG9iYWwgSW50ZXJwcmV0ZXIgTG9jayAoR0lMKSwgdGhlIHRocmVh
ZHMKKyAgICAjIHdpbGwgcnVuIG9uIHRoZSBzYW1lIENQVS4gQ29uc2lkZXIgdXNpbmcgcHJvY2Vz
c2VzIGluc3RlYWQgYmVjYXVzZQorICAgICMgdGhlIGNvbXBvbmVudHMgZG8gbm90IG5lZWQgdG8g
Y29tbXVuaWNhdGUgd2l0aCBlYWNoIG90aGVyLiBPbiBMaW51eCwKKyAgICAjICJ0YXNrc2V0IiBj
b3VsZCBiZSB1c2VkIHRvIGFzc2lnbiBlYWNoIHByb2Nlc3MgdG8gc3BlY2lmaWMgQ1BVL2NvcmUu
CisgICAgIyBPZiBjb3Vyc2UsIG9ubHkgYm90aGVyIHdpdGggdGhpcyBpZiB0aGUgcHJvY2Vzc2lu
ZyBzcGVlZCBpcyBhbiBpc3N1ZS4KKyAgICAjIFNvbWUgcmVsYXRlZCBkaXNjdXNzaW9uOiBodHRw
Oi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzk5MDEwMi9weXRob24tZ2xvYmFsLWludGVy
cHJldGVyLWxvY2stZ2lsLXdvcmthcm91bmQtb24tbXVsdGktY29yZS1zeXN0ZW1zLXVzaW5nLXRh
c2tzCisgICAgdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5zZXJ2ZV9mb3Jl
dmVyKQorICAgIHRocmVhZC5kYWVtb24gPSBUcnVlICAjIFB5dGhvbiBleGl0cyB3aGVuIG5vIG5v
bi1kYWVtb24gdGhyZWFkcyBhcmUgbGVmdC4KKyAgICB0aHJlYWQuc3RhcnQoKQorICAgIHJldHVy
biBzZWxmCisKKyAgZGVmIF9fZXhpdF9fKHNlbGYsIHVudXNlZF9leGNfdHlwZSwgdW51c2VkX2V4
Y192YWwsIHVudXNlZF9leGNfdGIpOgorICAgIHNlbGYuY2xlYW51cCgpCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBUb29scy9XZWJQYWdlUmVwbGF5L2RhZW1vbnNlcnZlci5weQpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L2Rl
dGVybWluaXN0aWMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS9kZXRlcm1p
bmlzdGljLmpzCShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS9kZXRlcm1pbmlz
dGljLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisoZnVuY3Rpb24gKCkgeworICB2
YXIgb3JpZ19kYXRlID0gRGF0ZTsKKyAgdmFyIHJhbmRvbV9jb3VudCA9IDA7CisgIHZhciBkYXRl
X2NvdW50ID0gMDsKKyAgdmFyIHJhbmRvbV9zZWVkID0gMC40NjI7CisgIHZhciB0aW1lX3NlZWQg
PSAxMjA0MjUxOTY4MjU0OworICB2YXIgcmFuZG9tX2NvdW50X3RocmVzaG9sZCA9IDI1OworICB2
YXIgZGF0ZV9jb3VudF90aHJlc2hvbGQgPSAyNTsKKyAgTWF0aC5yYW5kb20gPSBmdW5jdGlvbigp
IHsKKyAgICByYW5kb21fY291bnQrKzsKKyAgICBpZiAocmFuZG9tX2NvdW50ID4gcmFuZG9tX2Nv
dW50X3RocmVzaG9sZCl7CisgICAgIHJhbmRvbV9zZWVkICs9IDAuMTsKKyAgICAgcmFuZG9tX2Nv
dW50ID0gMTsKKyAgICB9CisgICAgcmV0dXJuIChyYW5kb21fc2VlZCAlIDEpOworICB9OworICBE
YXRlID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBEYXRlKSB7CisgICAg
ICBkYXRlX2NvdW50Kys7CisgICAgICBpZiAoZGF0ZV9jb3VudCA+IGRhdGVfY291bnRfdGhyZXNo
b2xkKXsKKyAgICAgICAgdGltZV9zZWVkICs9IDUwOworICAgICAgICBkYXRlX2NvdW50ID0gMTsK
KyAgICAgIH0KKyAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAgY2FzZSAw
OiByZXR1cm4gbmV3IG9yaWdfZGF0ZSh0aW1lX3NlZWQpOworICAgICAgY2FzZSAxOiByZXR1cm4g
bmV3IG9yaWdfZGF0ZShhcmd1bWVudHNbMF0pOworICAgICAgZGVmYXVsdDogcmV0dXJuIG5ldyBv
cmlnX2RhdGUoYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sCisgICAgICAgICBhcmd1bWVudHMu
bGVuZ3RoID49IDMgPyBhcmd1bWVudHNbMl0gOiAxLAorICAgICAgICAgYXJndW1lbnRzLmxlbmd0
aCA+PSA0ID8gYXJndW1lbnRzWzNdIDogMCwKKyAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPj0g
NSA/IGFyZ3VtZW50c1s0XSA6IDAsCisgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID49IDYgPyBh
cmd1bWVudHNbNV0gOiAwLAorICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+PSA3ID8gYXJndW1l
bnRzWzZdIDogMCk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBuZXcgRGF0ZSgpLnRvU3Ry
aW5nKCk7CisgIH07CisgIERhdGUuX19wcm90b19fID0gb3JpZ19kYXRlOworICBEYXRlLnByb3Rv
dHlwZS5jb25zdHJ1Y3RvciA9IERhdGU7CisgIG9yaWdfZGF0ZS5ub3cgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisgIH07Cit9KSgpOwpJbmRleDogVG9v
bHMvV2ViUGFnZVJlcGxheS9kbnNwcm94eS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdl
UmVwbGF5L2Ruc3Byb3h5LnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS9k
bnNwcm94eS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjggQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorIyBDb3B5cmlnaHQgMjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0
aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElD
RU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
KyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl
cm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0
IGRhZW1vbnNlcnZlcgoraW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNvY2tl
dAoraW1wb3J0IFNvY2tldFNlcnZlcgoraW1wb3J0IHRocmVhZGluZworCitpbXBvcnQgdGhpcmRf
cGFydHkKK2ltcG9ydCBkbnMuZmxhZ3MKK2ltcG9ydCBkbnMubWVzc2FnZQoraW1wb3J0IGRucy5y
Y29kZQoraW1wb3J0IGRucy5yZXNvbHZlcgoraW1wb3J0IGRucy5yZGF0YXR5cGUKK2ltcG9ydCBp
cGFkZHIKKworCitjbGFzcyBEbnNQcm94eUV4Y2VwdGlvbihFeGNlcHRpb24pOgorICBwYXNzCisK
KworY2xhc3MgUmVhbERuc0xvb2t1cChvYmplY3QpOgorICBkZWYgX19pbml0X18oc2VsZiwgbmFt
ZV9zZXJ2ZXJzKToKKyAgICBpZiAnMTI3LjAuMC4xJyBpbiBuYW1lX3NlcnZlcnM6CisgICAgICBy
YWlzZSBEbnNQcm94eUV4Y2VwdGlvbigKKyAgICAgICAgICAnSW52YWxpZCBuYW1lc2VydmVyOiAx
MjcuMC4wLjEgKGNhdXNlcyBhbiBpbmZpbnRlIGxvb3ApJykKKyAgICBzZWxmLnJlc29sdmVyID0g
ZG5zLnJlc29sdmVyLmdldF9kZWZhdWx0X3Jlc29sdmVyKCkKKyAgICBzZWxmLnJlc29sdmVyLm5h
bWVzZXJ2ZXJzID0gbmFtZV9zZXJ2ZXJzCisgICAgc2VsZi5kbnNfY2FjaGVfbG9jayA9IHRocmVh
ZGluZy5Mb2NrKCkKKyAgICBzZWxmLmRuc19jYWNoZSA9IHt9CisKKyAgZGVmIF9fY2FsbF9fKHNl
bGYsIGhvc3RuYW1lLCByZHR5cGU9ZG5zLnJkYXRhdHlwZS5BKToKKyAgICAiIiJSZXR1cm4gcmVh
bCBJUCBmb3IgYSBob3N0LgorCisgICAgQXJnczoKKyAgICAgIGhvc3Q6IGEgaG9zdG5hbWUgZW5k
aW5nIHdpdGggYSBwZXJpb2QgKGUuZy4gInd3dy5nb29nbGUuY29tLiIpCisgICAgICByZHR5cGU6
IHRoZSBxdWVyeSB0eXBlICgxIGZvciAnQScsIDI4IGZvciAnQUFBQScpCisgICAgUmV0dXJuczoK
KyAgICAgIHRoZSBJUCBhZGRyZXNzIGFzIGEgc3RyaW5nIChlLmcuICIxOTIuMTY4LjI1LjIiKQor
ICAgICIiIgorICAgIHNlbGYuZG5zX2NhY2hlX2xvY2suYWNxdWlyZSgpCisgICAgaXAgPSBzZWxm
LmRuc19jYWNoZS5nZXQoaG9zdG5hbWUpCisgICAgc2VsZi5kbnNfY2FjaGVfbG9jay5yZWxlYXNl
KCkKKyAgICBpZiBpcDoKKyAgICAgIHJldHVybiBpcAorICAgIHRyeToKKyAgICAgIGFuc3dlcnMg
PSBzZWxmLnJlc29sdmVyLnF1ZXJ5KGhvc3RuYW1lLCByZHR5cGUpCisgICAgZXhjZXB0IGRucy5y
ZXNvbHZlci5OWERPTUFJTjoKKyAgICAgIHJldHVybiBOb25lCisgICAgZXhjZXB0IChkbnMucmVz
b2x2ZXIuTm9BbnN3ZXIsIGRucy5yZXNvbHZlci5UaW1lb3V0KSBhcyBleDoKKyAgICAgIGxvZ2dp
bmcuZGVidWcoJ19yZWFsX2Ruc19sb29rdXAoJXMpIC0+IE5vbmUgKCVzKScsCisgICAgICAgICAg
ICAgICAgICAgIGhvc3RuYW1lLCBleC5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICByZXR1cm4g
Tm9uZQorICAgIGlmIGFuc3dlcnM6CisgICAgICBpcCA9IHN0cihhbnN3ZXJzWzBdKQorICAgIHNl
bGYuZG5zX2NhY2hlX2xvY2suYWNxdWlyZSgpCisgICAgc2VsZi5kbnNfY2FjaGVbaG9zdG5hbWVd
ID0gaXAKKyAgICBzZWxmLmRuc19jYWNoZV9sb2NrLnJlbGVhc2UoKQorICAgIHJldHVybiBpcAor
CisgIGRlZiBDbGVhckNhY2hlKHNlbGYpOgorICAgICIiIkNsZWFybiB0aGUgZG5zIGNhY2hlLiIi
IgorICAgIHNlbGYuZG5zX2NhY2hlX2xvY2suYWNxdWlyZSgpCisgICAgc2VsZi5kbnNfY2FjaGUu
Y2xlYXIoKQorICAgIHNlbGYuZG5zX2NhY2hlX2xvY2sucmVsZWFzZSgpCisKKworY2xhc3MgUHJp
dmF0ZUlwRG5zTG9va3VwKG9iamVjdCk6CisgICIiIlJlc29sdmUgcHJpdmF0ZSBob3N0cyB0byB0
aGVpciByZWFsIElQcyBhbmQgb3RoZXJzIHRvIHRoZSBXZWIgcHJveHkgSVAuCisKKyAgSG9zdHMg
aW4gdGhlIGdpdmVuIGh0dHBfYXJjaGl2ZSB3aWxsIHJlc29sdmUgdG8gdGhlIFdlYiBwcm94eSBJ
UCB3aXRob3V0CisgIGNoZWNraW5nIHRoZSByZWFsIElQLgorCisgIFRoaXMgb25seSBzdXBwb3J0
cyBJUHY0IGxvb2t1cHMuCisgICIiIgorICBkZWYgX19pbml0X18oc2VsZiwgd2ViX3Byb3h5X2lw
LCByZWFsX2Ruc19sb29rdXAsIGh0dHBfYXJjaGl2ZSk6CisgICAgIiIiSW5pdGlhbGl6ZSBQcml2
YXRlSXBEbnNMb29rdXAuCisKKyAgICBBcmdzOgorICAgICAgd2ViX3Byb3h5X2lwOiB0aGUgSVAg
YWRkcmVzcyByZXR1cm5lZCBieSBfX2NhbGxfXyBmb3Igbm9uLXByaXZhdGUgaG9zdHMuCisgICAg
ICByZWFsX2Ruc19sb29rdXA6IGEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyBhIGhvc3QgdG8gYW4g
SVAuCisgICAgICBodHRwX2FyY2hpdmU6IGFuIGluc3RhbmNlIG9mIGEgSHR0cEFyY2hpdmUKKyAg
ICAgICAgSG9zdHMgaXMgaW4gdGhlIGFyY2hpdmUgd2lsbCBhbHdheXMgcmVzb2x2ZSB0byB0aGUg
d2ViX3Byb3h5X2lwCisgICAgIiIiCisgICAgc2VsZi53ZWJfcHJveHlfaXAgPSB3ZWJfcHJveHlf
aXAKKyAgICBzZWxmLnJlYWxfZG5zX2xvb2t1cCA9IHJlYWxfZG5zX2xvb2t1cAorICAgIHNlbGYu
aHR0cF9hcmNoaXZlID0gaHR0cF9hcmNoaXZlCisgICAgc2VsZi5Jbml0aWFsaXplQXJjaGl2ZUhv
c3RzKCkKKworICBkZWYgX19jYWxsX18oc2VsZiwgaG9zdCk6CisgICAgIiIiUmV0dXJuIHJlYWwg
SVB2NCBmb3IgcHJpdmF0ZSBob3N0cyBhbmQgV2ViIHByb3h5IElQIG90aGVyd2lzZS4KKworICAg
IEFyZ3M6CisgICAgICBob3N0OiBhIGhvc3RuYW1lIGVuZGluZyB3aXRoIGEgcGVyaW9kIChlLmcu
ICJ3d3cuZ29vZ2xlLmNvbS4iKQorICAgIFJldHVybnM6CisgICAgICBJUCBhZGRyZXNzIGFzIGEg
c3RyaW5nIG9yIE5vbmUgKGlmIGxvb2t1cCBmYWlscykKKyAgICAiIiIKKyAgICBpcCA9IHNlbGYu
d2ViX3Byb3h5X2lwCisgICAgaWYgaG9zdCBub3QgaW4gc2VsZi5hcmNoaXZlX2hvc3RzOgorICAg
ICAgcmVhbF9pcCA9IHNlbGYucmVhbF9kbnNfbG9va3VwKGhvc3QpCisgICAgICBpZiByZWFsX2lw
OgorICAgICAgICBpZiBpcGFkZHIuSVBBZGRyZXNzKHJlYWxfaXApLmlzX3ByaXZhdGU6CisgICAg
ICAgICAgaXAgPSByZWFsX2lwCisgICAgICBlbHNlOgorICAgICAgICBpcCA9IE5vbmUKKyAgICBy
ZXR1cm4gaXAKKworICBkZWYgSW5pdGlhbGl6ZUFyY2hpdmVIb3N0cyhzZWxmKToKKyAgICAiIiJS
ZWNvbXB1dGUgdGhlIGFyY2hpdmVfaG9zdHMgZnJvbSB0aGUgaHR0cF9hcmNoaXZlLiIiIgorICAg
IHNlbGYuYXJjaGl2ZV9ob3N0cyA9IHNldCgnJXMuJyAlIHJlcS5ob3N0IGZvciByZXEgaW4gc2Vs
Zi5odHRwX2FyY2hpdmUpCisKKworY2xhc3MgVWRwRG5zSGFuZGxlcihTb2NrZXRTZXJ2ZXIuRGF0
YWdyYW1SZXF1ZXN0SGFuZGxlcik6CisgICIiIlJlc29sdmUgRE5TIHF1ZXJpZXMgdG8gbG9jYWxo
b3N0LgorCisgIFBvc3NpYmxlIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uOgorICBodHRwOi8v
aG93bC5wbGF5LWJvdy5vcmcvcGlwZXJtYWlsL2Ruc3B5dGhvbi11c2Vycy8yMDEwLUZlYnJ1YXJ5
LzAwMDExOS5odG1sCisgICIiIgorCisgIFNUQU5EQVJEX1FVRVJZX09QRVJBVElPTl9DT0RFID0g
MAorCisgIGRlZiBoYW5kbGUoc2VsZik6CisgICAgIiIiSGFuZGxlIGEgRE5TIHF1ZXJ5LgorCisg
ICAgSVB2NiByZXF1ZXN0cyAod2l0aCByZHR5cGUgQUFBQSkgcmVjZWl2ZSBtaXNtYXRjaGVkIElQ
djQgcmVzcG9uc2VzCisgICAgKHdpdGggcmR0eXBlIEEpLiBUbyBwcm9wZXJseSBzdXBwb3J0IElQ
djYsIHRoZSBodHRwIHByb3h5IHdvdWxkCisgICAgbmVlZCBib3RoIHR5cGVzIG9mIGFkZHJlc3Nl
cy4gQnkgZGVmYXVsdCwgV2luZG93cyBYUCBkb2VzIG5vdAorICAgIHN1cHBvcnQgSVB2Ni4KKyAg
ICAiIiIKKyAgICBzZWxmLmRhdGEgPSBzZWxmLnJmaWxlLnJlYWQoKQorICAgIHNlbGYudHJhbnNh
Y3Rpb25faWQgPSBzZWxmLmRhdGFbMF0KKyAgICBzZWxmLmZsYWdzID0gc2VsZi5kYXRhWzFdCisg
ICAgc2VsZi5xYV9jb3VudHMgPSBzZWxmLmRhdGFbNDo2XQorICAgIHNlbGYuZG9tYWluID0gJycK
KyAgICBvcGVyYXRpb25fY29kZSA9IChvcmQoc2VsZi5kYXRhWzJdKSA+PiAzKSAmIDE1CisgICAg
aWYgb3BlcmF0aW9uX2NvZGUgPT0gc2VsZi5TVEFOREFSRF9RVUVSWV9PUEVSQVRJT05fQ09ERToK
KyAgICAgIHNlbGYud2lyZV9kb21haW4gPSBzZWxmLmRhdGFbMTI6XQorICAgICAgc2VsZi5kb21h
aW4gPSBzZWxmLl9kb21haW4oc2VsZi53aXJlX2RvbWFpbikKKyAgICBlbHNlOgorICAgICAgbG9n
Z2luZy5kZWJ1ZygiRE5TIHJlcXVlc3Qgd2l0aCBub24temVybyBvcGVyYXRpb24gY29kZTogJXMi
LAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25fY29kZSkKKyAgICBpcCA9IHNlbGYuc2Vy
dmVyLmRuc19sb29rdXAoc2VsZi5kb21haW4pCisgICAgaWYgaXAgaXMgTm9uZToKKyAgICAgIGxv
Z2dpbmcuZGVidWcoJ2Ruc3Byb3h5OiAlcyAtPiBOWERPTUFJTicsIHNlbGYuZG9tYWluKQorICAg
ICAgcmVzcG9uc2UgPSBzZWxmLmdldF9kbnNfbm9fc3VjaF9uYW1lX3Jlc3BvbnNlKCkKKyAgICBl
bHNlOgorICAgICAgaWYgaXAgPT0gc2VsZi5zZXJ2ZXIuc2VydmVyX2FkZHJlc3NbMF06CisgICAg
ICAgIGxvZ2dpbmcuZGVidWcoJ2Ruc3Byb3h5OiAlcyAtPiAlcyAocmVwbGF5IHdlYiBwcm94eSkn
LCBzZWxmLmRvbWFpbiwgaXApCisgICAgICBlbHNlOgorICAgICAgICBsb2dnaW5nLmRlYnVnKCdk
bnNwcm94eTogJXMgLT4gJXMnLCBzZWxmLmRvbWFpbiwgaXApCisgICAgICByZXNwb25zZSA9IHNl
bGYuZ2V0X2Ruc19yZXNwb25zZShpcCkKKyAgICBzZWxmLndmaWxlLndyaXRlKHJlc3BvbnNlKQor
CisgIEBjbGFzc21ldGhvZAorICBkZWYgX2RvbWFpbihjbHMsIHdpcmVfZG9tYWluKToKKyAgICBk
b21haW4gPSAnJworICAgIGluZGV4ID0gMAorICAgIGxlbmd0aCA9IG9yZCh3aXJlX2RvbWFpbltp
bmRleF0pCisgICAgd2hpbGUgbGVuZ3RoOgorICAgICAgZG9tYWluICs9IHdpcmVfZG9tYWluW2lu
ZGV4ICsgMTppbmRleCArIGxlbmd0aCArIDFdICsgJy4nCisgICAgICBpbmRleCArPSBsZW5ndGgg
KyAxCisgICAgICBsZW5ndGggPSBvcmQod2lyZV9kb21haW5baW5kZXhdKQorICAgIHJldHVybiBk
b21haW4KKworICBkZWYgZ2V0X2Ruc19yZXNwb25zZShzZWxmLCBpcCk6CisgICAgcGFja2V0ID0g
JycKKyAgICBpZiBzZWxmLmRvbWFpbjoKKyAgICAgIHBhY2tldCA9ICgKKyAgICAgICAgICBzZWxm
LnRyYW5zYWN0aW9uX2lkICsKKyAgICAgICAgICBzZWxmLmZsYWdzICsKKyAgICAgICAgICAnXHg4
MVx4ODAnICsgICAgICAgICMgc3RhbmRhcmQgcXVlcnkgcmVzcG9uc2UsIG5vIGVycm9yCisgICAg
ICAgICAgc2VsZi5xYV9jb3VudHMgKiAyICsgJ1x4MDBceDAwXHgwMFx4MDAnICsgICMgUSZBIGNv
dW50cworICAgICAgICAgIHNlbGYud2lyZV9kb21haW4gKworICAgICAgICAgICdceGMwXHgwYycg
ICAgICAgICAgIyBwb2ludGVyIHRvIGRvbWFpbiBuYW1lCisgICAgICAgICAgJ1x4MDBceDAxJyAg
ICAgICAgICAjIHJlc291cmNlIHJlY29yZCB0eXBlICgiQSIgaG9zdCBhZGRyZXNzKQorICAgICAg
ICAgICdceDAwXHgwMScgICAgICAgICAgIyBjbGFzcyBvZiB0aGUgZGF0YQorICAgICAgICAgICdc
eDAwXHgwMFx4MDBceDNjJyAgIyB0dGwgKHNlY29uZHMpCisgICAgICAgICAgJ1x4MDBceDA0JyAr
ICAgICAgICAjIHJlc291cmNlIGRhdGEgbGVuZ3RoICg0IGJ5dGVzIGZvciBpcCkKKyAgICAgICAg
ICBzb2NrZXQuaW5ldF9hdG9uKGlwKQorICAgICAgICAgICkKKyAgICByZXR1cm4gcGFja2V0CisK
KyAgZGVmIGdldF9kbnNfbm9fc3VjaF9uYW1lX3Jlc3BvbnNlKHNlbGYpOgorICAgIHF1ZXJ5X21l
c3NhZ2UgPSBkbnMubWVzc2FnZS5mcm9tX3dpcmUoc2VsZi5kYXRhKQorICAgIHJlc3BvbnNlX21l
c3NhZ2UgPSBkbnMubWVzc2FnZS5tYWtlX3Jlc3BvbnNlKHF1ZXJ5X21lc3NhZ2UpCisgICAgcmVz
cG9uc2VfbWVzc2FnZS5mbGFncyB8PSBkbnMuZmxhZ3MuQUEgfCBkbnMuZmxhZ3MuUkEKKyAgICBy
ZXNwb25zZV9tZXNzYWdlLnNldF9yY29kZShkbnMucmNvZGUuTlhET01BSU4pCisgICAgcmV0dXJu
IHJlc3BvbnNlX21lc3NhZ2UudG9fd2lyZSgpCisKK2NsYXNzIERuc1Byb3h5U2VydmVyKFNvY2tl
dFNlcnZlci5UaHJlYWRpbmdVRFBTZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICBkYWVtb25z
ZXJ2ZXIuRGFlbW9uU2VydmVyKToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIGRuc19sb29rdXA9Tm9u
ZSwgaG9zdD0nJywgcG9ydD01Myk6CisgICAgIiIiSW5pdGlhbGl6ZSBEbnNQcm94eVNlcnZlci4K
KworICAgIEFyZ3M6CisgICAgICBkbnNfbG9va3VwOiBhIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMg
YSBob3N0IHRvIGFuIElQIGFkZHJlc3MuCisgICAgICBob3N0OiBhIGhvc3Qgc3RyaW5nIChuYW1l
IG9yIElQKSB0byBiaW5kIHRoZSBkbnMgcHJveHkgYW5kIHRvIHdoaWNoCisgICAgICAgIEROUyBy
ZXF1ZXN0cyB3aWxsIGJlIHJlc29sdmVkLgorICAgICAgcG9ydDogYW4gaW50ZWdlciBwb3J0IG9u
IHdoaWNoIHRvIGJpbmQgdGhlIHByb3h5LgorICAgICIiIgorICAgIHRyeToKKyAgICAgIFNvY2tl
dFNlcnZlci5UaHJlYWRpbmdVRFBTZXJ2ZXIuX19pbml0X18oCisgICAgICAgICAgc2VsZiwgKGhv
c3QsIHBvcnQpLCBVZHBEbnNIYW5kbGVyKQorICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIChlcnJv
cl9udW1iZXIsIG1zZyk6CisgICAgICBpZiBlcnJvcl9udW1iZXIgPT0gZXJybm8uRUFDQ0VTOgor
ICAgICAgICByYWlzZSBEbnNQcm94eUV4Y2VwdGlvbigKKyAgICAgICAgICAgICdVbmFibGUgdG8g
YmluZCBETlMgc2VydmVyIG9uICglczolcyknICUgKGhvc3QsIHBvcnQpKQorICAgICAgcmFpc2UK
KyAgICBzZWxmLmRuc19sb29rdXAgPSBkbnNfbG9va3VwIG9yIChsYW1iZGEgaG9zdDogc2VsZi5z
ZXJ2ZXJfYWRkcmVzc1swXSkKKyAgICBsb2dnaW5nLmluZm8oJ1N0YXJ0ZWQgRE5TIHNlcnZlciBv
biAlcy4uLicsIHNlbGYuc2VydmVyX2FkZHJlc3MpCisKKyAgZGVmIGNsZWFudXAoc2VsZik6Cisg
ICAgc2VsZi5zaHV0ZG93bigpCisgICAgbG9nZ2luZy5pbmZvKCdTaHV0ZG93biBETlMgc2VydmVy
JykKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1dlYlBhZ2VSZXBsYXkvZG5zcHJveHkucHkK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogVG9vbHMvV2Vi
UGFnZVJlcGxheS9odHRwYXJjaGl2ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVw
bGF5L2h0dHBhcmNoaXZlLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS9o
dHRwYXJjaGl2ZS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NTQgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgMjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
ICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4g
Y29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg
dGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
TElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIiIi
VmlldyBhbmQgZWRpdCBIVFRQIEFyY2hpdmVzLgorCitUbyBsaXN0IGFsbCBVUkxzIGluIGFuIGFy
Y2hpdmU6CisgICQgLi9odHRwYXJjaGl2ZS5weSBscyBhcmNoaXZlLndwcgorCitUbyB2aWV3IHRo
ZSBjb250ZW50IG9mIGFsbCBVUkxzIGZyb20gZXhhbXBsZS5jb206CisgICQgLi9odHRwYXJjaGl2
ZS5weSBjYXQgLS1ob3N0IGV4YW1wbGUuY29tIGFyY2hpdmUud3ByCisKK1RvIHZpZXcgdGhlIGNv
bnRlbnQgb2YgYSBwYXJ0aWN1bGFyIFVSTDoKKyAgJCAuL2h0dHBhcmNoaXZlLnB5IGNhdCAtLWhv
c3Qgd3d3LmV4YW1wbGUuY29tIC0tcGF0aCAvZm9vIGFyY2hpdmUud3ByCisKK1RvIHZpZXcgdGhl
IGNvbnRlbnQgb2YgYWxsIFVSTHM6CisgICQgLi9odHRwYXJjaGl2ZS5weSBjYXQgYXJjaGl2ZS53
cHIKKworVG8gZWRpdCBhIHBhcnRpY3VsYXIgVVJMOgorICAkIC4vaHR0cGFyY2hpdmUucHkgZWRp
dCAtLWhvc3Qgd3d3LmV4YW1wbGUuY29tIC0tcGF0aCAvZm9vIGFyY2hpdmUud3ByCisiIiIKKwor
aW1wb3J0IGRpZmZsaWIKK2ltcG9ydCBlbWFpbC51dGlscworaW1wb3J0IGh0dHBsaWIKK2ltcG9y
dCBodHRwemxpYgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitp
bXBvcnQgcGVyc2lzdGVudG1peGluCitpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBzdWJwcm9jZXNz
CitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1cmxwYXJzZQorCitpbXBvcnQgcGxhdGZvcm1zZXR0
aW5ncworCisKK2NsYXNzIEh0dHBBcmNoaXZlRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICIiIkJh
c2UgY2xhc3MgZm9yIGFsbCBleGNlcHRpb25zIGluIGh0dHBhcmNoaXZlLiIiIgorICBwYXNzCisK
KworY2xhc3MgSHR0cEFyY2hpdmUoZGljdCwgcGVyc2lzdGVudG1peGluLlBlcnNpc3RlbnRNaXhp
bik6CisgICIiIkRpY3Qgd2l0aCBBcmNoaXZlZEh0dHBSZXF1ZXN0IGtleXMgYW5kIEFyY2hpdmVk
SHR0cFJlc3BvbnNlIHZhbHVlcy4KKworICBQZXJzaXN0ZW50TWl4aW4gYWRkcyBDcmVhdGVOZXco
ZmlsZW5hbWUpLCBMb2FkKGZpbGVuYW1lKSwgYW5kIFBlcnNpc3QoKS4KKworICBBdHRyaWJ1dGVz
OgorICAgIHNlcnZlcl9ydHQ6IGRpY3Qgb2Yge2hvc3RuYW1lLCBzZXJ2ZXIgcnR0IGluIG1pbGxp
c2Vjb25kc30KKyAgIiIiCisKKyAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIHNlbGYuc2VydmVy
X3J0dCA9IHt9CisKKyAgZGVmIGdldF9zZXJ2ZXJfcnR0KHNlbGYsIHNlcnZlcik6CisgICAgIiIi
UmV0cmlldmVzIHRoZSByb3VuZCB0cmlwIHRpbWUgKHJ0dCkgdG8gdGhlIHNlcnZlcgorCisgICAg
QXJnczoKKyAgICAgIHNlcnZlcjogdGhlIGhvc3RuYW1lIG9mIHRoZSBzZXJ2ZXIKKworICAgIFJl
dHVybnM6CisgICAgICByb3VuZCB0cmlwIHRpbWUgdG8gdGhlIHNlcnZlciBpbiBzZWNvbmRzLCBv
ciAwIGlmIHVuYXZhaWxhYmxlCisgICAgIiIiCisgICAgaWYgc2VydmVyIG5vdCBpbiBzZWxmLnNl
cnZlcl9ydHQ6CisgICAgICBwbGF0Zm9ybV9zZXR0aW5ncyA9IHBsYXRmb3Jtc2V0dGluZ3MuZ2V0
X3BsYXRmb3JtX3NldHRpbmdzKCkKKyAgICAgIHNlbGYuc2VydmVyX3J0dFtzZXJ2ZXJdID0gcGxh
dGZvcm1fc2V0dGluZ3MucGluZyhzZXJ2ZXIpCisgICAgcmV0dXJuIHNlbGYuc2VydmVyX3J0dFtz
ZXJ2ZXJdCisKKyAgZGVmIGdldChzZWxmLCByZXF1ZXN0LCBkZWZhdWx0PU5vbmUpOgorICAgICIi
IlJldHVybiB0aGUgYXJjaGl2ZWQgcmVzcG9uc2UgZm9yIGEgZ2l2ZW4gcmVxdWVzdC4KKworICAg
IERvZXMgZXh0cmEgY2hlY2tpbmcgZm9yIGhhbmRsaW5nIHNvbWUgSFRUUCByZXF1ZXN0IGhlYWRl
cnMuCisKKyAgICBBcmdzOgorICAgICAgcmVxdWVzdDogaW5zdGFuY2Ugb2YgQXJjaGl2ZWRIdHRw
UmVxdWVzdAorICAgICAgZGVmYXVsdDogZGVmYXVsdCB2YWx1ZSB0byByZXR1cm4gaWYgcmVxdWVz
dCBpcyBub3QgZm91bmQKKworICAgIFJldHVybnM6CisgICAgICBJbnN0YW5jZSBvZiBBcmNoaXZl
ZEh0dHBSZXNwb25zZSBvciBkZWZhdWx0IGlmIG5vIG1hdGNoaW5nCisgICAgICByZXNwb25zZSBp
cyBmb3VuZAorICAgICIiIgorICAgIGlmIHJlcXVlc3QgaW4gc2VsZjoKKyAgICAgIHJldHVybiBz
ZWxmW3JlcXVlc3RdCisgICAgcmV0dXJuIHNlbGYuZ2V0X2NvbmRpdGlvbmFsX3Jlc3BvbnNlKHJl
cXVlc3QsIGRlZmF1bHQpCisKKyAgZGVmIGdldF9jb25kaXRpb25hbF9yZXNwb25zZShzZWxmLCBy
ZXF1ZXN0LCBkZWZhdWx0KToKKyAgICAiIiJHZXQgdGhlIHJlc3BvbnNlIGJhc2VkIG9uIHRoZSBj
b25kaXRpb25hbCBIVFRQIHJlcXVlc3QgaGVhZGVycy4KKworICAgIEFyZ3M6CisgICAgICByZXF1
ZXN0OiBhbiBBcmNoaXZlZEh0dHBSZXF1ZXN0IHJlcHJlc2VudGluZyB0aGUgb3JpZ2luYWwgcmVx
dWVzdC4KKyAgICAgIGRlZmF1bHQ6IGRlZmF1bHQgQXJjaGl2ZWRIdHRwUmVzcG9uc2UKKyAgICAg
ICAgICBvcmlnaW5hbCByZXF1ZXN0IHdpdGggbWF0Y2hlZCBoZWFkZXJzIHJlbW92ZWQuCisKKyAg
ICBSZXR1cm5zOgorICAgICAgYW4gQXJjaGl2ZWRIdHRwUmVzcG9uc2Ugd2l0aCBhIHN0YXR1cyBv
ZiAyMDAsIDMwMiAobm90IG1vZGlmaWVkKSwgb3IKKyAgICAgICAgICA0MTIgKHByZWNvbmRpdGlv
biBmYWlsZWQpCisgICAgIiIiCisgICAgcmVzcG9uc2UgPSBkZWZhdWx0CisgICAgaWYgcmVxdWVz
dC5pc19jb25kaXRpb25hbCgpOgorICAgICAgc3RyaXBwZWRfcmVxdWVzdCA9IHJlcXVlc3QuY3Jl
YXRlX3JlcXVlc3Rfd2l0aG91dF9jb25kaXRpb25zKCkKKyAgICAgIGlmIHN0cmlwcGVkX3JlcXVl
c3QgaW4gc2VsZjoKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmW3N0cmlwcGVkX3JlcXVlc3RdCisg
ICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1cyA9PSAyMDA6CisgICAgICAgICAgc3RhdHVzID0gc2Vs
Zi5nZXRfY29uZGl0aW9uYWxfc3RhdHVzKHJlcXVlc3QsIHJlc3BvbnNlKQorICAgICAgICAgIGlm
IHN0YXR1cyAhPSAyMDA6CisgICAgICAgICAgICByZXNwb25zZSA9IGNyZWF0ZV9yZXNwb25zZShz
dGF0dXMpCisgICAgcmV0dXJuIHJlc3BvbnNlCisKKyAgZGVmIGdldF9jb25kaXRpb25hbF9zdGF0
dXMoc2VsZiwgcmVxdWVzdCwgcmVzcG9uc2UpOgorICAgIHN0YXR1cyA9IDIwMAorICAgIGxhc3Rf
bW9kaWZpZWQgPSBlbWFpbC51dGlscy5wYXJzZWRhdGUoCisgICAgICAgIHJlc3BvbnNlLmdldF9o
ZWFkZXJfY2FzZV9pbnNlbnNpdGl2ZSgnbGFzdC1tb2RpZmllZCcpKQorICAgIHJlc3BvbnNlX2V0
YWcgPSByZXNwb25zZS5nZXRfaGVhZGVyX2Nhc2VfaW5zZW5zaXRpdmUoJ2V0YWcnKQorICAgIGlz
X2dldF9vcl9oZWFkID0gcmVxdWVzdC5jb21tYW5kLnVwcGVyKCkgaW4gKCdHRVQnLCAnSEVBRCcp
CisKKyAgICBtYXRjaF92YWx1ZSA9IHJlcXVlc3QuaGVhZGVycy5nZXQoJ2lmLW1hdGNoJywgTm9u
ZSkKKyAgICBpZiBtYXRjaF92YWx1ZToKKyAgICAgIGlmIHNlbGYuaXNfZXRhZ19tYXRjaChtYXRj
aF92YWx1ZSwgcmVzcG9uc2VfZXRhZyk6CisgICAgICAgIHN0YXR1cyA9IDIwMAorICAgICAgZWxz
ZToKKyAgICAgICAgc3RhdHVzID0gNDEyICAjIHByZWNvbmRpdGlvbiBmYWlsZWQKKyAgICBub25l
X21hdGNoX3ZhbHVlID0gcmVxdWVzdC5oZWFkZXJzLmdldCgnaWYtbm9uZS1tYXRjaCcsIE5vbmUp
CisgICAgaWYgbm9uZV9tYXRjaF92YWx1ZToKKyAgICAgIGlmIHNlbGYuaXNfZXRhZ19tYXRjaChu
b25lX21hdGNoX3ZhbHVlLCByZXNwb25zZV9ldGFnKToKKyAgICAgICAgc3RhdHVzID0gMzA0Cisg
ICAgICBlbGlmIGlzX2dldF9vcl9oZWFkOgorICAgICAgICBzdGF0dXMgPSAyMDAKKyAgICAgIGVs
c2U6CisgICAgICAgIHN0YXR1cyA9IDQxMgorICAgIGlmIGlzX2dldF9vcl9oZWFkIGFuZCBsYXN0
X21vZGlmaWVkOgorICAgICAgZm9yIGhlYWRlciBpbiAoJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lm
LXVubW9kaWZpZWQtc2luY2UnKToKKyAgICAgICAgZGF0ZSA9IGVtYWlsLnV0aWxzLnBhcnNlZGF0
ZShyZXF1ZXN0LmhlYWRlcnMuZ2V0KGhlYWRlciwgTm9uZSkpCisgICAgICAgIGlmIGRhdGU6Cisg
ICAgICAgICAgaWYgKChoZWFkZXIgPT0gJ2lmLW1vZGlmaWVkLXNpbmNlJyBhbmQgbGFzdF9tb2Rp
ZmllZCA+IGRhdGUpIG9yCisgICAgICAgICAgICAgIChoZWFkZXIgPT0gJ2lmLXVubW9kaWZpZWQt
c2luY2UnIGFuZCBsYXN0X21vZGlmaWVkIDwgZGF0ZSkpOgorICAgICAgICAgICAgaWYgc3RhdHVz
ICE9IDQxMjoKKyAgICAgICAgICAgICAgc3RhdHVzID0gMjAwCisgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHN0YXR1cyA9IDMwNCAgIyBub3QgbW9kaWZpZWQKKyAgICByZXR1cm4gc3RhdHVz
CisKKyAgZGVmIGlzX2V0YWdfbWF0Y2goc2VsZiwgcmVxdWVzdF9ldGFnLCByZXNwb25zZV9ldGFn
KToKKyAgICAiIiJEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGVudGl0eSB0YWdzIG9mIHRoZSByZXF1
ZXN0L3Jlc3BvbnNlIG1hdGNoZXMuCisKKyAgICBBcmdzOgorICAgICAgcmVxdWVzdF9ldGFnOiB0
aGUgdmFsdWUgc3RyaW5nIG9mIHRoZSAiaWYtKG5vbmUpLW1hdGNoOiIKKyAgICAgICAgICAgICAg
ICAgICAgcG9ydGlvbiBvZiB0aGUgcmVxdWVzdCBoZWFkZXIKKyAgICAgIHJlc3BvbnNlX2V0YWc6
IHRoZSBldGFnIHZhbHVlIG9mIHRoZSByZXNwb25zZQorCisgICAgUmV0dXJuczoKKyAgICAgIFRy
dWUgb24gbWF0Y2gsIEZhbHNlIG90aGVyd2lzZQorICAgICIiIgorICAgIHJlc3BvbnNlX2V0YWcg
PSByZXNwb25zZV9ldGFnLnN0cmlwKCciICcpCisgICAgZm9yIGV0YWcgaW4gcmVxdWVzdF9ldGFn
LnNwbGl0KCcsJyk6CisgICAgICBldGFnID0gZXRhZy5zdHJpcCgnIiAnKQorICAgICAgaWYgZXRh
ZyBpbiAoJyonLCByZXNwb25zZV9ldGFnKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1
cm4gRmFsc2UKKworICBkZWYgZ2V0X3JlcXVlc3RzKHNlbGYsIGNvbW1hbmQ9Tm9uZSwgaG9zdD1O
b25lLCBwYXRoPU5vbmUsIHVzZV9xdWVyeT1UcnVlKToKKyAgICAiIiJSZXR1cm4gYSBsaXN0IG9m
IHJlcXVlc3RzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGFyZ3MuIiIiCisgICAgcmV0dXJuIFtyIGZv
ciByIGluIHNlbGYgaWYgci5tYXRjaGVzKGNvbW1hbmQsIGhvc3QsIHBhdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9xdWVyeT11c2VfcXVlcnkpXQorCisg
IGRlZiBscyhzZWxmLCBjb21tYW5kPU5vbmUsIGhvc3Q9Tm9uZSwgcGF0aD1Ob25lKToKKyAgICAi
IiJMaXN0IGFsbCBVUkxzIHRoYXQgbWF0Y2ggZ2l2ZW4gcGFyYW1zLiIiIgorICAgIHJldHVybiAn
Jy5qb2luKHNvcnRlZCgKKyAgICAgICAgJyVzXG4nICUgciBmb3IgciBpbiBzZWxmLmdldF9yZXF1
ZXN0cyhjb21tYW5kLCBob3N0LCBwYXRoKSkpCisKKyAgZGVmIGNhdChzZWxmLCBjb21tYW5kPU5v
bmUsIGhvc3Q9Tm9uZSwgcGF0aD1Ob25lKToKKyAgICAiIiJQcmludCB0aGUgY29udGVudHMgb2Yg
YWxsIFVSTHMgdGhhdCBtYXRjaCBnaXZlbiBwYXJhbXMuIiIiCisgICAgb3V0ID0gU3RyaW5nSU8u
U3RyaW5nSU8oKQorICAgIGZvciByZXF1ZXN0IGluIHNlbGYuZ2V0X3JlcXVlc3RzKGNvbW1hbmQs
IGhvc3QsIHBhdGgpOgorICAgICAgcHJpbnQgPj5vdXQsICclcyAlcyAlc1xucmVxdWVzdCBoZWFk
ZXJzOlxuJyAlICgKKyAgICAgICAgICByZXF1ZXN0LmNvbW1hbmQsIHJlcXVlc3QuaG9zdCwgcmVx
dWVzdC5wYXRoKQorICAgICAgZm9yIGsgaW4gcmVxdWVzdC5oZWFkZXJzOgorICAgICAgICBwcmlu
dCA+Pm91dCwgJyAgICAlczogJXMnICUgKGssIHJlcXVlc3QuaGVhZGVyc1trXSkKKyAgICAgIGlm
IHJlcXVlc3QucmVxdWVzdF9ib2R5OgorICAgICAgICBwcmludCA+Pm91dCwgcmVxdWVzdC5yZXF1
ZXN0X2JvZHkKKyAgICAgIHByaW50ID4+b3V0LCAnLScgKiA3MAorICAgICAgcmVzcG9uc2UgPSBz
ZWxmW3JlcXVlc3RdCisgICAgICBwcmludCA+Pm91dCwgJ1N0YXR1czogJXNcblJlYXNvbjogJXNc
bmhlYWRlcnM6XG4nICUgKAorICAgICAgICAgIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UucmVh
c29uKQorICAgICAgZm9yIGssIHYgaW4gcmVzcG9uc2UuaGVhZGVyczoKKyAgICAgICAgcHJpbnQg
Pj5vdXQsICcgICAgJXM6ICVzJyAlIChrLCB2KQorICAgICAgaGVhZGVycyA9IGRpY3QocmVzcG9u
c2UuaGVhZGVycykKKyAgICAgIGJvZHkgPSByZXNwb25zZS5nZXRfZGF0YV9hc190ZXh0KCkKKyAg
ICAgIGlmIGJvZHk6CisgICAgICAgIHByaW50ID4+b3V0LCAnLScgKiA3MAorICAgICAgICBwcmlu
dCA+Pm91dCwgYm9keQorICAgICAgcHJpbnQgPj5vdXQsICc9JyAqIDcwCisgICAgcmV0dXJuIG91
dC5nZXR2YWx1ZSgpCisKKyAgZGVmIGVkaXQoc2VsZiwgY29tbWFuZD1Ob25lLCBob3N0PU5vbmUs
IHBhdGg9Tm9uZSk6CisgICAgIiIiRWRpdHMgdGhlIHNpbmdsZSByZXF1ZXN0IHdoaWNoIG1hdGNo
ZXMgZ2l2ZW4gcGFyYW1zLiIiIgorICAgIGVkaXRvciA9IG9zLmdldGVudignRURJVE9SJykKKyAg
ICBpZiBub3QgZWRpdG9yOgorICAgICAgcHJpbnQgJ1lvdSBtdXN0IHNldCB0aGUgRURJVE9SIGVu
dmlyb25tZW50YWwgdmFyaWFibGUuJworICAgICAgcmV0dXJuCisKKyAgICBtYXRjaGluZ19yZXF1
ZXN0cyA9IHNlbGYuZ2V0X3JlcXVlc3RzKGNvbW1hbmQsIGhvc3QsIHBhdGgpCisgICAgaWYgbm90
IG1hdGNoaW5nX3JlcXVlc3RzOgorICAgICAgcHJpbnQgJ0ZhaWxlZCB0byBmaW5kIGFueSByZXF1
ZXN0cyBtYXRjaGluZyBnaXZlbiBjb21tYW5kLCBob3N0LCBwYXRoLicKKyAgICAgIHJldHVybgor
CisgICAgaWYgbGVuKG1hdGNoaW5nX3JlcXVlc3RzKSA+IDE6CisgICAgICBwcmludCAnRm91bmQg
bXVsdGlwbGUgbWF0Y2hpbmcgcmVxdWVzdHMuIFBsZWFzZSByZWZpbmUuJworICAgICAgcHJpbnQg
c2VsZi5scyhjb21tYW5kLCBob3N0LCBwYXRoKQorCisgICAgcmVzcG9uc2UgPSBzZWxmW21hdGNo
aW5nX3JlcXVlc3RzWzBdXQorICAgIHRtcF9maWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlG
aWxlKGRlbGV0ZT1GYWxzZSkKKyAgICB0bXBfZmlsZS53cml0ZShyZXNwb25zZS5nZXRfcmVzcG9u
c2VfYXNfdGV4dCgpKQorICAgIHRtcF9maWxlLmNsb3NlKCkKKyAgICBzdWJwcm9jZXNzLmNoZWNr
X2NhbGwoW2VkaXRvciwgdG1wX2ZpbGUubmFtZV0pCisgICAgcmVzcG9uc2Uuc2V0X3Jlc3BvbnNl
X2Zyb21fdGV4dCgnJy5qb2luKG9wZW4odG1wX2ZpbGUubmFtZSkucmVhZGxpbmVzKCkpKQorICAg
IG9zLnJlbW92ZSh0bXBfZmlsZS5uYW1lKQorCisgIGRlZiBfZm9ybWF0X3JlcXVlc3RfbGluZXMo
c2VsZiwgcmVxKToKKyAgICAiIiJGb3JtYXQgcmVxdWVzdCB0byBtYWtlIGRpZmZzIGVhc2llciB0
byByZWFkLgorCisgICAgQXJnczoKKyAgICAgIHJlcTogYW4gQXJjaGl2ZWRIdHRwUmVxdWVzdAor
ICAgIFJldHVybnM6CisgICAgICBFeGFtcGxlOgorICAgICAgWydHRVQgd3d3LmV4YW1wbGUuY29t
L3BhdGhcbicsICdIZWFkZXItS2V5OiBoZWFkZXIgdmFsdWVcbicsIC4uLl0KKyAgICAiIiIKKyAg
ICBwYXJ0cyA9IFsnJXMgJXMlc1xuJyAlIChyZXEuY29tbWFuZCwgcmVxLmhvc3QsIHJlcS5wYXRo
KV0KKyAgICBpZiByZXEucmVxdWVzdF9ib2R5OgorICAgICAgcGFydHMuYXBwZW5kKCclc1xuJyAl
IHJlcS5yZXF1ZXN0X2JvZHkpCisgICAgZm9yIGssIHYgaW4gcmVxLnRyaW1tZWRfaGVhZGVyczoK
KyAgICAgIGsgPSAnLScuam9pbih4LmNhcGl0YWxpemUoKSBmb3IgeCBpbiBrLnNwbGl0KCctJykp
CisgICAgICBwYXJ0cy5hcHBlbmQoJyVzOiAlc1xuJyAlIChrLCB2KSkKKyAgICByZXR1cm4gcGFy
dHMKKworICBkZWYgZmluZF9jbG9zZXN0X3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgdXNlX3BhdGg9
RmFsc2UpOgorICAgICIiIkZpbmQgdGhlIGNsb3Nlc3QgbWF0Y2hpbmcgcmVxdWVzdCBpbiB0aGUg
YXJjaGl2ZSB0byB0aGUgZ2l2ZW4gcmVxdWVzdC4KKworICAgIEFyZ3M6CisgICAgICByZXF1ZXN0
OiBhbiBBcmNoaXZlZEh0dHBSZXF1ZXN0CisgICAgICB1c2VfcGF0aDogSWYgVHJ1ZSwgY2xvc2Vz
dCBtYXRjaGluZyByZXF1ZXN0J3MgcGF0aCBjb21wb25lbnQgbXVzdCBtYXRjaC4KKyAgICAgICAg
KE5vdGU6IHRoaXMgcmVmZXJzIHRvIHRoZSAncGF0aCcgY29tcG9uZW50IHdpdGhpbiB0aGUgVVJM
LCBub3QgdGhlCisgICAgICAgICBxdWVyeSBzdHJpbmcgY29tcG9uZW50LikKKyAgICAgICAgSWYg
dXNlX3BhdGg9RmFsc2UsIGNhbmRpZGF0ZSB3aWxsIE5PVCBtYXRjaCBpbiBleGFtcGxlIGJlbG93
CisgICAgICAgIGUuZy4gcmVxdWVzdCAgID0gR0VUIHd3dy50ZXN0LmNvbS9wYXRoP2FhYQorICAg
ICAgICAgICAgIGNhbmRpZGF0ZSA9IEdFVCB3d3cudGVzdC5jb20vZGlmZnBhdGg/YWFhCisgICAg
UmV0dXJuczoKKyAgICAgIElmIGEgY2xvc2UgbWF0Y2ggaXMgZm91bmQsIHJldHVybiB0aGUgaW5z
dGFuY2Ugb2YgQXJjaGl2ZWRIdHRwUmVxdWVzdC4KKyAgICAgIE90aGVyd2lzZSwgcmV0dXJuIE5v
bmUuCisgICAgIiIiCisgICAgYmVzdF9tYXRjaCA9IE5vbmUKKyAgICByZXF1ZXN0X2xpbmVzID0g
c2VsZi5fZm9ybWF0X3JlcXVlc3RfbGluZXMocmVxdWVzdCkKKyAgICBtYXRjaGVyID0gZGlmZmxp
Yi5TZXF1ZW5jZU1hdGNoZXIoYj0nJy5qb2luKHJlcXVlc3RfbGluZXMpKQorICAgIHBhdGggPSBO
b25lCisgICAgaWYgdXNlX3BhdGg6CisgICAgICBwYXRoID0gcmVxdWVzdC5wYXRoCisgICAgZm9y
IGNhbmRpZGF0ZSBpbiBzZWxmLmdldF9yZXF1ZXN0cyhyZXF1ZXN0LmNvbW1hbmQsIHJlcXVlc3Qu
aG9zdCwgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9x
dWVyeT1ub3QgdXNlX3BhdGgpOgorICAgICAgY2FuZGlkYXRlX2xpbmVzID0gc2VsZi5fZm9ybWF0
X3JlcXVlc3RfbGluZXMoY2FuZGlkYXRlKQorICAgICAgbWF0Y2hlci5zZXRfc2VxMSgnJy5qb2lu
KGNhbmRpZGF0ZV9saW5lcykpCisgICAgICBiZXN0X21hdGNoID0gbWF4KGJlc3RfbWF0Y2gsICht
YXRjaGVyLnJhdGlvKCksIGNhbmRpZGF0ZSkpCisgICAgaWYgYmVzdF9tYXRjaDoKKyAgICAgIHJl
dHVybiBiZXN0X21hdGNoWzFdCisgICAgcmV0dXJuIE5vbmUKKworICBkZWYgZGlmZihzZWxmLCBy
ZXF1ZXN0KToKKyAgICAiIiJEaWZmIHRoZSBnaXZlbiByZXF1ZXN0IHRvIHRoZSBjbG9zZXN0IG1h
dGNoaW5nIHJlcXVlc3QgaW4gdGhlIGFyY2hpdmUuCisKKyAgICBBcmdzOgorICAgICAgcmVxdWVz
dDogYW4gQXJjaGl2ZWRIdHRwUmVxdWVzdAorICAgIFJldHVybnM6CisgICAgICBJZiBhIGNsb3Nl
IG1hdGNoIGlzIGZvdW5kLCByZXR1cm4gYSB0ZXh0dWFsIGRpZmYgYmV0d2VlbiB0aGUgcmVxdWVz
dHMuCisgICAgICBPdGhlcndpc2UsIHJldHVybiBOb25lLgorICAgICIiIgorICAgIHJlcXVlc3Rf
bGluZXMgPSBzZWxmLl9mb3JtYXRfcmVxdWVzdF9saW5lcyhyZXF1ZXN0KQorICAgIGNsb3Nlc3Rf
cmVxdWVzdCA9IHNlbGYuZmluZF9jbG9zZXN0X3JlcXVlc3QocmVxdWVzdCkKKyAgICBpZiBjbG9z
ZXN0X3JlcXVlc3Q6CisgICAgICBjbG9zZXN0X3JlcXVlc3RfbGluZXMgPSBzZWxmLl9mb3JtYXRf
cmVxdWVzdF9saW5lcyhjbG9zZXN0X3JlcXVlc3QpCisgICAgICByZXR1cm4gJycuam9pbihkaWZm
bGliLm5kaWZmKGNsb3Nlc3RfcmVxdWVzdF9saW5lcywgcmVxdWVzdF9saW5lcykpCisgICAgcmV0
dXJuIE5vbmUKKworCitjbGFzcyBBcmNoaXZlZEh0dHBSZXF1ZXN0KG9iamVjdCk6CisgICIiIlJl
Y29yZCBhbGwgdGhlIHN0YXRlIHRoYXQgZ29lcyBpbnRvIGEgcmVxdWVzdC4KKworICBBcmNoaXZl
ZEh0dHBSZXF1ZXN0IGluc3RhbmNlcyBhcmUgY29uc2lkZXJlZCBpbW11dGFibGUgc28gdGhleSBj
YW4KKyAgc2VydmUgYXMga2V5cyBmb3IgSHR0cEFyY2hpdmUgaW5zdGFuY2VzLgorICAoVGhlIGlt
bXV0YWJpbGl0eSBpcyBub3QgZW5mb3JjZWQuKQorCisgIFVwb24gY3JlYXRpb24sIHRoZSBoZWFk
ZXJzIGFyZSAidHJpbW1lZCIgKGkuZS4gZWRpdGVkIG9yIGRyb3BwZWQpCisgIGFuZCBzYXZlZCB0
byBzZWxmLnRyaW1tZWRfaGVhZGVycyB0byBhbGxvdyByZXF1ZXN0cyB0byBtYXRjaCBpbiBhIHdp
ZGVyCisgIHZhcmlldHkgb2YgcGxheWJhY2sgc2l0dWF0aW9ucyAoZS5nLiB1c2luZyBkaWZmZXJl
bnQgdXNlciBhZ2VudHMpLgorCisgIEZvciB1bnBpY2tsaW5nLCAndHJpbW1lZF9oZWFkZXJzJyBp
cyByZWNyZWF0ZWQgZnJvbSAnaGVhZGVycycuIFRoYXQKKyAgYWxsb3dzIGZvciBjaGFuZ2VzIHRv
IHRoZSB0cmltIGZ1bmN0aW9uIGFuZCBjYW4gaGVscCB3aXRoIGRlYnVnZ2luZy4KKyAgIiIiCisg
IENPTkRJVElPTkFMX0hFQURFUlMgPSBbCisgICAgICAnaWYtbm9uZS1tYXRjaCcsICdpZi1tYXRj
aCcsCisgICAgICAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZSddCisK
KyAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmQsIGhvc3QsIHBhdGgsIHJlcXVlc3RfYm9keSwg
aGVhZGVycywgaXNfc3NsPUZhbHNlKToKKyAgICAiIiJJbml0aWFsaXplIGFuIEFyY2hpdmVkSHR0
cFJlcXVlc3QuCisKKyAgICBBcmdzOgorICAgICAgY29tbWFuZDogYSBzdHJpbmcgKGUuZy4gJ0dF
VCcgb3IgJ1BPU1QnKS4KKyAgICAgIGhvc3Q6IGEgaG9zdCBuYW1lIChlLmcuICd3d3cuZ29vZ2xl
LmNvbScpLgorICAgICAgcGF0aDogYSByZXF1ZXN0IHBhdGggKGUuZy4gJy9zZWFyY2g/cT1kb2dz
JykuCisgICAgICByZXF1ZXN0X2JvZHk6IGEgcmVxdWVzdCBib2R5IHN0cmluZyBmb3IgYSBQT1NU
IG9yIE5vbmUuCisgICAgICBoZWFkZXJzOiB7a2V5OiB2YWx1ZSwgLi4ufSB3aGVyZSBrZXkgYW5k
IHZhbHVlIGFyZSBzdHJpbmdzLgorICAgICAgaXNfc3NsOiBhIGJvb2xlYW4gd2hpY2ggaXMgVHJ1
ZSBpZmYgcmVxdWVzdCBpcyBtYWtlIHZpYSBTU0wuCisgICAgIiIiCisgICAgc2VsZi5jb21tYW5k
ID0gY29tbWFuZAorICAgIHNlbGYuaG9zdCA9IGhvc3QKKyAgICBzZWxmLnBhdGggPSBwYXRoCisg
ICAgc2VsZi5yZXF1ZXN0X2JvZHkgPSByZXF1ZXN0X2JvZHkKKyAgICBzZWxmLmhlYWRlcnMgPSBo
ZWFkZXJzCisgICAgc2VsZi5pc19zc2wgPSBpc19zc2wKKyAgICBzZWxmLnRyaW1tZWRfaGVhZGVy
cyA9IHNlbGYuX1RyaW1IZWFkZXJzKGhlYWRlcnMpCisKKyAgZGVmIF9fc3RyX18oc2VsZik6Cisg
ICAgc2NoZW1lID0gJ2h0dHBzJyBpZiBzZWxmLmlzX3NzbCBlbHNlICdodHRwJworICAgIHJldHVy
biAnJXMgJXM6Ly8lcyVzICVzJyAlIChzZWxmLmNvbW1hbmQsIHNjaGVtZSwgc2VsZi5ob3N0LCBz
ZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudHJpbW1lZF9o
ZWFkZXJzKQorCisgIGRlZiB2ZXJib3NlKHNlbGYpOgorICAgIHJldHVybiAnJXMgJXMlcyAlcycg
JSAoc2VsZi5jb21tYW5kLCBzZWxmLmhvc3QsIHNlbGYucGF0aCwgc2VsZi5oZWFkZXJzKQorCisg
IGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICByZXR1cm4gcmVwcigoc2VsZi5jb21tYW5kLCBzZWxm
Lmhvc3QsIHNlbGYucGF0aCwgc2VsZi5yZXF1ZXN0X2JvZHksCisgICAgICAgICAgICAgICAgIHNl
bGYudHJpbW1lZF9oZWFkZXJzLCBzZWxmLmlzX3NzbCkpCisKKyAgZGVmIF9faGFzaF9fKHNlbGYp
OgorICAgICIiIlJldHVybiBhIGludGVnZXIgaGFzaCB0byB1c2UgZm9yIGhhc2hlZCBjb2xsZWN0
aW9ucyBpbmNsdWRpbmcgZGljdC4iIiIKKyAgICByZXR1cm4gaGFzaChyZXByKHNlbGYpKQorCisg
IGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICIiIkRlZmluZSB0aGUgX19lcV9fIG1ldGhv
ZCB0byBtYXRjaCB0aGUgaGFzaCBiZWhhdmlvci4iIiIKKyAgICByZXR1cm4gcmVwcihzZWxmKSA9
PSByZXByKG90aGVyKQorCisgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICIi
IkluZmx1ZW5jZSBob3cgdG8gdW5waWNrbGUuCisKKyAgICAiaGVhZGVycyIgYXJlIHRoZSBvcmln
aW5hbCByZXF1ZXN0IGhlYWRlcnMuCisgICAgInRyaW1tZWRfaGVhZGVycyIgYXJlIHRoZSB0cmlt
bWVkIGhlYWRlcnMgdXNlZCBmb3IgbWF0Y2hpbmcgcmVxdWVzdHMKKyAgICBkdXJpbmcgcmVwbGF5
LgorCisgICAgQXJnczoKKyAgICAgIHN0YXRlOiBhIGRpY3Rpb25hcnkgZm9yIF9fZGljdF9fCisg
ICAgIiIiCisgICAgaWYgJ2Z1bGxfaGVhZGVycycgaW4gc3RhdGU6CisgICAgICAjIEZpeCBvbGRl
ciB2ZXJzaW9uIG9mIGFyY2hpdmUuCisgICAgICBzdGF0ZVsnaGVhZGVycyddID0gc3RhdGVbJ2Z1
bGxfaGVhZGVycyddCisgICAgICBkZWwgc3RhdGVbJ2Z1bGxfaGVhZGVycyddCisgICAgaWYgJ2hl
YWRlcnMnIG5vdCBpbiBzdGF0ZToKKyAgICAgIHJhaXNlIEh0dHBBcmNoaXZlRXhjZXB0aW9uKAor
ICAgICAgICAgICdBcmNoaXZlZCBIVFRQIHJlcXVlc3QgaXMgbWlzc2luZyAiaGVhZGVycyIuIFRo
ZSBIVFRQIGFyY2hpdmUgaXMnCisgICAgICAgICAgJyBsaWtlbHkgZnJvbSBhIHByZXZpb3VzIHZl
cnNpb24gYW5kIG11c3QgYmUgcmUtcmVjb3JkZWQuJykKKyAgICBzdGF0ZVsndHJpbW1lZF9oZWFk
ZXJzJ10gPSBzZWxmLl9UcmltSGVhZGVycyhkaWN0KHN0YXRlWydoZWFkZXJzJ10pKQorICAgIGlm
ICdpc19zc2wnIG5vdCBpbiBzdGF0ZToKKyAgICAgIHN0YXRlWydpc19zc2wnXSA9IEZhbHNlCisg
ICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoc3RhdGUpCisKKyAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxm
KToKKyAgICAiIiJJbmZsdWVuY2UgaG93IHRvIHBpY2tsZS4KKworICAgIFJldHVybnM6CisgICAg
ICBhIGRpY3QgdG8gdXNlIGZvciBwaWNrbGluZworICAgICIiIgorICAgIHN0YXRlID0gc2VsZi5f
X2RpY3RfXy5jb3B5KCkKKyAgICBkZWwgc3RhdGVbJ3RyaW1tZWRfaGVhZGVycyddCisgICAgcmV0
dXJuIHN0YXRlCisKKyAgZGVmIG1hdGNoZXMoc2VsZiwgY29tbWFuZD1Ob25lLCBob3N0PU5vbmUs
IHBhdGhfd2l0aF9xdWVyeT1Ob25lLAorICAgICAgICAgICAgICB1c2VfcXVlcnk9VHJ1ZSk6Cisg
ICAgIiIiUmV0dXJucyB0cnVlIGlmZiB0aGUgcmVxdWVzdCBtYXRjaGVzIGFsbCBwYXJhbWV0ZXJz
LgorCisgICAgQXJnczoKKyAgICAgIGNvbW1hbmQ6IGEgc3RyaW5nIChlLmcuICdHRVQnIG9yICdQ
T1NUJykuCisgICAgICBob3N0OiBhIGhvc3QgbmFtZSAoZS5nLiAnd3d3Lmdvb2dsZS5jb20nKS4K
KyAgICAgIHBhdGhfd2l0aF9xdWVyeTogYSByZXF1ZXN0IHBhdGggd2l0aCBxdWVyeSBzdHJpbmcg
KGUuZy4gJy9zZWFyY2g/cT1kb2dzJykKKyAgICAgIHVzZV9xdWVyeToKKyAgICAgICAgSWYgdXNl
X3F1ZXJ5IGlzIFRydWUsIHJlcXVlc3QgbWF0Y2hpbmcgdXNlcyBib3RoIHRoZSBoaWVyYXJjaGlj
YWwgcGF0aAorICAgICAgICBhbmQgcXVlcnkgc3RyaW5nIGNvbXBvbmVudC4KKyAgICAgICAgSWYg
dXNlX3F1ZXJ5IGlzIEZhbHNlLCByZXF1ZXN0IG1hdGNoaW5nIG9ubHkgdXNlcyB0aGUgaGllcmFy
Y2hpY2FsIHBhdGgKKworICAgICAgICBlLmcuIHJlcTEgPSBHRVQgd3d3LnRlc3QuY29tL2luZGV4
P2FhYWEKKyAgICAgICAgICAgICByZXEyID0gR0VUIHd3dy50ZXN0LmNvbS9pbmRleD9iYmJiCisK
KyAgICAgICAgSWYgdXNlX3F1ZXJ5IGlzIFRydWUsIHJlcTEubWF0Y2hlcyhyZXEyKSBldmFsdWF0
ZXMgdG8gRmFsc2UKKyAgICAgICAgSWYgdXNlX3F1ZXJ5IGlzIEZhbHNlLCByZXExLm1hdGNoZXMo
cmVxMikgZXZhbHVhdGVzIHRvIFRydWUKKworICAgIFJldHVybnM6CisgICAgICBUcnVlIGlmZiB0
aGUgcmVxdWVzdCBtYXRjaGVzIGFsbCBwYXJhbWV0ZXJzCisgICAgIiIiCisgICAgcGF0aF9tYXRj
aCA9IHBhdGhfd2l0aF9xdWVyeSA9PSBzZWxmLnBhdGgKKyAgICBpZiBub3QgdXNlX3F1ZXJ5Ogor
ICAgICAgc2VsZl9wYXRoID0gdXJscGFyc2UudXJscGFyc2UoJ2h0dHA6Ly8lcyVzJyAlICgKKyAg
ICAgICAgICBzZWxmLmhvc3Qgb3IgJycsIHNlbGYucGF0aCBvciAnJykpLnBhdGgKKyAgICAgIG90
aGVyX3BhdGggPSB1cmxwYXJzZS51cmxwYXJzZSgnaHR0cDovLyVzJXMnICUgKAorICAgICAgICAg
IGhvc3Qgb3IgJycsIHBhdGhfd2l0aF9xdWVyeSBvciAnJykpLnBhdGgKKyAgICAgIHBhdGhfbWF0
Y2ggPSBzZWxmX3BhdGggPT0gb3RoZXJfcGF0aAorICAgIHJldHVybiAoKGNvbW1hbmQgaXMgTm9u
ZSBvciBjb21tYW5kID09IHNlbGYuY29tbWFuZCkgYW5kCisgICAgICAgICAgICAoaG9zdCBpcyBO
b25lIG9yIGhvc3QgPT0gc2VsZi5ob3N0KSBhbmQKKyAgICAgICAgICAgIChwYXRoX3dpdGhfcXVl
cnkgaXMgTm9uZSBvciBwYXRoX21hdGNoKSkKKworICBAY2xhc3NtZXRob2QKKyAgZGVmIF9Ucmlt
SGVhZGVycyhjbHMsIGhlYWRlcnMpOgorICAgICIiIlJlbW92ZXMgaGVhZGVycyB0aGF0IGFyZSBr
bm93biB0byBjYXVzZSBwcm9ibGVtcyBkdXJpbmcgcmVwbGF5LgorCisgICAgVGhlc2UgaGVhZGVy
cyBhcmUgcmVtb3ZlZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOgorICAgIC0gYWNjZXB0OiBD
YXVzZXMgcHJvYmxlbXMgd2l0aCB3d3cuYmluZy5jb20uIER1cmluZyByZWNvcmQsIENTUyBpcyBm
ZXRjaGVkCisgICAgICAgICAgICAgIHdpdGggKi4gRHVyaW5nIHJlcGxheSwgaXQncyB0ZXh0L2Nz
cy4KKyAgICAtIGFjY2VwdC1jaGFyc2V0LCBhY2NlcHQtbGFuZ3VhZ2UsIHJlZmVyZXI6IHZhcnkg
YmV0d2VlbiBjbGllbnRzLgorICAgIC0gY29ubmVjdGlvbiwgbWV0aG9kLCBzY2hlbWUsIHVybCwg
dmVyc2lvbjogQ2F1c2UgcHJvYmxlbXMgd2l0aCBzcGR5LgorICAgIC0gY29va2llOiBFeHRyZW1l
bHkgc2Vuc2l0aXZlIHRvIHJlcXVlc3QvcmVzcG9uc2Ugb3JkZXIuCisgICAgLSBrZWVwLWFsaXZl
OiBOb3Qgc3VwcG9ydGVkIGJ5IFdlYiBQYWdlIFJlcGxheS4KKyAgICAtIHVzZXItYWdlbnQ6IENo
YW5nZXMgd2l0aCBldmVyeSBDaHJvbWUgdmVyc2lvbi4KKyAgICAtIHByb3h5LWNvbm5lY3Rpb246
IFNlbnQgZm9yIHByb3h5IHJlcXVlc3RzLgorCisgICAgQW5vdGhlciB2YXJpYW50IHRvIGNvbnNp
ZGVyIGlzIGRyb3BwaW5nIG9ubHkgdGhlIHZhbHVlIGZyb20gdGhlIGhlYWRlci4KKyAgICBIb3dl
dmVyLCB0aGlzIGlzIHBhcnRpY3VsYXJseSBiYWQgZm9yIHRoZSBjb29raWUgaGVhZGVyLCBiZWNh
dXNlIHRoZQorICAgIHByZXNlbmNlIG9mIHRoZSBjb29raWUgZGVwZW5kcyBvbiB0aGUgcmVzcG9u
c2VzIHdlJ3ZlIHNlZW4gd2hlbiB0aGUgcmVxdWVzdAorICAgIGlzIG1hZGUuCisKKyAgICBBcmdz
OgorICAgICAgaGVhZGVyczoge2hlYWRlcl9rZXk6IGhlYWRlcl92YWx1ZSwgLi4ufQorCisgICAg
UmV0dXJuczoKKyAgICAgIFsoaGVhZGVyX2tleSwgaGVhZGVyX3ZhbHVlKSwgLi4uXSAgIyAod2l0
aCB1bmRlc2lyYWJsZSBoZWFkZXJzIHJlbW92ZWQpCisgICAgIiIiCisgICAgIyBUT0RPKHRvbnln
KTogU3RyaXAgc2RjaCBmcm9tIHRoZSByZXF1ZXN0IGhlYWRlcnMgYmVjYXVzZSB3ZSBjYW4ndAor
ICAgICMgZ3VhcmFudGVlIHRoYXQgdGhlIGRpY3Rpb25hcnkgd2lsbCBiZSByZWNvcmRlZCwgc28g
cmVwbGF5IG1heSBub3Qgd29yay4KKyAgICBpZiAnYWNjZXB0LWVuY29kaW5nJyBpbiBoZWFkZXJz
OgorICAgICAgaGVhZGVyc1snYWNjZXB0LWVuY29kaW5nJ10gPSBoZWFkZXJzWydhY2NlcHQtZW5j
b2RpbmcnXS5yZXBsYWNlKAorICAgICAgICAgICdzZGNoJywgJycpCisgICAgICAjIEEgbGl0dGxl
IGNsZWFuLXVwCisgICAgICBpZiBoZWFkZXJzWydhY2NlcHQtZW5jb2RpbmcnXS5lbmRzd2l0aCgn
LCcpOgorICAgICAgICBoZWFkZXJzWydhY2NlcHQtZW5jb2RpbmcnXSA9IGhlYWRlcnNbJ2FjY2Vw
dC1lbmNvZGluZyddWzotMV0KKyAgICB1bmRlc2lyYWJsZV9rZXlzID0gWworICAgICAgICAnYWNj
ZXB0JywgJ2FjY2VwdC1jaGFyc2V0JywgJ2FjY2VwdC1sYW5ndWFnZScsCisgICAgICAgICdjb25u
ZWN0aW9uJywgJ2Nvb2tpZScsICdrZWVwLWFsaXZlJywgJ21ldGhvZCcsCisgICAgICAgICdyZWZl
cmVyJywgJ3NjaGVtZScsICd1cmwnLCAndmVyc2lvbicsICd1c2VyLWFnZW50JywgJ3Byb3h5LWNv
bm5lY3Rpb24nXQorICAgIHJldHVybiBzb3J0ZWQoWyhrLCB2KSBmb3IgaywgdiBpbiBoZWFkZXJz
Lml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICBpZiBrLmxvd2VyKCkgbm90IGluIHVuZGVzaXJh
YmxlX2tleXNdKQorCisgIGRlZiBpc19jb25kaXRpb25hbChzZWxmKToKKyAgICAiIiJSZXR1cm4g
bGlzdCBvZiBoZWFkZXJzIHRoYXQgbWF0Y2ggY29uZGl0aW9uYWwgaGVhZGVycy4iIiIKKyAgICBm
b3IgaGVhZGVyIGluIHNlbGYuQ09ORElUSU9OQUxfSEVBREVSUzoKKyAgICAgIGlmIGhlYWRlciBp
biBzZWxmLmhlYWRlcnM6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisK
KyAgZGVmIGNyZWF0ZV9yZXF1ZXN0X3dpdGhvdXRfY29uZGl0aW9ucyhzZWxmKToKKyAgICBzdHJp
cHBlZF9oZWFkZXJzID0gZGljdCgoaywgdikgZm9yIGssIHYgaW4gc2VsZi5oZWFkZXJzLml0ZXJp
dGVtcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgay5sb3dlcigpIG5vdCBpbiBz
ZWxmLkNPTkRJVElPTkFMX0hFQURFUlMpCisgICAgcmV0dXJuIEFyY2hpdmVkSHR0cFJlcXVlc3Qo
CisgICAgICAgIHNlbGYuY29tbWFuZCwgc2VsZi5ob3N0LCBzZWxmLnBhdGgsIHNlbGYucmVxdWVz
dF9ib2R5LAorICAgICAgICBzdHJpcHBlZF9oZWFkZXJzLCBzZWxmLmlzX3NzbCkKKworY2xhc3Mg
QXJjaGl2ZWRIdHRwUmVzcG9uc2Uob2JqZWN0KToKKyAgIiIiQWxsIHRoZSBkYXRhIG5lZWRlZCB0
byByZWNyZWF0ZSBhbGwgSFRUUCByZXNwb25zZS4iIiIKKworICAjIENIVU5LX0VESVRfU0VQQVJB
VE9SIGlzIHVzZWQgdG8gZWRpdCBhbmQgdmlldyB0ZXh0IGNvbnRlbnQuCisgICMgSXQgaXMgbm90
IHNlbnQgaW4gcmVzcG9uc2VzLiBJdCBpcyBhZGRlZCBieSBnZXRfZGF0YV9hc190ZXh0KCkKKyAg
IyBhbmQgcmVtb3ZlZCBieSBzZXRfZGF0YSgpLgorICBDSFVOS19FRElUX1NFUEFSQVRPUiA9ICdb
V0VCX1BBR0VfUkVQTEFZX0NIVU5LX0JPVU5EQVJZXScKKworICAjIFNFUlZFUl9ERUxBWV9FRElU
X1NFUEFSQVRPUiBpcyB1c2VkIHRvIGVkaXQgYW5kIHZpZXcgc2VydmVyIGRlbGF5cy4KKyAgREVM
QVlfRURJVF9TRVBBUkFUT1IgPSAoJ1xuW1dFQl9QQUdFX1JFUExBWV9FRElUX0FSQ0hJVkUgJwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAnLS0tIFNlcnZlciBkZWxheXMgcGVyIGNodW5rIGFy
ZSBzaG93biBhYm92ZS4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVzcG9uc2UgY29u
dGVudCBpcyBiZWxvdy5dXG4nKQorCisgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZXJzaW9uLCBzdGF0
dXMsIHJlYXNvbiwgaGVhZGVycywgcmVzcG9uc2VfZGF0YSwKKyAgICAgICAgICAgICAgIHNlcnZl
cl9kZWxheXM9Tm9uZSk6CisgICAgIiIiSW5pdGlhbGl6ZSBhbiBBcmNoaXZlZEh0dHBSZXNwb25z
ZS4KKworICAgIEFyZ3M6CisgICAgICB2ZXJzaW9uOiBIVFRQIHByb3RvY29sIHZlcnNpb24gdXNl
ZCBieSBzZXJ2ZXIuCisgICAgICAgICAgMTAgZm9yIEhUVFAvMS4wLCAxMSBmb3IgSFRUUC8xLjEg
KHNhbWUgYXMgaHR0cGxpYikuCisgICAgICBzdGF0dXM6IFN0YXR1cyBjb2RlIHJldHVybmVkIGJ5
IHNlcnZlciAoZS5nLiAyMDApLgorICAgICAgcmVhc29uOiBSZWFzb24gcGhyYXNlIHJldHVybmVk
IGJ5IHNlcnZlciAoZS5nLiAiT0siKS4KKyAgICAgIGhlYWRlcnM6IGxpc3Qgb2YgKGhlYWRlciwg
dmFsdWUpIHR1cGxlcy4KKyAgICAgIHJlc3BvbnNlX2RhdGE6IGxpc3Qgb2YgY29udGVudCBjaHVu
a3Mgd2hlcmUgY29uY2F0ZW5hdGluZyB0aGUgY2h1bmtzIGdpdmVzCisgICAgICAgICAgdGhlIGNv
bXBsZXRlIGNvbnRlbnRzIChpLmUuIHRoZSBjaHVua3MgZG8gbm90IGhhdmUgYW55IGxlbmd0aHMg
b3IKKyAgICAgICAgICBkZWxpbWl0ZXJzKS4KKyAgICAgICAgICBNdXN0IG5vdCBpbmNsdWRlIHRo
ZSBsYXN0ICdzZW50aW5lbCcgY2h1bmsgKGkuZS4gdGhlIHplcm8tbGVuZ3RoIGNodW5rCisgICAg
ICAgICAgd2l0aCBubyBkYXRhLCB0byBtYXJrIHRlcm1pbmF0aW9uIG9mIGRhdGEgdHJhbnNmZXIp
LgorICAgICAgc2VydmVyX2RlbGF5czogbGlzdCBvZiBzZXJ2ZXIgZGVsYXlzIGZvciBlYWNoIGNo
dW5rLiBOb3RlIHRoYXQKKyAgICAgICAgICBpZiBjaHVua2VkIGVuY29kaW5nIGlzIHVzZWQsIHRo
aXMgd2lsbCBhbHNvIHJlY29yZCB0aGUgdHRmYiBmb3IgdGhlCisgICAgICAgICAgbGFzdCAnc2Vu
dGluZWwnIGNodW5rICh6ZXJvLWxlbmd0aCBjaHVuayB3aXRoIG5vIGRhdGEpLgorICAgICIiIgor
ICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KKyAgICBzZWxmLnN0YXR1cyA9IHN0YXR1cworICAg
IHNlbGYucmVhc29uID0gcmVhc29uCisgICAgc2VsZi5oZWFkZXJzID0gaGVhZGVycworICAgIHNl
bGYucmVzcG9uc2VfZGF0YSA9IHJlc3BvbnNlX2RhdGEKKyAgICBzZWxmLnNlcnZlcl9kZWxheXMg
PSBzZXJ2ZXJfZGVsYXlzCisgICAgc2VsZi5maXhfY2h1bmtfZGVsYXlzKCkKKworICBkZWYgZml4
X2NodW5rX2RlbGF5cyhzZWxmKToKKyAgICAiIiJDaGVja3Mgd2hldGhlciB0aGUgbnVtYmVyIG9m
IHNlcnZlciBkZWxheXMgbWF0Y2ggdGhlIG51bWJlciBvZiBjaHVua3MuCisKKyAgICBJZiB0aGV5
IGRvIG5vdCBtYXRjaCwgZWl0aGVyIHplcm9lcyBhcmUgYXBwZW5kZWQgb3IgdmFsdWVzIHRydW5j
YXRlZCBmcm9tCisgICAgc2VydmVyX2RlbGF5cy4KKyAgICAiIiIKKyAgICBpc3N1ZV93YXJuaW5n
ID0gVHJ1ZQorICAgIGlmIG5vdCBzZWxmLnNlcnZlcl9kZWxheXM6CisgICAgICBzZWxmLnNlcnZl
cl9kZWxheXMgPSBbXQorICAgICAgaXNzdWVfd2FybmluZyA9IEZhbHNlCisgICAgc2VydmVyX2Rl
bGF5cyA9IHNlbGYuc2VydmVyX2RlbGF5cworCisgICAgdXNlX2NodW5rZWQgPSAndHJhbnNmZXIt
ZW5jb2RpbmcnIGluIHNlbGYuaGVhZGVycworICAgICMgSWYgd2UgYXJlIHVzaW5nIGNodW5rZWQg
ZW5jb2RpbmcsIHN1YnRyYWN0IHRoZSBvZmZzZXQgZm9yIHRoZSAnc2VudGluZWwnCisgICAgIyBj
aHVuay4KKyAgICBzZXJ2ZXJfZGVsYXlfb2Zmc2V0ID0gMSBpZiB1c2VfY2h1bmtlZCBlbHNlIDAK
KworICAgIHByb3Blcl9zZXJ2ZXJfZGVsYXlzX2xlbmd0aCA9IGxlbihzZWxmLnJlc3BvbnNlX2Rh
dGEpICsgc2VydmVyX2RlbGF5X29mZnNldAorICAgIGxlbmd0aF9kZWx0YSA9IHByb3Blcl9zZXJ2
ZXJfZGVsYXlzX2xlbmd0aCAtIGxlbihzZXJ2ZXJfZGVsYXlzKQorICAgIGlmIGxlbmd0aF9kZWx0
YSA8IDA6CisgICAgICBpZiBpc3N1ZV93YXJuaW5nOgorICAgICAgICBsb2dnaW5nLndhcm5pbmco
J1NlcnZlcl9kZWxheSBjb250YWlucyB0b28gbWFueSBlbGVtZW50czsgJworICAgICAgICAgICAg
ICAgICAgICAgICAgJ3RydW5jYXRpbmcgJWQgZWxlbWVudHMnLCBhYnMobGVuZ3RoX2RlbHRhKSkK
KyAgICAgIGRlbCBzZXJ2ZXJfZGVsYXlzW3Byb3Blcl9zZXJ2ZXJfZGVsYXlzX2xlbmd0aDpdCisg
ICAgZWxpZiBsZW5ndGhfZGVsdGEgPiAwOgorICAgICAgaWYgaXNzdWVfd2FybmluZzoKKyAgICAg
ICAgbG9nZ2luZy53YXJuaW5nKCdTZXJ2ZXJfZGVsYXkgY29udGFpbnMgdG9vIGZldyBlbGVtZW50
czsgJworICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGVuZGluZyAlZCBlbGVtZW50cycsIGxl
bmd0aF9kZWx0YSkKKyAgICAgIHNlcnZlcl9kZWxheXMgKz0gWzBdICogbGVuZ3RoX2RlbHRhCisK
KyAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgIHJldHVybiByZXByKChzZWxmLnZlcnNpb24sIHNl
bGYuc3RhdHVzLCBzZWxmLnJlYXNvbiwgc29ydGVkKHNlbGYuaGVhZGVycyksCisgICAgICAgICAg
ICAgICAgIHNlbGYucmVzcG9uc2VfZGF0YSkpCisKKyAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAg
ICIiIlJldHVybiBhIGludGVnZXIgaGFzaCB0byB1c2UgZm9yIGhhc2hlZCBjb2xsZWN0aW9ucyBp
bmNsdWRpbmcgZGljdC4iIiIKKyAgICByZXR1cm4gaGFzaChyZXByKHNlbGYpKQorCisgIGRlZiBf
X2VxX18oc2VsZiwgb3RoZXIpOgorICAgICIiIkRlZmluZSB0aGUgX19lcV9fIG1ldGhvZCB0byBt
YXRjaCB0aGUgaGFzaCBiZWhhdmlvci4iIiIKKyAgICByZXR1cm4gcmVwcihzZWxmKSA9PSByZXBy
KG90aGVyKQorCisgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICIiIkluZmx1
ZW5jZSBob3cgdG8gdW5waWNrbGUuCisKKyAgICBBcmdzOgorICAgICAgc3RhdGU6IGEgZGljdGlv
bmFyeSBmb3IgX19kaWN0X18KKyAgICAiIiIKKyAgICBpZiAnc2VydmVyX2RlbGF5cycgbm90IGlu
IHN0YXRlOgorICAgICAgc3RhdGVbJ3NlcnZlcl9kZWxheXMnXSA9IFtdCisgICAgc2VsZi5fX2Rp
Y3RfXy51cGRhdGUoc3RhdGUpCisgICAgc2VsZi5maXhfY2h1bmtfZGVsYXlzKCkKKworICBkZWYg
Z2V0X2hlYWRlcihzZWxmLCBrZXkpOgorICAgIGZvciBrLCB2IGluIHNlbGYuaGVhZGVyczoKKyAg
ICAgIGlmIGtleSA9PSBrOgorICAgICAgICByZXR1cm4gdgorICAgIHJldHVybiBOb25lCisKKyAg
ZGVmIGdldF9oZWFkZXJfY2FzZV9pbnNlbnNpdGl2ZShzZWxmLCBrZXkpOgorICAgIGZvciBrLCB2
IGluIHNlbGYuaGVhZGVyczoKKyAgICAgIGlmIGtleS5sb3dlcigpID09IGsubG93ZXIoKToKKyAg
ICAgICAgcmV0dXJuIHYKKyAgICByZXR1cm4gTm9uZQorCisgIGRlZiBzZXRfaGVhZGVyKHNlbGYs
IGtleSwgdmFsdWUpOgorICAgIGZvciBpLCAoaywgdikgaW4gZW51bWVyYXRlKHNlbGYuaGVhZGVy
cyk6CisgICAgICBpZiBrZXkgPT0gazoKKyAgICAgICAgc2VsZi5oZWFkZXJzW2ldID0gKGtleSwg
dmFsdWUpCisgICAgICAgIHJldHVybgorICAgIHNlbGYuaGVhZGVycy5hcHBlbmQoKGtleSwgdmFs
dWUpKQorCisgIGRlZiByZW1vdmVfaGVhZGVyKHNlbGYsIGtleSk6CisgICAgZm9yIGksIChrLCB2
KSBpbiBlbnVtZXJhdGUoc2VsZi5oZWFkZXJzKToKKyAgICAgIGlmIGtleSA9PSBrOgorICAgICAg
ICBzZWxmLmhlYWRlcnMucG9wKGkpCisgICAgICAgIHJldHVybgorCisgIGRlZiBpc19nemlwKHNl
bGYpOgorICAgIHJldHVybiBzZWxmLmdldF9oZWFkZXIoJ2NvbnRlbnQtZW5jb2RpbmcnKSA9PSAn
Z3ppcCcKKworICBkZWYgaXNfY29tcHJlc3NlZChzZWxmKToKKyAgICByZXR1cm4gc2VsZi5nZXRf
aGVhZGVyKCdjb250ZW50LWVuY29kaW5nJykgaW4gKCdnemlwJywgJ2RlZmxhdGUnKQorCisgIGRl
ZiBnZXRfZGF0YV9hc190ZXh0KHNlbGYpOgorICAgICIiIlJldHVybiBjb250ZW50IGFzIGEgc2lu
Z2xlIHN0cmluZy4KKworICAgIFVuY29tcHJlc3NlcyBhbmQgY29uY2F0ZW5hdGVzIGNodW5rcyB3
aXRoIENIVU5LX0VESVRfU0VQQVJBVE9SLgorICAgICIiIgorICAgIGNvbnRlbnRfdHlwZSA9IHNl
bGYuZ2V0X2hlYWRlcignY29udGVudC10eXBlJykKKyAgICBpZiAobm90IGNvbnRlbnRfdHlwZSBv
cgorICAgICAgICBub3QgKGNvbnRlbnRfdHlwZS5zdGFydHN3aXRoKCd0ZXh0LycpIG9yCisgICAg
ICAgICAgICAgY29udGVudF90eXBlID09ICdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnKSk6Cisg
ICAgICByZXR1cm4gTm9uZQorICAgIGlmIHNlbGYuaXNfY29tcHJlc3NlZCgpOgorICAgICAgdW5j
b21wcmVzc2VkX2NodW5rcyA9IGh0dHB6bGliLnVuY29tcHJlc3NfY2h1bmtzKAorICAgICAgICAg
IHNlbGYucmVzcG9uc2VfZGF0YSwgc2VsZi5pc19nemlwKCkpCisgICAgZWxzZToKKyAgICAgIHVu
Y29tcHJlc3NlZF9jaHVua3MgPSBzZWxmLnJlc3BvbnNlX2RhdGEKKyAgICByZXR1cm4gc2VsZi5D
SFVOS19FRElUX1NFUEFSQVRPUi5qb2luKHVuY29tcHJlc3NlZF9jaHVua3MpCisKKyAgZGVmIGdl
dF9zZXJ2ZXJfZGVsYXlzX2FzX3RleHQoc2VsZik6CisgICAgIiIiUmV0dXJuIHNlcnZlciBkZWxh
eXMgYXMgbXVsdGlwbGUgbGluZXMgb2YgbnVtYmVycywgb25lIHBlciBsaW5lLgorCisgICAgZS5n
LgorICAgIDEwLjAwMDAKKyAgICAyLjMyMTEKKyAgICAxLjUzMjQKKyAgICA1LjMwMAorCisgICAg
UmV0dXJucyAwIGZvciBlYWNoIGNodW5rIGZvciBhcmNoaXZlcyB3aXRob3V0IHNlcnZlcl9kZWxh
eSBkYXRhLgorICAgICIiIgorICAgIHJldHVybiAnXG4nLmpvaW4oJyVzJyAlIGRlbGF5IGZvciBk
ZWxheSBpbiBzZWxmLnNlcnZlcl9kZWxheXMpCisKKyAgZGVmIGdldF9yZXNwb25zZV9hc190ZXh0
KHNlbGYpOgorICAgICIiIlJldHVybnMgcmVzcG9uc2UgY29udGVudCBhcyBhIHNpbmdsZSBzdHJp
bmcuCisKKyAgICBTZXJ2ZXIgZGVsYXlzIGFyZSBzZXBhcmF0ZWQgb24gYSBwZXItY2h1bmsgYmFz
aXMuIERlbGF5cyBhcmUgaW4gc2Vjb25kcy4KKyAgICBSZXNwb25zZSBjb250ZW50IGJlZ2lucyBh
ZnRlciBERUxBWV9FRElUX1NFUEFSQVRPUgorICAgICIiIgorICAgIGRhdGEgPSBzZWxmLmdldF9k
YXRhX2FzX3RleHQoKQorICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgIGxvZ2dpbmcud2Fybmlu
ZygnRGF0YSBjYW4gbm90IGJlIHJlcHJlc2VudGVkIGFzIHRleHQuJykKKyAgICAgIGRhdGEgPSAn
JworICAgIHNlcnZlcl9kZWxheXMgPSBzZWxmLmdldF9zZXJ2ZXJfZGVsYXlzX2FzX3RleHQoKQor
ICAgIHJldHVybiBzZWxmLkRFTEFZX0VESVRfU0VQQVJBVE9SLmpvaW4oKHNlcnZlcl9kZWxheXMs
IGRhdGEpKQorCisgIGRlZiBzZXRfZGF0YShzZWxmLCB0ZXh0KToKKyAgICAiIiJJbnZlcnNlIG9m
IGdldF9kYXRhX2FzX3RleHQoKS4KKworICAgIFNwbGl0IG9uIENIVU5LX0VESVRfU0VQQVJBVE9S
IGFuZCBjb21wcmVzcyBpZiBuZWVkZWQuCisgICAgIiIiCisgICAgdGV4dF9jaHVua3MgPSB0ZXh0
LnNwbGl0KHNlbGYuQ0hVTktfRURJVF9TRVBBUkFUT1IpCisgICAgaWYgc2VsZi5pc19jb21wcmVz
c2VkKCk6CisgICAgICBzZWxmLnJlc3BvbnNlX2RhdGEgPSBodHRwemxpYi5jb21wcmVzc19jaHVu
a3ModGV4dF9jaHVua3MsIHNlbGYuaXNfZ3ppcCgpKQorICAgIGVsc2U6CisgICAgICBzZWxmLnJl
c3BvbnNlX2RhdGEgPSB0ZXh0X2NodW5rcworICAgIGlmIG5vdCBzZWxmLmdldF9oZWFkZXIoJ3Ry
YW5zZmVyLWVuY29kaW5nJyk6CisgICAgICBjb250ZW50X2xlbmd0aCA9IHN1bShsZW4oYykgZm9y
IGMgaW4gc2VsZi5yZXNwb25zZV9kYXRhKQorICAgICAgc2VsZi5zZXRfaGVhZGVyKCdjb250ZW50
LWxlbmd0aCcsIHN0cihjb250ZW50X2xlbmd0aCkpCisKKyAgZGVmIHNldF9zZXJ2ZXJfZGVsYXlz
KHNlbGYsIGRlbGF5c190ZXh0KToKKyAgICAiIiJJbnZlcnNlIG9mIGdldF9zZXJ2ZXJfZGVsYXlz
X2FzX3RleHQoKS4KKworICAgIFNldHMgdGhlIHNlcnZlciBkZWxheSBvZiBlYWNoIHRvIGl0cyBj
b3JyZXNwb25kaW5nIHRleHR1YWwgcmVwcmVzZW50YXRpb24uCisgICAgSWYgdGhlIGRlbGF5c190
ZXh0IGNhbiBub3QgYmUgcGFyc2VkLCBhIGRlZmF1bHQgdmFsdWUgb2YgMCBpcyBhc3N1bWVkLgor
CisgICAgVGhpcyBtZXRob2QgZG9lcyBub3QgZW5mb3JjZSB0aGF0IHRoZSBudW1iZXIgb2YgY2h1
bmsgZGVsYXlzIG1hdGNoZXMgdGhlCisgICAgbnVtYmVyIG9mIGNodW5rcyEKKworICAgIEFyZ3M6
CisgICAgICBkZWxheXNfdGV4dDogc2VydmVyIGRlbGF5cyBhcyBtdWx0aXBsZSBsaW5lcyBvZiBu
dW1iZXJzLCBvbmUgcGVyIGxpbmUuCisKKyAgICAgIGUuZy4KKyAgICAgIDEwLjAwMDAKKyAgICAg
IDIuMzIxMQorICAgICAgMS41MzI0CisgICAgICA1LjMwMAorICAgICIiIgorICAgIHNlcnZlcl9k
ZWxheXMgPSBbXQorICAgIGZvciBkZWxheV9zdHIgaW4gZGVsYXlzX3RleHQuc3BsaXQoJ1xuJyk6
CisgICAgICBkZWxheSA9IDAKKyAgICAgIHRyeToKKyAgICAgICAgZGVsYXkgPSBmbG9hdChkZWxh
eV9zdHIpCisgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgbG9nZ2luZy5jcml0
aWNhbCgnVW5hYmxlIHRvIHBhcnNlIHNlcnZlciBkZWxheSAlczogJXMnLCBkZWxheV9zdHIsIGUp
CisgICAgICBzZXJ2ZXJfZGVsYXlzLmFwcGVuZChkZWxheSkKKyAgICBzZWxmLnNlcnZlcl9kZWxh
eXMgPSBzZXJ2ZXJfZGVsYXlzCisgICAgc2VsZi5maXhfY2h1bmtfZGVsYXlzKCkKKworICBkZWYg
c2V0X3Jlc3BvbnNlX2Zyb21fdGV4dChzZWxmLCB0ZXh0KToKKyAgICAiIiJJbnZlcnNlIG9mIGdl
dF9yZXNwb25zZV9hc190ZXh0KCkuCisKKyAgICBNb2RpZmllcyB0aGUgc3RhdGUgb2YgdGhlIGFy
Y2hpdmUgYWNjb3JkaW5nIHRvIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uLgorICAgICIiIgor
ICAgIHBhcnRpdGlvbnMgPSB0ZXh0LnNwbGl0KHNlbGYuREVMQVlfRURJVF9TRVBBUkFUT1IpCisg
ICAgaWYgbm90IGxlbihwYXJ0aXRpb25zKSA9PSAyOgorICAgICAgbG9nZ2luZy5jcml0aWNhbCgn
RXJyb3IgcGFyc2luZyB0ZXh0IHJlcHJlc2VudGF0aW9uLiAnCisgICAgICAgICAgICAgICAgICAg
ICAgICdFZGl0cyB3aWxsIG5vdCBiZSBzYXZlZC4nKQorICAgICAgcmV0dXJuCisgICAgc2VsZi5z
ZXRfc2VydmVyX2RlbGF5cyhwYXJ0aXRpb25zWzBdKQorICAgIHNlbGYuc2V0X2RhdGEocGFydGl0
aW9uc1sxXSkKKworCitkZWYgY3JlYXRlX3Jlc3BvbnNlKHN0YXR1cywgcmVhc29uPU5vbmUsIGhl
YWRlcnM9Tm9uZSwgYm9keT1Ob25lKToKKyAgIiIiQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjcmVh
dGluZyBzaW1wbGUgQXJjaGl2ZWRIdHRwUmVzcG9uc2Ugb2JqZWN0cy4iIiIKKyAgaWYgcmVhc29u
IGlzIE5vbmU6CisgICAgcmVhc29uID0gaHR0cGxpYi5yZXNwb25zZXMuZ2V0KHN0YXR1cywgJ1Vu
a25vd24nKQorICBpZiBoZWFkZXJzIGlzIE5vbmU6CisgICAgaGVhZGVycyA9IFsoJ2NvbnRlbnQt
dHlwZScsICd0ZXh0L3BsYWluJyldCisgIGlmIGJvZHkgaXMgTm9uZToKKyAgICBib2R5ID0gIiVz
ICVzIiAlIChzdGF0dXMsIHJlYXNvbikKKyAgcmV0dXJuIEFyY2hpdmVkSHR0cFJlc3BvbnNlKDEx
LCBzdGF0dXMsIHJlYXNvbiwgaGVhZGVycywgYm9keSkKKworCitpZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgorICBjbGFzcyBQbGFpbkhlbHBGb3JtYXR0ZXIob3B0cGFyc2UuSW5kZW50ZWRIZWxw
Rm9ybWF0dGVyKToKKyAgICBkZWYgZm9ybWF0X2Rlc2NyaXB0aW9uKHNlbGYsIGRlc2NyaXB0aW9u
KToKKyAgICAgIGlmIGRlc2NyaXB0aW9uOgorICAgICAgICByZXR1cm4gZGVzY3JpcHRpb24gKyAn
XG4nCisgICAgICBlbHNlOgorICAgICAgICByZXR1cm4gJycKKworICBvcHRpb25fcGFyc2VyID0g
b3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgdXNhZ2U9JyVwcm9nIFtsc3xjYXR8ZWRpdF0g
W29wdGlvbnNdIHJlcGxheV9maWxlJywKKyAgICAgIGZvcm1hdHRlcj1QbGFpbkhlbHBGb3JtYXR0
ZXIoKSwKKyAgICAgIGRlc2NyaXB0aW9uPV9fZG9jX18sCisgICAgICBlcGlsb2c9J2h0dHA6Ly9j
b2RlLmdvb2dsZS5jb20vcC93ZWItcGFnZS1yZXBsYXkvJykKKworICBvcHRpb25fcGFyc2VyLmFk
ZF9vcHRpb24oJy1jJywgJy0tY29tbWFuZCcsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgIGFjdGlvbj0n
c3RvcmUnLAorICAgICAgdHlwZT0nc3RyaW5nJywKKyAgICAgIGhlbHA9J09ubHkgc2hvdyBVUkxz
IG1hdGNoaW5nIHRoaXMgY29tbWFuZC4nKQorICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1v
JywgJy0taG9zdCcsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgIGFjdGlvbj0nc3RvcmUnLAorICAgICAg
dHlwZT0nc3RyaW5nJywKKyAgICAgIGhlbHA9J09ubHkgc2hvdyBVUkxzIG1hdGNoaW5nIHRoaXMg
aG9zdC4nKQorICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcGF0aCcsIGRlZmF1
bHQ9Tm9uZSwKKyAgICAgIGFjdGlvbj0nc3RvcmUnLAorICAgICAgdHlwZT0nc3RyaW5nJywKKyAg
ICAgIGhlbHA9J09ubHkgc2hvdyBVUkxzIG1hdGNoaW5nIHRoaXMgcGF0aC4nKQorCisgIG9wdGlv
bnMsIGFyZ3MgPSBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgIGlmIGxlbihhcmdzKSAh
PSAyOgorICAgIHByaW50ICdhcmdzOiAlcycgJSBhcmdzCisgICAgb3B0aW9uX3BhcnNlci5lcnJv
cignTXVzdCBzcGVjaWZ5IGEgY29tbWFuZCBhbmQgcmVwbGF5X2ZpbGUnKQorCisgIGNvbW1hbmQg
PSBhcmdzWzBdCisgIHJlcGxheV9maWxlID0gYXJnc1sxXQorCisgIGlmIG5vdCBvcy5wYXRoLmV4
aXN0cyhyZXBsYXlfZmlsZSk6CisgICAgb3B0aW9uX3BhcnNlci5lcnJvcignUmVwbGF5IGZpbGUg
IiVzIiBkb2VzIG5vdCBleGlzdCcgJSByZXBsYXlfZmlsZSkKKworICBodHRwX2FyY2hpdmUgPSBI
dHRwQXJjaGl2ZS5Mb2FkKHJlcGxheV9maWxlKQorICBpZiBjb21tYW5kID09ICdscyc6CisgICAg
cHJpbnQgaHR0cF9hcmNoaXZlLmxzKG9wdGlvbnMuY29tbWFuZCwgb3B0aW9ucy5ob3N0LCBvcHRp
b25zLnBhdGgpCisgIGVsaWYgY29tbWFuZCA9PSAnY2F0JzoKKyAgICBwcmludCBodHRwX2FyY2hp
dmUuY2F0KG9wdGlvbnMuY29tbWFuZCwgb3B0aW9ucy5ob3N0LCBvcHRpb25zLnBhdGgpCisgIGVs
aWYgY29tbWFuZCA9PSAnZWRpdCc6CisgICAgaHR0cF9hcmNoaXZlLmVkaXQob3B0aW9ucy5jb21t
YW5kLCBvcHRpb25zLmhvc3QsIG9wdGlvbnMucGF0aCkKKyAgICBodHRwX2FyY2hpdmUuUGVyc2lz
dChyZXBsYXlfZmlsZSkKKyAgZWxzZToKKyAgICBvcHRpb25fcGFyc2VyLmVycm9yKCdVbmtub3du
IGNvbW1hbmQgIiVzIicgJSBjb21tYW5kKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvV2Vi
UGFnZVJlcGxheS9odHRwYXJjaGl2ZS5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJs
ZQogICArICoKCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L2h0dHBhcmNoaXZlX3Rlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS9odHRwYXJjaGl2ZV90ZXN0LnB5CShy
ZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS9odHRwYXJjaGl2ZV90ZXN0LnB5CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENv
cHlyaWdodCAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp
OworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor
IworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIwor
IyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
CisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQgYXN0CitpbXBvcnQg
aHR0cGFyY2hpdmUKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKKworZGVmIGNyZWF0ZV9y
ZXF1ZXN0KGhlYWRlcnMpOgorICByZXR1cm4gaHR0cGFyY2hpdmUuQXJjaGl2ZWRIdHRwUmVxdWVz
dCgKKyAgICAgICdHRVQnLCAnd3d3LnRlc3QuY29tJywgJy8nLCBOb25lLCBoZWFkZXJzKQorCitk
ZWYgY3JlYXRlX3Jlc3BvbnNlKGhlYWRlcnMpOgorICByZXR1cm4gaHR0cGFyY2hpdmUuQXJjaGl2
ZWRIdHRwUmVzcG9uc2UoCisgICAgICAxMSwgMjAwLCAnT0snLCBoZWFkZXJzLCAnJykKKworCitj
bGFzcyBIdHRwQXJjaGl2ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgIEJBU0VfRElSID0g
b3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCisgIE1PQ0tfQVJDSElW
RSA9IG9zLnBhdGguam9pbihCQVNFX0RJUiwgJ21vY2stYXJjaGl2ZS50eHQnKQorCisgIFJFUVVF
U1RfSEVBREVSUyA9IHt9CisgIFJFUVVFU1QgPSBjcmVhdGVfcmVxdWVzdChSRVFVRVNUX0hFQURF
UlMpCisKKyAgIyBVc2VkIGZvciBpZi0odW4pbW9kaWZpZWQtc2luY2UgY2hlY2tzCisgIERBVEVf
UEFTVCA9ICdXZWQsIDEzIEp1bCAyMDExIDAzOjU4OjA4IEdNVCcKKyAgREFURV9QUkVTRU5UID0g
J1dlZCwgMjAgSnVsIDIwMTEgMDQ6NTg6MDggR01UJworICBEQVRFX0ZVVFVSRSA9ICdXZWQsIDI3
IEp1bCAyMDExIDA1OjU4OjA4IEdNVCcKKyAgREFURV9JTlZBTElEID0gJ1RoaXMgaXMgYW4gaW52
YWxpZCBkYXRlISEnCisKKyAgIyBldGFnIHZhbHVlcworICBFVEFHX1ZBTElEID0gJ2V0YWcnCisg
IEVUQUdfSU5WQUxJRCA9ICdUaGlzIGlzIGFuIGludmFsaWQgZXRhZyB2YWx1ZSEhJworCisgIFJF
U1BPTlNFX0hFQURFUlMgPSBbKCdsYXN0LW1vZGlmaWVkJywgREFURV9QUkVTRU5UKSwgKCdldGFn
JywgRVRBR19WQUxJRCldCisgIFJFU1BPTlNFID0gY3JlYXRlX3Jlc3BvbnNlKFJFU1BPTlNFX0hF
QURFUlMpCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgIHNlbGYuYXJjaGl2ZSA9IGh0dHBhcmNo
aXZlLkh0dHBBcmNoaXZlKCkKKyAgICBzZWxmLmFyY2hpdmVbc2VsZi5SRVFVRVNUXSA9IHNlbGYu
UkVTUE9OU0UKKworICAgICMgQWxzbyBhZGQgYW4gaWRlbnRpY2FsIFBPU1QgcmVxdWVzdCBmb3Ig
dGVzdGluZworICAgIHJlcXVlc3QgPSBodHRwYXJjaGl2ZS5BcmNoaXZlZEh0dHBSZXF1ZXN0KAor
ICAgICAgICAnUE9TVCcsICd3d3cudGVzdC5jb20nLCAnLycsIE5vbmUsIHNlbGYuUkVRVUVTVF9I
RUFERVJTKQorICAgIHNlbGYuYXJjaGl2ZVtyZXF1ZXN0XSA9IHNlbGYuUkVTUE9OU0UKKworICBk
ZWYgdGVhckRvd24oc2VsZik6CisgICAgcGFzcworCisgIGRlZiB0ZXN0X2luaXQoc2VsZik6Cisg
ICAgYXJjaGl2ZSA9IGh0dHBhcmNoaXZlLkh0dHBBcmNoaXZlKCkKKyAgICBzZWxmLmFzc2VydEVx
dWFsKGxlbihhcmNoaXZlKSwgMCkKKworICBkZWYgdGVzdF9fVHJpbUhlYWRlcnMoc2VsZik6Cisg
ICAgcmVxdWVzdCA9IGh0dHBhcmNoaXZlLkFyY2hpdmVkSHR0cFJlcXVlc3QKKyAgICBoZWFkZXIx
ID0geydhY2NlcHQtZW5jb2RpbmcnOiAnZ3ppcCxkZWZsYXRlJ30KKyAgICBzZWxmLmFzc2VydEVx
dWFsKHJlcXVlc3QuX1RyaW1IZWFkZXJzKGhlYWRlcjEpLAorICAgICAgICAgICAgICAgICAgICAg
WyhrLCB2KSBmb3IgaywgdiBpbiBoZWFkZXIxLml0ZW1zKCldKQorCisgICAgaGVhZGVyMiA9IHsn
cmVmZXJlcic6ICd3d3cuZ29vZ2xlLmNvbSd9CisgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0
Ll9UcmltSGVhZGVycyhoZWFkZXIyKSwgW10pCisKKyAgICBoZWFkZXIzID0geydyZWZlcmVyJzog
J3d3dy5nb29nbGUuY29tJywgJ2Nvb2tpZSc6ICdjb29raWVfbW9uc3RlciEnLAorICAgICAgICAg
ICAgICAgJ2hlbGxvJzogJ3dvcmxkJ30KKyAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3QuX1Ry
aW1IZWFkZXJzKGhlYWRlcjMpLCBbKCdoZWxsbycsICd3b3JsZCcpXSkKKworICBkZWYgdGVzdF9t
YXRjaGVzKHNlbGYpOgorICAgIGhlYWRlcnMgPSB7fQorICAgIHJlcXVlc3QxID0gaHR0cGFyY2hp
dmUuQXJjaGl2ZWRIdHRwUmVxdWVzdCgKKyAgICAgICAgJ0dFVCcsICd3d3cudGVzdC5jb20nLCAn
L2luZGV4Lmh0bWw/aGVsbG89d29ybGQnLCBOb25lLCBoZWFkZXJzKQorICAgIHJlcXVlc3QyID0g
aHR0cGFyY2hpdmUuQXJjaGl2ZWRIdHRwUmVxdWVzdCgKKyAgICAgICAgJ0dFVCcsICd3d3cudGVz
dC5jb20nLCAnL2luZGV4Lmh0bWw/Zm9vPWJhcicsIE5vbmUsIGhlYWRlcnMpCisKKyAgICBzZWxm
LmFzc2VydF8obm90IHJlcXVlc3QxLm1hdGNoZXMoCisgICAgICAgIHJlcXVlc3QyLmNvbW1hbmQs
IHJlcXVlc3QyLmhvc3QsIHJlcXVlc3QyLnBhdGgsIHVzZV9xdWVyeT1UcnVlKSkKKyAgICBzZWxm
LmFzc2VydF8ocmVxdWVzdDEubWF0Y2hlcygKKyAgICAgICAgcmVxdWVzdDIuY29tbWFuZCwgcmVx
dWVzdDIuaG9zdCwgcmVxdWVzdDIucGF0aCwgdXNlX3F1ZXJ5PUZhbHNlKSkKKworICAgIHNlbGYu
YXNzZXJ0XyhyZXF1ZXN0MS5tYXRjaGVzKAorICAgICAgICByZXF1ZXN0Mi5jb21tYW5kLCByZXF1
ZXN0Mi5ob3N0LCBOb25lLCB1c2VfcXVlcnk9VHJ1ZSkpCisgICAgc2VsZi5hc3NlcnRfKHJlcXVl
c3QxLm1hdGNoZXMoCisgICAgICAgIHJlcXVlc3QyLmNvbW1hbmQsIE5vbmUsIHJlcXVlc3QyLnBh
dGgsIHVzZV9xdWVyeT1GYWxzZSkpCisKKyAgICBlbXB0eV9yZXF1ZXN0ID0gaHR0cGFyY2hpdmUu
QXJjaGl2ZWRIdHRwUmVxdWVzdCgKKyAgICAgICAgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgaGVh
ZGVycykKKyAgICBzZWxmLmFzc2VydF8obm90IGVtcHR5X3JlcXVlc3QubWF0Y2hlcygKKyAgICAg
ICAgcmVxdWVzdDIuY29tbWFuZCwgcmVxdWVzdDIuaG9zdCwgTm9uZSwgdXNlX3F1ZXJ5PVRydWUp
KQorICAgIHNlbGYuYXNzZXJ0Xyhub3QgZW1wdHlfcmVxdWVzdC5tYXRjaGVzKAorICAgICAgICBy
ZXF1ZXN0Mi5jb21tYW5kLCBOb25lLCByZXF1ZXN0Mi5wYXRoLCB1c2VfcXVlcnk9RmFsc2UpKQor
CisgIGRlZiBzZXR1cF9maW5kX2Nsb3Nlc3RfcmVxdWVzdChzZWxmKToKKyAgICBoZWFkZXJzID0g
e30KKyAgICByZXF1ZXN0MSA9IGh0dHBhcmNoaXZlLkFyY2hpdmVkSHR0cFJlcXVlc3QoCisgICAg
ICAgICdHRVQnLCAnd3d3LnRlc3QuY29tJywgJy9hP2hlbGxvPXdvcmxkJywgTm9uZSwgaGVhZGVy
cykKKyAgICByZXF1ZXN0MiA9IGh0dHBhcmNoaXZlLkFyY2hpdmVkSHR0cFJlcXVlc3QoCisgICAg
ICAgICdHRVQnLCAnd3d3LnRlc3QuY29tJywgJy9hP2Zvbz1iYXInLCBOb25lLCBoZWFkZXJzKQor
ICAgIHJlcXVlc3QzID0gaHR0cGFyY2hpdmUuQXJjaGl2ZWRIdHRwUmVxdWVzdCgKKyAgICAgICAg
J0dFVCcsICd3d3cudGVzdC5jb20nLCAnL2I/aGVsbG89d29ybGQnLCBOb25lLCBoZWFkZXJzKQor
CisgICAgYXJjaGl2ZSA9IGh0dHBhcmNoaXZlLkh0dHBBcmNoaXZlKCkKKyAgICAjIEFkZCByZXF1
ZXN0cyAyIGFuZCAzIGFuZCBmaW5kIGNsb3Nlc3QgbWF0Y2ggd2l0aCByZXF1ZXN0MQorICAgIGFy
Y2hpdmVbcmVxdWVzdDJdID0gc2VsZi5SRVNQT05TRQorICAgIGFyY2hpdmVbcmVxdWVzdDNdID0g
c2VsZi5SRVNQT05TRQorCisgICAgcmV0dXJuIGFyY2hpdmUsIHJlcXVlc3QxLCByZXF1ZXN0Miwg
cmVxdWVzdDMKKworICBkZWYgdGVzdF9maW5kX2Nsb3Nlc3RfcmVxdWVzdChzZWxmKToKKyAgICBh
cmNoaXZlLCByZXF1ZXN0MSwgcmVxdWVzdDIsIHJlcXVlc3QzID0gc2VsZi5zZXR1cF9maW5kX2Ns
b3Nlc3RfcmVxdWVzdCgpCisKKyAgICAjIFJlcXVlc3QgMyBpcyB0aGUgY2xvc2VzdCBtYXRjaCB0
byByZXF1ZXN0IDEKKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICByZXF1ZXN0MywgYXJj
aGl2ZS5maW5kX2Nsb3Nlc3RfcmVxdWVzdChyZXF1ZXN0MSwgdXNlX3BhdGg9RmFsc2UpKQorICAg
ICMgSG93ZXZlciwgaWYgd2UgbWF0Y2ggc3RyaWN0bHkgb24gcGF0aCwgcmVxdWVzdDIgaXMgdGhl
IG9ubHkgbWF0Y2gKKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICByZXF1ZXN0MiwgYXJj
aGl2ZS5maW5kX2Nsb3Nlc3RfcmVxdWVzdChyZXF1ZXN0MSwgdXNlX3BhdGg9VHJ1ZSkpCisKKyAg
ZGVmIHRlc3RfZmluZF9jbG9zZXN0X3JlcXVlc3RfZGVsZXRlX3NpbXBsZShzZWxmKToKKyAgICBh
cmNoaXZlLCByZXF1ZXN0MSwgcmVxdWVzdDIsIHJlcXVlc3QzID0gc2VsZi5zZXR1cF9maW5kX2Ns
b3Nlc3RfcmVxdWVzdCgpCisKKyAgICBkZWwgYXJjaGl2ZVtyZXF1ZXN0M10KKyAgICBzZWxmLmFz
c2VydEVxdWFsKAorICAgICAgICByZXF1ZXN0MiwgYXJjaGl2ZS5maW5kX2Nsb3Nlc3RfcmVxdWVz
dChyZXF1ZXN0MSwgdXNlX3BhdGg9RmFsc2UpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAg
ICAgIHJlcXVlc3QyLCBhcmNoaXZlLmZpbmRfY2xvc2VzdF9yZXF1ZXN0KHJlcXVlc3QxLCB1c2Vf
cGF0aD1UcnVlKSkKKworICBkZWYgdGVzdF9maW5kX2Nsb3Nlc3RfcmVxdWVzdF9kZWxldGVfY29t
cGxleChzZWxmKToKKyAgICBhcmNoaXZlLCByZXF1ZXN0MSwgcmVxdWVzdDIsIHJlcXVlc3QzID0g
c2VsZi5zZXR1cF9maW5kX2Nsb3Nlc3RfcmVxdWVzdCgpCisKKyAgICBkZWwgYXJjaGl2ZVtyZXF1
ZXN0Ml0KKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICByZXF1ZXN0MywgYXJjaGl2ZS5m
aW5kX2Nsb3Nlc3RfcmVxdWVzdChyZXF1ZXN0MSwgdXNlX3BhdGg9RmFsc2UpKQorICAgIHNlbGYu
YXNzZXJ0RXF1YWwoCisgICAgICAgIE5vbmUsIGFyY2hpdmUuZmluZF9jbG9zZXN0X3JlcXVlc3Qo
cmVxdWVzdDEsIHVzZV9wYXRoPVRydWUpKQorCisgIGRlZiB0ZXN0X2dldF9zaW1wbGUoc2VsZik6
CisgICAgcmVxdWVzdCA9IHNlbGYuUkVRVUVTVAorICAgIHJlc3BvbnNlID0gc2VsZi5SRVNQT05T
RQorICAgIGFyY2hpdmUgPSBzZWxmLmFyY2hpdmUKKworICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJj
aGl2ZS5nZXQocmVxdWVzdCksIHJlc3BvbnNlKQorCisgICAgZmFsc2VfcmVxdWVzdF9oZWFkZXJz
ID0geydmb28nOiAnYmFyJ30KKyAgICBmYWxzZV9yZXF1ZXN0ID0gY3JlYXRlX3JlcXVlc3QoZmFs
c2VfcmVxdWVzdF9oZWFkZXJzKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJjaGl2ZS5nZXQoZmFs
c2VfcmVxdWVzdCwgZGVmYXVsdD1Ob25lKSwgTm9uZSkKKworICBkZWYgdGVzdF9nZXRfbW9kaWZp
ZWRfaGVhZGVycyhzZWxmKToKKyAgICByZXF1ZXN0ID0gc2VsZi5SRVFVRVNUCisgICAgcmVzcG9u
c2UgPSBzZWxmLlJFU1BPTlNFCisgICAgYXJjaGl2ZSA9IHNlbGYuYXJjaGl2ZQorICAgIG5vdF9t
b2RpZmllZF9yZXNwb25zZSA9IGFyY2hpdmUuY3JlYXRlX3Jlc3BvbnNlKDMwNCkKKworICAgICMg
RmFpbCBjaGVjayBhbmQgcmV0dXJuIHJlc3BvbnNlIGFnYWluCisgICAgcmVxdWVzdF9oZWFkZXJz
ID0geydpZi1tb2RpZmllZC1zaW5jZSc6IHNlbGYuREFURV9QQVNUfQorICAgIHJlcXVlc3QgPSBj
cmVhdGVfcmVxdWVzdChyZXF1ZXN0X2hlYWRlcnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChhcmNo
aXZlLmdldChyZXF1ZXN0KSwgcmVzcG9uc2UpCisKKyAgICAjIFN1Y2NlZWQgY2hlY2sgYW5kIHJl
dHVybiAzMDQgTm90IE1vZGlmaWVkCisgICAgcmVxdWVzdF9oZWFkZXJzID0geydpZi1tb2RpZmll
ZC1zaW5jZSc6IHNlbGYuREFURV9GVVRVUkV9CisgICAgcmVxdWVzdCA9IGNyZWF0ZV9yZXF1ZXN0
KHJlcXVlc3RfaGVhZGVycykKKyAgICBzZWxmLmFzc2VydEVxdWFsKGFyY2hpdmUuZ2V0KHJlcXVl
c3QpLCBub3RfbW9kaWZpZWRfcmVzcG9uc2UpCisKKyAgICAjIFN1Y2NlZWQgY2hlY2sgYW5kIHJl
dHVybiAzMDQgTm90IE1vZGlmaWVkCisgICAgcmVxdWVzdF9oZWFkZXJzID0geydpZi1tb2RpZmll
ZC1zaW5jZSc6IHNlbGYuREFURV9QUkVTRU5UfQorICAgIHJlcXVlc3QgPSBjcmVhdGVfcmVxdWVz
dChyZXF1ZXN0X2hlYWRlcnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChhcmNoaXZlLmdldChyZXF1
ZXN0KSwgbm90X21vZGlmaWVkX3Jlc3BvbnNlKQorCisgICAgIyBJbnZhbGlkIGRhdGUsIGZhaWwg
Y2hlY2sgYW5kIHJldHVybiByZXNwb25zZSBhZ2FpbgorICAgIHJlcXVlc3RfaGVhZGVycyA9IHsn
aWYtbW9kaWZpZWQtc2luY2UnOiBzZWxmLkRBVEVfSU5WQUxJRH0KKyAgICByZXF1ZXN0ID0gY3Jl
YXRlX3JlcXVlc3QocmVxdWVzdF9oZWFkZXJzKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJjaGl2
ZS5nZXQocmVxdWVzdCksIHJlc3BvbnNlKQorCisgICAgIyBmYWlsIGNoZWNrIHNpbmNlIHRoZSBy
ZXF1ZXN0IGlzIG5vdCBhIEdFVCBvciBIRUFEIHJlcXVlc3QgKGFzIHBlciBSRkMpCisgICAgcmVx
dWVzdF9oZWFkZXJzID0geydpZi1tb2RpZmllZC1zaW5jZSc6IHNlbGYuREFURV9GVVRVUkV9Cisg
ICAgcmVxdWVzdCA9IGh0dHBhcmNoaXZlLkFyY2hpdmVkSHR0cFJlcXVlc3QoCisgICAgICAgICdQ
T1NUJywgJ3d3dy50ZXN0LmNvbScsICcvJywgTm9uZSwgcmVxdWVzdF9oZWFkZXJzKQorICAgIHNl
bGYuYXNzZXJ0RXF1YWwoYXJjaGl2ZS5nZXQocmVxdWVzdCksIHJlc3BvbnNlKQorCisgIGRlZiB0
ZXN0X2dldF91bm1vZGlmaWVkX2hlYWRlcnMoc2VsZik6CisgICAgcmVxdWVzdCA9IHNlbGYuUkVR
VUVTVAorICAgIHJlc3BvbnNlID0gc2VsZi5SRVNQT05TRQorICAgIGFyY2hpdmUgPSBzZWxmLmFy
Y2hpdmUKKyAgICBub3RfbW9kaWZpZWRfcmVzcG9uc2UgPSBhcmNoaXZlLmNyZWF0ZV9yZXNwb25z
ZSgzMDQpCisKKyAgICAjIFN1Y2NlZWQgY2hlY2sKKyAgICByZXF1ZXN0X2hlYWRlcnMgPSB7J2lm
LXVubW9kaWZpZWQtc2luY2UnOiBzZWxmLkRBVEVfUEFTVH0KKyAgICByZXF1ZXN0ID0gY3JlYXRl
X3JlcXVlc3QocmVxdWVzdF9oZWFkZXJzKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJjaGl2ZS5n
ZXQocmVxdWVzdCksIG5vdF9tb2RpZmllZF9yZXNwb25zZSkKKworICAgICMgRmFpbCBjaGVjawor
ICAgIHJlcXVlc3RfaGVhZGVycyA9IHsnaWYtdW5tb2RpZmllZC1zaW5jZSc6IHNlbGYuREFURV9G
VVRVUkV9CisgICAgcmVxdWVzdCA9IGNyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfaGVhZGVycykKKyAg
ICBzZWxmLmFzc2VydEVxdWFsKGFyY2hpdmUuZ2V0KHJlcXVlc3QpLCByZXNwb25zZSkKKworICAg
ICMgU3VjY2VlZCBjaGVjaworICAgIHJlcXVlc3RfaGVhZGVycyA9IHsnaWYtdW5tb2RpZmllZC1z
aW5jZSc6IHNlbGYuREFURV9QUkVTRU5UfQorICAgIHJlcXVlc3QgPSBjcmVhdGVfcmVxdWVzdChy
ZXF1ZXN0X2hlYWRlcnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChhcmNoaXZlLmdldChyZXF1ZXN0
KSwgbm90X21vZGlmaWVkX3Jlc3BvbnNlKQorCisgICAgIyBGYWlsIGNoZWNrCisgICAgcmVxdWVz
dF9oZWFkZXJzID0geydpZi11bm1vZGlmaWVkLXNpbmNlJzogc2VsZi5EQVRFX0lOVkFMSUR9Cisg
ICAgcmVxdWVzdCA9IGNyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfaGVhZGVycykKKyAgICBzZWxmLmFz
c2VydEVxdWFsKGFyY2hpdmUuZ2V0KHJlcXVlc3QpLCByZXNwb25zZSkKKworICAgICMgRmFpbCBj
aGVjayBzaW5jZSB0aGUgcmVxdWVzdCBpcyBub3QgYSBHRVQgb3IgSEVBRCByZXF1ZXN0IChhcyBw
ZXIgUkZDKQorICAgIHJlcXVlc3RfaGVhZGVycyA9IHsnaWYtbW9kaWZpZWQtc2luY2UnOiBzZWxm
LkRBVEVfUEFTVH0KKyAgICByZXF1ZXN0ID0gaHR0cGFyY2hpdmUuQXJjaGl2ZWRIdHRwUmVxdWVz
dCgKKyAgICAgICAgJ1BPU1QnLCAnd3d3LnRlc3QuY29tJywgJy8nLCBOb25lLCByZXF1ZXN0X2hl
YWRlcnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChhcmNoaXZlLmdldChyZXF1ZXN0KSwgcmVzcG9u
c2UpCisKKyAgZGVmIHRlc3RfZ2V0X2V0YWdzKHNlbGYpOgorICAgIHJlcXVlc3QgPSBzZWxmLlJF
UVVFU1QKKyAgICByZXNwb25zZSA9IHNlbGYuUkVTUE9OU0UKKyAgICBhcmNoaXZlID0gc2VsZi5h
cmNoaXZlCisgICAgbm90X21vZGlmaWVkX3Jlc3BvbnNlID0gYXJjaGl2ZS5jcmVhdGVfcmVzcG9u
c2UoMzA0KQorICAgIHByZWNvbmRpdGlvbl9mYWlsZWRfcmVzcG9uc2UgPSBhcmNoaXZlLmNyZWF0
ZV9yZXNwb25zZSg0MTIpCisKKyAgICAjIGlmLW1hdGNoIGhlYWRlcnMKKyAgICByZXF1ZXN0X2hl
YWRlcnMgPSB7J2lmLW1hdGNoJzogc2VsZi5FVEFHX1ZBTElEfQorICAgIHJlcXVlc3QgPSBjcmVh
dGVfcmVxdWVzdChyZXF1ZXN0X2hlYWRlcnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChhcmNoaXZl
LmdldChyZXF1ZXN0KSwgcmVzcG9uc2UpCisKKyAgICByZXF1ZXN0X2hlYWRlcnMgPSB7J2lmLW1h
dGNoJzogc2VsZi5FVEFHX0lOVkFMSUR9CisgICAgcmVxdWVzdCA9IGNyZWF0ZV9yZXF1ZXN0KHJl
cXVlc3RfaGVhZGVycykKKyAgICBzZWxmLmFzc2VydEVxdWFsKGFyY2hpdmUuZ2V0KHJlcXVlc3Qp
LCBwcmVjb25kaXRpb25fZmFpbGVkX3Jlc3BvbnNlKQorCisgICAgIyBpZi1ub25lLW1hdGNoIGhl
YWRlcnMKKyAgICByZXF1ZXN0X2hlYWRlcnMgPSB7J2lmLW5vbmUtbWF0Y2gnOiBzZWxmLkVUQUdf
VkFMSUR9CisgICAgcmVxdWVzdCA9IGNyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfaGVhZGVycykKKyAg
ICBzZWxmLmFzc2VydEVxdWFsKGFyY2hpdmUuZ2V0KHJlcXVlc3QpLCBub3RfbW9kaWZpZWRfcmVz
cG9uc2UpCisKKyAgICByZXF1ZXN0X2hlYWRlcnMgPSB7J2lmLW5vbmUtbWF0Y2gnOiBzZWxmLkVU
QUdfSU5WQUxJRH0KKyAgICByZXF1ZXN0ID0gY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9oZWFkZXJz
KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJjaGl2ZS5nZXQocmVxdWVzdCksIHJlc3BvbnNlKQor
CisgIGRlZiB0ZXN0X2dldF9tdWx0aXBsZV9tYXRjaF9oZWFkZXJzKHNlbGYpOgorICAgIHJlcXVl
c3QgPSBzZWxmLlJFUVVFU1QKKyAgICByZXNwb25zZSA9IHNlbGYuUkVTUE9OU0UKKyAgICBhcmNo
aXZlID0gc2VsZi5hcmNoaXZlCisgICAgbm90X21vZGlmaWVkX3Jlc3BvbnNlID0gYXJjaGl2ZS5j
cmVhdGVfcmVzcG9uc2UoMzA0KQorICAgIHByZWNvbmRpdGlvbl9mYWlsZWRfcmVzcG9uc2UgPSBh
cmNoaXZlLmNyZWF0ZV9yZXNwb25zZSg0MTIpCisKKyAgICAjIGlmLW1hdGNoIGhlYWRlcnMKKyAg
ICAjIElmIHRoZSByZXF1ZXN0IHdvdWxkLCB3aXRob3V0IHRoZSBJZi1NYXRjaCBoZWFkZXIgZmll
bGQsIAorICAgICMgcmVzdWx0IGluIGFueXRoaW5nIG90aGVyIHRoYW4gYSAyeHggb3IgNDEyIHN0
YXR1cywgCisgICAgIyB0aGVuIHRoZSBJZi1NYXRjaCBoZWFkZXIgTVVTVCBiZSBpZ25vcmVkLgor
CisgICAgcmVxdWVzdF9oZWFkZXJzID0geworICAgICAgICAnaWYtbWF0Y2gnOiBzZWxmLkVUQUdf
VkFMSUQsCisgICAgICAgICdpZi1tb2RpZmllZC1zaW5jZSc6IHNlbGYuREFURV9QQVNULAorICAg
IH0KKyAgICByZXF1ZXN0ID0gY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9oZWFkZXJzKQorICAgIHNl
bGYuYXNzZXJ0RXF1YWwoYXJjaGl2ZS5nZXQocmVxdWVzdCksIHJlc3BvbnNlKQorCisgICAgIyBJ
bnZhbGlkIGV0YWcsIHByZWNvbmRpdGlvbiBmYWlsZWQKKyAgICByZXF1ZXN0X2hlYWRlcnMgPSB7
CisgICAgICAgICdpZi1tYXRjaCc6IHNlbGYuRVRBR19JTlZBTElELAorICAgICAgICAnaWYtbW9k
aWZpZWQtc2luY2UnOiBzZWxmLkRBVEVfUEFTVCwKKyAgICB9CisgICAgcmVxdWVzdCA9IGNyZWF0
ZV9yZXF1ZXN0KHJlcXVlc3RfaGVhZGVycykKKyAgICBzZWxmLmFzc2VydEVxdWFsKGFyY2hpdmUu
Z2V0KHJlcXVlc3QpLCBwcmVjb25kaXRpb25fZmFpbGVkX3Jlc3BvbnNlKQorCisgICAgIyAzMDQg
cmVzcG9uc2U7IGlnbm9yZSBpZi1tYXRjaCBoZWFkZXIKKyAgICByZXF1ZXN0X2hlYWRlcnMgPSB7
CisgICAgICAgICdpZi1tYXRjaCc6IHNlbGYuRVRBR19WQUxJRCwKKyAgICAgICAgJ2lmLW1vZGlm
aWVkLXNpbmNlJzogc2VsZi5EQVRFX0ZVVFVSRSwKKyAgICB9CisgICAgcmVxdWVzdCA9IGNyZWF0
ZV9yZXF1ZXN0KHJlcXVlc3RfaGVhZGVycykKKyAgICBzZWxmLmFzc2VydEVxdWFsKGFyY2hpdmUu
Z2V0KHJlcXVlc3QpLCBub3RfbW9kaWZpZWRfcmVzcG9uc2UpCisKKyAgICAjIDMwNCByZXNwb25z
ZTsgaWdub3JlIGlmLW1hdGNoIGhlYWRlcgorICAgIHJlcXVlc3RfaGVhZGVycyA9IHsKKyAgICAg
ICAgJ2lmLW1hdGNoJzogc2VsZi5FVEFHX0lOVkFMSUQsCisgICAgICAgICdpZi1tb2RpZmllZC1z
aW5jZSc6IHNlbGYuREFURV9QUkVTRU5ULAorICAgIH0KKyAgICByZXF1ZXN0ID0gY3JlYXRlX3Jl
cXVlc3QocmVxdWVzdF9oZWFkZXJzKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJjaGl2ZS5nZXQo
cmVxdWVzdCksIG5vdF9tb2RpZmllZF9yZXNwb25zZSkKKworICAgICMgSW52YWxpZCBldGFnLCBw
cmVjb25kaXRpb24gZmFpbGVkCisgICAgcmVxdWVzdF9oZWFkZXJzID0geworICAgICAgICAnaWYt
bWF0Y2gnOiBzZWxmLkVUQUdfSU5WQUxJRCwKKyAgICAgICAgJ2lmLW1vZGlmaWVkLXNpbmNlJzog
c2VsZi5EQVRFX0lOVkFMSUQsCisgICAgfQorICAgIHJlcXVlc3QgPSBjcmVhdGVfcmVxdWVzdChy
ZXF1ZXN0X2hlYWRlcnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChhcmNoaXZlLmdldChyZXF1ZXN0
KSwgcHJlY29uZGl0aW9uX2ZhaWxlZF9yZXNwb25zZSkKKworICBkZWYgdGVzdF9nZXRfbXVsdGlw
bGVfbm9uZV9tYXRjaF9oZWFkZXJzKHNlbGYpOgorICAgIHJlcXVlc3QgPSBzZWxmLlJFUVVFU1QK
KyAgICByZXNwb25zZSA9IHNlbGYuUkVTUE9OU0UKKyAgICBhcmNoaXZlID0gc2VsZi5hcmNoaXZl
CisgICAgbm90X21vZGlmaWVkX3Jlc3BvbnNlID0gYXJjaGl2ZS5jcmVhdGVfcmVzcG9uc2UoMzA0
KQorICAgIHByZWNvbmRpdGlvbl9mYWlsZWRfcmVzcG9uc2UgPSBhcmNoaXZlLmNyZWF0ZV9yZXNw
b25zZSg0MTIpCisKKyAgICAjIGlmLW5vbmUtbWF0Y2ggaGVhZGVycworICAgICMgSWYgdGhlIHJl
cXVlc3Qgd291bGQsIHdpdGhvdXQgdGhlIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGZpZWxkLCAKKyAg
ICAjIHJlc3VsdCBpbiBhbnl0aGluZyBvdGhlciB0aGFuIGEgMnh4IG9yIDMwNCBzdGF0dXMsIAor
ICAgICMgdGhlbiB0aGUgSWYtTm9uZS1NYXRjaCBoZWFkZXIgTVVTVCBiZSBpZ25vcmVkLgorCisg
ICAgcmVxdWVzdF9oZWFkZXJzID0geworICAgICAgICAnaWYtbm9uZS1tYXRjaCc6IHNlbGYuRVRB
R19WQUxJRCwKKyAgICAgICAgJ2lmLW1vZGlmaWVkLXNpbmNlJzogc2VsZi5EQVRFX1BBU1QsCisg
ICAgfQorICAgIHJlcXVlc3QgPSBjcmVhdGVfcmVxdWVzdChyZXF1ZXN0X2hlYWRlcnMpCisgICAg
c2VsZi5hc3NlcnRFcXVhbChhcmNoaXZlLmdldChyZXF1ZXN0KSwgcmVzcG9uc2UpCisKKyAgICBy
ZXF1ZXN0X2hlYWRlcnMgPSB7CisgICAgICAgICdpZi1ub25lLW1hdGNoJzogc2VsZi5FVEFHX0lO
VkFMSUQsCisgICAgICAgICdpZi1tb2RpZmllZC1zaW5jZSc6IHNlbGYuREFURV9QQVNULAorICAg
IH0KKyAgICByZXF1ZXN0ID0gY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9oZWFkZXJzKQorICAgIHNl
bGYuYXNzZXJ0RXF1YWwoYXJjaGl2ZS5nZXQocmVxdWVzdCksIHJlc3BvbnNlKQorCisgICAgIyBl
dGFnIG1hdGNoLCBwcmVjb25kaXRpb24gZmFpbGVkCisgICAgcmVxdWVzdF9oZWFkZXJzID0gewor
ICAgICAgICAnaWYtbm9uZS1tYXRjaCc6IHNlbGYuRVRBR19WQUxJRCwKKyAgICAgICAgJ2lmLW1v
ZGlmaWVkLXNpbmNlJzogc2VsZi5EQVRFX0ZVVFVSRSwKKyAgICB9CisgICAgcmVxdWVzdCA9IGNy
ZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfaGVhZGVycykKKyAgICBzZWxmLmFzc2VydEVxdWFsKGFyY2hp
dmUuZ2V0KHJlcXVlc3QpLCBub3RfbW9kaWZpZWRfcmVzcG9uc2UpCisKKyAgICByZXF1ZXN0X2hl
YWRlcnMgPSB7CisgICAgICAgICdpZi1ub25lLW1hdGNoJzogc2VsZi5FVEFHX0lOVkFMSUQsCisg
ICAgICAgICdpZi1tb2RpZmllZC1zaW5jZSc6IHNlbGYuREFURV9QUkVTRU5ULAorICAgIH0KKyAg
ICByZXF1ZXN0ID0gY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9oZWFkZXJzKQorICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoYXJjaGl2ZS5nZXQocmVxdWVzdCksIG5vdF9tb2RpZmllZF9yZXNwb25zZSkKKwor
ICAgIHJlcXVlc3RfaGVhZGVycyA9IHsKKyAgICAgICAgJ2lmLW5vbmUtbWF0Y2gnOiBzZWxmLkVU
QUdfSU5WQUxJRCwKKyAgICAgICAgJ2lmLW1vZGlmaWVkLXNpbmNlJzogc2VsZi5EQVRFX0lOVkFM
SUQsCisgICAgfQorICAgIHJlcXVlc3QgPSBjcmVhdGVfcmVxdWVzdChyZXF1ZXN0X2hlYWRlcnMp
CisgICAgc2VsZi5hc3NlcnRFcXVhbChhcmNoaXZlLmdldChyZXF1ZXN0KSwgcmVzcG9uc2UpCisK
KworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgdW5pdHRlc3QubWFpbigpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBUb29scy9XZWJQYWdlUmVwbGF5L2h0dHBhcmNoaXZlX3Rlc3QucHkKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogVG9vbHMvV2ViUGFn
ZVJlcGxheS9odHRwY2xpZW50LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkv
aHR0cGNsaWVudC5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvaHR0cGNs
aWVudC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNzUgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
IworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T
RS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp
cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMg
U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
c3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIiIiUmV0cmll
dmUgd2ViIHJlc291cmNlcyBvdmVyIGh0dHAuIiIiCisKK2ltcG9ydCBjb3B5CitpbXBvcnQgaHR0
cGFyY2hpdmUKK2ltcG9ydCBodHRwbGliCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBv
cnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKKyMgZnJvbSB0aW1laXQucHkKK2lmIHN5
cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAjIE9uIFdpbmRvd3MsIHRoZSBiZXN0IHRpbWVyIGlz
IHRpbWUuY2xvY2soKQorICBERUZBVUxUX1RJTUVSID0gdGltZS5jbG9jaworZWxzZToKKyAgIyBP
biBtb3N0IG90aGVyIHBsYXRmb3JtcyB0aGUgYmVzdCB0aW1lciBpcyB0aW1lLnRpbWUoKQorICBE
RUZBVUxUX1RJTUVSID0gdGltZS50aW1lCisKKworSFRNTF9SRSA9IHJlLmNvbXBpbGUocic8aHRt
bFtePl0qPicsIHJlLklHTk9SRUNBU0UpCitIRUFEX1JFID0gcmUuY29tcGlsZShyJzxoZWFkW14+
XSo+JywgcmUuSUdOT1JFQ0FTRSkKKworCitkZWYgR2V0SW5qZWN0U2NyaXB0KHNjcmlwdHMpOgor
ICAiIiJMb2FkcyB8c2NyaXB0fCBmcm9tIGRpc2sgYW5kIHJldHVybnMgYSBzdHJpbmcgb2YgdGhl
aXIgY29udGVudC4iIiIKKyAgbGluZXMgPSBbXQorICBmb3Igc2NyaXB0IGluIHNjcmlwdHM6Cisg
ICAgaWYgbm90IG9zLnBhdGguaXNhYnMoc2NyaXB0KToKKyAgICAgIHNjcmlwdCA9IG9zLnBhdGgu
am9pbihzeXMucGF0aFswXSwgc2NyaXB0KQorICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhzY3Jp
cHQpCisgICAgbGluZXMgKz0gb3BlbihzY3JpcHQpLnJlYWRsaW5lcygpCisgIHJldHVybiAnJy5q
b2luKGxpbmVzKQorCisKK2RlZiBfSW5qZWN0U2NyaXB0cyhyZXNwb25zZSwgaW5qZWN0X3Njcmlw
dCk6CisgICIiIkluamVjdHMgfGluamVjdF9zY3JpcHR8IGltbWVkaWF0ZWx5IGFmdGVyIDxoZWFk
PiBvciA8aHRtbD4uIiIiCisgIGNvbnRlbnRfdHlwZSA9IHJlc3BvbnNlLmdldF9oZWFkZXIoJ2Nv
bnRlbnQtdHlwZScpCisgIGlmIG5vdCBjb250ZW50X3R5cGUgb3Igbm90IGNvbnRlbnRfdHlwZS5z
dGFydHN3aXRoKCd0ZXh0L2h0bWwnKToKKyAgICByZXR1cm4KKyAgdGV4dCA9IHJlc3BvbnNlLmdl
dF9kYXRhX2FzX3RleHQoKQorCisgIGRlZiBJbnNlcnRTY3JpcHRBZnRlcihtYXRjaG9iaik6Cisg
ICAgcmV0dXJuICclczxzY3JpcHQ+JXM8L3NjcmlwdD4nICUgKG1hdGNob2JqLmdyb3VwKDApLCBp
bmplY3Rfc2NyaXB0KQorCisgIGlmIHRleHQgYW5kIG5vdCBpbmplY3Rfc2NyaXB0IGluIHRleHQ6
CisgICAgdGV4dCwgaXNfaW5qZWN0ZWQgPSBIRUFEX1JFLnN1Ym4oSW5zZXJ0U2NyaXB0QWZ0ZXIs
IHRleHQsIDEpCisgICAgaWYgbm90IGlzX2luamVjdGVkOgorICAgICAgdGV4dCwgaXNfaW5qZWN0
ZWQgPSBIVE1MX1JFLnN1Ym4oSW5zZXJ0U2NyaXB0QWZ0ZXIsIHRleHQsIDEpCisgICAgICBpZiBu
b3QgaXNfaW5qZWN0ZWQ6CisgICAgICAgIGxvZ2dpbmcud2FybmluZygnRmFpbGVkIHRvIGluamVj
dCBzY3JpcHRzLicpCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ1Jlc3BvbnNlIGNvbnRlbnQ6ICVz
JywgdGV4dCkKKyAgICAgICAgcmV0dXJuCisgICAgcmVzcG9uc2Uuc2V0X2RhdGEodGV4dCkKKwor
CitjbGFzcyBEZXRhaWxlZEhUVFBSZXNwb25zZShodHRwbGliLkhUVFBSZXNwb25zZSk6CisgICIi
IlByZXNlcnZlIGRldGFpbHMgcmVsZXZhbnQgdG8gcmVwbGF5aW5nIHJlc3BvbnNlcy4KKworICBX
QVJOSU5HOiBUaGlzIGNvZGUgdXNlcyBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzIG9mIEhUVFBSZXNw
b25zZQorICB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4KKyAgIiIi
CisKKyAgZGVmIHJlYWRfY2h1bmtzKHNlbGYpOgorICAgICIiIlJldHVybiBhIHR1cGxlIGNvbnRh
aW5pbmcgdHdvIGFycmF5cyBvZiBkYXRhLgorCisgICAgVGhlIGZpcnN0X2FycmF5IGlzIHRoZSBy
ZXNwb25zZSBib2R5LgorICAgIFRoZSBzZWNvbmRfYXJyYXkgaXMgdGhlIHNlcnZlciByZXNwb25z
ZSB0aW1lIGZvciBlYWNoIGNodW5rIGluIG1pbGxpc2Vjb25kcy4KKworICAgIFRoZSByZXR1cm5l
ZCBjaHVua2VkIGhhdmUgdGhlIGNodW5rIHNpemUgYW5kIENSTEZzIHN0cmlwcGVkIG9mZi4KKyAg
ICBJZiB0aGUgcmVzcG9uc2Ugd2FzIGNvbXByZXNzZWQsIHRoZSByZXR1cm5lZCBkYXRhIGlzIHN0
aWxsIGNvbXByZXNzZWQuCisKKyAgICBSZXR1cm5zOgorICAgICAgKHJlc3BvbnNlX2xpc3QsIHJl
c3BvbnNlX2RlbGF5X2xpc3QpCisgICAgcmVzcG9uc2VfbGlzdDoKKyAgICAgIFtyZXNwb25zZV9i
b2R5XSAgIyBub24tY2h1bmtlZCByZXNwb25zZXMKKyAgICAgIFtyZXNwb25zZV9ib2R5X2NodW5r
XzEsIHJlc3BvbnNlX2JvZHlfY2h1bmtfMiwgLi4uXSAgIyBjaHVua2VkIHJlc3BvbnNlcworICAg
IHJlc3BvbnNlX2RlbGF5X2xpc3Q6CisgICAgICBbXSAgIyBub24tY2h1bmtlZCByZXNwb25zZXMK
KyAgICAgIFtyZXNwb25zZV9kZWxheV9ib2R5X2NodW5rXzIsIC4uLl0gICMgY2h1bmtlZCByZXNw
b25zZXMKKyAgICAgICMgVGhlIGRlbGF5IGZvciB0aGUgZmlyc3QgY2h1bmsgYW5kIG5vbi1jaHVu
a2VkIHJlc3BvbnNlcyBzaG91bGQgYmUKKyAgICAgICMgcmVjb3JkZWQgd2hlbiB0aGUgZmlyc3Qg
Ynl0ZSBvZiB0aGUgSFRUUCByZXNwb25zZSBoZWFkZXIgYXJyaXZlcy4KKyAgICAgICMgVGhlcmVm
b3JlLCBpdCBpcyBvdXQgb2YgdGhlIHNjb3BlIG9mIHRoaXMgbWV0aG9kLgorICAgICIiIgorICAg
IGJ1ZiA9IFtdCisgICAgcmVzcG9uc2VfdGltZXMgPSBbREVGQVVMVF9USU1FUigpXQorICAgIGlm
IG5vdCBzZWxmLmNodW5rZWQ6CisgICAgICBjaHVua3MgPSBbc2VsZi5yZWFkKCldCisgICAgZWxz
ZToKKyAgICAgIHRyeToKKyAgICAgICAgY2h1bmtzID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToK
KyAgICAgICAgICBsaW5lID0gc2VsZi5mcC5yZWFkbGluZSgpCisgICAgICAgICAgY2h1bmtfc2l6
ZSA9IHNlbGYuX3JlYWRfY2h1bmtfc2l6ZShsaW5lKQorICAgICAgICAgIHJlc3BvbnNlX3RpbWVz
LmFwcGVuZChERUZBVUxUX1RJTUVSKCkpCisgICAgICAgICAgaWYgY2h1bmtfc2l6ZSBpcyBOb25l
OgorICAgICAgICAgICAgcmFpc2UgaHR0cGxpYi5JbmNvbXBsZXRlUmVhZCgnJy5qb2luKGNodW5r
cykpCisgICAgICAgICAgaWYgY2h1bmtfc2l6ZSA9PSAwOgorICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgICBjaHVua3MuYXBwZW5kKHNlbGYuX3NhZmVfcmVhZChjaHVua19zaXplKSkKKyAgICAg
ICAgICBzZWxmLl9zYWZlX3JlYWQoMikgICMgc2tpcCB0aGUgQ1JMRiBhdCB0aGUgZW5kIG9mIHRo
ZSBjaHVuaworCisgICAgICAgICMgSWdub3JlIGFueSB0cmFpbGVycy4KKyAgICAgICAgd2hpbGUg
VHJ1ZToKKyAgICAgICAgICBsaW5lID0gc2VsZi5mcC5yZWFkbGluZSgpCisgICAgICAgICAgaWYg
bm90IGxpbmUgb3IgbGluZSA9PSAnXHJcbic6CisgICAgICAgICAgICBicmVhaworICAgICAgZmlu
YWxseToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgcmVzcG9uc2VfZGVsYXlzID0gWyhyZXNw
b25zZV90aW1lc1tpXSAtIHJlc3BvbnNlX3RpbWVzW2ktMV0pICogMTAwMC4wCisgICAgICAgICAg
ICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgyLCBsZW4ocmVzcG9uc2VfdGltZXMpKV0KKyAg
ICByZXR1cm4gY2h1bmtzLCByZXNwb25zZV9kZWxheXMKKworICBAY2xhc3NtZXRob2QKKyAgZGVm
IF9yZWFkX2NodW5rX3NpemUoY2xzLCBsaW5lKToKKyAgICBjaHVua19leHRlbnNpb25zX3BvcyA9
IGxpbmUuZmluZCgnOycpCisgICAgaWYgY2h1bmtfZXh0ZW5zaW9uc19wb3MgIT0gLTE6CisgICAg
ICBsaW5lID0gbGluZVs6ZXh0ZW50aW9uX3Bvc10gICMgc3RyaXAgY2h1bmstZXh0ZW5zaW9ucwor
ICAgIHRyeToKKyAgICAgIGNodW5rX3NpemUgPSBpbnQobGluZSwgMTYpCisgICAgZXhjZXB0IFZh
bHVlRXJyb3I6CisgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiBjaHVua19zaXplCisKKwor
Y2xhc3MgRGV0YWlsZWRIVFRQQ29ubmVjdGlvbihodHRwbGliLkhUVFBDb25uZWN0aW9uKToKKyAg
IiIiUHJlc2VydmUgZGV0YWlscyByZWxldmFudCB0byByZXBsYXlpbmcgY29ubmVjdGlvbnMuIiIi
CisgIHJlc3BvbnNlX2NsYXNzID0gRGV0YWlsZWRIVFRQUmVzcG9uc2UKKworCitjbGFzcyBEZXRh
aWxlZEhUVFBTUmVzcG9uc2UoRGV0YWlsZWRIVFRQUmVzcG9uc2UpOgorICAiIiJQcmVzZXJ2ZSBk
ZXRhaWxzIHJlbGV2YW50IHRvIHJlcGxheWluZyBTU0wgcmVzcG9uc2VzLiIiIgorICBwYXNzCisK
K2NsYXNzIERldGFpbGVkSFRUUFNDb25uZWN0aW9uKGh0dHBsaWIuSFRUUFNDb25uZWN0aW9uKToK
KyAgIiIiUHJlc2VydmUgZGV0YWlscyByZWxldmFudCB0byByZXBsYXlpbmcgU1NMIGNvbm5lY3Rp
b25zLiIiIgorICByZXNwb25zZV9jbGFzcyA9IERldGFpbGVkSFRUUFNSZXNwb25zZQorCisKK2Ns
YXNzIFJlYWxIdHRwRmV0Y2gob2JqZWN0KToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIHJlYWxfZG5z
X2xvb2t1cCk6CisgICAgc2VsZi5fcmVhbF9kbnNfbG9va3VwID0gcmVhbF9kbnNfbG9va3VwCisK
KyAgZGVmIF9fY2FsbF9fKHNlbGYsIHJlcXVlc3QpOgorICAgICIiIkZldGNoIGFuIEhUVFAgcmVx
dWVzdCBhbmQgcmV0dXJuIHRoZSByZXNwb25zZSwgcmVzcG9uc2VfYm9keSBhbmQKKyAgICByZXNw
b25zZV9kZWxheXMuCisKKyAgICBBcmdzOgorICAgICAgcmVxdWVzdDogYW4gaW5zdGFuY2Ugb2Yg
YW4gQXJjaGl2ZWRIdHRwUmVxdWVzdAorICAgIFJldHVybnM6CisgICAgICAoaW5zdGFuY2Ugb2Yg
aHR0cGxpYi5IVFRQUmVzcG9uc2UsCisgICAgICAgW3Jlc3BvbnNlX2JvZHlfY2h1bmtfMSwgcmVz
cG9uc2VfYm9keV9jaHVua18yLCAuLi5dLAorICAgICAgIFtyZXNwb25zZV9kZWxheV9ib2R5X2No
dW5rXzEsIHJlc3BvbnNlX2RlbGF5X2JvZHlfY2h1bmtfMiwgLi4uXSkKKyAgICAgICMgSWYgdGhl
IHJlc3BvbnNlIGRpZCBub3QgdXNlIGNodW5rZWQgZW5jb2RpbmcsIHRoZXJlIGlzIG9ubHkgb25l
IGNodW5rLgorICAgICAgIyByZXNwb25zZV9kZWxheSBpcyB0aGUgdGltZSB0YWtlbiAoaW4gbWls
bGlzZWNvbmRzKSB0byByZWNlaXZlIHRoZSBmaXJzdAorICAgICAgIyBieXRlIGZvciBlYWNoIGNo
dW5rLiBUaGlzIHRpbWUgaW5jbHVkZXMgdGhlIG5ldHdvcmsgUlRUIHRpbWUuCisgICAgIiIiCisg
ICAgbG9nZ2luZy5kZWJ1ZygnUmVhbEh0dHBSZXF1ZXN0OiAlcyAlcycsIHJlcXVlc3QuaG9zdCwg
cmVxdWVzdC5wYXRoKQorICAgIGhvc3RfaXAgPSBzZWxmLl9yZWFsX2Ruc19sb29rdXAocmVxdWVz
dC5ob3N0KQorICAgIGlmIG5vdCBob3N0X2lwOgorICAgICAgbG9nZ2luZy5jcml0aWNhbCgnVW5h
YmxlIHRvIGZpbmQgaG9zdCBpcCBmb3IgbmFtZTogJXMnLCByZXF1ZXN0Lmhvc3QpCisgICAgICBy
ZXR1cm4gTm9uZSwgTm9uZSwgTm9uZQorICAgIHJldHJpZXMgPSAzCisgICAgd2hpbGUgVHJ1ZToK
KyAgICAgIHRyeToKKyAgICAgICAgaWYgcmVxdWVzdC5pc19zc2w6CisgICAgICAgICAgY29ubmVj
dGlvbiA9IERldGFpbGVkSFRUUFNDb25uZWN0aW9uKGhvc3RfaXApCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgY29ubmVjdGlvbiA9IERldGFpbGVkSFRUUENvbm5lY3Rpb24oaG9zdF9pcCkKKyAg
ICAgICAgc3RhcnQgPSBERUZBVUxUX1RJTUVSKCkKKyAgICAgICAgY29ubmVjdGlvbi5yZXF1ZXN0
KAorICAgICAgICAgICAgcmVxdWVzdC5jb21tYW5kLAorICAgICAgICAgICAgcmVxdWVzdC5wYXRo
LAorICAgICAgICAgICAgcmVxdWVzdC5yZXF1ZXN0X2JvZHksCisgICAgICAgICAgICByZXF1ZXN0
LmhlYWRlcnMpCisgICAgICAgIHJlc3BvbnNlID0gY29ubmVjdGlvbi5nZXRyZXNwb25zZSgpCisg
ICAgICAgIGVuZCA9IERFRkFVTFRfVElNRVIoKQorICAgICAgICBkZWxheSA9IChlbmQgLSBzdGFy
dCkgKiAxMDAwCisgICAgICAgIGNodW5rcywgcmVzcG9uc2VfZGVsYXlzID0gcmVzcG9uc2UucmVh
ZF9jaHVua3MoKQorICAgICAgICByZXNwb25zZV9kZWxheXMuaW5zZXJ0KDAsIGRlbGF5KQorICAg
ICAgICByZXR1cm4gcmVzcG9uc2UsIGNodW5rcywgcmVzcG9uc2VfZGVsYXlzCisgICAgICBleGNl
cHQgRXhjZXB0aW9uLCBlOgorICAgICAgICBpZiByZXRyaWVzOgorICAgICAgICAgIHJldHJpZXMg
LT0gMQorICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnUmV0cnlpbmcgZmV0Y2ggJXM6ICVzJywg
cmVxdWVzdCwgZSkKKyAgICAgICAgICBjb250aW51ZQorICAgICAgICBsb2dnaW5nLmNyaXRpY2Fs
KCdDb3VsZCBub3QgZmV0Y2ggJXM6ICVzJywgcmVxdWVzdCwgZSkKKyAgICAgICAgcmV0dXJuIE5v
bmUsIE5vbmUsIE5vbmUKKworCitjbGFzcyBSZWNvcmRIdHRwQXJjaGl2ZUZldGNoKG9iamVjdCk6
CisgICIiIk1ha2UgcmVhbCBIVFRQIGZldGNoZXMgYW5kIHNhdmUgcmVzcG9uc2VzIGluIHRoZSBn
aXZlbiBIdHRwQXJjaGl2ZS4iIiIKKworICBkZWYgX19pbml0X18oc2VsZiwgaHR0cF9hcmNoaXZl
LCByZWFsX2Ruc19sb29rdXAsIGluamVjdF9zY3JpcHQsCisgICAgICAgICAgICAgICBjYWNoZV9t
aXNzZXM9Tm9uZSk6CisgICAgIiIiSW5pdGlhbGl6ZSBSZWNvcmRIdHRwQXJjaGl2ZUZldGNoLgor
CisgICAgQXJnczoKKyAgICAgIGh0dHBfYXJjaHZlOiBhbiBpbnN0YW5jZSBvZiBhIEh0dHBBcmNo
aXZlCisgICAgICByZWFsX2Ruc19sb29rdXA6IGEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyBhIGhv
c3QgdG8gYW4gSVAuCisgICAgICBpbmplY3Rfc2NyaXB0OiBzY3JpcHQgc3RyaW5nIHRvIGluamVj
dCBpbiBhbGwgcGFnZXMKKyAgICAgIGNhY2hlX21pc3NlczogaW5zdGFuY2Ugb2YgQ2FjaGVNaXNz
QXJjaGl2ZQorICAgICIiIgorICAgIHNlbGYuaHR0cF9hcmNoaXZlID0gaHR0cF9hcmNoaXZlCisg
ICAgc2VsZi5yZWFsX2h0dHBfZmV0Y2ggPSBSZWFsSHR0cEZldGNoKHJlYWxfZG5zX2xvb2t1cCkK
KyAgICBzZWxmLmluamVjdF9zY3JpcHQgPSBpbmplY3Rfc2NyaXB0CisgICAgc2VsZi5jYWNoZV9t
aXNzZXMgPSBjYWNoZV9taXNzZXMKKyAgICBzZWxmLnByZXZpb3VzX3JlcXVlc3QgPSBOb25lCisK
KyAgZGVmIF9fY2FsbF9fKHNlbGYsIHJlcXVlc3QpOgorICAgICIiIkZldGNoIHRoZSByZXF1ZXN0
IGFuZCByZXR1cm4gdGhlIHJlc3BvbnNlLgorCisgICAgQXJnczoKKyAgICAgIHJlcXVlc3Q6IGFu
IGluc3RhbmNlIG9mIGFuIEFyY2hpdmVkSHR0cFJlcXVlc3QuCisgICAgIiIiCisgICAgaWYgc2Vs
Zi5jYWNoZV9taXNzZXM6CisgICAgICBzZWxmLmNhY2hlX21pc3Nlcy5yZWNvcmRfcmVxdWVzdCgK
KyAgICAgICAgICByZXF1ZXN0LCBpc19yZWNvcmRfbW9kZT1UcnVlLCBpc19jYWNoZV9taXNzPUZh
bHNlKQorCisgICAgIyBpZiByZXF1ZXN0IGhhcyBhbHJlYWR5IGJlZW4gYXJjaGl2ZWQsIHJldHVy
biB0aGUgYXJjaGl2ZWQgdmVyc2lvbgorICAgIGlmIHJlcXVlc3QgaW4gc2VsZi5odHRwX2FyY2hp
dmU6CisgICAgICBsb2dnaW5nLmRlYnVnKCdSZXBlYXRlZCByZXF1ZXN0IGZvdW5kOiAlc1xuUHJl
dmlvdXMgUmVxdWVzdCB3YXM6ICVzXG4nLAorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnZl
cmJvc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmV2aW91c19yZXF1ZXN0LnZlcmJv
c2UoKSBpZiBzZWxmLnByZXZpb3VzX3JlcXVlc3QKKyAgICAgICAgICAgICAgICAgICAgZWxzZSAn
Tm9uZScpCisgICAgICByZXR1cm4gc2VsZi5odHRwX2FyY2hpdmVbcmVxdWVzdF0KKworICAgIHBy
ZXZpb3VzX3JlcXVlc3QgPSByZXF1ZXN0CisgICAgcmVzcG9uc2UsIHJlc3BvbnNlX2NodW5rcywg
cmVzcG9uc2VfZGVsYXlzID0gc2VsZi5yZWFsX2h0dHBfZmV0Y2gocmVxdWVzdCkKKyAgICBpZiBy
ZXNwb25zZSBpcyBOb25lOgorICAgICAgcmV0dXJuIE5vbmUKKworICAgIHNlcnZlcl9ydHQgPSAw
CisgICAgaWYgc2VsZi5odHRwX2FyY2hpdmUuZ2V0X3NlcnZlcl9ydHQ6CisgICAgICBzZXJ2ZXJf
cnR0ID0gc2VsZi5odHRwX2FyY2hpdmUuZ2V0X3NlcnZlcl9ydHQocmVxdWVzdC5ob3N0KQorICAg
IHNlcnZlcl9kZWxheXMgPSBbbWF4KGRlbGF5IC0gc2VydmVyX3J0dCwgMCkgZm9yIGRlbGF5IGlu
IHJlc3BvbnNlX2RlbGF5c10KKworICAgIGFyY2hpdmVkX2h0dHBfcmVzcG9uc2UgPSBodHRwYXJj
aGl2ZS5BcmNoaXZlZEh0dHBSZXNwb25zZSgKKyAgICAgICAgcmVzcG9uc2UudmVyc2lvbiwKKyAg
ICAgICAgcmVzcG9uc2Uuc3RhdHVzLAorICAgICAgICByZXNwb25zZS5yZWFzb24sCisgICAgICAg
IHJlc3BvbnNlLmdldGhlYWRlcnMoKSwKKyAgICAgICAgcmVzcG9uc2VfY2h1bmtzLAorICAgICAg
ICBzZXJ2ZXJfZGVsYXlzKQorICAgIHNlbGYuaHR0cF9hcmNoaXZlW3JlcXVlc3RdID0gYXJjaGl2
ZWRfaHR0cF9yZXNwb25zZQorICAgIGlmIHNlbGYuaW5qZWN0X3NjcmlwdDoKKyAgICAgICMgTWFr
ZSBhIGNvcHkgc28gdGhlIHZlcnNpb24gc2F2ZWQgaW4gdGhlIGFyY2hpdmUgZG9lc24ndCBoYXZl
IHRoZQorICAgICAgIyBpbmplY3RlZCBzY3JpcHRzLgorICAgICAgYXJjaGl2ZWRfaHR0cF9yZXNw
b25zZSA9IGNvcHkuZGVlcGNvcHkoYXJjaGl2ZWRfaHR0cF9yZXNwb25zZSkKKyAgICAgIF9Jbmpl
Y3RTY3JpcHRzKGFyY2hpdmVkX2h0dHBfcmVzcG9uc2UsIHNlbGYuaW5qZWN0X3NjcmlwdCkKKyAg
ICBsb2dnaW5nLmRlYnVnKCdSZWNvcmRlZDogJXMnLCByZXF1ZXN0KQorICAgIHJldHVybiBhcmNo
aXZlZF9odHRwX3Jlc3BvbnNlCisKKworY2xhc3MgUmVwbGF5SHR0cEFyY2hpdmVGZXRjaChvYmpl
Y3QpOgorICAiIiJTZXJ2ZSByZXNwb25zZXMgZnJvbSB0aGUgZ2l2ZW4gSHR0cEFyY2hpdmUuIiIi
CisKKyAgZGVmIF9faW5pdF9fKHNlbGYsIGh0dHBfYXJjaGl2ZSwgaW5qZWN0X3NjcmlwdCwKKyAg
ICAgICAgICAgICAgIHVzZV9kaWZmX29uX3Vua25vd25fcmVxdWVzdHM9RmFsc2UsIGNhY2hlX21p
c3Nlcz1Ob25lLAorICAgICAgICAgICAgICAgdXNlX2Nsb3Nlc3RfbWF0Y2g9RmFsc2UpOgorICAg
ICIiIkluaXRpYWxpemUgUmVwbGF5SHR0cEFyY2hpdmVGZXRjaC4KKworICAgIEFyZ3M6CisgICAg
ICBodHRwX2FyY2hpdmU6IGFuIGluc3RhbmNlIG9mIGEgSHR0cEFyY2hpdmUKKyAgICAgIGluamVj
dF9zY3JpcHQ6IHNjcmlwdCBzdHJpbmcgdG8gaW5qZWN0IGluIGFsbCBwYWdlcworICAgICAgdXNl
X2RpZmZfb25fdW5rbm93bl9yZXF1ZXN0czogSWYgVHJ1ZSwgbG9nIHVua25vd24gcmVxdWVzdHMK
KyAgICAgICAgd2l0aCBhIGRpZmYgdG8gcmVxdWVzdHMgdGhhdCBsb29rIHNpbWlsYXIuCisgICAg
ICBjYWNoZV9taXNzZXM6IEluc3RhbmNlIG9mIENhY2hlTWlzc0FyY2hpdmUuCisgICAgICAgIENh
bGxiYWNrIHVwZGF0ZXMgYXJjaGl2ZSBvbiBjYWNoZSBtaXNzZXMKKyAgICAgIHVzZV9jbG9zZXN0
X21hdGNoOiBJZiBUcnVlLCBvbiByZXBsYXkgbW9kZSwgc2VydmUgdGhlIGNsb3Nlc3QgbWF0Y2gK
KyAgICAgICAgaW4gdGhlIGFyY2hpdmUgaW5zdGVhZCBvZiBnaXZpbmcgYSA0MDQuCisgICAgIiIi
CisgICAgc2VsZi5odHRwX2FyY2hpdmUgPSBodHRwX2FyY2hpdmUKKyAgICBzZWxmLmluamVjdF9z
Y3JpcHQgPSBpbmplY3Rfc2NyaXB0CisgICAgc2VsZi51c2VfZGlmZl9vbl91bmtub3duX3JlcXVl
c3RzID0gdXNlX2RpZmZfb25fdW5rbm93bl9yZXF1ZXN0cworICAgIHNlbGYuY2FjaGVfbWlzc2Vz
ID0gY2FjaGVfbWlzc2VzCisgICAgc2VsZi51c2VfY2xvc2VzdF9tYXRjaCA9IHVzZV9jbG9zZXN0
X21hdGNoCisKKyAgZGVmIF9fY2FsbF9fKHNlbGYsIHJlcXVlc3QpOgorICAgICIiIkZldGNoIHRo
ZSByZXF1ZXN0IGFuZCByZXR1cm4gdGhlIHJlc3BvbnNlLgorCisgICAgQXJnczoKKyAgICAgIHJl
cXVlc3Q6IGFuIGluc3RhbmNlIG9mIGFuIEFyY2hpdmVkSHR0cFJlcXVlc3QuCisgICAgUmV0dXJu
czoKKyAgICAgIEluc3RhbmNlIG9mIEFyY2hpdmVkSHR0cFJlc3BvbnNlIChpZiBmb3VuZCkgb3Ig
Tm9uZQorICAgICIiIgorICAgIHJlc3BvbnNlID0gc2VsZi5odHRwX2FyY2hpdmUuZ2V0KHJlcXVl
c3QpCisKKyAgICBpZiBzZWxmLnVzZV9jbG9zZXN0X21hdGNoIGFuZCBub3QgcmVzcG9uc2U6Cisg
ICAgICBjbG9zZXN0X3JlcXVlc3QgPSBzZWxmLmh0dHBfYXJjaGl2ZS5maW5kX2Nsb3Nlc3RfcmVx
dWVzdCgKKyAgICAgICAgICByZXF1ZXN0LCB1c2VfcGF0aD1UcnVlKQorICAgICAgaWYgY2xvc2Vz
dF9yZXF1ZXN0OgorICAgICAgICByZXNwb25zZSA9IHNlbGYuaHR0cF9hcmNoaXZlLmdldChjbG9z
ZXN0X3JlcXVlc3QpCisgICAgICAgIGlmIHJlc3BvbnNlOgorICAgICAgICAgIGxvZ2dpbmcuaW5m
bygnUmVxdWVzdCBub3QgZm91bmQ6ICVzXG5Vc2luZyBjbG9zZXN0IG1hdGNoOiAlcycsCisgICAg
ICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsIGNsb3Nlc3RfcmVxdWVzdCkKKworICAgIGlmIHNl
bGYuY2FjaGVfbWlzc2VzOgorICAgICAgc2VsZi5jYWNoZV9taXNzZXMucmVjb3JkX3JlcXVlc3Qo
CisgICAgICAgICAgcmVxdWVzdCwgaXNfcmVjb3JkX21vZGU9RmFsc2UsIGlzX2NhY2hlX21pc3M9
bm90IHJlc3BvbnNlKQorCisgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgcmVhc29uID0gc3Ry
KHJlcXVlc3QpCisgICAgICBpZiBzZWxmLnVzZV9kaWZmX29uX3Vua25vd25fcmVxdWVzdHM6Cisg
ICAgICAgIGRpZmYgPSBzZWxmLmh0dHBfYXJjaGl2ZS5kaWZmKHJlcXVlc3QpCisgICAgICAgIGlm
IGRpZmY6CisgICAgICAgICAgcmVhc29uICs9ICgKKyAgICAgICAgICAgICAgIlxuTmVhcmVzdCBy
ZXF1ZXN0IGRpZmYgIgorICAgICAgICAgICAgICAiKCctJyBmb3IgYXJjaGl2ZWQgcmVxdWVzdCwg
JysnIGZvciBjdXJyZW50IHJlcXVlc3QpOlxuJXMiICUgZGlmZikKKyAgICAgIGxvZ2dpbmcud2Fy
bmluZygnQ291bGQgbm90IHJlcGxheTogJXMnLCByZWFzb24pCisgICAgZWxzZToKKyAgICAgIF9J
bmplY3RTY3JpcHRzKHJlc3BvbnNlLCBzZWxmLmluamVjdF9zY3JpcHQpCisgICAgcmV0dXJuIHJl
c3BvbnNlCisKKworY2xhc3MgQ29udHJvbGxhYmxlSHR0cEFyY2hpdmVGZXRjaChvYmplY3QpOgor
ICAiIiJDb250cm9sbGFibGUgZmV0Y2ggZnVuY3Rpb24gdGhhdCBjYW4gc3dhcCBiZXR3ZWVuIHJl
Y29yZCBhbmQgcmVwbGF5LiIiIgorCisgIGRlZiBfX2luaXRfXyhzZWxmLCBodHRwX2FyY2hpdmUs
IHJlYWxfZG5zX2xvb2t1cCwKKyAgICAgICAgICAgICAgIGluamVjdF9zY3JpcHQsIHVzZV9kaWZm
X29uX3Vua25vd25fcmVxdWVzdHMsCisgICAgICAgICAgICAgICB1c2VfcmVjb3JkX21vZGUsIGNh
Y2hlX21pc3NlcywgdXNlX2Nsb3Nlc3RfbWF0Y2gsCisgICAgICAgICAgICAgICB1c2Vfc2VydmVy
X2RlbGF5KToKKyAgICAiIiJJbml0aWFsaXplIEh0dHBBcmNoaXZlRmV0Y2guCisKKyAgICBBcmdz
OgorICAgICAgaHR0cF9hcmNoaXZlOiBhbiBpbnN0YW5jZSBvZiBhIEh0dHBBcmNoaXZlCisgICAg
ICByZWFsX2Ruc19sb29rdXA6IGEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyBhIGhvc3QgdG8gYW4g
SVAuCisgICAgICBpbmplY3Rfc2NyaXB0OiBzY3JpcHQgc3RyaW5nIHRvIGluamVjdCBpbiBhbGwg
cGFnZXMuCisgICAgICB1c2VfZGlmZl9vbl91bmtub3duX3JlcXVlc3RzOiBJZiBUcnVlLCBsb2cg
dW5rbm93biByZXF1ZXN0cworICAgICAgICB3aXRoIGEgZGlmZiB0byByZXF1ZXN0cyB0aGF0IGxv
b2sgc2ltaWxhci4KKyAgICAgIHVzZV9yZWNvcmRfbW9kZTogSWYgVHJ1ZSwgc3RhcnQgaW4gc2Vy
dmVyIGluIHJlY29yZCBtb2RlLgorICAgICAgY2FjaGVfbWlzc2VzOiBJbnN0YW5jZSBvZiBDYWNo
ZU1pc3NBcmNoaXZlLgorICAgICAgdXNlX2Nsb3Nlc3RfbWF0Y2g6IElmIFRydWUsIG9uIHJlcGxh
eSBtb2RlLCBzZXJ2ZSB0aGUgY2xvc2VzdCBtYXRjaAorICAgICAgICBpbiB0aGUgYXJjaGl2ZSBp
bnN0ZWFkIG9mIGdpdmluZyBhIDQwNC4KKyAgICAgIHVzZV9zZXJ2ZXJfZGVsYXk6IElmIFRydWUs
IG9uIHJlcGxheSBtb2RlLCBzaW11bGF0ZSBzZXJ2ZXIgZGVsYXkgYnkKKyAgICAgICAgZGVsYXlp
bmcgcmVzcG9uc2UgdGltZSB0byByZXF1ZXN0cy4KKyAgICAiIiIKKyAgICBzZWxmLnJlY29yZF9m
ZXRjaCA9IFJlY29yZEh0dHBBcmNoaXZlRmV0Y2goCisgICAgICAgIGh0dHBfYXJjaGl2ZSwgcmVh
bF9kbnNfbG9va3VwLCBpbmplY3Rfc2NyaXB0LAorICAgICAgICBjYWNoZV9taXNzZXMpCisgICAg
c2VsZi5yZXBsYXlfZmV0Y2ggPSBSZXBsYXlIdHRwQXJjaGl2ZUZldGNoKAorICAgICAgICBodHRw
X2FyY2hpdmUsIGluamVjdF9zY3JpcHQsIHVzZV9kaWZmX29uX3Vua25vd25fcmVxdWVzdHMsIGNh
Y2hlX21pc3NlcywKKyAgICAgICAgdXNlX2Nsb3Nlc3RfbWF0Y2gpCisgICAgc2VsZi51c2Vfc2Vy
dmVyX2RlbGF5ID0gdXNlX3NlcnZlcl9kZWxheQorICAgIGlmIHVzZV9yZWNvcmRfbW9kZToKKyAg
ICAgIHNlbGYuU2V0UmVjb3JkTW9kZSgpCisgICAgZWxzZToKKyAgICAgIHNlbGYuU2V0UmVwbGF5
TW9kZSgpCisKKyAgZGVmIFNldFJlY29yZE1vZGUoc2VsZik6CisgICAgc2VsZi5mZXRjaCA9IHNl
bGYucmVjb3JkX2ZldGNoCisgICAgc2VsZi5pc19yZWNvcmRfbW9kZSA9IFRydWUKKworICBkZWYg
U2V0UmVwbGF5TW9kZShzZWxmKToKKyAgICBzZWxmLmZldGNoID0gc2VsZi5yZXBsYXlfZmV0Y2gK
KyAgICBzZWxmLmlzX3JlY29yZF9tb2RlID0gRmFsc2UKKworICBkZWYgX19jYWxsX18oc2VsZiwg
KmFyZ3MsICoqa3dhcmdzKToKKyAgICAiIiJGb3J3YXJkIGNhbGxzIHRvIFJlcGxheS9SZWNvcmQg
ZmV0Y2ggZnVuY3Rpb25zIGRlcGVuZGluZyBvbiBtb2RlLiIiIgorICAgIHJldHVybiBzZWxmLmZl
dGNoKCphcmdzLCAqKmt3YXJncykKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1dlYlBhZ2VS
ZXBsYXkvaHR0cGNsaWVudC5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICAr
ICoKCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L2h0dHBwcm94eS5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJQYWdlUmVwbGF5L2h0dHBwcm94eS5weQkocmV2aXNpb24gMCkKKysrIFRvb2xz
L1dlYlBhZ2VSZXBsYXkvaHR0cHByb3h5LnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyNSBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAyMDEwIEdvb2dsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5z
ZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hl
Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGlj
YWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisj
IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5n
dWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM
aWNlbnNlLgorCitpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKK2ltcG9ydCBkYWVtb25zZXJ2ZXIKK2lt
cG9ydCBodHRwYXJjaGl2ZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IFNvY2tl
dFNlcnZlcgoraW1wb3J0IHNzbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCitpbXBv
cnQgdXJscGFyc2UKKworCitjbGFzcyBIdHRwUHJveHlFcnJvcihFeGNlcHRpb24pOgorICAiIiJN
b2R1bGUgY2F0Y2gtYWxsIGVycm9yLiIiIgorICBwYXNzCisKK2NsYXNzIEh0dHBQcm94eVNlcnZl
ckVycm9yKEh0dHBQcm94eUVycm9yKToKKyAgIiIiUmFpc2VkIGZvciBlcnJvcnMgbGlrZSAnQWRk
cmVzcyBhbHJlYWR5IGluIHVzZScuIiIiCisgIHBhc3MKKworCitjbGFzcyBIdHRwQXJjaGl2ZUhh
bmRsZXIoQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgIHByb3RvY29s
X3ZlcnNpb24gPSAnSFRUUC8xLjEnICAjIG92ZXJyaWRlIEJhc2VIVFRQU2VydmVyIHNldHRpbmcK
KworICAjIFNpbmNlIHdlIGRvIGxvdHMgb2Ygc21hbGwgd2ZpbGUud3JpdGUoKSBjYWxscywgdHVy
biBvbiBidWZmZXJpbmcuCisgIHdidWZzaXplID0gLTEgICMgb3ZlcnJpZGUgU3RyZWFtUmVxdWVz
dEhhbmRsZXIgKGEgYmFzZSBjbGFzcykgc2V0dGluZworCisgICMgTWFrZSByZXF1ZXN0IGhhbmRs
ZXIgbG9nZ2luZyBtYXRjaCBvdXIgbG9nZ2luZyBmb3JtYXQuCisgIGRlZiBsb2dfcmVxdWVzdChz
ZWxmLCBjb2RlPSctJywgc2l6ZT0nLScpOiBwYXNzCisgIGRlZiBsb2dfZXJyb3Ioc2VsZiwgZm9y
bWF0LCAqYXJncyk6IGxvZ2dpbmcuZXJyb3IoZm9ybWF0LCAqYXJncykKKyAgZGVmIGxvZ19tZXNz
YWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOiBsb2dnaW5nLmluZm8oZm9ybWF0LCAqYXJncykKKwor
ICBkZWYgcmVhZF9yZXF1ZXN0X2JvZHkoc2VsZik6CisgICAgcmVxdWVzdF9ib2R5ID0gTm9uZQor
ICAgIGxlbmd0aCA9IGludChzZWxmLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcsIDApKSBv
ciBOb25lCisgICAgaWYgbGVuZ3RoOgorICAgICAgcmVxdWVzdF9ib2R5ID0gc2VsZi5yZmlsZS5y
ZWFkKGxlbmd0aCkKKyAgICByZXR1cm4gcmVxdWVzdF9ib2R5CisKKyAgZGVmIGdldF9oZWFkZXJf
ZGljdChzZWxmKToKKyAgICByZXR1cm4gZGljdChzZWxmLmhlYWRlcnMuaXRlbXMoKSkKKworICBk
ZWYgZ2V0X2FyY2hpdmVkX2h0dHBfcmVxdWVzdChzZWxmLCBpc19zc2w9RmFsc2UpOgorICAgIGhv
c3QgPSBzZWxmLmhlYWRlcnMuZ2V0KCdob3N0JykKKyAgICBpZiBob3N0IGlzIE5vbmU6CisgICAg
ICBsb2dnaW5nLmVycm9yKCdSZXF1ZXN0IHdpdGhvdXQgaG9zdCBoZWFkZXInKQorICAgICAgcmV0
dXJuIE5vbmUKKworICAgIHBhcnNlZCA9IHVybHBhcnNlLnVybHBhcnNlKHNlbGYucGF0aCkKKyAg
ICBxdWVyeSA9ICc/JXMnICUgcGFyc2VkLnF1ZXJ5IGlmIHBhcnNlZC5xdWVyeSBlbHNlICcnCisg
ICAgZnJhZ21lbnQgPSAnIyVzJyAlIHBhcnNlZC5mcmFnbWVudCBpZiBwYXJzZWQuZnJhZ21lbnQg
ZWxzZSAnJworICAgIGZ1bGxfcGF0aCA9ICclcyVzJXMnICUgKHBhcnNlZC5wYXRoLCBxdWVyeSwg
ZnJhZ21lbnQpCisKKyAgICByZXR1cm4gaHR0cGFyY2hpdmUuQXJjaGl2ZWRIdHRwUmVxdWVzdCgK
KyAgICAgICAgc2VsZi5jb21tYW5kLAorICAgICAgICBob3N0LAorICAgICAgICBmdWxsX3BhdGgs
CisgICAgICAgIHNlbGYucmVhZF9yZXF1ZXN0X2JvZHkoKSwKKyAgICAgICAgc2VsZi5nZXRfaGVh
ZGVyX2RpY3QoKSwKKyAgICAgICAgaXNfc3NsKQorCisgIGRlZiBzZW5kX2FyY2hpdmVkX2h0dHBf
cmVzcG9uc2Uoc2VsZiwgcmVzcG9uc2UpOgorICAgIHRyeToKKyAgICAgICMgV2UgbmVlZCB0byBz
ZXQgdGhlIHNlcnZlciBuYW1lIGJlZm9yZSB3ZSBzdGFydCB0aGUgcmVzcG9uc2UuCisgICAgICBo
ZWFkZXJzID0gZGljdChyZXNwb25zZS5oZWFkZXJzKQorICAgICAgdXNlX2NodW5rZWQgPSAndHJh
bnNmZXItZW5jb2RpbmcnIGluIGhlYWRlcnMKKyAgICAgIGhhc19jb250ZW50X2xlbmd0aCA9ICdj
b250ZW50LWxlbmd0aCcgaW4gaGVhZGVycworICAgICAgc2VsZi5zZXJ2ZXJfdmVyc2lvbiA9IGhl
YWRlcnMuZ2V0KCdzZXJ2ZXInLCAnV2ViUGFnZVJlcGxheScpCisgICAgICBzZWxmLnN5c192ZXJz
aW9uID0gJycKKworICAgICAgaWYgcmVzcG9uc2UudmVyc2lvbiA9PSAxMDoKKyAgICAgICAgc2Vs
Zi5wcm90b2NvbF92ZXJzaW9uID0gJ0hUVFAvMS4wJworCisgICAgICAjIElmIHdlIGRvbid0IGhh
dmUgY2h1bmtlZCBlbmNvZGluZyBhbmQgdGhlcmUgaXMgbm8gY29udGVudCBsZW5ndGgsCisgICAg
ICAjIHdlIG5lZWQgdG8gbWFudWFsbHkgY29tcHV0ZSB0aGUgY29udGVudC1sZW5ndGguCisgICAg
ICBpZiBub3QgdXNlX2NodW5rZWQgYW5kIG5vdCBoYXNfY29udGVudF9sZW5ndGg6CisgICAgICAg
IGNvbnRlbnRfbGVuZ3RoID0gc3VtKGxlbihjKSBmb3IgYyBpbiByZXNwb25zZS5yZXNwb25zZV9k
YXRhKQorICAgICAgICByZXNwb25zZS5oZWFkZXJzLmFwcGVuZCgoJ2NvbnRlbnQtbGVuZ3RoJywg
c3RyKGNvbnRlbnRfbGVuZ3RoKSkpCisKKyAgICAgIHNlbGYuc2VuZF9yZXNwb25zZShyZXNwb25z
ZS5zdGF0dXMsIHJlc3BvbnNlLnJlYXNvbikKKyAgICAgICMgVE9ETyhtYmVsc2hlKTogVGhpcyBp
cyBsYW1lIC0gZWFjaCB3cml0ZSBpcyBhIHBhY2tldCEKKyAgICAgIGZvciBoZWFkZXIsIHZhbHVl
IGluIHJlc3BvbnNlLmhlYWRlcnM6CisgICAgICAgIGlmIGhlYWRlciAhPSAnc2VydmVyJzoKKyAg
ICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKGhlYWRlciwgdmFsdWUpCisKKyAgICAgICMgRm9yIGJh
Y2t3YXJkcyBjb21wYXRpYmlsaXR5CisgICAgICBzZXJ2ZXJfZGVsYXlzID0gW10KKyAgICAgIGlm
IGhhc2F0dHIocmVzcG9uc2UsICdzZXJ2ZXJfZGVsYXlzJyk6CisgICAgICAgIHNlcnZlcl9kZWxh
eXMgPSByZXNwb25zZS5zZXJ2ZXJfZGVsYXlzCisKKyAgICAgIGxvZ2dpbmcuZGVidWcoJ3NlcnZl
ciBkZWxheXM6ICVzJywgc2VydmVyX2RlbGF5cykKKworICAgICAgIyBXZSBkb24ndCB3YW50IG91
ciBwcm94eSB0byBzaW11bGF0ZSBzZXJ2ZXIgZGVsYXkgb24gcmVjb3JkIG1vZGUKKyAgICAgIHVz
ZV9zZXJ2ZXJfZGVsYXkgPSAoc2VsZi5zZXJ2ZXIuaHR0cF9hcmNoaXZlX2ZldGNoLnVzZV9zZXJ2
ZXJfZGVsYXkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzZWxmLnNlcnZlci5o
dHRwX2FyY2hpdmVfZmV0Y2guaXNfcmVjb3JkX21vZGUpCisKKyAgICAgIGlmIHVzZV9zZXJ2ZXJf
ZGVsYXkgYW5kIHNlcnZlcl9kZWxheXM6CisgICAgICAgIHRpbWUuc2xlZXAoc2VydmVyX2RlbGF5
c1swXSAvIDEwMDAuMCkKKyAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorCisgICAgICAjIEV4dHJh
Y3Qgc2VydmVyIGRlbGF5cyBmb3Igbm9uLWZpcnN0IGFuZCBub24tbGFzdCBjaHVua3MKKyAgICAg
IGZvciBjaHVuaywgZGVsYXkgaW4gbWFwKE5vbmUsIHJlc3BvbnNlLnJlc3BvbnNlX2RhdGEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfZGVsYXlzWzE6LTFdKToKKyAgICAg
ICAgaWYgdXNlX2NodW5rZWQ6CisgICAgICAgICAgaWYgdXNlX3NlcnZlcl9kZWxheSBhbmQgZGVs
YXk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKGRlbGF5IC8gMTAwMC4wKQorICAgICAgICAgICMg
V3JpdGUgY2h1bmsgbGVuZ3RoIChoZXgpIGFuZCBkYXRhIChlLmcuICJBXHJcblRFU1NFTEFURURc
clxuIikuCisgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZSgnJXhcclxuJXNcclxuJyAlIChsZW4o
Y2h1bmspLCBjaHVuaykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgc2VsZi53ZmlsZS53cml0
ZShjaHVuaykKKyAgICAgIGlmIHVzZV9jaHVua2VkIGFuZCAobm90IHJlc3BvbnNlLnJlc3BvbnNl
X2RhdGEgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVzcG9uc2VfZGF0
YVstMV0pOgorICAgICAgICBpZiB1c2Vfc2VydmVyX2RlbGF5IGFuZCBzZXJ2ZXJfZGVsYXlzOgor
ICAgICAgICAgIHRpbWUuc2xlZXAoc2VydmVyX2RlbGF5c1stMV0gLyAxMDAwLjApCisgICAgICAg
ICMgV3JpdGUgbGFzdCBjaHVuayBhcyBhIHplcm8tbGVuZ3RoIGNodW5rIHdpdGggbm8gZGF0YS4K
KyAgICAgICAgc2VsZi53ZmlsZS53cml0ZSgnMFxyXG5cclxuJykKKyAgICAgIHNlbGYud2ZpbGUu
Zmx1c2goKQorCisgICAgICAjIFRPRE8obWJlbHNoZSk6IFRoaXMgY29ubmVjdGlvbiBjbG9zZSBk
b2Vzbid0IHNlZW0gdG8gd29yay4KKyAgICAgIGlmIHJlc3BvbnNlLnZlcnNpb24gPT0gMTA6Cisg
ICAgICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IDEKKworICAgIGV4Y2VwdCBFeGNlcHRpb24s
IGU6CisgICAgICBsb2dnaW5nLmVycm9yKCdFcnJvciBzZW5kaW5nIHJlc3BvbnNlIGZvciAlcy8l
czogJXMnLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmhlYWRlcnNbJ2hvc3QnXSwKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICBlKQorCisgIGRl
ZiBkb19QT1NUKHNlbGYpOgorICAgIHNlbGYuZG9fR0VUKCkKKworICBkZWYgZG9fSEVBRChzZWxm
KToKKyAgICBzZWxmLmRvX0dFVCgpCisKKyAgZGVmIHNlbmRfZXJyb3Ioc2VsZiwgc3RhdHVzKToK
KyAgICAiIiJPdmVycmlkZSB0aGUgZGVmYXVsdCBzZW5kIGVycm9yIHdpdGggYSB2ZXJzaW9uIHRo
YXQgZG9lc24ndCB1bm5lY2Vzc2FyaWx5CisgICAgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgICAg
IiIiCisgICAgcmVzcG9uc2UgPSBodHRwYXJjaGl2ZS5jcmVhdGVfcmVzcG9uc2Uoc3RhdHVzKQor
ICAgIHNlbGYuc2VuZF9hcmNoaXZlZF9odHRwX3Jlc3BvbnNlKHJlc3BvbnNlKQorCisgIGRlZiBk
b19HRVQoc2VsZik6CisgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgcmVxdWVzdCA9
IHNlbGYuZ2V0X2FyY2hpdmVkX2h0dHBfcmVxdWVzdCgpCisgICAgaWYgcmVxdWVzdCBpcyBOb25l
OgorICAgICAgc2VsZi5zZW5kX2Vycm9yKDUwMCkKKyAgICAgIHJldHVybgorICAgIHJlc3BvbnNl
ID0gc2VsZi5zZXJ2ZXIuY3VzdG9tX2hhbmRsZXJzLmhhbmRsZShyZXF1ZXN0KQorICAgIGlmIG5v
dCByZXNwb25zZToKKyAgICAgIHJlc3BvbnNlID0gc2VsZi5zZXJ2ZXIuaHR0cF9hcmNoaXZlX2Zl
dGNoKHJlcXVlc3QpCisgICAgaWYgcmVzcG9uc2U6CisgICAgICBzZWxmLnNlbmRfYXJjaGl2ZWRf
aHR0cF9yZXNwb25zZShyZXNwb25zZSkKKyAgICAgIHJlcXVlc3RfdGltZV9tcyA9ICh0aW1lLnRp
bWUoKSAtIHN0YXJ0X3RpbWUpICogMTAwMC4wOworICAgICAgbG9nZ2luZy5kZWJ1ZygnU2VydmVk
OiAlcyAoJWRtcyknLCByZXF1ZXN0LCByZXF1ZXN0X3RpbWVfbXMpCisgICAgZWxzZToKKyAgICAg
IHNlbGYuc2VuZF9lcnJvcig0MDQpCisKKworY2xhc3MgSHR0cFByb3h5U2VydmVyKFNvY2tldFNl
cnZlci5UaHJlYWRpbmdNaXhJbiwKKyAgICAgICAgICAgICAgICAgICAgICBCYXNlSFRUUFNlcnZl
ci5IVFRQU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgIGRhZW1vbnNlcnZlci5EYWVtb25T
ZXJ2ZXIpOgorICBIQU5ETEVSID0gSHR0cEFyY2hpdmVIYW5kbGVyCisKKyAgZGVmIF9faW5pdF9f
KHNlbGYsIGh0dHBfYXJjaGl2ZV9mZXRjaCwgY3VzdG9tX2hhbmRsZXJzLAorICAgICAgICAgICAg
ICAgaG9zdD0nbG9jYWxob3N0JywgcG9ydD04MCk6CisgICAgc2VsZi5odHRwX2FyY2hpdmVfZmV0
Y2ggPSBodHRwX2FyY2hpdmVfZmV0Y2gKKyAgICBzZWxmLmN1c3RvbV9oYW5kbGVycyA9IGN1c3Rv
bV9oYW5kbGVycworCisgICAgIyBJbmNyZWFzZSB0aGUgbGlzdGVuIHF1ZXVlIHNpemUuIFRoZSBk
ZWZhdWx0LCA1LCBpcyBzZXQgaW4KKyAgICAjIFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIgKHRoZSBw
YXJlbnQgb2YgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcikuCisgICAgIyBTaW5jZSB3ZSdyZSBp
bnRlcmNlcHRpbmcgbWFueSBkb21haW5zIHRocm91Z2ggdGhpcyBzaW5nbGUgc2VydmVyLAorICAg
ICMgaXQgaXMgcXVpdGUgcG9zc2libGUgdG8gZ2V0IG1vcmUgdGhhbiA1IGNvbmN1cnJlbnQgY29u
bmVjdGlvbiByZXF1ZXN0cy4KKyAgICBzZWxmLnJlcXVlc3RfcXVldWVfc2l6ZSA9IDEyOAorCisg
ICAgdHJ5OgorICAgICAgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlci5fX2luaXRfXyhzZWxmLCAo
aG9zdCwgcG9ydCksIHNlbGYuSEFORExFUikKKyAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAg
ICAgcmFpc2UgSHR0cFByb3h5U2VydmVyRXJyb3IoJ0NvdWxkIG5vdCBzdGFydCBIVFRQU2VydmVy
IG9uIHBvcnQgJWQ6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9y
dCwgZSkpCisgICAgbG9nZ2luZy5pbmZvKCdTdGFydGVkIEhUVFAgc2VydmVyIG9uICVzLi4uJywg
c2VsZi5zZXJ2ZXJfYWRkcmVzcykKKworICBkZWYgY2xlYW51cChzZWxmKToKKyAgICB0cnk6Cisg
ICAgICBzZWxmLnNodXRkb3duKCkKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQsIGU6Cisg
ICAgICBwYXNzCisgICAgbG9nZ2luZy5pbmZvKCdTdG9wcGVkIEhUVFAgc2VydmVyJykKKworCitj
bGFzcyBIdHRwc0FyY2hpdmVIYW5kbGVyKEh0dHBBcmNoaXZlSGFuZGxlcik6CisgICIiIlNTTCBo
YW5kbGVyLiIiIgorCisgIGRlZiBnZXRfYXJjaGl2ZWRfaHR0cF9yZXF1ZXN0KHNlbGYpOgorICAg
IGxvZ2dpbmcuZGVidWcoJ0dldCByZXF1ZXN0IHZpYSBTU0wuJykKKyAgICByZXF1ZXN0ID0gSHR0
cEFyY2hpdmVIYW5kbGVyLmdldF9hcmNoaXZlZF9odHRwX3JlcXVlc3Qoc2VsZiwgaXNfc3NsPVRy
dWUpCisgICAgcmVxdWVzdC5pc19zc2wgPSBUcnVlCisgICAgcmV0dXJuIHJlcXVlc3QKKworY2xh
c3MgSHR0cHNQcm94eVNlcnZlcihIdHRwUHJveHlTZXJ2ZXIpOgorICAiIiJTU0wgc2VydmVyLiIi
IgorCisgIEhBTkRMRVIgPSBIdHRwc0FyY2hpdmVIYW5kbGVyCisKKyAgZGVmIF9faW5pdF9fKHNl
bGYsIGh0dHBfYXJjaGl2ZV9mZXRjaCwgY3VzdG9tX2hhbmRsZXJzLCBjZXJ0ZmlsZSwKKyAgICAg
ICAgICAgICAgIGhvc3Q9J2xvY2FsaG9zdCcsIHBvcnQ9NDQzKToKKyAgICBIdHRwUHJveHlTZXJ2
ZXIuX19pbml0X18oCisgICAgICAgIHNlbGYsIGh0dHBfYXJjaGl2ZV9mZXRjaCwgY3VzdG9tX2hh
bmRsZXJzLCBob3N0LCBwb3J0KQorICAgIHNlbGYuc29ja2V0ID0gc3NsLndyYXBfc29ja2V0KHNl
bGYuc29ja2V0LCBjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlKQorICAgICMgQW5jZXN0b3IgY2xhc3MsIGRlYW1vbnNl
cnZlciwgY2FsbHMgc2VydmVfZm9yZXZlcigpIGR1cmluZyBpdHMgX19pbml0X18uCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBUb29scy9XZWJQYWdlUmVwbGF5L2h0dHBwcm94eS5weQpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5
L2h0dHB6bGliLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvaHR0cHpsaWIu
cHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L2h0dHB6bGliLnB5CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJp
Z2h0IDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cisj
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisj
ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVu
bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg
c29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMg
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyIiIkFwcGx5IGd6aXAvZGVmbGF0ZSB0
byBzZXBhcmF0ZSBjaHVua3Mgb2YgZGF0YS4iIiIKKworaW1wb3J0IHN0cnVjdAoraW1wb3J0IHps
aWIKKworR1pJUF9IRUFERVIgPSAoCisgICAgJ1wwMzdcMjEzJyAgICAgICAgICAgICAjIG1hZ2lj
IGhlYWRlcgorICAgICdcMDEwJyAgICAgICAgICAgICAgICAgIyBjb21wcmVzc2lvbiBtZXRob2QK
KyAgICAnXDAwMCcgICAgICAgICAgICAgICAgICMgZmxhZ3MgKG5vbmUpCisgICAgJ1wwMDBcMDAw
XDAwMFwwMDAnICAgICAjIHBhY2tlZCB0aW1lICh1c2UgemVybykKKyAgICAnXDAwMicKKyAgICAn
XDM3NycpCisKKworZGVmIGNvbXByZXNzX2NodW5rcyh1bmNvbXByZXNzZWRfY2h1bmtzLCB1c2Vf
Z3ppcCk6CisgICIiIkNvbXByZXNzIGEgbGlzdCBvZiBkYXRhIHdpdGggZ3ppcCBvciBkZWZsYXRl
LgorCisgIFRoZSByZXR1cm5lZCBjaHVua3MgbWF5IGJlIHVzZWQgd2l0aCBIVFRQIGNodW5rZWQg
ZW5jb2RpbmcuCisKKyAgQXJnczoKKyAgICB1bmNvbXByZXNzZWRfY2h1bmtzOiBhIGxpc3Qgb2Yg
c3RyaW5ncworICAgICAgIChlLmcuIFsidGhpcyBpcyB0aGUgZmlyc3QgY2h1bmsiLCAiYW5kIHRo
ZSBzZWNvbmQiXSkKKyAgICB1c2VfZ3ppcDogaWYgVHJ1ZSwgY29tcHJlc3Mgd2l0aCBnemlwLiBP
dGhlcndpc2UsIHVzZSBkZWZsYXRlLgorCisgIFJldHVybnM6CisgICAgW2NvbXByZXNzZWRfY2h1
bmtfMSwgY29tcHJlc3NlZF9jaHVua18yLCAuLi5dCisgICIiIgorICBpZiB1c2VfZ3ppcDoKKyAg
ICBzaXplID0gMAorICAgIGNyYyA9IHpsaWIuY3JjMzIoIiIpICYgMHhmZmZmZmZmZkwKKyAgICBj
b21wcmVzc29yID0gemxpYi5jb21wcmVzc29iaigKKyAgICAgICAgNiwgemxpYi5ERUZMQVRFRCwg
LXpsaWIuTUFYX1dCSVRTLCB6bGliLkRFRl9NRU1fTEVWRUwsIDApCisgIGVsc2U6CisgICAgY29t
cHJlc3NvciA9IHpsaWIuY29tcHJlc3NvYmooKQorICBjb21wcmVzc2VkX2NodW5rcyA9IFtdCisg
IGxhc3RfaW5kZXggPSBsZW4odW5jb21wcmVzc2VkX2NodW5rcykgLSAxCisgIGZvciBpbmRleCwg
ZGF0YSBpbiBlbnVtZXJhdGUodW5jb21wcmVzc2VkX2NodW5rcyk6CisgICAgY2h1bmsgPSAnJwor
ICAgIGlmIHVzZV9nemlwOgorICAgICAgc2l6ZSArPSBsZW4oZGF0YSkKKyAgICAgIGNyYyA9IHps
aWIuY3JjMzIoZGF0YSwgY3JjKSAmIDB4ZmZmZmZmZmZMCisgICAgICBpZiBpbmRleCA9PSAwOgor
ICAgICAgICBjaHVuayArPSBHWklQX0hFQURFUgorICAgIGNodW5rICs9IGNvbXByZXNzb3IuY29t
cHJlc3MoZGF0YSkKKyAgICBpZiBpbmRleCA8IGxhc3RfaW5kZXg6CisgICAgICBjaHVuayArPSBj
b21wcmVzc29yLmZsdXNoKHpsaWIuWl9TWU5DX0ZMVVNIKQorICAgIGVsc2U6CisgICAgICBjaHVu
ayArPSAoY29tcHJlc3Nvci5mbHVzaCh6bGliLlpfRlVMTF9GTFVTSCkgKworICAgICAgICAgICAg
ICAgIGNvbXByZXNzb3IuZmx1c2goKSkKKyAgICAgIGlmIHVzZV9nemlwOgorICAgICAgICBjaHVu
ayArPSAoc3RydWN0LnBhY2soIjxMIiwgbG9uZyhjcmMpKSArCisgICAgICAgICAgICAgICAgICBz
dHJ1Y3QucGFjaygiPEwiLCBsb25nKHNpemUpKSkKKyAgICBjb21wcmVzc2VkX2NodW5rcy5hcHBl
bmQoY2h1bmspCisgIHJldHVybiBjb21wcmVzc2VkX2NodW5rcworCisKK2RlZiB1bmNvbXByZXNz
X2NodW5rcyhjb21wcmVzc2VkX2NodW5rcywgdXNlX2d6aXApOgorICAiIiJVbmNvbXByZXNzIGEg
bGlzdCBvZiBkYXRhIGNvbXByZXNzZWQgd2l0aCBnemlwIG9yIGRlZmxhdGUuCisKKyAgQXJnczoK
KyAgICBjb21wcmVzc2VkX2NodW5rczogYSBsaXN0IG9mIGNvbXByZXNzZWQgZGF0YQorICAgIHVz
ZV9nemlwOiBpZiBUcnVlLCB1bmNvbXByZXNzIHdpdGggZ3ppcC4gT3RoZXJ3aXNlLCB1c2UgZGVm
bGF0ZS4KKworICBSZXR1cm5zOgorICAgIFt1bmNvbXByZXNzZWRfY2h1bmtfMSwgdW5jb21wcmVz
c2VkX2NodW5rXzIsIC4uLl0KKyAgIiIiCisgIGlmIHVzZV9nemlwOgorICAgIGRlY29tcHJlc3Mg
PSB6bGliLmRlY29tcHJlc3NvYmooMTYgKyB6bGliLk1BWF9XQklUUykuZGVjb21wcmVzcworICBl
bHNlOgorICAgIGRlY29tcHJlc3MgPSB6bGliLmRlY29tcHJlc3NvYmooLXpsaWIuTUFYX1dCSVRT
KS5kZWNvbXByZXNzCisgIHJldHVybiBbZGVjb21wcmVzcyhjKSBmb3IgYyBpbiBjb21wcmVzc2Vk
X2NodW5rc10KClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1dlYlBhZ2VSZXBsYXkvaHR0cHps
aWIucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogVG9v
bHMvV2ViUGFnZVJlcGxheS9tb2NrLWFyY2hpdmUudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YlBhZ2VSZXBsYXkvbW9jay1hcmNoaXZlLnR4dAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBh
Z2VSZXBsYXkvbW9jay1hcmNoaXZlLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAor
R0VUJXd3dy56YXBwb3MuY29tJS8lJVsoJ2FjY2VwdC1lbmNvZGluZycsICdnemlwLGRlZmxhdGUn
KSwgKCdob3N0JywgJ3d3dy56YXBwb3MuY29tJyldCitHRVQld3d3LnphcHBvcy5jb20lL2Nzcy9w
cmludC4yMDExMDUyNTE0NTIzNy5jc3MlJVsoJ2FjY2VwdC1lbmNvZGluZycsICdnemlwLGRlZmxh
dGUnKSwgKCdob3N0JywgJ3d3dy56YXBwb3MuY29tJyldCitHRVQld3d3LnphcHBvcy5jb20lL2Zh
dmljb24uaWNvJSVbKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCxkZWZsYXRlJyksICgnaG9zdCcs
ICd3d3cuemFwcG9zLmNvbScpXQorR0VUJXd3dy56YXBwb3MuY29tJS9oeWRyYS9oeWRyYS5wLjIw
MTEwNjA3LmpzJSVbKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCxkZWZsYXRlJyksICgnaG9zdCcs
ICd3d3cuemFwcG9zLmNvbScpXQorR0VUJXd3dy56YXBwb3MuY29tJS9pbWdzL3NoYWRlYmcuMjAx
MTA1MjUxNDUyNDEucG5nJSVbKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCxkZWZsYXRlJyksICgn
aG9zdCcsICd3d3cuemFwcG9zLmNvbScpXQorR0VUJXd3dy5tc24uY29tJS8lJVsoJ2FjY2VwdC1l
bmNvZGluZycsICdnemlwLGRlZmxhdGUnKSwgKCdob3N0JywgJ3d3dy5tc24uY29tJyldCitHRVQl
d3d3Lm1zbi5jb20lLz9ldWlkPSZ1c2VyR3JvdXA9VzpkZWZhdWx0JlBNPXo6MSUlWygnYWNjZXB0
LWVuY29kaW5nJywgJ2d6aXAsZGVmbGF0ZScpLCAoJ2hvc3QnLCAnd3d3Lm1zbi5jb20nKSwgKCd4
LXJlcXVlc3RlZC13aXRoJywgJ1hNTEh0dHBSZXF1ZXN0JyldCitHRVQld3d3Lm1zbi5jb20lLz9l
dWlkPTM0MiUlWygnYWNjZXB0LWVuY29kaW5nJywgJ2d6aXAsZGVmbGF0ZScpLCAoJ2hvc3QnLCAn
d3d3Lm1zbi5jb20nKSwgKCd4LXJlcXVlc3RlZC13aXRoJywgJ1hNTEh0dHBSZXF1ZXN0JyldCitH
RVQld3d3LmFtYXpvbi5jb20lLyUlWygnYWNjZXB0LWVuY29kaW5nJywgJ2d6aXAsZGVmbGF0ZScp
LCAoJ2hvc3QnLCAnd3d3LmFtYXpvbi5jb20nKV0KK0dFVCV3d3cuZ29vZ2xlLmNvbSUvJSVbKCdh
Y2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCxkZWZsYXRlJyksICgnaG9zdCcsICd3d3cuZ29vZ2xlLmNv
bScpXQpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS9tb2NraHR0cHJlcXVlc3QucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS9tb2NraHR0cHJlcXVlc3QucHkJKHJldmlzaW9u
IDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L21vY2todHRwcmVxdWVzdC5weQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAy
MDEwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAg
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3Mg
cmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3
YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
ICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9y
IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisiIiJNb2NrIGluc3RhbmNlIG9mIEFyY2hpdmVk
SHR0cFJlcXVlc3QgdXNlZCBmb3IgdGVzdGluZy4iIiIKKworCitjbGFzcyBBcmNoaXZlZEh0dHBS
ZXF1ZXN0KG9iamVjdCk6CisgICIiIk1vY2sgaW5zdGFuY2Ugb2YgQXJjaGl2ZWRIdHRwUmVxdWVz
dCBpbiBIdHRwQXJjaGl2ZS4iIiIKKworICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZCwgaG9z
dCwgcGF0aCwgcmVxdWVzdF9ib2R5LCBoZWFkZXJzKToKKyAgICAiIiJJbml0aWFsaXplIGFuIEFy
Y2hpdmVkSHR0cFJlcXVlc3QuCisKKyAgICBBcmdzOgorICAgICAgY29tbWFuZDogYSBzdHJpbmcg
KGUuZy4gJ0dFVCcgb3IgJ1BPU1QnKS4KKyAgICAgIGhvc3Q6IGEgaG9zdCBuYW1lIChlLmcuICd3
d3cuZ29vZ2xlLmNvbScpLgorICAgICAgcGF0aDogYSByZXF1ZXN0IHBhdGggKGUuZy4gJy9zZWFy
Y2g/cT1kb2dzJykuCisgICAgICByZXF1ZXN0X2JvZHk6IGEgcmVxdWVzdCBib2R5IHN0cmluZyBm
b3IgYSBQT1NUIG9yIE5vbmUuCisgICAgICBoZWFkZXJzOiBbKGhlYWRlcjEsIHZhbHVlMSksIC4u
Ll0gbGlzdCBvZiB0dXBsZXMKKyAgICAiIiIKKyAgICBzZWxmLmNvbW1hbmQgPSBjb21tYW5kCisg
ICAgc2VsZi5ob3N0ID0gaG9zdAorICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICBzZWxmLnJlcXVl
c3RfYm9keSA9IHJlcXVlc3RfYm9keQorICAgIHNlbGYuaGVhZGVycyA9IGhlYWRlcnMKKyAgICBz
ZWxmLnRyaW1tZWRfaGVhZGVycyA9IGhlYWRlcnMKKworICBkZWYgX19zdHJfXyhzZWxmKToKKyAg
ICByZXR1cm4gJyVzICVzJXMgJXMnICUgKHNlbGYuY29tbWFuZCwgc2VsZi5ob3N0LCBzZWxmLnBh
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaW1tZWRfaGVhZGVycykKKwor
ICBkZWYgX19yZXByX18oc2VsZik6CisgICAgcmV0dXJuIHJlcHIoKHNlbGYuY29tbWFuZCwgc2Vs
Zi5ob3N0LCBzZWxmLnBhdGgsIHNlbGYucmVxdWVzdF9ib2R5LAorICAgICAgICAgICAgICAgICBz
ZWxmLnRyaW1tZWRfaGVhZGVycykpCisKKyAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICIiIlJl
dHVybiBhIGludGVnZXIgaGFzaCB0byB1c2UgZm9yIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRp
bmcgZGljdC4iIiIKKyAgICByZXR1cm4gaGFzaChyZXByKHNlbGYpKQorCisgIGRlZiBfX2VxX18o
c2VsZiwgb3RoZXIpOgorICAgICIiIkRlZmluZSB0aGUgX19lcV9fIG1ldGhvZCB0byBtYXRjaCB0
aGUgaGFzaCBiZWhhdmlvci4iIiIKKyAgICByZXR1cm4gcmVwcihzZWxmKSA9PSByZXByKG90aGVy
KQorCisgIGRlZiBtYXRjaGVzKHNlbGYsIGNvbW1hbmQ9Tm9uZSwgaG9zdD1Ob25lLCBwYXRoPU5v
bmUpOgorICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgdGhlIHJlcXVlc3QgbWF0Y2hlcyBhbGwgcGFy
YW1ldGVycy4iIiIKKyAgICByZXR1cm4gKChjb21tYW5kIGlzIE5vbmUgb3IgY29tbWFuZCA9PSBz
ZWxmLmNvbW1hbmQpIGFuZAorICAgICAgICAgICAgKGhvc3QgaXMgTm9uZSBvciBob3N0ID09IHNl
bGYuaG9zdCkgYW5kCisgICAgICAgICAgICAocGF0aCBpcyBOb25lIG9yIHBhdGggPT0gc2VsZi5w
YXRoKSkKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvcGVyc2lzdGVudG1peGluLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvcGVyc2lzdGVudG1peGluLnB5CShyZXZpc2lv
biAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS9wZXJzaXN0ZW50bWl4aW4ucHkJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQg
MjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAg
ICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
biAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZv
ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1p
dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCitpbXBvcnQgY1BpY2tsZQoraW1wb3J0IG9z
CisKK2NsYXNzIFBlcnNpc3RlbnRNaXhpbjoKKyAgIiIiTWl4aW4gY2xhc3Mgd2hpY2ggcHJvdmlk
ZXMgZmFjaWxpdGllcyBmb3IgcGVyc2lzdGluZyBhbmQgcmVzdG9yaW5nLiIiIgorCisgIEBjbGFz
c21ldGhvZAorICBkZWYgQXNzZXJ0V3JpdGFibGUoY2xzLCBmaWxlbmFtZSk6CisgICAgIiIiUmFp
c2VzIGFuIElPRXJyb3IgaWYgZmlsZW5hbWUgaXMgbm90IHdyaXRhYmxlLiIiIgorICAgIHBlcnNp
c3RfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkpCisgICAg
aWYgbm90IG9zLnBhdGguZXhpc3RzKHBlcnNpc3RfZGlyKToKKyAgICAgIHJhaXNlIElPRXJyb3Io
J0RpcmVjdG9yeSBkb2VzIG5vdCBleGlzdDogJXMnICUgcGVyc2lzdF9kaXIpCisgICAgaWYgb3Mu
cGF0aC5leGlzdHMoZmlsZW5hbWUpOgorICAgICAgaWYgbm90IG9zLmFjY2VzcyhmaWxlbmFtZSwg
b3MuV19PSyk6CisgICAgICAgIHJhaXNlIElPRXJyb3IoJ05lZWQgd3JpdGUgcGVybWlzc2lvbiBv
biBmaWxlOiAlcycgJSBmaWxlbmFtZSkKKyAgICBlbGlmIG5vdCBvcy5hY2Nlc3MocGVyc2lzdF9k
aXIsIG9zLldfT0spOgorICAgICAgcmFpc2UgSU9FcnJvcignTmVlZCB3cml0ZSBwZXJtaXNzaW9u
IG9uIGRpcmVjdG9yeTogJXMnICUgcGVyc2lzdF9kaXIpCisKKyAgQGNsYXNzbWV0aG9kCisgIGRl
ZiBMb2FkKGNscywgZmlsZW5hbWUpOgorICAgICIiIkxvYWQgYW4gaW5zdGFuY2UgZnJvbSBmaWxl
bmFtZS4iIiIKKyAgICByZXR1cm4gY1BpY2tsZS5sb2FkKG9wZW4oZmlsZW5hbWUsICdyYicpKQor
CisgIGRlZiBQZXJzaXN0KHNlbGYsIGZpbGVuYW1lKToKKyAgICAiIiJQZXJzaXN0IGFsbCBzdGF0
ZSB0byBmaWxlbmFtZS4iIiIKKyAgICBjUGlja2xlLmR1bXAoc2VsZiwgb3BlbihmaWxlbmFtZSwg
J3diJyksIGNQaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkKClByb3BlcnR5IGNoYW5nZXMgb246IFRv
b2xzL1dlYlBhZ2VSZXBsYXkvcGVyc2lzdGVudG1peGluLnB5Cl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvcGxhdGZvcm1z
ZXR0aW5ncy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3BsYXRmb3Jtc2V0
dGluZ3MucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3BsYXRmb3Jtc2V0
dGluZ3MucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTk5IEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMgQ29weXJpZ2h0IDIwMTAgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
ICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisj
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworaW1wb3J0
IGZpbGVpbnB1dAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHBsYXRmb3JtCitp
bXBvcnQgcmUKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitp
bXBvcnQgdGVtcGZpbGUKKworCitjbGFzcyBQbGF0Zm9ybVNldHRpbmdzRXJyb3IoRXhjZXB0aW9u
KToKKyAgIiIiTW9kdWxlIGNhdGNoLWFsbCBlcnJvci4iIiIKKyAgcGFzcworCisKK2NsYXNzIERu
c1JlYWRFcnJvcihQbGF0Zm9ybVNldHRpbmdzRXJyb3IpOgorICAiIiJSYWlzZWQgd2hlbiB1bmFi
bGUgdG8gcmVhZCBETlMgc2V0dGluZ3MuIiIiCisgIHBhc3MKKworCitjbGFzcyBEbnNVcGRhdGVF
cnJvcihQbGF0Zm9ybVNldHRpbmdzRXJyb3IpOgorICAiIiJSYWlzZWQgd2hlbiB1bmFibGUgdG8g
dXBkYXRlIEROUyBzZXR0aW5ncy4iIiIKKyAgcGFzcworCisKK2NsYXNzIE5vdEFkbWluaXN0cmF0
b3JFcnJvcihQbGF0Zm9ybVNldHRpbmdzRXJyb3IpOgorICAiIiJSYWlzZWQgd2hlbiBub3QgcnVu
bmluZyBhcyBhZG1pbmlzdHJhdG9yLiIiIgorICBwYXNzCisKKworZGVmIF9jaGVja19vdXRwdXQo
KmFyZ3MpOgorICAiIiJSdW4gUG9wZW4oKmFyZ3MpIGFuZCByZXR1cm4gaXRzIG91dHB1dCBhcyBh
IGJ5dGUgc3RyaW5nLgorCisgIFB5dGhvbiAyLjcgaGFzIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0
LiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lCisgIGV4Y2VwdCB0aGF0LCBhcyBhIGNvbnZl
bmllbmNlLCBhbGwgdGhlIHBvc2l0aW9uYWwgYXJncyBhcmUgdXNlZCBhcworICBjb21tYW5kIGFy
Z3VtZW50cy4KKworICBBcmdzOgorICAgICphcmdzOiBzZXF1ZW5jZSBvZiBwcm9ncmFtIGFyZ3Vt
ZW50cworICBSYWlzZXM6CisgICAgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgaWYgdGhl
IHByb2dyYW0gcmV0dXJucyBub24temVybyBleGl0IHN0YXR1cy4KKyAgUmV0dXJuczoKKyAgICBv
dXRwdXQgYXMgYSBieXRlIHN0cmluZy4KKyAgIiIiCisgIGNvbW1hbmRfYXJncyA9IFtzdHIoYSkg
Zm9yIGEgaW4gYXJnc10KKyAgbG9nZ2luZy5kZWJ1ZygnICcuam9pbihjb21tYW5kX2FyZ3MpKQor
ICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kX2FyZ3MsCisgICAgICBzdGRvdXQ9
c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgIG91dHB1dCA9IHBy
b2Nlc3MuY29tbXVuaWNhdGUoKVswXQorICByZXRjb2RlID0gcHJvY2Vzcy5wb2xsKCkKKyAgaWYg
cmV0Y29kZToKKyAgICByYWlzZSBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcihyZXRjb2Rl
LCBjb21tYW5kX2FyZ3MpCisgIHJldHVybiBvdXRwdXQKKworCitjbGFzcyBQbGF0Zm9ybVNldHRp
bmdzKG9iamVjdCk6CisgIF9JUEZXX1FVRVVFX1NMT1RTID0gMTAwCisgIF9DRVJUX0ZJTEUgPSAn
d3ByX2NlcnQucG0nCisKKyAgIyBTb21lIHBsYXRmb3JtcyBkbyBub3Qgc2hhcGUgdHJhZmZpYyB3
aXRoIHRoZSBsb29wYmFjayBhZGRyZXNzLgorICBfVVNFX1JFQUxfSVBfRk9SX1RSQUZGSUNfU0hB
UElORyA9IEZhbHNlCisKKyAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIHNlbGYub3JpZ2luYWxf
cHJpbWFyeV9kbnMgPSBOb25lCisgICAgc2VsZi5vcmlnaW5hbF9jd25kID0gTm9uZSAgIyBvcmln
aW5hbCBUQ1AgY29uZ2VzdGlvbiB3aW5kb3cKKworICBkZWYgZ2V0X3ByaW1hcnlfZG5zKHNlbGYp
OgorICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICBkZWYgX3NldF9wcmltYXJ5X2Ru
cyhzZWxmKToKKyAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgZGVmIGdldF9vcmln
aW5hbF9wcmltYXJ5X2RucyhzZWxmKToKKyAgICBpZiBzZWxmLm9yaWdpbmFsX3ByaW1hcnlfZG5z
IGlzIE5vbmU6CisgICAgICBzZWxmLm9yaWdpbmFsX3ByaW1hcnlfZG5zID0gc2VsZi5nZXRfcHJp
bWFyeV9kbnMoKQorICAgICAgbG9nZ2luZy5pbmZvKCdTYXZlZCBvcmlnaW5hbCBzeXN0ZW0gRE5T
ICglcyknLCBzZWxmLm9yaWdpbmFsX3ByaW1hcnlfZG5zKQorICAgIHJldHVybiBzZWxmLm9yaWdp
bmFsX3ByaW1hcnlfZG5zCisKKyAgZGVmIHNldF9wcmltYXJ5X2RucyhzZWxmLCBkbnMpOgorICAg
IHNlbGYuZ2V0X29yaWdpbmFsX3ByaW1hcnlfZG5zKCkKKyAgICBzZWxmLl9zZXRfcHJpbWFyeV9k
bnMoZG5zKQorICAgIGlmIHNlbGYuZ2V0X3ByaW1hcnlfZG5zKCkgPT0gZG5zOgorICAgICAgbG9n
Z2luZy5pbmZvKCdDaGFuZ2VkIHN5c3RlbSBETlMgdG8gJXMnLCBkbnMpCisgICAgZWxzZToKKyAg
ICAgIHJhaXNlIHNlbGYuX2dldF9kbnNfdXBkYXRlX2Vycm9yKCkKKworICBkZWYgcmVzdG9yZV9w
cmltYXJ5X2RucyhzZWxmKToKKyAgICBpZiBzZWxmLm9yaWdpbmFsX3ByaW1hcnlfZG5zIGlzIG5v
dCBOb25lOgorICAgICAgc2VsZi5zZXRfcHJpbWFyeV9kbnMoc2VsZi5vcmlnaW5hbF9wcmltYXJ5
X2RucykKKyAgICAgIHNlbGYub3JpZ2luYWxfcHJpbWFyeV9kbnMgPSBOb25lCisKKyAgZGVmIGdl
dF9jd25kKHNlbGYpOgorICAgIHJldHVybiBOb25lCisKKyAgZGVmIF9zZXRfY3duZChzZWxmLCBh
cmdzKToKKyAgICBwYXNzCisKKyAgZGVmIGdldF9vcmlnaW5hbF9jd25kKHNlbGYpOgorICAgIGlm
IG5vdCBzZWxmLm9yaWdpbmFsX2N3bmQ6CisgICAgICBzZWxmLm9yaWdpbmFsX2N3bmQgPSBzZWxm
LmdldF9jd25kKCkKKyAgICByZXR1cm4gc2VsZi5vcmlnaW5hbF9jd25kCisKKyAgZGVmIHNldF9j
d25kKHNlbGYsIGN3bmQpOgorICAgIHNlbGYuZ2V0X29yaWdpbmFsX2N3bmQoKQorICAgIHNlbGYu
X3NldF9jd25kKGN3bmQpCisgICAgaWYgc2VsZi5nZXRfY3duZCgpID09IGN3bmQ6CisgICAgICBs
b2dnaW5nLmluZm8oIkNoYW5nZWQgY3duZCB0byAlcyIsIGN3bmQpCisgICAgZWxzZToKKyAgICAg
IGxvZ2dpbmcuZXJyb3IoIlVuYWJsZSB0byB1cGRhdGUgY3duZCB0byAlcyIsIGN3bmQpCisKKyAg
ZGVmIHJlc3RvcmVfY3duZChzZWxmKToKKyAgICBpZiBzZWxmLm9yaWdpbmFsX2N3bmQgaXMgbm90
IE5vbmU6CisgICAgICBzZWxmLnNldF9jd25kKHNlbGYub3JpZ2luYWxfY3duZCkKKyAgICAgIHNl
bGYub3JpZ2luYWxfY3duZCA9IE5vbmUKKworICBkZWYgX2lwZndfYmluKHNlbGYpOgorICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICBkZWYgaXBmdyhzZWxmLCAqYXJncyk6CisgICAg
aXBmd19hcmdzID0gW3NlbGYuX2lwZndfYmluKCldICsgW3N0cihhKSBmb3IgYSBpbiBhcmdzXQor
ICAgIHJldHVybiBfY2hlY2tfb3V0cHV0KCppcGZ3X2FyZ3MpCisKKyAgZGVmIGdldF9pcGZ3X3F1
ZXVlX3Nsb3RzKHNlbGYpOgorICAgIHJldHVybiBzZWxmLl9JUEZXX1FVRVVFX1NMT1RTCisKKyAg
ZGVmIGdldF9zZXJ2ZXJfaXBfYWRkcmVzcyhzZWxmLCBpc19zZXJ2ZXJfbW9kZT1GYWxzZSk6Cisg
ICAgIiIiUmV0dXJucyB0aGUgSVAgYWRkcmVzcyB0byB1c2UgZm9yIGRuc3Byb3h5LCBodHRwcHJv
eHksIGFuZCBpcGZ3LiIiIgorICAgIGlmIGlzX3NlcnZlcl9tb2RlIG9yIHNlbGYuX1VTRV9SRUFM
X0lQX0ZPUl9UUkFGRklDX1NIQVBJTkc6CisgICAgICByZXR1cm4gc29ja2V0LmdldGhvc3RieW5h
bWUoc29ja2V0LmdldGhvc3RuYW1lKCkpCisgICAgcmV0dXJuICcxMjcuMC4wLjEnCisKKyAgZGVm
IGNvbmZpZ3VyZV9sb29wYmFjayhzZWxmKToKKyAgICAiIiIKKyAgICBDb25maWd1cmUgbG9vcGJh
Y2sgdG8gYmUgcmVhbGlzdGljLgorCisgICAgV2UgdXNlIGxvb3BiYWNrIGZvciBtdWNoIG9mIG91
ciB0ZXN0aW5nLCBhbmQgb24gc29tZSBzeXN0ZW1zLCBsb29wYmFjaworICAgIGJlaGF2ZXMgZGlm
ZmVyZW50bHkgZnJvbSByZWFsIGludGVyZmFjZXMuCisgICAgIiIiCisgICAgbG9nZ2luZy5lcnJv
cigiUGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBsb29wYmFjayBjb25maWd1cmF0aW9uLiIpCisK
KyAgZGVmIHVuY29uZmlndXJlX2xvb3BiYWNrKHNlbGYpOgorICAgIHBhc3MKKworICBkZWYgZ2V0
X3N5c3RlbV9sb2dnaW5nX2hhbmRsZXIoc2VsZik6CisgICAgIiIiUmV0dXJuIGEgaGFuZGxlciBm
b3IgdGhlIGxvZ2dpbmcgbW9kdWxlIChvcHRpb25hbCkuIiIiCisgICAgcmV0dXJuIE5vbmUKKwor
ICBkZWYgcGluZyhzZWxmLCBob3N0bmFtZSk6CisgICAgIiIiUGluZ3MgdGhlIGhvc3RuYW1lIGJ5
IGNhbGxpbmcgdGhlIE9TIHN5c3RlbSBwaW5nIGNvbW1hbmQuCisgICAgQWxzbyBzdG9yZXMgdGhl
IHJlc3VsdCBpbnRlcm5hbGx5LgorCisgICAgQXJnczoKKyAgICAgIGhvc3RuYW1lOiBob3N0bmFt
ZSBvZiB0aGUgc2VydmVyIHRvIGJlIHBpbmdlZAorCisgICAgUmV0dXJuczoKKyAgICAgIHJvdW5k
IHRyaXAgdGltZSB0byB0aGUgc2VydmVyIGluIHNlY29uZHMsIG9yIDAgaWYgdW5hYmxlIHRvIGNh
bGN1bGF0ZSBSVFQKKyAgICAiIiIKKyAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAg
ZGVmIHJlcnVuX2FzX2FkbWluaXN0cmF0b3Ioc2VsZik6CisgICAgIiIiSWYgbmVlZGVkLCByZXJ1
biB0aGUgcHJvZ3JhbSB3aXRoIGFkbWluaXN0cmF0aXZlIHByaXZpbGVnZXMuCisKKyAgICBSYWlz
ZXMgTm90QWRtaW5pc3RyYXRvckVycm9yIGlmIHVuYWJsZSB0byByZXJ1bi4KKyAgICAiIiIKKyAg
ICBwYXNzCisKKyAgZGVmIGNyZWF0ZV9jZXJ0ZmlsZShzZWxmKToKKyAgICAiIiJDcmVhdGUgYSBj
ZXJ0ZmlsZSBmb3Igc2VydmluZyBTU0wgdHJhZmZpYyBhbmQgcmV0dXJuIGl0cyBuYW1lLiIiIgor
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBQb3NpeFBsYXRmb3JtU2V0
dGluZ3MoUGxhdGZvcm1TZXR0aW5ncyk6CisgIFBJTkdfUEFUVEVSTiA9IHIncnR0IG1pbi9hdmcv
bWF4L21kZXYgPSBcZCtcLlxkKy8oXGQrXC5cZCspL1xkK1wuXGQrL1xkK1wuXGQrJworCisgIGRl
ZiBfZ2V0X2Ruc191cGRhdGVfZXJyb3Ioc2VsZik6CisgICAgcmV0dXJuIERuc1VwZGF0ZUVycm9y
KCdEaWQgeW91IHJ1biB1bmRlciBzdWRvPycpCisKKyAgZGVmIF9zeXNjdGwoc2VsZiwgKmFyZ3Mp
OgorICAgIHN5c2N0bCA9ICcvdXNyL3NiaW4vc3lzY3RsJworICAgIGlmIG5vdCBvcy5wYXRoLmV4
aXN0cyhzeXNjdGwpOgorICAgICAgc3lzY3RsID0gJy9zYmluL3N5c2N0bCcKKyAgICBzeXNjdGwg
PSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICBbJ3N5c2N0bCddICsgW3N0cihhKSBmb3IgYSBp
biBhcmdzXSwKKyAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vz
cy5QSVBFKQorICAgIHN0ZG91dCA9IHN5c2N0bC5jb21tdW5pY2F0ZSgpWzBdCisgICAgcmV0dXJu
IHN5c2N0bC5yZXR1cm5jb2RlLCBzdGRvdXQKKworICBkZWYgaGFzX3N5c2N0bChzZWxmLCBuYW1l
KToKKyAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnaGFzX3N5c2N0bF9jYWNoZScpOgorICAgICAg
c2VsZi5oYXNfc3lzY3RsX2NhY2hlID0ge30KKyAgICBpZiBuYW1lIG5vdCBpbiBzZWxmLmhhc19z
eXNjdGxfY2FjaGU6CisgICAgICBzZWxmLmhhc19zeXNjdGxfY2FjaGVbbmFtZV0gPSBzZWxmLl9z
eXNjdGwobmFtZSlbMF0gPT0gMAorICAgIHJldHVybiBzZWxmLmhhc19zeXNjdGxfY2FjaGVbbmFt
ZV0KKworICBkZWYgc2V0X3N5c2N0bChzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgcnYgPSBzZWxm
Ll9zeXNjdGwoJyVzPSVzJyAlIChuYW1lLCB2YWx1ZSkpWzBdCisgICAgaWYgcnYgIT0gMDoKKyAg
ICAgIGxvZ2dpbmcuZXJyb3IoIlVuYWJsZSB0byBzZXQgc3lzY3RsICVzOiAlcyIsIG5hbWUsIHJ2
KQorCisgIGRlZiBnZXRfc3lzY3RsKHNlbGYsIG5hbWUpOgorICAgIHJ2LCB2YWx1ZSA9IHNlbGYu
X3N5c2N0bCgnLW4nLCBuYW1lKQorICAgIGlmIHJ2ID09IDA6CisgICAgICByZXR1cm4gdmFsdWUK
KyAgICBlbHNlOgorICAgICAgbG9nZ2luZy5lcnJvcigiVW5hYmxlIHRvIGdldCBzeXNjdGwgJXM6
ICVzIiwgbmFtZSwgcnYpCisgICAgICByZXR1cm4gTm9uZQorCisgIGRlZiBwaW5nKHNlbGYsIGhv
c3RuYW1lKToKKyAgICAiIiJQaW5ncyB0aGUgaG9zdG5hbWUgYnkgY2FsbGluZyB0aGUgT1Mgc3lz
dGVtIHBpbmcgY29tbWFuZC4KKyAgICBBbHNvIHN0b3JlcyB0aGUgcmVzdWx0IGludGVybmFsbHku
CisKKyAgICBBcmdzOgorICAgICAgaG9zdG5hbWU6IGhvc3RuYW1lIG9mIHRoZSBzZXJ2ZXIgdG8g
YmUgcGluZ2VkCisKKyAgICBSZXR1cm5zOgorICAgICAgcm91bmQgdHJpcCB0aW1lIHRvIHRoZSBz
ZXJ2ZXIgaW4gbWlsbGlzZWNvbmRzLCBvciAwIGlmIHVuYXZhaWxhYmxlCisgICAgIiIiCisgICAg
cnR0ID0gMAorICAgIHRyeToKKyAgICAgICMgUmVnZXggbWF0Y2hpbmcgbWF5IGNoYW5nZSBkZXBl
bmRpbmcgb24gdmVyc2lvbnMgb2YgcGluZz8gKHVudmVyaWZpZWQpCisgICAgICBwcm9jID0gc3Vi
cHJvY2Vzcy5Qb3BlbihbJ3BpbmcnLCAnLWMnLCAnMycsICctaScsICcwLjInLCBob3N0bmFtZV0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBz
dGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgb3V0cHV0LCBlcnJvcnMgPSBwcm9jLmNvbW11
bmljYXRlKCkKKworICAgICAgcmVzdWx0ID0gcmUuc2VhcmNoKHNlbGYuUElOR19QQVRURVJOLCBv
dXRwdXQpCisgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ1Vu
YWJsZSB0byBwaW5nICVzOiAnLCBob3N0bmFtZSkKKyAgICAgIGVsc2U6CisgICAgICAgIGF2ZXJh
Z2UgPSByZXN1bHQuZ3JvdXBzKCkKKyAgICAgICAgcnR0ID0gZmxvYXQoYXZlcmFnZVswXSkKKyAg
ICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgIGxvZ2dpbmcuY3JpdGljYWwoJ1N5c3RlbSBlcnJv
ciB3aGlsZSB0cnlpbmcgdG8gcGluZyAlczogJXMnLCBob3N0bmFtZSwgZSkKKyAgICBleGNlcHQg
VmFsdWVFcnJvciwgZToKKyAgICAgIGxvZ2dpbmcuY3JpdGljYWwoJ1N1YnByb2Nlc3MgY2FsbGVk
IHdpdGggaW52YWxpZCBhcmd1bWVudHM6ICVzJyxlKQorICAgIHJldHVybiBydHQKKworICBkZWYg
cmVydW5fYXNfYWRtaW5pc3RyYXRvcihzZWxmKToKKyAgICAiIiJJZiBuZWVkZWQsIHJlcnVuIHRo
ZSBwcm9ncmFtIHdpdGggYWRtaW5pc3RyYXRpdmUgcHJpdmlsZWdlcy4KKworICAgIFJhaXNlcyBO
b3RBZG1pbmlzdHJhdG9yRXJyb3IgaWYgdW5hYmxlIHRvIHJlcnVuLgorICAgICIiIgorICAgIGlm
IG9zLmdldGV1aWQoKSAhPSAwOgorICAgICAgbG9nZ2luZy53YXJuKCJSZXJ1bm5pbmcgd2l0aCBz
dWRvOiAlcyIsIHN5cy5hcmd2KQorICAgICAgb3MuZXhlY3YoJy91c3IvYmluL3N1ZG8nLCBbJy0t
J10gKyBzeXMuYXJndikKKworICBkZWYgY3JlYXRlX2NlcnRmaWxlKHNlbGYpOgorICAgICIiIkNy
ZWF0ZSBhIGNlcnRmaWxlIGZvciBzZXJ2aW5nIFNTTCB0cmFmZmljIGFuZCByZXR1cm4gaXRzIG5h
bWUuIiIiCisgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0dGVtcGRpcigp
LCBzZWxmLl9DRVJUX0ZJTEUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToK
KyAgICAgIF9jaGVja19vdXRwdXQoCisgICAgICAgICAgJy91c3IvYmluL29wZW5zc2wnLCAncmVx
JywgJy1iYXRjaCcsICctbmV3JywgJy14NTA5JywgJy1kYXlzJywgJzM2NScsCisgICAgICAgICAg
Jy1ub2RlcycsICctb3V0JywgZmlsZW5hbWUsICcta2V5b3V0JywgZmlsZW5hbWUpCisgICAgcmV0
dXJuIGZpbGVuYW1lCisKKyAgZGVmIF9pcGZ3X2JpbihzZWxmKToKKyAgICBmb3IgaXBmdyBpbiBb
Jy91c3IvbG9jYWwvc2Jpbi9pcGZ3JywgJy9zYmluL2lwZncnXToKKyAgICAgIGlmIG9zLnBhdGgu
ZXhpc3RzKGlwZncpOgorICAgICAgICByZXR1cm4gaXBmdworICAgIHJhaXNlIFBsYXRmb3JtU2V0
dGluZ3NFcnJvcigiaXBmdyBub3QgZm91bmQuIikKKworY2xhc3MgT3N4UGxhdGZvcm1TZXR0aW5n
cyhQb3NpeFBsYXRmb3JtU2V0dGluZ3MpOgorICBMT0NBTF9TTE9XU1RBUlRfTUlCX05BTUUgPSAn
bmV0LmluZXQudGNwLmxvY2FsX3Nsb3dzdGFydF9mbGlnaHRzaXplJworCisgIGRlZiBfc2N1dGls
KHNlbGYsIGNtZCk6CisgICAgc2N1dGlsID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgWycv
dXNyL3NiaW4vc2N1dGlsJ10sIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nl
c3MuUElQRSkKKyAgICByZXR1cm4gc2N1dGlsLmNvbW11bmljYXRlKGNtZClbMF0KKworICBkZWYg
X2lmY29uZmlnKHNlbGYsICphcmdzKToKKyAgICByZXR1cm4gX2NoZWNrX291dHB1dCgnL3NiaW4v
aWZjb25maWcnLCAqYXJncykKKworICBkZWYgc2V0X3N5c2N0bChzZWxmLCBuYW1lLCB2YWx1ZSk6
CisgICAgcnYgPSBzZWxmLl9zeXNjdGwoJy13JywgJyVzPSVzJyAlIChuYW1lLCB2YWx1ZSkpWzBd
CisgICAgaWYgcnYgIT0gMDoKKyAgICAgIGxvZ2dpbmcuZXJyb3IoIlVuYWJsZSB0byBzZXQgc3lz
Y3RsICVzOiAlcyIsIG5hbWUsIHJ2KQorCisgIGRlZiBfZ2V0X2Ruc19zZXJ2aWNlX2tleShzZWxm
KToKKyAgICAjIDxkaWN0aW9uYXJ5PiB7CisgICAgIyAgIFByaW1hcnlJbnRlcmZhY2UgOiBlbjEK
KyAgICAjICAgUHJpbWFyeVNlcnZpY2UgOiA4ODI0NDUyQy1GRUQ0LTRDMDktOTI1Ni00MEZCMTQ2
NzM5RTAKKyAgICAjICAgUm91dGVyIDogMTkyLjE2OC4xLjEKKyAgICAjIH0KKyAgICBvdXRwdXQg
PSBzZWxmLl9zY3V0aWwoJ3Nob3cgU3RhdGU6L05ldHdvcmsvR2xvYmFsL0lQdjQnKQorICAgIGxp
bmVzID0gb3V0cHV0LnNwbGl0KCdcbicpCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICBr
ZXlfdmFsdWUgPSBsaW5lLnNwbGl0KCcgOiAnKQorICAgICAgaWYga2V5X3ZhbHVlWzBdID09ICcg
IFByaW1hcnlTZXJ2aWNlJzoKKyAgICAgICAgcmV0dXJuICdTdGF0ZTovTmV0d29yay9TZXJ2aWNl
LyVzL0ROUycgJSBrZXlfdmFsdWVbMV0KKyAgICByYWlzZSBzZWxmLl9nZXRfZG5zX3VwZGF0ZV9l
cnJvcigpCisKKyAgZGVmIGdldF9wcmltYXJ5X2RucyhzZWxmKToKKyAgICAjIDxkaWN0aW9uYXJ5
PiB7CisgICAgIyAgIFNlcnZlckFkZHJlc3NlcyA6IDxhcnJheT4geworICAgICMgICAgIDAgOiAx
OTguMzUuMjMuMgorICAgICMgICAgIDEgOiAxOTguMzIuNTYuMzIKKyAgICAjICAgfQorICAgICMg
ICBEb21haW5OYW1lIDogYXBwbGUuY28udWsKKyAgICAjIH0KKyAgICBvdXRwdXQgPSBzZWxmLl9z
Y3V0aWwoJ3Nob3cgJXMnICUgc2VsZi5fZ2V0X2Ruc19zZXJ2aWNlX2tleSgpKQorICAgIHByaW1h
cnlfbGluZSA9IG91dHB1dC5zcGxpdCgnXG4nKVsyXQorICAgIGxpbmVfcGFydHMgPSBwcmltYXJ5
X2xpbmUuc3BsaXQoJyAnKQorICAgIHJldHVybiBsaW5lX3BhcnRzWy0xXQorCisgIGRlZiBfc2V0
X3ByaW1hcnlfZG5zKHNlbGYsIGRucyk6CisgICAgY29tbWFuZCA9ICdcbicuam9pbihbCisgICAg
ICAnZC5pbml0JywKKyAgICAgICdkLmFkZCBTZXJ2ZXJBZGRyZXNzZXMgKiAlcycgJSBkbnMsCisg
ICAgICAnc2V0ICVzJyAlIHNlbGYuX2dldF9kbnNfc2VydmljZV9rZXkoKQorICAgIF0pCisgICAg
c2VsZi5fc2N1dGlsKGNvbW1hbmQpCisKKyAgZGVmIGdldF9jd25kKHNlbGYpOgorICAgIHJldHVy
biBpbnQoc2VsZi5nZXRfc3lzY3RsKHNlbGYuTE9DQUxfU0xPV1NUQVJUX01JQl9OQU1FKSkKKwor
ICBkZWYgX3NldF9jd25kKHNlbGYsIHNpemUpOgorICAgIHNlbGYuc2V0X3N5c2N0bChzZWxmLkxP
Q0FMX1NMT1dTVEFSVF9NSUJfTkFNRSwgc2l6ZSkKKworICBkZWYgZ2V0X2xvb3BiYWNrX210dShz
ZWxmKToKKyAgICBjb25maWcgPSBzZWxmLl9pZmNvbmZpZygnbG8wJykKKyAgICBtYXRjaCA9IHJl
LnNlYXJjaChyJ1xzbXR1XHMrKFxkKyknLCBjb25maWcpCisgICAgaWYgbWF0Y2g6CisgICAgICBy
ZXR1cm4gaW50KG1hdGNoLmdyb3VwKDEpKQorICAgIHJldHVybiBOb25lCisKKyAgZGVmIGNvbmZp
Z3VyZV9sb29wYmFjayhzZWxmKToKKyAgICAiIiJDb25maWd1cmUgbG9vcGJhY2sgdG8gdXNlIHJl
YXNvbmFibHkgc2l6ZWQgZnJhbWVzLgorCisgICAgT1MgWCB1c2VzIGp1bWJvIGZyYW1lcyBieSBk
ZWZhdWx0ICgxNktCKS4KKyAgICAiIiIKKyAgICBUQVJHRVRfTE9PUEJBQ0tfTVRVID0gMTUwMAor
ICAgIHNlbGYub3JpZ2luYWxfbG9vcGJhY2tfbXR1ID0gc2VsZi5nZXRfbG9vcGJhY2tfbXR1KCkK
KyAgICBpZiBzZWxmLm9yaWdpbmFsX2xvb3BiYWNrX210dSA9PSBUQVJHRVRfTE9PUEJBQ0tfTVRV
OgorICAgICAgc2VsZi5vcmlnaW5hbF9sb29wYmFja19tdHUgPSBOb25lCisgICAgaWYgc2VsZi5v
cmlnaW5hbF9sb29wYmFja19tdHUgaXMgbm90IE5vbmU6CisgICAgICBzZWxmLl9pZmNvbmZpZygn
bG8wJywgJ210dScsIFRBUkdFVF9MT09QQkFDS19NVFUpCisgICAgICBsb2dnaW5nLmRlYnVnKCdT
ZXQgbG9vcGJhY2sgTVRVIHRvICVkICh3YXMgJWQpJywKKyAgICAgICAgICAgICAgICAgICAgVEFS
R0VUX0xPT1BCQUNLX01UVSwgc2VsZi5vcmlnaW5hbF9sb29wYmFja19tdHUpCisgICAgZWxzZToK
KyAgICAgIGxvZ2dpbmcuZXJyb3IoJ1VuYWJsZSB0byByZWFkIGxvb3BiYWNrIG10dS4gU2V0dGlu
ZyBsZWZ0IHVuY2hhbmdlZC4nKQorCisgIGRlZiB1bmNvbmZpZ3VyZV9sb29wYmFjayhzZWxmKToK
KyAgICBpZiBzZWxmLm9yaWdpbmFsX2xvb3BiYWNrX210dSBpcyBub3QgTm9uZToKKyAgICAgIHNl
bGYuX2lmY29uZmlnKCdsbzAnLCAnbXR1Jywgc2VsZi5vcmlnaW5hbF9sb29wYmFja19tdHUpCisg
ICAgICBsb2dnaW5nLmRlYnVnKCdSZXN0b3JlIGxvb3BiYWNrIE1UVSB0byAlZCcsIHNlbGYub3Jp
Z2luYWxfbG9vcGJhY2tfbXR1KQorCisKK2NsYXNzIExpbnV4UGxhdGZvcm1TZXR0aW5ncyhQb3Np
eFBsYXRmb3JtU2V0dGluZ3MpOgorICAiIiJUaGUgZm9sbG93aW5nIHRocmVhZCByZWNvbW1lbmRz
IGEgd2F5IHRvIHVwZGF0ZSBETlMgb24gTGludXg6CisKKyAgaHR0cDovL3VidW50dWZvcnVtcy5v
cmcvc2hvd3RocmVhZC5waHA/dD0zMzc1NTMKKworICAgICAgICAgc3VkbyBjcCAvZXRjL2RoY3Az
L2RoY2xpZW50LmNvbmYgL2V0Yy9kaGNwMy9kaGNsaWVudC5jb25mLmJhaworICAgICAgICAgc3Vk
byBnZWRpdCAvZXRjL2RoY3AzL2RoY2xpZW50LmNvbmYKKyAgICAgICAgICNwcmVwZW5kIGRvbWFp
bi1uYW1lLXNlcnZlcnMgMTI3LjAuMC4xOworICAgICAgICAgcHJlcGVuZCBkb21haW4tbmFtZS1z
ZXJ2ZXJzIDIwOC42Ny4yMjIuMjIyLCAyMDguNjcuMjIwLjIyMDsKKworICAgICAgICAgcHJlcGVu
ZCBkb21haW4tbmFtZS1zZXJ2ZXJzIDIwOC42Ny4yMjIuMjIyLCAyMDguNjcuMjIwLjIyMDsKKyAg
ICAgICAgIHJlcXVlc3Qgc3VibmV0LW1hc2ssIGJyb2FkY2FzdC1hZGRyZXNzLCB0aW1lLW9mZnNl
dCwgcm91dGVycywKKyAgICAgICAgICAgICBkb21haW4tbmFtZSwgZG9tYWluLW5hbWUtc2VydmVy
cywgaG9zdC1uYW1lLAorICAgICAgICAgICAgIG5ldGJpb3MtbmFtZS1zZXJ2ZXJzLCBuZXRiaW9z
LXNjb3BlOworICAgICAgICAgI3JlcXVpcmUgc3VibmV0LW1hc2ssIGRvbWFpbi1uYW1lLXNlcnZl
cnM7CisKKyAgICAgICAgIHN1ZG8vZXRjL2luaXQuZC9uZXR3b3JraW5nIHJlc3RhcnQKKworICBU
aGUgY29kZSBiZWxvdyBkb2VzIG5vdCB0cnkgdG8gY2hhbmdlIGRjaHAgYW5kIGRvZXMgbm90IHJl
c3RhcnQgbmV0d29ya2luZy4KKyAgVXBkYXRlIHRoaXMgYXMgbmVlZGVkIHRvIG1ha2UgaXQgbW9y
ZSByb2J1c3Qgb24gbW9yZSBzeXN0ZW1zLgorICAiIiIKKyAgUkVTT0xWX0NPTkYgPSAnL2V0Yy9y
ZXNvbHYuY29uZicKKyAgVENQX0lOSVRfQ1dORCA9ICduZXQuaXB2NC50Y3BfaW5pdF9jd25kJwor
ICBUQ1BfQkFTRV9NU1MgPSAnbmV0LmlwdjQudGNwX2Jhc2VfbXNzJworICBUQ1BfTVRVX1BST0JJ
TkcgPSAnbmV0LmlwdjQudGNwX210dV9wcm9iaW5nJworICBfSVBGV19RVUVVRV9TTE9UUyA9IDUw
MAorCisgIGRlZiBnZXRfcHJpbWFyeV9kbnMoc2VsZik6CisgICAgdHJ5OgorICAgICAgcmVzb2x2
X2ZpbGUgPSBvcGVuKHNlbGYuUkVTT0xWX0NPTkYpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAg
ICByYWlzZSBEbnNSZWFkRXJyb3IoKQorICAgIGZvciBsaW5lIGluIHJlc29sdl9maWxlOgorICAg
ICAgaWYgbGluZS5zdGFydHN3aXRoKCduYW1lc2VydmVyICcpOgorICAgICAgICByZXR1cm4gbGlu
ZS5zcGxpdCgpWzFdCisgICAgcmFpc2UgRG5zUmVhZEVycm9yKCkKKworICBkZWYgX3NldF9wcmlt
YXJ5X2RucyhzZWxmLCBkbnMpOgorICAgICIiIlJlcGxhY2UgdGhlIGZpcnN0IG5hbWVzZXJ2ZXIg
ZW50cnkgd2l0aCB0aGUgb25lIGdpdmVuLiIiIgorICAgIHRyeToKKyAgICAgIHNlbGYuX3dyaXRl
X3Jlc29sdmVfY29uZihkbnMpCisgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICBpZiAnUGVy
bWlzc2lvbiBkZW5pZWQnIGluIGU6CisgICAgICAgIHJhaXNlIHNlbGYuX2dldF9kbnNfdXBkYXRl
X2Vycm9yKCkKKyAgICAgIHJhaXNlCisKKyAgZGVmIF93cml0ZV9yZXNvbHZlX2NvbmYoc2VsZiwg
ZG5zKToKKyAgICBpc19maXJzdF9uYW1lc2VydmVyX3JlcGxhY2VkID0gRmFsc2UKKyAgICAjIFRo
ZSBmaWxlaW5wdXQgbW9kdWxlIHVzZXMgc3lzLnN0ZG91dCBhcyB0aGUgZWRpdGVkIGZpbGUgb3V0
cHV0LgorICAgIGZvciBsaW5lIGluIGZpbGVpbnB1dC5pbnB1dChzZWxmLlJFU09MVl9DT05GLCBp
bnBsYWNlPTEsIGJhY2t1cD0nLmJhaycpOgorICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCduYW1l
c2VydmVyICcpIGFuZCBub3QgaXNfZmlyc3RfbmFtZXNlcnZlcl9yZXBsYWNlZDoKKyAgICAgICAg
cHJpbnQgJ25hbWVzZXJ2ZXIgJXMnICUgZG5zCisgICAgICAgIGlzX2ZpcnN0X25hbWVzZXJ2ZXJf
cmVwbGFjZWQgPSBUcnVlCisgICAgICBlbHNlOgorICAgICAgICBwcmludCBsaW5lLAorICAgIGlm
IG5vdCBpc19maXJzdF9uYW1lc2VydmVyX3JlcGxhY2VkOgorICAgICAgcmFpc2UgRG5zVXBkYXRl
RXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGEgc3VpdGFibGUgbmFtZXNlcnZlciBlbnRyeSBpbiAlcycg
JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5SRVNPTFZfQ09ORikKKworICBkZWYg
Z2V0X2N3bmQoc2VsZik6CisgICAgaWYgc2VsZi5oYXNfc3lzY3RsKHNlbGYuVENQX0lOSVRfQ1dO
RCk6CisgICAgICByZXR1cm4gc2VsZi5nZXRfc3lzY3RsKHNlbGYuVENQX0lOSVRfQ1dORCkKKyAg
ICBlbHNlOgorICAgICAgcmV0dXJuIE5vbmUKKworICBkZWYgX3NldF9jd25kKHNlbGYsIGFyZ3Mp
OgorICAgIGlmIHNlbGYuaGFzX3N5c2N0bChzZWxmLlRDUF9JTklUX0NXTkQpOgorICAgICAgc2Vs
Zi5zZXRfc3lzY3RsKHNlbGYuVENQX0lOSVRfQ1dORCwgc3RyKGFyZ3MpKQorCisKKyAgZGVmIGNv
bmZpZ3VyZV9sb29wYmFjayhzZWxmKToKKyAgICAiIiIKKyAgICBMaW51eCB3aWxsIHVzZSBqdW1i
byBmcmFtZXMgYnkgZGVmYXVsdCAoMTZLQiksIHVzaW5nIHRoZSBjb21iaW5hdGlvbgorICAgIG9m
IE1UVSBwcm9iaW5nIGFuZCBhIGJhc2UgTVNTIG1ha2VzIGl0IHVzZSBub3JtYWwgc2l6ZWQgcGFj
a2V0cy4KKworICAgIFRoZSByZWFzb24gdGhpcyB3b3JrcyBpcyBiZWNhdXNlIHRjcF9iYXNlX21z
cyBpcyBvbmx5IHVzZWQgd2hlbiBNVFUKKyAgICBwcm9iaW5nIGlzIGVuYWJsZWQuICBBbmQgc2lu
Y2Ugd2UncmUgdXNpbmcgdGhlIG1heCB2YWx1ZSwgaXQgd2lsbAorICAgIGFsd2F5cyB1c2UgdGhl
IHJlYXNvbmFibGUgc2l6ZS4gIFRoaXMgaXMgcmVsZXZhbnQgZm9yIHNlcnZlci1zaWRlIHJlYWxp
c20uCisgICAgVGhlIGNsaWVudC1zaWRlIHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gdGhlIGNsaWVu
dCBUQ1Agc3RhY2sgY29uZmlnLgorICAgICIiIgorICAgIEVOQUJMRV9NVFVfUFJPQklORyA9IDIK
KyAgICBUQ1BfRlVMTF9NU1MgPSAxNDYwCisgICAgc2VsZi5zYXZlZF90Y3BfbXR1X3Byb2Jpbmcg
PSBzZWxmLmdldF9zeXNjdGwoc2VsZi5UQ1BfTVRVX1BST0JJTkcpCisgICAgc2VsZi5zZXRfc3lz
Y3RsKHNlbGYuVENQX01UVV9QUk9CSU5HLCBFTkFCTEVfTVRVX1BST0JJTkcpCisgICAgc2VsZi5z
YXZlZF90Y3BfYmFzZV9tc3MgPSBzZWxmLmdldF9zeXNjdGwoc2VsZi5UQ1BfQkFTRV9NU1MpCisg
ICAgc2VsZi5zZXRfc3lzY3RsKHNlbGYuVENQX0JBU0VfTVNTLCBUQ1BfRlVMTF9NU1MpCisKKyAg
ZGVmIHVuY29uZmlndXJlX2xvb3BiYWNrKHNlbGYpOgorICAgIGlmIHNlbGYuc2F2ZWRfdGNwX210
dV9wcm9iaW5nOgorICAgICAgc2VsZi5zZXRfc3lzY3RsKHNlbGYuVENQX01UVV9QUk9CSU5HLCBz
ZWxmLnNhdmVkX3RjcF9tdHVfcHJvYmluZykKKyAgICBpZiBzZWxmLnNhdmVkX3RjcF9iYXNlX21z
czoKKyAgICAgIHNlbGYuc2V0X3N5c2N0bChzZWxmLlRDUF9CQVNFX01TUywgc2VsZi5zYXZlZF90
Y3BfYmFzZV9tc3MpCisKK2NsYXNzIFdpbmRvd3NQbGF0Zm9ybVNldHRpbmdzKFBsYXRmb3JtU2V0
dGluZ3MpOgorICBfVVNFX1JFQUxfSVBfRk9SX1RSQUZGSUNfU0hBUElORyA9IFRydWUKKworICBk
ZWYgX2dldF9kbnNfdXBkYXRlX2Vycm9yKHNlbGYpOgorICAgIHJldHVybiBEbnNVcGRhdGVFcnJv
cignRGlkIHlvdSBydW4gYXMgYWRtaW5pc3RyYXRvcj8nKQorCisgIGRlZiBfbmV0c2hfc2hvd19k
bnMoc2VsZik6CisgICAgIiIiUmV0dXJuIEROUyBpbmZvcm1hdGlvbjoKKworICAgIEV4YW1wbGUg
b3V0cHV0OgorICAgICAgICBDb25maWd1cmF0aW9uIGZvciBpbnRlcmZhY2UgIkxvY2FsIEFyZWEg
Q29ubmVjdGlvbiAzIgorICAgICAgICBETlMgc2VydmVycyBjb25maWd1cmVkIHRocm91Z2ggREhD
UDogIE5vbmUKKyAgICAgICAgUmVnaXN0ZXIgd2l0aCB3aGljaCBzdWZmaXg6ICAgICAgICAgICBQ
cmltYXJ5IG9ubHkKKworICAgICAgICBDb25maWd1cmF0aW9uIGZvciBpbnRlcmZhY2UgIldpcmVs
ZXNzIE5ldHdvcmsgQ29ubmVjdGlvbiAyIgorICAgICAgICBETlMgc2VydmVycyBjb25maWd1cmVk
IHRocm91Z2ggREhDUDogIDE5Mi4xNjguMS4xCisgICAgICAgIFJlZ2lzdGVyIHdpdGggd2hpY2gg
c3VmZml4OiAgICAgICAgICAgUHJpbWFyeSBvbmx5CisgICAgIiIiCisgICAgcmV0dXJuIF9jaGVj
a19vdXRwdXQoJ25ldHNoJywgJ2ludGVyZmFjZScsICdpcCcsICdzaG93JywgJ2RucycpCisKKyAg
ZGVmIGdldF9wcmltYXJ5X2RucyhzZWxmKToKKyAgICBtYXRjaCA9IHJlLnNlYXJjaChyJzpccyso
XGQrXC5cZCtcLlxkK1wuXGQrKScsIHNlbGYuX25ldHNoX3Nob3dfZG5zKCkpCisgICAgcmV0dXJu
IG1hdGNoIGFuZCBtYXRjaC5ncm91cCgxKSBvciBOb25lCisKKyAgZGVmIF9zZXRfcHJpbWFyeV9k
bnMoc2VsZiwgZG5zKToKKyAgICB2YnMgPSAiIiIKK1NldCBvYmpXTUlTZXJ2aWNlID0gR2V0T2Jq
ZWN0KCBfCisgICAid2lubWdtdHM6e2ltcGVyc29uYXRpb25MZXZlbD1pbXBlcnNvbmF0ZX0hXFxc
XC5cXHJvb3RcXGNpbXYyIikKK1NldCBjb2xOZXRDYXJkcyA9IG9ialdNSVNlcnZpY2UuRXhlY1F1
ZXJ5KCBfCisgICAgIlNlbGVjdCAqIEZyb20gV2luMzJfTmV0d29ya0FkYXB0ZXJDb25maWd1cmF0
aW9uIFdoZXJlIElQRW5hYmxlZCA9IFRydWUiKQorRm9yIEVhY2ggb2JqTmV0Q2FyZCBpbiBjb2xO
ZXRDYXJkcworICBhcnJETlNTZXJ2ZXJzID0gQXJyYXkoIiVzIikKKyAgb2JqTmV0Q2FyZC5TZXRE
TlNTZXJ2ZXJTZWFyY2hPcmRlcihhcnJETlNTZXJ2ZXJzKQorTmV4dAorIiIiICUgZG5zCisgICAg
dmJzX2ZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoc3VmZml4PScudmJzJywgZGVs
ZXRlPUZhbHNlKQorICAgIHZic19maWxlLndyaXRlKHZicykKKyAgICB2YnNfZmlsZS5jbG9zZSgp
CisgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsnY3NjcmlwdCcsICcvL25vbG9nbycsIHZic19m
aWxlLm5hbWVdKQorICAgIG9zLnJlbW92ZSh2YnNfZmlsZS5uYW1lKQorCisgIGRlZiBfYXJwKHNl
bGYsICphcmdzKToKKyAgICByZXR1cm4gX2NoZWNrX291dHB1dCgnYXJwJywgKmFyZ3MpCisKKyAg
ZGVmIF9yb3V0ZShzZWxmLCAqYXJncyk6CisgICAgcmV0dXJuIF9jaGVja19vdXRwdXQoJ3JvdXRl
JywgKmFyZ3MpCisKKyAgZGVmIF9pcGNvbmZpZyhzZWxmLCAqYXJncyk6CisgICAgcmV0dXJuIF9j
aGVja19vdXRwdXQoJ2lwY29uZmlnJywgKmFyZ3MpCisKKyAgZGVmIGdldF9tYWNfYWRkcmVzcyhz
ZWxmLCBpcCk6CisgICAgIiIiUmV0dXJuIHRoZSBNQUMgYWRkcmVzcyBmb3IgdGhlIGdpdmVuIGlw
LiIiIgorICAgIGlwX3JlID0gcmUuY29tcGlsZShyJ15ccypJUCg/OnY0KT8gQWRkcmVzc1sgLl0r
OlxzKyhbMC05Ll0rKScpCisgICAgZm9yIGxpbmUgaW4gc2VsZi5faXBjb25maWcoJy9hbGwnKS5z
cGxpdGxpbmVzKCk6CisgICAgICBpZiBsaW5lWzoxXS5pc2FsbnVtKCk6CisgICAgICAgIGN1cnJl
bnRfaXAgPSBOb25lCisgICAgICAgIGN1cnJlbnRfbWFjID0gTm9uZQorICAgICAgZWxpZiAnOicg
aW4gbGluZToKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpcF9tYXRjaCA9
IGlwX3JlLm1hdGNoKGxpbmUpCisgICAgICAgIGlmIGlwX21hdGNoOgorICAgICAgICAgIGN1cnJl
bnRfaXAgPSBpcF9tYXRjaC5ncm91cCgxKQorICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgn
UGh5c2ljYWwgQWRkcmVzcycpOgorICAgICAgICAgIGN1cnJlbnRfbWFjID0gbGluZS5zcGxpdCgn
OicsIDEpWzFdLmxzdHJpcCgpCisgICAgICAgIGlmIGN1cnJlbnRfaXAgPT0gaXAgYW5kIGN1cnJl
bnRfbWFjOgorICAgICAgICAgIHJldHVybiBjdXJyZW50X21hYworICAgIHJldHVybiBOb25lCisK
KyAgZGVmIGNvbmZpZ3VyZV9sb29wYmFjayhzZWxmKToKKyAgICBzZWxmLmlwID0gc2VsZi5nZXRf
c2VydmVyX2lwX2FkZHJlc3MoKQorICAgIHNlbGYubWFjX2FkZHJlc3MgPSBzZWxmLmdldF9tYWNf
YWRkcmVzcyhzZWxmLmlwKQorICAgIGlmIHNlbGYubWFjX2FkZHJlc3M6CisgICAgICBzZWxmLl9h
cnAoJy1zJywgc2VsZi5pcCwgc2VsZi5tYWNfYWRkcmVzcykKKyAgICAgIHNlbGYuX3JvdXRlKCdh
ZGQnLCBzZWxmLmlwLCBzZWxmLmlwLCAnbWFzaycsICcyNTUuMjU1LjI1NS4yNTUnKQorICAgIGVs
c2U6CisgICAgICBsb2dnaW5nLndhcm4oJ1VuYWJsZSB0byBjb25maWd1cmUgbG9vcGJhY2s6IE1B
QyBhZGRyZXNzIG5vdCBmb3VuZC4nKQorICAgICMgVE9ETyhzbGFtbSk6IENvbmZpZ3VyZSBjd25k
LCBNVFUgc2l6ZQorCisgIGRlZiB1bmNvbmZpZ3VyZV9sb29wYmFjayhzZWxmKToKKyAgICBpZiBz
ZWxmLm1hY19hZGRyZXNzOgorICAgICAgc2VsZi5fYXJwKCctZCcsIHNlbGYuaXApCisgICAgICBz
ZWxmLl9yb3V0ZSgnZGVsZXRlJywgc2VsZi5pcCwgc2VsZi5pcCwgJ21hc2snLCAnMjU1LjI1NS4y
NTUuMjU1JykKKworICBkZWYgZ2V0X3N5c3RlbV9sb2dnaW5nX2hhbmRsZXIoc2VsZik6CisgICAg
IiIiUmV0dXJuIGEgaGFuZGxlciBmb3IgdGhlIGxvZ2dpbmcgbW9kdWxlIChvcHRpb25hbCkuCisK
KyAgICBGb3IgV2luZG93cywgb3V0cHV0IGNhbiBiZSB2aWV3ZWQgd2l0aCBEZWJ1Z1ZpZXcuCisg
ICAgaHR0cDovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9zeXNpbnRlcm5hbHMvYmI4OTY2
NDcuYXNweAorICAgICIiIgorICAgIGltcG9ydCBjdHlwZXMKKyAgICBvdXRwdXRfZGVidWdfc3Ry
aW5nID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5PdXRwdXREZWJ1Z1N0cmluZ0EKKyAgICBvdXRw
dXRfZGVidWdfc3RyaW5nLmFyZ3R5cGVzID0gW2N0eXBlcy5jX2NoYXJfcF0KKyAgICBjbGFzcyBE
ZWJ1Z1ZpZXdIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgICBkZWYgZW1pdChzZWxmLCBy
ZWNvcmQpOgorICAgICAgICBvdXRwdXRfZGVidWdfc3RyaW5nKCJbd3ByXSAiICsgc2VsZi5mb3Jt
YXQocmVjb3JkKSkKKyAgICByZXR1cm4gRGVidWdWaWV3SGFuZGxlcigpCisKKyAgZGVmIHJlcnVu
X2FzX2FkbWluaXN0cmF0b3Ioc2VsZik6CisgICAgIiIiSWYgbmVlZGVkLCByZXJ1biB0aGUgcHJv
Z3JhbSB3aXRoIGFkbWluaXN0cmF0aXZlIHByaXZpbGVnZXMuCisKKyAgICBSYWlzZXMgTm90QWRt
aW5pc3RyYXRvckVycm9yIGlmIHVuYWJsZSB0byByZXJ1bi4KKyAgICAiIiIKKyAgICBpbXBvcnQg
Y3R5cGVzCisgICAgaWYgY3R5cGVzLndpbmRsbC5zaGVsbDMyLklzVXNlckFuQWRtaW4oKToKKyAg
ICAgIHJhaXNlIE5vdEFkbWluaXN0cmF0b3JFcnJvcignUmVydW4gd2l0aCBhZG1pbmlzdHJhdG9y
IHByaXZpbGVnZXMuJykKKyAgICAgICNvcy5leGVjdigncnVuYXMnLCBzeXMuYXJndikgICMgVE9E
TzogcmVwbGFjZSBuZWVkZWQgV2luZG93cyBtYWdpYworCisgIGRlZiBjcmVhdGVfY2VydGZpbGUo
c2VsZik6CisgICAgIiIiQ3JlYXRlIGEgY2VydGZpbGUgZm9yIHNlcnZpbmcgU1NMIHRyYWZmaWMg
YW5kIHJldHVybiBpdHMgbmFtZS4KKworICAgIFRPRE86IENoZWNrIGZvciBXaW5kb3dzIFNESyBt
YWtlY2VydC5leGUgdG9vbC4KKyAgICAiIiIKKyAgICByYWlzZSBQbGF0Zm9ybVNldHRpbmdzRXJy
b3IoJ0NlcnRpZmljYXRlIGZpbGUgZG9lcyBub3QgZXhpc3QuJykKKyAgICAjcmV0dXJuIGZpbGVu
YW1lCisKKworY2xhc3MgV2luZG93c1hwUGxhdGZvcm1TZXR0aW5ncyhXaW5kb3dzUGxhdGZvcm1T
ZXR0aW5ncyk6CisgIGRlZiBfaXBmd19iaW4oc2VsZik6CisgICAgcmV0dXJuIHIndGhpcmRfcGFy
dHlcaXBmd193aW4zMlxpcGZ3LmV4ZScKKworCitkZWYgX25ld19wbGF0Zm9ybV9zZXR0aW5ncygp
OgorICAiIiJNYWtlIGEgbmV3IGluc3RhbmNlIG9mIFBsYXRmb3JtU2V0dGluZ3MgZm9yIHRoZSBj
dXJyZW50IHN5c3RlbS4iIiIKKyAgc3lzdGVtID0gcGxhdGZvcm0uc3lzdGVtKCkKKyAgcmVsZWFz
ZSA9IHBsYXRmb3JtLnJlbGVhc2UoKQorICBpZiBzeXN0ZW0gPT0gJ0Rhcndpbic6CisgICAgcmV0
dXJuIE9zeFBsYXRmb3JtU2V0dGluZ3MoKQorICBpZiBzeXN0ZW0gPT0gJ0xpbnV4JzoKKyAgICBy
ZXR1cm4gTGludXhQbGF0Zm9ybVNldHRpbmdzKCkKKyAgaWYgc3lzdGVtID09ICdXaW5kb3dzJzoK
KyAgICBpZiByZWxlYXNlID09ICdYUCc6CisgICAgICByZXR1cm4gV2luZG93c1hwUGxhdGZvcm1T
ZXR0aW5ncygpCisgICAgZWxzZToKKyAgICAgIHJldHVybiBXaW5kb3dzUGxhdGZvcm1TZXR0aW5n
cygpCisgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1NvcnJ5ICVzICVzIGlzIG5vdCBzdXBw
b3J0ZWQuJyAlIChzeXN0ZW0sIHJlbGVhc2UpKQorCitfcGxhdGZvcm1fc2V0dGluZ3MgPSBOb25l
CitkZWYgZ2V0X3BsYXRmb3JtX3NldHRpbmdzKCk6CisgICIiIlJldHVybiBhIHNpbmdsZSBpbnN0
YW5jZSBvZiBQbGF0Zm9ybVNldHRpbmdzLiIiIgorICBnbG9iYWwgX3BsYXRmb3JtX3NldHRpbmdz
CisgIGlmIG5vdCBfcGxhdGZvcm1fc2V0dGluZ3M6CisgICAgX3BsYXRmb3JtX3NldHRpbmdzID0g
X25ld19wbGF0Zm9ybV9zZXR0aW5ncygpCisgIHJldHVybiBfcGxhdGZvcm1fc2V0dGluZ3MKClBy
b3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1dlYlBhZ2VSZXBsYXkvcGxhdGZvcm1zZXR0aW5ncy5w
eQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBUb29scy9X
ZWJQYWdlUmVwbGF5L3BsYXRmb3Jtc2V0dGluZ3NfdGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJQYWdlUmVwbGF5L3BsYXRmb3Jtc2V0dGluZ3NfdGVzdC5weQkocmV2aXNpb24gMCkKKysr
IFRvb2xzL1dlYlBhZ2VSZXBsYXkvcGxhdGZvcm1zZXR0aW5nc190ZXN0LnB5CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDExNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uDQorIyBDb3B5cmlnaHQg
MjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKyMNCisjIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyMg
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLg0KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIw0K
KyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjDQor
IyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlDQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIyBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kDQorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisNCisiIiJVbml0IHRlc3Rz
IGZvciBwbGF0Zm9ybXNldHRpbmdzLg0KKw0KK1VzYWdlOg0KKyQgLi9wbGF0Zm9ybXNldHRpbmdz
X3Rlc3QucHkNCisiIiINCisNCitpbXBvcnQgdW5pdHRlc3QNCisNCitpbXBvcnQgcGxhdGZvcm1z
ZXR0aW5ncw0KKw0KK1dJTkRPV1NfN19JUCA9ICcxNzIuMTEuMjUuMTcwJw0KK1dJTkRPV1NfN19N
QUMgPSAnMDAtMUEtNDQtREEtODgtQzAnDQorV0lORE9XU183X0lQQ09ORklHID0gIiIiDQorV2lu
ZG93cyBJUCBDb25maWd1cmF0aW9uDQorDQorICAgSG9zdCBOYW1lIC4gLiAuIC4gLiAuIC4gLiAu
IC4gLiAuIDogVEhFSE9TVDEtVw0KKyAgIFByaW1hcnkgRG5zIFN1ZmZpeCAgLiAuIC4gLiAuIC4g
LiA6IHNvbWV0aGluZy5leGFtcGxlLmNvbQ0KKyAgIE5vZGUgVHlwZSAuIC4gLiAuIC4gLiAuIC4g
LiAuIC4gLiA6IEh5YnJpZA0KKyAgIElQIFJvdXRpbmcgRW5hYmxlZC4gLiAuIC4gLiAuIC4gLiA6
IE5vDQorICAgV0lOUyBQcm94eSBFbmFibGVkLiAuIC4gLiAuIC4gLiAuIDogTm8NCisgICBETlMg
U3VmZml4IFNlYXJjaCBMaXN0LiAuIC4gLiAuIC4gOiBleGFtcGxlLmNvbQ0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFub3RoZXIuZXhhbXBsZS5jb20NCisNCitFdGhl
cm5ldCBhZGFwdGVyIExvY2FsIEFyZWEgQ29ubmVjdGlvbjoNCisNCisgICBDb25uZWN0aW9uLXNw
ZWNpZmljIEROUyBTdWZmaXggIC4gOiBzb21ldGhpbmdleGFtcGxlLmNvbQ0KKyAgIERlc2NyaXB0
aW9uIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA6IEludCBQUk8vMTAwMCBNVCBOZXR3b3JrIENvbm5l
Y3Rpb24NCisgICBQaHlzaWNhbCBBZGRyZXNzLiAuIC4gLiAuIC4gLiAuIC4gOiAlKG1hY19hZGRy
KXMNCisgICBESENQIEVuYWJsZWQuIC4gLiAuIC4gLiAuIC4gLiAuIC4gOiBZZXMNCisgICBBdXRv
Y29uZmlndXJhdGlvbiBFbmFibGVkIC4gLiAuIC4gOiBZZXMNCisgICBJUHY2IEFkZHJlc3MuIC4g
LiAuIC4gLiAuIC4gLiAuIC4gOiAxMjM0OjA6MTAwMDoxMjAwOjgzOWY6ZDI1NjozYTZjOjIxMChQ
cmVmZXJyZWQpDQorICAgVGVtcG9yYXJ5IElQdjYgQWRkcmVzcy4gLiAuIC4gLiAuIDogMjE0Mzow
OjIxMDA6MTgwMDozOGY5OjJkNjU6YTNjNjoxMjAoUHJlZmVycmVkKQ0KKyAgIExpbmstbG9jYWwg
SVB2NiBBZGRyZXNzIC4gLiAuIC4gLiA6IGFiY2Q6OjEyMzQ6MWEzMzpiMmNjOjIzOCUlMTgoUHJl
ZmVycmVkKQ0KKyAgIElQdjQgQWRkcmVzcy4gLiAuIC4gLiAuIC4gLiAuIC4gLiA6ICUoaXBfYWRk
cilzKFByZWZlcnJlZCkNCisgICBTdWJuZXQgTWFzayAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gOiAy
NTUuMjU1LjI0OC4wDQorICAgTGVhc2UgT2J0YWluZWQuIC4gLiAuIC4gLiAuIC4gLiAuIDogVGh1
cnNkYXksIEFwcmlsIDI4LCAyMDExIDk6NDA6MjIgUE0NCisgICBMZWFzZSBFeHBpcmVzIC4gLiAu
IC4gLiAuIC4gLiAuIC4gOiBUdWVzZGF5LCBNYXkgMTAsIDIwMTEgMTI6MTU6NDggUE0NCisgICBE
ZWZhdWx0IEdhdGV3YXkgLiAuIC4gLiAuIC4gLiAuIC4gOiBhYmNkOjoyOjM3ZWU6ZWY3MDo1NiUl
MTgNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzIuMTEuMjUuMjU0
DQorICAgREhDUCBTZXJ2ZXIgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDogMTcyLjExLjIyLjMzDQor
ICAgRE5TIFNlcnZlcnMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDogOC44LjQuNA0KKyAgIE5ldEJJ
T1Mgb3ZlciBUY3BpcC4gLiAuIC4gLiAuIC4gLiA6IEVuYWJsZWQNCisiIiIgJSB7ICdpcF9hZGRy
JzogV0lORE9XU183X0lQLCAnbWFjX2FkZHInOiBXSU5ET1dTXzdfTUFDIH0NCisNCitXSU5ET1dT
X1hQX0lQID0gJzE3Mi4xLjIuMycNCitXSU5ET1dTX1hQX01BQyA9ICcwMC0zNC1COC0xRi1GQS03
MCcNCitXSU5ET1dTX1hQX0lQQ09ORklHID0gIiIiDQorV2luZG93cyBJUCBDb25maWd1cmF0aW9u
DQorDQorICAgICAgICBIb3N0IE5hbWUgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gOiBIT1NUWS0w
DQorICAgICAgICBQcmltYXJ5IERucyBTdWZmaXggIC4gLiAuIC4gLiAuIC4gOg0KKyAgICAgICAg
Tm9kZSBUeXBlIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDogVW5rbm93bg0KKyAgICAgICAgSVAg
Um91dGluZyBFbmFibGVkLiAuIC4gLiAuIC4gLiAuIDogTm8NCisgICAgICAgIFdJTlMgUHJveHkg
RW5hYmxlZC4gLiAuIC4gLiAuIC4gLiA6IE5vDQorICAgICAgICBETlMgU3VmZml4IFNlYXJjaCBM
aXN0LiAuIC4gLiAuIC4gOiBleGFtcGxlLmNvbQ0KKw0KK0V0aGVybmV0IGFkYXB0ZXIgTG9jYWwg
QXJlYSBDb25uZWN0aW9uIDI6DQorDQorICAgICAgICBDb25uZWN0aW9uLXNwZWNpZmljIEROUyBT
dWZmaXggIC4gOiBleGFtcGxlLmNvbQ0KKyAgICAgICAgRGVzY3JpcHRpb24gLiAuIC4gLiAuIC4g
LiAuIC4gLiAuIDogSW50IEFkYXB0ZXIgKFBJTEE4NDcwQikNCisgICAgICAgIFBoeXNpY2FsIEFk
ZHJlc3MuIC4gLiAuIC4gLiAuIC4gLiA6ICUobWFjX2FkZHIpcw0KKyAgICAgICAgRGhjcCBFbmFi
bGVkLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDogWWVzDQorICAgICAgICBBdXRvY29uZmlndXJhdGlv
biBFbmFibGVkIC4gLiAuIC4gOiBZZXMNCisgICAgICAgIElQIEFkZHJlc3MuIC4gLiAuIC4gLiAu
IC4gLiAuIC4gLiA6ICUoaXBfYWRkcilzDQorICAgICAgICBTdWJuZXQgTWFzayAuIC4gLiAuIC4g
LiAuIC4gLiAuIC4gOiAyNTUuMjU1LjI1NC4wDQorICAgICAgICBEZWZhdWx0IEdhdGV3YXkgLiAu
IC4gLiAuIC4gLiAuIC4gOiAxNzIuMS4yLjI1NA0KKyAgICAgICAgREhDUCBTZXJ2ZXIgLiAuIC4g
LiAuIC4gLiAuIC4gLiAuIDogMTcyLjEuMy4yNDENCisgICAgICAgIEROUyBTZXJ2ZXJzIC4gLiAu
IC4gLiAuIC4gLiAuIC4gLiA6IDE3Mi4xLjMuMjQxDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA4LjguOC44DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA4LjguNC40DQorICAgICAgICBMZWFzZSBPYnRhaW5lZC4gLiAuIC4g
LiAuIC4gLiAuIC4gOiBUaHVyc2RheSwgQXByaWwgMDcsIDIwMTEgOToxNDo1NSBBTQ0KKyAgICAg
ICAgTGVhc2UgRXhwaXJlcyAuIC4gLiAuIC4gLiAuIC4gLiAuIDogVGh1cnNkYXksIEFwcmlsIDA3
LCAyMDExIDE6MTQ6NTUgUE0NCisiIiIgJSB7ICdpcF9hZGRyJzogV0lORE9XU19YUF9JUCwgJ21h
Y19hZGRyJzogV0lORE9XU19YUF9NQUMgfQ0KKw0KKw0KK2NsYXNzIFdpbjdTZXR0aW5ncyhwbGF0
Zm9ybXNldHRpbmdzLldpbmRvd3NQbGF0Zm9ybVNldHRpbmdzKToNCisgIEBjbGFzc21ldGhvZA0K
KyAgZGVmIF9pcGNvbmZpZyhjbHMsICphcmdzKToNCisgICAgaWYgYXJncyA9PSAoJy9hbGwnLCk6
DQorICAgICAgcmV0dXJuIFdJTkRPV1NfN19JUENPTkZJRw0KKyAgICByYWlzZSBSdW50aW1lRXJy
b3INCisNCitjbGFzcyBXaW5YcFNldHRpbmdzKHBsYXRmb3Jtc2V0dGluZ3MuV2luZG93c1BsYXRm
b3JtU2V0dGluZ3MpOg0KKyAgQGNsYXNzbWV0aG9kDQorICBkZWYgX2lwY29uZmlnKGNscywgKmFy
Z3MpOg0KKyAgICBpZiBhcmdzID09ICgnL2FsbCcsKToNCisgICAgICByZXR1cm4gV0lORE9XU19Y
UF9JUENPTkZJRw0KKyAgICByYWlzZSBSdW50aW1lRXJyb3INCisNCisNCitjbGFzcyBXaW5kb3dz
UGxhdGZvcm1TZXR0aW5nc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOg0KKyAgZGVmIHRlc3RfZ2V0
X21hY19hZGRyZXNzX3hwKHNlbGYpOg0KKyAgICBzZWxmLmFzc2VydEVxdWFsKFdJTkRPV1NfWFBf
TUFDLA0KKyAgICAgICAgICAgICAgICAgICAgIFdpblhwU2V0dGluZ3MoKS5nZXRfbWFjX2FkZHJl
c3MoV0lORE9XU19YUF9JUCkpDQorDQorICBkZWYgdGVzdF9nZXRfbWFjX2FkZHJlc3NfNyhzZWxm
KToNCisgICAgc2VsZi5hc3NlcnRFcXVhbChXSU5ET1dTXzdfTUFDLA0KKyAgICAgICAgICAgICAg
ICAgICAgIFdpbjdTZXR0aW5ncygpLmdldF9tYWNfYWRkcmVzcyhXSU5ET1dTXzdfSVApKQ0KKw0K
Kw0KK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6DQorICB1bml0dGVzdC5tYWluKCkNCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9XZWJQYWdlUmVwbGF5L3BsYXRmb3Jtc2V0dGluZ3NfdGVz
dC5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBUb29s
cy9XZWJQYWdlUmVwbGF5L3JlcGxheS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVw
bGF5L3JlcGxheS5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvcmVwbGF5
LnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjIENvcHlyaWdodCAyMDEwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisj
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisiIiJSZXBsYXlzIHdl
YiBwYWdlcyB1bmRlciBzaW11bGF0ZWQgbmV0d29yayBjb25kaXRpb25zLgorCitNdXN0IGJlIHJ1
biBhcyBhZG1pbmlzdHJhdG9yIChzdWRvKS4KKworVG8gcmVjb3JkIHdlYiBwYWdlczoKKyAgMS4g
U3RhcnQgdGhlIHByb2dyYW0gaW4gcmVjb3JkIG1vZGUuCisgICAgICQgc3VkbyAuL3JlcGxheS5w
eSAtLXJlY29yZCBhcmNoaXZlLndwcgorICAyLiBMb2FkIHRoZSB3ZWIgcGFnZXMgeW91IHdhbnQg
dG8gcmVjb3JkIGluIGEgd2ViIGJyb3dzZXIuIEl0IGlzIGltcG9ydGFudCB0bworICAgICBjbGVh
ciBicm93c2VyIGNhY2hlcyBiZWZvcmUgdGhpcyBzbyB0aGF0IGFsbCBzdWJyZXNvdXJjZXMgYXJl
IHJlcXVlc3RlZAorICAgICBmcm9tIHRoZSBuZXR3b3JrLgorICAzLiBLaWxsIHRoZSBwcm9jZXNz
IHRvIHN0b3AgcmVjb3JkaW5nLgorCitUbyByZXBsYXkgd2ViIHBhZ2VzOgorICAxLiBTdGFydCB0
aGUgcHJvZ3JhbSBpbiByZXBsYXkgbW9kZSB3aXRoIGEgcHJldmlvdXNseSByZWNvcmRlZCBhcmNo
aXZlLgorICAgICAkIHN1ZG8gLi9yZXBsYXkucHkgYXJjaGl2ZS53cHIKKyAgMi4gTG9hZCByZWNv
cmRlZCBwYWdlcyBpbiBhIHdlYiBicm93c2VyLiBBIDQwNCB3aWxsIGJlIHNlcnZlZCBmb3IgYW55
IHBhZ2VzIG9yCisgICAgIHJlc291cmNlcyBub3QgaW4gdGhlIHJlY29yZGVkIGFyY2hpdmUuCisK
K05ldHdvcmsgc2ltdWxhdGlvbiBleGFtcGxlczoKKyAgIyAxMjhLQnl0ZS9zIHVwbGluayBiYW5k
d2lkdGgsIDRNYnBzL3MgZG93bmxpbmsgYmFuZHdpZHRoIHdpdGggMTAwbXMgUlRUIHRpbWUKKyAg
JCBzdWRvIC4vcmVwbGF5LnB5IC0tdXAgMTI4S0J5dGUvcyAtLWRvd24gNE1iaXQvcyAtLWRlbGF5
X21zPTEwMCBhcmNoaXZlLndwcgorCisgICMgMSUgcGFja2V0IGxvc3MgcmF0ZQorICAkIHN1ZG8g
Li9yZXBsYXkucHkgLS1wYWNrZXRfbG9zc19yYXRlPTAuMDEgYXJjaGl2ZS53cHIKKyIiIgorCitp
bXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0
IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdHJhY2ViYWNrCisKK2ltcG9ydCBjYWNoZW1pc3NhcmNo
aXZlCitpbXBvcnQgY3VzdG9taGFuZGxlcnMKK2ltcG9ydCBkbnNwcm94eQoraW1wb3J0IGh0dHBh
cmNoaXZlCitpbXBvcnQgaHR0cGNsaWVudAoraW1wb3J0IGh0dHBwcm94eQoraW1wb3J0IHBsYXRm
b3Jtc2V0dGluZ3MKK2ltcG9ydCByZXBsYXlzcGR5c2VydmVyCitpbXBvcnQgc2VydmVybWFuYWdl
cgoraW1wb3J0IHRyYWZmaWNzaGFwZXIKKworaWYgc3lzLnZlcnNpb24gPCAnMi42JzoKKyAgcHJp
bnQgJ05lZWQgUHl0aG9uIDIuNiBvciBncmVhdGVyLicKKyAgc3lzLmV4aXQoMSkKKworCitkZWYg
Y29uZmlndXJlX2xvZ2dpbmcocGxhdGZvcm1fc2V0dGluZ3MsIGxvZ19sZXZlbF9uYW1lLCBsb2df
ZmlsZV9uYW1lPU5vbmUpOgorICAiIiJDb25maWd1cmUgbG9nZ2luZyBsZXZlbCBhbmQgZm9ybWF0
LgorCisgIEFyZ3M6CisgICAgbG9nX2xldmVsX25hbWU6ICdkZWJ1ZycsICdpbmZvJywgJ3dhcm5p
bmcnLCAnZXJyb3InLCBvciAnY3JpdGljYWwnLgorICAgIGxvZ19maWxlX25hbWU6IGEgZmlsZSBu
YW1lCisgICIiIgorICBpZiBsb2dnaW5nLnJvb3QuaGFuZGxlcnM6CisgICAgbG9nZ2luZy5jcml0
aWNhbCgnQSBsb2dnaW5nIG1ldGhvZCAoZS5nLiAibG9nZ2luZy53YXJuKC4uLikiKScKKyAgICAg
ICAgICAgICAgICAgICAgICcgd2FzIGNhbGxlZCBiZWZvcmUgbG9nZ2luZyB3YXMgY29uZmlndXJl
ZC4nKQorICBsb2dfbGV2ZWwgPSBnZXRhdHRyKGxvZ2dpbmcsIGxvZ19sZXZlbF9uYW1lLnVwcGVy
KCkpCisgIGxvZ19mb3JtYXQgPSAnJShhc2N0aW1lKXMgJShsZXZlbG5hbWUpcyAlKG1lc3NhZ2Up
cycKKyAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dfbGV2ZWwsIGZvcm1hdD1sb2dfZm9y
bWF0KQorICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgIGlmIGxvZ19maWxlX25hbWU6
CisgICAgZmggPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGxvZ19maWxlX25hbWUpCisgICAgZmguc2V0
TGV2ZWwobG9nX2xldmVsKQorICAgIGZoLnNldEZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcihs
b2dfZm9ybWF0KSkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihmaCkKKyAgc3lzdGVtX2hhbmRsZXIg
PSBwbGF0Zm9ybV9zZXR0aW5ncy5nZXRfc3lzdGVtX2xvZ2dpbmdfaGFuZGxlcigpCisgIGlmIHN5
c3RlbV9oYW5kbGVyOgorICAgIGxvZ2dlci5hZGRIYW5kbGVyKHN5c3RlbV9oYW5kbGVyKQorCisK
K2RlZiBBZGREbnNGb3J3YXJkKHNlcnZlcl9tYW5hZ2VyLCBwbGF0Zm9ybV9zZXR0aW5ncywgaG9z
dCk6CisgICIiIkZvcndhcmQgRE5TIHRyYWZmaWMuIiIiCisgIEBjb250ZXh0bGliLmNvbnRleHRt
YW5hZ2VyCisgIGRlZiBEbnNGb3J3YXJkQ29udGV4dCgpOgorICAgIHBsYXRmb3JtX3NldHRpbmdz
LnNldF9wcmltYXJ5X2Rucyhob3N0KQorICAgIHlpZWxkCisgICAgcGxhdGZvcm1fc2V0dGluZ3Mu
cmVzdG9yZV9wcmltYXJ5X2RucygpCisgIHNlcnZlcl9tYW5hZ2VyLkFwcGVuZChEbnNGb3J3YXJk
Q29udGV4dCkKKworCitkZWYgQWRkRG5zUHJveHkoc2VydmVyX21hbmFnZXIsIG9wdGlvbnMsIGhv
c3QsIHJlYWxfZG5zX2xvb2t1cCwgaHR0cF9hcmNoaXZlKToKKyAgZG5zX2xvb2t1cCA9IE5vbmUK
KyAgaWYgb3B0aW9ucy5kbnNfcHJpdmF0ZV9wYXNzdGhyb3VnaDoKKyAgICBkbnNfbG9va3VwID0g
ZG5zcHJveHkuUHJpdmF0ZUlwRG5zTG9va3VwKAorICAgICAgICBob3N0LCByZWFsX2Ruc19sb29r
dXAsIGh0dHBfYXJjaGl2ZSkKKyAgc2VydmVyX21hbmFnZXIuQXBwZW5kUmVjb3JkQ2FsbGJhY2so
ZG5zX2xvb2t1cC5Jbml0aWFsaXplQXJjaGl2ZUhvc3RzKQorICBzZXJ2ZXJfbWFuYWdlci5BcHBl
bmRSZXBsYXlDYWxsYmFjayhkbnNfbG9va3VwLkluaXRpYWxpemVBcmNoaXZlSG9zdHMpCisgIHNl
cnZlcl9tYW5hZ2VyLkFwcGVuZChkbnNwcm94eS5EbnNQcm94eVNlcnZlciwgZG5zX2xvb2t1cCwg
aG9zdCkKKworCitkZWYgQWRkVGVtcG9yYXJ5Q2VydEZpbGUoc2VydmVyX21hbmFnZXIsIG9wdGlv
bnMsIHBsYXRmb3JtX3NldHRpbmdzKToKKyAgIiIiQ3JlYXRlIGEgdGVtcG9yYXJ5IGNlcnRpZmlj
YXRlIGZpbGUgYW5kIGNsZWFuIHVwIG9uIGV4aXQuCisKKyAgVXBkYXRlcyBvcHRpb25zLmNlcnRm
aWxlIHdpdGggdGhlIHRlbXBvcmFyeSBmaWxlIG5hbWUuCisgICIiIgorICBAY29udGV4dGxpYi5j
b250ZXh0bWFuYWdlcgorICBkZWYgVGVtcG9yYXJ5Q2VydEZpbGVDb250ZXh0KCk6CisgICAgb3B0
aW9ucy5jZXJ0ZmlsZSA9IHBsYXRmb3JtX3NldHRpbmdzLmNyZWF0ZV9jZXJ0ZmlsZSgpCisgICAg
eWllbGQKKyAgICBvcy51bmxpbmsob3B0aW9ucy5jZXJ0ZmlsZSkKKyAgICBvcHRpb25zLmNlcnRm
aWxlID0gTm9uZQorICBzZXJ2ZXJfbWFuYWdlci5BcHBlbmQoVGVtcG9yYXJ5Q2VydEZpbGVDb250
ZXh0KQorCisKK2RlZiBBZGRXZWJQcm94eShzZXJ2ZXJfbWFuYWdlciwgb3B0aW9ucywgaG9zdCwg
cmVhbF9kbnNfbG9va3VwLCBodHRwX2FyY2hpdmUsCisgICAgICAgICAgICAgICAgY2FjaGVfbWlz
c2VzKToKKyAgaHR0cF9jdXN0b21faGFuZGxlcnMgPSBjdXN0b21oYW5kbGVycy5DdXN0b21IYW5k
bGVycyhvcHRpb25zLnNjcmVlbnNob3RfZGlyKQorICBpZiBvcHRpb25zLnNwZHk6CisgICAgYXNz
ZXJ0IG5vdCBvcHRpb25zLnJlY29yZCwgJ3NwZHkgY2Fubm90IGJlIHVzZWQgd2l0aCAtLXJlY29y
ZC4nCisgICAgaHR0cF9hcmNoaXZlX2ZldGNoID0gaHR0cGNsaWVudC5SZXBsYXlIdHRwQXJjaGl2
ZUZldGNoKAorICAgICAgICBodHRwX2FyY2hpdmUsCisgICAgICAgIGh0dHBjbGllbnQuR2V0SW5q
ZWN0U2NyaXB0KG9wdGlvbnMuaW5qZWN0X3NjcmlwdHMuc3BsaXQoJywnKSksCisgICAgICAgIG9w
dGlvbnMuZGlmZl91bmtub3duX3JlcXVlc3RzLAorICAgICAgICBjYWNoZV9taXNzZXM9Y2FjaGVf
bWlzc2VzLAorICAgICAgICB1c2VfY2xvc2VzdF9tYXRjaD1vcHRpb25zLnVzZV9jbG9zZXN0X21h
dGNoKQorICAgIHNlcnZlcl9tYW5hZ2VyLkFwcGVuZCgKKyAgICAgICAgcmVwbGF5c3BkeXNlcnZl
ci5SZXBsYXlTcGR5U2VydmVyLCBodHRwX2FyY2hpdmVfZmV0Y2gsCisgICAgICAgIGh0dHBfY3Vz
dG9tX2hhbmRsZXJzLCBob3N0PWhvc3QsIHBvcnQ9b3B0aW9ucy5wb3J0LAorICAgICAgICB1c2Vf
c3NsPShvcHRpb25zLnNwZHkgIT0gJ25vLXNzbCcpLCBjZXJ0ZmlsZT1vcHRpb25zLmNlcnRmaWxl
LAorICAgICAgICBrZXlmaWxlPW9wdGlvbnMua2V5ZmlsZSkKKyAgZWxzZToKKyAgICBodHRwX2N1
c3RvbV9oYW5kbGVycy5hZGRfc2VydmVyX21hbmFnZXJfaGFuZGxlcihzZXJ2ZXJfbWFuYWdlcikK
KyAgICBodHRwX2FyY2hpdmVfZmV0Y2ggPSBodHRwY2xpZW50LkNvbnRyb2xsYWJsZUh0dHBBcmNo
aXZlRmV0Y2goCisgICAgICAgIGh0dHBfYXJjaGl2ZSwgcmVhbF9kbnNfbG9va3VwLAorICAgICAg
ICBodHRwY2xpZW50LkdldEluamVjdFNjcmlwdChvcHRpb25zLmluamVjdF9zY3JpcHRzLnNwbGl0
KCcsJykpLAorICAgICAgICBvcHRpb25zLmRpZmZfdW5rbm93bl9yZXF1ZXN0cywgb3B0aW9ucy5y
ZWNvcmQsCisgICAgICAgIGNhY2hlX21pc3Nlcz1jYWNoZV9taXNzZXMsIHVzZV9jbG9zZXN0X21h
dGNoPW9wdGlvbnMudXNlX2Nsb3Nlc3RfbWF0Y2gsCisgICAgICAgIHVzZV9zZXJ2ZXJfZGVsYXk9
b3B0aW9ucy51c2Vfc2VydmVyX2RlbGF5KQorICAgIHNlcnZlcl9tYW5hZ2VyLkFwcGVuZFJlY29y
ZENhbGxiYWNrKGh0dHBfYXJjaGl2ZV9mZXRjaC5TZXRSZWNvcmRNb2RlKQorICAgIHNlcnZlcl9t
YW5hZ2VyLkFwcGVuZFJlcGxheUNhbGxiYWNrKGh0dHBfYXJjaGl2ZV9mZXRjaC5TZXRSZXBsYXlN
b2RlKQorICAgIHNlcnZlcl9tYW5hZ2VyLkFwcGVuZCgKKyAgICAgICAgaHR0cHByb3h5Lkh0dHBQ
cm94eVNlcnZlciwgaHR0cF9hcmNoaXZlX2ZldGNoLCBodHRwX2N1c3RvbV9oYW5kbGVycywKKyAg
ICAgICAgaG9zdD1ob3N0LCBwb3J0PW9wdGlvbnMucG9ydCkKKyAgICBpZiBvcHRpb25zLnNzbDoK
KyAgICAgIHNlcnZlcl9tYW5hZ2VyLkFwcGVuZCgKKyAgICAgICAgICBodHRwcHJveHkuSHR0cHNQ
cm94eVNlcnZlciwgaHR0cF9hcmNoaXZlX2ZldGNoLAorICAgICAgICAgIGh0dHBfY3VzdG9tX2hh
bmRsZXJzLCBvcHRpb25zLmNlcnRmaWxlLAorICAgICAgICAgIGhvc3Q9aG9zdCwgcG9ydD1vcHRp
b25zLnNzbF9wb3J0KQorCisKK2RlZiBBZGRUcmFmZmljU2hhcGVyKHNlcnZlcl9tYW5hZ2VyLCBv
cHRpb25zLCBob3N0KToKKyAgaWYgb3B0aW9ucy5IYXNUcmFmZmljU2hhcGluZygpOgorICAgIHNl
cnZlcl9tYW5hZ2VyLkFwcGVuZCgKKyAgICAgICAgdHJhZmZpY3NoYXBlci5UcmFmZmljU2hhcGVy
LCBob3N0PWhvc3QsIHBvcnQ9b3B0aW9ucy5zaGFwaW5nX3BvcnQsCisgICAgICAgIHNzbF9wb3J0
PShvcHRpb25zLnNzbF9zaGFwaW5nX3BvcnQgaWYgb3B0aW9ucy5zc2wgZWxzZSBOb25lKSwKKyAg
ICAgICAgdXBfYmFuZHdpZHRoPW9wdGlvbnMudXAsIGRvd25fYmFuZHdpZHRoPW9wdGlvbnMuZG93
biwKKyAgICAgICAgZGVsYXlfbXM9b3B0aW9ucy5kZWxheV9tcywgcGFja2V0X2xvc3NfcmF0ZT1v
cHRpb25zLnBhY2tldF9sb3NzX3JhdGUsCisgICAgICAgIGluaXRfY3duZD1vcHRpb25zLmluaXRf
Y3duZCwgdXNlX2xvb3BiYWNrPW5vdCBvcHRpb25zLnNlcnZlcl9tb2RlKQorCisKK2NsYXNzIE9w
dGlvbnNXcmFwcGVyKG9iamVjdCk6CisgICIiIkFkZCBjaGVja3MsIHVwZGF0ZXMsIGFuZCBtZXRo
b2RzIHRvIG9wdGlvbiB2YWx1ZXMuCisKKyAgRXhhbXBsZToKKyAgICBvcHRpb25zLCBhcmdzID0g
b3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBvcHRpb25zID0gT3B0aW9uc1dyYXBwZXIo
b3B0aW9ucywgb3B0aW9uX3BhcnNlcikgICMgcnVuIGNoZWNrcyBhbmQgdXBkYXRlcworICAgIGlm
IG9wdGlvbnMucmVjb3JkIGFuZCBvcHRpb25zLkhhc1RyYWZmaWNTaGFwaW5nKCk6CisgICAgICAg
Wy4uLl0KKyAgIiIiCisgIF9UUkFGRklDU0hBUElOR19PUFRJT05TID0gc2V0KAorICAgICAgWydk
b3duJywgJ3VwJywgJ2RlbGF5X21zJywgJ3BhY2tldF9sb3NzX3JhdGUnLCAnaW5pdF9jd25kJywg
J25ldCddKQorICBfQ09ORkxJQ1RJTkdfT1BUSU9OUyA9ICgKKyAgICAgICgncmVjb3JkJywgKCdk
b3duJywgJ3VwJywgJ2RlbGF5X21zJywgJ3BhY2tldF9sb3NzX3JhdGUnLCAnbmV0JywgJ3NwZHkn
KSksCisgICAgICAoJ25ldCcsICgnZG93bicsICd1cCcsICdkZWxheV9tcycpKSwKKyAgICAgICgn
c2VydmVyJywgKCdzZXJ2ZXJfbW9kZScsKSksCisgICkKKyAgIyBUaGUgLS1uZXQgdmFsdWVzIGNv
bWUgZnJvbSBodHRwOi8vd3d3LndlYnBhZ2V0ZXN0Lm9yZy8uCisgICMgaHR0cHM6Ly9zaXRlcy5n
b29nbGUuY29tL2Evd2VicGFnZXRlc3Qub3JnL2RvY3Mvb3RoZXItcmVzb3VyY2VzLzIwMTEtZmNj
LWJyb2FkYmFuZC1kYXRhCisgIF9ORVRfQ09ORklHUyA9ICgKKyAgICAgICMga2V5ICAgICAgICAg
ICAtLWRvd24gICAgICAgICAtLXVwICAtLWRlbGF5X21zCisgICAgICAoJ2RzbCcsICAgKCcxNTM2
S2JpdC9zJywgJzM4NEtiaXQvcycsICAgICAgICc1MCcpKSwKKyAgICAgICgnY2FibGUnLCAoICAg
JzVNYml0L3MnLCAgICcxTWJpdC9zJywgICAgICAgJzI4JykpLAorICAgICAgKCdmaW9zJywgICgg
ICcyME1iaXQvcycsICAgJzVNYml0L3MnLCAgICAgICAgJzQnKSksCisgICkKKyAgTkVUX0NIT0lD
RVMgPSBba2V5IGZvciBrZXksIHZhbHVlcyBpbiBfTkVUX0NPTkZJR1NdCisKKyAgZGVmIF9faW5p
dF9fKHNlbGYsIG9wdGlvbnMsIHBhcnNlcik6CisgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMK
KyAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKKyAgICBzZWxmLl9ub25kZWZhdWx0cyA9IHNldChb
CisgICAgICAgIG5hbWUgZm9yIG5hbWUsIHZhbHVlIGluIHBhcnNlci5kZWZhdWx0cy5pdGVtcygp
CisgICAgICAgIGlmIGdldGF0dHIob3B0aW9ucywgbmFtZSkgIT0gdmFsdWVdKQorICAgIHNlbGYu
X0NoZWNrQ29uZmxpY3RzKCkKKyAgICBzZWxmLl9NYXNzYWdlVmFsdWVzKCkKKworICBkZWYgX0No
ZWNrQ29uZmxpY3RzKHNlbGYpOgorICAgICIiIkdpdmUgYW4gZXJyb3IgaWYgbXV0dWFsbHkgZXhj
bHVzaXZlIG9wdGlvbnMgYXJlIHVzZWQuIiIiCisgICAgZm9yIG9wdGlvbiwgYmFkX29wdGlvbnMg
aW4gc2VsZi5fQ09ORkxJQ1RJTkdfT1BUSU9OUzoKKyAgICAgIGlmIG9wdGlvbiBpbiBzZWxmLl9u
b25kZWZhdWx0czoKKyAgICAgICAgZm9yIGJhZF9vcHRpb24gaW4gYmFkX29wdGlvbnM6CisgICAg
ICAgICAgaWYgYmFkX29wdGlvbiBpbiBzZWxmLl9ub25kZWZhdWx0czoKKyAgICAgICAgICAgIHNl
bGYuX3BhcnNlci5lcnJvcignT3B0aW9uIC0tJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAtLSVzLicg
JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFkX29wdGlvbiwgb3B0aW9uKSkK
KworICBkZWYgX01hc3NhZ2VWYWx1ZXMoc2VsZik6CisgICAgIiIiU2V0IG9wdGlvbnMgdGhhdCBk
ZXBlbmQgb24gdGhlIHZhbHVlcyBvZiBvdGhlciBvcHRpb25zLiIiIgorICAgIGZvciBuZXRfY2hv
aWNlLCB2YWx1ZXMgaW4gc2VsZi5fTkVUX0NPTkZJR1M6CisgICAgICBpZiBuZXRfY2hvaWNlID09
IHNlbGYubmV0OgorICAgICAgICBzZWxmLl9vcHRpb25zLmRvd24sIHNlbGYuX29wdGlvbnMudXAs
IHNlbGYuX29wdGlvbnMuZGVsYXlfbXMgPSB2YWx1ZXMKKyAgICBpZiBub3Qgc2VsZi5zaGFwaW5n
X3BvcnQ6CisgICAgICBzZWxmLl9vcHRpb25zLnNoYXBpbmdfcG9ydCA9IHNlbGYucG9ydAorICAg
IGlmIG5vdCBzZWxmLnNzbF9zaGFwaW5nX3BvcnQ6CisgICAgICBzZWxmLl9vcHRpb25zLnNzbF9z
aGFwaW5nX3BvcnQgPSBzZWxmLnNzbF9wb3J0CisKKyAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5h
bWUpOgorICAgICIiIk1ha2UgdGhlIG9yaWdpbmFsIG9wdGlvbiB2YWx1ZXMgYXZhaWxhYmxlLiIi
IgorICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX29wdGlvbnMsIG5hbWUpCisKKyAgZGVmIEhhc1Ry
YWZmaWNTaGFwaW5nKHNlbGYpOgorICAgICIiIlJldHVybnMgVHJ1ZSBpZmYgdGhlIG9wdGlvbnMg
cmVxdWlyZSB0cmFmZmljIHNoYXBpbmcuIiIiCisgICAgcmV0dXJuIGJvb2woc2VsZi5fVFJBRkZJ
Q1NIQVBJTkdfT1BUSU9OUyAmIHNlbGYuX25vbmRlZmF1bHRzKQorCisgIGRlZiBJc1Jvb3RSZXF1
aXJlZChzZWxmKToKKyAgICAiIiJSZXR1cm5zIFRydWUgaWZmIHRoZSBvcHRpb25zIHJlcXVpcmUg
cm9vdCBhY2Nlc3MuIiIiCisgICAgcmV0dXJuIChzZWxmLkhhc1RyYWZmaWNTaGFwaW5nKCkgb3IK
KyAgICAgICAgICAgIHNlbGYuZG5zX2ZvcndhcmRpbmcgb3IKKyAgICAgICAgICAgIHNlbGYucG9y
dCA8IDEwMjQgb3IKKyAgICAgICAgICAgIHNlbGYuc3NsX3BvcnQgPCAxMDI0KQorCisKK2RlZiBt
YWluKG9wdGlvbnMsIHJlcGxheV9maWxlbmFtZSk6CisgIHBsYXRmb3JtX3NldHRpbmdzID0gcGxh
dGZvcm1zZXR0aW5ncy5nZXRfcGxhdGZvcm1fc2V0dGluZ3MoKQorICBpZiBvcHRpb25zLklzUm9v
dFJlcXVpcmVkKCk6CisgICAgcGxhdGZvcm1fc2V0dGluZ3MucmVydW5fYXNfYWRtaW5pc3RyYXRv
cigpCisgIGNvbmZpZ3VyZV9sb2dnaW5nKHBsYXRmb3JtX3NldHRpbmdzLCBvcHRpb25zLmxvZ19s
ZXZlbCwgb3B0aW9ucy5sb2dfZmlsZSkKKworICBzZXJ2ZXJfbWFuYWdlciA9IHNlcnZlcm1hbmFn
ZXIuU2VydmVyTWFuYWdlcihvcHRpb25zLnJlY29yZCkKKyAgY2FjaGVfbWlzc2VzID0gTm9uZQor
ICBpZiBvcHRpb25zLmNhY2hlX21pc3NfZmlsZToKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcHRp
b25zLmNhY2hlX21pc3NfZmlsZSk6CisgICAgICBsb2dnaW5nLndhcm5pbmcoJ0NhY2hlIE1pc3Mg
QXJjaGl2ZSBmaWxlICVzIGFscmVhZHkgZXhpc3RzOyAnCisgICAgICAgICAgICAgICAgICAgICAg
J3JlcGxheSB3aWxsIGxvYWQgYW5kIGFwcGVuZCBlbnRyaWVzIHRvIGFyY2hpdmUgZmlsZScsCisg
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jYWNoZV9taXNzX2ZpbGUpCisgICAgICBjYWNo
ZV9taXNzZXMgPSBjYWNoZW1pc3NhcmNoaXZlLkNhY2hlTWlzc0FyY2hpdmUuTG9hZCgKKyAgICAg
ICAgICBvcHRpb25zLmNhY2hlX21pc3NfZmlsZSkKKyAgICBlbHNlOgorICAgICAgY2FjaGVfbWlz
c2VzID0gY2FjaGVtaXNzYXJjaGl2ZS5DYWNoZU1pc3NBcmNoaXZlKAorICAgICAgICAgIG9wdGlv
bnMuY2FjaGVfbWlzc19maWxlKQorICBpZiBvcHRpb25zLnNlcnZlcjoKKyAgICBBZGREbnNGb3J3
YXJkKHNlcnZlcl9tYW5hZ2VyLCBwbGF0Zm9ybV9zZXR0aW5ncywgb3B0aW9ucy5zZXJ2ZXIpCisg
IGVsc2U6CisgICAgaG9zdCA9IHBsYXRmb3JtX3NldHRpbmdzLmdldF9zZXJ2ZXJfaXBfYWRkcmVz
cyhvcHRpb25zLnNlcnZlcl9tb2RlKQorICAgIHJlYWxfZG5zX2xvb2t1cCA9IGRuc3Byb3h5LlJl
YWxEbnNMb29rdXAoCisgICAgICAgIG5hbWVfc2VydmVycz1bcGxhdGZvcm1fc2V0dGluZ3MuZ2V0
X29yaWdpbmFsX3ByaW1hcnlfZG5zKCldKQorICAgIGlmIG9wdGlvbnMucmVjb3JkOgorICAgICAg
aHR0cF9hcmNoaXZlID0gaHR0cGFyY2hpdmUuSHR0cEFyY2hpdmUoKQorICAgICAgaHR0cF9hcmNo
aXZlLkFzc2VydFdyaXRhYmxlKHJlcGxheV9maWxlbmFtZSkKKyAgICBlbHNlOgorICAgICAgaHR0
cF9hcmNoaXZlID0gaHR0cGFyY2hpdmUuSHR0cEFyY2hpdmUuTG9hZChyZXBsYXlfZmlsZW5hbWUp
CisgICAgICBsb2dnaW5nLmluZm8oJ0xvYWRlZCAlZCByZXNwb25zZXMgZnJvbSAlcycsCisgICAg
ICAgICAgICAgICAgICAgbGVuKGh0dHBfYXJjaGl2ZSksIHJlcGxheV9maWxlbmFtZSkKKyAgICBz
ZXJ2ZXJfbWFuYWdlci5BcHBlbmRSZWNvcmRDYWxsYmFjayhyZWFsX2Ruc19sb29rdXAuQ2xlYXJD
YWNoZSkKKyAgICBzZXJ2ZXJfbWFuYWdlci5BcHBlbmRSZWNvcmRDYWxsYmFjayhodHRwX2FyY2hp
dmUuY2xlYXIpCisKKyAgICBpZiBvcHRpb25zLmRuc19mb3J3YXJkaW5nOgorICAgICAgaWYgbm90
IG9wdGlvbnMuc2VydmVyX21vZGU6CisgICAgICAgIEFkZERuc0ZvcndhcmQoc2VydmVyX21hbmFn
ZXIsIHBsYXRmb3JtX3NldHRpbmdzLCBob3N0KQorICAgICAgQWRkRG5zUHJveHkoc2VydmVyX21h
bmFnZXIsIG9wdGlvbnMsIGhvc3QsIHJlYWxfZG5zX2xvb2t1cCwgaHR0cF9hcmNoaXZlKQorICAg
IGlmIG9wdGlvbnMuc3NsIGFuZCBvcHRpb25zLmNlcnRmaWxlIGlzIE5vbmU6CisgICAgICBBZGRU
ZW1wb3JhcnlDZXJ0RmlsZShzZXJ2ZXJfbWFuYWdlciwgb3B0aW9ucywgcGxhdGZvcm1fc2V0dGlu
Z3MpCisgICAgQWRkV2ViUHJveHkoc2VydmVyX21hbmFnZXIsIG9wdGlvbnMsIGhvc3QsIHJlYWxf
ZG5zX2xvb2t1cCwKKyAgICAgICAgICAgICAgICBodHRwX2FyY2hpdmUsIGNhY2hlX21pc3NlcykK
KyAgICBBZGRUcmFmZmljU2hhcGVyKHNlcnZlcl9tYW5hZ2VyLCBvcHRpb25zLCBob3N0KQorCisg
IGV4aXRfc3RhdHVzID0gMAorICB0cnk6CisgICAgc2VydmVyX21hbmFnZXIuUnVuKCkKKyAgZXhj
ZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgIGxvZ2dpbmcuaW5mbygnU2h1dHRpbmcgZG93bi4n
KQorICBleGNlcHQgKGRuc3Byb3h5LkRuc1Byb3h5RXhjZXB0aW9uLAorICAgICAgICAgIHRyYWZm
aWNzaGFwZXIuVHJhZmZpY1NoYXBlckV4Y2VwdGlvbiwKKyAgICAgICAgICBwbGF0Zm9ybXNldHRp
bmdzLk5vdEFkbWluaXN0cmF0b3JFcnJvciwKKyAgICAgICAgICBwbGF0Zm9ybXNldHRpbmdzLkRu
c1VwZGF0ZUVycm9yKSBhcyBlOgorICAgIGxvZ2dpbmcuY3JpdGljYWwoJyVzOiAlcycsIGUuX19j
bGFzc19fLl9fbmFtZV9fLCBlKQorICAgIGV4aXRfc3RhdHVzID0gMQorICBleGNlcHQ6CisgICAg
bG9nZ2luZy5jcml0aWNhbCh0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgIGV4aXRfc3RhdHVz
ID0gMgorCisgIGlmIG9wdGlvbnMucmVjb3JkOgorICAgIGh0dHBfYXJjaGl2ZS5QZXJzaXN0KHJl
cGxheV9maWxlbmFtZSkKKyAgICBsb2dnaW5nLmluZm8oJ1NhdmVkICVkIHJlc3BvbnNlcyB0byAl
cycsIGxlbihodHRwX2FyY2hpdmUpLCByZXBsYXlfZmlsZW5hbWUpCisgIGlmIGNhY2hlX21pc3Nl
czoKKyAgICBjYWNoZV9taXNzZXMuUGVyc2lzdCgpCisgICAgbG9nZ2luZy5pbmZvKCdTYXZlZCAl
ZCBjYWNoZSBtaXNzZXMgYW5kICVkIHJlcXVlc3RzIHRvICVzJywKKyAgICAgICAgICAgICAgICAg
Y2FjaGVfbWlzc2VzLmdldF90b3RhbF9jYWNoZV9taXNzZXMoKSwKKyAgICAgICAgICAgICAgICAg
bGVuKGNhY2hlX21pc3Nlcy5yZXF1ZXN0X2NvdW50cy5rZXlzKCkpLAorICAgICAgICAgICAgICAg
ICBvcHRpb25zLmNhY2hlX21pc3NfZmlsZSkKKyAgcmV0dXJuIGV4aXRfc3RhdHVzCisKKworaWYg
X19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgY2xhc3MgUGxhaW5IZWxwRm9ybWF0dGVyKG9wdHBh
cnNlLkluZGVudGVkSGVscEZvcm1hdHRlcik6CisgICAgZGVmIGZvcm1hdF9kZXNjcmlwdGlvbihz
ZWxmLCBkZXNjcmlwdGlvbik6CisgICAgICBpZiBkZXNjcmlwdGlvbjoKKyAgICAgICAgcmV0dXJu
IGRlc2NyaXB0aW9uICsgJ1xuJworICAgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICcnCisgIG9w
dGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICB1c2FnZT0nJXByb2cg
W29wdGlvbnNdIHJlcGxheV9maWxlJywKKyAgICAgIGZvcm1hdHRlcj1QbGFpbkhlbHBGb3JtYXR0
ZXIoKSwKKyAgICAgIGRlc2NyaXB0aW9uPV9fZG9jX18sCisgICAgICBlcGlsb2c9J2h0dHA6Ly9j
b2RlLmdvb2dsZS5jb20vcC93ZWItcGFnZS1yZXBsYXkvJykKKworICBvcHRpb25fcGFyc2VyLmFk
ZF9vcHRpb24oJy1zJywgJy0tc3BkeScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICBhY3Rpb249J3N0
b3JlJywKKyAgICAgIHR5cGU9J3N0cmluZycsCisgICAgICBoZWxwPSdVc2Ugc3BkeSB0byByZXBs
YXkgcmVsYXlfZmlsZS4gIC0tc3BkeT0ibm8tc3NsIiB1c2VzIFNQRFkgd2l0aG91dCBTU0wuJykK
KyAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctcicsICctLXJlY29yZCcsIGRlZmF1bHQ9RmFs
c2UsCisgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgaGVscD0nRG93bmxvYWQgcmVh
bCByZXNwb25zZXMgYW5kIHJlY29yZCB0aGVtIHRvIHJlcGxheV9maWxlJykKKyAgb3B0aW9uX3Bh
cnNlci5hZGRfb3B0aW9uKCctbCcsICctLWxvZ19sZXZlbCcsIGRlZmF1bHQ9J2RlYnVnJywKKyAg
ICAgIGFjdGlvbj0nc3RvcmUnLAorICAgICAgdHlwZT0nY2hvaWNlJywKKyAgICAgIGNob2ljZXM9
KCdkZWJ1ZycsICdpbmZvJywgJ3dhcm5pbmcnLCAnZXJyb3InLCAnY3JpdGljYWwnKSwKKyAgICAg
IGhlbHA9J01pbmltdW0gdmVyYm9zaXR5IGxldmVsIHRvIGxvZycpCisgIG9wdGlvbl9wYXJzZXIu
YWRkX29wdGlvbignLWYnLCAnLS1sb2dfZmlsZScsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgIGFjdGlv
bj0nc3RvcmUnLAorICAgICAgdHlwZT0nc3RyaW5nJywKKyAgICAgIGhlbHA9J0xvZyBmaWxlIHRv
IHVzZSBpbiBhZGRpdGlvbiB0byB3cml0dGluZyBsb2dzIHRvIHN0ZGVyci4nKQorICBvcHRpb25f
cGFyc2VyLmFkZF9vcHRpb24oJy1lJywgJy0tY2FjaGVfbWlzc19maWxlJywgZGVmYXVsdD1Ob25l
LAorICAgICAgYWN0aW9uPSdzdG9yZScsCisgICAgICBkZXN0PSdjYWNoZV9taXNzX2ZpbGUnLAor
ICAgICAgdHlwZT0nc3RyaW5nJywKKyAgICAgIGhlbHA9J0FyY2hpdmUgZmlsZSB0byByZWNvcmQg
Y2FjaGUgbWlzc2VzIGFzIHBpY2tsZWQgb2JqZWN0cy4nCisgICAgICAgICAgICdDYWNoZSBtaXNz
ZXMgb2NjdXIgd2hlbiBhIHJlcXVlc3QgY2Fubm90IGJlIHNlcnZlZCBpbiByZXBsYXkgbW9kZS4n
KQorCisgIG5ldHdvcmtfZ3JvdXAgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChvcHRpb25fcGFyc2Vy
LAorICAgICAgJ05ldHdvcmsgU2ltdWxhdGlvbiBPcHRpb25zJywKKyAgICAgICdUaGVzZSBvcHRp
b25zIGNvbmZpZ3VyZSB0aGUgbmV0d29yayBzaW11bGF0aW9uIGluIHJlcGxheSBtb2RlJykKKyAg
bmV0d29ya19ncm91cC5hZGRfb3B0aW9uKCctdScsICctLXVwJywgZGVmYXVsdD0nMCcsCisgICAg
ICBhY3Rpb249J3N0b3JlJywKKyAgICAgIHR5cGU9J3N0cmluZycsCisgICAgICBoZWxwPSdVcGxv
YWQgQmFuZHdpZHRoIGluIFtLfE1de2JpdC9zfEJ5dGUvc30uIFplcm8gbWVhbnMgdW5saW1pdGVk
LicpCisgIG5ldHdvcmtfZ3JvdXAuYWRkX29wdGlvbignLWQnLCAnLS1kb3duJywgZGVmYXVsdD0n
MCcsCisgICAgICBhY3Rpb249J3N0b3JlJywKKyAgICAgIHR5cGU9J3N0cmluZycsCisgICAgICBo
ZWxwPSdEb3dubG9hZCBCYW5kd2lkdGggaW4gW0t8TV17Yml0L3N8Qnl0ZS9zfS4gWmVybyBtZWFu
cyB1bmxpbWl0ZWQuJykKKyAgbmV0d29ya19ncm91cC5hZGRfb3B0aW9uKCctbScsICctLWRlbGF5
X21zJywgZGVmYXVsdD0nMCcsCisgICAgICBhY3Rpb249J3N0b3JlJywKKyAgICAgIHR5cGU9J3N0
cmluZycsCisgICAgICBoZWxwPSdQcm9wYWdhdGlvbiBkZWxheSAobGF0ZW5jeSkgaW4gbWlsbGlz
ZWNvbmRzLiBaZXJvIG1lYW5zIG5vIGRlbGF5LicpCisgIG5ldHdvcmtfZ3JvdXAuYWRkX29wdGlv
bignLXAnLCAnLS1wYWNrZXRfbG9zc19yYXRlJywgZGVmYXVsdD0nMCcsCisgICAgICBhY3Rpb249
J3N0b3JlJywKKyAgICAgIHR5cGU9J3N0cmluZycsCisgICAgICBoZWxwPSdQYWNrZXQgbG9zcyBy
YXRlIGluIHJhbmdlIFswLi4xXS4gWmVybyBtZWFucyBubyBsb3NzLicpCisgIG5ldHdvcmtfZ3Jv
dXAuYWRkX29wdGlvbignLXcnLCAnLS1pbml0X2N3bmQnLCBkZWZhdWx0PScwJywKKyAgICAgIGFj
dGlvbj0nc3RvcmUnLAorICAgICAgdHlwZT0nc3RyaW5nJywKKyAgICAgIGhlbHA9J1NldCBpbml0
aWFsIGN3bmQgKGxpbnV4IG9ubHksIHJlcXVpcmVzIGtlcm5lbCBwYXRjaCknKQorICBuZXR3b3Jr
X2dyb3VwLmFkZF9vcHRpb24oJy0tbmV0JywgZGVmYXVsdD1Ob25lLAorICAgICAgYWN0aW9uPSdz
dG9yZScsCisgICAgICB0eXBlPSdjaG9pY2UnLAorICAgICAgY2hvaWNlcz1PcHRpb25zV3JhcHBl
ci5ORVRfQ0hPSUNFUywKKyAgICAgIGhlbHA9J1NlbGVjdCBhIHNldCBvZiBuZXR3b3JrIG9wdGlv
bnM6ICVzLicgJSAnLCAnLmpvaW4oCisgICAgICAgICAgT3B0aW9uc1dyYXBwZXIuTkVUX0NIT0lD
RVMpKQorICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAobmV0d29ya19ncm91cCkKKwor
ICBoYXJuZXNzX2dyb3VwID0gb3B0cGFyc2UuT3B0aW9uR3JvdXAob3B0aW9uX3BhcnNlciwKKyAg
ICAgICdSZXBsYXkgSGFybmVzcyBPcHRpb25zJywKKyAgICAgICdUaGVzZSBhZHZhbmNlZCBvcHRp
b25zIGNvbmZpZ3VyZSB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlIHJlcGxheSBoYXJuZXNzJykKKyAg
aGFybmVzc19ncm91cC5hZGRfb3B0aW9uKCctUycsICctLXNlcnZlcicsIGRlZmF1bHQ9Tm9uZSwK
KyAgICAgIGFjdGlvbj0nc3RvcmUnLAorICAgICAgdHlwZT0nc3RyaW5nJywKKyAgICAgIGhlbHA9
J0lQIGFkZHJlc3Mgb2YgaG9zdCBydW5uaW5nICJyZXBsYXkucHkgLS1zZXJ2ZXJfbW9kZSIuICcK
KyAgICAgICAgICAgJ1RoaXMgb25seSBjaGFuZ2VzIHRoZSBwcmltYXJ5IEROUyBuYW1lc2VydmVy
IHRvIHVzZSB0aGUgZ2l2ZW4gSVAuJykKKyAgaGFybmVzc19ncm91cC5hZGRfb3B0aW9uKCctTScs
ICctLXNlcnZlcl9tb2RlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1
ZScsCisgICAgICBoZWxwPSdSdW4gcmVwbGF5IEROUyAmIGh0dHAgcHJveGllcywgYW5kIHRyYWZm
aWNzaGFwaW5nIG9uIC0tcG9ydCAnCisgICAgICAgICAgICd3aXRob3V0IGNoYW5naW5nIHRoZSBw
cmltYXJ5IEROUyBuYW1lc2VydmVyLiAnCisgICAgICAgICAgICdPdGhlciBob3N0cyBtYXkgY29u
bmVjdCB0byB0aGlzIHVzaW5nICJyZXBsYXkucHkgLS1zZXJ2ZXIiICcKKyAgICAgICAgICAgJ29y
IGJ5IHBvaW50aW5nIHRoZWlyIEROUyB0byB0aGlzIHNlcnZlci4nKQorICBoYXJuZXNzX2dyb3Vw
LmFkZF9vcHRpb24oJy1pJywgJy0taW5qZWN0X3NjcmlwdHMnLCBkZWZhdWx0PSdkZXRlcm1pbmlz
dGljLmpzJywKKyAgICAgIGFjdGlvbj0nc3RvcmUnLAorICAgICAgZGVzdD0naW5qZWN0X3Njcmlw
dHMnLAorICAgICAgaGVscD0nQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBKYXZhU2NyaXB0IHNv
dXJjZXMgdG8gaW5qZWN0IGluIGFsbCAnCisgICAgICAgICAgICdwYWdlcy4gQnkgZGVmYXVsdCBh
IHNjcmlwdCBpcyBpbmplY3RlZCB0aGF0IGVsaW1pbmF0ZXMgc291cmNlcyAnCisgICAgICAgICAg
ICdvZiBlbnRyb3B5IHN1Y2ggYXMgRGF0ZSgpIGFuZCBNYXRoLnJhbmRvbSgpIGRldGVybWluaXN0
aWMuICcKKyAgICAgICAgICAgJ0NBVVRJT046IFdpdGhvdXQgZGV0ZXJtaW5pc3RpYy5qcywgbWFu
eSBwYWdlcyB3aWxsIG5vdCByZXBsYXkuJykKKyAgaGFybmVzc19ncm91cC5hZGRfb3B0aW9uKCct
RCcsICctLW5vLWRpZmZfdW5rbm93bl9yZXF1ZXN0cycsIGRlZmF1bHQ9VHJ1ZSwKKyAgICAgIGFj
dGlvbj0nc3RvcmVfZmFsc2UnLAorICAgICAgZGVzdD0nZGlmZl91bmtub3duX3JlcXVlc3RzJywK
KyAgICAgIGhlbHA9J0R1cmluZyByZXBsYXksIGRvIG5vdCBzaG93IGEgZGlmZiBvZiB1bmtub3du
IHJlcXVlc3RzIGFnYWluc3QgJworICAgICAgICAgICAndGhlaXIgbmVhcmVzdCBtYXRjaCBpbiB0
aGUgYXJjaGl2ZS4nKQorICBoYXJuZXNzX2dyb3VwLmFkZF9vcHRpb24oJy1DJywgJy0tdXNlX2Ns
b3Nlc3RfbWF0Y2gnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywK
KyAgICAgIGRlc3Q9J3VzZV9jbG9zZXN0X21hdGNoJywKKyAgICAgIGhlbHA9J0R1cmluZyByZXBs
YXksIGlmIGEgcmVxdWVzdCBpcyBub3QgZm91bmQsIHNlcnZlIHRoZSBjbG9zZXN0IG1hdGNoJwor
ICAgICAgICAgICAnaW4gdGhlIGFyY2hpdmUgaW5zdGVhZCBvZiBnaXZpbmcgYSA0MDQuJykKKyAg
aGFybmVzc19ncm91cC5hZGRfb3B0aW9uKCctVScsICctLXVzZV9zZXJ2ZXJfZGVsYXknLCBkZWZh
dWx0PUZhbHNlLAorICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgIGRlc3Q9J3VzZV9z
ZXJ2ZXJfZGVsYXknLAorICAgICAgaGVscD0nRHVyaW5nIHJlcGxheSwgc2ltdWxhdGUgc2VydmVy
IGRlbGF5IGJ5IGRlbGF5aW5nIHJlc3BvbnNlIHRpbWUgdG8nCisgICAgICAgICAgICdyZXF1ZXN0
cy4nKQorICBoYXJuZXNzX2dyb3VwLmFkZF9vcHRpb24oJy1JJywgJy0tc2NyZWVuc2hvdF9kaXIn
LCBkZWZhdWx0PU5vbmUsCisgICAgICBhY3Rpb249J3N0b3JlJywKKyAgICAgIHR5cGU9J3N0cmlu
ZycsCisgICAgICBoZWxwPSdTYXZlIFBORyBpbWFnZXMgb2YgdGhlIGxvYWRlZCBwYWdlIGluIHRo
ZSBnaXZlbiBkaXJlY3RvcnkuJykKKyAgaGFybmVzc19ncm91cC5hZGRfb3B0aW9uKCctUCcsICct
LW5vLWRuc19wcml2YXRlX3Bhc3N0aHJvdWdoJywgZGVmYXVsdD1UcnVlLAorICAgICAgYWN0aW9u
PSdzdG9yZV9mYWxzZScsCisgICAgICBkZXN0PSdkbnNfcHJpdmF0ZV9wYXNzdGhyb3VnaCcsCisg
ICAgICBoZWxwPSdEb25cJ3QgZm9yd2FyZCBETlMgcmVxdWVzdHMgdGhhdCByZXNvbHZlIHRvIHBy
aXZhdGUgbmV0d29yayAnCisgICAgICAgICAgICdhZGRyZXNzZXMuIENBVVRJT046IFdpdGggdGhp
cyBvcHRpb24gaW1wb3J0YW50IHNlcnZpY2VzIGxpa2UgJworICAgICAgICAgICAnS2VyYmVyb3Mg
d2lsbCByZXNvbHZlIHRvIHRoZSBIVFRQIHByb3h5IGFkZHJlc3MuJykKKyAgaGFybmVzc19ncm91
cC5hZGRfb3B0aW9uKCcteCcsICctLW5vLWRuc19mb3J3YXJkaW5nJywgZGVmYXVsdD1UcnVlLAor
ICAgICAgYWN0aW9uPSdzdG9yZV9mYWxzZScsCisgICAgICBkZXN0PSdkbnNfZm9yd2FyZGluZycs
CisgICAgICBoZWxwPSdEb25cJ3QgZm9yd2FyZCBETlMgcmVxdWVzdHMgdG8gdGhlIGxvY2FsIHJl
cGxheSBzZXJ2ZXIuICcKKyAgICAgICAgICAgJ0NBVVRJT046IFdpdGggdGhpcyBvcHRpb24gYW4g
ZXh0ZXJuYWwgbWVjaGFuaXNtIG11c3QgYmUgdXNlZCB0byAnCisgICAgICAgICAgICdmb3J3YXJk
IHRyYWZmaWMgdG8gdGhlIHJlcGxheSBzZXJ2ZXIuJykKKyAgaGFybmVzc19ncm91cC5hZGRfb3B0
aW9uKCctbycsICctLXBvcnQnLCBkZWZhdWx0PTgwLAorICAgICAgYWN0aW9uPSdzdG9yZScsCisg
ICAgICB0eXBlPSdpbnQnLAorICAgICAgaGVscD0nUG9ydCBudW1iZXIgdG8gbGlzdGVuIG9uLicp
CisgIGhhcm5lc3NfZ3JvdXAuYWRkX29wdGlvbignLS1zc2xfcG9ydCcsIGRlZmF1bHQ9NDQzLAor
ICAgICAgYWN0aW9uPSdzdG9yZScsCisgICAgICB0eXBlPSdpbnQnLAorICAgICAgaGVscD0nU1NM
IHBvcnQgbnVtYmVyIHRvIGxpc3RlbiBvbi4nKQorICBoYXJuZXNzX2dyb3VwLmFkZF9vcHRpb24o
Jy0tc2hhcGluZ19wb3J0JywgZGVmYXVsdD1Ob25lLAorICAgICAgYWN0aW9uPSdzdG9yZScsCisg
ICAgICB0eXBlPSdpbnQnLAorICAgICAgaGVscD0nUG9ydCBvbiB3aGljaCB0byBhcHBseSB0cmFm
ZmljIHNoYXBpbmcuICBEZWZhdWx0cyB0byB0aGUgJworICAgICAgICAgICAnbGlzdGVuIHBvcnQg
KC0tcG9ydCknKQorICBoYXJuZXNzX2dyb3VwLmFkZF9vcHRpb24oJy0tc3NsX3NoYXBpbmdfcG9y
dCcsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgIGFjdGlvbj0nc3RvcmUnLAorICAgICAgdHlwZT0naW50
JywKKyAgICAgIGhlbHA9J1NTTCBwb3J0IG9uIHdoaWNoIHRvIGFwcGx5IHRyYWZmaWMgc2hhcGlu
Zy4gIERlZmF1bHRzIHRvIHRoZSAnCisgICAgICAgICAgICdTU0wgbGlzdGVuIHBvcnQgKC0tc3Ns
X3BvcnQpJykKKyAgaGFybmVzc19ncm91cC5hZGRfb3B0aW9uKCctYycsICctLWNlcnRmaWxlJywg
ZGVmYXVsdD1Ob25lLAorICAgICAgYWN0aW9uPSdzdG9yZScsCisgICAgICB0eXBlPSdzdHJpbmcn
LAorICAgICAgaGVscD0nQ2VydGlmaWNhdGUgZmlsZSB0byB1c2Ugd2l0aCBTU0wgKGdldHMgYXV0
by1nZW5lcmF0ZWQgaWYgbmVlZGVkKS4nKQorICBoYXJuZXNzX2dyb3VwLmFkZF9vcHRpb24oJy0t
bm8tc3NsJywgZGVmYXVsdD1UcnVlLAorICAgICAgYWN0aW9uPSdzdG9yZV9mYWxzZScsCisgICAg
ICBkZXN0PSdzc2wnLAorICAgICAgaGVscD0nRG8gbm90IHNldHVwIGFuIFNTTCBwcm94eS4nKQor
ICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAoaGFybmVzc19ncm91cCkKKworICBvcHRp
b25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkKKyAgb3B0aW9ucyA9IE9wdGlv
bnNXcmFwcGVyKG9wdGlvbnMsIG9wdGlvbl9wYXJzZXIpCisKKyAgaWYgb3B0aW9ucy5zZXJ2ZXI6
CisgICAgcmVwbGF5X2ZpbGVuYW1lID0gTm9uZQorICBlbGlmIGxlbihhcmdzKSAhPSAxOgorICAg
IG9wdGlvbl9wYXJzZXIuZXJyb3IoJ011c3Qgc3BlY2lmeSBhIHJlcGxheV9maWxlJykKKyAgZWxz
ZToKKyAgICByZXBsYXlfZmlsZW5hbWUgPSBhcmdzWzBdCisKKworICBzeXMuZXhpdChtYWluKG9w
dGlvbnMsIHJlcGxheV9maWxlbmFtZSkpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9XZWJQ
YWdlUmVwbGF5L3JlcGxheS5weQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICAr
ICoKCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3JlcGxheXNwZHlzZXJ2ZXIucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS9yZXBsYXlzcGR5c2VydmVyLnB5CShyZXZpc2lv
biAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS9yZXBsYXlzcGR5c2VydmVyLnB5CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEyOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdo
dCAyMDEwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp
Y2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAg
ICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxl
c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
ZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2Ug
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxp
bWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQgZGFlbW9uc2VydmVyCitpbXBv
cnQgbG9nZ2luZworaW1wb3J0IGh0dHBhcmNoaXZlCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2lt
cG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCisKK2ltcG9ydCB0aGlyZF9wYXJ0eQorZnJvbSBu
Ymh0dHAgaW1wb3J0IHNwZHlfc2VydmVyCitmcm9tIG5iaHR0cCBpbXBvcnQgcHVzaF90Y3AKK2Zy
b20gbmJodHRwIGltcG9ydCBodHRwX2NvbW1vbgorCitDT05URU5UX0xFTkdUSCA9ICdjb250ZW50
LWxlbmd0aCcKK1NUQVRVUyA9ICdzdGF0dXMnCitWRVJTSU9OID0gJ3ZlcnNpb24nCisKK2NsYXNz
IFJlcGxheVNwZHlTZXJ2ZXIoZGFlbW9uc2VydmVyLkRhZW1vblNlcnZlcik6CisgIGRlZiBfX2lu
aXRfXyhzZWxmLCBodHRwX2FyY2hpdmVfZmV0Y2gsIGN1c3RvbV9oYW5kbGVycywKKyAgICAgICAg
ICAgICAgIGhvc3Q9J2xvY2FsaG9zdCcsIHBvcnQ9ODAsCisgICAgICAgICAgICAgICB1c2Vfc3Ns
PVRydWUsIGNlcnRmaWxlPU5vbmUsIGtleWZpbGU9Tm9uZSk6CisgICAgI1RPRE8obHpoZW5nKTog
ZmlndXJlIG91dCBob3cgdG8gZ2V0IHRoZSBsb2cgbGV2ZWwgZnJvbSBtYWluLgorICAgIHNlbGYu
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ1JlcGxheVNwZHlTZXJ2ZXInKQorICAgIHNlbGYubG9n
LnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBzZWxmLmh0dHBfYXJjaGl2ZV9mZXRjaCA9IGh0
dHBfYXJjaGl2ZV9mZXRjaAorICAgIHNlbGYuY3VzdG9tX2hhbmRsZXJzID0gY3VzdG9tX2hhbmRs
ZXJzCisgICAgc2VsZi5ob3N0ID0gaG9zdAorICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICBzZWxm
LnVzZV9zc2wgPSB1c2Vfc3NsCisgICAgaWYgc2VsZi51c2Vfc3NsIGFuZCAobm90IGNlcnRmaWxl
IG9yIG5vdCBrZXlmaWxlKToKKyAgICAgICAgc2VsZi5sb2cuZXJyb3IoJ1NQRFkgU1NMIG1vZGUg
cmVxdWlyZXMgYSBrZXlmaWxlIGFuZCBjZXJ0aWZpY2F0ZSBmaWxlJykKKyAgICAgICAgcmFpc2Ug
RXhjZXB0aW9uKCdrZXlmaWxlIG9yIGNlcnRmaWxlIG1pc3NpbmcnKQorICAgIHNlbGYuc3BkeV9z
ZXJ2ZXIgPSBzcGR5X3NlcnZlci5TcGR5U2VydmVyKGhvc3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnVzZV9zc2wsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcXVlc3RfaGFuZGxlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZykKKworICBkZWYg
c2VydmVfZm9yZXZlcihzZWxmKToKKyAgICBzZWxmLmxvZy5pbmZvKCdSZXBsYXlpbmcgd2l0aCBT
UERZIG9uICVzOiVkJywgc2VsZi5ob3N0LCBzZWxmLnBvcnQpCisgICAgcHVzaF90Y3AucnVuKCkK
KworICBkZWYgY2xlYW51cChzZWxmKToKKyAgICBwdXNoX3RjcC5zdG9wKCkKKyAgICBzZWxmLmxv
Zy5pbmZvKCdTdG9wcGVkIHNwZHkgc2VydmVyJykKKworICBkZWYgcmVxdWVzdF9oYW5kbGVyKHNl
bGYsIG1ldGhvZCwgdXJpLCBoZHJzLCByZXNfc3RhcnQsIHJlcV9wYXVzZSk6CisgICAgIiIiCisg
ICAgQmFzZWQgb24gbWV0aG9kLCBob3N0IGFuZCB1cmkgdG8gZmV0Y2ggdGhlIG1hdGNoaW5nIHJl
c3BvbnNlIGFuZCByZXBseQorICAgIHRvIGJyb3dzZXIgdXNpbmcgc3BkeS4KKyAgICAiIiIKKyAg
ICBkdW1teSA9IGh0dHBfY29tbW9uLmR1bW15CisgICAgZGVmIHNpbXBsZV9yZXNwb25kZXIoY29k
ZSwgY29udGVudCk6CisgICAgICByZXNfaGRycyA9IFsoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L2h0
bWwnKSwgKCd2ZXJzaW9uJywgJ0hUVFAvMS4xJyldCisgICAgICByZXNfYm9keSwgcmVzX2RvbmUg
PSByZXNfc3RhcnQoc3RyKGNvZGUpLCBjb250ZW50LCByZXNfaGRycywgZHVtbXkpCisgICAgICBy
ZXNfYm9keShOb25lKQorICAgICAgcmVzX2RvbmUoTm9uZSkKKworICAgIGhvc3QgPSAnJworICAg
IGZvciBuYW1lLCB2YWx1ZSBpbiBoZHJzOgorICAgICAgaWYgbmFtZS5sb3dlcigpID09ICdob3N0
JzoKKyAgICAgICAgaG9zdCA9IHZhbHVlCisgICAgc2VsZi5sb2cuZGVidWcoInJlcXVlc3Q6ICVz
LCB1cmk6ICVzLCBtZXRob2Q6ICVzIiwgaG9zdCwgdXJpLCBtZXRob2QpCisKKyAgICBpZiBtZXRo
b2QgPT0gJ0dFVCc6CisgICAgICByZXF1ZXN0ID0gaHR0cGFyY2hpdmUuQXJjaGl2ZWRIdHRwUmVx
dWVzdCgKKyAgICAgICAgICBtZXRob2QsIGhvc3QsIHVyaSwgTm9uZSwgZGljdChoZHJzKSkKKyAg
ICAgIHJlc3BvbnNlX2NvZGUgPSBzZWxmLmN1c3RvbV9oYW5kbGVycy5oYW5kbGUocmVxdWVzdCkK
KyAgICAgIGlmIHJlc3BvbnNlX2NvZGU6CisgICAgICAgIHNpbXBsZV9yZXNwb25kZXIocmVzcG9u
c2VfY29kZSwgIkhhbmRsZWQgYnkgY3VzdG9tIGhhbmRsZXJzIikKKyAgICAgICAgcmV0dXJuIGR1
bW15LCBkdW1teQorICAgICAgcmVzcG9uc2UgPSBzZWxmLmh0dHBfYXJjaGl2ZV9mZXRjaChyZXF1
ZXN0KQorICAgICAgaWYgcmVzcG9uc2U6CisgICAgICAgIHJlc19oZHJzID0gWygndmVyc2lvbics
ICdIVFRQLzEuMScpXQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gcmVzcG9uc2UuaGVhZGVy
czoKKyAgICAgICAgICBuYW1lX2xvd2VyID0gbmFtZS5sb3dlcigpCisgICAgICAgICAgaWYgbmFt
ZV9sb3dlciA9PSBDT05URU5UX0xFTkdUSDoKKyAgICAgICAgICAgIHJlc19oZHJzLmFwcGVuZCgo
bmFtZSwgc3RyKHZhbHVlKSkpCisgICAgICAgICAgZWxpZiBuYW1lX2xvd2VyIGluIChTVEFUVVMs
IFZFUlNJT04pOgorICAgICAgICAgICAgcGFzcworICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICByZXNfaGRycy5hcHBlbmQoKG5hbWVfbG93ZXIsIHZhbHVlKSkKKyAgICAgICAgcmVzX2JvZHks
IHJlc19kb25lID0gcmVzX3N0YXJ0KAorICAgICAgICAgICAgc3RyKHJlc3BvbnNlLnN0YXR1cyks
IHJlc3BvbnNlLnJlYXNvbiwgcmVzX2hkcnMsIGR1bW15KQorICAgICAgICBib2R5ID0gJycKKyAg
ICAgICAgZm9yIGl0ZW0gaW4gcmVzcG9uc2UucmVzcG9uc2VfZGF0YToKKyAgICAgICAgICByZXNf
Ym9keShpdGVtKQorICAgICAgICByZXNfZG9uZShOb25lKQorICAgICAgZWxzZToKKyAgICAgICAg
c2VsZi5sb2cuZXJyb3IoIjQwNCByZXR1cm5lZDogJXMgJXMiLCBtZXRob2QsIHVyaSkKKyAgICAg
ICAgc2ltcGxlX3Jlc3BvbmRlcig0MDQsICJmaWxlIG5vdCBmb3VuZCIpCisgICAgZWxzZToKKyAg
ICAgICMgVE9ETyhsemhlbmcpOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgbWV0aG9kcy4KKyAgICAg
IHNlbGYubG9nLmVycm9yKCJtZXRob2Q6ICVzIGlzIG5vdCBzdXBwb3J0ZWQ6ICVzIiwgbWV0aG9k
LCB1cmkpCisgICAgICBzaW1wbGVfcmVzcG9uZGVyKDUwMCwgIk5vdCBzdXBwb3J0ZWQiKQorICAg
IHJldHVybiBkdW1teSwgZHVtbXkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAg
IGxvZ2dpbmcuYmFzaWNDb25maWcoKQorICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdzZXJ2
ZXInKQorICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgZmlsZW5hbWUgPSBzeXMu
YXJndlsxXQorICAgIGhvc3QgPSAnMTI3LjAuMC4xJworICAgIHBvcnQgPSA4MDg4CisgICAgc2Vy
dmVyID0gUmVwbGF5U3BkeVNlcnZlcihmaWxlbmFtZSwgaG9zdCwgcG9ydCkKKyAgICBzZXJ2ZXJf
dGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLnNlcnZlX2ZvcmV2ZXIpCisg
ICAgc2VydmVyX3RocmVhZC5zZXREYWVtb24oVHJ1ZSkKKyAgICBzZXJ2ZXJfdGhyZWFkLnN0YXJ0
KCkKKyAgICB0aW1lLnNsZWVwKDYwKQorICAgIHNlcnZlci5jbGVhbnVwKCk7CgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBUb29scy9XZWJQYWdlUmVwbGF5L3JlcGxheXNwZHlzZXJ2ZXIucHkKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogVG9vbHMvV2ViUGFnZVJl
cGxheS9zZXJ2ZXJtYW5hZ2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkv
c2VydmVybWFuYWdlci5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvc2Vy
dmVybWFuYWdlci5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
ICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4g
Y29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg
dGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
TElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIiIi
Q29udHJvbCAicmVwbGF5LnB5IC0tc2VydmVyX21vZGUiIChlLmcuIHN3aXRjaCBmcm9tIHJlY29y
ZCB0byByZXBsYXkpLiIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitjbGFzcyBTZXJ2
ZXJNYW5hZ2VyKG9iamVjdCk6CisgICIiIlJ1biBzZXJ2ZXJzIHVudGlsIGlzIHJlbW92ZWQgb3Ig
YW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworICBTZXJ2ZXJzIHN0YXJ0IGluIHRoZSBvcmRlciB0
aGV5IGFyZSBhcHBlbmRlZCBhbmQgc3RvcCBpbiB0aGUKKyAgb3Bwb3NpdGUgb3JkZXIuIFNlcnZl
cnMgYXJlIHN0YXJ0ZWQgYnkgY2FsbGluZyB0aGUgaW5pdGlhbGl6ZXIKKyAgcGFzc2VkIHRvIFNl
cnZlck1hbmFnZXIuQXBwZW5kKCkgYW5kIGJ5IGNhbGxpbmcgX19lbnRlcl9fKCkuIE9uY2UgYW4K
KyAgc2VydmVyJ3MgaW5pdGlhbGl6ZXIgaXMgY2FsbGVkIHN1Y2Nlc3NmdWxseSwgdGhlIF9fZXhp
dF9fKCkgZnVuY3Rpb24KKyAgaXMgZ3VhcmFudGVlZCB0byBiZSBjYWxsZWQgd2hlbiBTZXJ2ZXJN
YW5hZ2VyLlJ1bigpIGNvbXBsZXRlcy4KKyAgIiIiCisKKyAgZGVmIF9faW5pdF9fKHNlbGYsIGlz
X3JlY29yZF9tb2RlKToKKyAgICAiIiJJbml0aWFsaXplIGEgc2VydmVyIG1hbmFnZXIuIiIiCisg
ICAgc2VsZi5pbml0aWFsaXplcnMgPSBbXQorICAgIHNlbGYucmVjb3JkX2NhbGxiYWNrcyA9IFtd
CisgICAgc2VsZi5yZXBsYXlfY2FsbGJhY2tzID0gW10KKyAgICBzZWxmLmlzX3JlY29yZF9tb2Rl
ID0gaXNfcmVjb3JkX21vZGUKKworICBkZWYgQXBwZW5kKHNlbGYsIGluaXRpYWxpemVyLCAqaW5p
dF9hcmdzLCAqKmluaXRfa3dhcmdzKToKKyAgICAiIiJBcHBlbmQgYSBzZXJ2ZXIgdG8gdGhlIGVu
ZCBvZiB0aGUgbGlzdCB0byBydW4uCisKKyAgICBTZXJ2ZXJzIHN0YXJ0IGluIHRoZSBvcmRlciB0
aGV5IGFyZSBhcHBlbmRlZCBhbmQgc3RvcCBpbiB0aGUKKyAgICBvcHBvc2l0ZSBvcmRlci4KKwor
ICAgIEFyZ3M6CisgICAgICBpbml0aWFsaXplcjogYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBz
ZXJ2ZXIgaW5zdGFuY2UuCisgICAgICAgICAgQSBzZXJ2ZXIgbmVlZHMgdG8gaW1wbGVtZW50IHRo
ZSB3aXRoLXN0YXRlbWVudCBpbnRlcmZhY2UuCisgICAgICBpbml0X2FyZ3M6IHBvc2l0aW9uYWwg
YXJndW1lbnRzIGZvciB0aGUgaW5pdGlhbGl6ZXIuCisgICAgICBpbml0X2FyZ3M6IGtleXdvcmQg
YXJndW1lbnRzIGZvciB0aGUgaW5pdGlhbGl6ZXIuCisgICAgIiIiCisgICAgc2VsZi5pbml0aWFs
aXplcnMuYXBwZW5kKChpbml0aWFsaXplciwgaW5pdF9hcmdzLCBpbml0X2t3YXJncykpCisKKyAg
ZGVmIEFwcGVuZFJlY29yZENhbGxiYWNrKHNlbGYsIGZ1bmMpOgorICAgICIiIkFwcGVuZCBhIGZ1
bmN0aW9uIHRvIHRoZSBsaXN0IHRvIGNhbGwgd2hlbiBzd2l0Y2hpbmcgdG8gcmVjb3JkIG1vZGUu
CisKKyAgICBBcmdzOgorICAgICAgZnVuYzogYSBmdW5jdGlvbiB0aGF0IHRha2VzIG5vIGFyZ3Vt
ZW50cyBhbmQgcmV0dXJucyBubyB2YWx1ZS4KKyAgICAiIiIKKyAgICBzZWxmLnJlY29yZF9jYWxs
YmFja3MuYXBwZW5kKGZ1bmMpCisKKyAgZGVmIEFwcGVuZFJlcGxheUNhbGxiYWNrKHNlbGYsIGZ1
bmMpOgorICAgICIiIkFwcGVuZCBhIGZ1bmN0aW9uIHRvIHRoZSBsaXN0IHRvIGNhbGwgd2hlbiBz
d2l0Y2hpbmcgdG8gcmVwbGF5IG1vZGUuCisKKyAgICBBcmdzOgorICAgICAgZnVuYzogYSBmdW5j
dGlvbiB0aGF0IHRha2VzIG5vIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBubyB2YWx1ZS4KKyAgICAi
IiIKKyAgICBzZWxmLnJlcGxheV9jYWxsYmFja3MuYXBwZW5kKGZ1bmMpCisKKyAgZGVmIElzUmVj
b3JkTW9kZShzZWxmKToKKyAgICAiIiJDYWxsIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBi
ZWVuIHJlZ2lzdGVyZWQgdG8gZW50ZXIgcmVwbGF5IG1vZGUuIiIiCisgICAgcmV0dXJuIHNlbGYu
aXNfcmVjb3JkX21vZGUKKworICBkZWYgU2V0UmVjb3JkTW9kZShzZWxmKToKKyAgICAiIiJDYWxs
IGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgdG8gZW50ZXIgcmVj
b3JkIG1vZGUuIiIiCisgICAgc2VsZi5pc19yZWNvcmRfbW9kZSA9IFRydWUKKyAgICBmb3IgcmVj
b3JkX2Z1bmMgaW4gc2VsZi5yZWNvcmRfY2FsbGJhY2tzOgorICAgICAgcmVjb3JkX2Z1bmMoKQor
CisgIGRlZiBTZXRSZXBsYXlNb2RlKHNlbGYpOgorICAgICIiIkNhbGwgYWxsIHRoZSBmdW5jdGlv
bnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCB0byBlbnRlciByZXBsYXkgbW9kZS4iIiIKKyAg
ICBzZWxmLmlzX3JlY29yZF9tb2RlID0gRmFsc2UKKyAgICBmb3IgcmVwbGF5X2Z1bmMgaW4gc2Vs
Zi5yZXBsYXlfY2FsbGJhY2tzOgorICAgICAgcmVwbGF5X2Z1bmMoKQorCisgIGRlZiBSdW4oc2Vs
Zik6CisgICAgIiIiQ3JlYXRlIHRoZSBzZXJ2ZXJzIGFuZCBsb29wLgorCisgICAgVGhlIGxvb3Ag
cXVpdHMgaWYgYSBzZXJ2ZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworICAgIFJhaXNlczoKKyAg
ICAgIGFueSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSBzZXJ2ZXJzCisgICAgIiIiCisgICAgc2Vy
dmVyX2V4aXRzID0gW10KKyAgICBleGNlcHRpb25faW5mbyA9IChOb25lLCBOb25lLCBOb25lKQor
ICAgIHRyeToKKyAgICAgIGZvciBpbml0aWFsaXplciwgaW5pdF9hcmdzLCBpbml0X2t3YXJncyBp
biBzZWxmLmluaXRpYWxpemVyczoKKyAgICAgICAgc2VydmVyID0gaW5pdGlhbGl6ZXIoKmluaXRf
YXJncywgKippbml0X2t3YXJncykKKyAgICAgICAgc2VydmVyX2V4aXRzLmluc2VydCgwLCBzZXJ2
ZXIuX19leGl0X18pCisgICAgICAgIHNlcnZlci5fX2VudGVyX18oKQorCisgICAgICB3aGlsZSBU
cnVlOgorICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgZXhjZXB0OgorICAgICAgZXhjZXB0aW9u
X2luZm8gPSBzeXMuZXhjX2luZm8oKQorICAgIGZpbmFsbHk6CisgICAgICBmb3Igc2VydmVyX2V4
aXQgaW4gc2VydmVyX2V4aXRzOgorICAgICAgICB0cnk6CisgICAgICAgICAgaWYgc2VydmVyX2V4
aXQoKmV4Y2VwdGlvbl9pbmZvKToKKyAgICAgICAgICAgIGV4Y2VwdGlvbl9pbmZvID0gKE5vbmUs
IE5vbmUsIE5vbmUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICBleGNlcHRpb25faW5mbyA9
IHN5cy5leGNfaW5mbygpCisgICAgICBpZiBleGNlcHRpb25faW5mbyAhPSAoTm9uZSwgTm9uZSwg
Tm9uZSk6CisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sx
XSwgZXhjZXB0aW9uX2luZm9bMl0KSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdHJhZmZpY3No
YXBlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RyYWZmaWNzaGFwZXIu
cHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RyYWZmaWNzaGFwZXIucHkJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTk1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMg
Q29weXJpZ2h0IDIwMTAgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGlj
ZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNl
Iik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisj
CisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3Jp
dGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2ltcG9ydCBsb2dnaW5nCitp
bXBvcnQgcGxhdGZvcm1zZXR0aW5ncworaW1wb3J0IHJlCisKKworIyBNYWMgaGFzIGJyb2tlbiBi
YW5kd2l0ZGggcGFyc2luZywgc28gZG91YmxlIGNoZWNrIHRoZSB2YWx1ZXMuCisjIE9uIE1hYyBP
UyBYIDEwLjYsICJLQml0L3MiIGFjdHVhbGx5IHVzZXMgIktCeXRlL3MiLgorQkFORFdJRFRIX1BB
VFRFUk4gPSByJzB8XGQrW0tNXT8oYml0fEJ5dGUpL3MnCisKKworY2xhc3MgVHJhZmZpY1NoYXBl
ckV4Y2VwdGlvbihFeGNlcHRpb24pOgorICBwYXNzCisKKworY2xhc3MgQmFuZHdpZHRoVmFsdWVF
cnJvcihUcmFmZmljU2hhcGVyRXhjZXB0aW9uKToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVl
KToKKyAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICBy
ZXR1cm4gJ1ZhbHVlLCAiJXMiLCBkb2VzIG5vdCBtYXRjaCByZWdleDogJXMnICUgKAorICAgICAg
ICBzZWxmLnZhbHVlLCBCQU5EV0lEVEhfUEFUVEVSTikKKworCitjbGFzcyBUcmFmZmljU2hhcGVy
KG9iamVjdCk6CisgICIiIk1hbmFnZXMgbmV0d29yayB0cmFmZmljIHNoYXBpbmcuIiIiCisKKyAg
IyBQaWNrIHdlYnBhZ2V0ZXN0LWNvbXBhdGlibGUgdmFsdWVzIChkZXRhaWxzOiBodHRwOi8vZ29v
LmdsL29naFRnKS4KKyAgX1VQTE9BRF9QSVBFID0gJzEwJyAgICAgICMgRW5mb3JjZXMgb3ZlcmFs
bCB1cGxvYWQgYmFuZHdpZHRoLgorICBfVVBMT0FEX1FVRVVFID0gJzEwJyAgICAgIyBTaGFyZXMg
dXBsb2FkIGJhbmR3aWR0aCBhbW9uZyBzb3VyY2UgcG9ydHMuCisgIF9VUExPQURfUlVMRSA9ICc1
MDAwJyAgICAjIFNwZWNpZmllcyB3aGVuIHRoZSB1cGxvYWQgcXVldWUgaXMgdXNlZC4KKyAgX0RP
V05MT0FEX1BJUEUgPSAnMTEnICAgICMgRW5mb3JjZXMgb3ZlcmFsbCBkb3dubG9hZCBiYW5kd2lk
dGguCisgIF9ET1dOTE9BRF9RVUVVRSA9ICcxMScgICAjIFNoYXJlcyBkb3dubG9hZCBiYW5kd2lk
dGggYW1vbmcgZGVzdGluYXRpb24gcG9ydHMuCisgIF9ET1dOTE9BRF9SVUxFID0gJzUxMDAnICAj
IFNwZWNpZmllcyB3aGVuIHRoZSBkb3dubG9hZCBxdWV1ZSBpcyB1c2VkLgorCisgIF9CQU5EV0lE
VEhfUkUgPSByZS5jb21waWxlKEJBTkRXSURUSF9QQVRURVJOKQorCisgIGRlZiBfX2luaXRfXyhz
ZWxmLAorICAgICAgICAgICAgICAgZG9udF91c2U9Tm9uZSwKKyAgICAgICAgICAgICAgIGhvc3Q9
JzEyNy4wLjAuMScsCisgICAgICAgICAgICAgICBwb3J0PSc4MCcsCisgICAgICAgICAgICAgICBz
c2xfcG9ydD0nNDQzJywKKyAgICAgICAgICAgICAgIGRuc19wb3J0PSc1MycsCisgICAgICAgICAg
ICAgICB1cF9iYW5kd2lkdGg9JzAnLAorICAgICAgICAgICAgICAgZG93bl9iYW5kd2lkdGg9JzAn
LAorICAgICAgICAgICAgICAgZGVsYXlfbXM9JzAnLAorICAgICAgICAgICAgICAgcGFja2V0X2xv
c3NfcmF0ZT0nMCcsCisgICAgICAgICAgICAgICBpbml0X2N3bmQ9JzAnLAorICAgICAgICAgICAg
ICAgdXNlX2xvb3BiYWNrPVRydWUpOgorICAgICIiIlN0YXJ0IHNoYXBpbmcgdHJhZmZpYy4KKwor
ICAgIEFyZ3M6CisgICAgICBob3N0OiBhIGhvc3Qgc3RyaW5nIChuYW1lIG9yIElQKSBmb3IgdGhl
IHdlYiBwcm94eS4KKyAgICAgIHBvcnQ6IGEgcG9ydCBzdHJpbmcgKGUuZy4gJzgwJykgZm9yIHRo
ZSB3ZWIgcHJveHkuCisgICAgICBzc2xfcG9ydDogYSBwb3J0IHN0cmluZyAoZS5nLiAnNDQzJykg
Zm9yIHRoZSBTU0wgd2ViIHByb3h5LgorICAgICAgZG5zX3BvcnQ6IGEgcG9ydCBzdHJpbmcgZm9y
IHRoZSBkbnMgcHJveHkgKGZvciB1bml0IHRlc3RpbmcpLgorICAgICAgdXBfYmFuZHdpZHRoOiBV
cGxvYWQgYmFuZHdpZHRoCisgICAgICBkb3duX2JhbmR3aWR0aDogRG93bmxvYWQgYmFuZHdpZHRo
CisgICAgICAgICAgIEJhbmR3aWR0aHMgbWVhc3VyZWQgaW4gW0t8TV17Yml0L3N8Qnl0ZS9zfS4g
JzAnIG1lYW5zIHVubGltaXRlZC4KKyAgICAgIGRlbGF5X21zOiBQcm9wYWdhdGlvbiBkZWxheSBp
biBtaWxsaXNlY29uZHMuICcwJyBtZWFucyBubyBkZWxheS4KKyAgICAgIHBhY2tldF9sb3NzX3Jh
dGU6IFBhY2tldCBsb3NzIHJhdGUgaW4gcmFuZ2UgWzAuLjFdLiAnMCcgbWVhbnMgbm8gbG9zcy4K
KyAgICAgIGluaXRfY3duZDogdGhlIGluaXRpYWwgY3duZCBzZXR0aW5nLiAnMCcgbWVhbnMgbm8g
Y2hhbmdlLgorICAgICAgdXNlX2xvb3BiYWNrOiBUcnVlIGlmZiBzaGFwaW5nIGlzIGRvbmUgb24g
dGhlIGxvb3BiYWNrIChvciBlcXVpdikgYWRhcHRlci4KKyAgICAiIiIKKyAgICBhc3NlcnQgZG9u
dF91c2UgaXMgTm9uZSAgIyBGb3JjZSBhcmdzIHRvIGJlIG5hbWVkLgorICAgIHNlbGYucGxhdGZv
cm1zZXR0aW5ncyA9IHBsYXRmb3Jtc2V0dGluZ3MuZ2V0X3BsYXRmb3JtX3NldHRpbmdzKCkKKyAg
ICBzZWxmLmhvc3QgPSBob3N0CisgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgIHNlbGYuc3NsX3Bv
cnQgPSBzc2xfcG9ydAorICAgIHNlbGYuZG5zX3BvcnQgPSBkbnNfcG9ydAorICAgIHNlbGYudXBf
YmFuZHdpZHRoID0gdXBfYmFuZHdpZHRoCisgICAgc2VsZi5kb3duX2JhbmR3aWR0aCA9IGRvd25f
YmFuZHdpZHRoCisgICAgc2VsZi5kZWxheV9tcyA9IGRlbGF5X21zCisgICAgc2VsZi5wYWNrZXRf
bG9zc19yYXRlID0gcGFja2V0X2xvc3NfcmF0ZQorICAgIHNlbGYuaW5pdF9jd25kID0gaW5pdF9j
d25kCisgICAgc2VsZi51c2VfbG9vcGJhY2sgPSB1c2VfbG9vcGJhY2sKKyAgICBpZiBub3Qgc2Vs
Zi5fQkFORFdJRFRIX1JFLm1hdGNoKHNlbGYudXBfYmFuZHdpZHRoKToKKyAgICAgIHJhaXNlIEJh
bmR3aWR0aFZhbHVlRXJyb3Ioc2VsZi51cF9iYW5kd2lkdGgpCisgICAgaWYgbm90IHNlbGYuX0JB
TkRXSURUSF9SRS5tYXRjaChzZWxmLmRvd25fYmFuZHdpZHRoKToKKyAgICAgIHJhaXNlIEJhbmR3
aWR0aFZhbHVlRXJyb3Ioc2VsZi5kb3duX2JhbmR3aWR0aCkKKyAgICBzZWxmLmlzX3NoYXBpbmcg
PSBGYWxzZQorCisgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgaWYgc2VsZi51c2VfbG9vcGJh
Y2s6CisgICAgICBzZWxmLnBsYXRmb3Jtc2V0dGluZ3MuY29uZmlndXJlX2xvb3BiYWNrKCkKKyAg
ICBpZiBzZWxmLmluaXRfY3duZCAhPSAnMCc6CisgICAgICBzZWxmLnBsYXRmb3Jtc2V0dGluZ3Mu
c2V0X2N3bmQoc2VsZi5pbml0X2N3bmQpCisgICAgdHJ5OgorICAgICAgaXBmd19saXN0ID0gc2Vs
Zi5wbGF0Zm9ybXNldHRpbmdzLmlwZncoJ2xpc3QnKQorICAgICAgaWYgbm90IGlwZndfbGlzdC5z
dGFydHN3aXRoKCc2NTUzNSAnKToKKyAgICAgICAgbG9nZ2luZy53YXJuKCdpcGZ3IGhhcyBleGlz
dGluZyBydWxlczpcbiVzJywgaXBmd19saXN0KQorICAgICAgICBzZWxmLl9kZWxldGVfcnVsZXMo
aXBmd19saXN0KQorICAgIGV4Y2VwdDoKKyAgICAgIHBhc3MKKyAgICBpZiAoc2VsZi51cF9iYW5k
d2lkdGggPT0gJzAnIGFuZCBzZWxmLmRvd25fYmFuZHdpZHRoID09ICcwJyBhbmQKKyAgICAgICAg
c2VsZi5kZWxheV9tcyA9PSAnMCcgYW5kIHNlbGYucGFja2V0X2xvc3NfcmF0ZSA9PSAnMCcpOgor
ICAgICAgbG9nZ2luZy5pbmZvKCdTa2lwcGVkIHNoYXBpbmcgdHJhZmZpYy4nKQorICAgICAgcmV0
dXJuCisgICAgaWYgbm90IHNlbGYuZG5zX3BvcnQgYW5kIG5vdCBzZWxmLnBvcnQ6CisgICAgICBy
YWlzZSBUcmFmZmljU2hhcGVyRXhjZXB0aW9uKCdObyBwb3J0cyBvbiB3aGljaCB0byBzaGFwZSB0
cmFmZmljLicpCisKKyAgICBwb3J0cyA9ICcsJy5qb2luKAorICAgICAgICBzdHIocCkgZm9yIHAg
aW4gKHNlbGYucG9ydCwgc2VsZi5zc2xfcG9ydCwgc2VsZi5kbnNfcG9ydCkgaWYgcCkKKyAgICBx
dWV1ZV9zaXplID0gc2VsZi5wbGF0Zm9ybXNldHRpbmdzLmdldF9pcGZ3X3F1ZXVlX3Nsb3RzKCkK
KyAgICBoYWxmX2RlbGF5X21zID0gaW50KHNlbGYuZGVsYXlfbXMpIC8gMiAgIyBzcGxpdCBvdmVy
IHVwL2Rvd24gbGlua3MKKworICAgIHRyeToKKyAgICAgICMgQ29uZmlndXJlIHVwbG9hZCBzaGFw
aW5nLgorICAgICAgc2VsZi5wbGF0Zm9ybXNldHRpbmdzLmlwZncoCisgICAgICAgICAgJ3BpcGUn
LCBzZWxmLl9VUExPQURfUElQRSwKKyAgICAgICAgICAnY29uZmlnJywKKyAgICAgICAgICAnYncn
LCBzZWxmLnVwX2JhbmR3aWR0aCwKKyAgICAgICAgICAnZGVsYXknLCBoYWxmX2RlbGF5X21zLAor
ICAgICAgICAgICkKKyAgICAgIHNlbGYucGxhdGZvcm1zZXR0aW5ncy5pcGZ3KAorICAgICAgICAg
ICdxdWV1ZScsIHNlbGYuX1VQTE9BRF9RVUVVRSwKKyAgICAgICAgICAnY29uZmlnJywKKyAgICAg
ICAgICAncGlwZScsIHNlbGYuX1VQTE9BRF9QSVBFLAorICAgICAgICAgICdwbHInLCBzZWxmLnBh
Y2tldF9sb3NzX3JhdGUsCisgICAgICAgICAgJ3F1ZXVlJywgcXVldWVfc2l6ZSwKKyAgICAgICAg
ICAnbWFzaycsICdzcmMtcG9ydCcsICcweGZmZmYnLAorICAgICAgICAgICkKKyAgICAgIHNlbGYu
cGxhdGZvcm1zZXR0aW5ncy5pcGZ3KAorICAgICAgICAgICdhZGQnLCBzZWxmLl9VUExPQURfUlVM
RSwKKyAgICAgICAgICAncXVldWUnLCBzZWxmLl9VUExPQURfUVVFVUUsCisgICAgICAgICAgJ2lw
JywKKyAgICAgICAgICAnZnJvbScsICdhbnknLAorICAgICAgICAgICd0bycsIHNlbGYuaG9zdCwK
KyAgICAgICAgICBzZWxmLnVzZV9sb29wYmFjayBhbmQgJ291dCcgb3IgJ2luJywKKyAgICAgICAg
ICAnZHN0LXBvcnQnLCBwb3J0cywKKyAgICAgICAgICApCisgICAgICBzZWxmLmlzX3NoYXBpbmcg
PSBUcnVlCisKKyAgICAgICMgQ29uZmlndXJlIGRvd25sb2FkIHNoYXBpbmcuCisgICAgICBzZWxm
LnBsYXRmb3Jtc2V0dGluZ3MuaXBmdygKKyAgICAgICAgICAncGlwZScsIHNlbGYuX0RPV05MT0FE
X1BJUEUsCisgICAgICAgICAgJ2NvbmZpZycsCisgICAgICAgICAgJ2J3Jywgc2VsZi5kb3duX2Jh
bmR3aWR0aCwKKyAgICAgICAgICAnZGVsYXknLCBoYWxmX2RlbGF5X21zLAorICAgICAgICAgICkK
KyAgICAgIHNlbGYucGxhdGZvcm1zZXR0aW5ncy5pcGZ3KAorICAgICAgICAgICdxdWV1ZScsIHNl
bGYuX0RPV05MT0FEX1FVRVVFLAorICAgICAgICAgICdjb25maWcnLAorICAgICAgICAgICdwaXBl
Jywgc2VsZi5fRE9XTkxPQURfUElQRSwKKyAgICAgICAgICAncGxyJywgc2VsZi5wYWNrZXRfbG9z
c19yYXRlLAorICAgICAgICAgICdxdWV1ZScsIHF1ZXVlX3NpemUsCisgICAgICAgICAgJ21hc2sn
LCAnZHN0LXBvcnQnLCAnMHhmZmZmJywKKyAgICAgICAgICApCisgICAgICBzZWxmLnBsYXRmb3Jt
c2V0dGluZ3MuaXBmdygKKyAgICAgICAgICAnYWRkJywgc2VsZi5fRE9XTkxPQURfUlVMRSwKKyAg
ICAgICAgICAncXVldWUnLCBzZWxmLl9ET1dOTE9BRF9RVUVVRSwKKyAgICAgICAgICAnaXAnLAor
ICAgICAgICAgICdmcm9tJywgc2VsZi5ob3N0LAorICAgICAgICAgICd0bycsICdhbnknLAorICAg
ICAgICAgICdvdXQnLAorICAgICAgICAgICdzcmMtcG9ydCcsIHBvcnRzLAorICAgICAgICAgICkK
KyAgICAgIGxvZ2dpbmcuaW5mbygnU3RhcnRlZCBzaGFwaW5nIHRyYWZmaWMnKQorICAgIGV4Y2Vw
dCBFeGNlcHRpb24sIGU6CisgICAgICByYWlzZSBUcmFmZmljU2hhcGVyRXhjZXB0aW9uKCdVbmFi
bGUgdG8gc2hhcGUgdHJhZmZpYzogJXMnICUgZSkKKworICBkZWYgX19leGl0X18oc2VsZiwgdW51
c2VkX2V4Y190eXBlLCB1bnVzZWRfZXhjX3ZhbCwgdW51c2VkX2V4Y190Yik6CisgICAgaWYgc2Vs
Zi51c2VfbG9vcGJhY2s6CisgICAgICBzZWxmLnBsYXRmb3Jtc2V0dGluZ3MudW5jb25maWd1cmVf
bG9vcGJhY2soKQorICAgIHNlbGYucGxhdGZvcm1zZXR0aW5ncy5yZXN0b3JlX2N3bmQoKQorICAg
IGlmIHNlbGYuaXNfc2hhcGluZzoKKyAgICAgIHRyeToKKyAgICAgICAgICBzZWxmLl9kZWxldGVf
cnVsZXMoKQorICAgICAgICAgIGxvZ2dpbmcuaW5mbygnU3RvcHBlZCBzaGFwaW5nIHRyYWZmaWMn
KQorICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcmFpc2UgVHJhZmZpY1NoYXBl
ckV4Y2VwdGlvbignVW5hYmxlIHRvIHN0b3Agc2hhcGluZyB0cmFmZmljOiAlcycgJSBlKQorCisg
IGRlZiBfZGVsZXRlX3J1bGVzKHNlbGYsIGlwZndfbGlzdD1Ob25lKToKKyAgICBpZiBpcGZ3X2xp
c3QgaXMgTm9uZToKKyAgICAgIGlwZndfbGlzdCA9IHNlbGYucGxhdGZvcm1zZXR0aW5ncy5pcGZ3
KCdsaXN0JykKKyAgICBleGlzdGluZ19ydWxlcyA9IHNldCgKKyAgICAgICAgci5zcGxpdCgpWzBd
LmxzdHJpcCgnMCcpIGZvciByIGluIGlwZndfbGlzdC5zcGxpdGxpbmVzKCkpCisgICAgZGVsZXRl
X3J1bGVzID0gW3IgZm9yIHIgaW4gKHNlbGYuX0RPV05MT0FEX1JVTEUsIHNlbGYuX1VQTE9BRF9S
VUxFKQorICAgICAgICAgICAgICAgICAgICBpZiByIGluIGV4aXN0aW5nX3J1bGVzXQorICAgIGlm
IGRlbGV0ZV9ydWxlczoKKyAgICAgIHNlbGYucGxhdGZvcm1zZXR0aW5ncy5pcGZ3KCdkZWxldGUn
LCAqZGVsZXRlX3J1bGVzKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvV2ViUGFnZVJlcGxh
eS90cmFmZmljc2hhcGVyLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsg
KgoKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdHJhZmZpY3NoYXBlcl90ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdHJhZmZpY3NoYXBlcl90ZXN0LnB5CShyZXZp
c2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90cmFmZmljc2hhcGVyX3Rlc3QucHkJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjc5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cisj
CisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisj
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
KyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyIiIlN5c3RlbSBpbnRlZ3JhdGlv
biB0ZXN0IGZvciB0cmFmZmljIHNoYXBpbmcuCisKK1VzYWdlOgorJCBzdWRvIC4vdHJhZmZpY3No
YXBlcl90ZXN0LnB5CisiIiIKKworaW1wb3J0IGRhZW1vbnNlcnZlcgoraW1wb3J0IGxvZ2dpbmcK
K2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCBwbGF0Zm9ybXNldHRpbmdzCitpbXBvcnQg
c29ja2V0CitpbXBvcnQgU29ja2V0U2VydmVyCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1w
b3J0IHRyYWZmaWNzaGFwZXIKK2ltcG9ydCB1bml0dGVzdAorCisKK1RFU1RfRE5TX1BPUlQgPSA1
NTU1CitURVNUX0hUVFBfUE9SVCA9IDg4ODgKK1JFU1BPTlNFX1NJWkVfS0VZID0gJ3Jlc3BvbnNl
LXNpemU6JworCisKKyMgZnJvbSB0aW1laXQucHkKK2lmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIi
OgorICAgICMgT24gV2luZG93cywgdGhlIGJlc3QgdGltZXIgaXMgdGltZS5jbG9jaygpCisgICAg
REVGQVVMVF9USU1FUiA9IHRpbWUuY2xvY2sKK2Vsc2U6CisgICAgIyBPbiBtb3N0IG90aGVyIHBs
YXRmb3JtcyB0aGUgYmVzdCB0aW1lciBpcyB0aW1lLnRpbWUoKQorICAgIERFRkFVTFRfVElNRVIg
PSB0aW1lLnRpbWUKKworCitkZWYgR2V0RWxhcHNlZE1zKHN0YXJ0X3RpbWUsIGVuZF90aW1lKToK
KyAgIiIiUmV0dXJuIG1pbGxpc2Vjb25kcyBlbGFwc2VkIGJldHdlZW4gfHN0YXJ0X3RpbWV8IGFu
ZCB8ZW5kX3RpbWV8LgorCisgIEFyZ3M6CisgICAgc3RhcnRfdGltZTogc2Vjb25kcyBhcyBhIGZs
b2F0IChvciBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgZmxvYXQpLgorICAgIGVuZF90aW1lOiBz
ZWNvbmRzIGFzIGEgZmxvYXQgKG9yIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBmbG9hdCkuCisg
IFJldHVybjoKKyAgICBtaWxsaXNlY29uZHMgZWxhcHNlZCBhcyBpbnRlZ2VyLgorICAiIiIKKyAg
cmV0dXJuIGludCgoZmxvYXQoZW5kX3RpbWUpIC0gZmxvYXQoc3RhcnRfdGltZSkpICogMTAwMCkK
KworCitjbGFzcyBUcmFmZmljU2hhcGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgZGVm
IHRlc3RCYWRCYW5kd2lkdGhSYWlzZXMoc2VsZik6CisgICAgc2VsZi5hc3NlcnRSYWlzZXModHJh
ZmZpY3NoYXBlci5CYW5kd2lkdGhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIHRy
YWZmaWNzaGFwZXIuVHJhZmZpY1NoYXBlciwKKyAgICAgICAgICAgICAgICAgICAgICBkb3duX2Jh
bmR3aWR0aD0nMUtCaXQvcycpCisKKworY2xhc3MgVGltZWRVZHBIYW5kbGVyKFNvY2tldFNlcnZl
ci5EYXRhZ3JhbVJlcXVlc3RIYW5kbGVyKToKKyAgIiIiVURQIGhhbmRsZXIgdGhhdCByZXR1cm5z
IHRoZSB0aW1lIHdoZW4gdGhlIHJlcXVlc3Qgd2FzIGhhbmRsZWQuIiIiCisKKyAgZGVmIGhhbmRs
ZShzZWxmKToKKyAgICBkYXRhID0gc2VsZi5yZmlsZS5yZWFkKCkKKyAgICByZWFkX3RpbWUgPSBz
ZWxmLnNlcnZlci50aW1lcigpCisgICAgc2VsZi53ZmlsZS53cml0ZShzdHIocmVhZF90aW1lKSkK
KworCitjbGFzcyBUaW1lZFRjcEhhbmRsZXIoU29ja2V0U2VydmVyLlN0cmVhbVJlcXVlc3RIYW5k
bGVyKToKKyAgIiIiVGNwIGhhbmRsZXIgdGhhdCByZXR1cm5zIHRoZSB0aW1lIHdoZW4gdGhlIHJl
cXVlc3Qgd2FzIHJlYWQuCisKKyAgSXQgY2FuIHJlc3BvbmQgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5
dGVzIHNwZWNpZmllZCBpbiB0aGUgcmVxdWVzdC4KKyAgVGhlIHJlcXVlc3QgbG9va3MgbGlrZToK
KyAgICByZXF1ZXN0X2RhdGEgLT4gUkVTUE9OU0VfU0laRV9LRVkgbnVtX3JlcG9uc2VfYnl0ZXMg
J1xuJyBBTllfREFUQQorICAiIiIKKworICBkZWYgaGFuZGxlKHNlbGYpOgorICAgIGRhdGEgPSBz
ZWxmLnJmaWxlLnJlYWQoKQorICAgIHJlYWRfdGltZSA9IHNlbGYuc2VydmVyLnRpbWVyKCkKKyAg
ICBjb250ZW50cyA9IHN0cihyZWFkX3RpbWUpCisgICAgaWYgZGF0YS5zdGFydHN3aXRoKFJFU1BP
TlNFX1NJWkVfS0VZKToKKyAgICAgIG51bV9yZXNwb25zZV9ieXRlcyA9IGludChkYXRhW2xlbihS
RVNQT05TRV9TSVpFX0tFWSk6ZGF0YS5pbmRleCgnXG4nKV0pCisgICAgICBjb250ZW50cyA9ICcl
c1xuJXMnICUgKGNvbnRlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHgwMCcg
KiAobnVtX3Jlc3BvbnNlX2J5dGVzIC0gbGVuKGNvbnRlbnRzKSAtIDEpKQorICAgIHNlbGYud2Zp
bGUud3JpdGUoY29udGVudHMpCisKKworY2xhc3MgVGltZWRVZHBTZXJ2ZXIoU29ja2V0U2VydmVy
LlRocmVhZGluZ1VEUFNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgIGRhZW1vbnNlcnZlci5E
YWVtb25TZXJ2ZXIpOgorICAiIiJBIHNpbXBsZSBVRFAgc2VydmVyIHNpbWlsYXIgdG8gZG5zcHJv
eHkuIiIiCisKKyAgIyBPdmVycmlkZSBTb2NrZXRTZXJ2ZXIuVGNwU2VydmVyIHNldHRpbmcgdG8g
YXZvaWQgaW50ZXJtaXR0ZW50IGVycm9ycy4KKyAgYWxsb3dfcmV1c2VfYWRkcmVzcyA9IFRydWUK
KworICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgdGltZXI9REVGQVVMVF9USU1FUik6
CisgICAgU29ja2V0U2VydmVyLlRocmVhZGluZ1VEUFNlcnZlci5fX2luaXRfXygKKyAgICAgICAg
c2VsZiwgKGhvc3QsIHBvcnQpLCBUaW1lZFVkcEhhbmRsZXIpCisgICAgc2VsZi50aW1lciA9IHRp
bWVyCisKKyAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgcGFzcworCisKK2NsYXNzIFRpbWVkVGNw
U2VydmVyKFNvY2tldFNlcnZlci5UaHJlYWRpbmdUQ1BTZXJ2ZXIsCisgICAgICAgICAgICAgICAg
ICAgICBkYWVtb25zZXJ2ZXIuRGFlbW9uU2VydmVyKToKKyAgIiIiQSBzaW1wbGUgVENQIHNlcnZl
ciBzaW1pbGFyIHRvIGh0dHBwcm94eS4iIiIKKworICAjIE92ZXJyaWRlIFNvY2tldFNlcnZlci5U
Y3BTZXJ2ZXIgc2V0dGluZyB0byBhdm9pZCBpbnRlcm1pdHRlbnQgZXJyb3JzLgorICBhbGxvd19y
ZXVzZV9hZGRyZXNzID0gVHJ1ZQorCisgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0LCB0
aW1lcj1ERUZBVUxUX1RJTUVSKToKKyAgICBTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nVENQU2VydmVy
Ll9faW5pdF9fKAorICAgICAgICBzZWxmLCAoaG9zdCwgcG9ydCksIFRpbWVkVGNwSGFuZGxlcikK
KyAgICBzZWxmLnRpbWVyID0gdGltZXIKKworICBkZWYgY2xlYW51cChzZWxmKToKKyAgICB0cnk6
CisgICAgICBzZWxmLnNodXRkb3duKCkKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQsIGU6
CisgICAgICBwYXNzCisKKworY2xhc3MgVGNwVGVzdFNvY2tldENyZWF0b3I6CisgICIiIkEgVENQ
IHNvY2tldCBjcmVhdG9yIHN1aXRhYmxlIGZvciB3aXRoLXN0YXRlbWVudC4iIiIKKworICBkZWYg
X19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgdGltZW91dD0xLjApOgorICAgIHNlbGYuYWRkcmVz
cyA9IChob3N0LCBwb3J0KQorICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKworICBkZWYgX19l
bnRlcl9fKHNlbGYpOgorICAgIHNlbGYuc29ja2V0ID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9u
KHNlbGYuYWRkcmVzcywgdGltZW91dD1zZWxmLnRpbWVvdXQpCisgICAgcmV0dXJuIHNlbGYuc29j
a2V0CisKKyAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICBzZWxmLnNvY2tldC5jbG9z
ZSgpCisKKworY2xhc3MgVGltZWRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgIGRlZiBh
c3NlcnRBbG1vc3RFcXVhbChzZWxmLCBleHBlY3RlZCwgYWN0dWFsLCB0b2xlcmFuY2U9MC4wNSk6
CisgICAgIiIiTGlrZSB0aGUgZm9sbG93aW5nIHdpdGggbmljZXIgZGVmYXVsdCBtZXNzYWdlOgor
ICAgICAgICAgICBhc3NlcnRUcnVlKGV4cGVjdGVkIDw9IGFjdHVhbCArIHRvbGVyYW5jZSAmJgor
ICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID49IGFjdHVhbCAtIHRvbGVyYW5jZSkKKyAg
ICAiIiIKKyAgICBkZWx0YSA9IHRvbGVyYW5jZSAqIGV4cGVjdGVkCisgICAgaWYgYWN0dWFsID4g
ZXhwZWN0ZWQgKyBkZWx0YSBvciBhY3R1YWwgPCBleHBlY3RlZCAtIGRlbHRhOgorICAgICAgc2Vs
Zi5mYWlsKCclcyBpcyBub3QgZXF1YWwgdG8gZXhwZWN0ZWQgJXMgKy8tICVzJSUnICUgKAorICAg
ICAgICAgICAgICBhY3R1YWwsIGV4cGVjdGVkLCAxMDAgKiB0b2xlcmFuY2UpKQorCisKK2NsYXNz
IFRjcFRyYWZmaWNTaGFwZXJUZXN0KFRpbWVkVGVzdENhc2UpOgorCisgIGRlZiBzZXRVcChzZWxm
KToKKyAgICBwbGF0Zm9ybV9zZXR0aW5ncyA9IHBsYXRmb3Jtc2V0dGluZ3MuZ2V0X3BsYXRmb3Jt
X3NldHRpbmdzKCkKKyAgICBzZWxmLmhvc3QgPSBwbGF0Zm9ybV9zZXR0aW5ncy5nZXRfc2VydmVy
X2lwX2FkZHJlc3MoKQorICAgIHNlbGYucG9ydCA9IFRFU1RfSFRUUF9QT1JUCisgICAgc2VsZi50
Y3Bfc29ja2V0X2NyZWF0b3IgPSBUY3BUZXN0U29ja2V0Q3JlYXRvcihzZWxmLmhvc3QsIHNlbGYu
cG9ydCkKKyAgICBzZWxmLnRpbWVyID0gREVGQVVMVF9USU1FUgorCisgIGRlZiBUcmFmZmljU2hh
cGVyKHNlbGYsICoqa3dhcmdzKToKKyAgICByZXR1cm4gdHJhZmZpY3NoYXBlci5UcmFmZmljU2hh
cGVyKAorICAgICAgICBob3N0PXNlbGYuaG9zdCwgcG9ydD1zZWxmLnBvcnQsIGRuc19wb3J0PU5v
bmUsICoqa3dhcmdzKQorCisgIGRlZiBHZXRUY3BTZW5kVGltZU1zKHNlbGYsIG51bV9ieXRlcyk6
CisgICAgIiIiUmV0dXJuIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHNlbmQgfG51bV9ieXRlc3wu
IiIiCisKKyAgICB3aXRoIHNlbGYudGNwX3NvY2tldF9jcmVhdG9yIGFzIHM6CisgICAgICBzdGFy
dF90aW1lID0gc2VsZi50aW1lcigpCisgICAgICByZXF1ZXN0X2RhdGEgPSAnXHgwMCcgKiBudW1f
Ynl0ZXMKKworICAgICAgcy5zZW5kYWxsKHJlcXVlc3RfZGF0YSkKKyAgICAgICMgVE9ETyhzbGFt
bSk6IEZpZ3VyZSBvdXQgd2h5IHBhcnRpYWwgaXMgc2h1dGRvd24gbmVlZGVkIHRvIG1ha2UgaXQg
d29yay4KKyAgICAgIHMuc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisgICAgICByZWFkX3RpbWUg
PSBzLnJlY3YoMTAyNCkKKyAgICByZXR1cm4gR2V0RWxhcHNlZE1zKHN0YXJ0X3RpbWUsIHJlYWRf
dGltZSkKKworICBkZWYgR2V0VGNwUmVjZWl2ZVRpbWVNcyhzZWxmLCBudW1fYnl0ZXMpOgorICAg
ICIiIlJldHVybiB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byByZWNlaXZlIHxudW1fYnl0ZXN8LiIi
IgorCisgICAgd2l0aCBzZWxmLnRjcF9zb2NrZXRfY3JlYXRvciBhcyBzOgorICAgICAgcy5zZW5k
YWxsKCclcyVzXG4nICUgKFJFU1BPTlNFX1NJWkVfS0VZLCBudW1fYnl0ZXMpKQorICAgICAgIyBU
T0RPKHNsYW1tKTogRmlndXJlIG91dCB3aHkgcGFydGlhbCBpcyBzaHV0ZG93biBuZWVkZWQgdG8g
bWFrZSBpdCB3b3JrLgorICAgICAgcy5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKKyAgICAgIG51
bV9yZW1haW5pbmdfYnl0ZXMgPSBudW1fYnl0ZXMKKyAgICAgIHJlYWRfdGltZSA9IE5vbmUKKyAg
ICAgIHdoaWxlIG51bV9yZW1haW5pbmdfYnl0ZXMgPiAwOgorICAgICAgICByZXNwb25zZV9kYXRh
ID0gcy5yZWN2KDQwOTYpCisgICAgICAgIG51bV9yZW1haW5pbmdfYnl0ZXMgLT0gbGVuKHJlc3Bv
bnNlX2RhdGEpCisgICAgICAgIGlmIG5vdCByZWFkX3RpbWU6CisgICAgICAgICAgcmVhZF90aW1l
LCBwYWRkaW5nID0gcmVzcG9uc2VfZGF0YS5zcGxpdCgnXG4nKQorICAgIHJldHVybiBHZXRFbGFw
c2VkTXMocmVhZF90aW1lLCBzZWxmLnRpbWVyKCkpCisKKyAgZGVmIHRlc3RUY3BDb25uZWN0VG9J
cChzZWxmKToKKyAgICAiIiJWZXJpZnkgdGhhdCBpdCB0YWtlcyB8ZGVsYXlfbXN8IHRvIGVzdGFi
bGlzaCBhIFRDUCBjb25uZWN0aW9uLiIiIgorICAgIHdpdGggVGltZWRUY3BTZXJ2ZXIoc2VsZi5o
b3N0LCBzZWxmLnBvcnQpOgorICAgICAgZm9yIGRlbGF5X21zIGluICgxMDAsIDE3NSk6CisgICAg
ICAgIHdpdGggc2VsZi5UcmFmZmljU2hhcGVyKGRlbGF5X21zPWRlbGF5X21zKToKKyAgICAgICAg
ICBzdGFydF90aW1lID0gc2VsZi50aW1lcigpCisgICAgICAgICAgd2l0aCBzZWxmLnRjcF9zb2Nr
ZXRfY3JlYXRvcjoKKyAgICAgICAgICAgIGNvbm5lY3RfdGltZSA9IEdldEVsYXBzZWRNcyhzdGFy
dF90aW1lLCBzZWxmLnRpbWVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZGVs
YXlfbXMsIGNvbm5lY3RfdGltZSwgdG9sZXJhbmNlPTAuMTIpCisKKyAgZGVmIHRlc3RUY3BVcGxv
YWRTaGFwaW5nKHNlbGYpOgorICAgICIiIlZlcmlmeSB0aGF0ICd1cCcgYmFuZHdpZHRoIGlzIHNo
YXBlZCBvbiBUQ1AgY29ubmVjdGlvbnMuIiIiCisgICAgbnVtX2J5dGVzID0gMTAyNCAqIDEwMAor
ICAgIGJhbmR3aWR0aF9rYml0cyA9IDIwMDAKKyAgICBleHBlY3RlZF9tcyA9IDguMCAqIG51bV9i
eXRlcyAvIGJhbmR3aWR0aF9rYml0cworICAgIHdpdGggVGltZWRUY3BTZXJ2ZXIoc2VsZi5ob3N0
LCBzZWxmLnBvcnQpOgorICAgICAgd2l0aCBzZWxmLlRyYWZmaWNTaGFwZXIodXBfYmFuZHdpZHRo
PSclc0tiaXQvcycgJSBiYW5kd2lkdGhfa2JpdHMpOgorICAgICAgICBzZWxmLmFzc2VydEFsbW9z
dEVxdWFsKGV4cGVjdGVkX21zLCBzZWxmLkdldFRjcFNlbmRUaW1lTXMobnVtX2J5dGVzKSkKKwor
ICBkZWYgdGVzdFRjcERvd25sb2FkU2hhcGluZyhzZWxmKToKKyAgICAiIiJWZXJpZnkgdGhhdCAn
ZG93bicgYmFuZHdpZHRoIGlzIHNoYXBlZCBvbiBUQ1AgY29ubmVjdGlvbnMuIiIiCisgICAgbnVt
X2J5dGVzID0gMTAyNCAqIDEwMAorICAgIGJhbmR3aWR0aF9rYml0cyA9IDIwMDAKKyAgICBleHBl
Y3RlZF9tcyA9IDguMCAqIG51bV9ieXRlcyAvIGJhbmR3aWR0aF9rYml0cworICAgIHdpdGggVGlt
ZWRUY3BTZXJ2ZXIoc2VsZi5ob3N0LCBzZWxmLnBvcnQpOgorICAgICAgd2l0aCBzZWxmLlRyYWZm
aWNTaGFwZXIoZG93bl9iYW5kd2lkdGg9JyVzS2JpdC9zJyAlIGJhbmR3aWR0aF9rYml0cyk6Cisg
ICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZXhwZWN0ZWRfbXMsIHNlbGYuR2V0VGNwUmVj
ZWl2ZVRpbWVNcyhudW1fYnl0ZXMpKQorCisgIGRlZiB0ZXN0VGNwSW50ZXJsZWF2ZWREb3dubG9h
ZHMoc2VsZik6CisgICAgIyBUT0RPKHNsYW1tKTogd3JpdGUgdGNwIGludGVybGVhdmVkIGRvd25s
b2FkcyB0ZXN0CisgICAgcGFzcworCisKK2NsYXNzIFVkcFRyYWZmaWNTaGFwZXJUZXN0KFRpbWVk
VGVzdENhc2UpOgorCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICBwbGF0Zm9ybV9zZXR0aW5ncyA9
IHBsYXRmb3Jtc2V0dGluZ3MuZ2V0X3BsYXRmb3JtX3NldHRpbmdzKCkKKyAgICBzZWxmLmhvc3Qg
PSBwbGF0Zm9ybV9zZXR0aW5ncy5nZXRfc2VydmVyX2lwX2FkZHJlc3MoKQorICAgIHNlbGYuZG5z
X3BvcnQgPSBURVNUX0ROU19QT1JUCisgICAgc2VsZi50aW1lciA9IERFRkFVTFRfVElNRVIKKwor
ICBkZWYgVHJhZmZpY1NoYXBlcihzZWxmLCAqKmt3YXJncyk6CisgICAgcmV0dXJuIHRyYWZmaWNz
aGFwZXIuVHJhZmZpY1NoYXBlcigKKyAgICAgICAgaG9zdD1zZWxmLmhvc3QsIHBvcnQ9Tm9uZSwg
ZG5zX3BvcnQ9c2VsZi5kbnNfcG9ydCwgKiprd2FyZ3MpCisKKyAgZGVmIEdldFVkcFNlbmRSZWNl
aXZlVGltZXNNcyhzZWxmKToKKyAgICAiIiJSZXR1cm4gdGltZSBpbiBtaWxsaXNlY29uZHMgdG8g
c2VuZCB8bnVtX2J5dGVzfC4iIiIKKyAgICBzdGFydF90aW1lID0gc2VsZi50aW1lcigpCisgICAg
dWRwX3NvY2tldCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RH
UkFNKQorICAgIHVkcF9zb2NrZXQuc2VuZHRvKCd0ZXN0IGRhdGFcbicsIChzZWxmLmhvc3QsIHNl
bGYuZG5zX3BvcnQpKQorICAgIHJlYWRfdGltZSA9IHVkcF9zb2NrZXQucmVjdigxMDI0KQorICAg
IHJldHVybiAoR2V0RWxhcHNlZE1zKHN0YXJ0X3RpbWUsIHJlYWRfdGltZSksCisgICAgICAgICAg
ICBHZXRFbGFwc2VkTXMocmVhZF90aW1lLCBzZWxmLnRpbWVyKCkpKQorCisgIGRlZiB0ZXN0VWRw
RGVsYXkoc2VsZik6CisgICAgZm9yIGRlbGF5X21zIGluICgxMDAsIDE3MCk6CisgICAgICBleHBl
Y3RlZF9tcyA9IGRlbGF5X21zIC8gMgorICAgICAgd2l0aCBUaW1lZFVkcFNlcnZlcihzZWxmLmhv
c3QsIHNlbGYuZG5zX3BvcnQpOgorICAgICAgICB3aXRoIHNlbGYuVHJhZmZpY1NoYXBlcihkZWxh
eV9tcz1kZWxheV9tcyk6CisgICAgICAgICAgc2VuZF9tcywgcmVjZWl2ZV9tcyA9IHNlbGYuR2V0
VWRwU2VuZFJlY2VpdmVUaW1lc01zKCkKKyAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFs
KGV4cGVjdGVkX21zLCBzZW5kX21zLCB0b2xlcmFuY2U9MC4xMCkKKyAgICAgICAgICBzZWxmLmFz
c2VydEFsbW9zdEVxdWFsKGV4cGVjdGVkX21zLCByZWNlaXZlX21zLCB0b2xlcmFuY2U9MC4xMCkK
KworCisgIGRlZiB0ZXN0VWRwSW50ZXJsZWF2ZWREZWxheShzZWxmKToKKyAgICAjIFRPRE8oc2xh
bW0pOiB3cml0ZSB1ZHAgaW50ZXJsZWF2ZWQgdWRwIGRlbGF5IHRlc3QKKyAgICBwYXNzCisKKwor
Y2xhc3MgVGNwQW5kVWRwVHJhZmZpY1NoYXBlclRlc3QoVGltZWRUZXN0Q2FzZSk6CisgICMgVE9E
TyhzbGFtbSk6IFRlc3QgY29uY3VycmVudCBUQ1AgYW5kIFVEUCB0cmFmZmljCisgIHBhc3MKKwor
CisjIFRPRE8oc2xhbW0pOiBQYWNrZXQgbG9zcyByYXRlICh0cnkgZGlmZmVyZW50IHBvcnRzKQor
CisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICNsb2dnaW5nLmdldExvZ2dlcigpLnNl
dExldmVsKGxvZ2dpbmcuREVCVUcpCisgIHVuaXR0ZXN0Lm1haW4oKQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogVG9vbHMvV2ViUGFnZVJlcGxheS90cmFmZmljc2hhcGVyX3Rlc3QucHkKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxh
eS90aGlyZF9wYXJ0eS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVw
bGF5L3RoaXJkX3BhcnR5L19faW5pdF9fLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9fX2luaXRfXy5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
NSBAQAorIyBDb3B5cmlnaHQgMjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
IworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T
RS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp
cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMg
U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
c3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0IG9z
CitpbXBvcnQgc3lzCisKK3RyeToKKyAgICBfX2ZpbGVfXworZXhjZXB0IE5hbWVFcnJvcjoKKyAg
ICBfX2ZpbGVfXyA9IHN5cy5hcmd2WzBdCit0aGlyZF9wYXJ0eV9kaXIgPSBvcy5wYXRoLmRpcm5h
bWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKK2lwYWRkcl9kaXIgPSBvcy5wYXRoLmpvaW4o
dGhpcmRfcGFydHlfZGlyLCAiaXBhZGRyIikKK3N5cy5wYXRoLmFwcGVuZChpcGFkZHJfZGlyKSAg
IyB3b3JrYXJvdW5kIGZvciBubyBfX2luaXRfXy5weQorc3lzLnBhdGguYXBwZW5kKHRoaXJkX3Bh
cnR5X2RpcikKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL0xJQ0VO
U0UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvTElD
RU5TRQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5z
L0xJQ0VOU0UJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKK0NvcHlyaWdodCAoQykgMjAw
MS0yMDAzIE5vbWludW0sIEluYy4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwg
YW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCitkb2N1bWVudGF0aW9uIGZvciBh
bnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorcHJvdmlk
ZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v
dGljZQorYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi
QVMgSVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQg
VE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJ
QUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBP
RiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNU
LCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKK09GIE9S
IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdB
UkUuCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9fX2luaXRfXy5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9fX2lu
aXRfXy5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkv
ZG5zL19faW5pdF9fLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisjIENvcHlyaWdo
dCAoQykgMjAwMy0yMDA3LCAyMDA5IE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlzc2lvbiB0byB1
c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisj
IGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVy
ZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug
YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisj
IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBB
TEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBB
TEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4g
SU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBE
SVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMK
KyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRT
LCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhF
UiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU
SCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKyIiImRuc3B5dGhv
biBETlMgdG9vbGtpdCIiIgorCitfX2FsbF9fID0gWworICAgICdkbnNzZWMnLAorICAgICdlMTY0
JywKKyAgICAnZWRucycsCisgICAgJ2VudHJvcHknLAorICAgICdleGNlcHRpb24nLAorICAgICdm
bGFncycsCisgICAgJ2luZXQnLAorICAgICdpcHY0JywKKyAgICAnaXB2NicsCisgICAgJ21lc3Nh
Z2UnLAorICAgICduYW1lJywKKyAgICAnbmFtZWRpY3QnLAorICAgICdub2RlJywKKyAgICAnb3Bj
b2RlJywKKyAgICAncXVlcnknLAorICAgICdyY29kZScsCisgICAgJ3JkYXRhJywKKyAgICAncmRh
dGFjbGFzcycsCisgICAgJ3JkYXRhc2V0JywKKyAgICAncmRhdGF0eXBlJywKKyAgICAncmVuZGVy
ZXInLAorICAgICdyZXNvbHZlcicsCisgICAgJ3JldmVyc2VuYW1lJywKKyAgICAncnJzZXQnLAor
ICAgICdzZXQnLAorICAgICd0b2tlbml6ZXInLAorICAgICd0c2lnJywKKyAgICAndHNpZ2tleXJp
bmcnLAorICAgICd0dGwnLAorICAgICdyZHR5cGVzJywKKyAgICAndXBkYXRlJywKKyAgICAndmVy
c2lvbicsCisgICAgJ3pvbmUnLAorXQpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9w
YXJ0eS9kbnMvZG5zc2VjLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhp
cmRfcGFydHkvZG5zL2Ruc3NlYy5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBs
YXkvdGhpcmRfcGFydHkvZG5zL2Ruc3NlYy5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNywgMjAwOSBOb21pbnVtLCBJbmMuCisjCisjIFBl
cm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdh
cmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhv
dXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwg
Y29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5V
TSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FS
RSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBB
TlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9S
IEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERB
VEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJ
R0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBD
T05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgor
CisiIiJDb21tb24gRE5TU0VDLXJlbGF0ZWQgZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuIiIiCisK
K1JTQU1ENSA9IDEKK0RIID0gMgorRFNBID0gMworRUNDID0gNAorUlNBU0hBMSA9IDUKK0RTQU5T
RUMzU0hBMSA9IDYKK1JTQVNIQTFOU0VDM1NIQTEgPSA3CitSU0FTSEEyNTYgPSA4CitSU0FTSEE1
MTIgPSAxMAorSU5ESVJFQ1QgPSAyNTIKK1BSSVZBVEVETlMgPSAyNTMKK1BSSVZBVEVPSUQgPSAy
NTQKKworX2FsZ29yaXRobV9ieV90ZXh0ID0geworICAgICdSU0FNRDUnIDogUlNBTUQ1LAorICAg
ICdESCcgOiBESCwKKyAgICAnRFNBJyA6IERTQSwKKyAgICAnRUNDJyA6IEVDQywKKyAgICAnUlNB
U0hBMScgOiBSU0FTSEExLAorICAgICdEU0FOU0VDM1NIQTEnIDogRFNBTlNFQzNTSEExLAorICAg
ICdSU0FTSEExTlNFQzNTSEExJyA6IFJTQVNIQTFOU0VDM1NIQTEsCisgICAgJ1JTQVNIQTI1Nicg
OiBSU0FTSEEyNTYsCisgICAgJ1JTQVNIQTUxMicgOiBSU0FTSEE1MTIsCisgICAgJ0lORElSRUNU
JyA6IElORElSRUNULAorICAgICdQUklWQVRFRE5TJyA6IFBSSVZBVEVETlMsCisgICAgJ1BSSVZB
VEVPSUQnIDogUFJJVkFURU9JRCwKKyAgICB9CisKKyMgV2UgY29uc3RydWN0IHRoZSBpbnZlcnNl
IG1hcHBpbmcgcHJvZ3JhbW1hdGljYWxseSB0byBlbnN1cmUgdGhhdCB3ZQorIyBjYW5ub3QgbWFr
ZSBhbnkgbWlzdGFrZXMgKGUuZy4gb21pc3Npb25zLCBjdXQtYW5kLXBhc3RlIGVycm9ycykgdGhh
dAorIyB3b3VsZCBjYXVzZSB0aGUgbWFwcGluZyBub3QgdG8gYmUgdHJ1ZSBpbnZlcnNlLgorCitf
YWxnb3JpdGhtX2J5X3ZhbHVlID0gZGljdChbKHksIHgpIGZvciB4LCB5IGluIF9hbGdvcml0aG1f
YnlfdGV4dC5pdGVyaXRlbXMoKV0pCisKK2NsYXNzIFVua25vd25BbGdvcml0aG0oRXhjZXB0aW9u
KToKKyAgICAiIiJSYWlzZWQgaWYgYW4gYWxnb3JpdGhtIGlzIHVua25vd24uIiIiCisgICAgcGFz
cworCitkZWYgYWxnb3JpdGhtX2Zyb21fdGV4dCh0ZXh0KToKKyAgICAiIiJDb252ZXJ0IHRleHQg
aW50byBhIEROU1NFQyBhbGdvcml0aG0gdmFsdWUKKyAgICBAcnR5cGU6IGludCIiIgorICAgIAor
ICAgIHZhbHVlID0gX2FsZ29yaXRobV9ieV90ZXh0LmdldCh0ZXh0LnVwcGVyKCkpCisgICAgaWYg
dmFsdWUgaXMgTm9uZToKKyAgICAgICAgdmFsdWUgPSBpbnQodGV4dCkKKyAgICByZXR1cm4gdmFs
dWUKKworZGVmIGFsZ29yaXRobV90b190ZXh0KHZhbHVlKToKKyAgICAiIiJDb252ZXJ0IGEgRE5T
U0VDIGFsZ29yaXRobSB2YWx1ZSB0byB0ZXh0CisgICAgQHJ0eXBlOiBzdHJpbmciIiIKKyAgICAK
KyAgICB0ZXh0ID0gX2FsZ29yaXRobV9ieV92YWx1ZS5nZXQodmFsdWUpCisgICAgaWYgdGV4dCBp
cyBOb25lOgorICAgICAgICB0ZXh0ID0gc3RyKHZhbHVlKQorICAgIHJldHVybiB0ZXh0CkluZGV4
OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9lMTY0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL2UxNjQucHkJKHJldmlzaW9u
IDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9lMTY0LnB5CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAw
OSBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFu
ZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBh
bnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92
aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g
bm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJP
VklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lU
SCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElF
UyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5P
TUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxU
SU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBB
Q1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBB
UklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JN
QU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCisiIiJETlMgRS4xNjQgaGVscGVycworCitAdmFyIHB1
YmxpY19lbnVtX2RvbWFpbjogVGhlIEROUyBwdWJsaWMgRU5VTSBkb21haW4sIGUxNjQuYXJwYS4K
K0B0eXBlIHB1YmxpY19lbnVtX2RvbWFpbjogZG5zLm5hbWUuTmFtZSBvYmplY3QKKyIiIgorCitp
bXBvcnQgZG5zLmV4Y2VwdGlvbgoraW1wb3J0IGRucy5uYW1lCitpbXBvcnQgZG5zLnJlc29sdmVy
CisKK3B1YmxpY19lbnVtX2RvbWFpbiA9IGRucy5uYW1lLmZyb21fdGV4dCgnZTE2NC5hcnBhLicp
CisKK2RlZiBmcm9tX2UxNjQodGV4dCwgb3JpZ2luPXB1YmxpY19lbnVtX2RvbWFpbik6CisgICAg
IiIiQ29udmVydCBhbiBFLjE2NCBudW1iZXIgaW4gdGV4dHVhbCBmb3JtIGludG8gYSBOYW1lIG9i
amVjdCB3aG9zZQorICAgIHZhbHVlIGlzIHRoZSBFTlVNIGRvbWFpbiBuYW1lIGZvciB0aGF0IG51
bWJlci4KKyAgICBAcGFyYW0gdGV4dDogYW4gRS4xNjQgbnVtYmVyIGluIHRleHR1YWwgZm9ybS4K
KyAgICBAdHlwZSB0ZXh0OiBzdHIKKyAgICBAcGFyYW0gb3JpZ2luOiBUaGUgZG9tYWluIGluIHdo
aWNoIHRoZSBudW1iZXIgc2hvdWxkIGJlIGNvbnN0cnVjdGVkLgorICAgIFRoZSBkZWZhdWx0IGlz
IGUxNjQuYXJwYS4KKyAgICBAdHlwZTogZG5zLm5hbWUuTmFtZSBvYmplY3Qgb3IgTm9uZQorICAg
IEBydHlwZTogZG5zLm5hbWUuTmFtZSBvYmplY3QKKyAgICAiIiIKKyAgICBwYXJ0cyA9IFtkIGZv
ciBkIGluIHRleHQgaWYgZC5pc2RpZ2l0KCldCisgICAgcGFydHMucmV2ZXJzZSgpCisgICAgcmV0
dXJuIGRucy5uYW1lLmZyb21fdGV4dCgnLicuam9pbihwYXJ0cyksIG9yaWdpbj1vcmlnaW4pCisK
K2RlZiB0b19lMTY0KG5hbWUsIG9yaWdpbj1wdWJsaWNfZW51bV9kb21haW4sIHdhbnRfcGx1c19w
cmVmaXg9VHJ1ZSk6CisgICAgIiIiQ29udmVydCBhbiBFTlVNIGRvbWFpbiBuYW1lIGludG8gYW4g
RS4xNjQgbnVtYmVyLgorICAgIEBwYXJhbSBuYW1lOiB0aGUgRU5VTSBkb21haW4gbmFtZS4KKyAg
ICBAdHlwZSBuYW1lOiBkbnMubmFtZS5OYW1lIG9iamVjdC4KKyAgICBAcGFyYW0gb3JpZ2luOiBB
IGRvbWFpbiBjb250YWluaW5nIHRoZSBFTlVNIGRvbWFpbiBuYW1lLiAgVGhlCisgICAgbmFtZSBp
cyByZWxhdGl2aXplZCB0byB0aGlzIGRvbWFpbiBiZWZvcmUgYmVpbmcgY29udmVydGVkIHRvIHRl
eHQuCisgICAgQHR5cGU6IGRucy5uYW1lLk5hbWUgb2JqZWN0IG9yIE5vbmUKKyAgICBAcGFyYW0g
d2FudF9wbHVzX3ByZWZpeDogaWYgVHJ1ZSwgYWRkIGEgJysnIHRvIHRoZSBiZWdpbm5pbmcgb2Yg
dGhlCisgICAgcmV0dXJuZWQgbnVtYmVyLgorICAgIEBydHlwZTogc3RyCisgICAgIiIiCisgICAg
aWYgbm90IG9yaWdpbiBpcyBOb25lOgorICAgICAgICBuYW1lID0gbmFtZS5yZWxhdGl2aXplKG9y
aWdpbikKKyAgICBkbGFiZWxzID0gW2QgZm9yIGQgaW4gbmFtZS5sYWJlbHMgaWYgKGQuaXNkaWdp
dCgpIGFuZCBsZW4oZCkgPT0gMSldCisgICAgaWYgbGVuKGRsYWJlbHMpICE9IGxlbihuYW1lLmxh
YmVscyk6CisgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3IoJ25vbi1kaWdp
dCBsYWJlbHMgaW4gRU5VTSBkb21haW4gbmFtZScpCisgICAgZGxhYmVscy5yZXZlcnNlKCkKKyAg
ICB0ZXh0ID0gJycuam9pbihkbGFiZWxzKQorICAgIGlmIHdhbnRfcGx1c19wcmVmaXg6CisgICAg
ICAgIHRleHQgPSAnKycgKyB0ZXh0CisgICAgcmV0dXJuIHRleHQKKworZGVmIHF1ZXJ5KG51bWJl
ciwgZG9tYWlucywgcmVzb2x2ZXI9Tm9uZSk6CisgICAgIiIiTG9vayBmb3IgTkFQVFIgUlJzIGZv
ciB0aGUgc3BlY2lmaWVkIG51bWJlciBpbiB0aGUgc3BlY2lmaWVkIGRvbWFpbnMuCisKKyAgICBl
LmcuIGxvb2t1cCgnMTY1MDU1NTEyMTInLCBbJ2UxNjQuZG5zcHl0aG9uLm9yZy4nLCAnZTE2NC5h
cnBhLiddKQorICAgICIiIgorICAgIGlmIHJlc29sdmVyIGlzIE5vbmU6CisgICAgICAgIHJlc29s
dmVyID0gZG5zLnJlc29sdmVyLmdldF9kZWZhdWx0X3Jlc29sdmVyKCkKKyAgICBmb3IgZG9tYWlu
IGluIGRvbWFpbnM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZG9tYWluLCAoc3RyLCB1bmljb2Rl
KSk6CisgICAgICAgICAgICBkb21haW4gPSBkbnMubmFtZS5mcm9tX3RleHQoZG9tYWluKQorICAg
ICAgICBxbmFtZSA9IGRucy5lMTY0LmZyb21fZTE2NChudW1iZXIsIGRvbWFpbikKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVyLnF1ZXJ5KHFuYW1lLCAnTkFQVFInKQor
ICAgICAgICBleGNlcHQgZG5zLnJlc29sdmVyLk5YRE9NQUlOOgorICAgICAgICAgICAgcGFzcwor
ICAgIHJhaXNlIGRucy5yZXNvbHZlci5OWERPTUFJTgpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxh
eS90aGlyZF9wYXJ0eS9kbnMvZWRucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVw
bGF5L3RoaXJkX3BhcnR5L2Rucy9lZG5zLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvZWRucy5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NDIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5IE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlzc2lv
biB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQg
aXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUg
aXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3BpZXMu
CisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJU0NM
QUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xV
RElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVD
SUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERB
TUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQ
Uk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBP
UiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5FQ1RJ
T04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKyIiIkVE
TlMgT3B0aW9ucyIiIgorCitOU0lEID0gMworCitjbGFzcyBPcHRpb24ob2JqZWN0KToKKyAgICAi
IiJCYXNlIGNsYXNzIGZvciBhbGwgRUROUyBvcHRpb24gdHlwZXMuCisgICAgIiIiCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgb3R5cGUpOgorICAgICAgICAiIiJJbml0aWFsaXplIGFuIG9wdGlv
bi4KKyAgICAgICAgQHBhcmFtIHJkdHlwZTogVGhlIHJkYXRhIHR5cGUKKyAgICAgICAgQHR5cGUg
cmR0eXBlOiBpbnQKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYub3R5cGUgPSBvdHlwZQorCisg
ICAgZGVmIHRvX3dpcmUoc2VsZiwgZmlsZSk6CisgICAgICAgICIiIkNvbnZlcnQgYW4gb3B0aW9u
IHRvIHdpcmUgZm9ybWF0LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcgorCisgICAgZGVmIGZyb21fd2lyZShjbHMsIG90eXBlLCB3aXJlLCBjdXJyZW50LCBv
bGVuKToKKyAgICAgICAgIiIiQnVpbGQgYW4gRUROUyBvcHRpb24gb2JqZWN0IGZyb20gd2lyZSBm
b3JtYXQKKworICAgICAgICBAcGFyYW0gb3R5cGU6IFRoZSBvcHRpb24gdHlwZQorICAgICAgICBA
dHlwZSBvdHlwZTogaW50CisgICAgICAgIEBwYXJhbSB3aXJlOiBUaGUgd2lyZS1mb3JtYXQgbWVz
c2FnZQorICAgICAgICBAdHlwZSB3aXJlOiBzdHJpbmcKKyAgICAgICAgQHBhcmFtIGN1cnJlbnQ6
IFRoZSBvZmZldCBpbiB3aXJlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJkYXRhLgorICAgICAg
ICBAdHlwZSBjdXJyZW50OiBpbnQKKyAgICAgICAgQHBhcmFtIG9sZW46IFRoZSBsZW5ndGggb2Yg
dGhlIHdpcmUtZm9ybWF0IG9wdGlvbiBkYXRhCisgICAgICAgIEB0eXBlIG9sZW46IGludAorICAg
ICAgICBAcnR5cGU6IGRucy5lbmRzLk9wdGlvbiBpbnN0YW5jZSIiIgorICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBmcm9tX3dpcmUgPSBjbGFzc21ldGhvZChmcm9tX3dp
cmUpCisKKyAgICBkZWYgX2NtcChzZWxmLCBvdGhlcik6CisgICAgICAgICIiIkNvbXBhcmUgYW4g
RU5EUyBvcHRpb24gd2l0aCBhbm90aGVyIG9wdGlvbiBvZiB0aGUgc2FtZSB0eXBlLgorICAgICAg
ICBSZXR1cm4gPCAwIGlmIHNlbGYgPCBvdGhlciwgMCBpZiBzZWxmID09IG90aGVyLCBhbmQgPiAw
IGlmIHNlbGYgPiBvdGhlci4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3Qg
aXNpbnN0YW5jZShvdGhlciwgT3B0aW9uKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAg
ICAgICBpZiBzZWxmLm90eXBlICE9IG90aGVyLm90eXBlOgorICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCisgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpID09IDAKKworICAgIGRlZiBfX25l
X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgT3B0aW9u
KToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBzZWxmLm90eXBlICE9IG90
aGVyLm90eXBlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBzZWxm
Ll9jbXAob3RoZXIpICE9IDAKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAg
ICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgT3B0aW9uKSBvciBcCisgICAgICAgICAgICAgICBz
ZWxmLm90eXBlICE9IG90aGVyLm90eXBlOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVu
dGVkCisgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpIDwgMAorCisgICAgZGVmIF9fbGVf
XyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBPcHRpb24p
IG9yIFwKKyAgICAgICAgICAgICAgIHNlbGYub3R5cGUgIT0gb3RoZXIub3R5cGU6CisgICAgICAg
ICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhl
cikgPD0gMAorCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBp
c2luc3RhbmNlKG90aGVyLCBPcHRpb24pIG9yIFwKKyAgICAgICAgICAgICAgIHNlbGYub3R5cGUg
IT0gb3RoZXIub3R5cGU6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgPj0gMAorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBv
dGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBPcHRpb24pIG9yIFwKKyAg
ICAgICAgICAgICAgIHNlbGYub3R5cGUgIT0gb3RoZXIub3R5cGU6CisgICAgICAgICAgICByZXR1
cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgPiAwCisK
KworY2xhc3MgR2VuZXJpY09wdGlvbihPcHRpb24pOgorICAgICIiIkdlbmVyYXRlIFJkYXRhIENs
YXNzCisKKyAgICBUaGlzIGNsYXNzIGlzIHVzZWQgZm9yIEVETlMgb3B0aW9uIHR5cGVzIGZvciB3
aGljaCB3ZSBoYXZlIG5vIGJldHRlcgorICAgIGltcGxlbWVudGF0aW9uLgorICAgICIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG90eXBlLCBkYXRhKToKKyAgICAgICAgc3VwZXIoR2VuZXJp
Y09wdGlvbiwgc2VsZikuX19pbml0X18ob3R5cGUpCisgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEK
KworICAgIGRlZiB0b193aXJlKHNlbGYsIGZpbGUpOgorICAgICAgICBmaWxlLndyaXRlKHNlbGYu
ZGF0YSkKKworICAgIGRlZiBmcm9tX3dpcmUoY2xzLCBvdHlwZSwgd2lyZSwgY3VycmVudCwgb2xl
bik6CisgICAgICAgIHJldHVybiBjbHMob3R5cGUsIHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyBv
bGVuXSkKKworICAgIGZyb21fd2lyZSA9IGNsYXNzbWV0aG9kKGZyb21fd2lyZSkKKworICAgIGRl
ZiBfY21wKHNlbGYsIG90aGVyKToKKwlyZXR1cm4gY21wKHNlbGYuZGF0YSwgb3RoZXIuZGF0YSkK
KworX3R5cGVfdG9fY2xhc3MgPSB7Cit9CisKK2RlZiBnZXRfb3B0aW9uX2NsYXNzKG90eXBlKToK
KyAgICBjbHMgPSBfdHlwZV90b19jbGFzcy5nZXQob3R5cGUpCisgICAgaWYgY2xzIGlzIE5vbmU6
CisgICAgICAgIGNscyA9IEdlbmVyaWNPcHRpb24KKyAgICByZXR1cm4gY2xzCisKK2RlZiBvcHRp
b25fZnJvbV93aXJlKG90eXBlLCB3aXJlLCBjdXJyZW50LCBvbGVuKToKKyAgICAiIiJCdWlsZCBh
biBFRE5TIG9wdGlvbiBvYmplY3QgZnJvbSB3aXJlIGZvcm1hdAorCisgICAgQHBhcmFtIG90eXBl
OiBUaGUgb3B0aW9uIHR5cGUKKyAgICBAdHlwZSBvdHlwZTogaW50CisgICAgQHBhcmFtIHdpcmU6
IFRoZSB3aXJlLWZvcm1hdCBtZXNzYWdlCisgICAgQHR5cGUgd2lyZTogc3RyaW5nCisgICAgQHBh
cmFtIGN1cnJlbnQ6IFRoZSBvZmZldCBpbiB3aXJlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJk
YXRhLgorICAgIEB0eXBlIGN1cnJlbnQ6IGludAorICAgIEBwYXJhbSBvbGVuOiBUaGUgbGVuZ3Ro
IG9mIHRoZSB3aXJlLWZvcm1hdCBvcHRpb24gZGF0YQorICAgIEB0eXBlIG9sZW46IGludAorICAg
IEBydHlwZTogZG5zLmVuZHMuT3B0aW9uIGluc3RhbmNlIiIiCisKKyAgICBjbHMgPSBnZXRfb3B0
aW9uX2NsYXNzKG90eXBlKQorICAgIHJldHVybiBjbHMuZnJvbV93aXJlKG90eXBlLCB3aXJlLCBj
dXJyZW50LCBvbGVuKQpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMv
ZW50cm9weS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5
L2Rucy9lbnRyb3B5LnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGly
ZF9wYXJ0eS9kbnMvZW50cm9weS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjMgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDA5IE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2Us
IGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRv
Y3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5
IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k
IHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRI
RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwg
V0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwg
SU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4g
Tk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJF
Q1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMg
V0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBX
SEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBU
T1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU
SEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKK2ltcG9ydCBvcworaW1w
b3J0IHRpbWUKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nIGFzIF90aHJlYWRpbmcKK2V4Y2Vw
dCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgZHVtbXlfdGhyZWFkaW5nIGFzIF90aHJlYWRpbmcK
KworY2xhc3MgRW50cm9weVBvb2wob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vl
ZD1Ob25lKToKKyAgICAgICAgc2VsZi5wb29sX2luZGV4ID0gMAorICAgICAgICBzZWxmLmRpZ2Vz
dCA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0X2J5dGUgPSAwCisgICAgICAgIHNlbGYubG9jayA9
IF90aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBoYXNo
bGliCisgICAgICAgICAgICBzZWxmLmhhc2ggPSBoYXNobGliLnNoYTEoKQorICAgICAgICAgICAg
c2VsZi5oYXNoX2xlbiA9IDIwCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICBpbXBvcnQgc2hhCisgICAgICAgICAgICAgICAgc2VsZi5oYXNoID0gc2hh
Lm5ldygpCisgICAgICAgICAgICAgICAgc2VsZi5oYXNoX2xlbiA9IDIwCisgICAgICAgICAgICBl
eGNlcHQ6CisgICAgICAgICAgICAgICAgaW1wb3J0IG1kNQorICAgICAgICAgICAgICAgIHNlbGYu
aGFzaCA9IG1kNS5uZXcoKQorICAgICAgICAgICAgICAgIHNlbGYuaGFzaF9sZW4gPSAxNgorICAg
ICAgICBzZWxmLnBvb2wgPSAnXDAnICogc2VsZi5oYXNoX2xlbgorICAgICAgICBpZiBub3Qgc2Vl
ZCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5zdGlyKHNlZWQpCisgICAgICAgICAgICBzZWxm
LnNlZWRlZCA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2VlZGVkID0g
RmFsc2UKKworICAgIGRlZiBzdGlyKHNlbGYsIGVudHJvcHksIGFscmVhZHlfbG9ja2VkPUZhbHNl
KToKKyAgICAgICAgaWYgbm90IGFscmVhZHlfbG9ja2VkOgorICAgICAgICAgICAgc2VsZi5sb2Nr
LmFjcXVpcmUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBieXRlcyA9IFtvcmQoYykgZm9y
IGMgaW4gc2VsZi5wb29sXQorICAgICAgICAgICAgZm9yIGMgaW4gZW50cm9weToKKyAgICAgICAg
ICAgICAgICBpZiBzZWxmLnBvb2xfaW5kZXggPT0gc2VsZi5oYXNoX2xlbjoKKyAgICAgICAgICAg
ICAgICAgICAgc2VsZi5wb29sX2luZGV4ID0gMAorICAgICAgICAgICAgICAgIGIgPSBvcmQoYykg
JiAweGZmCisgICAgICAgICAgICAgICAgYnl0ZXNbc2VsZi5wb29sX2luZGV4XSBePSBiCisgICAg
ICAgICAgICAgICAgc2VsZi5wb29sX2luZGV4ICs9IDEKKyAgICAgICAgICAgIHNlbGYucG9vbCA9
ICcnLmpvaW4oW2NocihjKSBmb3IgYyBpbiBieXRlc10pCisgICAgICAgIGZpbmFsbHk6CisgICAg
ICAgICAgICBpZiBub3QgYWxyZWFkeV9sb2NrZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5sb2Nr
LnJlbGVhc2UoKQorCisgICAgZGVmIF9tYXliZV9zZWVkKHNlbGYpOgorICAgICAgICBpZiBub3Qg
c2VsZi5zZWVkZWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VlZCA9IG9z
LnVyYW5kb20oMTYpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgICAgICByID0gZmlsZSgnL2Rldi91cmFuZG9tJywgJ3InLCAwKQorICAg
ICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWVkID0gci5y
ZWFkKDE2KQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAg
ICAgICAgci5jbG9zZSgpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAg
ICAgICBzZWVkID0gc3RyKHRpbWUudGltZSgpKQorICAgICAgICAgICAgc2VsZi5zZWVkZWQgPSBU
cnVlCisgICAgICAgICAgICBzZWxmLnN0aXIoc2VlZCwgVHJ1ZSkKKworICAgIGRlZiByYW5kb21f
OChzZWxmKToKKyAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoKQorICAgICAgICBzZWxmLl9tYXli
ZV9zZWVkKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5kaWdlc3QgaXMgTm9u
ZSBvciBzZWxmLm5leHRfYnl0ZSA9PSBzZWxmLmhhc2hfbGVuOgorICAgICAgICAgICAgICAgIHNl
bGYuaGFzaC51cGRhdGUoc2VsZi5wb29sKQorICAgICAgICAgICAgICAgIHNlbGYuZGlnZXN0ID0g
c2VsZi5oYXNoLmRpZ2VzdCgpCisgICAgICAgICAgICAgICAgc2VsZi5zdGlyKHNlbGYuZGlnZXN0
LCBUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubmV4dF9ieXRlID0gMAorICAgICAgICAgICAg
dmFsdWUgPSBvcmQoc2VsZi5kaWdlc3Rbc2VsZi5uZXh0X2J5dGVdKQorICAgICAgICAgICAgc2Vs
Zi5uZXh0X2J5dGUgKz0gMQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5sb2Nr
LnJlbGVhc2UoKQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiByYW5kb21fMTYoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLnJhbmRvbV84KCkgKiAyNTYgKyBzZWxmLnJhbmRvbV84
KCkKKworICAgIGRlZiByYW5kb21fMzIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJhbmRv
bV8xNigpICogNjU1MzYgKyBzZWxmLnJhbmRvbV8xNigpCisKKyAgICBkZWYgcmFuZG9tX2JldHdl
ZW4oc2VsZiwgZmlyc3QsIGxhc3QpOgorICAgICAgICBzaXplID0gbGFzdCAtIGZpcnN0ICsgMQor
ICAgICAgICBpZiBzaXplID4gNDI5NDk2NzI5Nkw6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCd0b28gYmlnJykKKyAgICAgICAgaWYgc2l6ZSA+IDY1NTM2OgorICAgICAgICAgICAgcmFu
ZCA9IHNlbGYucmFuZG9tXzMyCisgICAgICAgICAgICBtYXggPSA0Mjk0OTY3Mjk1TAorICAgICAg
ICBlbGlmIHNpemUgPiAyNTY6CisgICAgICAgICAgICByYW5kID0gc2VsZi5yYW5kb21fMTYKKyAg
ICAgICAgICAgIG1heCA9IDY1NTM1CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYW5kID0g
c2VsZi5yYW5kb21fOAorICAgICAgICAgICAgbWF4ID0gMjU1CisJcmV0dXJuIChmaXJzdCArIHNp
emUgKiByYW5kKCkgLy8gKG1heCArIDEpKQorCitwb29sID0gRW50cm9weVBvb2woKQorCitkZWYg
cmFuZG9tXzE2KCk6CisgICAgcmV0dXJuIHBvb2wucmFuZG9tXzE2KCkKKworZGVmIGJldHdlZW4o
Zmlyc3QsIGxhc3QpOgorICAgIHJldHVybiBwb29sLnJhbmRvbV9iZXR3ZWVuKGZpcnN0LCBsYXN0
KQpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvZXhjZXB0aW9uLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL2V4Y2Vw
dGlvbi5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkv
ZG5zL2V4Y2VwdGlvbi5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMDMtMjAwNywgMjAwOSwgMjAxMCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Np
b24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5k
IGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVl
IGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVz
LgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVND
TEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNM
VURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BF
Q0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBE
QU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1Ig
UFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0Ug
T1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNU
SU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCisiIiJD
b21tb24gRE5TIEV4Y2VwdGlvbnMuIiIiCisKK2NsYXNzIEROU0V4Y2VwdGlvbihFeGNlcHRpb24p
OgorICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3Mgc2hhcmVkIGJ5IGFsbCBkbnNweXRob24gZXhj
ZXB0aW9ucy4iIiIKKyAgICBwYXNzCisKK2NsYXNzIEZvcm1FcnJvcihETlNFeGNlcHRpb24pOgor
ICAgICIiIkROUyBtZXNzYWdlIGlzIG1hbGZvcm1lZC4iIiIKKyAgICBwYXNzCisKK2NsYXNzIFN5
bnRheEVycm9yKEROU0V4Y2VwdGlvbik6CisgICAgIiIiVGV4dCBpbnB1dCBpcyBtYWxmb3JtZWQu
IiIiCisgICAgcGFzcworCitjbGFzcyBVbmV4cGVjdGVkRW5kKFN5bnRheEVycm9yKToKKyAgICAi
IiJSYWlzZWQgaWYgdGV4dCBpbnB1dCBlbmRzIHVuZXhwZWN0ZWRseS4iIiIKKyAgICBwYXNzCisK
K2NsYXNzIFRvb0JpZyhETlNFeGNlcHRpb24pOgorICAgICIiIlRoZSBtZXNzYWdlIGlzIHRvbyBi
aWcuIiIiCisgICAgcGFzcworCitjbGFzcyBUaW1lb3V0KEROU0V4Y2VwdGlvbik6CisgICAgIiIi
VGhlIG9wZXJhdGlvbiB0aW1lZCBvdXQuIiIiCisgICAgcGFzcwpJbmRleDogVG9vbHMvV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvZmxhZ3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
UGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvZmxhZ3MucHkJKHJldmlzaW9uIDApCisrKyBUb29s
cy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9mbGFncy5weQkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMDYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcsIDIwMDksIDIwMTAgTm9t
aW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlz
dHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1
cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQg
dGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj
ZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE
ICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVH
QVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YK
KyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVN
IEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBG
Uk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9O
IE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lO
RyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0Ug
T0YgVEhJUyBTT0ZUV0FSRS4KKworIiIiRE5TIE1lc3NhZ2UgRmxhZ3MuIiIiCisKKyMgU3RhbmRh
cmQgRE5TIGZsYWdzCisKK1FSID0gMHg4MDAwCitBQSA9IDB4MDQwMAorVEMgPSAweDAyMDAKK1JE
ID0gMHgwMTAwCitSQSA9IDB4MDA4MAorQUQgPSAweDAwMjAKK0NEID0gMHgwMDEwCisKKyMgRURO
UyBmbGFncworCitETyA9IDB4ODAwMAorCitfYnlfdGV4dCA9IHsKKyAgICAnUVInIDogUVIsCisg
ICAgJ0FBJyA6IEFBLAorICAgICdUQycgOiBUQywKKyAgICAnUkQnIDogUkQsCisgICAgJ1JBJyA6
IFJBLAorICAgICdBRCcgOiBBRCwKKyAgICAnQ0QnIDogQ0QKK30KKworX2VkbnNfYnlfdGV4dCA9
IHsKKyAgICAnRE8nIDogRE8KK30KKworCisjIFdlIGNvbnN0cnVjdCB0aGUgaW52ZXJzZSBtYXBw
aW5ncyBwcm9ncmFtbWF0aWNhbGx5IHRvIGVuc3VyZSB0aGF0IHdlCisjIGNhbm5vdCBtYWtlIGFu
eSBtaXN0YWtlcyAoZS5nLiBvbWlzc2lvbnMsIGN1dC1hbmQtcGFzdGUgZXJyb3JzKSB0aGF0Cisj
IHdvdWxkIGNhdXNlIHRoZSBtYXBwaW5ncyBub3QgdG8gYmUgdHJ1ZSBpbnZlcnNlcy4KKworX2J5
X3ZhbHVlID0gZGljdChbKHksIHgpIGZvciB4LCB5IGluIF9ieV90ZXh0Lml0ZXJpdGVtcygpXSkK
KworX2VkbnNfYnlfdmFsdWUgPSBkaWN0KFsoeSwgeCkgZm9yIHgsIHkgaW4gX2VkbnNfYnlfdGV4
dC5pdGVyaXRlbXMoKV0pCisKK2RlZiBfb3JkZXJfZmxhZ3ModGFibGUpOgorICAgIG9yZGVyID0g
bGlzdCh0YWJsZS5pdGVyaXRlbXMoKSkKKyAgICBvcmRlci5zb3J0KCkKKyAgICBvcmRlci5yZXZl
cnNlKCkKKyAgICByZXR1cm4gb3JkZXIKKworX2ZsYWdzX29yZGVyID0gX29yZGVyX2ZsYWdzKF9i
eV92YWx1ZSkKKworX2VkbnNfZmxhZ3Nfb3JkZXIgPSBfb3JkZXJfZmxhZ3MoX2VkbnNfYnlfdmFs
dWUpCisKK2RlZiBfZnJvbV90ZXh0KHRleHQsIHRhYmxlKToKKyAgICBmbGFncyA9IDAKKyAgICB0
b2tlbnMgPSB0ZXh0LnNwbGl0KCkKKyAgICBmb3IgdCBpbiB0b2tlbnM6CisgICAgICAgIGZsYWdz
ID0gZmxhZ3MgfCB0YWJsZVt0LnVwcGVyKCldCisgICAgcmV0dXJuIGZsYWdzCisKK2RlZiBfdG9f
dGV4dChmbGFncywgdGFibGUsIG9yZGVyKToKKyAgICB0ZXh0X2ZsYWdzID0gW10KKyAgICBmb3Ig
aywgdiBpbiBvcmRlcjoKKyAgICAgICAgaWYgZmxhZ3MgJiBrICE9IDA6CisgICAgICAgICAgICB0
ZXh0X2ZsYWdzLmFwcGVuZCh2KQorICAgIHJldHVybiAnICcuam9pbih0ZXh0X2ZsYWdzKQorCitk
ZWYgZnJvbV90ZXh0KHRleHQpOgorICAgICIiIkNvbnZlcnQgYSBzcGFjZS1zZXBhcmF0ZWQgbGlz
dCBvZiBmbGFnIHRleHQgdmFsdWVzIGludG8gYSBmbGFncworICAgIHZhbHVlLgorICAgIEBydHlw
ZTogaW50IiIiCisKKyAgICByZXR1cm4gX2Zyb21fdGV4dCh0ZXh0LCBfYnlfdGV4dCkKKworZGVm
IHRvX3RleHQoZmxhZ3MpOgorICAgICIiIkNvbnZlcnQgYSBmbGFncyB2YWx1ZSBpbnRvIGEgc3Bh
Y2Utc2VwYXJhdGVkIGxpc3Qgb2YgZmxhZyB0ZXh0CisgICAgdmFsdWVzLgorICAgIEBydHlwZTog
c3RyaW5nIiIiCisKKyAgICByZXR1cm4gX3RvX3RleHQoZmxhZ3MsIF9ieV92YWx1ZSwgX2ZsYWdz
X29yZGVyKQorICAgIAorCitkZWYgZWRuc19mcm9tX3RleHQodGV4dCk6CisgICAgIiIiQ29udmVy
dCBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIEVETlMgZmxhZyB0ZXh0IHZhbHVlcyBpbnRvIGEg
RUROUworICAgIGZsYWdzIHZhbHVlLgorICAgIEBydHlwZTogaW50IiIiCisKKyAgICByZXR1cm4g
X2Zyb21fdGV4dCh0ZXh0LCBfZWRuc19ieV90ZXh0KQorCitkZWYgZWRuc190b190ZXh0KGZsYWdz
KToKKyAgICAiIiJDb252ZXJ0IGFuIEVETlMgZmxhZ3MgdmFsdWUgaW50byBhIHNwYWNlLXNlcGFy
YXRlZCBsaXN0IG9mIEVETlMgZmxhZworICAgIHRleHQgdmFsdWVzLgorICAgIEBydHlwZTogc3Ry
aW5nIiIiCisKKyAgICByZXR1cm4gX3RvX3RleHQoZmxhZ3MsIF9lZG5zX2J5X3ZhbHVlLCBfZWRu
c19mbGFnc19vcmRlcikKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5z
L2luZXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9k
bnMvaW5ldC5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvZG5zL2luZXQucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA4IEBACisjIENvcHlyaWdo
dCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlzc2lv
biB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQg
aXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUg
aXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3BpZXMu
CisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJU0NM
QUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xV
RElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVD
SUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERB
TUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQ
Uk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBP
UiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5FQ1RJ
T04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKyIiIkdl
bmVyaWMgSW50ZXJuZXQgYWRkcmVzcyBoZWxwZXIgZnVuY3Rpb25zLiIiIgorCitpbXBvcnQgc29j
a2V0CisKK2ltcG9ydCBkbnMuaXB2NAoraW1wb3J0IGRucy5pcHY2CisKKworIyBXZSBhc3N1bWUg
dGhhdCBBRl9JTkVUIGlzIGFsd2F5cyBkZWZpbmVkLgorCitBRl9JTkVUID0gc29ja2V0LkFGX0lO
RVQKKworIyBBRl9JTkVUNiBtaWdodCBub3QgYmUgZGVmaW5lZCBpbiB0aGUgc29ja2V0IG1vZHVs
ZSwgYnV0IHdlIG5lZWQgaXQuCisjIFdlJ2xsIHRyeSB0byB1c2UgdGhlIHNvY2tldCBtb2R1bGUn
cyB2YWx1ZSwgYW5kIGlmIGl0IGRvZXNuJ3Qgd29yaywKKyMgd2UnbGwgdXNlIG91ciBvd24gdmFs
dWUuCisKK3RyeToKKyAgICBBRl9JTkVUNiA9IHNvY2tldC5BRl9JTkVUNgorZXhjZXB0IEF0dHJp
YnV0ZUVycm9yOgorICAgIEFGX0lORVQ2ID0gOTk5OQorCitkZWYgaW5ldF9wdG9uKGZhbWlseSwg
dGV4dCk6CisgICAgIiIiQ29udmVydCB0aGUgdGV4dHVhbCBmb3JtIG9mIGEgbmV0d29yayBhZGRy
ZXNzIGludG8gaXRzIGJpbmFyeSBmb3JtLgorCisgICAgQHBhcmFtIGZhbWlseTogdGhlIGFkZHJl
c3MgZmFtaWx5CisgICAgQHR5cGUgZmFtaWx5OiBpbnQKKyAgICBAcGFyYW0gdGV4dDogdGhlIHRl
eHR1YWwgYWRkcmVzcworICAgIEB0eXBlIHRleHQ6IHN0cmluZworICAgIEByYWlzZXMgTm90SW1w
bGVtZW50ZWRFcnJvcjogdGhlIGFkZHJlc3MgZmFtaWx5IHNwZWNpZmllZCBpcyBub3QKKyAgICBp
bXBsZW1lbnRlZC4KKyAgICBAcnR5cGU6IHN0cmluZworICAgICIiIgorICAgIAorICAgIGlmIGZh
bWlseSA9PSBBRl9JTkVUOgorICAgICAgICByZXR1cm4gZG5zLmlwdjQuaW5ldF9hdG9uKHRleHQp
CisgICAgZWxpZiBmYW1pbHkgPT0gQUZfSU5FVDY6CisgICAgICAgIHJldHVybiBkbnMuaXB2Ni5p
bmV0X2F0b24odGV4dCkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yCisKK2RlZiBpbmV0X250b3AoZmFtaWx5LCBhZGRyZXNzKToKKyAgICAiIiJDb252ZXJ0IHRo
ZSBiaW5hcnkgZm9ybSBvZiBhIG5ldHdvcmsgYWRkcmVzcyBpbnRvIGl0cyB0ZXh0dWFsIGZvcm0u
CisKKyAgICBAcGFyYW0gZmFtaWx5OiB0aGUgYWRkcmVzcyBmYW1pbHkKKyAgICBAdHlwZSBmYW1p
bHk6IGludAorICAgIEBwYXJhbSBhZGRyZXNzOiB0aGUgYmluYXJ5IGFkZHJlc3MKKyAgICBAdHlw
ZSBhZGRyZXNzOiBzdHJpbmcKKyAgICBAcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3I6IHRoZSBh
ZGRyZXNzIGZhbWlseSBzcGVjaWZpZWQgaXMgbm90CisgICAgaW1wbGVtZW50ZWQuCisgICAgQHJ0
eXBlOiBzdHJpbmcKKyAgICAiIiIKKyAgICBpZiBmYW1pbHkgPT0gQUZfSU5FVDoKKyAgICAgICAg
cmV0dXJuIGRucy5pcHY0LmluZXRfbnRvYShhZGRyZXNzKQorICAgIGVsaWYgZmFtaWx5ID09IEFG
X0lORVQ2OgorICAgICAgICByZXR1cm4gZG5zLmlwdjYuaW5ldF9udG9hKGFkZHJlc3MpCisgICAg
ZWxzZToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCitkZWYgYWZfZm9yX2Fk
ZHJlc3ModGV4dCk6CisgICAgIiIiRGV0ZXJtaW5lIHRoZSBhZGRyZXNzIGZhbWlseSBvZiBhIHRl
eHR1YWwtZm9ybSBuZXR3b3JrIGFkZHJlc3MuCisKKyAgICBAcGFyYW0gdGV4dDogdGhlIHRleHR1
YWwgYWRkcmVzcworICAgIEB0eXBlIHRleHQ6IHN0cmluZworICAgIEByYWlzZXMgVmFsdWVFcnJv
cjogdGhlIGFkZHJlc3MgZmFtaWx5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIGlucHV0
LgorICAgIEBydHlwZTogaW50CisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBqdW5rID0gZG5z
LmlwdjQuaW5ldF9hdG9uKHRleHQpCisgICAgICAgIHJldHVybiBBRl9JTkVUCisgICAgZXhjZXB0
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBqdW5rID0gZG5zLmlwdjYuaW5ldF9hdG9uKHRl
eHQpCisgICAgICAgICAgICByZXR1cm4gQUZfSU5FVDYKKyAgICAgICAgZXhjZXB0OgorICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcgorCitkZWYgaXNfbXVsdGljYXN0KHRleHQpOgorICAgICIi
IklzIHRoZSB0ZXh0dWFsLWZvcm0gbmV0d29yayBhZGRyZXNzIGEgbXVsdGljYXN0IGFkZHJlc3M/
CisKKyAgICBAcGFyYW0gdGV4dDogdGhlIHRleHR1YWwgYWRkcmVzcworICAgIEByYWlzZXMgVmFs
dWVFcnJvcjogdGhlIGFkZHJlc3MgZmFtaWx5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGZyb20gdGhl
IGlucHV0LgorICAgIEBydHlwZTogYm9vbAorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgZmly
c3QgPSBvcmQoZG5zLmlwdjQuaW5ldF9hdG9uKHRleHQpWzBdKQorICAgICAgICByZXR1cm4gKGZp
cnN0ID49IDIyNCBhbmQgZmlyc3QgPD0gMjM5KQorICAgIGV4Y2VwdDoKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgZmlyc3QgPSBvcmQoZG5zLmlwdjYuaW5ldF9hdG9uKHRleHQpWzBdKQorICAg
ICAgICAgICAgcmV0dXJuIChmaXJzdCA9PSAyNTUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhp
cmRfcGFydHkvZG5zL2lwdjQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90
aGlyZF9wYXJ0eS9kbnMvaXB2NC5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBs
YXkvdGhpcmRfcGFydHkvZG5zL2lwdjQucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwgSW5jLgorIwor
IyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNv
ZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3
aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4g
YWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5P
TUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09G
VFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IK
KyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNF
LCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBO
RUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1Ig
SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FS
RS4KKworIiIiSVB2NCBoZWxwZXIgZnVuY3Rpb25zLiIiIgorCitpbXBvcnQgc29ja2V0CitpbXBv
cnQgc3lzCisKK2lmIHN5cy5oZXh2ZXJzaW9uIDwgMHgwMjAzMDAwMCBvciBzeXMucGxhdGZvcm0g
PT0gJ3dpbjMyJzoKKyAgICAjCisgICAgIyBTb21lIHZlcnNpb25zIG9mIFB5dGhvbiAyLjIgaGF2
ZSBhbiBpbmV0X2F0b24gd2hpY2ggcmVqZWN0cworICAgICMgdGhlIHZhbGlkIElQIGFkZHJlc3Mg
JzI1NS4yNTUuMjU1LjI1NScuICBJdCBhcHBlYXJzIHRoaXMKKyAgICAjIHByb2JsZW0gaXMgc3Rp
bGwgcHJlc2VudCBvbiB0aGUgV2luMzIgcGxhdGZvcm0gZXZlbiBpbiAyLjMuCisgICAgIyBXZSds
bCB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbS4KKyAgICAjCisgICAgZGVmIGluZXRfYXRvbih0ZXh0
KToKKyAgICAgICAgaWYgdGV4dCA9PSAnMjU1LjI1NS4yNTUuMjU1JzoKKyAgICAgICAgICAgIHJl
dHVybiAnXHhmZicgKiA0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc29ja2V0
LmluZXRfYXRvbih0ZXh0KQorZWxzZToKKyAgICBpbmV0X2F0b24gPSBzb2NrZXQuaW5ldF9hdG9u
CisKK2luZXRfbnRvYSA9IHNvY2tldC5pbmV0X250b2EKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBs
YXkvdGhpcmRfcGFydHkvZG5zL2lwdjYucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJl
cGxheS90aGlyZF9wYXJ0eS9kbnMvaXB2Ni5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBh
Z2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL2lwdjYucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTYzIEBACisjIENvcHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIElu
Yy4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUg
dGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdp
dGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBw
ZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi
IEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBU
SElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFC
TEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NT
IE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05U
UkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisj
IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMg
U09GVFdBUkUuCisKKyIiIklQdjYgaGVscGVyIGZ1bmN0aW9ucy4iIiIKKworaW1wb3J0IHJlCisK
K2ltcG9ydCBkbnMuZXhjZXB0aW9uCitpbXBvcnQgZG5zLmlwdjQKKworX2xlYWRpbmdfemVybyA9
IHJlLmNvbXBpbGUocicwKyhbMC05YS1mXSspJykKKworZGVmIGluZXRfbnRvYShhZGRyZXNzKToK
KyAgICAiIiJDb252ZXJ0IGEgbmV0d29yayBmb3JtYXQgSVB2NiBhZGRyZXNzIGludG8gdGV4dC4K
KworICAgIEBwYXJhbSBhZGRyZXNzOiB0aGUgYmluYXJ5IGFkZHJlc3MKKyAgICBAdHlwZSBhZGRy
ZXNzOiBzdHJpbmcKKyAgICBAcnR5cGU6IHN0cmluZworICAgIEByYWlzZXMgVmFsdWVFcnJvcjog
dGhlIGFkZHJlc3MgaXNuJ3QgMTYgYnl0ZXMgbG9uZworICAgICIiIgorCisgICAgaWYgbGVuKGFk
ZHJlc3MpICE9IDE2OgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJUHY2IGFkZHJlc3NlcyBh
cmUgMTYgYnl0ZXMgbG9uZyIpCisgICAgaGV4ID0gYWRkcmVzcy5lbmNvZGUoJ2hleF9jb2RlYycp
CisgICAgY2h1bmtzID0gW10KKyAgICBpID0gMAorICAgIGwgPSBsZW4oaGV4KQorICAgIHdoaWxl
IGkgPCBsOgorICAgICAgICBjaHVuayA9IGhleFtpIDogaSArIDRdCisgICAgICAgICMgc3RyaXAg
bGVhZGluZyB6ZXJvcy4gIHdlIGRvIHRoaXMgd2l0aCBhbiByZSBpbnN0ZWFkIG9mCisgICAgICAg
ICMgd2l0aCBsc3RyaXAoKSBiZWNhdXNlIGxzdHJpcCgpIGRpZG4ndCBzdXBwb3J0IGNoYXJzIHVu
dGlsCisgICAgICAgICMgcHl0aG9uIDIuMi4yCisgICAgICAgIG0gPSBfbGVhZGluZ196ZXJvLm1h
dGNoKGNodW5rKQorICAgICAgICBpZiBub3QgbSBpcyBOb25lOgorICAgICAgICAgICAgY2h1bmsg
PSBtLmdyb3VwKDEpCisgICAgICAgIGNodW5rcy5hcHBlbmQoY2h1bmspCisgICAgICAgIGkgKz0g
NAorICAgICMKKyAgICAjIENvbXByZXNzIHRoZSBsb25nZXN0IHN1YnNlcXVlbmNlIG9mIDAtdmFs
dWUgY2h1bmtzIHRvIDo6CisgICAgIworICAgIGJlc3Rfc3RhcnQgPSAwCisgICAgYmVzdF9sZW4g
PSAwCisgICAgc3RhcnQgPSAtMQorICAgIGxhc3Rfd2FzX3plcm8gPSBGYWxzZQorICAgIGZvciBp
IGluIHhyYW5nZSg4KToKKyAgICAgICAgaWYgY2h1bmtzW2ldICE9ICcwJzoKKyAgICAgICAgICAg
IGlmIGxhc3Rfd2FzX3plcm86CisgICAgICAgICAgICAgICAgZW5kID0gaQorICAgICAgICAgICAg
ICAgIGN1cnJlbnRfbGVuID0gZW5kIC0gc3RhcnQKKyAgICAgICAgICAgICAgICBpZiBjdXJyZW50
X2xlbiA+IGJlc3RfbGVuOgorICAgICAgICAgICAgICAgICAgICBiZXN0X3N0YXJ0ID0gc3RhcnQK
KyAgICAgICAgICAgICAgICAgICAgYmVzdF9sZW4gPSBjdXJyZW50X2xlbgorICAgICAgICAgICAg
ICAgIGxhc3Rfd2FzX3plcm8gPSBGYWxzZQorICAgICAgICBlbGlmIG5vdCBsYXN0X3dhc196ZXJv
OgorICAgICAgICAgICAgc3RhcnQgPSBpCisgICAgICAgICAgICBsYXN0X3dhc196ZXJvID0gVHJ1
ZQorICAgIGlmIGxhc3Rfd2FzX3plcm86CisgICAgICAgIGVuZCA9IDgKKyAgICAgICAgY3VycmVu
dF9sZW4gPSBlbmQgLSBzdGFydAorICAgICAgICBpZiBjdXJyZW50X2xlbiA+IGJlc3RfbGVuOgor
ICAgICAgICAgICAgYmVzdF9zdGFydCA9IHN0YXJ0CisgICAgICAgICAgICBiZXN0X2xlbiA9IGN1
cnJlbnRfbGVuCisgICAgaWYgYmVzdF9sZW4gPiAwOgorICAgICAgICBpZiBiZXN0X3N0YXJ0ID09
IDAgYW5kIFwKKyAgICAgICAgICAgKGJlc3RfbGVuID09IDYgb3IKKyAgICAgICAgICAgIGJlc3Rf
bGVuID09IDUgYW5kIGNodW5rc1s1XSA9PSAnZmZmZicpOgorICAgICAgICAgICAgIyBXZSBoYXZl
IGFuIGVtYmVkZGVkIElQdjQgYWRkcmVzcworICAgICAgICAgICAgaWYgYmVzdF9sZW4gPT0gNjoK
KyAgICAgICAgICAgICAgICBwcmVmaXggPSAnOjonCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHByZWZpeCA9ICc6OmZmZmY6JworICAgICAgICAgICAgaGV4ID0gcHJlZml4ICsg
ZG5zLmlwdjQuaW5ldF9udG9hKGFkZHJlc3NbMTI6XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIGhleCA9ICc6Jy5qb2luKGNodW5rc1s6YmVzdF9zdGFydF0pICsgJzo6JyArIFwKKyAgICAg
ICAgICAgICAgICAgICc6Jy5qb2luKGNodW5rc1tiZXN0X3N0YXJ0ICsgYmVzdF9sZW46XSkKKyAg
ICBlbHNlOgorICAgICAgICBoZXggPSAnOicuam9pbihjaHVua3MpCisgICAgcmV0dXJuIGhleAor
CitfdjRfZW5kaW5nID0gcmUuY29tcGlsZShyJyguKik6KFxkKylcLihcZCspXC4oXGQrKVwuKFxk
KykkJykKK19jb2xvbl9jb2xvbl9zdGFydCA9IHJlLmNvbXBpbGUocic6Oi4qJykKK19jb2xvbl9j
b2xvbl9lbmQgPSByZS5jb21waWxlKHInLio6OiQnKQorCitkZWYgaW5ldF9hdG9uKHRleHQpOgor
ICAgICIiIkNvbnZlcnQgYSB0ZXh0IGZvcm1hdCBJUHY2IGFkZHJlc3MgaW50byBuZXR3b3JrIGZv
cm1hdC4KKworICAgIEBwYXJhbSB0ZXh0OiB0aGUgdGV4dHVhbCBhZGRyZXNzCisgICAgQHR5cGUg
dGV4dDogc3RyaW5nCisgICAgQHJ0eXBlOiBzdHJpbmcKKyAgICBAcmFpc2VzIGRucy5leGNlcHRp
b24uU3ludGF4RXJyb3I6IHRoZSB0ZXh0IHdhcyBub3QgcHJvcGVybHkgZm9ybWF0dGVkCisgICAg
IiIiCisKKyAgICAjCisgICAgIyBPdXIgYWltIGhlcmUgaXMgbm90IHNvbWV0aGluZyBmYXN0OyB3
ZSBqdXN0IHdhbnQgc29tZXRoaW5nIHRoYXQgd29ya3MuCisgICAgIworCisgICAgaWYgdGV4dCA9
PSAnOjonOgorICAgICAgICB0ZXh0ID0gJzA6OicKKyAgICAjCisgICAgIyBHZXQgcmlkIG9mIHRo
ZSBpY2t5IGRvdC1xdWFkIHN5bnRheCBpZiB3ZSBoYXZlIGl0LgorICAgICMKKyAgICBtID0gX3Y0
X2VuZGluZy5tYXRjaCh0ZXh0KQorICAgIGlmIG5vdCBtIGlzIE5vbmU6CisgICAgICAgIHRleHQg
PSAiJXM6JTA0eDolMDR4IiAlIChtLmdyb3VwKDEpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50KG0uZ3JvdXAoMikpICogMjU2ICsgaW50KG0uZ3JvdXAoMykpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KG0uZ3JvdXAoNCkpICogMjU2ICsgaW50KG0u
Z3JvdXAoNSkpKQorICAgICMKKyAgICAjIFRyeSB0byB0dXJuICc6Ojx3aGF0ZXZlcj4nIGludG8g
Jzo8d2hhdGV2ZXI+JzsgaWYgbm8gbWF0Y2ggdHJ5IHRvCisgICAgIyB0dXJuICc8d2hhdGV2ZXI+
OjonIGludG8gJzx3aGF0ZXZlcj46JworICAgICMKKyAgICBtID0gX2NvbG9uX2NvbG9uX3N0YXJ0
Lm1hdGNoKHRleHQpCisgICAgaWYgbm90IG0gaXMgTm9uZToKKyAgICAgICAgdGV4dCA9IHRleHRb
MTpdCisgICAgZWxzZToKKyAgICAgICAgbSA9IF9jb2xvbl9jb2xvbl9lbmQubWF0Y2godGV4dCkK
KyAgICAgICAgaWYgbm90IG0gaXMgTm9uZToKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0WzotMV0K
KyAgICAjCisgICAgIyBOb3cgY2Fub25pY2FsaXplIGludG8gOCBjaHVua3Mgb2YgNCBoZXggZGln
aXRzIGVhY2gKKyAgICAjCisgICAgY2h1bmtzID0gdGV4dC5zcGxpdCgnOicpCisgICAgbCA9IGxl
bihjaHVua3MpCisgICAgaWYgbCA+IDg6CisgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uU3lu
dGF4RXJyb3IKKyAgICBzZWVuX2VtcHR5ID0gRmFsc2UKKyAgICBjYW5vbmljYWwgPSBbXQorICAg
IGZvciBjIGluIGNodW5rczoKKyAgICAgICAgaWYgYyA9PSAnJzoKKyAgICAgICAgICAgIGlmIHNl
ZW5fZW1wdHk6CisgICAgICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJv
cgorICAgICAgICAgICAgc2Vlbl9lbXB0eSA9IFRydWUKKyAgICAgICAgICAgIGZvciBpIGluIHhy
YW5nZSgwLCA4IC0gbCArIDEpOgorICAgICAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoJzAw
MDAnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGMgPSBsZW4oYykKKyAgICAgICAgICAg
IGlmIGxjID4gNDoKKyAgICAgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVy
cm9yCisgICAgICAgICAgICBpZiBsYyAhPSA0OgorICAgICAgICAgICAgICAgIGMgPSAoJzAnICog
KDQgLSBsYykpICsgYworICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZChjKQorICAgIGlmIGwg
PCA4IGFuZCBub3Qgc2Vlbl9lbXB0eToKKyAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50
YXhFcnJvcgorICAgIHRleHQgPSAnJy5qb2luKGNhbm9uaWNhbCkKKworICAgICMKKyAgICAjIEZp
bmFsbHkgd2UgY2FuIGdvIHRvIGJpbmFyeS4KKyAgICAjCisgICAgdHJ5OgorICAgICAgICByZXR1
cm4gdGV4dC5kZWNvZGUoJ2hleF9jb2RlYycpCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAg
ICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcgpJbmRleDogVG9vbHMvV2ViUGFnZVJl
cGxheS90aGlyZF9wYXJ0eS9kbnMvbWVzc2FnZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQ
YWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9tZXNzYWdlLnB5CShyZXZpc2lvbiAwKQorKysgVG9v
bHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvbWVzc2FnZS5weQkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDgzIEBACisjIENvcHlyaWdodCAoQykgMjAwMS0yMDA3LCAyMDA5LCAyMDEw
IE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5k
IGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFu
eSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3Zp
ZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu
b3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9W
SURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRI
IFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVT
IE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9N
SU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJ
TkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFD
VElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFS
SVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1B
TkNFIE9GIFRISVMgU09GVFdBUkUuCisKKyIiIkROUyBNZXNzYWdlcyIiIgorCitpbXBvcnQgY1N0
cmluZ0lPCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCitpbXBvcnQg
dGltZQorCitpbXBvcnQgZG5zLmV4Y2VwdGlvbgoraW1wb3J0IGRucy5mbGFncworaW1wb3J0IGRu
cy5uYW1lCitpbXBvcnQgZG5zLm9wY29kZQoraW1wb3J0IGRucy5lbnRyb3B5CitpbXBvcnQgZG5z
LnJjb2RlCitpbXBvcnQgZG5zLnJkYXRhCitpbXBvcnQgZG5zLnJkYXRhY2xhc3MKK2ltcG9ydCBk
bnMucmRhdGF0eXBlCitpbXBvcnQgZG5zLnJyc2V0CitpbXBvcnQgZG5zLnJlbmRlcmVyCitpbXBv
cnQgZG5zLnRzaWcKKworY2xhc3MgU2hvcnRIZWFkZXIoZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3Ip
OgorICAgICIiIlJhaXNlZCBpZiB0aGUgRE5TIHBhY2tldCBwYXNzZWQgdG8gZnJvbV93aXJlKCkg
aXMgdG9vIHNob3J0LiIiIgorICAgIHBhc3MKKworY2xhc3MgVHJhaWxpbmdKdW5rKGRucy5leGNl
cHRpb24uRm9ybUVycm9yKToKKyAgICAiIiJSYWlzZWQgaWYgdGhlIEROUyBwYWNrZXQgcGFzc2Vk
IHRvIGZyb21fd2lyZSgpIGhhcyBleHRyYSBqdW5rCisgICAgYXQgdGhlIGVuZCBvZiBpdC4iIiIK
KyAgICBwYXNzCisKK2NsYXNzIFVua25vd25IZWFkZXJGaWVsZChkbnMuZXhjZXB0aW9uLkROU0V4
Y2VwdGlvbik6CisgICAgIiIiUmFpc2VkIGlmIGEgaGVhZGVyIGZpZWxkIG5hbWUgaXMgbm90IHJl
Y29nbml6ZWQgd2hlbiBjb252ZXJ0aW5nIGZyb20KKyAgICB0ZXh0IGludG8gYSBtZXNzYWdlLiIi
IgorICAgIHBhc3MKKworY2xhc3MgQmFkRUROUyhkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcik6Cisg
ICAgIiIiUmFpc2VkIGlmIGFuIE9QVCByZWNvcmQgb2NjdXJzIHNvbWV3aGVyZSBvdGhlciB0aGFu
IHRoZSBzdGFydCBvZgorICAgIHRoZSBhZGRpdGlvbmFsIGRhdGEgc2VjdGlvbi4iIiIKKyAgICBw
YXNzCisKK2NsYXNzIEJhZFRTSUcoZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IpOgorICAgICIiIlJh
aXNlZCBpZiBhIFRTSUcgcmVjb3JkIG9jY3VycyBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUgZW5k
IG9mCisgICAgdGhlIGFkZGl0aW9uYWwgZGF0YSBzZWN0aW9uLiIiIgorICAgIHBhc3MKKworY2xh
c3MgVW5rbm93blRTSUdLZXkoZG5zLmV4Y2VwdGlvbi5ETlNFeGNlcHRpb24pOgorICAgICIiIlJh
aXNlZCBpZiB3ZSBnb3QgYSBUU0lHIGJ1dCBkb24ndCBrbm93IHRoZSBrZXkuIiIiCisgICAgcGFz
cworCitjbGFzcyBNZXNzYWdlKG9iamVjdCk6CisgICAgIiIiQSBETlMgbWVzc2FnZS4KKworICAg
IEBpdmFyIGlkOiBUaGUgcXVlcnkgaWQ7IHRoZSBkZWZhdWx0IGlzIGEgcmFuZG9tbHkgY2hvc2Vu
IGlkLgorICAgIEB0eXBlIGlkOiBpbnQKKyAgICBAaXZhciBmbGFnczogVGhlIEROUyBmbGFncyBv
ZiB0aGUgbWVzc2FnZS4gIEBzZWU6IFJGQyAxMDM1IGZvciBhbgorICAgIGV4cGxhbmF0aW9uIG9m
IHRoZXNlIGZsYWdzLgorICAgIEB0eXBlIGZsYWdzOiBpbnQKKyAgICBAaXZhciBxdWVzdGlvbjog
VGhlIHF1ZXN0aW9uIHNlY3Rpb24uCisgICAgQHR5cGUgcXVlc3Rpb246IGxpc3Qgb2YgZG5zLnJy
c2V0LlJSc2V0IG9iamVjdHMKKyAgICBAaXZhciBhbnN3ZXI6IFRoZSBhbnN3ZXIgc2VjdGlvbi4K
KyAgICBAdHlwZSBhbnN3ZXI6IGxpc3Qgb2YgZG5zLnJyc2V0LlJSc2V0IG9iamVjdHMKKyAgICBA
aXZhciBhdXRob3JpdHk6IFRoZSBhdXRob3JpdHkgc2VjdGlvbi4KKyAgICBAdHlwZSBhdXRob3Jp
dHk6IGxpc3Qgb2YgZG5zLnJyc2V0LlJSc2V0IG9iamVjdHMKKyAgICBAaXZhciBhZGRpdGlvbmFs
OiBUaGUgYWRkaXRpb25hbCBkYXRhIHNlY3Rpb24uCisgICAgQHR5cGUgYWRkaXRpb25hbDogbGlz
dCBvZiBkbnMucnJzZXQuUlJzZXQgb2JqZWN0cworICAgIEBpdmFyIGVkbnM6IFRoZSBFRE5TIGxl
dmVsIHRvIHVzZS4gIFRoZSBkZWZhdWx0IGlzIC0xLCBubyBFZG5zLgorICAgIEB0eXBlIGVkbnM6
IGludAorICAgIEBpdmFyIGVkbnNmbGFnczogVGhlIEVETlMgZmxhZ3MKKyAgICBAdHlwZSBlZG5z
ZmxhZ3M6IGxvbmcKKyAgICBAaXZhciBwYXlsb2FkOiBUaGUgRUROUyBwYXlsb2FkIHNpemUuICBU
aGUgZGVmYXVsdCBpcyAwLgorICAgIEB0eXBlIHBheWxvYWQ6IGludAorICAgIEBpdmFyIG9wdGlv
bnM6IFRoZSBFRE5TIG9wdGlvbnMKKyAgICBAdHlwZSBvcHRpb25zOiBsaXN0IG9mIGRucy5lZG5z
Lk9wdGlvbiBvYmplY3RzCisgICAgQGl2YXIgcmVxdWVzdF9wYXlsb2FkOiBUaGUgYXNzb2NpYXRl
ZCByZXF1ZXN0J3MgRUROUyBwYXlsb2FkIHNpemUuCisgICAgQHR5cGUgcmVxdWVzdF9wYXlsb2Fk
OiBpbnQKKyAgICBAaXZhciBrZXlyaW5nOiBUaGUgVFNJRyBrZXlyaW5nIHRvIHVzZS4gIFRoZSBk
ZWZhdWx0IGlzIE5vbmUuCisgICAgQHR5cGUga2V5cmluZzogZGljdAorICAgIEBpdmFyIGtleW5h
bWU6IFRoZSBUU0lHIGtleW5hbWUgdG8gdXNlLiAgVGhlIGRlZmF1bHQgaXMgTm9uZS4KKyAgICBA
dHlwZSBrZXluYW1lOiBkbnMubmFtZS5OYW1lIG9iamVjdAorICAgIEBpdmFyIGtleWFsZ29yaXRo
bTogVGhlIFRTSUcga2V5IGFsZ29yaXRobSB0byB1c2UuICBUaGUgZGVmYXVsdCBpcworICAgIGRu
cy50c2lnLmRlZmF1bHRfYWxnb3JpdGhtLgorICAgIEB0eXBlIGtleWFsZ29yaXRobTogc3RyaW5n
CisgICAgQGl2YXIgcmVxdWVzdF9tYWM6IFRoZSBUU0lHIE1BQyBvZiB0aGUgcmVxdWVzdCBtZXNz
YWdlIGFzc29jaWF0ZWQgd2l0aAorICAgIHRoaXMgbWVzc2FnZTsgdXNlZCB3aGVuIHZhbGlkYXRp
bmcgVFNJRyBzaWduYXR1cmVzLiAgIEBzZWU6IFJGQyAyODQ1IGZvcgorICAgIG1vcmUgaW5mb3Jt
YXRpb24gb24gVFNJRyBmaWVsZHMuCisgICAgQHR5cGUgcmVxdWVzdF9tYWM6IHN0cmluZworICAg
IEBpdmFyIGZ1ZGdlOiBUU0lHIHRpbWUgZnVkZ2U7IGRlZmF1bHQgaXMgMzAwIHNlY29uZHMuCisg
ICAgQHR5cGUgZnVkZ2U6IGludAorICAgIEBpdmFyIG9yaWdpbmFsX2lkOiBUU0lHIG9yaWdpbmFs
IGlkOyBkZWZhdWx0cyB0byB0aGUgbWVzc2FnZSdzIGlkCisgICAgQHR5cGUgb3JpZ2luYWxfaWQ6
IGludAorICAgIEBpdmFyIHRzaWdfZXJyb3I6IFRTSUcgZXJyb3IgY29kZTsgZGVmYXVsdCBpcyAw
LgorICAgIEB0eXBlIHRzaWdfZXJyb3I6IGludAorICAgIEBpdmFyIG90aGVyX2RhdGE6IFRTSUcg
b3RoZXIgZGF0YS4KKyAgICBAdHlwZSBvdGhlcl9kYXRhOiBzdHJpbmcKKyAgICBAaXZhciBtYWM6
IFRoZSBUU0lHIE1BQyBmb3IgdGhpcyBtZXNzYWdlLgorICAgIEB0eXBlIG1hYzogc3RyaW5nCisg
ICAgQGl2YXIgeGZyOiBJcyB0aGUgbWVzc2FnZSBiZWluZyB1c2VkIHRvIGNvbnRhaW4gdGhlIHJl
c3VsdHMgb2YgYSBETlMKKyAgICB6b25lIHRyYW5zZmVyPyAgVGhlIGRlZmF1bHQgaXMgRmFsc2Uu
CisgICAgQHR5cGUgeGZyOiBib29sCisgICAgQGl2YXIgb3JpZ2luOiBUaGUgb3JpZ2luIG9mIHRo
ZSB6b25lIGluIG1lc3NhZ2VzIHdoaWNoIGFyZSB1c2VkIGZvcgorICAgIHpvbmUgdHJhbnNmZXJz
IG9yIGZvciBETlMgZHluYW1pYyB1cGRhdGVzLiAgVGhlIGRlZmF1bHQgaXMgTm9uZS4KKyAgICBA
dHlwZSBvcmlnaW46IGRucy5uYW1lLk5hbWUgb2JqZWN0CisgICAgQGl2YXIgdHNpZ19jdHg6IFRo
ZSBUU0lHIHNpZ25hdHVyZSBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgbWVzc2Fn
ZS4gIFRoZSBkZWZhdWx0IGlzIE5vbmUuCisgICAgQHR5cGUgdHNpZ19jdHg6IGhtYWMuSE1BQyBv
YmplY3QKKyAgICBAaXZhciBoYWRfdHNpZzogRGlkIHRoZSBtZXNzYWdlIGRlY29kZWQgZnJvbSB3
aXJlIGZvcm1hdCBoYXZlIGEgVFNJRworICAgIHNpZ25hdHVyZT8KKyAgICBAdHlwZSBoYWRfdHNp
ZzogYm9vbAorICAgIEBpdmFyIG11bHRpOiBJcyB0aGlzIG1lc3NhZ2UgcGFydCBvZiBhIG11bHRp
LW1lc3NhZ2Ugc2VxdWVuY2U/ICBUaGUKKyAgICBkZWZhdWx0IGlzIGZhbHNlLiAgVGhpcyB2YXJp
YWJsZSBpcyB1c2VkIHdoZW4gdmFsaWRhdGluZyBUU0lHIHNpZ25hdHVyZXMKKyAgICBvbiBtZXNz
YWdlcyB3aGljaCBhcmUgcGFydCBvZiBhIHpvbmUgdHJhbnNmZXIuCisgICAgQHR5cGUgbXVsdGk6
IGJvb2wKKyAgICBAaXZhciBmaXJzdDogSXMgdGhpcyBtZXNzYWdlIHN0YW5kYWxvbmUsIG9yIHRo
ZSBmaXJzdCBvZiBhIG11bHRpCisgICAgbWVzc2FnZSBzZXF1ZW5jZT8gIFRoaXMgdmFyaWFibGUg
aXMgdXNlZCB3aGVuIHZhbGlkYXRpbmcgVFNJRyBzaWduYXR1cmVzCisgICAgb24gbWVzc2FnZXMg
d2hpY2ggYXJlIHBhcnQgb2YgYSB6b25lIHRyYW5zZmVyLgorICAgIEB0eXBlIGZpcnN0OiBib29s
CisgICAgQGl2YXIgaW5kZXg6IEFuIGluZGV4IG9mIHJyc2V0cyBpbiB0aGUgbWVzc2FnZS4gIFRo
ZSBpbmRleCBrZXkgaXMKKyAgICAoc2VjdGlvbiwgbmFtZSwgcmRjbGFzcywgcmR0eXBlLCBjb3Zl
cnMsIGRlbGV0aW5nKS4gIEluZGV4aW5nIGNhbiBiZQorICAgIGRpc2FibGVkIGJ5IHNldHRpbmcg
dGhlIGluZGV4IHRvIE5vbmUuCisgICAgQHR5cGUgaW5kZXg6IGRpY3QKKyAgICAiIiIKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBpZD1Ob25lKToKKyAgICAgICAgaWYgaWQgaXMgTm9uZToKKyAg
ICAgICAgICAgIHNlbGYuaWQgPSBkbnMuZW50cm9weS5yYW5kb21fMTYoKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgc2VsZi5pZCA9IGlkCisgICAgICAgIHNlbGYuZmxhZ3MgPSAwCisgICAg
ICAgIHNlbGYucXVlc3Rpb24gPSBbXQorICAgICAgICBzZWxmLmFuc3dlciA9IFtdCisgICAgICAg
IHNlbGYuYXV0aG9yaXR5ID0gW10KKyAgICAgICAgc2VsZi5hZGRpdGlvbmFsID0gW10KKyAgICAg
ICAgc2VsZi5lZG5zID0gLTEKKyAgICAgICAgc2VsZi5lZG5zZmxhZ3MgPSAwCisgICAgICAgIHNl
bGYucGF5bG9hZCA9IDAKKyAgICAgICAgc2VsZi5vcHRpb25zID0gW10KKyAgICAgICAgc2VsZi5y
ZXF1ZXN0X3BheWxvYWQgPSAwCisgICAgICAgIHNlbGYua2V5cmluZyA9IE5vbmUKKyAgICAgICAg
c2VsZi5rZXluYW1lID0gTm9uZQorICAgICAgICBzZWxmLmtleWFsZ29yaXRobSA9IGRucy50c2ln
LmRlZmF1bHRfYWxnb3JpdGhtCisgICAgICAgIHNlbGYucmVxdWVzdF9tYWMgPSAnJworICAgICAg
ICBzZWxmLm90aGVyX2RhdGEgPSAnJworICAgICAgICBzZWxmLnRzaWdfZXJyb3IgPSAwCisgICAg
ICAgIHNlbGYuZnVkZ2UgPSAzMDAKKyAgICAgICAgc2VsZi5vcmlnaW5hbF9pZCA9IHNlbGYuaWQK
KyAgICAgICAgc2VsZi5tYWMgPSAnJworICAgICAgICBzZWxmLnhmciA9IEZhbHNlCisgICAgICAg
IHNlbGYub3JpZ2luID0gTm9uZQorICAgICAgICBzZWxmLnRzaWdfY3R4ID0gTm9uZQorICAgICAg
ICBzZWxmLmhhZF90c2lnID0gRmFsc2UKKyAgICAgICAgc2VsZi5tdWx0aSA9IEZhbHNlCisgICAg
ICAgIHNlbGYuZmlyc3QgPSBUcnVlCisgICAgICAgIHNlbGYuaW5kZXggPSB7fQorCisgICAgZGVm
IF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxETlMgbWVzc2FnZSwgSUQgJyArIGBz
ZWxmLmlkYCArICc+JworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLnRvX3RleHQoKQorCisgICAgZGVmIHRvX3RleHQoc2VsZiwgIG9yaWdpbj1Ob25lLCByZWxh
dGl2aXplPVRydWUsICoqa3cpOgorICAgICAgICAiIiJDb252ZXJ0IHRoZSBtZXNzYWdlIHRvIHRl
eHQuCisKKyAgICAgICAgVGhlIEl7b3JpZ2lufSwgSXtyZWxhdGl2aXplfSwgYW5kIGFueSBvdGhl
ciBrZXl3b3JkCisgICAgICAgIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSBycnNldCB0b193
aXJlKCkgbWV0aG9kLgorCisgICAgICAgIEBydHlwZTogc3RyaW5nCisgICAgICAgICIiIgorCisg
ICAgICAgIHMgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBwcmludCA+PiBzLCAnaWQg
JWQnICUgc2VsZi5pZAorICAgICAgICBwcmludCA+PiBzLCAnb3Bjb2RlICVzJyAlIFwKKyAgICAg
ICAgICAgICAgZG5zLm9wY29kZS50b190ZXh0KGRucy5vcGNvZGUuZnJvbV9mbGFncyhzZWxmLmZs
YWdzKSkKKyAgICAgICAgcmMgPSBkbnMucmNvZGUuZnJvbV9mbGFncyhzZWxmLmZsYWdzLCBzZWxm
LmVkbnNmbGFncykKKyAgICAgICAgcHJpbnQgPj4gcywgJ3Jjb2RlICVzJyAlIGRucy5yY29kZS50
b190ZXh0KHJjKQorICAgICAgICBwcmludCA+PiBzLCAnZmxhZ3MgJXMnICUgZG5zLmZsYWdzLnRv
X3RleHQoc2VsZi5mbGFncykKKyAgICAgICAgaWYgc2VsZi5lZG5zID49IDA6CisgICAgICAgICAg
ICBwcmludCA+PiBzLCAnZWRucyAlcycgJSBzZWxmLmVkbnMKKyAgICAgICAgICAgIGlmIHNlbGYu
ZWRuc2ZsYWdzICE9IDA6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gcywgJ2VmbGFncyAlcycg
JSBcCisgICAgICAgICAgICAgICAgICAgICAgZG5zLmZsYWdzLmVkbnNfdG9fdGV4dChzZWxmLmVk
bnNmbGFncykKKyAgICAgICAgICAgIHByaW50ID4+IHMsICdwYXlsb2FkJywgc2VsZi5wYXlsb2Fk
CisgICAgICAgIGlzX3VwZGF0ZSA9IGRucy5vcGNvZGUuaXNfdXBkYXRlKHNlbGYuZmxhZ3MpCisg
ICAgICAgIGlmIGlzX3VwZGF0ZToKKyAgICAgICAgICAgIHByaW50ID4+IHMsICc7Wk9ORScKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ID4+IHMsICc7UVVFU1RJT04nCisgICAgICAg
IGZvciBycnNldCBpbiBzZWxmLnF1ZXN0aW9uOgorICAgICAgICAgICAgcHJpbnQgPj4gcywgcnJz
ZXQudG9fdGV4dChvcmlnaW4sIHJlbGF0aXZpemUsICoqa3cpCisgICAgICAgIGlmIGlzX3VwZGF0
ZToKKyAgICAgICAgICAgIHByaW50ID4+IHMsICc7UFJFUkVRJworICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcHJpbnQgPj4gcywgJztBTlNXRVInCisgICAgICAgIGZvciBycnNldCBpbiBzZWxm
LmFuc3dlcjoKKyAgICAgICAgICAgIHByaW50ID4+IHMsIHJyc2V0LnRvX3RleHQob3JpZ2luLCBy
ZWxhdGl2aXplLCAqKmt3KQorICAgICAgICBpZiBpc191cGRhdGU6CisgICAgICAgICAgICBwcmlu
dCA+PiBzLCAnO1VQREFURScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ID4+IHMs
ICc7QVVUSE9SSVRZJworICAgICAgICBmb3IgcnJzZXQgaW4gc2VsZi5hdXRob3JpdHk6CisgICAg
ICAgICAgICBwcmludCA+PiBzLCBycnNldC50b190ZXh0KG9yaWdpbiwgcmVsYXRpdml6ZSwgKipr
dykKKyAgICAgICAgcHJpbnQgPj4gcywgJztBRERJVElPTkFMJworICAgICAgICBmb3IgcnJzZXQg
aW4gc2VsZi5hZGRpdGlvbmFsOgorICAgICAgICAgICAgcHJpbnQgPj4gcywgcnJzZXQudG9fdGV4
dChvcmlnaW4sIHJlbGF0aXZpemUsICoqa3cpCisgICAgICAgICMKKyAgICAgICAgIyBXZSBzdHJp
cCBvZmYgdGhlIGZpbmFsIFxuIHNvIHRoZSBjYWxsZXIgY2FuIHByaW50IHRoZSByZXN1bHQgd2l0
aG91dAorICAgICAgICAjIGRvaW5nIHdlaXJkIHRoaW5ncyB0byBnZXQgYXJvdW5kIGVjY2VudHJp
Y2l0aWVzIGluIFB5dGhvbiBwcmludAorICAgICAgICAjIGZvcm1hdHRpbmcKKyAgICAgICAgIwor
ICAgICAgICByZXR1cm4gcy5nZXR2YWx1ZSgpWzotMV0KKworICAgIGRlZiBfX2VxX18oc2VsZiwg
b3RoZXIpOgorICAgICAgICAiIiJUd28gbWVzc2FnZXMgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0
aGUgc2FtZSBjb250ZW50IGluIHRoZQorICAgICAgICBoZWFkZXIsIHF1ZXN0aW9uLCBhbnN3ZXIs
IGFuZCBhdXRob3JpdHkgc2VjdGlvbnMuCisgICAgICAgIEBydHlwZTogYm9vbCIiIgorICAgICAg
ICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgTWVzc2FnZSk6CisgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgICAgaWYgc2VsZi5pZCAhPSBvdGhlci5pZDoKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgICAgICBpZiBzZWxmLmZsYWdzICE9IG90aGVyLmZsYWdzOgorICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBuIGluIHNlbGYucXVlc3Rpb246CisgICAgICAg
ICAgICBpZiBuIG5vdCBpbiBvdGhlci5xdWVzdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgICAgZm9yIG4gaW4gb3RoZXIucXVlc3Rpb246CisgICAgICAgICAgICBpZiBu
IG5vdCBpbiBzZWxmLnF1ZXN0aW9uOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAg
ICAgICBmb3IgbiBpbiBzZWxmLmFuc3dlcjoKKyAgICAgICAgICAgIGlmIG4gbm90IGluIG90aGVy
LmFuc3dlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIG4gaW4g
b3RoZXIuYW5zd2VyOgorICAgICAgICAgICAgaWYgbiBub3QgaW4gc2VsZi5hbnN3ZXI6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBuIGluIHNlbGYuYXV0aG9yaXR5
OgorICAgICAgICAgICAgaWYgbiBub3QgaW4gb3RoZXIuYXV0aG9yaXR5OgorICAgICAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgbiBpbiBvdGhlci5hdXRob3JpdHk6CisgICAg
ICAgICAgICBpZiBuIG5vdCBpbiBzZWxmLmF1dGhvcml0eToKKyAgICAgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3Ro
ZXIpOgorICAgICAgICAiIiJBcmUgdHdvIG1lc3NhZ2VzIG5vdCBlcXVhbD8KKyAgICAgICAgQHJ0
eXBlOiBib29sIiIiCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCisKKyAg
ICBkZWYgaXNfcmVzcG9uc2Uoc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJJcyBvdGhlciBhIHJl
c3BvbnNlIHRvIHNlbGY/CisgICAgICAgIEBydHlwZTogYm9vbCIiIgorICAgICAgICBpZiBvdGhl
ci5mbGFncyAmIGRucy5mbGFncy5RUiA9PSAwIG9yIFwKKyAgICAgICAgICAgc2VsZi5pZCAhPSBv
dGhlci5pZCBvciBcCisgICAgICAgICAgIGRucy5vcGNvZGUuZnJvbV9mbGFncyhzZWxmLmZsYWdz
KSAhPSBcCisgICAgICAgICAgIGRucy5vcGNvZGUuZnJvbV9mbGFncyhvdGhlci5mbGFncyk6Cisg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgZG5zLnJjb2RlLmZyb21fZmxhZ3Mo
b3RoZXIuZmxhZ3MsIG90aGVyLmVkbnNmbGFncykgIT0gXAorICAgICAgICAgICAgICAgZG5zLnJj
b2RlLk5PRVJST1I6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBkbnMub3Bj
b2RlLmlzX3VwZGF0ZShzZWxmLmZsYWdzKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAg
ICAgIGZvciBuIGluIHNlbGYucXVlc3Rpb246CisgICAgICAgICAgICBpZiBuIG5vdCBpbiBvdGhl
ci5xdWVzdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIG4g
aW4gb3RoZXIucXVlc3Rpb246CisgICAgICAgICAgICBpZiBuIG5vdCBpbiBzZWxmLnF1ZXN0aW9u
OgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisg
ICAgZGVmIHNlY3Rpb25fbnVtYmVyKHNlbGYsIHNlY3Rpb24pOgorICAgICAgICBpZiBzZWN0aW9u
IGlzIHNlbGYucXVlc3Rpb246CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbGlmIHNl
Y3Rpb24gaXMgc2VsZi5hbnN3ZXI6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBlbGlm
IHNlY3Rpb24gaXMgc2VsZi5hdXRob3JpdHk6CisgICAgICAgICAgICByZXR1cm4gMgorICAgICAg
ICBlbGlmIHNlY3Rpb24gaXMgc2VsZi5hZGRpdGlvbmFsOgorICAgICAgICAgICAgcmV0dXJuIDMK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vua25vd24gc2Vj
dGlvbicpCisKKyAgICBkZWYgZmluZF9ycnNldChzZWxmLCBzZWN0aW9uLCBuYW1lLCByZGNsYXNz
LCByZHR5cGUsCisgICAgICAgICAgICAgICAgICAgY292ZXJzPWRucy5yZGF0YXR5cGUuTk9ORSwg
ZGVsZXRpbmc9Tm9uZSwgY3JlYXRlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgIGZvcmNlX3Vu
aXF1ZT1GYWxzZSk6CisgICAgICAgICIiIkZpbmQgdGhlIFJSc2V0IHdpdGggdGhlIGdpdmVuIGF0
dHJpYnV0ZXMgaW4gdGhlIHNwZWNpZmllZCBzZWN0aW9uLgorCisgICAgICAgIEBwYXJhbSBzZWN0
aW9uOiB0aGUgc2VjdGlvbiBvZiB0aGUgbWVzc2FnZSB0byBsb29rIGluLCBlLmcuCisgICAgICAg
IHNlbGYuYW5zd2VyLgorICAgICAgICBAdHlwZSBzZWN0aW9uOiBsaXN0IG9mIGRucy5ycnNldC5S
UnNldCBvYmplY3RzCisgICAgICAgIEBwYXJhbSBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgUlJzZXQK
KyAgICAgICAgQHR5cGUgbmFtZTogZG5zLm5hbWUuTmFtZSBvYmplY3QKKyAgICAgICAgQHBhcmFt
IHJkY2xhc3M6IHRoZSBjbGFzcyBvZiB0aGUgUlJzZXQKKyAgICAgICAgQHR5cGUgcmRjbGFzczog
aW50CisgICAgICAgIEBwYXJhbSByZHR5cGU6IHRoZSB0eXBlIG9mIHRoZSBSUnNldAorICAgICAg
ICBAdHlwZSByZHR5cGU6IGludAorICAgICAgICBAcGFyYW0gY292ZXJzOiB0aGUgY292ZXJzIHZh
bHVlIG9mIHRoZSBSUnNldAorICAgICAgICBAdHlwZSBjb3ZlcnM6IGludAorICAgICAgICBAcGFy
YW0gZGVsZXRpbmc6IHRoZSBkZWxldGluZyB2YWx1ZSBvZiB0aGUgUlJzZXQKKyAgICAgICAgQHR5
cGUgZGVsZXRpbmc6IGludAorICAgICAgICBAcGFyYW0gY3JlYXRlOiBJZiBUcnVlLCBjcmVhdGUg
dGhlIFJSc2V0IGlmIGl0IGlzIG5vdCBmb3VuZC4KKyAgICAgICAgVGhlIGNyZWF0ZWQgUlJzZXQg
aXMgYXBwZW5kZWQgdG8gSXtzZWN0aW9ufS4KKyAgICAgICAgQHR5cGUgY3JlYXRlOiBib29sCisg
ICAgICAgIEBwYXJhbSBmb3JjZV91bmlxdWU6IElmIFRydWUgYW5kIGNyZWF0ZSBpcyBhbHNvIFRy
dWUsIGNyZWF0ZSBhCisgICAgICAgIG5ldyBSUnNldCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBt
YXRjaGluZyBSUnNldCBleGlzdHMgYWxyZWFkeS4KKyAgICAgICAgQHR5cGUgZm9yY2VfdW5pcXVl
OiBib29sCisgICAgICAgIEByYWlzZXMgS2V5RXJyb3I6IHRoZSBSUnNldCB3YXMgbm90IGZvdW5k
IGFuZCBjcmVhdGUgd2FzIEZhbHNlCisgICAgICAgIEBydHlwZTogZG5zLnJyc2V0LlJSc2V0IG9i
amVjdCIiIgorCisgICAgICAgIGtleSA9IChzZWxmLnNlY3Rpb25fbnVtYmVyKHNlY3Rpb24pLAor
ICAgICAgICAgICAgICAgbmFtZSwgcmRjbGFzcywgcmR0eXBlLCBjb3ZlcnMsIGRlbGV0aW5nKQor
ICAgICAgICBpZiBub3QgZm9yY2VfdW5pcXVlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuaW5k
ZXggaXMgTm9uZToKKyAgICAgICAgICAgICAgICBycnNldCA9IHNlbGYuaW5kZXguZ2V0KGtleSkK
KyAgICAgICAgICAgICAgICBpZiBub3QgcnJzZXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJyc2V0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBy
cnNldCBpbiBzZWN0aW9uOgorICAgICAgICAgICAgICAgICAgICBpZiBycnNldC5tYXRjaChuYW1l
LCByZGNsYXNzLCByZHR5cGUsIGNvdmVycywgZGVsZXRpbmcpOgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJyc2V0CisgICAgICAgIGlmIG5vdCBjcmVhdGU6CisgICAgICAgICAgICBy
YWlzZSBLZXlFcnJvcgorICAgICAgICBycnNldCA9IGRucy5ycnNldC5SUnNldChuYW1lLCByZGNs
YXNzLCByZHR5cGUsIGNvdmVycywgZGVsZXRpbmcpCisgICAgICAgIHNlY3Rpb24uYXBwZW5kKHJy
c2V0KQorICAgICAgICBpZiBub3Qgc2VsZi5pbmRleCBpcyBOb25lOgorICAgICAgICAgICAgc2Vs
Zi5pbmRleFtrZXldID0gcnJzZXQKKyAgICAgICAgcmV0dXJuIHJyc2V0CisKKyAgICBkZWYgZ2V0
X3Jyc2V0KHNlbGYsIHNlY3Rpb24sIG5hbWUsIHJkY2xhc3MsIHJkdHlwZSwKKyAgICAgICAgICAg
ICAgICAgIGNvdmVycz1kbnMucmRhdGF0eXBlLk5PTkUsIGRlbGV0aW5nPU5vbmUsIGNyZWF0ZT1G
YWxzZSwKKyAgICAgICAgICAgICAgICAgIGZvcmNlX3VuaXF1ZT1GYWxzZSk6CisgICAgICAgICIi
IkdldCB0aGUgUlJzZXQgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcyBpbiB0aGUgc3BlY2lmaWVk
IHNlY3Rpb24uCisKKyAgICAgICAgSWYgdGhlIFJSc2V0IGlzIG5vdCBmb3VuZCwgTm9uZSBpcyBy
ZXR1cm5lZC4KKworICAgICAgICBAcGFyYW0gc2VjdGlvbjogdGhlIHNlY3Rpb24gb2YgdGhlIG1l
c3NhZ2UgdG8gbG9vayBpbiwgZS5nLgorICAgICAgICBzZWxmLmFuc3dlci4KKyAgICAgICAgQHR5
cGUgc2VjdGlvbjogbGlzdCBvZiBkbnMucnJzZXQuUlJzZXQgb2JqZWN0cworICAgICAgICBAcGFy
YW0gbmFtZTogdGhlIG5hbWUgb2YgdGhlIFJSc2V0CisgICAgICAgIEB0eXBlIG5hbWU6IGRucy5u
YW1lLk5hbWUgb2JqZWN0CisgICAgICAgIEBwYXJhbSByZGNsYXNzOiB0aGUgY2xhc3Mgb2YgdGhl
IFJSc2V0CisgICAgICAgIEB0eXBlIHJkY2xhc3M6IGludAorICAgICAgICBAcGFyYW0gcmR0eXBl
OiB0aGUgdHlwZSBvZiB0aGUgUlJzZXQKKyAgICAgICAgQHR5cGUgcmR0eXBlOiBpbnQKKyAgICAg
ICAgQHBhcmFtIGNvdmVyczogdGhlIGNvdmVycyB2YWx1ZSBvZiB0aGUgUlJzZXQKKyAgICAgICAg
QHR5cGUgY292ZXJzOiBpbnQKKyAgICAgICAgQHBhcmFtIGRlbGV0aW5nOiB0aGUgZGVsZXRpbmcg
dmFsdWUgb2YgdGhlIFJSc2V0CisgICAgICAgIEB0eXBlIGRlbGV0aW5nOiBpbnQKKyAgICAgICAg
QHBhcmFtIGNyZWF0ZTogSWYgVHJ1ZSwgY3JlYXRlIHRoZSBSUnNldCBpZiBpdCBpcyBub3QgZm91
bmQuCisgICAgICAgIFRoZSBjcmVhdGVkIFJSc2V0IGlzIGFwcGVuZGVkIHRvIEl7c2VjdGlvbn0u
CisgICAgICAgIEB0eXBlIGNyZWF0ZTogYm9vbAorICAgICAgICBAcGFyYW0gZm9yY2VfdW5pcXVl
OiBJZiBUcnVlIGFuZCBjcmVhdGUgaXMgYWxzbyBUcnVlLCBjcmVhdGUgYQorICAgICAgICBuZXcg
UlJzZXQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgbWF0Y2hpbmcgUlJzZXQgZXhpc3RzIGFscmVh
ZHkuCisgICAgICAgIEB0eXBlIGZvcmNlX3VuaXF1ZTogYm9vbAorICAgICAgICBAcnR5cGU6IGRu
cy5ycnNldC5SUnNldCBvYmplY3Qgb3IgTm9uZSIiIgorCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHJyc2V0ID0gc2VsZi5maW5kX3Jyc2V0KHNlY3Rpb24sIG5hbWUsIHJkY2xhc3MsIHJkdHlw
ZSwgY292ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRpbmcs
IGNyZWF0ZSwgZm9yY2VfdW5pcXVlKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAg
ICAgICBycnNldCA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHJyc2V0CisKKyAgICBkZWYgdG9fd2ly
ZShzZWxmLCBvcmlnaW49Tm9uZSwgbWF4X3NpemU9MCwgKiprdyk6CisgICAgICAgICIiIlJldHVy
biBhIHN0cmluZyBjb250YWluaW5nIHRoZSBtZXNzYWdlIGluIEROUyBjb21wcmVzc2VkIHdpcmUK
KyAgICAgICAgZm9ybWF0LgorCisgICAgICAgIEFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMg
YXJlIHBhc3NlZCB0byB0aGUgcnJzZXQgdG9fd2lyZSgpCisgICAgICAgIG1ldGhvZC4KKworICAg
ICAgICBAcGFyYW0gb3JpZ2luOiBUaGUgb3JpZ2luIHRvIGJlIGFwcGVuZGVkIHRvIGFueSByZWxh
dGl2ZSBuYW1lcy4KKyAgICAgICAgQHR5cGUgb3JpZ2luOiBkbnMubmFtZS5OYW1lIG9iamVjdAor
ICAgICAgICBAcGFyYW0gbWF4X3NpemU6IFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHdpcmUgZm9y
bWF0IG91dHB1dDsgZGVmYXVsdAorICAgICAgICBpcyAwLCB3aGljaCBtZWFucyAndGhlIG1lc3Nh
Z2UncyByZXF1ZXN0IHBheWxvYWQsIGlmIG5vbnplcm8sIG9yCisgICAgICAgIDY1NTM2Jy4KKyAg
ICAgICAgQHR5cGUgbWF4X3NpemU6IGludAorICAgICAgICBAcmFpc2VzIGRucy5leGNlcHRpb24u
VG9vQmlnOiBtYXhfc2l6ZSB3YXMgZXhjZWVkZWQKKyAgICAgICAgQHJ0eXBlOiBzdHJpbmcKKyAg
ICAgICAgIiIiCisKKyAgICAgICAgaWYgbWF4X3NpemUgPT0gMDoKKyAgICAgICAgICAgIGlmIHNl
bGYucmVxdWVzdF9wYXlsb2FkICE9IDA6CisgICAgICAgICAgICAgICAgbWF4X3NpemUgPSBzZWxm
LnJlcXVlc3RfcGF5bG9hZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtYXhf
c2l6ZSA9IDY1NTM1CisgICAgICAgIGlmIG1heF9zaXplIDwgNTEyOgorICAgICAgICAgICAgbWF4
X3NpemUgPSA1MTIKKyAgICAgICAgZWxpZiBtYXhfc2l6ZSA+IDY1NTM1OgorICAgICAgICAgICAg
bWF4X3NpemUgPSA2NTUzNQorICAgICAgICByID0gZG5zLnJlbmRlcmVyLlJlbmRlcmVyKHNlbGYu
aWQsIHNlbGYuZmxhZ3MsIG1heF9zaXplLCBvcmlnaW4pCisgICAgICAgIGZvciBycnNldCBpbiBz
ZWxmLnF1ZXN0aW9uOgorICAgICAgICAgICAgci5hZGRfcXVlc3Rpb24ocnJzZXQubmFtZSwgcnJz
ZXQucmR0eXBlLCBycnNldC5yZGNsYXNzKQorICAgICAgICBmb3IgcnJzZXQgaW4gc2VsZi5hbnN3
ZXI6CisgICAgICAgICAgICByLmFkZF9ycnNldChkbnMucmVuZGVyZXIuQU5TV0VSLCBycnNldCwg
KiprdykKKyAgICAgICAgZm9yIHJyc2V0IGluIHNlbGYuYXV0aG9yaXR5OgorICAgICAgICAgICAg
ci5hZGRfcnJzZXQoZG5zLnJlbmRlcmVyLkFVVEhPUklUWSwgcnJzZXQsICoqa3cpCisgICAgICAg
IGlmIHNlbGYuZWRucyA+PSAwOgorICAgICAgICAgICAgci5hZGRfZWRucyhzZWxmLmVkbnMsIHNl
bGYuZWRuc2ZsYWdzLCBzZWxmLnBheWxvYWQsIHNlbGYub3B0aW9ucykKKyAgICAgICAgZm9yIHJy
c2V0IGluIHNlbGYuYWRkaXRpb25hbDoKKyAgICAgICAgICAgIHIuYWRkX3Jyc2V0KGRucy5yZW5k
ZXJlci5BRERJVElPTkFMLCBycnNldCwgKiprdykKKyAgICAgICAgci53cml0ZV9oZWFkZXIoKQor
ICAgICAgICBpZiBub3Qgc2VsZi5rZXluYW1lIGlzIE5vbmU6CisgICAgICAgICAgICByLmFkZF90
c2lnKHNlbGYua2V5bmFtZSwgc2VsZi5rZXlyaW5nW3NlbGYua2V5bmFtZV0sCisgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuZnVkZ2UsIHNlbGYub3JpZ2luYWxfaWQsIHNlbGYudHNpZ19lcnJv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vdGhlcl9kYXRhLCBzZWxmLnJlcXVlc3Rf
bWFjLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmtleWFsZ29yaXRobSkKKyAgICAgICAg
ICAgIHNlbGYubWFjID0gci5tYWMKKyAgICAgICAgcmV0dXJuIHIuZ2V0X3dpcmUoKQorCisgICAg
ZGVmIHVzZV90c2lnKHNlbGYsIGtleXJpbmcsIGtleW5hbWU9Tm9uZSwgZnVkZ2U9MzAwLAorICAg
ICAgICAgICAgICAgICBvcmlnaW5hbF9pZD1Ob25lLCB0c2lnX2Vycm9yPTAsIG90aGVyX2RhdGE9
JycsCisgICAgICAgICAgICAgICAgIGFsZ29yaXRobT1kbnMudHNpZy5kZWZhdWx0X2FsZ29yaXRo
bSk6CisgICAgICAgICIiIldoZW4gc2VuZGluZywgYSBUU0lHIHNpZ25hdHVyZSB1c2luZyB0aGUg
c3BlY2lmaWVkIGtleXJpbmcKKyAgICAgICAgYW5kIGtleW5hbWUgc2hvdWxkIGJlIGFkZGVkLgor
CisgICAgICAgIEBwYXJhbSBrZXlyaW5nOiBUaGUgVFNJRyBrZXlyaW5nIHRvIHVzZTsgZGVmYXVs
dHMgdG8gTm9uZS4KKyAgICAgICAgQHR5cGUga2V5cmluZzogZGljdAorICAgICAgICBAcGFyYW0g
a2V5bmFtZTogVGhlIG5hbWUgb2YgdGhlIFRTSUcga2V5IHRvIHVzZTsgZGVmYXVsdHMgdG8gTm9u
ZS4KKyAgICAgICAgVGhlIGtleSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGtleXJpbmcuICBJZiBh
IGtleXJpbmcgaXMgc3BlY2lmaWVkCisgICAgICAgIGJ1dCBhIGtleW5hbWUgaXMgbm90LCB0aGVu
IHRoZSBrZXkgdXNlZCB3aWxsIGJlIHRoZSBmaXJzdCBrZXkgaW4gdGhlCisgICAgICAgIGtleXJp
bmcuICBOb3RlIHRoYXQgdGhlIG9yZGVyIG9mIGtleXMgaW4gYSBkaWN0aW9uYXJ5IGlzIG5vdCBk
ZWZpbmVkLAorICAgICAgICBzbyBhcHBsaWNhdGlvbnMgc2hvdWxkIHN1cHBseSBhIGtleW5hbWUg
d2hlbiBhIGtleXJpbmcgaXMgdXNlZCwgdW5sZXNzCisgICAgICAgIHRoZXkga25vdyB0aGUga2V5
cmluZyBjb250YWlucyBvbmx5IG9uZSBrZXkuCisgICAgICAgIEB0eXBlIGtleW5hbWU6IGRucy5u
YW1lLk5hbWUgb3Igc3RyaW5nCisgICAgICAgIEBwYXJhbSBmdWRnZTogVFNJRyB0aW1lIGZ1ZGdl
OyBkZWZhdWx0IGlzIDMwMCBzZWNvbmRzLgorICAgICAgICBAdHlwZSBmdWRnZTogaW50CisgICAg
ICAgIEBwYXJhbSBvcmlnaW5hbF9pZDogVFNJRyBvcmlnaW5hbCBpZDsgZGVmYXVsdHMgdG8gdGhl
IG1lc3NhZ2UncyBpZAorICAgICAgICBAdHlwZSBvcmlnaW5hbF9pZDogaW50CisgICAgICAgIEBw
YXJhbSB0c2lnX2Vycm9yOiBUU0lHIGVycm9yIGNvZGU7IGRlZmF1bHQgaXMgMC4KKyAgICAgICAg
QHR5cGUgdHNpZ19lcnJvcjogaW50CisgICAgICAgIEBwYXJhbSBvdGhlcl9kYXRhOiBUU0lHIG90
aGVyIGRhdGEuCisgICAgICAgIEB0eXBlIG90aGVyX2RhdGE6IHN0cmluZworICAgICAgICBAcGFy
YW0gYWxnb3JpdGhtOiBUaGUgVFNJRyBhbGdvcml0aG0gdG8gdXNlOyBkZWZhdWx0cyB0bworICAg
ICAgICBkbnMudHNpZy5kZWZhdWx0X2FsZ29yaXRobQorICAgICAgICAiIiIKKworICAgICAgICBz
ZWxmLmtleXJpbmcgPSBrZXlyaW5nCisgICAgICAgIGlmIGtleW5hbWUgaXMgTm9uZToKKyAgICAg
ICAgICAgIHNlbGYua2V5bmFtZSA9IHNlbGYua2V5cmluZy5rZXlzKClbMF0KKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5bmFtZSwgKHN0ciwgdW5pY29kZSkpOgor
ICAgICAgICAgICAgICAgIGtleW5hbWUgPSBkbnMubmFtZS5mcm9tX3RleHQoa2V5bmFtZSkKKyAg
ICAgICAgICAgIHNlbGYua2V5bmFtZSA9IGtleW5hbWUKKyAgICAgICAgc2VsZi5rZXlhbGdvcml0
aG0gPSBhbGdvcml0aG0KKyAgICAgICAgc2VsZi5mdWRnZSA9IGZ1ZGdlCisgICAgICAgIGlmIG9y
aWdpbmFsX2lkIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLm9yaWdpbmFsX2lkID0gc2VsZi5p
ZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5vcmlnaW5hbF9pZCA9IG9yaWdpbmFs
X2lkCisgICAgICAgIHNlbGYudHNpZ19lcnJvciA9IHRzaWdfZXJyb3IKKyAgICAgICAgc2VsZi5v
dGhlcl9kYXRhID0gb3RoZXJfZGF0YQorCisgICAgZGVmIHVzZV9lZG5zKHNlbGYsIGVkbnM9MCwg
ZWRuc2ZsYWdzPTAsIHBheWxvYWQ9MTI4MCwgcmVxdWVzdF9wYXlsb2FkPU5vbmUsIG9wdGlvbnM9
Tm9uZSk6CisgICAgICAgICIiIkNvbmZpZ3VyZSBFRE5TIGJlaGF2aW9yLgorICAgICAgICBAcGFy
YW0gZWRuczogVGhlIEVETlMgbGV2ZWwgdG8gdXNlLiAgU3BlY2lmeWluZyBOb25lLCBGYWxzZSwg
b3IgLTEKKyAgICAgICAgbWVhbnMgJ2RvIG5vdCB1c2UgRUROUycsIGFuZCBpbiB0aGlzIGNhc2Ug
dGhlIG90aGVyIHBhcmFtZXRlcnMgYXJlCisgICAgICAgIGlnbm9yZWQuICBTcGVjaWZ5aW5nIFRy
dWUgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDAsIGkuZS4gJ3VzZQorICAgICAgICBFRE5T
MCcuCisgICAgICAgIEB0eXBlIGVkbnM6IGludCBvciBib29sIG9yIE5vbmUKKyAgICAgICAgQHBh
cmFtIGVkbnNmbGFnczogRUROUyBmbGFnIHZhbHVlcy4KKyAgICAgICAgQHR5cGUgZWRuc2ZsYWdz
OiBpbnQKKyAgICAgICAgQHBhcmFtIHBheWxvYWQ6IFRoZSBFRE5TIHNlbmRlcidzIHBheWxvYWQg
ZmllbGQsIHdoaWNoIGlzIHRoZSBtYXhpbXVtCisgICAgICAgIHNpemUgb2YgVURQIGRhdGFncmFt
IHRoZSBzZW5kZXIgY2FuIGhhbmRsZS4KKyAgICAgICAgQHR5cGUgcGF5bG9hZDogaW50CisgICAg
ICAgIEBwYXJhbSByZXF1ZXN0X3BheWxvYWQ6IFRoZSBFRE5TIHBheWxvYWQgc2l6ZSB0byB1c2Ug
d2hlbiBzZW5kaW5nCisgICAgICAgIHRoaXMgbWVzc2FnZS4gIElmIG5vdCBzcGVjaWZpZWQsIGRl
ZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBwYXlsb2FkLgorICAgICAgICBAdHlwZSByZXF1ZXN0X3Bh
eWxvYWQ6IGludCBvciBOb25lCisgICAgICAgIEBwYXJhbSBvcHRpb25zOiBUaGUgRUROUyBvcHRp
b25zCisgICAgICAgIEB0eXBlIG9wdGlvbnM6IE5vbmUgb3IgbGlzdCBvZiBkbnMuZWRucy5PcHRp
b24gb2JqZWN0cworICAgICAgICBAc2VlOiBSRkMgMjY3MQorICAgICAgICAiIiIKKyAgICAgICAg
aWYgZWRucyBpcyBOb25lIG9yIGVkbnMgaXMgRmFsc2U6CisgICAgICAgICAgICBlZG5zID0gLTEK
KyAgICAgICAgaWYgZWRucyBpcyBUcnVlOgorICAgICAgICAgICAgZWRucyA9IDAKKyAgICAgICAg
aWYgcmVxdWVzdF9wYXlsb2FkIGlzIE5vbmU6CisgICAgICAgICAgICByZXF1ZXN0X3BheWxvYWQg
PSBwYXlsb2FkCisgICAgICAgIGlmIGVkbnMgPCAwOgorICAgICAgICAgICAgZWRuc2ZsYWdzID0g
MAorICAgICAgICAgICAgcGF5bG9hZCA9IDAKKyAgICAgICAgICAgIHJlcXVlc3RfcGF5bG9hZCA9
IDAKKyAgICAgICAgICAgIG9wdGlvbnMgPSBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
IyBtYWtlIHN1cmUgdGhlIEVETlMgdmVyc2lvbiBpbiBlZG5zZmxhZ3MgYWdyZWVzIHdpdGggZWRu
cworICAgICAgICAgICAgZWRuc2ZsYWdzICY9IDB4RkYwMEZGRkZMCisgICAgICAgICAgICBlZG5z
ZmxhZ3MgfD0gKGVkbnMgPDwgMTYpCisgICAgICAgICAgICBpZiBvcHRpb25zIGlzIE5vbmU6Cisg
ICAgICAgICAgICAgICAgb3B0aW9ucyA9IFtdCisgICAgICAgIHNlbGYuZWRucyA9IGVkbnMKKyAg
ICAgICAgc2VsZi5lZG5zZmxhZ3MgPSBlZG5zZmxhZ3MKKyAgICAgICAgc2VsZi5wYXlsb2FkID0g
cGF5bG9hZAorICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYucmVx
dWVzdF9wYXlsb2FkID0gcmVxdWVzdF9wYXlsb2FkCisKKyAgICBkZWYgd2FudF9kbnNzZWMoc2Vs
Ziwgd2FudGVkPVRydWUpOgorICAgICAgICAiIiJFbmFibGUgb3IgZGlzYWJsZSAnRE5TU0VDIGRl
c2lyZWQnIGZsYWcgaW4gcmVxdWVzdHMuCisgICAgICAgIEBwYXJhbSB3YW50ZWQ6IElzIEROU1NF
QyBkZXNpcmVkPyAgSWYgVHJ1ZSwgRUROUyBpcyBlbmFibGVkIGlmCisgICAgICAgIHJlcXVpcmVk
LCBhbmQgdGhlbiB0aGUgRE8gYml0IGlzIHNldC4gIElmIEZhbHNlLCB0aGUgRE8gYml0IGlzCisg
ICAgICAgIGNsZWFyZWQgaWYgRUROUyBpcyBlbmFibGVkLgorICAgICAgICBAdHlwZSB3YW50ZWQ6
IGJvb2wKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHdhbnRlZDoKKyAgICAgICAgICAgIGlmIHNl
bGYuZWRucyA8IDA6CisgICAgICAgICAgICAgICAgc2VsZi51c2VfZWRucygpCisgICAgICAgICAg
ICBzZWxmLmVkbnNmbGFncyB8PSBkbnMuZmxhZ3MuRE8KKyAgICAgICAgZWxpZiBzZWxmLmVkbnMg
Pj0gMDoKKyAgICAgICAgICAgIHNlbGYuZWRuc2ZsYWdzICY9IH5kbnMuZmxhZ3MuRE8KKworICAg
IGRlZiByY29kZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByY29kZS4KKyAgICAgICAg
QHJ0eXBlOiBpbnQKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBkbnMucmNvZGUuZnJvbV9m
bGFncyhzZWxmLmZsYWdzLCBzZWxmLmVkbnNmbGFncykKKworICAgIGRlZiBzZXRfcmNvZGUoc2Vs
ZiwgcmNvZGUpOgorICAgICAgICAiIiJTZXQgdGhlIHJjb2RlLgorICAgICAgICBAcGFyYW0gcmNv
ZGU6IHRoZSByY29kZQorICAgICAgICBAdHlwZSByY29kZTogaW50CisgICAgICAgICIiIgorICAg
ICAgICAodmFsdWUsIGV2YWx1ZSkgPSBkbnMucmNvZGUudG9fZmxhZ3MocmNvZGUpCisgICAgICAg
IHNlbGYuZmxhZ3MgJj0gMHhGRkYwCisgICAgICAgIHNlbGYuZmxhZ3MgfD0gdmFsdWUKKyAgICAg
ICAgc2VsZi5lZG5zZmxhZ3MgJj0gMHgwMEZGRkZGRkwKKyAgICAgICAgc2VsZi5lZG5zZmxhZ3Mg
fD0gZXZhbHVlCisgICAgICAgIGlmIHNlbGYuZWRuc2ZsYWdzICE9IDAgYW5kIHNlbGYuZWRucyA8
IDA6CisgICAgICAgICAgICBzZWxmLmVkbnMgPSAwCisKKyAgICBkZWYgb3Bjb2RlKHNlbGYpOgor
ICAgICAgICAiIiJSZXR1cm4gdGhlIG9wY29kZS4KKyAgICAgICAgQHJ0eXBlOiBpbnQKKyAgICAg
ICAgIiIiCisgICAgICAgIHJldHVybiBkbnMub3Bjb2RlLmZyb21fZmxhZ3Moc2VsZi5mbGFncykK
KworICAgIGRlZiBzZXRfb3Bjb2RlKHNlbGYsIG9wY29kZSk6CisgICAgICAgICIiIlNldCB0aGUg
b3Bjb2RlLgorICAgICAgICBAcGFyYW0gb3Bjb2RlOiB0aGUgb3Bjb2RlCisgICAgICAgIEB0eXBl
IG9wY29kZTogaW50CisgICAgICAgICIiIgorICAgICAgICBzZWxmLmZsYWdzICY9IDB4ODdGRgor
ICAgICAgICBzZWxmLmZsYWdzIHw9IGRucy5vcGNvZGUudG9fZmxhZ3Mob3Bjb2RlKQorCitjbGFz
cyBfV2lyZVJlYWRlcihvYmplY3QpOgorICAgICIiIldpcmUgZm9ybWF0IHJlYWRlci4KKworICAg
IEBpdmFyIHdpcmU6IHRoZSB3aXJlLWZvcm1hdCBtZXNzYWdlLgorICAgIEB0eXBlIHdpcmU6IHN0
cmluZworICAgIEBpdmFyIG1lc3NhZ2U6IFRoZSBtZXNzYWdlIG9iamVjdCBiZWluZyBidWlsdAor
ICAgIEB0eXBlIG1lc3NhZ2U6IGRucy5tZXNzYWdlLk1lc3NhZ2Ugb2JqZWN0CisgICAgQGl2YXIg
Y3VycmVudDogV2hlbiBidWlsZGluZyBhIG1lc3NhZ2Ugb2JqZWN0IGZyb20gd2lyZSBmb3JtYXQs
IHRoaXMKKyAgICB2YXJpYWJsZSBjb250YWlucyB0aGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmlu
ZyBvZiB3aXJlIG9mIHRoZSBuZXh0IG9jdGV0CisgICAgdG8gYmUgcmVhZC4KKyAgICBAdHlwZSBj
dXJyZW50OiBpbnQKKyAgICBAaXZhciB1cGRhdGluZzogSXMgdGhlIG1lc3NhZ2UgYSBkeW5hbWlj
IHVwZGF0ZT8KKyAgICBAdHlwZSB1cGRhdGluZzogYm9vbAorICAgIEBpdmFyIG9uZV9ycl9wZXJf
cnJzZXQ6IFB1dCBlYWNoIFJSIGludG8gaXRzIG93biBSUnNldD8KKyAgICBAdHlwZSBvbmVfcnJf
cGVyX3Jyc2V0OiBib29sCisgICAgQGl2YXIgem9uZV9yZGNsYXNzOiBUaGUgY2xhc3Mgb2YgdGhl
IHpvbmUgaW4gbWVzc2FnZXMgd2hpY2ggYXJlCisgICAgRE5TIGR5bmFtaWMgdXBkYXRlcy4KKyAg
ICBAdHlwZSB6b25lX3JkY2xhc3M6IGludAorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHdpcmUsIG1lc3NhZ2UsIHF1ZXN0aW9uX29ubHk9RmFsc2UsCisgICAgICAgICAgICAgICAg
IG9uZV9ycl9wZXJfcnJzZXQ9RmFsc2UpOgorICAgICAgICBzZWxmLndpcmUgPSB3aXJlCisgICAg
ICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gMAorICAg
ICAgICBzZWxmLnVwZGF0aW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi56b25lX3JkY2xhc3MgPSBk
bnMucmRhdGFjbGFzcy5JTgorICAgICAgICBzZWxmLnF1ZXN0aW9uX29ubHkgPSBxdWVzdGlvbl9v
bmx5CisgICAgICAgIHNlbGYub25lX3JyX3Blcl9ycnNldCA9IG9uZV9ycl9wZXJfcnJzZXQKKwor
ICAgIGRlZiBfZ2V0X3F1ZXN0aW9uKHNlbGYsIHFjb3VudCk6CisgICAgICAgICIiIlJlYWQgdGhl
IG5leHQgSXtxY291bnR9IHJlY29yZHMgZnJvbSB0aGUgd2lyZSBkYXRhIGFuZCBhZGQgdGhlbSB0
bworICAgICAgICB0aGUgcXVlc3Rpb24gc2VjdGlvbi4KKyAgICAgICAgQHBhcmFtIHFjb3VudDog
dGhlIG51bWJlciBvZiBxdWVzdGlvbnMgaW4gdGhlIG1lc3NhZ2UKKyAgICAgICAgQHR5cGUgcWNv
dW50OiBpbnQiIiIKKworICAgICAgICBpZiBzZWxmLnVwZGF0aW5nIGFuZCBxY291bnQgPiAxOgor
ICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IKKworICAgICAgICBmb3Ig
aSBpbiB4cmFuZ2UoMCwgcWNvdW50KToKKyAgICAgICAgICAgIChxbmFtZSwgdXNlZCkgPSBkbnMu
bmFtZS5mcm9tX3dpcmUoc2VsZi53aXJlLCBzZWxmLmN1cnJlbnQpCisgICAgICAgICAgICBpZiBu
b3Qgc2VsZi5tZXNzYWdlLm9yaWdpbiBpcyBOb25lOgorICAgICAgICAgICAgICAgIHFuYW1lID0g
cW5hbWUucmVsYXRpdml6ZShzZWxmLm1lc3NhZ2Uub3JpZ2luKQorICAgICAgICAgICAgc2VsZi5j
dXJyZW50ID0gc2VsZi5jdXJyZW50ICsgdXNlZAorICAgICAgICAgICAgKHJkdHlwZSwgcmRjbGFz
cykgPSBcCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QudW5wYWNrKCchSEgnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndpcmVbc2VsZi5jdXJyZW50OnNlbGYu
Y3VycmVudCArIDRdKQorICAgICAgICAgICAgc2VsZi5jdXJyZW50ID0gc2VsZi5jdXJyZW50ICsg
NAorICAgICAgICAgICAgc2VsZi5tZXNzYWdlLmZpbmRfcnJzZXQoc2VsZi5tZXNzYWdlLnF1ZXN0
aW9uLCBxbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkY2xhc3Ms
IHJkdHlwZSwgY3JlYXRlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3JjZV91bmlxdWU9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHNlbGYudXBkYXRpbmc6CisgICAg
ICAgICAgICAgICAgc2VsZi56b25lX3JkY2xhc3MgPSByZGNsYXNzCisKKyAgICBkZWYgX2dldF9z
ZWN0aW9uKHNlbGYsIHNlY3Rpb24sIGNvdW50KToKKyAgICAgICAgIiIiUmVhZCB0aGUgbmV4dCBJ
e2NvdW50fSByZWNvcmRzIGZyb20gdGhlIHdpcmUgZGF0YSBhbmQgYWRkIHRoZW0gdG8KKyAgICAg
ICAgdGhlIHNwZWNpZmllZCBzZWN0aW9uLgorICAgICAgICBAcGFyYW0gc2VjdGlvbjogdGhlIHNl
Y3Rpb24gb2YgdGhlIG1lc3NhZ2UgdG8gd2hpY2ggdG8gYWRkIHJlY29yZHMKKyAgICAgICAgQHR5
cGUgc2VjdGlvbjogbGlzdCBvZiBkbnMucnJzZXQuUlJzZXQgb2JqZWN0cworICAgICAgICBAcGFy
YW0gY291bnQ6IHRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byByZWFkCisgICAgICAgIEB0eXBlIGNv
dW50OiBpbnQiIiIKKworICAgICAgICBpZiBzZWxmLnVwZGF0aW5nIG9yIHNlbGYub25lX3JyX3Bl
cl9ycnNldDoKKyAgICAgICAgICAgIGZvcmNlX3VuaXF1ZSA9IFRydWUKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGZvcmNlX3VuaXF1ZSA9IEZhbHNlCisgICAgICAgIHNlZW5fb3B0ID0gRmFs
c2UKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDAsIGNvdW50KToKKyAgICAgICAgICAgIHJyX3N0
YXJ0ID0gc2VsZi5jdXJyZW50CisgICAgICAgICAgICAobmFtZSwgdXNlZCkgPSBkbnMubmFtZS5m
cm9tX3dpcmUoc2VsZi53aXJlLCBzZWxmLmN1cnJlbnQpCisgICAgICAgICAgICBhYnNvbHV0ZV9u
YW1lID0gbmFtZQorICAgICAgICAgICAgaWYgbm90IHNlbGYubWVzc2FnZS5vcmlnaW4gaXMgTm9u
ZToKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5yZWxhdGl2aXplKHNlbGYubWVzc2FnZS5v
cmlnaW4pCisgICAgICAgICAgICBzZWxmLmN1cnJlbnQgPSBzZWxmLmN1cnJlbnQgKyB1c2VkCisg
ICAgICAgICAgICAocmR0eXBlLCByZGNsYXNzLCB0dGwsIHJkbGVuKSA9IFwKKyAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdC51bnBhY2soJyFISElIJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi53aXJlW3NlbGYuY3VycmVudDpzZWxmLmN1cnJlbnQgKyAxMF0pCisg
ICAgICAgICAgICBzZWxmLmN1cnJlbnQgPSBzZWxmLmN1cnJlbnQgKyAxMAorICAgICAgICAgICAg
aWYgcmR0eXBlID09IGRucy5yZGF0YXR5cGUuT1BUOgorICAgICAgICAgICAgICAgIGlmIG5vdCBz
ZWN0aW9uIGlzIHNlbGYubWVzc2FnZS5hZGRpdGlvbmFsIG9yIHNlZW5fb3B0OgorICAgICAgICAg
ICAgICAgICAgICByYWlzZSBCYWRFRE5TCisgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlLnBh
eWxvYWQgPSByZGNsYXNzCisgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlLmVkbnNmbGFncyA9
IHR0bAorICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZS5lZG5zID0gKHR0bCAmIDB4ZmYwMDAw
KSA+PiAxNgorICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZS5vcHRpb25zID0gW10KKyAgICAg
ICAgICAgICAgICBjdXJyZW50ID0gc2VsZi5jdXJyZW50CisgICAgICAgICAgICAgICAgb3B0c2xl
biA9IHJkbGVuCisgICAgICAgICAgICAgICAgd2hpbGUgb3B0c2xlbiA+IDA6CisgICAgICAgICAg
ICAgICAgICAgIChvdHlwZSwgb2xlbikgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0LnVucGFjaygnIUhIJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYud2lyZVtjdXJyZW50OmN1cnJlbnQgKyA0XSkKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudCA9IGN1cnJlbnQgKyA0CisgICAgICAgICAgICAgICAgICAgIG9wdCA9IGRucy5l
ZG5zLm9wdGlvbl9mcm9tX3dpcmUob3R5cGUsIHNlbGYud2lyZSwgY3VycmVudCwgb2xlbikKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlLm9wdGlvbnMuYXBwZW5kKG9wdCkKKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQgKyBvbGVuCisgICAgICAgICAgICAgICAg
ICAgIG9wdHNsZW4gPSBvcHRzbGVuIC0gNCAtIG9sZW4KKyAgICAgICAgICAgICAgICBzZWVuX29w
dCA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgcmR0eXBlID09IGRucy5yZGF0YXR5cGUuVFNJRzoK
KyAgICAgICAgICAgICAgICBpZiBub3QgKHNlY3Rpb24gaXMgc2VsZi5tZXNzYWdlLmFkZGl0aW9u
YWwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpID09IChjb3VudCAtIDEpKToKKyAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgQmFkVFNJRworICAgICAgICAgICAgICAgIGlmIHNlbGYubWVz
c2FnZS5rZXlyaW5nIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFVua25vd25U
U0lHS2V5KCdnb3Qgc2lnbmVkIG1lc3NhZ2Ugd2l0aG91dCBrZXlyaW5nJykKKyAgICAgICAgICAg
ICAgICBzZWNyZXQgPSBzZWxmLm1lc3NhZ2Uua2V5cmluZy5nZXQoYWJzb2x1dGVfbmFtZSkKKyAg
ICAgICAgICAgICAgICBpZiBzZWNyZXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFp
c2UgVW5rbm93blRTSUdLZXkoImtleSAnJXMnIHVua25vd24iICUgbmFtZSkKKyAgICAgICAgICAg
ICAgICBzZWxmLm1lc3NhZ2UudHNpZ19jdHggPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRucy50c2lnLnZhbGlkYXRlKHNlbGYud2lyZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlX25hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNyZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQodGltZS50aW1lKCkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlLnJlcXVlc3RfbWFjLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnJfc3RhcnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZGxlbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZS50c2lnX2N0eCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZS5tdWx0aSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZS5m
aXJzdCkKKyAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UuaGFkX3RzaWcgPSBUcnVlCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHR0bCA8IDA6CisgICAgICAgICAgICAg
ICAgICAgIHR0bCA9IDAKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnVwZGF0aW5nIGFuZCBcCisg
ICAgICAgICAgICAgICAgICAgKHJkY2xhc3MgPT0gZG5zLnJkYXRhY2xhc3MuQU5ZIG9yCisgICAg
ICAgICAgICAgICAgICAgIHJkY2xhc3MgPT0gZG5zLnJkYXRhY2xhc3MuTk9ORSk6CisgICAgICAg
ICAgICAgICAgICAgIGRlbGV0aW5nID0gcmRjbGFzcworICAgICAgICAgICAgICAgICAgICByZGNs
YXNzID0gc2VsZi56b25lX3JkY2xhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgICAgICBkZWxldGluZyA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBkZWxldGluZyA9
PSBkbnMucmRhdGFjbGFzcy5BTlkgb3IgXAorICAgICAgICAgICAgICAgICAgIChkZWxldGluZyA9
PSBkbnMucmRhdGFjbGFzcy5OT05FIGFuZCBcCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24g
PT0gc2VsZi5tZXNzYWdlLmFuc3dlcik6CisgICAgICAgICAgICAgICAgICAgIGNvdmVycyA9IGRu
cy5yZGF0YXR5cGUuTk9ORQorICAgICAgICAgICAgICAgICAgICByZCA9IE5vbmUKKyAgICAgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZCA9IGRucy5yZGF0YS5mcm9tX3dp
cmUocmRjbGFzcywgcmR0eXBlLCBzZWxmLndpcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnQsIHJkbGVuLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlLm9yaWdpbikKKyAgICAg
ICAgICAgICAgICAgICAgY292ZXJzID0gcmQuY292ZXJzKCkKKyAgICAgICAgICAgICAgICBpZiBz
ZWxmLm1lc3NhZ2UueGZyIGFuZCByZHR5cGUgPT0gZG5zLnJkYXRhdHlwZS5TT0E6CisgICAgICAg
ICAgICAgICAgICAgIGZvcmNlX3VuaXF1ZSA9IFRydWUKKyAgICAgICAgICAgICAgICBycnNldCA9
IHNlbGYubWVzc2FnZS5maW5kX3Jyc2V0KHNlY3Rpb24sIG5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZGNsYXNzLCByZHR5cGUsIGNvdmVycywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0aW5n
LCBUcnVlLCBmb3JjZV91bmlxdWUpCisgICAgICAgICAgICAgICAgaWYgbm90IHJkIGlzIE5vbmU6
CisgICAgICAgICAgICAgICAgICAgIHJyc2V0LmFkZChyZCwgdHRsKQorICAgICAgICAgICAgc2Vs
Zi5jdXJyZW50ID0gc2VsZi5jdXJyZW50ICsgcmRsZW4KKworICAgIGRlZiByZWFkKHNlbGYpOgor
ICAgICAgICAiIiJSZWFkIGEgd2lyZSBmb3JtYXQgRE5TIG1lc3NhZ2UgYW5kIGJ1aWxkIGEgZG5z
Lm1lc3NhZ2UuTWVzc2FnZQorICAgICAgICBvYmplY3QuIiIiCisKKyAgICAgICAgbCA9IGxlbihz
ZWxmLndpcmUpCisgICAgICAgIGlmIGwgPCAxMjoKKyAgICAgICAgICAgIHJhaXNlIFNob3J0SGVh
ZGVyCisgICAgICAgIChzZWxmLm1lc3NhZ2UuaWQsIHNlbGYubWVzc2FnZS5mbGFncywgcWNvdW50
LCBhbmNvdW50LAorICAgICAgICAgYXVjb3VudCwgYWRjb3VudCkgPSBzdHJ1Y3QudW5wYWNrKCch
SEhISEhIJywgc2VsZi53aXJlWzoxMl0pCisgICAgICAgIHNlbGYuY3VycmVudCA9IDEyCisgICAg
ICAgIGlmIGRucy5vcGNvZGUuaXNfdXBkYXRlKHNlbGYubWVzc2FnZS5mbGFncyk6CisgICAgICAg
ICAgICBzZWxmLnVwZGF0aW5nID0gVHJ1ZQorICAgICAgICBzZWxmLl9nZXRfcXVlc3Rpb24ocWNv
dW50KQorICAgICAgICBpZiBzZWxmLnF1ZXN0aW9uX29ubHk6CisgICAgICAgICAgICByZXR1cm4K
KyAgICAgICAgc2VsZi5fZ2V0X3NlY3Rpb24oc2VsZi5tZXNzYWdlLmFuc3dlciwgYW5jb3VudCkK
KyAgICAgICAgc2VsZi5fZ2V0X3NlY3Rpb24oc2VsZi5tZXNzYWdlLmF1dGhvcml0eSwgYXVjb3Vu
dCkKKyAgICAgICAgc2VsZi5fZ2V0X3NlY3Rpb24oc2VsZi5tZXNzYWdlLmFkZGl0aW9uYWwsIGFk
Y291bnQpCisgICAgICAgIGlmIHNlbGYuY3VycmVudCAhPSBsOgorICAgICAgICAgICAgcmFpc2Ug
VHJhaWxpbmdKdW5rCisgICAgICAgIGlmIHNlbGYubWVzc2FnZS5tdWx0aSBhbmQgc2VsZi5tZXNz
YWdlLnRzaWdfY3R4IGFuZCBcCisgICAgICAgICAgICAgICBub3Qgc2VsZi5tZXNzYWdlLmhhZF90
c2lnOgorICAgICAgICAgICAgc2VsZi5tZXNzYWdlLnRzaWdfY3R4LnVwZGF0ZShzZWxmLndpcmUp
CisKKworZGVmIGZyb21fd2lyZSh3aXJlLCBrZXlyaW5nPU5vbmUsIHJlcXVlc3RfbWFjPScnLCB4
ZnI9RmFsc2UsIG9yaWdpbj1Ob25lLAorICAgICAgICAgICAgICB0c2lnX2N0eCA9IE5vbmUsIG11
bHRpID0gRmFsc2UsIGZpcnN0ID0gVHJ1ZSwKKyAgICAgICAgICAgICAgcXVlc3Rpb25fb25seSA9
IEZhbHNlLCBvbmVfcnJfcGVyX3Jyc2V0ID0gRmFsc2UpOgorICAgICIiIkNvbnZlcnQgYSBETlMg
d2lyZSBmb3JtYXQgbWVzc2FnZSBpbnRvIGEgbWVzc2FnZQorICAgIG9iamVjdC4KKworICAgIEBw
YXJhbSBrZXlyaW5nOiBUaGUga2V5cmluZyB0byB1c2UgaWYgdGhlIG1lc3NhZ2UgaXMgc2lnbmVk
LgorICAgIEB0eXBlIGtleXJpbmc6IGRpY3QKKyAgICBAcGFyYW0gcmVxdWVzdF9tYWM6IElmIHRo
ZSBtZXNzYWdlIGlzIGEgcmVzcG9uc2UgdG8gYSBUU0lHLXNpZ25lZCByZXF1ZXN0LAorICAgIEl7
cmVxdWVzdF9tYWN9IHNob3VsZCBiZSBzZXQgdG8gdGhlIE1BQyBvZiB0aGF0IHJlcXVlc3QuCisg
ICAgQHR5cGUgcmVxdWVzdF9tYWM6IHN0cmluZworICAgIEBwYXJhbSB4ZnI6IElzIHRoaXMgbWVz
c2FnZSBwYXJ0IG9mIGEgem9uZSB0cmFuc2Zlcj8KKyAgICBAdHlwZSB4ZnI6IGJvb2wKKyAgICBA
cGFyYW0gb3JpZ2luOiBJZiB0aGUgbWVzc2FnZSBpcyBwYXJ0IG9mIGEgem9uZSB0cmFuc2Zlciwg
SXtvcmlnaW59CisgICAgc2hvdWxkIGJlIHRoZSBvcmlnaW4gbmFtZSBvZiB0aGUgem9uZS4KKyAg
ICBAdHlwZSBvcmlnaW46IGRucy5uYW1lLk5hbWUgb2JqZWN0CisgICAgQHBhcmFtIHRzaWdfY3R4
OiBUaGUgb25nb2luZyBUU0lHIGNvbnRleHQsIHVzZWQgd2hlbiB2YWxpZGF0aW5nIHpvbmUKKyAg
ICB0cmFuc2ZlcnMuCisgICAgQHR5cGUgdHNpZ19jdHg6IGhtYWMuSE1BQyBvYmplY3QKKyAgICBA
cGFyYW0gbXVsdGk6IElzIHRoaXMgbWVzc2FnZSBwYXJ0IG9mIGEgbXVsdGlwbGUgbWVzc2FnZSBz
ZXF1ZW5jZT8KKyAgICBAdHlwZSBtdWx0aTogYm9vbAorICAgIEBwYXJhbSBmaXJzdDogSXMgdGhp
cyBtZXNzYWdlIHN0YW5kYWxvbmUsIG9yIHRoZSBmaXJzdCBvZiBhIG11bHRpCisgICAgbWVzc2Fn
ZSBzZXF1ZW5jZT8KKyAgICBAdHlwZSBmaXJzdDogYm9vbAorICAgIEBwYXJhbSBxdWVzdGlvbl9v
bmx5OiBSZWFkIG9ubHkgdXAgdG8gdGhlIGVuZCBvZiB0aGUgcXVlc3Rpb24gc2VjdGlvbj8KKyAg
ICBAdHlwZSBxdWVzdGlvbl9vbmx5OiBib29sCisgICAgQHBhcmFtIG9uZV9ycl9wZXJfcnJzZXQ6
IFB1dCBlYWNoIFJSIGludG8gaXRzIG93biBSUnNldAorICAgIEB0eXBlIG9uZV9ycl9wZXJfcnJz
ZXQ6IGJvb2wKKyAgICBAcmFpc2VzIFNob3J0SGVhZGVyOiBUaGUgbWVzc2FnZSBpcyBsZXNzIHRo
YW4gMTIgb2N0ZXRzIGxvbmcuCisgICAgQHJhaXNlcyBUcmFpbGluZ0p1bms6IFRoZXJlIHdlcmUg
b2N0ZXRzIGluIHRoZSBtZXNzYWdlIHBhc3QgdGhlIGVuZAorICAgIG9mIHRoZSBwcm9wZXIgRE5T
IG1lc3NhZ2UuCisgICAgQHJhaXNlcyBCYWRFRE5TOiBBbiBPUFQgcmVjb3JkIHdhcyBpbiB0aGUg
d3Jvbmcgc2VjdGlvbiwgb3Igb2NjdXJyZWQgbW9yZQorICAgIHRoYW4gb25jZS4KKyAgICBAcmFp
c2VzIEJhZFRTSUc6IEEgVFNJRyByZWNvcmQgd2FzIG5vdCB0aGUgbGFzdCByZWNvcmQgb2YgdGhl
IGFkZGl0aW9uYWwKKyAgICBkYXRhIHNlY3Rpb24uCisgICAgQHJ0eXBlOiBkbnMubWVzc2FnZS5N
ZXNzYWdlIG9iamVjdCIiIgorCisgICAgbSA9IE1lc3NhZ2UoaWQ9MCkKKyAgICBtLmtleXJpbmcg
PSBrZXlyaW5nCisgICAgbS5yZXF1ZXN0X21hYyA9IHJlcXVlc3RfbWFjCisgICAgbS54ZnIgPSB4
ZnIKKyAgICBtLm9yaWdpbiA9IG9yaWdpbgorICAgIG0udHNpZ19jdHggPSB0c2lnX2N0eAorICAg
IG0ubXVsdGkgPSBtdWx0aQorICAgIG0uZmlyc3QgPSBmaXJzdAorCisgICAgcmVhZGVyID0gX1dp
cmVSZWFkZXIod2lyZSwgbSwgcXVlc3Rpb25fb25seSwgb25lX3JyX3Blcl9ycnNldCkKKyAgICBy
ZWFkZXIucmVhZCgpCisKKyAgICByZXR1cm4gbQorCisKK2NsYXNzIF9UZXh0UmVhZGVyKG9iamVj
dCk6CisgICAgIiIiVGV4dCBmb3JtYXQgcmVhZGVyLgorCisgICAgQGl2YXIgdG9rOiB0aGUgdG9r
ZW5pemVyCisgICAgQHR5cGUgdG9rOiBkbnMudG9rZW5pemVyLlRva2VuaXplciBvYmplY3QKKyAg
ICBAaXZhciBtZXNzYWdlOiBUaGUgbWVzc2FnZSBvYmplY3QgYmVpbmcgYnVpbHQKKyAgICBAdHlw
ZSBtZXNzYWdlOiBkbnMubWVzc2FnZS5NZXNzYWdlIG9iamVjdAorICAgIEBpdmFyIHVwZGF0aW5n
OiBJcyB0aGUgbWVzc2FnZSBhIGR5bmFtaWMgdXBkYXRlPworICAgIEB0eXBlIHVwZGF0aW5nOiBi
b29sCisgICAgQGl2YXIgem9uZV9yZGNsYXNzOiBUaGUgY2xhc3Mgb2YgdGhlIHpvbmUgaW4gbWVz
c2FnZXMgd2hpY2ggYXJlCisgICAgRE5TIGR5bmFtaWMgdXBkYXRlcy4KKyAgICBAdHlwZSB6b25l
X3JkY2xhc3M6IGludAorICAgIEBpdmFyIGxhc3RfbmFtZTogVGhlIG1vc3QgcmVjZW50bHkgcmVh
ZCBuYW1lIHdoZW4gYnVpbGRpbmcgYSBtZXNzYWdlIG9iamVjdAorICAgIGZyb20gdGV4dCBmb3Jt
YXQuCisgICAgQHR5cGUgbGFzdF9uYW1lOiBkbnMubmFtZS5OYW1lIG9iamVjdAorICAgICIiIgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIG1lc3NhZ2UpOgorICAgICAgICBzZWxmLm1l
c3NhZ2UgPSBtZXNzYWdlCisgICAgICAgIHNlbGYudG9rID0gZG5zLnRva2VuaXplci5Ub2tlbml6
ZXIodGV4dCkKKyAgICAgICAgc2VsZi5sYXN0X25hbWUgPSBOb25lCisgICAgICAgIHNlbGYuem9u
ZV9yZGNsYXNzID0gZG5zLnJkYXRhY2xhc3MuSU4KKyAgICAgICAgc2VsZi51cGRhdGluZyA9IEZh
bHNlCisKKyAgICBkZWYgX2hlYWRlcl9saW5lKHNlbGYsIHNlY3Rpb24pOgorICAgICAgICAiIiJQ
cm9jZXNzIG9uZSBsaW5lIGZyb20gdGhlIHRleHQgZm9ybWF0IGhlYWRlciBzZWN0aW9uLiIiIgor
CisgICAgICAgIHRva2VuID0gc2VsZi50b2suZ2V0KCkKKyAgICAgICAgd2hhdCA9IHRva2VuLnZh
bHVlCisgICAgICAgIGlmIHdoYXQgPT0gJ2lkJzoKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZS5p
ZCA9IHNlbGYudG9rLmdldF9pbnQoKQorICAgICAgICBlbGlmIHdoYXQgPT0gJ2ZsYWdzJzoKKyAg
ICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnRvay5n
ZXQoKQorICAgICAgICAgICAgICAgIGlmIG5vdCB0b2tlbi5pc19pZGVudGlmaWVyKCk6CisgICAg
ICAgICAgICAgICAgICAgIHNlbGYudG9rLnVuZ2V0KHRva2VuKQorICAgICAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZS5mbGFncyA9IHNlbGYubWVzc2Fn
ZS5mbGFncyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbnMuZmxh
Z3MuZnJvbV90ZXh0KHRva2VuLnZhbHVlKQorICAgICAgICAgICAgaWYgZG5zLm9wY29kZS5pc191
cGRhdGUoc2VsZi5tZXNzYWdlLmZsYWdzKToKKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0aW5n
ID0gVHJ1ZQorICAgICAgICBlbGlmIHdoYXQgPT0gJ2VkbnMnOgorICAgICAgICAgICAgc2VsZi5t
ZXNzYWdlLmVkbnMgPSBzZWxmLnRvay5nZXRfaW50KCkKKyAgICAgICAgICAgIHNlbGYubWVzc2Fn
ZS5lZG5zZmxhZ3MgPSBzZWxmLm1lc3NhZ2UuZWRuc2ZsYWdzIHwgXAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1lc3NhZ2UuZWRucyA8PCAxNikKKyAgICAgICAg
ZWxpZiB3aGF0ID09ICdlZmxhZ3MnOgorICAgICAgICAgICAgaWYgc2VsZi5tZXNzYWdlLmVkbnMg
PCAwOgorICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZS5lZG5zID0gMAorICAgICAgICAgICAg
d2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0b2tlbiA9IHNlbGYudG9rLmdldCgpCisgICAg
ICAgICAgICAgICAgaWYgbm90IHRva2VuLmlzX2lkZW50aWZpZXIoKToKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi50b2sudW5nZXQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlLmVkbnNmbGFncyA9IHNlbGYubWVzc2FnZS5lZG5z
ZmxhZ3MgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbnMuZmxhZ3MuZWRuc19m
cm9tX3RleHQodG9rZW4udmFsdWUpCisgICAgICAgIGVsaWYgd2hhdCA9PSAncGF5bG9hZCc6Cisg
ICAgICAgICAgICBzZWxmLm1lc3NhZ2UucGF5bG9hZCA9IHNlbGYudG9rLmdldF9pbnQoKQorICAg
ICAgICAgICAgaWYgc2VsZi5tZXNzYWdlLmVkbnMgPCAwOgorICAgICAgICAgICAgICAgIHNlbGYu
bWVzc2FnZS5lZG5zID0gMAorICAgICAgICBlbGlmIHdoYXQgPT0gJ29wY29kZSc6CisgICAgICAg
ICAgICB0ZXh0ID0gc2VsZi50b2suZ2V0X3N0cmluZygpCisgICAgICAgICAgICBzZWxmLm1lc3Nh
Z2UuZmxhZ3MgPSBzZWxmLm1lc3NhZ2UuZmxhZ3MgfCBcCisgICAgICAgICAgICAgICAgICAgICAg
ZG5zLm9wY29kZS50b19mbGFncyhkbnMub3Bjb2RlLmZyb21fdGV4dCh0ZXh0KSkKKyAgICAgICAg
ZWxpZiB3aGF0ID09ICdyY29kZSc6CisgICAgICAgICAgICB0ZXh0ID0gc2VsZi50b2suZ2V0X3N0
cmluZygpCisgICAgICAgICAgICBzZWxmLm1lc3NhZ2Uuc2V0X3Jjb2RlKGRucy5yY29kZS5mcm9t
X3RleHQodGV4dCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBVbmtub3duSGVh
ZGVyRmllbGQKKyAgICAgICAgc2VsZi50b2suZ2V0X2VvbCgpCisKKyAgICBkZWYgX3F1ZXN0aW9u
X2xpbmUoc2VsZiwgc2VjdGlvbik6CisgICAgICAgICIiIlByb2Nlc3Mgb25lIGxpbmUgZnJvbSB0
aGUgdGV4dCBmb3JtYXQgcXVlc3Rpb24gc2VjdGlvbi4iIiIKKworICAgICAgICB0b2tlbiA9IHNl
bGYudG9rLmdldCh3YW50X2xlYWRpbmcgPSBUcnVlKQorICAgICAgICBpZiBub3QgdG9rZW4uaXNf
d2hpdGVzcGFjZSgpOgorICAgICAgICAgICAgc2VsZi5sYXN0X25hbWUgPSBkbnMubmFtZS5mcm9t
X3RleHQodG9rZW4udmFsdWUsIE5vbmUpCisgICAgICAgIG5hbWUgPSBzZWxmLmxhc3RfbmFtZQor
ICAgICAgICB0b2tlbiA9IHNlbGYudG9rLmdldCgpCisgICAgICAgIGlmIG5vdCB0b2tlbi5pc19p
ZGVudGlmaWVyKCk6CisgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9y
CisgICAgICAgICMgQ2xhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmRjbGFzcyA9IGRu
cy5yZGF0YWNsYXNzLmZyb21fdGV4dCh0b2tlbi52YWx1ZSkKKyAgICAgICAgICAgIHRva2VuID0g
c2VsZi50b2suZ2V0KCkKKyAgICAgICAgICAgIGlmIG5vdCB0b2tlbi5pc19pZGVudGlmaWVyKCk6
CisgICAgICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcgorICAgICAg
ICBleGNlcHQgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGRu
cy5leGNlcHRpb24uU3ludGF4RXJyb3IKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmRj
bGFzcyA9IGRucy5yZGF0YWNsYXNzLklOCisgICAgICAgICMgVHlwZQorICAgICAgICByZHR5cGUg
PSBkbnMucmRhdGF0eXBlLmZyb21fdGV4dCh0b2tlbi52YWx1ZSkKKyAgICAgICAgc2VsZi5tZXNz
YWdlLmZpbmRfcnJzZXQoc2VsZi5tZXNzYWdlLnF1ZXN0aW9uLCBuYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZGNsYXNzLCByZHR5cGUsIGNyZWF0ZT1UcnVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV91bmlxdWU9VHJ1ZSkKKyAgICAgICAgaWYg
c2VsZi51cGRhdGluZzoKKyAgICAgICAgICAgIHNlbGYuem9uZV9yZGNsYXNzID0gcmRjbGFzcwor
ICAgICAgICBzZWxmLnRvay5nZXRfZW9sKCkKKworICAgIGRlZiBfcnJfbGluZShzZWxmLCBzZWN0
aW9uKToKKyAgICAgICAgIiIiUHJvY2VzcyBvbmUgbGluZSBmcm9tIHRoZSB0ZXh0IGZvcm1hdCBh
bnN3ZXIsIGF1dGhvcml0eSwgb3IKKyAgICAgICAgYWRkaXRpb25hbCBkYXRhIHNlY3Rpb25zLgor
ICAgICAgICAiIiIKKworICAgICAgICBkZWxldGluZyA9IE5vbmUKKyAgICAgICAgIyBOYW1lCisg
ICAgICAgIHRva2VuID0gc2VsZi50b2suZ2V0KHdhbnRfbGVhZGluZyA9IFRydWUpCisgICAgICAg
IGlmIG5vdCB0b2tlbi5pc193aGl0ZXNwYWNlKCk6CisgICAgICAgICAgICBzZWxmLmxhc3RfbmFt
ZSA9IGRucy5uYW1lLmZyb21fdGV4dCh0b2tlbi52YWx1ZSwgTm9uZSkKKyAgICAgICAgbmFtZSA9
IHNlbGYubGFzdF9uYW1lCisgICAgICAgIHRva2VuID0gc2VsZi50b2suZ2V0KCkKKyAgICAgICAg
aWYgbm90IHRva2VuLmlzX2lkZW50aWZpZXIoKToKKyAgICAgICAgICAgIHJhaXNlIGRucy5leGNl
cHRpb24uU3ludGF4RXJyb3IKKyAgICAgICAgIyBUVEwKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgdHRsID0gaW50KHRva2VuLnZhbHVlLCAwKQorICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnRv
ay5nZXQoKQorICAgICAgICAgICAgaWYgbm90IHRva2VuLmlzX2lkZW50aWZpZXIoKToKKyAgICAg
ICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yCisgICAgICAgIGV4Y2Vw
dCBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yOgorICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2Vw
dGlvbi5TeW50YXhFcnJvcgorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICB0dGwgPSAwCisg
ICAgICAgICMgQ2xhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmRjbGFzcyA9IGRucy5y
ZGF0YWNsYXNzLmZyb21fdGV4dCh0b2tlbi52YWx1ZSkKKyAgICAgICAgICAgIHRva2VuID0gc2Vs
Zi50b2suZ2V0KCkKKyAgICAgICAgICAgIGlmIG5vdCB0b2tlbi5pc19pZGVudGlmaWVyKCk6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcgorICAgICAgICAg
ICAgaWYgcmRjbGFzcyA9PSBkbnMucmRhdGFjbGFzcy5BTlkgb3IgcmRjbGFzcyA9PSBkbnMucmRh
dGFjbGFzcy5OT05FOgorICAgICAgICAgICAgICAgIGRlbGV0aW5nID0gcmRjbGFzcworICAgICAg
ICAgICAgICAgIHJkY2xhc3MgPSBzZWxmLnpvbmVfcmRjbGFzcworICAgICAgICBleGNlcHQgZG5z
LmV4Y2VwdGlvbi5TeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24u
U3ludGF4RXJyb3IKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmRjbGFzcyA9IGRucy5y
ZGF0YWNsYXNzLklOCisgICAgICAgICMgVHlwZQorICAgICAgICByZHR5cGUgPSBkbnMucmRhdGF0
eXBlLmZyb21fdGV4dCh0b2tlbi52YWx1ZSkKKyAgICAgICAgdG9rZW4gPSBzZWxmLnRvay5nZXQo
KQorICAgICAgICBpZiBub3QgdG9rZW4uaXNfZW9sX29yX2VvZigpOgorICAgICAgICAgICAgc2Vs
Zi50b2sudW5nZXQodG9rZW4pCisgICAgICAgICAgICByZCA9IGRucy5yZGF0YS5mcm9tX3RleHQo
cmRjbGFzcywgcmR0eXBlLCBzZWxmLnRvaywgTm9uZSkKKyAgICAgICAgICAgIGNvdmVycyA9IHJk
LmNvdmVycygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZCA9IE5vbmUKKyAgICAgICAg
ICAgIGNvdmVycyA9IGRucy5yZGF0YXR5cGUuTk9ORQorICAgICAgICBycnNldCA9IHNlbGYubWVz
c2FnZS5maW5kX3Jyc2V0KHNlY3Rpb24sIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmRjbGFzcywgcmR0eXBlLCBjb3ZlcnMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRpbmcsIFRydWUsIHNlbGYudXBkYXRpbmcpCisg
ICAgICAgIGlmIG5vdCByZCBpcyBOb25lOgorICAgICAgICAgICAgcnJzZXQuYWRkKHJkLCB0dGwp
CisKKyAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgIiIiUmVhZCBhIHRleHQgZm9ybWF0IERO
UyBtZXNzYWdlIGFuZCBidWlsZCBhIGRucy5tZXNzYWdlLk1lc3NhZ2UKKyAgICAgICAgb2JqZWN0
LiIiIgorCisgICAgICAgIGxpbmVfbWV0aG9kID0gc2VsZi5faGVhZGVyX2xpbmUKKyAgICAgICAg
c2VjdGlvbiA9IE5vbmUKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRva2VuID0gc2Vs
Zi50b2suZ2V0KFRydWUsIFRydWUpCisgICAgICAgICAgICBpZiB0b2tlbi5pc19lb2xfb3JfZW9m
KCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHRva2VuLmlzX2NvbW1l
bnQoKToKKyAgICAgICAgICAgICAgICB1ID0gdG9rZW4udmFsdWUudXBwZXIoKQorICAgICAgICAg
ICAgICAgIGlmIHUgPT0gJ0hFQURFUic6CisgICAgICAgICAgICAgICAgICAgIGxpbmVfbWV0aG9k
ID0gc2VsZi5faGVhZGVyX2xpbmUKKyAgICAgICAgICAgICAgICBlbGlmIHUgPT0gJ1FVRVNUSU9O
JyBvciB1ID09ICdaT05FJzoKKyAgICAgICAgICAgICAgICAgICAgbGluZV9tZXRob2QgPSBzZWxm
Ll9xdWVzdGlvbl9saW5lCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gPSBzZWxmLm1lc3Nh
Z2UucXVlc3Rpb24KKyAgICAgICAgICAgICAgICBlbGlmIHUgPT0gJ0FOU1dFUicgb3IgdSA9PSAn
UFJFUkVRJzoKKyAgICAgICAgICAgICAgICAgICAgbGluZV9tZXRob2QgPSBzZWxmLl9ycl9saW5l
CisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gPSBzZWxmLm1lc3NhZ2UuYW5zd2VyCisgICAg
ICAgICAgICAgICAgZWxpZiB1ID09ICdBVVRIT1JJVFknIG9yIHUgPT0gJ1VQREFURSc6CisgICAg
ICAgICAgICAgICAgICAgIGxpbmVfbWV0aG9kID0gc2VsZi5fcnJfbGluZQorICAgICAgICAgICAg
ICAgICAgICBzZWN0aW9uID0gc2VsZi5tZXNzYWdlLmF1dGhvcml0eQorICAgICAgICAgICAgICAg
IGVsaWYgdSA9PSAnQURESVRJT05BTCc6CisgICAgICAgICAgICAgICAgICAgIGxpbmVfbWV0aG9k
ID0gc2VsZi5fcnJfbGluZQorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uID0gc2VsZi5tZXNz
YWdlLmFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICBzZWxmLnRvay5nZXRfZW9sKCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi50b2sudW5nZXQodG9rZW4pCisg
ICAgICAgICAgICBsaW5lX21ldGhvZChzZWN0aW9uKQorCisKK2RlZiBmcm9tX3RleHQodGV4dCk6
CisgICAgIiIiQ29udmVydCB0aGUgdGV4dCBmb3JtYXQgbWVzc2FnZSBpbnRvIGEgbWVzc2FnZSBv
YmplY3QuCisKKyAgICBAcGFyYW0gdGV4dDogVGhlIHRleHQgZm9ybWF0IG1lc3NhZ2UuCisgICAg
QHR5cGUgdGV4dDogc3RyaW5nCisgICAgQHJhaXNlcyBVbmtub3duSGVhZGVyRmllbGQ6CisgICAg
QHJhaXNlcyBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yOgorICAgIEBydHlwZTogZG5zLm1lc3Nh
Z2UuTWVzc2FnZSBvYmplY3QiIiIKKworICAgICMgJ3RleHQnIGNhbiBhbHNvIGJlIGEgZmlsZSwg
YnV0IHdlIGRvbid0IHB1Ymxpc2ggdGhhdCBmYWN0CisgICAgIyBzaW5jZSBpdCdzIGFuIGltcGxl
bWVudGF0aW9uIGRldGFpbC4gIFRoZSBvZmZpY2lhbCBmaWxlCisgICAgIyBpbnRlcmZhY2UgaXMg
ZnJvbV9maWxlKCkuCisKKyAgICBtID0gTWVzc2FnZSgpCisKKyAgICByZWFkZXIgPSBfVGV4dFJl
YWRlcih0ZXh0LCBtKQorICAgIHJlYWRlci5yZWFkKCkKKworICAgIHJldHVybiBtCisKK2RlZiBm
cm9tX2ZpbGUoZik6CisgICAgIiIiUmVhZCB0aGUgbmV4dCB0ZXh0IGZvcm1hdCBtZXNzYWdlIGZy
b20gdGhlIHNwZWNpZmllZCBmaWxlLgorCisgICAgQHBhcmFtIGY6IGZpbGUgb3Igc3RyaW5nLiAg
SWYgSXtmfSBpcyBhIHN0cmluZywgaXQgaXMgdHJlYXRlZAorICAgIGFzIHRoZSBuYW1lIG9mIGEg
ZmlsZSB0byBvcGVuLgorICAgIEByYWlzZXMgVW5rbm93bkhlYWRlckZpZWxkOgorICAgIEByYWlz
ZXMgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcjoKKyAgICBAcnR5cGU6IGRucy5tZXNzYWdlLk1l
c3NhZ2Ugb2JqZWN0IiIiCisKKyAgICBpZiBzeXMuaGV4dmVyc2lvbiA+PSAweDAyMDMwMDAwOgor
ICAgICAgICAjIGFsbG93IFVuaWNvZGUgZmlsZW5hbWVzOyB0dXJuIG9uIHVuaXZlcnNhbCBuZXds
aW5lIHN1cHBvcnQKKyAgICAgICAgc3RyX3R5cGUgPSBiYXNlc3RyaW5nCisgICAgICAgIG9wdHMg
PSAnclUnCisgICAgZWxzZToKKyAgICAgICAgc3RyX3R5cGUgPSBzdHIKKyAgICAgICAgb3B0cyA9
ICdyJworICAgIGlmIGlzaW5zdGFuY2UoZiwgc3RyX3R5cGUpOgorICAgICAgICBmID0gZmlsZShm
LCBvcHRzKQorICAgICAgICB3YW50X2Nsb3NlID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHdh
bnRfY2xvc2UgPSBGYWxzZQorCisgICAgdHJ5OgorICAgICAgICBtID0gZnJvbV90ZXh0KGYpCisg
ICAgZmluYWxseToKKyAgICAgICAgaWYgd2FudF9jbG9zZToKKyAgICAgICAgICAgIGYuY2xvc2Uo
KQorICAgIHJldHVybiBtCisKK2RlZiBtYWtlX3F1ZXJ5KHFuYW1lLCByZHR5cGUsIHJkY2xhc3Mg
PSBkbnMucmRhdGFjbGFzcy5JTiwgdXNlX2VkbnM9Tm9uZSwKKyAgICAgICAgICAgICAgIHdhbnRf
ZG5zc2VjPUZhbHNlKToKKyAgICAiIiJNYWtlIGEgcXVlcnkgbWVzc2FnZS4KKworICAgIFRoZSBx
dWVyeSBuYW1lLCB0eXBlLCBhbmQgY2xhc3MgbWF5IGFsbCBiZSBzcGVjaWZpZWQgZWl0aGVyCisg
ICAgYXMgb2JqZWN0cyBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZSwgb3IgYXMgc3RyaW5ncy4KKwor
ICAgIFRoZSBxdWVyeSB3aWxsIGhhdmUgYSByYW5kb21seSBjaG9vc2VuIHF1ZXJ5IGlkLCBhbmQg
aXRzIEROUyBmbGFncworICAgIHdpbGwgYmUgc2V0IHRvIGRucy5mbGFncy5SRC4KKworICAgIEBw
YXJhbSBxbmFtZTogVGhlIHF1ZXJ5IG5hbWUuCisgICAgQHR5cGUgcW5hbWU6IGRucy5uYW1lLk5h
bWUgb2JqZWN0IG9yIHN0cmluZworICAgIEBwYXJhbSByZHR5cGU6IFRoZSBkZXNpcmVkIHJkYXRh
IHR5cGUuCisgICAgQHR5cGUgcmR0eXBlOiBpbnQKKyAgICBAcGFyYW0gcmRjbGFzczogVGhlIGRl
c2lyZWQgcmRhdGEgY2xhc3M7IHRoZSBkZWZhdWx0IGlzIGNsYXNzIElOLgorICAgIEB0eXBlIHJk
Y2xhc3M6IGludAorICAgIEBwYXJhbSB1c2VfZWRuczogVGhlIEVETlMgbGV2ZWwgdG8gdXNlOyB0
aGUgZGVmYXVsdCBpcyBOb25lIChubyBFRE5TKS4KKyAgICBTZWUgdGhlIGRlc2NyaXB0aW9uIG9m
IGRucy5tZXNzYWdlLk1lc3NhZ2UudXNlX2VkbnMoKSBmb3IgdGhlIHBvc3NpYmxlCisgICAgdmFs
dWVzIGZvciB1c2VfZWRucyBhbmQgdGhlaXIgbWVhbmluZ3MuCisgICAgQHR5cGUgdXNlX2VkbnM6
IGludCBvciBib29sIG9yIE5vbmUKKyAgICBAcGFyYW0gd2FudF9kbnNzZWM6IFNob3VsZCB0aGUg
cXVlcnkgaW5kaWNhdGUgdGhhdCBETlNTRUMgaXMgZGVzaXJlZD8KKyAgICBAdHlwZSB3YW50X2Ru
c3NlYzogYm9vbAorICAgIEBydHlwZTogZG5zLm1lc3NhZ2UuTWVzc2FnZSBvYmplY3QiIiIKKwor
ICAgIGlmIGlzaW5zdGFuY2UocW5hbWUsIChzdHIsIHVuaWNvZGUpKToKKyAgICAgICAgcW5hbWUg
PSBkbnMubmFtZS5mcm9tX3RleHQocW5hbWUpCisgICAgaWYgaXNpbnN0YW5jZShyZHR5cGUsIHN0
cik6CisgICAgICAgIHJkdHlwZSA9IGRucy5yZGF0YXR5cGUuZnJvbV90ZXh0KHJkdHlwZSkKKyAg
ICBpZiBpc2luc3RhbmNlKHJkY2xhc3MsIHN0cik6CisgICAgICAgIHJkY2xhc3MgPSBkbnMucmRh
dGFjbGFzcy5mcm9tX3RleHQocmRjbGFzcykKKyAgICBtID0gTWVzc2FnZSgpCisgICAgbS5mbGFn
cyB8PSBkbnMuZmxhZ3MuUkQKKyAgICBtLmZpbmRfcnJzZXQobS5xdWVzdGlvbiwgcW5hbWUsIHJk
Y2xhc3MsIHJkdHlwZSwgY3JlYXRlPVRydWUsCisgICAgICAgICAgICAgICAgIGZvcmNlX3VuaXF1
ZT1UcnVlKQorICAgIG0udXNlX2VkbnModXNlX2VkbnMpCisgICAgbS53YW50X2Ruc3NlYyh3YW50
X2Ruc3NlYykKKyAgICByZXR1cm4gbQorCitkZWYgbWFrZV9yZXNwb25zZShxdWVyeSwgcmVjdXJz
aW9uX2F2YWlsYWJsZT1GYWxzZSwgb3VyX3BheWxvYWQ9ODE5Mik6CisgICAgIiIiTWFrZSBhIG1l
c3NhZ2Ugd2hpY2ggaXMgYSByZXNwb25zZSBmb3IgdGhlIHNwZWNpZmllZCBxdWVyeS4KKyAgICBU
aGUgbWVzc2FnZSByZXR1cm5lZCBpcyByZWFsbHkgYSByZXNwb25zZSBza2VsZXRvbjsgaXQgaGFz
IGFsbAorICAgIG9mIHRoZSBpbmZyYXN0cnVjdHVyZSByZXF1aXJlZCBvZiBhIHJlc3BvbnNlLCBi
dXQgbm9uZSBvZiB0aGUKKyAgICBjb250ZW50LgorCisgICAgVGhlIHJlc3BvbnNlJ3MgcXVlc3Rp
b24gc2VjdGlvbiBpcyBhIHNoYWxsb3cgY29weSBvZiB0aGUgcXVlcnkncworICAgIHF1ZXN0aW9u
IHNlY3Rpb24sIHNvIHRoZSBxdWVyeSdzIHF1ZXN0aW9uIFJSc2V0cyBzaG91bGQgbm90IGJlCisg
ICAgY2hhbmdlZC4KKworICAgIEBwYXJhbSBxdWVyeTogdGhlIHF1ZXJ5IHRvIHJlc3BvbmQgdG8K
KyAgICBAdHlwZSBxdWVyeTogZG5zLm1lc3NhZ2UuTWVzc2FnZSBvYmplY3QKKyAgICBAcGFyYW0g
cmVjdXJzaW9uX2F2YWlsYWJsZTogc2hvdWxkIFJBIGJlIHNldCBpbiB0aGUgcmVzcG9uc2U/Cisg
ICAgQHR5cGUgcmVjdXJzaW9uX2F2YWlsYWJsZTogYm9vbAorICAgIEBwYXJhbSBvdXJfcGF5bG9h
ZDogcGF5bG9hZCBzaXplIHRvIGFkdmVydGlzZSBpbiBFRE5TIHJlc3BvbnNlczsgZGVmYXVsdAor
ICAgIGlzIDgxOTIuCisgICAgQHR5cGUgb3VyX3BheWxvYWQ6IGludAorICAgIEBydHlwZTogZG5z
Lm1lc3NhZ2UuTWVzc2FnZSBvYmplY3QiIiIKKworICAgIGlmIHF1ZXJ5LmZsYWdzICYgZG5zLmZs
YWdzLlFSOgorICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcignc3BlY2lmaWVk
IHF1ZXJ5IG1lc3NhZ2UgaXMgbm90IGEgcXVlcnknKQorICAgIHJlc3BvbnNlID0gZG5zLm1lc3Nh
Z2UuTWVzc2FnZShxdWVyeS5pZCkKKyAgICByZXNwb25zZS5mbGFncyA9IGRucy5mbGFncy5RUiB8
IChxdWVyeS5mbGFncyAmIGRucy5mbGFncy5SRCkKKyAgICBpZiByZWN1cnNpb25fYXZhaWxhYmxl
OgorICAgICAgICByZXNwb25zZS5mbGFncyB8PSBkbnMuZmxhZ3MuUkEKKyAgICByZXNwb25zZS5z
ZXRfb3Bjb2RlKHF1ZXJ5Lm9wY29kZSgpKQorICAgIHJlc3BvbnNlLnF1ZXN0aW9uID0gbGlzdChx
dWVyeS5xdWVzdGlvbikKKyAgICBpZiBxdWVyeS5lZG5zID49IDA6CisgICAgICAgIHJlc3BvbnNl
LnVzZV9lZG5zKDAsIDAsIG91cl9wYXlsb2FkLCBxdWVyeS5wYXlsb2FkKQorICAgIGlmIG5vdCBx
dWVyeS5rZXluYW1lIGlzIE5vbmU6CisgICAgICAgIHJlc3BvbnNlLmtleW5hbWUgPSBxdWVyeS5r
ZXluYW1lCisgICAgICAgIHJlc3BvbnNlLmtleXJpbmcgPSBxdWVyeS5rZXlyaW5nCisgICAgICAg
IHJlc3BvbnNlLnJlcXVlc3RfbWFjID0gcXVlcnkubWFjCisgICAgcmV0dXJuIHJlc3BvbnNlCklu
ZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9uYW1lLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL25hbWUucHkJKHJldmlz
aW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9uYW1lLnB5CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNywg
MjAwOSwgMjAxMCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBt
b2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0
aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVk
LAorIyBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl
cm1pc3Npb24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdB
UkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJ
RVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQg
V0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5U
IFNIQUxMIE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJ
UkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VW
RVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJ
TiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMg
QUNUSU9OLCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBP
UiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCisiIiJETlMgTmFtZXMuCisKK0B2YXIg
cm9vdDogVGhlIEROUyByb290IG5hbWUuCitAdHlwZSByb290OiBkbnMubmFtZS5OYW1lIG9iamVj
dAorQHZhciBlbXB0eTogVGhlIGVtcHR5IEROUyBuYW1lLgorQHR5cGUgZW1wdHk6IGRucy5uYW1l
Lk5hbWUgb2JqZWN0CisiIiIKKworaW1wb3J0IGNTdHJpbmdJTworaW1wb3J0IHN0cnVjdAoraW1w
b3J0IHN5cworCitpZiBzeXMuaGV4dmVyc2lvbiA+PSAweDAyMDMwMDAwOgorICAgIGltcG9ydCBl
bmNvZGluZ3MuaWRuYQorCitpbXBvcnQgZG5zLmV4Y2VwdGlvbgorCitOQU1FUkVMTl9OT05FID0g
MAorTkFNRVJFTE5fU1VQRVJET01BSU4gPSAxCitOQU1FUkVMTl9TVUJET01BSU4gPSAyCitOQU1F
UkVMTl9FUVVBTCA9IDMKK05BTUVSRUxOX0NPTU1PTkFOQ0VTVE9SID0gNAorCitjbGFzcyBFbXB0
eUxhYmVsKGRucy5leGNlcHRpb24uU3ludGF4RXJyb3IpOgorICAgICIiIlJhaXNlZCBpZiBhIGxh
YmVsIGlzIGVtcHR5LiIiIgorICAgIHBhc3MKKworY2xhc3MgQmFkRXNjYXBlKGRucy5leGNlcHRp
b24uU3ludGF4RXJyb3IpOgorICAgICIiIlJhaXNlZCBpZiBhbiBlc2NhcGVkIGNvZGUgaW4gYSB0
ZXh0IGZvcm1hdCBuYW1lIGlzIGludmFsaWQuIiIiCisgICAgcGFzcworCitjbGFzcyBCYWRQb2lu
dGVyKGRucy5leGNlcHRpb24uRm9ybUVycm9yKToKKyAgICAiIiJSYWlzZWQgaWYgYSBjb21wcmVz
c2lvbiBwb2ludGVyIHBvaW50cyBmb3J3YXJkIGluc3RlYWQgb2YgYmFja3dhcmQuIiIiCisgICAg
cGFzcworCitjbGFzcyBCYWRMYWJlbFR5cGUoZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IpOgorICAg
ICIiIlJhaXNlZCBpZiB0aGUgbGFiZWwgdHlwZSBvZiBhIHdpcmUgZm9ybWF0IG5hbWUgaXMgdW5r
bm93bi4iIiIKKyAgICBwYXNzCisKK2NsYXNzIE5lZWRBYnNvbHV0ZU5hbWVPck9yaWdpbihkbnMu
ZXhjZXB0aW9uLkROU0V4Y2VwdGlvbik6CisgICAgIiIiUmFpc2VkIGlmIGFuIGF0dGVtcHQgaXMg
bWFkZSB0byBjb252ZXJ0IGEgbm9uLWFic29sdXRlIG5hbWUgdG8KKyAgICB3aXJlIHdoZW4gdGhl
cmUgaXMgYWxzbyBhIG5vbi1hYnNvbHV0ZSAob3IgbWlzc2luZykgb3JpZ2luLiIiIgorICAgIHBh
c3MKKworY2xhc3MgTmFtZVRvb0xvbmcoZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IpOgorICAgICIi
IlJhaXNlZCBpZiBhIG5hbWUgaXMgPiAyNTUgb2N0ZXRzIGxvbmcuIiIiCisgICAgcGFzcworCitj
bGFzcyBMYWJlbFRvb0xvbmcoZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcik6CisgICAgIiIiUmFp
c2VkIGlmIGEgbGFiZWwgaXMgPiA2MyBvY3RldHMgbG9uZy4iIiIKKyAgICBwYXNzCisKK2NsYXNz
IEFic29sdXRlQ29uY2F0ZW5hdGlvbihkbnMuZXhjZXB0aW9uLkROU0V4Y2VwdGlvbik6CisgICAg
IiIiUmFpc2VkIGlmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhcHBlbmQgYW55dGhpbmcgb3RoZXIg
dGhhbiB0aGUKKyAgICBlbXB0eSBuYW1lIHRvIGFuIGFic29sdXRlIG5hbWUuIiIiCisgICAgcGFz
cworCitjbGFzcyBOb1BhcmVudChkbnMuZXhjZXB0aW9uLkROU0V4Y2VwdGlvbik6CisgICAgIiIi
UmFpc2VkIGlmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBnZXQgdGhlIHBhcmVudCBvZiB0aGUgcm9v
dCBuYW1lCisgICAgb3IgdGhlIGVtcHR5IG5hbWUuIiIiCisgICAgcGFzcworCitfZXNjYXBlZCA9
IHsKKyAgICAnIicgOiBUcnVlLAorICAgICcoJyA6IFRydWUsCisgICAgJyknIDogVHJ1ZSwKKyAg
ICAnLicgOiBUcnVlLAorICAgICc7JyA6IFRydWUsCisgICAgJ1xcJyA6IFRydWUsCisgICAgJ0An
IDogVHJ1ZSwKKyAgICAnJCcgOiBUcnVlCisgICAgfQorCitkZWYgX2VzY2FwaWZ5KGxhYmVsKToK
KyAgICAiIiJFc2NhcGUgdGhlIGNoYXJhY3RlcnMgaW4gbGFiZWwgd2hpY2ggbmVlZCBpdC4KKyAg
ICBAcmV0dXJuczogdGhlIGVzY2FwZWQgc3RyaW5nCisgICAgQHJ0eXBlOiBzdHJpbmciIiIKKyAg
ICB0ZXh0ID0gJycKKyAgICBmb3IgYyBpbiBsYWJlbDoKKyAgICAgICAgaWYgYyBpbiBfZXNjYXBl
ZDoKKyAgICAgICAgICAgIHRleHQgKz0gJ1xcJyArIGMKKyAgICAgICAgZWxpZiBvcmQoYykgPiAw
eDIwIGFuZCBvcmQoYykgPCAweDdGOgorICAgICAgICAgICAgdGV4dCArPSBjCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICB0ZXh0ICs9ICdcXCUwM2QnICUgb3JkKGMpCisgICAgcmV0dXJuIHRl
eHQKKworZGVmIF92YWxpZGF0ZV9sYWJlbHMobGFiZWxzKToKKyAgICAiIiJDaGVjayBmb3IgZW1w
dHkgbGFiZWxzIGluIHRoZSBtaWRkbGUgb2YgYSBsYWJlbCBzZXF1ZW5jZSwKKyAgICBsYWJlbHMg
dGhhdCBhcmUgdG9vIGxvbmcsIGFuZCBmb3IgdG9vIG1hbnkgbGFiZWxzLgorICAgIEByYWlzZXMg
TmFtZVRvb0xvbmc6IHRoZSBuYW1lIGFzIGEgd2hvbGUgaXMgdG9vIGxvbmcKKyAgICBAcmFpc2Vz
IExhYmVsVG9vTG9uZzogYW4gaW5kaXZpZHVhbCBsYWJlbCBpcyB0b28gbG9uZworICAgIEByYWlz
ZXMgRW1wdHlMYWJlbDogYSBsYWJlbCBpcyBlbXB0eSAoaS5lLiB0aGUgcm9vdCBsYWJlbCkgYW5k
IGFwcGVhcnMKKyAgICBpbiBhIHBvc2l0aW9uIG90aGVyIHRoYW4gdGhlIGVuZCBvZiB0aGUgbGFi
ZWwgc2VxdWVuY2UiIiIKKworICAgIGwgPSBsZW4obGFiZWxzKQorICAgIHRvdGFsID0gMAorICAg
IGkgPSAtMQorICAgIGogPSAwCisgICAgZm9yIGxhYmVsIGluIGxhYmVsczoKKyAgICAgICAgbGwg
PSBsZW4obGFiZWwpCisgICAgICAgIHRvdGFsICs9IGxsICsgMQorICAgICAgICBpZiBsbCA+IDYz
OgorICAgICAgICAgICAgcmFpc2UgTGFiZWxUb29Mb25nCisgICAgICAgIGlmIGkgPCAwIGFuZCBs
YWJlbCA9PSAnJzoKKyAgICAgICAgICAgIGkgPSBqCisgICAgICAgIGogKz0gMQorICAgIGlmIHRv
dGFsID4gMjU1OgorICAgICAgICByYWlzZSBOYW1lVG9vTG9uZworICAgIGlmIGkgPj0gMCBhbmQg
aSAhPSBsIC0gMToKKyAgICAgICAgcmFpc2UgRW1wdHlMYWJlbAorCitjbGFzcyBOYW1lKG9iamVj
dCk6CisgICAgIiIiQSBETlMgbmFtZS4KKworICAgIFRoZSBkbnMubmFtZS5OYW1lIGNsYXNzIHJl
cHJlc2VudHMgYSBETlMgbmFtZSBhcyBhIHR1cGxlIG9mIGxhYmVscy4KKyAgICBJbnN0YW5jZXMg
b2YgdGhlIGNsYXNzIGFyZSBpbW11dGFibGUuCisKKyAgICBAaXZhciBsYWJlbHM6IFRoZSB0dXBs
ZSBvZiBsYWJlbHMgaW4gdGhlIG5hbWUuIEVhY2ggbGFiZWwgaXMgYSBzdHJpbmcgb2YKKyAgICB1
cCB0byA2MyBvY3RldHMuIiIiCisKKyAgICBfX3Nsb3RzX18gPSBbJ2xhYmVscyddCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgbGFiZWxzKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBhIGRvbWFp
biBuYW1lIGZyb20gYSBsaXN0IG9mIGxhYmVscy4KKyAgICAgICAgQHBhcmFtIGxhYmVsczogdGhl
IGxhYmVscworICAgICAgICBAdHlwZSBsYWJlbHM6IGFueSBpdGVyYWJsZSB3aG9zZSB2YWx1ZXMg
YXJlIHN0cmluZ3MKKyAgICAgICAgIiIiCisKKyAgICAgICAgc3VwZXIoTmFtZSwgc2VsZikuX19z
ZXRhdHRyX18oJ2xhYmVscycsIHR1cGxlKGxhYmVscykpCisgICAgICAgIF92YWxpZGF0ZV9sYWJl
bHMoc2VsZi5sYWJlbHMpCisKKyAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUp
OgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm9iamVjdCBkb2Vzbid0IHN1cHBvcnQgYXR0cmli
dXRlIGFzc2lnbm1lbnQiKQorCisgICAgZGVmIGlzX2Fic29sdXRlKHNlbGYpOgorICAgICAgICAi
IiJJcyB0aGUgbW9zdCBzaWduaWZpY2FudCBsYWJlbCBvZiB0aGlzIG5hbWUgdGhlIHJvb3QgbGFi
ZWw/CisgICAgICAgIEBydHlwZTogYm9vbAorICAgICAgICAiIiIKKworICAgICAgICByZXR1cm4g
bGVuKHNlbGYubGFiZWxzKSA+IDAgYW5kIHNlbGYubGFiZWxzWy0xXSA9PSAnJworCisgICAgZGVm
IGlzX3dpbGQoc2VsZik6CisgICAgICAgICIiIklzIHRoaXMgbmFtZSB3aWxkPyAgKEkuZS4gSXMg
dGhlIGxlYXN0IHNpZ25pZmljYW50IGxhYmVsICcqJz8pCisgICAgICAgIEBydHlwZTogYm9vbAor
ICAgICAgICAiIiIKKworICAgICAgICByZXR1cm4gbGVuKHNlbGYubGFiZWxzKSA+IDAgYW5kIHNl
bGYubGFiZWxzWzBdID09ICcqJworCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAi
IiJSZXR1cm4gYSBjYXNlLWluc2Vuc2l0aXZlIGhhc2ggb2YgdGhlIG5hbWUuCisgICAgICAgIEBy
dHlwZTogaW50CisgICAgICAgICIiIgorCisgICAgICAgIGggPSAwTAorICAgICAgICBmb3IgbGFi
ZWwgaW4gc2VsZi5sYWJlbHM6CisgICAgICAgICAgICBmb3IgYyBpbiBsYWJlbDoKKyAgICAgICAg
ICAgICAgICBoICs9ICggaCA8PCAzICkgKyBvcmQoYy5sb3dlcigpKQorICAgICAgICByZXR1cm4g
aW50KGggJSBzeXMubWF4aW50KQorCisgICAgZGVmIGZ1bGxjb21wYXJlKHNlbGYsIG90aGVyKToK
KyAgICAgICAgIiIiQ29tcGFyZSB0d28gbmFtZXMsIHJldHVybmluZyBhIDMtdHVwbGUgKHJlbGF0
aW9uLCBvcmRlciwgbmxhYmVscykuCisKKyAgICAgICAgSXtyZWxhdGlvbn0gZGVzY3JpYmVzIHRo
ZSByZWxhdGlvbiBzaGlwIGJld2VlbiB0aGUgbmFtZXMsCisgICAgICAgIGFuZCBpcyBvbmUgb2Y6
IGRucy5uYW1lLk5BTUVSRUxOX05PTkUsCisgICAgICAgIGRucy5uYW1lLk5BTUVSRUxOX1NVUEVS
RE9NQUlOLCBkbnMubmFtZS5OQU1FUkVMTl9TVUJET01BSU4sCisgICAgICAgIGRucy5uYW1lLk5B
TUVSRUxOX0VRVUFMLCBvciBkbnMubmFtZS5OQU1FUkVMTl9DT01NT05BTkNFU1RPUgorCisgICAg
ICAgIEl7b3JkZXJ9IGlzIDwgMCBpZiBzZWxmIDwgb3RoZXIsID4gMCBpZiBzZWxmID4gb3RoZXIs
IGFuZCA9PQorICAgICAgICAwIGlmIHNlbGYgPT0gb3RoZXIuICBBIHJlbGF0aXZlIG5hbWUgaXMg
YWx3YXlzIGxlc3MgdGhhbiBhbgorICAgICAgICBhYnNvbHV0ZSBuYW1lLiAgSWYgYm90aCBuYW1l
cyBoYXZlIHRoZSBzYW1lIHJlbGF0aXZpdHksIHRoZW4KKyAgICAgICAgdGhlIEROU1NFQyBvcmRl
ciByZWxhdGlvbiBpcyB1c2VkIHRvIG9yZGVyIHRoZW0uCisKKyAgICAgICAgSXtubGFiZWxzfSBp
cyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGxhYmVscyB0aGF0IHRoZSB0d28gbmFtZXMKKyAg
ICAgICAgaGF2ZSBpbiBjb21tb24uCisgICAgICAgICIiIgorCisgICAgICAgIHNhYnMgPSBzZWxm
LmlzX2Fic29sdXRlKCkKKyAgICAgICAgb2FicyA9IG90aGVyLmlzX2Fic29sdXRlKCkKKyAgICAg
ICAgaWYgc2FicyAhPSBvYWJzOgorICAgICAgICAgICAgaWYgc2FiczoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gKE5BTUVSRUxOX05PTkUsIDEsIDApCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHJldHVybiAoTkFNRVJFTE5fTk9ORSwgLTEsIDApCisgICAgICAgIGwxID0gbGVu
KHNlbGYubGFiZWxzKQorICAgICAgICBsMiA9IGxlbihvdGhlci5sYWJlbHMpCisgICAgICAgIGxk
aWZmID0gbDEgLSBsMgorICAgICAgICBpZiBsZGlmZiA8IDA6CisgICAgICAgICAgICBsID0gbDEK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGwgPSBsMgorCisgICAgICAgIG9yZGVyID0gMAor
ICAgICAgICBubGFiZWxzID0gMAorICAgICAgICBuYW1lcmVsbiA9IE5BTUVSRUxOX05PTkUKKyAg
ICAgICAgd2hpbGUgbCA+IDA6CisgICAgICAgICAgICBsIC09IDEKKyAgICAgICAgICAgIGwxIC09
IDEKKyAgICAgICAgICAgIGwyIC09IDEKKyAgICAgICAgICAgIGxhYmVsMSA9IHNlbGYubGFiZWxz
W2wxXS5sb3dlcigpCisgICAgICAgICAgICBsYWJlbDIgPSBvdGhlci5sYWJlbHNbbDJdLmxvd2Vy
KCkKKyAgICAgICAgICAgIGlmIGxhYmVsMSA8IGxhYmVsMjoKKyAgICAgICAgICAgICAgICBvcmRl
ciA9IC0xCisgICAgICAgICAgICAgICAgaWYgbmxhYmVscyA+IDA6CisgICAgICAgICAgICAgICAg
ICAgIG5hbWVyZWxuID0gTkFNRVJFTE5fQ09NTU9OQU5DRVNUT1IKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gKG5hbWVyZWxuLCBvcmRlciwgbmxhYmVscykKKyAgICAgICAgICAgIGVsaWYgbGFiZWwx
ID4gbGFiZWwyOgorICAgICAgICAgICAgICAgIG9yZGVyID0gMQorICAgICAgICAgICAgICAgIGlm
IG5sYWJlbHMgPiAwOgorICAgICAgICAgICAgICAgICAgICBuYW1lcmVsbiA9IE5BTUVSRUxOX0NP
TU1PTkFOQ0VTVE9SCisgICAgICAgICAgICAgICAgcmV0dXJuIChuYW1lcmVsbiwgb3JkZXIsIG5s
YWJlbHMpCisgICAgICAgICAgICBubGFiZWxzICs9IDEKKyAgICAgICAgb3JkZXIgPSBsZGlmZgor
ICAgICAgICBpZiBsZGlmZiA8IDA6CisgICAgICAgICAgICBuYW1lcmVsbiA9IE5BTUVSRUxOX1NV
UEVSRE9NQUlOCisgICAgICAgIGVsaWYgbGRpZmYgPiAwOgorICAgICAgICAgICAgbmFtZXJlbG4g
PSBOQU1FUkVMTl9TVUJET01BSU4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWVyZWxu
ID0gTkFNRVJFTE5fRVFVQUwKKyAgICAgICAgcmV0dXJuIChuYW1lcmVsbiwgb3JkZXIsIG5sYWJl
bHMpCisKKyAgICBkZWYgaXNfc3ViZG9tYWluKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiSXMg
c2VsZiBhIHN1YmRvbWFpbiBvZiBvdGhlcj8KKworICAgICAgICBUaGUgbm90aW9uIG9mIHN1YmRv
bWFpbiBpbmNsdWRlcyBlcXVhbGl0eS4KKyAgICAgICAgQHJ0eXBlOiBib29sCisgICAgICAgICIi
IgorCisgICAgICAgIChuciwgbywgbmwpID0gc2VsZi5mdWxsY29tcGFyZShvdGhlcikKKyAgICAg
ICAgaWYgbnIgPT0gTkFNRVJFTE5fU1VCRE9NQUlOIG9yIG5yID09IE5BTUVSRUxOX0VRVUFMOgor
ICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYg
aXNfc3VwZXJkb21haW4oc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJJcyBzZWxmIGEgc3VwZXJk
b21haW4gb2Ygb3RoZXI/CisKKyAgICAgICAgVGhlIG5vdGlvbiBvZiBzdWJkb21haW4gaW5jbHVk
ZXMgZXF1YWxpdHkuCisgICAgICAgIEBydHlwZTogYm9vbAorICAgICAgICAiIiIKKworICAgICAg
ICAobnIsIG8sIG5sKSA9IHNlbGYuZnVsbGNvbXBhcmUob3RoZXIpCisgICAgICAgIGlmIG5yID09
IE5BTUVSRUxOX1NVUEVSRE9NQUlOIG9yIG5yID09IE5BTUVSRUxOX0VRVUFMOgorICAgICAgICAg
ICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgY2Fub25pY2Fs
aXplKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBuYW1lIHdoaWNoIGlzIGVxdWFsIHRvIHRo
ZSBjdXJyZW50IG5hbWUsIGJ1dCBpcyBpbgorICAgICAgICBETlNTRUMgY2Fub25pY2FsIGZvcm0u
CisgICAgICAgIEBydHlwZTogZG5zLm5hbWUuTmFtZSBvYmplY3QKKyAgICAgICAgIiIiCisKKyAg
ICAgICAgcmV0dXJuIE5hbWUoW3gubG93ZXIoKSBmb3IgeCBpbiBzZWxmLmxhYmVsc10pCisKKyAg
ICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwg
TmFtZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mdWxsY29tcGFyZShvdGhlcilbMV0gPT0g
MAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX19u
ZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgTmFtZSk6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5mdWxsY29tcGFyZShvdGhlcilbMV0gIT0gMAorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX2x0X18oc2VsZiwg
b3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBOYW1lKToKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLmZ1bGxjb21wYXJlKG90aGVyKVsxXSA8IDAKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBv
dGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWUpOgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYuZnVsbGNvbXBhcmUob3RoZXIpWzFdIDw9IDAKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBv
dGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWUpOgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYuZnVsbGNvbXBhcmUob3RoZXIpWzFdID49IDAKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBv
dGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWUpOgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYuZnVsbGNvbXBhcmUob3RoZXIpWzFdID4gMAorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6
CisgICAgICAgIHJldHVybiAnPEROUyBuYW1lICcgKyBzZWxmLl9fc3RyX18oKSArICc+JworCisg
ICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRvX3RleHQoRmFsc2Up
CisKKyAgICBkZWYgdG9fdGV4dChzZWxmLCBvbWl0X2ZpbmFsX2RvdCA9IEZhbHNlKToKKyAgICAg
ICAgIiIiQ29udmVydCBuYW1lIHRvIHRleHQgZm9ybWF0LgorICAgICAgICBAcGFyYW0gb21pdF9m
aW5hbF9kb3Q6IElmIFRydWUsIGRvbid0IGVtaXQgdGhlIGZpbmFsIGRvdCAoZGVub3RpbmcgdGhl
CisgICAgICAgIHJvb3QgbGFiZWwpIGZvciBhYnNvbHV0ZSBuYW1lcy4gIFRoZSBkZWZhdWx0IGlz
IEZhbHNlLgorICAgICAgICBAcnR5cGU6IHN0cmluZworICAgICAgICAiIiIKKworICAgICAgICBp
ZiBsZW4oc2VsZi5sYWJlbHMpID09IDA6CisgICAgICAgICAgICByZXR1cm4gJ0AnCisgICAgICAg
IGlmIGxlbihzZWxmLmxhYmVscykgPT0gMSBhbmQgc2VsZi5sYWJlbHNbMF0gPT0gJyc6CisgICAg
ICAgICAgICByZXR1cm4gJy4nCisgICAgICAgIGlmIG9taXRfZmluYWxfZG90IGFuZCBzZWxmLmlz
X2Fic29sdXRlKCk6CisgICAgICAgICAgICBsID0gc2VsZi5sYWJlbHNbOi0xXQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgbCA9IHNlbGYubGFiZWxzCisgICAgICAgIHMgPSAnLicuam9pbiht
YXAoX2VzY2FwaWZ5LCBsKSkKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiB0b191bmljb2Rl
KHNlbGYsIG9taXRfZmluYWxfZG90ID0gRmFsc2UpOgorICAgICAgICAiIiJDb252ZXJ0IG5hbWUg
dG8gVW5pY29kZSB0ZXh0IGZvcm1hdC4KKworICAgICAgICBJRE4gQUNFIGxhYmxlcyBhcmUgY29u
dmVydGVkIHRvIFVuaWNvZGUuCisKKyAgICAgICAgQHBhcmFtIG9taXRfZmluYWxfZG90OiBJZiBU
cnVlLCBkb24ndCBlbWl0IHRoZSBmaW5hbCBkb3QgKGRlbm90aW5nIHRoZQorICAgICAgICByb290
IGxhYmVsKSBmb3IgYWJzb2x1dGUgbmFtZXMuICBUaGUgZGVmYXVsdCBpcyBGYWxzZS4KKyAgICAg
ICAgQHJ0eXBlOiBzdHJpbmcKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbGVuKHNlbGYubGFi
ZWxzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIHUnQCcKKyAgICAgICAgaWYgbGVuKHNlbGYu
bGFiZWxzKSA9PSAxIGFuZCBzZWxmLmxhYmVsc1swXSA9PSAnJzoKKyAgICAgICAgICAgIHJldHVy
biB1Jy4nCisgICAgICAgIGlmIG9taXRfZmluYWxfZG90IGFuZCBzZWxmLmlzX2Fic29sdXRlKCk6
CisgICAgICAgICAgICBsID0gc2VsZi5sYWJlbHNbOi0xXQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgbCA9IHNlbGYubGFiZWxzCisgICAgICAgIHMgPSB1Jy4nLmpvaW4oW2VuY29kaW5ncy5p
ZG5hLlRvVW5pY29kZShfZXNjYXBpZnkoeCkpIGZvciB4IGluIGxdKQorICAgICAgICByZXR1cm4g
cworCisgICAgZGVmIHRvX2RpZ2VzdGFibGUoc2VsZiwgb3JpZ2luPU5vbmUpOgorICAgICAgICAi
IiJDb252ZXJ0IG5hbWUgdG8gYSBmb3JtYXQgc3VpdGFibGUgZm9yIGRpZ2VzdGluZyBpbiBoYXNo
ZXMuCisKKyAgICAgICAgVGhlIG5hbWUgaXMgY2Fub25pY2FsaXplZCBhbmQgY29udmVydGVkIHRv
IHVuY29tcHJlc3NlZCB3aXJlIGZvcm1hdC4KKworICAgICAgICBAcGFyYW0gb3JpZ2luOiBJZiB0
aGUgbmFtZSBpcyByZWxhdGl2ZSBhbmQgb3JpZ2luIGlzIG5vdCBOb25lLCB0aGVuCisgICAgICAg
IG9yaWdpbiB3aWxsIGJlIGFwcGVuZGVkIHRvIGl0LgorICAgICAgICBAdHlwZSBvcmlnaW46IGRu
cy5uYW1lLk5hbWUgb2JqZWN0CisgICAgICAgIEByYWlzZXMgTmVlZEFic29sdXRlTmFtZU9yT3Jp
Z2luOiBBbGwgbmFtZXMgaW4gd2lyZSBmb3JtYXQgYXJlCisgICAgICAgIGFic29sdXRlLiAgSWYg
c2VsZiBpcyBhIHJlbGF0aXZlIG5hbWUsIHRoZW4gYW4gb3JpZ2luIG11c3QgYmUgc3VwcGxpZWQ7
CisgICAgICAgIGlmIGl0IGlzIG1pc3NpbmcsIHRoZW4gdGhpcyBleGNlcHRpb24gaXMgcmFpc2Vk
CisgICAgICAgIEBydHlwZTogc3RyaW5nCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCBz
ZWxmLmlzX2Fic29sdXRlKCk6CisgICAgICAgICAgICBpZiBvcmlnaW4gaXMgTm9uZSBvciBub3Qg
b3JpZ2luLmlzX2Fic29sdXRlKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgTmVlZEFic29sdXRl
TmFtZU9yT3JpZ2luCisgICAgICAgICAgICBsYWJlbHMgPSBsaXN0KHNlbGYubGFiZWxzKQorICAg
ICAgICAgICAgbGFiZWxzLmV4dGVuZChsaXN0KG9yaWdpbi5sYWJlbHMpKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgbGFiZWxzID0gc2VsZi5sYWJlbHMKKyAgICAgICAgZGxhYmVscyA9IFsi
JXMlcyIgJSAoY2hyKGxlbih4KSksIHgubG93ZXIoKSkgZm9yIHggaW4gbGFiZWxzXQorICAgICAg
ICByZXR1cm4gJycuam9pbihkbGFiZWxzKQorCisgICAgZGVmIHRvX3dpcmUoc2VsZiwgZmlsZSA9
IE5vbmUsIGNvbXByZXNzID0gTm9uZSwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgICIiIkNvbnZl
cnQgbmFtZSB0byB3aXJlIGZvcm1hdCwgcG9zc2libHkgY29tcHJlc3NpbmcgaXQuCisKKyAgICAg
ICAgQHBhcmFtIGZpbGU6IHRoZSBmaWxlIHdoZXJlIHRoZSBuYW1lIGlzIGVtaXR0ZWQgKHR5cGlj
YWxseQorICAgICAgICBhIGNTdHJpbmdJTyBmaWxlKS4gIElmIE5vbmUsIGEgc3RyaW5nIGNvbnRh
aW5pbmcgdGhlIHdpcmUgbmFtZQorICAgICAgICB3aWxsIGJlIHJldHVybmVkLgorICAgICAgICBA
dHlwZSBmaWxlOiBmaWxlIG9yIE5vbmUKKyAgICAgICAgQHBhcmFtIGNvbXByZXNzOiBUaGUgY29t
cHJlc3Npb24gdGFibGUuICBJZiBOb25lICh0aGUgZGVmYXVsdCkgbmFtZXMKKyAgICAgICAgd2ls
bCBub3QgYmUgY29tcHJlc3NlZC4KKyAgICAgICAgQHR5cGUgY29tcHJlc3M6IGRpY3QKKyAgICAg
ICAgQHBhcmFtIG9yaWdpbjogSWYgdGhlIG5hbWUgaXMgcmVsYXRpdmUgYW5kIG9yaWdpbiBpcyBu
b3QgTm9uZSwgdGhlbgorICAgICAgICBvcmlnaW4gd2lsbCBiZSBhcHBlbmRlZCB0byBpdC4KKyAg
ICAgICAgQHR5cGUgb3JpZ2luOiBkbnMubmFtZS5OYW1lIG9iamVjdAorICAgICAgICBAcmFpc2Vz
IE5lZWRBYnNvbHV0ZU5hbWVPck9yaWdpbjogQWxsIG5hbWVzIGluIHdpcmUgZm9ybWF0IGFyZQor
ICAgICAgICBhYnNvbHV0ZS4gIElmIHNlbGYgaXMgYSByZWxhdGl2ZSBuYW1lLCB0aGVuIGFuIG9y
aWdpbiBtdXN0IGJlIHN1cHBsaWVkOworICAgICAgICBpZiBpdCBpcyBtaXNzaW5nLCB0aGVuIHRo
aXMgZXhjZXB0aW9uIGlzIHJhaXNlZAorICAgICAgICAiIiIKKworICAgICAgICBpZiBmaWxlIGlz
IE5vbmU6CisgICAgICAgICAgICBmaWxlID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAg
ICAgIHdhbnRfcmV0dXJuID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2FudF9y
ZXR1cm4gPSBGYWxzZQorCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX2Fic29sdXRlKCk6CisgICAg
ICAgICAgICBpZiBvcmlnaW4gaXMgTm9uZSBvciBub3Qgb3JpZ2luLmlzX2Fic29sdXRlKCk6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgTmVlZEFic29sdXRlTmFtZU9yT3JpZ2luCisgICAgICAgICAg
ICBsYWJlbHMgPSBsaXN0KHNlbGYubGFiZWxzKQorICAgICAgICAgICAgbGFiZWxzLmV4dGVuZChs
aXN0KG9yaWdpbi5sYWJlbHMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGFiZWxzID0g
c2VsZi5sYWJlbHMKKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIGxhYmVsIGluIGxhYmVsczoK
KyAgICAgICAgICAgIG4gPSBOYW1lKGxhYmVsc1tpOl0pCisgICAgICAgICAgICBpICs9IDEKKyAg
ICAgICAgICAgIGlmIG5vdCBjb21wcmVzcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHBvcyA9
IGNvbXByZXNzLmdldChuKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwb3Mg
PSBOb25lCisgICAgICAgICAgICBpZiBub3QgcG9zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAg
dmFsdWUgPSAweGMwMDAgKyBwb3MKKyAgICAgICAgICAgICAgICBzID0gc3RydWN0LnBhY2soJyFI
JywgdmFsdWUpCisgICAgICAgICAgICAgICAgZmlsZS53cml0ZShzKQorICAgICAgICAgICAgICAg
IGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBjb21wcmVz
cyBpcyBOb25lIGFuZCBsZW4obikgPiAxOgorICAgICAgICAgICAgICAgICAgICBwb3MgPSBmaWxl
LnRlbGwoKQorICAgICAgICAgICAgICAgICAgICBpZiBwb3MgPCAweGMwMDA6CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb21wcmVzc1tuXSA9IHBvcworICAgICAgICAgICAgICAgIGwgPSBsZW4o
bGFiZWwpCisgICAgICAgICAgICAgICAgZmlsZS53cml0ZShjaHIobCkpCisgICAgICAgICAgICAg
ICAgaWYgbCA+IDA6CisgICAgICAgICAgICAgICAgICAgIGZpbGUud3JpdGUobGFiZWwpCisgICAg
ICAgIGlmIHdhbnRfcmV0dXJuOgorICAgICAgICAgICAgcmV0dXJuIGZpbGUuZ2V0dmFsdWUoKQor
CisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICIiIlRoZSBsZW5ndGggb2YgdGhlIG5h
bWUgKGluIGxhYmVscykuCisgICAgICAgIEBydHlwZTogaW50CisgICAgICAgICIiIgorCisgICAg
ICAgIHJldHVybiBsZW4oc2VsZi5sYWJlbHMpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwg
aW5kZXgpOgorICAgICAgICByZXR1cm4gc2VsZi5sYWJlbHNbaW5kZXhdCisKKyAgICBkZWYgX19n
ZXRzbGljZV9fKHNlbGYsIHN0YXJ0LCBzdG9wKToKKyAgICAgICAgcmV0dXJuIHNlbGYubGFiZWxz
W3N0YXJ0OnN0b3BdCisKKyAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJl
dHVybiBzZWxmLmNvbmNhdGVuYXRlKG90aGVyKQorCisgICAgZGVmIF9fc3ViX18oc2VsZiwgb3Ro
ZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5yZWxhdGl2aXplKG90aGVyKQorCisgICAgZGVmIHNw
bGl0KHNlbGYsIGRlcHRoKToKKyAgICAgICAgIiIiU3BsaXQgYSBuYW1lIGludG8gYSBwcmVmaXgg
YW5kIHN1ZmZpeCBhdCBkZXB0aC4KKworICAgICAgICBAcGFyYW0gZGVwdGg6IHRoZSBudW1iZXIg
b2YgbGFiZWxzIGluIHRoZSBzdWZmaXgKKyAgICAgICAgQHR5cGUgZGVwdGg6IGludAorICAgICAg
ICBAcmFpc2VzIFZhbHVlRXJyb3I6IHRoZSBkZXB0aCB3YXMgbm90ID49IDAgYW5kIDw9IHRoZSBs
ZW5ndGggb2YgdGhlCisgICAgICAgIG5hbWUuCisgICAgICAgIEByZXR1cm5zOiB0aGUgdHVwbGUg
KHByZWZpeCwgc3VmZml4KQorICAgICAgICBAcnR5cGU6IHR1cGxlCisgICAgICAgICIiIgorCisg
ICAgICAgIGwgPSBsZW4oc2VsZi5sYWJlbHMpCisgICAgICAgIGlmIGRlcHRoID09IDA6CisgICAg
ICAgICAgICByZXR1cm4gKHNlbGYsIGRucy5uYW1lLmVtcHR5KQorICAgICAgICBlbGlmIGRlcHRo
ID09IGw6CisgICAgICAgICAgICByZXR1cm4gKGRucy5uYW1lLmVtcHR5LCBzZWxmKQorICAgICAg
ICBlbGlmIGRlcHRoIDwgMCBvciBkZXB0aCA+IGw6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCdkZXB0aCBtdXN0IGJlID49IDAgYW5kIDw9IHRoZSBsZW5ndGggb2YgdGhlIG5hbWUnKQor
ICAgICAgICByZXR1cm4gKE5hbWUoc2VsZls6IC1kZXB0aF0pLCBOYW1lKHNlbGZbLWRlcHRoIDpd
KSkKKworICAgIGRlZiBjb25jYXRlbmF0ZShzZWxmLCBvdGhlcik6CisgICAgICAgICIiIlJldHVy
biBhIG5ldyBuYW1lIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHNlbGYgYW5kIG90aGVy
LgorICAgICAgICBAcnR5cGU6IGRucy5uYW1lLk5hbWUgb2JqZWN0CisgICAgICAgIEByYWlzZXMg
QWJzb2x1dGVDb25jYXRlbmF0aW9uOiBzZWxmIGlzIGFic29sdXRlIGFuZCBvdGhlciBpcworICAg
ICAgICBub3QgdGhlIGVtcHR5IG5hbWUKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgc2VsZi5p
c19hYnNvbHV0ZSgpIGFuZCBsZW4ob3RoZXIpID4gMDoKKyAgICAgICAgICAgIHJhaXNlIEFic29s
dXRlQ29uY2F0ZW5hdGlvbgorICAgICAgICBsYWJlbHMgPSBsaXN0KHNlbGYubGFiZWxzKQorICAg
ICAgICBsYWJlbHMuZXh0ZW5kKGxpc3Qob3RoZXIubGFiZWxzKSkKKyAgICAgICAgcmV0dXJuIE5h
bWUobGFiZWxzKQorCisgICAgZGVmIHJlbGF0aXZpemUoc2VsZiwgb3JpZ2luKToKKyAgICAgICAg
IiIiSWYgc2VsZiBpcyBhIHN1YmRvbWFpbiBvZiBvcmlnaW4sIHJldHVybiBhIG5ldyBuYW1lIHdo
aWNoIGlzIHNlbGYKKyAgICAgICAgcmVsYXRpdmUgdG8gb3JpZ2luLiAgT3RoZXJ3aXNlIHJldHVy
biBzZWxmLgorICAgICAgICBAcnR5cGU6IGRucy5uYW1lLk5hbWUgb2JqZWN0CisgICAgICAgICIi
IgorCisgICAgICAgIGlmIG5vdCBvcmlnaW4gaXMgTm9uZSBhbmQgc2VsZi5pc19zdWJkb21haW4o
b3JpZ2luKToKKyAgICAgICAgICAgIHJldHVybiBOYW1lKHNlbGZbOiAtbGVuKG9yaWdpbildKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBkZXJlbGF0
aXZpemUoc2VsZiwgb3JpZ2luKToKKyAgICAgICAgIiIiSWYgc2VsZiBpcyBhIHJlbGF0aXZlIG5h
bWUsIHJldHVybiBhIG5ldyBuYW1lIHdoaWNoIGlzIHRoZQorICAgICAgICBjb25jYXRlbmF0aW9u
IG9mIHNlbGYgYW5kIG9yaWdpbi4gIE90aGVyd2lzZSByZXR1cm4gc2VsZi4KKyAgICAgICAgQHJ0
eXBlOiBkbnMubmFtZS5OYW1lIG9iamVjdAorICAgICAgICAiIiIKKworICAgICAgICBpZiBub3Qg
c2VsZi5pc19hYnNvbHV0ZSgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29uY2F0ZW5hdGUo
b3JpZ2luKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRl
ZiBjaG9vc2VfcmVsYXRpdml0eShzZWxmLCBvcmlnaW49Tm9uZSwgcmVsYXRpdml6ZT1UcnVlKToK
KyAgICAgICAgIiIiUmV0dXJuIGEgbmFtZSB3aXRoIHRoZSByZWxhdGl2aXR5IGRlc2lyZWQgYnkg
dGhlIGNhbGxlci4gIElmCisgICAgICAgIG9yaWdpbiBpcyBOb25lLCB0aGVuIHNlbGYgaXMgcmV0
dXJuZWQuICBPdGhlcndpc2UsIGlmCisgICAgICAgIHJlbGF0aXZpemUgaXMgdHJ1ZSB0aGUgbmFt
ZSBpcyByZWxhdGl2aXplZCwgYW5kIGlmIHJlbGF0aXZpemUgaXMKKyAgICAgICAgZmFsc2UgdGhl
IG5hbWUgaXMgZGVyZWxhdGl2aXplZC4KKyAgICAgICAgQHJ0eXBlOiBkbnMubmFtZS5OYW1lIG9i
amVjdAorICAgICAgICAiIiIKKworICAgICAgICBpZiBvcmlnaW46CisgICAgICAgICAgICBpZiBy
ZWxhdGl2aXplOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnJlbGF0aXZpemUob3JpZ2lu
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kZXJlbGF0
aXZpemUob3JpZ2luKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKwor
ICAgIGRlZiBwYXJlbnQoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcGFyZW50IG9mIHRo
ZSBuYW1lLgorICAgICAgICBAcnR5cGU6IGRucy5uYW1lLk5hbWUgb2JqZWN0CisgICAgICAgIEBy
YWlzZXMgTm9QYXJlbnQ6IHRoZSBuYW1lIGlzIGVpdGhlciB0aGUgcm9vdCBuYW1lIG9yIHRoZSBl
bXB0eSBuYW1lLAorICAgICAgICBhbmQgdGh1cyBoYXMgbm8gcGFyZW50LgorICAgICAgICAiIiIK
KyAgICAgICAgaWYgc2VsZiA9PSByb290IG9yIHNlbGYgPT0gZW1wdHk6CisgICAgICAgICAgICBy
YWlzZSBOb1BhcmVudAorICAgICAgICByZXR1cm4gTmFtZShzZWxmLmxhYmVsc1sxOl0pCisKK3Jv
b3QgPSBOYW1lKFsnJ10pCitlbXB0eSA9IE5hbWUoW10pCisKK2RlZiBmcm9tX3VuaWNvZGUodGV4
dCwgb3JpZ2luID0gcm9vdCk6CisgICAgIiIiQ29udmVydCB1bmljb2RlIHRleHQgaW50byBhIE5h
bWUgb2JqZWN0LgorCisgICAgTGFibGVzIGFyZSBlbmNvZGVkIGluIElETiBBQ0UgZm9ybS4KKwor
ICAgIEBydHlwZTogZG5zLm5hbWUuTmFtZSBvYmplY3QKKyAgICAiIiIKKworICAgIGlmIG5vdCBp
c2luc3RhbmNlKHRleHQsIHVuaWNvZGUpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnB1
dCB0byBmcm9tX3VuaWNvZGUoKSBtdXN0IGJlIGEgdW5pY29kZSBzdHJpbmciKQorICAgIGlmIG5v
dCAob3JpZ2luIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShvcmlnaW4sIE5hbWUpKToKKyAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigib3JpZ2luIG11c3QgYmUgYSBOYW1lIG9yIE5vbmUiKQorICAgIGxh
YmVscyA9IFtdCisgICAgbGFiZWwgPSB1JycKKyAgICBlc2NhcGluZyA9IEZhbHNlCisgICAgZWRp
Z2l0cyA9IDAKKyAgICB0b3RhbCA9IDAKKyAgICBpZiB0ZXh0ID09IHUnQCc6CisgICAgICAgIHRl
eHQgPSB1JycKKyAgICBpZiB0ZXh0OgorICAgICAgICBpZiB0ZXh0ID09IHUnLic6CisgICAgICAg
ICAgICByZXR1cm4gTmFtZShbJyddKQkjIG5vIFVuaWNvZGUgInUiIG9uIHRoaXMgY29uc3RhbnQh
CisgICAgICAgIGZvciBjIGluIHRleHQ6CisgICAgICAgICAgICBpZiBlc2NhcGluZzoKKyAgICAg
ICAgICAgICAgICBpZiBlZGlnaXRzID09IDA6CisgICAgICAgICAgICAgICAgICAgIGlmIGMuaXNk
aWdpdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgPSBpbnQoYykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVkaWdpdHMgKz0gMQorICAgICAgICAgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgKz0gYworICAgICAgICAgICAgICAgICAgICAg
ICAgZXNjYXBpbmcgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgICAgIGlmIG5vdCBjLmlzZGlnaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNl
IEJhZEVzY2FwZQorICAgICAgICAgICAgICAgICAgICB0b3RhbCAqPSAxMAorICAgICAgICAgICAg
ICAgICAgICB0b3RhbCArPSBpbnQoYykKKyAgICAgICAgICAgICAgICAgICAgZWRpZ2l0cyArPSAx
CisgICAgICAgICAgICAgICAgICAgIGlmIGVkaWdpdHMgPT0gMzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVzY2FwaW5nID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsICs9
IGNocih0b3RhbCkKKyAgICAgICAgICAgIGVsaWYgYyA9PSB1Jy4nIG9yIGMgPT0gdSdcdTMwMDIn
IG9yIFwKKyAgICAgICAgICAgICAgICAgYyA9PSB1J1x1ZmYwZScgb3IgYyA9PSB1J1x1ZmY2MSc6
CisgICAgICAgICAgICAgICAgaWYgbGVuKGxhYmVsKSA9PSAwOgorICAgICAgICAgICAgICAgICAg
ICByYWlzZSBFbXB0eUxhYmVsCisgICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChlbmNvZGlu
Z3MuaWRuYS5Ub0FTQ0lJKGxhYmVsKSkKKyAgICAgICAgICAgICAgICBsYWJlbCA9IHUnJworICAg
ICAgICAgICAgZWxpZiBjID09IHUnXFwnOgorICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gVHJ1
ZQorICAgICAgICAgICAgICAgIGVkaWdpdHMgPSAwCisgICAgICAgICAgICAgICAgdG90YWwgPSAw
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxhYmVsICs9IGMKKyAgICAgICAg
aWYgZXNjYXBpbmc6CisgICAgICAgICAgICByYWlzZSBCYWRFc2NhcGUKKyAgICAgICAgaWYgbGVu
KGxhYmVsKSA+IDA6CisgICAgICAgICAgICBsYWJlbHMuYXBwZW5kKGVuY29kaW5ncy5pZG5hLlRv
QVNDSUkobGFiZWwpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGFiZWxzLmFwcGVuZCgn
JykKKyAgICBpZiAobGVuKGxhYmVscykgPT0gMCBvciBsYWJlbHNbLTFdICE9ICcnKSBhbmQgbm90
IG9yaWdpbiBpcyBOb25lOgorICAgICAgICBsYWJlbHMuZXh0ZW5kKGxpc3Qob3JpZ2luLmxhYmVs
cykpCisgICAgcmV0dXJuIE5hbWUobGFiZWxzKQorCitkZWYgZnJvbV90ZXh0KHRleHQsIG9yaWdp
biA9IHJvb3QpOgorICAgICIiIkNvbnZlcnQgdGV4dCBpbnRvIGEgTmFtZSBvYmplY3QuCisgICAg
QHJ0eXBlOiBkbnMubmFtZS5OYW1lIG9iamVjdAorICAgICIiIgorCisgICAgaWYgbm90IGlzaW5z
dGFuY2UodGV4dCwgc3RyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXh0LCB1bmljb2RlKSBh
bmQgc3lzLmhleHZlcnNpb24gPj0gMHgwMjAzMDAwMDoKKyAgICAgICAgICAgIHJldHVybiBmcm9t
X3VuaWNvZGUodGV4dCwgb3JpZ2luKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigiaW5wdXQgdG8gZnJvbV90ZXh0KCkgbXVzdCBiZSBhIHN0cmluZyIpCisgICAg
aWYgbm90IChvcmlnaW4gaXMgTm9uZSBvciBpc2luc3RhbmNlKG9yaWdpbiwgTmFtZSkpOgorICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCJvcmlnaW4gbXVzdCBiZSBhIE5hbWUgb3IgTm9uZSIpCisg
ICAgbGFiZWxzID0gW10KKyAgICBsYWJlbCA9ICcnCisgICAgZXNjYXBpbmcgPSBGYWxzZQorICAg
IGVkaWdpdHMgPSAwCisgICAgdG90YWwgPSAwCisgICAgaWYgdGV4dCA9PSAnQCc6CisgICAgICAg
IHRleHQgPSAnJworICAgIGlmIHRleHQ6CisgICAgICAgIGlmIHRleHQgPT0gJy4nOgorICAgICAg
ICAgICAgcmV0dXJuIE5hbWUoWycnXSkKKyAgICAgICAgZm9yIGMgaW4gdGV4dDoKKyAgICAgICAg
ICAgIGlmIGVzY2FwaW5nOgorICAgICAgICAgICAgICAgIGlmIGVkaWdpdHMgPT0gMDoKKyAgICAg
ICAgICAgICAgICAgICAgaWYgYy5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICB0
b3RhbCA9IGludChjKQorICAgICAgICAgICAgICAgICAgICAgICAgZWRpZ2l0cyArPSAxCisgICAg
ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCArPSBj
CisgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGluZyA9IEZhbHNlCisgICAgICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGMuaXNkaWdpdCgpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmFpc2UgQmFkRXNjYXBlCisgICAgICAgICAgICAgICAgICAgIHRv
dGFsICo9IDEwCisgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IGludChjKQorICAgICAgICAg
ICAgICAgICAgICBlZGlnaXRzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgaWYgZWRpZ2l0cyA9
PSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBpbmcgPSBGYWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgbGFiZWwgKz0gY2hyKHRvdGFsKQorICAgICAgICAgICAgZWxpZiBjID09
ICcuJzoKKyAgICAgICAgICAgICAgICBpZiBsZW4obGFiZWwpID09IDA6CisgICAgICAgICAgICAg
ICAgICAgIHJhaXNlIEVtcHR5TGFiZWwKKyAgICAgICAgICAgICAgICBsYWJlbHMuYXBwZW5kKGxh
YmVsKQorICAgICAgICAgICAgICAgIGxhYmVsID0gJycKKyAgICAgICAgICAgIGVsaWYgYyA9PSAn
XFwnOgorICAgICAgICAgICAgICAgIGVzY2FwaW5nID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVk
aWdpdHMgPSAwCisgICAgICAgICAgICAgICAgdG90YWwgPSAwCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIGxhYmVsICs9IGMKKyAgICAgICAgaWYgZXNjYXBpbmc6CisgICAgICAg
ICAgICByYWlzZSBCYWRFc2NhcGUKKyAgICAgICAgaWYgbGVuKGxhYmVsKSA+IDA6CisgICAgICAg
ICAgICBsYWJlbHMuYXBwZW5kKGxhYmVsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGFi
ZWxzLmFwcGVuZCgnJykKKyAgICBpZiAobGVuKGxhYmVscykgPT0gMCBvciBsYWJlbHNbLTFdICE9
ICcnKSBhbmQgbm90IG9yaWdpbiBpcyBOb25lOgorICAgICAgICBsYWJlbHMuZXh0ZW5kKGxpc3Qo
b3JpZ2luLmxhYmVscykpCisgICAgcmV0dXJuIE5hbWUobGFiZWxzKQorCitkZWYgZnJvbV93aXJl
KG1lc3NhZ2UsIGN1cnJlbnQpOgorICAgICIiIkNvbnZlcnQgcG9zc2libHkgY29tcHJlc3NlZCB3
aXJlIGZvcm1hdCBpbnRvIGEgTmFtZS4KKyAgICBAcGFyYW0gbWVzc2FnZTogdGhlIGVudGlyZSBE
TlMgbWVzc2FnZQorICAgIEB0eXBlIG1lc3NhZ2U6IHN0cmluZworICAgIEBwYXJhbSBjdXJyZW50
OiB0aGUgb2Zmc2V0IG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5hbWUgZnJvbSB0aGUgc3RhcnQK
KyAgICBvZiB0aGUgbWVzc2FnZQorICAgIEB0eXBlIGN1cnJlbnQ6IGludAorICAgIEByYWlzZXMg
ZG5zLm5hbWUuQmFkUG9pbnRlcjogYSBjb21wcmVzc2lvbiBwb2ludGVyIGRpZCBub3QgcG9pbnQg
YmFja3dhcmRzCisgICAgaW4gdGhlIG1lc3NhZ2UKKyAgICBAcmFpc2VzIGRucy5uYW1lLkJhZExh
YmVsVHlwZTogYW4gaW52YWxpZCBsYWJlbCB0eXBlIHdhcyBlbmNvdW50ZXJlZC4KKyAgICBAcmV0
dXJuczogYSB0dXBsZSBjb25zaXN0aW5nIG9mIHRoZSBuYW1lIHRoYXQgd2FzIHJlYWQgYW5kIHRo
ZSBudW1iZXIKKyAgICBvZiBieXRlcyBvZiB0aGUgd2lyZSBmb3JtYXQgbWVzc2FnZSB3aGljaCB3
ZXJlIGNvbnN1bWVkIHJlYWRpbmcgaXQKKyAgICBAcnR5cGU6IChkbnMubmFtZS5OYW1lIG9iamVj
dCwgaW50KSB0dXBsZQorICAgICIiIgorCisgICAgaWYgbm90IGlzaW5zdGFuY2UobWVzc2FnZSwg
c3RyKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW5wdXQgdG8gZnJvbV93aXJlKCkgbXVz
dCBiZSBhIGJ5dGUgc3RyaW5nIikKKyAgICBsYWJlbHMgPSBbXQorICAgIGJpZ2dlc3RfcG9pbnRl
ciA9IGN1cnJlbnQKKyAgICBob3BzID0gMAorICAgIGNvdW50ID0gb3JkKG1lc3NhZ2VbY3VycmVu
dF0pCisgICAgY3VycmVudCArPSAxCisgICAgY3VzZWQgPSAxCisgICAgd2hpbGUgY291bnQgIT0g
MDoKKyAgICAgICAgaWYgY291bnQgPCA2NDoKKyAgICAgICAgICAgIGxhYmVscy5hcHBlbmQobWVz
c2FnZVtjdXJyZW50IDogY3VycmVudCArIGNvdW50XSkKKyAgICAgICAgICAgIGN1cnJlbnQgKz0g
Y291bnQKKyAgICAgICAgICAgIGlmIGhvcHMgPT0gMDoKKyAgICAgICAgICAgICAgICBjdXNlZCAr
PSBjb3VudAorICAgICAgICBlbGlmIGNvdW50ID49IDE5MjoKKyAgICAgICAgICAgIGN1cnJlbnQg
PSAoY291bnQgJiAweDNmKSAqIDI1NiArIG9yZChtZXNzYWdlW2N1cnJlbnRdKQorICAgICAgICAg
ICAgaWYgaG9wcyA9PSAwOgorICAgICAgICAgICAgICAgIGN1c2VkICs9IDEKKyAgICAgICAgICAg
IGlmIGN1cnJlbnQgPj0gYmlnZ2VzdF9wb2ludGVyOgorICAgICAgICAgICAgICAgIHJhaXNlIEJh
ZFBvaW50ZXIKKyAgICAgICAgICAgIGJpZ2dlc3RfcG9pbnRlciA9IGN1cnJlbnQKKyAgICAgICAg
ICAgIGhvcHMgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQmFkTGFiZWxU
eXBlCisgICAgICAgIGNvdW50ID0gb3JkKG1lc3NhZ2VbY3VycmVudF0pCisgICAgICAgIGN1cnJl
bnQgKz0gMQorICAgICAgICBpZiBob3BzID09IDA6CisgICAgICAgICAgICBjdXNlZCArPSAxCisg
ICAgbGFiZWxzLmFwcGVuZCgnJykKKyAgICByZXR1cm4gKE5hbWUobGFiZWxzKSwgY3VzZWQpCklu
ZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9uYW1lZGljdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9uYW1lZGljdC5w
eQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL25h
bWVkaWN0LnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACisjIENvcHlyaWdodCAoQykg
MjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlzc2lvbiB0byB1
c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisj
IGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVy
ZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug
YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisj
IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBB
TEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBB
TEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4g
SU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBE
SVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMK
KyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRT
LCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhF
UiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU
SCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKyIiIkROUyBuYW1l
IGRpY3Rpb25hcnkiIiIKKworaW1wb3J0IGRucy5uYW1lCisKK2NsYXNzIE5hbWVEaWN0KGRpY3Qp
OgorCisgICAgIiIiQSBkaWN0aW9uYXJ5IHdob3NlIGtleXMgYXJlIGRucy5uYW1lLk5hbWUgb2Jq
ZWN0cy4KKyAgICBAaXZhciBtYXhfZGVwdGg6IHRoZSBtYXhpbXVtIGRlcHRoIG9mIHRoZSBrZXlz
IHRoYXQgaGF2ZSBldmVyIGJlZW4KKyAgICBhZGRlZCB0byB0aGUgZGljdGlvbmFyeS4KKyAgICBA
dHlwZSBtYXhfZGVwdGg6IGludAorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICph
cmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKE5hbWVEaWN0LCBzZWxmKS5fX2luaXRfXygq
YXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYubWF4X2RlcHRoID0gMAorCisgICAgZGVmIF9f
c2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShr
ZXksIGRucy5uYW1lLk5hbWUpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTmFtZURp
Y3Qga2V5IG11c3QgYmUgYSBuYW1lJykKKyAgICAgICAgZGVwdGggPSBsZW4oa2V5KQorICAgICAg
ICBpZiBkZXB0aCA+IHNlbGYubWF4X2RlcHRoOgorICAgICAgICAgICAgc2VsZi5tYXhfZGVwdGgg
PSBkZXB0aAorICAgICAgICBzdXBlcihOYW1lRGljdCwgc2VsZikuX19zZXRpdGVtX18oa2V5LCB2
YWx1ZSkKKworICAgIGRlZiBnZXRfZGVlcGVzdF9tYXRjaChzZWxmLCBuYW1lKToKKyAgICAgICAg
IiIiRmluZCB0aGUgZGVlcGVzdCBtYXRjaCB0byBJe25hbWV9IGluIHRoZSBkaWN0aW9uYXJ5Lgor
CisgICAgICAgIFRoZSBkZWVwZXN0IG1hdGNoIGlzIHRoZSBsb25nZXN0IG5hbWUgaW4gdGhlIGRp
Y3Rpb25hcnkgd2hpY2ggaXMKKyAgICAgICAgYSBzdXBlcmRvbWFpbiBvZiBJe25hbWV9LgorCisg
ICAgICAgIEBwYXJhbSBuYW1lOiB0aGUgbmFtZQorICAgICAgICBAdHlwZSBuYW1lOiBkbnMubmFt
ZS5OYW1lIG9iamVjdAorICAgICAgICBAcnR5cGU6IChrZXksIHZhbHVlKSB0dXBsZQorICAgICAg
ICAiIiIKKworICAgICAgICBkZXB0aCA9IGxlbihuYW1lKQorICAgICAgICBpZiBkZXB0aCA+IHNl
bGYubWF4X2RlcHRoOgorICAgICAgICAgICAgZGVwdGggPSBzZWxmLm1heF9kZXB0aAorICAgICAg
ICBmb3IgaSBpbiB4cmFuZ2UoLWRlcHRoLCAwKToKKyAgICAgICAgICAgIG4gPSBkbnMubmFtZS5O
YW1lKG5hbWVbaTpdKQorICAgICAgICAgICAgaWYgc2VsZi5oYXNfa2V5KG4pOgorICAgICAgICAg
ICAgICAgIHJldHVybiAobiwgc2VsZltuXSkKKyAgICAgICAgdiA9IHNlbGZbZG5zLm5hbWUuZW1w
dHldCisgICAgICAgIHJldHVybiAoZG5zLm5hbWUuZW1wdHksIHYpCkluZGV4OiBUb29scy9XZWJQ
YWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9ub2RlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL25vZGUucHkJKHJldmlzaW9uIDApCisrKyBUb29s
cy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9ub2RlLnB5CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE3MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNywgMjAwOSwgMjAxMCBOb21p
bnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0
cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVy
cG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92aWRlZCB0
aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl
CisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg
IkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdB
UkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgor
IyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0g
QkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZS
T00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04g
T0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5H
IE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBP
RiBUSElTIFNPRlRXQVJFLgorCisiIiJETlMgbm9kZXMuICBBIG5vZGUgaXMgYSBzZXQgb2YgcmRh
dGFzZXRzLiIiIgorCitpbXBvcnQgU3RyaW5nSU8KKworaW1wb3J0IGRucy5yZGF0YXNldAoraW1w
b3J0IGRucy5yZGF0YXR5cGUKK2ltcG9ydCBkbnMucmVuZGVyZXIKKworY2xhc3MgTm9kZShvYmpl
Y3QpOgorICAgICIiIkEgRE5TIG5vZGUuCisgICAgCisgICAgQSBub2RlIGlzIGEgc2V0IG9mIHJk
YXRhc2V0cworCisgICAgQGl2YXIgcmRhdGFzZXRzOiB0aGUgbm9kZSdzIHJkYXRhc2V0cworICAg
IEB0eXBlIHJkYXRhc2V0czogbGlzdCBvZiBkbnMucmRhdGFzZXQuUmRhdGFzZXQgb2JqZWN0cyIi
IgorCisgICAgX19zbG90c19fID0gWydyZGF0YXNldHMnXQorICAgIAorICAgIGRlZiBfX2luaXRf
XyhzZWxmKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBhIEROUyBub2RlLgorICAgICAgICAiIiIK
KyAgICAgICAgCisgICAgICAgIHNlbGYucmRhdGFzZXRzID0gW107CisKKyAgICBkZWYgdG9fdGV4
dChzZWxmLCBuYW1lLCAqKmt3KToKKyAgICAgICAgIiIiQ29udmVydCBhIG5vZGUgdG8gdGV4dCBm
b3JtYXQuCisKKyAgICAgICAgRWFjaCByZGF0YXNldCBhdCB0aGUgbm9kZSBpcyBwcmludGVkLiAg
QW55IGtleXdvcmQgYXJndW1lbnRzCisgICAgICAgIHRvIHRoaXMgbWV0aG9kIGFyZSBwYXNzZWQg
b24gdG8gdGhlIHJkYXRhc2V0J3MgdG9fdGV4dCgpIG1ldGhvZC4KKyAgICAgICAgQHBhcmFtIG5h
bWU6IHRoZSBvd25lciBuYW1lIG9mIHRoZSByZGF0YXNldHMKKyAgICAgICAgQHR5cGUgbmFtZTog
ZG5zLm5hbWUuTmFtZSBvYmplY3QKKyAgICAgICAgQHJ0eXBlOiBzdHJpbmcKKyAgICAgICAgIiIi
CisgICAgICAgIAorICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBmb3Ig
cmRzIGluIHNlbGYucmRhdGFzZXRzOgorICAgICAgICAgICAgcHJpbnQgPj4gcywgcmRzLnRvX3Rl
eHQobmFtZSwgKiprdykKKyAgICAgICAgcmV0dXJuIHMuZ2V0dmFsdWUoKVs6LTFdCisKKyAgICBk
ZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPEROUyBub2RlICcgKyBzdHIoaWQo
c2VsZikpICsgJz4nCisgICAgCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAg
ICIiIlR3byBub2RlcyBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHJkYXRhc2V0cy4K
KworICAgICAgICBAcnR5cGU6IGJvb2wKKyAgICAgICAgIiIiCisgICAgICAgICMKKyAgICAgICAg
IyBUaGlzIGlzIGluZWZmaWNpZW50LiAgR29vZCB0aGluZyB3ZSBkb24ndCBuZWVkIHRvIGRvIGl0
IG11Y2guCisgICAgICAgICMKKyAgICAgICAgZm9yIHJkIGluIHNlbGYucmRhdGFzZXRzOgorICAg
ICAgICAgICAgaWYgcmQgbm90IGluIG90aGVyLnJkYXRhc2V0czoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIHJkIGluIG90aGVyLnJkYXRhc2V0czoKKyAgICAgICAg
ICAgIGlmIHJkIG5vdCBpbiBzZWxmLnJkYXRhc2V0czoKKyAgICAgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIp
OgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX19lcV9fKG90aGVyKQorICAgICAgICAKKyAgICBk
ZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLnJkYXRhc2V0cykKKwor
ICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5yZGF0YXNl
dHMpCisKKyAgICBkZWYgZmluZF9yZGF0YXNldChzZWxmLCByZGNsYXNzLCByZHR5cGUsIGNvdmVy
cz1kbnMucmRhdGF0eXBlLk5PTkUsCisgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlPUZhbHNl
KToKKyAgICAgICAgIiIiRmluZCBhbiByZGF0YXNldCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIHBy
b3BlcnRpZXMgaW4gdGhlCisgICAgICAgIGN1cnJlbnQgbm9kZS4KKworICAgICAgICBAcGFyYW0g
cmRjbGFzczogVGhlIGNsYXNzIG9mIHRoZSByZGF0YXNldAorICAgICAgICBAdHlwZSByZGNsYXNz
OiBpbnQKKyAgICAgICAgQHBhcmFtIHJkdHlwZTogVGhlIHR5cGUgb2YgdGhlIHJkYXRhc2V0Cisg
ICAgICAgIEB0eXBlIHJkdHlwZTogaW50CisgICAgICAgIEBwYXJhbSBjb3ZlcnM6IFRoZSBjb3Zl
cmVkIHR5cGUuICBVc3VhbGx5IHRoaXMgdmFsdWUgaXMKKyAgICAgICAgZG5zLnJkYXRhdHlwZS5O
T05FLCBidXQgaWYgdGhlIHJkdHlwZSBpcyBkbnMucmRhdGF0eXBlLlNJRyBvcgorICAgICAgICBk
bnMucmRhdGF0eXBlLlJSU0lHLCB0aGVuIHRoZSBjb3ZlcnMgdmFsdWUgd2lsbCBiZSB0aGUgcmRh
dGEKKyAgICAgICAgdHlwZSB0aGUgU0lHL1JSU0lHIGNvdmVycy4gIFRoZSBsaWJyYXJ5IHRyZWF0
cyB0aGUgU0lHIGFuZCBSUlNJRworICAgICAgICB0eXBlcyBhcyBpZiB0aGV5IHdlcmUgYSBmYW1p
bHkgb2YKKyAgICAgICAgdHlwZXMsIGUuZy4gUlJTSUcoQSksIFJSU0lHKE5TKSwgUlJTSUcoU09B
KS4gIFRoaXMgbWFrZXMgUlJTSUdzIG11Y2gKKyAgICAgICAgZWFzaWVyIHRvIHdvcmsgd2l0aCB0
aGFuIGlmIFJSU0lHcyBjb3ZlcmluZyBkaWZmZXJlbnQgcmRhdGEKKyAgICAgICAgdHlwZXMgd2Vy
ZSBhZ2dyZWdhdGVkIGludG8gYSBzaW5nbGUgUlJTSUcgcmRhdGFzZXQuCisgICAgICAgIEB0eXBl
IGNvdmVyczogaW50CisgICAgICAgIEBwYXJhbSBjcmVhdGU6IElmIFRydWUsIGNyZWF0ZSB0aGUg
cmRhdGFzZXQgaWYgaXQgaXMgbm90IGZvdW5kLgorICAgICAgICBAdHlwZSBjcmVhdGU6IGJvb2wK
KyAgICAgICAgQHJhaXNlcyBLZXlFcnJvcjogQW4gcmRhdGFzZXQgb2YgdGhlIGRlc2lyZWQgdHlw
ZSBhbmQgY2xhc3MgZG9lcworICAgICAgICBub3QgZXhpc3QgYW5kIEl7Y3JlYXRlfSBpcyBub3Qg
VHJ1ZS4KKyAgICAgICAgQHJ0eXBlOiBkbnMucmRhdGFzZXQuUmRhdGFzZXQgb2JqZWN0CisgICAg
ICAgICIiIgorCisgICAgICAgIGZvciByZHMgaW4gc2VsZi5yZGF0YXNldHM6CisgICAgICAgICAg
ICBpZiByZHMubWF0Y2gocmRjbGFzcywgcmR0eXBlLCBjb3ZlcnMpOgorICAgICAgICAgICAgICAg
IHJldHVybiByZHMKKyAgICAgICAgaWYgbm90IGNyZWF0ZToKKyAgICAgICAgICAgIHJhaXNlIEtl
eUVycm9yCisgICAgICAgIHJkcyA9IGRucy5yZGF0YXNldC5SZGF0YXNldChyZGNsYXNzLCByZHR5
cGUpCisgICAgICAgIHNlbGYucmRhdGFzZXRzLmFwcGVuZChyZHMpCisgICAgICAgIHJldHVybiBy
ZHMKKworICAgIGRlZiBnZXRfcmRhdGFzZXQoc2VsZiwgcmRjbGFzcywgcmR0eXBlLCBjb3ZlcnM9
ZG5zLnJkYXRhdHlwZS5OT05FLAorICAgICAgICAgICAgICAgICAgICAgY3JlYXRlPUZhbHNlKToK
KyAgICAgICAgIiIiR2V0IGFuIHJkYXRhc2V0IG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVy
dGllcyBpbiB0aGUKKyAgICAgICAgY3VycmVudCBub2RlLgorCisgICAgICAgIE5vbmUgaXMgcmV0
dXJuZWQgaWYgYW4gcmRhdGFzZXQgb2YgdGhlIHNwZWNpZmllZCB0eXBlIGFuZAorICAgICAgICBj
bGFzcyBkb2VzIG5vdCBleGlzdCBhbmQgSXtjcmVhdGV9IGlzIG5vdCBUcnVlLgorCisgICAgICAg
IEBwYXJhbSByZGNsYXNzOiBUaGUgY2xhc3Mgb2YgdGhlIHJkYXRhc2V0CisgICAgICAgIEB0eXBl
IHJkY2xhc3M6IGludAorICAgICAgICBAcGFyYW0gcmR0eXBlOiBUaGUgdHlwZSBvZiB0aGUgcmRh
dGFzZXQKKyAgICAgICAgQHR5cGUgcmR0eXBlOiBpbnQKKyAgICAgICAgQHBhcmFtIGNvdmVyczog
VGhlIGNvdmVyZWQgdHlwZS4KKyAgICAgICAgQHR5cGUgY292ZXJzOiBpbnQKKyAgICAgICAgQHBh
cmFtIGNyZWF0ZTogSWYgVHJ1ZSwgY3JlYXRlIHRoZSByZGF0YXNldCBpZiBpdCBpcyBub3QgZm91
bmQuCisgICAgICAgIEB0eXBlIGNyZWF0ZTogYm9vbAorICAgICAgICBAcnR5cGU6IGRucy5yZGF0
YXNldC5SZGF0YXNldCBvYmplY3Qgb3IgTm9uZQorICAgICAgICAiIiIKKworICAgICAgICB0cnk6
CisgICAgICAgICAgICByZHMgPSBzZWxmLmZpbmRfcmRhdGFzZXQocmRjbGFzcywgcmR0eXBlLCBj
b3ZlcnMsIGNyZWF0ZSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmRz
ID0gTm9uZQorICAgICAgICByZXR1cm4gcmRzCisKKyAgICBkZWYgZGVsZXRlX3JkYXRhc2V0KHNl
bGYsIHJkY2xhc3MsIHJkdHlwZSwgY292ZXJzPWRucy5yZGF0YXR5cGUuTk9ORSk6CisgICAgICAg
ICIiIkRlbGV0ZSB0aGUgcmRhdGFzZXQgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVz
IGluIHRoZQorICAgICAgICBjdXJyZW50IG5vZGUuCisKKyAgICAgICAgSWYgYSBtYXRjaGluZyBy
ZGF0YXNldCBkb2VzIG5vdCBleGlzdCwgaXQgaXMgbm90IGFuIGVycm9yLgorCisgICAgICAgIEBw
YXJhbSByZGNsYXNzOiBUaGUgY2xhc3Mgb2YgdGhlIHJkYXRhc2V0CisgICAgICAgIEB0eXBlIHJk
Y2xhc3M6IGludAorICAgICAgICBAcGFyYW0gcmR0eXBlOiBUaGUgdHlwZSBvZiB0aGUgcmRhdGFz
ZXQKKyAgICAgICAgQHR5cGUgcmR0eXBlOiBpbnQKKyAgICAgICAgQHBhcmFtIGNvdmVyczogVGhl
IGNvdmVyZWQgdHlwZS4KKyAgICAgICAgQHR5cGUgY292ZXJzOiBpbnQKKyAgICAgICAgIiIiCisK
KyAgICAgICAgcmRzID0gc2VsZi5nZXRfcmRhdGFzZXQocmRjbGFzcywgcmR0eXBlLCBjb3ZlcnMp
CisgICAgICAgIGlmIG5vdCByZHMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYucmRhdGFzZXRz
LnJlbW92ZShyZHMpCisKKyAgICBkZWYgcmVwbGFjZV9yZGF0YXNldChzZWxmLCByZXBsYWNlbWVu
dCk6CisgICAgICAgICIiIlJlcGxhY2UgYW4gcmRhdGFzZXQuCisgICAgICAgIAorICAgICAgICBJ
dCBpcyBub3QgYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm8gcmRhdGFzZXQgbWF0Y2hpbmcgSXtyZXBs
YWNlbWVudH0uCisKKyAgICAgICAgT3duZXJzaGlwIG9mIHRoZSBJe3JlcGxhY2VtZW50fSBvYmpl
Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIG5vZGU7CisgICAgICAgIGluIG90aGVyIHdvcmRzLCB0
aGlzIG1ldGhvZCBkb2VzIG5vdCBzdG9yZSBhIGNvcHkgb2YgSXtyZXBsYWNlbWVudH0KKyAgICAg
ICAgYXQgdGhlIG5vZGUsIGl0IHN0b3JlcyBJe3JlcGxhY2VtZW50fSBpdHNlbGYuCisgICAgICAg
ICIiIgorCisgICAgICAgIHNlbGYuZGVsZXRlX3JkYXRhc2V0KHJlcGxhY2VtZW50LnJkY2xhc3Ms
IHJlcGxhY2VtZW50LnJkdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZW1lbnQuY292ZXJzKQorICAgICAgICBzZWxmLnJkYXRhc2V0cy5hcHBlbmQocmVwbGFjZW1lbnQp
CkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9vcGNvZGUucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvb3Bjb2RlLnB5
CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvb3Bj
b2RlLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MDEtMjAwNywgMjAwOSwgMjAxMCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNl
LCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBk
b2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVi
eSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu
ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBU
SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxM
IFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxM
IElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElO
IE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElS
RUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisj
IFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywg
V0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIg
VE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg
VEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCisiIiJETlMgT3Bjb2Rl
cy4iIiIKKworaW1wb3J0IGRucy5leGNlcHRpb24KKworUVVFUlkgPSAwCitJUVVFUlkgPSAxCitT
VEFUVVMgPSAyCitOT1RJRlkgPSA0CitVUERBVEUgPSA1CisKK19ieV90ZXh0ID0geworICAgICdR
VUVSWScgOiBRVUVSWSwKKyAgICAnSVFVRVJZJyA6IElRVUVSWSwKKyAgICAnU1RBVFVTJyA6IFNU
QVRVUywKKyAgICAnTk9USUZZJyA6IE5PVElGWSwKKyAgICAnVVBEQVRFJyA6IFVQREFURQorfQor
CisjIFdlIGNvbnN0cnVjdCB0aGUgaW52ZXJzZSBtYXBwaW5nIHByb2dyYW1tYXRpY2FsbHkgdG8g
ZW5zdXJlIHRoYXQgd2UKKyMgY2Fubm90IG1ha2UgYW55IG1pc3Rha2VzIChlLmcuIG9taXNzaW9u
cywgY3V0LWFuZC1wYXN0ZSBlcnJvcnMpIHRoYXQKKyMgd291bGQgY2F1c2UgdGhlIG1hcHBpbmcg
bm90IHRvIGJlIHRydWUgaW52ZXJzZS4KKworX2J5X3ZhbHVlID0gZGljdChbKHksIHgpIGZvciB4
LCB5IGluIF9ieV90ZXh0Lml0ZXJpdGVtcygpXSkKKworCitjbGFzcyBVbmtub3duT3Bjb2RlKGRu
cy5leGNlcHRpb24uRE5TRXhjZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgaWYgYW4gb3Bjb2RlIGlz
IHVua25vd24uIiIiCisgICAgcGFzcworCitkZWYgZnJvbV90ZXh0KHRleHQpOgorICAgICIiIkNv
bnZlcnQgdGV4dCBpbnRvIGFuIG9wY29kZS4KKworICAgIEBwYXJhbSB0ZXh0OiB0aGUgdGV4dHVh
bCBvcGNvZGUKKyAgICBAdHlwZSB0ZXh0OiBzdHJpbmcKKyAgICBAcmFpc2VzIFVua25vd25PcGNv
ZGU6IHRoZSBvcGNvZGUgaXMgdW5rbm93bgorICAgIEBydHlwZTogaW50CisgICAgIiIiCisKKyAg
ICBpZiB0ZXh0LmlzZGlnaXQoKToKKyAgICAgICAgdmFsdWUgPSBpbnQodGV4dCkKKyAgICAgICAg
aWYgdmFsdWUgPj0gMCBhbmQgdmFsdWUgPD0gMTU6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUK
KyAgICB2YWx1ZSA9IF9ieV90ZXh0LmdldCh0ZXh0LnVwcGVyKCkpCisgICAgaWYgdmFsdWUgaXMg
Tm9uZToKKyAgICAgICAgcmFpc2UgVW5rbm93bk9wY29kZQorICAgIHJldHVybiB2YWx1ZQorCitk
ZWYgZnJvbV9mbGFncyhmbGFncyk6CisgICAgIiIiRXh0cmFjdCBhbiBvcGNvZGUgZnJvbSBETlMg
bWVzc2FnZSBmbGFncy4KKworICAgIEBwYXJhbSBmbGFnczogaW50CisgICAgQHJ0eXBlOiBpbnQK
KyAgICAiIiIKKyAgICAKKyAgICByZXR1cm4gKGZsYWdzICYgMHg3ODAwKSA+PiAxMQorCitkZWYg
dG9fZmxhZ3ModmFsdWUpOgorICAgICIiIkNvbnZlcnQgYW4gb3Bjb2RlIHRvIGEgdmFsdWUgc3Vp
dGFibGUgZm9yIE9SaW5nIGludG8gRE5TIG1lc3NhZ2UKKyAgICBmbGFncy4KKyAgICBAcnR5cGU6
IGludAorICAgICIiIgorICAgIAorICAgIHJldHVybiAodmFsdWUgPDwgMTEpICYgMHg3ODAwCisg
ICAgCitkZWYgdG9fdGV4dCh2YWx1ZSk6CisgICAgIiIiQ29udmVydCBhbiBvcGNvZGUgdG8gdGV4
dC4KKworICAgIEBwYXJhbSB2YWx1ZTogdGhlIG9wY2RvZQorICAgIEB0eXBlIHZhbHVlOiBpbnQK
KyAgICBAcmFpc2VzIFVua25vd25PcGNvZGU6IHRoZSBvcGNvZGUgaXMgdW5rbm93bgorICAgIEBy
dHlwZTogc3RyaW5nCisgICAgIiIiCisgICAgCisgICAgdGV4dCA9IF9ieV92YWx1ZS5nZXQodmFs
dWUpCisgICAgaWYgdGV4dCBpcyBOb25lOgorICAgICAgICB0ZXh0ID0gc3RyKHZhbHVlKQorICAg
IHJldHVybiB0ZXh0CisKK2RlZiBpc191cGRhdGUoZmxhZ3MpOgorICAgICIiIlRydWUgaWYgdGhl
IG9wY29kZSBpbiBmbGFncyBpcyBVUERBVEUuCisKKyAgICBAcGFyYW0gZmxhZ3M6IEROUyBmbGFn
cworICAgIEB0eXBlIGZsYWdzOiBpbnQKKyAgICBAcnR5cGU6IGJvb2wKKyAgICAiIiIKKyAgICAK
KyAgICBpZiAoZnJvbV9mbGFncyhmbGFncykgPT0gVVBEQVRFKToKKyAgICAgICAgcmV0dXJuIFRy
dWUKKyAgICByZXR1cm4gRmFsc2UKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvZG5zL3F1ZXJ5LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRf
cGFydHkvZG5zL3F1ZXJ5LnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90
aGlyZF9wYXJ0eS9kbnMvcXVlcnkucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDI4IEBACisj
IENvcHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4KKyMKKyMg
UGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0
d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0
aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFs
bCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01J
TlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRX
QVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisj
IEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
T1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwg
REFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVH
TElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElO
IENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUu
CisKKyIiIlRhbGsgdG8gYSBETlMgc2VydmVyLiIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0
IGdlbmVyYXRvcnMKKworaW1wb3J0IGVycm5vCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc29ja2V0
CitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitpbXBvcnQgZG5zLmV4
Y2VwdGlvbgoraW1wb3J0IGRucy5pbmV0CitpbXBvcnQgZG5zLm5hbWUKK2ltcG9ydCBkbnMubWVz
c2FnZQoraW1wb3J0IGRucy5yZGF0YWNsYXNzCitpbXBvcnQgZG5zLnJkYXRhdHlwZQorCitjbGFz
cyBVbmV4cGVjdGVkU291cmNlKGRucy5leGNlcHRpb24uRE5TRXhjZXB0aW9uKToKKyAgICAiIiJS
YWlzZWQgaWYgYSBxdWVyeSByZXNwb25zZSBjb21lcyBmcm9tIGFuIHVuZXhwZWN0ZWQgYWRkcmVz
cyBvciBwb3J0LiIiIgorICAgIHBhc3MKKworY2xhc3MgQmFkUmVzcG9uc2UoZG5zLmV4Y2VwdGlv
bi5Gb3JtRXJyb3IpOgorICAgICIiIlJhaXNlZCBpZiBhIHF1ZXJ5IHJlc3BvbnNlIGRvZXMgbm90
IHJlc3BvbmQgdG8gdGhlIHF1ZXN0aW9uIGFza2VkLiIiIgorICAgIHBhc3MKKworZGVmIF9jb21w
dXRlX2V4cGlyYXRpb24odGltZW91dCk6CisgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAg
ICByZXR1cm4gTm9uZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiB0aW1lLnRpbWUoKSArIHRp
bWVvdXQKKworZGVmIF93YWl0X2ZvcihpciwgaXcsIGl4LCBleHBpcmF0aW9uKToKKyAgICBkb25l
ID0gRmFsc2UKKyAgICB3aGlsZSBub3QgZG9uZToKKyAgICAgICAgaWYgZXhwaXJhdGlvbiBpcyBO
b25lOgorICAgICAgICAgICAgdGltZW91dCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHRpbWVvdXQgPSBleHBpcmF0aW9uIC0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGlmIHRp
bWVvdXQgPD0gMC4wOgorICAgICAgICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uVGltZW91
dAorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAg
ICAgICAgICAgKHIsIHcsIHgpID0gc2VsZWN0LnNlbGVjdChpciwgaXcsIGl4KQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICAociwgdywgeCkgPSBzZWxlY3Quc2VsZWN0KGlyLCBp
dywgaXgsIHRpbWVvdXQpCisgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IsIGU6CisgICAgICAg
ICAgICBpZiBlLmFyZ3NbMF0gIT0gZXJybm8uRUlOVFI6CisgICAgICAgICAgICAgICAgcmFpc2Ug
ZQorICAgICAgICBkb25lID0gVHJ1ZQorICAgICAgICBpZiBsZW4ocikgPT0gMCBhbmQgbGVuKHcp
ID09IDAgYW5kIGxlbih4KSA9PSAwOgorICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5U
aW1lb3V0CisKK2RlZiBfd2FpdF9mb3JfcmVhZGFibGUocywgZXhwaXJhdGlvbik6CisgICAgX3dh
aXRfZm9yKFtzXSwgW10sIFtzXSwgZXhwaXJhdGlvbikKKworZGVmIF93YWl0X2Zvcl93cml0YWJs
ZShzLCBleHBpcmF0aW9uKToKKyAgICBfd2FpdF9mb3IoW10sIFtzXSwgW3NdLCBleHBpcmF0aW9u
KQorCitkZWYgX2FkZHJlc3Nlc19lcXVhbChhZiwgYTEsIGEyKToKKyAgICAjIENvbnZlcnQgdGhl
IGZpcnN0IHZhbHVlIG9mIHRoZSB0dXBsZSwgd2hpY2ggaXMgYSB0ZXh0dWFsIGZvcm1hdAorICAg
ICMgYWRkcmVzcyBpbnRvIGJpbmFyeSBmb3JtLCBzbyB0aGF0IHdlIGFyZSBub3QgY29uZnVzZWQg
YnkgZGlmZmVyZW50CisgICAgIyB0ZXh0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgc2FtZSBh
ZGRyZXNzCisgICAgbjEgPSBkbnMuaW5ldC5pbmV0X3B0b24oYWYsIGExWzBdKQorICAgIG4yID0g
ZG5zLmluZXQuaW5ldF9wdG9uKGFmLCBhMlswXSkKKyAgICByZXR1cm4gbjEgPT0gbjIgYW5kIGEx
WzE6XSA9PSBhMlsxOl0KKworZGVmIHVkcChxLCB3aGVyZSwgdGltZW91dD1Ob25lLCBwb3J0PTUz
LCBhZj1Ob25lLCBzb3VyY2U9Tm9uZSwgc291cmNlX3BvcnQ9MCwKKyAgICAgICAgaWdub3JlX3Vu
ZXhwZWN0ZWQ9RmFsc2UsIG9uZV9ycl9wZXJfcnJzZXQ9RmFsc2UpOgorICAgICIiIlJldHVybiB0
aGUgcmVzcG9uc2Ugb2J0YWluZWQgYWZ0ZXIgc2VuZGluZyBhIHF1ZXJ5IHZpYSBVRFAuCisKKyAg
ICBAcGFyYW0gcTogdGhlIHF1ZXJ5CisgICAgQHR5cGUgcTogZG5zLm1lc3NhZ2UuTWVzc2FnZQor
ICAgIEBwYXJhbSB3aGVyZTogd2hlcmUgdG8gc2VuZCB0aGUgbWVzc2FnZQorICAgIEB0eXBlIHdo
ZXJlOiBzdHJpbmcgY29udGFpbmluZyBhbiBJUHY0IG9yIElQdjYgYWRkcmVzcworICAgIEBwYXJh
bSB0aW1lb3V0OiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZWZvcmUgdGhlIHF1ZXJ5
IHRpbWVzIG91dC4KKyAgICBJZiBOb25lLCB0aGUgZGVmYXVsdCwgd2FpdCBmb3JldmVyLgorICAg
IEB0eXBlIHRpbWVvdXQ6IGZsb2F0CisgICAgQHBhcmFtIHBvcnQ6IFRoZSBwb3J0IHRvIHdoaWNo
IHRvIHNlbmQgdGhlIG1lc3NhZ2UuICBUaGUgZGVmYXVsdCBpcyA1My4KKyAgICBAdHlwZSBwb3J0
OiBpbnQKKyAgICBAcGFyYW0gYWY6IHRoZSBhZGRyZXNzIGZhbWlseSB0byB1c2UuICBUaGUgZGVm
YXVsdCBpcyBOb25lLCB3aGljaAorICAgIGNhdXNlcyB0aGUgYWRkcmVzcyBmYW1pbHkgdG8gdXNl
IHRvIGJlIGluZmVycmVkIGZyb20gdGhlIGZvcm0gb2Ygb2Ygd2hlcmUuCisgICAgSWYgdGhlIGlu
ZmVyZW5jZSBhdHRlbXB0IGZhaWxzLCBBRl9JTkVUIGlzIHVzZWQuCisgICAgQHR5cGUgYWY6IGlu
dAorICAgIEBydHlwZTogZG5zLm1lc3NhZ2UuTWVzc2FnZSBvYmplY3QKKyAgICBAcGFyYW0gc291
cmNlOiBzb3VyY2UgYWRkcmVzcy4gIFRoZSBkZWZhdWx0IGlzIHRoZSBJUHY0IHdpbGRjYXJkIGFk
ZHJlc3MuCisgICAgQHR5cGUgc291cmNlOiBzdHJpbmcKKyAgICBAcGFyYW0gc291cmNlX3BvcnQ6
IFRoZSBwb3J0IGZyb20gd2hpY2ggdG8gc2VuZCB0aGUgbWVzc2FnZS4KKyAgICBUaGUgZGVmYXVs
dCBpcyAwLgorICAgIEB0eXBlIHNvdXJjZV9wb3J0OiBpbnQKKyAgICBAcGFyYW0gaWdub3JlX3Vu
ZXhwZWN0ZWQ6IElmIFRydWUsIGlnbm9yZSByZXNwb25zZXMgZnJvbSB1bmV4cGVjdGVkCisgICAg
c291cmNlcy4gIFRoZSBkZWZhdWx0IGlzIEZhbHNlLgorICAgIEB0eXBlIGlnbm9yZV91bmV4cGVj
dGVkOiBib29sCisgICAgQHBhcmFtIG9uZV9ycl9wZXJfcnJzZXQ6IFB1dCBlYWNoIFJSIGludG8g
aXRzIG93biBSUnNldAorICAgIEB0eXBlIG9uZV9ycl9wZXJfcnJzZXQ6IGJvb2wKKyAgICAiIiIK
KworICAgIHdpcmUgPSBxLnRvX3dpcmUoKQorICAgIGlmIGFmIGlzIE5vbmU6CisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGFmID0gZG5zLmluZXQuYWZfZm9yX2FkZHJlc3Mod2hlcmUpCisgICAg
ICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGFmID0gZG5zLmluZXQuQUZfSU5FVAorICAgIGlmIGFm
ID09IGRucy5pbmV0LkFGX0lORVQ6CisgICAgICAgIGRlc3RpbmF0aW9uID0gKHdoZXJlLCBwb3J0
KQorICAgICAgICBpZiBzb3VyY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzb3VyY2UgPSAo
c291cmNlLCBzb3VyY2VfcG9ydCkKKyAgICBlbGlmIGFmID09IGRucy5pbmV0LkFGX0lORVQ2Ogor
ICAgICAgICBkZXN0aW5hdGlvbiA9ICh3aGVyZSwgcG9ydCwgMCwgMCkKKyAgICAgICAgaWYgc291
cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc291cmNlID0gKHNvdXJjZSwgc291cmNlX3Bv
cnQsIDAsIDApCisgICAgcyA9IHNvY2tldC5zb2NrZXQoYWYsIHNvY2tldC5TT0NLX0RHUkFNLCAw
KQorICAgIHRyeToKKyAgICAgICAgZXhwaXJhdGlvbiA9IF9jb21wdXRlX2V4cGlyYXRpb24odGlt
ZW91dCkKKyAgICAgICAgcy5zZXRibG9ja2luZygwKQorICAgICAgICBpZiBzb3VyY2UgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICBzLmJpbmQoc291cmNlKQorICAgICAgICBfd2FpdF9mb3Jfd3Jp
dGFibGUocywgZXhwaXJhdGlvbikKKyAgICAgICAgcy5zZW5kdG8od2lyZSwgZGVzdGluYXRpb24p
CisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBfd2FpdF9mb3JfcmVhZGFibGUocywgZXhw
aXJhdGlvbikKKyAgICAgICAgICAgICh3aXJlLCBmcm9tX2FkZHJlc3MpID0gcy5yZWN2ZnJvbSg2
NTUzNSkKKyAgICAgICAgICAgIGlmIF9hZGRyZXNzZXNfZXF1YWwoYWYsIGZyb21fYWRkcmVzcywg
ZGVzdGluYXRpb24pIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgKGRucy5pbmV0LmlzX211bHRp
Y2FzdCh3aGVyZSkgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX2FkZHJlc3Nb
MTpdID09IGRlc3RpbmF0aW9uWzE6XSk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAg
ICAgIGlmIG5vdCBpZ25vcmVfdW5leHBlY3RlZDoKKyAgICAgICAgICAgICAgICByYWlzZSBVbmV4
cGVjdGVkU291cmNlKCdnb3QgYSByZXNwb25zZSBmcm9tICcKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICclcyBpbnN0ZWFkIG9mICVzJyAlIChmcm9tX2FkZHJlc3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdGluYXRpb24pKQorICAgIGZpbmFsbHk6CisgICAgICAgIHMuY2xvc2UoKQorICAgIHIg
PSBkbnMubWVzc2FnZS5mcm9tX3dpcmUod2lyZSwga2V5cmluZz1xLmtleXJpbmcsIHJlcXVlc3Rf
bWFjPXEubWFjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lX3JyX3Blcl9ycnNl
dD1vbmVfcnJfcGVyX3Jyc2V0KQorICAgIGlmIG5vdCBxLmlzX3Jlc3BvbnNlKHIpOgorICAgICAg
ICByYWlzZSBCYWRSZXNwb25zZQorICAgIHJldHVybiByCisKK2RlZiBfbmV0X3JlYWQoc29jaywg
Y291bnQsIGV4cGlyYXRpb24pOgorICAgICIiIlJlYWQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Yg
Ynl0ZXMgZnJvbSBzb2NrLiAgS2VlcCB0cnlpbmcgdW50aWwgd2UKKyAgICBlaXRoZXIgZ2V0IHRo
ZSBkZXNpcmVkIGFtb3VudCwgb3Igd2UgaGl0IEVPRi4KKyAgICBBIFRpbWVvdXQgZXhjZXB0aW9u
IHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBvcGVyYXRpb24gaXMgbm90IGNvbXBsZXRlZAorICAgIGJ5
IHRoZSBleHBpcmF0aW9uIHRpbWUuCisgICAgIiIiCisgICAgcyA9ICcnCisgICAgd2hpbGUgY291
bnQgPiAwOgorICAgICAgICBfd2FpdF9mb3JfcmVhZGFibGUoc29jaywgZXhwaXJhdGlvbikKKyAg
ICAgICAgbiA9IHNvY2sucmVjdihjb3VudCkKKyAgICAgICAgaWYgbiA9PSAnJzoKKyAgICAgICAg
ICAgIHJhaXNlIEVPRkVycm9yCisgICAgICAgIGNvdW50ID0gY291bnQgLSBsZW4obikKKyAgICAg
ICAgcyA9IHMgKyBuCisgICAgcmV0dXJuIHMKKworZGVmIF9uZXRfd3JpdGUoc29jaywgZGF0YSwg
ZXhwaXJhdGlvbik6CisgICAgIiIiV3JpdGUgdGhlIHNwZWNpZmllZCBkYXRhIHRvIHRoZSBzb2Nr
ZXQuCisgICAgQSBUaW1lb3V0IGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgb3BlcmF0
aW9uIGlzIG5vdCBjb21wbGV0ZWQKKyAgICBieSB0aGUgZXhwaXJhdGlvbiB0aW1lLgorICAgICIi
IgorICAgIGN1cnJlbnQgPSAwCisgICAgbCA9IGxlbihkYXRhKQorICAgIHdoaWxlIGN1cnJlbnQg
PCBsOgorICAgICAgICBfd2FpdF9mb3Jfd3JpdGFibGUoc29jaywgZXhwaXJhdGlvbikKKyAgICAg
ICAgY3VycmVudCArPSBzb2NrLnNlbmQoZGF0YVtjdXJyZW50Ol0pCisKK2RlZiBfY29ubmVjdChz
LCBhZGRyZXNzKToKKyAgICB0cnk6CisgICAgICAgIHMuY29ubmVjdChhZGRyZXNzKQorICAgIGV4
Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICh0eSwgdikgPSBzeXMuZXhjX2luZm8oKVs6Ml0K
KyAgICAgICAgaWYgdlswXSAhPSBlcnJuby5FSU5QUk9HUkVTUyBhbmQgXAorICAgICAgICAgICAg
ICAgdlswXSAhPSBlcnJuby5FV09VTERCTE9DSyBhbmQgXAorICAgICAgICAgICAgICAgdlswXSAh
PSBlcnJuby5FQUxSRUFEWToKKyAgICAgICAgICAgIHJhaXNlIHYKKworZGVmIHRjcChxLCB3aGVy
ZSwgdGltZW91dD1Ob25lLCBwb3J0PTUzLCBhZj1Ob25lLCBzb3VyY2U9Tm9uZSwgc291cmNlX3Bv
cnQ9MCwKKyAgICAgICAgb25lX3JyX3Blcl9ycnNldD1GYWxzZSk6CisgICAgIiIiUmV0dXJuIHRo
ZSByZXNwb25zZSBvYnRhaW5lZCBhZnRlciBzZW5kaW5nIGEgcXVlcnkgdmlhIFRDUC4KKworICAg
IEBwYXJhbSBxOiB0aGUgcXVlcnkKKyAgICBAdHlwZSBxOiBkbnMubWVzc2FnZS5NZXNzYWdlIG9i
amVjdAorICAgIEBwYXJhbSB3aGVyZTogd2hlcmUgdG8gc2VuZCB0aGUgbWVzc2FnZQorICAgIEB0
eXBlIHdoZXJlOiBzdHJpbmcgY29udGFpbmluZyBhbiBJUHY0IG9yIElQdjYgYWRkcmVzcworICAg
IEBwYXJhbSB0aW1lb3V0OiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZWZvcmUgdGhl
IHF1ZXJ5IHRpbWVzIG91dC4KKyAgICBJZiBOb25lLCB0aGUgZGVmYXVsdCwgd2FpdCBmb3JldmVy
LgorICAgIEB0eXBlIHRpbWVvdXQ6IGZsb2F0CisgICAgQHBhcmFtIHBvcnQ6IFRoZSBwb3J0IHRv
IHdoaWNoIHRvIHNlbmQgdGhlIG1lc3NhZ2UuICBUaGUgZGVmYXVsdCBpcyA1My4KKyAgICBAdHlw
ZSBwb3J0OiBpbnQKKyAgICBAcGFyYW0gYWY6IHRoZSBhZGRyZXNzIGZhbWlseSB0byB1c2UuICBU
aGUgZGVmYXVsdCBpcyBOb25lLCB3aGljaAorICAgIGNhdXNlcyB0aGUgYWRkcmVzcyBmYW1pbHkg
dG8gdXNlIHRvIGJlIGluZmVycmVkIGZyb20gdGhlIGZvcm0gb2Ygb2Ygd2hlcmUuCisgICAgSWYg
dGhlIGluZmVyZW5jZSBhdHRlbXB0IGZhaWxzLCBBRl9JTkVUIGlzIHVzZWQuCisgICAgQHR5cGUg
YWY6IGludAorICAgIEBydHlwZTogZG5zLm1lc3NhZ2UuTWVzc2FnZSBvYmplY3QKKyAgICBAcGFy
YW0gc291cmNlOiBzb3VyY2UgYWRkcmVzcy4gIFRoZSBkZWZhdWx0IGlzIHRoZSBJUHY0IHdpbGRj
YXJkIGFkZHJlc3MuCisgICAgQHR5cGUgc291cmNlOiBzdHJpbmcKKyAgICBAcGFyYW0gc291cmNl
X3BvcnQ6IFRoZSBwb3J0IGZyb20gd2hpY2ggdG8gc2VuZCB0aGUgbWVzc2FnZS4KKyAgICBUaGUg
ZGVmYXVsdCBpcyAwLgorICAgIEB0eXBlIHNvdXJjZV9wb3J0OiBpbnQKKyAgICBAcGFyYW0gb25l
X3JyX3Blcl9ycnNldDogUHV0IGVhY2ggUlIgaW50byBpdHMgb3duIFJSc2V0CisgICAgQHR5cGUg
b25lX3JyX3Blcl9ycnNldDogYm9vbAorICAgICIiIgorCisgICAgd2lyZSA9IHEudG9fd2lyZSgp
CisgICAgaWYgYWYgaXMgTm9uZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWYgPSBkbnMu
aW5ldC5hZl9mb3JfYWRkcmVzcyh3aGVyZSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAg
YWYgPSBkbnMuaW5ldC5BRl9JTkVUCisgICAgaWYgYWYgPT0gZG5zLmluZXQuQUZfSU5FVDoKKyAg
ICAgICAgZGVzdGluYXRpb24gPSAod2hlcmUsIHBvcnQpCisgICAgICAgIGlmIHNvdXJjZSBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgIHNvdXJjZSA9IChzb3VyY2UsIHNvdXJjZV9wb3J0KQorICAg
IGVsaWYgYWYgPT0gZG5zLmluZXQuQUZfSU5FVDY6CisgICAgICAgIGRlc3RpbmF0aW9uID0gKHdo
ZXJlLCBwb3J0LCAwLCAwKQorICAgICAgICBpZiBzb3VyY2UgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBzb3VyY2UgPSAoc291cmNlLCBzb3VyY2VfcG9ydCwgMCwgMCkKKyAgICBzID0gc29ja2V0
LnNvY2tldChhZiwgc29ja2V0LlNPQ0tfU1RSRUFNLCAwKQorICAgIHRyeToKKyAgICAgICAgZXhw
aXJhdGlvbiA9IF9jb21wdXRlX2V4cGlyYXRpb24odGltZW91dCkKKyAgICAgICAgcy5zZXRibG9j
a2luZygwKQorICAgICAgICBpZiBzb3VyY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzLmJp
bmQoc291cmNlKQorICAgICAgICBfY29ubmVjdChzLCBkZXN0aW5hdGlvbikKKworICAgICAgICBs
ID0gbGVuKHdpcmUpCisKKyAgICAgICAgIyBjb3B5aW5nIHRoZSB3aXJlIGludG8gdGNwbXNnIGlz
IGluZWZmaWNpZW50LCBidXQgbGV0cyB1cworICAgICAgICAjIGF2b2lkIHdyaXRldigpIG9yIGRv
aW5nIGEgc2hvcnQgd3JpdGUgdGhhdCB3b3VsZCBnZXQgcHVzaGVkCisgICAgICAgICMgb250byB0
aGUgbmV0CisgICAgICAgIHRjcG1zZyA9IHN0cnVjdC5wYWNrKCIhSCIsIGwpICsgd2lyZQorICAg
ICAgICBfbmV0X3dyaXRlKHMsIHRjcG1zZywgZXhwaXJhdGlvbikKKyAgICAgICAgbGRhdGEgPSBf
bmV0X3JlYWQocywgMiwgZXhwaXJhdGlvbikKKyAgICAgICAgKGwsKSA9IHN0cnVjdC51bnBhY2so
IiFIIiwgbGRhdGEpCisgICAgICAgIHdpcmUgPSBfbmV0X3JlYWQocywgbCwgZXhwaXJhdGlvbikK
KyAgICBmaW5hbGx5OgorICAgICAgICBzLmNsb3NlKCkKKyAgICByID0gZG5zLm1lc3NhZ2UuZnJv
bV93aXJlKHdpcmUsIGtleXJpbmc9cS5rZXlyaW5nLCByZXF1ZXN0X21hYz1xLm1hYywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9uZV9ycl9wZXJfcnJzZXQ9b25lX3JyX3Blcl9ycnNl
dCkKKyAgICBpZiBub3QgcS5pc19yZXNwb25zZShyKToKKyAgICAgICAgcmFpc2UgQmFkUmVzcG9u
c2UKKyAgICByZXR1cm4gcgorCitkZWYgeGZyKHdoZXJlLCB6b25lLCByZHR5cGU9ZG5zLnJkYXRh
dHlwZS5BWEZSLCByZGNsYXNzPWRucy5yZGF0YWNsYXNzLklOLAorICAgICAgICB0aW1lb3V0PU5v
bmUsIHBvcnQ9NTMsIGtleXJpbmc9Tm9uZSwga2V5bmFtZT1Ob25lLCByZWxhdGl2aXplPVRydWUs
CisgICAgICAgIGFmPU5vbmUsIGxpZmV0aW1lPU5vbmUsIHNvdXJjZT1Ob25lLCBzb3VyY2VfcG9y
dD0wLCBzZXJpYWw9MCwKKyAgICAgICAgdXNlX3VkcD1GYWxzZSwga2V5YWxnb3JpdGhtPWRucy50
c2lnLmRlZmF1bHRfYWxnb3JpdGhtKToKKyAgICAiIiJSZXR1cm4gYSBnZW5lcmF0b3IgZm9yIHRo
ZSByZXNwb25zZXMgdG8gYSB6b25lIHRyYW5zZmVyLgorCisgICAgQHBhcmFtIHdoZXJlOiB3aGVy
ZSB0byBzZW5kIHRoZSBtZXNzYWdlCisgICAgQHR5cGUgd2hlcmU6IHN0cmluZyBjb250YWluaW5n
IGFuIElQdjQgb3IgSVB2NiBhZGRyZXNzCisgICAgQHBhcmFtIHpvbmU6IFRoZSBuYW1lIG9mIHRo
ZSB6b25lIHRvIHRyYW5zZmVyCisgICAgQHR5cGUgem9uZTogZG5zLm5hbWUuTmFtZSBvYmplY3Qg
b3Igc3RyaW5nCisgICAgQHBhcmFtIHJkdHlwZTogVGhlIHR5cGUgb2Ygem9uZSB0cmFuc2Zlci4g
IFRoZSBkZWZhdWx0IGlzCisgICAgZG5zLnJkYXRhdHlwZS5BWEZSLgorICAgIEB0eXBlIHJkdHlw
ZTogaW50IG9yIHN0cmluZworICAgIEBwYXJhbSByZGNsYXNzOiBUaGUgY2xhc3Mgb2YgdGhlIHpv
bmUgdHJhbnNmZXIuICBUaGUgZGVmYXVsdCBpcworICAgIGRucy5yZGF0YXR5cGUuSU4uCisgICAg
QHR5cGUgcmRjbGFzczogaW50IG9yIHN0cmluZworICAgIEBwYXJhbSB0aW1lb3V0OiBUaGUgbnVt
YmVyIG9mIHNlY29uZHMgdG8gd2FpdCBmb3IgZWFjaCByZXNwb25zZSBtZXNzYWdlLgorICAgIElm
IE5vbmUsIHRoZSBkZWZhdWx0LCB3YWl0IGZvcmV2ZXIuCisgICAgQHR5cGUgdGltZW91dDogZmxv
YXQKKyAgICBAcGFyYW0gcG9ydDogVGhlIHBvcnQgdG8gd2hpY2ggdG8gc2VuZCB0aGUgbWVzc2Fn
ZS4gIFRoZSBkZWZhdWx0IGlzIDUzLgorICAgIEB0eXBlIHBvcnQ6IGludAorICAgIEBwYXJhbSBr
ZXlyaW5nOiBUaGUgVFNJRyBrZXlyaW5nIHRvIHVzZQorICAgIEB0eXBlIGtleXJpbmc6IGRpY3QK
KyAgICBAcGFyYW0ga2V5bmFtZTogVGhlIG5hbWUgb2YgdGhlIFRTSUcga2V5IHRvIHVzZQorICAg
IEB0eXBlIGtleW5hbWU6IGRucy5uYW1lLk5hbWUgb2JqZWN0IG9yIHN0cmluZworICAgIEBwYXJh
bSByZWxhdGl2aXplOiBJZiBUcnVlLCBhbGwgbmFtZXMgaW4gdGhlIHpvbmUgd2lsbCBiZSByZWxh
dGl2aXplZCB0bworICAgIHRoZSB6b25lIG9yaWdpbi4gIEl0IGlzIGVzc2VudGlhbCB0aGF0IHRo
ZSByZWxhdGl2aXplIHNldHRpbmcgbWF0Y2hlcworICAgIHRoZSBvbmUgc3BlY2lmaWVkIHRvIGRu
cy56b25lLmZyb21feGZyKCkuCisgICAgQHR5cGUgcmVsYXRpdml6ZTogYm9vbAorICAgIEBwYXJh
bSBhZjogdGhlIGFkZHJlc3MgZmFtaWx5IHRvIHVzZS4gIFRoZSBkZWZhdWx0IGlzIE5vbmUsIHdo
aWNoCisgICAgY2F1c2VzIHRoZSBhZGRyZXNzIGZhbWlseSB0byB1c2UgdG8gYmUgaW5mZXJyZWQg
ZnJvbSB0aGUgZm9ybSBvZiBvZiB3aGVyZS4KKyAgICBJZiB0aGUgaW5mZXJlbmNlIGF0dGVtcHQg
ZmFpbHMsIEFGX0lORVQgaXMgdXNlZC4KKyAgICBAdHlwZSBhZjogaW50CisgICAgQHBhcmFtIGxp
ZmV0aW1lOiBUaGUgdG90YWwgbnVtYmVyIG9mIHNlY29uZHMgdG8gc3BlbmQgZG9pbmcgdGhlIHRy
YW5zZmVyLgorICAgIElmIE5vbmUsIHRoZSBkZWZhdWx0LCB0aGVuIHRoZXJlIGlzIG5vIGxpbWl0
IG9uIHRoZSB0aW1lIHRoZSB0cmFuc2ZlciBtYXkKKyAgICB0YWtlLgorICAgIEB0eXBlIGxpZmV0
aW1lOiBmbG9hdAorICAgIEBydHlwZTogZ2VuZXJhdG9yIG9mIGRucy5tZXNzYWdlLk1lc3NhZ2Ug
b2JqZWN0cy4KKyAgICBAcGFyYW0gc291cmNlOiBzb3VyY2UgYWRkcmVzcy4gIFRoZSBkZWZhdWx0
IGlzIHRoZSBJUHY0IHdpbGRjYXJkIGFkZHJlc3MuCisgICAgQHR5cGUgc291cmNlOiBzdHJpbmcK
KyAgICBAcGFyYW0gc291cmNlX3BvcnQ6IFRoZSBwb3J0IGZyb20gd2hpY2ggdG8gc2VuZCB0aGUg
bWVzc2FnZS4KKyAgICBUaGUgZGVmYXVsdCBpcyAwLgorICAgIEB0eXBlIHNvdXJjZV9wb3J0OiBp
bnQKKyAgICBAcGFyYW0gc2VyaWFsOiBUaGUgU09BIHNlcmlhbCBudW1iZXIgdG8gdXNlIGFzIHRo
ZSBiYXNlIGZvciBhbiBJWEZSIGRpZmYKKyAgICBzZXF1ZW5jZSAob25seSBtZWFuaW5nZnVsIGlm
IHJkdHlwZSA9PSBkbnMucmRhdGF0eXBlLklYRlIpLgorICAgIEB0eXBlIHNlcmlhbDogaW50Cisg
ICAgQHBhcmFtIHVzZV91ZHA6IFVzZSBVRFAgKG9ubHkgbWVhbmluZ2Z1bCBmb3IgSVhGUikKKyAg
ICBAdHlwZSB1c2VfdWRwOiBib29sCisgICAgQHBhcmFtIGtleWFsZ29yaXRobTogVGhlIFRTSUcg
YWxnb3JpdGhtIHRvIHVzZTsgZGVmYXVsdHMgdG8KKyAgICBkbnMudHNpZy5kZWZhdWx0X2FsZ29y
aXRobQorICAgIEB0eXBlIGtleWFsZ29yaXRobTogc3RyaW5nCisgICAgIiIiCisKKyAgICBpZiBp
c2luc3RhbmNlKHpvbmUsIChzdHIsIHVuaWNvZGUpKToKKyAgICAgICAgem9uZSA9IGRucy5uYW1l
LmZyb21fdGV4dCh6b25lKQorICAgIGlmIGlzaW5zdGFuY2UocmR0eXBlLCBzdHIpOgorICAgICAg
ICByZHR5cGUgPSBkbnMucmRhdGF0eXBlLmZyb21fdGV4dChyZHR5cGUpCisgICAgcSA9IGRucy5t
ZXNzYWdlLm1ha2VfcXVlcnkoem9uZSwgcmR0eXBlLCByZGNsYXNzKQorICAgIGlmIHJkdHlwZSA9
PSBkbnMucmRhdGF0eXBlLklYRlI6CisgICAgICAgIHJyc2V0ID0gZG5zLnJyc2V0LmZyb21fdGV4
dCh6b25lLCAwLCAnSU4nLCAnU09BJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcuIC4gJXUgMCAwIDAgMCcgJSBzZXJpYWwpCisgICAgICAgIHEuYXV0aG9yaXR5LmFwcGVu
ZChycnNldCkKKyAgICBpZiBub3Qga2V5cmluZyBpcyBOb25lOgorICAgICAgICBxLnVzZV90c2ln
KGtleXJpbmcsIGtleW5hbWUsIGFsZ29yaXRobT1rZXlhbGdvcml0aG0pCisgICAgd2lyZSA9IHEu
dG9fd2lyZSgpCisgICAgaWYgYWYgaXMgTm9uZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
YWYgPSBkbnMuaW5ldC5hZl9mb3JfYWRkcmVzcyh3aGVyZSkKKyAgICAgICAgZXhjZXB0OgorICAg
ICAgICAgICAgYWYgPSBkbnMuaW5ldC5BRl9JTkVUCisgICAgaWYgYWYgPT0gZG5zLmluZXQuQUZf
SU5FVDoKKyAgICAgICAgZGVzdGluYXRpb24gPSAod2hlcmUsIHBvcnQpCisgICAgICAgIGlmIHNv
dXJjZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNvdXJjZSA9IChzb3VyY2UsIHNvdXJjZV9w
b3J0KQorICAgIGVsaWYgYWYgPT0gZG5zLmluZXQuQUZfSU5FVDY6CisgICAgICAgIGRlc3RpbmF0
aW9uID0gKHdoZXJlLCBwb3J0LCAwLCAwKQorICAgICAgICBpZiBzb3VyY2UgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICBzb3VyY2UgPSAoc291cmNlLCBzb3VyY2VfcG9ydCwgMCwgMCkKKyAgICBp
ZiB1c2VfdWRwOgorICAgICAgICBpZiByZHR5cGUgIT0gZG5zLnJkYXRhdHlwZS5JWEZSOgorICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignY2Fubm90IGRvIGEgVURQIEFYRlInKQorICAgICAg
ICBzID0gc29ja2V0LnNvY2tldChhZiwgc29ja2V0LlNPQ0tfREdSQU0sIDApCisgICAgZWxzZToK
KyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoYWYsIHNvY2tldC5TT0NLX1NUUkVBTSwgMCkKKyAg
ICBzLnNldGJsb2NraW5nKDApCisgICAgaWYgc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICBz
LmJpbmQoc291cmNlKQorICAgIGV4cGlyYXRpb24gPSBfY29tcHV0ZV9leHBpcmF0aW9uKGxpZmV0
aW1lKQorICAgIF9jb25uZWN0KHMsIGRlc3RpbmF0aW9uKQorICAgIGwgPSBsZW4od2lyZSkKKyAg
ICBpZiB1c2VfdWRwOgorICAgICAgICBfd2FpdF9mb3Jfd3JpdGFibGUocywgZXhwaXJhdGlvbikK
KyAgICAgICAgcy5zZW5kKHdpcmUpCisgICAgZWxzZToKKyAgICAgICAgdGNwbXNnID0gc3RydWN0
LnBhY2soIiFIIiwgbCkgKyB3aXJlCisgICAgICAgIF9uZXRfd3JpdGUocywgdGNwbXNnLCBleHBp
cmF0aW9uKQorICAgIGRvbmUgPSBGYWxzZQorICAgIHNvYV9ycnNldCA9IE5vbmUKKyAgICBzb2Ff
Y291bnQgPSAwCisgICAgaWYgcmVsYXRpdml6ZToKKyAgICAgICAgb3JpZ2luID0gem9uZQorICAg
ICAgICBvbmFtZSA9IGRucy5uYW1lLmVtcHR5CisgICAgZWxzZToKKyAgICAgICAgb3JpZ2luID0g
Tm9uZQorICAgICAgICBvbmFtZSA9IHpvbmUKKyAgICB0c2lnX2N0eCA9IE5vbmUKKyAgICBmaXJz
dCA9IFRydWUKKyAgICB3aGlsZSBub3QgZG9uZToKKyAgICAgICAgbWV4cGlyYXRpb24gPSBfY29t
cHV0ZV9leHBpcmF0aW9uKHRpbWVvdXQpCisgICAgICAgIGlmIG1leHBpcmF0aW9uIGlzIE5vbmUg
b3IgbWV4cGlyYXRpb24gPiBleHBpcmF0aW9uOgorICAgICAgICAgICAgbWV4cGlyYXRpb24gPSBl
eHBpcmF0aW9uCisgICAgICAgIGlmIHVzZV91ZHA6CisgICAgICAgICAgICBfd2FpdF9mb3JfcmVh
ZGFibGUocywgZXhwaXJhdGlvbikKKyAgICAgICAgICAgICh3aXJlLCBmcm9tX2FkZHJlc3MpID0g
cy5yZWN2ZnJvbSg2NTUzNSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxkYXRhID0gX25l
dF9yZWFkKHMsIDIsIG1leHBpcmF0aW9uKQorICAgICAgICAgICAgKGwsKSA9IHN0cnVjdC51bnBh
Y2soIiFIIiwgbGRhdGEpCisgICAgICAgICAgICB3aXJlID0gX25ldF9yZWFkKHMsIGwsIG1leHBp
cmF0aW9uKQorICAgICAgICByID0gZG5zLm1lc3NhZ2UuZnJvbV93aXJlKHdpcmUsIGtleXJpbmc9
cS5rZXlyaW5nLCByZXF1ZXN0X21hYz1xLm1hYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4ZnI9VHJ1ZSwgb3JpZ2luPW9yaWdpbiwgdHNpZ19jdHg9dHNpZ19jdHgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGk9VHJ1ZSwgZmlyc3Q9Zmlyc3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lX3JyX3Blcl9ycnNldD0ocmR0eXBl
PT1kbnMucmRhdGF0eXBlLklYRlIpKQorICAgICAgICB0c2lnX2N0eCA9IHIudHNpZ19jdHgKKyAg
ICAgICAgZmlyc3QgPSBGYWxzZQorICAgICAgICBhbnN3ZXJfaW5kZXggPSAwCisgICAgICAgIGRl
bGV0ZV9tb2RlID0gRmFsc2UKKyAgICAgICAgZXhwZWN0aW5nX1NPQSA9IEZhbHNlCisgICAgICAg
IGlmIHNvYV9ycnNldCBpcyBOb25lOgorICAgICAgICAgICAgaWYgbm90IHIuYW5zd2VyIG9yIHIu
YW5zd2VyWzBdLm5hbWUgIT0gb25hbWU6CisgICAgICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2Vw
dGlvbi5Gb3JtRXJyb3IKKyAgICAgICAgICAgIHJyc2V0ID0gci5hbnN3ZXJbMF0KKyAgICAgICAg
ICAgIGlmIHJyc2V0LnJkdHlwZSAhPSBkbnMucmRhdGF0eXBlLlNPQToKKyAgICAgICAgICAgICAg
ICByYWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcigiZmlyc3QgUlJzZXQgaXMgbm90IGFuIFNP
QSIpCisgICAgICAgICAgICBhbnN3ZXJfaW5kZXggPSAxCisgICAgICAgICAgICBzb2FfcnJzZXQg
PSBycnNldC5jb3B5KCkKKyAgICAgICAgICAgIGlmIHJkdHlwZSA9PSBkbnMucmRhdGF0eXBlLklY
RlI6CisgICAgICAgICAgICAgICAgaWYgc29hX3Jyc2V0WzBdLnNlcmlhbCA9PSBzZXJpYWw6Cisg
ICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgIyBXZSdyZSBhbHJlYWR5
IHVwLXRvLWRhdGUuCisgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAg
ZG9uZSA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBl
eHBlY3RpbmdfU09BID0gVHJ1ZQorICAgICAgICAjCisgICAgICAgICMgUHJvY2VzcyBTT0FzIGlu
IHRoZSBhbnN3ZXIgc2VjdGlvbiAob3RoZXIgdGhhbiB0aGUgaW5pdGlhbAorICAgICAgICAjIFNP
QSBpbiB0aGUgZmlyc3QgbWVzc2FnZSkuCisgICAgICAgICMKKyAgICAgICAgZm9yIHJyc2V0IGlu
IHIuYW5zd2VyW2Fuc3dlcl9pbmRleDpdOgorICAgICAgICAgICAgaWYgZG9uZToKKyAgICAgICAg
ICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcigiYW5zd2VycyBhZnRlciBmaW5h
bCBTT0EiKQorICAgICAgICAgICAgaWYgcnJzZXQucmR0eXBlID09IGRucy5yZGF0YXR5cGUuU09B
IGFuZCBycnNldC5uYW1lID09IG9uYW1lOgorICAgICAgICAgICAgICAgIGlmIGV4cGVjdGluZ19T
T0E6CisgICAgICAgICAgICAgICAgICAgIGlmIHJyc2V0WzBdLnNlcmlhbCAhPSBzZXJpYWw6Cisg
ICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcigiSVhG
UiBiYXNlIHNlcmlhbCBtaXNtYXRjaCIpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGluZ19T
T0EgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsaWYgcmR0eXBlID09IGRucy5yZGF0YXR5cGUu
SVhGUjoKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlX21vZGUgPSBub3QgZGVsZXRlX21vZGUK
KyAgICAgICAgICAgICAgICBpZiBycnNldCA9PSBzb2FfcnJzZXQgYW5kIG5vdCBkZWxldGVfbW9k
ZToKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgZXhw
ZWN0aW5nX1NPQToKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBXZSBtYWRl
IGFuIElYRlIgcmVxdWVzdCBhbmQgYXJlIGV4cGVjdGluZyBhbm90aGVyCisgICAgICAgICAgICAg
ICAgIyBTT0EgUlIsIGJ1dCBzYXcgc29tZXRoaW5nIGVsc2UsIHNvIHRoaXMgbXVzdCBiZSBhbgor
ICAgICAgICAgICAgICAgICMgQVhGUiByZXNwb25zZS4KKyAgICAgICAgICAgICAgICAjCisgICAg
ICAgICAgICAgICAgcmR0eXBlID0gZG5zLnJkYXRhdHlwZS5BWEZSCisgICAgICAgICAgICAgICAg
ZXhwZWN0aW5nX1NPQSA9IEZhbHNlCisgICAgICAgIGlmIGRvbmUgYW5kIHEua2V5cmluZyBhbmQg
bm90IHIuaGFkX3RzaWc6CisgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJv
cigibWlzc2luZyBUU0lHIikKKyAgICAgICAgeWllbGQgcgorICAgIHMuY2xvc2UoKQpJbmRleDog
VG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmNvZGUucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmNvZGUucHkJKHJldmlzaW9u
IDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yY29kZS5weQkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMTkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcsIDIw
MDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9k
aWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlv
biBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwK
KyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt
aXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJF
IElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVT
CisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBT
SEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJF
Q1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVS
IFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4g
QU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFD
VElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1Ig
UEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworIiIiRE5TIFJlc3VsdCBDb2Rlcy4iIiIK
KworaW1wb3J0IGRucy5leGNlcHRpb24KKworTk9FUlJPUiA9IDAKK0ZPUk1FUlIgPSAxCitTRVJW
RkFJTCA9IDIKK05YRE9NQUlOID0gMworTk9USU1QID0gNAorUkVGVVNFRCA9IDUKK1lYRE9NQUlO
ID0gNgorWVhSUlNFVCA9IDcKK05YUlJTRVQgPSA4CitOT1RBVVRIID0gOQorTk9UWk9ORSA9IDEw
CitCQURWRVJTID0gMTYKKworX2J5X3RleHQgPSB7CisgICAgJ05PRVJST1InIDogTk9FUlJPUiwK
KyAgICAnRk9STUVSUicgOiBGT1JNRVJSLAorICAgICdTRVJWRkFJTCcgOiBTRVJWRkFJTCwKKyAg
ICAnTlhET01BSU4nIDogTlhET01BSU4sCisgICAgJ05PVElNUCcgOiBOT1RJTVAsCisgICAgJ1JF
RlVTRUQnIDogUkVGVVNFRCwKKyAgICAnWVhET01BSU4nIDogWVhET01BSU4sCisgICAgJ1lYUlJT
RVQnIDogWVhSUlNFVCwKKyAgICAnTlhSUlNFVCcgOiBOWFJSU0VULAorICAgICdOT1RBVVRIJyA6
IE5PVEFVVEgsCisgICAgJ05PVFpPTkUnIDogTk9UWk9ORSwKKyAgICAnQkFEVkVSUycgOiBCQURW
RVJTCit9CisKKyMgV2UgY29uc3RydWN0IHRoZSBpbnZlcnNlIG1hcHBpbmcgcHJvZ3JhbW1hdGlj
YWxseSB0byBlbnN1cmUgdGhhdCB3ZQorIyBjYW5ub3QgbWFrZSBhbnkgbWlzdGFrZXMgKGUuZy4g
b21pc3Npb25zLCBjdXQtYW5kLXBhc3RlIGVycm9ycykgdGhhdAorIyB3b3VsZCBjYXVzZSB0aGUg
bWFwcGluZyBub3QgdG8gYmUgYSB0cnVlIGludmVyc2UuCisKK19ieV92YWx1ZSA9IGRpY3QoWyh5
LCB4KSBmb3IgeCwgeSBpbiBfYnlfdGV4dC5pdGVyaXRlbXMoKV0pCisKKworY2xhc3MgVW5rbm93
blJjb2RlKGRucy5leGNlcHRpb24uRE5TRXhjZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgaWYgYW4g
cmNvZGUgaXMgdW5rbm93bi4iIiIKKyAgICBwYXNzCisKK2RlZiBmcm9tX3RleHQodGV4dCk6Cisg
ICAgIiIiQ29udmVydCB0ZXh0IGludG8gYW4gcmNvZGUuCisKKyAgICBAcGFyYW0gdGV4dDogdGhl
IHRleHVhbCByY29kZQorICAgIEB0eXBlIHRleHQ6IHN0cmluZworICAgIEByYWlzZXMgVW5rbm93
blJjb2RlOiB0aGUgcmNvZGUgaXMgdW5rbm93bgorICAgIEBydHlwZTogaW50CisgICAgIiIiCisK
KyAgICBpZiB0ZXh0LmlzZGlnaXQoKToKKyAgICAgICAgdiA9IGludCh0ZXh0KQorICAgICAgICBp
ZiB2ID49IDAgYW5kIHYgPD0gNDA5NToKKyAgICAgICAgICAgIHJldHVybiB2CisgICAgdiA9IF9i
eV90ZXh0LmdldCh0ZXh0LnVwcGVyKCkpCisgICAgaWYgdiBpcyBOb25lOgorICAgICAgICByYWlz
ZSBVbmtub3duUmNvZGUKKyAgICByZXR1cm4gdgorCitkZWYgZnJvbV9mbGFncyhmbGFncywgZWRu
c2ZsYWdzKToKKyAgICAiIiJSZXR1cm4gdGhlIHJjb2RlIHZhbHVlIGVuY29kZWQgYnkgZmxhZ3Mg
YW5kIGVkbnNmbGFncy4KKworICAgIEBwYXJhbSBmbGFnczogdGhlIEROUyBmbGFncworICAgIEB0
eXBlIGZsYWdzOiBpbnQKKyAgICBAcGFyYW0gZWRuc2ZsYWdzOiB0aGUgRUROUyBmbGFncworICAg
IEB0eXBlIGVkbnNmbGFnczogaW50CisgICAgQHJhaXNlcyBWYWx1ZUVycm9yOiByY29kZSBpcyA8
IDAgb3IgPiA0MDk1CisgICAgQHJ0eXBlOiBpbnQKKyAgICAiIiIKKworICAgIHZhbHVlID0gKGZs
YWdzICYgMHgwMDBmKSB8ICgoZWRuc2ZsYWdzID4+IDIwKSAmIDB4ZmYwKQorICAgIGlmIHZhbHVl
IDwgMCBvciB2YWx1ZSA+IDQwOTU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Jjb2RlIG11
c3QgYmUgPj0gMCBhbmQgPD0gNDA5NScpCisgICAgcmV0dXJuIHZhbHVlCisKK2RlZiB0b19mbGFn
cyh2YWx1ZSk6CisgICAgIiIiUmV0dXJuIGEgKGZsYWdzLCBlZG5zZmxhZ3MpIHR1cGxlIHdoaWNo
IGVuY29kZXMgdGhlIHJjb2RlLgorCisgICAgQHBhcmFtIHZhbHVlOiB0aGUgcmNvZGUKKyAgICBA
dHlwZSB2YWx1ZTogaW50CisgICAgQHJhaXNlcyBWYWx1ZUVycm9yOiByY29kZSBpcyA8IDAgb3Ig
PiA0MDk1CisgICAgQHJ0eXBlOiAoaW50LCBpbnQpIHR1cGxlCisgICAgIiIiCisKKyAgICBpZiB2
YWx1ZSA8IDAgb3IgdmFsdWUgPiA0MDk1OgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdyY29k
ZSBtdXN0IGJlID49IDAgYW5kIDw9IDQwOTUnKQorICAgIHYgPSB2YWx1ZSAmIDB4ZgorICAgIGV2
ID0gbG9uZyh2YWx1ZSAmIDB4ZmYwKSA8PCAyMAorICAgIHJldHVybiAodiwgZXYpCisKK2RlZiB0
b190ZXh0KHZhbHVlKToKKyAgICAiIiJDb252ZXJ0IHJjb2RlIGludG8gdGV4dC4KKworICAgIEBw
YXJhbSB2YWx1ZTogdGhlIHJjb2RlCisgICAgQHR5cGUgdmFsdWU6IGludAorICAgIEBydHlwZTog
c3RyaW5nCisgICAgIiIiCisKKyAgICB0ZXh0ID0gX2J5X3ZhbHVlLmdldCh2YWx1ZSkKKyAgICBp
ZiB0ZXh0IGlzIE5vbmU6CisgICAgICAgIHRleHQgPSBzdHIodmFsdWUpCisgICAgcmV0dXJuIHRl
eHQKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkYXRhLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkYXRhLnB5
CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmRh
dGEucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDU2IEBACisjIENvcHlyaWdodCAoQykgMjAw
MS0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2Us
IGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRv
Y3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5
IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k
IHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRI
RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwg
V0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwg
SU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4g
Tk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJF
Q1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMg
V0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBX
SEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBU
T1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU
SEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKyIiIkROUyByZGF0YS4K
KworQHZhciBfcmRhdGFfbW9kdWxlczogQSBkaWN0aW9uYXJ5IG1hcHBpbmcgYSAocmRjbGFzcywg
cmR0eXBlKSB0dXBsZSB0bwordGhlIG1vZHVsZSB3aGljaCBpbXBsZW1lbnRzIHRoYXQgdHlwZS4K
K0B0eXBlIF9yZGF0YV9tb2R1bGVzOiBkaWN0CitAdmFyIF9tb2R1bGVfcHJlZml4OiBUaGUgcHJl
Zml4IHRvIHVzZSB3aGVuIGZvcm1pbmcgbW9kdWxlcyBuYW1lcy4gIFRoZQorZGVmYXVsdCBpcyAn
ZG5zLnJkdHlwZXMnLiAgQ2hhbmdpbmcgdGhpcyB2YWx1ZSB3aWxsIGJyZWFrIHRoZSBsaWJyYXJ5
LgorQHR5cGUgX21vZHVsZV9wcmVmaXg6IHN0cmluZworQHZhciBfaGV4X2NodW5rOiBBdCBtb3N0
IHRoaXMgbWFueSBvY3RldHMgdGhhdCB3aWxsIGJlIHJlcHJlc2VudGVkIGluIGVhY2gKK2NodW5r
IG9mIGhleHN0cmluZyB0aGF0IF9oZXhpZnkoKSBwcm9kdWNlcyBiZWZvcmUgd2hpdGVzcGFjZSBv
Y2N1cnMuCitAdHlwZSBfaGV4X2NodW5rOiBpbnQiIiIKKworaW1wb3J0IGNTdHJpbmdJTworCitp
bXBvcnQgZG5zLmV4Y2VwdGlvbgoraW1wb3J0IGRucy5yZGF0YWNsYXNzCitpbXBvcnQgZG5zLnJk
YXRhdHlwZQoraW1wb3J0IGRucy50b2tlbml6ZXIKKworX2hleF9jaHVua3NpemUgPSAzMgorCitk
ZWYgX2hleGlmeShkYXRhLCBjaHVua3NpemU9Tm9uZSk6CisgICAgIiIiQ29udmVydCBhIGJpbmFy
eSBzdHJpbmcgaW50byBpdHMgaGV4IGVuY29kaW5nLCBicm9rZW4gdXAgaW50byBjaHVua3MKKyAg
ICBvZiBJe2NodW5rc2l6ZX0gY2hhcmFjdGVycyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS4KKworICAg
IEBwYXJhbSBkYXRhOiB0aGUgYmluYXJ5IHN0cmluZworICAgIEB0eXBlIGRhdGE6IHN0cmluZwor
ICAgIEBwYXJhbSBjaHVua3NpemU6IHRoZSBjaHVuayBzaXplLiAgRGVmYXVsdCBpcyBMe2Rucy5y
ZGF0YS5faGV4X2NodW5rc2l6ZX0KKyAgICBAcnR5cGU6IHN0cmluZworICAgICIiIgorCisgICAg
aWYgY2h1bmtzaXplIGlzIE5vbmU6CisgICAgICAgIGNodW5rc2l6ZSA9IF9oZXhfY2h1bmtzaXpl
CisgICAgaGV4ID0gZGF0YS5lbmNvZGUoJ2hleF9jb2RlYycpCisgICAgbCA9IGxlbihoZXgpCisg
ICAgaWYgbCA+IGNodW5rc2l6ZToKKyAgICAgICAgY2h1bmtzID0gW10KKyAgICAgICAgaSA9IDAK
KyAgICAgICAgd2hpbGUgaSA8IGw6CisgICAgICAgICAgICBjaHVua3MuYXBwZW5kKGhleFtpIDog
aSArIGNodW5rc2l6ZV0pCisgICAgICAgICAgICBpICs9IGNodW5rc2l6ZQorICAgICAgICBoZXgg
PSAnICcuam9pbihjaHVua3MpCisgICAgcmV0dXJuIGhleAorCitfYmFzZTY0X2NodW5rc2l6ZSA9
IDMyCisKK2RlZiBfYmFzZTY0aWZ5KGRhdGEsIGNodW5rc2l6ZT1Ob25lKToKKyAgICAiIiJDb252
ZXJ0IGEgYmluYXJ5IHN0cmluZyBpbnRvIGl0cyBiYXNlNjQgZW5jb2RpbmcsIGJyb2tlbiB1cCBp
bnRvIGNodW5rcworICAgIG9mIEl7Y2h1bmtzaXplfSBjaGFyYWN0ZXJzIHNlcGFyYXRlZCBieSBh
IHNwYWNlLgorCisgICAgQHBhcmFtIGRhdGE6IHRoZSBiaW5hcnkgc3RyaW5nCisgICAgQHR5cGUg
ZGF0YTogc3RyaW5nCisgICAgQHBhcmFtIGNodW5rc2l6ZTogdGhlIGNodW5rIHNpemUuICBEZWZh
dWx0IGlzCisgICAgTHtkbnMucmRhdGEuX2Jhc2U2NF9jaHVua3NpemV9CisgICAgQHJ0eXBlOiBz
dHJpbmcKKyAgICAiIiIKKworICAgIGlmIGNodW5rc2l6ZSBpcyBOb25lOgorICAgICAgICBjaHVu
a3NpemUgPSBfYmFzZTY0X2NodW5rc2l6ZQorICAgIGI2NCA9IGRhdGEuZW5jb2RlKCdiYXNlNjRf
Y29kZWMnKQorICAgIGI2NCA9IGI2NC5yZXBsYWNlKCdcbicsICcnKQorICAgIGwgPSBsZW4oYjY0
KQorICAgIGlmIGwgPiBjaHVua3NpemU6CisgICAgICAgIGNodW5rcyA9IFtdCisgICAgICAgIGkg
PSAwCisgICAgICAgIHdoaWxlIGkgPCBsOgorICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChiNjRb
aSA6IGkgKyBjaHVua3NpemVdKQorICAgICAgICAgICAgaSArPSBjaHVua3NpemUKKyAgICAgICAg
YjY0ID0gJyAnLmpvaW4oY2h1bmtzKQorICAgIHJldHVybiBiNjQKKworX19lc2NhcGVkID0gewor
ICAgICciJyA6IFRydWUsCisgICAgJ1xcJyA6IFRydWUsCisgICAgfQorCitkZWYgX2VzY2FwaWZ5
KHFzdHJpbmcpOgorICAgICIiIkVzY2FwZSB0aGUgY2hhcmFjdGVycyBpbiBhIHF1b3RlZCBzdHJp
bmcgd2hpY2ggbmVlZCBpdC4KKworICAgIEBwYXJhbSBxc3RyaW5nOiB0aGUgc3RyaW5nCisgICAg
QHR5cGUgcXN0cmluZzogc3RyaW5nCisgICAgQHJldHVybnM6IHRoZSBlc2NhcGVkIHN0cmluZwor
ICAgIEBydHlwZTogc3RyaW5nCisgICAgIiIiCisKKyAgICB0ZXh0ID0gJycKKyAgICBmb3IgYyBp
biBxc3RyaW5nOgorICAgICAgICBpZiBjIGluIF9fZXNjYXBlZDoKKyAgICAgICAgICAgIHRleHQg
Kz0gJ1xcJyArIGMKKyAgICAgICAgZWxpZiBvcmQoYykgPj0gMHgyMCBhbmQgb3JkKGMpIDwgMHg3
RjoKKyAgICAgICAgICAgIHRleHQgKz0gYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGV4
dCArPSAnXFwlMDNkJyAlIG9yZChjKQorICAgIHJldHVybiB0ZXh0CisKK2RlZiBfdHJ1bmNhdGVf
Yml0bWFwKHdoYXQpOgorICAgICIiIkRldGVybWluZSB0aGUgaW5kZXggb2YgZ3JlYXRlc3QgYnl0
ZSB0aGF0IGlzbid0IGFsbCB6ZXJvcywgYW5kCisgICAgcmV0dXJuIHRoZSBiaXRtYXAgdGhhdCBj
b250YWlucyBhbGwgdGhlIGJ5dGVzIGxlc3MgdGhhbiB0aGF0IGluZGV4LgorCisgICAgQHBhcmFt
IHdoYXQ6IGEgc3RyaW5nIG9mIG9jdGV0cyByZXByZXNlbnRpbmcgYSBiaXRtYXAuCisgICAgQHR5
cGUgd2hhdDogc3RyaW5nCisgICAgQHJ0eXBlOiBzdHJpbmcKKyAgICAiIiIKKworICAgIGZvciBp
IGluIHhyYW5nZShsZW4od2hhdCkgLSAxLCAtMSwgLTEpOgorICAgICAgICBpZiB3aGF0W2ldICE9
ICdceDAwJzoKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuICcnLmpvaW4od2hhdFswIDog
aSArIDFdKQorCitjbGFzcyBSZGF0YShvYmplY3QpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIGFs
bCBETlMgcmRhdGEgdHlwZXMuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSBbJ3JkY2xhc3Mn
LCAncmR0eXBlJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZGNsYXNzLCByZHR5cGUpOgor
ICAgICAgICAiIiJJbml0aWFsaXplIGFuIHJkYXRhLgorICAgICAgICBAcGFyYW0gcmRjbGFzczog
VGhlIHJkYXRhIGNsYXNzCisgICAgICAgIEB0eXBlIHJkY2xhc3M6IGludAorICAgICAgICBAcGFy
YW0gcmR0eXBlOiBUaGUgcmRhdGEgdHlwZQorICAgICAgICBAdHlwZSByZHR5cGU6IGludAorICAg
ICAgICAiIiIKKworICAgICAgICBzZWxmLnJkY2xhc3MgPSByZGNsYXNzCisgICAgICAgIHNlbGYu
cmR0eXBlID0gcmR0eXBlCisKKyAgICBkZWYgY292ZXJzKHNlbGYpOgorICAgICAgICAiIiJETlMg
U0lHL1JSU0lHIHJkYXRhcyBhcHBseSB0byBhIHNwZWNpZmljIHR5cGU7IHRoaXMgdHlwZSBpcwor
ICAgICAgICByZXR1cm5lZCBieSB0aGUgY292ZXJzKCkgZnVuY3Rpb24uICBJZiB0aGUgcmRhdGEg
dHlwZSBpcyBub3QKKyAgICAgICAgU0lHIG9yIFJSU0lHLCBkbnMucmRhdGF0eXBlLk5PTkUgaXMg
cmV0dXJuZWQuICBUaGlzIGlzIHVzZWZ1bCB3aGVuCisgICAgICAgIGNyZWF0aW5nIHJkYXRhc2V0
cywgYWxsb3dpbmcgdGhlIHJkYXRhc2V0IHRvIGNvbnRhaW4gb25seSBSUlNJR3MKKyAgICAgICAg
b2YgYSBwYXJ0aWN1bGFyIHR5cGUsIGUuZy4gUlJTSUcoTlMpLgorICAgICAgICBAcnR5cGU6IGlu
dAorICAgICAgICAiIiIKKworICAgICAgICByZXR1cm4gZG5zLnJkYXRhdHlwZS5OT05FCisKKyAg
ICBkZWYgZXh0ZW5kZWRfcmRhdGF0eXBlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSAzMi1i
aXQgdHlwZSB2YWx1ZSwgdGhlIGxlYXN0IHNpZ25pZmljYW50IDE2IGJpdHMgb2YKKyAgICAgICAg
d2hpY2ggYXJlIHRoZSBvcmRpbmFyeSBETlMgdHlwZSwgYW5kIHRoZSB1cHBlciAxNiBiaXRzIG9m
IHdoaWNoIGFyZQorICAgICAgICB0aGUgImNvdmVyZWQiIHR5cGUsIGlmIGFueS4KKyAgICAgICAg
QHJ0eXBlOiBpbnQKKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dXJuIHNlbGYuY292ZXJzKCkg
PDwgMTYgfCBzZWxmLnJkdHlwZQorCisgICAgZGVmIHRvX3RleHQoc2VsZiwgb3JpZ2luPU5vbmUs
IHJlbGF0aXZpemU9VHJ1ZSwgKiprdyk6CisgICAgICAgICIiIkNvbnZlcnQgYW4gcmRhdGEgdG8g
dGV4dCBmb3JtYXQuCisgICAgICAgIEBydHlwZTogc3RyaW5nCisgICAgICAgICIiIgorICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgdG9fd2lyZShzZWxmLCBmaWxl
LCBjb21wcmVzcyA9IE5vbmUsIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICAiIiJDb252ZXJ0IGFu
IHJkYXRhIHRvIHdpcmUgZm9ybWF0LgorICAgICAgICBAcnR5cGU6IHN0cmluZworICAgICAgICAi
IiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgdG9fZGln
ZXN0YWJsZShzZWxmLCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAgIiIiQ29udmVydCByZGF0YSB0
byBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgZGlnZXN0aW5nIGluIGhhc2hlcy4gIFRoaXMKKyAgICAg
ICAgaXMgYWxzbyB0aGUgRE5TU0VDIGNhbm9uaWNhbCBmb3JtLiIiIgorICAgICAgICBmID0gY1N0
cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi50b193aXJlKGYsIE5vbmUsIG9yaWdpbikK
KyAgICAgICAgcmV0dXJuIGYuZ2V0dmFsdWUoKQorCisgICAgZGVmIHZhbGlkYXRlKHNlbGYpOgor
ICAgICAgICAiIiJDaGVjayB0aGF0IHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSByZGF0YSdz
IGZpZWxkcyBhcmUKKyAgICAgICAgdmFsaWQuICBJZiB5b3UgY2hhbmdlIGFuIHJkYXRhIGJ5IGFz
c2lnbmluZyB0byBpdHMgZmllbGRzLAorICAgICAgICBpdCBpcyBhIGdvb2QgaWRlYSB0byBjYWxs
IHZhbGlkYXRlKCkgd2hlbiB5b3UgYXJlIGRvbmUgbWFraW5nCisgICAgICAgIGNoYW5nZXMuCisg
ICAgICAgICIiIgorICAgICAgICBkbnMucmRhdGEuZnJvbV90ZXh0KHNlbGYucmRjbGFzcywgc2Vs
Zi5yZHR5cGUsIHNlbGYudG9fdGV4dCgpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAg
ICAgICBjb3ZlcnMgPSBzZWxmLmNvdmVycygpCisgICAgICAgIGlmIGNvdmVycyA9PSBkbnMucmRh
dGF0eXBlLk5PTkU6CisgICAgICAgICAgICBjdGV4dCA9ICcnCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBjdGV4dCA9ICcoJyArIGRucy5yZGF0YXR5cGUudG9fdGV4dChjb3ZlcnMpICsgJykn
CisgICAgICAgIHJldHVybiAnPEROUyAnICsgZG5zLnJkYXRhY2xhc3MudG9fdGV4dChzZWxmLnJk
Y2xhc3MpICsgJyAnICsgXAorICAgICAgICAgICAgICAgZG5zLnJkYXRhdHlwZS50b190ZXh0KHNl
bGYucmR0eXBlKSArIGN0ZXh0ICsgJyByZGF0YTogJyArIFwKKyAgICAgICAgICAgICAgIHN0cihz
ZWxmKSArICc+JworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
LnRvX3RleHQoKQorCisgICAgZGVmIF9jbXAoc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJDb21w
YXJlIGFuIHJkYXRhIHdpdGggYW5vdGhlciByZGF0YSBvZiB0aGUgc2FtZSByZHR5cGUgYW5kCisg
ICAgICAgIHJkY2xhc3MuICBSZXR1cm4gPCAwIGlmIHNlbGYgPCBvdGhlciBpbiB0aGUgRE5TU0VD
IG9yZGVyaW5nLAorICAgICAgICAwIGlmIHNlbGYgPT0gb3RoZXIsIGFuZCA+IDAgaWYgc2VsZiA+
IG90aGVyLgorICAgICAgICAiIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
CisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFu
Y2Uob3RoZXIsIFJkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBz
ZWxmLnJkY2xhc3MgIT0gb3RoZXIucmRjbGFzcyBvciBcCisgICAgICAgICAgIHNlbGYucmR0eXBl
ICE9IG90aGVyLnJkdHlwZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1
cm4gc2VsZi5fY21wKG90aGVyKSA9PSAwCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToK
KyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFJkYXRhKToKKyAgICAgICAgICAgIHJl
dHVybiBUcnVlCisgICAgICAgIGlmIHNlbGYucmRjbGFzcyAhPSBvdGhlci5yZGNsYXNzIG9yIFwK
KyAgICAgICAgICAgc2VsZi5yZHR5cGUgIT0gb3RoZXIucmR0eXBlOgorICAgICAgICAgICAgcmV0
dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgIT0gMAorCisgICAgZGVm
IF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBS
ZGF0YSkgb3IgXAorICAgICAgICAgICAgICAgc2VsZi5yZGNsYXNzICE9IG90aGVyLnJkY2xhc3Mg
b3IgXAorICAgICAgICAgICAgICAgc2VsZi5yZHR5cGUgIT0gb3RoZXIucmR0eXBlOgorICAgICAg
ICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3Ro
ZXIpIDwgMAorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBp
c2luc3RhbmNlKG90aGVyLCBSZGF0YSkgb3IgXAorICAgICAgICAgICAgICAgc2VsZi5yZGNsYXNz
ICE9IG90aGVyLnJkY2xhc3Mgb3IgXAorICAgICAgICAgICAgICAgc2VsZi5yZHR5cGUgIT0gb3Ro
ZXIucmR0eXBlOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJl
dHVybiBzZWxmLl9jbXAob3RoZXIpIDw9IDAKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIp
OgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgUmRhdGEpIG9yIFwKKyAgICAgICAg
ICAgICAgIHNlbGYucmRjbGFzcyAhPSBvdGhlci5yZGNsYXNzIG9yIFwKKyAgICAgICAgICAgICAg
IHNlbGYucmR0eXBlICE9IG90aGVyLnJkdHlwZToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBs
ZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA+PSAwCisKKyAgICBkZWYg
X19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFJk
YXRhKSBvciBcCisgICAgICAgICAgICAgICBzZWxmLnJkY2xhc3MgIT0gb3RoZXIucmRjbGFzcyBv
ciBcCisgICAgICAgICAgICAgICBzZWxmLnJkdHlwZSAhPSBvdGhlci5yZHR5cGU6CisgICAgICAg
ICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhl
cikgPiAwCisKKyAgICBkZWYgZnJvbV90ZXh0KGNscywgcmRjbGFzcywgcmR0eXBlLCB0b2ssIG9y
aWdpbiA9IE5vbmUsIHJlbGF0aXZpemUgPSBUcnVlKToKKyAgICAgICAgIiIiQnVpbGQgYW4gcmRh
dGEgb2JqZWN0IGZyb20gdGV4dCBmb3JtYXQuCisKKyAgICAgICAgQHBhcmFtIHJkY2xhc3M6IFRo
ZSByZGF0YSBjbGFzcworICAgICAgICBAdHlwZSByZGNsYXNzOiBpbnQKKyAgICAgICAgQHBhcmFt
IHJkdHlwZTogVGhlIHJkYXRhIHR5cGUKKyAgICAgICAgQHR5cGUgcmR0eXBlOiBpbnQKKyAgICAg
ICAgQHBhcmFtIHRvazogVGhlIHRva2VuaXplcgorICAgICAgICBAdHlwZSB0b2s6IGRucy50b2tl
bml6ZXIuVG9rZW5pemVyCisgICAgICAgIEBwYXJhbSBvcmlnaW46IFRoZSBvcmlnaW4gdG8gdXNl
IGZvciByZWxhdGl2ZSBuYW1lcworICAgICAgICBAdHlwZSBvcmlnaW46IGRucy5uYW1lLk5hbWUK
KyAgICAgICAgQHBhcmFtIHJlbGF0aXZpemU6IHNob3VsZCBuYW1lcyBiZSByZWxhdGl2aXplZD8K
KyAgICAgICAgQHR5cGUgcmVsYXRpdml6ZTogYm9vbAorICAgICAgICBAcnR5cGU6IGRucy5yZGF0
YS5SZGF0YSBpbnN0YW5jZQorICAgICAgICAiIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yCisKKyAgICBmcm9tX3RleHQgPSBjbGFzc21ldGhvZChmcm9tX3RleHQpCisKKyAg
ICBkZWYgZnJvbV93aXJlKGNscywgcmRjbGFzcywgcmR0eXBlLCB3aXJlLCBjdXJyZW50LCByZGxl
biwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgICIiIkJ1aWxkIGFuIHJkYXRhIG9iamVjdCBmcm9t
IHdpcmUgZm9ybWF0CisKKyAgICAgICAgQHBhcmFtIHJkY2xhc3M6IFRoZSByZGF0YSBjbGFzcwor
ICAgICAgICBAdHlwZSByZGNsYXNzOiBpbnQKKyAgICAgICAgQHBhcmFtIHJkdHlwZTogVGhlIHJk
YXRhIHR5cGUKKyAgICAgICAgQHR5cGUgcmR0eXBlOiBpbnQKKyAgICAgICAgQHBhcmFtIHdpcmU6
IFRoZSB3aXJlLWZvcm1hdCBtZXNzYWdlCisgICAgICAgIEB0eXBlIHdpcmU6IHN0cmluZworICAg
ICAgICBAcGFyYW0gY3VycmVudDogVGhlIG9mZmV0IGluIHdpcmUgb2YgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgcmRhdGEuCisgICAgICAgIEB0eXBlIGN1cnJlbnQ6IGludAorICAgICAgICBAcGFyYW0g
cmRsZW46IFRoZSBsZW5ndGggb2YgdGhlIHdpcmUtZm9ybWF0IHJkYXRhCisgICAgICAgIEB0eXBl
IHJkbGVuOiBpbnQKKyAgICAgICAgQHBhcmFtIG9yaWdpbjogVGhlIG9yaWdpbiB0byB1c2UgZm9y
IHJlbGF0aXZlIG5hbWVzCisgICAgICAgIEB0eXBlIG9yaWdpbjogZG5zLm5hbWUuTmFtZQorICAg
ICAgICBAcnR5cGU6IGRucy5yZGF0YS5SZGF0YSBpbnN0YW5jZQorICAgICAgICAiIiIKKworICAg
ICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBmcm9tX3dpcmUgPSBjbGFzc21l
dGhvZChmcm9tX3dpcmUpCisKKyAgICBkZWYgY2hvb3NlX3JlbGF0aXZpdHkoc2VsZiwgb3JpZ2lu
ID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUpOgorICAgICAgICAiIiJDb252ZXJ0IGFueSBkb21h
aW4gbmFtZXMgaW4gdGhlIHJkYXRhIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgcmVsYXRpdml6
YXRpb24uCisgICAgICAgICIiIgorCisgICAgICAgIHBhc3MKKworCitjbGFzcyBHZW5lcmljUmRh
dGEoUmRhdGEpOgorICAgICIiIkdlbmVyYXRlIFJkYXRhIENsYXNzCisKKyAgICBUaGlzIGNsYXNz
IGlzIHVzZWQgZm9yIHJkYXRhIHR5cGVzIGZvciB3aGljaCB3ZSBoYXZlIG5vIGJldHRlcgorICAg
IGltcGxlbWVudGF0aW9uLiAgSXQgaW1wbGVtZW50cyB0aGUgRE5TICJ1bmtub3duIFJScyIgc2No
ZW1lLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gWydkYXRhJ10KKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCByZGNsYXNzLCByZHR5cGUsIGRhdGEpOgorICAgICAgICBzdXBlcihHZW5lcmlj
UmRhdGEsIHNlbGYpLl9faW5pdF9fKHJkY2xhc3MsIHJkdHlwZSkKKyAgICAgICAgc2VsZi5kYXRh
ID0gZGF0YQorCisgICAgZGVmIHRvX3RleHQoc2VsZiwgb3JpZ2luPU5vbmUsIHJlbGF0aXZpemU9
VHJ1ZSwgKiprdyk6CisgICAgICAgIHJldHVybiByJ1wjICVkICcgJSBsZW4oc2VsZi5kYXRhKSAr
IF9oZXhpZnkoc2VsZi5kYXRhKQorCisgICAgZGVmIGZyb21fdGV4dChjbHMsIHJkY2xhc3MsIHJk
dHlwZSwgdG9rLCBvcmlnaW4gPSBOb25lLCByZWxhdGl2aXplID0gVHJ1ZSk6CisgICAgICAgIHRv
a2VuID0gdG9rLmdldCgpCisgICAgICAgIGlmIG5vdCB0b2tlbi5pc19pZGVudGlmaWVyKCkgb3Ig
dG9rZW4udmFsdWUgIT0gJ1wjJzoKKyAgICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uU3lu
dGF4RXJyb3IocidnZW5lcmljIHJkYXRhIGRvZXMgbm90IHN0YXJ0IHdpdGggXCMnKQorICAgICAg
ICBsZW5ndGggPSB0b2suZ2V0X2ludCgpCisgICAgICAgIGNodW5rcyA9IFtdCisgICAgICAgIHdo
aWxlIDE6CisgICAgICAgICAgICB0b2tlbiA9IHRvay5nZXQoKQorICAgICAgICAgICAgaWYgdG9r
ZW4uaXNfZW9sX29yX2VvZigpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBj
aHVua3MuYXBwZW5kKHRva2VuLnZhbHVlKQorICAgICAgICBoZXggPSAnJy5qb2luKGNodW5rcykK
KyAgICAgICAgZGF0YSA9IGhleC5kZWNvZGUoJ2hleF9jb2RlYycpCisgICAgICAgIGlmIGxlbihk
YXRhKSAhPSBsZW5ndGg6CisgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVy
cm9yKCdnZW5lcmljIHJkYXRhIGhleCBkYXRhIGhhcyB3cm9uZyBsZW5ndGgnKQorICAgICAgICBy
ZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlwZSwgZGF0YSkKKworICAgIGZyb21fdGV4dCA9IGNsYXNz
bWV0aG9kKGZyb21fdGV4dCkKKworICAgIGRlZiB0b193aXJlKHNlbGYsIGZpbGUsIGNvbXByZXNz
ID0gTm9uZSwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIGZpbGUud3JpdGUoc2VsZi5kYXRhKQor
CisgICAgZGVmIGZyb21fd2lyZShjbHMsIHJkY2xhc3MsIHJkdHlwZSwgd2lyZSwgY3VycmVudCwg
cmRsZW4sIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlw
ZSwgd2lyZVtjdXJyZW50IDogY3VycmVudCArIHJkbGVuXSkKKworICAgIGZyb21fd2lyZSA9IGNs
YXNzbWV0aG9kKGZyb21fd2lyZSkKKworICAgIGRlZiBfY21wKHNlbGYsIG90aGVyKToKKyAgICAg
ICAgcmV0dXJuIGNtcChzZWxmLmRhdGEsIG90aGVyLmRhdGEpCisKK19yZGF0YV9tb2R1bGVzID0g
e30KK19tb2R1bGVfcHJlZml4ID0gJ2Rucy5yZHR5cGVzJworCitkZWYgZ2V0X3JkYXRhX2NsYXNz
KHJkY2xhc3MsIHJkdHlwZSk6CisKKyAgICBkZWYgaW1wb3J0X21vZHVsZShuYW1lKToKKyAgICAg
ICAgbW9kID0gX19pbXBvcnRfXyhuYW1lKQorICAgICAgICBjb21wb25lbnRzID0gbmFtZS5zcGxp
dCgnLicpCisgICAgICAgIGZvciBjb21wIGluIGNvbXBvbmVudHNbMTpdOgorICAgICAgICAgICAg
bW9kID0gZ2V0YXR0cihtb2QsIGNvbXApCisgICAgICAgIHJldHVybiBtb2QKKworICAgIG1vZCA9
IF9yZGF0YV9tb2R1bGVzLmdldCgocmRjbGFzcywgcmR0eXBlKSkKKyAgICByZGNsYXNzX3RleHQg
PSBkbnMucmRhdGFjbGFzcy50b190ZXh0KHJkY2xhc3MpCisgICAgcmR0eXBlX3RleHQgPSBkbnMu
cmRhdGF0eXBlLnRvX3RleHQocmR0eXBlKQorICAgIHJkdHlwZV90ZXh0ID0gcmR0eXBlX3RleHQu
cmVwbGFjZSgnLScsICdfJykKKyAgICBpZiBub3QgbW9kOgorICAgICAgICBtb2QgPSBfcmRhdGFf
bW9kdWxlcy5nZXQoKGRucy5yZGF0YXR5cGUuQU5ZLCByZHR5cGUpKQorICAgICAgICBpZiBub3Qg
bW9kOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZCA9IGltcG9ydF9tb2R1
bGUoJy4nLmpvaW4oW19tb2R1bGVfcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJkY2xhc3NfdGV4dCwgcmR0eXBlX3RleHRdKSkKKyAgICAgICAg
ICAgICAgICBfcmRhdGFfbW9kdWxlc1socmRjbGFzcywgcmR0eXBlKV0gPSBtb2QKKyAgICAgICAg
ICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgICAgIG1vZCA9IGltcG9ydF9tb2R1bGUoJy4nLmpvaW4oW19tb2R1bGVfcHJlZml4LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQU5ZJywg
cmR0eXBlX3RleHRdKSkKKyAgICAgICAgICAgICAgICAgICAgX3JkYXRhX21vZHVsZXNbKGRucy5y
ZGF0YWNsYXNzLkFOWSwgcmR0eXBlKV0gPSBtb2QKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1w
b3J0RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIG1vZCA9IE5vbmUKKyAgICBpZiBtb2Q6Cisg
ICAgICAgIGNscyA9IGdldGF0dHIobW9kLCByZHR5cGVfdGV4dCkKKyAgICBlbHNlOgorICAgICAg
ICBjbHMgPSBHZW5lcmljUmRhdGEKKyAgICByZXR1cm4gY2xzCisKK2RlZiBmcm9tX3RleHQocmRj
bGFzcywgcmR0eXBlLCB0b2ssIG9yaWdpbiA9IE5vbmUsIHJlbGF0aXZpemUgPSBUcnVlKToKKyAg
ICAiIiJCdWlsZCBhbiByZGF0YSBvYmplY3QgZnJvbSB0ZXh0IGZvcm1hdC4KKworICAgIFRoaXMg
ZnVuY3Rpb24gYXR0ZW1wdHMgdG8gZHluYW1pY2FsbHkgbG9hZCBhIGNsYXNzIHdoaWNoCisgICAg
aW1wbGVtZW50cyB0aGUgc3BlY2lmaWVkIHJkYXRhIGNsYXNzIGFuZCB0eXBlLiAgSWYgdGhlcmUg
aXMgbm8KKyAgICBjbGFzcy1hbmQtdHlwZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgdGhlIEdl
bmVyaWNSZGF0YSBjbGFzcworICAgIGlzIHVzZWQuCisKKyAgICBPbmNlIGEgY2xhc3MgaXMgY2hv
c2VuLCBpdHMgZnJvbV90ZXh0KCkgY2xhc3MgbWV0aG9kIGlzIGNhbGxlZAorICAgIHdpdGggdGhl
IHBhcmFtZXRlcnMgdG8gdGhpcyBmdW5jdGlvbi4KKworICAgIEBwYXJhbSByZGNsYXNzOiBUaGUg
cmRhdGEgY2xhc3MKKyAgICBAdHlwZSByZGNsYXNzOiBpbnQKKyAgICBAcGFyYW0gcmR0eXBlOiBU
aGUgcmRhdGEgdHlwZQorICAgIEB0eXBlIHJkdHlwZTogaW50CisgICAgQHBhcmFtIHRvazogVGhl
IHRva2VuaXplcgorICAgIEB0eXBlIHRvazogZG5zLnRva2VuaXplci5Ub2tlbml6ZXIKKyAgICBA
cGFyYW0gb3JpZ2luOiBUaGUgb3JpZ2luIHRvIHVzZSBmb3IgcmVsYXRpdmUgbmFtZXMKKyAgICBA
dHlwZSBvcmlnaW46IGRucy5uYW1lLk5hbWUKKyAgICBAcGFyYW0gcmVsYXRpdml6ZTogU2hvdWxk
IG5hbWVzIGJlIHJlbGF0aXZpemVkPworICAgIEB0eXBlIHJlbGF0aXZpemU6IGJvb2wKKyAgICBA
cnR5cGU6IGRucy5yZGF0YS5SZGF0YSBpbnN0YW5jZSIiIgorCisgICAgaWYgaXNpbnN0YW5jZSh0
b2ssIHN0cik6CisgICAgICAgIHRvayA9IGRucy50b2tlbml6ZXIuVG9rZW5pemVyKHRvaykKKyAg
ICBjbHMgPSBnZXRfcmRhdGFfY2xhc3MocmRjbGFzcywgcmR0eXBlKQorICAgIGlmIGNscyAhPSBH
ZW5lcmljUmRhdGE6CisgICAgICAgICMgcGVlayBhdCBmaXJzdCB0b2tlbgorICAgICAgICB0b2tl
biA9IHRvay5nZXQoKQorICAgICAgICB0b2sudW5nZXQodG9rZW4pCisgICAgICAgIGlmIHRva2Vu
LmlzX2lkZW50aWZpZXIoKSBhbmQgXAorICAgICAgICAgICB0b2tlbi52YWx1ZSA9PSByJ1wjJzoK
KyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgS25vd24gdHlwZSB1c2luZyB0aGUgZ2VuZXJp
YyBzeW50YXguICBFeHRyYWN0IHRoZQorICAgICAgICAgICAgIyB3aXJlIGZvcm0gZnJvbSB0aGUg
Z2VuZXJpYyBzeW50YXgsIGFuZCB0aGVuIHJ1bgorICAgICAgICAgICAgIyBmcm9tX3dpcmUgb24g
aXQuCisgICAgICAgICAgICAjCisgICAgICAgICAgICByZGF0YSA9IEdlbmVyaWNSZGF0YS5mcm9t
X3RleHQocmRjbGFzcywgcmR0eXBlLCB0b2ssIG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2aXplKQorICAgICAgICAgICAgcmV0dXJuIGZy
b21fd2lyZShyZGNsYXNzLCByZHR5cGUsIHJkYXRhLmRhdGEsIDAsIGxlbihyZGF0YS5kYXRhKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luKQorICAgIHJldHVybiBjbHMuZnJv
bV90ZXh0KHJkY2xhc3MsIHJkdHlwZSwgdG9rLCBvcmlnaW4sIHJlbGF0aXZpemUpCisKK2RlZiBm
cm9tX3dpcmUocmRjbGFzcywgcmR0eXBlLCB3aXJlLCBjdXJyZW50LCByZGxlbiwgb3JpZ2luID0g
Tm9uZSk6CisgICAgIiIiQnVpbGQgYW4gcmRhdGEgb2JqZWN0IGZyb20gd2lyZSBmb3JtYXQKKwor
ICAgIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gZHluYW1pY2FsbHkgbG9hZCBhIGNsYXNzIHdo
aWNoCisgICAgaW1wbGVtZW50cyB0aGUgc3BlY2lmaWVkIHJkYXRhIGNsYXNzIGFuZCB0eXBlLiAg
SWYgdGhlcmUgaXMgbm8KKyAgICBjbGFzcy1hbmQtdHlwZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlv
biwgdGhlIEdlbmVyaWNSZGF0YSBjbGFzcworICAgIGlzIHVzZWQuCisKKyAgICBPbmNlIGEgY2xh
c3MgaXMgY2hvc2VuLCBpdHMgZnJvbV93aXJlKCkgY2xhc3MgbWV0aG9kIGlzIGNhbGxlZAorICAg
IHdpdGggdGhlIHBhcmFtZXRlcnMgdG8gdGhpcyBmdW5jdGlvbi4KKworICAgIEBwYXJhbSByZGNs
YXNzOiBUaGUgcmRhdGEgY2xhc3MKKyAgICBAdHlwZSByZGNsYXNzOiBpbnQKKyAgICBAcGFyYW0g
cmR0eXBlOiBUaGUgcmRhdGEgdHlwZQorICAgIEB0eXBlIHJkdHlwZTogaW50CisgICAgQHBhcmFt
IHdpcmU6IFRoZSB3aXJlLWZvcm1hdCBtZXNzYWdlCisgICAgQHR5cGUgd2lyZTogc3RyaW5nCisg
ICAgQHBhcmFtIGN1cnJlbnQ6IFRoZSBvZmZldCBpbiB3aXJlIG9mIHRoZSBiZWdpbm5pbmcgb2Yg
dGhlIHJkYXRhLgorICAgIEB0eXBlIGN1cnJlbnQ6IGludAorICAgIEBwYXJhbSByZGxlbjogVGhl
IGxlbmd0aCBvZiB0aGUgd2lyZS1mb3JtYXQgcmRhdGEKKyAgICBAdHlwZSByZGxlbjogaW50Cisg
ICAgQHBhcmFtIG9yaWdpbjogVGhlIG9yaWdpbiB0byB1c2UgZm9yIHJlbGF0aXZlIG5hbWVzCisg
ICAgQHR5cGUgb3JpZ2luOiBkbnMubmFtZS5OYW1lCisgICAgQHJ0eXBlOiBkbnMucmRhdGEuUmRh
dGEgaW5zdGFuY2UiIiIKKworICAgIGNscyA9IGdldF9yZGF0YV9jbGFzcyhyZGNsYXNzLCByZHR5
cGUpCisgICAgcmV0dXJuIGNscy5mcm9tX3dpcmUocmRjbGFzcywgcmR0eXBlLCB3aXJlLCBjdXJy
ZW50LCByZGxlbiwgb3JpZ2luKQpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0
eS9kbnMvcmRhdGFjbGFzcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3Ro
aXJkX3BhcnR5L2Rucy9yZGF0YWNsYXNzLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmRhdGFjbGFzcy5weQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcsIDIwMDksIDIwMTAgTm9taW51
bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJp
YnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBv
c2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhh
dCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQor
IyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB
UyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJE
IFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9N
IExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9G
IENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBP
VVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0Yg
VEhJUyBTT0ZUV0FSRS4KKworIiIiRE5TIFJkYXRhIENsYXNzZXMuCisKK0B2YXIgX2J5X3RleHQ6
IFRoZSByZGF0YSBjbGFzcyB0ZXh0dWFsIG5hbWUgdG8gdmFsdWUgbWFwcGluZworQHR5cGUgX2J5
X3RleHQ6IGRpY3QKK0B2YXIgX2J5X3ZhbHVlOiBUaGUgcmRhdGEgY2xhc3MgdmFsdWUgdG8gdGV4
dHVhbCBuYW1lIG1hcHBpbmcKK0B0eXBlIF9ieV92YWx1ZTogZGljdAorQHZhciBfbWV0YWNsYXNz
ZXM6IElmIGFuIHJkYXRhY2xhc3MgaXMgYSBtZXRhY2xhc3MsIHRoZXJlIHdpbGwgYmUgYSBtYXBw
aW5nCit3aG9zZSBrZXkgaXMgdGhlIHJkYXRhdHlwZSB2YWx1ZSBhbmQgd2hvc2UgdmFsdWUgaXMg
VHJ1ZSBpbiB0aGlzIGRpY3Rpb25hcnkuCitAdHlwZSBfbWV0YWNsYXNzZXM6IGRpY3QiIiIKKwor
aW1wb3J0IHJlCisKK2ltcG9ydCBkbnMuZXhjZXB0aW9uCisKK1JFU0VSVkVEMCA9IDAKK0lOID0g
MQorQ0ggPSAzCitIUyA9IDQKK05PTkUgPSAyNTQKK0FOWSA9IDI1NQorCitfYnlfdGV4dCA9IHsK
KyAgICAnUkVTRVJWRUQwJyA6IFJFU0VSVkVEMCwKKyAgICAnSU4nIDogSU4sCisgICAgJ0NIJyA6
IENILAorICAgICdIUycgOiBIUywKKyAgICAnTk9ORScgOiBOT05FLAorICAgICdBTlknIDogQU5Z
CisgICAgfQorCisjIFdlIGNvbnN0cnVjdCB0aGUgaW52ZXJzZSBtYXBwaW5nIHByb2dyYW1tYXRp
Y2FsbHkgdG8gZW5zdXJlIHRoYXQgd2UKKyMgY2Fubm90IG1ha2UgYW55IG1pc3Rha2VzIChlLmcu
IG9taXNzaW9ucywgY3V0LWFuZC1wYXN0ZSBlcnJvcnMpIHRoYXQKKyMgd291bGQgY2F1c2UgdGhl
IG1hcHBpbmcgbm90IHRvIGJlIHRydWUgaW52ZXJzZS4KKworX2J5X3ZhbHVlID0gZGljdChbKHks
IHgpIGZvciB4LCB5IGluIF9ieV90ZXh0Lml0ZXJpdGVtcygpXSkKKworIyBOb3cgdGhhdCB3ZSd2
ZSBidWlsdCB0aGUgaW52ZXJzZSBtYXAsIHdlIGNhbiBhZGQgY2xhc3MgYWxpYXNlcyB0bworIyB0
aGUgX2J5X3RleHQgbWFwcGluZy4KKworX2J5X3RleHQudXBkYXRlKHsKKyAgICAnSU5URVJORVQn
IDogSU4sCisgICAgJ0NIQU9TJyA6IENILAorICAgICdIRVNJT0QnIDogSFMKKyAgICB9KQorCitf
bWV0YWNsYXNzZXMgPSB7CisgICAgTk9ORSA6IFRydWUsCisgICAgQU5ZIDogVHJ1ZQorICAgIH0K
KworX3Vua25vd25fY2xhc3NfcGF0dGVybiA9IHJlLmNvbXBpbGUoJ0NMQVNTKFswLTldKykkJywg
cmUuSSk7CisKK2NsYXNzIFVua25vd25SZGF0YWNsYXNzKGRucy5leGNlcHRpb24uRE5TRXhjZXB0
aW9uKToKKyAgICAiIiJSYWlzZWQgd2hlbiBhIGNsYXNzIGlzIHVua25vd24uIiIiCisgICAgcGFz
cworCitkZWYgZnJvbV90ZXh0KHRleHQpOgorICAgICIiIkNvbnZlcnQgdGV4dCBpbnRvIGEgRE5T
IHJkYXRhIGNsYXNzIHZhbHVlLgorICAgIEBwYXJhbSB0ZXh0OiB0aGUgdGV4dAorICAgIEB0eXBl
IHRleHQ6IHN0cmluZworICAgIEBydHlwZTogaW50CisgICAgQHJhaXNlcyBkbnMucmRhdGFjbGFz
cy5Vbmtub3duUmRhdGFDbGFzczogdGhlIGNsYXNzIGlzIHVua25vd24KKyAgICBAcmFpc2VzIFZh
bHVlRXJyb3I6IHRoZSByZGF0YSBjbGFzcyB2YWx1ZSBpcyBub3QgPj0gMCBhbmQgPD0gNjU1MzUK
KyAgICAiIiIKKworICAgIHZhbHVlID0gX2J5X3RleHQuZ2V0KHRleHQudXBwZXIoKSkKKyAgICBp
ZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICBtYXRjaCA9IF91bmtub3duX2NsYXNzX3BhdHRlcm4u
bWF0Y2godGV4dCkKKyAgICAgICAgaWYgbWF0Y2ggPT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNl
IFVua25vd25SZGF0YWNsYXNzCisgICAgICAgIHZhbHVlID0gaW50KG1hdGNoLmdyb3VwKDEpKQor
ICAgICAgICBpZiB2YWx1ZSA8IDAgb3IgdmFsdWUgPiA2NTUzNToKKyAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoImNsYXNzIG11c3QgYmUgYmV0d2VlbiA+PSAwIGFuZCA8PSA2NTUzNSIpCisg
ICAgcmV0dXJuIHZhbHVlCisKK2RlZiB0b190ZXh0KHZhbHVlKToKKyAgICAiIiJDb252ZXJ0IGEg
RE5TIHJkYXRhIGNsYXNzIHRvIHRleHQuCisgICAgQHBhcmFtIHZhbHVlOiB0aGUgcmRhdGEgY2xh
c3MgdmFsdWUKKyAgICBAdHlwZSB2YWx1ZTogaW50CisgICAgQHJ0eXBlOiBzdHJpbmcKKyAgICBA
cmFpc2VzIFZhbHVlRXJyb3I6IHRoZSByZGF0YSBjbGFzcyB2YWx1ZSBpcyBub3QgPj0gMCBhbmQg
PD0gNjU1MzUKKyAgICAiIiIKKworICAgIGlmIHZhbHVlIDwgMCBvciB2YWx1ZSA+IDY1NTM1Ogor
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjbGFzcyBtdXN0IGJlIGJldHdlZW4gPj0gMCBhbmQg
PD0gNjU1MzUiKQorICAgIHRleHQgPSBfYnlfdmFsdWUuZ2V0KHZhbHVlKQorICAgIGlmIHRleHQg
aXMgTm9uZToKKyAgICAgICAgdGV4dCA9ICdDTEFTUycgKyBgdmFsdWVgCisgICAgcmV0dXJuIHRl
eHQKKworZGVmIGlzX21ldGFjbGFzcyhyZGNsYXNzKToKKyAgICAiIiJUcnVlIGlmIHRoZSBjbGFz
cyBpcyBhIG1ldGFjbGFzcy4KKyAgICBAcGFyYW0gcmRjbGFzczogdGhlIHJkYXRhIGNsYXNzCisg
ICAgQHR5cGUgcmRjbGFzczogaW50CisgICAgQHJ0eXBlOiBib29sIiIiCisKKyAgICBpZiBfbWV0
YWNsYXNzZXMuaGFzX2tleShyZGNsYXNzKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1
cm4gRmFsc2UKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkYXRh
c2V0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5z
L3JkYXRhc2V0LnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9w
YXJ0eS9kbnMvcmRhdGFzZXQucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzI5IEBACisjIENv
cHlyaWdodCAoQykgMjAwMS0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4KKyMKKyMgUGVy
bWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2Fy
ZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91
dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFsbCBj
b3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01JTlVN
IERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJF
IElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisjIEFO
WSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1Ig
QU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFU
QSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElH
RU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElOIENP
Tk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisK
KyIiIkROUyByZGF0YXNldHMgKGFuIHJkYXRhc2V0IGlzIGEgc2V0IG9mIHJkYXRhcyBvZiBhIGdp
dmVuIHR5cGUgYW5kIGNsYXNzKSIiIgorCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgU3RyaW5nSU8K
K2ltcG9ydCBzdHJ1Y3QKKworaW1wb3J0IGRucy5leGNlcHRpb24KK2ltcG9ydCBkbnMucmRhdGF0
eXBlCitpbXBvcnQgZG5zLnJkYXRhY2xhc3MKK2ltcG9ydCBkbnMucmRhdGEKK2ltcG9ydCBkbnMu
c2V0CisKKyMgZGVmaW5lIFNpbXBsZVNldCBoZXJlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0
eQorU2ltcGxlU2V0ID0gZG5zLnNldC5TZXQKKworY2xhc3MgRGlmZmVyaW5nQ292ZXJzKGRucy5l
eGNlcHRpb24uRE5TRXhjZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgaWYgYW4gYXR0ZW1wdCBpcyBt
YWRlIHRvIGFkZCBhIFNJRy9SUlNJRyB3aG9zZSBjb3ZlcmVkIHR5cGUKKyAgICBpcyBub3QgdGhl
IHNhbWUgYXMgdGhhdCBvZiB0aGUgb3RoZXIgcmRhdGFzIGluIHRoZSByZGF0YXNldC4iIiIKKyAg
ICBwYXNzCisKK2NsYXNzIEluY29tcGF0aWJsZVR5cGVzKGRucy5leGNlcHRpb24uRE5TRXhjZXB0
aW9uKToKKyAgICAiIiJSYWlzZWQgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGFkZCByZGF0YSBv
ZiBhbiBpbmNvbXBhdGlibGUgdHlwZS4iIiIKKyAgICBwYXNzCisKK2NsYXNzIFJkYXRhc2V0KGRu
cy5zZXQuU2V0KToKKyAgICAiIiJBIEROUyByZGF0YXNldC4KKworICAgIEBpdmFyIHJkY2xhc3M6
IFRoZSBjbGFzcyBvZiB0aGUgcmRhdGFzZXQKKyAgICBAdHlwZSByZGNsYXNzOiBpbnQKKyAgICBA
aXZhciByZHR5cGU6IFRoZSB0eXBlIG9mIHRoZSByZGF0YXNldAorICAgIEB0eXBlIHJkdHlwZTog
aW50CisgICAgQGl2YXIgY292ZXJzOiBUaGUgY292ZXJlZCB0eXBlLiAgVXN1YWxseSB0aGlzIHZh
bHVlIGlzCisgICAgZG5zLnJkYXRhdHlwZS5OT05FLCBidXQgaWYgdGhlIHJkdHlwZSBpcyBkbnMu
cmRhdGF0eXBlLlNJRyBvcgorICAgIGRucy5yZGF0YXR5cGUuUlJTSUcsIHRoZW4gdGhlIGNvdmVy
cyB2YWx1ZSB3aWxsIGJlIHRoZSByZGF0YQorICAgIHR5cGUgdGhlIFNJRy9SUlNJRyBjb3ZlcnMu
ICBUaGUgbGlicmFyeSB0cmVhdHMgdGhlIFNJRyBhbmQgUlJTSUcKKyAgICB0eXBlcyBhcyBpZiB0
aGV5IHdlcmUgYSBmYW1pbHkgb2YKKyAgICB0eXBlcywgZS5nLiBSUlNJRyhBKSwgUlJTSUcoTlMp
LCBSUlNJRyhTT0EpLiAgVGhpcyBtYWtlcyBSUlNJR3MgbXVjaAorICAgIGVhc2llciB0byB3b3Jr
IHdpdGggdGhhbiBpZiBSUlNJR3MgY292ZXJpbmcgZGlmZmVyZW50IHJkYXRhCisgICAgdHlwZXMg
d2VyZSBhZ2dyZWdhdGVkIGludG8gYSBzaW5nbGUgUlJTSUcgcmRhdGFzZXQuCisgICAgQHR5cGUg
Y292ZXJzOiBpbnQKKyAgICBAaXZhciB0dGw6IFRoZSBETlMgVFRMIChUaW1lIFRvIExpdmUpIHZh
bHVlCisgICAgQHR5cGUgdHRsOiBpbnQKKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9IFsncmRj
bGFzcycsICdyZHR5cGUnLCAnY292ZXJzJywgJ3R0bCddCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcmRjbGFzcywgcmR0eXBlLCBjb3ZlcnM9ZG5zLnJkYXRhdHlwZS5OT05FKToKKyAgICAgICAg
IiIiQ3JlYXRlIGEgbmV3IHJkYXRhc2V0IG9mIHRoZSBzcGVjaWZpZWQgY2xhc3MgYW5kIHR5cGUu
CisKKyAgICAgICAgQHNlZTogdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjbGFzcyBpbnN0YW5jZSB2
YXJpYWJsZXMgZm9yIHRoZQorICAgICAgICBtZWFuaW5nIG9mIEl7cmRjbGFzc30gYW5kIEl7cmR0
eXBlfSIiIgorCisgICAgICAgIHN1cGVyKFJkYXRhc2V0LCBzZWxmKS5fX2luaXRfXygpCisgICAg
ICAgIHNlbGYucmRjbGFzcyA9IHJkY2xhc3MKKyAgICAgICAgc2VsZi5yZHR5cGUgPSByZHR5cGUK
KyAgICAgICAgc2VsZi5jb3ZlcnMgPSBjb3ZlcnMKKyAgICAgICAgc2VsZi50dGwgPSAwCisKKyAg
ICBkZWYgX2Nsb25lKHNlbGYpOgorICAgICAgICBvYmogPSBzdXBlcihSZGF0YXNldCwgc2VsZiku
X2Nsb25lKCkKKyAgICAgICAgb2JqLnJkY2xhc3MgPSBzZWxmLnJkY2xhc3MKKyAgICAgICAgb2Jq
LnJkdHlwZSA9IHNlbGYucmR0eXBlCisgICAgICAgIG9iai5jb3ZlcnMgPSBzZWxmLmNvdmVycwor
ICAgICAgICBvYmoudHRsID0gc2VsZi50dGwKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVm
IHVwZGF0ZV90dGwoc2VsZiwgdHRsKToKKyAgICAgICAgIiIiU2V0IHRoZSBUVEwgb2YgdGhlIHJk
YXRhc2V0IHRvIGJlIHRoZSBsZXNzZXIgb2YgdGhlIHNldCdzIGN1cnJlbnQKKyAgICAgICAgVFRM
IG9yIHRoZSBzcGVjaWZpZWQgVFRMLiAgSWYgdGhlIHNldCBjb250YWlucyBubyByZGF0YXMsIHNl
dCB0aGUgVFRMCisgICAgICAgIHRvIHRoZSBzcGVjaWZpZWQgVFRMLgorICAgICAgICBAcGFyYW0g
dHRsOiBUaGUgVFRMCisgICAgICAgIEB0eXBlIHR0bDogaW50IiIiCisKKyAgICAgICAgaWYgbGVu
KHNlbGYpID09IDA6CisgICAgICAgICAgICBzZWxmLnR0bCA9IHR0bAorICAgICAgICBlbGlmIHR0
bCA8IHNlbGYudHRsOgorICAgICAgICAgICAgc2VsZi50dGwgPSB0dGwKKworICAgIGRlZiBhZGQo
c2VsZiwgcmQsIHR0bD1Ob25lKToKKyAgICAgICAgIiIiQWRkIHRoZSBzcGVjaWZpZWQgcmRhdGEg
dG8gdGhlIHJkYXRhc2V0LgorCisgICAgICAgIElmIHRoZSBvcHRpb25hbCBJe3R0bH0gcGFyYW1l
dGVyIGlzIHN1cHBsaWVkLCB0aGVuCisgICAgICAgIHNlbGYudXBkYXRlX3R0bCh0dGwpIHdpbGwg
YmUgY2FsbGVkIHByaW9yIHRvIGFkZGluZyB0aGUgcmRhdGEuCisKKyAgICAgICAgQHBhcmFtIHJk
OiBUaGUgcmRhdGEKKyAgICAgICAgQHR5cGUgcmQ6IGRucy5yZGF0YS5SZGF0YSBvYmplY3QKKyAg
ICAgICAgQHBhcmFtIHR0bDogVGhlIFRUTAorICAgICAgICBAdHlwZSB0dGw6IGludCIiIgorCisg
ICAgICAgICMKKyAgICAgICAgIyBJZiB3ZSdyZSBhZGRpbmcgYSBzaWduYXR1cmUsIGRvIHNvbWUg
c3BlY2lhbCBoYW5kbGluZyB0bworICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIHNpZ25hdHVyZSBj
b3ZlcnMgdGhlIHNhbWUgdHlwZSBhcyB0aGUKKyAgICAgICAgIyBvdGhlciByZGF0YXMgaW4gdGhp
cyByZGF0YXNldC4gIElmIHRoaXMgaXMgdGhlIGZpcnN0IHJkYXRhCisgICAgICAgICMgaW4gdGhl
IHNldCwgaW5pdGlhbGl6ZSB0aGUgY292ZXJzIGZpZWxkLgorICAgICAgICAjCisgICAgICAgIGlm
IHNlbGYucmRjbGFzcyAhPSByZC5yZGNsYXNzIG9yIHNlbGYucmR0eXBlICE9IHJkLnJkdHlwZToK
KyAgICAgICAgICAgIHJhaXNlIEluY29tcGF0aWJsZVR5cGVzCisgICAgICAgIGlmIG5vdCB0dGwg
aXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYudXBkYXRlX3R0bCh0dGwpCisgICAgICAgIGlmIHNl
bGYucmR0eXBlID09IGRucy5yZGF0YXR5cGUuUlJTSUcgb3IgXAorICAgICAgICAgICBzZWxmLnJk
dHlwZSA9PSBkbnMucmRhdGF0eXBlLlNJRzoKKyAgICAgICAgICAgIGNvdmVycyA9IHJkLmNvdmVy
cygpCisgICAgICAgICAgICBpZiBsZW4oc2VsZikgPT0gMCBhbmQgc2VsZi5jb3ZlcnMgPT0gZG5z
LnJkYXRhdHlwZS5OT05FOgorICAgICAgICAgICAgICAgIHNlbGYuY292ZXJzID0gY292ZXJzCisg
ICAgICAgICAgICBlbGlmIHNlbGYuY292ZXJzICE9IGNvdmVyczoKKyAgICAgICAgICAgICAgICBy
YWlzZSBEaWZmZXJpbmdDb3ZlcnMKKyAgICAgICAgaWYgZG5zLnJkYXRhdHlwZS5pc19zaW5nbGV0
b24ocmQucmR0eXBlKSBhbmQgbGVuKHNlbGYpID4gMDoKKyAgICAgICAgICAgIHNlbGYuY2xlYXIo
KQorICAgICAgICBzdXBlcihSZGF0YXNldCwgc2VsZikuYWRkKHJkKQorCisgICAgZGVmIHVuaW9u
X3VwZGF0ZShzZWxmLCBvdGhlcik6CisgICAgICAgIHNlbGYudXBkYXRlX3R0bChvdGhlci50dGwp
CisgICAgICAgIHN1cGVyKFJkYXRhc2V0LCBzZWxmKS51bmlvbl91cGRhdGUob3RoZXIpCisKKyAg
ICBkZWYgaW50ZXJzZWN0aW9uX3VwZGF0ZShzZWxmLCBvdGhlcik6CisgICAgICAgIHNlbGYudXBk
YXRlX3R0bChvdGhlci50dGwpCisgICAgICAgIHN1cGVyKFJkYXRhc2V0LCBzZWxmKS5pbnRlcnNl
Y3Rpb25fdXBkYXRlKG90aGVyKQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBvdGhlcik6CisgICAg
ICAgICIiIkFkZCBhbGwgcmRhdGFzIGluIG90aGVyIHRvIHNlbGYuCisKKyAgICAgICAgQHBhcmFt
IG90aGVyOiBUaGUgcmRhdGFzZXQgZnJvbSB3aGljaCB0byB1cGRhdGUKKyAgICAgICAgQHR5cGUg
b3RoZXI6IGRucy5yZGF0YXNldC5SZGF0YXNldCBvYmplY3QiIiIKKworICAgICAgICBzZWxmLnVw
ZGF0ZV90dGwob3RoZXIudHRsKQorICAgICAgICBzdXBlcihSZGF0YXNldCwgc2VsZikudXBkYXRl
KG90aGVyKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNvdmVy
cyA9PSAwOgorICAgICAgICAgICAgY3RleHQgPSAnJworICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgY3RleHQgPSAnKCcgKyBkbnMucmRhdGF0eXBlLnRvX3RleHQoc2VsZi5jb3ZlcnMpICsgJykn
CisgICAgICAgIHJldHVybiAnPEROUyAnICsgZG5zLnJkYXRhY2xhc3MudG9fdGV4dChzZWxmLnJk
Y2xhc3MpICsgJyAnICsgXAorICAgICAgICAgICAgICAgZG5zLnJkYXRhdHlwZS50b190ZXh0KHNl
bGYucmR0eXBlKSArIGN0ZXh0ICsgJyByZGF0YXNldD4nCisKKyAgICBkZWYgX19zdHJfXyhzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYudG9fdGV4dCgpCisKKyAgICBkZWYgX19lcV9fKHNlbGYs
IG90aGVyKToKKyAgICAgICAgIiIiVHdvIHJkYXRhc2V0cyBhcmUgZXF1YWwgaWYgdGhleSBoYXZl
IHRoZSBzYW1lIGNsYXNzLCB0eXBlLCBhbmQKKyAgICAgICAgY292ZXJzLCBhbmQgY29udGFpbiB0
aGUgc2FtZSByZGF0YS4KKyAgICAgICAgQHJ0eXBlOiBib29sIiIiCisKKyAgICAgICAgaWYgbm90
IGlzaW5zdGFuY2Uob3RoZXIsIFJkYXRhc2V0KToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQor
ICAgICAgICBpZiBzZWxmLnJkY2xhc3MgIT0gb3RoZXIucmRjbGFzcyBvciBcCisgICAgICAgICAg
IHNlbGYucmR0eXBlICE9IG90aGVyLnJkdHlwZSBvciBcCisgICAgICAgICAgIHNlbGYuY292ZXJz
ICE9IG90aGVyLmNvdmVyczoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1
cm4gc3VwZXIoUmRhdGFzZXQsIHNlbGYpLl9fZXFfXyhvdGhlcikKKworICAgIGRlZiBfX25lX18o
c2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX19lcV9fKG90aGVyKQorCisg
ICAgZGVmIHRvX3RleHQoc2VsZiwgbmFtZT1Ob25lLCBvcmlnaW49Tm9uZSwgcmVsYXRpdml6ZT1U
cnVlLAorICAgICAgICAgICAgICAgIG92ZXJyaWRlX3JkY2xhc3M9Tm9uZSwgKiprdyk6CisgICAg
ICAgICIiIkNvbnZlcnQgdGhlIHJkYXRhc2V0IGludG8gRE5TIG1hc3RlciBmaWxlIGZvcm1hdC4K
KworICAgICAgICBAc2VlOiBMe2Rucy5uYW1lLk5hbWUuY2hvb3NlX3JlbGF0aXZpdHl9IGZvciBt
b3JlIGluZm9ybWF0aW9uCisgICAgICAgIG9uIGhvdyBJe29yaWdpbn0gYW5kIEl7cmVsYXRpdml6
ZX0gZGV0ZXJtaW5lIHRoZSB3YXkgbmFtZXMKKyAgICAgICAgYXJlIGVtaXR0ZWQuCisKKyAgICAg
ICAgQW55IGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlIHBhc3NlZCBvbiB0byB0aGUg
cmRhdGEKKyAgICAgICAgdG9fdGV4dCgpIG1ldGhvZC4KKworICAgICAgICBAcGFyYW0gbmFtZTog
SWYgbmFtZSBpcyBub3QgTm9uZSwgZW1pdCBhIFJScyB3aXRoIEl7bmFtZX0gYXMKKyAgICAgICAg
dGhlIG93bmVyIG5hbWUuCisgICAgICAgIEB0eXBlIG5hbWU6IGRucy5uYW1lLk5hbWUgb2JqZWN0
CisgICAgICAgIEBwYXJhbSBvcmlnaW46IFRoZSBvcmlnaW4gZm9yIHJlbGF0aXZlIG5hbWVzLCBv
ciBOb25lLgorICAgICAgICBAdHlwZSBvcmlnaW46IGRucy5uYW1lLk5hbWUgb2JqZWN0CisgICAg
ICAgIEBwYXJhbSByZWxhdGl2aXplOiBUcnVlIGlmIG5hbWVzIHNob3VsZCBuYW1lcyBiZSByZWxh
dGl2aXplZAorICAgICAgICBAdHlwZSByZWxhdGl2aXplOiBib29sIiIiCisgICAgICAgIGlmIG5v
dCBuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBuYW1lID0gbmFtZS5jaG9vc2VfcmVsYXRpdml0
eShvcmlnaW4sIHJlbGF0aXZpemUpCisgICAgICAgICAgICBudGV4dCA9IHN0cihuYW1lKQorICAg
ICAgICAgICAgcGFkID0gJyAnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBudGV4dCA9ICcn
CisgICAgICAgICAgICBwYWQgPSAnJworICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQor
ICAgICAgICBpZiBub3Qgb3ZlcnJpZGVfcmRjbGFzcyBpcyBOb25lOgorICAgICAgICAgICAgcmRj
bGFzcyA9IG92ZXJyaWRlX3JkY2xhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJkY2xh
c3MgPSBzZWxmLnJkY2xhc3MKKyAgICAgICAgaWYgbGVuKHNlbGYpID09IDA6CisgICAgICAgICAg
ICAjCisgICAgICAgICAgICAjIEVtcHR5IHJkYXRhc2V0cyBhcmUgdXNlZCBmb3IgdGhlIHF1ZXN0
aW9uIHNlY3Rpb24sIGFuZCBpbgorICAgICAgICAgICAgIyBzb21lIGR5bmFtaWMgdXBkYXRlcywg
c28gd2UgZG9uJ3QgbmVlZCB0byBwcmludCBvdXQgdGhlIFRUTAorICAgICAgICAgICAgIyAod2hp
Y2ggaXMgbWVhbmluZ2xlc3MgYW55d2F5KS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIHBy
aW50ID4+IHMsICclcyVzJXMgJXMnICUgKG50ZXh0LCBwYWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkbnMucmRhdGFjbGFzcy50b190ZXh0KHJkY2xhc3MpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5zLnJkYXRhdHlwZS50b190ZXh0
KHNlbGYucmR0eXBlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciByZCBpbiBzZWxm
OgorICAgICAgICAgICAgICAgIHByaW50ID4+IHMsICclcyVzJWQgJXMgJXMgJXMnICUgXAorICAg
ICAgICAgICAgICAgICAgICAgIChudGV4dCwgcGFkLCBzZWxmLnR0bCwgZG5zLnJkYXRhY2xhc3Mu
dG9fdGV4dChyZGNsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZG5zLnJkYXRhdHlwZS50
b190ZXh0KHNlbGYucmR0eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmQudG9fdGV4dChv
cmlnaW49b3JpZ2luLCByZWxhdGl2aXplPXJlbGF0aXZpemUsICoqa3cpKQorICAgICAgICAjCisg
ICAgICAgICMgV2Ugc3RyaXAgb2ZmIHRoZSBmaW5hbCBcbiBmb3IgdGhlIGNhbGxlcidzIGNvbnZl
bmllbmNlIGluIHByaW50aW5nCisgICAgICAgICMKKyAgICAgICAgcmV0dXJuIHMuZ2V0dmFsdWUo
KVs6LTFdCisKKyAgICBkZWYgdG9fd2lyZShzZWxmLCBuYW1lLCBmaWxlLCBjb21wcmVzcz1Ob25l
LCBvcmlnaW49Tm9uZSwKKyAgICAgICAgICAgICAgICBvdmVycmlkZV9yZGNsYXNzPU5vbmUsIHdh
bnRfc2h1ZmZsZT1UcnVlKToKKyAgICAgICAgIiIiQ29udmVydCB0aGUgcmRhdGFzZXQgdG8gd2ly
ZSBmb3JtYXQuCisKKyAgICAgICAgQHBhcmFtIG5hbWU6IFRoZSBvd25lciBuYW1lIG9mIHRoZSBS
UnNldCB0aGF0IHdpbGwgYmUgZW1pdHRlZAorICAgICAgICBAdHlwZSBuYW1lOiBkbnMubmFtZS5O
YW1lIG9iamVjdAorICAgICAgICBAcGFyYW0gZmlsZTogVGhlIGZpbGUgdG8gd2hpY2ggdGhlIHdp
cmUgZm9ybWF0IGRhdGEgd2lsbCBiZSBhcHBlbmRlZAorICAgICAgICBAdHlwZSBmaWxlOiBmaWxl
CisgICAgICAgIEBwYXJhbSBjb21wcmVzczogVGhlIGNvbXByZXNzaW9uIHRhYmxlIHRvIHVzZTsg
dGhlIGRlZmF1bHQgaXMgTm9uZS4KKyAgICAgICAgQHR5cGUgY29tcHJlc3M6IGRpY3QKKyAgICAg
ICAgQHBhcmFtIG9yaWdpbjogVGhlIG9yaWdpbiB0byBiZSBhcHBlbmRlZCB0byBhbnkgcmVsYXRp
dmUgbmFtZXMgd2hlbgorICAgICAgICB0aGV5IGFyZSBlbWl0dGVkLiAgVGhlIGRlZmF1bHQgaXMg
Tm9uZS4KKyAgICAgICAgQHJldHVybnM6IHRoZSBudW1iZXIgb2YgcmVjb3JkcyBlbWl0dGVkCisg
ICAgICAgIEBydHlwZTogaW50CisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCBvdmVycmlk
ZV9yZGNsYXNzIGlzIE5vbmU6CisgICAgICAgICAgICByZGNsYXNzID0gIG92ZXJyaWRlX3JkY2xh
c3MKKyAgICAgICAgICAgIHdhbnRfc2h1ZmZsZSA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICByZGNsYXNzID0gc2VsZi5yZGNsYXNzCisgICAgICAgIGZpbGUuc2VlaygwLCAyKQor
ICAgICAgICBpZiBsZW4oc2VsZikgPT0gMDoKKyAgICAgICAgICAgIG5hbWUudG9fd2lyZShmaWxl
LCBjb21wcmVzcywgb3JpZ2luKQorICAgICAgICAgICAgc3R1ZmYgPSBzdHJ1Y3QucGFjaygiIUhI
SUgiLCBzZWxmLnJkdHlwZSwgcmRjbGFzcywgMCwgMCkKKyAgICAgICAgICAgIGZpbGUud3JpdGUo
c3R1ZmYpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
aWYgd2FudF9zaHVmZmxlOgorICAgICAgICAgICAgICAgIGwgPSBsaXN0KHNlbGYpCisgICAgICAg
ICAgICAgICAgcmFuZG9tLnNodWZmbGUobCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgbCA9IHNlbGYKKyAgICAgICAgICAgIGZvciByZCBpbiBsOgorICAgICAgICAgICAgICAg
IG5hbWUudG9fd2lyZShmaWxlLCBjb21wcmVzcywgb3JpZ2luKQorICAgICAgICAgICAgICAgIHN0
dWZmID0gc3RydWN0LnBhY2soIiFISElIIiwgc2VsZi5yZHR5cGUsIHJkY2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnR0bCwgMCkKKyAgICAgICAgICAgICAg
ICBmaWxlLndyaXRlKHN0dWZmKQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gZmlsZS50ZWxsKCkK
KyAgICAgICAgICAgICAgICByZC50b193aXJlKGZpbGUsIGNvbXByZXNzLCBvcmlnaW4pCisgICAg
ICAgICAgICAgICAgZW5kID0gZmlsZS50ZWxsKCkKKyAgICAgICAgICAgICAgICBhc3NlcnQgZW5k
IC0gc3RhcnQgPCA2NTUzNgorICAgICAgICAgICAgICAgIGZpbGUuc2VlayhzdGFydCAtIDIpCisg
ICAgICAgICAgICAgICAgc3R1ZmYgPSBzdHJ1Y3QucGFjaygiIUgiLCBlbmQgLSBzdGFydCkKKyAg
ICAgICAgICAgICAgICBmaWxlLndyaXRlKHN0dWZmKQorICAgICAgICAgICAgICAgIGZpbGUuc2Vl
aygwLCAyKQorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmKQorCisgICAgZGVmIG1hdGNoKHNl
bGYsIHJkY2xhc3MsIHJkdHlwZSwgY292ZXJzKToKKyAgICAgICAgIiIiUmV0dXJucyBUcnVlIGlm
IHRoaXMgcmRhdGFzZXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNsYXNzLCB0eXBlLAorICAgICAg
ICBhbmQgY292ZXJzIiIiCisgICAgICAgIGlmIHNlbGYucmRjbGFzcyA9PSByZGNsYXNzIGFuZCBc
CisgICAgICAgICAgIHNlbGYucmR0eXBlID09IHJkdHlwZSBhbmQgXAorICAgICAgICAgICBzZWxm
LmNvdmVycyA9PSBjb3ZlcnM6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1
cm4gRmFsc2UKKworZGVmIGZyb21fdGV4dF9saXN0KHJkY2xhc3MsIHJkdHlwZSwgdHRsLCB0ZXh0
X3JkYXRhcyk6CisgICAgIiIiQ3JlYXRlIGFuIHJkYXRhc2V0IHdpdGggdGhlIHNwZWNpZmllZCBj
bGFzcywgdHlwZSwgYW5kIFRUTCwgYW5kIHdpdGgKKyAgICB0aGUgc3BlY2lmaWVkIGxpc3Qgb2Yg
cmRhdGFzIGluIHRleHQgZm9ybWF0LgorCisgICAgQHJ0eXBlOiBkbnMucmRhdGFzZXQuUmRhdGFz
ZXQgb2JqZWN0CisgICAgIiIiCisKKyAgICBpZiBpc2luc3RhbmNlKHJkY2xhc3MsIHN0cik6Cisg
ICAgICAgIHJkY2xhc3MgPSBkbnMucmRhdGFjbGFzcy5mcm9tX3RleHQocmRjbGFzcykKKyAgICBp
ZiBpc2luc3RhbmNlKHJkdHlwZSwgc3RyKToKKyAgICAgICAgcmR0eXBlID0gZG5zLnJkYXRhdHlw
ZS5mcm9tX3RleHQocmR0eXBlKQorICAgIHIgPSBSZGF0YXNldChyZGNsYXNzLCByZHR5cGUpCisg
ICAgci51cGRhdGVfdHRsKHR0bCkKKyAgICBmb3IgdCBpbiB0ZXh0X3JkYXRhczoKKyAgICAgICAg
cmQgPSBkbnMucmRhdGEuZnJvbV90ZXh0KHIucmRjbGFzcywgci5yZHR5cGUsIHQpCisgICAgICAg
IHIuYWRkKHJkKQorICAgIHJldHVybiByCisKK2RlZiBmcm9tX3RleHQocmRjbGFzcywgcmR0eXBl
LCB0dGwsICp0ZXh0X3JkYXRhcyk6CisgICAgIiIiQ3JlYXRlIGFuIHJkYXRhc2V0IHdpdGggdGhl
IHNwZWNpZmllZCBjbGFzcywgdHlwZSwgYW5kIFRUTCwgYW5kIHdpdGgKKyAgICB0aGUgc3BlY2lm
aWVkIHJkYXRhcyBpbiB0ZXh0IGZvcm1hdC4KKworICAgIEBydHlwZTogZG5zLnJkYXRhc2V0LlJk
YXRhc2V0IG9iamVjdAorICAgICIiIgorCisgICAgcmV0dXJuIGZyb21fdGV4dF9saXN0KHJkY2xh
c3MsIHJkdHlwZSwgdHRsLCB0ZXh0X3JkYXRhcykKKworZGVmIGZyb21fcmRhdGFfbGlzdCh0dGws
IHJkYXRhcyk6CisgICAgIiIiQ3JlYXRlIGFuIHJkYXRhc2V0IHdpdGggdGhlIHNwZWNpZmllZCBU
VEwsIGFuZCB3aXRoCisgICAgdGhlIHNwZWNpZmllZCBsaXN0IG9mIHJkYXRhIG9iamVjdHMuCisK
KyAgICBAcnR5cGU6IGRucy5yZGF0YXNldC5SZGF0YXNldCBvYmplY3QKKyAgICAiIiIKKworICAg
IGlmIGxlbihyZGF0YXMpID09IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInJkYXRhIGxp
c3QgbXVzdCBub3QgYmUgZW1wdHkiKQorICAgIHIgPSBOb25lCisgICAgZm9yIHJkIGluIHJkYXRh
czoKKyAgICAgICAgaWYgciBpcyBOb25lOgorICAgICAgICAgICAgciA9IFJkYXRhc2V0KHJkLnJk
Y2xhc3MsIHJkLnJkdHlwZSkKKyAgICAgICAgICAgIHIudXBkYXRlX3R0bCh0dGwpCisgICAgICAg
ICAgICBmaXJzdF90aW1lID0gRmFsc2UKKyAgICAgICAgci5hZGQocmQpCisgICAgcmV0dXJuIHIK
KworZGVmIGZyb21fcmRhdGEodHRsLCAqcmRhdGFzKToKKyAgICAiIiJDcmVhdGUgYW4gcmRhdGFz
ZXQgd2l0aCB0aGUgc3BlY2lmaWVkIFRUTCwgYW5kIHdpdGgKKyAgICB0aGUgc3BlY2lmaWVkIHJk
YXRhIG9iamVjdHMuCisKKyAgICBAcnR5cGU6IGRucy5yZGF0YXNldC5SZGF0YXNldCBvYmplY3QK
KyAgICAiIiIKKworICAgIHJldHVybiBmcm9tX3JkYXRhX2xpc3QodHRsLCByZGF0YXMpCkluZGV4
OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZGF0YXR5cGUucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmRhdGF0eXBlLnB5
CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmRh
dGF0eXBlLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzMiBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMDEtMjAwNywgMjAwOSwgMjAxMCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8g
dXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwor
IyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhl
cmVieSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIwor
IyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMg
QUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcg
QUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mu
IElOIE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwg
RElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VT
CisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklU
UywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RI
RVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ
VEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCisiIiJETlMgUmRh
dGEgVHlwZXMuCisKK0B2YXIgX2J5X3RleHQ6IFRoZSByZGF0YSB0eXBlIHRleHR1YWwgbmFtZSB0
byB2YWx1ZSBtYXBwaW5nCitAdHlwZSBfYnlfdGV4dDogZGljdAorQHZhciBfYnlfdmFsdWU6IFRo
ZSByZGF0YSB0eXBlIHZhbHVlIHRvIHRleHR1YWwgbmFtZSBtYXBwaW5nCitAdHlwZSBfYnlfdmFs
dWU6IGRpY3QKK0B2YXIgX21ldGF0eXBlczogSWYgYW4gcmRhdGF0eXBlIGlzIGEgbWV0YXR5cGUs
IHRoZXJlIHdpbGwgYmUgYSBtYXBwaW5nCit3aG9zZSBrZXkgaXMgdGhlIHJkYXRhdHlwZSB2YWx1
ZSBhbmQgd2hvc2UgdmFsdWUgaXMgVHJ1ZSBpbiB0aGlzIGRpY3Rpb25hcnkuCitAdHlwZSBfbWV0
YXR5cGVzOiBkaWN0CitAdmFyIF9zaW5nbGV0b25zOiBJZiBhbiByZGF0YXR5cGUgaXMgYSBzaW5n
bGV0b24sIHRoZXJlIHdpbGwgYmUgYSBtYXBwaW5nCit3aG9zZSBrZXkgaXMgdGhlIHJkYXRhdHlw
ZSB2YWx1ZSBhbmQgd2hvc2UgdmFsdWUgaXMgVHJ1ZSBpbiB0aGlzIGRpY3Rpb25hcnkuCitAdHlw
ZSBfc2luZ2xldG9uczogZGljdCIiIgorCitpbXBvcnQgcmUKKworaW1wb3J0IGRucy5leGNlcHRp
b24KKworTk9ORSA9IDAKK0EgPSAxCitOUyA9IDIKK01EID0gMworTUYgPSA0CitDTkFNRSA9IDUK
K1NPQSA9IDYKK01CID0gNworTUcgPSA4CitNUiA9IDkKK05VTEwgPSAxMAorV0tTID0gMTEKK1BU
UiA9IDEyCitISU5GTyA9IDEzCitNSU5GTyA9IDE0CitNWCA9IDE1CitUWFQgPSAxNgorUlAgPSAx
NworQUZTREIgPSAxOAorWDI1ID0gMTkKK0lTRE4gPSAyMAorUlQgPSAyMQorTlNBUCA9IDIyCitO
U0FQX1BUUiA9IDIzCitTSUcgPSAyNAorS0VZID0gMjUKK1BYID0gMjYKK0dQT1MgPSAyNworQUFB
QSA9IDI4CitMT0MgPSAyOQorTlhUID0gMzAKK1NSViA9IDMzCitOQVBUUiA9IDM1CitLWCA9IDM2
CitDRVJUID0gMzcKK0E2ID0gMzgKK0ROQU1FID0gMzkKK09QVCA9IDQxCitBUEwgPSA0MgorRFMg
PSA0MworU1NIRlAgPSA0NAorSVBTRUNLRVkgPSA0NQorUlJTSUcgPSA0NgorTlNFQyA9IDQ3CitE
TlNLRVkgPSA0OAorREhDSUQgPSA0OQorTlNFQzMgPSA1MAorTlNFQzNQQVJBTSA9IDUxCitISVAg
PSA1NQorU1BGID0gOTkKK1VOU1BFQyA9IDEwMworVEtFWSA9IDI0OQorVFNJRyA9IDI1MAorSVhG
UiA9IDI1MQorQVhGUiA9IDI1MgorTUFJTEIgPSAyNTMKK01BSUxBID0gMjU0CitBTlkgPSAyNTUK
K1RBID0gMzI3NjgKK0RMViA9IDMyNzY5CisKK19ieV90ZXh0ID0geworICAgICdOT05FJyA6IE5P
TkUsCisgICAgJ0EnIDogQSwKKyAgICAnTlMnIDogTlMsCisgICAgJ01EJyA6IE1ELAorICAgICdN
RicgOiBNRiwKKyAgICAnQ05BTUUnIDogQ05BTUUsCisgICAgJ1NPQScgOiBTT0EsCisgICAgJ01C
JyA6IE1CLAorICAgICdNRycgOiBNRywKKyAgICAnTVInIDogTVIsCisgICAgJ05VTEwnIDogTlVM
TCwKKyAgICAnV0tTJyA6IFdLUywKKyAgICAnUFRSJyA6IFBUUiwKKyAgICAnSElORk8nIDogSElO
Rk8sCisgICAgJ01JTkZPJyA6IE1JTkZPLAorICAgICdNWCcgOiBNWCwKKyAgICAnVFhUJyA6IFRY
VCwKKyAgICAnUlAnIDogUlAsCisgICAgJ0FGU0RCJyA6IEFGU0RCLAorICAgICdYMjUnIDogWDI1
LAorICAgICdJU0ROJyA6IElTRE4sCisgICAgJ1JUJyA6IFJULAorICAgICdOU0FQJyA6IE5TQVAs
CisgICAgJ05TQVAtUFRSJyA6IE5TQVBfUFRSLAorICAgICdTSUcnIDogU0lHLAorICAgICdLRVkn
IDogS0VZLAorICAgICdQWCcgOiBQWCwKKyAgICAnR1BPUycgOiBHUE9TLAorICAgICdBQUFBJyA6
IEFBQUEsCisgICAgJ0xPQycgOiBMT0MsCisgICAgJ05YVCcgOiBOWFQsCisgICAgJ1NSVicgOiBT
UlYsCisgICAgJ05BUFRSJyA6IE5BUFRSLAorICAgICdLWCcgOiBLWCwKKyAgICAnQ0VSVCcgOiBD
RVJULAorICAgICdBNicgOiBBNiwKKyAgICAnRE5BTUUnIDogRE5BTUUsCisgICAgJ09QVCcgOiBP
UFQsCisgICAgJ0FQTCcgOiBBUEwsCisgICAgJ0RTJyA6IERTLAorICAgICdTU0hGUCcgOiBTU0hG
UCwKKyAgICAnSVBTRUNLRVknIDogSVBTRUNLRVksCisgICAgJ1JSU0lHJyA6IFJSU0lHLAorICAg
ICdOU0VDJyA6IE5TRUMsCisgICAgJ0ROU0tFWScgOiBETlNLRVksCisgICAgJ0RIQ0lEJyA6IERI
Q0lELAorICAgICdOU0VDMycgOiBOU0VDMywKKyAgICAnTlNFQzNQQVJBTScgOiBOU0VDM1BBUkFN
LAorICAgICdISVAnIDogSElQLAorICAgICdTUEYnIDogU1BGLAorICAgICdVTlNQRUMnIDogVU5T
UEVDLAorICAgICdUS0VZJyA6IFRLRVksCisgICAgJ1RTSUcnIDogVFNJRywKKyAgICAnSVhGUicg
OiBJWEZSLAorICAgICdBWEZSJyA6IEFYRlIsCisgICAgJ01BSUxCJyA6IE1BSUxCLAorICAgICdN
QUlMQScgOiBNQUlMQSwKKyAgICAnQU5ZJyA6IEFOWSwKKyAgICAnVEEnIDogVEEsCisgICAgJ0RM
VicgOiBETFYsCisgICAgfQorCisjIFdlIGNvbnN0cnVjdCB0aGUgaW52ZXJzZSBtYXBwaW5nIHBy
b2dyYW1tYXRpY2FsbHkgdG8gZW5zdXJlIHRoYXQgd2UKKyMgY2Fubm90IG1ha2UgYW55IG1pc3Rh
a2VzIChlLmcuIG9taXNzaW9ucywgY3V0LWFuZC1wYXN0ZSBlcnJvcnMpIHRoYXQKKyMgd291bGQg
Y2F1c2UgdGhlIG1hcHBpbmcgbm90IHRvIGJlIHRydWUgaW52ZXJzZS4KKworX2J5X3ZhbHVlID0g
ZGljdChbKHksIHgpIGZvciB4LCB5IGluIF9ieV90ZXh0Lml0ZXJpdGVtcygpXSkKKworCitfbWV0
YXR5cGVzID0geworICAgIE9QVCA6IFRydWUKKyAgICB9CisKK19zaW5nbGV0b25zID0geworICAg
IFNPQSA6IFRydWUsCisgICAgTlhUIDogVHJ1ZSwKKyAgICBETkFNRSA6IFRydWUsCisgICAgTlNF
QyA6IFRydWUsCisgICAgIyBDTkFNRSBpcyB0ZWNobmljYWxseSBhIHNpbmdsZXRvbiwgYnV0IHdl
IGFsbG93IG11bHRpcGxlIENOQU1Fcy4KKyAgICB9CisKK191bmtub3duX3R5cGVfcGF0dGVybiA9
IHJlLmNvbXBpbGUoJ1RZUEUoWzAtOV0rKSQnLCByZS5JKTsKKworY2xhc3MgVW5rbm93blJkYXRh
dHlwZShkbnMuZXhjZXB0aW9uLkROU0V4Y2VwdGlvbik6CisgICAgIiIiUmFpc2VkIGlmIGEgdHlw
ZSBpcyB1bmtub3duLiIiIgorICAgIHBhc3MKKworZGVmIGZyb21fdGV4dCh0ZXh0KToKKyAgICAi
IiJDb252ZXJ0IHRleHQgaW50byBhIEROUyByZGF0YSB0eXBlIHZhbHVlLgorICAgIEBwYXJhbSB0
ZXh0OiB0aGUgdGV4dAorICAgIEB0eXBlIHRleHQ6IHN0cmluZworICAgIEByYWlzZXMgZG5zLnJk
YXRhdHlwZS5Vbmtub3duUmRhdGF0eXBlOiB0aGUgdHlwZSBpcyB1bmtub3duCisgICAgQHJhaXNl
cyBWYWx1ZUVycm9yOiB0aGUgcmRhdGEgdHlwZSB2YWx1ZSBpcyBub3QgPj0gMCBhbmQgPD0gNjU1
MzUKKyAgICBAcnR5cGU6IGludCIiIgorCisgICAgdmFsdWUgPSBfYnlfdGV4dC5nZXQodGV4dC51
cHBlcigpKQorICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgIG1hdGNoID0gX3Vua25vd25f
dHlwZV9wYXR0ZXJuLm1hdGNoKHRleHQpCisgICAgICAgIGlmIG1hdGNoID09IE5vbmU6CisgICAg
ICAgICAgICByYWlzZSBVbmtub3duUmRhdGF0eXBlCisgICAgICAgIHZhbHVlID0gaW50KG1hdGNo
Lmdyb3VwKDEpKQorICAgICAgICBpZiB2YWx1ZSA8IDAgb3IgdmFsdWUgPiA2NTUzNToKKyAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInR5cGUgbXVzdCBiZSBiZXR3ZWVuID49IDAgYW5kIDw9
IDY1NTM1IikKKyAgICByZXR1cm4gdmFsdWUKKworZGVmIHRvX3RleHQodmFsdWUpOgorICAgICIi
IkNvbnZlcnQgYSBETlMgcmRhdGEgdHlwZSB0byB0ZXh0LgorICAgIEBwYXJhbSB2YWx1ZTogdGhl
IHJkYXRhIHR5cGUgdmFsdWUKKyAgICBAdHlwZSB2YWx1ZTogaW50CisgICAgQHJhaXNlcyBWYWx1
ZUVycm9yOiB0aGUgcmRhdGEgdHlwZSB2YWx1ZSBpcyBub3QgPj0gMCBhbmQgPD0gNjU1MzUKKyAg
ICBAcnR5cGU6IHN0cmluZyIiIgorCisgICAgaWYgdmFsdWUgPCAwIG9yIHZhbHVlID4gNjU1MzU6
CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInR5cGUgbXVzdCBiZSBiZXR3ZWVuID49IDAgYW5k
IDw9IDY1NTM1IikKKyAgICB0ZXh0ID0gX2J5X3ZhbHVlLmdldCh2YWx1ZSkKKyAgICBpZiB0ZXh0
IGlzIE5vbmU6CisgICAgICAgIHRleHQgPSAnVFlQRScgKyBgdmFsdWVgCisgICAgcmV0dXJuIHRl
eHQKKworZGVmIGlzX21ldGF0eXBlKHJkdHlwZSk6CisgICAgIiIiVHJ1ZSBpZiB0aGUgdHlwZSBp
cyBhIG1ldGF0eXBlLgorICAgIEBwYXJhbSByZHR5cGU6IHRoZSB0eXBlCisgICAgQHR5cGUgcmR0
eXBlOiBpbnQKKyAgICBAcnR5cGU6IGJvb2wiIiIKKworICAgIGlmIHJkdHlwZSA+PSBUS0VZIGFu
ZCByZHR5cGUgPD0gQU5ZIG9yIF9tZXRhdHlwZXMuaGFzX2tleShyZHR5cGUpOgorICAgICAgICBy
ZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitkZWYgaXNfc2luZ2xldG9uKHJkdHlwZSk6
CisgICAgIiIiVHJ1ZSBpZiB0aGUgdHlwZSBpcyBhIHNpbmdsZXRvbi4KKyAgICBAcGFyYW0gcmR0
eXBlOiB0aGUgdHlwZQorICAgIEB0eXBlIHJkdHlwZTogaW50CisgICAgQHJ0eXBlOiBib29sIiIi
CisKKyAgICBpZiBfc2luZ2xldG9ucy5oYXNfa2V5KHJkdHlwZSk6CisgICAgICAgIHJldHVybiBU
cnVlCisgICAgcmV0dXJuIEZhbHNlCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3Bh
cnR5L2Rucy9yZW5kZXJlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3Ro
aXJkX3BhcnR5L2Rucy9yZW5kZXJlci5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VS
ZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JlbmRlcmVyLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMyNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNywgMjAwOSwgMjAxMCBOb21pbnVtLCBJ
bmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRl
IHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3
aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0IHRo
ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisjIGFw
cGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT
IiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8g
VEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUgTElB
QkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9T
UyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09O
VFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAor
IyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElT
IFNPRlRXQVJFLgorCisiIiJIZWxwIGZvciBidWlsZGluZyBETlMgd2lyZSBmb3JtYXQgbWVzc2Fn
ZXMiIiIKKworaW1wb3J0IGNTdHJpbmdJTworaW1wb3J0IHN0cnVjdAoraW1wb3J0IHJhbmRvbQor
aW1wb3J0IHRpbWUKKworaW1wb3J0IGRucy5leGNlcHRpb24KK2ltcG9ydCBkbnMudHNpZworCitR
VUVTVElPTiA9IDAKK0FOU1dFUiA9IDEKK0FVVEhPUklUWSA9IDIKK0FERElUSU9OQUwgPSAzCisK
K2NsYXNzIFJlbmRlcmVyKG9iamVjdCk6CisgICAgIiIiSGVscGVyIGNsYXNzIGZvciBidWlsZGlu
ZyBETlMgd2lyZS1mb3JtYXQgbWVzc2FnZXMuCisKKyAgICBNb3N0IGFwcGxpY2F0aW9ucyBjYW4g
dXNlIHRoZSBoaWdoZXItbGV2ZWwgTHtkbnMubWVzc2FnZS5NZXNzYWdlfQorICAgIGNsYXNzIGFu
ZCBpdHMgdG9fd2lyZSgpIG1ldGhvZCB0byBnZW5lcmF0ZSB3aXJlLWZvcm1hdCBtZXNzYWdlcy4K
KyAgICBUaGlzIGNsYXNzIGlzIGZvciB0aG9zZSBhcHBsaWNhdGlvbnMgd2hpY2ggbmVlZCBmaW5l
ciBjb250cm9sCisgICAgb3ZlciB0aGUgZ2VuZXJhdGlvbiBvZiBtZXNzYWdlcy4KKworICAgIFR5
cGljYWwgdXNlOjoKKworICAgICAgICByID0gZG5zLnJlbmRlcmVyLlJlbmRlcmVyKGlkPTEsIGZs
YWdzPTB4ODAsIG1heF9zaXplPTUxMikKKyAgICAgICAgci5hZGRfcXVlc3Rpb24ocW5hbWUsIHF0
eXBlLCBxY2xhc3MpCisgICAgICAgIHIuYWRkX3Jyc2V0KGRucy5yZW5kZXJlci5BTlNXRVIsIHJy
c2V0XzEpCisgICAgICAgIHIuYWRkX3Jyc2V0KGRucy5yZW5kZXJlci5BTlNXRVIsIHJyc2V0XzIp
CisgICAgICAgIHIuYWRkX3Jyc2V0KGRucy5yZW5kZXJlci5BVVRIT1JJVFksIG5zX3Jyc2V0KQor
ICAgICAgICByLmFkZF9lZG5zKDAsIDAsIDQwOTYpCisgICAgICAgIHIuYWRkX3Jyc2V0KGRucy5y
ZW5kZXJlci5BRERUSU9OQUwsIGFkX3Jyc2V0XzEpCisgICAgICAgIHIuYWRkX3Jyc2V0KGRucy5y
ZW5kZXJlci5BRERUSU9OQUwsIGFkX3Jyc2V0XzIpCisgICAgICAgIHIud3JpdGVfaGVhZGVyKCkK
KyAgICAgICAgci5hZGRfdHNpZyhrZXluYW1lLCBzZWNyZXQsIDMwMCwgMSwgMCwgJycsIHJlcXVl
c3RfbWFjKQorICAgICAgICB3aXJlID0gci5nZXRfd2lyZSgpCisKKyAgICBAaXZhciBvdXRwdXQ6
IHdoZXJlIHJlbmRlcmluZyBpcyB3cml0dGVuCisgICAgQHR5cGUgb3V0cHV0OiBjU3RyaW5nSU8u
U3RyaW5nSU8gb2JqZWN0CisgICAgQGl2YXIgaWQ6IHRoZSBtZXNzYWdlIGlkCisgICAgQHR5cGUg
aWQ6IGludAorICAgIEBpdmFyIGZsYWdzOiB0aGUgbWVzc2FnZSBmbGFncworICAgIEB0eXBlIGZs
YWdzOiBpbnQKKyAgICBAaXZhciBtYXhfc2l6ZTogdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgbWVz
c2FnZQorICAgIEB0eXBlIG1heF9zaXplOiBpbnQKKyAgICBAaXZhciBvcmlnaW46IHRoZSBvcmln
aW4gdG8gdXNlIHdoZW4gcmVuZGVyaW5nIHJlbGF0aXZlIG5hbWVzCisgICAgQHR5cGUgb3JpZ2lu
OiBkbnMubmFtZS5OYW1lIG9iamVjdAorICAgIEBpdmFyIGNvbXByZXNzOiB0aGUgY29tcHJlc3Np
b24gdGFibGUKKyAgICBAdHlwZSBjb21wcmVzczogZGljdAorICAgIEBpdmFyIHNlY3Rpb246IHRo
ZSBzZWN0aW9uIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZAorICAgIEB0eXBlIHNlY3Rpb246IGlu
dCAoZG5zLnJlbmRlcmVyLlFVRVNUSU9OLCBkbnMucmVuZGVyZXIuQU5TV0VSLAorICAgIGRucy5y
ZW5kZXJlci5BVVRIT1JJVFksIG9yIGRucy5yZW5kZXJlci5BRERJVElPTkFMKQorICAgIEBpdmFy
IGNvdW50czogbGlzdCBvZiB0aGUgbnVtYmVyIG9mIFJScyBpbiBlYWNoIHNlY3Rpb24KKyAgICBA
dHlwZSBjb3VudHM6IGludCBsaXN0IG9mIGxlbmd0aCA0CisgICAgQGl2YXIgbWFjOiB0aGUgTUFD
IG9mIHRoZSByZW5kZXJlZCBtZXNzYWdlIChpZiBUU0lHIHdhcyB1c2VkKQorICAgIEB0eXBlIG1h
Yzogc3RyaW5nCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaWQ9Tm9uZSwgZmxh
Z3M9MCwgbWF4X3NpemU9NjU1MzUsIG9yaWdpbj1Ob25lKToKKyAgICAgICAgIiIiSW5pdGlhbGl6
ZSBhIG5ldyByZW5kZXJlci4KKworICAgICAgICBAcGFyYW0gaWQ6IHRoZSBtZXNzYWdlIGlkCisg
ICAgICAgIEB0eXBlIGlkOiBpbnQKKyAgICAgICAgQHBhcmFtIGZsYWdzOiB0aGUgRE5TIG1lc3Nh
Z2UgZmxhZ3MKKyAgICAgICAgQHR5cGUgZmxhZ3M6IGludAorICAgICAgICBAcGFyYW0gbWF4X3Np
emU6IHRoZSBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZTsgdGhlIGRlZmF1bHQgaXMgNjU1MzUuCisgICAg
ICAgIElmIHJlbmRlcmluZyByZXN1bHRzIGluIGEgbWVzc2FnZSBncmVhdGVyIHRoYW4gSXttYXhf
c2l6ZX0sCisgICAgICAgIHRoZW4gTHtkbnMuZXhjZXB0aW9uLlRvb0JpZ30gd2lsbCBiZSByYWlz
ZWQuCisgICAgICAgIEB0eXBlIG1heF9zaXplOiBpbnQKKyAgICAgICAgQHBhcmFtIG9yaWdpbjog
dGhlIG9yaWdpbiB0byB1c2Ugd2hlbiByZW5kZXJpbmcgcmVsYXRpdmUgbmFtZXMKKyAgICAgICAg
QHR5cGUgb3JpZ2luOiBkbnMubmFtZS5OYW1lbSBvciBOb25lLgorICAgICAgICAiIiIKKworICAg
ICAgICBzZWxmLm91dHB1dCA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGlmIGlkIGlz
IE5vbmU6CisgICAgICAgICAgICBzZWxmLmlkID0gcmFuZG9tLnJhbmRpbnQoMCwgNjU1MzUpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmlkID0gaWQKKyAgICAgICAgc2VsZi5mbGFn
cyA9IGZsYWdzCisgICAgICAgIHNlbGYubWF4X3NpemUgPSBtYXhfc2l6ZQorICAgICAgICBzZWxm
Lm9yaWdpbiA9IG9yaWdpbgorICAgICAgICBzZWxmLmNvbXByZXNzID0ge30KKyAgICAgICAgc2Vs
Zi5zZWN0aW9uID0gUVVFU1RJT04KKyAgICAgICAgc2VsZi5jb3VudHMgPSBbMCwgMCwgMCwgMF0K
KyAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJ1x4MDAnICogMTIpCisgICAgICAgIHNlbGYubWFj
ID0gJycKKworICAgIGRlZiBfcm9sbGJhY2soc2VsZiwgd2hlcmUpOgorICAgICAgICAiIiJUcnVu
Y2F0ZSB0aGUgb3V0cHV0IGJ1ZmZlciBhdCBvZmZzZXQgSXt3aGVyZX0sIGFuZCByZW1vdmUgYW55
CisgICAgICAgIGNvbXByZXNzaW9uIHRhYmxlIGVudHJpZXMgdGhhdCBwb2ludGVkIGJleW9uZCB0
aGUgdHJ1bmNhdGlvbgorICAgICAgICBwb2ludC4KKworICAgICAgICBAcGFyYW0gd2hlcmU6IHRo
ZSBvZmZzZXQKKyAgICAgICAgQHR5cGUgd2hlcmU6IGludAorICAgICAgICAiIiIKKworICAgICAg
ICBzZWxmLm91dHB1dC5zZWVrKHdoZXJlKQorICAgICAgICBzZWxmLm91dHB1dC50cnVuY2F0ZSgp
CisgICAgICAgIGtleXNfdG9fZGVsZXRlID0gW10KKyAgICAgICAgZm9yIGssIHYgaW4gc2VsZi5j
b21wcmVzcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHYgPj0gd2hlcmU6CisgICAgICAg
ICAgICAgICAga2V5c190b19kZWxldGUuYXBwZW5kKGspCisgICAgICAgIGZvciBrIGluIGtleXNf
dG9fZGVsZXRlOgorICAgICAgICAgICAgZGVsIHNlbGYuY29tcHJlc3Nba10KKworICAgIGRlZiBf
c2V0X3NlY3Rpb24oc2VsZiwgc2VjdGlvbik6CisgICAgICAgICIiIlNldCB0aGUgcmVuZGVyZXIn
cyBjdXJyZW50IHNlY3Rpb24uCisKKyAgICAgICAgU2VjdGlvbnMgbXVzdCBiZSByZW5kZXJlZCBv
cmRlcjogUVVFU1RJT04sIEFOU1dFUiwgQVVUSE9SSVRZLAorICAgICAgICBBRERJVElPTkFMLiAg
U2VjdGlvbnMgbWF5IGJlIGVtcHR5LgorCisgICAgICAgIEBwYXJhbSBzZWN0aW9uOiB0aGUgc2Vj
dGlvbgorICAgICAgICBAdHlwZSBzZWN0aW9uOiBpbnQKKyAgICAgICAgQHJhaXNlcyBkbnMuZXhj
ZXB0aW9uLkZvcm1FcnJvcjogYW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBzZXQKKyAgICAgICAgYSBz
ZWN0aW9uIHZhbHVlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBzZWN0aW9uLgorICAgICAgICAiIiIK
KworICAgICAgICBpZiBzZWxmLnNlY3Rpb24gIT0gc2VjdGlvbjoKKyAgICAgICAgICAgIGlmIHNl
bGYuc2VjdGlvbiA+IHNlY3Rpb246CisgICAgICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlv
bi5Gb3JtRXJyb3IKKyAgICAgICAgICAgIHNlbGYuc2VjdGlvbiA9IHNlY3Rpb24KKworICAgIGRl
ZiBhZGRfcXVlc3Rpb24oc2VsZiwgcW5hbWUsIHJkdHlwZSwgcmRjbGFzcz1kbnMucmRhdGFjbGFz
cy5JTik6CisgICAgICAgICIiIkFkZCBhIHF1ZXN0aW9uIHRvIHRoZSBtZXNzYWdlLgorCisgICAg
ICAgIEBwYXJhbSBxbmFtZTogdGhlIHF1ZXN0aW9uIG5hbWUKKyAgICAgICAgQHR5cGUgcW5hbWU6
IGRucy5uYW1lLk5hbWUKKyAgICAgICAgQHBhcmFtIHJkdHlwZTogdGhlIHF1ZXN0aW9uIHJkYXRh
IHR5cGUKKyAgICAgICAgQHR5cGUgcmR0eXBlOiBpbnQKKyAgICAgICAgQHBhcmFtIHJkY2xhc3M6
IHRoZSBxdWVzdGlvbiByZGF0YSBjbGFzcworICAgICAgICBAdHlwZSByZGNsYXNzOiBpbnQKKyAg
ICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fc2V0X3NlY3Rpb24oUVVFU1RJT04pCisgICAgICAg
IGJlZm9yZSA9IHNlbGYub3V0cHV0LnRlbGwoKQorICAgICAgICBxbmFtZS50b193aXJlKHNlbGYu
b3V0cHV0LCBzZWxmLmNvbXByZXNzLCBzZWxmLm9yaWdpbikKKyAgICAgICAgc2VsZi5vdXRwdXQu
d3JpdGUoc3RydWN0LnBhY2soIiFISCIsIHJkdHlwZSwgcmRjbGFzcykpCisgICAgICAgIGFmdGVy
ID0gc2VsZi5vdXRwdXQudGVsbCgpCisgICAgICAgIGlmIGFmdGVyID49IHNlbGYubWF4X3NpemU6
CisgICAgICAgICAgICBzZWxmLl9yb2xsYmFjayhiZWZvcmUpCisgICAgICAgICAgICByYWlzZSBk
bnMuZXhjZXB0aW9uLlRvb0JpZworICAgICAgICBzZWxmLmNvdW50c1tRVUVTVElPTl0gKz0gMQor
CisgICAgZGVmIGFkZF9ycnNldChzZWxmLCBzZWN0aW9uLCBycnNldCwgKiprdyk6CisgICAgICAg
ICIiIkFkZCB0aGUgcnJzZXQgdG8gdGhlIHNwZWNpZmllZCBzZWN0aW9uLgorCisgICAgICAgIEFu
eSBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHRvIHRoZSByZGF0YXNldCdzIHRvX3dp
cmUoKQorICAgICAgICByb3V0aW5lLgorCisgICAgICAgIEBwYXJhbSBzZWN0aW9uOiB0aGUgc2Vj
dGlvbgorICAgICAgICBAdHlwZSBzZWN0aW9uOiBpbnQKKyAgICAgICAgQHBhcmFtIHJyc2V0OiB0
aGUgcnJzZXQKKyAgICAgICAgQHR5cGUgcnJzZXQ6IGRucy5ycnNldC5SUnNldCBvYmplY3QKKyAg
ICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fc2V0X3NlY3Rpb24oc2VjdGlvbikKKyAgICAgICAg
YmVmb3JlID0gc2VsZi5vdXRwdXQudGVsbCgpCisgICAgICAgIG4gPSBycnNldC50b193aXJlKHNl
bGYub3V0cHV0LCBzZWxmLmNvbXByZXNzLCBzZWxmLm9yaWdpbiwgKiprdykKKyAgICAgICAgYWZ0
ZXIgPSBzZWxmLm91dHB1dC50ZWxsKCkKKyAgICAgICAgaWYgYWZ0ZXIgPj0gc2VsZi5tYXhfc2l6
ZToKKyAgICAgICAgICAgIHNlbGYuX3JvbGxiYWNrKGJlZm9yZSkKKyAgICAgICAgICAgIHJhaXNl
IGRucy5leGNlcHRpb24uVG9vQmlnCisgICAgICAgIHNlbGYuY291bnRzW3NlY3Rpb25dICs9IG4K
KworICAgIGRlZiBhZGRfcmRhdGFzZXQoc2VsZiwgc2VjdGlvbiwgbmFtZSwgcmRhdGFzZXQsICoq
a3cpOgorICAgICAgICAiIiJBZGQgdGhlIHJkYXRhc2V0IHRvIHRoZSBzcGVjaWZpZWQgc2VjdGlv
biwgdXNpbmcgdGhlIHNwZWNpZmllZAorICAgICAgICBuYW1lIGFzIHRoZSBvd25lciBuYW1lLgor
CisgICAgICAgIEFueSBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHRvIHRoZSByZGF0
YXNldCdzIHRvX3dpcmUoKQorICAgICAgICByb3V0aW5lLgorCisgICAgICAgIEBwYXJhbSBzZWN0
aW9uOiB0aGUgc2VjdGlvbgorICAgICAgICBAdHlwZSBzZWN0aW9uOiBpbnQKKyAgICAgICAgQHBh
cmFtIG5hbWU6IHRoZSBvd25lciBuYW1lCisgICAgICAgIEB0eXBlIG5hbWU6IGRucy5uYW1lLk5h
bWUgb2JqZWN0CisgICAgICAgIEBwYXJhbSByZGF0YXNldDogdGhlIHJkYXRhc2V0CisgICAgICAg
IEB0eXBlIHJkYXRhc2V0OiBkbnMucmRhdGFzZXQuUmRhdGFzZXQgb2JqZWN0CisgICAgICAgICIi
IgorCisgICAgICAgIHNlbGYuX3NldF9zZWN0aW9uKHNlY3Rpb24pCisgICAgICAgIGJlZm9yZSA9
IHNlbGYub3V0cHV0LnRlbGwoKQorICAgICAgICBuID0gcmRhdGFzZXQudG9fd2lyZShuYW1lLCBz
ZWxmLm91dHB1dCwgc2VsZi5jb21wcmVzcywgc2VsZi5vcmlnaW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICoqa3cpCisgICAgICAgIGFmdGVyID0gc2VsZi5vdXRwdXQudGVsbCgpCisg
ICAgICAgIGlmIGFmdGVyID49IHNlbGYubWF4X3NpemU6CisgICAgICAgICAgICBzZWxmLl9yb2xs
YmFjayhiZWZvcmUpCisgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlRvb0JpZworICAg
ICAgICBzZWxmLmNvdW50c1tzZWN0aW9uXSArPSBuCisKKyAgICBkZWYgYWRkX2VkbnMoc2VsZiwg
ZWRucywgZWRuc2ZsYWdzLCBwYXlsb2FkLCBvcHRpb25zPU5vbmUpOgorICAgICAgICAiIiJBZGQg
YW4gRUROUyBPUFQgcmVjb3JkIHRvIHRoZSBtZXNzYWdlLgorCisgICAgICAgIEBwYXJhbSBlZG5z
OiBUaGUgRUROUyBsZXZlbCB0byB1c2UuCisgICAgICAgIEB0eXBlIGVkbnM6IGludAorICAgICAg
ICBAcGFyYW0gZWRuc2ZsYWdzOiBFRE5TIGZsYWcgdmFsdWVzLgorICAgICAgICBAdHlwZSBlZG5z
ZmxhZ3M6IGludAorICAgICAgICBAcGFyYW0gcGF5bG9hZDogVGhlIEVETlMgc2VuZGVyJ3MgcGF5
bG9hZCBmaWVsZCwgd2hpY2ggaXMgdGhlIG1heGltdW0KKyAgICAgICAgc2l6ZSBvZiBVRFAgZGF0
YWdyYW0gdGhlIHNlbmRlciBjYW4gaGFuZGxlLgorICAgICAgICBAdHlwZSBwYXlsb2FkOiBpbnQK
KyAgICAgICAgQHBhcmFtIG9wdGlvbnM6IFRoZSBFRE5TIG9wdGlvbnMgbGlzdAorICAgICAgICBA
dHlwZSBvcHRpb25zOiBsaXN0IG9mIGRucy5lZG5zLk9wdGlvbiBpbnN0YW5jZXMKKyAgICAgICAg
QHNlZTogUkZDIDI2NzEKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhlIEVE
TlMgdmVyc2lvbiBpbiBlZG5zZmxhZ3MgYWdyZWVzIHdpdGggZWRucworICAgICAgICBlZG5zZmxh
Z3MgJj0gMHhGRjAwRkZGRkwKKyAgICAgICAgZWRuc2ZsYWdzIHw9IChlZG5zIDw8IDE2KQorICAg
ICAgICBzZWxmLl9zZXRfc2VjdGlvbihBRERJVElPTkFMKQorICAgICAgICBiZWZvcmUgPSBzZWxm
Lm91dHB1dC50ZWxsKCkKKyAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoc3RydWN0LnBhY2soJyFC
SEhJSCcsIDAsIGRucy5yZGF0YXR5cGUuT1BULCBwYXlsb2FkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlZG5zZmxhZ3MsIDApKQorICAgICAgICBpZiBub3Qgb3B0aW9u
cyBpcyBOb25lOgorICAgICAgICAgICAgbHN0YXJ0ID0gc2VsZi5vdXRwdXQudGVsbCgpCisgICAg
ICAgICAgICBmb3Igb3B0IGluIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgc3R1ZmYgPSBzdHJ1
Y3QucGFjaygiIUhIIiwgb3B0Lm90eXBlLCAwKQorICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0
LndyaXRlKHN0dWZmKQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gc2VsZi5vdXRwdXQudGVsbCgp
CisgICAgICAgICAgICAgICAgb3B0LnRvX3dpcmUoc2VsZi5vdXRwdXQpCisgICAgICAgICAgICAg
ICAgZW5kID0gc2VsZi5vdXRwdXQudGVsbCgpCisgICAgICAgICAgICAgICAgYXNzZXJ0IGVuZCAt
IHN0YXJ0IDwgNjU1MzYKKyAgICAgICAgICAgICAgICBzZWxmLm91dHB1dC5zZWVrKHN0YXJ0IC0g
MikKKyAgICAgICAgICAgICAgICBzdHVmZiA9IHN0cnVjdC5wYWNrKCIhSCIsIGVuZCAtIHN0YXJ0
KQorICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKHN0dWZmKQorICAgICAgICAgICAg
ICAgIHNlbGYub3V0cHV0LnNlZWsoMCwgMikKKyAgICAgICAgICAgIGxlbmQgPSBzZWxmLm91dHB1
dC50ZWxsKCkKKyAgICAgICAgICAgIGFzc2VydCBsZW5kIC0gbHN0YXJ0IDwgNjU1MzYKKyAgICAg
ICAgICAgIHNlbGYub3V0cHV0LnNlZWsobHN0YXJ0IC0gMikKKyAgICAgICAgICAgIHN0dWZmID0g
c3RydWN0LnBhY2soIiFIIiwgbGVuZCAtIGxzdGFydCkKKyAgICAgICAgICAgIHNlbGYub3V0cHV0
LndyaXRlKHN0dWZmKQorICAgICAgICAgICAgc2VsZi5vdXRwdXQuc2VlaygwLCAyKQorICAgICAg
ICBhZnRlciA9IHNlbGYub3V0cHV0LnRlbGwoKQorICAgICAgICBpZiBhZnRlciA+PSBzZWxmLm1h
eF9zaXplOgorICAgICAgICAgICAgc2VsZi5fcm9sbGJhY2soYmVmb3JlKQorICAgICAgICAgICAg
cmFpc2UgZG5zLmV4Y2VwdGlvbi5Ub29CaWcKKyAgICAgICAgc2VsZi5jb3VudHNbQURESVRJT05B
TF0gKz0gMQorCisgICAgZGVmIGFkZF90c2lnKHNlbGYsIGtleW5hbWUsIHNlY3JldCwgZnVkZ2Us
IGlkLCB0c2lnX2Vycm9yLCBvdGhlcl9kYXRhLAorICAgICAgICAgICAgICAgICByZXF1ZXN0X21h
YywgYWxnb3JpdGhtPWRucy50c2lnLmRlZmF1bHRfYWxnb3JpdGhtKToKKyAgICAgICAgIiIiQWRk
IGEgVFNJRyBzaWduYXR1cmUgdG8gdGhlIG1lc3NhZ2UuCisKKyAgICAgICAgQHBhcmFtIGtleW5h
bWU6IHRoZSBUU0lHIGtleSBuYW1lCisgICAgICAgIEB0eXBlIGtleW5hbWU6IGRucy5uYW1lLk5h
bWUgb2JqZWN0CisgICAgICAgIEBwYXJhbSBzZWNyZXQ6IHRoZSBzZWNyZXQgdG8gdXNlCisgICAg
ICAgIEB0eXBlIHNlY3JldDogc3RyaW5nCisgICAgICAgIEBwYXJhbSBmdWRnZTogVFNJRyB0aW1l
IGZ1ZGdlCisgICAgICAgIEB0eXBlIGZ1ZGdlOiBpbnQKKyAgICAgICAgQHBhcmFtIGlkOiB0aGUg
bWVzc2FnZSBpZCB0byBlbmNvZGUgaW4gdGhlIHRzaWcgc2lnbmF0dXJlCisgICAgICAgIEB0eXBl
IGlkOiBpbnQKKyAgICAgICAgQHBhcmFtIHRzaWdfZXJyb3I6IFRTSUcgZXJyb3IgY29kZTsgZGVm
YXVsdCBpcyAwLgorICAgICAgICBAdHlwZSB0c2lnX2Vycm9yOiBpbnQKKyAgICAgICAgQHBhcmFt
IG90aGVyX2RhdGE6IFRTSUcgb3RoZXIgZGF0YS4KKyAgICAgICAgQHR5cGUgb3RoZXJfZGF0YTog
c3RyaW5nCisgICAgICAgIEBwYXJhbSByZXF1ZXN0X21hYzogVGhpcyBtZXNzYWdlIGlzIGEgcmVz
cG9uc2UgdG8gdGhlIHJlcXVlc3Qgd2hpY2gKKyAgICAgICAgaGFkIHRoZSBzcGVjaWZpZWQgTUFD
LgorICAgICAgICBAcGFyYW0gYWxnb3JpdGhtOiB0aGUgVFNJRyBhbGdvcml0aG0gdG8gdXNlCisg
ICAgICAgIEB0eXBlIHJlcXVlc3RfbWFjOiBzdHJpbmcKKyAgICAgICAgIiIiCisKKyAgICAgICAg
c2VsZi5fc2V0X3NlY3Rpb24oQURESVRJT05BTCkKKyAgICAgICAgYmVmb3JlID0gc2VsZi5vdXRw
dXQudGVsbCgpCisgICAgICAgIHMgPSBzZWxmLm91dHB1dC5nZXR2YWx1ZSgpCisgICAgICAgICh0
c2lnX3JkYXRhLCBzZWxmLm1hYywgY3R4KSA9IGRucy50c2lnLnNpZ24ocywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXluYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3JldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQodGlt
ZS50aW1lKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1ZGdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRzaWdfZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3RoZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X21hYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGdvcml0aG09YWxnb3JpdGhtKQor
ICAgICAgICBrZXluYW1lLnRvX3dpcmUoc2VsZi5vdXRwdXQsIHNlbGYuY29tcHJlc3MsIHNlbGYu
b3JpZ2luKQorICAgICAgICBzZWxmLm91dHB1dC53cml0ZShzdHJ1Y3QucGFjaygnIUhISUgnLCBk
bnMucmRhdGF0eXBlLlRTSUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRucy5yZGF0YWNsYXNzLkFOWSwgMCwgMCkpCisgICAgICAgIHJkYXRhX3N0YXJ0ID0gc2VsZi5v
dXRwdXQudGVsbCgpCisgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKHRzaWdfcmRhdGEpCisgICAg
ICAgIGFmdGVyID0gc2VsZi5vdXRwdXQudGVsbCgpCisgICAgICAgIGFzc2VydCBhZnRlciAtIHJk
YXRhX3N0YXJ0IDwgNjU1MzYKKyAgICAgICAgaWYgYWZ0ZXIgPj0gc2VsZi5tYXhfc2l6ZToKKyAg
ICAgICAgICAgIHNlbGYuX3JvbGxiYWNrKGJlZm9yZSkKKyAgICAgICAgICAgIHJhaXNlIGRucy5l
eGNlcHRpb24uVG9vQmlnCisgICAgICAgIHNlbGYub3V0cHV0LnNlZWsocmRhdGFfc3RhcnQgLSAy
KQorICAgICAgICBzZWxmLm91dHB1dC53cml0ZShzdHJ1Y3QucGFjaygnIUgnLCBhZnRlciAtIHJk
YXRhX3N0YXJ0KSkKKyAgICAgICAgc2VsZi5jb3VudHNbQURESVRJT05BTF0gKz0gMQorICAgICAg
ICBzZWxmLm91dHB1dC5zZWVrKDEwKQorICAgICAgICBzZWxmLm91dHB1dC53cml0ZShzdHJ1Y3Qu
cGFjaygnIUgnLCBzZWxmLmNvdW50c1tBRERJVElPTkFMXSkpCisgICAgICAgIHNlbGYub3V0cHV0
LnNlZWsoMCwgMikKKworICAgIGRlZiB3cml0ZV9oZWFkZXIoc2VsZik6CisgICAgICAgICIiIldy
aXRlIHRoZSBETlMgbWVzc2FnZSBoZWFkZXIuCisKKyAgICAgICAgV3JpdGluZyB0aGUgRE5TIG1l
c3NhZ2UgaGVhZGVyIGlzIGRvbmUgYXNmdGVyIGFsbCBzZWN0aW9ucworICAgICAgICBoYXZlIGJl
ZW4gcmVuZGVyZWQsIGJ1dCBiZWZvcmUgdGhlIG9wdGlvbmFsIFRTSUcgc2lnbmF0dXJlCisgICAg
ICAgIGlzIGFkZGVkLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLm91dHB1dC5zZWVrKDAp
CisgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKHN0cnVjdC5wYWNrKCchSEhISEhIJywgc2VsZi5p
ZCwgc2VsZi5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5jb3VudHNbMF0sIHNlbGYuY291bnRzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLmNvdW50c1syXSwgc2VsZi5jb3VudHNbM10pKQorICAgICAgICBzZWxm
Lm91dHB1dC5zZWVrKDAsIDIpCisKKyAgICBkZWYgZ2V0X3dpcmUoc2VsZik6CisgICAgICAgICIi
IlJldHVybiB0aGUgd2lyZSBmb3JtYXQgbWVzc2FnZS4KKworICAgICAgICBAcnR5cGU6IHN0cmlu
ZworICAgICAgICAiIiIKKworICAgICAgICByZXR1cm4gc2VsZi5vdXRwdXQuZ2V0dmFsdWUoKQpJ
bmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmVzb2x2ZXIucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmVzb2x2ZXIu
cHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9y
ZXNvbHZlci5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NjEgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRv
IHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMK
KyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBo
ZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj
ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMK
KyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1T
IEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5H
IEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
LiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUws
IERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdF
UworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJ
VFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9U
SEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBX
SVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworIiIiRE5TIHN0
dWIgcmVzb2x2ZXIuCisKK0B2YXIgZGVmYXVsdF9yZXNvbHZlcjogVGhlIGRlZmF1bHQgcmVzb2x2
ZXIgb2JqZWN0CitAdHlwZSBkZWZhdWx0X3Jlc29sdmVyOiBkbnMucmVzb2x2ZXIuUmVzb2x2ZXIg
b2JqZWN0IiIiCisKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK2lt
cG9ydCBkbnMuZXhjZXB0aW9uCitpbXBvcnQgZG5zLm1lc3NhZ2UKK2ltcG9ydCBkbnMubmFtZQor
aW1wb3J0IGRucy5xdWVyeQoraW1wb3J0IGRucy5yY29kZQoraW1wb3J0IGRucy5yZGF0YWNsYXNz
CitpbXBvcnQgZG5zLnJkYXRhdHlwZQorCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAg
ICBpbXBvcnQgX3dpbnJlZworCitjbGFzcyBOWERPTUFJTihkbnMuZXhjZXB0aW9uLkROU0V4Y2Vw
dGlvbik6CisgICAgIiIiVGhlIHF1ZXJ5IG5hbWUgZG9lcyBub3QgZXhpc3QuIiIiCisgICAgcGFz
cworCisjIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBUaW1lb3V0IGV4Y2VwdGlvbiBoYXMgbW92ZWQg
ZnJvbSBoZXJlIHRvIHRoZQorIyBkbnMuZXhjZXB0aW9uIG1vZHVsZS4gIFdlIGtlZXAgZG5zLnJl
c29sdmVyLlRpbWVvdXQgZGVmaW5lZCBmb3IKKyMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisK
K1RpbWVvdXQgPSBkbnMuZXhjZXB0aW9uLlRpbWVvdXQKKworY2xhc3MgTm9BbnN3ZXIoZG5zLmV4
Y2VwdGlvbi5ETlNFeGNlcHRpb24pOgorICAgICIiIlRoZSByZXNwb25zZSBkaWQgbm90IGNvbnRh
aW4gYW4gYW5zd2VyIHRvIHRoZSBxdWVzdGlvbi4iIiIKKyAgICBwYXNzCisKK2NsYXNzIE5vTmFt
ZXNlcnZlcnMoZG5zLmV4Y2VwdGlvbi5ETlNFeGNlcHRpb24pOgorICAgICIiIk5vIG5vbi1icm9r
ZW4gbmFtZXNlcnZlcnMgYXJlIGF2YWlsYWJsZSB0byBhbnN3ZXIgdGhlIHF1ZXJ5LiIiIgorICAg
IHBhc3MKKworY2xhc3MgTm90QWJzb2x1dGUoZG5zLmV4Y2VwdGlvbi5ETlNFeGNlcHRpb24pOgor
ICAgICIiIlJhaXNlZCBpZiBhbiBhYnNvbHV0ZSBkb21haW4gbmFtZSBpcyByZXF1aXJlZCBidXQg
YSByZWxhdGl2ZSBuYW1lCisgICAgd2FzIHByb3ZpZGVkLiIiIgorICAgIHBhc3MKKworY2xhc3Mg
Tm9Sb290U09BKGRucy5leGNlcHRpb24uRE5TRXhjZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgaWYg
Zm9yIHNvbWUgcmVhc29uIHRoZXJlIGlzIG5vIFNPQSBhdCB0aGUgcm9vdCBuYW1lLgorICAgIFRo
aXMgc2hvdWxkIG5ldmVyIGhhcHBlbiEiIiIKKyAgICBwYXNzCisKKworY2xhc3MgQW5zd2VyKG9i
amVjdCk6CisgICAgIiIiRE5TIHN0dWIgcmVzb2x2ZXIgYW5zd2VyCisKKyAgICBJbnN0YW5jZXMg
b2YgdGhpcyBjbGFzcyBidW5kbGUgdXAgdGhlIHJlc3VsdCBvZiBhIHN1Y2Nlc3NmdWwgRE5TCisg
ICAgcmVzb2x1dGlvbi4KKworICAgIEZvciBjb252ZW5pZW5jZSwgdGhlIGFuc3dlciBvYmplY3Qg
aW1wbGVtZW50cyBtdWNoIG9mIHRoZSBzZXF1ZW5jZQorICAgIHByb3RvY29sLCBmb3J3YXJkaW5n
IHRvIGl0cyBycnNldC4gIEUuZy4gImZvciBhIGluIGFuc3dlciIgaXMKKyAgICBlcXVpdmFsZW50
IHRvICJmb3IgYSBpbiBhbnN3ZXIucnJzZXQiLCAiYW5zd2VyW2ldIiBpcyBlcXVpdmFsZW50Cisg
ICAgdG8gImFuc3dlci5ycnNldFtpXSIsIGFuZCAiYW5zd2VyW2k6al0iIGlzIGVxdWl2YWxlbnQg
dG8KKyAgICAiYW5zd2VyLnJyc2V0W2k6al0iLgorCisgICAgTm90ZSB0aGF0IENOQU1FcyBvciBE
TkFNRXMgaW4gdGhlIHJlc3BvbnNlIG1heSBtZWFuIHRoYXQgYW5zd2VyCisgICAgbm9kZSdzIG5h
bWUgbWlnaHQgbm90IGJlIHRoZSBxdWVyeSBuYW1lLgorCisgICAgQGl2YXIgcW5hbWU6IFRoZSBx
dWVyeSBuYW1lCisgICAgQHR5cGUgcW5hbWU6IGRucy5uYW1lLk5hbWUgb2JqZWN0CisgICAgQGl2
YXIgcmR0eXBlOiBUaGUgcXVlcnkgdHlwZQorICAgIEB0eXBlIHJkdHlwZTogaW50CisgICAgQGl2
YXIgcmRjbGFzczogVGhlIHF1ZXJ5IGNsYXNzCisgICAgQHR5cGUgcmRjbGFzczogaW50CisgICAg
QGl2YXIgcmVzcG9uc2U6IFRoZSByZXNwb25zZSBtZXNzYWdlCisgICAgQHR5cGUgcmVzcG9uc2U6
IGRucy5tZXNzYWdlLk1lc3NhZ2Ugb2JqZWN0CisgICAgQGl2YXIgcnJzZXQ6IFRoZSBhbnN3ZXIK
KyAgICBAdHlwZSBycnNldDogZG5zLnJyc2V0LlJSc2V0IG9iamVjdAorICAgIEBpdmFyIGV4cGly
YXRpb246IFRoZSB0aW1lIHdoZW4gdGhlIGFuc3dlciBleHBpcmVzCisgICAgQHR5cGUgZXhwaXJh
dGlvbjogZmxvYXQgKHNlY29uZHMgc2luY2UgdGhlIGVwb2NoKQorICAgICIiIgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBxbmFtZSwgcmR0eXBlLCByZGNsYXNzLCByZXNwb25zZSk6CisgICAgICAg
IHNlbGYucW5hbWUgPSBxbmFtZQorICAgICAgICBzZWxmLnJkdHlwZSA9IHJkdHlwZQorICAgICAg
ICBzZWxmLnJkY2xhc3MgPSByZGNsYXNzCisgICAgICAgIHNlbGYucmVzcG9uc2UgPSByZXNwb25z
ZQorICAgICAgICBtaW5fdHRsID0gLTEKKyAgICAgICAgcnJzZXQgPSBOb25lCisgICAgICAgIGZv
ciBjb3VudCBpbiB4cmFuZ2UoMCwgMTUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIHJyc2V0ID0gcmVzcG9uc2UuZmluZF9ycnNldChyZXNwb25zZS5hbnN3ZXIsIHFuYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZGNsYXNzLCByZHR5
cGUpCisgICAgICAgICAgICAgICAgaWYgbWluX3R0bCA9PSAtMSBvciBycnNldC50dGwgPCBtaW5f
dHRsOgorICAgICAgICAgICAgICAgICAgICBtaW5fdHRsID0gcnJzZXQudHRsCisgICAgICAgICAg
ICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAg
ICBpZiByZHR5cGUgIT0gZG5zLnJkYXRhdHlwZS5DTkFNRToKKyAgICAgICAgICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgY3Jyc2V0ID0gcmVzcG9uc2UuZmluZF9ycnNl
dChyZXNwb25zZS5hbnN3ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHFuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZGNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkbnMucmRhdGF0eXBlLkNOQU1FKQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgbWluX3R0bCA9PSAtMSBvciBjcnJzZXQudHRsIDwgbWluX3R0bDoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fdHRsID0gY3Jyc2V0LnR0bAorICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIHJkIGluIGNycnNldDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBxbmFtZSA9IHJkLnRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAg
ICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBOb0Fuc3dl
cgorICAgICAgICAgICAgICAgIHJhaXNlIE5vQW5zd2VyCisgICAgICAgIGlmIHJyc2V0IGlzIE5v
bmU6CisgICAgICAgICAgICByYWlzZSBOb0Fuc3dlcgorICAgICAgICBzZWxmLnJyc2V0ID0gcnJz
ZXQKKyAgICAgICAgc2VsZi5leHBpcmF0aW9uID0gdGltZS50aW1lKCkgKyBtaW5fdHRsCisKKyAg
ICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgIGlmIGF0dHIgPT0gJ25hbWUn
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnJzZXQubmFtZQorICAgICAgICBlbGlmIGF0dHIg
PT0gJ3R0bCc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ycnNldC50dGwKKyAgICAgICAgZWxp
ZiBhdHRyID09ICdjb3ZlcnMnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnJzZXQuY292ZXJz
CisgICAgICAgIGVsaWYgYXR0ciA9PSAncmRjbGFzcyc6CisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5ycnNldC5yZGNsYXNzCisgICAgICAgIGVsaWYgYXR0ciA9PSAncmR0eXBlJzoKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLnJyc2V0LnJkdHlwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmFpc2UgQXR0cmlidXRlRXJyb3IoYXR0cikKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gbGVuKHNlbGYucnJzZXQpCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6Cisg
ICAgICAgIHJldHVybiBpdGVyKHNlbGYucnJzZXQpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2Vs
ZiwgaSk6CisgICAgICAgIHJldHVybiBzZWxmLnJyc2V0W2ldCisKKyAgICBkZWYgX19kZWxpdGVt
X18oc2VsZiwgaSk6CisgICAgICAgIGRlbCBzZWxmLnJyc2V0W2ldCisKKyAgICBkZWYgX19nZXRz
bGljZV9fKHNlbGYsIGksIGopOgorICAgICAgICByZXR1cm4gc2VsZi5ycnNldFtpOmpdCisKKyAg
ICBkZWYgX19kZWxzbGljZV9fKHNlbGYsIGksIGopOgorICAgICAgICBkZWwgc2VsZi5ycnNldFtp
OmpdCisKK2NsYXNzIENhY2hlKG9iamVjdCk6CisgICAgIiIiU2ltcGxlIEROUyBhbnN3ZXIgY2Fj
aGUuCisKKyAgICBAaXZhciBkYXRhOiBBIGRpY3Rpb25hcnkgb2YgY2FjaGVkIGRhdGEKKyAgICBA
dHlwZSBkYXRhOiBkaWN0CisgICAgQGl2YXIgY2xlYW5pbmdfaW50ZXJ2YWw6IFRoZSBudW1iZXIg
b2Ygc2Vjb25kcyBiZXR3ZWVuIGNsZWFuaW5ncy4gIFRoZQorICAgIGRlZmF1bHQgaXMgMzAwICg1
IG1pbnV0ZXMpLgorICAgIEB0eXBlIGNsZWFuaW5nX2ludGVydmFsOiBmbG9hdAorICAgIEBpdmFy
IG5leHRfY2xlYW5pbmc6IFRoZSB0aW1lIHRoZSBjYWNoZSBzaG91bGQgbmV4dCBiZSBjbGVhbmVk
IChpbiBzZWNvbmRzCisgICAgc2luY2UgdGhlIGVwb2NoLikKKyAgICBAdHlwZSBuZXh0X2NsZWFu
aW5nOiBmbG9hdAorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsZWFuaW5nX2lu
dGVydmFsPTMwMC4wKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBhIEROUyBjYWNoZS4KKworICAg
ICAgICBAcGFyYW0gY2xlYW5pbmdfaW50ZXJ2YWw6IHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3
ZWVuIHBlcmlvZGljCisgICAgICAgIGNsZWFuaW5ncy4gIFRoZSBkZWZhdWx0IGlzIDMwMC4wCisg
ICAgICAgIEB0eXBlIGNsZWFuaW5nX2ludGVydmFsOiBmbG9hdC4KKyAgICAgICAgIiIiCisKKyAg
ICAgICAgc2VsZi5kYXRhID0ge30KKyAgICAgICAgc2VsZi5jbGVhbmluZ19pbnRlcnZhbCA9IGNs
ZWFuaW5nX2ludGVydmFsCisgICAgICAgIHNlbGYubmV4dF9jbGVhbmluZyA9IHRpbWUudGltZSgp
ICsgc2VsZi5jbGVhbmluZ19pbnRlcnZhbAorCisgICAgZGVmIG1heWJlX2NsZWFuKHNlbGYpOgor
ICAgICAgICAiIiJDbGVhbiB0aGUgY2FjaGUgaWYgaXQncyB0aW1lIHRvIGRvIHNvLiIiIgorCisg
ICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIGlmIHNlbGYubmV4dF9jbGVhbmluZyA8
PSBub3c6CisgICAgICAgICAgICBrZXlzX3RvX2RlbGV0ZSA9IFtdCisgICAgICAgICAgICBmb3Ig
KGssIHYpIGluIHNlbGYuZGF0YS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiB2LmV4
cGlyYXRpb24gPD0gbm93OgorICAgICAgICAgICAgICAgICAgICBrZXlzX3RvX2RlbGV0ZS5hcHBl
bmQoaykKKyAgICAgICAgICAgIGZvciBrIGluIGtleXNfdG9fZGVsZXRlOgorICAgICAgICAgICAg
ICAgIGRlbCBzZWxmLmRhdGFba10KKyAgICAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAg
ICAgICAgICBzZWxmLm5leHRfY2xlYW5pbmcgPSBub3cgKyBzZWxmLmNsZWFuaW5nX2ludGVydmFs
CisKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSk6CisgICAgICAgICIiIkdldCB0aGUgYW5zd2VyIGFz
c29jaWF0ZWQgd2l0aCBJe2tleX0uICBSZXR1cm5zIE5vbmUgaWYKKyAgICAgICAgbm8gYW5zd2Vy
IGlzIGNhY2hlZCBmb3IgdGhlIGtleS4KKyAgICAgICAgQHBhcmFtIGtleTogdGhlIGtleQorICAg
ICAgICBAdHlwZSBrZXk6IChkbnMubmFtZS5OYW1lLCBpbnQsIGludCkgdHVwbGUgd2hvc2UgdmFs
dWVzIGFyZSB0aGUKKyAgICAgICAgcXVlcnkgbmFtZSwgcmR0eXBlLCBhbmQgcmRjbGFzcy4KKyAg
ICAgICAgQHJ0eXBlOiBkbnMucmVzb2x2ZXIuQW5zd2VyIG9iamVjdCBvciBOb25lCisgICAgICAg
ICIiIgorCisgICAgICAgIHNlbGYubWF5YmVfY2xlYW4oKQorICAgICAgICB2ID0gc2VsZi5kYXRh
LmdldChrZXkpCisgICAgICAgIGlmIHYgaXMgTm9uZSBvciB2LmV4cGlyYXRpb24gPD0gdGltZS50
aW1lKCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gdgorCisgICAg
ZGVmIHB1dChzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgIiIiQXNzb2NpYXRlIGtleSBhbmQg
dmFsdWUgaW4gdGhlIGNhY2hlLgorICAgICAgICBAcGFyYW0ga2V5OiB0aGUga2V5CisgICAgICAg
IEB0eXBlIGtleTogKGRucy5uYW1lLk5hbWUsIGludCwgaW50KSB0dXBsZSB3aG9zZSB2YWx1ZXMg
YXJlIHRoZQorICAgICAgICBxdWVyeSBuYW1lLCByZHR5cGUsIGFuZCByZGNsYXNzLgorICAgICAg
ICBAcGFyYW0gdmFsdWU6IFRoZSBhbnN3ZXIgYmVpbmcgY2FjaGVkCisgICAgICAgIEB0eXBlIHZh
bHVlOiBkbnMucmVzb2x2ZXIuQW5zd2VyIG9iamVjdAorICAgICAgICAiIiIKKworICAgICAgICBz
ZWxmLm1heWJlX2NsZWFuKCkKKyAgICAgICAgc2VsZi5kYXRhW2tleV0gPSB2YWx1ZQorCisgICAg
ZGVmIGZsdXNoKHNlbGYsIGtleT1Ob25lKToKKyAgICAgICAgIiIiRmx1c2ggdGhlIGNhY2hlLgor
CisgICAgICAgIElmIEl7a2V5fSBpcyBzcGVjaWZpZWQsIG9ubHkgdGhhdCBpdGVtIGlzIGZsdXNo
ZWQuICBPdGhlcndpc2UKKyAgICAgICAgdGhlIGVudGlyZSBjYWNoZSBpcyBmbHVzaGVkLgorCisg
ICAgICAgIEBwYXJhbSBrZXk6IHRoZSBrZXkgdG8gZmx1c2gKKyAgICAgICAgQHR5cGUga2V5OiAo
ZG5zLm5hbWUuTmFtZSwgaW50LCBpbnQpIHR1cGxlIG9yIE5vbmUKKyAgICAgICAgIiIiCisKKyAg
ICAgICAgaWYgbm90IGtleSBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5kYXRhLmhhc19r
ZXkoa2V5KToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5kYXRhW2tleV0KKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHNlbGYuZGF0YSA9IHt9CisgICAgICAgICAgICBzZWxmLm5leHRfY2xl
YW5pbmcgPSB0aW1lLnRpbWUoKSArIHNlbGYuY2xlYW5pbmdfaW50ZXJ2YWwKKworY2xhc3MgUmVz
b2x2ZXIob2JqZWN0KToKKyAgICAiIiJETlMgc3R1YiByZXNvbHZlcgorCisgICAgQGl2YXIgZG9t
YWluOiBUaGUgZG9tYWluIG9mIHRoaXMgaG9zdAorICAgIEB0eXBlIGRvbWFpbjogZG5zLm5hbWUu
TmFtZSBvYmplY3QKKyAgICBAaXZhciBuYW1lc2VydmVyczogQSBsaXN0IG9mIG5hbWVzZXJ2ZXJz
IHRvIHF1ZXJ5LiAgRWFjaCBuYW1lc2VydmVyIGlzCisgICAgYSBzdHJpbmcgd2hpY2ggY29udGFp
bnMgdGhlIElQIGFkZHJlc3Mgb2YgYSBuYW1lc2VydmVyLgorICAgIEB0eXBlIG5hbWVzZXJ2ZXJz
OiBsaXN0IG9mIHN0cmluZ3MKKyAgICBAaXZhciBzZWFyY2g6IFRoZSBzZWFyY2ggbGlzdC4gIElm
IHRoZSBxdWVyeSBuYW1lIGlzIGEgcmVsYXRpdmUgbmFtZSwKKyAgICB0aGUgcmVzb2x2ZXIgd2ls
bCBjb25zdHJ1Y3QgYW4gYWJzb2x1dGUgcXVlcnkgbmFtZSBieSBhcHBlbmRpbmcgdGhlIHNlYXJj
aAorICAgIG5hbWVzIG9uZSBieSBvbmUgdG8gdGhlIHF1ZXJ5IG5hbWUuCisgICAgQHR5cGUgc2Vh
cmNoOiBsaXN0IG9mIGRucy5uYW1lLk5hbWUgb2JqZWN0cworICAgIEBpdmFyIHBvcnQ6IFRoZSBw
b3J0IHRvIHdoaWNoIHRvIHNlbmQgcXVlcmllcy4gIFRoZSBkZWZhdWx0IGlzIDUzLgorICAgIEB0
eXBlIHBvcnQ6IGludAorICAgIEBpdmFyIHRpbWVvdXQ6IFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0
byB3YWl0IGZvciBhIHJlc3BvbnNlIGZyb20gYQorICAgIHNlcnZlciwgYmVmb3JlIHRpbWluZyBv
dXQuCisgICAgQHR5cGUgdGltZW91dDogZmxvYXQKKyAgICBAaXZhciBsaWZldGltZTogVGhlIHRv
dGFsIG51bWJlciBvZiBzZWNvbmRzIHRvIHNwZW5kIHRyeWluZyB0byBnZXQgYW4KKyAgICBhbnN3
ZXIgdG8gdGhlIHF1ZXN0aW9uLiAgSWYgdGhlIGxpZmV0aW1lIGV4cGlyZXMsIGEgVGltZW91dCBl
eGNlcHRpb24KKyAgICB3aWxsIG9jY3VyLgorICAgIEB0eXBlIGxpZmV0aW1lOiBmbG9hdAorICAg
IEBpdmFyIGtleXJpbmc6IFRoZSBUU0lHIGtleXJpbmcgdG8gdXNlLiAgVGhlIGRlZmF1bHQgaXMg
Tm9uZS4KKyAgICBAdHlwZSBrZXlyaW5nOiBkaWN0CisgICAgQGl2YXIga2V5bmFtZTogVGhlIFRT
SUcga2V5bmFtZSB0byB1c2UuICBUaGUgZGVmYXVsdCBpcyBOb25lLgorICAgIEB0eXBlIGtleW5h
bWU6IGRucy5uYW1lLk5hbWUgb2JqZWN0CisgICAgQGl2YXIga2V5YWxnb3JpdGhtOiBUaGUgVFNJ
RyBrZXkgYWxnb3JpdGhtIHRvIHVzZS4gIFRoZSBkZWZhdWx0IGlzCisgICAgZG5zLnRzaWcuZGVm
YXVsdF9hbGdvcml0aG0uCisgICAgQHR5cGUga2V5YWxnb3JpdGhtOiBzdHJpbmcKKyAgICBAaXZh
ciBlZG5zOiBUaGUgRUROUyBsZXZlbCB0byB1c2UuICBUaGUgZGVmYXVsdCBpcyAtMSwgbm8gRWRu
cy4KKyAgICBAdHlwZSBlZG5zOiBpbnQKKyAgICBAaXZhciBlZG5zZmxhZ3M6IFRoZSBFRE5TIGZs
YWdzCisgICAgQHR5cGUgZWRuc2ZsYWdzOiBpbnQKKyAgICBAaXZhciBwYXlsb2FkOiBUaGUgRURO
UyBwYXlsb2FkIHNpemUuICBUaGUgZGVmYXVsdCBpcyAwLgorICAgIEB0eXBlIHBheWxvYWQ6IGlu
dAorICAgIEBpdmFyIGNhY2hlOiBUaGUgY2FjaGUgdG8gdXNlLiAgVGhlIGRlZmF1bHQgaXMgTm9u
ZS4KKyAgICBAdHlwZSBjYWNoZTogZG5zLnJlc29sdmVyLkNhY2hlIG9iamVjdAorICAgICIiIgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZT0nL2V0Yy9yZXNvbHYuY29uZicsIGNvbmZp
Z3VyZT1UcnVlKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBhIHJlc29sdmVyIGluc3RhbmNlLgor
CisgICAgICAgIEBwYXJhbSBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIG9mIGEgY29uZmlndXJhdGlv
biBmaWxlIGluCisgICAgICAgIHN0YW5kYXJkIC9ldGMvcmVzb2x2LmNvbmYgZm9ybWF0LiAgVGhp
cyBwYXJhbWV0ZXIgaXMgbWVhbmluZ2Z1bAorICAgICAgICBvbmx5IHdoZW4gSXtjb25maWd1cmV9
IGlzIHRydWUgYW5kIHRoZSBwbGF0Zm9ybSBpcyBQT1NJWC4KKyAgICAgICAgQHR5cGUgZmlsZW5h
bWU6IHN0cmluZyBvciBmaWxlIG9iamVjdAorICAgICAgICBAcGFyYW0gY29uZmlndXJlOiBJZiBU
cnVlICh0aGUgZGVmYXVsdCksIHRoZSByZXNvbHZlciBpbnN0YW5jZQorICAgICAgICBpcyBjb25m
aWd1cmVkIGluIHRoZSBub3JtYWwgZmFzaGlvbiBmb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW0KKyAg
ICAgICAgdGhlIHJlc29sdmVyIGlzIHJ1bm5pbmcgb24uICAoSS5lLiBhIC9ldGMvcmVzb2x2LmNv
bmYgZmlsZSBvbgorICAgICAgICBQT1NJWCBzeXN0ZW1zIGFuZCBmcm9tIHRoZSByZWdpc3RyeSBv
biBXaW5kb3dzIHN5c3RlbXMuKQorICAgICAgICBAdHlwZSBjb25maWd1cmU6IGJvb2wiIiIKKwor
ICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICAgICAgaWYgY29uZmlndXJlOgorICAgICAgICAgICAg
aWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICAgICAgc2VsZi5yZWFkX3Jl
Z2lzdHJ5KCkKKyAgICAgICAgICAgIGVsaWYgZmlsZW5hbWU6CisgICAgICAgICAgICAgICAgc2Vs
Zi5yZWFkX3Jlc29sdl9jb25mKGZpbGVuYW1lKQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAg
ICAgICAiIiJSZXNldCBhbGwgcmVzb2x2ZXIgY29uZmlndXJhdGlvbiB0byB0aGUgZGVmYXVsdHMu
IiIiCisgICAgICAgIHNlbGYuZG9tYWluID0gXAorICAgICAgICAgICAgZG5zLm5hbWUuTmFtZShk
bnMubmFtZS5mcm9tX3RleHQoc29ja2V0LmdldGhvc3RuYW1lKCkpWzE6XSkKKyAgICAgICAgaWYg
bGVuKHNlbGYuZG9tYWluKSA9PSAwOgorICAgICAgICAgICAgc2VsZi5kb21haW4gPSBkbnMubmFt
ZS5yb290CisgICAgICAgIHNlbGYubmFtZXNlcnZlcnMgPSBbXQorICAgICAgICBzZWxmLnNlYXJj
aCA9IFtdCisgICAgICAgIHNlbGYucG9ydCA9IDUzCisgICAgICAgIHNlbGYudGltZW91dCA9IDIu
MAorICAgICAgICBzZWxmLmxpZmV0aW1lID0gMzAuMAorICAgICAgICBzZWxmLmtleXJpbmcgPSBO
b25lCisgICAgICAgIHNlbGYua2V5bmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5rZXlhbGdvcml0
aG0gPSBkbnMudHNpZy5kZWZhdWx0X2FsZ29yaXRobQorICAgICAgICBzZWxmLmVkbnMgPSAtMQor
ICAgICAgICBzZWxmLmVkbnNmbGFncyA9IDAKKyAgICAgICAgc2VsZi5wYXlsb2FkID0gMAorICAg
ICAgICBzZWxmLmNhY2hlID0gTm9uZQorCisgICAgZGVmIHJlYWRfcmVzb2x2X2NvbmYoc2VsZiwg
Zik6CisgICAgICAgICIiIlByb2Nlc3MgZiBhcyBhIGZpbGUgaW4gdGhlIC9ldGMvcmVzb2x2LmNv
bmYgZm9ybWF0LiAgSWYgZiBpcworICAgICAgICBhIHN0cmluZywgaXQgaXMgdXNlZCBhcyB0aGUg
bmFtZSBvZiB0aGUgZmlsZSB0byBvcGVuOyBvdGhlcndpc2UgaXQKKyAgICAgICAgaXMgdHJlYXRl
ZCBhcyB0aGUgZmlsZSBpdHNlbGYuIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZiwgc3RyKSBv
ciBpc2luc3RhbmNlKGYsIHVuaWNvZGUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIGYgPSBvcGVuKGYsICdyJykKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAg
ICAgICAgICAgICMgL2V0Yy9yZXNvbHYuY29uZiBkb2Vzbid0IGV4aXN0LCBjYW4ndCBiZSByZWFk
LCBldGMuCisgICAgICAgICAgICAgICAgIyBXZSdsbCBqdXN0IHVzZSB0aGUgZGVmYXVsdCByZXNv
bHZlciBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIHNlbGYubmFtZXNlcnZlcnMgPSBb
JzEyNy4wLjAuMSddCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICB3YW50X2Ns
b3NlID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2FudF9jbG9zZSA9IEZhbHNl
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBsIGluIGY6CisgICAgICAgICAgICAgICAg
aWYgbGVuKGwpID09IDAgb3IgbFswXSA9PSAnIycgb3IgbFswXSA9PSAnOyc6CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgdG9rZW5zID0gbC5zcGxpdCgpCisg
ICAgICAgICAgICAgICAgaWYgbGVuKHRva2VucykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWUKKyAgICAgICAgICAgICAgICBpZiB0b2tlbnNbMF0gPT0gJ25hbWVzZXJ2ZXInOgor
ICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWVzZXJ2ZXJzLmFwcGVuZCh0b2tlbnNbMV0pCisg
ICAgICAgICAgICAgICAgZWxpZiB0b2tlbnNbMF0gPT0gJ2RvbWFpbic6CisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuZG9tYWluID0gZG5zLm5hbWUuZnJvbV90ZXh0KHRva2Vuc1sxXSkKKyAgICAg
ICAgICAgICAgICBlbGlmIHRva2Vuc1swXSA9PSAnc2VhcmNoJzoKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIHN1ZmZpeCBpbiB0b2tlbnNbMTpdOgorICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5zZWFyY2guYXBwZW5kKGRucy5uYW1lLmZyb21fdGV4dChzdWZmaXgpKQorICAgICAgICBmaW5h
bGx5OgorICAgICAgICAgICAgaWYgd2FudF9jbG9zZToKKyAgICAgICAgICAgICAgICBmLmNsb3Nl
KCkKKyAgICAgICAgaWYgbGVuKHNlbGYubmFtZXNlcnZlcnMpID09IDA6CisgICAgICAgICAgICBz
ZWxmLm5hbWVzZXJ2ZXJzLmFwcGVuZCgnMTI3LjAuMC4xJykKKworICAgIGRlZiBfZGV0ZXJtaW5l
X3NwbGl0X2NoYXIoc2VsZiwgZW50cnkpOgorICAgICAgICAjCisgICAgICAgICMgVGhlIHdpbmRv
d3MgcmVnaXN0cnkgaXJyaXRhdGluZ2x5IGNoYW5nZXMgdGhlIGxpc3QgZWxlbWVudAorICAgICAg
ICAjIGRlbGltaXRlciBpbiBiZXR3ZWVuICcgJyBhbmQgJywnIChhbmQgdmljZS12ZXJzYSkgaW4g
dmFyaW91cworICAgICAgICAjIHZlcnNpb25zIG9mIHdpbmRvd3MuCisgICAgICAgICMKKyAgICAg
ICAgaWYgZW50cnkuZmluZCgnICcpID49IDA6CisgICAgICAgICAgICBzcGxpdF9jaGFyID0gJyAn
CisgICAgICAgIGVsaWYgZW50cnkuZmluZCgnLCcpID49IDA6CisgICAgICAgICAgICBzcGxpdF9j
aGFyID0gJywnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHByb2JhYmx5IGEgc2luZ2xl
dG9uOyB0cmVhdCBhcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0LgorICAgICAgICAgICAgc3BsaXRf
Y2hhciA9ICcgJworICAgICAgICByZXR1cm4gc3BsaXRfY2hhcgorCisgICAgZGVmIF9jb25maWdf
d2luMzJfbmFtZXNlcnZlcnMoc2VsZiwgbmFtZXNlcnZlcnMpOgorICAgICAgICAiIiJDb25maWd1
cmUgYSBOYW1lU2VydmVyIHJlZ2lzdHJ5IGVudHJ5LiIiIgorICAgICAgICAjIHdlIGNhbGwgc3Ry
KCkgb24gbmFtZXNlcnZlcnMgdG8gY29udmVydCBpdCBmcm9tIHVuaWNvZGUgdG8gYXNjaWkKKyAg
ICAgICAgbmFtZXNlcnZlcnMgPSBzdHIobmFtZXNlcnZlcnMpCisgICAgICAgIHNwbGl0X2NoYXIg
PSBzZWxmLl9kZXRlcm1pbmVfc3BsaXRfY2hhcihuYW1lc2VydmVycykKKyAgICAgICAgbnNfbGlz
dCA9IG5hbWVzZXJ2ZXJzLnNwbGl0KHNwbGl0X2NoYXIpCisgICAgICAgIGZvciBucyBpbiBuc19s
aXN0OgorICAgICAgICAgICAgaWYgbm90IG5zIGluIHNlbGYubmFtZXNlcnZlcnM6CisgICAgICAg
ICAgICAgICAgc2VsZi5uYW1lc2VydmVycy5hcHBlbmQobnMpCisKKyAgICBkZWYgX2NvbmZpZ193
aW4zMl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgIiIiQ29uZmlndXJlIGEgRG9tYWlu
IHJlZ2lzdHJ5IGVudHJ5LiIiIgorICAgICAgICAjIHdlIGNhbGwgc3RyKCkgb24gZG9tYWluIHRv
IGNvbnZlcnQgaXQgZnJvbSB1bmljb2RlIHRvIGFzY2lpCisgICAgICAgIHNlbGYuZG9tYWluID0g
ZG5zLm5hbWUuZnJvbV90ZXh0KHN0cihkb21haW4pKQorCisgICAgZGVmIF9jb25maWdfd2luMzJf
c2VhcmNoKHNlbGYsIHNlYXJjaCk6CisgICAgICAgICIiIkNvbmZpZ3VyZSBhIFNlYXJjaCByZWdp
c3RyeSBlbnRyeS4iIiIKKyAgICAgICAgIyB3ZSBjYWxsIHN0cigpIG9uIHNlYXJjaCB0byBjb252
ZXJ0IGl0IGZyb20gdW5pY29kZSB0byBhc2NpaQorICAgICAgICBzZWFyY2ggPSBzdHIoc2VhcmNo
KQorICAgICAgICBzcGxpdF9jaGFyID0gc2VsZi5fZGV0ZXJtaW5lX3NwbGl0X2NoYXIoc2VhcmNo
KQorICAgICAgICBzZWFyY2hfbGlzdCA9IHNlYXJjaC5zcGxpdChzcGxpdF9jaGFyKQorICAgICAg
ICBmb3IgcyBpbiBzZWFyY2hfbGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBzIGluIHNlbGYuc2Vh
cmNoOgorICAgICAgICAgICAgICAgIHNlbGYuc2VhcmNoLmFwcGVuZChkbnMubmFtZS5mcm9tX3Rl
eHQocykpCisKKyAgICBkZWYgX2NvbmZpZ193aW4zMl9mcm9ta2V5KHNlbGYsIGtleSk6CisgICAg
ICAgICIiIkV4dHJhY3QgRE5TIGluZm8gZnJvbSBhIHJlZ2lzdHJ5IGtleS4iIiIKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgc2VydmVycywgcnR5cGUgPSBfd2lucmVnLlF1ZXJ5VmFsdWVFeChr
ZXksICdOYW1lU2VydmVyJykKKyAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAg
ICAgIHNlcnZlcnMgPSBOb25lCisgICAgICAgIGlmIHNlcnZlcnM6CisgICAgICAgICAgICBzZWxm
Ll9jb25maWdfd2luMzJfbmFtZXNlcnZlcnMoc2VydmVycykKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICBkb20sIHJ0eXBlID0gX3dpbnJlZy5RdWVyeVZhbHVlRXgoa2V5LCAnRG9t
YWluJykKKyAgICAgICAgICAgICAgICBpZiBkb206CisgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2NvbmZpZ193aW4zMl9kb21haW4oZG9tKQorICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJv
cjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6
CisgICAgICAgICAgICAgICAgc2VydmVycywgcnR5cGUgPSBfd2lucmVnLlF1ZXJ5VmFsdWVFeChr
ZXksICdEaGNwTmFtZVNlcnZlcicpCisgICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgor
ICAgICAgICAgICAgICAgIHNlcnZlcnMgPSBOb25lCisgICAgICAgICAgICBpZiBzZXJ2ZXJzOgor
ICAgICAgICAgICAgICAgIHNlbGYuX2NvbmZpZ193aW4zMl9uYW1lc2VydmVycyhzZXJ2ZXJzKQor
ICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZG9tLCBydHlwZSA9IF93
aW5yZWcuUXVlcnlWYWx1ZUV4KGtleSwgJ0RoY3BEb21haW4nKQorICAgICAgICAgICAgICAgICAg
ICBpZiBkb206CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb25maWdfd2luMzJfZG9t
YWluKGRvbSkKKyAgICAgICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAg
ICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlYXJjaCwgcnR5cGUg
PSBfd2lucmVnLlF1ZXJ5VmFsdWVFeChrZXksICdTZWFyY2hMaXN0JykKKyAgICAgICAgZXhjZXB0
IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIHNlYXJjaCA9IE5vbmUKKyAgICAgICAgaWYgc2Vh
cmNoOgorICAgICAgICAgICAgc2VsZi5fY29uZmlnX3dpbjMyX3NlYXJjaChzZWFyY2gpCisKKyAg
ICBkZWYgcmVhZF9yZWdpc3RyeShzZWxmKToKKyAgICAgICAgIiIiRXh0cmFjdCByZXNvbHZlciBj
b25maWd1cmF0aW9uIGZyb20gdGhlIFdpbmRvd3MgcmVnaXN0cnkuIiIiCisgICAgICAgIGxtID0g
X3dpbnJlZy5Db25uZWN0UmVnaXN0cnkoTm9uZSwgX3dpbnJlZy5IS0VZX0xPQ0FMX01BQ0hJTkUp
CisgICAgICAgIHdhbnRfc2NhbiA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICAjIFhQLCAyMDAwCisgICAgICAgICAgICAgICAgdGNwX3BhcmFt
cyA9IF93aW5yZWcuT3BlbktleShsbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHInU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0JworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidcU2VydmljZXNcVGNwaXBcUGFyYW1ldGVy
cycpCisgICAgICAgICAgICAgICAgd2FudF9zY2FuID0gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0
IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgIyBNRQorICAgICAgICAgICAgICAg
IHRjcF9wYXJhbXMgPSBfd2lucmVnLk9wZW5LZXkobG0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByJ1NZU1RFTVxDdXJyZW50Q29udHJvbFNldCcKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInXFNlcnZpY2VzXFZ4RFxN
U1RDUCcpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fY29uZmlnX3dp
bjMyX2Zyb21rZXkodGNwX3BhcmFtcykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg
ICAgICAgdGNwX3BhcmFtcy5DbG9zZSgpCisgICAgICAgICAgICBpZiB3YW50X3NjYW46CisgICAg
ICAgICAgICAgICAgaW50ZXJmYWNlcyA9IF93aW5yZWcuT3BlbktleShsbSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInU1lTVEVNXEN1cnJlbnRDb250cm9s
U2V0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidcU2Vy
dmljZXNcVGNwaXBcUGFyYW1ldGVycycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHInXEludGVyZmFjZXMnKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
dWlkID0gX3dpbnJlZy5FbnVtS2V5KGludGVyZmFjZXMsIGkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gX3dpbnJl
Zy5PcGVuS2V5KGludGVyZmFjZXMsIGd1aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgbm90IHNlbGYuX3dpbjMyX2lzX25pY19lbmFibGVkKGxtLCBndWlkLCBrZXkpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29uZmln
X3dpbjMyX2Zyb21rZXkoa2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5DbG9zZSgpCisgICAgICAgICAg
ICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAg
ICAgICAgIGludGVyZmFjZXMuQ2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAg
bG0uQ2xvc2UoKQorCisgICAgZGVmIF93aW4zMl9pc19uaWNfZW5hYmxlZChzZWxmLCBsbSwgZ3Vp
ZCwgaW50ZXJmYWNlX2tleSk6CisgICAgICAgICAjIExvb2sgaW4gdGhlIFdpbmRvd3MgUmVnaXN0
cnkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG5ldHdvcmsKKyAgICAgICAgICMgaW50ZXJmYWNl
IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGd1aWQgaXMgZW5hYmxlZC4KKyAgICAgICAgICMK
KyAgICAgICAgICMgKENvZGUgY29udHJpYnV0ZWQgYnkgUGF1bCBNYXJrcywgdGhhbmtzISkKKyAg
ICAgICAgICMKKyAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAjIFRoaXMgaGFyZC1jb2RlZCBs
b2NhdGlvbiBzZWVtcyB0byBiZSBjb25zaXN0ZW50LCBhdCBsZWFzdAorICAgICAgICAgICAgICMg
ZnJvbSBXaW5kb3dzIDIwMDAgdGhyb3VnaCBWaXN0YS4KKyAgICAgICAgICAgICBjb25uZWN0aW9u
X2tleSA9IF93aW5yZWcuT3BlbktleSgKKyAgICAgICAgICAgICAgICAgbG0sCisgICAgICAgICAg
ICAgICAgIHInU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0XENvbnRyb2xcTmV0d29yaycKKyAgICAg
ICAgICAgICAgICAgcidcezREMzZFOTcyLUUzMjUtMTFDRS1CRkMxLTA4MDAyQkUxMDMxOH0nCisg
ICAgICAgICAgICAgICAgIHInXCVzXENvbm5lY3Rpb24nICUgZ3VpZCkKKworICAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICAgIyBUaGUgUG5wSW5zdGFuY2VJRCBwb2ludHMgdG8gYSBr
ZXkgaW5zaWRlIEVudW0KKyAgICAgICAgICAgICAgICAgKHBucF9pZCwgdHR5cGUpID0gX3dpbnJl
Zy5RdWVyeVZhbHVlRXgoCisgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uX2tleSwgJ1Bu
cEluc3RhbmNlSUQnKQorCisgICAgICAgICAgICAgICAgIGlmIHR0eXBlICE9IF93aW5yZWcuUkVH
X1NaOgorICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorCisgICAgICAgICAg
ICAgICAgIGRldmljZV9rZXkgPSBfd2lucmVnLk9wZW5LZXkoCisgICAgICAgICAgICAgICAgICAg
ICBsbSwgcidTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcRW51bVwlcycgJSBwbnBfaWQpCisKKyAg
ICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgIyBHZXQgQ29uZmlnRmxh
Z3MgZm9yIHRoaXMgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MsIHR0eXBlKSA9
IF93aW5yZWcuUXVlcnlWYWx1ZUV4KAorICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV9r
ZXksICdDb25maWdGbGFncycpCisKKyAgICAgICAgICAgICAgICAgICAgIGlmIHR0eXBlICE9IF93
aW5yZWcuUkVHX0RXT1JEOgorICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IKKworICAgICAgICAgICAgICAgICAgICAgIyBCYXNlZCBvbiBleHBlcmltZW50YXRpb24sIGJp
dCAweDEgaW5kaWNhdGVzIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAjIGRldmljZSBp
cyBkaXNhYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3QgKGZsYWdzICYgMHgx
KQorCisgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICBkZXZp
Y2Vfa2V5LkNsb3NlKCkKKyAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICBj
b25uZWN0aW9uX2tleS5DbG9zZSgpCisgICAgICAgICBleGNlcHQgKEVudmlyb25tZW50RXJyb3Is
IFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICMgUHJlLXZpc3RhLCBlbmFibGVkIGludGVyZmFj
ZXMgc2VlbSB0byBoYXZlIGEgbm9uLWVtcHR5CisgICAgICAgICAgICAgIyBOVEVDb250ZXh0TGlz
dDsgdGhpcyB3YXMgaG93IGRuc3B5dGhvbiBkZXRlY3RlZCBlbmFibGVkCisgICAgICAgICAgICAg
IyBuaWNzIGJlZm9yZSB0aGUgY29kZSBhYm92ZSB3YXMgY29udHJpYnV0ZWQuICBXZSd2ZSByZXRh
aW5lZAorICAgICAgICAgICAgICMgdGhlIG9sZCBtZXRob2Qgc2luY2Ugd2UgZG9uJ3Qga25vdyBp
ZiB0aGUgY29kZSBhYm92ZSB3b3JrcworICAgICAgICAgICAgICMgb24gV2luZG93cyA5NS85OC9N
RS4KKyAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIChudGUsIHR0eXBlKSA9IF93
aW5yZWcuUXVlcnlWYWx1ZUV4KGludGVyZmFjZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOVEVDb250ZXh0TGlzdCcpCisgICAgICAg
ICAgICAgICAgIHJldHVybiBudGUgaXMgbm90IE5vbmUKKyAgICAgICAgICAgICBleGNlcHQgV2lu
ZG93c0Vycm9yOgorICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfY29t
cHV0ZV90aW1lb3V0KHNlbGYsIHN0YXJ0KToKKyAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAg
ICAgICAgaWYgbm93IDwgc3RhcnQ6CisgICAgICAgICAgICBpZiBzdGFydCAtIG5vdyA+IDE6Cisg
ICAgICAgICAgICAgICAgIyBUaW1lIGdvaW5nIGJhY2t3YXJkcyBpcyBiYWQuICBKdXN0IGdpdmUg
dXAuCisgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dAorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICAjIFRpbWUgd2VudCBiYWNrd2FyZHMsIGJ1dCBvbmx5IGEgbGl0dGxlLiAg
VGhpcyBjYW4KKyAgICAgICAgICAgICAgICAjIGhhcHBlbiwgZS5nLiB1bmRlciB2bXdhcmUgd2l0
aCBvbGRlciBsaW51eCBrZXJuZWxzLgorICAgICAgICAgICAgICAgICMgUHJldGVuZCBpdCBkaWRu
J3QgaGFwcGVuLgorICAgICAgICAgICAgICAgIG5vdyA9IHN0YXJ0CisgICAgICAgIGR1cmF0aW9u
ID0gbm93IC0gc3RhcnQKKyAgICAgICAgaWYgZHVyYXRpb24gPj0gc2VsZi5saWZldGltZToKKyAg
ICAgICAgICAgIHJhaXNlIFRpbWVvdXQKKyAgICAgICAgcmV0dXJuIG1pbihzZWxmLmxpZmV0aW1l
IC0gZHVyYXRpb24sIHNlbGYudGltZW91dCkKKworICAgIGRlZiBxdWVyeShzZWxmLCBxbmFtZSwg
cmR0eXBlPWRucy5yZGF0YXR5cGUuQSwgcmRjbGFzcz1kbnMucmRhdGFjbGFzcy5JTiwKKyAgICAg
ICAgICAgICAgdGNwPUZhbHNlLCBzb3VyY2U9Tm9uZSk6CisgICAgICAgICIiIlF1ZXJ5IG5hbWVz
ZXJ2ZXJzIHRvIGZpbmQgdGhlIGFuc3dlciB0byB0aGUgcXVlc3Rpb24uCisKKyAgICAgICAgVGhl
IEl7cW5hbWV9LCBJe3JkdHlwZX0sIGFuZCBJe3JkY2xhc3N9IHBhcmFtZXRlcnMgbWF5IGJlIG9i
amVjdHMKKyAgICAgICAgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUsIG9yIHN0cmluZ3MgdGhhdCBj
YW4gYmUgY29udmVydGVkIGludG8gb2JqZWN0cworICAgICAgICBvZiB0aGUgYXBwcm9wcmlhdGUg
dHlwZS4gIEUuZy4gRm9yIEl7cmR0eXBlfSB0aGUgaW50ZWdlciAyIGFuZCB0aGUKKyAgICAgICAg
dGhlIHN0cmluZyAnTlMnIGJvdGggbWVhbiB0byBxdWVyeSBmb3IgcmVjb3JkcyB3aXRoIEROUyBy
ZGF0YSB0eXBlIE5TLgorCisgICAgICAgIEBwYXJhbSBxbmFtZTogdGhlIHF1ZXJ5IG5hbWUKKyAg
ICAgICAgQHR5cGUgcW5hbWU6IGRucy5uYW1lLk5hbWUgb2JqZWN0IG9yIHN0cmluZworICAgICAg
ICBAcGFyYW0gcmR0eXBlOiB0aGUgcXVlcnkgdHlwZQorICAgICAgICBAdHlwZSByZHR5cGU6IGlu
dCBvciBzdHJpbmcKKyAgICAgICAgQHBhcmFtIHJkY2xhc3M6IHRoZSBxdWVyeSBjbGFzcworICAg
ICAgICBAdHlwZSByZGNsYXNzOiBpbnQgb3Igc3RyaW5nCisgICAgICAgIEBwYXJhbSB0Y3A6IHVz
ZSBUQ1AgdG8gbWFrZSB0aGUgcXVlcnkgKGRlZmF1bHQgaXMgRmFsc2UpLgorICAgICAgICBAdHlw
ZSB0Y3A6IGJvb2wKKyAgICAgICAgQHBhcmFtIHNvdXJjZTogYmluZCB0byB0aGlzIElQIGFkZHJl
c3MgKGRlZmF1bHRzIHRvIG1hY2hpbmUgZGVmYXVsdCBJUCkuCisgICAgICAgIEB0eXBlIHNvdXJj
ZTogSVAgYWRkcmVzcyBpbiBkb3R0ZWQgcXVhZCBub3RhdGlvbgorICAgICAgICBAcnR5cGU6IGRu
cy5yZXNvbHZlci5BbnN3ZXIgaW5zdGFuY2UKKyAgICAgICAgQHJhaXNlcyBUaW1lb3V0OiBubyBh
bnN3ZXJzIGNvdWxkIGJlIGZvdW5kIGluIHRoZSBzcGVjaWZpZWQgbGlmZXRpbWUKKyAgICAgICAg
QHJhaXNlcyBOWERPTUFJTjogdGhlIHF1ZXJ5IG5hbWUgZG9lcyBub3QgZXhpc3QKKyAgICAgICAg
QHJhaXNlcyBOb0Fuc3dlcjogdGhlIHJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhbiBhbnN3ZXIK
KyAgICAgICAgQHJhaXNlcyBOb05hbWVzZXJ2ZXJzOiBubyBub24tYnJva2VuIG5hbWVzZXJ2ZXJz
IGFyZSBhdmFpbGFibGUgdG8KKyAgICAgICAgYW5zd2VyIHRoZSBxdWVzdGlvbi4iIiIKKworICAg
ICAgICBpZiBpc2luc3RhbmNlKHFuYW1lLCAoc3RyLCB1bmljb2RlKSk6CisgICAgICAgICAgICBx
bmFtZSA9IGRucy5uYW1lLmZyb21fdGV4dChxbmFtZSwgTm9uZSkKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShyZHR5cGUsIHN0cik6CisgICAgICAgICAgICByZHR5cGUgPSBkbnMucmRhdGF0eXBlLmZy
b21fdGV4dChyZHR5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UocmRjbGFzcywgc3RyKToKKyAg
ICAgICAgICAgIHJkY2xhc3MgPSBkbnMucmRhdGFjbGFzcy5mcm9tX3RleHQocmRjbGFzcykKKyAg
ICAgICAgcW5hbWVzX3RvX3RyeSA9IFtdCisgICAgICAgIGlmIHFuYW1lLmlzX2Fic29sdXRlKCk6
CisgICAgICAgICAgICBxbmFtZXNfdG9fdHJ5LmFwcGVuZChxbmFtZSkKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGlmIGxlbihxbmFtZSkgPiAxOgorICAgICAgICAgICAgICAgIHFuYW1lc190
b190cnkuYXBwZW5kKHFuYW1lLmNvbmNhdGVuYXRlKGRucy5uYW1lLnJvb3QpKQorICAgICAgICAg
ICAgaWYgc2VsZi5zZWFyY2g6CisgICAgICAgICAgICAgICAgZm9yIHN1ZmZpeCBpbiBzZWxmLnNl
YXJjaDoKKyAgICAgICAgICAgICAgICAgICAgcW5hbWVzX3RvX3RyeS5hcHBlbmQocW5hbWUuY29u
Y2F0ZW5hdGUoc3VmZml4KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcW5h
bWVzX3RvX3RyeS5hcHBlbmQocW5hbWUuY29uY2F0ZW5hdGUoc2VsZi5kb21haW4pKQorICAgICAg
ICBhbGxfbnhkb21haW4gPSBUcnVlCisgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAg
ICAgZm9yIHFuYW1lIGluIHFuYW1lc190b190cnk6CisgICAgICAgICAgICBpZiBzZWxmLmNhY2hl
OgorICAgICAgICAgICAgICAgIGFuc3dlciA9IHNlbGYuY2FjaGUuZ2V0KChxbmFtZSwgcmR0eXBl
LCByZGNsYXNzKSkKKyAgICAgICAgICAgICAgICBpZiBhbnN3ZXI6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBhbnN3ZXIKKyAgICAgICAgICAgIHJlcXVlc3QgPSBkbnMubWVzc2FnZS5tYWtl
X3F1ZXJ5KHFuYW1lLCByZHR5cGUsIHJkY2xhc3MpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5r
ZXluYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmVxdWVzdC51c2VfdHNpZyhzZWxmLmtl
eXJpbmcsIHNlbGYua2V5bmFtZSwgc2VsZi5rZXlhbGdvcml0aG0pCisgICAgICAgICAgICByZXF1
ZXN0LnVzZV9lZG5zKHNlbGYuZWRucywgc2VsZi5lZG5zZmxhZ3MsIHNlbGYucGF5bG9hZCkKKyAg
ICAgICAgICAgIHJlc3BvbnNlID0gTm9uZQorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBt
YWtlIGEgY29weSBvZiB0aGUgc2VydmVycyBsaXN0IHNvIHdlIGNhbiBhbHRlciBpdCBsYXRlci4K
KyAgICAgICAgICAgICMKKyAgICAgICAgICAgIG5hbWVzZXJ2ZXJzID0gc2VsZi5uYW1lc2VydmVy
c1s6XQorICAgICAgICAgICAgYmFja29mZiA9IDAuMTAKKyAgICAgICAgICAgIHdoaWxlIHJlc3Bv
bnNlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbGVuKG5hbWVzZXJ2ZXJzKSA9PSAwOgor
ICAgICAgICAgICAgICAgICAgICByYWlzZSBOb05hbWVzZXJ2ZXJzCisgICAgICAgICAgICAgICAg
Zm9yIG5hbWVzZXJ2ZXIgaW4gbmFtZXNlcnZlcnNbOl06CisgICAgICAgICAgICAgICAgICAgIHRp
bWVvdXQgPSBzZWxmLl9jb21wdXRlX3RpbWVvdXQoc3RhcnQpCisgICAgICAgICAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRjcDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZSA9IGRucy5xdWVyeS50Y3AocmVxdWVzdCwgbmFtZXNlcnZlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlt
ZW91dCwgc2VsZi5wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzb3VyY2U9c291cmNlKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGRucy5xdWVyeS51ZHAo
cmVxdWVzdCwgbmFtZXNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZW91dCwgc2VsZi5wb3J0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9c291cmNlKQorICAgICAg
ICAgICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgZG5zLmV4Y2VwdGlvbi5UaW1lb3V0
KToKKyAgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICMg
Q29tbXVuaWNhdGlvbiBmYWlsdXJlIG9yIHRpbWVvdXQuICBHbyB0byB0aGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICMgbmV4dCBzZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICMKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gTm9uZQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGRucy5xdWVyeS5VbmV4
cGVjdGVkU291cmNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAg
ICAgICAgICAgIyBXaG8ga25vd3M/ICBLZWVwIGdvaW5nLgorICAgICAgICAgICAgICAgICAgICAg
ICAgIworICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBOb25lCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgZG5zLmV4
Y2VwdGlvbi5Gb3JtRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAg
ICAgICAgICAgICAgICAjIFdlIGRvbid0IHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNlcnZlciBpcwor
ICAgICAgICAgICAgICAgICAgICAgICAgIyBzYXlpbmcuICBUYWtlIGl0IG91dCBvZiB0aGUgbWl4
IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIyBjb250aW51ZS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzZXJ2ZXJzLnJlbW92ZShu
YW1lc2VydmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBOb25lCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICByY29kZSA9
IHJlc3BvbnNlLnJjb2RlKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmNvZGUgPT0gZG5zLnJj
b2RlLk5PRVJST1Igb3IgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmNvZGUgPT0gZG5z
LnJjb2RlLk5YRE9NQUlOOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAg
ICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAjIFdlIGdvdCBhIHJlc3BvbnNlLCBi
dXQgd2UncmUgbm90IGhhcHB5IHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICMgcmNvZGUg
aW4gaXQuICBSZW1vdmUgdGhlIHNlcnZlciBmcm9tIHRoZSBtaXggaWYKKyAgICAgICAgICAgICAg
ICAgICAgIyB0aGUgcmNvZGUgaXNuJ3QgU0VSVkZBSUwuCisgICAgICAgICAgICAgICAgICAgICMK
KyAgICAgICAgICAgICAgICAgICAgaWYgcmNvZGUgIT0gZG5zLnJjb2RlLlNFUlZGQUlMOgorICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZXNlcnZlcnMucmVtb3ZlKG5hbWVzZXJ2ZXIpCisgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIG5vdCBy
ZXNwb25zZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAg
ICAgICMKKyAgICAgICAgICAgICAgICAjIEFsbCBuYW1lc2VydmVycyBmYWlsZWQhCisgICAgICAg
ICAgICAgICAgIworICAgICAgICAgICAgICAgIGlmIGxlbihuYW1lc2VydmVycykgPiAwOgorICAg
ICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICMgQnV0IHdlIHN0aWxsIGhh
dmUgc2VydmVycyB0byB0cnkuICBTbGVlcCBhIGJpdAorICAgICAgICAgICAgICAgICAgICAjIHNv
IHdlIGRvbid0IHBvdW5kIHRoZW0hCisgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAg
ICAgICAgICAgdGltZW91dCA9IHNlbGYuX2NvbXB1dGVfdGltZW91dChzdGFydCkKKyAgICAgICAg
ICAgICAgICAgICAgc2xlZXBfdGltZSA9IG1pbih0aW1lb3V0LCBiYWNrb2ZmKQorICAgICAgICAg
ICAgICAgICAgICBiYWNrb2ZmICo9IDIKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcChz
bGVlcF90aW1lKQorICAgICAgICAgICAgaWYgcmVzcG9uc2UucmNvZGUoKSA9PSBkbnMucmNvZGUu
TlhET01BSU46CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFsbF9ueGRv
bWFpbiA9IEZhbHNlCisgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBhbGxfbnhkb21haW46
CisgICAgICAgICAgICByYWlzZSBOWERPTUFJTgorICAgICAgICBhbnN3ZXIgPSBBbnN3ZXIocW5h
bWUsIHJkdHlwZSwgcmRjbGFzcywgcmVzcG9uc2UpCisgICAgICAgIGlmIHNlbGYuY2FjaGU6Cisg
ICAgICAgICAgICBzZWxmLmNhY2hlLnB1dCgocW5hbWUsIHJkdHlwZSwgcmRjbGFzcyksIGFuc3dl
cikKKyAgICAgICAgcmV0dXJuIGFuc3dlcgorCisgICAgZGVmIHVzZV90c2lnKHNlbGYsIGtleXJp
bmcsIGtleW5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgYWxnb3JpdGhtPWRucy50c2lnLmRl
ZmF1bHRfYWxnb3JpdGhtKToKKyAgICAgICAgIiIiQWRkIGEgVFNJRyBzaWduYXR1cmUgdG8gdGhl
IHF1ZXJ5LgorCisgICAgICAgIEBwYXJhbSBrZXlyaW5nOiBUaGUgVFNJRyBrZXlyaW5nIHRvIHVz
ZTsgZGVmYXVsdHMgdG8gTm9uZS4KKyAgICAgICAgQHR5cGUga2V5cmluZzogZGljdAorICAgICAg
ICBAcGFyYW0ga2V5bmFtZTogVGhlIG5hbWUgb2YgdGhlIFRTSUcga2V5IHRvIHVzZTsgZGVmYXVs
dHMgdG8gTm9uZS4KKyAgICAgICAgVGhlIGtleSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGtleXJp
bmcuICBJZiBhIGtleXJpbmcgaXMgc3BlY2lmaWVkCisgICAgICAgIGJ1dCBhIGtleW5hbWUgaXMg
bm90LCB0aGVuIHRoZSBrZXkgdXNlZCB3aWxsIGJlIHRoZSBmaXJzdCBrZXkgaW4gdGhlCisgICAg
ICAgIGtleXJpbmcuICBOb3RlIHRoYXQgdGhlIG9yZGVyIG9mIGtleXMgaW4gYSBkaWN0aW9uYXJ5
IGlzIG5vdCBkZWZpbmVkLAorICAgICAgICBzbyBhcHBsaWNhdGlvbnMgc2hvdWxkIHN1cHBseSBh
IGtleW5hbWUgd2hlbiBhIGtleXJpbmcgaXMgdXNlZCwgdW5sZXNzCisgICAgICAgIHRoZXkga25v
dyB0aGUga2V5cmluZyBjb250YWlucyBvbmx5IG9uZSBrZXkuCisgICAgICAgIEBwYXJhbSBhbGdv
cml0aG06IFRoZSBUU0lHIGtleSBhbGdvcml0aG0gdG8gdXNlLiAgVGhlIGRlZmF1bHQKKyAgICAg
ICAgaXMgZG5zLnRzaWcuZGVmYXVsdF9hbGdvcml0aG0uCisgICAgICAgIEB0eXBlIGFsZ29yaXRo
bTogc3RyaW5nIiIiCisgICAgICAgIHNlbGYua2V5cmluZyA9IGtleXJpbmcKKyAgICAgICAgaWYg
a2V5bmFtZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5rZXluYW1lID0gc2VsZi5rZXlyaW5n
LmtleXMoKVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5rZXluYW1lID0ga2V5
bmFtZQorICAgICAgICBzZWxmLmtleWFsZ29yaXRobSA9IGFsZ29yaXRobQorCisgICAgZGVmIHVz
ZV9lZG5zKHNlbGYsIGVkbnMsIGVkbnNmbGFncywgcGF5bG9hZCk6CisgICAgICAgICIiIkNvbmZp
Z3VyZSBFZG5zLgorCisgICAgICAgIEBwYXJhbSBlZG5zOiBUaGUgRUROUyBsZXZlbCB0byB1c2Uu
ICBUaGUgZGVmYXVsdCBpcyAtMSwgbm8gRWRucy4KKyAgICAgICAgQHR5cGUgZWRuczogaW50Cisg
ICAgICAgIEBwYXJhbSBlZG5zZmxhZ3M6IFRoZSBFRE5TIGZsYWdzCisgICAgICAgIEB0eXBlIGVk
bnNmbGFnczogaW50CisgICAgICAgIEBwYXJhbSBwYXlsb2FkOiBUaGUgRUROUyBwYXlsb2FkIHNp
emUuICBUaGUgZGVmYXVsdCBpcyAwLgorICAgICAgICBAdHlwZSBwYXlsb2FkOiBpbnQiIiIKKwor
ICAgICAgICBpZiBlZG5zIGlzIE5vbmU6CisgICAgICAgICAgICBlZG5zID0gLTEKKyAgICAgICAg
c2VsZi5lZG5zID0gZWRucworICAgICAgICBzZWxmLmVkbnNmbGFncyA9IGVkbnNmbGFncworICAg
ICAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkCisKK2RlZmF1bHRfcmVzb2x2ZXIgPSBOb25lCisK
K2RlZiBnZXRfZGVmYXVsdF9yZXNvbHZlcigpOgorICAgICIiIkdldCB0aGUgZGVmYXVsdCByZXNv
bHZlciwgaW5pdGlhbGl6aW5nIGl0IGlmIG5lY2Vzc2FyeS4iIiIKKyAgICBnbG9iYWwgZGVmYXVs
dF9yZXNvbHZlcgorICAgIGlmIGRlZmF1bHRfcmVzb2x2ZXIgaXMgTm9uZToKKyAgICAgICAgZGVm
YXVsdF9yZXNvbHZlciA9IFJlc29sdmVyKCkKKyAgICByZXR1cm4gZGVmYXVsdF9yZXNvbHZlcgor
CitkZWYgcXVlcnkocW5hbWUsIHJkdHlwZT1kbnMucmRhdGF0eXBlLkEsIHJkY2xhc3M9ZG5zLnJk
YXRhY2xhc3MuSU4sCisgICAgICAgICAgdGNwPUZhbHNlLCBzb3VyY2U9Tm9uZSk6CisgICAgIiIi
UXVlcnkgbmFtZXNlcnZlcnMgdG8gZmluZCB0aGUgYW5zd2VyIHRvIHRoZSBxdWVzdGlvbi4KKwor
ICAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IHVzZXMgdGhlIGRlZmF1bHQg
cmVzb2x2ZXIKKyAgICBvYmplY3QgdG8gbWFrZSB0aGUgcXVlcnkuCisgICAgQHNlZTogTHtkbnMu
cmVzb2x2ZXIuUmVzb2x2ZXIucXVlcnl9IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZQorICAg
IHBhcmFtZXRlcnMuIiIiCisgICAgcmV0dXJuIGdldF9kZWZhdWx0X3Jlc29sdmVyKCkucXVlcnko
cW5hbWUsIHJkdHlwZSwgcmRjbGFzcywgdGNwLCBzb3VyY2UpCisKK2RlZiB6b25lX2Zvcl9uYW1l
KG5hbWUsIHJkY2xhc3M9ZG5zLnJkYXRhY2xhc3MuSU4sIHRjcD1GYWxzZSwgcmVzb2x2ZXI9Tm9u
ZSk6CisgICAgIiIiRmluZCB0aGUgbmFtZSBvZiB0aGUgem9uZSB3aGljaCBjb250YWlucyB0aGUg
c3BlY2lmaWVkIG5hbWUuCisKKyAgICBAcGFyYW0gbmFtZTogdGhlIHF1ZXJ5IG5hbWUKKyAgICBA
dHlwZSBuYW1lOiBhYnNvbHV0ZSBkbnMubmFtZS5OYW1lIG9iamVjdCBvciBzdHJpbmcKKyAgICBA
cGFyYW0gcmRjbGFzczogVGhlIHF1ZXJ5IGNsYXNzCisgICAgQHR5cGUgcmRjbGFzczogaW50Cisg
ICAgQHBhcmFtIHRjcDogdXNlIFRDUCB0byBtYWtlIHRoZSBxdWVyeSAoZGVmYXVsdCBpcyBGYWxz
ZSkuCisgICAgQHR5cGUgdGNwOiBib29sCisgICAgQHBhcmFtIHJlc29sdmVyOiB0aGUgcmVzb2x2
ZXIgdG8gdXNlCisgICAgQHR5cGUgcmVzb2x2ZXI6IGRucy5yZXNvbHZlci5SZXNvbHZlciBvYmpl
Y3Qgb3IgTm9uZQorICAgIEBydHlwZTogZG5zLm5hbWUuTmFtZSIiIgorCisgICAgaWYgaXNpbnN0
YW5jZShuYW1lLCAoc3RyLCB1bmljb2RlKSk6CisgICAgICAgIG5hbWUgPSBkbnMubmFtZS5mcm9t
X3RleHQobmFtZSwgZG5zLm5hbWUucm9vdCkKKyAgICBpZiByZXNvbHZlciBpcyBOb25lOgorICAg
ICAgICByZXNvbHZlciA9IGdldF9kZWZhdWx0X3Jlc29sdmVyKCkKKyAgICBpZiBub3QgbmFtZS5p
c19hYnNvbHV0ZSgpOgorICAgICAgICByYWlzZSBOb3RBYnNvbHV0ZShuYW1lKQorICAgIHdoaWxl
IDE6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFuc3dlciA9IHJlc29sdmVyLnF1ZXJ5KG5h
bWUsIGRucy5yZGF0YXR5cGUuU09BLCByZGNsYXNzLCB0Y3ApCisgICAgICAgICAgICByZXR1cm4g
bmFtZQorICAgICAgICBleGNlcHQgKGRucy5yZXNvbHZlci5OWERPTUFJTiwgZG5zLnJlc29sdmVy
Lk5vQW5zd2VyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFt
ZS5wYXJlbnQoKQorICAgICAgICAgICAgZXhjZXB0IGRucy5uYW1lLk5vUGFyZW50OgorICAgICAg
ICAgICAgICAgIHJhaXNlIE5vUm9vdFNPQQpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGly
ZF9wYXJ0eS9kbnMvcmV2ZXJzZW5hbWUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJl
cGxheS90aGlyZF9wYXJ0eS9kbnMvcmV2ZXJzZW5hbWUucHkJKHJldmlzaW9uIDApCisrKyBUb29s
cy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZXZlcnNlbmFtZS5weQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDksIDIw
MTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBh
bmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3Ig
YW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJv
dmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u
IG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBS
T1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJ
VEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBO
T01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VM
VElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMg
QUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwg
QVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9S
TUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworIiIiRE5TIFJldmVyc2UgTWFwIE5hbWVzLgorCitA
dmFyIGlwdjRfcmV2ZXJzZV9kb21haW46IFRoZSBETlMgSVB2NCByZXZlcnNlLW1hcCBkb21haW4s
IGluLWFkZHIuYXJwYS4KK0B0eXBlIGlwdjRfcmV2ZXJzZV9kb21haW46IGRucy5uYW1lLk5hbWUg
b2JqZWN0CitAdmFyIGlwdjZfcmV2ZXJzZV9kb21haW46IFRoZSBETlMgSVB2NiByZXZlcnNlLW1h
cCBkb21haW4sIGlwNi5hcnBhLgorQHR5cGUgaXB2Nl9yZXZlcnNlX2RvbWFpbjogZG5zLm5hbWUu
TmFtZSBvYmplY3QKKyIiIgorCitpbXBvcnQgZG5zLm5hbWUKK2ltcG9ydCBkbnMuaXB2NgoraW1w
b3J0IGRucy5pcHY0CisKK2lwdjRfcmV2ZXJzZV9kb21haW4gPSBkbnMubmFtZS5mcm9tX3RleHQo
J2luLWFkZHIuYXJwYS4nKQoraXB2Nl9yZXZlcnNlX2RvbWFpbiA9IGRucy5uYW1lLmZyb21fdGV4
dCgnaXA2LmFycGEuJykKKworZGVmIGZyb21fYWRkcmVzcyh0ZXh0KToKKyAgICAiIiJDb252ZXJ0
IGFuIElQdjQgb3IgSVB2NiBhZGRyZXNzIGluIHRleHR1YWwgZm9ybSBpbnRvIGEgTmFtZSBvYmpl
Y3Qgd2hvc2UKKyAgICB2YWx1ZSBpcyB0aGUgcmV2ZXJzZS1tYXAgZG9tYWluIG5hbWUgb2YgdGhl
IGFkZHJlc3MuCisgICAgQHBhcmFtIHRleHQ6IGFuIElQdjQgb3IgSVB2NiBhZGRyZXNzIGluIHRl
eHR1YWwgZm9ybSAoZS5nLiAnMTI3LjAuMC4xJywKKyAgICAnOjoxJykKKyAgICBAdHlwZSB0ZXh0
OiBzdHIKKyAgICBAcnR5cGU6IGRucy5uYW1lLk5hbWUgb2JqZWN0CisgICAgIiIiCisgICAgdHJ5
OgorICAgICAgICBwYXJ0cyA9IGxpc3QoZG5zLmlwdjYuaW5ldF9hdG9uKHRleHQpLmVuY29kZSgn
aGV4X2NvZGVjJykpCisgICAgICAgIG9yaWdpbiA9IGlwdjZfcmV2ZXJzZV9kb21haW4KKyAgICBl
eGNlcHQ6CisgICAgICAgIHBhcnRzID0gWyclZCcgJSBvcmQoYnl0ZSkgZm9yIGJ5dGUgaW4gZG5z
LmlwdjQuaW5ldF9hdG9uKHRleHQpXQorICAgICAgICBvcmlnaW4gPSBpcHY0X3JldmVyc2VfZG9t
YWluCisgICAgcGFydHMucmV2ZXJzZSgpCisgICAgcmV0dXJuIGRucy5uYW1lLmZyb21fdGV4dCgn
Licuam9pbihwYXJ0cyksIG9yaWdpbj1vcmlnaW4pCisKK2RlZiB0b19hZGRyZXNzKG5hbWUpOgor
ICAgICIiIkNvbnZlcnQgYSByZXZlcnNlIG1hcCBkb21haW4gbmFtZSBpbnRvIHRleHR1YWwgYWRk
cmVzcyBmb3JtLgorICAgIEBwYXJhbSBuYW1lOiBhbiBJUHY0IG9yIElQdjYgYWRkcmVzcyBpbiBy
ZXZlcnNlLW1hcCBmb3JtLgorICAgIEB0eXBlIG5hbWU6IGRucy5uYW1lLk5hbWUgb2JqZWN0Cisg
ICAgQHJ0eXBlOiBzdHIKKyAgICAiIiIKKyAgICBpZiBuYW1lLmlzX3N1YmRvbWFpbihpcHY0X3Jl
dmVyc2VfZG9tYWluKToKKyAgICAgICAgbmFtZSA9IG5hbWUucmVsYXRpdml6ZShpcHY0X3JldmVy
c2VfZG9tYWluKQorICAgICAgICBsYWJlbHMgPSBsaXN0KG5hbWUubGFiZWxzKQorICAgICAgICBs
YWJlbHMucmV2ZXJzZSgpCisgICAgICAgIHRleHQgPSAnLicuam9pbihsYWJlbHMpCisgICAgICAg
ICMgcnVuIHRocm91Z2ggaW5ldF9hdG9uKCkgdG8gY2hlY2sgc3ludGF4IGFuZCBtYWtlIHByZXR0
eS4KKyAgICAgICAgcmV0dXJuIGRucy5pcHY0LmluZXRfbnRvYShkbnMuaXB2NC5pbmV0X2F0b24o
dGV4dCkpCisgICAgZWxpZiBuYW1lLmlzX3N1YmRvbWFpbihpcHY2X3JldmVyc2VfZG9tYWluKToK
KyAgICAgICAgbmFtZSA9IG5hbWUucmVsYXRpdml6ZShpcHY2X3JldmVyc2VfZG9tYWluKQorICAg
ICAgICBsYWJlbHMgPSBsaXN0KG5hbWUubGFiZWxzKQorICAgICAgICBsYWJlbHMucmV2ZXJzZSgp
CisgICAgICAgIHBhcnRzID0gW10KKyAgICAgICAgaSA9IDAKKyAgICAgICAgbCA9IGxlbihsYWJl
bHMpCisgICAgICAgIHdoaWxlIGkgPCBsOgorICAgICAgICAgICAgcGFydHMuYXBwZW5kKCcnLmpv
aW4obGFiZWxzW2k6aSs0XSkpCisgICAgICAgICAgICBpICs9IDQKKyAgICAgICAgdGV4dCA9ICc6
Jy5qb2luKHBhcnRzKQorICAgICAgICAjIHJ1biB0aHJvdWdoIGluZXRfYXRvbigpIHRvIGNoZWNr
IHN5bnRheCBhbmQgbWFrZSBwcmV0dHkuCisgICAgICAgIHJldHVybiBkbnMuaXB2Ni5pbmV0X250
b2EoZG5zLmlwdjYuaW5ldF9hdG9uKHRleHQpKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIGRu
cy5leGNlcHRpb24uU3ludGF4RXJyb3IoJ3Vua25vd24gcmV2ZXJzZS1tYXAgYWRkcmVzcyBmYW1p
bHknKQpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcnJzZXQucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcnJzZXQu
cHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9y
cnNldC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzUgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVz
ZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMg
ZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJl
YnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh
bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMg
VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFM
TCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFM
TCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJ
TiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJ
UkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwor
IyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMs
IFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVS
IFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI
IFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworIiIiRE5TIFJSc2V0
cyAoYW4gUlJzZXQgaXMgYSBuYW1lZCByZGF0YXNldCkiIiIKKworaW1wb3J0IGRucy5uYW1lCitp
bXBvcnQgZG5zLnJkYXRhc2V0CitpbXBvcnQgZG5zLnJkYXRhY2xhc3MKK2ltcG9ydCBkbnMucmVu
ZGVyZXIKKworY2xhc3MgUlJzZXQoZG5zLnJkYXRhc2V0LlJkYXRhc2V0KToKKyAgICAiIiJBIERO
UyBSUnNldCAobmFtZWQgcmRhdGFzZXQpLgorCisgICAgUlJzZXQgaW5oZXJpdHMgZnJvbSBSZGF0
YXNldCwgYW5kIFJSc2V0cyBjYW4gYmUgdHJlYXRlZCBhcworICAgIFJkYXRhc2V0cyBpbiBtb3N0
IGNhc2VzLiAgVGhlcmUgYXJlLCBob3dldmVyLCBhIGZldyBub3RhYmxlCisgICAgZXhjZXB0aW9u
cy4gIFJSc2V0cyBoYXZlIGRpZmZlcmVudCB0b193aXJlKCkgYW5kIHRvX3RleHQoKSBtZXRob2QK
KyAgICBhcmd1bWVudHMsIHJlZmxlY3RpbmcgdGhlIGZhY3QgdGhhdCBSUnNldHMgYWx3YXlzIGhh
dmUgYW4gb3duZXIKKyAgICBuYW1lLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gWyduYW1l
JywgJ2RlbGV0aW5nJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCByZGNsYXNzLCBy
ZHR5cGUsIGNvdmVycz1kbnMucmRhdGF0eXBlLk5PTkUsCisgICAgICAgICAgICAgICAgIGRlbGV0
aW5nPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgUlJzZXQuIiIiCisKKyAgICAgICAg
c3VwZXIoUlJzZXQsIHNlbGYpLl9faW5pdF9fKHJkY2xhc3MsIHJkdHlwZSkKKyAgICAgICAgc2Vs
Zi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmRlbGV0aW5nID0gZGVsZXRpbmcKKworICAgIGRl
ZiBfY2xvbmUoc2VsZik6CisgICAgICAgIG9iaiA9IHN1cGVyKFJSc2V0LCBzZWxmKS5fY2xvbmUo
KQorICAgICAgICBvYmoubmFtZSA9IHNlbGYubmFtZQorICAgICAgICBvYmouZGVsZXRpbmcgPSBz
ZWxmLmRlbGV0aW5nCisgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiBfX3JlcHJfXyhzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5jb3ZlcnMgPT0gMDoKKyAgICAgICAgICAgIGN0ZXh0ID0gJycK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGN0ZXh0ID0gJygnICsgZG5zLnJkYXRhdHlwZS50
b190ZXh0KHNlbGYuY292ZXJzKSArICcpJworICAgICAgICBpZiBub3Qgc2VsZi5kZWxldGluZyBp
cyBOb25lOgorICAgICAgICAgICAgZHRleHQgPSAnIGRlbGV0ZT0nICsgZG5zLnJkYXRhY2xhc3Mu
dG9fdGV4dChzZWxmLmRlbGV0aW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZHRleHQg
PSAnJworICAgICAgICByZXR1cm4gJzxETlMgJyArIHN0cihzZWxmLm5hbWUpICsgJyAnICsgXAor
ICAgICAgICAgICAgICAgZG5zLnJkYXRhY2xhc3MudG9fdGV4dChzZWxmLnJkY2xhc3MpICsgJyAn
ICsgXAorICAgICAgICAgICAgICAgZG5zLnJkYXRhdHlwZS50b190ZXh0KHNlbGYucmR0eXBlKSAr
IGN0ZXh0ICsgZHRleHQgKyAnIFJSc2V0PicKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi50b190ZXh0KCkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIp
OgorICAgICAgICAiIiJUd28gUlJzZXRzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUg
bmFtZSBhbmQgdGhlIHNhbWUKKyAgICAgICAgcmRhdGFzZXQKKworICAgICAgICBAcnR5cGU6IGJv
b2wiIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFJSc2V0KToKKyAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBzZWxmLm5hbWUgIT0gb3RoZXIubmFtZToKKyAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gc3VwZXIoUlJzZXQsIHNlbGYp
Ll9fZXFfXyhvdGhlcikKKworICAgIGRlZiBtYXRjaChzZWxmLCBuYW1lLCByZGNsYXNzLCByZHR5
cGUsIGNvdmVycywgZGVsZXRpbmc9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgVHJ1ZSBpZiB0
aGlzIHJyc2V0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBjbGFzcywgdHlwZSwKKyAgICAgICAgY292
ZXJzLCBhbmQgZGVsZXRpb24gc3RhdGUuIiIiCisKKyAgICAgICAgaWYgbm90IHN1cGVyKFJSc2V0
LCBzZWxmKS5tYXRjaChyZGNsYXNzLCByZHR5cGUsIGNvdmVycyk6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5uYW1lICE9IG5hbWUgb3Igc2VsZi5kZWxldGluZyAh
PSBkZWxldGluZzoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1
ZQorCisgICAgZGVmIHRvX3RleHQoc2VsZiwgb3JpZ2luPU5vbmUsIHJlbGF0aXZpemU9VHJ1ZSwg
Kiprdyk6CisgICAgICAgICIiIkNvbnZlcnQgdGhlIFJSc2V0IGludG8gRE5TIG1hc3RlciBmaWxl
IGZvcm1hdC4KKworICAgICAgICBAc2VlOiBMe2Rucy5uYW1lLk5hbWUuY2hvb3NlX3JlbGF0aXZp
dHl9IGZvciBtb3JlIGluZm9ybWF0aW9uCisgICAgICAgIG9uIGhvdyBJe29yaWdpbn0gYW5kIEl7
cmVsYXRpdml6ZX0gZGV0ZXJtaW5lIHRoZSB3YXkgbmFtZXMKKyAgICAgICAgYXJlIGVtaXR0ZWQu
CisKKyAgICAgICAgQW55IGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlIHBhc3NlZCBv
biB0byB0aGUgcmRhdGEKKyAgICAgICAgdG9fdGV4dCgpIG1ldGhvZC4KKworICAgICAgICBAcGFy
YW0gb3JpZ2luOiBUaGUgb3JpZ2luIGZvciByZWxhdGl2ZSBuYW1lcywgb3IgTm9uZS4KKyAgICAg
ICAgQHR5cGUgb3JpZ2luOiBkbnMubmFtZS5OYW1lIG9iamVjdAorICAgICAgICBAcGFyYW0gcmVs
YXRpdml6ZTogVHJ1ZSBpZiBuYW1lcyBzaG91bGQgbmFtZXMgYmUgcmVsYXRpdml6ZWQKKyAgICAg
ICAgQHR5cGUgcmVsYXRpdml6ZTogYm9vbCIiIgorCisgICAgICAgIHJldHVybiBzdXBlcihSUnNl
dCwgc2VsZikudG9fdGV4dChzZWxmLm5hbWUsIG9yaWdpbiwgcmVsYXRpdml6ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRpbmcsICoqa3cpCisK
KyAgICBkZWYgdG9fd2lyZShzZWxmLCBmaWxlLCBjb21wcmVzcz1Ob25lLCBvcmlnaW49Tm9uZSwg
Kiprdyk6CisgICAgICAgICIiIkNvbnZlcnQgdGhlIFJSc2V0IHRvIHdpcmUgZm9ybWF0LiIiIgor
CisgICAgICAgIHJldHVybiBzdXBlcihSUnNldCwgc2VsZikudG9fd2lyZShzZWxmLm5hbWUsIGZp
bGUsIGNvbXByZXNzLCBvcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLmRlbGV0aW5nLCAqKmt3KQorCisgICAgZGVmIHRvX3JkYXRhc2V0KHNlbGYp
OgorICAgICAgICAiIiJDb252ZXJ0IGFuIFJSc2V0IGludG8gYW4gUmRhdGFzZXQuCisKKyAgICAg
ICAgQHJ0eXBlOiBkbnMucmRhdGFzZXQuUmRhdGFzZXQgb2JqZWN0CisgICAgICAgICIiIgorICAg
ICAgICByZXR1cm4gZG5zLnJkYXRhc2V0LmZyb21fcmRhdGFfbGlzdChzZWxmLnR0bCwgbGlzdChz
ZWxmKSkKKworCitkZWYgZnJvbV90ZXh0X2xpc3QobmFtZSwgdHRsLCByZGNsYXNzLCByZHR5cGUs
IHRleHRfcmRhdGFzKToKKyAgICAiIiJDcmVhdGUgYW4gUlJzZXQgd2l0aCB0aGUgc3BlY2lmaWVk
IG5hbWUsIFRUTCwgY2xhc3MsIGFuZCB0eXBlLCBhbmQgd2l0aAorICAgIHRoZSBzcGVjaWZpZWQg
bGlzdCBvZiByZGF0YXMgaW4gdGV4dCBmb3JtYXQuCisKKyAgICBAcnR5cGU6IGRucy5ycnNldC5S
UnNldCBvYmplY3QKKyAgICAiIiIKKworICAgIGlmIGlzaW5zdGFuY2UobmFtZSwgKHN0ciwgdW5p
Y29kZSkpOgorICAgICAgICBuYW1lID0gZG5zLm5hbWUuZnJvbV90ZXh0KG5hbWUsIE5vbmUpCisg
ICAgaWYgaXNpbnN0YW5jZShyZGNsYXNzLCBzdHIpOgorICAgICAgICByZGNsYXNzID0gZG5zLnJk
YXRhY2xhc3MuZnJvbV90ZXh0KHJkY2xhc3MpCisgICAgaWYgaXNpbnN0YW5jZShyZHR5cGUsIHN0
cik6CisgICAgICAgIHJkdHlwZSA9IGRucy5yZGF0YXR5cGUuZnJvbV90ZXh0KHJkdHlwZSkKKyAg
ICByID0gUlJzZXQobmFtZSwgcmRjbGFzcywgcmR0eXBlKQorICAgIHIudXBkYXRlX3R0bCh0dGwp
CisgICAgZm9yIHQgaW4gdGV4dF9yZGF0YXM6CisgICAgICAgIHJkID0gZG5zLnJkYXRhLmZyb21f
dGV4dChyLnJkY2xhc3MsIHIucmR0eXBlLCB0KQorICAgICAgICByLmFkZChyZCkKKyAgICByZXR1
cm4gcgorCitkZWYgZnJvbV90ZXh0KG5hbWUsIHR0bCwgcmRjbGFzcywgcmR0eXBlLCAqdGV4dF9y
ZGF0YXMpOgorICAgICIiIkNyZWF0ZSBhbiBSUnNldCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSwg
VFRMLCBjbGFzcywgYW5kIHR5cGUgYW5kIHdpdGgKKyAgICB0aGUgc3BlY2lmaWVkIHJkYXRhcyBp
biB0ZXh0IGZvcm1hdC4KKworICAgIEBydHlwZTogZG5zLnJyc2V0LlJSc2V0IG9iamVjdAorICAg
ICIiIgorCisgICAgcmV0dXJuIGZyb21fdGV4dF9saXN0KG5hbWUsIHR0bCwgcmRjbGFzcywgcmR0
eXBlLCB0ZXh0X3JkYXRhcykKKworZGVmIGZyb21fcmRhdGFfbGlzdChuYW1lLCB0dGwsIHJkYXRh
cyk6CisgICAgIiIiQ3JlYXRlIGFuIFJSc2V0IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFuZCBU
VEwsIGFuZCB3aXRoCisgICAgdGhlIHNwZWNpZmllZCBsaXN0IG9mIHJkYXRhIG9iamVjdHMuCisK
KyAgICBAcnR5cGU6IGRucy5ycnNldC5SUnNldCBvYmplY3QKKyAgICAiIiIKKworICAgIGlmIGlz
aW5zdGFuY2UobmFtZSwgKHN0ciwgdW5pY29kZSkpOgorICAgICAgICBuYW1lID0gZG5zLm5hbWUu
ZnJvbV90ZXh0KG5hbWUsIE5vbmUpCisKKyAgICBpZiBsZW4ocmRhdGFzKSA9PSAwOgorICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCJyZGF0YSBsaXN0IG11c3Qgbm90IGJlIGVtcHR5IikKKyAgICBy
ID0gTm9uZQorICAgIGZvciByZCBpbiByZGF0YXM6CisgICAgICAgIGlmIHIgaXMgTm9uZToKKyAg
ICAgICAgICAgIHIgPSBSUnNldChuYW1lLCByZC5yZGNsYXNzLCByZC5yZHR5cGUpCisgICAgICAg
ICAgICByLnVwZGF0ZV90dGwodHRsKQorICAgICAgICAgICAgZmlyc3RfdGltZSA9IEZhbHNlCisg
ICAgICAgIHIuYWRkKHJkKQorICAgIHJldHVybiByCisKK2RlZiBmcm9tX3JkYXRhKG5hbWUsIHR0
bCwgKnJkYXRhcyk6CisgICAgIiIiQ3JlYXRlIGFuIFJSc2V0IHdpdGggdGhlIHNwZWNpZmllZCBu
YW1lIGFuZCBUVEwsIGFuZCB3aXRoCisgICAgdGhlIHNwZWNpZmllZCByZGF0YSBvYmplY3RzLgor
CisgICAgQHJ0eXBlOiBkbnMucnJzZXQuUlJzZXQgb2JqZWN0CisgICAgIiIiCisKKyAgICByZXR1
cm4gZnJvbV9yZGF0YV9saXN0KG5hbWUsIHR0bCwgcmRhdGFzKQpJbmRleDogVG9vbHMvV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvc2V0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBh
Z2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3NldC5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dl
YlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3NldC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyNjMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwg
SW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0
ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ug
d2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBh
cHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ
UyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRP
IFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExP
U1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENP
TlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQK
KyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJ
UyBTT0ZUV0FSRS4KKworIiIiQSBzaW1wbGUgU2V0IGNsYXNzLiIiIgorCitjbGFzcyBTZXQob2Jq
ZWN0KToKKyAgICAiIiJBIHNpbXBsZSBzZXQgY2xhc3MuCisKKyAgICBTZXRzIGFyZSBub3QgaW4g
UHl0aG9uIHVudGlsIDIuMywgYW5kIHJkYXRhIGFyZSBub3QgaW1tdXRhYmxlIHNvCisgICAgd2Ug
Y2Fubm90IHVzZSBzZXRzLlNldCBhbnl3YXkuICBUaGlzIGNsYXNzIGltcGxlbWVudHMgc3Vic2V0
IG9mCisgICAgdGhlIDIuMyBTZXQgaW50ZXJmYWNlIHVzaW5nIGEgbGlzdCBhcyB0aGUgY29udGFp
bmVyLgorCisgICAgQGl2YXIgaXRlbXM6IEEgbGlzdCBvZiB0aGUgaXRlbXMgd2hpY2ggYXJlIGlu
IHRoZSBzZXQKKyAgICBAdHlwZSBpdGVtczogbGlzdCIiIgorCisgICAgX19zbG90c19fID0gWydp
dGVtcyddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlbXM9Tm9uZSk6CisgICAgICAgICIi
IkluaXRpYWxpemUgdGhlIHNldC4KKworICAgICAgICBAcGFyYW0gaXRlbXM6IHRoZSBpbml0aWFs
IHNldCBvZiBpdGVtcworICAgICAgICBAdHlwZSBpdGVtczogYW55IGl0ZXJhYmxlIG9yIE5vbmUK
KyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5pdGVtcyA9IFtdCisgICAgICAgIGlmIG5vdCBp
dGVtcyBpcyBOb25lOgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgICAg
ICAgICAgc2VsZi5hZGQoaXRlbSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAg
cmV0dXJuICJkbnMuc2ltcGxlc2V0LlNldCglcykiICUgcmVwcihzZWxmLml0ZW1zKQorCisgICAg
ZGVmIGFkZChzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiQWRkIGFuIGl0ZW0gdG8gdGhlIHNldC4i
IiIKKyAgICAgICAgaWYgbm90IGl0ZW0gaW4gc2VsZi5pdGVtczoKKyAgICAgICAgICAgIHNlbGYu
aXRlbXMuYXBwZW5kKGl0ZW0pCisKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIGl0ZW0pOgorICAgICAg
ICAiIiJSZW1vdmUgYW4gaXRlbSBmcm9tIHRoZSBzZXQuIiIiCisgICAgICAgIHNlbGYuaXRlbXMu
cmVtb3ZlKGl0ZW0pCisKKyAgICBkZWYgZGlzY2FyZChzZWxmLCBpdGVtKToKKyAgICAgICAgIiIi
UmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgc2V0IGlmIHByZXNlbnQuIiIiCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHNlbGYuaXRlbXMucmVtb3ZlKGl0ZW0pCisgICAgICAgIGV4Y2VwdCBWYWx1
ZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIF9jbG9uZShzZWxmKToKKyAgICAg
ICAgIiIiTWFrZSBhIChzaGFsbG93KSBjb3B5IG9mIHRoZSBzZXQuCisKKyAgICAgICAgVGhlcmUg
aXMgYSAnY2xvbmUgcHJvdG9jb2wnIHRoYXQgc3ViY2xhc3NlcyBvZiB0aGlzIGNsYXNzCisgICAg
ICAgIHNob3VsZCB1c2UuICBUbyBtYWtlIGEgY29weSwgZmlyc3QgY2FsbCB5b3VyIHN1cGVyJ3Mg
X2Nsb25lKCkKKyAgICAgICAgbWV0aG9kLCBhbmQgdXNlIHRoZSBvYmplY3QgcmV0dXJuZWQgYXMg
dGhlIG5ldyBpbnN0YW5jZS4gIFRoZW4KKyAgICAgICAgbWFrZSBzaGFsbG93IGNvcGllcyBvZiB0
aGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoZSBzdWJjbGFzcy4KKworICAgICAgICBUaGlzIHBy
b3RvY29sIGFsbG93cyB1cyB0byB3cml0ZSB0aGUgc2V0IGFsZ29yaXRobXMgdGhhdAorICAgICAg
ICByZXR1cm4gbmV3IGluc3RhbmNlcyAoZS5nLiB1bmlvbikgb25jZSwgYW5kIGtlZXAgdXNpbmcg
dGhlbSBpbgorICAgICAgICBzdWJjbGFzc2VzLgorICAgICAgICAiIiIKKworICAgICAgICBjbHMg
PSBzZWxmLl9fY2xhc3NfXworICAgICAgICBvYmogPSBjbHMuX19uZXdfXyhjbHMpCisgICAgICAg
IG9iai5pdGVtcyA9IGxpc3Qoc2VsZi5pdGVtcykKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAg
ZGVmIF9fY29weV9fKHNlbGYpOgorICAgICAgICAiIiJNYWtlIGEgKHNoYWxsb3cpIGNvcHkgb2Yg
dGhlIHNldC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nsb25lKCkKKworICAgIGRlZiBjb3B5
KHNlbGYpOgorICAgICAgICAiIiJNYWtlIGEgKHNoYWxsb3cpIGNvcHkgb2YgdGhlIHNldC4iIiIK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2Nsb25lKCkKKworICAgIGRlZiB1bmlvbl91cGRhdGUoc2Vs
Ziwgb3RoZXIpOgorICAgICAgICAiIiJVcGRhdGUgdGhlIHNldCwgYWRkaW5nIGFueSBlbGVtZW50
cyBmcm9tIG90aGVyIHdoaWNoIGFyZSBub3QKKyAgICAgICAgYWxyZWFkeSBpbiB0aGUgc2V0Lgor
ICAgICAgICBAcGFyYW0gb3RoZXI6IHRoZSBjb2xsZWN0aW9uIG9mIGl0ZW1zIHdpdGggd2hpY2gg
dG8gdXBkYXRlIHRoZSBzZXQKKyAgICAgICAgQHR5cGUgb3RoZXI6IFNldCBvYmplY3QKKyAgICAg
ICAgIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignb3RoZXIgbXVzdCBiZSBhIFNldCBpbnN0YW5jZScpCisgICAg
ICAgIGlmIHNlbGYgaXMgb3RoZXI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZm9yIGl0
ZW0gaW4gb3RoZXIuaXRlbXM6CisgICAgICAgICAgICBzZWxmLmFkZChpdGVtKQorCisgICAgZGVm
IGludGVyc2VjdGlvbl91cGRhdGUoc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJVcGRhdGUgdGhl
IHNldCwgcmVtb3ZpbmcgYW55IGVsZW1lbnRzIGZyb20gb3RoZXIgd2hpY2ggYXJlIG5vdAorICAg
ICAgICBpbiBib3RoIHNldHMuCisgICAgICAgIEBwYXJhbSBvdGhlcjogdGhlIGNvbGxlY3Rpb24g
b2YgaXRlbXMgd2l0aCB3aGljaCB0byB1cGRhdGUgdGhlIHNldAorICAgICAgICBAdHlwZSBvdGhl
cjogU2V0IG9iamVjdAorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3Ro
ZXIsIFNldCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdvdGhlciBtdXN0IGJlIGEg
U2V0IGluc3RhbmNlJykKKyAgICAgICAgaWYgc2VsZiBpcyBvdGhlcjoKKyAgICAgICAgICAgIHJl
dHVybgorICAgICAgICAjIHdlIG1ha2UgYSBjb3B5IG9mIHRoZSBsaXN0IHNvIHRoYXQgd2UgY2Fu
IHJlbW92ZSBpdGVtcyBmcm9tCisgICAgICAgICMgdGhlIGxpc3Qgd2l0aG91dCBicmVha2luZyB0
aGUgaXRlcmF0b3IuCisgICAgICAgIGZvciBpdGVtIGluIGxpc3Qoc2VsZi5pdGVtcyk6CisgICAg
ICAgICAgICBpZiBpdGVtIG5vdCBpbiBvdGhlci5pdGVtczoKKyAgICAgICAgICAgICAgICBzZWxm
Lml0ZW1zLnJlbW92ZShpdGVtKQorCisgICAgZGVmIGRpZmZlcmVuY2VfdXBkYXRlKHNlbGYsIG90
aGVyKToKKyAgICAgICAgIiIiVXBkYXRlIHRoZSBzZXQsIHJlbW92aW5nIGFueSBlbGVtZW50cyBm
cm9tIG90aGVyIHdoaWNoIGFyZSBpbgorICAgICAgICB0aGUgc2V0LgorICAgICAgICBAcGFyYW0g
b3RoZXI6IHRoZSBjb2xsZWN0aW9uIG9mIGl0ZW1zIHdpdGggd2hpY2ggdG8gdXBkYXRlIHRoZSBz
ZXQKKyAgICAgICAgQHR5cGUgb3RoZXI6IFNldCBvYmplY3QKKyAgICAgICAgIiIiCisgICAgICAg
IGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcignb3RoZXIgbXVzdCBiZSBhIFNldCBpbnN0YW5jZScpCisgICAgICAgIGlmIHNlbGYgaXMg
b3RoZXI6CisgICAgICAgICAgICBzZWxmLml0ZW1zID0gW10KKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIGZvciBpdGVtIGluIG90aGVyLml0ZW1zOgorICAgICAgICAgICAgICAgIHNlbGYuZGlz
Y2FyZChpdGVtKQorCisgICAgZGVmIHVuaW9uKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiUmV0
dXJuIGEgbmV3IHNldCB3aGljaCBpcyB0aGUgdW5pb24gb2YgSXtzZWxmfSBhbmQgSXtvdGhlcn0u
CisKKyAgICAgICAgQHBhcmFtIG90aGVyOiB0aGUgb3RoZXIgc2V0CisgICAgICAgIEB0eXBlIG90
aGVyOiBTZXQgb2JqZWN0CisgICAgICAgIEBydHlwZTogdGhlIHNhbWUgdHlwZSBhcyBJe3NlbGZ9
CisgICAgICAgICIiIgorCisgICAgICAgIG9iaiA9IHNlbGYuX2Nsb25lKCkKKyAgICAgICAgb2Jq
LnVuaW9uX3VwZGF0ZShvdGhlcikKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIGludGVy
c2VjdGlvbihzZWxmLCBvdGhlcik6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBzZXQgd2hpY2gg
aXMgdGhlIGludGVyc2VjdGlvbiBvZiBJe3NlbGZ9IGFuZCBJe290aGVyfS4KKworICAgICAgICBA
cGFyYW0gb3RoZXI6IHRoZSBvdGhlciBzZXQKKyAgICAgICAgQHR5cGUgb3RoZXI6IFNldCBvYmpl
Y3QKKyAgICAgICAgQHJ0eXBlOiB0aGUgc2FtZSB0eXBlIGFzIEl7c2VsZn0KKyAgICAgICAgIiIi
CisKKyAgICAgICAgb2JqID0gc2VsZi5fY2xvbmUoKQorICAgICAgICBvYmouaW50ZXJzZWN0aW9u
X3VwZGF0ZShvdGhlcikKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIGRpZmZlcmVuY2Uo
c2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgc2V0IHdoaWNoIEl7c2VsZn0g
LSBJe290aGVyfSwgaS5lLiB0aGUgaXRlbXMKKyAgICAgICAgaW4gSXtzZWxmfSB3aGljaCBhcmUg
bm90IGFsc28gaW4gSXtvdGhlcn0uCisKKyAgICAgICAgQHBhcmFtIG90aGVyOiB0aGUgb3RoZXIg
c2V0CisgICAgICAgIEB0eXBlIG90aGVyOiBTZXQgb2JqZWN0CisgICAgICAgIEBydHlwZTogdGhl
IHNhbWUgdHlwZSBhcyBJe3NlbGZ9CisgICAgICAgICIiIgorCisgICAgICAgIG9iaiA9IHNlbGYu
X2Nsb25lKCkKKyAgICAgICAgb2JqLmRpZmZlcmVuY2VfdXBkYXRlKG90aGVyKQorICAgICAgICBy
ZXR1cm4gb2JqCisKKyAgICBkZWYgX19vcl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJu
IHNlbGYudW5pb24ob3RoZXIpCisKKyAgICBkZWYgX19hbmRfXyhzZWxmLCBvdGhlcik6CisgICAg
ICAgIHJldHVybiBzZWxmLmludGVyc2VjdGlvbihvdGhlcikKKworICAgIGRlZiBfX2FkZF9fKHNl
bGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYudW5pb24ob3RoZXIpCisKKyAgICBkZWYg
X19zdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmRpZmZlcmVuY2Uob3Ro
ZXIpCisKKyAgICBkZWYgX19pb3JfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHNlbGYudW5pb25f
dXBkYXRlKG90aGVyKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9faWFuZF9fKHNl
bGYsIG90aGVyKToKKyAgICAgICAgc2VsZi5pbnRlcnNlY3Rpb25fdXBkYXRlKG90aGVyKQorICAg
ICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9faWFkZF9fKHNlbGYsIG90aGVyKToKKyAgICAg
ICAgc2VsZi51bmlvbl91cGRhdGUob3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBk
ZWYgX19pc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBzZWxmLmRpZmZlcmVuY2VfdXBkYXRl
KG90aGVyKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBvdGhl
cik6CisgICAgICAgICIiIlVwZGF0ZSB0aGUgc2V0LCBhZGRpbmcgYW55IGVsZW1lbnRzIGZyb20g
b3RoZXIgd2hpY2ggYXJlIG5vdAorICAgICAgICBhbHJlYWR5IGluIHRoZSBzZXQuCisgICAgICAg
IEBwYXJhbSBvdGhlcjogdGhlIGNvbGxlY3Rpb24gb2YgaXRlbXMgd2l0aCB3aGljaCB0byB1cGRh
dGUgdGhlIHNldAorICAgICAgICBAdHlwZSBvdGhlcjogYW55IGl0ZXJhYmxlIHR5cGUiIiIKKyAg
ICAgICAgZm9yIGl0ZW0gaW4gb3RoZXI6CisgICAgICAgICAgICBzZWxmLmFkZChpdGVtKQorCisg
ICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAiIiJNYWtlIHRoZSBzZXQgZW1wdHkuIiIiCisg
ICAgICAgIHNlbGYuaXRlbXMgPSBbXQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Cisg
ICAgICAgICMgWWVzLCB0aGlzIGlzIGluZWZmaWNpZW50IGJ1dCB0aGUgc2V0cyB3ZSdyZSBkZWFs
aW5nIHdpdGggYXJlCisgICAgICAgICMgdXN1YWxseSBxdWl0ZSBzbWFsbCwgc28gaXQgc2hvdWxk
bid0IGh1cnQgdG9vIG11Y2guCisgICAgICAgIGZvciBpdGVtIGluIHNlbGYuaXRlbXM6CisgICAg
ICAgICAgICBpZiBub3QgaXRlbSBpbiBvdGhlci5pdGVtczoKKyAgICAgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgZm9yIGl0ZW0gaW4gb3RoZXIuaXRlbXM6CisgICAgICAgICAgICBp
ZiBub3QgaXRlbSBpbiBzZWxmLml0ZW1zOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQor
ICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAg
ICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCisKKyAgICBkZWYgX19sZW5fXyhzZWxm
KToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLml0ZW1zKQorCisgICAgZGVmIF9faXRlcl9fKHNl
bGYpOgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLml0ZW1zKQorCisgICAgZGVmIF9fZ2V0aXRl
bV9fKHNlbGYsIGkpOgorICAgICAgICByZXR1cm4gc2VsZi5pdGVtc1tpXQorCisgICAgZGVmIF9f
ZGVsaXRlbV9fKHNlbGYsIGkpOgorICAgICAgICBkZWwgc2VsZi5pdGVtc1tpXQorCisgICAgZGVm
IF9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaXRlbXNbaTpq
XQorCisgICAgZGVmIF9fZGVsc2xpY2VfXyhzZWxmLCBpLCBqKToKKyAgICAgICAgZGVsIHNlbGYu
aXRlbXNbaTpqXQorCisgICAgZGVmIGlzc3Vic2V0KHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIi
SXMgSXtzZWxmfSBhIHN1YnNldCBvZiBJe290aGVyfT8KKworICAgICAgICBAcnR5cGU6IGJvb2wK
KyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Cisg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdvdGhlciBtdXN0IGJlIGEgU2V0IGluc3RhbmNl
JykKKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5pdGVtczoKKyAgICAgICAgICAgIGlmIG5vdCBp
dGVtIGluIG90aGVyLml0ZW1zOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAg
ICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGlzc3VwZXJzZXQoc2VsZiwgb3RoZXIpOgorICAgICAg
ICAiIiJJcyBJe3NlbGZ9IGEgc3VwZXJzZXQgb2YgSXtvdGhlcn0/CisKKyAgICAgICAgQHJ0eXBl
OiBib29sCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBT
ZXQpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignb3RoZXIgbXVzdCBiZSBhIFNldCBp
bnN0YW5jZScpCisgICAgICAgIGZvciBpdGVtIGluIG90aGVyLml0ZW1zOgorICAgICAgICAgICAg
aWYgbm90IGl0ZW0gaW4gc2VsZi5pdGVtczoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KyAgICAgICAgcmV0dXJuIFRydWUKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvZG5zL3Rva2VuaXplci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3Ro
aXJkX3BhcnR5L2Rucy90b2tlbml6ZXIucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdl
UmVwbGF5L3RoaXJkX3BhcnR5L2Rucy90b2tlbml6ZXIucHkJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTQ3IEBACisjIENvcHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0s
IEluYy4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1
dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3Nl
IHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQg
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMg
YXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg
SVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBU
TyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBM
SUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBM
T1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBD
T05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VU
CisjIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRI
SVMgU09GVFdBUkUuCisKKyIiIlRva2VuaXplIEROUyBtYXN0ZXIgZmlsZSBmb3JtYXQiIiIKKwor
aW1wb3J0IGNTdHJpbmdJTworaW1wb3J0IHN5cworCitpbXBvcnQgZG5zLmV4Y2VwdGlvbgoraW1w
b3J0IGRucy5uYW1lCitpbXBvcnQgZG5zLnR0bAorCitfREVMSU1JVEVSUyA9IHsKKyAgICAnICcg
OiBUcnVlLAorICAgICdcdCcgOiBUcnVlLAorICAgICdcbicgOiBUcnVlLAorICAgICc7JyA6IFRy
dWUsCisgICAgJygnIDogVHJ1ZSwKKyAgICAnKScgOiBUcnVlLAorICAgICciJyA6IFRydWUgfQor
CitfUVVPVElOR19ERUxJTUlURVJTID0geyAnIicgOiBUcnVlIH0KKworRU9GID0gMAorRU9MID0g
MQorV0hJVEVTUEFDRSA9IDIKK0lERU5USUZJRVIgPSAzCitRVU9URURfU1RSSU5HID0gNAorQ09N
TUVOVCA9IDUKK0RFTElNSVRFUiA9IDYKKworY2xhc3MgVW5nZXRCdWZmZXJGdWxsKGRucy5leGNl
cHRpb24uRE5TRXhjZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgd2hlbiBhbiBhdHRlbXB0IGlzIG1h
ZGUgdG8gdW5nZXQgYSB0b2tlbiB3aGVuIHRoZSB1bmdldAorICAgIGJ1ZmZlciBpcyBmdWxsLiIi
IgorICAgIHBhc3MKKworY2xhc3MgVG9rZW4ob2JqZWN0KToKKyAgICAiIiJBIEROUyBtYXN0ZXIg
ZmlsZSBmb3JtYXQgdG9rZW4uCisKKyAgICBAaXZhciB0dHlwZTogVGhlIHRva2VuIHR5cGUKKyAg
ICBAdHlwZSB0dHlwZTogaW50CisgICAgQGl2YXIgdmFsdWU6IFRoZSB0b2tlbiB2YWx1ZQorICAg
IEB0eXBlIHZhbHVlOiBzdHJpbmcKKyAgICBAaXZhciBoYXNfZXNjYXBlOiBEb2VzIHRoZSB0b2tl
biB2YWx1ZSBjb250YWluIGVzY2FwZXM/CisgICAgQHR5cGUgaGFzX2VzY2FwZTogYm9vbAorICAg
ICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR0eXBlLCB2YWx1ZT0nJywgaGFzX2VzY2Fw
ZT1GYWxzZSk6CisgICAgICAgICIiIkluaXRpYWxpemUgYSB0b2tlbiBpbnN0YW5jZS4KKworICAg
ICAgICBAcGFyYW0gdHR5cGU6IFRoZSB0b2tlbiB0eXBlCisgICAgICAgIEB0eXBlIHR0eXBlOiBp
bnQKKyAgICAgICAgQGl2YXIgdmFsdWU6IFRoZSB0b2tlbiB2YWx1ZQorICAgICAgICBAdHlwZSB2
YWx1ZTogc3RyaW5nCisgICAgICAgIEBpdmFyIGhhc19lc2NhcGU6IERvZXMgdGhlIHRva2VuIHZh
bHVlIGNvbnRhaW4gZXNjYXBlcz8KKyAgICAgICAgQHR5cGUgaGFzX2VzY2FwZTogYm9vbAorICAg
ICAgICAiIiIKKyAgICAgICAgc2VsZi50dHlwZSA9IHR0eXBlCisgICAgICAgIHNlbGYudmFsdWUg
PSB2YWx1ZQorICAgICAgICBzZWxmLmhhc19lc2NhcGUgPSBoYXNfZXNjYXBlCisKKyAgICBkZWYg
aXNfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50dHlwZSA9PSBFT0YKKworICAgIGRl
ZiBpc19lb2woc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnR0eXBlID09IEVPTAorCisgICAg
ZGVmIGlzX3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnR0eXBlID09IFdI
SVRFU1BBQ0UKKworICAgIGRlZiBpc19pZGVudGlmaWVyKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi50dHlwZSA9PSBJREVOVElGSUVSCisKKyAgICBkZWYgaXNfcXVvdGVkX3N0cmluZyhzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYudHR5cGUgPT0gUVVPVEVEX1NUUklORworCisgICAgZGVm
IGlzX2NvbW1lbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnR0eXBlID09IENPTU1FTlQK
KworICAgIGRlZiBpc19kZWxpbWl0ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnR0eXBl
ID09IERFTElNSVRFUgorCisgICAgZGVmIGlzX2VvbF9vcl9lb2Yoc2VsZik6CisgICAgICAgIHJl
dHVybiAoc2VsZi50dHlwZSA9PSBFT0wgb3Igc2VsZi50dHlwZSA9PSBFT0YpCisKKyAgICBkZWYg
X19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFRv
a2VuKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gKHNlbGYudHR5
cGUgPT0gb3RoZXIudHR5cGUgYW5kCisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9PSBvdGhl
ci52YWx1ZSkKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3Qg
aXNpbnN0YW5jZShvdGhlciwgVG9rZW4pOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAg
ICAgcmV0dXJuIChzZWxmLnR0eXBlICE9IG90aGVyLnR0eXBlIG9yCisgICAgICAgICAgICAgICAg
c2VsZi52YWx1ZSAhPSBvdGhlci52YWx1ZSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gJyVkICIlcyInICUgKHNlbGYudHR5cGUsIHNlbGYudmFsdWUpCisKKyAgICBk
ZWYgdW5lc2NhcGUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmhhc19lc2NhcGU6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICB1bmVzY2FwZWQgPSAnJworICAgICAgICBsID0g
bGVuKHNlbGYudmFsdWUpCisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIGkgPCBsOgorICAg
ICAgICAgICAgYyA9IHNlbGYudmFsdWVbaV0KKyAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAg
ICAgaWYgYyA9PSAnXFwnOgorICAgICAgICAgICAgICAgIGlmIGkgPj0gbDoKKyAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5VbmV4cGVjdGVkRW5kCisgICAgICAgICAgICAg
ICAgYyA9IHNlbGYudmFsdWVbaV0KKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAg
ICAgICBpZiBjLmlzZGlnaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA+PSBsOgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5VbmV4cGVjdGVkRW5kCisg
ICAgICAgICAgICAgICAgICAgIGMyID0gc2VsZi52YWx1ZVtpXQorICAgICAgICAgICAgICAgICAg
ICBpICs9IDEKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA+PSBsOgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5VbmV4cGVjdGVkRW5kCisgICAgICAgICAgICAg
ICAgICAgIGMzID0gc2VsZi52YWx1ZVtpXQorICAgICAgICAgICAgICAgICAgICBpICs9IDEKKyAg
ICAgICAgICAgICAgICAgICAgaWYgbm90IChjMi5pc2RpZ2l0KCkgYW5kIGMzLmlzZGlnaXQoKSk6
CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9y
CisgICAgICAgICAgICAgICAgICAgIGMgPSBjaHIoaW50KGMpICogMTAwICsgaW50KGMyKSAqIDEw
ICsgaW50KGMzKSkKKyAgICAgICAgICAgIHVuZXNjYXBlZCArPSBjCisgICAgICAgIHJldHVybiBU
b2tlbihzZWxmLnR0eXBlLCB1bmVzY2FwZWQpCisKKyAgICAjIGNvbXBhdGliaWxpdHkgZm9yIG9s
ZC1zdHlsZSB0dXBsZSB0b2tlbnMKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gMgorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcigo
c2VsZi50dHlwZSwgc2VsZi52YWx1ZSkpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6
CisgICAgICAgIGlmIGkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnR0eXBlCisgICAg
ICAgIGVsaWYgaSA9PSAxOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworY2xhc3MgVG9rZW5pemVyKG9i
amVjdCk6CisgICAgIiIiQSBETlMgbWFzdGVyIGZpbGUgZm9ybWF0IHRva2VuaXplci4KKworICAg
IEEgdG9rZW4gaXMgYSAodHlwZSwgdmFsdWUpIHR1cGxlLCB3aGVyZSBJe3R5cGV9IGlzIGFuIGlu
dCwgYW5kCisgICAgSXt2YWx1ZX0gaXMgYSBzdHJpbmcuICBUaGUgdmFsaWQgdHlwZXMgYXJlIEVP
RiwgRU9MLCBXSElURVNQQUNFLAorICAgIElERU5USUZJRVIsIFFVT1RFRF9TVFJJTkcsIENPTU1F
TlQsIGFuZCBERUxJTUlURVIuCisKKyAgICBAaXZhciBmaWxlOiBUaGUgZmlsZSB0byB0b2tlbml6
ZQorICAgIEB0eXBlIGZpbGU6IGZpbGUKKyAgICBAaXZhciB1bmdvdHRlbl9jaGFyOiBUaGUgbW9z
dCByZWNlbnRseSB1bmdvdHRlbiBjaGFyYWN0ZXIsIG9yIE5vbmUuCisgICAgQHR5cGUgdW5nb3R0
ZW5fY2hhcjogc3RyaW5nCisgICAgQGl2YXIgdW5nb3R0ZW5fdG9rZW46IFRoZSBtb3N0IHJlY2Vu
dGx5IHVuZ290dGVuIHRva2VuLCBvciBOb25lLgorICAgIEB0eXBlIHVuZ290dGVuX3Rva2VuOiAo
aW50LCBzdHJpbmcpIHRva2VuIHR1cGxlCisgICAgQGl2YXIgbXVsdGlsaW5lOiBUaGUgY3VycmVu
dCBtdWx0aWxpbmUgbGV2ZWwuICBUaGlzIHZhbHVlIGlzIGluY3JlYXNlZAorICAgIGJ5IG9uZSBl
dmVyeSB0aW1lIGEgJygnIGRlbGltaXRlciBpcyByZWFkLCBhbmQgZGVjcmVhc2VkIGJ5IG9uZSBl
dmVyeSB0aW1lCisgICAgYSAnKScgZGVsaW1pdGVyIGlzIHJlYWQuCisgICAgQHR5cGUgbXVsdGls
aW5lOiBpbnQKKyAgICBAaXZhciBxdW90aW5nOiBUaGlzIHZhcmlhYmxlIGlzIHRydWUgaWYgdGhl
IHRva2VuaXplciBpcyBjdXJyZW50bHkKKyAgICByZWFkaW5nIGEgcXVvdGVkIHN0cmluZy4KKyAg
ICBAdHlwZSBxdW90aW5nOiBib29sCisgICAgQGl2YXIgZW9mOiBUaGlzIHZhcmlhYmxlIGlzIHRy
dWUgaWYgdGhlIHRva2VuaXplciBoYXMgZW5jb3VudGVyZWQgRU9GLgorICAgIEB0eXBlIGVvZjog
Ym9vbAorICAgIEBpdmFyIGRlbGltaXRlcnM6IFRoZSBjdXJyZW50IGRlbGltaXRlciBkaWN0aW9u
YXJ5LgorICAgIEB0eXBlIGRlbGltaXRlcnM6IGRpY3QKKyAgICBAaXZhciBsaW5lX251bWJlcjog
VGhlIGN1cnJlbnQgbGluZSBudW1iZXIKKyAgICBAdHlwZSBsaW5lX251bWJlcjogaW50CisgICAg
QGl2YXIgZmlsZW5hbWU6IEEgZmlsZW5hbWUgdGhhdCB3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSBM
e3doZXJlfSBtZXRob2QuCisgICAgQHR5cGUgZmlsZW5hbWU6IHN0cmluZworICAgICIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGY9c3lzLnN0ZGluLCBmaWxlbmFtZT1Ob25lKToKKyAgICAg
ICAgIiIiSW5pdGlhbGl6ZSBhIHRva2VuaXplciBpbnN0YW5jZS4KKworICAgICAgICBAcGFyYW0g
ZjogVGhlIGZpbGUgdG8gdG9rZW5pemUuICBUaGUgZGVmYXVsdCBpcyBzeXMuc3RkaW4uCisgICAg
ICAgIFRoaXMgcGFyYW1ldGVyIG1heSBhbHNvIGJlIGEgc3RyaW5nLCBpbiB3aGljaCBjYXNlIHRo
ZSB0b2tlbml6ZXIKKyAgICAgICAgd2lsbCB0YWtlIGl0cyBpbnB1dCBmcm9tIHRoZSBjb250ZW50
cyBvZiB0aGUgc3RyaW5nLgorICAgICAgICBAdHlwZSBmOiBmaWxlIG9yIHN0cmluZworICAgICAg
ICBAcGFyYW0gZmlsZW5hbWU6IHRoZSBuYW1lIG9mIHRoZSBmaWxlbmFtZSB0aGF0IHRoZSBMe3do
ZXJlfSBtZXRob2QKKyAgICAgICAgd2lsbCByZXR1cm4uCisgICAgICAgIEB0eXBlIGZpbGVuYW1l
OiBzdHJpbmcKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmLCBzdHIpOgor
ICAgICAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTyhmKQorICAgICAgICAgICAgaWYgZmls
ZW5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9ICc8c3RyaW5nPicKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lIGlzIE5vbmU6CisgICAgICAgICAg
ICAgICAgaWYgZiBpcyBzeXMuc3RkaW46CisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0g
JzxzdGRpbj4nCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmls
ZW5hbWUgPSAnPGZpbGU+JworICAgICAgICBzZWxmLmZpbGUgPSBmCisgICAgICAgIHNlbGYudW5n
b3R0ZW5fY2hhciA9IE5vbmUKKyAgICAgICAgc2VsZi51bmdvdHRlbl90b2tlbiA9IE5vbmUKKyAg
ICAgICAgc2VsZi5tdWx0aWxpbmUgPSAwCisgICAgICAgIHNlbGYucXVvdGluZyA9IEZhbHNlCisg
ICAgICAgIHNlbGYuZW9mID0gRmFsc2UKKyAgICAgICAgc2VsZi5kZWxpbWl0ZXJzID0gX0RFTElN
SVRFUlMKKyAgICAgICAgc2VsZi5saW5lX251bWJlciA9IDEKKyAgICAgICAgc2VsZi5maWxlbmFt
ZSA9IGZpbGVuYW1lCisKKyAgICBkZWYgX2dldF9jaGFyKHNlbGYpOgorICAgICAgICAiIiJSZWFk
IGEgY2hhcmFjdGVyIGZyb20gaW5wdXQuCisgICAgICAgIEBydHlwZTogc3RyaW5nCisgICAgICAg
ICIiIgorCisgICAgICAgIGlmIHNlbGYudW5nb3R0ZW5fY2hhciBpcyBOb25lOgorICAgICAgICAg
ICAgaWYgc2VsZi5lb2Y6CisgICAgICAgICAgICAgICAgYyA9ICcnCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIGMgPSBzZWxmLmZpbGUucmVhZCgxKQorICAgICAgICAgICAgICAg
IGlmIGMgPT0gJyc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZW9mID0gVHJ1ZQorICAgICAg
ICAgICAgICAgIGVsaWYgYyA9PSAnXG4nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVf
bnVtYmVyICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGMgPSBzZWxmLnVuZ290dGVu
X2NoYXIKKyAgICAgICAgICAgIHNlbGYudW5nb3R0ZW5fY2hhciA9IE5vbmUKKyAgICAgICAgcmV0
dXJuIGMKKworICAgIGRlZiB3aGVyZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjdXJy
ZW50IGxvY2F0aW9uIGluIHRoZSBpbnB1dC4KKworICAgICAgICBAcnR5cGU6IChzdHJpbmcsIGlu
dCkgdHVwbGUuICBUaGUgZmlyc3QgaXRlbSBpcyB0aGUgZmlsZW5hbWUgb2YKKyAgICAgICAgdGhl
IGlucHV0LCB0aGUgc2Vjb25kIGlzIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICAgICAgICAi
IiIKKworICAgICAgICByZXR1cm4gKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZV9udW1iZXIpCisK
KyAgICBkZWYgX3VuZ2V0X2NoYXIoc2VsZiwgYyk6CisgICAgICAgICIiIlVuZ2V0IGEgY2hhcmFj
dGVyLgorCisgICAgICAgIFRoZSB1bmdldCBidWZmZXIgZm9yIGNoYXJhY3RlcnMgaXMgb25seSBv
bmUgY2hhcmFjdGVyIGxhcmdlOyBpdCBpcworICAgICAgICBhbiBlcnJvciB0byB0cnkgdG8gdW5n
ZXQgYSBjaGFyYWN0ZXIgd2hlbiB0aGUgdW5nZXQgYnVmZmVyIGlzIG5vdAorICAgICAgICBlbXB0
eS4KKworICAgICAgICBAcGFyYW0gYzogdGhlIGNoYXJhY3RlciB0byB1bmdldAorICAgICAgICBA
dHlwZSBjOiBzdHJpbmcKKyAgICAgICAgQHJhaXNlcyBVbmdldEJ1ZmZlckZ1bGw6IHRoZXJlIGlz
IGFscmVhZHkgYW4gdW5nb3R0ZW4gY2hhcgorICAgICAgICAiIiIKKworICAgICAgICBpZiBub3Qg
c2VsZi51bmdvdHRlbl9jaGFyIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBVbmdldEJ1ZmZl
ckZ1bGwKKyAgICAgICAgc2VsZi51bmdvdHRlbl9jaGFyID0gYworCisgICAgZGVmIHNraXBfd2hp
dGVzcGFjZShzZWxmKToKKyAgICAgICAgIiIiQ29uc3VtZSBpbnB1dCB1bnRpbCBhIG5vbi13aGl0
ZXNwYWNlIGNoYXJhY3RlciBpcyBlbmNvdW50ZXJlZC4KKworICAgICAgICBUaGUgbm9uLXdoaXRl
c3BhY2UgY2hhcmFjdGVyIGlzIHRoZW4gdW5nb3R0ZW4sIGFuZCB0aGUgbnVtYmVyIG9mCisgICAg
ICAgIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBjb25zdW1lZCBpcyByZXR1cm5lZC4KKworICAgICAg
ICBJZiB0aGUgdG9rZW5pemVyIGlzIGluIG11bHRpbGluZSBtb2RlLCB0aGVuIG5ld2xpbmVzIGFy
ZSB3aGl0ZXNwYWNlLgorCisgICAgICAgIEBydHlwZTogaW50CisgICAgICAgICIiIgorCisgICAg
ICAgIHNraXBwZWQgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjID0gc2Vs
Zi5fZ2V0X2NoYXIoKQorICAgICAgICAgICAgaWYgYyAhPSAnICcgYW5kIGMgIT0gJ1x0JzoKKyAg
ICAgICAgICAgICAgICBpZiAoYyAhPSAnXG4nKSBvciBub3Qgc2VsZi5tdWx0aWxpbmU6CisgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3VuZ2V0X2NoYXIoYykKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHNraXBwZWQKKyAgICAgICAgICAgIHNraXBwZWQgKz0gMQorCisgICAgZGVmIGdldChz
ZWxmLCB3YW50X2xlYWRpbmcgPSBGYWxzZSwgd2FudF9jb21tZW50ID0gRmFsc2UpOgorICAgICAg
ICAiIiJHZXQgdGhlIG5leHQgdG9rZW4uCisKKyAgICAgICAgQHBhcmFtIHdhbnRfbGVhZGluZzog
SWYgVHJ1ZSwgcmV0dXJuIGEgV0hJVEVTUEFDRSB0b2tlbiBpZiB0aGUKKyAgICAgICAgZmlyc3Qg
Y2hhcmFjdGVyIHJlYWQgaXMgd2hpdGVzcGFjZS4gIFRoZSBkZWZhdWx0IGlzIEZhbHNlLgorICAg
ICAgICBAdHlwZSB3YW50X2xlYWRpbmc6IGJvb2wKKyAgICAgICAgQHBhcmFtIHdhbnRfY29tbWVu
dDogSWYgVHJ1ZSwgcmV0dXJuIGEgQ09NTUVOVCB0b2tlbiBpZiB0aGUKKyAgICAgICAgZmlyc3Qg
dG9rZW4gcmVhZCBpcyBhIGNvbW1lbnQuICBUaGUgZGVmYXVsdCBpcyBGYWxzZS4KKyAgICAgICAg
QHR5cGUgd2FudF9jb21tZW50OiBib29sCisgICAgICAgIEBydHlwZTogVG9rZW4gb2JqZWN0Cisg
ICAgICAgIEByYWlzZXMgZG5zLmV4Y2VwdGlvbi5VbmV4cGVjdGVkRW5kOiBpbnB1dCBlbmRlZCBw
cmVtYXR1cmVseQorICAgICAgICBAcmFpc2VzIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3I6IGlu
cHV0IHdhcyBiYWRseSBmb3JtZWQKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IHNlbGYu
dW5nb3R0ZW5fdG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgIHRva2VuID0gc2VsZi51bmdvdHRl
bl90b2tlbgorICAgICAgICAgICAgc2VsZi51bmdvdHRlbl90b2tlbiA9IE5vbmUKKyAgICAgICAg
ICAgIGlmIHRva2VuLmlzX3doaXRlc3BhY2UoKToKKyAgICAgICAgICAgICAgICBpZiB3YW50X2xl
YWRpbmc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbgorICAgICAgICAgICAgZWxp
ZiB0b2tlbi5pc19jb21tZW50KCk6CisgICAgICAgICAgICAgICAgaWYgd2FudF9jb21tZW50Ogor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4KKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRva2VuCisgICAgICAgIHNraXBwZWQgPSBzZWxmLnNraXBfd2hp
dGVzcGFjZSgpCisgICAgICAgIGlmIHdhbnRfbGVhZGluZyBhbmQgc2tpcHBlZCA+IDA6CisgICAg
ICAgICAgICByZXR1cm4gVG9rZW4oV0hJVEVTUEFDRSwgJyAnKQorICAgICAgICB0b2tlbiA9ICcn
CisgICAgICAgIHR0eXBlID0gSURFTlRJRklFUgorICAgICAgICBoYXNfZXNjYXBlID0gRmFsc2UK
KyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGMgPSBzZWxmLl9nZXRfY2hhcigpCisg
ICAgICAgICAgICBpZiBjID09ICcnIG9yIGMgaW4gc2VsZi5kZWxpbWl0ZXJzOgorICAgICAgICAg
ICAgICAgIGlmIGMgPT0gJycgYW5kIHNlbGYucXVvdGluZzoKKyAgICAgICAgICAgICAgICAgICAg
cmFpc2UgZG5zLmV4Y2VwdGlvbi5VbmV4cGVjdGVkRW5kCisgICAgICAgICAgICAgICAgaWYgdG9r
ZW4gPT0gJycgYW5kIHR0eXBlICE9IFFVT1RFRF9TVFJJTkc6CisgICAgICAgICAgICAgICAgICAg
IGlmIGMgPT0gJygnOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tdWx0aWxpbmUgKz0g
MQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwX3doaXRlc3BhY2UoKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBjID09
ICcpJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLm11bHRpbGluZSA+IDA6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhF
cnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tdWx0aWxpbmUgLT0gMQorICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5za2lwX3doaXRlc3BhY2UoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBjID09ICciJzoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnF1b3Rpbmc6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5xdW90aW5nID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuZGVsaW1pdGVycyA9IF9RVU9USU5HX0RFTElNSVRFUlMKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0dHlwZSA9IFFVT1RFRF9TVFJJTkcKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnF1b3RpbmcgPSBGYWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuZGVsaW1pdGVycyA9IF9ERUxJTUlURVJTCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5za2lwX3doaXRlc3BhY2UoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGVsaWYgYyA9PSAnXG4n
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuKEVPTCwgJ1xuJykKKyAgICAg
ICAgICAgICAgICAgICAgZWxpZiBjID09ICc7JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHNlbGYuX2dldF9jaGFyKCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjID09ICdcbicgb3IgYyA9PSAnJzoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbiArPSBjCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB3YW50X2NvbW1l
bnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdW5nZXRfY2hhcihjKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tlbihDT01NRU5ULCB0b2tlbikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsaWYgYyA9PSAnJzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBzZWxmLm11bHRpbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcigndW5iYWxhbmNlZCBwYXJlbnRoZXNl
cycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuKEVPRikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5tdWx0aWxpbmU6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5za2lwX3doaXRlc3BhY2UoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuID0gJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gVG9rZW4oRU9MLCAnXG4nKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGNvZGUgZXhpc3RzIGluIGNhc2Ugd2UgZXZlciB3
YW50IGEKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZGVsaW1pdGVyIHRvIGJlIHJldHVybmVk
LiAgSXQgbmV2ZXIgcHJvZHVjZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYSB0b2tlbiBj
dXJyZW50bHkuCisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHR0eXBlID0gREVMSU1JVEVSCisgICAgICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fdW5nZXRfY2hhcihjKQorICAgICAgICAgICAgICAgIGJy
ZWFrCisgICAgICAgICAgICBlbGlmIHNlbGYucXVvdGluZzoKKyAgICAgICAgICAgICAgICBpZiBj
ID09ICdcXCc6CisgICAgICAgICAgICAgICAgICAgIGMgPSBzZWxmLl9nZXRfY2hhcigpCisgICAg
ICAgICAgICAgICAgICAgIGlmIGMgPT0gJyc6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlz
ZSBkbnMuZXhjZXB0aW9uLlVuZXhwZWN0ZWRFbmQKKyAgICAgICAgICAgICAgICAgICAgaWYgYy5p
c2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IHNlbGYuX2dldF9jaGFyKCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGMyID09ICcnOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uVW5leHBlY3RlZEVuZAorICAgICAgICAgICAg
ICAgICAgICAgICAgYzMgPSBzZWxmLl9nZXRfY2hhcigpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBjID09ICcnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGRucy5leGNl
cHRpb24uVW5leHBlY3RlZEVuZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IChjMi5p
c2RpZ2l0KCkgYW5kIGMzLmlzZGlnaXQoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAg
YyA9IGNocihpbnQoYykgKiAxMDAgKyBpbnQoYzIpICogMTAgKyBpbnQoYzMpKQorICAgICAgICAg
ICAgICAgIGVsaWYgYyA9PSAnXG4nOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBkbnMuZXhj
ZXB0aW9uLlN5bnRheEVycm9yKCduZXdsaW5lIGluIHF1b3RlZCBzdHJpbmcnKQorICAgICAgICAg
ICAgZWxpZiBjID09ICdcXCc6CisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMg
SXQncyBhbiBlc2NhcGUuICBQdXQgaXQgYW5kIHRoZSBuZXh0IGNoYXJhY3RlciBpbnRvCisgICAg
ICAgICAgICAgICAgIyB0aGUgdG9rZW47IGl0IHdpbGwgYmUgY2hlY2tlZCBsYXRlciBmb3IgZ29v
ZG5lc3MuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgIHRva2VuICs9IGMKKyAg
ICAgICAgICAgICAgICBoYXNfZXNjYXBlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGMgPSBzZWxm
Ll9nZXRfY2hhcigpCisgICAgICAgICAgICAgICAgaWYgYyA9PSAnJyBvciBjID09ICdcbic6Cisg
ICAgICAgICAgICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uVW5leHBlY3RlZEVuZAorICAg
ICAgICAgICAgdG9rZW4gKz0gYworICAgICAgICBpZiB0b2tlbiA9PSAnJyBhbmQgdHR5cGUgIT0g
UVVPVEVEX1NUUklORzoKKyAgICAgICAgICAgIGlmIHNlbGYubXVsdGlsaW5lOgorICAgICAgICAg
ICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3IoJ3VuYmFsYW5jZWQgcGFyZW50
aGVzZXMnKQorICAgICAgICAgICAgdHR5cGUgPSBFT0YKKyAgICAgICAgcmV0dXJuIFRva2VuKHR0
eXBlLCB0b2tlbiwgaGFzX2VzY2FwZSkKKworICAgIGRlZiB1bmdldChzZWxmLCB0b2tlbik6Cisg
ICAgICAgICIiIlVuZ2V0IGEgdG9rZW4uCisKKyAgICAgICAgVGhlIHVuZ2V0IGJ1ZmZlciBmb3Ig
dG9rZW5zIGlzIG9ubHkgb25lIHRva2VuIGxhcmdlOyBpdCBpcworICAgICAgICBhbiBlcnJvciB0
byB0cnkgdG8gdW5nZXQgYSB0b2tlbiB3aGVuIHRoZSB1bmdldCBidWZmZXIgaXMgbm90CisgICAg
ICAgIGVtcHR5LgorCisgICAgICAgIEBwYXJhbSB0b2tlbjogdGhlIHRva2VuIHRvIHVuZ2V0Cisg
ICAgICAgIEB0eXBlIHRva2VuOiBUb2tlbiBvYmplY3QKKyAgICAgICAgQHJhaXNlcyBVbmdldEJ1
ZmZlckZ1bGw6IHRoZXJlIGlzIGFscmVhZHkgYW4gdW5nb3R0ZW4gdG9rZW4KKyAgICAgICAgIiIi
CisKKyAgICAgICAgaWYgbm90IHNlbGYudW5nb3R0ZW5fdG9rZW4gaXMgTm9uZToKKyAgICAgICAg
ICAgIHJhaXNlIFVuZ2V0QnVmZmVyRnVsbAorICAgICAgICBzZWxmLnVuZ290dGVuX3Rva2VuID0g
dG9rZW4KKworICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG5leHQg
aXRlbSBpbiBhbiBpdGVyYXRpb24uCisgICAgICAgIEBydHlwZTogKGludCwgc3RyaW5nKQorICAg
ICAgICAiIiIKKworICAgICAgICB0b2tlbiA9IHNlbGYuZ2V0KCkKKyAgICAgICAgaWYgdG9rZW4u
aXNfZW9mKCk6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIHJldHVy
biB0b2tlbgorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgor
CisgICAgIyBIZWxwZXJzCisKKyAgICBkZWYgZ2V0X2ludChzZWxmKToKKyAgICAgICAgIiIiUmVh
ZCB0aGUgbmV4dCB0b2tlbiBhbmQgaW50ZXJwcmV0IGl0IGFzIGFuIGludGVnZXIuCisKKyAgICAg
ICAgQHJhaXNlcyBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yOgorICAgICAgICBAcnR5cGU6IGlu
dAorICAgICAgICAiIiIKKworICAgICAgICB0b2tlbiA9IHNlbGYuZ2V0KCkudW5lc2NhcGUoKQor
ICAgICAgICBpZiBub3QgdG9rZW4uaXNfaWRlbnRpZmllcigpOgorICAgICAgICAgICAgcmFpc2Ug
ZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcignZXhwZWN0aW5nIGFuIGlkZW50aWZpZXInKQorICAg
ICAgICBpZiBub3QgdG9rZW4udmFsdWUuaXNkaWdpdCgpOgorICAgICAgICAgICAgcmFpc2UgZG5z
LmV4Y2VwdGlvbi5TeW50YXhFcnJvcignZXhwZWN0aW5nIGFuIGludGVnZXInKQorICAgICAgICBy
ZXR1cm4gaW50KHRva2VuLnZhbHVlKQorCisgICAgZGVmIGdldF91aW50OChzZWxmKToKKyAgICAg
ICAgIiIiUmVhZCB0aGUgbmV4dCB0b2tlbiBhbmQgaW50ZXJwcmV0IGl0IGFzIGFuIDgtYml0IHVu
c2lnbmVkCisgICAgICAgIGludGVnZXIuCisKKyAgICAgICAgQHJhaXNlcyBkbnMuZXhjZXB0aW9u
LlN5bnRheEVycm9yOgorICAgICAgICBAcnR5cGU6IGludAorICAgICAgICAiIiIKKworICAgICAg
ICB2YWx1ZSA9IHNlbGYuZ2V0X2ludCgpCisgICAgICAgIGlmIHZhbHVlIDwgMCBvciB2YWx1ZSA+
IDI1NToKKyAgICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3IoJyVkIGlz
IG5vdCBhbiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyJyAlIHZhbHVlKQorICAgICAgICByZXR1cm4g
dmFsdWUKKworICAgIGRlZiBnZXRfdWludDE2KHNlbGYpOgorICAgICAgICAiIiJSZWFkIHRoZSBu
ZXh0IHRva2VuIGFuZCBpbnRlcnByZXQgaXQgYXMgYSAxNi1iaXQgdW5zaWduZWQKKyAgICAgICAg
aW50ZWdlci4KKworICAgICAgICBAcmFpc2VzIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3I6Cisg
ICAgICAgIEBydHlwZTogaW50CisgICAgICAgICIiIgorCisgICAgICAgIHZhbHVlID0gc2VsZi5n
ZXRfaW50KCkKKyAgICAgICAgaWYgdmFsdWUgPCAwIG9yIHZhbHVlID4gNjU1MzU6CisgICAgICAg
ICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKCclZCBpcyBub3QgYW4gdW5zaWdu
ZWQgMTYtYml0IGludGVnZXInICUgdmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAg
ZGVmIGdldF91aW50MzIoc2VsZik6CisgICAgICAgICIiIlJlYWQgdGhlIG5leHQgdG9rZW4gYW5k
IGludGVycHJldCBpdCBhcyBhIDMyLWJpdCB1bnNpZ25lZAorICAgICAgICBpbnRlZ2VyLgorCisg
ICAgICAgIEByYWlzZXMgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcjoKKyAgICAgICAgQHJ0eXBl
OiBpbnQKKyAgICAgICAgIiIiCisKKyAgICAgICAgdG9rZW4gPSBzZWxmLmdldCgpLnVuZXNjYXBl
KCkKKyAgICAgICAgaWYgbm90IHRva2VuLmlzX2lkZW50aWZpZXIoKToKKyAgICAgICAgICAgIHJh
aXNlIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3IoJ2V4cGVjdGluZyBhbiBpZGVudGlmaWVyJykK
KyAgICAgICAgaWYgbm90IHRva2VuLnZhbHVlLmlzZGlnaXQoKToKKyAgICAgICAgICAgIHJhaXNl
IGRucy5leGNlcHRpb24uU3ludGF4RXJyb3IoJ2V4cGVjdGluZyBhbiBpbnRlZ2VyJykKKyAgICAg
ICAgdmFsdWUgPSBsb25nKHRva2VuLnZhbHVlKQorICAgICAgICBpZiB2YWx1ZSA8IDAgb3IgdmFs
dWUgPiA0Mjk0OTY3Mjk2TDoKKyAgICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uU3ludGF4
RXJyb3IoJyVkIGlzIG5vdCBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlcicgJSB2YWx1ZSkKKyAg
ICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgZ2V0X3N0cmluZyhzZWxmLCBvcmlnaW49Tm9u
ZSk6CisgICAgICAgICIiIlJlYWQgdGhlIG5leHQgdG9rZW4gYW5kIGludGVycHJldCBpdCBhcyBh
IHN0cmluZy4KKworICAgICAgICBAcmFpc2VzIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3I6Cisg
ICAgICAgIEBydHlwZTogc3RyaW5nCisgICAgICAgICIiIgorCisgICAgICAgIHRva2VuID0gc2Vs
Zi5nZXQoKS51bmVzY2FwZSgpCisgICAgICAgIGlmIG5vdCAodG9rZW4uaXNfaWRlbnRpZmllcigp
IG9yIHRva2VuLmlzX3F1b3RlZF9zdHJpbmcoKSk6CisgICAgICAgICAgICByYWlzZSBkbnMuZXhj
ZXB0aW9uLlN5bnRheEVycm9yKCdleHBlY3RpbmcgYSBzdHJpbmcnKQorICAgICAgICByZXR1cm4g
dG9rZW4udmFsdWUKKworICAgIGRlZiBnZXRfaWRlbnRpZmllcihzZWxmLCBvcmlnaW49Tm9uZSk6
CisgICAgICAgICIiIlJlYWQgdGhlIG5leHQgdG9rZW4gYW5kIHJhaXNlIGFuIGV4Y2VwdGlvbiBp
ZiBpdCBpcyBub3QgYW4gaWRlbnRpZmllci4KKworICAgICAgICBAcmFpc2VzIGRucy5leGNlcHRp
b24uU3ludGF4RXJyb3I6CisgICAgICAgIEBydHlwZTogc3RyaW5nCisgICAgICAgICIiIgorCisg
ICAgICAgIHRva2VuID0gc2VsZi5nZXQoKS51bmVzY2FwZSgpCisgICAgICAgIGlmIG5vdCB0b2tl
bi5pc19pZGVudGlmaWVyKCk6CisgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRh
eEVycm9yKCdleHBlY3RpbmcgYW4gaWRlbnRpZmllcicpCisgICAgICAgIHJldHVybiB0b2tlbi52
YWx1ZQorCisgICAgZGVmIGdldF9uYW1lKHNlbGYsIG9yaWdpbj1Ob25lKToKKyAgICAgICAgIiIi
UmVhZCB0aGUgbmV4dCB0b2tlbiBhbmQgaW50ZXJwcmV0IGl0IGFzIGEgRE5TIG5hbWUuCisKKyAg
ICAgICAgQHJhaXNlcyBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yOgorICAgICAgICBAcnR5cGU6
IGRucy5uYW1lLk5hbWUgb2JqZWN0IiIiCisKKyAgICAgICAgdG9rZW4gPSBzZWxmLmdldCgpCisg
ICAgICAgIGlmIG5vdCB0b2tlbi5pc19pZGVudGlmaWVyKCk6CisgICAgICAgICAgICByYWlzZSBk
bnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKCdleHBlY3RpbmcgYW4gaWRlbnRpZmllcicpCisgICAg
ICAgIHJldHVybiBkbnMubmFtZS5mcm9tX3RleHQodG9rZW4udmFsdWUsIG9yaWdpbikKKworICAg
IGRlZiBnZXRfZW9sKHNlbGYpOgorICAgICAgICAiIiJSZWFkIHRoZSBuZXh0IHRva2VuIGFuZCBy
YWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaXNuJ3QgRU9MIG9yCisgICAgICAgIEVPRi4KKworICAg
ICAgICBAcmFpc2VzIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3I6CisgICAgICAgIEBydHlwZTog
c3RyaW5nCisgICAgICAgICIiIgorCisgICAgICAgIHRva2VuID0gc2VsZi5nZXQoKQorICAgICAg
ICBpZiBub3QgdG9rZW4uaXNfZW9sX29yX2VvZigpOgorICAgICAgICAgICAgcmFpc2UgZG5zLmV4
Y2VwdGlvbi5TeW50YXhFcnJvcignZXhwZWN0ZWQgRU9MIG9yIEVPRiwgZ290ICVkICIlcyInICUg
KHRva2VuLnR0eXBlLCB0b2tlbi52YWx1ZSkpCisgICAgICAgIHJldHVybiB0b2tlbi52YWx1ZQor
CisgICAgZGVmIGdldF90dGwoc2VsZik6CisgICAgICAgIHRva2VuID0gc2VsZi5nZXQoKS51bmVz
Y2FwZSgpCisgICAgICAgIGlmIG5vdCB0b2tlbi5pc19pZGVudGlmaWVyKCk6CisgICAgICAgICAg
ICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKCdleHBlY3RpbmcgYW4gaWRlbnRpZmll
cicpCisgICAgICAgIHJldHVybiBkbnMudHRsLmZyb21fdGV4dCh0b2tlbi52YWx1ZSkKSW5kZXg6
IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3RzaWcucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvdHNpZy5weQkocmV2aXNpb24g
MCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3RzaWcucHkJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjE2IEBACisjIENvcHlyaWdodCAoQykgMjAwMS0yMDA3LCAyMDA5
LCAyMDEwIE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlm
eSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24g
Zm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisj
IHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz
c2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwor
IyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJS
QU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hB
TEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNU
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBS
RVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFO
CisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJ
T04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBF
UkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKyIiIkROUyBUU0lHIHN1cHBvcnQuIiIiCisK
K2ltcG9ydCBobWFjCitpbXBvcnQgc3RydWN0CisKK2ltcG9ydCBkbnMuZXhjZXB0aW9uCitpbXBv
cnQgZG5zLnJkYXRhY2xhc3MKK2ltcG9ydCBkbnMubmFtZQorCitjbGFzcyBCYWRUaW1lKGRucy5l
eGNlcHRpb24uRE5TRXhjZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgaWYgdGhlIGN1cnJlbnQgdGlt
ZSBpcyBub3Qgd2l0aGluIHRoZSBUU0lHJ3MgdmFsaWRpdHkgdGltZS4iIiIKKyAgICBwYXNzCisK
K2NsYXNzIEJhZFNpZ25hdHVyZShkbnMuZXhjZXB0aW9uLkROU0V4Y2VwdGlvbik6CisgICAgIiIi
UmFpc2VkIGlmIHRoZSBUU0lHIHNpZ25hdHVyZSBmYWlscyB0byB2ZXJpZnkuIiIiCisgICAgcGFz
cworCitjbGFzcyBQZWVyRXJyb3IoZG5zLmV4Y2VwdGlvbi5ETlNFeGNlcHRpb24pOgorICAgICIi
IkJhc2UgY2xhc3MgZm9yIGFsbCBUU0lHIGVycm9ycyBnZW5lcmF0ZWQgYnkgdGhlIHJlbW90ZSBw
ZWVyIiIiCisgICAgcGFzcworCitjbGFzcyBQZWVyQmFkS2V5KFBlZXJFcnJvcik6CisgICAgIiIi
UmFpc2VkIGlmIHRoZSBwZWVyIGRpZG4ndCBrbm93IHRoZSBrZXkgd2UgdXNlZCIiIgorICAgIHBh
c3MKKworY2xhc3MgUGVlckJhZFNpZ25hdHVyZShQZWVyRXJyb3IpOgorICAgICIiIlJhaXNlZCBp
ZiB0aGUgcGVlciBkaWRuJ3QgbGlrZSB0aGUgc2lnbmF0dXJlIHdlIHNlbnQiIiIKKyAgICBwYXNz
CisKK2NsYXNzIFBlZXJCYWRUaW1lKFBlZXJFcnJvcik6CisgICAgIiIiUmFpc2VkIGlmIHRoZSBw
ZWVyIGRpZG4ndCBsaWtlIHRoZSB0aW1lIHdlIHNlbnQiIiIKKyAgICBwYXNzCisKK2NsYXNzIFBl
ZXJCYWRUcnVuY2F0aW9uKFBlZXJFcnJvcik6CisgICAgIiIiUmFpc2VkIGlmIHRoZSBwZWVyIGRp
ZG4ndCBsaWtlIGFtb3VudCBvZiB0cnVuY2F0aW9uIGluIHRoZSBUU0lHIHdlIHNlbnQiIiIKKyAg
ICBwYXNzCisKK2RlZmF1bHRfYWxnb3JpdGhtID0gIkhNQUMtTUQ1LlNJRy1BTEcuUkVHLklOVCIK
KworQkFEU0lHID0gMTYKK0JBREtFWSA9IDE3CitCQURUSU1FID0gMTgKK0JBRFRSVU5DID0gMjIK
KworZGVmIHNpZ24od2lyZSwga2V5bmFtZSwgc2VjcmV0LCB0aW1lLCBmdWRnZSwgb3JpZ2luYWxf
aWQsIGVycm9yLAorICAgICAgICAgb3RoZXJfZGF0YSwgcmVxdWVzdF9tYWMsIGN0eD1Ob25lLCBt
dWx0aT1GYWxzZSwgZmlyc3Q9VHJ1ZSwKKyAgICAgICAgIGFsZ29yaXRobT1kZWZhdWx0X2FsZ29y
aXRobSk6CisgICAgIiIiUmV0dXJuIGEgKHRzaWdfcmRhdGEsIG1hYywgY3R4KSB0dXBsZSBjb250
YWluaW5nIHRoZSBITUFDIFRTSUcgcmRhdGEKKyAgICBmb3IgdGhlIGlucHV0IHBhcmFtZXRlcnMs
IHRoZSBITUFDIE1BQyBjYWxjdWxhdGVkIGJ5IGFwcGx5aW5nIHRoZQorICAgIFRTSUcgc2lnbmF0
dXJlIGFsZ29yaXRobSwgYW5kIHRoZSBUU0lHIGRpZ2VzdCBjb250ZXh0LgorICAgIEBydHlwZTog
KHN0cmluZywgc3RyaW5nLCBobWFjLkhNQUMgb2JqZWN0KQorICAgIEByYWlzZXMgVmFsdWVFcnJv
cjogSXtvdGhlcl9kYXRhfSBpcyB0b28gbG9uZworICAgIEByYWlzZXMgTm90SW1wbGVtZW50ZWRF
cnJvcjogSXthbGdvcml0aG19IGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAiIiIKKworICAgIChhbGdv
cml0aG1fbmFtZSwgZGlnZXN0bW9kKSA9IGdldF9hbGdvcml0aG0oYWxnb3JpdGhtKQorICAgIGlm
IGZpcnN0OgorICAgICAgICBjdHggPSBobWFjLm5ldyhzZWNyZXQsIGRpZ2VzdG1vZD1kaWdlc3Rt
b2QpCisgICAgICAgIG1sID0gbGVuKHJlcXVlc3RfbWFjKQorICAgICAgICBpZiBtbCA+IDA6Cisg
ICAgICAgICAgICBjdHgudXBkYXRlKHN0cnVjdC5wYWNrKCchSCcsIG1sKSkKKyAgICAgICAgICAg
IGN0eC51cGRhdGUocmVxdWVzdF9tYWMpCisgICAgaWQgPSBzdHJ1Y3QucGFjaygnIUgnLCBvcmln
aW5hbF9pZCkKKyAgICBjdHgudXBkYXRlKGlkKQorICAgIGN0eC51cGRhdGUod2lyZVsyOl0pCisg
ICAgaWYgZmlyc3Q6CisgICAgICAgIGN0eC51cGRhdGUoa2V5bmFtZS50b19kaWdlc3RhYmxlKCkp
CisgICAgICAgIGN0eC51cGRhdGUoc3RydWN0LnBhY2soJyFIJywgZG5zLnJkYXRhY2xhc3MuQU5Z
KSkKKyAgICAgICAgY3R4LnVwZGF0ZShzdHJ1Y3QucGFjaygnIUknLCAwKSkKKyAgICBsb25nX3Rp
bWUgPSB0aW1lICsgMEwKKyAgICB1cHBlcl90aW1lID0gKGxvbmdfdGltZSA+PiAzMikgJiAweGZm
ZmZMCisgICAgbG93ZXJfdGltZSA9IGxvbmdfdGltZSAmIDB4ZmZmZmZmZmZMCisgICAgdGltZV9t
YWMgPSBzdHJ1Y3QucGFjaygnIUhJSCcsIHVwcGVyX3RpbWUsIGxvd2VyX3RpbWUsIGZ1ZGdlKQor
ICAgIHByZV9tYWMgPSBhbGdvcml0aG1fbmFtZSArIHRpbWVfbWFjCisgICAgb2wgPSBsZW4ob3Ro
ZXJfZGF0YSkKKyAgICBpZiBvbCA+IDY1NTM1OgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdU
U0lHIE90aGVyIERhdGEgaXMgPiA2NTUzNSBieXRlcycpCisgICAgcG9zdF9tYWMgPSBzdHJ1Y3Qu
cGFjaygnIUhIJywgZXJyb3IsIG9sKSArIG90aGVyX2RhdGEKKyAgICBpZiBmaXJzdDoKKyAgICAg
ICAgY3R4LnVwZGF0ZShwcmVfbWFjKQorICAgICAgICBjdHgudXBkYXRlKHBvc3RfbWFjKQorICAg
IGVsc2U6CisgICAgICAgIGN0eC51cGRhdGUodGltZV9tYWMpCisgICAgbWFjID0gY3R4LmRpZ2Vz
dCgpCisgICAgbXBhY2sgPSBzdHJ1Y3QucGFjaygnIUgnLCBsZW4obWFjKSkKKyAgICB0c2lnX3Jk
YXRhID0gcHJlX21hYyArIG1wYWNrICsgbWFjICsgaWQgKyBwb3N0X21hYworICAgIGlmIG11bHRp
OgorICAgICAgICBjdHggPSBobWFjLm5ldyhzZWNyZXQpCisgICAgICAgIG1sID0gbGVuKG1hYykK
KyAgICAgICAgY3R4LnVwZGF0ZShzdHJ1Y3QucGFjaygnIUgnLCBtbCkpCisgICAgICAgIGN0eC51
cGRhdGUobWFjKQorICAgIGVsc2U6CisgICAgICAgIGN0eCA9IE5vbmUKKyAgICByZXR1cm4gKHRz
aWdfcmRhdGEsIG1hYywgY3R4KQorCitkZWYgaG1hY19tZDUod2lyZSwga2V5bmFtZSwgc2VjcmV0
LCB0aW1lLCBmdWRnZSwgb3JpZ2luYWxfaWQsIGVycm9yLAorICAgICAgICAgICAgIG90aGVyX2Rh
dGEsIHJlcXVlc3RfbWFjLCBjdHg9Tm9uZSwgbXVsdGk9RmFsc2UsIGZpcnN0PVRydWUsCisgICAg
ICAgICAgICAgYWxnb3JpdGhtPWRlZmF1bHRfYWxnb3JpdGhtKToKKyAgICByZXR1cm4gc2lnbih3
aXJlLCBrZXluYW1lLCBzZWNyZXQsIHRpbWUsIGZ1ZGdlLCBvcmlnaW5hbF9pZCwgZXJyb3IsCisg
ICAgICAgICAgICAgICAgb3RoZXJfZGF0YSwgcmVxdWVzdF9tYWMsIGN0eCwgbXVsdGksIGZpcnN0
LCBhbGdvcml0aG0pCisKK2RlZiB2YWxpZGF0ZSh3aXJlLCBrZXluYW1lLCBzZWNyZXQsIG5vdywg
cmVxdWVzdF9tYWMsIHRzaWdfc3RhcnQsIHRzaWdfcmRhdGEsCisgICAgICAgICAgICAgdHNpZ19y
ZGxlbiwgY3R4PU5vbmUsIG11bHRpPUZhbHNlLCBmaXJzdD1UcnVlKToKKyAgICAiIiJWYWxpZGF0
ZSB0aGUgc3BlY2lmaWVkIFRTSUcgcmRhdGEgYWdhaW5zdCB0aGUgb3RoZXIgaW5wdXQgcGFyYW1l
dGVycy4KKworICAgIEByYWlzZXMgRm9ybUVycm9yOiBUaGUgVFNJRyBpcyBiYWRseSBmb3JtZWQu
CisgICAgQHJhaXNlcyBCYWRUaW1lOiBUaGVyZSBpcyB0b28gbXVjaCB0aW1lIHNrZXcgYmV0d2Vl
biB0aGUgY2xpZW50IGFuZCB0aGUKKyAgICBzZXJ2ZXIuCisgICAgQHJhaXNlcyBCYWRTaWduYXR1
cmU6IFRoZSBUU0lHIHNpZ25hdHVyZSBkaWQgbm90IHZhbGlkYXRlCisgICAgQHJ0eXBlOiBobWFj
LkhNQUMgb2JqZWN0IiIiCisKKyAgICAoYWRjb3VudCwpID0gc3RydWN0LnVucGFjaygiIUgiLCB3
aXJlWzEwOjEyXSkKKyAgICBpZiBhZGNvdW50ID09IDA6CisgICAgICAgIHJhaXNlIGRucy5leGNl
cHRpb24uRm9ybUVycm9yCisgICAgYWRjb3VudCAtPSAxCisgICAgbmV3X3dpcmUgPSB3aXJlWzA6
MTBdICsgc3RydWN0LnBhY2soIiFIIiwgYWRjb3VudCkgKyB3aXJlWzEyOnRzaWdfc3RhcnRdCisg
ICAgY3VycmVudCA9IHRzaWdfcmRhdGEKKyAgICAoYW5hbWUsIHVzZWQpID0gZG5zLm5hbWUuZnJv
bV93aXJlKHdpcmUsIGN1cnJlbnQpCisgICAgY3VycmVudCA9IGN1cnJlbnQgKyB1c2VkCisgICAg
KHVwcGVyX3RpbWUsIGxvd2VyX3RpbWUsIGZ1ZGdlLCBtYWNfc2l6ZSkgPSBcCisgICAgICAgICAg
ICAgICAgIHN0cnVjdC51bnBhY2soIiFISUhIIiwgd2lyZVtjdXJyZW50OmN1cnJlbnQgKyAxMF0p
CisgICAgdGltZSA9ICgodXBwZXJfdGltZSArIDBMKSA8PCAzMikgKyAobG93ZXJfdGltZSArIDBM
KQorICAgIGN1cnJlbnQgKz0gMTAKKyAgICBtYWMgPSB3aXJlW2N1cnJlbnQ6Y3VycmVudCArIG1h
Y19zaXplXQorICAgIGN1cnJlbnQgKz0gbWFjX3NpemUKKyAgICAob3JpZ2luYWxfaWQsIGVycm9y
LCBvdGhlcl9zaXplKSA9IFwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdC51bnBhY2soIiFISEgi
LCB3aXJlW2N1cnJlbnQ6Y3VycmVudCArIDZdKQorICAgIGN1cnJlbnQgKz0gNgorICAgIG90aGVy
X2RhdGEgPSB3aXJlW2N1cnJlbnQ6Y3VycmVudCArIG90aGVyX3NpemVdCisgICAgY3VycmVudCAr
PSBvdGhlcl9zaXplCisgICAgaWYgY3VycmVudCAhPSB0c2lnX3JkYXRhICsgdHNpZ19yZGxlbjoK
KyAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IKKyAgICBpZiBlcnJvciAhPSAw
OgorICAgICAgICBpZiBlcnJvciA9PSBCQURTSUc6CisgICAgICAgICAgICByYWlzZSBQZWVyQmFk
U2lnbmF0dXJlCisgICAgICAgIGVsaWYgZXJyb3IgPT0gQkFES0VZOgorICAgICAgICAgICAgcmFp
c2UgUGVlckJhZEtleQorICAgICAgICBlbGlmIGVycm9yID09IEJBRFRJTUU6CisgICAgICAgICAg
ICByYWlzZSBQZWVyQmFkVGltZQorICAgICAgICBlbGlmIGVycm9yID09IEJBRFRSVU5DOgorICAg
ICAgICAgICAgcmFpc2UgUGVlckJhZFRydW5jYXRpb24KKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHJhaXNlIFBlZXJFcnJvcigndW5rbm93biBUU0lHIGVycm9yIGNvZGUgJWQnICUgZXJyb3Ip
CisgICAgdGltZV9sb3cgPSB0aW1lIC0gZnVkZ2UKKyAgICB0aW1lX2hpZ2ggPSB0aW1lICsgZnVk
Z2UKKyAgICBpZiBub3cgPCB0aW1lX2xvdyBvciBub3cgPiB0aW1lX2hpZ2g6CisgICAgICAgIHJh
aXNlIEJhZFRpbWUKKyAgICAoanVuaywgb3VyX21hYywgY3R4KSA9IHNpZ24obmV3X3dpcmUsIGtl
eW5hbWUsIHNlY3JldCwgdGltZSwgZnVkZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9yaWdpbmFsX2lkLCBlcnJvciwgb3RoZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdF9tYWMsIGN0eCwgbXVsdGksIGZpcnN0LCBhbmFtZSkKKyAgICBp
ZiAob3VyX21hYyAhPSBtYWMpOgorICAgICAgICByYWlzZSBCYWRTaWduYXR1cmUKKyAgICByZXR1
cm4gY3R4CisKK2RlZiBnZXRfYWxnb3JpdGhtKGFsZ29yaXRobSk6CisgICAgIiIiUmV0dXJucyB0
aGUgd2lyZSBmb3JtYXQgc3RyaW5nIGFuZCB0aGUgaGFzaCBtb2R1bGUgdG8gdXNlIGZvciB0aGUK
KyAgICBzcGVjaWZpZWQgVFNJRyBhbGdvcml0aG0KKworICAgIEBydHlwZTogKHN0cmluZywgaGFz
aCBjb25zdHJ1Y3RvcikKKyAgICBAcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3I6IEl7YWxnb3Jp
dGhtfSBpcyBub3Qgc3VwcG9ydGVkCisgICAgIiIiCisKKyAgICBoYXNoZXMgPSB7fQorICAgIHRy
eToKKyAgICAgICAgaW1wb3J0IGhhc2hsaWIKKyAgICAgICAgaGFzaGVzW2Rucy5uYW1lLmZyb21f
dGV4dCgnaG1hYy1zaGEyMjQnKV0gPSBoYXNobGliLnNoYTIyNAorICAgICAgICBoYXNoZXNbZG5z
Lm5hbWUuZnJvbV90ZXh0KCdobWFjLXNoYTI1NicpXSA9IGhhc2hsaWIuc2hhMjU2CisgICAgICAg
IGhhc2hlc1tkbnMubmFtZS5mcm9tX3RleHQoJ2htYWMtc2hhMzg0JyldID0gaGFzaGxpYi5zaGEz
ODQKKyAgICAgICAgaGFzaGVzW2Rucy5uYW1lLmZyb21fdGV4dCgnaG1hYy1zaGE1MTInKV0gPSBo
YXNobGliLnNoYTUxMgorICAgICAgICBoYXNoZXNbZG5zLm5hbWUuZnJvbV90ZXh0KCdobWFjLXNo
YTEnKV0gPSBoYXNobGliLnNoYTEKKyAgICAgICAgaGFzaGVzW2Rucy5uYW1lLmZyb21fdGV4dCgn
SE1BQy1NRDUuU0lHLUFMRy5SRUcuSU5UJyldID0gaGFzaGxpYi5tZDUKKworICAgICAgICBpbXBv
cnQgc3lzCisgICAgICAgIGlmIHN5cy5oZXh2ZXJzaW9uIDwgMHgwMjA1MDAwMDoKKyAgICAgICAg
ICAgICMgaGFzaGxpYiBkb2Vzbid0IGNvbmZvcm0gdG8gUEVQIDI0NzogQVBJIGZvcgorICAgICAg
ICAgICAgIyBDcnlwdG9ncmFwaGljIEhhc2ggRnVuY3Rpb25zLCB3aGljaCBobWFjIGJlZm9yZSBw
eXRob24KKyAgICAgICAgICAgICMgMi41IHJlcXVpcmVzLCBzbyBhZGQgdGhlIG5lY2Vzc2FyeSBp
dGVtcy4KKyAgICAgICAgICAgIGNsYXNzIEhhc2hsaWJXcmFwcGVyOgorICAgICAgICAgICAgICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBiYXNlaGFzaCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYu
YmFzZWhhc2ggPSBiYXNlaGFzaAorICAgICAgICAgICAgICAgICAgICBzZWxmLmRpZ2VzdF9zaXpl
ID0gc2VsZi5iYXNlaGFzaCgpLmRpZ2VzdF9zaXplCisKKyAgICAgICAgICAgICAgICBkZWYgbmV3
KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxm
LmJhc2VoYXNoKCphcmdzLCAqKmt3YXJncykKKworICAgICAgICAgICAgZm9yIG5hbWUgaW4gaGFz
aGVzOgorICAgICAgICAgICAgICAgIGhhc2hlc1tuYW1lXSA9IEhhc2hsaWJXcmFwcGVyKGhhc2hl
c1tuYW1lXSkKKworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgaW1wb3J0IG1kNSwg
c2hhCisgICAgICAgIGhhc2hlc1tkbnMubmFtZS5mcm9tX3RleHQoJ0hNQUMtTUQ1LlNJRy1BTEcu
UkVHLklOVCcpXSA9ICBtZDUubWQ1CisgICAgICAgIGhhc2hlc1tkbnMubmFtZS5mcm9tX3RleHQo
J2htYWMtc2hhMScpXSA9IHNoYS5zaGEKKworICAgIGlmIGlzaW5zdGFuY2UoYWxnb3JpdGhtLCAo
c3RyLCB1bmljb2RlKSk6CisgICAgICAgIGFsZ29yaXRobSA9IGRucy5uYW1lLmZyb21fdGV4dChh
bGdvcml0aG0pCisKKyAgICBpZiBhbGdvcml0aG0gaW4gaGFzaGVzOgorICAgICAgICByZXR1cm4g
KGFsZ29yaXRobS50b19kaWdlc3RhYmxlKCksIGhhc2hlc1thbGdvcml0aG1dKQorCisgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcigiVFNJRyBhbGdvcml0aG0gIiArIHN0cihhbGdvcml0aG0p
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaXMgbm90IHN1cHBvcnRlZCIpCklu
ZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy90c2lna2V5cmluZy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy90c2lna2V5
cmluZy5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkv
ZG5zL3RzaWdrZXlyaW5nLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisjIENvcHly
aWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlz
c2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBh
bmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBm
ZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdo
dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3Bp
ZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJ
U0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElO
Q0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBT
UEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5Z
IERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBP
UiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5D
RSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5F
Q1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKyIi
IkEgcGxhY2UgdG8gc3RvcmUgVFNJRyBrZXlzLiIiIgorCitpbXBvcnQgYmFzZTY0CisKK2ltcG9y
dCBkbnMubmFtZQorCitkZWYgZnJvbV90ZXh0KHRleHRyaW5nKToKKyAgICAiIiJDb252ZXJ0IGEg
ZGljdGlvbmFyeSBjb250YWluaW5nICh0ZXh0dWFsIEROUyBuYW1lLCBiYXNlNjQgc2VjcmV0KSBw
YWlycworICAgIGludG8gYSBiaW5hcnkga2V5cmluZyB3aGljaCBoYXMgKGRucy5uYW1lLk5hbWUs
IGJpbmFyeSBzZWNyZXQpIHBhaXJzLgorICAgIEBydHlwZTogZGljdCIiIgorICAgIAorICAgIGtl
eXJpbmcgPSB7fQorICAgIGZvciBrZXl0ZXh0IGluIHRleHRyaW5nOgorICAgICAgICBrZXluYW1l
ID0gZG5zLm5hbWUuZnJvbV90ZXh0KGtleXRleHQpCisgICAgICAgIHNlY3JldCA9IGJhc2U2NC5k
ZWNvZGVzdHJpbmcodGV4dHJpbmdba2V5dGV4dF0pCisgICAgICAgIGtleXJpbmdba2V5bmFtZV0g
PSBzZWNyZXQKKyAgICByZXR1cm4ga2V5cmluZworCitkZWYgdG9fdGV4dChrZXlyaW5nKToKKyAg
ICAiIiJDb252ZXJ0IGEgZGljdGlvbmFyeSBjb250YWluaW5nIChkbnMubmFtZS5OYW1lLCBiaW5h
cnkgc2VjcmV0KSBwYWlycworICAgIGludG8gYSB0ZXh0IGtleXJpbmcgd2hpY2ggaGFzICh0ZXh0
dWFsIEROUyBuYW1lLCBiYXNlNjQgc2VjcmV0KSBwYWlycy4KKyAgICBAcnR5cGU6IGRpY3QiIiIK
KyAgICAKKyAgICB0ZXh0cmluZyA9IHt9CisgICAgZm9yIGtleW5hbWUgaW4ga2V5cmluZzoKKyAg
ICAgICAga2V5dGV4dCA9IGRucy5uYW1lLnRvX3RleHQoa2V5bmFtZSkKKyAgICAgICAgc2VjcmV0
ID0gYmFzZTY0LmVuY29kZXN0cmluZyhrZXlyaW5nW2tleW5hbWVdKQorICAgICAgICB0ZXh0cmlu
Z1trZXl0ZXh0XSA9IHNlY3JldAorICAgIHJldHVybiB0ZXh0cmluZwpJbmRleDogVG9vbHMvV2Vi
UGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvdHRsLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3R0bC5weQkocmV2aXNpb24gMCkKKysrIFRvb2xz
L1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3R0bC5weQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNywgMjAwOSwgMjAxMCBOb21pbnVt
LCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmli
dXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9z
ZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0
IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisj
IGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT
IElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQg
VE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUg
TElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00g
TE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0Yg
Q09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9V
VAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBU
SElTIFNPRlRXQVJFLgorCisiIiJETlMgVFRMIGNvbnZlcnNpb24uIiIiCisKK2ltcG9ydCBkbnMu
ZXhjZXB0aW9uCisKK2NsYXNzIEJhZFRUTChkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKToKKyAg
ICBwYXNzCisKK2RlZiBmcm9tX3RleHQodGV4dCk6CisgICAgIiIiQ29udmVydCB0aGUgdGV4dCBm
b3JtIG9mIGEgVFRMIHRvIGFuIGludGVnZXIuCisKKyAgICBUaGUgQklORCA4IHVuaXRzIHN5bnRh
eCBmb3IgVFRMcyAoZS5nLiAnMXc2ZDRoM20xMHMnKSBpcyBzdXBwb3J0ZWQuCisKKyAgICBAcGFy
YW0gdGV4dDogdGhlIHRleHR1YWwgVFRMCisgICAgQHR5cGUgdGV4dDogc3RyaW5nCisgICAgQHJh
aXNlcyBkbnMudHRsLkJhZFRUTDogdGhlIFRUTCBpcyBub3Qgd2VsbC1mb3JtZWQKKyAgICBAcnR5
cGU6IGludAorICAgICIiIgorCisgICAgaWYgdGV4dC5pc2RpZ2l0KCk6CisgICAgICAgIHRvdGFs
ID0gbG9uZyh0ZXh0KQorICAgIGVsc2U6CisgICAgICAgIGlmIG5vdCB0ZXh0WzBdLmlzZGlnaXQo
KToKKyAgICAgICAgICAgIHJhaXNlIEJhZFRUTAorICAgICAgICB0b3RhbCA9IDBMCisgICAgICAg
IGN1cnJlbnQgPSAwTAorICAgICAgICBmb3IgYyBpbiB0ZXh0OgorICAgICAgICAgICAgaWYgYy5p
c2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgY3VycmVudCAqPSAxMAorICAgICAgICAgICAgICAg
IGN1cnJlbnQgKz0gbG9uZyhjKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBj
ID0gYy5sb3dlcigpCisgICAgICAgICAgICAgICAgaWYgYyA9PSAndyc6CisgICAgICAgICAgICAg
ICAgICAgIHRvdGFsICs9IGN1cnJlbnQgKiA2MDQ4MDBMCisgICAgICAgICAgICAgICAgZWxpZiBj
ID09ICdkJzoKKyAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gY3VycmVudCAqIDg2NDAwTAor
ICAgICAgICAgICAgICAgIGVsaWYgYyA9PSAnaCc6CisgICAgICAgICAgICAgICAgICAgIHRvdGFs
ICs9IGN1cnJlbnQgKiAzNjAwTAorICAgICAgICAgICAgICAgIGVsaWYgYyA9PSAnbSc6CisgICAg
ICAgICAgICAgICAgICAgIHRvdGFsICs9IGN1cnJlbnQgKiA2MEwKKyAgICAgICAgICAgICAgICBl
bGlmIGMgPT0gJ3MnOgorICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjdXJyZW50CisgICAg
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQmFkVFRMKCJ1bmtu
b3duIHVuaXQgJyVzJyIgJSBjKQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSAwCisgICAgICAg
IGlmIG5vdCBjdXJyZW50ID09IDA6CisgICAgICAgICAgICByYWlzZSBCYWRUVEwoInRyYWlsaW5n
IGludGVnZXIiKQorICAgIGlmIHRvdGFsIDwgMEwgb3IgdG90YWwgPiAyMTQ3NDgzNjQ3TDoKKyAg
ICAgICAgcmFpc2UgQmFkVFRMKCJUVEwgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMl4zMSAtIDEg
KGluY2x1c2l2ZSkiKQorICAgIHJldHVybiB0b3RhbApJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxh
eS90aGlyZF9wYXJ0eS9kbnMvdXBkYXRlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VS
ZXBsYXkvdGhpcmRfcGFydHkvZG5zL3VwZGF0ZS5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dl
YlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3VwZGF0ZS5weQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNDEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51
bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJp
YnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBv
c2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhh
dCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQor
IyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB
UyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJE
IFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9N
IExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9G
IENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBP
VVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0Yg
VEhJUyBTT0ZUV0FSRS4KKworIiIiRE5TIER5bmFtaWMgVXBkYXRlIFN1cHBvcnQiIiIKKworaW1w
b3J0IGRucy5tZXNzYWdlCitpbXBvcnQgZG5zLm5hbWUKK2ltcG9ydCBkbnMub3Bjb2RlCitpbXBv
cnQgZG5zLnJkYXRhCitpbXBvcnQgZG5zLnJkYXRhY2xhc3MKK2ltcG9ydCBkbnMucmRhdGFzZXQK
KworY2xhc3MgVXBkYXRlKGRucy5tZXNzYWdlLk1lc3NhZ2UpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB6b25lLCByZGNsYXNzPWRucy5yZGF0YWNsYXNzLklOLCBrZXlyaW5nPU5vbmUsCisgICAg
ICAgICAgICAgICAgIGtleW5hbWU9Tm9uZSwga2V5YWxnb3JpdGhtPWRucy50c2lnLmRlZmF1bHRf
YWxnb3JpdGhtKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBhIG5ldyBETlMgVXBkYXRlIG9iamVj
dC4KKworICAgICAgICBAcGFyYW0gem9uZTogVGhlIHpvbmUgd2hpY2ggaXMgYmVpbmcgdXBkYXRl
ZC4KKyAgICAgICAgQHR5cGUgem9uZTogQSBkbnMubmFtZS5OYW1lIG9yIHN0cmluZworICAgICAg
ICBAcGFyYW0gcmRjbGFzczogVGhlIGNsYXNzIG9mIHRoZSB6b25lOyBkZWZhdWx0cyB0byBkbnMu
cmRhdGFjbGFzcy5JTi4KKyAgICAgICAgQHR5cGUgcmRjbGFzczogQW4gaW50IGRlc2lnbmF0aW5n
IHRoZSBjbGFzcywgb3IgYSBzdHJpbmcgd2hvc2UgdmFsdWUKKyAgICAgICAgaXMgdGhlIG5hbWUg
b2YgYSBjbGFzcy4KKyAgICAgICAgQHBhcmFtIGtleXJpbmc6IFRoZSBUU0lHIGtleXJpbmcgdG8g
dXNlOyBkZWZhdWx0cyB0byBOb25lLgorICAgICAgICBAdHlwZSBrZXlyaW5nOiBkaWN0CisgICAg
ICAgIEBwYXJhbSBrZXluYW1lOiBUaGUgbmFtZSBvZiB0aGUgVFNJRyBrZXkgdG8gdXNlOyBkZWZh
dWx0cyB0byBOb25lLgorICAgICAgICBUaGUga2V5IG11c3QgYmUgZGVmaW5lZCBpbiB0aGUga2V5
cmluZy4gIElmIGEga2V5cmluZyBpcyBzcGVjaWZpZWQKKyAgICAgICAgYnV0IGEga2V5bmFtZSBp
cyBub3QsIHRoZW4gdGhlIGtleSB1c2VkIHdpbGwgYmUgdGhlIGZpcnN0IGtleSBpbiB0aGUKKyAg
ICAgICAga2V5cmluZy4gIE5vdGUgdGhhdCB0aGUgb3JkZXIgb2Yga2V5cyBpbiBhIGRpY3Rpb25h
cnkgaXMgbm90IGRlZmluZWQsCisgICAgICAgIHNvIGFwcGxpY2F0aW9ucyBzaG91bGQgc3VwcGx5
IGEga2V5bmFtZSB3aGVuIGEga2V5cmluZyBpcyB1c2VkLCB1bmxlc3MKKyAgICAgICAgdGhleSBr
bm93IHRoZSBrZXlyaW5nIGNvbnRhaW5zIG9ubHkgb25lIGtleS4KKyAgICAgICAgQHR5cGUga2V5
bmFtZTogZG5zLm5hbWUuTmFtZSBvciBzdHJpbmcKKyAgICAgICAgQHBhcmFtIGtleWFsZ29yaXRo
bTogVGhlIFRTSUcgYWxnb3JpdGhtIHRvIHVzZTsgZGVmYXVsdHMgdG8KKyAgICAgICAgZG5zLnRz
aWcuZGVmYXVsdF9hbGdvcml0aG0KKyAgICAgICAgQHR5cGUga2V5YWxnb3JpdGhtOiBzdHJpbmcK
KyAgICAgICAgIiIiCisgICAgICAgIHN1cGVyKFVwZGF0ZSwgc2VsZikuX19pbml0X18oKQorICAg
ICAgICBzZWxmLmZsYWdzIHw9IGRucy5vcGNvZGUudG9fZmxhZ3MoZG5zLm9wY29kZS5VUERBVEUp
CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoem9uZSwgKHN0ciwgdW5pY29kZSkpOgorICAgICAgICAg
ICAgem9uZSA9IGRucy5uYW1lLmZyb21fdGV4dCh6b25lKQorICAgICAgICBzZWxmLm9yaWdpbiA9
IHpvbmUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShyZGNsYXNzLCBzdHIpOgorICAgICAgICAgICAg
cmRjbGFzcyA9IGRucy5yZGF0YWNsYXNzLmZyb21fdGV4dChyZGNsYXNzKQorICAgICAgICBzZWxm
LnpvbmVfcmRjbGFzcyA9IHJkY2xhc3MKKyAgICAgICAgc2VsZi5maW5kX3Jyc2V0KHNlbGYucXVl
c3Rpb24sIHNlbGYub3JpZ2luLCByZGNsYXNzLCBkbnMucmRhdGF0eXBlLlNPQSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNyZWF0ZT1UcnVlLCBmb3JjZV91bmlxdWU9VHJ1ZSkKKyAgICAgICAg
aWYgbm90IGtleXJpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYudXNlX3RzaWcoa2V5cmlu
Zywga2V5bmFtZSwga2V5YWxnb3JpdGhtKQorCisgICAgZGVmIF9hZGRfcnIoc2VsZiwgbmFtZSwg
dHRsLCByZCwgZGVsZXRpbmc9Tm9uZSwgc2VjdGlvbj1Ob25lKToKKyAgICAgICAgIiIiQWRkIGEg
c2luZ2xlIFJSIHRvIHRoZSB1cGRhdGUgc2VjdGlvbi4iIiIKKworICAgICAgICBpZiBzZWN0aW9u
IGlzIE5vbmU6CisgICAgICAgICAgICBzZWN0aW9uID0gc2VsZi5hdXRob3JpdHkKKyAgICAgICAg
Y292ZXJzID0gcmQuY292ZXJzKCkKKyAgICAgICAgcnJzZXQgPSBzZWxmLmZpbmRfcnJzZXQoc2Vj
dGlvbiwgbmFtZSwgc2VsZi56b25lX3JkY2xhc3MsIHJkLnJkdHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY292ZXJzLCBkZWxldGluZywgVHJ1ZSwgVHJ1ZSkKKyAgICAgICAg
cnJzZXQuYWRkKHJkLCB0dGwpCisKKyAgICBkZWYgX2FkZChzZWxmLCByZXBsYWNlLCBzZWN0aW9u
LCBuYW1lLCAqYXJncyk6CisgICAgICAgICIiIkFkZCByZWNvcmRzLiAgVGhlIGZpcnN0IGFyZ3Vt
ZW50IGlzIHRoZSByZXBsYWNlIG1vZGUuICBJZgorICAgICAgICBmYWxzZSwgUlJzIGFyZSBhZGRl
ZCB0byBhbiBleGlzdGluZyBSUnNldDsgaWYgdHJ1ZSwgdGhlIFJSc2V0CisgICAgICAgIGlzIHJl
cGxhY2VkIHdpdGggdGhlIHNwZWNpZmllZCBjb250ZW50cy4gIFRoZSBzZWNvbmQKKyAgICAgICAg
YXJndW1lbnQgaXMgdGhlIHNlY3Rpb24gdG8gYWRkIHRvLiAgVGhlIHRoaXJkIGFyZ3VtZW50Cisg
ICAgICAgIGlzIGFsd2F5cyBhIG5hbWUuICBUaGUgb3RoZXIgYXJndW1lbnRzIGNhbiBiZToKKwor
ICAgICAgICAgICAgICAgIC0gcmRhdGFzZXQuLi4KKworICAgICAgICAgICAgICAgIC0gdHRsLCBy
ZGF0YS4uLgorCisgICAgICAgICAgICAgICAgLSB0dGwsIHJkdHlwZSwgc3RyaW5nLi4uIiIiCisK
KyAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lLCAoc3RyLCB1bmljb2RlKSk6CisgICAgICAgICAg
ICBuYW1lID0gZG5zLm5hbWUuZnJvbV90ZXh0KG5hbWUsIE5vbmUpCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoYXJnc1swXSwgZG5zLnJkYXRhc2V0LlJkYXRhc2V0KToKKyAgICAgICAgICAgIGZvciBy
ZHMgaW4gYXJnczoKKyAgICAgICAgICAgICAgICBpZiByZXBsYWNlOgorICAgICAgICAgICAgICAg
ICAgICBzZWxmLmRlbGV0ZShuYW1lLCByZHMucmR0eXBlKQorICAgICAgICAgICAgICAgIGZvciBy
ZCBpbiByZHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9ycihuYW1lLCByZHMudHRs
LCByZCwgc2VjdGlvbj1zZWN0aW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJncyA9
IGxpc3QoYXJncykKKyAgICAgICAgICAgIHR0bCA9IGludChhcmdzLnBvcCgwKSkKKyAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoYXJnc1swXSwgZG5zLnJkYXRhLlJkYXRhKToKKyAgICAgICAgICAg
ICAgICBpZiByZXBsYWNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZShuYW1lLCBh
cmdzWzBdLnJkdHlwZSkKKyAgICAgICAgICAgICAgICBmb3IgcmQgaW4gYXJnczoKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fYWRkX3JyKG5hbWUsIHR0bCwgcmQsIHNlY3Rpb249c2VjdGlvbikK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmR0eXBlID0gYXJncy5wb3AoMCkK
KyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJkdHlwZSwgc3RyKToKKyAgICAgICAgICAg
ICAgICAgICAgcmR0eXBlID0gZG5zLnJkYXRhdHlwZS5mcm9tX3RleHQocmR0eXBlKQorICAgICAg
ICAgICAgICAgIGlmIHJlcGxhY2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRlKG5h
bWUsIHJkdHlwZSkKKyAgICAgICAgICAgICAgICBmb3IgcyBpbiBhcmdzOgorICAgICAgICAgICAg
ICAgICAgICByZCA9IGRucy5yZGF0YS5mcm9tX3RleHQoc2VsZi56b25lX3JkY2xhc3MsIHJkdHlw
ZSwgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
b3JpZ2luKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRfcnIobmFtZSwgdHRsLCByZCwg
c2VjdGlvbj1zZWN0aW9uKQorCisgICAgZGVmIGFkZChzZWxmLCBuYW1lLCAqYXJncyk6CisgICAg
ICAgICIiIkFkZCByZWNvcmRzLiAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFsd2F5cyBhIG5hbWUu
ICBUaGUgb3RoZXIKKyAgICAgICAgYXJndW1lbnRzIGNhbiBiZToKKworICAgICAgICAgICAgICAg
IC0gcmRhdGFzZXQuLi4KKworICAgICAgICAgICAgICAgIC0gdHRsLCByZGF0YS4uLgorCisgICAg
ICAgICAgICAgICAgLSB0dGwsIHJkdHlwZSwgc3RyaW5nLi4uIiIiCisgICAgICAgIHNlbGYuX2Fk
ZChGYWxzZSwgc2VsZi5hdXRob3JpdHksIG5hbWUsICphcmdzKQorCisgICAgZGVmIGRlbGV0ZShz
ZWxmLCBuYW1lLCAqYXJncyk6CisgICAgICAgICIiIkRlbGV0ZSByZWNvcmRzLiAgVGhlIGZpcnN0
IGFyZ3VtZW50IGlzIGFsd2F5cyBhIG5hbWUuICBUaGUgb3RoZXIKKyAgICAgICAgYXJndW1lbnRz
IGNhbiBiZToKKworICAgICAgICAgICAgICAgIC0gSXtub3RoaW5nfQorCisgICAgICAgICAgICAg
ICAgLSByZGF0YXNldC4uLgorCisgICAgICAgICAgICAgICAgLSByZGF0YS4uLgorCisgICAgICAg
ICAgICAgICAgLSByZHR5cGUsIFtzdHJpbmcuLi5dIiIiCisKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShuYW1lLCAoc3RyLCB1bmljb2RlKSk6CisgICAgICAgICAgICBuYW1lID0gZG5zLm5hbWUuZnJv
bV90ZXh0KG5hbWUsIE5vbmUpCisgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAg
ICAgcnJzZXQgPSBzZWxmLmZpbmRfcnJzZXQoc2VsZi5hdXRob3JpdHksIG5hbWUsIGRucy5yZGF0
YWNsYXNzLkFOWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRucy5yZGF0
YXR5cGUuQU5ZLCBkbnMucmRhdGF0eXBlLk5PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkbnMucmRhdGF0eXBlLkFOWSwgVHJ1ZSwgVHJ1ZSkKKyAgICAgICAgZWxpZiBp
c2luc3RhbmNlKGFyZ3NbMF0sIGRucy5yZGF0YXNldC5SZGF0YXNldCk6CisgICAgICAgICAgICBm
b3IgcmRzIGluIGFyZ3M6CisgICAgICAgICAgICAgICAgZm9yIHJkIGluIHJkczoKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fYWRkX3JyKG5hbWUsIDAsIHJkLCBkbnMucmRhdGFjbGFzcy5OT05F
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJncyA9IGxpc3QoYXJncykKKyAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoYXJnc1swXSwgZG5zLnJkYXRhLlJkYXRhKToKKyAgICAgICAgICAg
ICAgICBmb3IgcmQgaW4gYXJnczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkX3JyKG5h
bWUsIDAsIHJkLCBkbnMucmRhdGFjbGFzcy5OT05FKQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICByZHR5cGUgPSBhcmdzLnBvcCgwKQorICAgICAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocmR0eXBlLCBzdHIpOgorICAgICAgICAgICAgICAgICAgICByZHR5cGUgPSBkbnMucmRh
dGF0eXBlLmZyb21fdGV4dChyZHR5cGUpCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09
IDA6CisgICAgICAgICAgICAgICAgICAgIHJyc2V0ID0gc2VsZi5maW5kX3Jyc2V0KHNlbGYuYXV0
aG9yaXR5LCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLnpvbmVfcmRjbGFzcywgcmR0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkbnMucmRhdGF0eXBlLk5PTkUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRucy5yZGF0YWNsYXNzLkFOWSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgVHJ1ZSkKKyAgICAgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiBhcmdzOgorICAgICAgICAg
ICAgICAgICAgICAgICAgcmQgPSBkbnMucmRhdGEuZnJvbV90ZXh0KHNlbGYuem9uZV9yZGNsYXNz
LCByZHR5cGUsIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5vcmlnaW4pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRfcnIo
bmFtZSwgMCwgcmQsIGRucy5yZGF0YWNsYXNzLk5PTkUpCisKKyAgICBkZWYgcmVwbGFjZShzZWxm
LCBuYW1lLCAqYXJncyk6CisgICAgICAgICIiIlJlcGxhY2UgcmVjb3Jkcy4gIFRoZSBmaXJzdCBh
cmd1bWVudCBpcyBhbHdheXMgYSBuYW1lLiAgVGhlIG90aGVyCisgICAgICAgIGFyZ3VtZW50cyBj
YW4gYmU6CisKKyAgICAgICAgICAgICAgICAtIHJkYXRhc2V0Li4uCisKKyAgICAgICAgICAgICAg
ICAtIHR0bCwgcmRhdGEuLi4KKworICAgICAgICAgICAgICAgIC0gdHRsLCByZHR5cGUsIHN0cmlu
Zy4uLgorCisgICAgICAgIE5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byByZXBsYWNlIHRoZSBlbnRp
cmUgbm9kZSwgeW91IHNob3VsZCBkbworICAgICAgICBhIGRlbGV0ZSBvZiB0aGUgbmFtZSBmb2xs
b3dlZCBieSBvbmUgb3IgbW9yZSBjYWxscyB0byBhZGQuIiIiCisKKyAgICAgICAgc2VsZi5fYWRk
KFRydWUsIHNlbGYuYXV0aG9yaXR5LCBuYW1lLCAqYXJncykKKworICAgIGRlZiBwcmVzZW50KHNl
bGYsIG5hbWUsICphcmdzKToKKyAgICAgICAgIiIiUmVxdWlyZSB0aGF0IGFuIG93bmVyIG5hbWUg
KGFuZCBvcHRpb25hbGx5IGFuIHJkYXRhIHR5cGUsCisgICAgICAgIG9yIHNwZWNpZmljIHJkYXRh
c2V0KSBleGlzdHMgYXMgYSBwcmVyZXF1aXNpdGUgdG8gdGhlCisgICAgICAgIGV4ZWN1dGlvbiBv
ZiB0aGUgdXBkYXRlLiAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFsd2F5cyBhIG5hbWUuCisgICAg
ICAgIFRoZSBvdGhlciBhcmd1bWVudHMgY2FuIGJlOgorCisgICAgICAgICAgICAgICAgLSByZGF0
YXNldC4uLgorCisgICAgICAgICAgICAgICAgLSByZGF0YS4uLgorCisgICAgICAgICAgICAgICAg
LSByZHR5cGUsIHN0cmluZy4uLiIiIgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UobmFtZSwgKHN0
ciwgdW5pY29kZSkpOgorICAgICAgICAgICAgbmFtZSA9IGRucy5uYW1lLmZyb21fdGV4dChuYW1l
LCBOb25lKQorICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgIHJyc2V0ID0g
c2VsZi5maW5kX3Jyc2V0KHNlbGYuYW5zd2VyLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG5zLnJkYXRhY2xhc3MuQU5ZLCBkbnMucmRhdGF0eXBlLkFOWSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRucy5yZGF0YXR5cGUuTk9ORSwgTm9u
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIFRydWUpCisgICAg
ICAgIGVsaWYgaXNpbnN0YW5jZShhcmdzWzBdLCBkbnMucmRhdGFzZXQuUmRhdGFzZXQpIG9yIFwK
KyAgICAgICAgICAgICBpc2luc3RhbmNlKGFyZ3NbMF0sIGRucy5yZGF0YS5SZGF0YSkgb3IgXAor
ICAgICAgICAgICAgIGxlbihhcmdzKSA+IDE6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5j
ZShhcmdzWzBdLCBkbnMucmRhdGFzZXQuUmRhdGFzZXQpOgorICAgICAgICAgICAgICAgICMgQWRk
IGEgMCBUVEwKKyAgICAgICAgICAgICAgICBhcmdzID0gbGlzdChhcmdzKQorICAgICAgICAgICAg
ICAgIGFyZ3MuaW5zZXJ0KDAsIDApCisgICAgICAgICAgICBzZWxmLl9hZGQoRmFsc2UsIHNlbGYu
YW5zd2VyLCBuYW1lLCAqYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJkdHlwZSA9
IGFyZ3NbMF0KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmR0eXBlLCBzdHIpOgorICAgICAg
ICAgICAgICAgIHJkdHlwZSA9IGRucy5yZGF0YXR5cGUuZnJvbV90ZXh0KHJkdHlwZSkKKyAgICAg
ICAgICAgIHJyc2V0ID0gc2VsZi5maW5kX3Jyc2V0KHNlbGYuYW5zd2VyLCBuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5zLnJkYXRhY2xhc3MuQU5ZLCByZHR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbnMucmRhdGF0eXBlLk5PTkUs
IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLCBUcnVlKQor
CisgICAgZGVmIGFic2VudChzZWxmLCBuYW1lLCByZHR5cGU9Tm9uZSk6CisgICAgICAgICIiIlJl
cXVpcmUgdGhhdCBhbiBvd25lciBuYW1lIChhbmQgb3B0aW9uYWxseSBhbiByZGF0YSB0eXBlKSBk
b2VzCisgICAgICAgIG5vdCBleGlzdCBhcyBhIHByZXJlcXVpc2l0ZSB0byB0aGUgZXhlY3V0aW9u
IG9mIHRoZSB1cGRhdGUuIiIiCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lLCAoc3RyLCB1
bmljb2RlKSk6CisgICAgICAgICAgICBuYW1lID0gZG5zLm5hbWUuZnJvbV90ZXh0KG5hbWUsIE5v
bmUpCisgICAgICAgIGlmIHJkdHlwZSBpcyBOb25lOgorICAgICAgICAgICAgcnJzZXQgPSBzZWxm
LmZpbmRfcnJzZXQoc2VsZi5hbnN3ZXIsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkbnMucmRhdGFjbGFzcy5OT05FLCBkbnMucmRhdGF0eXBlLkFOWSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRucy5yZGF0YXR5cGUuTk9ORSwgTm9uZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIFRydWUpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJkdHlwZSwgc3RyKToKKyAgICAgICAg
ICAgICAgICByZHR5cGUgPSBkbnMucmRhdGF0eXBlLmZyb21fdGV4dChyZHR5cGUpCisgICAgICAg
ICAgICBycnNldCA9IHNlbGYuZmluZF9ycnNldChzZWxmLmFuc3dlciwgbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRucy5yZGF0YWNsYXNzLk5PTkUsIHJkdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRucy5yZGF0YXR5cGUuTk9ORSwg
Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIFRydWUpCisK
KyAgICBkZWYgdG9fd2lyZShzZWxmLCBvcmlnaW49Tm9uZSwgbWF4X3NpemU9NjU1MzUpOgorICAg
ICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgdXBkYXRlIGluIEROUyBjb21w
cmVzc2VkIHdpcmUKKyAgICAgICAgZm9ybWF0LgorICAgICAgICBAcnR5cGU6IHN0cmluZyIiIgor
ICAgICAgICBpZiBvcmlnaW4gaXMgTm9uZToKKyAgICAgICAgICAgIG9yaWdpbiA9IHNlbGYub3Jp
Z2luCisgICAgICAgIHJldHVybiBzdXBlcihVcGRhdGUsIHNlbGYpLnRvX3dpcmUob3JpZ2luLCBt
YXhfc2l6ZSkKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3ZlcnNp
b24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMv
dmVyc2lvbi5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvZG5zL3ZlcnNpb24ucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNz
aW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFu
ZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZl
ZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGll
cy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElT
Q0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5D
TFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQ
RUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkg
REFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9S
IFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNF
IE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVD
VElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworIiIi
ZG5zcHl0aG9uIHJlbGVhc2UgdmVyc2lvbiBpbmZvcm1hdGlvbi4iIiIKKworTUFKT1IgPSAxCitN
SU5PUiA9IDgKK01JQ1JPID0gMAorUkVMRUFTRUxFVkVMID0gMHgwZgorU0VSSUFMID0gMAorCitp
ZiBSRUxFQVNFTEVWRUwgPT0gMHgwZjoKKyAgICB2ZXJzaW9uID0gJyVkLiVkLiVkJyAlIChNQUpP
UiwgTUlOT1IsIE1JQ1JPKQorZWxpZiBSRUxFQVNFTEVWRUwgPT0gMHgwMDoKKyAgICB2ZXJzaW9u
ID0gJyVkLiVkLiVkeCVkJyAlIFwKKyAgICAgICAgICAgICAgKE1BSk9SLCBNSU5PUiwgTUlDUk8s
IFNFUklBTCkKK2Vsc2U6CisgICAgdmVyc2lvbiA9ICclZC4lZC4lZCV4JWQnICUgXAorICAgICAg
ICAgICAgICAoTUFKT1IsIE1JTk9SLCBNSUNSTywgUkVMRUFTRUxFVkVMLCBTRVJJQUwpCisKK2hl
eHZlcnNpb24gPSBNQUpPUiA8PCAyNCB8IE1JTk9SIDw8IDE2IHwgTUlDUk8gPDwgOCB8IFJFTEVB
U0VMRVZFTCA8PCA0IHwgXAorICAgICAgICAgICAgIFNFUklBTApJbmRleDogVG9vbHMvV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvem9uZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQ
YWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy96b25lLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMv
V2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvem9uZS5weQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4NTUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51
bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJp
YnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBv
c2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhh
dCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQor
IyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB
UyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJE
IFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9N
IExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9G
IENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBP
VVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0Yg
VEhJUyBTT0ZUV0FSRS4KKworIiIiRE5TIFpvbmVzLiIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1w
b3J0IGdlbmVyYXRvcnMKKworaW1wb3J0IHN5cworCitpbXBvcnQgZG5zLmV4Y2VwdGlvbgoraW1w
b3J0IGRucy5uYW1lCitpbXBvcnQgZG5zLm5vZGUKK2ltcG9ydCBkbnMucmRhdGFjbGFzcworaW1w
b3J0IGRucy5yZGF0YXR5cGUKK2ltcG9ydCBkbnMucmRhdGEKK2ltcG9ydCBkbnMucnJzZXQKK2lt
cG9ydCBkbnMudG9rZW5pemVyCitpbXBvcnQgZG5zLnR0bAorCitjbGFzcyBCYWRab25lKGRucy5l
eGNlcHRpb24uRE5TRXhjZXB0aW9uKToKKyAgICAiIiJUaGUgem9uZSBpcyBtYWxmb3JtZWQuIiIi
CisgICAgcGFzcworCitjbGFzcyBOb1NPQShCYWRab25lKToKKyAgICAiIiJUaGUgem9uZSBoYXMg
bm8gU09BIFJSIGF0IGl0cyBvcmlnaW4uIiIiCisgICAgcGFzcworCitjbGFzcyBOb05TKEJhZFpv
bmUpOgorICAgICIiIlRoZSB6b25lIGhhcyBubyBOUyBSUnNldCBhdCBpdHMgb3JpZ2luLiIiIgor
ICAgIHBhc3MKKworY2xhc3MgVW5rbm93bk9yaWdpbihCYWRab25lKToKKyAgICAiIiJUaGUgem9u
ZSdzIG9yaWdpbiBpcyB1bmtub3duLiIiIgorICAgIHBhc3MKKworY2xhc3MgWm9uZShvYmplY3Qp
OgorICAgICIiIkEgRE5TIHpvbmUuCisKKyAgICBBIFpvbmUgaXMgYSBtYXBwaW5nIGZyb20gbmFt
ZXMgdG8gbm9kZXMuICBUaGUgem9uZSBvYmplY3QgbWF5IGJlCisgICAgdHJlYXRlZCBsaWtlIGEg
UHl0aG9uIGRpY3Rpb25hcnksIGUuZy4gem9uZVtuYW1lXSB3aWxsIHJldHJpZXZlCisgICAgdGhl
IG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoYXQgbmFtZS4gIFRoZSBJe25hbWV9IG1heSBiZSBhCisg
ICAgZG5zLm5hbWUuTmFtZSBvYmplY3QsIG9yIGl0IG1heSBiZSBhIHN0cmluZy4gIEluIHRoZSBl
aXRoZXIgY2FzZSwKKyAgICBpZiB0aGUgbmFtZSBpcyByZWxhdGl2ZSBpdCBpcyB0cmVhdGVkIGFz
IHJlbGF0aXZlIHRvIHRoZSBvcmlnaW4gb2YKKyAgICB0aGUgem9uZS4KKworICAgIEBpdmFyIHJk
Y2xhc3M6IFRoZSB6b25lJ3MgcmRhdGEgY2xhc3M7IHRoZSBkZWZhdWx0IGlzIGNsYXNzIElOLgor
ICAgIEB0eXBlIHJkY2xhc3M6IGludAorICAgIEBpdmFyIG9yaWdpbjogVGhlIG9yaWdpbiBvZiB0
aGUgem9uZS4KKyAgICBAdHlwZSBvcmlnaW46IGRucy5uYW1lLk5hbWUgb2JqZWN0CisgICAgQGl2
YXIgbm9kZXM6IEEgZGljdGlvbmFyeSBtYXBwaW5nIHRoZSBuYW1lcyBvZiBub2RlcyBpbiB0aGUg
em9uZSB0byB0aGUKKyAgICBub2RlcyB0aGVtc2VsdmVzLgorICAgIEB0eXBlIG5vZGVzOiBkaWN0
CisgICAgQGl2YXIgcmVsYXRpdml6ZTogc2hvdWxkIG5hbWVzIGluIHRoZSB6b25lIGJlIHJlbGF0
aXZpemVkPworICAgIEB0eXBlIHJlbGF0aXZpemU6IGJvb2wKKyAgICBAY3ZhciBub2RlX2ZhY3Rv
cnk6IHRoZSBmYWN0b3J5IHVzZWQgdG8gY3JlYXRlIGEgbmV3IG5vZGUKKyAgICBAdHlwZSBub2Rl
X2ZhY3Rvcnk6IGNsYXNzIG9yIGNhbGxhYmxlCisgICAgIiIiCisKKyAgICBub2RlX2ZhY3Rvcnkg
PSBkbnMubm9kZS5Ob2RlCisKKyAgICBfX3Nsb3RzX18gPSBbJ3JkY2xhc3MnLCAnb3JpZ2luJywg
J25vZGVzJywgJ3JlbGF0aXZpemUnXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9yaWdpbiwg
cmRjbGFzcz1kbnMucmRhdGFjbGFzcy5JTiwgcmVsYXRpdml6ZT1UcnVlKToKKyAgICAgICAgIiIi
SW5pdGlhbGl6ZSBhIHpvbmUgb2JqZWN0LgorCisgICAgICAgIEBwYXJhbSBvcmlnaW46IFRoZSBv
cmlnaW4gb2YgdGhlIHpvbmUuCisgICAgICAgIEB0eXBlIG9yaWdpbjogZG5zLm5hbWUuTmFtZSBv
YmplY3QKKyAgICAgICAgQHBhcmFtIHJkY2xhc3M6IFRoZSB6b25lJ3MgcmRhdGEgY2xhc3M7IHRo
ZSBkZWZhdWx0IGlzIGNsYXNzIElOLgorICAgICAgICBAdHlwZSByZGNsYXNzOiBpbnQiIiIKKwor
ICAgICAgICBzZWxmLnJkY2xhc3MgPSByZGNsYXNzCisgICAgICAgIHNlbGYub3JpZ2luID0gb3Jp
Z2luCisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBzZWxmLnJlbGF0aXZpemUgPSBy
ZWxhdGl2aXplCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiVHdv
IHpvbmVzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgb3JpZ2luLCBjbGFzcywgYW5k
CisgICAgICAgIG5vZGVzLgorICAgICAgICBAcnR5cGU6IGJvb2wKKyAgICAgICAgIiIiCisKKyAg
ICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFpvbmUpOgorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisgICAgICAgIGlmIHNlbGYucmRjbGFzcyAhPSBvdGhlci5yZGNsYXNzIG9yIFwKKyAg
ICAgICAgICAgc2VsZi5vcmlnaW4gIT0gb3RoZXIub3JpZ2luIG9yIFwKKyAgICAgICAgICAgc2Vs
Zi5ub2RlcyAhPSBvdGhlci5ub2RlczoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAg
ICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIi
IkFyZSB0d28gem9uZXMgbm90IGVxdWFsPworICAgICAgICBAcnR5cGU6IGJvb2wKKyAgICAgICAg
IiIiCisKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9fZXFfXyhvdGhlcikKKworICAgIGRlZiBf
dmFsaWRhdGVfbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lLCAo
c3RyLCB1bmljb2RlKSk6CisgICAgICAgICAgICBuYW1lID0gZG5zLm5hbWUuZnJvbV90ZXh0KG5h
bWUsIE5vbmUpCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgZG5zLm5hbWUuTmFt
ZSk6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigibmFtZSBwYXJhbWV0ZXIgbXVzdCBiZSBj
b252ZXJ0YWJsZSB0byBhIEROUyBuYW1lIikKKyAgICAgICAgaWYgbmFtZS5pc19hYnNvbHV0ZSgp
OgorICAgICAgICAgICAgaWYgbm90IG5hbWUuaXNfc3ViZG9tYWluKHNlbGYub3JpZ2luKToKKyAg
ICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigibmFtZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIHN1
YmRvbWFpbiBvZiB0aGUgem9uZSBvcmlnaW4iKQorICAgICAgICAgICAgaWYgc2VsZi5yZWxhdGl2
aXplOgorICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlbGF0aXZpemUoc2VsZi5vcmlnaW4p
CisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToK
KyAgICAgICAga2V5ID0gc2VsZi5fdmFsaWRhdGVfbmFtZShrZXkpCisgICAgICAgIHJldHVybiBz
ZWxmLm5vZGVzW2tleV0KKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToK
KyAgICAgICAga2V5ID0gc2VsZi5fdmFsaWRhdGVfbmFtZShrZXkpCisgICAgICAgIHNlbGYubm9k
ZXNba2V5XSA9IHZhbHVlCisKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAg
ICAga2V5ID0gc2VsZi5fdmFsaWRhdGVfbmFtZShrZXkpCisgICAgICAgIGRlbCBzZWxmLm5vZGVz
W2tleV0KKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubm9k
ZXMuaXRlcmtleXMoKQorCisgICAgZGVmIGl0ZXJrZXlzKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5ub2Rlcy5pdGVya2V5cygpCisKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYubm9kZXMua2V5cygpCisKKyAgICBkZWYgaXRlcnZhbHVlcyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYubm9kZXMuaXRlcnZhbHVlcygpCisKKyAgICBkZWYgdmFsdWVzKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5ub2Rlcy52YWx1ZXMoKQorCisgICAgZGVmIGl0ZXJpdGVt
cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubm9kZXMuaXRlcml0ZW1zKCkKKworICAgIGRl
ZiBpdGVtcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubm9kZXMuaXRlbXMoKQorCisgICAg
ZGVmIGdldChzZWxmLCBrZXkpOgorICAgICAgICBrZXkgPSBzZWxmLl92YWxpZGF0ZV9uYW1lKGtl
eSkKKyAgICAgICAgcmV0dXJuIHNlbGYubm9kZXMuZ2V0KGtleSkKKworICAgIGRlZiBfX2NvbnRh
aW5zX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gb3RoZXIgaW4gc2VsZi5ub2Rlcwor
CisgICAgZGVmIGZpbmRfbm9kZShzZWxmLCBuYW1lLCBjcmVhdGU9RmFsc2UpOgorICAgICAgICAi
IiJGaW5kIGEgbm9kZSBpbiB0aGUgem9uZSwgcG9zc2libHkgY3JlYXRpbmcgaXQuCisKKyAgICAg
ICAgQHBhcmFtIG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBub2RlIHRvIGZpbmQKKyAgICAgICAgQHR5
cGUgbmFtZTogZG5zLm5hbWUuTmFtZSBvYmplY3Qgb3Igc3RyaW5nCisgICAgICAgIEBwYXJhbSBj
cmVhdGU6IHNob3VsZCB0aGUgbm9kZSBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgZXhpc3Q/Cisg
ICAgICAgIEB0eXBlIGNyZWF0ZTogYm9vbAorICAgICAgICBAcmFpc2VzIEtleUVycm9yOiB0aGUg
bmFtZSBpcyBub3Qga25vd24gYW5kIGNyZWF0ZSB3YXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAg
QHJ0eXBlOiBkbnMubm9kZS5Ob2RlIG9iamVjdAorICAgICAgICAiIiIKKworICAgICAgICBuYW1l
ID0gc2VsZi5fdmFsaWRhdGVfbmFtZShuYW1lKQorICAgICAgICBub2RlID0gc2VsZi5ub2Rlcy5n
ZXQobmFtZSkKKyAgICAgICAgaWYgbm9kZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgbm90IGNy
ZWF0ZToKKyAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcgorICAgICAgICAgICAgbm9kZSA9
IHNlbGYubm9kZV9mYWN0b3J5KCkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbbmFtZV0gPSBub2Rl
CisgICAgICAgIHJldHVybiBub2RlCisKKyAgICBkZWYgZ2V0X25vZGUoc2VsZiwgbmFtZSwgY3Jl
YXRlPUZhbHNlKToKKyAgICAgICAgIiIiR2V0IGEgbm9kZSBpbiB0aGUgem9uZSwgcG9zc2libHkg
Y3JlYXRpbmcgaXQuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgbGlrZSBMe2ZpbmRfbm9kZX0s
IGV4Y2VwdCBpdCByZXR1cm5zIE5vbmUgaW5zdGVhZAorICAgICAgICBvZiByYWlzaW5nIGFuIGV4
Y2VwdGlvbiBpZiB0aGUgbm9kZSBkb2VzIG5vdCBleGlzdCBhbmQgY3JlYXRpb24KKyAgICAgICAg
aGFzIG5vdCBiZWVuIHJlcXVlc3RlZC4KKworICAgICAgICBAcGFyYW0gbmFtZTogdGhlIG5hbWUg
b2YgdGhlIG5vZGUgdG8gZmluZAorICAgICAgICBAdHlwZSBuYW1lOiBkbnMubmFtZS5OYW1lIG9i
amVjdCBvciBzdHJpbmcKKyAgICAgICAgQHBhcmFtIGNyZWF0ZTogc2hvdWxkIHRoZSBub2RlIGJl
IGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBleGlzdD8KKyAgICAgICAgQHR5cGUgY3JlYXRlOiBib29s
CisgICAgICAgIEBydHlwZTogZG5zLm5vZGUuTm9kZSBvYmplY3Qgb3IgTm9uZQorICAgICAgICAi
IiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBub2RlID0gc2VsZi5maW5kX25vZGUobmFt
ZSwgY3JlYXRlKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBub2RlID0g
Tm9uZQorICAgICAgICByZXR1cm4gbm9kZQorCisgICAgZGVmIGRlbGV0ZV9ub2RlKHNlbGYsIG5h
bWUpOgorICAgICAgICAiIiJEZWxldGUgdGhlIHNwZWNpZmllZCBub2RlIGlmIGl0IGV4aXN0cy4K
KworICAgICAgICBJdCBpcyBub3QgYW4gZXJyb3IgaWYgdGhlIG5vZGUgZG9lcyBub3QgZXhpc3Qu
CisgICAgICAgICIiIgorCisgICAgICAgIG5hbWUgPSBzZWxmLl92YWxpZGF0ZV9uYW1lKG5hbWUp
CisgICAgICAgIGlmIHNlbGYubm9kZXMuaGFzX2tleShuYW1lKToKKyAgICAgICAgICAgIGRlbCBz
ZWxmLm5vZGVzW25hbWVdCisKKyAgICBkZWYgZmluZF9yZGF0YXNldChzZWxmLCBuYW1lLCByZHR5
cGUsIGNvdmVycz1kbnMucmRhdGF0eXBlLk5PTkUsCisgICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlPUZhbHNlKToKKyAgICAgICAgIiIiTG9vayBmb3IgcmRhdGEgd2l0aCB0aGUgc3BlY2lmaWVk
IG5hbWUgYW5kIHR5cGUgaW4gdGhlIHpvbmUsCisgICAgICAgIGFuZCByZXR1cm4gYW4gcmRhdGFz
ZXQgZW5jYXBzdWxhdGluZyBpdC4KKworICAgICAgICBUaGUgSXtuYW1lfSwgSXtyZHR5cGV9LCBh
bmQgSXtjb3ZlcnN9IHBhcmFtZXRlcnMgbWF5IGJlCisgICAgICAgIHN0cmluZ3MsIGluIHdoaWNo
IGNhc2UgdGhleSB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGVpciBwcm9wZXIKKyAgICAgICAgdHlw
ZS4KKworICAgICAgICBUaGUgcmRhdGFzZXQgcmV0dXJuZWQgaXMgbm90IGEgY29weTsgY2hhbmdl
cyB0byBpdCB3aWxsIGNoYW5nZQorICAgICAgICB0aGUgem9uZS4KKworICAgICAgICBLZXlFcnJv
ciBpcyByYWlzZWQgaWYgdGhlIG5hbWUgb3IgdHlwZSBhcmUgbm90IGZvdW5kLgorICAgICAgICBV
c2UgTHtnZXRfcmRhdGFzZXR9IGlmIHlvdSB3YW50IHRvIGhhdmUgTm9uZSByZXR1cm5lZCBpbnN0
ZWFkLgorCisgICAgICAgIEBwYXJhbSBuYW1lOiB0aGUgb3duZXIgbmFtZSB0byBsb29rIGZvcgor
ICAgICAgICBAdHlwZSBuYW1lOiBETlMubmFtZS5OYW1lIG9iamVjdCBvciBzdHJpbmcKKyAgICAg
ICAgQHBhcmFtIHJkdHlwZTogdGhlIHJkYXRhIHR5cGUgZGVzaXJlZAorICAgICAgICBAdHlwZSBy
ZHR5cGU6IGludCBvciBzdHJpbmcKKyAgICAgICAgQHBhcmFtIGNvdmVyczogdGhlIGNvdmVyZWQg
dHlwZSAoZGVmYXVsdHMgdG8gTm9uZSkKKyAgICAgICAgQHR5cGUgY292ZXJzOiBpbnQgb3Igc3Ry
aW5nCisgICAgICAgIEBwYXJhbSBjcmVhdGU6IHNob3VsZCB0aGUgbm9kZSBhbmQgcmRhdGFzZXQg
YmUgY3JlYXRlZCBpZiB0aGV5IGRvIG5vdAorICAgICAgICBleGlzdD8KKyAgICAgICAgQHR5cGUg
Y3JlYXRlOiBib29sCisgICAgICAgIEByYWlzZXMgS2V5RXJyb3I6IHRoZSBub2RlIG9yIHJkYXRh
IGNvdWxkIG5vdCBiZSBmb3VuZAorICAgICAgICBAcnR5cGU6IGRucy5ycnNldC5SUnNldCBvYmpl
Y3QKKyAgICAgICAgIiIiCisKKyAgICAgICAgbmFtZSA9IHNlbGYuX3ZhbGlkYXRlX25hbWUobmFt
ZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShyZHR5cGUsIHN0cik6CisgICAgICAgICAgICByZHR5
cGUgPSBkbnMucmRhdGF0eXBlLmZyb21fdGV4dChyZHR5cGUpCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoY292ZXJzLCBzdHIpOgorICAgICAgICAgICAgY292ZXJzID0gZG5zLnJkYXRhdHlwZS5mcm9t
X3RleHQoY292ZXJzKQorICAgICAgICBub2RlID0gc2VsZi5maW5kX25vZGUobmFtZSwgY3JlYXRl
KQorICAgICAgICByZXR1cm4gbm9kZS5maW5kX3JkYXRhc2V0KHNlbGYucmRjbGFzcywgcmR0eXBl
LCBjb3ZlcnMsIGNyZWF0ZSkKKworICAgIGRlZiBnZXRfcmRhdGFzZXQoc2VsZiwgbmFtZSwgcmR0
eXBlLCBjb3ZlcnM9ZG5zLnJkYXRhdHlwZS5OT05FLAorICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlPUZhbHNlKToKKyAgICAgICAgIiIiTG9vayBmb3IgcmRhdGEgd2l0aCB0aGUgc3BlY2lmaWVk
IG5hbWUgYW5kIHR5cGUgaW4gdGhlIHpvbmUsCisgICAgICAgIGFuZCByZXR1cm4gYW4gcmRhdGFz
ZXQgZW5jYXBzdWxhdGluZyBpdC4KKworICAgICAgICBUaGUgSXtuYW1lfSwgSXtyZHR5cGV9LCBh
bmQgSXtjb3ZlcnN9IHBhcmFtZXRlcnMgbWF5IGJlCisgICAgICAgIHN0cmluZ3MsIGluIHdoaWNo
IGNhc2UgdGhleSB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGVpciBwcm9wZXIKKyAgICAgICAgdHlw
ZS4KKworICAgICAgICBUaGUgcmRhdGFzZXQgcmV0dXJuZWQgaXMgbm90IGEgY29weTsgY2hhbmdl
cyB0byBpdCB3aWxsIGNoYW5nZQorICAgICAgICB0aGUgem9uZS4KKworICAgICAgICBOb25lIGlz
IHJldHVybmVkIGlmIHRoZSBuYW1lIG9yIHR5cGUgYXJlIG5vdCBmb3VuZC4KKyAgICAgICAgVXNl
IEx7ZmluZF9yZGF0YXNldH0gaWYgeW91IHdhbnQgdG8gaGF2ZSBLZXlFcnJvciByYWlzZWQgaW5z
dGVhZC4KKworICAgICAgICBAcGFyYW0gbmFtZTogdGhlIG93bmVyIG5hbWUgdG8gbG9vayBmb3IK
KyAgICAgICAgQHR5cGUgbmFtZTogRE5TLm5hbWUuTmFtZSBvYmplY3Qgb3Igc3RyaW5nCisgICAg
ICAgIEBwYXJhbSByZHR5cGU6IHRoZSByZGF0YSB0eXBlIGRlc2lyZWQKKyAgICAgICAgQHR5cGUg
cmR0eXBlOiBpbnQgb3Igc3RyaW5nCisgICAgICAgIEBwYXJhbSBjb3ZlcnM6IHRoZSBjb3ZlcmVk
IHR5cGUgKGRlZmF1bHRzIHRvIE5vbmUpCisgICAgICAgIEB0eXBlIGNvdmVyczogaW50IG9yIHN0
cmluZworICAgICAgICBAcGFyYW0gY3JlYXRlOiBzaG91bGQgdGhlIG5vZGUgYW5kIHJkYXRhc2V0
IGJlIGNyZWF0ZWQgaWYgdGhleSBkbyBub3QKKyAgICAgICAgZXhpc3Q/CisgICAgICAgIEB0eXBl
IGNyZWF0ZTogYm9vbAorICAgICAgICBAcnR5cGU6IGRucy5ycnNldC5SUnNldCBvYmplY3QKKyAg
ICAgICAgIiIiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmRhdGFzZXQgPSBzZWxmLmZp
bmRfcmRhdGFzZXQobmFtZSwgcmR0eXBlLCBjb3ZlcnMsIGNyZWF0ZSkKKyAgICAgICAgZXhjZXB0
IEtleUVycm9yOgorICAgICAgICAgICAgcmRhdGFzZXQgPSBOb25lCisgICAgICAgIHJldHVybiBy
ZGF0YXNldAorCisgICAgZGVmIGRlbGV0ZV9yZGF0YXNldChzZWxmLCBuYW1lLCByZHR5cGUsIGNv
dmVycz1kbnMucmRhdGF0eXBlLk5PTkUpOgorICAgICAgICAiIiJEZWxldGUgdGhlIHJkYXRhc2V0
IG1hdGNoaW5nIEl7cmR0eXBlfSBhbmQgSXtjb3ZlcnN9LCBpZiBpdAorICAgICAgICBleGlzdHMg
YXQgdGhlIG5vZGUgc3BlY2lmaWVkIGJ5IEl7bmFtZX0uCisKKyAgICAgICAgVGhlIEl7bmFtZX0s
IEl7cmR0eXBlfSwgYW5kIEl7Y292ZXJzfSBwYXJhbWV0ZXJzIG1heSBiZQorICAgICAgICBzdHJp
bmdzLCBpbiB3aGljaCBjYXNlIHRoZXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlaXIgcHJvcGVy
CisgICAgICAgIHR5cGUuCisKKyAgICAgICAgSXQgaXMgbm90IGFuIGVycm9yIGlmIHRoZSBub2Rl
IGRvZXMgbm90IGV4aXN0LCBvciBpZiB0aGVyZSBpcyBubworICAgICAgICBtYXRjaGluZyByZGF0
YXNldCBhdCB0aGUgbm9kZS4KKworICAgICAgICBJZiB0aGUgbm9kZSBoYXMgbm8gcmRhdGFzZXRz
IGFmdGVyIHRoZSBkZWxldGlvbiwgaXQgd2lsbCBpdHNlbGYKKyAgICAgICAgYmUgZGVsZXRlZC4K
KworICAgICAgICBAcGFyYW0gbmFtZTogdGhlIG93bmVyIG5hbWUgdG8gbG9vayBmb3IKKyAgICAg
ICAgQHR5cGUgbmFtZTogRE5TLm5hbWUuTmFtZSBvYmplY3Qgb3Igc3RyaW5nCisgICAgICAgIEBw
YXJhbSByZHR5cGU6IHRoZSByZGF0YSB0eXBlIGRlc2lyZWQKKyAgICAgICAgQHR5cGUgcmR0eXBl
OiBpbnQgb3Igc3RyaW5nCisgICAgICAgIEBwYXJhbSBjb3ZlcnM6IHRoZSBjb3ZlcmVkIHR5cGUg
KGRlZmF1bHRzIHRvIE5vbmUpCisgICAgICAgIEB0eXBlIGNvdmVyczogaW50IG9yIHN0cmluZwor
ICAgICAgICAiIiIKKworICAgICAgICBuYW1lID0gc2VsZi5fdmFsaWRhdGVfbmFtZShuYW1lKQor
ICAgICAgICBpZiBpc2luc3RhbmNlKHJkdHlwZSwgc3RyKToKKyAgICAgICAgICAgIHJkdHlwZSA9
IGRucy5yZGF0YXR5cGUuZnJvbV90ZXh0KHJkdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShj
b3ZlcnMsIHN0cik6CisgICAgICAgICAgICBjb3ZlcnMgPSBkbnMucmRhdGF0eXBlLmZyb21fdGV4
dChjb3ZlcnMpCisgICAgICAgIG5vZGUgPSBzZWxmLmdldF9ub2RlKG5hbWUpCisgICAgICAgIGlm
IG5vdCBub2RlIGlzIE5vbmU6CisgICAgICAgICAgICBub2RlLmRlbGV0ZV9yZGF0YXNldChzZWxm
LnJkY2xhc3MsIHJkdHlwZSwgY292ZXJzKQorICAgICAgICAgICAgaWYgbGVuKG5vZGUpID09IDA6
CisgICAgICAgICAgICAgICAgc2VsZi5kZWxldGVfbm9kZShuYW1lKQorCisgICAgZGVmIHJlcGxh
Y2VfcmRhdGFzZXQoc2VsZiwgbmFtZSwgcmVwbGFjZW1lbnQpOgorICAgICAgICAiIiJSZXBsYWNl
IGFuIHJkYXRhc2V0IGF0IG5hbWUuCisKKyAgICAgICAgSXQgaXMgbm90IGFuIGVycm9yIGlmIHRo
ZXJlIGlzIG5vIHJkYXRhc2V0IG1hdGNoaW5nIEl7cmVwbGFjZW1lbnR9LgorCisgICAgICAgIE93
bmVyc2hpcCBvZiB0aGUgSXtyZXBsYWNlbWVudH0gb2JqZWN0IGlzIHRyYW5zZmVycmVkIHRvIHRo
ZSB6b25lOworICAgICAgICBpbiBvdGhlciB3b3JkcywgdGhpcyBtZXRob2QgZG9lcyBub3Qgc3Rv
cmUgYSBjb3B5IG9mIEl7cmVwbGFjZW1lbnR9CisgICAgICAgIGF0IHRoZSBub2RlLCBpdCBzdG9y
ZXMgSXtyZXBsYWNlbWVudH0gaXRzZWxmLgorCisgICAgICAgIElmIHRoZSBJe25hbWV9IG5vZGUg
ZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQuCisKKyAgICAgICAgQHBhcmFtIG5hbWU6IHRo
ZSBvd25lciBuYW1lCisgICAgICAgIEB0eXBlIG5hbWU6IEROUy5uYW1lLk5hbWUgb2JqZWN0IG9y
IHN0cmluZworICAgICAgICBAcGFyYW0gcmVwbGFjZW1lbnQ6IHRoZSByZXBsYWNlbWVudCByZGF0
YXNldAorICAgICAgICBAdHlwZSByZXBsYWNlbWVudDogZG5zLnJkYXRhc2V0LlJkYXRhc2V0Cisg
ICAgICAgICIiIgorCisgICAgICAgIGlmIHJlcGxhY2VtZW50LnJkY2xhc3MgIT0gc2VsZi5yZGNs
YXNzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigncmVwbGFjZW1lbnQucmRjbGFzcyAh
PSB6b25lLnJkY2xhc3MnKQorICAgICAgICBub2RlID0gc2VsZi5maW5kX25vZGUobmFtZSwgVHJ1
ZSkKKyAgICAgICAgbm9kZS5yZXBsYWNlX3JkYXRhc2V0KHJlcGxhY2VtZW50KQorCisgICAgZGVm
IGZpbmRfcnJzZXQoc2VsZiwgbmFtZSwgcmR0eXBlLCBjb3ZlcnM9ZG5zLnJkYXRhdHlwZS5OT05F
KToKKyAgICAgICAgIiIiTG9vayBmb3IgcmRhdGEgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5k
IHR5cGUgaW4gdGhlIHpvbmUsCisgICAgICAgIGFuZCByZXR1cm4gYW4gUlJzZXQgZW5jYXBzdWxh
dGluZyBpdC4KKworICAgICAgICBUaGUgSXtuYW1lfSwgSXtyZHR5cGV9LCBhbmQgSXtjb3ZlcnN9
IHBhcmFtZXRlcnMgbWF5IGJlCisgICAgICAgIHN0cmluZ3MsIGluIHdoaWNoIGNhc2UgdGhleSB3
aWxsIGJlIGNvbnZlcnRlZCB0byB0aGVpciBwcm9wZXIKKyAgICAgICAgdHlwZS4KKworICAgICAg
ICBUaGlzIG1ldGhvZCBpcyBsZXNzIGVmZmljaWVudCB0aGFuIHRoZSBzaW1pbGFyCisgICAgICAg
IEx7ZmluZF9yZGF0YXNldH0gYmVjYXVzZSBpdCBjcmVhdGVzIGFuIFJSc2V0IGluc3RlYWQgb2YK
KyAgICAgICAgcmV0dXJuaW5nIHRoZSBtYXRjaGluZyByZGF0YXNldC4gIEl0IG1heSBiZSBtb3Jl
IGNvbnZlbmllbnQKKyAgICAgICAgZm9yIHNvbWUgdXNlcyBzaW5jZSBpdCByZXR1cm5zIGFuIG9i
amVjdCB3aGljaCBiaW5kcyB0aGUgb3duZXIKKyAgICAgICAgbmFtZSB0byB0aGUgcmRhdGEuCisK
KyAgICAgICAgVGhpcyBtZXRob2QgbWF5IG5vdCBiZSB1c2VkIHRvIGNyZWF0ZSBuZXcgbm9kZXMg
b3IgcmRhdGFzZXRzOworICAgICAgICB1c2UgTHtmaW5kX3JkYXRhc2V0fSBpbnN0ZWFkLgorCisg
ICAgICAgIEtleUVycm9yIGlzIHJhaXNlZCBpZiB0aGUgbmFtZSBvciB0eXBlIGFyZSBub3QgZm91
bmQuCisgICAgICAgIFVzZSBMe2dldF9ycnNldH0gaWYgeW91IHdhbnQgdG8gaGF2ZSBOb25lIHJl
dHVybmVkIGluc3RlYWQuCisKKyAgICAgICAgQHBhcmFtIG5hbWU6IHRoZSBvd25lciBuYW1lIHRv
IGxvb2sgZm9yCisgICAgICAgIEB0eXBlIG5hbWU6IEROUy5uYW1lLk5hbWUgb2JqZWN0IG9yIHN0
cmluZworICAgICAgICBAcGFyYW0gcmR0eXBlOiB0aGUgcmRhdGEgdHlwZSBkZXNpcmVkCisgICAg
ICAgIEB0eXBlIHJkdHlwZTogaW50IG9yIHN0cmluZworICAgICAgICBAcGFyYW0gY292ZXJzOiB0
aGUgY292ZXJlZCB0eXBlIChkZWZhdWx0cyB0byBOb25lKQorICAgICAgICBAdHlwZSBjb3ZlcnM6
IGludCBvciBzdHJpbmcKKyAgICAgICAgQHJhaXNlcyBLZXlFcnJvcjogdGhlIG5vZGUgb3IgcmRh
dGEgY291bGQgbm90IGJlIGZvdW5kCisgICAgICAgIEBydHlwZTogZG5zLnJyc2V0LlJSc2V0IG9i
amVjdAorICAgICAgICAiIiIKKworICAgICAgICBuYW1lID0gc2VsZi5fdmFsaWRhdGVfbmFtZShu
YW1lKQorICAgICAgICBpZiBpc2luc3RhbmNlKHJkdHlwZSwgc3RyKToKKyAgICAgICAgICAgIHJk
dHlwZSA9IGRucy5yZGF0YXR5cGUuZnJvbV90ZXh0KHJkdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShjb3ZlcnMsIHN0cik6CisgICAgICAgICAgICBjb3ZlcnMgPSBkbnMucmRhdGF0eXBlLmZy
b21fdGV4dChjb3ZlcnMpCisgICAgICAgIHJkYXRhc2V0ID0gc2VsZi5ub2Rlc1tuYW1lXS5maW5k
X3JkYXRhc2V0KHNlbGYucmRjbGFzcywgcmR0eXBlLCBjb3ZlcnMpCisgICAgICAgIHJyc2V0ID0g
ZG5zLnJyc2V0LlJSc2V0KG5hbWUsIHNlbGYucmRjbGFzcywgcmR0eXBlLCBjb3ZlcnMpCisgICAg
ICAgIHJyc2V0LnVwZGF0ZShyZGF0YXNldCkKKyAgICAgICAgcmV0dXJuIHJyc2V0CisKKyAgICBk
ZWYgZ2V0X3Jyc2V0KHNlbGYsIG5hbWUsIHJkdHlwZSwgY292ZXJzPWRucy5yZGF0YXR5cGUuTk9O
RSk6CisgICAgICAgICIiIkxvb2sgZm9yIHJkYXRhIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFu
ZCB0eXBlIGluIHRoZSB6b25lLAorICAgICAgICBhbmQgcmV0dXJuIGFuIFJSc2V0IGVuY2Fwc3Vs
YXRpbmcgaXQuCisKKyAgICAgICAgVGhlIEl7bmFtZX0sIEl7cmR0eXBlfSwgYW5kIEl7Y292ZXJz
fSBwYXJhbWV0ZXJzIG1heSBiZQorICAgICAgICBzdHJpbmdzLCBpbiB3aGljaCBjYXNlIHRoZXkg
d2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlaXIgcHJvcGVyCisgICAgICAgIHR5cGUuCisKKyAgICAg
ICAgVGhpcyBtZXRob2QgaXMgbGVzcyBlZmZpY2llbnQgdGhhbiB0aGUgc2ltaWxhciBMe2dldF9y
ZGF0YXNldH0KKyAgICAgICAgYmVjYXVzZSBpdCBjcmVhdGVzIGFuIFJSc2V0IGluc3RlYWQgb2Yg
cmV0dXJuaW5nIHRoZSBtYXRjaGluZworICAgICAgICByZGF0YXNldC4gIEl0IG1heSBiZSBtb3Jl
IGNvbnZlbmllbnQgZm9yIHNvbWUgdXNlcyBzaW5jZSBpdAorICAgICAgICByZXR1cm5zIGFuIG9i
amVjdCB3aGljaCBiaW5kcyB0aGUgb3duZXIgbmFtZSB0byB0aGUgcmRhdGEuCisKKyAgICAgICAg
VGhpcyBtZXRob2QgbWF5IG5vdCBiZSB1c2VkIHRvIGNyZWF0ZSBuZXcgbm9kZXMgb3IgcmRhdGFz
ZXRzOworICAgICAgICB1c2UgTHtmaW5kX3JkYXRhc2V0fSBpbnN0ZWFkLgorCisgICAgICAgIE5v
bmUgaXMgcmV0dXJuZWQgaWYgdGhlIG5hbWUgb3IgdHlwZSBhcmUgbm90IGZvdW5kLgorICAgICAg
ICBVc2UgTHtmaW5kX3Jyc2V0fSBpZiB5b3Ugd2FudCB0byBoYXZlIEtleUVycm9yIHJhaXNlZCBp
bnN0ZWFkLgorCisgICAgICAgIEBwYXJhbSBuYW1lOiB0aGUgb3duZXIgbmFtZSB0byBsb29rIGZv
cgorICAgICAgICBAdHlwZSBuYW1lOiBETlMubmFtZS5OYW1lIG9iamVjdCBvciBzdHJpbmcKKyAg
ICAgICAgQHBhcmFtIHJkdHlwZTogdGhlIHJkYXRhIHR5cGUgZGVzaXJlZAorICAgICAgICBAdHlw
ZSByZHR5cGU6IGludCBvciBzdHJpbmcKKyAgICAgICAgQHBhcmFtIGNvdmVyczogdGhlIGNvdmVy
ZWQgdHlwZSAoZGVmYXVsdHMgdG8gTm9uZSkKKyAgICAgICAgQHR5cGUgY292ZXJzOiBpbnQgb3Ig
c3RyaW5nCisgICAgICAgIEBydHlwZTogZG5zLnJyc2V0LlJSc2V0IG9iamVjdAorICAgICAgICAi
IiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBycnNldCA9IHNlbGYuZmluZF9ycnNldChu
YW1lLCByZHR5cGUsIGNvdmVycykKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAg
ICAgcnJzZXQgPSBOb25lCisgICAgICAgIHJldHVybiBycnNldAorCisgICAgZGVmIGl0ZXJhdGVf
cmRhdGFzZXRzKHNlbGYsIHJkdHlwZT1kbnMucmRhdGF0eXBlLkFOWSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgY292ZXJzPWRucy5yZGF0YXR5cGUuTk9ORSk6CisgICAgICAgICIiIlJldHVy
biBhIGdlbmVyYXRvciB3aGljaCB5aWVsZHMgKG5hbWUsIHJkYXRhc2V0KSB0dXBsZXMgZm9yCisg
ICAgICAgIGFsbCByZGF0YXNldHMgaW4gdGhlIHpvbmUgd2hpY2ggaGF2ZSB0aGUgc3BlY2lmaWVk
IEl7cmR0eXBlfQorICAgICAgICBhbmQgSXtjb3ZlcnN9LiAgSWYgSXtyZHR5cGV9IGlzIGRucy5y
ZGF0YXR5cGUuQU5ZLCB0aGUgZGVmYXVsdCwKKyAgICAgICAgdGhlbiBhbGwgcmRhdGFzZXRzIHdp
bGwgYmUgbWF0Y2hlZC4KKworICAgICAgICBAcGFyYW0gcmR0eXBlOiBpbnQgb3Igc3RyaW5nCisg
ICAgICAgIEB0eXBlIHJkdHlwZTogaW50IG9yIHN0cmluZworICAgICAgICBAcGFyYW0gY292ZXJz
OiB0aGUgY292ZXJlZCB0eXBlIChkZWZhdWx0cyB0byBOb25lKQorICAgICAgICBAdHlwZSBjb3Zl
cnM6IGludCBvciBzdHJpbmcKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShy
ZHR5cGUsIHN0cik6CisgICAgICAgICAgICByZHR5cGUgPSBkbnMucmRhdGF0eXBlLmZyb21fdGV4
dChyZHR5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoY292ZXJzLCBzdHIpOgorICAgICAgICAg
ICAgY292ZXJzID0gZG5zLnJkYXRhdHlwZS5mcm9tX3RleHQoY292ZXJzKQorICAgICAgICBmb3Ig
KG5hbWUsIG5vZGUpIGluIHNlbGYuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgcmRzIGlu
IG5vZGU6CisgICAgICAgICAgICAgICAgaWYgcmR0eXBlID09IGRucy5yZGF0YXR5cGUuQU5ZIG9y
IFwKKyAgICAgICAgICAgICAgICAgICAocmRzLnJkdHlwZSA9PSByZHR5cGUgYW5kIHJkcy5jb3Zl
cnMgPT0gY292ZXJzKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgKG5hbWUsIHJkcykKKwor
ICAgIGRlZiBpdGVyYXRlX3JkYXRhcyhzZWxmLCByZHR5cGU9ZG5zLnJkYXRhdHlwZS5BTlksCisg
ICAgICAgICAgICAgICAgICAgICAgIGNvdmVycz1kbnMucmRhdGF0eXBlLk5PTkUpOgorICAgICAg
ICAiIiJSZXR1cm4gYSBnZW5lcmF0b3Igd2hpY2ggeWllbGRzIChuYW1lLCB0dGwsIHJkYXRhKSB0
dXBsZXMgZm9yCisgICAgICAgIGFsbCByZGF0YXMgaW4gdGhlIHpvbmUgd2hpY2ggaGF2ZSB0aGUg
c3BlY2lmaWVkIEl7cmR0eXBlfQorICAgICAgICBhbmQgSXtjb3ZlcnN9LiAgSWYgSXtyZHR5cGV9
IGlzIGRucy5yZGF0YXR5cGUuQU5ZLCB0aGUgZGVmYXVsdCwKKyAgICAgICAgdGhlbiBhbGwgcmRh
dGFzIHdpbGwgYmUgbWF0Y2hlZC4KKworICAgICAgICBAcGFyYW0gcmR0eXBlOiBpbnQgb3Igc3Ry
aW5nCisgICAgICAgIEB0eXBlIHJkdHlwZTogaW50IG9yIHN0cmluZworICAgICAgICBAcGFyYW0g
Y292ZXJzOiB0aGUgY292ZXJlZCB0eXBlIChkZWZhdWx0cyB0byBOb25lKQorICAgICAgICBAdHlw
ZSBjb3ZlcnM6IGludCBvciBzdHJpbmcKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShyZHR5cGUsIHN0cik6CisgICAgICAgICAgICByZHR5cGUgPSBkbnMucmRhdGF0eXBlLmZy
b21fdGV4dChyZHR5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoY292ZXJzLCBzdHIpOgorICAg
ICAgICAgICAgY292ZXJzID0gZG5zLnJkYXRhdHlwZS5mcm9tX3RleHQoY292ZXJzKQorICAgICAg
ICBmb3IgKG5hbWUsIG5vZGUpIGluIHNlbGYuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3Ig
cmRzIGluIG5vZGU6CisgICAgICAgICAgICAgICAgaWYgcmR0eXBlID09IGRucy5yZGF0YXR5cGUu
QU5ZIG9yIFwKKyAgICAgICAgICAgICAgICAgICAocmRzLnJkdHlwZSA9PSByZHR5cGUgYW5kIHJk
cy5jb3ZlcnMgPT0gY292ZXJzKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHJkYXRhIGluIHJk
czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIChuYW1lLCByZHMudHRsLCByZGF0YSkK
KworICAgIGRlZiB0b19maWxlKHNlbGYsIGYsIHNvcnRlZD1UcnVlLCByZWxhdGl2aXplPVRydWUs
IG5sPU5vbmUpOgorICAgICAgICAiIiJXcml0ZSBhIHpvbmUgdG8gYSBmaWxlLgorCisgICAgICAg
IEBwYXJhbSBmOiBmaWxlIG9yIHN0cmluZy4gIElmIEl7Zn0gaXMgYSBzdHJpbmcsIGl0IGlzIHRy
ZWF0ZWQKKyAgICAgICAgYXMgdGhlIG5hbWUgb2YgYSBmaWxlIHRvIG9wZW4uCisgICAgICAgIEBw
YXJhbSBzb3J0ZWQ6IGlmIFRydWUsIHRoZSBmaWxlIHdpbGwgYmUgd3JpdHRlbiB3aXRoIHRoZQor
ICAgICAgICBuYW1lcyBzb3J0ZWQgaW4gRE5TU0VDIG9yZGVyIGZyb20gbGVhc3QgdG8gZ3JlYXRl
c3QuICBPdGhlcndpc2UKKyAgICAgICAgdGhlIG5hbWVzIHdpbGwgYmUgd3JpdHRlbiBpbiB3aGF0
ZXZlciBvcmRlciB0aGV5IGhhcHBlbiB0byBoYXZlCisgICAgICAgIGluIHRoZSB6b25lJ3MgZGlj
dGlvbmFyeS4KKyAgICAgICAgQHBhcmFtIHJlbGF0aXZpemU6IGlmIFRydWUsIGRvbWFpbiBuYW1l
cyBpbiB0aGUgb3V0cHV0IHdpbGwgYmUKKyAgICAgICAgcmVsYXRpdml6ZWQgdG8gdGhlIHpvbmUn
cyBvcmlnaW4gKGlmIHBvc3NpYmxlKS4KKyAgICAgICAgQHR5cGUgcmVsYXRpdml6ZTogYm9vbAor
ICAgICAgICBAcGFyYW0gbmw6IFRoZSBlbmQgb2YgbGluZSBzdHJpbmcuICBJZiBub3Qgc3BlY2lm
aWVkLCB0aGUKKyAgICAgICAgb3V0cHV0IHdpbGwgdXNlIHRoZSBwbGF0Zm9ybSdzIG5hdGl2ZSBl
bmQtb2YtbGluZSBtYXJrZXIgKGkuZS4KKyAgICAgICAgTEYgb24gUE9TSVgsIENSTEYgb24gV2lu
ZG93cywgQ1Igb24gTWFjaW50b3NoKS4KKyAgICAgICAgQHR5cGUgbmw6IHN0cmluZyBvciBOb25l
CisgICAgICAgICIiIgorCisgICAgICAgIGlmIHN5cy5oZXh2ZXJzaW9uID49IDB4MDIwMzAwMDA6
CisgICAgICAgICAgICAjIGFsbG93IFVuaWNvZGUgZmlsZW5hbWVzCisgICAgICAgICAgICBzdHJf
dHlwZSA9IGJhc2VzdHJpbmcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0cl90eXBlID0g
c3RyCisgICAgICAgIGlmIG5sIGlzIE5vbmU6CisgICAgICAgICAgICBvcHRzID0gJ3cnCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBvcHRzID0gJ3diJworICAgICAgICBpZiBpc2luc3RhbmNl
KGYsIHN0cl90eXBlKToKKyAgICAgICAgICAgIGYgPSBmaWxlKGYsIG9wdHMpCisgICAgICAgICAg
ICB3YW50X2Nsb3NlID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2FudF9jbG9z
ZSA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNvcnRlZDoKKyAgICAgICAg
ICAgICAgICBuYW1lcyA9IHNlbGYua2V5cygpCisgICAgICAgICAgICAgICAgbmFtZXMuc29ydCgp
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5hbWVzID0gc2VsZi5pdGVya2V5
cygpCisgICAgICAgICAgICBmb3IgbiBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICBsID0gc2Vs
ZltuXS50b190ZXh0KG4sIG9yaWdpbj1zZWxmLm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbGF0aXZpemU9cmVsYXRpdml6ZSkKKyAgICAgICAgICAgICAgICBp
ZiBubCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBwcmludCA+PiBmLCBsCisgICAgICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShsKQorICAgICAgICAg
ICAgICAgICAgICBmLndyaXRlKG5sKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYg
d2FudF9jbG9zZToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiBjaGVja19v
cmlnaW4oc2VsZik6CisgICAgICAgICIiIkRvIHNvbWUgc2ltcGxlIGNoZWNraW5nIG9mIHRoZSB6
b25lJ3Mgb3JpZ2luLgorCisgICAgICAgIEByYWlzZXMgZG5zLnpvbmUuTm9TT0E6IHRoZXJlIGlz
IG5vIFNPQSBSUgorICAgICAgICBAcmFpc2VzIGRucy56b25lLk5vTlM6IHRoZXJlIGlzIG5vIE5T
IFJSc2V0CisgICAgICAgIEByYWlzZXMgS2V5RXJyb3I6IHRoZXJlIGlzIG5vIG9yaWdpbiBub2Rl
CisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLnJlbGF0aXZpemU6CisgICAgICAgICAgICBu
YW1lID0gZG5zLm5hbWUuZW1wdHkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWUgPSBz
ZWxmLm9yaWdpbgorICAgICAgICBpZiBzZWxmLmdldF9yZGF0YXNldChuYW1lLCBkbnMucmRhdGF0
eXBlLlNPQSkgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIE5vU09BCisgICAgICAgIGlmIHNl
bGYuZ2V0X3JkYXRhc2V0KG5hbWUsIGRucy5yZGF0YXR5cGUuTlMpIGlzIE5vbmU6CisgICAgICAg
ICAgICByYWlzZSBOb05TCisKKworY2xhc3MgX01hc3RlclJlYWRlcihvYmplY3QpOgorICAgICIi
IlJlYWQgYSBETlMgbWFzdGVyIGZpbGUKKworICAgIEBpdmFyIHRvazogVGhlIHRva2VuaXplcgor
ICAgIEB0eXBlIHRvazogZG5zLnRva2VuaXplci5Ub2tlbml6ZXIgb2JqZWN0CisgICAgQGl2YXIg
dHRsOiBUaGUgZGVmYXVsdCBUVEwKKyAgICBAdHlwZSB0dGw6IGludAorICAgIEBpdmFyIGxhc3Rf
bmFtZTogVGhlIGxhc3QgbmFtZSByZWFkCisgICAgQHR5cGUgbGFzdF9uYW1lOiBkbnMubmFtZS5O
YW1lIG9iamVjdAorICAgIEBpdmFyIGN1cnJlbnRfb3JpZ2luOiBUaGUgY3VycmVudCBvcmlnaW4K
KyAgICBAdHlwZSBjdXJyZW50X29yaWdpbjogZG5zLm5hbWUuTmFtZSBvYmplY3QKKyAgICBAaXZh
ciByZWxhdGl2aXplOiBzaG91bGQgbmFtZXMgaW4gdGhlIHpvbmUgYmUgcmVsYXRpdml6ZWQ/Cisg
ICAgQHR5cGUgcmVsYXRpdml6ZTogYm9vbAorICAgIEBpdmFyIHpvbmU6IHRoZSB6b25lCisgICAg
QHR5cGUgem9uZTogZG5zLnpvbmUuWm9uZSBvYmplY3QKKyAgICBAaXZhciBzYXZlZF9zdGF0ZTog
c2F2ZWQgcmVhZGVyIHN0YXRlICh1c2VkIHdoZW4gcHJvY2Vzc2luZyAkSU5DTFVERSkKKyAgICBA
dHlwZSBzYXZlZF9zdGF0ZTogbGlzdCBvZiAodG9rZW5pemVyLCBjdXJyZW50X29yaWdpbiwgbGFz
dF9uYW1lLCBmaWxlKQorICAgIHR1cGxlcy4KKyAgICBAaXZhciBjdXJyZW50X2ZpbGU6IHRoZSBm
aWxlIG9iamVjdCBvZiB0aGUgJElOQ0xVRGVkIGZpbGUgYmVpbmcgcGFyc2VkCisgICAgKE5vbmUg
aWYgbm8gJElOQ0xVREUgaXMgYWN0aXZlKS4KKyAgICBAaXZhciBhbGxvd19pbmNsdWRlOiBpcyAk
SU5DTFVERSBhbGxvd2VkPworICAgIEB0eXBlIGFsbG93X2luY2x1ZGU6IGJvb2wKKyAgICBAaXZh
ciBjaGVja19vcmlnaW46IHNob3VsZCBzYW5pdHkgY2hlY2tzIG9mIHRoZSBvcmlnaW4gbm9kZSBi
ZSBkb25lPworICAgIFRoZSBkZWZhdWx0IGlzIFRydWUuCisgICAgQHR5cGUgY2hlY2tfb3JpZ2lu
OiBib29sCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG9rLCBvcmlnaW4sIHJk
Y2xhc3MsIHJlbGF0aXZpemUsIHpvbmVfZmFjdG9yeT1ab25lLAorICAgICAgICAgICAgICAgICBh
bGxvd19pbmNsdWRlPUZhbHNlLCBjaGVja19vcmlnaW49VHJ1ZSk6CisgICAgICAgIGlmIGlzaW5z
dGFuY2Uob3JpZ2luLCAoc3RyLCB1bmljb2RlKSk6CisgICAgICAgICAgICBvcmlnaW4gPSBkbnMu
bmFtZS5mcm9tX3RleHQob3JpZ2luKQorICAgICAgICBzZWxmLnRvayA9IHRvaworICAgICAgICBz
ZWxmLmN1cnJlbnRfb3JpZ2luID0gb3JpZ2luCisgICAgICAgIHNlbGYucmVsYXRpdml6ZSA9IHJl
bGF0aXZpemUKKyAgICAgICAgc2VsZi50dGwgPSAwCisgICAgICAgIHNlbGYubGFzdF9uYW1lID0g
Tm9uZQorICAgICAgICBzZWxmLnpvbmUgPSB6b25lX2ZhY3Rvcnkob3JpZ2luLCByZGNsYXNzLCBy
ZWxhdGl2aXplPXJlbGF0aXZpemUpCisgICAgICAgIHNlbGYuc2F2ZWRfc3RhdGUgPSBbXQorICAg
ICAgICBzZWxmLmN1cnJlbnRfZmlsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5hbGxvd19pbmNsdWRl
ID0gYWxsb3dfaW5jbHVkZQorICAgICAgICBzZWxmLmNoZWNrX29yaWdpbiA9IGNoZWNrX29yaWdp
bgorCisgICAgZGVmIF9lYXRfbGluZShzZWxmKToKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAg
ICAgIHRva2VuID0gc2VsZi50b2suZ2V0KCkKKyAgICAgICAgICAgIGlmIHRva2VuLmlzX2VvbF9v
cl9lb2YoKToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIF9ycl9saW5lKHNlbGYp
OgorICAgICAgICAiIiJQcm9jZXNzIG9uZSBsaW5lIGZyb20gYSBETlMgbWFzdGVyIGZpbGUuIiIi
CisgICAgICAgICMgTmFtZQorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfb3JpZ2luIGlzIE5vbmU6
CisgICAgICAgICAgICByYWlzZSBVbmtub3duT3JpZ2luCisgICAgICAgIHRva2VuID0gc2VsZi50
b2suZ2V0KHdhbnRfbGVhZGluZyA9IFRydWUpCisgICAgICAgIGlmIG5vdCB0b2tlbi5pc193aGl0
ZXNwYWNlKCk6CisgICAgICAgICAgICBzZWxmLmxhc3RfbmFtZSA9IGRucy5uYW1lLmZyb21fdGV4
dCh0b2tlbi52YWx1ZSwgc2VsZi5jdXJyZW50X29yaWdpbikKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHRva2VuID0gc2VsZi50b2suZ2V0KCkKKyAgICAgICAgICAgIGlmIHRva2VuLmlzX2Vv
bF9vcl9lb2YoKToKKyAgICAgICAgICAgICAgICAjIHRyZWF0IGxlYWRpbmcgV1MgZm9sbG93ZWQg
YnkgRU9ML0VPRiBhcyBpZiB0aGV5IHdlcmUgRU9ML0VPRi4KKyAgICAgICAgICAgICAgICByZXR1
cm4KKyAgICAgICAgICAgIHNlbGYudG9rLnVuZ2V0KHRva2VuKQorICAgICAgICBuYW1lID0gc2Vs
Zi5sYXN0X25hbWUKKyAgICAgICAgaWYgbm90IG5hbWUuaXNfc3ViZG9tYWluKHNlbGYuem9uZS5v
cmlnaW4pOgorICAgICAgICAgICAgc2VsZi5fZWF0X2xpbmUoKQorICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgIGlmIHNlbGYucmVsYXRpdml6ZToKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJl
bGF0aXZpemUoc2VsZi56b25lLm9yaWdpbikKKyAgICAgICAgdG9rZW4gPSBzZWxmLnRvay5nZXQo
KQorICAgICAgICBpZiBub3QgdG9rZW4uaXNfaWRlbnRpZmllcigpOgorICAgICAgICAgICAgcmFp
c2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcgorICAgICAgICAjIFRUTAorICAgICAgICB0cnk6
CisgICAgICAgICAgICB0dGwgPSBkbnMudHRsLmZyb21fdGV4dCh0b2tlbi52YWx1ZSkKKyAgICAg
ICAgICAgIHRva2VuID0gc2VsZi50b2suZ2V0KCkKKyAgICAgICAgICAgIGlmIG5vdCB0b2tlbi5p
c19pZGVudGlmaWVyKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50
YXhFcnJvcgorICAgICAgICBleGNlcHQgZG5zLnR0bC5CYWRUVEw6CisgICAgICAgICAgICB0dGwg
PSBzZWxmLnR0bAorICAgICAgICAjIENsYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJk
Y2xhc3MgPSBkbnMucmRhdGFjbGFzcy5mcm9tX3RleHQodG9rZW4udmFsdWUpCisgICAgICAgICAg
ICB0b2tlbiA9IHNlbGYudG9rLmdldCgpCisgICAgICAgICAgICBpZiBub3QgdG9rZW4uaXNfaWRl
bnRpZmllcigpOgorICAgICAgICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uU3ludGF4RXJy
b3IKKyAgICAgICAgZXhjZXB0IGRucy5leGNlcHRpb24uU3ludGF4RXJyb3I6CisgICAgICAgICAg
ICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yCisgICAgICAgIGV4Y2VwdDoKKyAgICAg
ICAgICAgIHJkY2xhc3MgPSBzZWxmLnpvbmUucmRjbGFzcworICAgICAgICBpZiByZGNsYXNzICE9
IHNlbGYuem9uZS5yZGNsYXNzOgorICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50
YXhFcnJvcigiUlIgY2xhc3MgaXMgbm90IHpvbmUncyBjbGFzcyIpCisgICAgICAgICMgVHlwZQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICByZHR5cGUgPSBkbnMucmRhdGF0eXBlLmZyb21fdGV4
dCh0b2tlbi52YWx1ZSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UgZG5zLmV4
Y2VwdGlvbi5TeW50YXhFcnJvcigidW5rbm93biByZGF0YXR5cGUgJyVzJyIgJSB0b2tlbi52YWx1
ZSkKKyAgICAgICAgbiA9IHNlbGYuem9uZS5ub2Rlcy5nZXQobmFtZSkKKyAgICAgICAgaWYgbiBp
cyBOb25lOgorICAgICAgICAgICAgbiA9IHNlbGYuem9uZS5ub2RlX2ZhY3RvcnkoKQorICAgICAg
ICAgICAgc2VsZi56b25lLm5vZGVzW25hbWVdID0gbgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICByZCA9IGRucy5yZGF0YS5mcm9tX3RleHQocmRjbGFzcywgcmR0eXBlLCBzZWxmLnRvaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfb3JpZ2luLCBG
YWxzZSkKKyAgICAgICAgZXhjZXB0IGRucy5leGNlcHRpb24uU3ludGF4RXJyb3I6CisgICAgICAg
ICAgICAjIENhdGNoIGFuZCByZXJhaXNlLgorICAgICAgICAgICAgKHR5LCB2YSkgPSBzeXMuZXhj
X2luZm8oKVs6Ml0KKyAgICAgICAgICAgIHJhaXNlIHZhCisgICAgICAgIGV4Y2VwdDoKKyAgICAg
ICAgICAgICMgQWxsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBpbiB0aGUgcHJvY2Vzc2luZyBvZiBy
ZGF0YQorICAgICAgICAgICAgIyBhcmUgdHJlYXRlZCBhcyBzeW50YXggZXJyb3JzLiAgVGhpcyBp
cyBub3Qgc3RyaWN0bHkKKyAgICAgICAgICAgICMgY29ycmVjdCwgYnV0IGl0IGlzIGNvcnJlY3Qg
YWxtb3N0IGFsbCBvZiB0aGUgdGltZS4KKyAgICAgICAgICAgICMgV2UgY29udmVydCB0aGVtIHRv
IHN5bnRheCBlcnJvcnMgc28gdGhhdCB3ZSBjYW4gZW1pdAorICAgICAgICAgICAgIyBoZWxwZnVs
IGZpbGVuYW1lOmxpbmUgaW5mby4KKyAgICAgICAgICAgICh0eSwgdmEpID0gc3lzLmV4Y19pbmZv
KClbOjJdCisgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKCJjYXVn
aHQgZXhjZXB0aW9uICVzOiAlcyIgJSAoc3RyKHR5KSwgc3RyKHZhKSkpCisKKyAgICAgICAgcmQu
Y2hvb3NlX3JlbGF0aXZpdHkoc2VsZi56b25lLm9yaWdpbiwgc2VsZi5yZWxhdGl2aXplKQorICAg
ICAgICBjb3ZlcnMgPSByZC5jb3ZlcnMoKQorICAgICAgICByZHMgPSBuLmZpbmRfcmRhdGFzZXQo
cmRjbGFzcywgcmR0eXBlLCBjb3ZlcnMsIFRydWUpCisgICAgICAgIHJkcy5hZGQocmQsIHR0bCkK
KworICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICAiIiJSZWFkIGEgRE5TIG1hc3RlciBmaWxl
IGFuZCBidWlsZCBhIHpvbmUgb2JqZWN0LgorCisgICAgICAgIEByYWlzZXMgZG5zLnpvbmUuTm9T
T0E6IE5vIFNPQSBSUiB3YXMgZm91bmQgYXQgdGhlIHpvbmUgb3JpZ2luCisgICAgICAgIEByYWlz
ZXMgZG5zLnpvbmUuTm9OUzogTm8gTlMgUlJzZXQgd2FzIGZvdW5kIGF0IHRoZSB6b25lIG9yaWdp
bgorICAgICAgICAiIiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSAxOgorICAg
ICAgICAgICAgICAgIHRva2VuID0gc2VsZi50b2suZ2V0KFRydWUsIFRydWUpLnVuZXNjYXBlKCkK
KyAgICAgICAgICAgICAgICBpZiB0b2tlbi5pc19lb2YoKToKKyAgICAgICAgICAgICAgICAgICAg
aWYgbm90IHNlbGYuY3VycmVudF9maWxlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLmN1cnJlbnRfZmlsZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihz
ZWxmLnNhdmVkX3N0YXRlKSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi50b2ss
CisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X29yaWdpbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLmxhc3RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLmN1cnJlbnRfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnR0bCkg
PSBzZWxmLnNhdmVkX3N0YXRlLnBvcCgtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiB0b2tl
bi5pc19lb2woKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAg
ICBlbGlmIHRva2VuLmlzX2NvbW1lbnQoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50b2su
Z2V0X2VvbCgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAg
ZWxpZiB0b2tlbi52YWx1ZVswXSA9PSAnJCc6CisgICAgICAgICAgICAgICAgICAgIHUgPSB0b2tl
bi52YWx1ZS51cHBlcigpCisgICAgICAgICAgICAgICAgICAgIGlmIHUgPT0gJyRUVEwnOgorICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnRvay5nZXQoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgbm90IHRva2VuLmlzX2lkZW50aWZpZXIoKToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKCJiYWQgJFRUTCIp
CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnR0bCA9IGRucy50dGwuZnJvbV90ZXh0KHRv
a2VuLnZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50b2suZ2V0X2VvbCgpCisg
ICAgICAgICAgICAgICAgICAgIGVsaWYgdSA9PSAnJE9SSUdJTic6CisgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLmN1cnJlbnRfb3JpZ2luID0gc2VsZi50b2suZ2V0X25hbWUoKQorICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi50b2suZ2V0X2VvbCgpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBzZWxmLnpvbmUub3JpZ2luIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi56b25lLm9yaWdpbiA9IHNlbGYuY3VycmVudF9vcmlnaW4KKyAgICAgICAgICAg
ICAgICAgICAgZWxpZiB1ID09ICckSU5DTFVERScgYW5kIHNlbGYuYWxsb3dfaW5jbHVkZToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi50b2suZ2V0KCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIG5vdCB0b2tlbi5pc19xdW90ZWRfc3RyaW5nKCk6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcigiYmFkIGZp
bGVuYW1lIGluICRJTkNMVURFIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0g
dG9rZW4udmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi50b2suZ2V0
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRva2VuLmlzX2lkZW50aWZpZXIoKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfb3JpZ2luID0gZG5zLm5hbWUuZnJvbV90ZXh0
KHRva2VuLnZhbHVlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfb3JpZ2luKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYudG9rLmdldF9lb2woKQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxpZiBub3QgdG9rZW4uaXNfZW9sX29yX2VvZigpOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJhaXNlIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3IoImJhZCBvcmlnaW4gaW4gJElOQ0xV
REUiKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXdfb3JpZ2luID0gc2VsZi5jdXJyZW50X29yaWdpbgorICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5zYXZlZF9zdGF0ZS5hcHBlbmQoKHNlbGYudG9rLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudF9vcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5s
YXN0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5jdXJyZW50X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi50dGwpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5j
dXJyZW50X2ZpbGUgPSBmaWxlKGZpbGVuYW1lLCAncicpCisgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLnRvayA9IGRucy50b2tlbml6ZXIuVG9rZW5pemVyKHNlbGYuY3VycmVudF9maWxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudF9vcmlnaW4g
PSBuZXdfb3JpZ2luCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
ICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKCJVbmtub3duIG1hc3RlciBm
aWxlIGRpcmVjdGl2ZSAnIiArIHUgKyAiJyIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
CisgICAgICAgICAgICAgICAgc2VsZi50b2sudW5nZXQodG9rZW4pCisgICAgICAgICAgICAgICAg
c2VsZi5fcnJfbGluZSgpCisgICAgICAgIGV4Y2VwdCBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9y
LCBkZXRhaWw6CisgICAgICAgICAgICAoZmlsZW5hbWUsIGxpbmVfbnVtYmVyKSA9IHNlbGYudG9r
LndoZXJlKCkKKyAgICAgICAgICAgIGlmIGRldGFpbCBpcyBOb25lOgorICAgICAgICAgICAgICAg
IGRldGFpbCA9ICJzeW50YXggZXJyb3IiCisgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9u
LlN5bnRheEVycm9yKCIlczolZDogJXMiICUgKGZpbGVuYW1lLCBsaW5lX251bWJlciwgZGV0YWls
KSkKKworICAgICAgICAjIE5vdyB0aGF0IHdlJ3JlIGRvbmUgcmVhZGluZywgZG8gc29tZSBiYXNp
YyBjaGVja2luZyBvZiB0aGUgem9uZS4KKyAgICAgICAgaWYgc2VsZi5jaGVja19vcmlnaW46Cisg
ICAgICAgICAgICBzZWxmLnpvbmUuY2hlY2tfb3JpZ2luKCkKKworZGVmIGZyb21fdGV4dCh0ZXh0
LCBvcmlnaW4gPSBOb25lLCByZGNsYXNzID0gZG5zLnJkYXRhY2xhc3MuSU4sCisgICAgICAgICAg
ICAgIHJlbGF0aXZpemUgPSBUcnVlLCB6b25lX2ZhY3Rvcnk9Wm9uZSwgZmlsZW5hbWU9Tm9uZSwK
KyAgICAgICAgICAgICAgYWxsb3dfaW5jbHVkZT1GYWxzZSwgY2hlY2tfb3JpZ2luPVRydWUpOgor
ICAgICIiIkJ1aWxkIGEgem9uZSBvYmplY3QgZnJvbSBhIG1hc3RlciBmaWxlIGZvcm1hdCBzdHJp
bmcuCisKKyAgICBAcGFyYW0gdGV4dDogdGhlIG1hc3RlciBmaWxlIGZvcm1hdCBpbnB1dAorICAg
IEB0eXBlIHRleHQ6IHN0cmluZy4KKyAgICBAcGFyYW0gb3JpZ2luOiBUaGUgb3JpZ2luIG9mIHRo
ZSB6b25lOyBpZiBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QKKyAgICAkT1JJR0lOIHN0YXRlbWVu
dCBpbiB0aGUgbWFzdGVyIGZpbGUgd2lsbCBkZXRlcm1pbmUgdGhlIG9yaWdpbiBvZiB0aGUKKyAg
ICB6b25lLgorICAgIEB0eXBlIG9yaWdpbjogZG5zLm5hbWUuTmFtZSBvYmplY3Qgb3Igc3RyaW5n
CisgICAgQHBhcmFtIHJkY2xhc3M6IFRoZSB6b25lJ3MgcmRhdGEgY2xhc3M7IHRoZSBkZWZhdWx0
IGlzIGNsYXNzIElOLgorICAgIEB0eXBlIHJkY2xhc3M6IGludAorICAgIEBwYXJhbSByZWxhdGl2
aXplOiBzaG91bGQgbmFtZXMgYmUgcmVsYXRpdml6ZWQ/ICBUaGUgZGVmYXVsdCBpcyBUcnVlCisg
ICAgQHR5cGUgcmVsYXRpdml6ZTogYm9vbAorICAgIEBwYXJhbSB6b25lX2ZhY3Rvcnk6IFRoZSB6
b25lIGZhY3RvcnkgdG8gdXNlCisgICAgQHR5cGUgem9uZV9mYWN0b3J5OiBmdW5jdGlvbiByZXR1
cm5pbmcgYSBab25lCisgICAgQHBhcmFtIGZpbGVuYW1lOiBUaGUgZmlsZW5hbWUgdG8gZW1pdCB3
aGVuIGRlc2NyaWJpbmcgd2hlcmUgYW4gZXJyb3IKKyAgICBvY2N1cnJlZDsgdGhlIGRlZmF1bHQg
aXMgJzxzdHJpbmc+Jy4KKyAgICBAdHlwZSBmaWxlbmFtZTogc3RyaW5nCisgICAgQHBhcmFtIGFs
bG93X2luY2x1ZGU6IGlzICRJTkNMVURFIGFsbG93ZWQ/CisgICAgQHR5cGUgYWxsb3dfaW5jbHVk
ZTogYm9vbAorICAgIEBwYXJhbSBjaGVja19vcmlnaW46IHNob3VsZCBzYW5pdHkgY2hlY2tzIG9m
IHRoZSBvcmlnaW4gbm9kZSBiZSBkb25lPworICAgIFRoZSBkZWZhdWx0IGlzIFRydWUuCisgICAg
QHR5cGUgY2hlY2tfb3JpZ2luOiBib29sCisgICAgQHJhaXNlcyBkbnMuem9uZS5Ob1NPQTogTm8g
U09BIFJSIHdhcyBmb3VuZCBhdCB0aGUgem9uZSBvcmlnaW4KKyAgICBAcmFpc2VzIGRucy56b25l
Lk5vTlM6IE5vIE5TIFJSc2V0IHdhcyBmb3VuZCBhdCB0aGUgem9uZSBvcmlnaW4KKyAgICBAcnR5
cGU6IGRucy56b25lLlpvbmUgb2JqZWN0CisgICAgIiIiCisKKyAgICAjICd0ZXh0JyBjYW4gYWxz
byBiZSBhIGZpbGUsIGJ1dCB3ZSBkb24ndCBwdWJsaXNoIHRoYXQgZmFjdAorICAgICMgc2luY2Ug
aXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuICBUaGUgb2ZmaWNpYWwgZmlsZQorICAgICMg
aW50ZXJmYWNlIGlzIGZyb21fZmlsZSgpLgorCisgICAgaWYgZmlsZW5hbWUgaXMgTm9uZToKKyAg
ICAgICAgZmlsZW5hbWUgPSAnPHN0cmluZz4nCisgICAgdG9rID0gZG5zLnRva2VuaXplci5Ub2tl
bml6ZXIodGV4dCwgZmlsZW5hbWUpCisgICAgcmVhZGVyID0gX01hc3RlclJlYWRlcih0b2ssIG9y
aWdpbiwgcmRjbGFzcywgcmVsYXRpdml6ZSwgem9uZV9mYWN0b3J5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWxsb3dfaW5jbHVkZT1hbGxvd19pbmNsdWRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hlY2tfb3JpZ2luPWNoZWNrX29yaWdpbikKKyAgICByZWFkZXIucmVhZCgp
CisgICAgcmV0dXJuIHJlYWRlci56b25lCisKK2RlZiBmcm9tX2ZpbGUoZiwgb3JpZ2luID0gTm9u
ZSwgcmRjbGFzcyA9IGRucy5yZGF0YWNsYXNzLklOLAorICAgICAgICAgICAgICByZWxhdGl2aXpl
ID0gVHJ1ZSwgem9uZV9mYWN0b3J5PVpvbmUsIGZpbGVuYW1lPU5vbmUsCisgICAgICAgICAgICAg
IGFsbG93X2luY2x1ZGU9VHJ1ZSwgY2hlY2tfb3JpZ2luPVRydWUpOgorICAgICIiIlJlYWQgYSBt
YXN0ZXIgZmlsZSBhbmQgYnVpbGQgYSB6b25lIG9iamVjdC4KKworICAgIEBwYXJhbSBmOiBmaWxl
IG9yIHN0cmluZy4gIElmIEl7Zn0gaXMgYSBzdHJpbmcsIGl0IGlzIHRyZWF0ZWQKKyAgICBhcyB0
aGUgbmFtZSBvZiBhIGZpbGUgdG8gb3Blbi4KKyAgICBAcGFyYW0gb3JpZ2luOiBUaGUgb3JpZ2lu
IG9mIHRoZSB6b25lOyBpZiBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QKKyAgICAkT1JJR0lOIHN0
YXRlbWVudCBpbiB0aGUgbWFzdGVyIGZpbGUgd2lsbCBkZXRlcm1pbmUgdGhlIG9yaWdpbiBvZiB0
aGUKKyAgICB6b25lLgorICAgIEB0eXBlIG9yaWdpbjogZG5zLm5hbWUuTmFtZSBvYmplY3Qgb3Ig
c3RyaW5nCisgICAgQHBhcmFtIHJkY2xhc3M6IFRoZSB6b25lJ3MgcmRhdGEgY2xhc3M7IHRoZSBk
ZWZhdWx0IGlzIGNsYXNzIElOLgorICAgIEB0eXBlIHJkY2xhc3M6IGludAorICAgIEBwYXJhbSBy
ZWxhdGl2aXplOiBzaG91bGQgbmFtZXMgYmUgcmVsYXRpdml6ZWQ/ICBUaGUgZGVmYXVsdCBpcyBU
cnVlCisgICAgQHR5cGUgcmVsYXRpdml6ZTogYm9vbAorICAgIEBwYXJhbSB6b25lX2ZhY3Rvcnk6
IFRoZSB6b25lIGZhY3RvcnkgdG8gdXNlCisgICAgQHR5cGUgem9uZV9mYWN0b3J5OiBmdW5jdGlv
biByZXR1cm5pbmcgYSBab25lCisgICAgQHBhcmFtIGZpbGVuYW1lOiBUaGUgZmlsZW5hbWUgdG8g
ZW1pdCB3aGVuIGRlc2NyaWJpbmcgd2hlcmUgYW4gZXJyb3IKKyAgICBvY2N1cnJlZDsgdGhlIGRl
ZmF1bHQgaXMgJzxmaWxlPicsIG9yIHRoZSB2YWx1ZSBvZiBJe2Z9IGlmIEl7Zn0gaXMgYQorICAg
IHN0cmluZy4KKyAgICBAdHlwZSBmaWxlbmFtZTogc3RyaW5nCisgICAgQHBhcmFtIGFsbG93X2lu
Y2x1ZGU6IGlzICRJTkNMVURFIGFsbG93ZWQ/CisgICAgQHR5cGUgYWxsb3dfaW5jbHVkZTogYm9v
bAorICAgIEBwYXJhbSBjaGVja19vcmlnaW46IHNob3VsZCBzYW5pdHkgY2hlY2tzIG9mIHRoZSBv
cmlnaW4gbm9kZSBiZSBkb25lPworICAgIFRoZSBkZWZhdWx0IGlzIFRydWUuCisgICAgQHR5cGUg
Y2hlY2tfb3JpZ2luOiBib29sCisgICAgQHJhaXNlcyBkbnMuem9uZS5Ob1NPQTogTm8gU09BIFJS
IHdhcyBmb3VuZCBhdCB0aGUgem9uZSBvcmlnaW4KKyAgICBAcmFpc2VzIGRucy56b25lLk5vTlM6
IE5vIE5TIFJSc2V0IHdhcyBmb3VuZCBhdCB0aGUgem9uZSBvcmlnaW4KKyAgICBAcnR5cGU6IGRu
cy56b25lLlpvbmUgb2JqZWN0CisgICAgIiIiCisKKyAgICBpZiBzeXMuaGV4dmVyc2lvbiA+PSAw
eDAyMDMwMDAwOgorICAgICAgICAjIGFsbG93IFVuaWNvZGUgZmlsZW5hbWVzOyB0dXJuIG9uIHVu
aXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQKKyAgICAgICAgc3RyX3R5cGUgPSBiYXNlc3RyaW5nCisg
ICAgICAgIG9wdHMgPSAnclUnCisgICAgZWxzZToKKyAgICAgICAgc3RyX3R5cGUgPSBzdHIKKyAg
ICAgICAgb3B0cyA9ICdyJworICAgIGlmIGlzaW5zdGFuY2UoZiwgc3RyX3R5cGUpOgorICAgICAg
ICBpZiBmaWxlbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBmCisgICAgICAg
IGYgPSBmaWxlKGYsIG9wdHMpCisgICAgICAgIHdhbnRfY2xvc2UgPSBUcnVlCisgICAgZWxzZToK
KyAgICAgICAgaWYgZmlsZW5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gJzxm
aWxlPicKKyAgICAgICAgd2FudF9jbG9zZSA9IEZhbHNlCisKKyAgICB0cnk6CisgICAgICAgIHog
PSBmcm9tX3RleHQoZiwgb3JpZ2luLCByZGNsYXNzLCByZWxhdGl2aXplLCB6b25lX2ZhY3Rvcnks
CisgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGFsbG93X2luY2x1ZGUsIGNoZWNrX29y
aWdpbikKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiB3YW50X2Nsb3NlOgorICAgICAgICAgICAg
Zi5jbG9zZSgpCisgICAgcmV0dXJuIHoKKworZGVmIGZyb21feGZyKHhmciwgem9uZV9mYWN0b3J5
PVpvbmUsIHJlbGF0aXZpemU9VHJ1ZSk6CisgICAgIiIiQ29udmVydCB0aGUgb3V0cHV0IG9mIGEg
em9uZSB0cmFuc2ZlciBnZW5lcmF0b3IgaW50byBhIHpvbmUgb2JqZWN0LgorCisgICAgQHBhcmFt
IHhmcjogVGhlIHhmciBnZW5lcmF0b3IKKyAgICBAdHlwZSB4ZnI6IGdlbmVyYXRvciBvZiBkbnMu
bWVzc2FnZS5NZXNzYWdlIG9iamVjdHMKKyAgICBAcGFyYW0gcmVsYXRpdml6ZTogc2hvdWxkIG5h
bWVzIGJlIHJlbGF0aXZpemVkPyAgVGhlIGRlZmF1bHQgaXMgVHJ1ZS4KKyAgICBJdCBpcyBlc3Nl
bnRpYWwgdGhhdCB0aGUgcmVsYXRpdml6ZSBzZXR0aW5nIG1hdGNoZXMgdGhlIG9uZSBzcGVjaWZp
ZWQKKyAgICB0byBkbnMucXVlcnkueGZyKCkuCisgICAgQHR5cGUgcmVsYXRpdml6ZTogYm9vbAor
ICAgIEByYWlzZXMgZG5zLnpvbmUuTm9TT0E6IE5vIFNPQSBSUiB3YXMgZm91bmQgYXQgdGhlIHpv
bmUgb3JpZ2luCisgICAgQHJhaXNlcyBkbnMuem9uZS5Ob05TOiBObyBOUyBSUnNldCB3YXMgZm91
bmQgYXQgdGhlIHpvbmUgb3JpZ2luCisgICAgQHJ0eXBlOiBkbnMuem9uZS5ab25lIG9iamVjdAor
ICAgICIiIgorCisgICAgeiA9IE5vbmUKKyAgICBmb3IgciBpbiB4ZnI6CisgICAgICAgIGlmIHog
aXMgTm9uZToKKyAgICAgICAgICAgIGlmIHJlbGF0aXZpemU6CisgICAgICAgICAgICAgICAgb3Jp
Z2luID0gci5vcmlnaW4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3JpZ2lu
ID0gci5hbnN3ZXJbMF0ubmFtZQorICAgICAgICAgICAgcmRjbGFzcyA9IHIuYW5zd2VyWzBdLnJk
Y2xhc3MKKyAgICAgICAgICAgIHogPSB6b25lX2ZhY3Rvcnkob3JpZ2luLCByZGNsYXNzLCByZWxh
dGl2aXplPXJlbGF0aXZpemUpCisgICAgICAgIGZvciBycnNldCBpbiByLmFuc3dlcjoKKyAgICAg
ICAgICAgIHpub2RlID0gei5ub2Rlcy5nZXQocnJzZXQubmFtZSkKKyAgICAgICAgICAgIGlmIG5v
dCB6bm9kZToKKyAgICAgICAgICAgICAgICB6bm9kZSA9IHoubm9kZV9mYWN0b3J5KCkKKyAgICAg
ICAgICAgICAgICB6Lm5vZGVzW3Jyc2V0Lm5hbWVdID0gem5vZGUKKyAgICAgICAgICAgIHpyZHMg
PSB6bm9kZS5maW5kX3JkYXRhc2V0KHJyc2V0LnJkY2xhc3MsIHJyc2V0LnJkdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJyc2V0LmNvdmVycywgVHJ1ZSkKKyAg
ICAgICAgICAgIHpyZHMudXBkYXRlX3R0bChycnNldC50dGwpCisgICAgICAgICAgICBmb3IgcmQg
aW4gcnJzZXQ6CisgICAgICAgICAgICAgICAgcmQuY2hvb3NlX3JlbGF0aXZpdHkoei5vcmlnaW4s
IHJlbGF0aXZpemUpCisgICAgICAgICAgICAgICAgenJkcy5hZGQocmQpCisgICAgei5jaGVja19v
cmlnaW4oKQorICAgIHJldHVybiB6CkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3Bh
cnR5L2Rucy9yZHR5cGVzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VS
ZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvX19pbml0X18ucHkJKHJldmlzaW9uIDApCisr
KyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL19faW5pdF9fLnB5
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1IEBACisjIENvcHlyaWdodCAoQykgMjAwMy0yMDA3
LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHks
IG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50
YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50
ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg
cGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZU
V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFO
VElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElF
RCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZF
TlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElO
RElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNP
RVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVS
IElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9V
UyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNF
IE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKyIiIkROUyByZGF0YSB0eXBlIGNs
YXNzZXMiIiIKKworX19hbGxfXyA9IFsKKyAgICAnQU5ZJywKKyAgICAnSU4nLAorICAgICdteGJh
c2UnLAorICAgICduc2Jhc2UnLAorICAgICdzaWdiYXNlJywKKyAgICAna2V5YmFzZScsCitdCklu
ZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL2RzYmFzZS5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5
cGVzL2RzYmFzZS5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRf
cGFydHkvZG5zL3JkdHlwZXMvZHNiYXNlLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyIEBA
CisjIENvcHlyaWdodCAoQykgMjAxMCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8g
dXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwor
IyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhl
cmVieSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIwor
IyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMg
QUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcg
QUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mu
IElOIE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwg
RElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VT
CisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklU
UywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RI
RVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ
VEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitpbXBvcnQgc3Ry
dWN0CisKK2ltcG9ydCBkbnMucmRhdGEKK2ltcG9ydCBkbnMucmRhdGF0eXBlCisKK2NsYXNzIERT
QmFzZShkbnMucmRhdGEuUmRhdGEpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIHJkYXRhIHRoYXQg
aXMgbGlrZSBhIERTIHJlY29yZAorCisgICAgQGl2YXIga2V5X3RhZzogdGhlIGtleSB0YWcKKyAg
ICBAdHlwZSBrZXlfdGFnOiBpbnQKKyAgICBAaXZhciBhbGdvcml0aG06IHRoZSBhbGdvcml0aG0K
KyAgICBAdHlwZSBhbGdvcml0aG06IGludAorICAgIEBpdmFyIGRpZ2VzdF90eXBlOiB0aGUgZGln
ZXN0IHR5cGUKKyAgICBAdHlwZSBkaWdlc3RfdHlwZTogaW50CisgICAgQGl2YXIgZGlnZXN0OiB0
aGUgZGlnZXN0CisgICAgQHR5cGUgZGlnZXN0OiBpbnQKKyAgICBAc2VlOiBkcmFmdC1pZXRmLWRu
c2V4dC1kZWxlZ2F0aW9uLXNpZ25lci0xNC50eHQiIiIKKworICAgIF9fc2xvdHNfXyA9IFsna2V5
X3RhZycsICdhbGdvcml0aG0nLCAnZGlnZXN0X3R5cGUnLCAnZGlnZXN0J10KKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCByZGNsYXNzLCByZHR5cGUsIGtleV90YWcsIGFsZ29yaXRobSwgZGlnZXN0
X3R5cGUsCisgICAgICAgICAgICAgICAgIGRpZ2VzdCk6CisgICAgICAgIHN1cGVyKERTQmFzZSwg
c2VsZikuX19pbml0X18ocmRjbGFzcywgcmR0eXBlKQorICAgICAgICBzZWxmLmtleV90YWcgPSBr
ZXlfdGFnCisgICAgICAgIHNlbGYuYWxnb3JpdGhtID0gYWxnb3JpdGhtCisgICAgICAgIHNlbGYu
ZGlnZXN0X3R5cGUgPSBkaWdlc3RfdHlwZQorICAgICAgICBzZWxmLmRpZ2VzdCA9IGRpZ2VzdAor
CisgICAgZGVmIHRvX3RleHQoc2VsZiwgb3JpZ2luPU5vbmUsIHJlbGF0aXZpemU9VHJ1ZSwgKipr
dyk6CisgICAgICAgIHJldHVybiAnJWQgJWQgJWQgJXMnICUgKHNlbGYua2V5X3RhZywgc2VsZi5h
bGdvcml0aG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlnZXN0X3R5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRucy5yZGF0YS5faGV4aWZ5KHNl
bGYuZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaHVua3NpemU9MTI4KSkKKworICAgIGRlZiBmcm9tX3RleHQoY2xzLCByZGNsYXNzLCBy
ZHR5cGUsIHRvaywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUpOgorICAgICAgICBr
ZXlfdGFnID0gdG9rLmdldF91aW50MTYoKQorICAgICAgICBhbGdvcml0aG0gPSB0b2suZ2V0X3Vp
bnQ4KCkKKyAgICAgICAgZGlnZXN0X3R5cGUgPSB0b2suZ2V0X3VpbnQ4KCkKKyAgICAgICAgY2h1
bmtzID0gW10KKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHQgPSB0b2suZ2V0KCkudW5l
c2NhcGUoKQorICAgICAgICAgICAgaWYgdC5pc19lb2xfb3JfZW9mKCk6CisgICAgICAgICAgICAg
ICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCB0LmlzX2lkZW50aWZpZXIoKToKKyAgICAgICAg
ICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yCisgICAgICAgICAgICBjaHVu
a3MuYXBwZW5kKHQudmFsdWUpCisgICAgICAgIGRpZ2VzdCA9ICcnLmpvaW4oY2h1bmtzKQorICAg
ICAgICBkaWdlc3QgPSBkaWdlc3QuZGVjb2RlKCdoZXhfY29kZWMnKQorICAgICAgICByZXR1cm4g
Y2xzKHJkY2xhc3MsIHJkdHlwZSwga2V5X3RhZywgYWxnb3JpdGhtLCBkaWdlc3RfdHlwZSwKKyAg
ICAgICAgICAgICAgICAgICBkaWdlc3QpCisKKyAgICBmcm9tX3RleHQgPSBjbGFzc21ldGhvZChm
cm9tX3RleHQpCisKKyAgICBkZWYgdG9fd2lyZShzZWxmLCBmaWxlLCBjb21wcmVzcyA9IE5vbmUs
IG9yaWdpbiA9IE5vbmUpOgorICAgICAgICBoZWFkZXIgPSBzdHJ1Y3QucGFjaygiIUhCQiIsIHNl
bGYua2V5X3RhZywgc2VsZi5hbGdvcml0aG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuZGlnZXN0X3R5cGUpCisgICAgICAgIGZpbGUud3JpdGUoaGVhZGVyKQorICAgICAgICBm
aWxlLndyaXRlKHNlbGYuZGlnZXN0KQorCisgICAgZGVmIGZyb21fd2lyZShjbHMsIHJkY2xhc3Ms
IHJkdHlwZSwgd2lyZSwgY3VycmVudCwgcmRsZW4sIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICBo
ZWFkZXIgPSBzdHJ1Y3QudW5wYWNrKCIhSEJCIiwgd2lyZVtjdXJyZW50IDogY3VycmVudCArIDRd
KQorICAgICAgICBjdXJyZW50ICs9IDQKKyAgICAgICAgcmRsZW4gLT0gNAorICAgICAgICBkaWdl
c3QgPSB3aXJlW2N1cnJlbnQgOiBjdXJyZW50ICsgcmRsZW5dCisgICAgICAgIHJldHVybiBjbHMo
cmRjbGFzcywgcmR0eXBlLCBoZWFkZXJbMF0sIGhlYWRlclsxXSwgaGVhZGVyWzJdLCBkaWdlc3Qp
CisKKyAgICBmcm9tX3dpcmUgPSBjbGFzc21ldGhvZChmcm9tX3dpcmUpCisKKyAgICBkZWYgX2Nt
cChzZWxmLCBvdGhlcik6CisgICAgICAgIGhzID0gc3RydWN0LnBhY2soIiFIQkIiLCBzZWxmLmtl
eV90YWcsIHNlbGYuYWxnb3JpdGhtLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGln
ZXN0X3R5cGUpCisgICAgICAgIGhvID0gc3RydWN0LnBhY2soIiFIQkIiLCBvdGhlci5rZXlfdGFn
LCBvdGhlci5hbGdvcml0aG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIuZGlnZXN0
X3R5cGUpCisgICAgICAgIHYgPSBjbXAoaHMsIGhvKQorICAgICAgICBpZiB2ID09IDA6CisgICAg
ICAgICAgICB2ID0gY21wKHNlbGYuZGlnZXN0LCBvdGhlci5kaWdlc3QpCisgICAgICAgIHJldHVy
biB2CkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL2tl
eWJhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9k
bnMvcmR0eXBlcy9rZXliYXNlLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxh
eS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9rZXliYXNlLnB5CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE0OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNywgMjAwOSwgMjAxMCBOb21pbnVt
LCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmli
dXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9z
ZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0
IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisj
IGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT
IElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQg
VE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUg
TElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00g
TE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0Yg
Q09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9V
VAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBU
SElTIFNPRlRXQVJFLgorCitpbXBvcnQgc3RydWN0CisKK2ltcG9ydCBkbnMuZXhjZXB0aW9uCitp
bXBvcnQgZG5zLmRuc3NlYworaW1wb3J0IGRucy5yZGF0YQorCitfZmxhZ3NfZnJvbV90ZXh0ID0g
eworICAgICdOT0NPTkYnOiAoMHg0MDAwLCAweEMwMDApLAorICAgICdOT0FVVEgnOiAoMHg4MDAw
LCAweEMwMDApLAorICAgICdOT0tFWSc6ICgweEMwMDAsIDB4QzAwMCksCisgICAgJ0ZMQUcyJzog
KDB4MjAwMCwgMHgyMDAwKSwKKyAgICAnRVhURU5EJzogKDB4MTAwMCwgMHgxMDAwKSwKKyAgICAn
RkxBRzQnOiAoMHgwODAwLCAweDA4MDApLAorICAgICdGTEFHNSc6ICgweDA0MDAsIDB4MDQwMCks
CisgICAgJ1VTRVInOiAoMHgwMDAwLCAweDAzMDApLAorICAgICdaT05FJzogKDB4MDEwMCwgMHgw
MzAwKSwKKyAgICAnSE9TVCc6ICgweDAyMDAsIDB4MDMwMCksCisgICAgJ05UWVAzJzogKDB4MDMw
MCwgMHgwMzAwKSwKKyAgICAnRkxBRzgnOiAoMHgwMDgwLCAweDAwODApLAorICAgICdGTEFHOSc6
ICgweDAwNDAsIDB4MDA0MCksCisgICAgJ0ZMQUcxMCc6ICgweDAwMjAsIDB4MDAyMCksCisgICAg
J0ZMQUcxMSc6ICgweDAwMTAsIDB4MDAxMCksCisgICAgJ1NJRzAnOiAoMHgwMDAwLCAweDAwMGYp
LAorICAgICdTSUcxJzogKDB4MDAwMSwgMHgwMDBmKSwKKyAgICAnU0lHMic6ICgweDAwMDIsIDB4
MDAwZiksCisgICAgJ1NJRzMnOiAoMHgwMDAzLCAweDAwMGYpLAorICAgICdTSUc0JzogKDB4MDAw
NCwgMHgwMDBmKSwKKyAgICAnU0lHNSc6ICgweDAwMDUsIDB4MDAwZiksCisgICAgJ1NJRzYnOiAo
MHgwMDA2LCAweDAwMGYpLAorICAgICdTSUc3JzogKDB4MDAwNywgMHgwMDBmKSwKKyAgICAnU0lH
OCc6ICgweDAwMDgsIDB4MDAwZiksCisgICAgJ1NJRzknOiAoMHgwMDA5LCAweDAwMGYpLAorICAg
ICdTSUcxMCc6ICgweDAwMGEsIDB4MDAwZiksCisgICAgJ1NJRzExJzogKDB4MDAwYiwgMHgwMDBm
KSwKKyAgICAnU0lHMTInOiAoMHgwMDBjLCAweDAwMGYpLAorICAgICdTSUcxMyc6ICgweDAwMGQs
IDB4MDAwZiksCisgICAgJ1NJRzE0JzogKDB4MDAwZSwgMHgwMDBmKSwKKyAgICAnU0lHMTUnOiAo
MHgwMDBmLCAweDAwMGYpLAorICAgIH0KKworX3Byb3RvY29sX2Zyb21fdGV4dCA9IHsKKyAgICAn
Tk9ORScgOiAwLAorICAgICdUTFMnIDogMSwKKyAgICAnRU1BSUwnIDogMiwKKyAgICAnRE5TU0VD
JyA6IDMsCisgICAgJ0lQU0VDJyA6IDQsCisgICAgJ0FMTCcgOiAyNTUsCisgICAgfQorCitjbGFz
cyBLRVlCYXNlKGRucy5yZGF0YS5SZGF0YSk6CisgICAgIiIiS0VZLWxpa2UgcmVjb3JkIGJhc2UK
KworICAgIEBpdmFyIGZsYWdzOiB0aGUga2V5IGZsYWdzCisgICAgQHR5cGUgZmxhZ3M6IGludAor
ICAgIEBpdmFyIHByb3RvY29sOiB0aGUgcHJvdG9jb2wgZm9yIHdoaWNoIHRoaXMga2V5IG1heSBi
ZSB1c2VkCisgICAgQHR5cGUgcHJvdG9jb2w6IGludAorICAgIEBpdmFyIGFsZ29yaXRobTogdGhl
IGFsZ29yaXRobSB1c2VkIGZvciB0aGUga2V5CisgICAgQHR5cGUgYWxnb3JpdGhtOiBpbnQKKyAg
ICBAaXZhciBrZXk6IHRoZSBwdWJsaWMga2V5CisgICAgQHR5cGUga2V5OiBzdHJpbmciIiIKKwor
ICAgIF9fc2xvdHNfXyA9IFsnZmxhZ3MnLCAncHJvdG9jb2wnLCAnYWxnb3JpdGhtJywgJ2tleSdd
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmRjbGFzcywgcmR0eXBlLCBmbGFncywgcHJvdG9j
b2wsIGFsZ29yaXRobSwga2V5KToKKyAgICAgICAgc3VwZXIoS0VZQmFzZSwgc2VsZikuX19pbml0
X18ocmRjbGFzcywgcmR0eXBlKQorICAgICAgICBzZWxmLmZsYWdzID0gZmxhZ3MKKyAgICAgICAg
c2VsZi5wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuYWxnb3JpdGhtID0gYWxnb3Jp
dGhtCisgICAgICAgIHNlbGYua2V5ID0ga2V5CisKKyAgICBkZWYgdG9fdGV4dChzZWxmLCBvcmln
aW49Tm9uZSwgcmVsYXRpdml6ZT1UcnVlLCAqKmt3KToKKyAgICAgICAgcmV0dXJuICclZCAlZCAl
ZCAlcycgJSAoc2VsZi5mbGFncywgc2VsZi5wcm90b2NvbCwgc2VsZi5hbGdvcml0aG0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRucy5yZGF0YS5fYmFzZTY0aWZ5KHNlbGYua2V5
KSkKKworICAgIGRlZiBmcm9tX3RleHQoY2xzLCByZGNsYXNzLCByZHR5cGUsIHRvaywgb3JpZ2lu
ID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUpOgorICAgICAgICBmbGFncyA9IHRvay5nZXRfc3Ry
aW5nKCkKKyAgICAgICAgaWYgZmxhZ3MuaXNkaWdpdCgpOgorICAgICAgICAgICAgZmxhZ3MgPSBp
bnQoZmxhZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmbGFnX25hbWVzID0gZmxhZ3Mu
c3BsaXQoJ3wnKQorICAgICAgICAgICAgZmxhZ3MgPSAwCisgICAgICAgICAgICBmb3IgZmxhZyBp
biBmbGFnX25hbWVzOgorICAgICAgICAgICAgICAgIHYgPSBfZmxhZ3NfZnJvbV90ZXh0LmdldChm
bGFnKQorICAgICAgICAgICAgICAgIGlmIHYgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAg
cmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcigndW5rbm93biBmbGFnICVzJyAlIGZsYWcp
CisgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfnZbMV0KKyAgICAgICAgICAgICAgICBmbGFncyB8
PSB2WzBdCisgICAgICAgIHByb3RvY29sID0gdG9rLmdldF9zdHJpbmcoKQorICAgICAgICBpZiBw
cm90b2NvbC5pc2RpZ2l0KCk6CisgICAgICAgICAgICBwcm90b2NvbCA9IGludChwcm90b2NvbCkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb3RvY29sID0gX3Byb3RvY29sX2Zyb21fdGV4
dC5nZXQocHJvdG9jb2wpCisgICAgICAgICAgICBpZiBwcm90b2NvbCBpcyBOb25lOgorICAgICAg
ICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3IoJ3Vua25vd24gcHJvdG9j
b2wgJXMnICUgcHJvdG9jb2wpCisKKyAgICAgICAgYWxnb3JpdGhtID0gZG5zLmRuc3NlYy5hbGdv
cml0aG1fZnJvbV90ZXh0KHRvay5nZXRfc3RyaW5nKCkpCisgICAgICAgIGNodW5rcyA9IFtdCisg
ICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0ID0gdG9rLmdldCgpLnVuZXNjYXBlKCkKKyAg
ICAgICAgICAgIGlmIHQuaXNfZW9sX29yX2VvZigpOgorICAgICAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgICAgICBpZiBub3QgdC5pc19pZGVudGlmaWVyKCk6CisgICAgICAgICAgICAgICAgcmFp
c2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcgorICAgICAgICAgICAgY2h1bmtzLmFwcGVuZCh0
LnZhbHVlKQorICAgICAgICBiNjQgPSAnJy5qb2luKGNodW5rcykKKyAgICAgICAga2V5ID0gYjY0
LmRlY29kZSgnYmFzZTY0X2NvZGVjJykKKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5
cGUsIGZsYWdzLCBwcm90b2NvbCwgYWxnb3JpdGhtLCBrZXkpCisKKyAgICBmcm9tX3RleHQgPSBj
bGFzc21ldGhvZChmcm9tX3RleHQpCisKKyAgICBkZWYgdG9fd2lyZShzZWxmLCBmaWxlLCBjb21w
cmVzcyA9IE5vbmUsIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICBoZWFkZXIgPSBzdHJ1Y3QucGFj
aygiIUhCQiIsIHNlbGYuZmxhZ3MsIHNlbGYucHJvdG9jb2wsIHNlbGYuYWxnb3JpdGhtKQorICAg
ICAgICBmaWxlLndyaXRlKGhlYWRlcikKKyAgICAgICAgZmlsZS53cml0ZShzZWxmLmtleSkKKwor
ICAgIGRlZiBmcm9tX3dpcmUoY2xzLCByZGNsYXNzLCByZHR5cGUsIHdpcmUsIGN1cnJlbnQsIHJk
bGVuLCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAgaWYgcmRsZW4gPCA0OgorICAgICAgICAgICAg
cmFpc2UgZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IKKyAgICAgICAgaGVhZGVyID0gc3RydWN0LnVu
cGFjaygnIUhCQicsIHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyA0XSkKKyAgICAgICAgY3VycmVu
dCArPSA0CisgICAgICAgIHJkbGVuIC09IDQKKyAgICAgICAga2V5ID0gd2lyZVtjdXJyZW50IDog
Y3VycmVudCArIHJkbGVuXQorICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlwZSwgaGVh
ZGVyWzBdLCBoZWFkZXJbMV0sIGhlYWRlclsyXSwKKyAgICAgICAgICAgICAgICAgICBrZXkpCisK
KyAgICBmcm9tX3dpcmUgPSBjbGFzc21ldGhvZChmcm9tX3dpcmUpCisKKyAgICBkZWYgX2NtcChz
ZWxmLCBvdGhlcik6CisgICAgICAgIGhzID0gc3RydWN0LnBhY2soIiFIQkIiLCBzZWxmLmZsYWdz
LCBzZWxmLnByb3RvY29sLCBzZWxmLmFsZ29yaXRobSkKKyAgICAgICAgaG8gPSBzdHJ1Y3QucGFj
aygiIUhCQiIsIG90aGVyLmZsYWdzLCBvdGhlci5wcm90b2NvbCwgb3RoZXIuYWxnb3JpdGhtKQor
ICAgICAgICB2ID0gY21wKGhzLCBobykKKyAgICAgICAgaWYgdiA9PSAwOgorICAgICAgICAgICAg
diA9IGNtcChzZWxmLmtleSwgb3RoZXIua2V5KQorICAgICAgICByZXR1cm4gdgpJbmRleDogVG9v
bHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9teGJhc2UucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9teGJh
c2UucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Ru
cy9yZHR5cGVzL214YmFzZS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDUgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJt
aXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJl
IGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0
IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJp
Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNv
cGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0g
RElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUg
SU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5Z
IFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBB
TlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRB
IE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdF
TkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09O
TkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKwor
IiIiTVgtbGlrZSBiYXNlIGNsYXNzZXMuIiIiCisKK2ltcG9ydCBjU3RyaW5nSU8KK2ltcG9ydCBz
dHJ1Y3QKKworaW1wb3J0IGRucy5leGNlcHRpb24KK2ltcG9ydCBkbnMucmRhdGEKK2ltcG9ydCBk
bnMubmFtZQorCitjbGFzcyBNWEJhc2UoZG5zLnJkYXRhLlJkYXRhKToKKyAgICAiIiJCYXNlIGNs
YXNzIGZvciByZGF0YSB0aGF0IGlzIGxpa2UgYW4gTVggcmVjb3JkLgorCisgICAgQGl2YXIgcHJl
ZmVyZW5jZTogdGhlIHByZWZlcmVuY2UgdmFsdWUKKyAgICBAdHlwZSBwcmVmZXJlbmNlOiBpbnQK
KyAgICBAaXZhciBleGNoYW5nZTogdGhlIGV4Y2hhbmdlIG5hbWUKKyAgICBAdHlwZSBleGNoYW5n
ZTogZG5zLm5hbWUuTmFtZSBvYmplY3QiIiIKKworICAgIF9fc2xvdHNfXyA9IFsncHJlZmVyZW5j
ZScsICdleGNoYW5nZSddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmRjbGFzcywgcmR0eXBl
LCBwcmVmZXJlbmNlLCBleGNoYW5nZSk6CisgICAgICAgIHN1cGVyKE1YQmFzZSwgc2VsZikuX19p
bml0X18ocmRjbGFzcywgcmR0eXBlKQorICAgICAgICBzZWxmLnByZWZlcmVuY2UgPSBwcmVmZXJl
bmNlCisgICAgICAgIHNlbGYuZXhjaGFuZ2UgPSBleGNoYW5nZQorCisgICAgZGVmIHRvX3RleHQo
c2VsZiwgb3JpZ2luPU5vbmUsIHJlbGF0aXZpemU9VHJ1ZSwgKiprdyk6CisgICAgICAgIGV4Y2hh
bmdlID0gc2VsZi5leGNoYW5nZS5jaG9vc2VfcmVsYXRpdml0eShvcmlnaW4sIHJlbGF0aXZpemUp
CisgICAgICAgIHJldHVybiAnJWQgJXMnICUgKHNlbGYucHJlZmVyZW5jZSwgZXhjaGFuZ2UpCisK
KyAgICBkZWYgZnJvbV90ZXh0KGNscywgcmRjbGFzcywgcmR0eXBlLCB0b2ssIG9yaWdpbiA9IE5v
bmUsIHJlbGF0aXZpemUgPSBUcnVlKToKKyAgICAgICAgcHJlZmVyZW5jZSA9IHRvay5nZXRfdWlu
dDE2KCkKKyAgICAgICAgZXhjaGFuZ2UgPSB0b2suZ2V0X25hbWUoKQorICAgICAgICBleGNoYW5n
ZSA9IGV4Y2hhbmdlLmNob29zZV9yZWxhdGl2aXR5KG9yaWdpbiwgcmVsYXRpdml6ZSkKKyAgICAg
ICAgdG9rLmdldF9lb2woKQorICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlwZSwgcHJl
ZmVyZW5jZSwgZXhjaGFuZ2UpCisKKyAgICBmcm9tX3RleHQgPSBjbGFzc21ldGhvZChmcm9tX3Rl
eHQpCisKKyAgICBkZWYgdG9fd2lyZShzZWxmLCBmaWxlLCBjb21wcmVzcyA9IE5vbmUsIG9yaWdp
biA9IE5vbmUpOgorICAgICAgICBwcmVmID0gc3RydWN0LnBhY2soIiFIIiwgc2VsZi5wcmVmZXJl
bmNlKQorICAgICAgICBmaWxlLndyaXRlKHByZWYpCisgICAgICAgIHNlbGYuZXhjaGFuZ2UudG9f
d2lyZShmaWxlLCBjb21wcmVzcywgb3JpZ2luKQorCisgICAgZGVmIHRvX2RpZ2VzdGFibGUoc2Vs
Ziwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzdHJ1Y3QucGFjaygiIUgiLCBzZWxm
LnByZWZlcmVuY2UpICsgXAorICAgICAgICAgICAgc2VsZi5leGNoYW5nZS50b19kaWdlc3RhYmxl
KG9yaWdpbikKKworICAgIGRlZiBmcm9tX3dpcmUoY2xzLCByZGNsYXNzLCByZHR5cGUsIHdpcmUs
IGN1cnJlbnQsIHJkbGVuLCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAgKHByZWZlcmVuY2UsICkg
PSBzdHJ1Y3QudW5wYWNrKCchSCcsIHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyAyXSkKKyAgICAg
ICAgY3VycmVudCArPSAyCisgICAgICAgIHJkbGVuIC09IDIKKyAgICAgICAgKGV4Y2hhbmdlLCBj
dXNlZCkgPSBkbnMubmFtZS5mcm9tX3dpcmUod2lyZVs6IGN1cnJlbnQgKyByZGxlbl0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQpCisgICAg
ICAgIGlmIGN1c2VkICE9IHJkbGVuOgorICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5G
b3JtRXJyb3IKKyAgICAgICAgaWYgbm90IG9yaWdpbiBpcyBOb25lOgorICAgICAgICAgICAgZXhj
aGFuZ2UgPSBleGNoYW5nZS5yZWxhdGl2aXplKG9yaWdpbikKKyAgICAgICAgcmV0dXJuIGNscyhy
ZGNsYXNzLCByZHR5cGUsIHByZWZlcmVuY2UsIGV4Y2hhbmdlKQorCisgICAgZnJvbV93aXJlID0g
Y2xhc3NtZXRob2QoZnJvbV93aXJlKQorCisgICAgZGVmIGNob29zZV9yZWxhdGl2aXR5KHNlbGYs
IG9yaWdpbiA9IE5vbmUsIHJlbGF0aXZpemUgPSBUcnVlKToKKyAgICAgICAgc2VsZi5leGNoYW5n
ZSA9IHNlbGYuZXhjaGFuZ2UuY2hvb3NlX3JlbGF0aXZpdHkob3JpZ2luLCByZWxhdGl2aXplKQor
CisgICAgZGVmIF9jbXAoc2VsZiwgb3RoZXIpOgorICAgICAgICBzcCA9IHN0cnVjdC5wYWNrKCIh
SCIsIHNlbGYucHJlZmVyZW5jZSkKKyAgICAgICAgb3AgPSBzdHJ1Y3QucGFjaygiIUgiLCBvdGhl
ci5wcmVmZXJlbmNlKQorICAgICAgICB2ID0gY21wKHNwLCBvcCkKKyAgICAgICAgaWYgdiA9PSAw
OgorICAgICAgICAgICAgdiA9IGNtcChzZWxmLmV4Y2hhbmdlLCBvdGhlci5leGNoYW5nZSkKKyAg
ICAgICAgcmV0dXJuIHYKKworY2xhc3MgVW5jb21wcmVzc2VkTVgoTVhCYXNlKToKKyAgICAiIiJC
YXNlIGNsYXNzIGZvciByZGF0YSB0aGF0IGlzIGxpa2UgYW4gTVggcmVjb3JkLCBidXQgd2hvc2Ug
bmFtZQorICAgIGlzIG5vdCBjb21wcmVzc2VkIHdoZW4gY29udmVydGVkIHRvIEROUyB3aXJlIGZv
cm1hdCwgYW5kIHdob3NlCisgICAgZGlnZXN0YWJsZSBmb3JtIGlzIG5vdCBkb3duY2FzZWQuIiIi
CisKKyAgICBkZWYgdG9fd2lyZShzZWxmLCBmaWxlLCBjb21wcmVzcyA9IE5vbmUsIG9yaWdpbiA9
IE5vbmUpOgorICAgICAgICBzdXBlcihVbmNvbXByZXNzZWRNWCwgc2VsZikudG9fd2lyZShmaWxl
LCBOb25lLCBvcmlnaW4pCisKKyAgICBkZWYgdG9fZGlnZXN0YWJsZShzZWxmLCBvcmlnaW4gPSBO
b25lKToKKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHNlbGYudG9f
d2lyZShmLCBOb25lLCBvcmlnaW4pCisgICAgICAgIHJldHVybiBmLmdldHZhbHVlKCkKKworY2xh
c3MgVW5jb21wcmVzc2VkRG93bmNhc2luZ01YKE1YQmFzZSk6CisgICAgIiIiQmFzZSBjbGFzcyBm
b3IgcmRhdGEgdGhhdCBpcyBsaWtlIGFuIE1YIHJlY29yZCwgYnV0IHdob3NlIG5hbWUKKyAgICBp
cyBub3QgY29tcHJlc3NlZCB3aGVuIGNvbnZlcnQgdG8gRE5TIHdpcmUgZm9ybWF0LiIiIgorCisg
ICAgZGVmIHRvX3dpcmUoc2VsZiwgZmlsZSwgY29tcHJlc3MgPSBOb25lLCBvcmlnaW4gPSBOb25l
KToKKyAgICAgICAgc3VwZXIoVW5jb21wcmVzc2VkRG93bmNhc2luZ01YLCBzZWxmKS50b193aXJl
KGZpbGUsIE5vbmUsIG9yaWdpbikKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvZG5zL3JkdHlwZXMvbnNiYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBs
YXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvbnNiYXNlLnB5CShyZXZpc2lvbiAwKQorKysgVG9v
bHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9uc2Jhc2UucHkJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIwMDks
IDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5
LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBm
b3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMg
cHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz
aW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElT
IFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisj
IFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFM
TCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1Qs
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJF
U1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4K
KyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElP
TiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVS
Rk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworIiIiTlMtbGlrZSBiYXNlIGNsYXNzZXMuIiIi
CisKK2ltcG9ydCBjU3RyaW5nSU8KKworaW1wb3J0IGRucy5leGNlcHRpb24KK2ltcG9ydCBkbnMu
cmRhdGEKK2ltcG9ydCBkbnMubmFtZQorCitjbGFzcyBOU0Jhc2UoZG5zLnJkYXRhLlJkYXRhKToK
KyAgICAiIiJCYXNlIGNsYXNzIGZvciByZGF0YSB0aGF0IGlzIGxpa2UgYW4gTlMgcmVjb3JkLgor
CisgICAgQGl2YXIgdGFyZ2V0OiB0aGUgdGFyZ2V0IG5hbWUgb2YgdGhlIHJkYXRhCisgICAgQHR5
cGUgdGFyZ2V0OiBkbnMubmFtZS5OYW1lIG9iamVjdCIiIgorCisgICAgX19zbG90c19fID0gWyd0
YXJnZXQnXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJkY2xhc3MsIHJkdHlwZSwgdGFyZ2V0
KToKKyAgICAgICAgc3VwZXIoTlNCYXNlLCBzZWxmKS5fX2luaXRfXyhyZGNsYXNzLCByZHR5cGUp
CisgICAgICAgIHNlbGYudGFyZ2V0ID0gdGFyZ2V0CisKKyAgICBkZWYgdG9fdGV4dChzZWxmLCBv
cmlnaW49Tm9uZSwgcmVsYXRpdml6ZT1UcnVlLCAqKmt3KToKKyAgICAgICAgdGFyZ2V0ID0gc2Vs
Zi50YXJnZXQuY2hvb3NlX3JlbGF0aXZpdHkob3JpZ2luLCByZWxhdGl2aXplKQorICAgICAgICBy
ZXR1cm4gc3RyKHRhcmdldCkKKworICAgIGRlZiBmcm9tX3RleHQoY2xzLCByZGNsYXNzLCByZHR5
cGUsIHRvaywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUpOgorICAgICAgICB0YXJn
ZXQgPSB0b2suZ2V0X25hbWUoKQorICAgICAgICB0YXJnZXQgPSB0YXJnZXQuY2hvb3NlX3JlbGF0
aXZpdHkob3JpZ2luLCByZWxhdGl2aXplKQorICAgICAgICB0b2suZ2V0X2VvbCgpCisgICAgICAg
IHJldHVybiBjbHMocmRjbGFzcywgcmR0eXBlLCB0YXJnZXQpCisKKyAgICBmcm9tX3RleHQgPSBj
bGFzc21ldGhvZChmcm9tX3RleHQpCisKKyAgICBkZWYgdG9fd2lyZShzZWxmLCBmaWxlLCBjb21w
cmVzcyA9IE5vbmUsIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICBzZWxmLnRhcmdldC50b193aXJl
KGZpbGUsIGNvbXByZXNzLCBvcmlnaW4pCisKKyAgICBkZWYgdG9fZGlnZXN0YWJsZShzZWxmLCBv
cmlnaW4gPSBOb25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0LnRvX2RpZ2VzdGFibGUo
b3JpZ2luKQorCisgICAgZGVmIGZyb21fd2lyZShjbHMsIHJkY2xhc3MsIHJkdHlwZSwgd2lyZSwg
Y3VycmVudCwgcmRsZW4sIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICAodGFyZ2V0LCBjdXNlZCkg
PSBkbnMubmFtZS5mcm9tX3dpcmUod2lyZVs6IGN1cnJlbnQgKyByZGxlbl0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50KQorICAgICAgICBpZiBj
dXNlZCAhPSByZGxlbjoKKyAgICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uRm9ybUVycm9y
CisgICAgICAgIGlmIG5vdCBvcmlnaW4gaXMgTm9uZToKKyAgICAgICAgICAgIHRhcmdldCA9IHRh
cmdldC5yZWxhdGl2aXplKG9yaWdpbikKKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5
cGUsIHRhcmdldCkKKworICAgIGZyb21fd2lyZSA9IGNsYXNzbWV0aG9kKGZyb21fd2lyZSkKKwor
ICAgIGRlZiBjaG9vc2VfcmVsYXRpdml0eShzZWxmLCBvcmlnaW4gPSBOb25lLCByZWxhdGl2aXpl
ID0gVHJ1ZSk6CisgICAgICAgIHNlbGYudGFyZ2V0ID0gc2VsZi50YXJnZXQuY2hvb3NlX3JlbGF0
aXZpdHkob3JpZ2luLCByZWxhdGl2aXplKQorCisgICAgZGVmIF9jbXAoc2VsZiwgb3RoZXIpOgor
ICAgICAgICByZXR1cm4gY21wKHNlbGYudGFyZ2V0LCBvdGhlci50YXJnZXQpCisKK2NsYXNzIFVu
Y29tcHJlc3NlZE5TKE5TQmFzZSk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgcmRhdGEgdGhhdCBp
cyBsaWtlIGFuIE5TIHJlY29yZCwgYnV0IHdob3NlIG5hbWUKKyAgICBpcyBub3QgY29tcHJlc3Nl
ZCB3aGVuIGNvbnZlcnQgdG8gRE5TIHdpcmUgZm9ybWF0LCBhbmQgd2hvc2UKKyAgICBkaWdlc3Rh
YmxlIGZvcm0gaXMgbm90IGRvd25jYXNlZC4iIiIKKworICAgIGRlZiB0b193aXJlKHNlbGYsIGZp
bGUsIGNvbXByZXNzID0gTm9uZSwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIHN1cGVyKFVuY29t
cHJlc3NlZE5TLCBzZWxmKS50b193aXJlKGZpbGUsIE5vbmUsIG9yaWdpbikKKworICAgIGRlZiB0
b19kaWdlc3RhYmxlKHNlbGYsIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICBmID0gY1N0cmluZ0lP
LlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi50b193aXJlKGYsIE5vbmUsIG9yaWdpbikKKyAgICAg
ICAgcmV0dXJuIGYuZ2V0dmFsdWUoKQpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9w
YXJ0eS9kbnMvcmR0eXBlcy9zaWdiYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VS
ZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvc2lnYmFzZS5weQkocmV2aXNpb24gMCkKKysr
IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvc2lnYmFzZS5weQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcs
IDIwMDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwg
bW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRh
dGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRl
ZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw
ZXJtaXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRX
QVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5U
SUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVO
VCBTSEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5E
SVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09F
VkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIg
SU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VT
IEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0Ug
T1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworaW1wb3J0IGNhbGVuZGFyCitpbXBv
cnQgc3RydWN0CitpbXBvcnQgdGltZQorCitpbXBvcnQgZG5zLmRuc3NlYworaW1wb3J0IGRucy5l
eGNlcHRpb24KK2ltcG9ydCBkbnMucmRhdGEKK2ltcG9ydCBkbnMucmRhdGF0eXBlCisKK2NsYXNz
IEJhZFNpZ1RpbWUoZG5zLmV4Y2VwdGlvbi5ETlNFeGNlcHRpb24pOgorICAgICIiIlJhaXNlZCB3
aGVuIGEgU0lHIG9yIFJSU0lHIFJSJ3MgdGltZSBjYW5ub3QgYmUgcGFyc2VkLiIiIgorICAgIHBh
c3MKKworZGVmIHNpZ3RpbWVfdG9fcG9zaXh0aW1lKHdoYXQpOgorICAgIGlmIGxlbih3aGF0KSAh
PSAxNDoKKyAgICAgICAgcmFpc2UgQmFkU2lnVGltZQorICAgIHllYXIgPSBpbnQod2hhdFswOjRd
KQorICAgIG1vbnRoID0gaW50KHdoYXRbNDo2XSkKKyAgICBkYXkgPSBpbnQod2hhdFs2OjhdKQor
ICAgIGhvdXIgPSBpbnQod2hhdFs4OjEwXSkKKyAgICBtaW51dGUgPSBpbnQod2hhdFsxMDoxMl0p
CisgICAgc2Vjb25kID0gaW50KHdoYXRbMTI6MTRdKQorICAgIHJldHVybiBjYWxlbmRhci50aW1l
Z20oKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIDAsIDApKQorCitkZWYgcG9zaXh0aW1lX3RvX3NpZ3RpbWUod2hh
dCk6CisgICAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoJyVZJW0lZCVIJU0lUycsIHRpbWUuZ210aW1l
KHdoYXQpKQorCitjbGFzcyBTSUdCYXNlKGRucy5yZGF0YS5SZGF0YSk6CisgICAgIiIiU0lHLWxp
a2UgcmVjb3JkIGJhc2UKKworICAgIEBpdmFyIHR5cGVfY292ZXJlZDogdGhlIHJkYXRhIHR5cGUg
dGhpcyBzaWduYXR1cmUgY292ZXJzCisgICAgQHR5cGUgdHlwZV9jb3ZlcmVkOiBpbnQKKyAgICBA
aXZhciBhbGdvcml0aG06IHRoZSBhbGdvcml0aG0gdXNlZCBmb3IgdGhlIHNpZworICAgIEB0eXBl
IGFsZ29yaXRobTogaW50CisgICAgQGl2YXIgbGFiZWxzOiBudW1iZXIgb2YgbGFiZWxzCisgICAg
QHR5cGUgbGFiZWxzOiBpbnQKKyAgICBAaXZhciBvcmlnaW5hbF90dGw6IHRoZSBvcmlnaW5hbCBU
VEwKKyAgICBAdHlwZSBvcmlnaW5hbF90dGw6IGxvbmcKKyAgICBAaXZhciBleHBpcmF0aW9uOiBz
aWduYXR1cmUgZXhwaXJhdGlvbiB0aW1lCisgICAgQHR5cGUgZXhwaXJhdGlvbjogbG9uZworICAg
IEBpdmFyIGluY2VwdGlvbjogc2lnbmF0dXJlIGluY2VwdGlvbiB0aW1lCisgICAgQHR5cGUgaW5j
ZXB0aW9uOiBsb25nCisgICAgQGl2YXIga2V5X3RhZzogdGhlIGtleSB0YWcKKyAgICBAdHlwZSBr
ZXlfdGFnOiBpbnQKKyAgICBAaXZhciBzaWduZXI6IHRoZSBzaWduZXIKKyAgICBAdHlwZSBzaWdu
ZXI6IGRucy5uYW1lLk5hbWUgb2JqZWN0CisgICAgQGl2YXIgc2lnbmF0dXJlOiB0aGUgc2lnbmF0
dXJlCisgICAgQHR5cGUgc2lnbmF0dXJlOiBzdHJpbmciIiIKKworICAgIF9fc2xvdHNfXyA9IFsn
dHlwZV9jb3ZlcmVkJywgJ2FsZ29yaXRobScsICdsYWJlbHMnLCAnb3JpZ2luYWxfdHRsJywKKyAg
ICAgICAgICAgICAgICAgJ2V4cGlyYXRpb24nLCAnaW5jZXB0aW9uJywgJ2tleV90YWcnLCAnc2ln
bmVyJywKKyAgICAgICAgICAgICAgICAgJ3NpZ25hdHVyZSddCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcmRjbGFzcywgcmR0eXBlLCB0eXBlX2NvdmVyZWQsIGFsZ29yaXRobSwgbGFiZWxzLAor
ICAgICAgICAgICAgICAgICBvcmlnaW5hbF90dGwsIGV4cGlyYXRpb24sIGluY2VwdGlvbiwga2V5
X3RhZywgc2lnbmVyLAorICAgICAgICAgICAgICAgICBzaWduYXR1cmUpOgorICAgICAgICBzdXBl
cihTSUdCYXNlLCBzZWxmKS5fX2luaXRfXyhyZGNsYXNzLCByZHR5cGUpCisgICAgICAgIHNlbGYu
dHlwZV9jb3ZlcmVkID0gdHlwZV9jb3ZlcmVkCisgICAgICAgIHNlbGYuYWxnb3JpdGhtID0gYWxn
b3JpdGhtCisgICAgICAgIHNlbGYubGFiZWxzID0gbGFiZWxzCisgICAgICAgIHNlbGYub3JpZ2lu
YWxfdHRsID0gb3JpZ2luYWxfdHRsCisgICAgICAgIHNlbGYuZXhwaXJhdGlvbiA9IGV4cGlyYXRp
b24KKyAgICAgICAgc2VsZi5pbmNlcHRpb24gPSBpbmNlcHRpb24KKyAgICAgICAgc2VsZi5rZXlf
dGFnID0ga2V5X3RhZworICAgICAgICBzZWxmLnNpZ25lciA9IHNpZ25lcgorICAgICAgICBzZWxm
LnNpZ25hdHVyZSA9IHNpZ25hdHVyZQorCisgICAgZGVmIGNvdmVycyhzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYudHlwZV9jb3ZlcmVkCisKKyAgICBkZWYgdG9fdGV4dChzZWxmLCBvcmlnaW49
Tm9uZSwgcmVsYXRpdml6ZT1UcnVlLCAqKmt3KToKKyAgICAgICAgcmV0dXJuICclcyAlZCAlZCAl
ZCAlcyAlcyAlZCAlcyAlcycgJSAoCisgICAgICAgICAgICBkbnMucmRhdGF0eXBlLnRvX3RleHQo
c2VsZi50eXBlX2NvdmVyZWQpLAorICAgICAgICAgICAgc2VsZi5hbGdvcml0aG0sCisgICAgICAg
ICAgICBzZWxmLmxhYmVscywKKyAgICAgICAgICAgIHNlbGYub3JpZ2luYWxfdHRsLAorICAgICAg
ICAgICAgcG9zaXh0aW1lX3RvX3NpZ3RpbWUoc2VsZi5leHBpcmF0aW9uKSwKKyAgICAgICAgICAg
IHBvc2l4dGltZV90b19zaWd0aW1lKHNlbGYuaW5jZXB0aW9uKSwKKyAgICAgICAgICAgIHNlbGYu
a2V5X3RhZywKKyAgICAgICAgICAgIHNlbGYuc2lnbmVyLAorICAgICAgICAgICAgZG5zLnJkYXRh
Ll9iYXNlNjRpZnkoc2VsZi5zaWduYXR1cmUpCisgICAgICAgICAgICApCisKKyAgICBkZWYgZnJv
bV90ZXh0KGNscywgcmRjbGFzcywgcmR0eXBlLCB0b2ssIG9yaWdpbiA9IE5vbmUsIHJlbGF0aXZp
emUgPSBUcnVlKToKKyAgICAgICAgdHlwZV9jb3ZlcmVkID0gZG5zLnJkYXRhdHlwZS5mcm9tX3Rl
eHQodG9rLmdldF9zdHJpbmcoKSkKKyAgICAgICAgYWxnb3JpdGhtID0gZG5zLmRuc3NlYy5hbGdv
cml0aG1fZnJvbV90ZXh0KHRvay5nZXRfc3RyaW5nKCkpCisgICAgICAgIGxhYmVscyA9IHRvay5n
ZXRfaW50KCkKKyAgICAgICAgb3JpZ2luYWxfdHRsID0gdG9rLmdldF90dGwoKQorICAgICAgICBl
eHBpcmF0aW9uID0gc2lndGltZV90b19wb3NpeHRpbWUodG9rLmdldF9zdHJpbmcoKSkKKyAgICAg
ICAgaW5jZXB0aW9uID0gc2lndGltZV90b19wb3NpeHRpbWUodG9rLmdldF9zdHJpbmcoKSkKKyAg
ICAgICAga2V5X3RhZyA9IHRvay5nZXRfaW50KCkKKyAgICAgICAgc2lnbmVyID0gdG9rLmdldF9u
YW1lKCkKKyAgICAgICAgc2lnbmVyID0gc2lnbmVyLmNob29zZV9yZWxhdGl2aXR5KG9yaWdpbiwg
cmVsYXRpdml6ZSkKKyAgICAgICAgY2h1bmtzID0gW10KKyAgICAgICAgd2hpbGUgMToKKyAgICAg
ICAgICAgIHQgPSB0b2suZ2V0KCkudW5lc2NhcGUoKQorICAgICAgICAgICAgaWYgdC5pc19lb2xf
b3JfZW9mKCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCB0Lmlz
X2lkZW50aWZpZXIoKToKKyAgICAgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRh
eEVycm9yCisgICAgICAgICAgICBjaHVua3MuYXBwZW5kKHQudmFsdWUpCisgICAgICAgIGI2NCA9
ICcnLmpvaW4oY2h1bmtzKQorICAgICAgICBzaWduYXR1cmUgPSBiNjQuZGVjb2RlKCdiYXNlNjRf
Y29kZWMnKQorICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlwZSwgdHlwZV9jb3ZlcmVk
LCBhbGdvcml0aG0sIGxhYmVscywKKyAgICAgICAgICAgICAgICAgICBvcmlnaW5hbF90dGwsIGV4
cGlyYXRpb24sIGluY2VwdGlvbiwga2V5X3RhZywgc2lnbmVyLAorICAgICAgICAgICAgICAgICAg
IHNpZ25hdHVyZSkKKworICAgIGZyb21fdGV4dCA9IGNsYXNzbWV0aG9kKGZyb21fdGV4dCkKKwor
ICAgIGRlZiB0b193aXJlKHNlbGYsIGZpbGUsIGNvbXByZXNzID0gTm9uZSwgb3JpZ2luID0gTm9u
ZSk6CisgICAgICAgIGhlYWRlciA9IHN0cnVjdC5wYWNrKCchSEJCSUlJSCcsIHNlbGYudHlwZV9j
b3ZlcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFsZ29yaXRobSwgc2Vs
Zi5sYWJlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3JpZ2luYWxfdHRs
LCBzZWxmLmV4cGlyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5j
ZXB0aW9uLCBzZWxmLmtleV90YWcpCisgICAgICAgIGZpbGUud3JpdGUoaGVhZGVyKQorICAgICAg
ICBzZWxmLnNpZ25lci50b193aXJlKGZpbGUsIE5vbmUsIG9yaWdpbikKKyAgICAgICAgZmlsZS53
cml0ZShzZWxmLnNpZ25hdHVyZSkKKworICAgIGRlZiBmcm9tX3dpcmUoY2xzLCByZGNsYXNzLCBy
ZHR5cGUsIHdpcmUsIGN1cnJlbnQsIHJkbGVuLCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAgaGVh
ZGVyID0gc3RydWN0LnVucGFjaygnIUhCQklJSUgnLCB3aXJlW2N1cnJlbnQgOiBjdXJyZW50ICsg
MThdKQorICAgICAgICBjdXJyZW50ICs9IDE4CisgICAgICAgIHJkbGVuIC09IDE4CisgICAgICAg
IChzaWduZXIsIGN1c2VkKSA9IGRucy5uYW1lLmZyb21fd2lyZSh3aXJlWzogY3VycmVudCArIHJk
bGVuXSwgY3VycmVudCkKKyAgICAgICAgY3VycmVudCArPSBjdXNlZAorICAgICAgICByZGxlbiAt
PSBjdXNlZAorICAgICAgICBpZiBub3Qgb3JpZ2luIGlzIE5vbmU6CisgICAgICAgICAgICBzaWdu
ZXIgPSBzaWduZXIucmVsYXRpdml6ZShvcmlnaW4pCisgICAgICAgIHNpZ25hdHVyZSA9IHdpcmVb
Y3VycmVudCA6IGN1cnJlbnQgKyByZGxlbl0KKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCBy
ZHR5cGUsIGhlYWRlclswXSwgaGVhZGVyWzFdLCBoZWFkZXJbMl0sCisgICAgICAgICAgICAgICAg
ICAgaGVhZGVyWzNdLCBoZWFkZXJbNF0sIGhlYWRlcls1XSwgaGVhZGVyWzZdLCBzaWduZXIsCisg
ICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlKQorCisgICAgZnJvbV93aXJlID0gY2xhc3NtZXRo
b2QoZnJvbV93aXJlKQorCisgICAgZGVmIGNob29zZV9yZWxhdGl2aXR5KHNlbGYsIG9yaWdpbiA9
IE5vbmUsIHJlbGF0aXZpemUgPSBUcnVlKToKKyAgICAgICAgc2VsZi5zaWduZXIgPSBzZWxmLnNp
Z25lci5jaG9vc2VfcmVsYXRpdml0eShvcmlnaW4sIHJlbGF0aXZpemUpCisKKyAgICBkZWYgX2Nt
cChzZWxmLCBvdGhlcik6CisgICAgICAgIGhzID0gc3RydWN0LnBhY2soJyFIQkJJSUlIJywgc2Vs
Zi50eXBlX2NvdmVyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hbGdvcml0aG0s
IHNlbGYubGFiZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3JpZ2luYWxfdHRs
LCBzZWxmLmV4cGlyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmNlcHRp
b24sIHNlbGYua2V5X3RhZykKKyAgICAgICAgaG8gPSBzdHJ1Y3QucGFjaygnIUhCQklJSUgnLCBv
dGhlci50eXBlX2NvdmVyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIuYWxnb3Jp
dGhtLCBvdGhlci5sYWJlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIub3JpZ2lu
YWxfdHRsLCBvdGhlci5leHBpcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVy
LmluY2VwdGlvbiwgb3RoZXIua2V5X3RhZykKKyAgICAgICAgdiA9IGNtcChocywgaG8pCisgICAg
ICAgIGlmIHYgPT0gMDoKKyAgICAgICAgICAgIHYgPSBjbXAoc2VsZi5zaWduZXIsIG90aGVyLnNp
Z25lcikKKyAgICAgICAgICAgIGlmIHYgPT0gMDoKKyAgICAgICAgICAgICAgICB2ID0gY21wKHNl
bGYuc2lnbmF0dXJlLCBvdGhlci5zaWduYXR1cmUpCisgICAgICAgIHJldHVybiB2CkluZGV4OiBU
b29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL3R4dGJhc2UucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy90
eHRiYXNlLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0
eS9kbnMvcmR0eXBlcy90eHRiYXNlLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg3IEBACisj
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSwgMjAxMCBOb21pbnVtLCBJbmMuCisjCisj
IFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29m
dHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdp
dGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBj
b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisjIGFwcGVhciBpbiBh
bGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTk9N
SU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZU
V0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUgTElBQkxFIEZPUgor
IyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0Us
IERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5F
R0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBPRiBPUiBJ
TiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJF
LgorCisiIiJUWFQtbGlrZSBiYXNlIGNsYXNzLiIiIgorCitpbXBvcnQgZG5zLmV4Y2VwdGlvbgor
aW1wb3J0IGRucy5yZGF0YQoraW1wb3J0IGRucy50b2tlbml6ZXIKKworY2xhc3MgVFhUQmFzZShk
bnMucmRhdGEuUmRhdGEpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIHJkYXRhIHRoYXQgaXMgbGlr
ZSBhIFRYVCByZWNvcmQKKworICAgIEBpdmFyIHN0cmluZ3M6IHRoZSB0ZXh0IHN0cmluZ3MKKyAg
ICBAdHlwZSBzdHJpbmdzOiBsaXN0IG9mIHN0cmluZworICAgIEBzZWU6IFJGQyAxMDM1IiIiCisK
KyAgICBfX3Nsb3RzX18gPSBbJ3N0cmluZ3MnXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJk
Y2xhc3MsIHJkdHlwZSwgc3RyaW5ncyk6CisgICAgICAgIHN1cGVyKFRYVEJhc2UsIHNlbGYpLl9f
aW5pdF9fKHJkY2xhc3MsIHJkdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzdHJpbmdzLCBz
dHIpOgorICAgICAgICAgICAgc3RyaW5ncyA9IFsgc3RyaW5ncyBdCisgICAgICAgIHNlbGYuc3Ry
aW5ncyA9IHN0cmluZ3NbOl0KKworICAgIGRlZiB0b190ZXh0KHNlbGYsIG9yaWdpbj1Ob25lLCBy
ZWxhdGl2aXplPVRydWUsICoqa3cpOgorICAgICAgICB0eHQgPSAnJworICAgICAgICBwcmVmaXgg
PSAnJworICAgICAgICBmb3IgcyBpbiBzZWxmLnN0cmluZ3M6CisgICAgICAgICAgICB0eHQgKz0g
JyVzIiVzIicgJSAocHJlZml4LCBkbnMucmRhdGEuX2VzY2FwaWZ5KHMpKQorICAgICAgICAgICAg
cHJlZml4ID0gJyAnCisgICAgICAgIHJldHVybiB0eHQKKworICAgIGRlZiBmcm9tX3RleHQoY2xz
LCByZGNsYXNzLCByZHR5cGUsIHRvaywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUp
OgorICAgICAgICBzdHJpbmdzID0gW10KKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRv
a2VuID0gdG9rLmdldCgpLnVuZXNjYXBlKCkKKyAgICAgICAgICAgIGlmIHRva2VuLmlzX2VvbF9v
cl9lb2YoKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbm90ICh0b2tl
bi5pc19xdW90ZWRfc3RyaW5nKCkgb3IgdG9rZW4uaXNfaWRlbnRpZmllcigpKToKKyAgICAgICAg
ICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKCJleHBlY3RlZCBhIHN0cmlu
ZyIpCisgICAgICAgICAgICBpZiBsZW4odG9rZW4udmFsdWUpID4gMjU1OgorICAgICAgICAgICAg
ICAgIHJhaXNlIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3IoInN0cmluZyB0b28gbG9uZyIpCisg
ICAgICAgICAgICBzdHJpbmdzLmFwcGVuZCh0b2tlbi52YWx1ZSkKKyAgICAgICAgaWYgbGVuKHN0
cmluZ3MpID09IDA6CisgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlVuZXhwZWN0ZWRF
bmQKKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5cGUsIHN0cmluZ3MpCisKKyAgICBm
cm9tX3RleHQgPSBjbGFzc21ldGhvZChmcm9tX3RleHQpCisKKyAgICBkZWYgdG9fd2lyZShzZWxm
LCBmaWxlLCBjb21wcmVzcyA9IE5vbmUsIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICBmb3IgcyBp
biBzZWxmLnN0cmluZ3M6CisgICAgICAgICAgICBsID0gbGVuKHMpCisgICAgICAgICAgICBhc3Nl
cnQgbCA8IDI1NgorICAgICAgICAgICAgYnl0ZSA9IGNocihsKQorICAgICAgICAgICAgZmlsZS53
cml0ZShieXRlKQorICAgICAgICAgICAgZmlsZS53cml0ZShzKQorCisgICAgZGVmIGZyb21fd2ly
ZShjbHMsIHJkY2xhc3MsIHJkdHlwZSwgd2lyZSwgY3VycmVudCwgcmRsZW4sIG9yaWdpbiA9IE5v
bmUpOgorICAgICAgICBzdHJpbmdzID0gW10KKyAgICAgICAgd2hpbGUgcmRsZW4gPiAwOgorICAg
ICAgICAgICAgbCA9IG9yZCh3aXJlW2N1cnJlbnRdKQorICAgICAgICAgICAgY3VycmVudCArPSAx
CisgICAgICAgICAgICByZGxlbiAtPSAxCisgICAgICAgICAgICBpZiBsID4gcmRsZW46CisgICAg
ICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IKKyAgICAgICAgICAgIHMg
PSB3aXJlW2N1cnJlbnQgOiBjdXJyZW50ICsgbF0KKyAgICAgICAgICAgIGN1cnJlbnQgKz0gbAor
ICAgICAgICAgICAgcmRsZW4gLT0gbAorICAgICAgICAgICAgc3RyaW5ncy5hcHBlbmQocykKKyAg
ICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5cGUsIHN0cmluZ3MpCisKKyAgICBmcm9tX3dp
cmUgPSBjbGFzc21ldGhvZChmcm9tX3dpcmUpCisKKyAgICBkZWYgX2NtcChzZWxmLCBvdGhlcik6
CisgICAgICAgIHJldHVybiBjbXAoc2VsZi5zdHJpbmdzLCBvdGhlci5zdHJpbmdzKQpJbmRleDog
VG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvQUZTREIucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBl
cy9BTlkvQUZTREIucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJk
X3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9BRlNEQi5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNywgMjAwOSwgMjAxMCBOb21pbnVtLCBJbmMu
CisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRo
aXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRo
IG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0IHRoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisjIGFwcGVh
ciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBB
TkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJ
UyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUgTElBQkxF
IEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBP
RiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJB
Q1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBP
RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNP
RlRXQVJFLgorCitpbXBvcnQgZG5zLnJkdHlwZXMubXhiYXNlCisKK2NsYXNzIEFGU0RCKGRucy5y
ZHR5cGVzLm14YmFzZS5VbmNvbXByZXNzZWREb3duY2FzaW5nTVgpOgorICAgICIiIkFGU0RCIHJl
Y29yZAorCisgICAgQGl2YXIgc3VidHlwZTogdGhlIHN1YnR5cGUgdmFsdWUKKyAgICBAdHlwZSBz
dWJ0eXBlOiBpbnQKKyAgICBAaXZhciBob3N0bmFtZTogdGhlIGhvc3RuYW1lIG5hbWUKKyAgICBA
dHlwZSBob3N0bmFtZTogZG5zLm5hbWUuTmFtZSBvYmplY3QiIiIKKworICAgICMgVXNlIHRoZSBw
cm9wZXJ0eSBtZWNoYW5pc20gdG8gbWFrZSAic3VidHlwZSIgYW4gYWxpYXMgZm9yIHRoZQorICAg
ICMgInByZWZlcmVuY2UiIGF0dHJpYnV0ZSwgYW5kICJob3N0bmFtZSIgYW4gYWxpYXMgZm9yIHRo
ZSAiZXhjaGFuZ2UiCisgICAgIyBhdHRyaWJ1dGUuCisgICAgIworICAgICMgVGhpcyBsZXRzIHVz
IGluaGVyaXQgdGhlIFVuY29tcHJlc3NlZE1YIGltcGxlbWVudGF0aW9uIGJ1dCBsZXRzCisgICAg
IyB0aGUgY2FsbGVyIHVzZSBhcHByb3ByaWF0ZSBhdHRyaWJ1dGUgbmFtZXMgZm9yIHRoZSByZGF0
YSB0eXBlLgorICAgICMKKyAgICAjIFdlIHByb2JhYmx5IGxvc2Ugc29tZSBwZXJmb3JtYW5jZSB2
cy4gYSBjdXQtYW5kLXBhc3RlCisgICAgIyBpbXBsZW1lbnRhdGlvbiwgYnV0IHRoaXMgd2F5IHdl
IGRvbid0IGNvcHkgY29kZSwgYW5kIHRoYXQncworICAgICMgZ29vZC4KKworICAgIGRlZiBnZXRf
c3VidHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucHJlZmVyZW5jZQorCisgICAgZGVm
IHNldF9zdWJ0eXBlKHNlbGYsIHN1YnR5cGUpOgorICAgICAgICBzZWxmLnByZWZlcmVuY2UgPSBz
dWJ0eXBlCisKKyAgICBzdWJ0eXBlID0gcHJvcGVydHkoZ2V0X3N1YnR5cGUsIHNldF9zdWJ0eXBl
KQorCisgICAgZGVmIGdldF9ob3N0bmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhj
aGFuZ2UKKworICAgIGRlZiBzZXRfaG9zdG5hbWUoc2VsZiwgaG9zdG5hbWUpOgorICAgICAgICBz
ZWxmLmV4Y2hhbmdlID0gaG9zdG5hbWUKKworICAgIGhvc3RuYW1lID0gcHJvcGVydHkoZ2V0X2hv
c3RuYW1lLCBzZXRfaG9zdG5hbWUpCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3Bh
cnR5L2Rucy9yZHR5cGVzL0FOWS9DRVJULnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VS
ZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0NFUlQucHkJKHJldmlzaW9uIDApCisr
KyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9DRVJULnB5
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAw
NywgMjAwOSwgMjAxMCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5
LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVu
dGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFu
dGVkLAorIyBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz
IHBlcm1pc3Npb24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09G
VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJB
TlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJ
RUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVW
RU5UIFNIQUxMIE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJ
TkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRT
T0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhF
UiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElP
VVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVT
RSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitpbXBvcnQgY1N0cmluZ0lPCitp
bXBvcnQgc3RydWN0CisKK2ltcG9ydCBkbnMuZXhjZXB0aW9uCitpbXBvcnQgZG5zLmRuc3NlYwor
aW1wb3J0IGRucy5yZGF0YQoraW1wb3J0IGRucy50b2tlbml6ZXIKKworX2N0eXBlX2J5X3ZhbHVl
ID0geworICAgIDEgOiAnUEtJWCcsCisgICAgMiA6ICdTUEtJJywKKyAgICAzIDogJ1BHUCcsCisg
ICAgMjUzIDogJ1VSSScsCisgICAgMjU0IDogJ09JRCcsCisgICAgfQorCitfY3R5cGVfYnlfbmFt
ZSA9IHsKKyAgICAnUEtJWCcgOiAxLAorICAgICdTUEtJJyA6IDIsCisgICAgJ1BHUCcgOiAzLAor
ICAgICdVUkknIDogMjUzLAorICAgICdPSUQnIDogMjU0LAorICAgIH0KKworZGVmIF9jdHlwZV9m
cm9tX3RleHQod2hhdCk6CisgICAgdiA9IF9jdHlwZV9ieV9uYW1lLmdldCh3aGF0KQorICAgIGlm
IG5vdCB2IGlzIE5vbmU6CisgICAgICAgIHJldHVybiB2CisgICAgcmV0dXJuIGludCh3aGF0KQor
CitkZWYgX2N0eXBlX3RvX3RleHQod2hhdCk6CisgICAgdiA9IF9jdHlwZV9ieV92YWx1ZS5nZXQo
d2hhdCkKKyAgICBpZiBub3QgdiBpcyBOb25lOgorICAgICAgICByZXR1cm4gdgorICAgIHJldHVy
biBzdHIod2hhdCkKKworY2xhc3MgQ0VSVChkbnMucmRhdGEuUmRhdGEpOgorICAgICIiIkNFUlQg
cmVjb3JkCisKKyAgICBAaXZhciBjZXJ0aWZpY2F0ZV90eXBlOiBjZXJ0aWZpY2F0ZSB0eXBlCisg
ICAgQHR5cGUgY2VydGlmaWNhdGVfdHlwZTogaW50CisgICAgQGl2YXIga2V5X3RhZzoga2V5IHRh
ZworICAgIEB0eXBlIGtleV90YWc6IGludAorICAgIEBpdmFyIGFsZ29yaXRobTogYWxnb3JpdGht
CisgICAgQHR5cGUgYWxnb3JpdGhtOiBpbnQKKyAgICBAaXZhciBjZXJ0aWZpY2F0ZTogdGhlIGNl
cnRpZmljYXRlIG9yIENSTAorICAgIEB0eXBlIGNlcnRpZmljYXRlOiBzdHJpbmcKKyAgICBAc2Vl
OiBSRkMgMjUzOCIiIgorCisgICAgX19zbG90c19fID0gWydjZXJ0aWZpY2F0ZV90eXBlJywgJ2tl
eV90YWcnLCAnYWxnb3JpdGhtJywgJ2NlcnRpZmljYXRlJ10KKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCByZGNsYXNzLCByZHR5cGUsIGNlcnRpZmljYXRlX3R5cGUsIGtleV90YWcsIGFsZ29yaXRo
bSwKKyAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUpOgorICAgICAgICBzdXBlcihDRVJULCBz
ZWxmKS5fX2luaXRfXyhyZGNsYXNzLCByZHR5cGUpCisgICAgICAgIHNlbGYuY2VydGlmaWNhdGVf
dHlwZSA9IGNlcnRpZmljYXRlX3R5cGUKKyAgICAgICAgc2VsZi5rZXlfdGFnID0ga2V5X3RhZwor
ICAgICAgICBzZWxmLmFsZ29yaXRobSA9IGFsZ29yaXRobQorICAgICAgICBzZWxmLmNlcnRpZmlj
YXRlID0gY2VydGlmaWNhdGUKKworICAgIGRlZiB0b190ZXh0KHNlbGYsIG9yaWdpbj1Ob25lLCBy
ZWxhdGl2aXplPVRydWUsICoqa3cpOgorICAgICAgICBjZXJ0aWZpY2F0ZV90eXBlID0gX2N0eXBl
X3RvX3RleHQoc2VsZi5jZXJ0aWZpY2F0ZV90eXBlKQorICAgICAgICByZXR1cm4gIiVzICVkICVz
ICVzIiAlIChjZXJ0aWZpY2F0ZV90eXBlLCBzZWxmLmtleV90YWcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRucy5kbnNzZWMuYWxnb3JpdGhtX3RvX3RleHQoc2VsZi5hbGdvcml0
aG0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbnMucmRhdGEuX2Jhc2U2NGlm
eShzZWxmLmNlcnRpZmljYXRlKSkKKworICAgIGRlZiBmcm9tX3RleHQoY2xzLCByZGNsYXNzLCBy
ZHR5cGUsIHRvaywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUpOgorICAgICAgICBj
ZXJ0aWZpY2F0ZV90eXBlID0gX2N0eXBlX2Zyb21fdGV4dCh0b2suZ2V0X3N0cmluZygpKQorICAg
ICAgICBrZXlfdGFnID0gdG9rLmdldF91aW50MTYoKQorICAgICAgICBhbGdvcml0aG0gPSBkbnMu
ZG5zc2VjLmFsZ29yaXRobV9mcm9tX3RleHQodG9rLmdldF9zdHJpbmcoKSkKKyAgICAgICAgaWYg
YWxnb3JpdGhtIDwgMCBvciBhbGdvcml0aG0gPiAyNTU6CisgICAgICAgICAgICByYWlzZSBkbnMu
ZXhjZXB0aW9uLlN5bnRheEVycm9yKCJiYWQgYWxnb3JpdGhtIHR5cGUiKQorICAgICAgICBjaHVu
a3MgPSBbXQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdCA9IHRvay5nZXQoKS51bmVz
Y2FwZSgpCisgICAgICAgICAgICBpZiB0LmlzX2VvbF9vcl9lb2YoKToKKyAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgaWYgbm90IHQuaXNfaWRlbnRpZmllcigpOgorICAgICAgICAg
ICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3IKKyAgICAgICAgICAgIGNodW5r
cy5hcHBlbmQodC52YWx1ZSkKKyAgICAgICAgYjY0ID0gJycuam9pbihjaHVua3MpCisgICAgICAg
IGNlcnRpZmljYXRlID0gYjY0LmRlY29kZSgnYmFzZTY0X2NvZGVjJykKKyAgICAgICAgcmV0dXJu
IGNscyhyZGNsYXNzLCByZHR5cGUsIGNlcnRpZmljYXRlX3R5cGUsIGtleV90YWcsCisgICAgICAg
ICAgICAgICAgICAgYWxnb3JpdGhtLCBjZXJ0aWZpY2F0ZSkKKworICAgIGZyb21fdGV4dCA9IGNs
YXNzbWV0aG9kKGZyb21fdGV4dCkKKworICAgIGRlZiB0b193aXJlKHNlbGYsIGZpbGUsIGNvbXBy
ZXNzID0gTm9uZSwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIHByZWZpeCA9IHN0cnVjdC5wYWNr
KCIhSEhCIiwgc2VsZi5jZXJ0aWZpY2F0ZV90eXBlLCBzZWxmLmtleV90YWcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuYWxnb3JpdGhtKQorICAgICAgICBmaWxlLndyaXRlKHBy
ZWZpeCkKKyAgICAgICAgZmlsZS53cml0ZShzZWxmLmNlcnRpZmljYXRlKQorCisgICAgZGVmIGZy
b21fd2lyZShjbHMsIHJkY2xhc3MsIHJkdHlwZSwgd2lyZSwgY3VycmVudCwgcmRsZW4sIG9yaWdp
biA9IE5vbmUpOgorICAgICAgICBwcmVmaXggPSB3aXJlW2N1cnJlbnQgOiBjdXJyZW50ICsgNV0K
KyAgICAgICAgY3VycmVudCArPSA1CisgICAgICAgIHJkbGVuIC09IDUKKyAgICAgICAgaWYgcmRs
ZW4gPCAwOgorICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IKKyAgICAg
ICAgKGNlcnRpZmljYXRlX3R5cGUsIGtleV90YWcsIGFsZ29yaXRobSkgPSBzdHJ1Y3QudW5wYWNr
KCIhSEhCIiwgcHJlZml4KQorICAgICAgICBjZXJ0aWZpY2F0ZSA9IHdpcmVbY3VycmVudCA6IGN1
cnJlbnQgKyByZGxlbl0KKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5cGUsIGNlcnRp
ZmljYXRlX3R5cGUsIGtleV90YWcsIGFsZ29yaXRobSwKKyAgICAgICAgICAgICAgICAgICBjZXJ0
aWZpY2F0ZSkKKworICAgIGZyb21fd2lyZSA9IGNsYXNzbWV0aG9kKGZyb21fd2lyZSkKKworICAg
IGRlZiBfY21wKHNlbGYsIG90aGVyKToKKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygp
CisgICAgICAgIHNlbGYudG9fd2lyZShmKQorICAgICAgICB3aXJlMSA9IGYuZ2V0dmFsdWUoKQor
ICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgZi50cnVuY2F0ZSgpCisgICAgICAgIG90aGVyLnRv
X3dpcmUoZikKKyAgICAgICAgd2lyZTIgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgZi5jbG9zZSgp
CisKKyAgICAgICAgcmV0dXJuIGNtcCh3aXJlMSwgd2lyZTIpCkluZGV4OiBUb29scy9XZWJQYWdl
UmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9DTkFNRS5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9DTkFNRS5w
eQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3Jk
dHlwZXMvQU5ZL0NOQU1FLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACisjIENvcHly
aWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlz
c2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBh
bmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBm
ZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdo
dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3Bp
ZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJ
U0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElO
Q0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBT
UEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5Z
IERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBP
UiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5D
RSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5F
Q1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKK2lt
cG9ydCBkbnMucmR0eXBlcy5uc2Jhc2UKKworY2xhc3MgQ05BTUUoZG5zLnJkdHlwZXMubnNiYXNl
Lk5TQmFzZSk6CisgICAgIiIiQ05BTUUgcmVjb3JkCisKKyAgICBOb3RlOiBhbHRob3VnaCBDTkFN
RSBpcyBvZmZpY2lhbGx5IGEgc2luZ2xldG9uIHR5cGUsIGRuc3B5dGhvbiBhbGxvd3MKKyAgICBu
b24tc2luZ2xldG9uIENOQU1FIHJkYXRhc2V0cyBiZWNhdXNlIHN1Y2ggc2V0cyBoYXZlIGJlZW4g
Y29tbW9ubHkKKyAgICB1c2VkIGJ5IEJJTkQgYW5kIG90aGVyIG5hbWVzZXJ2ZXJzIGZvciBsb2Fk
IGJhbGFuY2luZy4iIiIKKyAgICBwYXNzCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJk
X3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9ETFYucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvRExWLnB5CShyZXZpc2lvbiAwKQor
KysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvRExWLnB5
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwIEBACisjIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFu
ZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBh
bnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92
aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g
bm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJP
VklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lU
SCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElF
UyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5P
TUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxU
SU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBB
Q1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBB
UklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JN
QU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitpbXBvcnQgZG5zLnJkdHlwZXMuZHNiYXNlCisKK2Ns
YXNzIERMVihkbnMucmR0eXBlcy5kc2Jhc2UuRFNCYXNlKToKKyAgICAiIiJETFYgcmVjb3JkIiIi
CisgICAgcGFzcwpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0
eXBlcy9BTlkvRE5BTUUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGly
ZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvRE5BTUUucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9X
ZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9ETkFNRS5weQkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNywgMjAwOSwg
MjAxMCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnks
IGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZv
ciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBw
cm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np
b24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMg
UFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMg
V0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFO
VElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxM
IE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVT
VUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgor
IyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9O
LCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG
T1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitpbXBvcnQgZG5zLnJkdHlwZXMubnNiYXNlCisK
K2NsYXNzIEROQU1FKGRucy5yZHR5cGVzLm5zYmFzZS5VbmNvbXByZXNzZWROUyk6CisgICAgIiIi
RE5BTUUgcmVjb3JkIiIiCisgICAgZGVmIHRvX2RpZ2VzdGFibGUoc2VsZiwgb3JpZ2luID0gTm9u
ZSk6CisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC50b19kaWdlc3RhYmxlKG9yaWdpbikKSW5k
ZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0ROU0tF
WS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9y
ZHR5cGVzL0FOWS9ETlNLRVkucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5
L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9ETlNLRVkucHkJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcsIDIwMDksIDIwMTAgTm9taW51
bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJp
YnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBv
c2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhh
dCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQor
IyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB
UyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJE
IFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9N
IExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9G
IENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBP
VVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0Yg
VEhJUyBTT0ZUV0FSRS4KKworaW1wb3J0IGRucy5yZHR5cGVzLmtleWJhc2UKKworIyBmbGFnIGNv
bnN0YW50cworU0VQID0gMHgwMDAxCitSRVZPS0UgPSAweDAwODAKK1pPTkUgPSAweDAxMDAKKwor
Y2xhc3MgRE5TS0VZKGRucy5yZHR5cGVzLmtleWJhc2UuS0VZQmFzZSk6CisgICAgIiIiRE5TS0VZ
IHJlY29yZCIiIgorICAgIHBhc3MKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvZG5zL3JkdHlwZXMvQU5ZL0RTLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBs
YXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0RTLnB5CShyZXZpc2lvbiAwKQorKysgVG9v
bHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvRFMucHkJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIwMDks
IDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5
LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBm
b3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMg
cHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz
aW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElT
IFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisj
IFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFM
TCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1Qs
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJF
U1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4K
KyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElP
TiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVS
Rk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworaW1wb3J0IGRucy5yZHR5cGVzLmRzYmFzZQor
CitjbGFzcyBEUyhkbnMucmR0eXBlcy5kc2Jhc2UuRFNCYXNlKToKKyAgICAiIiJEUyByZWNvcmQi
IiIKKyAgICBwYXNzCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9y
ZHR5cGVzL0FOWS9HUE9TLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhp
cmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0dQT1MucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9X
ZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9HUE9TLnB5CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE1NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNywgMjAwOSwg
MjAxMCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnks
IGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZv
ciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBw
cm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np
b24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMg
UFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMg
V0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFO
VElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxM
IE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVT
VUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgor
IyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9O
LCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG
T1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitpbXBvcnQgZG5zLmV4Y2VwdGlvbgoraW1wb3J0
IGRucy5yZGF0YQoraW1wb3J0IGRucy50b2tlbml6ZXIKKworZGVmIF92YWxpZGF0ZV9mbG9hdF9z
dHJpbmcod2hhdCk6CisgICAgaWYgd2hhdFswXSA9PSAnLScgb3Igd2hhdFswXSA9PSAnKyc6Cisg
ICAgICAgIHdoYXQgPSB3aGF0WzE6XQorICAgIGlmIHdoYXQuaXNkaWdpdCgpOgorICAgICAgICBy
ZXR1cm4KKyAgICAobGVmdCwgcmlnaHQpID0gd2hhdC5zcGxpdCgnLicpCisgICAgaWYgbGVmdCA9
PSAnJyBhbmQgcmlnaHQgPT0gJyc6CisgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uRm9ybUVy
cm9yCisgICAgaWYgbm90IGxlZnQgPT0gJycgYW5kIG5vdCBsZWZ0LmlzZGlnaXQoKToKKyAgICAg
ICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IKKyAgICBpZiBub3QgcmlnaHQgPT0gJycg
YW5kIG5vdCByaWdodC5pc2RpZ2l0KCk6CisgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uRm9y
bUVycm9yCisgICAgCitjbGFzcyBHUE9TKGRucy5yZGF0YS5SZGF0YSk6CisgICAgIiIiR1BPUyBy
ZWNvcmQKKworICAgIEBpdmFyIGxhdGl0dWRlOiBsYXRpdHVkZQorICAgIEB0eXBlIGxhdGl0dWRl
OiBzdHJpbmcKKyAgICBAaXZhciBsb25naXR1ZGU6IGxvbmdpdHVkZQorICAgIEB0eXBlIGxvbmdp
dHVkZTogc3RyaW5nCisgICAgQGl2YXIgYWx0aXR1ZGU6IGFsdGl0dWRlCisgICAgQHR5cGUgYWx0
aXR1ZGU6IHN0cmluZworICAgIEBzZWU6IFJGQyAxNzEyIiIiCisKKyAgICBfX3Nsb3RzX18gPSBb
J2xhdGl0dWRlJywgJ2xvbmdpdHVkZScsICdhbHRpdHVkZSddCisgICAgCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHJkY2xhc3MsIHJkdHlwZSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGUp
OgorICAgICAgICBzdXBlcihHUE9TLCBzZWxmKS5fX2luaXRfXyhyZGNsYXNzLCByZHR5cGUpCisg
ICAgICAgIGlmIGlzaW5zdGFuY2UobGF0aXR1ZGUsIGZsb2F0KSBvciBcCisgICAgICAgICAgIGlz
aW5zdGFuY2UobGF0aXR1ZGUsIGludCkgb3IgXAorICAgICAgICAgICBpc2luc3RhbmNlKGxhdGl0
dWRlLCBsb25nKToKKyAgICAgICAgICAgIGxhdGl0dWRlID0gc3RyKGxhdGl0dWRlKQorICAgICAg
ICBpZiBpc2luc3RhbmNlKGxvbmdpdHVkZSwgZmxvYXQpIG9yIFwKKyAgICAgICAgICAgaXNpbnN0
YW5jZShsb25naXR1ZGUsIGludCkgb3IgXAorICAgICAgICAgICBpc2luc3RhbmNlKGxvbmdpdHVk
ZSwgbG9uZyk6CisgICAgICAgICAgICBsb25naXR1ZGUgPSBzdHIobG9uZ2l0dWRlKQorICAgICAg
ICBpZiBpc2luc3RhbmNlKGFsdGl0dWRlLCBmbG9hdCkgb3IgXAorICAgICAgICAgICBpc2luc3Rh
bmNlKGFsdGl0dWRlLCBpbnQpIG9yIFwKKyAgICAgICAgICAgaXNpbnN0YW5jZShhbHRpdHVkZSwg
bG9uZyk6CisgICAgICAgICAgICBhbHRpdHVkZSA9IHN0cihhbHRpdHVkZSkKKyAgICAgICAgX3Zh
bGlkYXRlX2Zsb2F0X3N0cmluZyhsYXRpdHVkZSkKKyAgICAgICAgX3ZhbGlkYXRlX2Zsb2F0X3N0
cmluZyhsb25naXR1ZGUpCisgICAgICAgIF92YWxpZGF0ZV9mbG9hdF9zdHJpbmcoYWx0aXR1ZGUp
CisgICAgICAgIHNlbGYubGF0aXR1ZGUgPSBsYXRpdHVkZQorICAgICAgICBzZWxmLmxvbmdpdHVk
ZSA9IGxvbmdpdHVkZQorICAgICAgICBzZWxmLmFsdGl0dWRlID0gYWx0aXR1ZGUKKworICAgIGRl
ZiB0b190ZXh0KHNlbGYsIG9yaWdpbj1Ob25lLCByZWxhdGl2aXplPVRydWUsICoqa3cpOgorICAg
ICAgICByZXR1cm4gJyVzICVzICVzJyAlIChzZWxmLmxhdGl0dWRlLCBzZWxmLmxvbmdpdHVkZSwg
c2VsZi5hbHRpdHVkZSkKKyAgICAgICAgCisgICAgZGVmIGZyb21fdGV4dChjbHMsIHJkY2xhc3Ms
IHJkdHlwZSwgdG9rLCBvcmlnaW4gPSBOb25lLCByZWxhdGl2aXplID0gVHJ1ZSk6CisgICAgICAg
IGxhdGl0dWRlID0gdG9rLmdldF9zdHJpbmcoKQorICAgICAgICBsb25naXR1ZGUgPSB0b2suZ2V0
X3N0cmluZygpCisgICAgICAgIGFsdGl0dWRlID0gdG9rLmdldF9zdHJpbmcoKQorICAgICAgICB0
b2suZ2V0X2VvbCgpCisgICAgICAgIHJldHVybiBjbHMocmRjbGFzcywgcmR0eXBlLCBsYXRpdHVk
ZSwgbG9uZ2l0dWRlLCBhbHRpdHVkZSkKKyAgICAKKyAgICBmcm9tX3RleHQgPSBjbGFzc21ldGhv
ZChmcm9tX3RleHQpCisKKyAgICBkZWYgdG9fd2lyZShzZWxmLCBmaWxlLCBjb21wcmVzcyA9IE5v
bmUsIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICBsID0gbGVuKHNlbGYubGF0aXR1ZGUpCisgICAg
ICAgIGFzc2VydCBsIDwgMjU2CisgICAgICAgIGJ5dGUgPSBjaHIobCkKKyAgICAgICAgZmlsZS53
cml0ZShieXRlKQorICAgICAgICBmaWxlLndyaXRlKHNlbGYubGF0aXR1ZGUpCisgICAgICAgIGwg
PSBsZW4oc2VsZi5sb25naXR1ZGUpCisgICAgICAgIGFzc2VydCBsIDwgMjU2CisgICAgICAgIGJ5
dGUgPSBjaHIobCkKKyAgICAgICAgZmlsZS53cml0ZShieXRlKQorICAgICAgICBmaWxlLndyaXRl
KHNlbGYubG9uZ2l0dWRlKQorICAgICAgICBsID0gbGVuKHNlbGYuYWx0aXR1ZGUpCisgICAgICAg
IGFzc2VydCBsIDwgMjU2CisgICAgICAgIGJ5dGUgPSBjaHIobCkKKyAgICAgICAgZmlsZS53cml0
ZShieXRlKQorICAgICAgICBmaWxlLndyaXRlKHNlbGYuYWx0aXR1ZGUpCisgICAgICAgIAorICAg
IGRlZiBmcm9tX3dpcmUoY2xzLCByZGNsYXNzLCByZHR5cGUsIHdpcmUsIGN1cnJlbnQsIHJkbGVu
LCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAgbCA9IG9yZCh3aXJlW2N1cnJlbnRdKQorICAgICAg
ICBjdXJyZW50ICs9IDEKKyAgICAgICAgcmRsZW4gLT0gMQorICAgICAgICBpZiBsID4gcmRsZW46
CisgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcgorICAgICAgICBsYXRp
dHVkZSA9IHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyBsXQorICAgICAgICBjdXJyZW50ICs9IGwK
KyAgICAgICAgcmRsZW4gLT0gbAorICAgICAgICBsID0gb3JkKHdpcmVbY3VycmVudF0pCisgICAg
ICAgIGN1cnJlbnQgKz0gMQorICAgICAgICByZGxlbiAtPSAxCisgICAgICAgIGlmIGwgPiByZGxl
bjoKKyAgICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uRm9ybUVycm9yCisgICAgICAgIGxv
bmdpdHVkZSA9IHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyBsXQorICAgICAgICBjdXJyZW50ICs9
IGwKKyAgICAgICAgcmRsZW4gLT0gbAorICAgICAgICBsID0gb3JkKHdpcmVbY3VycmVudF0pCisg
ICAgICAgIGN1cnJlbnQgKz0gMQorICAgICAgICByZGxlbiAtPSAxCisgICAgICAgIGlmIGwgIT0g
cmRsZW46CisgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcgorICAgICAg
ICBhbHRpdHVkZSA9IHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyBsXQorICAgICAgICByZXR1cm4g
Y2xzKHJkY2xhc3MsIHJkdHlwZSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGUpCisKKyAg
ICBmcm9tX3dpcmUgPSBjbGFzc21ldGhvZChmcm9tX3dpcmUpCisKKyAgICBkZWYgX2NtcChzZWxm
LCBvdGhlcik6CisgICAgICAgIHYgPSBjbXAoc2VsZi5sYXRpdHVkZSwgb3RoZXIubGF0aXR1ZGUp
CisgICAgICAgIGlmIHYgPT0gMDoKKyAgICAgICAgICAgIHYgPSBjbXAoc2VsZi5sb25naXR1ZGUs
IG90aGVyLmxvbmdpdHVkZSkKKyAgICAgICAgICAgIGlmIHYgPT0gMDoKKyAgICAgICAgICAgICAg
ICB2ID0gY21wKHNlbGYuYWx0aXR1ZGUsIG90aGVyLmFsdGl0dWRlKQorICAgICAgICByZXR1cm4g
dgorCisgICAgZGVmIF9nZXRfZmxvYXRfbGF0aXR1ZGUoc2VsZik6CisgICAgICAgIHJldHVybiBm
bG9hdChzZWxmLmxhdGl0dWRlKQorCisgICAgZGVmIF9zZXRfZmxvYXRfbGF0aXR1ZGUoc2VsZiwg
dmFsdWUpOgorICAgICAgICBzZWxmLmxhdGl0dWRlID0gc3RyKHZhbHVlKQorCisgICAgZmxvYXRf
bGF0aXR1ZGUgPSBwcm9wZXJ0eShfZ2V0X2Zsb2F0X2xhdGl0dWRlLCBfc2V0X2Zsb2F0X2xhdGl0
dWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jPSJsYXRpdHVkZSBhcyBhIGZs
b2F0aW5nIHBvaW50IHZhbHVlIikKKworICAgIGRlZiBfZ2V0X2Zsb2F0X2xvbmdpdHVkZShzZWxm
KToKKyAgICAgICAgcmV0dXJuIGZsb2F0KHNlbGYubG9uZ2l0dWRlKQorCisgICAgZGVmIF9zZXRf
ZmxvYXRfbG9uZ2l0dWRlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5sb25naXR1ZGUgPSBz
dHIodmFsdWUpCisKKyAgICBmbG9hdF9sb25naXR1ZGUgPSBwcm9wZXJ0eShfZ2V0X2Zsb2F0X2xv
bmdpdHVkZSwgX3NldF9mbG9hdF9sb25naXR1ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9jPSJsb25naXR1ZGUgYXMgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSIpCisKKyAgICBk
ZWYgX2dldF9mbG9hdF9hbHRpdHVkZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZsb2F0KHNlbGYu
YWx0aXR1ZGUpCisKKyAgICBkZWYgX3NldF9mbG9hdF9hbHRpdHVkZShzZWxmLCB2YWx1ZSk6Cisg
ICAgICAgIHNlbGYuYWx0aXR1ZGUgPSBzdHIodmFsdWUpCisKKyAgICBmbG9hdF9hbHRpdHVkZSA9
IHByb3BlcnR5KF9nZXRfZmxvYXRfYWx0aXR1ZGUsIF9zZXRfZmxvYXRfYWx0aXR1ZGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb2M9ImFsdGl0dWRlIGFzIGEgZmxvYXRpbmcgcG9p
bnQgdmFsdWUiKQpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0
eXBlcy9BTlkvSElORk8ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGly
ZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvSElORk8ucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9X
ZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9ISU5GTy5weQkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw4MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNywgMjAwOSwg
MjAxMCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnks
IGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZv
ciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBw
cm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np
b24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMg
UFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMg
V0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFO
VElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxM
IE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVT
VUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgor
IyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9O
LCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG
T1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitpbXBvcnQgZG5zLmV4Y2VwdGlvbgoraW1wb3J0
IGRucy5yZGF0YQoraW1wb3J0IGRucy50b2tlbml6ZXIKKworY2xhc3MgSElORk8oZG5zLnJkYXRh
LlJkYXRhKToKKyAgICAiIiJISU5GTyByZWNvcmQKKworICAgIEBpdmFyIGNwdTogdGhlIENQVSB0
eXBlCisgICAgQHR5cGUgY3B1OiBzdHJpbmcKKyAgICBAaXZhciBvczogdGhlIE9TIHR5cGUKKyAg
ICBAdHlwZSBvczogc3RyaW5nCisgICAgQHNlZTogUkZDIDEwMzUiIiIKKworICAgIF9fc2xvdHNf
XyA9IFsnY3B1JywgJ29zJ10KKyAgICAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmRjbGFzcywg
cmR0eXBlLCBjcHUsIG9zKToKKyAgICAgICAgc3VwZXIoSElORk8sIHNlbGYpLl9faW5pdF9fKHJk
Y2xhc3MsIHJkdHlwZSkKKyAgICAgICAgc2VsZi5jcHUgPSBjcHUKKyAgICAgICAgc2VsZi5vcyA9
IG9zCisKKyAgICBkZWYgdG9fdGV4dChzZWxmLCBvcmlnaW49Tm9uZSwgcmVsYXRpdml6ZT1UcnVl
LCAqKmt3KToKKyAgICAgICAgcmV0dXJuICciJXMiICIlcyInICUgKGRucy5yZGF0YS5fZXNjYXBp
Znkoc2VsZi5jcHUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5zLnJkYXRhLl9l
c2NhcGlmeShzZWxmLm9zKSkKKyAgICAgICAgCisgICAgZGVmIGZyb21fdGV4dChjbHMsIHJkY2xh
c3MsIHJkdHlwZSwgdG9rLCBvcmlnaW4gPSBOb25lLCByZWxhdGl2aXplID0gVHJ1ZSk6CisgICAg
ICAgIGNwdSA9IHRvay5nZXRfc3RyaW5nKCkKKyAgICAgICAgb3MgPSB0b2suZ2V0X3N0cmluZygp
CisgICAgICAgIHRvay5nZXRfZW9sKCkKKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5
cGUsIGNwdSwgb3MpCisgICAgCisgICAgZnJvbV90ZXh0ID0gY2xhc3NtZXRob2QoZnJvbV90ZXh0
KQorCisgICAgZGVmIHRvX3dpcmUoc2VsZiwgZmlsZSwgY29tcHJlc3MgPSBOb25lLCBvcmlnaW4g
PSBOb25lKToKKyAgICAgICAgbCA9IGxlbihzZWxmLmNwdSkKKyAgICAgICAgYXNzZXJ0IGwgPCAy
NTYKKyAgICAgICAgYnl0ZSA9IGNocihsKQorICAgICAgICBmaWxlLndyaXRlKGJ5dGUpCisgICAg
ICAgIGZpbGUud3JpdGUoc2VsZi5jcHUpCisgICAgICAgIGwgPSBsZW4oc2VsZi5vcykKKyAgICAg
ICAgYXNzZXJ0IGwgPCAyNTYKKyAgICAgICAgYnl0ZSA9IGNocihsKQorICAgICAgICBmaWxlLndy
aXRlKGJ5dGUpCisgICAgICAgIGZpbGUud3JpdGUoc2VsZi5vcykKKyAgICAgICAgCisgICAgZGVm
IGZyb21fd2lyZShjbHMsIHJkY2xhc3MsIHJkdHlwZSwgd2lyZSwgY3VycmVudCwgcmRsZW4sIG9y
aWdpbiA9IE5vbmUpOgorICAgICAgICBsID0gb3JkKHdpcmVbY3VycmVudF0pCisgICAgICAgIGN1
cnJlbnQgKz0gMQorICAgICAgICByZGxlbiAtPSAxCisgICAgICAgIGlmIGwgPiByZGxlbjoKKyAg
ICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uRm9ybUVycm9yCisgICAgICAgIGNwdSA9IHdp
cmVbY3VycmVudCA6IGN1cnJlbnQgKyBsXQorICAgICAgICBjdXJyZW50ICs9IGwKKyAgICAgICAg
cmRsZW4gLT0gbAorICAgICAgICBsID0gb3JkKHdpcmVbY3VycmVudF0pCisgICAgICAgIGN1cnJl
bnQgKz0gMQorICAgICAgICByZGxlbiAtPSAxCisgICAgICAgIGlmIGwgIT0gcmRsZW46CisgICAg
ICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcgorICAgICAgICBvcyA9IHdpcmVb
Y3VycmVudCA6IGN1cnJlbnQgKyBsXQorICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlw
ZSwgY3B1LCBvcykKKworICAgIGZyb21fd2lyZSA9IGNsYXNzbWV0aG9kKGZyb21fd2lyZSkKKwor
ICAgIGRlZiBfY21wKHNlbGYsIG90aGVyKToKKyAgICAgICAgdiA9IGNtcChzZWxmLmNwdSwgb3Ro
ZXIuY3B1KQorICAgICAgICBpZiB2ID09IDA6CisgICAgICAgICAgICB2ID0gY21wKHNlbGYub3Ms
IG90aGVyLm9zKQorICAgICAgICByZXR1cm4gdgpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90
aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvSElQLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0hJUC5weQkocmV2aXNpb24g
MCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0hJ
UC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEw
IE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5k
IGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFu
eSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3Zp
ZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu
b3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9W
SURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRI
IFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVT
IE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9N
SU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJ
TkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFD
VElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFS
SVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1B
TkNFIE9GIFRISVMgU09GVFdBUkUuCisKK2ltcG9ydCBjU3RyaW5nSU8KK2ltcG9ydCBzdHJpbmcK
K2ltcG9ydCBzdHJ1Y3QKKworaW1wb3J0IGRucy5leGNlcHRpb24KK2ltcG9ydCBkbnMucmRhdGEK
K2ltcG9ydCBkbnMucmRhdGF0eXBlCisKK2NsYXNzIEhJUChkbnMucmRhdGEuUmRhdGEpOgorICAg
ICIiIkhJUCByZWNvcmQKKworICAgIEBpdmFyIGhpdDogdGhlIGhvc3QgaWRlbnRpdHkgdGFnCisg
ICAgQHR5cGUgaGl0OiBzdHJpbmcKKyAgICBAaXZhciBhbGdvcml0aG06IHRoZSBwdWJsaWMga2V5
IGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtCisgICAgQHR5cGUgYWxnb3JpdGhtOiBpbnQKKyAgICBA
aXZhciBrZXk6IHRoZSBwdWJsaWMga2V5CisgICAgQHR5cGUga2V5OiBzdHJpbmcKKyAgICBAaXZh
ciBzZXJ2ZXJzOiB0aGUgcmVuZGV6dm91cyBzZXJ2ZXJzCisgICAgQHR5cGUgc2VydmVyczogbGlz
dCBvZiBkbnMubmFtZS5OYW1lIG9iamVjdHMKKyAgICBAc2VlOiBSRkMgNTIwNSIiIgorCisgICAg
X19zbG90c19fID0gWydoaXQnLCAnYWxnb3JpdGhtJywgJ2tleScsICdzZXJ2ZXJzJ10KKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCByZGNsYXNzLCByZHR5cGUsIGhpdCwgYWxnb3JpdGhtLCBrZXks
IHNlcnZlcnMpOgorICAgICAgICBzdXBlcihISVAsIHNlbGYpLl9faW5pdF9fKHJkY2xhc3MsIHJk
dHlwZSkKKyAgICAgICAgc2VsZi5oaXQgPSBoaXQKKyAgICAgICAgc2VsZi5hbGdvcml0aG0gPSBh
bGdvcml0aG0KKyAgICAgICAgc2VsZi5rZXkgPSBrZXkKKyAgICAgICAgc2VsZi5zZXJ2ZXJzID0g
c2VydmVycworCisgICAgZGVmIHRvX3RleHQoc2VsZiwgb3JpZ2luPU5vbmUsIHJlbGF0aXZpemU9
VHJ1ZSwgKiprdyk6CisgICAgICAgIGhpdCA9IHNlbGYuaGl0LmVuY29kZSgnaGV4LWNvZGVjJykK
KyAgICAgICAga2V5ID0gc2VsZi5rZXkuZW5jb2RlKCdiYXNlNjQtY29kZWMnKS5yZXBsYWNlKCdc
bicsICcnKQorICAgICAgICB0ZXh0ID0gJycKKyAgICAgICAgc2VydmVycyA9IFtdCisgICAgICAg
IGZvciBzZXJ2ZXIgaW4gc2VsZi5zZXJ2ZXJzOgorICAgICAgICAgICAgc2VydmVycy5hcHBlbmQo
c3RyKHNlcnZlci5jaG9vc2VfcmVsYXRpdml0eShvcmlnaW4sIHJlbGF0aXZpemUpKSkKKyAgICAg
ICAgaWYgbGVuKHNlcnZlcnMpID4gMDoKKyAgICAgICAgICAgIHRleHQgKz0gKCcgJyArICcgJy5q
b2luKHNlcnZlcnMpKQorICAgICAgICByZXR1cm4gJyV1ICVzICVzJXMnICUgKHNlbGYuYWxnb3Jp
dGhtLCBoaXQsIGtleSwgdGV4dCkKKworICAgIGRlZiBmcm9tX3RleHQoY2xzLCByZGNsYXNzLCBy
ZHR5cGUsIHRvaywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUpOgorICAgICAgICBh
bGdvcml0aG0gPSB0b2suZ2V0X3VpbnQ4KCkKKyAgICAgICAgaGl0ID0gdG9rLmdldF9zdHJpbmco
KS5kZWNvZGUoJ2hleC1jb2RlYycpCisgICAgICAgIGlmIGxlbihoaXQpID4gMjU1OgorICAgICAg
ICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcigiSElUIHRvbyBsb25nIikKKyAg
ICAgICAga2V5ID0gdG9rLmdldF9zdHJpbmcoKS5kZWNvZGUoJ2Jhc2U2NC1jb2RlYycpCisgICAg
ICAgIHNlcnZlcnMgPSBbXQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdG9rZW4gPSB0
b2suZ2V0KCkKKyAgICAgICAgICAgIGlmIHRva2VuLmlzX2VvbF9vcl9lb2YoKToKKyAgICAgICAg
ICAgICAgICBicmVhaworICAgICAgICAgICAgc2VydmVyID0gZG5zLm5hbWUuZnJvbV90ZXh0KHRv
a2VuLnZhbHVlLCBvcmlnaW4pCisgICAgICAgICAgICBzZXJ2ZXIuY2hvb3NlX3JlbGF0aXZpdHko
b3JpZ2luLCByZWxhdGl2aXplKQorICAgICAgICAgICAgc2VydmVycy5hcHBlbmQoc2VydmVyKQor
ICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlwZSwgaGl0LCBhbGdvcml0aG0sIGtleSwg
c2VydmVycykKKworICAgIGZyb21fdGV4dCA9IGNsYXNzbWV0aG9kKGZyb21fdGV4dCkKKworICAg
IGRlZiB0b193aXJlKHNlbGYsIGZpbGUsIGNvbXByZXNzID0gTm9uZSwgb3JpZ2luID0gTm9uZSk6
CisgICAgICAgIGxoID0gbGVuKHNlbGYuaGl0KQorICAgICAgICBsayA9IGxlbihzZWxmLmtleSkK
KyAgICAgICAgZmlsZS53cml0ZShzdHJ1Y3QucGFjaygiIUJCSCIsIGxoLCBzZWxmLmFsZ29yaXRo
bSwgbGspKQorICAgICAgICBmaWxlLndyaXRlKHNlbGYuaGl0KQorICAgICAgICBmaWxlLndyaXRl
KHNlbGYua2V5KQorICAgICAgICBmb3Igc2VydmVyIGluIHNlbGYuc2VydmVyczoKKyAgICAgICAg
ICAgIHNlcnZlci50b193aXJlKGZpbGUsIE5vbmUsIG9yaWdpbikKKworICAgIGRlZiBmcm9tX3dp
cmUoY2xzLCByZGNsYXNzLCByZHR5cGUsIHdpcmUsIGN1cnJlbnQsIHJkbGVuLCBvcmlnaW4gPSBO
b25lKToKKyAgICAgICAgKGxoLCBhbGdvcml0aG0sIGxrKSA9IHN0cnVjdC51bnBhY2soJyFCQkgn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXJlW2N1cnJl
bnQgOiBjdXJyZW50ICsgNF0pCisgICAgICAgIGN1cnJlbnQgKz0gNAorICAgICAgICByZGxlbiAt
PSA0CisgICAgICAgIGhpdCA9IHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyBsaF0KKyAgICAgICAg
Y3VycmVudCArPSBsaAorICAgICAgICByZGxlbiAtPSBsaAorICAgICAgICBrZXkgPSB3aXJlW2N1
cnJlbnQgOiBjdXJyZW50ICsgbGtdCisgICAgICAgIGN1cnJlbnQgKz0gbGsKKyAgICAgICAgcmRs
ZW4gLT0gbGsKKyAgICAgICAgc2VydmVycyA9IFtdCisgICAgICAgIHdoaWxlIHJkbGVuID4gMDoK
KyAgICAgICAgICAgIChzZXJ2ZXIsIGN1c2VkKSA9IGRucy5uYW1lLmZyb21fd2lyZSh3aXJlWzog
Y3VycmVudCArIHJkbGVuXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50KQorICAgICAgICAgICAgY3VycmVudCArPSBjdXNlZAorICAgICAg
ICAgICAgcmRsZW4gLT0gY3VzZWQKKyAgICAgICAgICAgIGlmIG5vdCBvcmlnaW4gaXMgTm9uZToK
KyAgICAgICAgICAgICAgICBzZXJ2ZXIgPSBzZXJ2ZXIucmVsYXRpdml6ZShvcmlnaW4pCisgICAg
ICAgICAgICBzZXJ2ZXJzLmFwcGVuZChzZXJ2ZXIpCisgICAgICAgIHJldHVybiBjbHMocmRjbGFz
cywgcmR0eXBlLCBoaXQsIGFsZ29yaXRobSwga2V5LCBzZXJ2ZXJzKQorCisgICAgZnJvbV93aXJl
ID0gY2xhc3NtZXRob2QoZnJvbV93aXJlKQorCisgICAgZGVmIGNob29zZV9yZWxhdGl2aXR5KHNl
bGYsIG9yaWdpbiA9IE5vbmUsIHJlbGF0aXZpemUgPSBUcnVlKToKKyAgICAgICAgc2VydmVycyA9
IFtdCisgICAgICAgIGZvciBzZXJ2ZXIgaW4gc2VsZi5zZXJ2ZXJzOgorICAgICAgICAgICAgc2Vy
dmVyID0gc2VydmVyLmNob29zZV9yZWxhdGl2aXR5KG9yaWdpbiwgcmVsYXRpdml6ZSkKKyAgICAg
ICAgICAgIHNlcnZlcnMuYXBwZW5kKHNlcnZlcikKKyAgICAgICAgc2VsZi5zZXJ2ZXJzID0gc2Vy
dmVycworCisgICAgZGVmIF9jbXAoc2VsZiwgb3RoZXIpOgorICAgICAgICBiMSA9IGNTdHJpbmdJ
Ty5TdHJpbmdJTygpCisgICAgICAgIGxoID0gbGVuKHNlbGYuaGl0KQorICAgICAgICBsayA9IGxl
bihzZWxmLmtleSkKKyAgICAgICAgYjEud3JpdGUoc3RydWN0LnBhY2soIiFCQkgiLCBsaCwgc2Vs
Zi5hbGdvcml0aG0sIGxrKSkKKyAgICAgICAgYjEud3JpdGUoc2VsZi5oaXQpCisgICAgICAgIGIx
LndyaXRlKHNlbGYua2V5KQorICAgICAgICBiMiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAg
ICAgIGxoID0gbGVuKG90aGVyLmhpdCkKKyAgICAgICAgbGsgPSBsZW4ob3RoZXIua2V5KQorICAg
ICAgICBiMi53cml0ZShzdHJ1Y3QucGFjaygiIUJCSCIsIGxoLCBvdGhlci5hbGdvcml0aG0sIGxr
KSkKKyAgICAgICAgYjIud3JpdGUob3RoZXIuaGl0KQorICAgICAgICBiMi53cml0ZShvdGhlci5r
ZXkpCisgICAgICAgIHYgPSBjbXAoYjEuZ2V0dmFsdWUoKSwgYjIuZ2V0dmFsdWUoKSkKKyAgICAg
ICAgaWYgdiAhPSAwOgorICAgICAgICAgICAgcmV0dXJuIHYKKyAgICAgICAgbHMgPSBsZW4oc2Vs
Zi5zZXJ2ZXJzKQorICAgICAgICBsbyA9IGxlbihvdGhlci5zZXJ2ZXJzKQorICAgICAgICBjb3Vu
dCA9IG1pbihscywgbG8pCisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIGkgPCBjb3VudDoK
KyAgICAgICAgICAgIHYgPSBjbXAoc2VsZi5zZXJ2ZXJzW2ldLCBvdGhlci5zZXJ2ZXJzW2ldKQor
ICAgICAgICAgICAgaWYgdiAhPSAwOgorICAgICAgICAgICAgICAgIHJldHVybiB2CisgICAgICAg
ICAgICBpICs9IDEKKyAgICAgICAgcmV0dXJuIGxzIC0gbG8KSW5kZXg6IFRvb2xzL1dlYlBhZ2VS
ZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0lTRE4ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvSVNETi5weQko
cmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlw
ZXMvQU5ZL0lTRE4ucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTYgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9u
IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBp
dHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBp
cyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4K
KyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xB
SU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVE
SU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJ
QUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFN
QUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBS
T0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9S
IE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElP
TiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworaW1wb3J0
IGRucy5leGNlcHRpb24KK2ltcG9ydCBkbnMucmRhdGEKK2ltcG9ydCBkbnMudG9rZW5pemVyCisK
K2NsYXNzIElTRE4oZG5zLnJkYXRhLlJkYXRhKToKKyAgICAiIiJJU0ROIHJlY29yZAorCisgICAg
QGl2YXIgYWRkcmVzczogdGhlIElTRE4gYWRkcmVzcworICAgIEB0eXBlIGFkZHJlc3M6IHN0cmlu
ZworICAgIEBpdmFyIHN1YmFkZHJlc3M6IHRoZSBJU0ROIHN1YmFkZHJlc3MgKG9yICcnIGlmIG5v
dCBwcmVzZW50KQorICAgIEB0eXBlIHN1YmFkZHJlc3M6IHN0cmluZworICAgIEBzZWU6IFJGQyAx
MTgzIiIiCisKKyAgICBfX3Nsb3RzX18gPSBbJ2FkZHJlc3MnLCAnc3ViYWRkcmVzcyddCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcmRjbGFzcywgcmR0eXBlLCBhZGRyZXNzLCBzdWJhZGRyZXNz
KToKKyAgICAgICAgc3VwZXIoSVNETiwgc2VsZikuX19pbml0X18ocmRjbGFzcywgcmR0eXBlKQor
ICAgICAgICBzZWxmLmFkZHJlc3MgPSBhZGRyZXNzCisgICAgICAgIHNlbGYuc3ViYWRkcmVzcyA9
IHN1YmFkZHJlc3MKKworICAgIGRlZiB0b190ZXh0KHNlbGYsIG9yaWdpbj1Ob25lLCByZWxhdGl2
aXplPVRydWUsICoqa3cpOgorICAgICAgICBpZiBzZWxmLnN1YmFkZHJlc3M6CisgICAgICAgICAg
ICByZXR1cm4gJyIlcyIgIiVzIicgJSAoZG5zLnJkYXRhLl9lc2NhcGlmeShzZWxmLmFkZHJlc3Mp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRucy5yZGF0YS5fZXNjYXBpZnko
c2VsZi5zdWJhZGRyZXNzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnIiVz
IicgJSBkbnMucmRhdGEuX2VzY2FwaWZ5KHNlbGYuYWRkcmVzcykKKworICAgIGRlZiBmcm9tX3Rl
eHQoY2xzLCByZGNsYXNzLCByZHR5cGUsIHRvaywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6ZSA9
IFRydWUpOgorICAgICAgICBhZGRyZXNzID0gdG9rLmdldF9zdHJpbmcoKQorICAgICAgICB0ID0g
dG9rLmdldCgpCisgICAgICAgIGlmIG5vdCB0LmlzX2VvbF9vcl9lb2YoKToKKyAgICAgICAgICAg
IHRvay51bmdldCh0KQorICAgICAgICAgICAgc3ViYWRkcmVzcyA9IHRvay5nZXRfc3RyaW5nKCkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRvay51bmdldCh0KQorICAgICAgICAgICAgc3Vi
YWRkcmVzcyA9ICcnCisgICAgICAgIHRvay5nZXRfZW9sKCkKKyAgICAgICAgcmV0dXJuIGNscyhy
ZGNsYXNzLCByZHR5cGUsIGFkZHJlc3MsIHN1YmFkZHJlc3MpCisKKyAgICBmcm9tX3RleHQgPSBj
bGFzc21ldGhvZChmcm9tX3RleHQpCisKKyAgICBkZWYgdG9fd2lyZShzZWxmLCBmaWxlLCBjb21w
cmVzcyA9IE5vbmUsIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICBsID0gbGVuKHNlbGYuYWRkcmVz
cykKKyAgICAgICAgYXNzZXJ0IGwgPCAyNTYKKyAgICAgICAgYnl0ZSA9IGNocihsKQorICAgICAg
ICBmaWxlLndyaXRlKGJ5dGUpCisgICAgICAgIGZpbGUud3JpdGUoc2VsZi5hZGRyZXNzKQorICAg
ICAgICBsID0gbGVuKHNlbGYuc3ViYWRkcmVzcykKKyAgICAgICAgaWYgbCA+IDA6CisgICAgICAg
ICAgICBhc3NlcnQgbCA8IDI1NgorICAgICAgICAgICAgYnl0ZSA9IGNocihsKQorICAgICAgICAg
ICAgZmlsZS53cml0ZShieXRlKQorICAgICAgICAgICAgZmlsZS53cml0ZShzZWxmLnN1YmFkZHJl
c3MpCisKKyAgICBkZWYgZnJvbV93aXJlKGNscywgcmRjbGFzcywgcmR0eXBlLCB3aXJlLCBjdXJy
ZW50LCByZGxlbiwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIGwgPSBvcmQod2lyZVtjdXJyZW50
XSkKKyAgICAgICAgY3VycmVudCArPSAxCisgICAgICAgIHJkbGVuIC09IDEKKyAgICAgICAgaWYg
bCA+IHJkbGVuOgorICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IKKyAg
ICAgICAgYWRkcmVzcyA9IHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyBsXQorICAgICAgICBjdXJy
ZW50ICs9IGwKKyAgICAgICAgcmRsZW4gLT0gbAorICAgICAgICBpZiByZGxlbiA+IDA6CisgICAg
ICAgICAgICBsID0gb3JkKHdpcmVbY3VycmVudF0pCisgICAgICAgICAgICBjdXJyZW50ICs9IDEK
KyAgICAgICAgICAgIHJkbGVuIC09IDEKKyAgICAgICAgICAgIGlmIGwgIT0gcmRsZW46CisgICAg
ICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IKKyAgICAgICAgICAgIHN1
YmFkZHJlc3MgPSB3aXJlW2N1cnJlbnQgOiBjdXJyZW50ICsgbF0KKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHN1YmFkZHJlc3MgPSAnJworICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3MsIHJk
dHlwZSwgYWRkcmVzcywgc3ViYWRkcmVzcykKKworICAgIGZyb21fd2lyZSA9IGNsYXNzbWV0aG9k
KGZyb21fd2lyZSkKKworICAgIGRlZiBfY21wKHNlbGYsIG90aGVyKToKKyAgICAgICAgdiA9IGNt
cChzZWxmLmFkZHJlc3MsIG90aGVyLmFkZHJlc3MpCisgICAgICAgIGlmIHYgPT0gMDoKKyAgICAg
ICAgICAgIHYgPSBjbXAoc2VsZi5zdWJhZGRyZXNzLCBvdGhlci5zdWJhZGRyZXNzKQorICAgICAg
ICByZXR1cm4gdgpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0
eXBlcy9BTlkvS0VZLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRf
cGFydHkvZG5zL3JkdHlwZXMvQU5ZL0tFWS5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBh
Z2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0tFWS5weQkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNywgMjAwOSwgMjAxMCBO
b21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBk
aXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkg
cHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92aWRl
ZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90
aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklE
RUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBS
RUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBP
RgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5PTUlO
VU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5H
IEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJ
T04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklT
SU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5D
RSBPRiBUSElTIFNPRlRXQVJFLgorCitpbXBvcnQgZG5zLnJkdHlwZXMua2V5YmFzZQorCitjbGFz
cyBLRVkoZG5zLnJkdHlwZXMua2V5YmFzZS5LRVlCYXNlKToKKyAgICAiIiJLRVkgcmVjb3JkIiIi
CisgICAgcGFzcwpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0
eXBlcy9BTlkvTE9DLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRf
cGFydHkvZG5zL3JkdHlwZXMvQU5ZL0xPQy5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBh
Z2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0xPQy5weQkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzMzQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIwMDksIDIwMTAg
Tm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQg
ZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55
IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlk
ZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v
dGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJ
REVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEgg
UkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01J
TlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElO
RyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNU
SU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJ
U0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFO
Q0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworaW1wb3J0IGNTdHJpbmdJTworaW1wb3J0IHN0cnVjdAor
CitpbXBvcnQgZG5zLmV4Y2VwdGlvbgoraW1wb3J0IGRucy5yZGF0YQorCitfcG93cyA9ICgxTCwg
MTBMLCAxMDBMLCAxMDAwTCwgMTAwMDBMLCAxMDAwMDBMLCAxMDAwMDAwTCwgMTAwMDAwMDBMLAor
ICAgICAgICAgMTAwMDAwMDAwTCwgMTAwMDAwMDAwMEwsIDEwMDAwMDAwMDAwTCkKKworZGVmIF9l
eHBvbmVudF9vZih3aGF0LCBkZXNjKToKKyAgICBleHAgPSBOb25lCisgICAgZm9yIGkgaW4geHJh
bmdlKGxlbihfcG93cykpOgorICAgICAgICBpZiB3aGF0IC8vIF9wb3dzW2ldID09IDBMOgorICAg
ICAgICAgICAgZXhwID0gaSAtIDEKKyAgICAgICAgICAgIGJyZWFrCisgICAgaWYgZXhwIGlzIE5v
bmUgb3IgZXhwIDwgMDoKKyAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcigi
JXMgdmFsdWUgb3V0IG9mIGJvdW5kcyIgJSBkZXNjKQorICAgIHJldHVybiBleHAKKworZGVmIF9m
bG9hdF90b190dXBsZSh3aGF0KToKKyAgICBpZiB3aGF0IDwgMDoKKyAgICAgICAgc2lnbiA9IC0x
CisgICAgICAgIHdoYXQgKj0gLTEKKyAgICBlbHNlOgorICAgICAgICBzaWduID0gMQorICAgIHdo
YXQgPSBsb25nKHJvdW5kKHdoYXQgKiAzNjAwMDAwKSkKKyAgICBkZWdyZWVzID0gaW50KHdoYXQg
Ly8gMzYwMDAwMCkKKyAgICB3aGF0IC09IGRlZ3JlZXMgKiAzNjAwMDAwCisgICAgbWludXRlcyA9
IGludCh3aGF0IC8vIDYwMDAwKQorICAgIHdoYXQgLT0gbWludXRlcyAqIDYwMDAwCisgICAgc2Vj
b25kcyA9IGludCh3aGF0IC8vIDEwMDApCisgICAgd2hhdCAtPSBpbnQoc2Vjb25kcyAqIDEwMDAp
CisgICAgd2hhdCA9IGludCh3aGF0KQorICAgIHJldHVybiAoZGVncmVlcyAqIHNpZ24sIG1pbnV0
ZXMsIHNlY29uZHMsIHdoYXQpCisKK2RlZiBfdHVwbGVfdG9fZmxvYXQod2hhdCk6CisgICAgaWYg
d2hhdFswXSA8IDA6CisgICAgICAgIHNpZ24gPSAtMQorICAgICAgICB2YWx1ZSA9IGZsb2F0KHdo
YXRbMF0pICogLTEKKyAgICBlbHNlOgorICAgICAgICBzaWduID0gMQorICAgICAgICB2YWx1ZSA9
IGZsb2F0KHdoYXRbMF0pCisgICAgdmFsdWUgKz0gZmxvYXQod2hhdFsxXSkgLyA2MC4wCisgICAg
dmFsdWUgKz0gZmxvYXQod2hhdFsyXSkgLyAzNjAwLjAKKyAgICB2YWx1ZSArPSBmbG9hdCh3aGF0
WzNdKSAvIDM2MDAwMDAuMAorICAgIHJldHVybiBzaWduICogdmFsdWUKKworZGVmIF9lbmNvZGVf
c2l6ZSh3aGF0LCBkZXNjKToKKyAgICB3aGF0ID0gbG9uZyh3aGF0KTsKKyAgICBleHBvbmVudCA9
IF9leHBvbmVudF9vZih3aGF0LCBkZXNjKSAmIDB4RgorICAgIGJhc2UgPSB3aGF0IC8vIHBvdygx
MCwgZXhwb25lbnQpICYgMHhGCisgICAgcmV0dXJuIGJhc2UgKiAxNiArIGV4cG9uZW50CisKK2Rl
ZiBfZGVjb2RlX3NpemUod2hhdCwgZGVzYyk6CisgICAgZXhwb25lbnQgPSB3aGF0ICYgMHgwRgor
ICAgIGlmIGV4cG9uZW50ID4gOToKKyAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhF
cnJvcigiYmFkICVzIGV4cG9uZW50IiAlIGRlc2MpCisgICAgYmFzZSA9ICh3aGF0ICYgMHhGMCkg
Pj4gNAorICAgIGlmIGJhc2UgPiA5OgorICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRh
eEVycm9yKCJiYWQgJXMgYmFzZSIgJSBkZXNjKQorICAgIHJldHVybiBsb25nKGJhc2UpICogcG93
KDEwLCBleHBvbmVudCkKKworY2xhc3MgTE9DKGRucy5yZGF0YS5SZGF0YSk6CisgICAgIiIiTE9D
IHJlY29yZAorCisgICAgQGl2YXIgbGF0aXR1ZGU6IGxhdGl0dWRlCisgICAgQHR5cGUgbGF0aXR1
ZGU6IChpbnQsIGludCwgaW50LCBpbnQpIHR1cGxlIHNwZWNpZnlpbmcgdGhlIGRlZ3JlZXMsIG1p
bnV0ZXMsCisgICAgc2Vjb25kcywgYW5kIG1pbGxpc2Vjb25kcyBvZiB0aGUgY29vcmRpbmF0ZS4K
KyAgICBAaXZhciBsb25naXR1ZGU6IGxvbmdpdHVkZQorICAgIEB0eXBlIGxvbmdpdHVkZTogKGlu
dCwgaW50LCBpbnQsIGludCkgdHVwbGUgc3BlY2lmeWluZyB0aGUgZGVncmVlcywKKyAgICBtaW51
dGVzLCBzZWNvbmRzLCBhbmQgbWlsbGlzZWNvbmRzIG9mIHRoZSBjb29yZGluYXRlLgorICAgIEBp
dmFyIGFsdGl0dWRlOiBhbHRpdHVkZQorICAgIEB0eXBlIGFsdGl0dWRlOiBmbG9hdAorICAgIEBp
dmFyIHNpemU6IHNpemUgb2YgdGhlIHNwaGVyZQorICAgIEB0eXBlIHNpemU6IGZsb2F0CisgICAg
QGl2YXIgaG9yaXpvbnRhbF9wcmVjaXNpb246IGhvcml6b250YWwgcHJlY2lzaW9uCisgICAgQHR5
cGUgaG9yaXpvbnRhbF9wcmVjaXNpb246IGZsb2F0CisgICAgQGl2YXIgdmVydGljYWxfcHJlY2lz
aW9uOiB2ZXJ0aWNhbCBwcmVjaXNpb24KKyAgICBAdHlwZSB2ZXJ0aWNhbF9wcmVjaXNpb246IGZs
b2F0CisgICAgQHNlZTogUkZDIDE4NzYiIiIKKworICAgIF9fc2xvdHNfXyA9IFsnbGF0aXR1ZGUn
LCAnbG9uZ2l0dWRlJywgJ2FsdGl0dWRlJywgJ3NpemUnLAorICAgICAgICAgICAgICAgICAnaG9y
aXpvbnRhbF9wcmVjaXNpb24nLCAndmVydGljYWxfcHJlY2lzaW9uJ10KKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCByZGNsYXNzLCByZHR5cGUsIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFsdGl0dWRl
LAorICAgICAgICAgICAgICAgICBzaXplPTEuMCwgaHByZWM9MTAwMDAuMCwgdnByZWM9MTAuMCk6
CisgICAgICAgICIiIkluaXRpYWxpemUgYSBMT0MgcmVjb3JkIGluc3RhbmNlLgorCisgICAgICAg
IFRoZSBwYXJhbWV0ZXJzIEl7bGF0aXR1ZGV9IGFuZCBJe2xvbmdpdHVkZX0gbWF5IGJlIGVpdGhl
ciBhIDQtdHVwbGUKKyAgICAgICAgb2YgaW50ZWdlcnMgc3BlY2lmeWluZyAoZGVncmVlcywgbWlu
dXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzKSwKKyAgICAgICAgb3IgdGhleSBtYXkgYmUgZmxv
YXRpbmcgcG9pbnQgdmFsdWVzIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZgorICAgICAgICBkZWdy
ZWVzLiAgVGhlIG90aGVyIHBhcmFtZXRlcnMgYXJlIGZsb2F0cy4iIiIKKworICAgICAgICBzdXBl
cihMT0MsIHNlbGYpLl9faW5pdF9fKHJkY2xhc3MsIHJkdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShsYXRpdHVkZSwgaW50KSBvciBpc2luc3RhbmNlKGxhdGl0dWRlLCBsb25nKToKKyAgICAg
ICAgICAgIGxhdGl0dWRlID0gZmxvYXQobGF0aXR1ZGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
bGF0aXR1ZGUsIGZsb2F0KToKKyAgICAgICAgICAgIGxhdGl0dWRlID0gX2Zsb2F0X3RvX3R1cGxl
KGxhdGl0dWRlKQorICAgICAgICBzZWxmLmxhdGl0dWRlID0gbGF0aXR1ZGUKKyAgICAgICAgaWYg
aXNpbnN0YW5jZShsb25naXR1ZGUsIGludCkgb3IgaXNpbnN0YW5jZShsb25naXR1ZGUsIGxvbmcp
OgorICAgICAgICAgICAgbG9uZ2l0dWRlID0gZmxvYXQobG9uZ2l0dWRlKQorICAgICAgICBpZiBp
c2luc3RhbmNlKGxvbmdpdHVkZSwgZmxvYXQpOgorICAgICAgICAgICAgbG9uZ2l0dWRlID0gX2Zs
b2F0X3RvX3R1cGxlKGxvbmdpdHVkZSkKKyAgICAgICAgc2VsZi5sb25naXR1ZGUgPSBsb25naXR1
ZGUKKyAgICAgICAgc2VsZi5hbHRpdHVkZSA9IGZsb2F0KGFsdGl0dWRlKQorICAgICAgICBzZWxm
LnNpemUgPSBmbG9hdChzaXplKQorICAgICAgICBzZWxmLmhvcml6b250YWxfcHJlY2lzaW9uID0g
ZmxvYXQoaHByZWMpCisgICAgICAgIHNlbGYudmVydGljYWxfcHJlY2lzaW9uID0gZmxvYXQodnBy
ZWMpCisKKyAgICBkZWYgdG9fdGV4dChzZWxmLCBvcmlnaW49Tm9uZSwgcmVsYXRpdml6ZT1UcnVl
LCAqKmt3KToKKyAgICAgICAgaWYgc2VsZi5sYXRpdHVkZVswXSA+IDA6CisgICAgICAgICAgICBs
YXRfaGVtaXNwaGVyZSA9ICdOJworICAgICAgICAgICAgbGF0X2RlZ3JlZXMgPSBzZWxmLmxhdGl0
dWRlWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYXRfaGVtaXNwaGVyZSA9ICdTJwor
ICAgICAgICAgICAgbGF0X2RlZ3JlZXMgPSAtMSAqIHNlbGYubGF0aXR1ZGVbMF0KKyAgICAgICAg
aWYgc2VsZi5sb25naXR1ZGVbMF0gPiAwOgorICAgICAgICAgICAgbG9uZ19oZW1pc3BoZXJlID0g
J0UnCisgICAgICAgICAgICBsb25nX2RlZ3JlZXMgPSBzZWxmLmxvbmdpdHVkZVswXQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgbG9uZ19oZW1pc3BoZXJlID0gJ1cnCisgICAgICAgICAgICBs
b25nX2RlZ3JlZXMgPSAtMSAqIHNlbGYubG9uZ2l0dWRlWzBdCisgICAgICAgIHRleHQgPSAiJWQg
JWQgJWQuJTAzZCAlcyAlZCAlZCAlZC4lMDNkICVzICUwLjJmbSIgJSAoCisgICAgICAgICAgICBs
YXRfZGVncmVlcywgc2VsZi5sYXRpdHVkZVsxXSwgc2VsZi5sYXRpdHVkZVsyXSwgc2VsZi5sYXRp
dHVkZVszXSwKKyAgICAgICAgICAgIGxhdF9oZW1pc3BoZXJlLCBsb25nX2RlZ3JlZXMsIHNlbGYu
bG9uZ2l0dWRlWzFdLCBzZWxmLmxvbmdpdHVkZVsyXSwKKyAgICAgICAgICAgIHNlbGYubG9uZ2l0
dWRlWzNdLCBsb25nX2hlbWlzcGhlcmUsIHNlbGYuYWx0aXR1ZGUgLyAxMDAuMAorICAgICAgICAg
ICAgKQorCisgICAgICAgIGlmIHNlbGYuc2l6ZSAhPSAxLjAgb3Igc2VsZi5ob3Jpem9udGFsX3By
ZWNpc2lvbiAhPSAxMDAwMC4wIG9yIFwKKyAgICAgICAgICAgc2VsZi52ZXJ0aWNhbF9wcmVjaXNp
b24gIT0gMTAuMDoKKyAgICAgICAgICAgIHRleHQgKz0gIiAlMC4yZm0gJTAuMmZtICUwLjJmbSIg
JSAoCisgICAgICAgICAgICAgICAgc2VsZi5zaXplIC8gMTAwLjAsIHNlbGYuaG9yaXpvbnRhbF9w
cmVjaXNpb24gLyAxMDAuMCwKKyAgICAgICAgICAgICAgICBzZWxmLnZlcnRpY2FsX3ByZWNpc2lv
biAvIDEwMC4wCisgICAgICAgICAgICApCisgICAgICAgIHJldHVybiB0ZXh0CisKKyAgICBkZWYg
ZnJvbV90ZXh0KGNscywgcmRjbGFzcywgcmR0eXBlLCB0b2ssIG9yaWdpbiA9IE5vbmUsIHJlbGF0
aXZpemUgPSBUcnVlKToKKyAgICAgICAgbGF0aXR1ZGUgPSBbMCwgMCwgMCwgMF0KKyAgICAgICAg
bG9uZ2l0dWRlID0gWzAsIDAsIDAsIDBdCisgICAgICAgIHNpemUgPSAxLjAKKyAgICAgICAgaHBy
ZWMgPSAxMDAwMC4wCisgICAgICAgIHZwcmVjID0gMTAuMAorCisgICAgICAgIGxhdGl0dWRlWzBd
ID0gdG9rLmdldF9pbnQoKQorICAgICAgICB0ID0gdG9rLmdldF9zdHJpbmcoKQorICAgICAgICBp
ZiB0LmlzZGlnaXQoKToKKyAgICAgICAgICAgIGxhdGl0dWRlWzFdID0gaW50KHQpCisgICAgICAg
ICAgICB0ID0gdG9rLmdldF9zdHJpbmcoKQorICAgICAgICAgICAgaWYgJy4nIGluIHQ6CisgICAg
ICAgICAgICAgICAgKHNlY29uZHMsIG1pbGxpc2Vjb25kcykgPSB0LnNwbGl0KCcuJykKKyAgICAg
ICAgICAgICAgICBpZiBub3Qgc2Vjb25kcy5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgICAg
IHJhaXNlIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3IoJ2JhZCBsYXRpdHVkZSBzZWNvbmRzIHZh
bHVlJykKKyAgICAgICAgICAgICAgICBsYXRpdHVkZVsyXSA9IGludChzZWNvbmRzKQorICAgICAg
ICAgICAgICAgIGlmIGxhdGl0dWRlWzJdID49IDYwOgorICAgICAgICAgICAgICAgICAgICByYWlz
ZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKCdsYXRpdHVkZSBzZWNvbmRzID49IDYwJykKKyAg
ICAgICAgICAgICAgICBsID0gbGVuKG1pbGxpc2Vjb25kcykKKyAgICAgICAgICAgICAgICBpZiBs
ID09IDAgb3IgbCA+IDMgb3Igbm90IG1pbGxpc2Vjb25kcy5pc2RpZ2l0KCk6CisgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uU3ludGF4RXJyb3IoJ2JhZCBsYXRpdHVkZSBt
aWxsaXNlY29uZHMgdmFsdWUnKQorICAgICAgICAgICAgICAgIGlmIGwgPT0gMToKKyAgICAgICAg
ICAgICAgICAgICAgbSA9IDEwMAorICAgICAgICAgICAgICAgIGVsaWYgbCA9PSAyOgorICAgICAg
ICAgICAgICAgICAgICBtID0gMTAKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgICAgICBtID0gMQorICAgICAgICAgICAgICAgIGxhdGl0dWRlWzNdID0gbSAqIGludChtaWxs
aXNlY29uZHMpCisgICAgICAgICAgICAgICAgdCA9IHRvay5nZXRfc3RyaW5nKCkKKyAgICAgICAg
ICAgIGVsaWYgdC5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgbGF0aXR1ZGVbMl0gPSBpbnQo
dCkKKyAgICAgICAgICAgICAgICB0ID0gdG9rLmdldF9zdHJpbmcoKQorICAgICAgICBpZiB0ID09
ICdTJzoKKyAgICAgICAgICAgIGxhdGl0dWRlWzBdICo9IC0xCisgICAgICAgIGVsaWYgdCAhPSAn
Tic6CisgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKCdiYWQgbGF0
aXR1ZGUgaGVtaXNwaGVyZSB2YWx1ZScpCisKKyAgICAgICAgbG9uZ2l0dWRlWzBdID0gdG9rLmdl
dF9pbnQoKQorICAgICAgICB0ID0gdG9rLmdldF9zdHJpbmcoKQorICAgICAgICBpZiB0LmlzZGln
aXQoKToKKyAgICAgICAgICAgIGxvbmdpdHVkZVsxXSA9IGludCh0KQorICAgICAgICAgICAgdCA9
IHRvay5nZXRfc3RyaW5nKCkKKyAgICAgICAgICAgIGlmICcuJyBpbiB0OgorICAgICAgICAgICAg
ICAgIChzZWNvbmRzLCBtaWxsaXNlY29uZHMpID0gdC5zcGxpdCgnLicpCisgICAgICAgICAgICAg
ICAgaWYgbm90IHNlY29uZHMuaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBk
bnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKCdiYWQgbG9uZ2l0dWRlIHNlY29uZHMgdmFsdWUnKQor
ICAgICAgICAgICAgICAgIGxvbmdpdHVkZVsyXSA9IGludChzZWNvbmRzKQorICAgICAgICAgICAg
ICAgIGlmIGxvbmdpdHVkZVsyXSA+PSA2MDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZG5z
LmV4Y2VwdGlvbi5TeW50YXhFcnJvcignbG9uZ2l0dWRlIHNlY29uZHMgPj0gNjAnKQorICAgICAg
ICAgICAgICAgIGwgPSBsZW4obWlsbGlzZWNvbmRzKQorICAgICAgICAgICAgICAgIGlmIGwgPT0g
MCBvciBsID4gMyBvciBub3QgbWlsbGlzZWNvbmRzLmlzZGlnaXQoKToKKyAgICAgICAgICAgICAg
ICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcignYmFkIGxvbmdpdHVkZSBtaWxs
aXNlY29uZHMgdmFsdWUnKQorICAgICAgICAgICAgICAgIGlmIGwgPT0gMToKKyAgICAgICAgICAg
ICAgICAgICAgbSA9IDEwMAorICAgICAgICAgICAgICAgIGVsaWYgbCA9PSAyOgorICAgICAgICAg
ICAgICAgICAgICBtID0gMTAKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBtID0gMQorICAgICAgICAgICAgICAgIGxvbmdpdHVkZVszXSA9IG0gKiBpbnQobWlsbGlz
ZWNvbmRzKQorICAgICAgICAgICAgICAgIHQgPSB0b2suZ2V0X3N0cmluZygpCisgICAgICAgICAg
ICBlbGlmIHQuaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgIGxvbmdpdHVkZVsyXSA9IGludCh0
KQorICAgICAgICAgICAgICAgIHQgPSB0b2suZ2V0X3N0cmluZygpCisgICAgICAgIGlmIHQgPT0g
J1cnOgorICAgICAgICAgICAgbG9uZ2l0dWRlWzBdICo9IC0xCisgICAgICAgIGVsaWYgdCAhPSAn
RSc6CisgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKCdiYWQgbG9u
Z2l0dWRlIGhlbWlzcGhlcmUgdmFsdWUnKQorCisgICAgICAgIHQgPSB0b2suZ2V0X3N0cmluZygp
CisgICAgICAgIGlmIHRbLTFdID09ICdtJzoKKyAgICAgICAgICAgIHQgPSB0WzAgOiAtMV0KKyAg
ICAgICAgYWx0aXR1ZGUgPSBmbG9hdCh0KSAqIDEwMC4wCSMgbSAtPiBjbQorCisgICAgICAgIHRv
a2VuID0gdG9rLmdldCgpLnVuZXNjYXBlKCkKKyAgICAgICAgaWYgbm90IHRva2VuLmlzX2VvbF9v
cl9lb2YoKToKKyAgICAgICAgICAgIHZhbHVlID0gdG9rZW4udmFsdWUKKyAgICAgICAgICAgIGlm
IHZhbHVlWy0xXSA9PSAnbSc6CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVswIDogLTFd
CisgICAgICAgICAgICBzaXplID0gZmxvYXQodmFsdWUpICogMTAwLjAJIyBtIC0+IGNtCisgICAg
ICAgICAgICB0b2tlbiA9IHRvay5nZXQoKS51bmVzY2FwZSgpCisgICAgICAgICAgICBpZiBub3Qg
dG9rZW4uaXNfZW9sX29yX2VvZigpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gdG9rZW4udmFs
dWUKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZVstMV0gPT0gJ20nOgorICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHZhbHVlWzAgOiAtMV0KKyAgICAgICAgICAgICAgICBocHJlYyA9IGZsb2F0
KHZhbHVlKSAqIDEwMC4wCSMgbSAtPiBjbQorICAgICAgICAgICAgICAgIHRva2VuID0gdG9rLmdl
dCgpLnVuZXNjYXBlKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgdG9rZW4uaXNfZW9sX29yX2Vv
ZigpOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLnZhbHVlCisgICAgICAgICAg
ICAgICAgICAgIGlmIHZhbHVlWy0xXSA9PSAnbSc6CisgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IHZhbHVlWzAgOiAtMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZwcmVjID0gZmxv
YXQodmFsdWUpICogMTAwLjAJIyBtIC0+IGNtCisgICAgICAgICAgICAgICAgICAgICAgICB0b2su
Z2V0X2VvbCgpCisKKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5cGUsIGxhdGl0dWRl
LCBsb25naXR1ZGUsIGFsdGl0dWRlLAorICAgICAgICAgICAgICAgICAgIHNpemUsIGhwcmVjLCB2
cHJlYykKKworICAgIGZyb21fdGV4dCA9IGNsYXNzbWV0aG9kKGZyb21fdGV4dCkKKworICAgIGRl
ZiB0b193aXJlKHNlbGYsIGZpbGUsIGNvbXByZXNzID0gTm9uZSwgb3JpZ2luID0gTm9uZSk6Cisg
ICAgICAgIGlmIHNlbGYubGF0aXR1ZGVbMF0gPCAwOgorICAgICAgICAgICAgc2lnbiA9IC0xCisg
ICAgICAgICAgICBkZWdyZWVzID0gbG9uZygtMSAqIHNlbGYubGF0aXR1ZGVbMF0pCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBzaWduID0gMQorICAgICAgICAgICAgZGVncmVlcyA9IGxvbmco
c2VsZi5sYXRpdHVkZVswXSkKKyAgICAgICAgbWlsbGlzZWNvbmRzID0gKGRlZ3JlZXMgKiAzNjAw
MDAwICsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGF0aXR1ZGVbMV0gKiA2MDAwMCAr
CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhdGl0dWRlWzJdICogMTAwMCArCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLmxhdGl0dWRlWzNdKSAqIHNpZ24KKyAgICAgICAgbGF0
aXR1ZGUgPSAweDgwMDAwMDAwTCArIG1pbGxpc2Vjb25kcworICAgICAgICBpZiBzZWxmLmxvbmdp
dHVkZVswXSA8IDA6CisgICAgICAgICAgICBzaWduID0gLTEKKyAgICAgICAgICAgIGRlZ3JlZXMg
PSBsb25nKC0xICogc2VsZi5sb25naXR1ZGVbMF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBzaWduID0gMQorICAgICAgICAgICAgZGVncmVlcyA9IGxvbmcoc2VsZi5sb25naXR1ZGVbMF0p
CisgICAgICAgIG1pbGxpc2Vjb25kcyA9IChkZWdyZWVzICogMzYwMDAwMCArCisgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLmxvbmdpdHVkZVsxXSAqIDYwMDAwICsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYubG9uZ2l0dWRlWzJdICogMTAwMCArCisgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLmxvbmdpdHVkZVszXSkgKiBzaWduCisgICAgICAgIGxvbmdpdHVkZSA9IDB4ODAw
MDAwMDBMICsgbWlsbGlzZWNvbmRzCisgICAgICAgIGFsdGl0dWRlID0gbG9uZyhzZWxmLmFsdGl0
dWRlKSArIDEwMDAwMDAwTAorICAgICAgICBzaXplID0gX2VuY29kZV9zaXplKHNlbGYuc2l6ZSwg
InNpemUiKQorICAgICAgICBocHJlYyA9IF9lbmNvZGVfc2l6ZShzZWxmLmhvcml6b250YWxfcHJl
Y2lzaW9uLCAiaG9yaXpvbnRhbCBwcmVjaXNpb24iKQorICAgICAgICB2cHJlYyA9IF9lbmNvZGVf
c2l6ZShzZWxmLnZlcnRpY2FsX3ByZWNpc2lvbiwgInZlcnRpY2FsIHByZWNpc2lvbiIpCisgICAg
ICAgIHdpcmUgPSBzdHJ1Y3QucGFjaygiIUJCQkJJSUkiLCAwLCBzaXplLCBocHJlYywgdnByZWMs
IGxhdGl0dWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ2l0dWRlLCBhbHRpdHVk
ZSkKKyAgICAgICAgZmlsZS53cml0ZSh3aXJlKQorCisgICAgZGVmIGZyb21fd2lyZShjbHMsIHJk
Y2xhc3MsIHJkdHlwZSwgd2lyZSwgY3VycmVudCwgcmRsZW4sIG9yaWdpbiA9IE5vbmUpOgorICAg
ICAgICAodmVyc2lvbiwgc2l6ZSwgaHByZWMsIHZwcmVjLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBh
bHRpdHVkZSkgPSBcCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QudW5wYWNrKCIhQkJCQklJSSIs
IHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyByZGxlbl0pCisgICAgICAgIGlmIGxhdGl0dWRlID4g
MHg4MDAwMDAwMEw6CisgICAgICAgICAgICBsYXRpdHVkZSA9IGZsb2F0KGxhdGl0dWRlIC0gMHg4
MDAwMDAwMEwpIC8gMzYwMDAwMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGF0aXR1ZGUg
PSAtMSAqIGZsb2F0KDB4ODAwMDAwMDBMIC0gbGF0aXR1ZGUpIC8gMzYwMDAwMAorICAgICAgICBp
ZiBsYXRpdHVkZSA8IC05MC4wIG9yIGxhdGl0dWRlID4gOTAuMDoKKyAgICAgICAgICAgIHJhaXNl
IGRucy5leGNlcHRpb24uRm9ybUVycm9yKCJiYWQgbGF0aXR1ZGUiKQorICAgICAgICBpZiBsb25n
aXR1ZGUgPiAweDgwMDAwMDAwTDoKKyAgICAgICAgICAgIGxvbmdpdHVkZSA9IGZsb2F0KGxvbmdp
dHVkZSAtIDB4ODAwMDAwMDBMKSAvIDM2MDAwMDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGxvbmdpdHVkZSA9IC0xICogZmxvYXQoMHg4MDAwMDAwMEwgLSBsb25naXR1ZGUpIC8gMzYwMDAw
MAorICAgICAgICBpZiBsb25naXR1ZGUgPCAtMTgwLjAgb3IgbG9uZ2l0dWRlID4gMTgwLjA6Cisg
ICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcigiYmFkIGxvbmdpdHVkZSIp
CisgICAgICAgIGFsdGl0dWRlID0gZmxvYXQoYWx0aXR1ZGUpIC0gMTAwMDAwMDAuMAorICAgICAg
ICBzaXplID0gX2RlY29kZV9zaXplKHNpemUsICJzaXplIikKKyAgICAgICAgaHByZWMgPSBfZGVj
b2RlX3NpemUoaHByZWMsICJob3Jpem9udGFsIHByZWNpc2lvbiIpCisgICAgICAgIHZwcmVjID0g
X2RlY29kZV9zaXplKHZwcmVjLCAidmVydGljYWwgcHJlY2lzaW9uIikKKyAgICAgICAgcmV0dXJu
IGNscyhyZGNsYXNzLCByZHR5cGUsIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFsdGl0dWRlLAorICAg
ICAgICAgICAgICAgICAgIHNpemUsIGhwcmVjLCB2cHJlYykKKworICAgIGZyb21fd2lyZSA9IGNs
YXNzbWV0aG9kKGZyb21fd2lyZSkKKworICAgIGRlZiBfY21wKHNlbGYsIG90aGVyKToKKyAgICAg
ICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHNlbGYudG9fd2lyZShmKQorICAg
ICAgICB3aXJlMSA9IGYuZ2V0dmFsdWUoKQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgZi50
cnVuY2F0ZSgpCisgICAgICAgIG90aGVyLnRvX3dpcmUoZikKKyAgICAgICAgd2lyZTIgPSBmLmdl
dHZhbHVlKCkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgcmV0dXJuIGNtcCh3aXJlMSwg
d2lyZTIpCisKKyAgICBkZWYgX2dldF9mbG9hdF9sYXRpdHVkZShzZWxmKToKKyAgICAgICAgcmV0
dXJuIF90dXBsZV90b19mbG9hdChzZWxmLmxhdGl0dWRlKQorCisgICAgZGVmIF9zZXRfZmxvYXRf
bGF0aXR1ZGUoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLmxhdGl0dWRlID0gX2Zsb2F0X3Rv
X3R1cGxlKHZhbHVlKQorCisgICAgZmxvYXRfbGF0aXR1ZGUgPSBwcm9wZXJ0eShfZ2V0X2Zsb2F0
X2xhdGl0dWRlLCBfc2V0X2Zsb2F0X2xhdGl0dWRlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9jPSJsYXRpdHVkZSBhcyBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIikKKworICAgIGRl
ZiBfZ2V0X2Zsb2F0X2xvbmdpdHVkZShzZWxmKToKKyAgICAgICAgcmV0dXJuIF90dXBsZV90b19m
bG9hdChzZWxmLmxvbmdpdHVkZSkKKworICAgIGRlZiBfc2V0X2Zsb2F0X2xvbmdpdHVkZShzZWxm
LCB2YWx1ZSk6CisgICAgICAgIHNlbGYubG9uZ2l0dWRlID0gX2Zsb2F0X3RvX3R1cGxlKHZhbHVl
KQorCisgICAgZmxvYXRfbG9uZ2l0dWRlID0gcHJvcGVydHkoX2dldF9mbG9hdF9sb25naXR1ZGUs
IF9zZXRfZmxvYXRfbG9uZ2l0dWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv
Yz0ibG9uZ2l0dWRlIGFzIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUiKQpJbmRleDogVG9vbHMvV2Vi
UGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvTVgucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvTVgucHkJ
KHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5
cGVzL0FOWS9NWC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAwNywgMjAwOSwgMjAxMCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24g
dG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0
cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlz
IGhlcmVieSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgor
IworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJ
TVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJ
TkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MuIElOIE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lB
TCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1B
R0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJP
RklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Ig
T1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9O
IFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitpbXBvcnQg
ZG5zLnJkdHlwZXMubXhiYXNlCisKK2NsYXNzIE1YKGRucy5yZHR5cGVzLm14YmFzZS5NWEJhc2Up
OgorICAgICIiIk1YIHJlY29yZCIiIgorICAgIHBhc3MKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBs
YXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL05TLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL05TLnB5CShyZXZpc2lv
biAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkv
TlMucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwg
Y29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9j
dW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkg
Z3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg
dGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhF
IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBX
QVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBO
TyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVD
VCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBX
SEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdI
RVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRP
UlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI
RSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworaW1wb3J0IGRucy5yZHR5
cGVzLm5zYmFzZQorCitjbGFzcyBOUyhkbnMucmR0eXBlcy5uc2Jhc2UuTlNCYXNlKToKKyAgICAi
IiJOUyByZWNvcmQiIiIKKyAgICBwYXNzCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJk
X3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9OU0VDMy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQ
YWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9OU0VDMy5weQkocmV2aXNpb24g
MCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL05T
RUMzLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwNywgMjAwOSwgMjAxMCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNl
LCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBk
b2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVi
eSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu
ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBU
SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxM
IFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxM
IElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElO
IE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElS
RUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisj
IFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywg
V0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIg
VE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg
VEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitpbXBvcnQgYmFzZTY0
CitpbXBvcnQgY1N0cmluZ0lPCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgc3RydWN0CisKK2ltcG9y
dCBkbnMuZXhjZXB0aW9uCitpbXBvcnQgZG5zLnJkYXRhCitpbXBvcnQgZG5zLnJkYXRhdHlwZQor
CitiMzJfaGV4X3RvX25vcm1hbCA9IHN0cmluZy5tYWtldHJhbnMoJzAxMjM0NTY3ODlBQkNERUZH
SElKS0xNTk9QUVJTVFVWJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjcnKQorYjMyX25vcm1hbF90b19oZXggPSBz
dHJpbmcubWFrZXRyYW5zKCdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjIzNDU2NycsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAxMjM0NTY3ODlBQkNERUZHSElKS0xN
Tk9QUVJTVFVWJykKKworIyBoYXNoIGFsZ29yaXRobSBjb25zdGFudHMKK1NIQTEgPSAxCisKKyMg
ZmxhZyBjb25zdGFudHMKK09QVE9VVCA9IDEKKworY2xhc3MgTlNFQzMoZG5zLnJkYXRhLlJkYXRh
KToKKyAgICAiIiJOU0VDMyByZWNvcmQKKworICAgIEBpdmFyIGFsZ29yaXRobTogdGhlIGhhc2gg
YWxnb3JpdGhtIG51bWJlcgorICAgIEB0eXBlIGFsZ29yaXRobTogaW50CisgICAgQGl2YXIgZmxh
Z3M6IHRoZSBmbGFncworICAgIEB0eXBlIGZsYWdzOiBpbnQKKyAgICBAaXZhciBpdGVyYXRpb25z
OiB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKKyAgICBAdHlwZSBpdGVyYXRpb25zOiBpbnQKKyAg
ICBAaXZhciBzYWx0OiB0aGUgc2FsdAorICAgIEB0eXBlIHNhbHQ6IHN0cmluZworICAgIEBpdmFy
IG5leHQ6IHRoZSBuZXh0IG5hbWUgaGFzaAorICAgIEB0eXBlIG5leHQ6IHN0cmluZworICAgIEBp
dmFyIHdpbmRvd3M6IHRoZSB3aW5kb3dlZCBiaXRtYXAgbGlzdAorICAgIEB0eXBlIHdpbmRvd3M6
IGxpc3Qgb2YgKHdpbmRvdyBudW1iZXIsIHN0cmluZykgdHVwbGVzIiIiCisKKyAgICBfX3Nsb3Rz
X18gPSBbJ2FsZ29yaXRobScsICdmbGFncycsICdpdGVyYXRpb25zJywgJ3NhbHQnLCAnbmV4dCcs
ICd3aW5kb3dzJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZGNsYXNzLCByZHR5cGUsIGFs
Z29yaXRobSwgZmxhZ3MsIGl0ZXJhdGlvbnMsIHNhbHQsCisgICAgICAgICAgICAgICAgIG5leHQs
IHdpbmRvd3MpOgorICAgICAgICBzdXBlcihOU0VDMywgc2VsZikuX19pbml0X18ocmRjbGFzcywg
cmR0eXBlKQorICAgICAgICBzZWxmLmFsZ29yaXRobSA9IGFsZ29yaXRobQorICAgICAgICBzZWxm
LmZsYWdzID0gZmxhZ3MKKyAgICAgICAgc2VsZi5pdGVyYXRpb25zID0gaXRlcmF0aW9ucworICAg
ICAgICBzZWxmLnNhbHQgPSBzYWx0CisgICAgICAgIHNlbGYubmV4dCA9IG5leHQKKyAgICAgICAg
c2VsZi53aW5kb3dzID0gd2luZG93cworCisgICAgZGVmIHRvX3RleHQoc2VsZiwgb3JpZ2luPU5v
bmUsIHJlbGF0aXZpemU9VHJ1ZSwgKiprdyk6CisgICAgICAgIG5leHQgPSBiYXNlNjQuYjMyZW5j
b2RlKHNlbGYubmV4dCkudHJhbnNsYXRlKGIzMl9ub3JtYWxfdG9faGV4KS5sb3dlcigpCisgICAg
ICAgIGlmIHNlbGYuc2FsdCA9PSAnJzoKKyAgICAgICAgICAgIHNhbHQgPSAnLScKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHNhbHQgPSBzZWxmLnNhbHQuZW5jb2RlKCdoZXgtY29kZWMnKQor
ICAgICAgICB0ZXh0ID0gJycKKyAgICAgICAgZm9yICh3aW5kb3csIGJpdG1hcCkgaW4gc2VsZi53
aW5kb3dzOgorICAgICAgICAgICAgYml0cyA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFu
Z2UoMCwgbGVuKGJpdG1hcCkpOgorICAgICAgICAgICAgICAgIGJ5dGUgPSBvcmQoYml0bWFwW2ld
KQorICAgICAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZSgwLCA4KToKKyAgICAgICAgICAgICAg
ICAgICAgaWYgYnl0ZSAmICgweDgwID4+IGopOgorICAgICAgICAgICAgICAgICAgICAgICAgYml0
cy5hcHBlbmQoZG5zLnJkYXRhdHlwZS50b190ZXh0KHdpbmRvdyAqIDI1NiArIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICogOCAr
IGopKQorICAgICAgICAgICAgdGV4dCArPSAoJyAnICsgJyAnLmpvaW4oYml0cykpCisgICAgICAg
IHJldHVybiAnJXUgJXUgJXUgJXMgJXMlcycgJSAoc2VsZi5hbGdvcml0aG0sIHNlbGYuZmxhZ3Ms
IHNlbGYuaXRlcmF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
YWx0LCBuZXh0LCB0ZXh0KQorCisgICAgZGVmIGZyb21fdGV4dChjbHMsIHJkY2xhc3MsIHJkdHlw
ZSwgdG9rLCBvcmlnaW4gPSBOb25lLCByZWxhdGl2aXplID0gVHJ1ZSk6CisgICAgICAgIGFsZ29y
aXRobSA9IHRvay5nZXRfdWludDgoKQorICAgICAgICBmbGFncyA9IHRvay5nZXRfdWludDgoKQor
ICAgICAgICBpdGVyYXRpb25zID0gdG9rLmdldF91aW50MTYoKQorICAgICAgICBzYWx0ID0gdG9r
LmdldF9zdHJpbmcoKQorICAgICAgICBpZiBzYWx0ID09ICctJzoKKyAgICAgICAgICAgIHNhbHQg
PSAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2FsdCA9IHNhbHQuZGVjb2RlKCdoZXgt
Y29kZWMnKQorICAgICAgICBuZXh0ID0gdG9rLmdldF9zdHJpbmcoKS51cHBlcigpLnRyYW5zbGF0
ZShiMzJfaGV4X3RvX25vcm1hbCkKKyAgICAgICAgbmV4dCA9IGJhc2U2NC5iMzJkZWNvZGUobmV4
dCkKKyAgICAgICAgcmR0eXBlcyA9IFtdCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0
b2tlbiA9IHRvay5nZXQoKS51bmVzY2FwZSgpCisgICAgICAgICAgICBpZiB0b2tlbi5pc19lb2xf
b3JfZW9mKCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIG5yZHR5cGUgPSBk
bnMucmRhdGF0eXBlLmZyb21fdGV4dCh0b2tlbi52YWx1ZSkKKyAgICAgICAgICAgIGlmIG5yZHR5
cGUgPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9y
KCJOU0VDMyB3aXRoIGJpdCAwIikKKyAgICAgICAgICAgIGlmIG5yZHR5cGUgPiA2NTUzNToKKyAg
ICAgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKCJOU0VDMyB3aXRo
IGJpdCA+IDY1NTM1IikKKyAgICAgICAgICAgIHJkdHlwZXMuYXBwZW5kKG5yZHR5cGUpCisgICAg
ICAgIHJkdHlwZXMuc29ydCgpCisgICAgICAgIHdpbmRvdyA9IDAKKyAgICAgICAgb2N0ZXRzID0g
MAorICAgICAgICBwcmlvcl9yZHR5cGUgPSAwCisgICAgICAgIGJpdG1hcCA9IFsnXDAnXSAqIDMy
CisgICAgICAgIHdpbmRvd3MgPSBbXQorICAgICAgICBmb3IgbnJkdHlwZSBpbiByZHR5cGVzOgor
ICAgICAgICAgICAgaWYgbnJkdHlwZSA9PSBwcmlvcl9yZHR5cGU6CisgICAgICAgICAgICAgICAg
Y29udGludWUKKyAgICAgICAgICAgIHByaW9yX3JkdHlwZSA9IG5yZHR5cGUKKyAgICAgICAgICAg
IG5ld193aW5kb3cgPSBucmR0eXBlIC8vIDI1NgorICAgICAgICAgICAgaWYgbmV3X3dpbmRvdyAh
PSB3aW5kb3c6CisgICAgICAgICAgICAgICAgd2luZG93cy5hcHBlbmQoKHdpbmRvdywgJycuam9p
bihiaXRtYXBbMDpvY3RldHNdKSkpCisgICAgICAgICAgICAgICAgYml0bWFwID0gWydcMCddICog
MzIKKyAgICAgICAgICAgICAgICB3aW5kb3cgPSBuZXdfd2luZG93CisgICAgICAgICAgICBvZmZz
ZXQgPSBucmR0eXBlICUgMjU2CisgICAgICAgICAgICBieXRlID0gb2Zmc2V0IC8gOAorICAgICAg
ICAgICAgYml0ID0gb2Zmc2V0ICUgOAorICAgICAgICAgICAgb2N0ZXRzID0gYnl0ZSArIDEKKyAg
ICAgICAgICAgIGJpdG1hcFtieXRlXSA9IGNocihvcmQoYml0bWFwW2J5dGVdKSB8ICgweDgwID4+
IGJpdCkpCisgICAgICAgIHdpbmRvd3MuYXBwZW5kKCh3aW5kb3csICcnLmpvaW4oYml0bWFwWzA6
b2N0ZXRzXSkpKQorICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlwZSwgYWxnb3JpdGht
LCBmbGFncywgaXRlcmF0aW9ucywgc2FsdCwgbmV4dCwgd2luZG93cykKKworICAgIGZyb21fdGV4
dCA9IGNsYXNzbWV0aG9kKGZyb21fdGV4dCkKKworICAgIGRlZiB0b193aXJlKHNlbGYsIGZpbGUs
IGNvbXByZXNzID0gTm9uZSwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIGwgPSBsZW4oc2VsZi5z
YWx0KQorICAgICAgICBmaWxlLndyaXRlKHN0cnVjdC5wYWNrKCIhQkJIQiIsIHNlbGYuYWxnb3Jp
dGhtLCBzZWxmLmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaXRl
cmF0aW9ucywgbCkpCisgICAgICAgIGZpbGUud3JpdGUoc2VsZi5zYWx0KQorICAgICAgICBsID0g
bGVuKHNlbGYubmV4dCkKKyAgICAgICAgZmlsZS53cml0ZShzdHJ1Y3QucGFjaygiIUIiLCBsKSkK
KyAgICAgICAgZmlsZS53cml0ZShzZWxmLm5leHQpCisgICAgICAgIGZvciAod2luZG93LCBiaXRt
YXApIGluIHNlbGYud2luZG93czoKKyAgICAgICAgICAgIGZpbGUud3JpdGUoY2hyKHdpbmRvdykp
CisgICAgICAgICAgICBmaWxlLndyaXRlKGNocihsZW4oYml0bWFwKSkpCisgICAgICAgICAgICBm
aWxlLndyaXRlKGJpdG1hcCkKKworICAgIGRlZiBmcm9tX3dpcmUoY2xzLCByZGNsYXNzLCByZHR5
cGUsIHdpcmUsIGN1cnJlbnQsIHJkbGVuLCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAgKGFsZ29y
aXRobSwgZmxhZ3MsIGl0ZXJhdGlvbnMsIHNsZW4pID0gc3RydWN0LnVucGFjaygnIUJCSEInLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyA1XSkKKyAgICAgICAgY3VycmVudCArPSA1Cisg
ICAgICAgIHJkbGVuIC09IDUKKyAgICAgICAgc2FsdCA9IHdpcmVbY3VycmVudCA6IGN1cnJlbnQg
KyBzbGVuXQorICAgICAgICBjdXJyZW50ICs9IHNsZW4KKyAgICAgICAgcmRsZW4gLT0gc2xlbgor
ICAgICAgICAobmxlbiwgKSA9IHN0cnVjdC51bnBhY2soJyFCJywgd2lyZVtjdXJyZW50XSkKKyAg
ICAgICAgY3VycmVudCArPSAxCisgICAgICAgIHJkbGVuIC09IDEKKyAgICAgICAgbmV4dCA9IHdp
cmVbY3VycmVudCA6IGN1cnJlbnQgKyBubGVuXQorICAgICAgICBjdXJyZW50ICs9IG5sZW4KKyAg
ICAgICAgcmRsZW4gLT0gbmxlbgorICAgICAgICB3aW5kb3dzID0gW10KKyAgICAgICAgd2hpbGUg
cmRsZW4gPiAwOgorICAgICAgICAgICAgaWYgcmRsZW4gPCAzOgorICAgICAgICAgICAgICAgIHJh
aXNlIGRucy5leGNlcHRpb24uRm9ybUVycm9yKCJOU0VDMyB0b28gc2hvcnQiKQorICAgICAgICAg
ICAgd2luZG93ID0gb3JkKHdpcmVbY3VycmVudF0pCisgICAgICAgICAgICBvY3RldHMgPSBvcmQo
d2lyZVtjdXJyZW50ICsgMV0pCisgICAgICAgICAgICBpZiBvY3RldHMgPT0gMCBvciBvY3RldHMg
PiAzMjoKKyAgICAgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcigiYmFk
IE5TRUMzIG9jdGV0cyIpCisgICAgICAgICAgICBjdXJyZW50ICs9IDIKKyAgICAgICAgICAgIHJk
bGVuIC09IDIKKyAgICAgICAgICAgIGlmIHJkbGVuIDwgb2N0ZXRzOgorICAgICAgICAgICAgICAg
IHJhaXNlIGRucy5leGNlcHRpb24uRm9ybUVycm9yKCJiYWQgTlNFQzMgYml0bWFwIGxlbmd0aCIp
CisgICAgICAgICAgICBiaXRtYXAgPSB3aXJlW2N1cnJlbnQgOiBjdXJyZW50ICsgb2N0ZXRzXQor
ICAgICAgICAgICAgY3VycmVudCArPSBvY3RldHMKKyAgICAgICAgICAgIHJkbGVuIC09IG9jdGV0
cworICAgICAgICAgICAgd2luZG93cy5hcHBlbmQoKHdpbmRvdywgYml0bWFwKSkKKyAgICAgICAg
cmV0dXJuIGNscyhyZGNsYXNzLCByZHR5cGUsIGFsZ29yaXRobSwgZmxhZ3MsIGl0ZXJhdGlvbnMs
IHNhbHQsIG5leHQsIHdpbmRvd3MpCisKKyAgICBmcm9tX3dpcmUgPSBjbGFzc21ldGhvZChmcm9t
X3dpcmUpCisKKyAgICBkZWYgX2NtcChzZWxmLCBvdGhlcik6CisgICAgICAgIGIxID0gY1N0cmlu
Z0lPLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi50b193aXJlKGIxKQorICAgICAgICBiMiA9IGNT
dHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIG90aGVyLnRvX3dpcmUoYjIpCisgICAgICAgIHJl
dHVybiBjbXAoYjEuZ2V0dmFsdWUoKSwgYjIuZ2V0dmFsdWUoKSkKSW5kZXg6IFRvb2xzL1dlYlBh
Z2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL05TRUMzUEFSQU0ucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkv
TlNFQzNQQVJBTS5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRf
cGFydHkvZG5zL3JkdHlwZXMvQU5ZL05TRUMzUEFSQU0ucHkJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsODggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwg
SW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0
ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ug
d2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBh
cHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ
UyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRP
IFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExP
U1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENP
TlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQK
KyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJ
UyBTT0ZUV0FSRS4KKworaW1wb3J0IGNTdHJpbmdJTworaW1wb3J0IHN0cnVjdAorCitpbXBvcnQg
ZG5zLmV4Y2VwdGlvbgoraW1wb3J0IGRucy5yZGF0YQorCitjbGFzcyBOU0VDM1BBUkFNKGRucy5y
ZGF0YS5SZGF0YSk6CisgICAgIiIiTlNFQzNQQVJBTSByZWNvcmQKKworICAgIEBpdmFyIGFsZ29y
aXRobTogdGhlIGhhc2ggYWxnb3JpdGhtIG51bWJlcgorICAgIEB0eXBlIGFsZ29yaXRobTogaW50
CisgICAgQGl2YXIgZmxhZ3M6IHRoZSBmbGFncworICAgIEB0eXBlIGZsYWdzOiBpbnQKKyAgICBA
aXZhciBpdGVyYXRpb25zOiB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKKyAgICBAdHlwZSBpdGVy
YXRpb25zOiBpbnQKKyAgICBAaXZhciBzYWx0OiB0aGUgc2FsdAorICAgIEB0eXBlIHNhbHQ6IHN0
cmluZyIiIgorCisgICAgX19zbG90c19fID0gWydhbGdvcml0aG0nLCAnZmxhZ3MnLCAnaXRlcmF0
aW9ucycsICdzYWx0J10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZGNsYXNzLCByZHR5cGUs
IGFsZ29yaXRobSwgZmxhZ3MsIGl0ZXJhdGlvbnMsIHNhbHQpOgorICAgICAgICBzdXBlcihOU0VD
M1BBUkFNLCBzZWxmKS5fX2luaXRfXyhyZGNsYXNzLCByZHR5cGUpCisgICAgICAgIHNlbGYuYWxn
b3JpdGhtID0gYWxnb3JpdGhtCisgICAgICAgIHNlbGYuZmxhZ3MgPSBmbGFncworICAgICAgICBz
ZWxmLml0ZXJhdGlvbnMgPSBpdGVyYXRpb25zCisgICAgICAgIHNlbGYuc2FsdCA9IHNhbHQKKwor
ICAgIGRlZiB0b190ZXh0KHNlbGYsIG9yaWdpbj1Ob25lLCByZWxhdGl2aXplPVRydWUsICoqa3cp
OgorICAgICAgICBpZiBzZWxmLnNhbHQgPT0gJyc6CisgICAgICAgICAgICBzYWx0ID0gJy0nCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBzYWx0ID0gc2VsZi5zYWx0LmVuY29kZSgnaGV4LWNv
ZGVjJykKKyAgICAgICAgcmV0dXJuICcldSAldSAldSAlcycgJSAoc2VsZi5hbGdvcml0aG0sIHNl
bGYuZmxhZ3MsIHNlbGYuaXRlcmF0aW9ucywgc2FsdCkKKworICAgIGRlZiBmcm9tX3RleHQoY2xz
LCByZGNsYXNzLCByZHR5cGUsIHRvaywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUp
OgorICAgICAgICBhbGdvcml0aG0gPSB0b2suZ2V0X3VpbnQ4KCkKKyAgICAgICAgZmxhZ3MgPSB0
b2suZ2V0X3VpbnQ4KCkKKyAgICAgICAgaXRlcmF0aW9ucyA9IHRvay5nZXRfdWludDE2KCkKKyAg
ICAgICAgc2FsdCA9IHRvay5nZXRfc3RyaW5nKCkKKyAgICAgICAgaWYgc2FsdCA9PSAnLSc6Cisg
ICAgICAgICAgICBzYWx0ID0gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNhbHQgPSBz
YWx0LmRlY29kZSgnaGV4LWNvZGVjJykKKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5
cGUsIGFsZ29yaXRobSwgZmxhZ3MsIGl0ZXJhdGlvbnMsIHNhbHQpCisKKyAgICBmcm9tX3RleHQg
PSBjbGFzc21ldGhvZChmcm9tX3RleHQpCisKKyAgICBkZWYgdG9fd2lyZShzZWxmLCBmaWxlLCBj
b21wcmVzcyA9IE5vbmUsIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICBsID0gbGVuKHNlbGYuc2Fs
dCkKKyAgICAgICAgZmlsZS53cml0ZShzdHJ1Y3QucGFjaygiIUJCSEIiLCBzZWxmLmFsZ29yaXRo
bSwgc2VsZi5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLml0ZXJh
dGlvbnMsIGwpKQorICAgICAgICBmaWxlLndyaXRlKHNlbGYuc2FsdCkKKworICAgIGRlZiBmcm9t
X3dpcmUoY2xzLCByZGNsYXNzLCByZHR5cGUsIHdpcmUsIGN1cnJlbnQsIHJkbGVuLCBvcmlnaW4g
PSBOb25lKToKKyAgICAgICAgKGFsZ29yaXRobSwgZmxhZ3MsIGl0ZXJhdGlvbnMsIHNsZW4pID0g
c3RydWN0LnVucGFjaygnIUJCSEInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyA1XSkK
KyAgICAgICAgY3VycmVudCArPSA1CisgICAgICAgIHJkbGVuIC09IDUKKyAgICAgICAgc2FsdCA9
IHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyBzbGVuXQorICAgICAgICBjdXJyZW50ICs9IHNsZW4K
KyAgICAgICAgcmRsZW4gLT0gc2xlbgorICAgICAgICBpZiByZGxlbiAhPSAwOgorICAgICAgICAg
ICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IKKyAgICAgICAgcmV0dXJuIGNscyhyZGNs
YXNzLCByZHR5cGUsIGFsZ29yaXRobSwgZmxhZ3MsIGl0ZXJhdGlvbnMsIHNhbHQpCisKKyAgICBm
cm9tX3dpcmUgPSBjbGFzc21ldGhvZChmcm9tX3dpcmUpCisKKyAgICBkZWYgX2NtcChzZWxmLCBv
dGhlcik6CisgICAgICAgIGIxID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi50
b193aXJlKGIxKQorICAgICAgICBiMiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIG90
aGVyLnRvX3dpcmUoYjIpCisgICAgICAgIHJldHVybiBjbXAoYjEuZ2V0dmFsdWUoKSwgYjIuZ2V0
dmFsdWUoKSkKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlw
ZXMvQU5ZL05TRUMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9w
YXJ0eS9kbnMvcmR0eXBlcy9BTlkvTlNFQy5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBh
Z2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL05TRUMucHkJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTQxIEBACisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA3LCAyMDA5LCAyMDEw
IE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5k
IGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFu
eSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3Zp
ZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu
b3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9W
SURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRI
IFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVT
IE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9N
SU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJ
TkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFD
VElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFS
SVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1B
TkNFIE9GIFRISVMgU09GVFdBUkUuCisKK2ltcG9ydCBjU3RyaW5nSU8KKworaW1wb3J0IGRucy5l
eGNlcHRpb24KK2ltcG9ydCBkbnMucmRhdGEKK2ltcG9ydCBkbnMucmRhdGF0eXBlCitpbXBvcnQg
ZG5zLm5hbWUKKworY2xhc3MgTlNFQyhkbnMucmRhdGEuUmRhdGEpOgorICAgICIiIk5TRUMgcmVj
b3JkCisKKyAgICBAaXZhciBuZXh0OiB0aGUgbmV4dCBuYW1lCisgICAgQHR5cGUgbmV4dDogZG5z
Lm5hbWUuTmFtZSBvYmplY3QKKyAgICBAaXZhciB3aW5kb3dzOiB0aGUgd2luZG93ZWQgYml0bWFw
IGxpc3QKKyAgICBAdHlwZSB3aW5kb3dzOiBsaXN0IG9mICh3aW5kb3cgbnVtYmVyLCBzdHJpbmcp
IHR1cGxlcyIiIgorCisgICAgX19zbG90c19fID0gWyduZXh0JywgJ3dpbmRvd3MnXQorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHJkY2xhc3MsIHJkdHlwZSwgbmV4dCwgd2luZG93cyk6CisgICAg
ICAgIHN1cGVyKE5TRUMsIHNlbGYpLl9faW5pdF9fKHJkY2xhc3MsIHJkdHlwZSkKKyAgICAgICAg
c2VsZi5uZXh0ID0gbmV4dAorICAgICAgICBzZWxmLndpbmRvd3MgPSB3aW5kb3dzCisKKyAgICBk
ZWYgdG9fdGV4dChzZWxmLCBvcmlnaW49Tm9uZSwgcmVsYXRpdml6ZT1UcnVlLCAqKmt3KToKKyAg
ICAgICAgbmV4dCA9IHNlbGYubmV4dC5jaG9vc2VfcmVsYXRpdml0eShvcmlnaW4sIHJlbGF0aXZp
emUpCisgICAgICAgIHRleHQgPSAnJworICAgICAgICBmb3IgKHdpbmRvdywgYml0bWFwKSBpbiBz
ZWxmLndpbmRvd3M6CisgICAgICAgICAgICBiaXRzID0gW10KKyAgICAgICAgICAgIGZvciBpIGlu
IHhyYW5nZSgwLCBsZW4oYml0bWFwKSk6CisgICAgICAgICAgICAgICAgYnl0ZSA9IG9yZChiaXRt
YXBbaV0pCisgICAgICAgICAgICAgICAgZm9yIGogaW4geHJhbmdlKDAsIDgpOgorICAgICAgICAg
ICAgICAgICAgICBpZiBieXRlICYgKDB4ODAgPj4gaik6CisgICAgICAgICAgICAgICAgICAgICAg
ICBiaXRzLmFwcGVuZChkbnMucmRhdGF0eXBlLnRvX3RleHQod2luZG93ICogMjU2ICsgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkg
KiA4ICsgaikpCisgICAgICAgICAgICB0ZXh0ICs9ICgnICcgKyAnICcuam9pbihiaXRzKSkKKyAg
ICAgICAgcmV0dXJuICclcyVzJyAlIChuZXh0LCB0ZXh0KQorCisgICAgZGVmIGZyb21fdGV4dChj
bHMsIHJkY2xhc3MsIHJkdHlwZSwgdG9rLCBvcmlnaW4gPSBOb25lLCByZWxhdGl2aXplID0gVHJ1
ZSk6CisgICAgICAgIG5leHQgPSB0b2suZ2V0X25hbWUoKQorICAgICAgICBuZXh0ID0gbmV4dC5j
aG9vc2VfcmVsYXRpdml0eShvcmlnaW4sIHJlbGF0aXZpemUpCisgICAgICAgIHJkdHlwZXMgPSBb
XQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdG9rZW4gPSB0b2suZ2V0KCkudW5lc2Nh
cGUoKQorICAgICAgICAgICAgaWYgdG9rZW4uaXNfZW9sX29yX2VvZigpOgorICAgICAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgICAgICBucmR0eXBlID0gZG5zLnJkYXRhdHlwZS5mcm9tX3RleHQo
dG9rZW4udmFsdWUpCisgICAgICAgICAgICBpZiBucmR0eXBlID09IDA6CisgICAgICAgICAgICAg
ICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcigiTlNFQyB3aXRoIGJpdCAwIikKKyAg
ICAgICAgICAgIGlmIG5yZHR5cGUgPiA2NTUzNToKKyAgICAgICAgICAgICAgICByYWlzZSBkbnMu
ZXhjZXB0aW9uLlN5bnRheEVycm9yKCJOU0VDIHdpdGggYml0ID4gNjU1MzUiKQorICAgICAgICAg
ICAgcmR0eXBlcy5hcHBlbmQobnJkdHlwZSkKKyAgICAgICAgcmR0eXBlcy5zb3J0KCkKKyAgICAg
ICAgd2luZG93ID0gMAorICAgICAgICBvY3RldHMgPSAwCisgICAgICAgIHByaW9yX3JkdHlwZSA9
IDAKKyAgICAgICAgYml0bWFwID0gWydcMCddICogMzIKKyAgICAgICAgd2luZG93cyA9IFtdCisg
ICAgICAgIGZvciBucmR0eXBlIGluIHJkdHlwZXM6CisgICAgICAgICAgICBpZiBucmR0eXBlID09
IHByaW9yX3JkdHlwZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcHJp
b3JfcmR0eXBlID0gbnJkdHlwZQorICAgICAgICAgICAgbmV3X3dpbmRvdyA9IG5yZHR5cGUgLy8g
MjU2CisgICAgICAgICAgICBpZiBuZXdfd2luZG93ICE9IHdpbmRvdzoKKyAgICAgICAgICAgICAg
ICB3aW5kb3dzLmFwcGVuZCgod2luZG93LCAnJy5qb2luKGJpdG1hcFswOm9jdGV0c10pKSkKKyAg
ICAgICAgICAgICAgICBiaXRtYXAgPSBbJ1wwJ10gKiAzMgorICAgICAgICAgICAgICAgIHdpbmRv
dyA9IG5ld193aW5kb3cKKyAgICAgICAgICAgIG9mZnNldCA9IG5yZHR5cGUgJSAyNTYKKyAgICAg
ICAgICAgIGJ5dGUgPSBvZmZzZXQgLyA4CisgICAgICAgICAgICBiaXQgPSBvZmZzZXQgJSA4Cisg
ICAgICAgICAgICBvY3RldHMgPSBieXRlICsgMQorICAgICAgICAgICAgYml0bWFwW2J5dGVdID0g
Y2hyKG9yZChiaXRtYXBbYnl0ZV0pIHwgKDB4ODAgPj4gYml0KSkKKyAgICAgICAgd2luZG93cy5h
cHBlbmQoKHdpbmRvdywgJycuam9pbihiaXRtYXBbMDpvY3RldHNdKSkpCisgICAgICAgIHJldHVy
biBjbHMocmRjbGFzcywgcmR0eXBlLCBuZXh0LCB3aW5kb3dzKQorCisgICAgZnJvbV90ZXh0ID0g
Y2xhc3NtZXRob2QoZnJvbV90ZXh0KQorCisgICAgZGVmIHRvX3dpcmUoc2VsZiwgZmlsZSwgY29t
cHJlc3MgPSBOb25lLCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAgc2VsZi5uZXh0LnRvX3dpcmUo
ZmlsZSwgTm9uZSwgb3JpZ2luKQorICAgICAgICBmb3IgKHdpbmRvdywgYml0bWFwKSBpbiBzZWxm
LndpbmRvd3M6CisgICAgICAgICAgICBmaWxlLndyaXRlKGNocih3aW5kb3cpKQorICAgICAgICAg
ICAgZmlsZS53cml0ZShjaHIobGVuKGJpdG1hcCkpKQorICAgICAgICAgICAgZmlsZS53cml0ZShi
aXRtYXApCisKKyAgICBkZWYgZnJvbV93aXJlKGNscywgcmRjbGFzcywgcmR0eXBlLCB3aXJlLCBj
dXJyZW50LCByZGxlbiwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIChuZXh0LCBjdXNlZCkgPSBk
bnMubmFtZS5mcm9tX3dpcmUod2lyZVs6IGN1cnJlbnQgKyByZGxlbl0sIGN1cnJlbnQpCisgICAg
ICAgIGN1cnJlbnQgKz0gY3VzZWQKKyAgICAgICAgcmRsZW4gLT0gY3VzZWQKKyAgICAgICAgd2lu
ZG93cyA9IFtdCisgICAgICAgIHdoaWxlIHJkbGVuID4gMDoKKyAgICAgICAgICAgIGlmIHJkbGVu
IDwgMzoKKyAgICAgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcigiTlNF
QyB0b28gc2hvcnQiKQorICAgICAgICAgICAgd2luZG93ID0gb3JkKHdpcmVbY3VycmVudF0pCisg
ICAgICAgICAgICBvY3RldHMgPSBvcmQod2lyZVtjdXJyZW50ICsgMV0pCisgICAgICAgICAgICBp
ZiBvY3RldHMgPT0gMCBvciBvY3RldHMgPiAzMjoKKyAgICAgICAgICAgICAgICByYWlzZSBkbnMu
ZXhjZXB0aW9uLkZvcm1FcnJvcigiYmFkIE5TRUMgb2N0ZXRzIikKKyAgICAgICAgICAgIGN1cnJl
bnQgKz0gMgorICAgICAgICAgICAgcmRsZW4gLT0gMgorICAgICAgICAgICAgaWYgcmRsZW4gPCBv
Y3RldHM6CisgICAgICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IoImJh
ZCBOU0VDIGJpdG1hcCBsZW5ndGgiKQorICAgICAgICAgICAgYml0bWFwID0gd2lyZVtjdXJyZW50
IDogY3VycmVudCArIG9jdGV0c10KKyAgICAgICAgICAgIGN1cnJlbnQgKz0gb2N0ZXRzCisgICAg
ICAgICAgICByZGxlbiAtPSBvY3RldHMKKyAgICAgICAgICAgIHdpbmRvd3MuYXBwZW5kKCh3aW5k
b3csIGJpdG1hcCkpCisgICAgICAgIGlmIG5vdCBvcmlnaW4gaXMgTm9uZToKKyAgICAgICAgICAg
IG5leHQgPSBuZXh0LnJlbGF0aXZpemUob3JpZ2luKQorICAgICAgICByZXR1cm4gY2xzKHJkY2xh
c3MsIHJkdHlwZSwgbmV4dCwgd2luZG93cykKKworICAgIGZyb21fd2lyZSA9IGNsYXNzbWV0aG9k
KGZyb21fd2lyZSkKKworICAgIGRlZiBjaG9vc2VfcmVsYXRpdml0eShzZWxmLCBvcmlnaW4gPSBO
b25lLCByZWxhdGl2aXplID0gVHJ1ZSk6CisgICAgICAgIHNlbGYubmV4dCA9IHNlbGYubmV4dC5j
aG9vc2VfcmVsYXRpdml0eShvcmlnaW4sIHJlbGF0aXZpemUpCisKKyAgICBkZWYgX2NtcChzZWxm
LCBvdGhlcik6CisgICAgICAgIHYgPSBjbXAoc2VsZi5uZXh0LCBvdGhlci5uZXh0KQorICAgICAg
ICBpZiB2ID09IDA6CisgICAgICAgICAgICBiMSA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAg
ICAgICAgICBmb3IgKHdpbmRvdywgYml0bWFwKSBpbiBzZWxmLndpbmRvd3M6CisgICAgICAgICAg
ICAgICAgYjEud3JpdGUoY2hyKHdpbmRvdykpCisgICAgICAgICAgICAgICAgYjEud3JpdGUoY2hy
KGxlbihiaXRtYXApKSkKKyAgICAgICAgICAgICAgICBiMS53cml0ZShiaXRtYXApCisgICAgICAg
ICAgICBiMiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICBmb3IgKHdpbmRvdywg
Yml0bWFwKSBpbiBvdGhlci53aW5kb3dzOgorICAgICAgICAgICAgICAgIGIyLndyaXRlKGNocih3
aW5kb3cpKQorICAgICAgICAgICAgICAgIGIyLndyaXRlKGNocihsZW4oYml0bWFwKSkpCisgICAg
ICAgICAgICAgICAgYjIud3JpdGUoYml0bWFwKQorICAgICAgICAgICAgdiA9IGNtcChiMS5nZXR2
YWx1ZSgpLCBiMi5nZXR2YWx1ZSgpKQorICAgICAgICByZXR1cm4gdgpJbmRleDogVG9vbHMvV2Vi
UGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvTlhULnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL05YVC5w
eQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3Jk
dHlwZXMvQU5ZL05YVC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OSBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMDMtMjAwNywgMjAwOSwgMjAxMCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Np
b24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5k
IGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVl
IGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVz
LgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVND
TEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNM
VURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BF
Q0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBE
QU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1Ig
UFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0Ug
T1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNU
SU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitpbXBv
cnQgZG5zLmV4Y2VwdGlvbgoraW1wb3J0IGRucy5yZGF0YQoraW1wb3J0IGRucy5yZGF0YXR5cGUK
K2ltcG9ydCBkbnMubmFtZQorCitjbGFzcyBOWFQoZG5zLnJkYXRhLlJkYXRhKToKKyAgICAiIiJO
WFQgcmVjb3JkCisKKyAgICBAaXZhciBuZXh0OiB0aGUgbmV4dCBuYW1lCisgICAgQHR5cGUgbmV4
dDogZG5zLm5hbWUuTmFtZSBvYmplY3QKKyAgICBAaXZhciBiaXRtYXA6IHRoZSB0eXBlIGJpdG1h
cAorICAgIEB0eXBlIGJpdG1hcDogc3RyaW5nCisgICAgQHNlZTogUkZDIDI1MzUiIiIKKworICAg
IF9fc2xvdHNfXyA9IFsnbmV4dCcsICdiaXRtYXAnXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHJkY2xhc3MsIHJkdHlwZSwgbmV4dCwgYml0bWFwKToKKyAgICAgICAgc3VwZXIoTlhULCBzZWxm
KS5fX2luaXRfXyhyZGNsYXNzLCByZHR5cGUpCisgICAgICAgIHNlbGYubmV4dCA9IG5leHQKKyAg
ICAgICAgc2VsZi5iaXRtYXAgPSBiaXRtYXAKKworICAgIGRlZiB0b190ZXh0KHNlbGYsIG9yaWdp
bj1Ob25lLCByZWxhdGl2aXplPVRydWUsICoqa3cpOgorICAgICAgICBuZXh0ID0gc2VsZi5uZXh0
LmNob29zZV9yZWxhdGl2aXR5KG9yaWdpbiwgcmVsYXRpdml6ZSkKKyAgICAgICAgYml0cyA9IFtd
CisgICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oc2VsZi5iaXRtYXApKToKKyAgICAgICAg
ICAgIGJ5dGUgPSBvcmQoc2VsZi5iaXRtYXBbaV0pCisgICAgICAgICAgICBmb3IgaiBpbiB4cmFu
Z2UoMCwgOCk6CisgICAgICAgICAgICAgICAgaWYgYnl0ZSAmICgweDgwID4+IGopOgorICAgICAg
ICAgICAgICAgICAgICBiaXRzLmFwcGVuZChkbnMucmRhdGF0eXBlLnRvX3RleHQoaSAqIDggKyBq
KSkKKyAgICAgICAgdGV4dCA9ICcgJy5qb2luKGJpdHMpCisgICAgICAgIHJldHVybiAnJXMgJXMn
ICUgKG5leHQsIHRleHQpCisKKyAgICBkZWYgZnJvbV90ZXh0KGNscywgcmRjbGFzcywgcmR0eXBl
LCB0b2ssIG9yaWdpbiA9IE5vbmUsIHJlbGF0aXZpemUgPSBUcnVlKToKKyAgICAgICAgbmV4dCA9
IHRvay5nZXRfbmFtZSgpCisgICAgICAgIG5leHQgPSBuZXh0LmNob29zZV9yZWxhdGl2aXR5KG9y
aWdpbiwgcmVsYXRpdml6ZSkKKyAgICAgICAgYml0bWFwID0gWydceDAwJywgJ1x4MDAnLCAnXHgw
MCcsICdceDAwJywKKyAgICAgICAgICAgICAgICAgICdceDAwJywgJ1x4MDAnLCAnXHgwMCcsICdc
eDAwJywKKyAgICAgICAgICAgICAgICAgICdceDAwJywgJ1x4MDAnLCAnXHgwMCcsICdceDAwJywK
KyAgICAgICAgICAgICAgICAgICdceDAwJywgJ1x4MDAnLCAnXHgwMCcsICdceDAwJyBdCisgICAg
ICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0b2tlbiA9IHRvay5nZXQoKS51bmVzY2FwZSgpCisg
ICAgICAgICAgICBpZiB0b2tlbi5pc19lb2xfb3JfZW9mKCk6CisgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgICAgIGlmIHRva2VuLnZhbHVlLmlzZGlnaXQoKToKKyAgICAgICAgICAgICAg
ICBucmR0eXBlID0gaW50KHRva2VuLnZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBucmR0eXBlID0gZG5zLnJkYXRhdHlwZS5mcm9tX3RleHQodG9rZW4udmFsdWUpCisg
ICAgICAgICAgICBpZiBucmR0eXBlID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgZG5zLmV4
Y2VwdGlvbi5TeW50YXhFcnJvcigiTlhUIHdpdGggYml0IDAiKQorICAgICAgICAgICAgaWYgbnJk
dHlwZSA+IDEyNzoKKyAgICAgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVy
cm9yKCJOWFQgd2l0aCBiaXQgPiAxMjciKQorICAgICAgICAgICAgaSA9IG5yZHR5cGUgLy8gOAor
ICAgICAgICAgICAgYml0bWFwW2ldID0gY2hyKG9yZChiaXRtYXBbaV0pIHwgKDB4ODAgPj4gKG5y
ZHR5cGUgJSA4KSkpCisgICAgICAgIGJpdG1hcCA9IGRucy5yZGF0YS5fdHJ1bmNhdGVfYml0bWFw
KGJpdG1hcCkKKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5cGUsIG5leHQsIGJpdG1h
cCkKKworICAgIGZyb21fdGV4dCA9IGNsYXNzbWV0aG9kKGZyb21fdGV4dCkKKworICAgIGRlZiB0
b193aXJlKHNlbGYsIGZpbGUsIGNvbXByZXNzID0gTm9uZSwgb3JpZ2luID0gTm9uZSk6CisgICAg
ICAgIHNlbGYubmV4dC50b193aXJlKGZpbGUsIE5vbmUsIG9yaWdpbikKKyAgICAgICAgZmlsZS53
cml0ZShzZWxmLmJpdG1hcCkKKworICAgIGRlZiB0b19kaWdlc3RhYmxlKHNlbGYsIG9yaWdpbiA9
IE5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5uZXh0LnRvX2RpZ2VzdGFibGUob3JpZ2luKSAr
IHNlbGYuYml0bWFwCisKKyAgICBkZWYgZnJvbV93aXJlKGNscywgcmRjbGFzcywgcmR0eXBlLCB3
aXJlLCBjdXJyZW50LCByZGxlbiwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIChuZXh0LCBjdXNl
ZCkgPSBkbnMubmFtZS5mcm9tX3dpcmUod2lyZVs6IGN1cnJlbnQgKyByZGxlbl0sIGN1cnJlbnQp
CisgICAgICAgIGN1cnJlbnQgKz0gY3VzZWQKKyAgICAgICAgcmRsZW4gLT0gY3VzZWQKKyAgICAg
ICAgYml0bWFwID0gd2lyZVtjdXJyZW50IDogY3VycmVudCArIHJkbGVuXQorICAgICAgICBpZiBu
b3Qgb3JpZ2luIGlzIE5vbmU6CisgICAgICAgICAgICBuZXh0ID0gbmV4dC5yZWxhdGl2aXplKG9y
aWdpbikKKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5cGUsIG5leHQsIGJpdG1hcCkK
KworICAgIGZyb21fd2lyZSA9IGNsYXNzbWV0aG9kKGZyb21fd2lyZSkKKworICAgIGRlZiBjaG9v
c2VfcmVsYXRpdml0eShzZWxmLCBvcmlnaW4gPSBOb25lLCByZWxhdGl2aXplID0gVHJ1ZSk6Cisg
ICAgICAgIHNlbGYubmV4dCA9IHNlbGYubmV4dC5jaG9vc2VfcmVsYXRpdml0eShvcmlnaW4sIHJl
bGF0aXZpemUpCisKKyAgICBkZWYgX2NtcChzZWxmLCBvdGhlcik6CisgICAgICAgIHYgPSBjbXAo
c2VsZi5uZXh0LCBvdGhlci5uZXh0KQorICAgICAgICBpZiB2ID09IDA6CisgICAgICAgICAgICB2
ID0gY21wKHNlbGYuYml0bWFwLCBvdGhlci5iaXRtYXApCisgICAgICAgIHJldHVybiB2CkluZGV4
OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9QVFIucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBl
cy9BTlkvUFRSLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9w
YXJ0eS9kbnMvcmR0eXBlcy9BTlkvUFRSLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwIEBA
CisjIENvcHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4KKyMK
KyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBz
b2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Ig
d2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGlu
IGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBO
T01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNP
RlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9S
CisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVT
RSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwg
TkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9S
IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdB
UkUuCisKK2ltcG9ydCBkbnMucmR0eXBlcy5uc2Jhc2UKKworY2xhc3MgUFRSKGRucy5yZHR5cGVz
Lm5zYmFzZS5OU0Jhc2UpOgorICAgICIiIlBUUiByZWNvcmQiIiIKKyAgICBwYXNzCkluZGV4OiBU
b29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9SUC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FO
WS9SUC5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkv
ZG5zL3JkdHlwZXMvQU5ZL1JQLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACisjIENv
cHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4KKyMKKyMgUGVy
bWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2Fy
ZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91
dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFsbCBj
b3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01JTlVN
IERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJF
IElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisjIEFO
WSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1Ig
QU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFU
QSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElH
RU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElOIENP
Tk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisK
K2ltcG9ydCBkbnMuZXhjZXB0aW9uCitpbXBvcnQgZG5zLnJkYXRhCitpbXBvcnQgZG5zLm5hbWUK
KworY2xhc3MgUlAoZG5zLnJkYXRhLlJkYXRhKToKKyAgICAiIiJSUCByZWNvcmQKKworICAgIEBp
dmFyIG1ib3g6IFRoZSByZXNwb25zaWJsZSBwZXJzb24ncyBtYWlsYm94CisgICAgQHR5cGUgbWJv
eDogZG5zLm5hbWUuTmFtZSBvYmplY3QKKyAgICBAaXZhciB0eHQ6IFRoZSBvd25lciBuYW1lIG9m
IGEgbm9kZSB3aXRoIFRYVCByZWNvcmRzLCBvciB0aGUgcm9vdCBuYW1lCisgICAgaWYgbm8gVFhU
IHJlY29yZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFJQLgorICAgIEB0eXBlIHR4dDogZG5z
Lm5hbWUuTmFtZSBvYmplY3QKKyAgICBAc2VlOiBSRkMgMTE4MyIiIgorCisgICAgX19zbG90c19f
ID0gWydtYm94JywgJ3R4dCddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmRjbGFzcywgcmR0
eXBlLCBtYm94LCB0eHQpOgorICAgICAgICBzdXBlcihSUCwgc2VsZikuX19pbml0X18ocmRjbGFz
cywgcmR0eXBlKQorICAgICAgICBzZWxmLm1ib3ggPSBtYm94CisgICAgICAgIHNlbGYudHh0ID0g
dHh0CisKKyAgICBkZWYgdG9fdGV4dChzZWxmLCBvcmlnaW49Tm9uZSwgcmVsYXRpdml6ZT1UcnVl
LCAqKmt3KToKKyAgICAgICAgbWJveCA9IHNlbGYubWJveC5jaG9vc2VfcmVsYXRpdml0eShvcmln
aW4sIHJlbGF0aXZpemUpCisgICAgICAgIHR4dCA9IHNlbGYudHh0LmNob29zZV9yZWxhdGl2aXR5
KG9yaWdpbiwgcmVsYXRpdml6ZSkKKyAgICAgICAgcmV0dXJuICIlcyAlcyIgJSAoc3RyKG1ib3gp
LCBzdHIodHh0KSkKKworICAgIGRlZiBmcm9tX3RleHQoY2xzLCByZGNsYXNzLCByZHR5cGUsIHRv
aywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUpOgorICAgICAgICBtYm94ID0gdG9r
LmdldF9uYW1lKCkKKyAgICAgICAgdHh0ID0gdG9rLmdldF9uYW1lKCkKKyAgICAgICAgbWJveCA9
IG1ib3guY2hvb3NlX3JlbGF0aXZpdHkob3JpZ2luLCByZWxhdGl2aXplKQorICAgICAgICB0eHQg
PSB0eHQuY2hvb3NlX3JlbGF0aXZpdHkob3JpZ2luLCByZWxhdGl2aXplKQorICAgICAgICB0b2su
Z2V0X2VvbCgpCisgICAgICAgIHJldHVybiBjbHMocmRjbGFzcywgcmR0eXBlLCBtYm94LCB0eHQp
CisKKyAgICBmcm9tX3RleHQgPSBjbGFzc21ldGhvZChmcm9tX3RleHQpCisKKyAgICBkZWYgdG9f
d2lyZShzZWxmLCBmaWxlLCBjb21wcmVzcyA9IE5vbmUsIG9yaWdpbiA9IE5vbmUpOgorICAgICAg
ICBzZWxmLm1ib3gudG9fd2lyZShmaWxlLCBOb25lLCBvcmlnaW4pCisgICAgICAgIHNlbGYudHh0
LnRvX3dpcmUoZmlsZSwgTm9uZSwgb3JpZ2luKQorCisgICAgZGVmIHRvX2RpZ2VzdGFibGUoc2Vs
Ziwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLm1ib3gudG9fZGlnZXN0YWJs
ZShvcmlnaW4pICsgXAorICAgICAgICAgICAgc2VsZi50eHQudG9fZGlnZXN0YWJsZShvcmlnaW4p
CisKKyAgICBkZWYgZnJvbV93aXJlKGNscywgcmRjbGFzcywgcmR0eXBlLCB3aXJlLCBjdXJyZW50
LCByZGxlbiwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIChtYm94LCBjdXNlZCkgPSBkbnMubmFt
ZS5mcm9tX3dpcmUod2lyZVs6IGN1cnJlbnQgKyByZGxlbl0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCkKKyAgICAgICAgY3VycmVudCArPSBjdXNl
ZAorICAgICAgICByZGxlbiAtPSBjdXNlZAorICAgICAgICBpZiByZGxlbiA8PSAwOgorICAgICAg
ICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5Gb3JtRXJyb3IKKyAgICAgICAgKHR4dCwgY3VzZWQp
ID0gZG5zLm5hbWUuZnJvbV93aXJlKHdpcmVbOiBjdXJyZW50ICsgcmRsZW5dLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCkKKyAgICAgICAgaWYgY3Vz
ZWQgIT0gcmRsZW46CisgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcgor
ICAgICAgICBpZiBub3Qgb3JpZ2luIGlzIE5vbmU6CisgICAgICAgICAgICBtYm94ID0gbWJveC5y
ZWxhdGl2aXplKG9yaWdpbikKKyAgICAgICAgICAgIHR4dCA9IHR4dC5yZWxhdGl2aXplKG9yaWdp
bikKKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5cGUsIG1ib3gsIHR4dCkKKworICAg
IGZyb21fd2lyZSA9IGNsYXNzbWV0aG9kKGZyb21fd2lyZSkKKworICAgIGRlZiBjaG9vc2VfcmVs
YXRpdml0eShzZWxmLCBvcmlnaW4gPSBOb25lLCByZWxhdGl2aXplID0gVHJ1ZSk6CisgICAgICAg
IHNlbGYubWJveCA9IHNlbGYubWJveC5jaG9vc2VfcmVsYXRpdml0eShvcmlnaW4sIHJlbGF0aXZp
emUpCisgICAgICAgIHNlbGYudHh0ID0gc2VsZi50eHQuY2hvb3NlX3JlbGF0aXZpdHkob3JpZ2lu
LCByZWxhdGl2aXplKQorCisgICAgZGVmIF9jbXAoc2VsZiwgb3RoZXIpOgorICAgICAgICB2ID0g
Y21wKHNlbGYubWJveCwgb3RoZXIubWJveCkKKyAgICAgICAgaWYgdiA9PSAwOgorICAgICAgICAg
ICAgdiA9IGNtcChzZWxmLnR4dCwgb3RoZXIudHh0KQorICAgICAgICByZXR1cm4gdgpJbmRleDog
VG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvUlJTSUcucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBl
cy9BTlkvUlJTSUcucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJk
X3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9SUlNJRy5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNywgMjAwOSwgMjAxMCBOb21pbnVtLCBJbmMu
CisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRo
aXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRo
IG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92aWRlZCB0aGF0IHRoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisjIGFwcGVh
ciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBB
TkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJ
UyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5PTUlOVU0gQkUgTElBQkxF
IEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBP
RiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJB
Q1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBP
RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNP
RlRXQVJFLgorCitpbXBvcnQgZG5zLnJkdHlwZXMuc2lnYmFzZQorCitjbGFzcyBSUlNJRyhkbnMu
cmR0eXBlcy5zaWdiYXNlLlNJR0Jhc2UpOgorICAgICIiIlJSU0lHIHJlY29yZCIiIgorICAgIHBh
c3MKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5Z
L1JULnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5z
L3JkdHlwZXMvQU5ZL1JULnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90
aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvUlQucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwgSW5j
LgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0
aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0
aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUg
YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBhcHBl
YXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIg
QU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRI
SVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJQUJM
RSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1Mg
T0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRS
QUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMg
T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBT
T0ZUV0FSRS4KKworaW1wb3J0IGRucy5yZHR5cGVzLm14YmFzZQorCitjbGFzcyBSVChkbnMucmR0
eXBlcy5teGJhc2UuVW5jb21wcmVzc2VkRG93bmNhc2luZ01YKToKKyAgICAiIiJSVCByZWNvcmQi
IiIKKyAgICBwYXNzCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9y
ZHR5cGVzL0FOWS9TSUcucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGly
ZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvU0lHLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2Vi
UGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvU0lHLnB5CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDI2IEBACisjIENvcHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEw
IE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5k
IGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFu
eSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3Zp
ZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu
b3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9W
SURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRI
IFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVT
IE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9N
SU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJ
TkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFD
VElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFS
SVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1B
TkNFIE9GIFRISVMgU09GVFdBUkUuCisKK2ltcG9ydCBkbnMucmR0eXBlcy5zaWdiYXNlCisKK2Ns
YXNzIFNJRyhkbnMucmR0eXBlcy5zaWdiYXNlLlNJR0Jhc2UpOgorICAgICIiIlNJRyByZWNvcmQi
IiIKKyAgICBkZWYgdG9fZGlnZXN0YWJsZShzZWxmLCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAg
cmV0dXJuIHN0cnVjdC5wYWNrKCchSEJCSUlJSCcsIHNlbGYudHlwZV9jb3ZlcmVkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5hbGdvcml0aG0sIHNlbGYubGFiZWxzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcmlnaW5hbF90dGwsIHNlbGYuZXhwaXJhdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jZXB0aW9uLCBzZWxmLmtleV90YWcp
ICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaWduZXIudG9fZGlnZXN0YWJs
ZShvcmlnaW4pICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaWduYXR1cmUK
SW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL1NP
QS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9y
ZHR5cGVzL0FOWS9TT0EucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3Ro
aXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9TT0EucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTI3IEBACisjIENvcHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIElu
Yy4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUg
dGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdp
dGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBw
ZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi
IEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBU
SElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFC
TEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NT
IE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05U
UkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisj
IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMg
U09GVFdBUkUuCisKK2ltcG9ydCBzdHJ1Y3QKKworaW1wb3J0IGRucy5leGNlcHRpb24KK2ltcG9y
dCBkbnMucmRhdGEKK2ltcG9ydCBkbnMubmFtZQorCitjbGFzcyBTT0EoZG5zLnJkYXRhLlJkYXRh
KToKKyAgICAiIiJTT0EgcmVjb3JkCisKKyAgICBAaXZhciBtbmFtZTogdGhlIFNPQSBNTkFNRSAo
bWFzdGVyIG5hbWUpIGZpZWxkCisgICAgQHR5cGUgbW5hbWU6IGRucy5uYW1lLk5hbWUgb2JqZWN0
CisgICAgQGl2YXIgcm5hbWU6IHRoZSBTT0EgUk5BTUUgKHJlc3BvbnNpYmxlIG5hbWUpIGZpZWxk
CisgICAgQHR5cGUgcm5hbWU6IGRucy5uYW1lLk5hbWUgb2JqZWN0CisgICAgQGl2YXIgc2VyaWFs
OiBUaGUgem9uZSdzIHNlcmlhbCBudW1iZXIKKyAgICBAdHlwZSBzZXJpYWw6IGludAorICAgIEBp
dmFyIHJlZnJlc2g6IFRoZSB6b25lJ3MgcmVmcmVzaCB2YWx1ZSAoaW4gc2Vjb25kcykKKyAgICBA
dHlwZSByZWZyZXNoOiBpbnQKKyAgICBAaXZhciByZXRyeTogVGhlIHpvbmUncyByZXRyeSB2YWx1
ZSAoaW4gc2Vjb25kcykKKyAgICBAdHlwZSByZXRyeTogaW50CisgICAgQGl2YXIgZXhwaXJlOiBU
aGUgem9uZSdzIGV4cGlyYXRpb24gdmFsdWUgKGluIHNlY29uZHMpCisgICAgQHR5cGUgZXhwaXJl
OiBpbnQKKyAgICBAaXZhciBtaW5pbXVtOiBUaGUgem9uZSdzIG5lZ2F0aXZlIGNhY2hpbmcgdGlt
ZSAoaW4gc2Vjb25kcywgY2FsbGVkCisgICAgIm1pbmltdW0iIGZvciBoaXN0b3JpY2FsIHJlYXNv
bnMpCisgICAgQHR5cGUgbWluaW11bTogaW50CisgICAgQHNlZTogUkZDIDEwMzUiIiIKKworICAg
IF9fc2xvdHNfXyA9IFsnbW5hbWUnLCAncm5hbWUnLCAnc2VyaWFsJywgJ3JlZnJlc2gnLCAncmV0
cnknLCAnZXhwaXJlJywKKyAgICAgICAgICAgICAgICAgJ21pbmltdW0nXQorICAgIAorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCByZGNsYXNzLCByZHR5cGUsIG1uYW1lLCBybmFtZSwgc2VyaWFsLCBy
ZWZyZXNoLCByZXRyeSwKKyAgICAgICAgICAgICAgICAgZXhwaXJlLCBtaW5pbXVtKToKKyAgICAg
ICAgc3VwZXIoU09BLCBzZWxmKS5fX2luaXRfXyhyZGNsYXNzLCByZHR5cGUpCisgICAgICAgIHNl
bGYubW5hbWUgPSBtbmFtZQorICAgICAgICBzZWxmLnJuYW1lID0gcm5hbWUKKyAgICAgICAgc2Vs
Zi5zZXJpYWwgPSBzZXJpYWwKKyAgICAgICAgc2VsZi5yZWZyZXNoID0gcmVmcmVzaAorICAgICAg
ICBzZWxmLnJldHJ5ID0gcmV0cnkKKyAgICAgICAgc2VsZi5leHBpcmUgPSBleHBpcmUKKyAgICAg
ICAgc2VsZi5taW5pbXVtID0gbWluaW11bQorCisgICAgZGVmIHRvX3RleHQoc2VsZiwgb3JpZ2lu
PU5vbmUsIHJlbGF0aXZpemU9VHJ1ZSwgKiprdyk6CisgICAgICAgIG1uYW1lID0gc2VsZi5tbmFt
ZS5jaG9vc2VfcmVsYXRpdml0eShvcmlnaW4sIHJlbGF0aXZpemUpCisgICAgICAgIHJuYW1lID0g
c2VsZi5ybmFtZS5jaG9vc2VfcmVsYXRpdml0eShvcmlnaW4sIHJlbGF0aXZpemUpCisgICAgICAg
IHJldHVybiAnJXMgJXMgJWQgJWQgJWQgJWQgJWQnICUgKAorICAgICAgICAgICAgbW5hbWUsIHJu
YW1lLCBzZWxmLnNlcmlhbCwgc2VsZi5yZWZyZXNoLCBzZWxmLnJldHJ5LAorICAgICAgICAgICAg
c2VsZi5leHBpcmUsIHNlbGYubWluaW11bSApCisgICAgICAgIAorICAgIGRlZiBmcm9tX3RleHQo
Y2xzLCByZGNsYXNzLCByZHR5cGUsIHRvaywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRy
dWUpOgorICAgICAgICBtbmFtZSA9IHRvay5nZXRfbmFtZSgpCisgICAgICAgIHJuYW1lID0gdG9r
LmdldF9uYW1lKCkKKyAgICAgICAgbW5hbWUgPSBtbmFtZS5jaG9vc2VfcmVsYXRpdml0eShvcmln
aW4sIHJlbGF0aXZpemUpCisgICAgICAgIHJuYW1lID0gcm5hbWUuY2hvb3NlX3JlbGF0aXZpdHko
b3JpZ2luLCByZWxhdGl2aXplKQorICAgICAgICBzZXJpYWwgPSB0b2suZ2V0X3VpbnQzMigpCisg
ICAgICAgIHJlZnJlc2ggPSB0b2suZ2V0X3R0bCgpCisgICAgICAgIHJldHJ5ID0gdG9rLmdldF90
dGwoKQorICAgICAgICBleHBpcmUgPSB0b2suZ2V0X3R0bCgpCisgICAgICAgIG1pbmltdW0gPSB0
b2suZ2V0X3R0bCgpCisgICAgICAgIHRvay5nZXRfZW9sKCkKKyAgICAgICAgcmV0dXJuIGNscyhy
ZGNsYXNzLCByZHR5cGUsIG1uYW1lLCBybmFtZSwgc2VyaWFsLCByZWZyZXNoLCByZXRyeSwKKyAg
ICAgICAgICAgICAgICAgICBleHBpcmUsIG1pbmltdW0gKQorICAgIAorICAgIGZyb21fdGV4dCA9
IGNsYXNzbWV0aG9kKGZyb21fdGV4dCkKKworICAgIGRlZiB0b193aXJlKHNlbGYsIGZpbGUsIGNv
bXByZXNzID0gTm9uZSwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIHNlbGYubW5hbWUudG9fd2ly
ZShmaWxlLCBjb21wcmVzcywgb3JpZ2luKQorICAgICAgICBzZWxmLnJuYW1lLnRvX3dpcmUoZmls
ZSwgY29tcHJlc3MsIG9yaWdpbikKKyAgICAgICAgZml2ZV9pbnRzID0gc3RydWN0LnBhY2soJyFJ
SUlJSScsIHNlbGYuc2VyaWFsLCBzZWxmLnJlZnJlc2gsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYucmV0cnksIHNlbGYuZXhwaXJlLCBzZWxmLm1pbmltdW0pCisgICAgICAg
IGZpbGUud3JpdGUoZml2ZV9pbnRzKQorCisgICAgZGVmIHRvX2RpZ2VzdGFibGUoc2VsZiwgb3Jp
Z2luID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLm1uYW1lLnRvX2RpZ2VzdGFibGUob3Jp
Z2luKSArIFwKKyAgICAgICAgICAgIHNlbGYucm5hbWUudG9fZGlnZXN0YWJsZShvcmlnaW4pICsg
XAorICAgICAgICAgICAgc3RydWN0LnBhY2soJyFJSUlJSScsIHNlbGYuc2VyaWFsLCBzZWxmLnJl
ZnJlc2gsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHJ5LCBzZWxmLmV4cGlyZSwg
c2VsZi5taW5pbXVtKQorCisgICAgZGVmIGZyb21fd2lyZShjbHMsIHJkY2xhc3MsIHJkdHlwZSwg
d2lyZSwgY3VycmVudCwgcmRsZW4sIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICAobW5hbWUsIGN1
c2VkKSA9IGRucy5uYW1lLmZyb21fd2lyZSh3aXJlWzogY3VycmVudCArIHJkbGVuXSwgY3VycmVu
dCkKKyAgICAgICAgY3VycmVudCArPSBjdXNlZAorICAgICAgICByZGxlbiAtPSBjdXNlZAorICAg
ICAgICAocm5hbWUsIGN1c2VkKSA9IGRucy5uYW1lLmZyb21fd2lyZSh3aXJlWzogY3VycmVudCAr
IHJkbGVuXSwgY3VycmVudCkKKyAgICAgICAgY3VycmVudCArPSBjdXNlZAorICAgICAgICByZGxl
biAtPSBjdXNlZAorICAgICAgICBpZiByZGxlbiAhPSAyMDoKKyAgICAgICAgICAgIHJhaXNlIGRu
cy5leGNlcHRpb24uRm9ybUVycm9yCisgICAgICAgIGZpdmVfaW50cyA9IHN0cnVjdC51bnBhY2so
JyFJSUlJSScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lyZVtjdXJyZW50
IDogY3VycmVudCArIHJkbGVuXSkKKyAgICAgICAgaWYgbm90IG9yaWdpbiBpcyBOb25lOgorICAg
ICAgICAgICAgbW5hbWUgPSBtbmFtZS5yZWxhdGl2aXplKG9yaWdpbikKKyAgICAgICAgICAgIHJu
YW1lID0gcm5hbWUucmVsYXRpdml6ZShvcmlnaW4pCisgICAgICAgIHJldHVybiBjbHMocmRjbGFz
cywgcmR0eXBlLCBtbmFtZSwgcm5hbWUsCisgICAgICAgICAgICAgICAgICAgZml2ZV9pbnRzWzBd
LCBmaXZlX2ludHNbMV0sIGZpdmVfaW50c1syXSwgZml2ZV9pbnRzWzNdLAorICAgICAgICAgICAg
ICAgICAgIGZpdmVfaW50c1s0XSkKKworICAgIGZyb21fd2lyZSA9IGNsYXNzbWV0aG9kKGZyb21f
d2lyZSkKKworICAgIGRlZiBjaG9vc2VfcmVsYXRpdml0eShzZWxmLCBvcmlnaW4gPSBOb25lLCBy
ZWxhdGl2aXplID0gVHJ1ZSk6CisgICAgICAgIHNlbGYubW5hbWUgPSBzZWxmLm1uYW1lLmNob29z
ZV9yZWxhdGl2aXR5KG9yaWdpbiwgcmVsYXRpdml6ZSkKKyAgICAgICAgc2VsZi5ybmFtZSA9IHNl
bGYucm5hbWUuY2hvb3NlX3JlbGF0aXZpdHkob3JpZ2luLCByZWxhdGl2aXplKQorCisgICAgZGVm
IF9jbXAoc2VsZiwgb3RoZXIpOgorICAgICAgICB2ID0gY21wKHNlbGYubW5hbWUsIG90aGVyLm1u
YW1lKQorICAgICAgICBpZiB2ID09IDA6CisgICAgICAgICAgICB2ID0gY21wKHNlbGYucm5hbWUs
IG90aGVyLnJuYW1lKQorICAgICAgICAgICAgaWYgdiA9PSAwOgorICAgICAgICAgICAgICAgIHNl
bGZfaW50cyA9IHN0cnVjdC5wYWNrKCchSUlJSUknLCBzZWxmLnNlcmlhbCwgc2VsZi5yZWZyZXNo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0cnksIHNl
bGYuZXhwaXJlLCBzZWxmLm1pbmltdW0pCisgICAgICAgICAgICAgICAgb3RoZXJfaW50cyA9IHN0
cnVjdC5wYWNrKCchSUlJSUknLCBvdGhlci5zZXJpYWwsIG90aGVyLnJlZnJlc2gsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyLnJldHJ5LCBvdGhlci5leHBp
cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyLm1pbmlt
dW0pCisgICAgICAgICAgICAgICAgdiA9IGNtcChzZWxmX2ludHMsIG90aGVyX2ludHMpCisgICAg
ICAgIHJldHVybiB2CkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9y
ZHR5cGVzL0FOWS9TUEYucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGly
ZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvU1BGLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2Vi
UGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvU1BGLnB5CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIyIEBACisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSwgMjAx
MCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFu
ZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBh
bnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorIyBwcm92
aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g
bm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJP
VklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyMgV0lU
SCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElF
UyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIE5P
TUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRTT0VWRVIgUkVTVUxU
SU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorIyBB
Q1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBB
UklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JN
QU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitpbXBvcnQgZG5zLnJkdHlwZXMudHh0YmFzZQorCitj
bGFzcyBTUEYoZG5zLnJkdHlwZXMudHh0YmFzZS5UWFRCYXNlKToKKyAgICAiIiJTUEYgcmVjb3Jk
CisKKyAgICBAc2VlOiBSRkMgNDQwOCIiIgorICAgIHBhc3MKSW5kZXg6IFRvb2xzL1dlYlBhZ2VS
ZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL1NTSEZQLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL1NTSEZQLnB5
CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0
eXBlcy9BTlkvU1NIRlAucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDA1LTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNz
aW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFu
ZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZl
ZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGll
cy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElT
Q0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5D
TFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQ
RUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkg
REFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9S
IFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNF
IE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVD
VElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworaW1w
b3J0IHN0cnVjdAorCitpbXBvcnQgZG5zLnJkYXRhCitpbXBvcnQgZG5zLnJkYXRhdHlwZQorCitj
bGFzcyBTU0hGUChkbnMucmRhdGEuUmRhdGEpOgorICAgICIiIlNTSEZQIHJlY29yZAorCisgICAg
QGl2YXIgYWxnb3JpdGhtOiB0aGUgYWxnb3JpdGhtCisgICAgQHR5cGUgYWxnb3JpdGhtOiBpbnQK
KyAgICBAaXZhciBmcF90eXBlOiB0aGUgZGlnZXN0IHR5cGUKKyAgICBAdHlwZSBmcF90eXBlOiBp
bnQKKyAgICBAaXZhciBmaW5nZXJwcmludDogdGhlIGZpbmdlcnByaW50CisgICAgQHR5cGUgZmlu
Z2VycHJpbnQ6IHN0cmluZworICAgIEBzZWU6IGRyYWZ0LWlldGYtc2Vjc2gtZG5zLTA1LnR4dCIi
IgorCisgICAgX19zbG90c19fID0gWydhbGdvcml0aG0nLCAnZnBfdHlwZScsICdmaW5nZXJwcmlu
dCddCisgICAgCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJkY2xhc3MsIHJkdHlwZSwgYWxnb3Jp
dGhtLCBmcF90eXBlLAorICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCk6CisgICAgICAgIHN1
cGVyKFNTSEZQLCBzZWxmKS5fX2luaXRfXyhyZGNsYXNzLCByZHR5cGUpCisgICAgICAgIHNlbGYu
YWxnb3JpdGhtID0gYWxnb3JpdGhtCisgICAgICAgIHNlbGYuZnBfdHlwZSA9IGZwX3R5cGUKKyAg
ICAgICAgc2VsZi5maW5nZXJwcmludCA9IGZpbmdlcnByaW50CisKKyAgICBkZWYgdG9fdGV4dChz
ZWxmLCBvcmlnaW49Tm9uZSwgcmVsYXRpdml6ZT1UcnVlLCAqKmt3KToKKyAgICAgICAgcmV0dXJu
ICclZCAlZCAlcycgJSAoc2VsZi5hbGdvcml0aG0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuZnBfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5zLnJkYXRh
Ll9oZXhpZnkoc2VsZi5maW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2h1bmtzaXplPTEyOCkpCisgICAgICAgIAorICAgIGRlZiBmcm9t
X3RleHQoY2xzLCByZGNsYXNzLCByZHR5cGUsIHRvaywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6
ZSA9IFRydWUpOgorICAgICAgICBhbGdvcml0aG0gPSB0b2suZ2V0X3VpbnQ4KCkKKyAgICAgICAg
ZnBfdHlwZSA9IHRvay5nZXRfdWludDgoKQorICAgICAgICBmaW5nZXJwcmludCA9IHRvay5nZXRf
c3RyaW5nKCkKKyAgICAgICAgZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludC5kZWNvZGUoJ2hleF9j
b2RlYycpCisgICAgICAgIHRvay5nZXRfZW9sKCkKKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNz
LCByZHR5cGUsIGFsZ29yaXRobSwgZnBfdHlwZSwgZmluZ2VycHJpbnQpCisgICAgCisgICAgZnJv
bV90ZXh0ID0gY2xhc3NtZXRob2QoZnJvbV90ZXh0KQorCisgICAgZGVmIHRvX3dpcmUoc2VsZiwg
ZmlsZSwgY29tcHJlc3MgPSBOb25lLCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAgaGVhZGVyID0g
c3RydWN0LnBhY2soIiFCQiIsIHNlbGYuYWxnb3JpdGhtLCBzZWxmLmZwX3R5cGUpCisgICAgICAg
IGZpbGUud3JpdGUoaGVhZGVyKQorICAgICAgICBmaWxlLndyaXRlKHNlbGYuZmluZ2VycHJpbnQp
CisgICAgICAgIAorICAgIGRlZiBmcm9tX3dpcmUoY2xzLCByZGNsYXNzLCByZHR5cGUsIHdpcmUs
IGN1cnJlbnQsIHJkbGVuLCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAgaGVhZGVyID0gc3RydWN0
LnVucGFjaygiIUJCIiwgd2lyZVtjdXJyZW50IDogY3VycmVudCArIDJdKQorICAgICAgICBjdXJy
ZW50ICs9IDIKKyAgICAgICAgcmRsZW4gLT0gMgorICAgICAgICBmaW5nZXJwcmludCA9IHdpcmVb
Y3VycmVudCA6IGN1cnJlbnQgKyByZGxlbl0KKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCBy
ZHR5cGUsIGhlYWRlclswXSwgaGVhZGVyWzFdLCBmaW5nZXJwcmludCkKKworICAgIGZyb21fd2ly
ZSA9IGNsYXNzbWV0aG9kKGZyb21fd2lyZSkKKworICAgIGRlZiBfY21wKHNlbGYsIG90aGVyKToK
KyAgICAgICAgaHMgPSBzdHJ1Y3QucGFjaygiIUJCIiwgc2VsZi5hbGdvcml0aG0sIHNlbGYuZnBf
dHlwZSkKKyAgICAgICAgaG8gPSBzdHJ1Y3QucGFjaygiIUJCIiwgb3RoZXIuYWxnb3JpdGhtLCBv
dGhlci5mcF90eXBlKQorICAgICAgICB2ID0gY21wKGhzLCBobykKKyAgICAgICAgaWYgdiA9PSAw
OgorICAgICAgICAgICAgdiA9IGNtcChzZWxmLmZpbmdlcnByaW50LCBvdGhlci5maW5nZXJwcmlu
dCkKKyAgICAgICAgcmV0dXJuIHYKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvZG5zL3JkdHlwZXMvQU5ZL1RYVC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVw
bGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9UWFQucHkJKHJldmlzaW9uIDApCisrKyBU
b29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9UWFQucHkJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIw
MDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9k
aWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlv
biBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwK
KyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt
aXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJF
IElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVT
CisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBT
SEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJF
Q1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVS
IFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4g
QU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFD
VElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1Ig
UEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworaW1wb3J0IGRucy5yZHR5cGVzLnR4dGJh
c2UKKworY2xhc3MgVFhUKGRucy5yZHR5cGVzLnR4dGJhc2UuVFhUQmFzZSk6CisgICAgIiIiVFhU
IHJlY29yZCIiIgorICAgIHBhc3MKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvZG5zL3JkdHlwZXMvQU5ZL1gyNS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVw
bGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9YMjUucHkJKHJldmlzaW9uIDApCisrKyBU
b29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9YMjUucHkJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIw
MDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9k
aWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlv
biBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwK
KyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt
aXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJF
IElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVT
CisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBT
SEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJF
Q1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVS
IFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4g
QU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFD
VElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1Ig
UEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworaW1wb3J0IGRucy5leGNlcHRpb24KK2lt
cG9ydCBkbnMucmRhdGEKK2ltcG9ydCBkbnMudG9rZW5pemVyCisKK2NsYXNzIFgyNShkbnMucmRh
dGEuUmRhdGEpOgorICAgICIiIlgyNSByZWNvcmQKKworICAgIEBpdmFyIGFkZHJlc3M6IHRoZSBQ
U0ROIGFkZHJlc3MKKyAgICBAdHlwZSBhZGRyZXNzOiBzdHJpbmcKKyAgICBAc2VlOiBSRkMgMTE4
MyIiIgorCisgICAgX19zbG90c19fID0gWydhZGRyZXNzJ10KKyAgICAKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcmRjbGFzcywgcmR0eXBlLCBhZGRyZXNzKToKKyAgICAgICAgc3VwZXIoWDI1LCBz
ZWxmKS5fX2luaXRfXyhyZGNsYXNzLCByZHR5cGUpCisgICAgICAgIHNlbGYuYWRkcmVzcyA9IGFk
ZHJlc3MKKworICAgIGRlZiB0b190ZXh0KHNlbGYsIG9yaWdpbj1Ob25lLCByZWxhdGl2aXplPVRy
dWUsICoqa3cpOgorICAgICAgICByZXR1cm4gJyIlcyInICUgZG5zLnJkYXRhLl9lc2NhcGlmeShz
ZWxmLmFkZHJlc3MpCisgICAgICAgIAorICAgIGRlZiBmcm9tX3RleHQoY2xzLCByZGNsYXNzLCBy
ZHR5cGUsIHRvaywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUpOgorICAgICAgICBh
ZGRyZXNzID0gdG9rLmdldF9zdHJpbmcoKQorICAgICAgICB0b2suZ2V0X2VvbCgpCisgICAgICAg
IHJldHVybiBjbHMocmRjbGFzcywgcmR0eXBlLCBhZGRyZXNzKQorICAgIAorICAgIGZyb21fdGV4
dCA9IGNsYXNzbWV0aG9kKGZyb21fdGV4dCkKKworICAgIGRlZiB0b193aXJlKHNlbGYsIGZpbGUs
IGNvbXByZXNzID0gTm9uZSwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIGwgPSBsZW4oc2VsZi5h
ZGRyZXNzKQorICAgICAgICBhc3NlcnQgbCA8IDI1NgorICAgICAgICBieXRlID0gY2hyKGwpCisg
ICAgICAgIGZpbGUud3JpdGUoYnl0ZSkKKyAgICAgICAgZmlsZS53cml0ZShzZWxmLmFkZHJlc3Mp
CisgICAgICAgIAorICAgIGRlZiBmcm9tX3dpcmUoY2xzLCByZGNsYXNzLCByZHR5cGUsIHdpcmUs
IGN1cnJlbnQsIHJkbGVuLCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAgbCA9IG9yZCh3aXJlW2N1
cnJlbnRdKQorICAgICAgICBjdXJyZW50ICs9IDEKKyAgICAgICAgcmRsZW4gLT0gMQorICAgICAg
ICBpZiBsICE9IHJkbGVuOgorICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5Gb3JtRXJy
b3IKKyAgICAgICAgYWRkcmVzcyA9IHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyBsXQorICAgICAg
ICByZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlwZSwgYWRkcmVzcykKKworICAgIGZyb21fd2lyZSA9
IGNsYXNzbWV0aG9kKGZyb21fd2lyZSkKKworICAgIGRlZiBfY21wKHNlbGYsIG90aGVyKToKKyAg
ICAgICAgcmV0dXJuIGNtcChzZWxmLmFkZHJlc3MsIG90aGVyLmFkZHJlc3MpCkluZGV4OiBUb29s
cy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9fX2luaXRfXy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVz
L0FOWS9fX2luaXRfXy5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhp
cmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL19faW5pdF9fLnB5CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ4IEBACisjIENvcHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0s
IEluYy4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1
dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3Nl
IHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQg
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMg
YXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg
SVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBU
TyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBM
SUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBM
T1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBD
T05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VU
CisjIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRI
SVMgU09GVFdBUkUuCisKKyIiIkNsYXNzIEFOWSAoZ2VuZXJpYykgcmRhdGEgdHlwZSBjbGFzc2Vz
LiIiIgorCitfX2FsbF9fID0gWworICAgICdBRlNEQicsCisgICAgJ0NFUlQnLAorICAgICdDTkFN
RScsCisgICAgJ0RMVicsCisgICAgJ0ROQU1FJywKKyAgICAnRE5TS0VZJywKKyAgICAnRFMnLAor
ICAgICdHUE9TJywKKyAgICAnSElORk8nLAorICAgICdISVAnLAorICAgICdJU0ROJywKKyAgICAn
S0VZJywKKyAgICAnTE9DJywKKyAgICAnTVgnLAorICAgICdOUycsCisgICAgJ05TRUMnLAorICAg
ICdOU0VDMycsCisgICAgJ05TRUMzUEFSQU0nLAorICAgICdOWFQnLAorICAgICdQVFInLAorICAg
ICdSUCcsCisgICAgJ1JSU0lHJywKKyAgICAnUlQnLAorICAgICdTSUcnLAorICAgICdTT0EnLAor
ICAgICdTUEYnLAorICAgICdTU0hGUCcsCisgICAgJ1RYVCcsCisgICAgJ1gyNScsCitdCkluZGV4
OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0lOL0EucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9J
Ti9BLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9k
bnMvcmR0eXBlcy9JTi9BLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisjIENvcHly
aWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4KKyMKKyMgUGVybWlz
c2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBh
bmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBm
ZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdo
dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFsbCBjb3Bp
ZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01JTlVNIERJ
U0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElO
Q0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisjIEFOWSBT
UEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5Z
IERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBP
UiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5D
RSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElOIENPTk5F
Q1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKK2lt
cG9ydCBkbnMuZXhjZXB0aW9uCitpbXBvcnQgZG5zLmlwdjQKK2ltcG9ydCBkbnMucmRhdGEKK2lt
cG9ydCBkbnMudG9rZW5pemVyCisKK2NsYXNzIEEoZG5zLnJkYXRhLlJkYXRhKToKKyAgICAiIiJB
IHJlY29yZC4KKworICAgIEBpdmFyIGFkZHJlc3M6IGFuIElQdjQgYWRkcmVzcworICAgIEB0eXBl
IGFkZHJlc3M6IHN0cmluZyAoaW4gdGhlIHN0YW5kYXJkICJkb3R0ZWQgcXVhZCIgZm9ybWF0KSIi
IgorCisgICAgX19zbG90c19fID0gWydhZGRyZXNzJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCByZGNsYXNzLCByZHR5cGUsIGFkZHJlc3MpOgorICAgICAgICBzdXBlcihBLCBzZWxmKS5fX2lu
aXRfXyhyZGNsYXNzLCByZHR5cGUpCisgICAgICAgICMgY2hlY2sgdGhhdCBpdCdzIE9LCisgICAg
ICAgIGp1bmsgPSBkbnMuaXB2NC5pbmV0X2F0b24oYWRkcmVzcykKKyAgICAgICAgc2VsZi5hZGRy
ZXNzID0gYWRkcmVzcworCisgICAgZGVmIHRvX3RleHQoc2VsZiwgb3JpZ2luPU5vbmUsIHJlbGF0
aXZpemU9VHJ1ZSwgKiprdyk6CisgICAgICAgIHJldHVybiBzZWxmLmFkZHJlc3MKKworICAgIGRl
ZiBmcm9tX3RleHQoY2xzLCByZGNsYXNzLCByZHR5cGUsIHRvaywgb3JpZ2luID0gTm9uZSwgcmVs
YXRpdml6ZSA9IFRydWUpOgorICAgICAgICBhZGRyZXNzID0gdG9rLmdldF9pZGVudGlmaWVyKCkK
KyAgICAgICAgdG9rLmdldF9lb2woKQorICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlw
ZSwgYWRkcmVzcykKKworICAgIGZyb21fdGV4dCA9IGNsYXNzbWV0aG9kKGZyb21fdGV4dCkKKwor
ICAgIGRlZiB0b193aXJlKHNlbGYsIGZpbGUsIGNvbXByZXNzID0gTm9uZSwgb3JpZ2luID0gTm9u
ZSk6CisgICAgICAgIGZpbGUud3JpdGUoZG5zLmlwdjQuaW5ldF9hdG9uKHNlbGYuYWRkcmVzcykp
CisKKyAgICBkZWYgZnJvbV93aXJlKGNscywgcmRjbGFzcywgcmR0eXBlLCB3aXJlLCBjdXJyZW50
LCByZGxlbiwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIGFkZHJlc3MgPSBkbnMuaXB2NC5pbmV0
X250b2Eod2lyZVtjdXJyZW50IDogY3VycmVudCArIHJkbGVuXSkKKyAgICAgICAgcmV0dXJuIGNs
cyhyZGNsYXNzLCByZHR5cGUsIGFkZHJlc3MpCisKKyAgICBmcm9tX3dpcmUgPSBjbGFzc21ldGhv
ZChmcm9tX3dpcmUpCisKKyAgICBkZWYgX2NtcChzZWxmLCBvdGhlcik6CisgICAgICAgIHNhID0g
ZG5zLmlwdjQuaW5ldF9hdG9uKHNlbGYuYWRkcmVzcykKKyAgICAgICAgb2EgPSBkbnMuaXB2NC5p
bmV0X2F0b24ob3RoZXIuYWRkcmVzcykKKyAgICAgICAgcmV0dXJuIGNtcChzYSwgb2EpCkluZGV4
OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0lOL0FBQUEucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBl
cy9JTi9BQUFBLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9w
YXJ0eS9kbnMvcmR0eXBlcy9JTi9BQUFBLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBA
CisjIENvcHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4KKyMK
KyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBz
b2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Ig
d2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGlu
IGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBO
T01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNP
RlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9S
CisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVT
RSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwg
TkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9S
IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdB
UkUuCisKK2ltcG9ydCBkbnMuZXhjZXB0aW9uCitpbXBvcnQgZG5zLmluZXQKK2ltcG9ydCBkbnMu
cmRhdGEKK2ltcG9ydCBkbnMudG9rZW5pemVyCisKK2NsYXNzIEFBQUEoZG5zLnJkYXRhLlJkYXRh
KToKKyAgICAiIiJBQUFBIHJlY29yZC4KKworICAgIEBpdmFyIGFkZHJlc3M6IGFuIElQdjYgYWRk
cmVzcworICAgIEB0eXBlIGFkZHJlc3M6IHN0cmluZyAoaW4gdGhlIHN0YW5kYXJkIElQdjYgZm9y
bWF0KSIiIgorCisgICAgX19zbG90c19fID0gWydhZGRyZXNzJ10KKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCByZGNsYXNzLCByZHR5cGUsIGFkZHJlc3MpOgorICAgICAgICBzdXBlcihBQUFBLCBz
ZWxmKS5fX2luaXRfXyhyZGNsYXNzLCByZHR5cGUpCisgICAgICAgICMgY2hlY2sgdGhhdCBpdCdz
IE9LCisgICAgICAgIGp1bmsgPSBkbnMuaW5ldC5pbmV0X3B0b24oZG5zLmluZXQuQUZfSU5FVDYs
IGFkZHJlc3MpCisgICAgICAgIHNlbGYuYWRkcmVzcyA9IGFkZHJlc3MKKworICAgIGRlZiB0b190
ZXh0KHNlbGYsIG9yaWdpbj1Ob25lLCByZWxhdGl2aXplPVRydWUsICoqa3cpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5hZGRyZXNzCisKKyAgICBkZWYgZnJvbV90ZXh0KGNscywgcmRjbGFzcywgcmR0
eXBlLCB0b2ssIG9yaWdpbiA9IE5vbmUsIHJlbGF0aXZpemUgPSBUcnVlKToKKyAgICAgICAgYWRk
cmVzcyA9IHRvay5nZXRfaWRlbnRpZmllcigpCisgICAgICAgIHRvay5nZXRfZW9sKCkKKyAgICAg
ICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5cGUsIGFkZHJlc3MpCisKKyAgICBmcm9tX3RleHQg
PSBjbGFzc21ldGhvZChmcm9tX3RleHQpCisKKyAgICBkZWYgdG9fd2lyZShzZWxmLCBmaWxlLCBj
b21wcmVzcyA9IE5vbmUsIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICBmaWxlLndyaXRlKGRucy5p
bmV0LmluZXRfcHRvbihkbnMuaW5ldC5BRl9JTkVUNiwgc2VsZi5hZGRyZXNzKSkKKworICAgIGRl
ZiBmcm9tX3dpcmUoY2xzLCByZGNsYXNzLCByZHR5cGUsIHdpcmUsIGN1cnJlbnQsIHJkbGVuLCBv
cmlnaW4gPSBOb25lKToKKyAgICAgICAgYWRkcmVzcyA9IGRucy5pbmV0LmluZXRfbnRvcChkbnMu
aW5ldC5BRl9JTkVUNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXJl
W2N1cnJlbnQgOiBjdXJyZW50ICsgcmRsZW5dKQorICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3Ms
IHJkdHlwZSwgYWRkcmVzcykKKworICAgIGZyb21fd2lyZSA9IGNsYXNzbWV0aG9kKGZyb21fd2ly
ZSkKKworICAgIGRlZiBfY21wKHNlbGYsIG90aGVyKToKKyAgICAgICAgc2EgPSBkbnMuaW5ldC5p
bmV0X3B0b24oZG5zLmluZXQuQUZfSU5FVDYsIHNlbGYuYWRkcmVzcykKKyAgICAgICAgb2EgPSBk
bnMuaW5ldC5pbmV0X3B0b24oZG5zLmluZXQuQUZfSU5FVDYsIG90aGVyLmFkZHJlc3MpCisgICAg
ICAgIHJldHVybiBjbXAoc2EsIG9hKQpJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9w
YXJ0eS9kbnMvcmR0eXBlcy9JTi9BUEwucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJl
cGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9BUEwucHkJKHJldmlzaW9uIDApCisrKyBU
b29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0lOL0FQTC5weQkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIw
MDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9k
aWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlv
biBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwK
KyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt
aXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJF
IElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVT
CisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBT
SEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJF
Q1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVS
IFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4g
QU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFD
VElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1Ig
UEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworaW1wb3J0IGNTdHJpbmdJTworaW1wb3J0
IHN0cnVjdAorCitpbXBvcnQgZG5zLmV4Y2VwdGlvbgoraW1wb3J0IGRucy5pbmV0CitpbXBvcnQg
ZG5zLnJkYXRhCitpbXBvcnQgZG5zLnRva2VuaXplcgorCitjbGFzcyBBUExJdGVtKG9iamVjdCk6
CisgICAgIiIiQW4gQVBMIGxpc3QgaXRlbS4KKworICAgIEBpdmFyIGZhbWlseTogdGhlIGFkZHJl
c3MgZmFtaWx5IChJQU5BIGFkZHJlc3MgZmFtaWx5IHJlZ2lzdHJ5KQorICAgIEB0eXBlIGZhbWls
eTogaW50CisgICAgQGl2YXIgbmVnYXRpb246IGlzIHRoaXMgaXRlbSBuZWdhdGVkPworICAgIEB0
eXBlIG5lZ2F0aW9uOiBib29sCisgICAgQGl2YXIgYWRkcmVzczogdGhlIGFkZHJlc3MKKyAgICBA
dHlwZSBhZGRyZXNzOiBzdHJpbmcKKyAgICBAaXZhciBwcmVmaXg6IHRoZSBwcmVmaXggbGVuZ3Ro
CisgICAgQHR5cGUgcHJlZml4OiBpbnQKKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9IFsnZmFt
aWx5JywgJ25lZ2F0aW9uJywgJ2FkZHJlc3MnLCAncHJlZml4J10KKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBmYW1pbHksIG5lZ2F0aW9uLCBhZGRyZXNzLCBwcmVmaXgpOgorICAgICAgICBzZWxm
LmZhbWlseSA9IGZhbWlseQorICAgICAgICBzZWxmLm5lZ2F0aW9uID0gbmVnYXRpb24KKyAgICAg
ICAgc2VsZi5hZGRyZXNzID0gYWRkcmVzcworICAgICAgICBzZWxmLnByZWZpeCA9IHByZWZpeAor
CisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYubmVnYXRpb246CisgICAg
ICAgICAgICByZXR1cm4gIiElZDolcy8lcyIgJSAoc2VsZi5mYW1pbHksIHNlbGYuYWRkcmVzcywg
c2VsZi5wcmVmaXgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiVkOiVzLyVz
IiAlIChzZWxmLmZhbWlseSwgc2VsZi5hZGRyZXNzLCBzZWxmLnByZWZpeCkKKworICAgIGRlZiB0
b193aXJlKHNlbGYsIGZpbGUpOgorICAgICAgICBpZiBzZWxmLmZhbWlseSA9PSAxOgorICAgICAg
ICAgICAgYWRkcmVzcyA9IGRucy5pbmV0LmluZXRfcHRvbihkbnMuaW5ldC5BRl9JTkVULCBzZWxm
LmFkZHJlc3MpCisgICAgICAgIGVsaWYgc2VsZi5mYW1pbHkgPT0gMjoKKyAgICAgICAgICAgIGFk
ZHJlc3MgPSBkbnMuaW5ldC5pbmV0X3B0b24oZG5zLmluZXQuQUZfSU5FVDYsIHNlbGYuYWRkcmVz
cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZHJlc3MgPSBzZWxmLmFkZHJlc3MuZGVj
b2RlKCdoZXhfY29kZWMnKQorICAgICAgICAjCisgICAgICAgICMgVHJ1bmNhdGUgbGVhc3Qgc2ln
bmlmaWNhbnQgemVybyBieXRlcy4KKyAgICAgICAgIworICAgICAgICBsYXN0ID0gMAorICAgICAg
ICBmb3IgaSBpbiB4cmFuZ2UobGVuKGFkZHJlc3MpIC0gMSwgLTEsIC0xKToKKyAgICAgICAgICAg
IGlmIGFkZHJlc3NbaV0gIT0gY2hyKDApOgorICAgICAgICAgICAgICAgIGxhc3QgPSBpICsgMQor
ICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNzWzAgOiBsYXN0
XQorICAgICAgICBsID0gbGVuKGFkZHJlc3MpCisgICAgICAgIGFzc2VydCBsIDwgMTI4CisgICAg
ICAgIGlmIHNlbGYubmVnYXRpb246CisgICAgICAgICAgICBsIHw9IDB4ODAKKyAgICAgICAgaGVh
ZGVyID0gc3RydWN0LnBhY2soJyFIQkInLCBzZWxmLmZhbWlseSwgc2VsZi5wcmVmaXgsIGwpCisg
ICAgICAgIGZpbGUud3JpdGUoaGVhZGVyKQorICAgICAgICBmaWxlLndyaXRlKGFkZHJlc3MpCisK
K2NsYXNzIEFQTChkbnMucmRhdGEuUmRhdGEpOgorICAgICIiIkFQTCByZWNvcmQuCisKKyAgICBA
aXZhciBpdGVtczogYSBsaXN0IG9mIEFQTCBpdGVtcworICAgIEB0eXBlIGl0ZW1zOiBsaXN0IG9m
IEFQTF9JdGVtCisgICAgQHNlZTogUkZDIDMxMjMiIiIKKworICAgIF9fc2xvdHNfXyA9IFsnaXRl
bXMnXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJkY2xhc3MsIHJkdHlwZSwgaXRlbXMpOgor
ICAgICAgICBzdXBlcihBUEwsIHNlbGYpLl9faW5pdF9fKHJkY2xhc3MsIHJkdHlwZSkKKyAgICAg
ICAgc2VsZi5pdGVtcyA9IGl0ZW1zCisKKyAgICBkZWYgdG9fdGV4dChzZWxmLCBvcmlnaW49Tm9u
ZSwgcmVsYXRpdml6ZT1UcnVlLCAqKmt3KToKKyAgICAgICAgcmV0dXJuICcgJy5qb2luKG1hcChs
YW1iZGEgeDogc3RyKHgpLCBzZWxmLml0ZW1zKSkKKworICAgIGRlZiBmcm9tX3RleHQoY2xzLCBy
ZGNsYXNzLCByZHR5cGUsIHRvaywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUpOgor
ICAgICAgICBpdGVtcyA9IFtdCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0b2tlbiA9
IHRvay5nZXQoKS51bmVzY2FwZSgpCisgICAgICAgICAgICBpZiB0b2tlbi5pc19lb2xfb3JfZW9m
KCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGl0ZW0gPSB0b2tlbi52YWx1
ZQorICAgICAgICAgICAgaWYgaXRlbVswXSA9PSAnISc6CisgICAgICAgICAgICAgICAgbmVnYXRp
b24gPSBUcnVlCisgICAgICAgICAgICAgICAgaXRlbSA9IGl0ZW1bMTpdCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIG5lZ2F0aW9uID0gRmFsc2UKKyAgICAgICAgICAgIChmYW1p
bHksIHJlc3QpID0gaXRlbS5zcGxpdCgnOicsIDEpCisgICAgICAgICAgICBmYW1pbHkgPSBpbnQo
ZmFtaWx5KQorICAgICAgICAgICAgKGFkZHJlc3MsIHByZWZpeCkgPSByZXN0LnNwbGl0KCcvJywg
MSkKKyAgICAgICAgICAgIHByZWZpeCA9IGludChwcmVmaXgpCisgICAgICAgICAgICBpdGVtID0g
QVBMSXRlbShmYW1pbHksIG5lZ2F0aW9uLCBhZGRyZXNzLCBwcmVmaXgpCisgICAgICAgICAgICBp
dGVtcy5hcHBlbmQoaXRlbSkKKworICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlwZSwg
aXRlbXMpCisKKyAgICBmcm9tX3RleHQgPSBjbGFzc21ldGhvZChmcm9tX3RleHQpCisKKyAgICBk
ZWYgdG9fd2lyZShzZWxmLCBmaWxlLCBjb21wcmVzcyA9IE5vbmUsIG9yaWdpbiA9IE5vbmUpOgor
ICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLml0ZW1zOgorICAgICAgICAgICAgaXRlbS50b193aXJl
KGZpbGUpCisKKyAgICBkZWYgZnJvbV93aXJlKGNscywgcmRjbGFzcywgcmR0eXBlLCB3aXJlLCBj
dXJyZW50LCByZGxlbiwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIGl0ZW1zID0gW10KKyAgICAg
ICAgd2hpbGUgMToKKyAgICAgICAgICAgIGlmIHJkbGVuIDwgNDoKKyAgICAgICAgICAgICAgICBy
YWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcgorICAgICAgICAgICAgaGVhZGVyID0gc3RydWN0
LnVucGFjaygnIUhCQicsIHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyA0XSkKKyAgICAgICAgICAg
IGFmZGxlbiA9IGhlYWRlclsyXQorICAgICAgICAgICAgaWYgYWZkbGVuID4gMTI3OgorICAgICAg
ICAgICAgICAgIG5lZ2F0aW9uID0gVHJ1ZQorICAgICAgICAgICAgICAgIGFmZGxlbiAtPSAxMjgK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmVnYXRpb24gPSBGYWxzZQorICAg
ICAgICAgICAgY3VycmVudCArPSA0CisgICAgICAgICAgICByZGxlbiAtPSA0CisgICAgICAgICAg
ICBpZiByZGxlbiA8IGFmZGxlbjoKKyAgICAgICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9u
LkZvcm1FcnJvcgorICAgICAgICAgICAgYWRkcmVzcyA9IHdpcmVbY3VycmVudCA6IGN1cnJlbnQg
KyBhZmRsZW5dCisgICAgICAgICAgICBsID0gbGVuKGFkZHJlc3MpCisgICAgICAgICAgICBpZiBo
ZWFkZXJbMF0gPT0gMToKKyAgICAgICAgICAgICAgICBpZiBsIDwgNDoKKyAgICAgICAgICAgICAg
ICAgICAgYWRkcmVzcyArPSAnXHgwMCcgKiAoNCAtIGwpCisgICAgICAgICAgICAgICAgYWRkcmVz
cyA9IGRucy5pbmV0LmluZXRfbnRvcChkbnMuaW5ldC5BRl9JTkVULCBhZGRyZXNzKQorICAgICAg
ICAgICAgZWxpZiBoZWFkZXJbMF0gPT0gMjoKKyAgICAgICAgICAgICAgICBpZiBsIDwgMTY6Cisg
ICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgKz0gJ1x4MDAnICogKDE2IC0gbCkKKyAgICAgICAg
ICAgICAgICBhZGRyZXNzID0gZG5zLmluZXQuaW5ldF9udG9wKGRucy5pbmV0LkFGX0lORVQ2LCBh
ZGRyZXNzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAg
ICAgICAgIyBUaGlzIGlzbid0IHJlYWxseSByaWdodCBhY2NvcmRpbmcgdG8gdGhlIFJGQywgYnV0
IGl0CisgICAgICAgICAgICAgICAgIyBzZWVtcyBiZXR0ZXIgdGhhbiB0aHJvd2luZyBhbiBleGNl
cHRpb24KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgYWRkcmVzcyA9IGFkZHJl
c3MuZW5jb2RlKCdoZXhfY29kZWMnKQorICAgICAgICAgICAgY3VycmVudCArPSBhZmRsZW4KKyAg
ICAgICAgICAgIHJkbGVuIC09IGFmZGxlbgorICAgICAgICAgICAgaXRlbSA9IEFQTEl0ZW0oaGVh
ZGVyWzBdLCBuZWdhdGlvbiwgYWRkcmVzcywgaGVhZGVyWzFdKQorICAgICAgICAgICAgaXRlbXMu
YXBwZW5kKGl0ZW0pCisgICAgICAgICAgICBpZiByZGxlbiA9PSAwOgorICAgICAgICAgICAgICAg
IGJyZWFrCisgICAgICAgIHJldHVybiBjbHMocmRjbGFzcywgcmR0eXBlLCBpdGVtcykKKworICAg
IGZyb21fd2lyZSA9IGNsYXNzbWV0aG9kKGZyb21fd2lyZSkKKworICAgIGRlZiBfY21wKHNlbGYs
IG90aGVyKToKKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHNlbGYu
dG9fd2lyZShmKQorICAgICAgICB3aXJlMSA9IGYuZ2V0dmFsdWUoKQorICAgICAgICBmLnNlZWso
MCkKKyAgICAgICAgZi50cnVuY2F0ZSgpCisgICAgICAgIG90aGVyLnRvX3dpcmUoZikKKyAgICAg
ICAgd2lyZTIgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgcmV0
dXJuIGNtcCh3aXJlMSwgd2lyZTIpCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3Bh
cnR5L2Rucy9yZHR5cGVzL0lOL0RIQ0lELnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VS
ZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvSU4vREhDSUQucHkJKHJldmlzaW9uIDApCisr
KyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0lOL0RIQ0lELnB5
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBACisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOSwgMjAxMCBOb21pbnVtLCBJbmMuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5
LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVu
dGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFu
dGVkLAorIyBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz
IHBlcm1pc3Npb24gbm90aWNlCisjIGFwcGVhciBpbiBhbGwgY29waWVzLgorIworIyBUSEUgU09G
VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTk9NSU5VTSBESVNDTEFJTVMgQUxMIFdBUlJB
TlRJRVMKKyMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJ
RUQgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVW
RU5UIFNIQUxMIE5PTUlOVU0gQkUgTElBQkxFIEZPUgorIyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJ
TkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisjIFdIQVRT
T0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhF
UiBJTiBBTgorIyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElP
VVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVT
RSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitpbXBvcnQgZG5zLmV4Y2VwdGlv
bgorCitjbGFzcyBESENJRChkbnMucmRhdGEuUmRhdGEpOgorICAgICIiIkRIQ0lEIHJlY29yZAor
CisgICAgQGl2YXIgZGF0YTogdGhlIGRhdGEgKHRoZSBjb250ZW50IG9mIHRoZSBSUiBpcyBvcGFx
dWUgYXMgZmFyIGFzIHRoZQorICAgIEROUyBpcyBjb25jZXJuZWQpCisgICAgQHR5cGUgZGF0YTog
c3RyaW5nCisgICAgQHNlZTogUkZDIDQ3MDEiIiIKKworICAgIF9fc2xvdHNfXyA9IFsnZGF0YSdd
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmRjbGFzcywgcmR0eXBlLCBkYXRhKToKKyAgICAg
ICAgc3VwZXIoREhDSUQsIHNlbGYpLl9faW5pdF9fKHJkY2xhc3MsIHJkdHlwZSkKKyAgICAgICAg
c2VsZi5kYXRhID0gZGF0YQorCisgICAgZGVmIHRvX3RleHQoc2VsZiwgb3JpZ2luPU5vbmUsIHJl
bGF0aXZpemU9VHJ1ZSwgKiprdyk6CisgICAgICAgIHJldHVybiBkbnMucmRhdGEuX2Jhc2U2NGlm
eShzZWxmLmRhdGEpCisKKyAgICBkZWYgZnJvbV90ZXh0KGNscywgcmRjbGFzcywgcmR0eXBlLCB0
b2ssIG9yaWdpbiA9IE5vbmUsIHJlbGF0aXZpemUgPSBUcnVlKToKKyAgICAgICAgY2h1bmtzID0g
W10KKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHQgPSB0b2suZ2V0KCkudW5lc2NhcGUo
KQorICAgICAgICAgICAgaWYgdC5pc19lb2xfb3JfZW9mKCk6CisgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgICAgIGlmIG5vdCB0LmlzX2lkZW50aWZpZXIoKToKKyAgICAgICAgICAgICAg
ICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yCisgICAgICAgICAgICBjaHVua3MuYXBw
ZW5kKHQudmFsdWUpCisgICAgICAgIGI2NCA9ICcnLmpvaW4oY2h1bmtzKQorICAgICAgICBkYXRh
ID0gYjY0LmRlY29kZSgnYmFzZTY0X2NvZGVjJykKKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNz
LCByZHR5cGUsIGRhdGEpCisKKyAgICBmcm9tX3RleHQgPSBjbGFzc21ldGhvZChmcm9tX3RleHQp
CisKKyAgICBkZWYgdG9fd2lyZShzZWxmLCBmaWxlLCBjb21wcmVzcyA9IE5vbmUsIG9yaWdpbiA9
IE5vbmUpOgorICAgICAgICBmaWxlLndyaXRlKHNlbGYuZGF0YSkKKworICAgIGRlZiBmcm9tX3dp
cmUoY2xzLCByZGNsYXNzLCByZHR5cGUsIHdpcmUsIGN1cnJlbnQsIHJkbGVuLCBvcmlnaW4gPSBO
b25lKToKKyAgICAgICAgZGF0YSA9IHdpcmVbY3VycmVudCA6IGN1cnJlbnQgKyByZGxlbl0KKyAg
ICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5cGUsIGRhdGEpCisKKyAgICBmcm9tX3dpcmUg
PSBjbGFzc21ldGhvZChmcm9tX3dpcmUpCisKKyAgICBkZWYgX2NtcChzZWxmLCBvdGhlcik6Cisg
ICAgICAgIHJldHVybiBjbXAoc2VsZi5kYXRhLCBvdGhlci5kYXRhKQpJbmRleDogVG9vbHMvV2Vi
UGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9JUFNFQ0tFWS5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0lOL0lQ
U0VDS0VZLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0
eS9kbnMvcmR0eXBlcy9JTi9JUFNFQ0tFWS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTkg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4K
KyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhp
cyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGgg
b3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFy
IGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFO
RCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElT
IFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9G
IFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFD
VCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9G
IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09G
VFdBUkUuCisKK2ltcG9ydCBjU3RyaW5nSU8KK2ltcG9ydCBzdHJ1Y3QKKworaW1wb3J0IGRucy5l
eGNlcHRpb24KK2ltcG9ydCBkbnMuaW5ldAoraW1wb3J0IGRucy5uYW1lCisKK2NsYXNzIElQU0VD
S0VZKGRucy5yZGF0YS5SZGF0YSk6CisgICAgIiIiSVBTRUNLRVkgcmVjb3JkCisKKyAgICBAaXZh
ciBwcmVjZWRlbmNlOiB0aGUgcHJlY2VkZW5jZSBmb3IgdGhpcyBrZXkgZGF0YQorICAgIEB0eXBl
IHByZWNlZGVuY2U6IGludAorICAgIEBpdmFyIGdhdGV3YXlfdHlwZTogdGhlIGdhdGV3YXkgdHlw
ZQorICAgIEB0eXBlIGdhdGV3YXlfdHlwZTogaW50CisgICAgQGl2YXIgYWxnb3JpdGhtOiB0aGUg
YWxnb3JpdGhtIHRvIHVzZQorICAgIEB0eXBlIGFsZ29yaXRobTogaW50CisgICAgQGl2YXIgZ2F0
ZXdheTogdGhlIHB1YmxpYyBrZXkKKyAgICBAdHlwZSBnYXRld2F5OiBOb25lLCBJUHY0IGFkZHJl
c3MsIElQVjYgYWRkcmVzcywgb3IgZG9tYWluIG5hbWUKKyAgICBAaXZhciBrZXk6IHRoZSBwdWJs
aWMga2V5CisgICAgQHR5cGUga2V5OiBzdHJpbmcKKyAgICBAc2VlOiBSRkMgNDAyNSIiIgorCisg
ICAgX19zbG90c19fID0gWydwcmVjZWRlbmNlJywgJ2dhdGV3YXlfdHlwZScsICdhbGdvcml0aG0n
LCAnZ2F0ZXdheScsICdrZXknXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJkY2xhc3MsIHJk
dHlwZSwgcHJlY2VkZW5jZSwgZ2F0ZXdheV90eXBlLCBhbGdvcml0aG0sCisgICAgICAgICAgICAg
ICAgIGdhdGV3YXksIGtleSk6CisgICAgICAgIHN1cGVyKElQU0VDS0VZLCBzZWxmKS5fX2luaXRf
XyhyZGNsYXNzLCByZHR5cGUpCisgICAgICAgIGlmIGdhdGV3YXlfdHlwZSA9PSAwOgorICAgICAg
ICAgICAgaWYgZ2F0ZXdheSAhPSAnLicgYW5kIG5vdCBnYXRld2F5IGlzIE5vbmU6CisgICAgICAg
ICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoJ2ludmFsaWQgZ2F0ZXdheSBmb3IgZ2F0ZXdheSB0
eXBlIDAnKQorICAgICAgICAgICAgZ2F0ZXdheSA9IE5vbmUKKyAgICAgICAgZWxpZiBnYXRld2F5
X3R5cGUgPT0gMToKKyAgICAgICAgICAgICMgY2hlY2sgdGhhdCBpdCdzIE9LCisgICAgICAgICAg
ICBqdW5rID0gZG5zLmluZXQuaW5ldF9wdG9uKGRucy5pbmV0LkFGX0lORVQsIGdhdGV3YXkpCisg
ICAgICAgIGVsaWYgZ2F0ZXdheV90eXBlID09IDI6CisgICAgICAgICAgICAjIGNoZWNrIHRoYXQg
aXQncyBPSworICAgICAgICAgICAganVuayA9IGRucy5pbmV0LmluZXRfcHRvbihkbnMuaW5ldC5B
Rl9JTkVUNiwgZ2F0ZXdheSkKKyAgICAgICAgZWxpZiBnYXRld2F5X3R5cGUgPT0gMzoKKyAgICAg
ICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9y
KCdpbnZhbGlkIElQU0VDS0VZIGdhdGV3YXkgdHlwZTogJWQnICUgZ2F0ZXdheV90eXBlKQorICAg
ICAgICBzZWxmLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlCisgICAgICAgIHNlbGYuZ2F0ZXdheV90
eXBlID0gZ2F0ZXdheV90eXBlCisgICAgICAgIHNlbGYuYWxnb3JpdGhtID0gYWxnb3JpdGhtCisg
ICAgICAgIHNlbGYuZ2F0ZXdheSA9IGdhdGV3YXkKKyAgICAgICAgc2VsZi5rZXkgPSBrZXkKKwor
ICAgIGRlZiB0b190ZXh0KHNlbGYsIG9yaWdpbj1Ob25lLCByZWxhdGl2aXplPVRydWUsICoqa3cp
OgorICAgICAgICBpZiBzZWxmLmdhdGV3YXlfdHlwZSA9PSAwOgorICAgICAgICAgICAgZ2F0ZXdh
eSA9ICcuJworICAgICAgICBlbGlmIHNlbGYuZ2F0ZXdheV90eXBlID09IDE6CisgICAgICAgICAg
ICBnYXRld2F5ID0gc2VsZi5nYXRld2F5CisgICAgICAgIGVsaWYgc2VsZi5nYXRld2F5X3R5cGUg
PT0gMjoKKyAgICAgICAgICAgIGdhdGV3YXkgPSBzZWxmLmdhdGV3YXkKKyAgICAgICAgZWxpZiBz
ZWxmLmdhdGV3YXlfdHlwZSA9PSAzOgorICAgICAgICAgICAgZ2F0ZXdheSA9IHN0cihzZWxmLmdh
dGV3YXkuY2hvb3NlX3JlbGF0aXZpdHkob3JpZ2luLCByZWxhdGl2aXplKSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgZ2F0ZXdheSB0eXBlJykK
KyAgICAgICAgcmV0dXJuICclZCAlZCAlZCAlcyAlcycgJSAoc2VsZi5wcmVjZWRlbmNlLCBzZWxm
LmdhdGV3YXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5h
bGdvcml0aG0sIGdhdGV3YXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRu
cy5yZGF0YS5fYmFzZTY0aWZ5KHNlbGYua2V5KSkKKworICAgIGRlZiBmcm9tX3RleHQoY2xzLCBy
ZGNsYXNzLCByZHR5cGUsIHRvaywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUpOgor
ICAgICAgICBwcmVjZWRlbmNlID0gdG9rLmdldF91aW50OCgpCisgICAgICAgIGdhdGV3YXlfdHlw
ZSA9IHRvay5nZXRfdWludDgoKQorICAgICAgICBhbGdvcml0aG0gPSB0b2suZ2V0X3VpbnQ4KCkK
KyAgICAgICAgaWYgZ2F0ZXdheV90eXBlID09IDM6CisgICAgICAgICAgICBnYXRld2F5ID0gdG9r
LmdldF9uYW1lKCkuY2hvb3NlX3JlbGF0aXZpdHkob3JpZ2luLCByZWxhdGl2aXplKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgZ2F0ZXdheSA9IHRvay5nZXRfc3RyaW5nKCkKKyAgICAgICAg
Y2h1bmtzID0gW10KKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHQgPSB0b2suZ2V0KCku
dW5lc2NhcGUoKQorICAgICAgICAgICAgaWYgdC5pc19lb2xfb3JfZW9mKCk6CisgICAgICAgICAg
ICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCB0LmlzX2lkZW50aWZpZXIoKToKKyAgICAg
ICAgICAgICAgICByYWlzZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yCisgICAgICAgICAgICBj
aHVua3MuYXBwZW5kKHQudmFsdWUpCisgICAgICAgIGI2NCA9ICcnLmpvaW4oY2h1bmtzKQorICAg
ICAgICBrZXkgPSBiNjQuZGVjb2RlKCdiYXNlNjRfY29kZWMnKQorICAgICAgICByZXR1cm4gY2xz
KHJkY2xhc3MsIHJkdHlwZSwgcHJlY2VkZW5jZSwgZ2F0ZXdheV90eXBlLCBhbGdvcml0aG0sCisg
ICAgICAgICAgICAgICAgICAgZ2F0ZXdheSwga2V5KQorCisgICAgZnJvbV90ZXh0ID0gY2xhc3Nt
ZXRob2QoZnJvbV90ZXh0KQorCisgICAgZGVmIHRvX3dpcmUoc2VsZiwgZmlsZSwgY29tcHJlc3Mg
PSBOb25lLCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAgaGVhZGVyID0gc3RydWN0LnBhY2soIiFC
QkIiLCBzZWxmLnByZWNlZGVuY2UsIHNlbGYuZ2F0ZXdheV90eXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLmFsZ29yaXRobSkKKyAgICAgICAgZmlsZS53cml0ZShoZWFkZXIp
CisgICAgICAgIGlmIHNlbGYuZ2F0ZXdheV90eXBlID09IDA6CisgICAgICAgICAgICBwYXNzCisg
ICAgICAgIGVsaWYgc2VsZi5nYXRld2F5X3R5cGUgPT0gMToKKyAgICAgICAgICAgIGZpbGUud3Jp
dGUoZG5zLmluZXQuaW5ldF9wdG9uKGRucy5pbmV0LkFGX0lORVQsIHNlbGYuZ2F0ZXdheSkpCisg
ICAgICAgIGVsaWYgc2VsZi5nYXRld2F5X3R5cGUgPT0gMjoKKyAgICAgICAgICAgIGZpbGUud3Jp
dGUoZG5zLmluZXQuaW5ldF9wdG9uKGRucy5pbmV0LkFGX0lORVQ2LCBzZWxmLmdhdGV3YXkpKQor
ICAgICAgICBlbGlmIHNlbGYuZ2F0ZXdheV90eXBlID09IDM6CisgICAgICAgICAgICBzZWxmLmdh
dGV3YXkudG9fd2lyZShmaWxlLCBOb25lLCBvcmlnaW4pCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIGdhdGV3YXkgdHlwZScpCisgICAgICAgIGZp
bGUud3JpdGUoc2VsZi5rZXkpCisKKyAgICBkZWYgZnJvbV93aXJlKGNscywgcmRjbGFzcywgcmR0
eXBlLCB3aXJlLCBjdXJyZW50LCByZGxlbiwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIGlmIHJk
bGVuIDwgMzoKKyAgICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uRm9ybUVycm9yCisgICAg
ICAgIGhlYWRlciA9IHN0cnVjdC51bnBhY2soJyFCQkInLCB3aXJlW2N1cnJlbnQgOiBjdXJyZW50
ICsgM10pCisgICAgICAgIGdhdGV3YXlfdHlwZSA9IGhlYWRlclsxXQorICAgICAgICBjdXJyZW50
ICs9IDMKKyAgICAgICAgcmRsZW4gLT0gMworICAgICAgICBpZiBnYXRld2F5X3R5cGUgPT0gMDoK
KyAgICAgICAgICAgIGdhdGV3YXkgPSBOb25lCisgICAgICAgIGVsaWYgZ2F0ZXdheV90eXBlID09
IDE6CisgICAgICAgICAgICBnYXRld2F5ID0gZG5zLmluZXQuaW5ldF9udG9wKGRucy5pbmV0LkFG
X0lORVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpcmVbY3Vy
cmVudCA6IGN1cnJlbnQgKyA0XSkKKyAgICAgICAgICAgIGN1cnJlbnQgKz0gNAorICAgICAgICAg
ICAgcmRsZW4gLT0gNAorICAgICAgICBlbGlmIGdhdGV3YXlfdHlwZSA9PSAyOgorICAgICAgICAg
ICAgZ2F0ZXdheSA9IGRucy5pbmV0LmluZXRfbnRvcChkbnMuaW5ldC5BRl9JTkVUNiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lyZVtjdXJyZW50IDogY3VycmVu
dCArIDE2XSkKKyAgICAgICAgICAgIGN1cnJlbnQgKz0gMTYKKyAgICAgICAgICAgIHJkbGVuIC09
IDE2CisgICAgICAgIGVsaWYgZ2F0ZXdheV90eXBlID09IDM6CisgICAgICAgICAgICAoZ2F0ZXdh
eSwgY3VzZWQpID0gZG5zLm5hbWUuZnJvbV93aXJlKHdpcmVbOiBjdXJyZW50ICsgcmRsZW5dLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
KQorICAgICAgICAgICAgY3VycmVudCArPSBjdXNlZAorICAgICAgICAgICAgcmRsZW4gLT0gY3Vz
ZWQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIGRucy5leGNlcHRpb24uRm9ybUVy
cm9yKCdpbnZhbGlkIElQU0VDS0VZIGdhdGV3YXkgdHlwZScpCisgICAgICAgIGtleSA9IHdpcmVb
Y3VycmVudCA6IGN1cnJlbnQgKyByZGxlbl0KKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCBy
ZHR5cGUsIGhlYWRlclswXSwgZ2F0ZXdheV90eXBlLCBoZWFkZXJbMl0sCisgICAgICAgICAgICAg
ICAgICAgZ2F0ZXdheSwga2V5KQorCisgICAgZnJvbV93aXJlID0gY2xhc3NtZXRob2QoZnJvbV93
aXJlKQorCisgICAgZGVmIF9jbXAoc2VsZiwgb3RoZXIpOgorICAgICAgICBmID0gY1N0cmluZ0lP
LlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi50b193aXJlKGYpCisgICAgICAgIHdpcmUxID0gZi5n
ZXR2YWx1ZSgpCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBmLnRydW5jYXRlKCkKKyAgICAg
ICAgb3RoZXIudG9fd2lyZShmKQorICAgICAgICB3aXJlMiA9IGYuZ2V0dmFsdWUoKQorICAgICAg
ICBmLmNsb3NlKCkKKworICAgICAgICByZXR1cm4gY21wKHdpcmUxLCB3aXJlMikKSW5kZXg6IFRv
b2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvSU4vS1gucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9L
WC5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5z
L3JkdHlwZXMvSU4vS1gucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNz
aW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFu
ZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZl
ZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGll
cy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElT
Q0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5D
TFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQ
RUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkg
REFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9S
IFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNF
IE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVD
VElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworaW1w
b3J0IGRucy5yZHR5cGVzLm14YmFzZQorCitjbGFzcyBLWChkbnMucmR0eXBlcy5teGJhc2UuVW5j
b21wcmVzc2VkTVgpOgorICAgICIiIktYIHJlY29yZCIiIgorICAgIHBhc3MKSW5kZXg6IFRvb2xz
L1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvSU4vTkFQVFIucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9O
QVBUUi5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkv
ZG5zL3JkdHlwZXMvSU4vTkFQVFIucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMyIEBACisj
IENvcHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4KKyMKKyMg
UGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0
d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0
aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFyIGluIGFs
bCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBOT01J
TlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRX
QVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUgRk9SCisj
IEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
T1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwg
REFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFDVCwgTkVH
TElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9GIE9SIElO
IENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUu
CisKK2ltcG9ydCBzdHJ1Y3QKKworaW1wb3J0IGRucy5leGNlcHRpb24KK2ltcG9ydCBkbnMubmFt
ZQoraW1wb3J0IGRucy5yZGF0YQorCitkZWYgX3dyaXRlX3N0cmluZyhmaWxlLCBzKToKKyAgICBs
ID0gbGVuKHMpCisgICAgYXNzZXJ0IGwgPCAyNTYKKyAgICBieXRlID0gY2hyKGwpCisgICAgZmls
ZS53cml0ZShieXRlKQorICAgIGZpbGUud3JpdGUocykKKworY2xhc3MgTkFQVFIoZG5zLnJkYXRh
LlJkYXRhKToKKyAgICAiIiJOQVBUUiByZWNvcmQKKworICAgIEBpdmFyIG9yZGVyOiBvcmRlcgor
ICAgIEB0eXBlIG9yZGVyOiBpbnQKKyAgICBAaXZhciBwcmVmZXJlbmNlOiBwcmVmZXJlbmNlCisg
ICAgQHR5cGUgcHJlZmVyZW5jZTogaW50CisgICAgQGl2YXIgZmxhZ3M6IGZsYWdzCisgICAgQHR5
cGUgZmxhZ3M6IHN0cmluZworICAgIEBpdmFyIHNlcnZpY2U6IHNlcnZpY2UKKyAgICBAdHlwZSBz
ZXJ2aWNlOiBzdHJpbmcKKyAgICBAaXZhciByZWdleHA6IHJlZ3VsYXIgZXhwcmVzc2lvbgorICAg
IEB0eXBlIHJlZ2V4cDogc3RyaW5nCisgICAgQGl2YXIgcmVwbGFjZW1lbnQ6IHJlcGxhY2VtZW50
IG5hbWUKKyAgICBAdHlwZSByZXBsYWNlbWVudDogZG5zLm5hbWUuTmFtZSBvYmplY3QKKyAgICBA
c2VlOiBSRkMgMzQwMyIiIgorCisgICAgX19zbG90c19fID0gWydvcmRlcicsICdwcmVmZXJlbmNl
JywgJ2ZsYWdzJywgJ3NlcnZpY2UnLCAncmVnZXhwJywKKyAgICAgICAgICAgICAgICAgJ3JlcGxh
Y2VtZW50J10KKyAgICAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmRjbGFzcywgcmR0eXBlLCBv
cmRlciwgcHJlZmVyZW5jZSwgZmxhZ3MsIHNlcnZpY2UsCisgICAgICAgICAgICAgICAgIHJlZ2V4
cCwgcmVwbGFjZW1lbnQpOgorICAgICAgICBzdXBlcihOQVBUUiwgc2VsZikuX19pbml0X18ocmRj
bGFzcywgcmR0eXBlKQorICAgICAgICBzZWxmLm9yZGVyID0gb3JkZXIKKyAgICAgICAgc2VsZi5w
cmVmZXJlbmNlID0gcHJlZmVyZW5jZQorICAgICAgICBzZWxmLmZsYWdzID0gZmxhZ3MKKyAgICAg
ICAgc2VsZi5zZXJ2aWNlID0gc2VydmljZQorICAgICAgICBzZWxmLnJlZ2V4cCA9IHJlZ2V4cAor
ICAgICAgICBzZWxmLnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQKKworICAgIGRlZiB0b190ZXh0
KHNlbGYsIG9yaWdpbj1Ob25lLCByZWxhdGl2aXplPVRydWUsICoqa3cpOgorICAgICAgICByZXBs
YWNlbWVudCA9IHNlbGYucmVwbGFjZW1lbnQuY2hvb3NlX3JlbGF0aXZpdHkob3JpZ2luLCByZWxh
dGl2aXplKQorICAgICAgICByZXR1cm4gJyVkICVkICIlcyIgIiVzIiAiJXMiICVzJyAlIFwKKyAg
ICAgICAgICAgICAgIChzZWxmLm9yZGVyLCBzZWxmLnByZWZlcmVuY2UsCisgICAgICAgICAgICAg
ICAgZG5zLnJkYXRhLl9lc2NhcGlmeShzZWxmLmZsYWdzKSwKKyAgICAgICAgICAgICAgICBkbnMu
cmRhdGEuX2VzY2FwaWZ5KHNlbGYuc2VydmljZSksCisgICAgICAgICAgICAgICAgZG5zLnJkYXRh
Ll9lc2NhcGlmeShzZWxmLnJlZ2V4cCksCisgICAgICAgICAgICAgICAgc2VsZi5yZXBsYWNlbWVu
dCkKKworICAgIGRlZiBmcm9tX3RleHQoY2xzLCByZGNsYXNzLCByZHR5cGUsIHRvaywgb3JpZ2lu
ID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUpOgorICAgICAgICBvcmRlciA9IHRvay5nZXRfdWlu
dDE2KCkKKyAgICAgICAgcHJlZmVyZW5jZSA9IHRvay5nZXRfdWludDE2KCkKKyAgICAgICAgZmxh
Z3MgPSB0b2suZ2V0X3N0cmluZygpCisgICAgICAgIHNlcnZpY2UgPSB0b2suZ2V0X3N0cmluZygp
CisgICAgICAgIHJlZ2V4cCA9IHRvay5nZXRfc3RyaW5nKCkKKyAgICAgICAgcmVwbGFjZW1lbnQg
PSB0b2suZ2V0X25hbWUoKQorICAgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LmNob29z
ZV9yZWxhdGl2aXR5KG9yaWdpbiwgcmVsYXRpdml6ZSkKKyAgICAgICAgdG9rLmdldF9lb2woKQor
ICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlwZSwgb3JkZXIsIHByZWZlcmVuY2UsIGZs
YWdzLCBzZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgIHJlZ2V4cCwgcmVwbGFjZW1lbnQpCisg
ICAgCisgICAgZnJvbV90ZXh0ID0gY2xhc3NtZXRob2QoZnJvbV90ZXh0KQorCisgICAgZGVmIHRv
X3dpcmUoc2VsZiwgZmlsZSwgY29tcHJlc3MgPSBOb25lLCBvcmlnaW4gPSBOb25lKToKKyAgICAg
ICAgdHdvX2ludHMgPSBzdHJ1Y3QucGFjaygiIUhIIiwgc2VsZi5vcmRlciwgc2VsZi5wcmVmZXJl
bmNlKQorICAgICAgICBmaWxlLndyaXRlKHR3b19pbnRzKQorICAgICAgICBfd3JpdGVfc3RyaW5n
KGZpbGUsIHNlbGYuZmxhZ3MpCisgICAgICAgIF93cml0ZV9zdHJpbmcoZmlsZSwgc2VsZi5zZXJ2
aWNlKQorICAgICAgICBfd3JpdGVfc3RyaW5nKGZpbGUsIHNlbGYucmVnZXhwKQorICAgICAgICBz
ZWxmLnJlcGxhY2VtZW50LnRvX3dpcmUoZmlsZSwgY29tcHJlc3MsIG9yaWdpbikKKyAgICAgICAg
CisgICAgZGVmIGZyb21fd2lyZShjbHMsIHJkY2xhc3MsIHJkdHlwZSwgd2lyZSwgY3VycmVudCwg
cmRsZW4sIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICAob3JkZXIsIHByZWZlcmVuY2UpID0gc3Ry
dWN0LnVucGFjaygnIUhIJywgd2lyZVtjdXJyZW50IDogY3VycmVudCArIDRdKQorICAgICAgICBj
dXJyZW50ICs9IDQKKyAgICAgICAgcmRsZW4gLT0gNAorICAgICAgICBzdHJpbmdzID0gW10KKyAg
ICAgICAgZm9yIGkgaW4geHJhbmdlKDMpOgorICAgICAgICAgICAgbCA9IG9yZCh3aXJlW2N1cnJl
bnRdKQorICAgICAgICAgICAgY3VycmVudCArPSAxCisgICAgICAgICAgICByZGxlbiAtPSAxCisg
ICAgICAgICAgICBpZiBsID4gcmRsZW4gb3IgcmRsZW4gPCAwOgorICAgICAgICAgICAgICAgIHJh
aXNlIGRucy5leGNlcHRpb24uRm9ybUVycm9yCisgICAgICAgICAgICBzID0gd2lyZVtjdXJyZW50
IDogY3VycmVudCArIGxdCisgICAgICAgICAgICBjdXJyZW50ICs9IGwKKyAgICAgICAgICAgIHJk
bGVuIC09IGwKKyAgICAgICAgICAgIHN0cmluZ3MuYXBwZW5kKHMpCisgICAgICAgIChyZXBsYWNl
bWVudCwgY3VzZWQpID0gZG5zLm5hbWUuZnJvbV93aXJlKHdpcmVbOiBjdXJyZW50ICsgcmRsZW5d
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50KQorICAgICAgICBpZiBjdXNlZCAhPSByZGxlbjoKKyAgICAgICAgICAgIHJhaXNlIGRucy5l
eGNlcHRpb24uRm9ybUVycm9yCisgICAgICAgIGlmIG5vdCBvcmlnaW4gaXMgTm9uZToKKyAgICAg
ICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQucmVsYXRpdml6ZShvcmlnaW4pCisgICAg
ICAgIHJldHVybiBjbHMocmRjbGFzcywgcmR0eXBlLCBvcmRlciwgcHJlZmVyZW5jZSwgc3RyaW5n
c1swXSwgc3RyaW5nc1sxXSwKKyAgICAgICAgICAgICAgICAgICBzdHJpbmdzWzJdLCByZXBsYWNl
bWVudCkKKworICAgIGZyb21fd2lyZSA9IGNsYXNzbWV0aG9kKGZyb21fd2lyZSkKKworICAgIGRl
ZiBjaG9vc2VfcmVsYXRpdml0eShzZWxmLCBvcmlnaW4gPSBOb25lLCByZWxhdGl2aXplID0gVHJ1
ZSk6CisgICAgICAgIHNlbGYucmVwbGFjZW1lbnQgPSBzZWxmLnJlcGxhY2VtZW50LmNob29zZV9y
ZWxhdGl2aXR5KG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdml6ZSkKKyAgICAgICAgCisgICAgZGVmIF9j
bXAoc2VsZiwgb3RoZXIpOgorICAgICAgICBzcCA9IHN0cnVjdC5wYWNrKCIhSEgiLCBzZWxmLm9y
ZGVyLCBzZWxmLnByZWZlcmVuY2UpCisgICAgICAgIG9wID0gc3RydWN0LnBhY2soIiFISCIsIG90
aGVyLm9yZGVyLCBvdGhlci5wcmVmZXJlbmNlKQorICAgICAgICB2ID0gY21wKHNwLCBvcCkKKyAg
ICAgICAgaWYgdiA9PSAwOgorICAgICAgICAgICAgdiA9IGNtcChzZWxmLmZsYWdzLCBvdGhlci5m
bGFncykKKyAgICAgICAgICAgIGlmIHYgPT0gMDoKKyAgICAgICAgICAgICAgICB2ID0gY21wKHNl
bGYuc2VydmljZSwgb3RoZXIuc2VydmljZSkKKyAgICAgICAgICAgICAgICBpZiB2ID09IDA6Cisg
ICAgICAgICAgICAgICAgICAgIHYgPSBjbXAoc2VsZi5yZWdleHAsIG90aGVyLnJlZ2V4cCkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgdiA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgdiA9
IGNtcChzZWxmLnJlcGxhY2VtZW50LCBvdGhlci5yZXBsYWNlbWVudCkKKyAgICAgICAgcmV0dXJu
IHYKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvSU4v
TlNBUC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Ru
cy9yZHR5cGVzL0lOL05TQVAucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5
L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0lOL05TQVAucHkJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwg
SW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0
ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ug
d2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBh
cHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ
UyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRP
IFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExP
U1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENP
TlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQK
KyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJ
UyBTT0ZUV0FSRS4KKworaW1wb3J0IGRucy5leGNlcHRpb24KK2ltcG9ydCBkbnMucmRhdGEKK2lt
cG9ydCBkbnMudG9rZW5pemVyCisKK2NsYXNzIE5TQVAoZG5zLnJkYXRhLlJkYXRhKToKKyAgICAi
IiJOU0FQIHJlY29yZC4KKworICAgIEBpdmFyIGFkZHJlc3M6IGEgTkFTUAorICAgIEB0eXBlIGFk
ZHJlc3M6IHN0cmluZworICAgIEBzZWU6IFJGQyAxNzA2IiIiCisKKyAgICBfX3Nsb3RzX18gPSBb
J2FkZHJlc3MnXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJkY2xhc3MsIHJkdHlwZSwgYWRk
cmVzcyk6CisgICAgICAgIHN1cGVyKE5TQVAsIHNlbGYpLl9faW5pdF9fKHJkY2xhc3MsIHJkdHlw
ZSkKKyAgICAgICAgc2VsZi5hZGRyZXNzID0gYWRkcmVzcworCisgICAgZGVmIHRvX3RleHQoc2Vs
Ziwgb3JpZ2luPU5vbmUsIHJlbGF0aXZpemU9VHJ1ZSwgKiprdyk6CisgICAgICAgIHJldHVybiAi
MHglcyIgJSBzZWxmLmFkZHJlc3MuZW5jb2RlKCdoZXhfY29kZWMnKQorCisgICAgZGVmIGZyb21f
dGV4dChjbHMsIHJkY2xhc3MsIHJkdHlwZSwgdG9rLCBvcmlnaW4gPSBOb25lLCByZWxhdGl2aXpl
ID0gVHJ1ZSk6CisgICAgICAgIGFkZHJlc3MgPSB0b2suZ2V0X3N0cmluZygpCisgICAgICAgIHQg
PSB0b2suZ2V0X2VvbCgpCisgICAgICAgIGlmIGFkZHJlc3NbMDoyXSAhPSAnMHgnOgorICAgICAg
ICAgICAgcmFpc2UgZG5zLmV4Y2VwdGlvbi5TeW50YXhFcnJvcignc3RyaW5nIGRvZXMgbm90IHN0
YXJ0IHdpdGggMHgnKQorICAgICAgICBhZGRyZXNzID0gYWRkcmVzc1syOl0ucmVwbGFjZSgnLics
ICcnKQorICAgICAgICBpZiBsZW4oYWRkcmVzcykgJSAyICE9IDA6CisgICAgICAgICAgICByYWlz
ZSBkbnMuZXhjZXB0aW9uLlN5bnRheEVycm9yKCdoZXhzdHJpbmcgaGFzIG9kZCBsZW5ndGgnKQor
ICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy5kZWNvZGUoJ2hleF9jb2RlYycpCisgICAgICAgIHJl
dHVybiBjbHMocmRjbGFzcywgcmR0eXBlLCBhZGRyZXNzKQorCisgICAgZnJvbV90ZXh0ID0gY2xh
c3NtZXRob2QoZnJvbV90ZXh0KQorCisgICAgZGVmIHRvX3dpcmUoc2VsZiwgZmlsZSwgY29tcHJl
c3MgPSBOb25lLCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAgZmlsZS53cml0ZShzZWxmLmFkZHJl
c3MpCisKKyAgICBkZWYgZnJvbV93aXJlKGNscywgcmRjbGFzcywgcmR0eXBlLCB3aXJlLCBjdXJy
ZW50LCByZGxlbiwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIGFkZHJlc3MgPSB3aXJlW2N1cnJl
bnQgOiBjdXJyZW50ICsgcmRsZW5dCisgICAgICAgIHJldHVybiBjbHMocmRjbGFzcywgcmR0eXBl
LCBhZGRyZXNzKQorCisgICAgZnJvbV93aXJlID0gY2xhc3NtZXRob2QoZnJvbV93aXJlKQorCisg
ICAgZGVmIF9jbXAoc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gY21wKHNlbGYuYWRkcmVz
cywgb3RoZXIuYWRkcmVzcykKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkv
ZG5zL3JkdHlwZXMvSU4vTlNBUF9QVFIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJl
cGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9OU0FQX1BUUi5weQkocmV2aXNpb24gMCkK
KysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvSU4vTlNBUF9Q
VFIucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwg
Y29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9j
dW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkg
Z3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg
dGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhF
IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xBSU1TIEFMTCBX
QVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBO
TyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVD
VCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBX
SEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdI
RVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRP
UlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI
RSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworaW1wb3J0IGRucy5yZHR5
cGVzLm5zYmFzZQorCitjbGFzcyBOU0FQX1BUUihkbnMucmR0eXBlcy5uc2Jhc2UuVW5jb21wcmVz
c2VkTlMpOgorICAgICIiIk5TQVAtUFRSIHJlY29yZCIiIgorICAgIHBhc3MKSW5kZXg6IFRvb2xz
L1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvSU4vUFgucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9QWC5w
eQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3Jk
dHlwZXMvSU4vUFgucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTcgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9u
IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBp
dHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBp
cyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4K
KyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xB
SU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVE
SU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJ
QUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFN
QUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBS
T0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9S
IE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElP
TiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworaW1wb3J0
IHN0cnVjdAorCitpbXBvcnQgZG5zLmV4Y2VwdGlvbgoraW1wb3J0IGRucy5yZGF0YQoraW1wb3J0
IGRucy5uYW1lCisKK2NsYXNzIFBYKGRucy5yZGF0YS5SZGF0YSk6CisgICAgIiIiUFggcmVjb3Jk
LgorCisgICAgQGl2YXIgcHJlZmVyZW5jZTogdGhlIHByZWZlcmVuY2UgdmFsdWUKKyAgICBAdHlw
ZSBwcmVmZXJlbmNlOiBpbnQKKyAgICBAaXZhciBtYXA4MjI6IHRoZSBtYXA4MjIgbmFtZQorICAg
IEB0eXBlIG1hcDgyMjogZG5zLm5hbWUuTmFtZSBvYmplY3QKKyAgICBAaXZhciBtYXB4NDAwOiB0
aGUgbWFweDQwMCBuYW1lCisgICAgQHR5cGUgbWFweDQwMDogZG5zLm5hbWUuTmFtZSBvYmplY3QK
KyAgICBAc2VlOiBSRkMgMjE2MyIiIgorCisgICAgX19zbG90c19fID0gWydwcmVmZXJlbmNlJywg
J21hcDgyMicsICdtYXB4NDAwJ10KKyAgICAgICAgCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJk
Y2xhc3MsIHJkdHlwZSwgcHJlZmVyZW5jZSwgbWFwODIyLCBtYXB4NDAwKToKKyAgICAgICAgc3Vw
ZXIoUFgsIHNlbGYpLl9faW5pdF9fKHJkY2xhc3MsIHJkdHlwZSkKKyAgICAgICAgc2VsZi5wcmVm
ZXJlbmNlID0gcHJlZmVyZW5jZQorICAgICAgICBzZWxmLm1hcDgyMiA9IG1hcDgyMgorICAgICAg
ICBzZWxmLm1hcHg0MDAgPSBtYXB4NDAwCisKKyAgICBkZWYgdG9fdGV4dChzZWxmLCBvcmlnaW49
Tm9uZSwgcmVsYXRpdml6ZT1UcnVlLCAqKmt3KToKKyAgICAgICAgbWFwODIyID0gc2VsZi5tYXA4
MjIuY2hvb3NlX3JlbGF0aXZpdHkob3JpZ2luLCByZWxhdGl2aXplKQorICAgICAgICBtYXB4NDAw
ID0gc2VsZi5tYXB4NDAwLmNob29zZV9yZWxhdGl2aXR5KG9yaWdpbiwgcmVsYXRpdml6ZSkKKyAg
ICAgICAgcmV0dXJuICclZCAlcyAlcycgJSAoc2VsZi5wcmVmZXJlbmNlLCBtYXA4MjIsIG1hcHg0
MDApCisgICAgICAgIAorICAgIGRlZiBmcm9tX3RleHQoY2xzLCByZGNsYXNzLCByZHR5cGUsIHRv
aywgb3JpZ2luID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUpOgorICAgICAgICBwcmVmZXJlbmNl
ID0gdG9rLmdldF91aW50MTYoKQorICAgICAgICBtYXA4MjIgPSB0b2suZ2V0X25hbWUoKQorICAg
ICAgICBtYXA4MjIgPSBtYXA4MjIuY2hvb3NlX3JlbGF0aXZpdHkob3JpZ2luLCByZWxhdGl2aXpl
KQorICAgICAgICBtYXB4NDAwID0gdG9rLmdldF9uYW1lKE5vbmUpCisgICAgICAgIG1hcHg0MDAg
PSBtYXB4NDAwLmNob29zZV9yZWxhdGl2aXR5KG9yaWdpbiwgcmVsYXRpdml6ZSkKKyAgICAgICAg
dG9rLmdldF9lb2woKQorICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlwZSwgcHJlZmVy
ZW5jZSwgbWFwODIyLCBtYXB4NDAwKQorICAgIAorICAgIGZyb21fdGV4dCA9IGNsYXNzbWV0aG9k
KGZyb21fdGV4dCkKKworICAgIGRlZiB0b193aXJlKHNlbGYsIGZpbGUsIGNvbXByZXNzID0gTm9u
ZSwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIHByZWYgPSBzdHJ1Y3QucGFjaygiIUgiLCBzZWxm
LnByZWZlcmVuY2UpCisgICAgICAgIGZpbGUud3JpdGUocHJlZikKKyAgICAgICAgc2VsZi5tYXA4
MjIudG9fd2lyZShmaWxlLCBOb25lLCBvcmlnaW4pCisgICAgICAgIHNlbGYubWFweDQwMC50b193
aXJlKGZpbGUsIE5vbmUsIG9yaWdpbikKKyAgICAgICAgCisgICAgZGVmIGZyb21fd2lyZShjbHMs
IHJkY2xhc3MsIHJkdHlwZSwgd2lyZSwgY3VycmVudCwgcmRsZW4sIG9yaWdpbiA9IE5vbmUpOgor
ICAgICAgICAocHJlZmVyZW5jZSwgKSA9IHN0cnVjdC51bnBhY2soJyFIJywgd2lyZVtjdXJyZW50
IDogY3VycmVudCArIDJdKQorICAgICAgICBjdXJyZW50ICs9IDIKKyAgICAgICAgcmRsZW4gLT0g
MgorICAgICAgICAobWFwODIyLCBjdXNlZCkgPSBkbnMubmFtZS5mcm9tX3dpcmUod2lyZVs6IGN1
cnJlbnQgKyByZGxlbl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnQpCisgICAgICAgIGlmIGN1c2VkID4gcmRsZW46CisgICAgICAgICAgICBy
YWlzZSBkbnMuZXhjZXB0aW9uLkZvcm1FcnJvcgorICAgICAgICBjdXJyZW50ICs9IGN1c2VkCisg
ICAgICAgIHJkbGVuIC09IGN1c2VkCisgICAgICAgIGlmIG5vdCBvcmlnaW4gaXMgTm9uZToKKyAg
ICAgICAgICAgIG1hcDgyMiA9IG1hcDgyMi5yZWxhdGl2aXplKG9yaWdpbikKKyAgICAgICAgKG1h
cHg0MDAsIGN1c2VkKSA9IGRucy5uYW1lLmZyb21fd2lyZSh3aXJlWzogY3VycmVudCArIHJkbGVu
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
KQorICAgICAgICBpZiBjdXNlZCAhPSByZGxlbjoKKyAgICAgICAgICAgIHJhaXNlIGRucy5leGNl
cHRpb24uRm9ybUVycm9yCisgICAgICAgIGlmIG5vdCBvcmlnaW4gaXMgTm9uZToKKyAgICAgICAg
ICAgIG1hcHg0MDAgPSBtYXB4NDAwLnJlbGF0aXZpemUob3JpZ2luKQorICAgICAgICByZXR1cm4g
Y2xzKHJkY2xhc3MsIHJkdHlwZSwgcHJlZmVyZW5jZSwgbWFwODIyLCBtYXB4NDAwKQorCisgICAg
ZnJvbV93aXJlID0gY2xhc3NtZXRob2QoZnJvbV93aXJlKQorCisgICAgZGVmIGNob29zZV9yZWxh
dGl2aXR5KHNlbGYsIG9yaWdpbiA9IE5vbmUsIHJlbGF0aXZpemUgPSBUcnVlKToKKyAgICAgICAg
c2VsZi5tYXA4MjIgPSBzZWxmLm1hcDgyMi5jaG9vc2VfcmVsYXRpdml0eShvcmlnaW4sIHJlbGF0
aXZpemUpCisgICAgICAgIHNlbGYubWFweDQwMCA9IHNlbGYubWFweDQwMC5jaG9vc2VfcmVsYXRp
dml0eShvcmlnaW4sIHJlbGF0aXZpemUpCisKKyAgICBkZWYgX2NtcChzZWxmLCBvdGhlcik6Cisg
ICAgICAgIHNwID0gc3RydWN0LnBhY2soIiFIIiwgc2VsZi5wcmVmZXJlbmNlKQorICAgICAgICBv
cCA9IHN0cnVjdC5wYWNrKCIhSCIsIG90aGVyLnByZWZlcmVuY2UpCisgICAgICAgIHYgPSBjbXAo
c3AsIG9wKQorICAgICAgICBpZiB2ID09IDA6CisgICAgICAgICAgICB2ID0gY21wKHNlbGYubWFw
ODIyLCBvdGhlci5tYXA4MjIpCisgICAgICAgICAgICBpZiB2ID09IDA6CisgICAgICAgICAgICAg
ICAgdiA9IGNtcChzZWxmLm1hcHg0MDAsIG90aGVyLm1hcHg0MDApCisgICAgICAgIHJldHVybiB2
CkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0lOL1NS
Vi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9y
ZHR5cGVzL0lOL1NSVi5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhp
cmRfcGFydHkvZG5zL3JkdHlwZXMvSU4vU1JWLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg5
IEBACisjIENvcHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5vbWludW0sIEluYy4K
KyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhp
cyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGgg
b3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyMgYXBwZWFy
IGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFO
RCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJFR0FSRCBUTyBUSElT
IFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5VTSBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9G
IFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElPTiBPRiBDT05UUkFD
VCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisjIE9G
IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09G
VFdBUkUuCisKK2ltcG9ydCBzdHJ1Y3QKKworaW1wb3J0IGRucy5leGNlcHRpb24KK2ltcG9ydCBk
bnMucmRhdGEKK2ltcG9ydCBkbnMubmFtZQorCitjbGFzcyBTUlYoZG5zLnJkYXRhLlJkYXRhKToK
KyAgICAiIiJTUlYgcmVjb3JkCisKKyAgICBAaXZhciBwcmlvcml0eTogdGhlIHByaW9yaXR5Cisg
ICAgQHR5cGUgcHJpb3JpdHk6IGludAorICAgIEBpdmFyIHdlaWdodDogdGhlIHdlaWdodAorICAg
IEB0eXBlIHdlaWdodDogaW50CisgICAgQGl2YXIgcG9ydDogdGhlIHBvcnQgb2YgdGhlIHNlcnZp
Y2UKKyAgICBAdHlwZSBwb3J0OiBpbnQKKyAgICBAaXZhciB0YXJnZXQ6IHRoZSB0YXJnZXQgaG9z
dAorICAgIEB0eXBlIHRhcmdldDogZG5zLm5hbWUuTmFtZSBvYmplY3QKKyAgICBAc2VlOiBSRkMg
Mjc4MiIiIgorCisgICAgX19zbG90c19fID0gWydwcmlvcml0eScsICd3ZWlnaHQnLCAncG9ydCcs
ICd0YXJnZXQnXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJkY2xhc3MsIHJkdHlwZSwgcHJp
b3JpdHksIHdlaWdodCwgcG9ydCwgdGFyZ2V0KToKKyAgICAgICAgc3VwZXIoU1JWLCBzZWxmKS5f
X2luaXRfXyhyZGNsYXNzLCByZHR5cGUpCisgICAgICAgIHNlbGYucHJpb3JpdHkgPSBwcmlvcml0
eQorICAgICAgICBzZWxmLndlaWdodCA9IHdlaWdodAorICAgICAgICBzZWxmLnBvcnQgPSBwb3J0
CisgICAgICAgIHNlbGYudGFyZ2V0ID0gdGFyZ2V0CisKKyAgICBkZWYgdG9fdGV4dChzZWxmLCBv
cmlnaW49Tm9uZSwgcmVsYXRpdml6ZT1UcnVlLCAqKmt3KToKKyAgICAgICAgdGFyZ2V0ID0gc2Vs
Zi50YXJnZXQuY2hvb3NlX3JlbGF0aXZpdHkob3JpZ2luLCByZWxhdGl2aXplKQorICAgICAgICBy
ZXR1cm4gJyVkICVkICVkICVzJyAlIChzZWxmLnByaW9yaXR5LCBzZWxmLndlaWdodCwgc2VsZi5w
b3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQpCisKKyAgICBkZWYg
ZnJvbV90ZXh0KGNscywgcmRjbGFzcywgcmR0eXBlLCB0b2ssIG9yaWdpbiA9IE5vbmUsIHJlbGF0
aXZpemUgPSBUcnVlKToKKyAgICAgICAgcHJpb3JpdHkgPSB0b2suZ2V0X3VpbnQxNigpCisgICAg
ICAgIHdlaWdodCA9IHRvay5nZXRfdWludDE2KCkKKyAgICAgICAgcG9ydCA9IHRvay5nZXRfdWlu
dDE2KCkKKyAgICAgICAgdGFyZ2V0ID0gdG9rLmdldF9uYW1lKE5vbmUpCisgICAgICAgIHRhcmdl
dCA9IHRhcmdldC5jaG9vc2VfcmVsYXRpdml0eShvcmlnaW4sIHJlbGF0aXZpemUpCisgICAgICAg
IHRvay5nZXRfZW9sKCkKKyAgICAgICAgcmV0dXJuIGNscyhyZGNsYXNzLCByZHR5cGUsIHByaW9y
aXR5LCB3ZWlnaHQsIHBvcnQsIHRhcmdldCkKKworICAgIGZyb21fdGV4dCA9IGNsYXNzbWV0aG9k
KGZyb21fdGV4dCkKKworICAgIGRlZiB0b193aXJlKHNlbGYsIGZpbGUsIGNvbXByZXNzID0gTm9u
ZSwgb3JpZ2luID0gTm9uZSk6CisgICAgICAgIHRocmVlX2ludHMgPSBzdHJ1Y3QucGFjaygiIUhI
SCIsIHNlbGYucHJpb3JpdHksIHNlbGYud2VpZ2h0LCBzZWxmLnBvcnQpCisgICAgICAgIGZpbGUu
d3JpdGUodGhyZWVfaW50cykKKyAgICAgICAgc2VsZi50YXJnZXQudG9fd2lyZShmaWxlLCBjb21w
cmVzcywgb3JpZ2luKQorCisgICAgZGVmIGZyb21fd2lyZShjbHMsIHJkY2xhc3MsIHJkdHlwZSwg
d2lyZSwgY3VycmVudCwgcmRsZW4sIG9yaWdpbiA9IE5vbmUpOgorICAgICAgICAocHJpb3JpdHks
IHdlaWdodCwgcG9ydCkgPSBzdHJ1Y3QudW5wYWNrKCchSEhIJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXJlW2N1cnJlbnQgOiBjdXJyZW50ICsg
Nl0pCisgICAgICAgIGN1cnJlbnQgKz0gNgorICAgICAgICByZGxlbiAtPSA2CisgICAgICAgICh0
YXJnZXQsIGN1c2VkKSA9IGRucy5uYW1lLmZyb21fd2lyZSh3aXJlWzogY3VycmVudCArIHJkbGVu
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQp
CisgICAgICAgIGlmIGN1c2VkICE9IHJkbGVuOgorICAgICAgICAgICAgcmFpc2UgZG5zLmV4Y2Vw
dGlvbi5Gb3JtRXJyb3IKKyAgICAgICAgaWYgbm90IG9yaWdpbiBpcyBOb25lOgorICAgICAgICAg
ICAgdGFyZ2V0ID0gdGFyZ2V0LnJlbGF0aXZpemUob3JpZ2luKQorICAgICAgICByZXR1cm4gY2xz
KHJkY2xhc3MsIHJkdHlwZSwgcHJpb3JpdHksIHdlaWdodCwgcG9ydCwgdGFyZ2V0KQorCisgICAg
ZnJvbV93aXJlID0gY2xhc3NtZXRob2QoZnJvbV93aXJlKQorCisgICAgZGVmIGNob29zZV9yZWxh
dGl2aXR5KHNlbGYsIG9yaWdpbiA9IE5vbmUsIHJlbGF0aXZpemUgPSBUcnVlKToKKyAgICAgICAg
c2VsZi50YXJnZXQgPSBzZWxmLnRhcmdldC5jaG9vc2VfcmVsYXRpdml0eShvcmlnaW4sIHJlbGF0
aXZpemUpCisKKyAgICBkZWYgX2NtcChzZWxmLCBvdGhlcik6CisgICAgICAgIHNwID0gc3RydWN0
LnBhY2soIiFISEgiLCBzZWxmLnByaW9yaXR5LCBzZWxmLndlaWdodCwgc2VsZi5wb3J0KQorICAg
ICAgICBvcCA9IHN0cnVjdC5wYWNrKCIhSEhIIiwgb3RoZXIucHJpb3JpdHksIG90aGVyLndlaWdo
dCwgb3RoZXIucG9ydCkKKyAgICAgICAgdiA9IGNtcChzcCwgb3ApCisgICAgICAgIGlmIHYgPT0g
MDoKKyAgICAgICAgICAgIHYgPSBjbXAoc2VsZi50YXJnZXQsIG90aGVyLnRhcmdldCkKKyAgICAg
ICAgcmV0dXJuIHYKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3Jk
dHlwZXMvSU4vV0tTLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRf
cGFydHkvZG5zL3JkdHlwZXMvSU4vV0tTLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9XS1MucHkJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTEzIEBACisjIENvcHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LCAyMDEwIE5v
bWludW0sIEluYy4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRp
c3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBw
dXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVk
IHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp
Y2UKKyMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF
RCAiQVMgSVMiIEFORCBOT01JTlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworIyBXSVRIIFJF
R0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9G
CisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgTk9NSU5V
TSBCRSBMSUFCTEUgRk9SCisjIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyMgV0hBVFNPRVZFUiBSRVNVTFRJTkcg
RlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisjIEFDVElP
TiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJ
TkcgT1VUCisjIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNF
IE9GIFRISVMgU09GVFdBUkUuCisKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdHJ1Y3QKKworaW1w
b3J0IGRucy5pcHY0CitpbXBvcnQgZG5zLnJkYXRhCisKK19wcm90b190Y3AgPSBzb2NrZXQuZ2V0
cHJvdG9ieW5hbWUoJ3RjcCcpCitfcHJvdG9fdWRwID0gc29ja2V0LmdldHByb3RvYnluYW1lKCd1
ZHAnKQorCitjbGFzcyBXS1MoZG5zLnJkYXRhLlJkYXRhKToKKyAgICAiIiJXS1MgcmVjb3JkCisK
KyAgICBAaXZhciBhZGRyZXNzOiB0aGUgYWRkcmVzcworICAgIEB0eXBlIGFkZHJlc3M6IHN0cmlu
ZworICAgIEBpdmFyIHByb3RvY29sOiB0aGUgcHJvdG9jb2wKKyAgICBAdHlwZSBwcm90b2NvbDog
aW50CisgICAgQGl2YXIgYml0bWFwOiB0aGUgYml0bWFwCisgICAgQHR5cGUgYml0bWFwOiBzdHJp
bmcKKyAgICBAc2VlOiBSRkMgMTAzNSIiIgorCisgICAgX19zbG90c19fID0gWydhZGRyZXNzJywg
J3Byb3RvY29sJywgJ2JpdG1hcCddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmRjbGFzcywg
cmR0eXBlLCBhZGRyZXNzLCBwcm90b2NvbCwgYml0bWFwKToKKyAgICAgICAgc3VwZXIoV0tTLCBz
ZWxmKS5fX2luaXRfXyhyZGNsYXNzLCByZHR5cGUpCisgICAgICAgIHNlbGYuYWRkcmVzcyA9IGFk
ZHJlc3MKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuYml0
bWFwID0gYml0bWFwCisKKyAgICBkZWYgdG9fdGV4dChzZWxmLCBvcmlnaW49Tm9uZSwgcmVsYXRp
dml6ZT1UcnVlLCAqKmt3KToKKyAgICAgICAgYml0cyA9IFtdCisgICAgICAgIGZvciBpIGluIHhy
YW5nZSgwLCBsZW4oc2VsZi5iaXRtYXApKToKKyAgICAgICAgICAgIGJ5dGUgPSBvcmQoc2VsZi5i
aXRtYXBbaV0pCisgICAgICAgICAgICBmb3IgaiBpbiB4cmFuZ2UoMCwgOCk6CisgICAgICAgICAg
ICAgICAgaWYgYnl0ZSAmICgweDgwID4+IGopOgorICAgICAgICAgICAgICAgICAgICBiaXRzLmFw
cGVuZChzdHIoaSAqIDggKyBqKSkKKyAgICAgICAgdGV4dCA9ICcgJy5qb2luKGJpdHMpCisgICAg
ICAgIHJldHVybiAnJXMgJWQgJXMnICUgKHNlbGYuYWRkcmVzcywgc2VsZi5wcm90b2NvbCwgdGV4
dCkKKworICAgIGRlZiBmcm9tX3RleHQoY2xzLCByZGNsYXNzLCByZHR5cGUsIHRvaywgb3JpZ2lu
ID0gTm9uZSwgcmVsYXRpdml6ZSA9IFRydWUpOgorICAgICAgICBhZGRyZXNzID0gdG9rLmdldF9z
dHJpbmcoKQorICAgICAgICBwcm90b2NvbCA9IHRvay5nZXRfc3RyaW5nKCkKKyAgICAgICAgaWYg
cHJvdG9jb2wuaXNkaWdpdCgpOgorICAgICAgICAgICAgcHJvdG9jb2wgPSBpbnQocHJvdG9jb2wp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcm90b2NvbCA9IHNvY2tldC5nZXRwcm90b2J5
bmFtZShwcm90b2NvbCkKKyAgICAgICAgYml0bWFwID0gW10KKyAgICAgICAgd2hpbGUgMToKKyAg
ICAgICAgICAgIHRva2VuID0gdG9rLmdldCgpLnVuZXNjYXBlKCkKKyAgICAgICAgICAgIGlmIHRv
a2VuLmlzX2VvbF9vcl9lb2YoKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAg
aWYgdG9rZW4udmFsdWUuaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgIHNlcnYgPSBpbnQodG9r
ZW4udmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHByb3RvY29s
ICE9IF9wcm90b191ZHAgYW5kIHByb3RvY29sICE9IF9wcm90b190Y3A6CisgICAgICAgICAgICAg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInByb3RvY29sIG11c3QgYmUgVENQIG9y
IFVEUCIpCisgICAgICAgICAgICAgICAgaWYgcHJvdG9jb2wgPT0gX3Byb3RvX3VkcDoKKyAgICAg
ICAgICAgICAgICAgICAgcHJvdG9jb2xfdGV4dCA9ICJ1ZHAiCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xfdGV4dCA9ICJ0Y3AiCisgICAgICAgICAg
ICAgICAgc2VydiA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHRva2VuLnZhbHVlLCBwcm90b2NvbF90
ZXh0KQorICAgICAgICAgICAgaSA9IHNlcnYgLy8gOAorICAgICAgICAgICAgbCA9IGxlbihiaXRt
YXApCisgICAgICAgICAgICBpZiBsIDwgaSArIDE6CisgICAgICAgICAgICAgICAgZm9yIGogaW4g
eHJhbmdlKGwsIGkgKyAxKToKKyAgICAgICAgICAgICAgICAgICAgYml0bWFwLmFwcGVuZCgnXHgw
MCcpCisgICAgICAgICAgICBiaXRtYXBbaV0gPSBjaHIob3JkKGJpdG1hcFtpXSkgfCAoMHg4MCA+
PiAoc2VydiAlIDgpKSkKKyAgICAgICAgYml0bWFwID0gZG5zLnJkYXRhLl90cnVuY2F0ZV9iaXRt
YXAoYml0bWFwKQorICAgICAgICByZXR1cm4gY2xzKHJkY2xhc3MsIHJkdHlwZSwgYWRkcmVzcywg
cHJvdG9jb2wsIGJpdG1hcCkKKworICAgIGZyb21fdGV4dCA9IGNsYXNzbWV0aG9kKGZyb21fdGV4
dCkKKworICAgIGRlZiB0b193aXJlKHNlbGYsIGZpbGUsIGNvbXByZXNzID0gTm9uZSwgb3JpZ2lu
ID0gTm9uZSk6CisgICAgICAgIGZpbGUud3JpdGUoZG5zLmlwdjQuaW5ldF9hdG9uKHNlbGYuYWRk
cmVzcykpCisgICAgICAgIHByb3RvY29sID0gc3RydWN0LnBhY2soJyFCJywgc2VsZi5wcm90b2Nv
bCkKKyAgICAgICAgZmlsZS53cml0ZShwcm90b2NvbCkKKyAgICAgICAgZmlsZS53cml0ZShzZWxm
LmJpdG1hcCkKKworICAgIGRlZiBmcm9tX3dpcmUoY2xzLCByZGNsYXNzLCByZHR5cGUsIHdpcmUs
IGN1cnJlbnQsIHJkbGVuLCBvcmlnaW4gPSBOb25lKToKKyAgICAgICAgYWRkcmVzcyA9IGRucy5p
cHY0LmluZXRfbnRvYSh3aXJlW2N1cnJlbnQgOiBjdXJyZW50ICsgNF0pCisgICAgICAgIHByb3Rv
Y29sLCA9IHN0cnVjdC51bnBhY2soJyFCJywgd2lyZVtjdXJyZW50ICsgNCA6IGN1cnJlbnQgKyA1
XSkKKyAgICAgICAgY3VycmVudCArPSA1CisgICAgICAgIHJkbGVuIC09IDUKKyAgICAgICAgYml0
bWFwID0gd2lyZVtjdXJyZW50IDogY3VycmVudCArIHJkbGVuXQorICAgICAgICByZXR1cm4gY2xz
KHJkY2xhc3MsIHJkdHlwZSwgYWRkcmVzcywgcHJvdG9jb2wsIGJpdG1hcCkKKworICAgIGZyb21f
d2lyZSA9IGNsYXNzbWV0aG9kKGZyb21fd2lyZSkKKworICAgIGRlZiBfY21wKHNlbGYsIG90aGVy
KToKKyAgICAgICAgc2EgPSBkbnMuaXB2NC5pbmV0X2F0b24oc2VsZi5hZGRyZXNzKQorICAgICAg
ICBvYSA9IGRucy5pcHY0LmluZXRfYXRvbihvdGhlci5hZGRyZXNzKQorICAgICAgICB2ID0gY21w
KHNhLCBvYSkKKyAgICAgICAgaWYgdiA9PSAwOgorICAgICAgICAgICAgc3AgPSBzdHJ1Y3QucGFj
aygnIUInLCBzZWxmLnByb3RvY29sKQorICAgICAgICAgICAgb3AgPSBzdHJ1Y3QucGFjaygnIUIn
LCBvdGhlci5wcm90b2NvbCkKKyAgICAgICAgICAgIHYgPSBjbXAoc3AsIG9wKQorICAgICAgICAg
ICAgaWYgdiA9PSAwOgorICAgICAgICAgICAgICAgIHYgPSBjbXAoc2VsZi5iaXRtYXAsIG90aGVy
LmJpdG1hcCkKKyAgICAgICAgcmV0dXJuIHYKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhp
cmRfcGFydHkvZG5zL3JkdHlwZXMvSU4vX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9fX2luaXRfXy5weQkocmV2
aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMv
SU4vX19pbml0X18ucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMDcsIDIwMDksIDIwMTAgTm9taW51bSwgSW5jLgorIworIyBQZXJtaXNzaW9u
IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBp
dHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBp
cyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorIyBhcHBlYXIgaW4gYWxsIGNvcGllcy4K
KyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIE5PTUlOVU0gRElTQ0xB
SU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVE
SU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBOT01JTlVNIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJ
QUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFN
QUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBS
T0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9S
IE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElP
TiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworIiIiQ2xh
c3MgSU4gcmRhdGEgdHlwZSBjbGFzc2VzLiIiIgorCitfX2FsbF9fID0gWworICAgICdBJywKKyAg
ICAnQUFBQScsCisgICAgJ0FQTCcsCisgICAgJ0RIQ0lEJywKKyAgICAnS1gnLAorICAgICdOQVBU
UicsCisgICAgJ05TQVAnLAorICAgICdOU0FQX1BUUicsCisgICAgJ1BYJywKKyAgICAnU1JWJywK
KyAgICAnV0tTJywKK10KSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvaXBh
ZGRyL0NPUFlJTkcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0
eS9pcGFkZHIvQ09QWUlORwkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhp
cmRfcGFydHkvaXBhZGRyL0NPUFlJTkcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAyIEBACisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAg
ICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1T
IEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgor
CisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRl
cm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0
cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3Vt
ZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBv
ciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlz
IGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFu
IHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRp
dGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9u
CisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhp
cyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVj
dCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVu
dCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNl
LCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhl
CisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlw
IG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFu
IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25z
IGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1l
YW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGlu
Y2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50
YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJP
YmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2Fs
CisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBp
bmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwg
Z2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIg
bWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhv
cnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFp
bGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmln
aHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAg
ICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAg
ICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNv
dXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQg
ZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lv
bnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAg
ICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlw
LiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29y
a3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBm
cm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBv
ZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAg
ICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVk
aW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlm
aWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBX
b3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBM
aWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIK
KyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8g
c3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBw
dXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkg
Zm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50
CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5n
IGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1h
aWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1
ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwg
dGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1w
cm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQg
aXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGlu
IHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIK
KworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZp
ZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0
aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5
IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdo
dCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAg
dGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVy
cGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFs
dHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVj
ZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwg
cHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBX
b3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgor
CisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5k
IGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJl
YnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1
c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0
IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUg
bWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3
aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMg
b25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29u
dHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBD
b250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0
aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMp
IHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9u
IGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNv
dW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9y
IGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMg
ZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBh
bnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vu
c2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1
Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkg
cmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVy
aXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAg
ICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQg
dGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAo
YSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAg
ICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAg
ICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWlu
ZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVz
OyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9m
IGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxs
IGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9u
IG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhj
bHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgor
ICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBX
b3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAg
ICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3Ry
aWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRy
aWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBm
aWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRh
aW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQor
ICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBm
aWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jr
czsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlm
IHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAg
IHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBh
bmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkg
YXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZv
ciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlm
eSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAg
ICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFs
b25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBm
cm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0
dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlm
eWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0
IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBh
ZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAg
ICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNh
dGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xl
LCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlv
biBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlv
bnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmli
dXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55
IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRo
ZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0
ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBh
ZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhl
IGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0
aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBl
eGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25z
LgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlz
c2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBt
YXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMg
cmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0
aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQg
b2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxl
c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0
aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1
dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAg
ICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBl
eHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwg
YW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5H
RU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxB
UiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhl
CisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdv
cmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJj
aXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlv
biBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisg
ICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9y
IG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3Vj
aCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdy
ZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxl
IHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVj
aWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBj
aGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91
dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRp
bmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAg
ICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkg
YW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4g
aWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2li
aWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRk
aXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBv
ciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAg
ICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHks
IGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Ig
cmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBh
Y2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91
ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhh
bGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVl
IHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBo
YXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBh
c3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91
ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisK
KyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisgICBBUFBFTkRJWDogSG93IHRvIGFw
cGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmsuCisKKyAgICAgIFRvIGFwcGx5IHRo
ZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCisgICAg
ICBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0
cyAiW10iCisgICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0
aW9uLiAoRG9uJ3QgaW5jbHVkZQorICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3Vs
ZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgIGNvbW1lbnQgc3ludGF4IGZv
ciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQorICAgICAgZmlsZSBv
ciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRo
ZQorICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3Ig
ZWFzaWVyCisgICAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMu
CisKKyAgIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRo
ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1h
eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBo
dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJl
cXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2Fy
ZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g
IkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZv
ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGlt
aXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3Ro
aXJkX3BhcnR5L2lwYWRkci9NQU5JRkVTVC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdl
UmVwbGF5L3RoaXJkX3BhcnR5L2lwYWRkci9NQU5JRkVTVC5pbgkocmV2aXNpb24gMCkKKysrIFRv
b2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvaXBhZGRyL01BTklGRVNULmluCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDMgQEAKK2luY2x1ZGUgQ09QWUlORworaW5jbHVkZSBpcGFkZHJfdGVz
dC5weQoraW5jbHVkZSBSRUxFQVNFTk9URVMKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhp
cmRfcGFydHkvaXBhZGRyL09XTkVSUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5
L3RoaXJkX3BhcnR5L2lwYWRkci9PV05FUlMJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdl
UmVwbGF5L3RoaXJkX3BhcnR5L2lwYWRkci9PV05FUlMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NCBAQAorcG1vb2R5CitoYXJybworbXNoaWVsZHMKK3NtYXJ0CkluZGV4OiBUb29scy9XZWJQYWdl
UmVwbGF5L3RoaXJkX3BhcnR5L2lwYWRkci9SRUFETUUKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
UGFnZVJlcGxheS90aGlyZF9wYXJ0eS9pcGFkZHIvUkVBRE1FCShyZXZpc2lvbiAwKQorKysgVG9v
bHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9pcGFkZHIvUkVBRE1FCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDggQEAKK2lwYWRkci5weSBpcyBhIGxpYnJhcnkgZm9yIHdvcmtpbmcgd2l0aCBJ
UCBhZGRyZXNzZXMsIGJvdGggSVB2NCBhbmQgSVB2Ni4KK0l0IHdhcyBkZXZlbG9wZWQgYnkgR29v
Z2xlIGZvciBpbnRlcm5hbCB1c2UsIGFuZCBpcyBub3cgb3BlbiBzb3VyY2UuCisKK1Byb2plY3Qg
aG9tZSBwYWdlOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvaXBhZGRyLXB5LworCitQbGVhc2Ug
c2VuZCBjb250cmlidXRpb25zIHRvIGlwYWRkci1weS1kZXZAZ29vZ2xlZ3JvdXBzLmNvbS4gIENv
ZGUgc2hvdWxkCitpbmNsdWRlIHVuaXQgdGVzdHMgYW5kIGZvbGxvdyB0aGUgR29vZ2xlIFB5dGhv
biBzdHlsZSBndWlkZToKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9zb2Mvd2lraS9QeXRob25T
dHlsZUd1aWRlCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2lwYWRkci9p
cGFkZHIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9p
cGFkZHIvaXBhZGRyLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGly
ZF9wYXJ0eS9pcGFkZHIvaXBhZGRyLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4OTcgQEAK
KyMhL3Vzci9iaW4vcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuCisjICBM
aWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisjCisjIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp
OworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor
IworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIwor
IyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorIyBpbXBsaWVkLiBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyMgcGVybWlzc2lvbnMg
YW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisiIiJBIGZhc3QsIGxpZ2h0d2Vp
Z2h0IElQdjQvSVB2NiBtYW5pcHVsYXRpb24gbGlicmFyeSBpbiBQeXRob24uCisKK1RoaXMgbGli
cmFyeSBpcyB1c2VkIHRvIGNyZWF0ZS9wb2tlL21hbmlwdWxhdGUgSVB2NCBhbmQgSVB2NiBhZGRy
ZXNzZXMKK2FuZCBuZXR3b3Jrcy4KKworIiIiCisKK19fdmVyc2lvbl9fID0gJ3RydW5rJworCitp
bXBvcnQgc3RydWN0CisKK0lQVjRMRU5HVEggPSAzMgorSVBWNkxFTkdUSCA9IDEyOAorCisKK2Ns
YXNzIEFkZHJlc3NWYWx1ZUVycm9yKFZhbHVlRXJyb3IpOgorICAgICIiIkEgVmFsdWUgRXJyb3Ig
cmVsYXRlZCB0byB0aGUgYWRkcmVzcy4iIiIKKworCitjbGFzcyBOZXRtYXNrVmFsdWVFcnJvcihW
YWx1ZUVycm9yKToKKyAgICAiIiJBIFZhbHVlIEVycm9yIHJlbGF0ZWQgdG8gdGhlIG5ldG1hc2su
IiIiCisKKworZGVmIElQQWRkcmVzcyhhZGRyZXNzLCB2ZXJzaW9uPU5vbmUpOgorICAgICIiIlRh
a2UgYW4gSVAgc3RyaW5nL2ludCBhbmQgcmV0dXJuIGFuIG9iamVjdCBvZiB0aGUgY29ycmVjdCB0
eXBlLgorCisgICAgQXJnczoKKyAgICAgICAgYWRkcmVzczogQSBzdHJpbmcgb3IgaW50ZWdlciwg
dGhlIElQIGFkZHJlc3MuICBFaXRoZXIgSVB2NCBvcgorICAgICAgICAgIElQdjYgYWRkcmVzc2Vz
IG1heSBiZSBzdXBwbGllZDsgaW50ZWdlcnMgbGVzcyB0aGFuIDIqKjMyIHdpbGwKKyAgICAgICAg
ICBiZSBjb25zaWRlcmVkIHRvIGJlIElQdjQgYnkgZGVmYXVsdC4KKyAgICAgICAgdmVyc2lvbjog
QW4gSW50ZWdlciwgNCBvciA2LiBJZiBzZXQsIGRvbid0IHRyeSB0byBhdXRvbWF0aWNhbGx5Cisg
ICAgICAgICAgZGV0ZXJtaW5lIHdoYXQgdGhlIElQIGFkZHJlc3MgdHlwZSBpcy4gaW1wb3J0YW50
IGZvciB0aGluZ3MKKyAgICAgICAgICBsaWtlIElQQWRkcmVzcygxKSwgd2hpY2ggY291bGQgYmUg
SVB2NCwgJzAuMC4wLjEnLCAgb3IgSVB2NiwKKyAgICAgICAgICAnOjoxJy4KKworICAgIFJldHVy
bnM6CisgICAgICAgIEFuIElQdjRBZGRyZXNzIG9yIElQdjZBZGRyZXNzIG9iamVjdC4KKworICAg
IFJhaXNlczoKKyAgICAgICAgVmFsdWVFcnJvcjogaWYgdGhlIHN0cmluZyBwYXNzZWQgaXNuJ3Qg
ZWl0aGVyIGEgdjQgb3IgYSB2NgorICAgICAgICAgIGFkZHJlc3MuCisKKyAgICAiIiIKKyAgICBp
ZiB2ZXJzaW9uOgorICAgICAgICBpZiB2ZXJzaW9uID09IDQ6CisgICAgICAgICAgICByZXR1cm4g
SVB2NEFkZHJlc3MoYWRkcmVzcykKKyAgICAgICAgZWxpZiB2ZXJzaW9uID09IDY6CisgICAgICAg
ICAgICByZXR1cm4gSVB2NkFkZHJlc3MoYWRkcmVzcykKKworICAgIHRyeToKKyAgICAgICAgcmV0
dXJuIElQdjRBZGRyZXNzKGFkZHJlc3MpCisgICAgZXhjZXB0IChBZGRyZXNzVmFsdWVFcnJvciwg
TmV0bWFza1ZhbHVlRXJyb3IpOgorICAgICAgICBwYXNzCisKKyAgICB0cnk6CisgICAgICAgIHJl
dHVybiBJUHY2QWRkcmVzcyhhZGRyZXNzKQorICAgIGV4Y2VwdCAoQWRkcmVzc1ZhbHVlRXJyb3Is
IE5ldG1hc2tWYWx1ZUVycm9yKToKKyAgICAgICAgcGFzcworCisgICAgcmFpc2UgVmFsdWVFcnJv
cignJXIgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGFuIElQdjQgb3IgSVB2NiBhZGRyZXNzJyAlCisg
ICAgICAgICAgICAgICAgICAgICBhZGRyZXNzKQorCisKK2RlZiBJUE5ldHdvcmsoYWRkcmVzcywg
dmVyc2lvbj1Ob25lLCBzdHJpY3Q9RmFsc2UpOgorICAgICIiIlRha2UgYW4gSVAgc3RyaW5nL2lu
dCBhbmQgcmV0dXJuIGFuIG9iamVjdCBvZiB0aGUgY29ycmVjdCB0eXBlLgorCisgICAgQXJnczoK
KyAgICAgICAgYWRkcmVzczogQSBzdHJpbmcgb3IgaW50ZWdlciwgdGhlIElQIGFkZHJlc3MuICBF
aXRoZXIgSVB2NCBvcgorICAgICAgICAgIElQdjYgYWRkcmVzc2VzIG1heSBiZSBzdXBwbGllZDsg
aW50ZWdlcnMgbGVzcyB0aGFuIDIqKjMyIHdpbGwKKyAgICAgICAgICBiZSBjb25zaWRlcmVkIHRv
IGJlIElQdjQgYnkgZGVmYXVsdC4KKyAgICAgICAgdmVyc2lvbjogQW4gSW50ZWdlciwgaWYgc2V0
LCBkb24ndCB0cnkgdG8gYXV0b21hdGljYWxseQorICAgICAgICAgIGRldGVybWluZSB3aGF0IHRo
ZSBJUCBhZGRyZXNzIHR5cGUgaXMuIGltcG9ydGFudCBmb3IgdGhpbmdzCisgICAgICAgICAgbGlr
ZSBJUE5ldHdvcmsoMSksIHdoaWNoIGNvdWxkIGJlIElQdjQsICcwLjAuMC4xLzMyJywgb3IgSVB2
NiwKKyAgICAgICAgICAnOjoxLzEyOCcuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBBbiBJUHY0
TmV0d29yayBvciBJUHY2TmV0d29yayBvYmplY3QuCisKKyAgICBSYWlzZXM6CisgICAgICAgIFZh
bHVlRXJyb3I6IGlmIHRoZSBzdHJpbmcgcGFzc2VkIGlzbid0IGVpdGhlciBhIHY0IG9yIGEgdjYK
KyAgICAgICAgICBhZGRyZXNzLiBPciBpZiBhIHN0cmljdCBuZXR3b3JrIHdhcyByZXF1ZXN0ZWQg
YW5kIGEgc3RyaWN0CisgICAgICAgICAgbmV0d29yayB3YXNuJ3QgZ2l2ZW4uCisKKyAgICAiIiIK
KyAgICBpZiB2ZXJzaW9uOgorICAgICAgICBpZiB2ZXJzaW9uID09IDQ6CisgICAgICAgICAgICBy
ZXR1cm4gSVB2NE5ldHdvcmsoYWRkcmVzcywgc3RyaWN0KQorICAgICAgICBlbGlmIHZlcnNpb24g
PT0gNjoKKyAgICAgICAgICAgIHJldHVybiBJUHY2TmV0d29yayhhZGRyZXNzLCBzdHJpY3QpCisK
KyAgICB0cnk6CisgICAgICAgIHJldHVybiBJUHY0TmV0d29yayhhZGRyZXNzLCBzdHJpY3QpCisg
ICAgZXhjZXB0IChBZGRyZXNzVmFsdWVFcnJvciwgTmV0bWFza1ZhbHVlRXJyb3IpOgorICAgICAg
ICBwYXNzCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBJUHY2TmV0d29yayhhZGRyZXNzLCBz
dHJpY3QpCisgICAgZXhjZXB0IChBZGRyZXNzVmFsdWVFcnJvciwgTmV0bWFza1ZhbHVlRXJyb3Ip
OgorICAgICAgICBwYXNzCisKKyAgICByYWlzZSBWYWx1ZUVycm9yKCclciBkb2VzIG5vdCBhcHBl
YXIgdG8gYmUgYW4gSVB2NCBvciBJUHY2IG5ldHdvcmsnICUKKyAgICAgICAgICAgICAgICAgICAg
IGFkZHJlc3MpCisKKworZGVmIHY0X2ludF90b19wYWNrZWQoYWRkcmVzcyk6CisgICAgIiIiVGhl
IGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGFkZHJlc3MuCisKKyAgICBBcmdzOgorICAg
ICAgICBhZGRyZXNzOiBBbiBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGFuIElQdjQgSVAgYWRk
cmVzcy4KKworICAgIFJldHVybnM6CisgICAgICAgIFRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24g
b2YgdGhpcyBhZGRyZXNzLgorCisgICAgUmFpc2VzOgorICAgICAgICBWYWx1ZUVycm9yOiBJZiB0
aGUgaW50ZWdlciBpcyB0b28gbGFyZ2UgdG8gYmUgYW4gSVB2NCBJUAorICAgICAgICAgIGFkZHJl
c3MuCisgICAgIiIiCisgICAgaWYgYWRkcmVzcyA+IF9CYXNlVjQuX0FMTF9PTkVTOgorICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCdBZGRyZXNzIHRvbyBsYXJnZSBmb3IgSVB2NCcpCisgICAgcmV0
dXJuIEJ5dGVzKHN0cnVjdC5wYWNrKCchSScsIGFkZHJlc3MpKQorCisKK2RlZiB2Nl9pbnRfdG9f
cGFja2VkKGFkZHJlc3MpOgorICAgICIiIlRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhp
cyBhZGRyZXNzLgorCisgICAgQXJnczoKKyAgICAgICAgYWRkcmVzczogQW4gaW50ZWdlciByZXBy
ZXNlbnRhdGlvbiBvZiBhbiBJUHY0IElQIGFkZHJlc3MuCisKKyAgICBSZXR1cm5zOgorICAgICAg
ICBUaGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgYWRkcmVzcy4KKyAgICAiIiIKKyAg
ICByZXR1cm4gQnl0ZXMoc3RydWN0LnBhY2soJyFRUScsIGFkZHJlc3MgPj4gNjQsIGFkZHJlc3Mg
JiAoMioqNjQgLSAxKSkpCisKKworZGVmIF9maW5kX2FkZHJlc3NfcmFuZ2UoYWRkcmVzc2VzKToK
KyAgICAiIiJGaW5kIGEgc2VxdWVuY2Ugb2YgYWRkcmVzc2VzLgorCisgICAgQXJnczoKKyAgICAg
ICAgYWRkcmVzc2VzOiBhIGxpc3Qgb2YgSVB2NCBvciBJUHY2IGFkZHJlc3Nlcy4KKworICAgIFJl
dHVybnM6CisgICAgICAgIEEgdHVwbGUgY29udGFpbmluZyB0aGUgZmlyc3QgYW5kIGxhc3QgSVAg
YWRkcmVzc2VzIGluIHRoZSBzZXF1ZW5jZS4KKworICAgICIiIgorICAgIGZpcnN0ID0gbGFzdCA9
IGFkZHJlc3Nlc1swXQorICAgIGZvciBpcCBpbiBhZGRyZXNzZXNbMTpdOgorICAgICAgICBpZiBp
cC5faXAgPT0gbGFzdC5faXAgKyAxOgorICAgICAgICAgICAgbGFzdCA9IGlwCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBicmVhaworICAgIHJldHVybiAoZmlyc3QsIGxhc3QpCisKK2RlZiBf
Z2V0X3ByZWZpeF9sZW5ndGgobnVtYmVyMSwgbnVtYmVyMiwgYml0cyk6CisgICAgIiIiR2V0IHRo
ZSBudW1iZXIgb2YgbGVhZGluZyBiaXRzIHRoYXQgYXJlIHNhbWUgZm9yIHR3byBudW1iZXJzLgor
CisgICAgQXJnczoKKyAgICAgICAgbnVtYmVyMTogYW4gaW50ZWdlci4KKyAgICAgICAgbnVtYmVy
MjogYW5vdGhlciBpbnRlZ2VyLgorICAgICAgICBiaXRzOiB0aGUgbWF4aW11bSBudW1iZXIgb2Yg
Yml0cyB0byBjb21wYXJlLgorCisgICAgUmV0dXJuczoKKyAgICAgICAgVGhlIG51bWJlciBvZiBs
ZWFkaW5nIGJpdHMgdGhhdCBhcmUgdGhlIHNhbWUgZm9yIHR3byBudW1iZXJzLgorCisgICAgIiIi
CisgICAgZm9yIGkgaW4gcmFuZ2UoYml0cyk6CisgICAgICAgIGlmIG51bWJlcjEgPj4gaSA9PSBu
dW1iZXIyID4+IGk6CisgICAgICAgICAgICByZXR1cm4gYml0cyAtIGkKKyAgICByZXR1cm4gMAor
CitkZWYgX2NvdW50X3JpZ2h0aGFuZF96ZXJvX2JpdHMobnVtYmVyLCBiaXRzKToKKyAgICAiIiJD
b3VudCB0aGUgbnVtYmVyIG9mIHplcm8gYml0cyBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlLgorCisg
ICAgQXJnczoKKyAgICAgICAgbnVtYmVyOiBhbiBpbnRlZ2VyLgorICAgICAgICBiaXRzOiBtYXhp
bXVtIG51bWJlciBvZiBiaXRzIHRvIGNvdW50LgorCisgICAgUmV0dXJuczoKKyAgICAgICAgVGhl
IG51bWJlciBvZiB6ZXJvIGJpdHMgb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiB0aGUgbnVtYmVy
LgorCisgICAgIiIiCisgICAgaWYgbnVtYmVyID09IDA6CisgICAgICAgIHJldHVybiBiaXRzCisg
ICAgZm9yIGkgaW4gcmFuZ2UoYml0cyk6CisgICAgICAgIGlmIChudW1iZXIgPj4gaSkgJSAyOgor
ICAgICAgICAgICAgcmV0dXJuIGkKKworZGVmIHN1bW1hcml6ZV9hZGRyZXNzX3JhbmdlKGZpcnN0
LCBsYXN0KToKKyAgICAiIiJTdW1tYXJpemUgYSBuZXR3b3JrIHJhbmdlIGdpdmVuIHRoZSBmaXJz
dCBhbmQgbGFzdCBJUCBhZGRyZXNzZXMuCisKKyAgICBFeGFtcGxlOgorICAgICAgICA+Pj4gc3Vt
bWFyaXplX2FkZHJlc3NfcmFuZ2UoSVB2NEFkZHJlc3MoJzEuMS4xLjAnKSwKKyAgICAgICAgICAg
IElQdjRBZGRyZXNzKCcxLjEuMS4xMzAnKSkKKyAgICAgICAgW0lQdjROZXR3b3JrKCcxLjEuMS4w
LzI1JyksIElQdjROZXR3b3JrKCcxLjEuMS4xMjgvMzEnKSwKKyAgICAgICAgSVB2NE5ldHdvcmso
JzEuMS4xLjEzMC8zMicpXQorCisgICAgQXJnczoKKyAgICAgICAgZmlyc3Q6IHRoZSBmaXJzdCBJ
UHY0QWRkcmVzcyBvciBJUHY2QWRkcmVzcyBpbiB0aGUgcmFuZ2UuCisgICAgICAgIGxhc3Q6IHRo
ZSBsYXN0IElQdjRBZGRyZXNzIG9yIElQdjZBZGRyZXNzIGluIHRoZSByYW5nZS4KKworICAgIFJl
dHVybnM6CisgICAgICAgIFRoZSBhZGRyZXNzIHJhbmdlIGNvbGxhcHNlZCB0byBhIGxpc3Qgb2Yg
SVB2NE5ldHdvcmsncyBvcgorICAgICAgICBJUHY2TmV0d29yaydzLgorCisgICAgUmFpc2U6Cisg
ICAgICAgIFR5cGVFcnJvcjoKKyAgICAgICAgICAgIElmIHRoZSBmaXJzdCBhbmQgbGFzdCBvYmpl
Y3RzIGFyZSBub3QgSVAgYWRkcmVzc2VzLgorICAgICAgICAgICAgSWYgdGhlIGZpcnN0IGFuZCBs
YXN0IG9iamVjdHMgYXJlIG5vdCB0aGUgc2FtZSB2ZXJzaW9uLgorICAgICAgICBWYWx1ZUVycm9y
OgorICAgICAgICAgICAgSWYgdGhlIGxhc3Qgb2JqZWN0IGlzIG5vdCBncmVhdGVyIHRoYW4gdGhl
IGZpcnN0LgorICAgICAgICAgICAgSWYgdGhlIHZlcnNpb24gaXMgbm90IDQgb3IgNi4KKworICAg
ICIiIgorICAgIGlmIG5vdCAoaXNpbnN0YW5jZShmaXJzdCwgX0Jhc2VJUCkgYW5kIGlzaW5zdGFu
Y2UobGFzdCwgX0Jhc2VJUCkpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2ZpcnN0IGFuZCBs
YXN0IG11c3QgYmUgSVAgYWRkcmVzc2VzLCBub3QgbmV0d29ya3MnKQorICAgIGlmIGZpcnN0LnZl
cnNpb24gIT0gbGFzdC52ZXJzaW9uOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiVzIGFuZCAl
cyBhcmUgbm90IG9mIHRoZSBzYW1lIHZlcnNpb24iICUgKAorICAgICAgICAgICAgICAgIHN0cihm
aXJzdCksIHN0cihsYXN0KSkpCisgICAgaWYgZmlyc3QgPiBsYXN0OgorICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCdsYXN0IElQIGFkZHJlc3MgbXVzdCBiZSBncmVhdGVyIHRoYW4gZmlyc3QnKQor
CisgICAgbmV0d29ya3MgPSBbXQorCisgICAgaWYgZmlyc3QudmVyc2lvbiA9PSA0OgorICAgICAg
ICBpcCA9IElQdjROZXR3b3JrCisgICAgZWxpZiBmaXJzdC52ZXJzaW9uID09IDY6CisgICAgICAg
IGlwID0gSVB2Nk5ldHdvcmsKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1
bmtub3duIElQIHZlcnNpb24nKQorCisgICAgaXBfYml0cyA9IGZpcnN0Ll9tYXhfcHJlZml4bGVu
CisgICAgZmlyc3RfaW50ID0gZmlyc3QuX2lwCisgICAgbGFzdF9pbnQgPSBsYXN0Ll9pcAorICAg
IHdoaWxlIGZpcnN0X2ludCA8PSBsYXN0X2ludDoKKyAgICAgICAgbmJpdHMgPSBfY291bnRfcmln
aHRoYW5kX3plcm9fYml0cyhmaXJzdF9pbnQsIGlwX2JpdHMpCisgICAgICAgIGN1cnJlbnQgPSBO
b25lCisgICAgICAgIHdoaWxlIG5iaXRzID49IDA6CisgICAgICAgICAgICBhZGRlbmQgPSAyKipu
Yml0cyAtIDEKKyAgICAgICAgICAgIGN1cnJlbnQgPSBmaXJzdF9pbnQgKyBhZGRlbmQKKyAgICAg
ICAgICAgIG5iaXRzIC09IDEKKyAgICAgICAgICAgIGlmIGN1cnJlbnQgPD0gbGFzdF9pbnQ6Cisg
ICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcHJlZml4ID0gX2dldF9wcmVmaXhfbGVuZ3Ro
KGZpcnN0X2ludCwgY3VycmVudCwgaXBfYml0cykKKyAgICAgICAgbmV0ID0gaXAoJyVzLyVkJyAl
IChzdHIoZmlyc3QpLCBwcmVmaXgpKQorICAgICAgICBuZXR3b3Jrcy5hcHBlbmQobmV0KQorICAg
ICAgICBpZiBjdXJyZW50ID09IGlwLl9BTExfT05FUzoKKyAgICAgICAgICAgIGJyZWFrCisgICAg
ICAgIGZpcnN0X2ludCA9IGN1cnJlbnQgKyAxCisgICAgICAgIGZpcnN0ID0gSVBBZGRyZXNzKGZp
cnN0X2ludCwgdmVyc2lvbj1maXJzdC5fdmVyc2lvbikKKyAgICByZXR1cm4gbmV0d29ya3MKKwor
ZGVmIF9jb2xsYXBzZV9hZGRyZXNzX2xpc3RfcmVjdXJzaXZlKGFkZHJlc3Nlcyk6CisgICAgIiIi
TG9vcHMgdGhyb3VnaCB0aGUgYWRkcmVzc2VzLCBjb2xsYXBzaW5nIGNvbmN1cnJlbnQgbmV0Ymxv
Y2tzLgorCisgICAgRXhhbXBsZToKKworICAgICAgICBpcDEgPSBJUHY0TmV0d29yaygnMS4xLjAu
MC8yNCcpCisgICAgICAgIGlwMiA9IElQdjROZXR3b3JrKCcxLjEuMS4wLzI0JykKKyAgICAgICAg
aXAzID0gSVB2NE5ldHdvcmsoJzEuMS4yLjAvMjQnKQorICAgICAgICBpcDQgPSBJUHY0TmV0d29y
aygnMS4xLjMuMC8yNCcpCisgICAgICAgIGlwNSA9IElQdjROZXR3b3JrKCcxLjEuNC4wLzI0JykK
KyAgICAgICAgaXA2ID0gSVB2NE5ldHdvcmsoJzEuMS4wLjEvMjInKQorCisgICAgICAgIF9jb2xs
YXBzZV9hZGRyZXNzX2xpc3RfcmVjdXJzaXZlKFtpcDEsIGlwMiwgaXAzLCBpcDQsIGlwNSwgaXA2
XSkgLT4KKyAgICAgICAgICBbSVB2NE5ldHdvcmsoJzEuMS4wLjAvMjInKSwgSVB2NE5ldHdvcmso
JzEuMS40LjAvMjQnKV0KKworICAgICAgICBUaGlzIHNob3VsZG4ndCBiZSBjYWxsZWQgZGlyZWN0
bHk7IGl0IGlzIGNhbGxlZCB2aWEKKyAgICAgICAgICBjb2xsYXBzZV9hZGRyZXNzX2xpc3QoW10p
LgorCisgICAgQXJnczoKKyAgICAgICAgYWRkcmVzc2VzOiBBIGxpc3Qgb2YgSVB2NE5ldHdvcmsn
cyBvciBJUHY2TmV0d29yaydzCisKKyAgICBSZXR1cm5zOgorICAgICAgICBBIGxpc3Qgb2YgSVB2
NE5ldHdvcmsncyBvciBJUHY2TmV0d29yaydzIGRlcGVuZGluZyBvbiB3aGF0IHdlIHdlcmUKKyAg
ICAgICAgcGFzc2VkLgorCisgICAgIiIiCisgICAgcmV0X2FycmF5ID0gW10KKyAgICBvcHRpbWl6
ZWQgPSBGYWxzZQorCisgICAgZm9yIGN1cl9hZGRyIGluIGFkZHJlc3NlczoKKyAgICAgICAgaWYg
bm90IHJldF9hcnJheToKKyAgICAgICAgICAgIHJldF9hcnJheS5hcHBlbmQoY3VyX2FkZHIpCisg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBjdXJfYWRkciBpbiByZXRfYXJyYXlbLTFd
OgorICAgICAgICAgICAgb3B0aW1pemVkID0gVHJ1ZQorICAgICAgICBlbGlmIGN1cl9hZGRyID09
IHJldF9hcnJheVstMV0uc3VwZXJuZXQoKS5zdWJuZXQoKVsxXToKKyAgICAgICAgICAgIHJldF9h
cnJheS5hcHBlbmQocmV0X2FycmF5LnBvcCgpLnN1cGVybmV0KCkpCisgICAgICAgICAgICBvcHRp
bWl6ZWQgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXRfYXJyYXkuYXBwZW5k
KGN1cl9hZGRyKQorCisgICAgaWYgb3B0aW1pemVkOgorICAgICAgICByZXR1cm4gX2NvbGxhcHNl
X2FkZHJlc3NfbGlzdF9yZWN1cnNpdmUocmV0X2FycmF5KQorCisgICAgcmV0dXJuIHJldF9hcnJh
eQorCisKK2RlZiBjb2xsYXBzZV9hZGRyZXNzX2xpc3QoYWRkcmVzc2VzKToKKyAgICAiIiJDb2xs
YXBzZSBhIGxpc3Qgb2YgSVAgb2JqZWN0cy4KKworICAgIEV4YW1wbGU6CisgICAgICAgIGNvbGxh
cHNlX2FkZHJlc3NfbGlzdChbSVB2NCgnMS4xLjAuMC8yNCcpLCBJUHY0KCcxLjEuMS4wLzI0Jyld
KSAtPgorICAgICAgICAgIFtJUHY0KCcxLjEuMC4wLzIzJyldCisKKyAgICBBcmdzOgorICAgICAg
ICBhZGRyZXNzZXM6IEEgbGlzdCBvZiBJUHY0TmV0d29yayBvciBJUHY2TmV0d29yayBvYmplY3Rz
LgorCisgICAgUmV0dXJuczoKKyAgICAgICAgQSBsaXN0IG9mIElQdjROZXR3b3JrIG9yIElQdjZO
ZXR3b3JrIG9iamVjdHMgZGVwZW5kaW5nIG9uIHdoYXQgd2UKKyAgICAgICAgd2VyZSBwYXNzZWQu
CisKKyAgICBSYWlzZXM6CisgICAgICAgIFR5cGVFcnJvcjogSWYgcGFzc2VkIGEgbGlzdCBvZiBt
aXhlZCB2ZXJzaW9uIG9iamVjdHMuCisKKyAgICAiIiIKKyAgICBpID0gMAorICAgIGFkZHJzID0g
W10KKyAgICBpcHMgPSBbXQorICAgIG5ldHMgPSBbXQorCisgICAgIyBzcGxpdCBJUCBhZGRyZXNz
ZXMgYW5kIG5ldHdvcmtzCisgICAgZm9yIGlwIGluIGFkZHJlc3NlczoKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShpcCwgX0Jhc2VJUCk6CisgICAgICAgICAgICBpZiBpcHMgYW5kIGlwc1stMV0uX3Zl
cnNpb24gIT0gaXAuX3ZlcnNpb246CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIl
cyBhbmQgJXMgYXJlIG5vdCBvZiB0aGUgc2FtZSB2ZXJzaW9uIiAlICgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cihpcCksIHN0cihpcHNbLTFdKSkpCisgICAgICAgICAgICBpcHMuYXBwZW5k
KGlwKQorICAgICAgICBlbGlmIGlwLl9wcmVmaXhsZW4gPT0gaXAuX21heF9wcmVmaXhsZW46Cisg
ICAgICAgICAgICBpZiBpcHMgYW5kIGlwc1stMV0uX3ZlcnNpb24gIT0gaXAuX3ZlcnNpb246Cisg
ICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIlcyBhbmQgJXMgYXJlIG5vdCBvZiB0aGUg
c2FtZSB2ZXJzaW9uIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cihpcCksIHN0cihp
cHNbLTFdKSkpCisgICAgICAgICAgICBpcHMuYXBwZW5kKGlwLmlwKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgaWYgbmV0cyBhbmQgbmV0c1stMV0uX3ZlcnNpb24gIT0gaXAuX3ZlcnNpb246
CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIlcyBhbmQgJXMgYXJlIG5vdCBvZiB0
aGUgc2FtZSB2ZXJzaW9uIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cihpcCksIHN0
cihpcHNbLTFdKSkpCisgICAgICAgICAgICBuZXRzLmFwcGVuZChpcCkKKworICAgICMgc29ydCBh
bmQgZGVkdXAKKyAgICBpcHMgPSBzb3J0ZWQoc2V0KGlwcykpCisgICAgbmV0cyA9IHNvcnRlZChz
ZXQobmV0cykpCisKKyAgICB3aGlsZSBpIDwgbGVuKGlwcyk6CisgICAgICAgIChmaXJzdCwgbGFz
dCkgPSBfZmluZF9hZGRyZXNzX3JhbmdlKGlwc1tpOl0pCisgICAgICAgIGkgPSBpcHMuaW5kZXgo
bGFzdCkgKyAxCisgICAgICAgIGFkZHJzLmV4dGVuZChzdW1tYXJpemVfYWRkcmVzc19yYW5nZShm
aXJzdCwgbGFzdCkpCisKKyAgICByZXR1cm4gX2NvbGxhcHNlX2FkZHJlc3NfbGlzdF9yZWN1cnNp
dmUoc29ydGVkKAorICAgICAgICBhZGRycyArIG5ldHMsIGtleT1fQmFzZU5ldC5fZ2V0X25ldHdv
cmtzX2tleSkpCisKKyMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKK0NvbGxhcHNlQWRkckxpc3Qg
PSBjb2xsYXBzZV9hZGRyZXNzX2xpc3QKKworIyBXZSBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdl
ZW4gdGhlIHN0cmluZyBhbmQgcGFja2VkLWJ5dGVzIHJlcHJlc2VudGF0aW9ucworIyBvZiBhbiBJ
UCBhZGRyZXNzLiAgRm9yIGV4YW1wbGUsIGInMDo6MScgaXMgdGhlIElQdjQgYWRkcmVzcyA0OC41
OC41OC40OSwKKyMgd2hpbGUgJzA6OjEnIGlzIGFuIElQdjYgYWRkcmVzcy4KKyMKKyMgSW4gUHl0
aG9uIDMsIHRoZSBuYXRpdmUgJ2J5dGVzJyB0eXBlIGFscmVhZHkgcHJvdmlkZXMgdGhpcyBmdW5j
dGlvbmFsaXR5LAorIyBzbyB3ZSB1c2UgaXQgZGlyZWN0bHkuICBGb3IgZWFybGllciBpbXBsZW1l
bnRhdGlvbnMgd2hlcmUgYnl0ZXMgaXMgbm90IGEKKyMgZGlzdGluY3QgdHlwZSwgd2UgY3JlYXRl
IGEgc3ViY2xhc3Mgb2Ygc3RyIHRvIHNlcnZlIGFzIGEgdGFnLgorIworIyBVc2FnZSBleGFtcGxl
IChQeXRob24gMik6CisjICAgaXAgPSBpcGFkZHIuSVBBZGRyZXNzKGlwYWRkci5CeXRlcygneHh4
eCcpKQorIworIyBVc2FnZSBleGFtcGxlIChQeXRob24gMyk6CisjICAgaXAgPSBpcGFkZHIuSVBB
ZGRyZXNzKGIneHh4eCcpCit0cnk6CisgICAgaWYgYnl0ZXMgaXMgc3RyOgorICAgICAgICByYWlz
ZSBUeXBlRXJyb3IoImJ5dGVzIGlzIG5vdCBhIGRpc3RpbmN0IHR5cGUiKQorICAgIEJ5dGVzID0g
Ynl0ZXMKK2V4Y2VwdCAoTmFtZUVycm9yLCBUeXBlRXJyb3IpOgorICAgIGNsYXNzIEJ5dGVzKHN0
cik6CisgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAnQnl0
ZXMoJXMpJyAlIHN0ci5fX3JlcHJfXyhzZWxmKQorCitkZWYgZ2V0X21peGVkX3R5cGVfa2V5KG9i
aik6CisgICAgIiIiUmV0dXJuIGEga2V5IHN1aXRhYmxlIGZvciBzb3J0aW5nIGJldHdlZW4gbmV0
d29ya3MgYW5kIGFkZHJlc3Nlcy4KKworICAgIEFkZHJlc3MgYW5kIE5ldHdvcmsgb2JqZWN0cyBh
cmUgbm90IHNvcnRhYmxlIGJ5IGRlZmF1bHQ7IHRoZXkncmUKKyAgICBmdW5kYW1lbnRhbGx5IGRp
ZmZlcmVudCBzbyB0aGUgZXhwcmVzc2lvbgorCisgICAgICAgIElQdjRBZGRyZXNzKCcxLjEuMS4x
JykgPD0gSVB2NE5ldHdvcmsoJzEuMS4xLjEvMjQnKQorCisgICAgZG9lc24ndCBtYWtlIGFueSBz
ZW5zZS4gIFRoZXJlIGFyZSBzb21lIHRpbWVzIGhvd2V2ZXIsIHdoZXJlIHlvdSBtYXkgd2lzaAor
ICAgIHRvIGhhdmUgaXBhZGRyIHNvcnQgdGhlc2UgZm9yIHlvdSBhbnl3YXkuIElmIHlvdSBuZWVk
IHRvIGRvIHRoaXMsIHlvdQorICAgIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiBhcyB0aGUga2V5PSBh
cmd1bWVudCB0byBzb3J0ZWQoKS4KKworICAgIEFyZ3M6CisgICAgICBvYmo6IGVpdGhlciBhIE5l
dHdvcmsgb3IgQWRkcmVzcyBvYmplY3QuCisgICAgUmV0dXJuczoKKyAgICAgIGFwcHJvcHJpYXRl
IGtleS4KKworICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBfQmFzZU5ldCk6CisgICAg
ICAgIHJldHVybiBvYmouX2dldF9uZXR3b3Jrc19rZXkoKQorICAgIGVsaWYgaXNpbnN0YW5jZShv
YmosIF9CYXNlSVApOgorICAgICAgICByZXR1cm4gb2JqLl9nZXRfYWRkcmVzc19rZXkoKQorICAg
IHJldHVybiBOb3RJbXBsZW1lbnRlZAorCitjbGFzcyBfSVBBZGRyQmFzZShvYmplY3QpOgorCisg
ICAgIiIiVGhlIG1vdGhlciBjbGFzcy4iIiIKKworICAgIGRlZiBfX2luZGV4X18oc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9pcAorCisgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLl9pcAorCisgICAgZGVmIF9faGV4X18oc2VsZik6CisgICAgICAgIHJldHVy
biBoZXgoc2VsZi5faXApCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZXhwbG9kZWQoc2VsZik6
CisgICAgICAgICIiIlJldHVybiB0aGUgbG9uZ2hhbmQgdmVyc2lvbiBvZiB0aGUgSVAgYWRkcmVz
cyBhcyBhIHN0cmluZy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGxvZGVfc2hvcnRoYW5k
X2lwX3N0cmluZygpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29tcHJlc3NlZChzZWxmKToK
KyAgICAgICAgIiIiUmV0dXJuIHRoZSBzaG9ydGhhbmQgdmVyc2lvbiBvZiB0aGUgSVAgYWRkcmVz
cyBhcyBhIHN0cmluZy4iIiIKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmKQorCisKK2NsYXNzIF9C
YXNlSVAoX0lQQWRkckJhc2UpOgorCisgICAgIiIiQSBnZW5lcmljIElQIG9iamVjdC4KKworICAg
IFRoaXMgSVAgY2xhc3MgY29udGFpbnMgdGhlIHZlcnNpb24gaW5kZXBlbmRlbnQgbWV0aG9kcyB3
aGljaCBhcmUKKyAgICB1c2VkIGJ5IHNpbmdsZSBJUCBhZGRyZXNzZXMuCisKKyAgICAiIiIKKwor
ICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBy
ZXR1cm4gKHNlbGYuX2lwID09IG90aGVyLl9pcAorICAgICAgICAgICAgICAgICAgICBhbmQgc2Vs
Zi5fdmVyc2lvbiA9PSBvdGhlci5fdmVyc2lvbikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVy
cm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgX19uZV9f
KHNlbGYsIG90aGVyKToKKyAgICAgICAgZXEgPSBzZWxmLl9fZXFfXyhvdGhlcikKKyAgICAgICAg
aWYgZXEgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50
ZWQKKyAgICAgICAgcmV0dXJuIG5vdCBlcQorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6
CisgICAgICAgIGd0ID0gc2VsZi5fX2d0X18ob3RoZXIpCisgICAgICAgIGlmIGd0IGlzIE5vdElt
cGxlbWVudGVkOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJl
dHVybiBub3QgZ3QKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBsdCA9
IHNlbGYuX19sdF9fKG90aGVyKQorICAgICAgICBpZiBsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAg
ICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gbm90IGx0CisK
KyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZi5fdmVyc2lvbiAh
PSBvdGhlci5fdmVyc2lvbjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXMgYW5kICVz
IGFyZSBub3Qgb2YgdGhlIHNhbWUgdmVyc2lvbicgJSAoCisgICAgICAgICAgICAgICAgICAgIHN0
cihzZWxmKSwgc3RyKG90aGVyKSkpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBf
QmFzZUlQKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXMgYW5kICVzIGFyZSBub3Qg
b2YgdGhlIHNhbWUgdHlwZScgJSAoCisgICAgICAgICAgICAgICAgICAgIHN0cihzZWxmKSwgc3Ry
KG90aGVyKSkpCisgICAgICAgIGlmIHNlbGYuX2lwICE9IG90aGVyLl9pcDoKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLl9pcCA8IG90aGVyLl9pcAorICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
IGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBzZWxmLl92ZXJzaW9uICE9IG90
aGVyLl92ZXJzaW9uOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclcyBhbmQgJXMgYXJl
IG5vdCBvZiB0aGUgc2FtZSB2ZXJzaW9uJyAlICgKKyAgICAgICAgICAgICAgICAgICAgc3RyKHNl
bGYpLCBzdHIob3RoZXIpKSkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIF9CYXNl
SVApOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclcyBhbmQgJXMgYXJlIG5vdCBvZiB0
aGUgc2FtZSB0eXBlJyAlICgKKyAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYpLCBzdHIob3Ro
ZXIpKSkKKyAgICAgICAgaWYgc2VsZi5faXAgIT0gb3RoZXIuX2lwOgorICAgICAgICAgICAgcmV0
dXJuIHNlbGYuX2lwID4gb3RoZXIuX2lwCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBT
aG9ydGhhbmQgZm9yIEludGVnZXIgYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uLiBUaGlzIGlzIG5v
dAorICAgICMgbWVhbnQgdG8gZXZlciBzdXBwb3J0IGFkZGl0aW9uL3N1YnRyYWN0aW9uIG9mIGFk
ZHJlc3Nlcy4KKyAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBp
c2luc3RhbmNlKG90aGVyLCBpbnQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVk
CisgICAgICAgIHJldHVybiBJUEFkZHJlc3MoaW50KHNlbGYpICsgb3RoZXIsIHZlcnNpb249c2Vs
Zi5fdmVyc2lvbikKKworICAgIGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYg
bm90IGlzaW5zdGFuY2Uob3RoZXIsIGludCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVt
ZW50ZWQKKyAgICAgICAgcmV0dXJuIElQQWRkcmVzcyhpbnQoc2VsZikgLSBvdGhlciwgdmVyc2lv
bj1zZWxmLl92ZXJzaW9uKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1
cm4gJyVzKCVyKScgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHN0cihzZWxmKSkKKworICAg
IGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gICclcycgJSBzZWxmLl9zdHJpbmdf
ZnJvbV9pcF9pbnQoc2VsZi5faXApCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAg
IHJldHVybiBoYXNoKGhleChsb25nKHNlbGYuX2lwKSkpCisKKyAgICBkZWYgX2dldF9hZGRyZXNz
X2tleShzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl92ZXJzaW9uLCBzZWxmKQorCisgICAg
QHByb3BlcnR5CisgICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IoJ0Jhc2VJUCBoYXMgbm8gdmVyc2lvbicpCisKKworY2xhc3MgX0Jhc2VOZXQo
X0lQQWRkckJhc2UpOgorCisgICAgIiIiQSBnZW5lcmljIElQIG9iamVjdC4KKworICAgIFRoaXMg
SVAgY2xhc3MgY29udGFpbnMgdGhlIHZlcnNpb24gaW5kZXBlbmRlbnQgbWV0aG9kcyB3aGljaCBh
cmUKKyAgICB1c2VkIGJ5IG5ldHdvcmtzLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgYWRkcmVzcyk6CisgICAgICAgIHNlbGYuX2NhY2hlID0ge30KKworICAgIGRlZiBfX3Jl
cHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICclcyglciknICUgKHNlbGYuX19jbGFzc19fLl9f
bmFtZV9fLCBzdHIoc2VsZikpCisKKyAgICBkZWYgaXRlcmhvc3RzKHNlbGYpOgorICAgICAgICAi
IiJHZW5lcmF0ZSBJdGVyYXRvciBvdmVyIHVzYWJsZSBob3N0cyBpbiBhIG5ldHdvcmsuCisKKyAg
ICAgICAgICAgVGhpcyBpcyBsaWtlIF9faXRlcl9fIGV4Y2VwdCBpdCBkb2Vzbid0IHJldHVybiB0
aGUgbmV0d29yaworICAgICAgICAgICBvciBicm9hZGNhc3QgYWRkcmVzc2VzLgorCisgICAgICAg
ICIiIgorICAgICAgICBjdXIgPSBpbnQoc2VsZi5uZXR3b3JrKSArIDEKKyAgICAgICAgYmNhc3Qg
PSBpbnQoc2VsZi5icm9hZGNhc3QpIC0gMQorICAgICAgICB3aGlsZSBjdXIgPD0gYmNhc3Q6Cisg
ICAgICAgICAgICBjdXIgKz0gMQorICAgICAgICAgICAgeWllbGQgSVBBZGRyZXNzKGN1ciAtIDEs
IHZlcnNpb249c2VsZi5fdmVyc2lvbikKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAg
ICAgY3VyID0gaW50KHNlbGYubmV0d29yaykKKyAgICAgICAgYmNhc3QgPSBpbnQoc2VsZi5icm9h
ZGNhc3QpCisgICAgICAgIHdoaWxlIGN1ciA8PSBiY2FzdDoKKyAgICAgICAgICAgIGN1ciArPSAx
CisgICAgICAgICAgICB5aWVsZCBJUEFkZHJlc3MoY3VyIC0gMSwgdmVyc2lvbj1zZWxmLl92ZXJz
aW9uKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG4pOgorICAgICAgICBuZXR3b3JrID0g
aW50KHNlbGYubmV0d29yaykKKyAgICAgICAgYnJvYWRjYXN0ID0gaW50KHNlbGYuYnJvYWRjYXN0
KQorICAgICAgICBpZiBuID49IDA6CisgICAgICAgICAgICBpZiBuZXR3b3JrICsgbiA+IGJyb2Fk
Y2FzdDoKKyAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCisgICAgICAgICAgICByZXR1
cm4gSVBBZGRyZXNzKG5ldHdvcmsgKyBuLCB2ZXJzaW9uPXNlbGYuX3ZlcnNpb24pCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBuICs9IDEKKyAgICAgICAgICAgIGlmIGJyb2FkY2FzdCArIG4g
PCBuZXR3b3JrOgorICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgICAg
IHJldHVybiBJUEFkZHJlc3MoYnJvYWRjYXN0ICsgbiwgdmVyc2lvbj1zZWxmLl92ZXJzaW9uKQor
CisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuX3ZlcnNpb24g
IT0gb3RoZXIuX3ZlcnNpb246CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVzIGFuZCAl
cyBhcmUgbm90IG9mIHRoZSBzYW1lIHZlcnNpb24nICUgKAorICAgICAgICAgICAgICAgICAgICBz
dHIoc2VsZiksIHN0cihvdGhlcikpKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwg
X0Jhc2VOZXQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclcyBhbmQgJXMgYXJlIG5v
dCBvZiB0aGUgc2FtZSB0eXBlJyAlICgKKyAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYpLCBz
dHIob3RoZXIpKSkKKyAgICAgICAgaWYgc2VsZi5uZXR3b3JrICE9IG90aGVyLm5ldHdvcms6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5uZXR3b3JrIDwgb3RoZXIubmV0d29yaworICAgICAgICBp
ZiBzZWxmLm5ldG1hc2sgIT0gb3RoZXIubmV0bWFzazoKKyAgICAgICAgICAgIHJldHVybiBzZWxm
Lm5ldG1hc2sgPCBvdGhlci5uZXRtYXNrCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVm
IF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuX3ZlcnNpb24gIT0gb3RoZXIu
X3ZlcnNpb246CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVzIGFuZCAlcyBhcmUgbm90
IG9mIHRoZSBzYW1lIHZlcnNpb24nICUgKAorICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZiks
IHN0cihvdGhlcikpKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgX0Jhc2VOZXQp
OgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclcyBhbmQgJXMgYXJlIG5vdCBvZiB0aGUg
c2FtZSB0eXBlJyAlICgKKyAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYpLCBzdHIob3RoZXIp
KSkKKyAgICAgICAgaWYgc2VsZi5uZXR3b3JrICE9IG90aGVyLm5ldHdvcms6CisgICAgICAgICAg
ICByZXR1cm4gc2VsZi5uZXR3b3JrID4gb3RoZXIubmV0d29yaworICAgICAgICBpZiBzZWxmLm5l
dG1hc2sgIT0gb3RoZXIubmV0bWFzazoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5ldG1hc2sg
PiBvdGhlci5uZXRtYXNrCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9fbGVfXyhz
ZWxmLCBvdGhlcik6CisgICAgICAgIGd0ID0gc2VsZi5fX2d0X18ob3RoZXIpCisgICAgICAgIGlm
IGd0IGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVk
CisgICAgICAgIHJldHVybiBub3QgZ3QKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgor
ICAgICAgICBsdCA9IHNlbGYuX19sdF9fKG90aGVyKQorICAgICAgICBpZiBsdCBpcyBOb3RJbXBs
ZW1lbnRlZDoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1
cm4gbm90IGx0CisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgcmV0dXJuIChzZWxmLl92ZXJzaW9uID09IG90aGVyLl92ZXJzaW9uCisgICAg
ICAgICAgICAgICAgICAgIGFuZCBzZWxmLm5ldHdvcmsgPT0gb3RoZXIubmV0d29yaworICAgICAg
ICAgICAgICAgICAgICBhbmQgaW50KHNlbGYubmV0bWFzaykgPT0gaW50KG90aGVyLm5ldG1hc2sp
KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKG90aGVyLCBfQmFzZUlQKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuX3ZlcnNp
b24gPT0gb3RoZXIuX3ZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLl9p
cCA9PSBvdGhlci5faXApCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAg
ZXEgPSBzZWxmLl9fZXFfXyhvdGhlcikKKyAgICAgICAgaWYgZXEgaXMgTm90SW1wbGVtZW50ZWQ6
CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIG5vdCBl
cQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAgJyVzLyVzJyAlIChz
dHIoc2VsZi5pcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZi5fcHJlZml4
bGVuKSkKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goaW50
KHNlbGYubmV0d29yaykgXiBpbnQoc2VsZi5uZXRtYXNrKSkKKworICAgIGRlZiBfX2NvbnRhaW5z
X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAjIGFsd2F5cyBmYWxzZSBpZiBvbmUgaXMgdjQgYW5k
IHRoZSBvdGhlciBpcyB2Ni4KKyAgICAgICAgaWYgc2VsZi5fdmVyc2lvbiAhPSBvdGhlci5fdmVy
c2lvbjoKKyAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgIyBkZWFsaW5nIHdpdGggYW5v
dGhlciBuZXR3b3JrLgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBfQmFzZU5ldCk6Cisg
ICAgICAgICAgICByZXR1cm4gKHNlbGYubmV0d29yayA8PSBvdGhlci5uZXR3b3JrIGFuZAorICAg
ICAgICAgICAgICAgICAgICBzZWxmLmJyb2FkY2FzdCA+PSBvdGhlci5icm9hZGNhc3QpCisgICAg
ICAgICMgZGVhbGluZyB3aXRoIGFub3RoZXIgYWRkcmVzcworICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgcmV0dXJuIChpbnQoc2VsZi5uZXR3b3JrKSA8PSBpbnQob3RoZXIuX2lwKSA8PQorICAg
ICAgICAgICAgICAgICAgICBpbnQoc2VsZi5icm9hZGNhc3QpKQorCisgICAgZGVmIG92ZXJsYXBz
KHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiVGVsbCBpZiBzZWxmIGlzIHBhcnRseSBjb250YWlu
ZWQgaW4gb3RoZXIuIiIiCisgICAgICAgIHJldHVybiBzZWxmLm5ldHdvcmsgaW4gb3RoZXIgb3Ig
c2VsZi5icm9hZGNhc3QgaW4gb3RoZXIgb3IgKAorICAgICAgICAgICAgb3RoZXIubmV0d29yayBp
biBzZWxmIG9yIG90aGVyLmJyb2FkY2FzdCBpbiBzZWxmKQorCisgICAgQHByb3BlcnR5CisgICAg
ZGVmIG5ldHdvcmsoc2VsZik6CisgICAgICAgIHggPSBzZWxmLl9jYWNoZS5nZXQoJ25ldHdvcmsn
KQorICAgICAgICBpZiB4IGlzIE5vbmU6CisgICAgICAgICAgICB4ID0gSVBBZGRyZXNzKHNlbGYu
X2lwICYgaW50KHNlbGYubmV0bWFzayksIHZlcnNpb249c2VsZi5fdmVyc2lvbikKKyAgICAgICAg
ICAgIHNlbGYuX2NhY2hlWyduZXR3b3JrJ10gPSB4CisgICAgICAgIHJldHVybiB4CisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgYnJvYWRjYXN0KHNlbGYpOgorICAgICAgICB4ID0gc2VsZi5fY2Fj
aGUuZ2V0KCdicm9hZGNhc3QnKQorICAgICAgICBpZiB4IGlzIE5vbmU6CisgICAgICAgICAgICB4
ID0gSVBBZGRyZXNzKHNlbGYuX2lwIHwgaW50KHNlbGYuaG9zdG1hc2spLCB2ZXJzaW9uPXNlbGYu
X3ZlcnNpb24pCisgICAgICAgICAgICBzZWxmLl9jYWNoZVsnYnJvYWRjYXN0J10gPSB4CisgICAg
ICAgIHJldHVybiB4CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaG9zdG1hc2soc2VsZik6Cisg
ICAgICAgIHggPSBzZWxmLl9jYWNoZS5nZXQoJ2hvc3RtYXNrJykKKyAgICAgICAgaWYgeCBpcyBO
b25lOgorICAgICAgICAgICAgeCA9IElQQWRkcmVzcyhpbnQoc2VsZi5uZXRtYXNrKSBeIHNlbGYu
X0FMTF9PTkVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPXNlbGYuX3ZlcnNp
b24pCisgICAgICAgICAgICBzZWxmLl9jYWNoZVsnaG9zdG1hc2snXSA9IHgKKyAgICAgICAgcmV0
dXJuIHgKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB3aXRoX3ByZWZpeGxlbihzZWxmKToKKyAg
ICAgICAgcmV0dXJuICclcy8lZCcgJSAoc3RyKHNlbGYuaXApLCBzZWxmLl9wcmVmaXhsZW4pCisK
KyAgICBAcHJvcGVydHkKKyAgICBkZWYgd2l0aF9uZXRtYXNrKHNlbGYpOgorICAgICAgICByZXR1
cm4gJyVzLyVzJyAlIChzdHIoc2VsZi5pcCksIHN0cihzZWxmLm5ldG1hc2spKQorCisgICAgQHBy
b3BlcnR5CisgICAgZGVmIHdpdGhfaG9zdG1hc2soc2VsZik6CisgICAgICAgIHJldHVybiAnJXMv
JXMnICUgKHN0cihzZWxmLmlwKSwgc3RyKHNlbGYuaG9zdG1hc2spKQorCisgICAgQHByb3BlcnR5
CisgICAgZGVmIG51bWhvc3RzKHNlbGYpOgorICAgICAgICAiIiJOdW1iZXIgb2YgaG9zdHMgaW4g
dGhlIGN1cnJlbnQgc3VibmV0LiIiIgorICAgICAgICByZXR1cm4gaW50KHNlbGYuYnJvYWRjYXN0
KSAtIGludChzZWxmLm5ldHdvcmspICsgMQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHZlcnNp
b24oc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0Jhc2VOZXQgaGFz
IG5vIHZlcnNpb24nKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHByZWZpeGxlbihzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3ByZWZpeGxlbgorCisgICAgZGVmIGFkZHJlc3NfZXhjbHVk
ZShzZWxmLCBvdGhlcik6CisgICAgICAgICIiIlJlbW92ZSBhbiBhZGRyZXNzIGZyb20gYSBsYXJn
ZXIgYmxvY2suCisKKyAgICAgICAgRm9yIGV4YW1wbGU6CisKKyAgICAgICAgICAgIGFkZHIxID0g
SVBOZXR3b3JrKCcxMC4xLjEuMC8yNCcpCisgICAgICAgICAgICBhZGRyMiA9IElQTmV0d29yaygn
MTAuMS4xLjAvMjYnKQorICAgICAgICAgICAgYWRkcjEuYWRkcmVzc19leGNsdWRlKGFkZHIyKSA9
CisgICAgICAgICAgICAgICAgW0lQTmV0d29yaygnMTAuMS4xLjY0LzI2JyksIElQTmV0d29yaygn
MTAuMS4xLjEyOC8yNScpXQorCisgICAgICAgIG9yIElQdjY6CisKKyAgICAgICAgICAgIGFkZHIx
ID0gSVBOZXR3b3JrKCc6OjEvMzInKQorICAgICAgICAgICAgYWRkcjIgPSBJUE5ldHdvcmsoJzo6
MS8xMjgnKQorICAgICAgICAgICAgYWRkcjEuYWRkcmVzc19leGNsdWRlKGFkZHIyKSA9IFtJUE5l
dHdvcmsoJzo6MC8xMjgnKSwKKyAgICAgICAgICAgICAgICBJUE5ldHdvcmsoJzo6Mi8xMjcnKSwK
KyAgICAgICAgICAgICAgICBJUE5ldHdvcmsoJzo6NC8xMjYnKSwKKyAgICAgICAgICAgICAgICBJ
UE5ldHdvcmsoJzo6OC8xMjUnKSwKKyAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAg
ICBJUE5ldHdvcmsoJzA6MDo4MDAwOjovMzMnKV0KKworICAgICAgICBBcmdzOgorICAgICAgICAg
ICAgb3RoZXI6IEFuIElQdlhOZXR3b3JrIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlLgorCisgICAg
ICAgIFJldHVybnM6CisgICAgICAgICAgICBBIHNvcnRlZCBsaXN0IG9mIElQdlhOZXR3b3JrIG9i
amVjdHMgYWRkcmVzc2VzIHdoaWNoIGlzIHNlbGYKKyAgICAgICAgICAgIG1pbnVzIG90aGVyLgor
CisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIFR5cGVFcnJvcjogSWYgc2VsZiBhbmQgb3Ro
ZXIgYXJlIG9mIGRpZmZmZXJpbmcgYWRkcmVzcworICAgICAgICAgICAgICB2ZXJzaW9ucywgb3Ig
aWYgb3RoZXIgaXMgbm90IGEgbmV0d29yayBvYmplY3QuCisgICAgICAgICAgICBWYWx1ZUVycm9y
OiBJZiBvdGhlciBpcyBub3QgY29tcGxldGVseSBjb250YWluZWQgYnkgc2VsZi4KKworICAgICAg
ICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3ZlcnNpb24gPT0gb3RoZXIuX3ZlcnNpb246Cisg
ICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiVzIGFuZCAlcyBhcmUgbm90IG9mIHRoZSBzYW1l
IHZlcnNpb24iICUgKAorICAgICAgICAgICAgICAgIHN0cihzZWxmKSwgc3RyKG90aGVyKSkpCisK
KyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIF9CYXNlTmV0KToKKyAgICAgICAgICAg
IHJhaXNlIFR5cGVFcnJvcigiJXMgaXMgbm90IGEgbmV0d29yayBvYmplY3QiICUgc3RyKG90aGVy
KSkKKworICAgICAgICBpZiBvdGhlciBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoJyVzIG5vdCBjb250YWluZWQgaW4gJXMnICUgKHN0cihvdGhlciksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2Vs
ZikpKQorICAgICAgICBpZiBvdGhlciA9PSBzZWxmOgorICAgICAgICAgICAgcmV0dXJuIFtdCisK
KyAgICAgICAgcmV0X2FkZHJzID0gW10KKworICAgICAgICAjIE1ha2Ugc3VyZSB3ZSdyZSBjb21w
YXJpbmcgdGhlIG5ldHdvcmsgb2Ygb3RoZXIuCisgICAgICAgIG90aGVyID0gSVBOZXR3b3JrKCcl
cy8lcycgJSAoc3RyKG90aGVyLm5ldHdvcmspLCBzdHIob3RoZXIucHJlZml4bGVuKSksCisgICAg
ICAgICAgICAgICAgICAgdmVyc2lvbj1vdGhlci5fdmVyc2lvbikKKworICAgICAgICBzMSwgczIg
PSBzZWxmLnN1Ym5ldCgpCisgICAgICAgIHdoaWxlIHMxICE9IG90aGVyIGFuZCBzMiAhPSBvdGhl
cjoKKyAgICAgICAgICAgIGlmIG90aGVyIGluIHMxOgorICAgICAgICAgICAgICAgIHJldF9hZGRy
cy5hcHBlbmQoczIpCisgICAgICAgICAgICAgICAgczEsIHMyID0gczEuc3VibmV0KCkKKyAgICAg
ICAgICAgIGVsaWYgb3RoZXIgaW4gczI6CisgICAgICAgICAgICAgICAgcmV0X2FkZHJzLmFwcGVu
ZChzMSkKKyAgICAgICAgICAgICAgICBzMSwgczIgPSBzMi5zdWJuZXQoKQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAjIElmIHdlIGdvdCBoZXJlLCB0aGVyZSdzIGEgYnVnIHNv
bWV3aGVyZS4KKyAgICAgICAgICAgICAgICBhc3NlcnQgVHJ1ZSA9PSBGYWxzZSwgKCdFcnJvciBw
ZXJmb3JtaW5nIGV4Y2x1c2lvbjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3MxOiAlcyBzMjogJXMgb3RoZXI6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoc3RyKHMxKSwgc3RyKHMyKSwgc3RyKG90aGVyKSkpCisgICAgICAg
IGlmIHMxID09IG90aGVyOgorICAgICAgICAgICAgcmV0X2FkZHJzLmFwcGVuZChzMikKKyAgICAg
ICAgZWxpZiBzMiA9PSBvdGhlcjoKKyAgICAgICAgICAgIHJldF9hZGRycy5hcHBlbmQoczEpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIElmIHdlIGdvdCBoZXJlLCB0aGVyZSdzIGEgYnVn
IHNvbWV3aGVyZS4KKyAgICAgICAgICAgIGFzc2VydCBUcnVlID09IEZhbHNlLCAoJ0Vycm9yIHBl
cmZvcm1pbmcgZXhjbHVzaW9uOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdzMTogJXMgczI6ICVzIG90aGVyOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoc3RyKHMxKSwgc3RyKHMyKSwgc3RyKG90aGVyKSkpCisKKyAgICAgICAgcmV0dXJu
IHNvcnRlZChyZXRfYWRkcnMsIGtleT1fQmFzZU5ldC5fZ2V0X25ldHdvcmtzX2tleSkKKworICAg
IGRlZiBjb21wYXJlX25ldHdvcmtzKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiQ29tcGFyZSB0
d28gSVAgb2JqZWN0cy4KKworICAgICAgICBUaGlzIGlzIG9ubHkgY29uY2VybmVkIGFib3V0IHRo
ZSBjb21wYXJpc29uIG9mIHRoZSBpbnRlZ2VyCisgICAgICAgIHJlcHJlc2VudGF0aW9uIG9mIHRo
ZSBuZXR3b3JrIGFkZHJlc3Nlcy4gIFRoaXMgbWVhbnMgdGhhdCB0aGUKKyAgICAgICAgaG9zdCBi
aXRzIGFyZW4ndCBjb25zaWRlcmVkIGF0IGFsbCBpbiB0aGlzIG1ldGhvZC4gIElmIHlvdSB3YW50
CisgICAgICAgIHRvIGNvbXBhcmUgaG9zdCBiaXRzLCB5b3UgY2FuIGVhc2lseSBlbm91Z2ggZG8g
YQorICAgICAgICAnSG9zdEEuX2lwIDwgSG9zdEIuX2lwJworCisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgICBvdGhlcjogQW4gSVAgb2JqZWN0LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAg
ICAgICBJZiB0aGUgSVAgdmVyc2lvbnMgb2Ygc2VsZiBhbmQgb3RoZXIgYXJlIHRoZSBzYW1lLCBy
ZXR1cm5zOgorCisgICAgICAgICAgICAtMSBpZiBzZWxmIDwgb3RoZXI6CisgICAgICAgICAgICAg
IGVnOiBJUHY0KCcxLjEuMS4wLzI0JykgPCBJUHY0KCcxLjEuMi4wLzI0JykKKyAgICAgICAgICAg
ICAgSVB2NignMTA4MDo6MjAwQzo0MTdBJykgPCBJUHY2KCcxMDgwOjoyMDBCOjQxN0InKQorICAg
ICAgICAgICAgMCBpZiBzZWxmID09IG90aGVyCisgICAgICAgICAgICAgIGVnOiBJUHY0KCcxLjEu
MS4xLzI0JykgPT0gSVB2NCgnMS4xLjEuMi8yNCcpCisgICAgICAgICAgICAgIElQdjYoJzEwODA6
OjIwMEM6NDE3QS85NicpID09IElQdjYoJzEwODA6OjIwMEM6NDE3Qi85NicpCisgICAgICAgICAg
ICAxIGlmIHNlbGYgPiBvdGhlcgorICAgICAgICAgICAgICBlZzogSVB2NCgnMS4xLjEuMC8yNCcp
ID4gSVB2NCgnMS4xLjAuMC8yNCcpCisgICAgICAgICAgICAgIElQdjYoJzEwODA6OjE6MjAwQzo0
MTdBLzExMicpID4KKyAgICAgICAgICAgICAgSVB2NignMTA4MDo6MDoyMDBDOjQxN0EvMTEyJykK
KworICAgICAgICAgICAgSWYgdGhlIElQIHZlcnNpb25zIG9mIHNlbGYgYW5kIG90aGVyIGFyZSBk
aWZmZXJlbnQsIHJldHVybnM6CisKKyAgICAgICAgICAgIC0xIGlmIHNlbGYuX3ZlcnNpb24gPCBv
dGhlci5fdmVyc2lvbgorICAgICAgICAgICAgICBlZzogSVB2NCgnMTAuMC4wLjEvMjQnKSA8IElQ
djYoJzo6MS8xMjgnKQorICAgICAgICAgICAgMSBpZiBzZWxmLl92ZXJzaW9uID4gb3RoZXIuX3Zl
cnNpb24KKyAgICAgICAgICAgICAgZWc6IElQdjYoJzo6MS8xMjgnKSA+IElQdjQoJzI1NS4yNTUu
MjU1LjAvMjQnKQorCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl92ZXJzaW9uIDwgb3Ro
ZXIuX3ZlcnNpb246CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgaWYgc2VsZi5fdmVy
c2lvbiA+IG90aGVyLl92ZXJzaW9uOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgIyBz
ZWxmLl92ZXJzaW9uID09IG90aGVyLl92ZXJzaW9uIGJlbG93IGhlcmU6CisgICAgICAgIGlmIHNl
bGYubmV0d29yayA8IG90aGVyLm5ldHdvcms6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAg
ICAgaWYgc2VsZi5uZXR3b3JrID4gb3RoZXIubmV0d29yazoKKyAgICAgICAgICAgIHJldHVybiAx
CisgICAgICAgICMgc2VsZi5uZXR3b3JrID09IG90aGVyLm5ldHdvcmsgYmVsb3cgaGVyZToKKyAg
ICAgICAgaWYgc2VsZi5uZXRtYXNrIDwgb3RoZXIubmV0bWFzazoKKyAgICAgICAgICAgIHJldHVy
biAtMQorICAgICAgICBpZiBzZWxmLm5ldG1hc2sgPiBvdGhlci5uZXRtYXNrOgorICAgICAgICAg
ICAgcmV0dXJuIDEKKyAgICAgICAgIyBzZWxmLm5ldHdvcmsgPT0gb3RoZXIubmV0d29yayBhbmQg
c2VsZi5uZXRtYXNrID09IG90aGVyLm5ldG1hc2sKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRl
ZiBfZ2V0X25ldHdvcmtzX2tleShzZWxmKToKKyAgICAgICAgIiIiTmV0d29yay1vbmx5IGtleSBm
dW5jdGlvbi4KKworICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGlkZW50aWZpZXMgdGhp
cyBhZGRyZXNzJyBuZXR3b3JrIGFuZAorICAgICAgICBuZXRtYXNrLiBUaGlzIGZ1bmN0aW9uIGlz
IGEgc3VpdGFibGUgImtleSIgYXJndW1lbnQgZm9yIHNvcnRlZCgpCisgICAgICAgIGFuZCBsaXN0
LnNvcnQoKS4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIChzZWxmLl92ZXJzaW9uLCBz
ZWxmLm5ldHdvcmssIHNlbGYubmV0bWFzaykKKworICAgIGRlZiBfaXBfaW50X2Zyb21fcHJlZml4
KHNlbGYsIHByZWZpeGxlbj1Ob25lKToKKyAgICAgICAgIiIiVHVybiB0aGUgcHJlZml4IGxlbmd0
aCBuZXRtYXNrIGludG8gYSBpbnQgZm9yIGNvbXBhcmlzb24uCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICAgIHByZWZpeGxlbjogQW4gaW50ZWdlciwgdGhlIHByZWZpeCBsZW5ndGguCisKKyAg
ICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEFuIGludGVnZXIuCisKKyAgICAgICAgIiIiCisg
ICAgICAgIGlmIG5vdCBwcmVmaXhsZW4gYW5kIHByZWZpeGxlbiAhPSAwOgorICAgICAgICAgICAg
cHJlZml4bGVuID0gc2VsZi5fcHJlZml4bGVuCisgICAgICAgIHJldHVybiBzZWxmLl9BTExfT05F
UyBeIChzZWxmLl9BTExfT05FUyA+PiBwcmVmaXhsZW4pCisKKyAgICBkZWYgX3ByZWZpeF9mcm9t
X2lwX2ludChzZWxmLCBpcF9pbnQsIG1hc2s9MzIpOgorICAgICAgICAiIiJSZXR1cm4gcHJlZml4
IGxlbmd0aCBmcm9tIHRoZSBkZWNpbWFsIG5ldG1hc2suCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICAgIGlwX2ludDogQW4gaW50ZWdlciwgdGhlIElQIGFkZHJlc3MuCisgICAgICAgICAgICBt
YXNrOiBUaGUgbmV0bWFzay4gIERlZmF1bHRzIHRvIDMyLgorCisgICAgICAgIFJldHVybnM6Cisg
ICAgICAgICAgICBBbiBpbnRlZ2VyLCB0aGUgcHJlZml4IGxlbmd0aC4KKworICAgICAgICAiIiIK
KyAgICAgICAgd2hpbGUgbWFzazoKKyAgICAgICAgICAgIGlmIGlwX2ludCAmIDEgPT0gMToKKyAg
ICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaXBfaW50ID4+PSAxCisgICAgICAgICAg
ICBtYXNrIC09IDEKKworICAgICAgICByZXR1cm4gbWFzaworCisgICAgZGVmIF9pcF9zdHJpbmdf
ZnJvbV9wcmVmaXgoc2VsZiwgcHJlZml4bGVuPU5vbmUpOgorICAgICAgICAiIiJUdXJuIGEgcHJl
Zml4IGxlbmd0aCBpbnRvIGEgZG90dGVkIGRlY2ltYWwgc3RyaW5nLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgICBwcmVmaXhsZW46IEFuIGludGVnZXIsIHRoZSBuZXRtYXNrIHByZWZpeCBs
ZW5ndGguCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgc3RyaW5nLCB0aGUgZG90
dGVkIGRlY2ltYWwgbmV0bWFzayBzdHJpbmcuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5v
dCBwcmVmaXhsZW46CisgICAgICAgICAgICBwcmVmaXhsZW4gPSBzZWxmLl9wcmVmaXhsZW4KKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3N0cmluZ19mcm9tX2lwX2ludChzZWxmLl9pcF9pbnRfZnJvbV9w
cmVmaXgocHJlZml4bGVuKSkKKworICAgIGRlZiBpdGVyX3N1Ym5ldHMoc2VsZiwgcHJlZml4bGVu
X2RpZmY9MSwgbmV3X3ByZWZpeD1Ob25lKToKKyAgICAgICAgIiIiVGhlIHN1Ym5ldHMgd2hpY2gg
am9pbiB0byBtYWtlIHRoZSBjdXJyZW50IHN1Ym5ldC4KKworICAgICAgICBJbiB0aGUgY2FzZSB0
aGF0IHNlbGYgY29udGFpbnMgb25seSBvbmUgSVAKKyAgICAgICAgKHNlbGYuX3ByZWZpeGxlbiA9
PSAzMiBmb3IgSVB2NCBvciBzZWxmLl9wcmVmaXhsZW4gPT0gMTI4CisgICAgICAgIGZvciBJUHY2
KSwgcmV0dXJuIGEgbGlzdCB3aXRoIGp1c3Qgb3Vyc2VsZi4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgICAgcHJlZml4bGVuX2RpZmY6IEFuIGludGVnZXIsIHRoZSBhbW91bnQgdGhlIHByZWZp
eCBsZW5ndGgKKyAgICAgICAgICAgICAgc2hvdWxkIGJlIGluY3JlYXNlZCBieS4gVGhpcyBzaG91
bGQgbm90IGJlIHNldCBpZgorICAgICAgICAgICAgICBuZXdfcHJlZml4IGlzIGFsc28gc2V0Lgor
ICAgICAgICAgICAgbmV3X3ByZWZpeDogVGhlIGRlc2lyZWQgbmV3IHByZWZpeCBsZW5ndGguIFRo
aXMgbXVzdCBiZSBhCisgICAgICAgICAgICAgIGxhcmdlciBudW1iZXIgKHNtYWxsZXIgcHJlZml4
KSB0aGFuIHRoZSBleGlzdGluZyBwcmVmaXguCisgICAgICAgICAgICAgIFRoaXMgc2hvdWxkIG5v
dCBiZSBzZXQgaWYgcHJlZml4bGVuX2RpZmYgaXMgYWxzbyBzZXQuCisKKyAgICAgICAgUmV0dXJu
czoKKyAgICAgICAgICAgIEFuIGl0ZXJhdG9yIG9mIElQdig0fDYpIG9iamVjdHMuCisKKyAgICAg
ICAgUmFpc2VzOgorICAgICAgICAgICAgVmFsdWVFcnJvcjogVGhlIHByZWZpeGxlbl9kaWZmIGlz
IHRvbyBzbWFsbCBvciB0b28gbGFyZ2UuCisgICAgICAgICAgICAgICAgT1IKKyAgICAgICAgICAg
IHByZWZpeGxlbl9kaWZmIGFuZCBuZXdfcHJlZml4IGFyZSBib3RoIHNldCBvciBuZXdfcHJlZml4
CisgICAgICAgICAgICAgIGlzIGEgc21hbGxlciBudW1iZXIgdGhhbiB0aGUgY3VycmVudCBwcmVm
aXggKHNtYWxsZXIKKyAgICAgICAgICAgICAgbnVtYmVyIG1lYW5zIGEgbGFyZ2VyIG5ldHdvcmsp
CisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3ByZWZpeGxlbiA9PSBzZWxmLl9tYXhf
cHJlZml4bGVuOgorICAgICAgICAgICAgeWllbGQgc2VsZgorICAgICAgICAgICAgcmV0dXJuCisK
KyAgICAgICAgaWYgbmV3X3ByZWZpeCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIG5ld19w
cmVmaXggPCBzZWxmLl9wcmVmaXhsZW46CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cignbmV3IHByZWZpeCBtdXN0IGJlIGxvbmdlcicpCisgICAgICAgICAgICBpZiBwcmVmaXhsZW5f
ZGlmZiAhPSAxOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Nhbm5vdCBzZXQg
cHJlZml4bGVuX2RpZmYgYW5kIG5ld19wcmVmaXgnKQorICAgICAgICAgICAgcHJlZml4bGVuX2Rp
ZmYgPSBuZXdfcHJlZml4IC0gc2VsZi5fcHJlZml4bGVuCisKKyAgICAgICAgaWYgcHJlZml4bGVu
X2RpZmYgPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigncHJlZml4IGxlbmd0aCBk
aWZmIG11c3QgYmUgPiAwJykKKyAgICAgICAgbmV3X3ByZWZpeGxlbiA9IHNlbGYuX3ByZWZpeGxl
biArIHByZWZpeGxlbl9kaWZmCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2lzX3ZhbGlkX25ldG1h
c2soc3RyKG5ld19wcmVmaXhsZW4pKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisg
ICAgICAgICAgICAgICAgJ3ByZWZpeCBsZW5ndGggZGlmZiAlZCBpcyBpbnZhbGlkIGZvciBuZXRi
bG9jayAlcycgJSAoCisgICAgICAgICAgICAgICAgICAgIG5ld19wcmVmaXhsZW4sIHN0cihzZWxm
KSkpCisKKyAgICAgICAgZmlyc3QgPSBJUE5ldHdvcmsoJyVzLyVzJyAlIChzdHIoc2VsZi5uZXR3
b3JrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZi5fcHJl
Zml4bGVuICsgcHJlZml4bGVuX2RpZmYpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJz
aW9uPXNlbGYuX3ZlcnNpb24pCisKKyAgICAgICAgeWllbGQgZmlyc3QKKyAgICAgICAgY3VycmVu
dCA9IGZpcnN0CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBicm9hZGNhc3QgPSBj
dXJyZW50LmJyb2FkY2FzdAorICAgICAgICAgICAgaWYgYnJvYWRjYXN0ID09IHNlbGYuYnJvYWRj
YXN0OgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgbmV3X2FkZHIgPSBJUEFk
ZHJlc3MoaW50KGJyb2FkY2FzdCkgKyAxLCB2ZXJzaW9uPXNlbGYuX3ZlcnNpb24pCisgICAgICAg
ICAgICBjdXJyZW50ID0gSVBOZXR3b3JrKCclcy8lcycgJSAoc3RyKG5ld19hZGRyKSwgc3RyKG5l
d19wcmVmaXhsZW4pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj1z
ZWxmLl92ZXJzaW9uKQorCisgICAgICAgICAgICB5aWVsZCBjdXJyZW50CisKKyAgICBkZWYgbWFz
a2VkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG5ldHdvcmsgb2JqZWN0IHdpdGggdGhl
IGhvc3QgYml0cyBtYXNrZWQgb3V0LiIiIgorICAgICAgICByZXR1cm4gSVBOZXR3b3JrKCclcy8l
ZCcgJSAoc2VsZi5uZXR3b3JrLCBzZWxmLl9wcmVmaXhsZW4pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHZlcnNpb249c2VsZi5fdmVyc2lvbikKKworICAgIGRlZiBzdWJuZXQoc2VsZiwgcHJl
Zml4bGVuX2RpZmY9MSwgbmV3X3ByZWZpeD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbGlz
dCBvZiBzdWJuZXRzLCByYXRoZXIgdGhhbiBhbiBpdGVyYXRvci4iIiIKKyAgICAgICAgcmV0dXJu
IGxpc3Qoc2VsZi5pdGVyX3N1Ym5ldHMocHJlZml4bGVuX2RpZmYsIG5ld19wcmVmaXgpKQorCisg
ICAgZGVmIHN1cGVybmV0KHNlbGYsIHByZWZpeGxlbl9kaWZmPTEsIG5ld19wcmVmaXg9Tm9uZSk6
CisgICAgICAgICIiIlRoZSBzdXBlcm5ldCBjb250YWluaW5nIHRoZSBjdXJyZW50IG5ldHdvcmsu
CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHByZWZpeGxlbl9kaWZmOiBBbiBpbnRlZ2Vy
LCB0aGUgYW1vdW50IHRoZSBwcmVmaXggbGVuZ3RoIG9mCisgICAgICAgICAgICAgIHRoZSBuZXR3
b3JrIHNob3VsZCBiZSBkZWNyZWFzZWQgYnkuICBGb3IgZXhhbXBsZSwgZ2l2ZW4gYQorICAgICAg
ICAgICAgICAvMjQgbmV0d29yayBhbmQgYSBwcmVmaXhsZW5fZGlmZiBvZiAzLCBhIHN1cGVybmV0
IHdpdGggYQorICAgICAgICAgICAgICAvMjEgbmV0bWFzayBpcyByZXR1cm5lZC4KKworICAgICAg
ICBSZXR1cm5zOgorICAgICAgICAgICAgQW4gSVB2NCBuZXR3b3JrIG9iamVjdC4KKworICAgICAg
ICBSYWlzZXM6CisgICAgICAgICAgICBWYWx1ZUVycm9yOiBJZiBzZWxmLnByZWZpeGxlbiAtIHBy
ZWZpeGxlbl9kaWZmIDwgMC4gSS5lLiwgeW91IGhhdmUgYQorICAgICAgICAgICAgICBuZWdhdGl2
ZSBwcmVmaXggbGVuZ3RoLgorICAgICAgICAgICAgICAgIE9SCisgICAgICAgICAgICBJZiBwcmVm
aXhsZW5fZGlmZiBhbmQgbmV3X3ByZWZpeCBhcmUgYm90aCBzZXQgb3IgbmV3X3ByZWZpeCBpcyBh
CisgICAgICAgICAgICAgIGxhcmdlciBudW1iZXIgdGhhbiB0aGUgY3VycmVudCBwcmVmaXggKGxh
cmdlciBudW1iZXIgbWVhbnMgYQorICAgICAgICAgICAgICBzbWFsbGVyIG5ldHdvcmspCisKKyAg
ICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3ByZWZpeGxlbiA9PSAwOgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYKKworICAgICAgICBpZiBuZXdfcHJlZml4IGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgaWYgbmV3X3ByZWZpeCA+IHNlbGYuX3ByZWZpeGxlbjoKKyAgICAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCduZXcgcHJlZml4IG11c3QgYmUgc2hvcnRlcicpCisgICAgICAgICAg
ICBpZiBwcmVmaXhsZW5fZGlmZiAhPSAxOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ2Nhbm5vdCBzZXQgcHJlZml4bGVuX2RpZmYgYW5kIG5ld19wcmVmaXgnKQorICAgICAgICAg
ICAgcHJlZml4bGVuX2RpZmYgPSBzZWxmLl9wcmVmaXhsZW4gLSBuZXdfcHJlZml4CisKKworICAg
ICAgICBpZiBzZWxmLnByZWZpeGxlbiAtIHByZWZpeGxlbl9kaWZmIDwgMDoKKyAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgJ2N1cnJlbnQgcHJlZml4bGVuIGlz
ICVkLCBjYW5ub3QgaGF2ZSBhIHByZWZpeGxlbl9kaWZmIG9mICVkJyAlCisgICAgICAgICAgICAg
ICAgKHNlbGYucHJlZml4bGVuLCBwcmVmaXhsZW5fZGlmZikpCisgICAgICAgIHJldHVybiBJUE5l
dHdvcmsoJyVzLyVzJyAlIChzdHIoc2VsZi5uZXR3b3JrKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cihzZWxmLnByZWZpeGxlbiAtIHByZWZpeGxlbl9kaWZmKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj1zZWxmLl92ZXJzaW9uKQorCisgICAgIyBi
YWNrd2FyZHMgY29tcGF0aWJpbGl0eQorICAgIFN1Ym5ldCA9IHN1Ym5ldAorICAgIFN1cGVybmV0
ID0gc3VwZXJuZXQKKyAgICBBZGRyZXNzRXhjbHVkZSA9IGFkZHJlc3NfZXhjbHVkZQorICAgIENv
bXBhcmVOZXR3b3JrcyA9IGNvbXBhcmVfbmV0d29ya3MKKyAgICBDb250YWlucyA9IF9fY29udGFp
bnNfXworCisKK2NsYXNzIF9CYXNlVjQob2JqZWN0KToKKworICAgICIiIkJhc2UgSVB2NCBvYmpl
Y3QuCisKKyAgICBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgYnkgSVB2NCBvYmplY3Rz
IGluIGJvdGggc2luZ2xlIElQCisgICAgYWRkcmVzc2VzIGFuZCBuZXR3b3Jrcy4KKworICAgICIi
IgorCisgICAgIyBFcXVpdmFsZW50IHRvIDI1NS4yNTUuMjU1LjI1NSBvciAzMiBiaXRzIG9mIDEn
cy4KKyAgICBfQUxMX09ORVMgPSAoMioqSVBWNExFTkdUSCkgLSAxCisgICAgX0RFQ0lNQUxfRElH
SVRTID0gZnJvemVuc2V0KCcwMTIzNDU2Nzg5JykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBh
ZGRyZXNzKToKKyAgICAgICAgc2VsZi5fdmVyc2lvbiA9IDQKKyAgICAgICAgc2VsZi5fbWF4X3By
ZWZpeGxlbiA9IElQVjRMRU5HVEgKKworICAgIGRlZiBfZXhwbG9kZV9zaG9ydGhhbmRfaXBfc3Ry
aW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYpCisKKyAgICBkZWYgX2lwX2ludF9m
cm9tX3N0cmluZyhzZWxmLCBpcF9zdHIpOgorICAgICAgICAiIiJUdXJuIHRoZSBnaXZlbiBJUCBz
dHJpbmcgaW50byBhbiBpbnRlZ2VyIGZvciBjb21wYXJpc29uLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgICBpcF9zdHI6IEEgc3RyaW5nLCB0aGUgSVAgaXBfc3RyLgorCisgICAgICAgIFJl
dHVybnM6CisgICAgICAgICAgICBUaGUgSVAgaXBfc3RyIGFzIGFuIGludGVnZXIuCisKKyAgICAg
ICAgUmFpc2VzOgorICAgICAgICAgICAgQWRkcmVzc1ZhbHVlRXJyb3I6IGlmIGlwX3N0ciBpc24n
dCBhIHZhbGlkIElQdjQgQWRkcmVzcy4KKworICAgICAgICAiIiIKKyAgICAgICAgb2N0ZXRzID0g
aXBfc3RyLnNwbGl0KCcuJykKKyAgICAgICAgaWYgbGVuKG9jdGV0cykgIT0gNDoKKyAgICAgICAg
ICAgIHJhaXNlIEFkZHJlc3NWYWx1ZUVycm9yKGlwX3N0cikKKworICAgICAgICBwYWNrZWRfaXAg
PSAwCisgICAgICAgIGZvciBvYyBpbiBvY3RldHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgcGFja2VkX2lwID0gKHBhY2tlZF9pcCA8PCA4KSB8IHNlbGYuX3BhcnNlX29jdGV0
KG9jKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcmFp
c2UgQWRkcmVzc1ZhbHVlRXJyb3IoaXBfc3RyKQorICAgICAgICByZXR1cm4gcGFja2VkX2lwCisK
KyAgICBkZWYgX3BhcnNlX29jdGV0KHNlbGYsIG9jdGV0X3N0cik6CisgICAgICAgICIiIkNvbnZl
cnQgYSBkZWNpbWFsIG9jdGV0IGludG8gYW4gaW50ZWdlci4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgICAgb2N0ZXRfc3RyOiBBIHN0cmluZywgdGhlIG51bWJlciB0byBwYXJzZS4KKworICAg
ICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVGhlIG9jdGV0IGFzIGFuIGludGVnZXIuCisKKyAg
ICAgICAgUmFpc2VzOgorICAgICAgICAgICAgVmFsdWVFcnJvcjogaWYgdGhlIG9jdGV0IGlzbid0
IHN0cmljdGx5IGEgZGVjaW1hbCBmcm9tIFswLi4yNTVdLgorCisgICAgICAgICIiIgorICAgICAg
ICAjIFdoaXRlbGlzdCB0aGUgY2hhcmFjdGVycywgc2luY2UgaW50KCkgYWxsb3dzIGEgbG90IG9m
IGJpemFycmUgc3R1ZmYuCisgICAgICAgIGlmIG5vdCBzZWxmLl9ERUNJTUFMX0RJR0lUUy5pc3N1
cGVyc2V0KG9jdGV0X3N0cik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAg
IG9jdGV0X2ludCA9IGludChvY3RldF9zdHIsIDEwKQorICAgICAgICAjIERpc2FsbG93IGxlYWRp
bmcgemVyb2VzLCBiZWNhdXNlIG5vIGNsZWFyIHN0YW5kYXJkIGV4aXN0cyBvbgorICAgICAgICAj
IHdoZXRoZXIgdGhlc2Ugc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGRlY2ltYWwgb3Igb2N0YWwu
CisgICAgICAgIGlmIG9jdGV0X2ludCA+IDI1NSBvciAob2N0ZXRfc3RyWzBdID09ICcwJyBhbmQg
bGVuKG9jdGV0X3N0cikgPiAxKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAg
ICAgcmV0dXJuIG9jdGV0X2ludAorCisgICAgZGVmIF9zdHJpbmdfZnJvbV9pcF9pbnQoc2VsZiwg
aXBfaW50KToKKyAgICAgICAgIiIiVHVybnMgYSAzMi1iaXQgaW50ZWdlciBpbnRvIGRvdHRlZCBk
ZWNpbWFsIG5vdGF0aW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpcF9pbnQ6IEFu
IGludGVnZXIsIHRoZSBJUCBhZGRyZXNzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAg
ICBUaGUgSVAgYWRkcmVzcyBhcyBhIHN0cmluZyBpbiBkb3R0ZWQgZGVjaW1hbCBub3RhdGlvbi4K
KworICAgICAgICAiIiIKKyAgICAgICAgb2N0ZXRzID0gW10KKyAgICAgICAgZm9yIF8gaW4geHJh
bmdlKDQpOgorICAgICAgICAgICAgb2N0ZXRzLmluc2VydCgwLCBzdHIoaXBfaW50ICYgMHhGRikp
CisgICAgICAgICAgICBpcF9pbnQgPj49IDgKKyAgICAgICAgcmV0dXJuICcuJy5qb2luKG9jdGV0
cykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtYXhfcHJlZml4bGVuKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fbWF4X3ByZWZpeGxlbgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBh
Y2tlZChzZWxmKToKKyAgICAgICAgIiIiVGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGlz
IGFkZHJlc3MuIiIiCisgICAgICAgIHJldHVybiB2NF9pbnRfdG9fcGFja2VkKHNlbGYuX2lwKQor
CisgICAgQHByb3BlcnR5CisgICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl92ZXJzaW9uCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfcmVzZXJ2ZWQoc2VsZik6
CisgICAgICAgIiIiVGVzdCBpZiB0aGUgYWRkcmVzcyBpcyBvdGhlcndpc2UgSUVURiByZXNlcnZl
ZC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRo
ZSBhZGRyZXNzIGlzIHdpdGhpbiB0aGUKKyAgICAgICAgICAgIHJlc2VydmVkIElQdjQgTmV0d29y
ayByYW5nZS4KKworICAgICAgICIiIgorICAgICAgIHJldHVybiBzZWxmIGluIElQdjROZXR3b3Jr
KCcyNDAuMC4wLjAvNCcpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfcHJpdmF0ZShzZWxm
KToKKyAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwcml2
YXRlIG5ldHdvcmtzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4s
IFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyIFJGQyAxOTE4LgorCisgICAgICAg
ICIiIgorICAgICAgICByZXR1cm4gKHNlbGYgaW4gSVB2NE5ldHdvcmsoJzEwLjAuMC4wLzgnKSBv
cgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE3Mi4xNi4wLjAvMTInKSBv
cgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5Mi4xNjguMC4wLzE2Jykp
CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfbXVsdGljYXN0KHNlbGYpOgorICAgICAgICAi
IiJUZXN0IGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIGZvciBtdWx0aWNhc3QgdXNlLgorCisg
ICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJl
c3MgaXMgbXVsdGljYXN0LgorICAgICAgICAgICAgU2VlIFJGQyAzMTcxIGZvciBkZXRhaWxzLgor
CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZiBpbiBJUHY0TmV0d29yaygnMjI0LjAu
MC4wLzQnKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX3Vuc3BlY2lmaWVkKHNlbGYpOgor
ICAgICAgICAiIiJUZXN0IGlmIHRoZSBhZGRyZXNzIGlzIHVuc3BlY2lmaWVkLgorCisgICAgICAg
IFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhpcyBpcyB0aGUgdW5z
cGVjaWZpZWQgYWRkcmVzcyBhcyBkZWZpbmVkIGluCisgICAgICAgICAgICBSRkMgNTczNSAzLgor
CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZiBpbiBJUHY0TmV0d29yaygnMC4wLjAu
MCcpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfbG9vcGJhY2soc2VsZik6CisgICAgICAg
ICIiIlRlc3QgaWYgdGhlIGFkZHJlc3MgaXMgYSBsb29wYmFjayBhZGRyZXNzLgorCisgICAgICAg
IFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMg
YSBsb29wYmFjayBwZXIgUkZDIDMzMzAuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBz
ZWxmIGluIElQdjROZXR3b3JrKCcxMjcuMC4wLjAvOCcpCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgaXNfbGlua19sb2NhbChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBpZiB0aGUgYWRkcmVzcyBp
cyByZXNlcnZlZCBmb3IgbGluay1sb2NhbC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAg
ICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIGxpbmstbG9jYWwgcGVyIFJGQyAz
OTI3LgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZiBpbiBJUHY0TmV0d29yaygn
MTY5LjI1NC4wLjAvMTYnKQorCisKK2NsYXNzIElQdjRBZGRyZXNzKF9CYXNlVjQsIF9CYXNlSVAp
OgorCisgICAgIiIiUmVwcmVzZW50IGFuZCBtYW5pcHVsYXRlIHNpbmdsZSBJUHY0IEFkZHJlc3Nl
cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzKToKKworICAgICAgICAiIiIK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGFkZHJlc3M6IEEgc3RyaW5nIG9yIGludGVnZXIg
cmVwcmVzZW50aW5nIHRoZSBJUAorICAgICAgICAgICAgICAnMTkyLjE2OC4xLjEnCisKKyAgICAg
ICAgICAgICAgQWRkaXRpb25hbGx5LCBhbiBpbnRlZ2VyIGNhbiBiZSBwYXNzZWQsIHNvCisgICAg
ICAgICAgICAgIElQdjRBZGRyZXNzKCcxOTIuMTY4LjEuMScpID09IElQdjRBZGRyZXNzKDMyMzIy
MzU3NzcpLgorICAgICAgICAgICAgICBvciwgbW9yZSBnZW5lcmFsbHkKKyAgICAgICAgICAgICAg
SVB2NEFkZHJlc3MoaW50KElQdjRBZGRyZXNzKCcxOTIuMTY4LjEuMScpKSkgPT0KKyAgICAgICAg
ICAgICAgICBJUHY0QWRkcmVzcygnMTkyLjE2OC4xLjEnKQorCisgICAgICAgIFJhaXNlczoKKyAg
ICAgICAgICAgIEFkZHJlc3NWYWx1ZUVycm9yOiBJZiBpcGFkZHIgaXNuJ3QgYSB2YWxpZCBJUHY0
IGFkZHJlc3MuCisKKyAgICAgICAgIiIiCisgICAgICAgIF9CYXNlVjQuX19pbml0X18oc2VsZiwg
YWRkcmVzcykKKworICAgICAgICAjIEVmZmljaWVudCBjb25zdHJ1Y3RvciBmcm9tIGludGVnZXIu
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoYWRkcmVzcywgKGludCwgbG9uZykpOgorICAgICAgICAg
ICAgc2VsZi5faXAgPSBhZGRyZXNzCisgICAgICAgICAgICBpZiBhZGRyZXNzIDwgMCBvciBhZGRy
ZXNzID4gc2VsZi5fQUxMX09ORVM6CisgICAgICAgICAgICAgICAgcmFpc2UgQWRkcmVzc1ZhbHVl
RXJyb3IoYWRkcmVzcykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQ29uc3RydWN0
aW5nIGZyb20gYSBwYWNrZWQgYWRkcmVzcworICAgICAgICBpZiBpc2luc3RhbmNlKGFkZHJlc3Ms
IEJ5dGVzKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9pcCwgPSBz
dHJ1Y3QudW5wYWNrKCchSScsIGFkZHJlc3MpCisgICAgICAgICAgICBleGNlcHQgc3RydWN0LmVy
cm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIEFkZHJlc3NWYWx1ZUVycm9yKGFkZHJlc3MpICAj
IFdyb25nIGxlbmd0aC4KKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQXNzdW1lIGlu
cHV0IGFyZ3VtZW50IHRvIGJlIHN0cmluZyBvciBhbnkgb2JqZWN0IHJlcHJlc2VudGF0aW9uCisg
ICAgICAgICMgd2hpY2ggY29udmVydHMgaW50byBhIGZvcm1hdHRlZCBJUCBzdHJpbmcuCisgICAg
ICAgIGFkZHJfc3RyID0gc3RyKGFkZHJlc3MpCisgICAgICAgIHNlbGYuX2lwID0gc2VsZi5faXBf
aW50X2Zyb21fc3RyaW5nKGFkZHJfc3RyKQorCisKK2NsYXNzIElQdjROZXR3b3JrKF9CYXNlVjQs
IF9CYXNlTmV0KToKKworICAgICIiIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbmQgbWFuaXB1bGF0
ZXMgMzItYml0IElQdjQgbmV0d29ya3MuCisKKyAgICBBdHRyaWJ1dGVzOiBbZXhhbXBsZXMgZm9y
IElQdjROZXR3b3JrKCcxLjIuMy40LzI3JyldCisgICAgICAgIC5faXA6IDE2OTA5MDYwCisgICAg
ICAgIC5pcDogSVB2NEFkZHJlc3MoJzEuMi4zLjQnKQorICAgICAgICAubmV0d29yazogSVB2NEFk
ZHJlc3MoJzEuMi4zLjAnKQorICAgICAgICAuaG9zdG1hc2s6IElQdjRBZGRyZXNzKCcwLjAuMC4z
MScpCisgICAgICAgIC5icm9hZGNhc3Q6IElQdjRBZGRyZXNzKCcxLjIuMy4zMScpCisgICAgICAg
IC5uZXRtYXNrOiBJUHY0QWRkcmVzcygnMjU1LjI1NS4yNTUuMjI0JykKKyAgICAgICAgLnByZWZp
eGxlbjogMjcKKworICAgICIiIgorCisgICAgIyB0aGUgdmFsaWQgb2N0ZXRzIGZvciBob3N0IGFu
ZCBuZXRtYXNrcy4gb25seSB1c2VmdWwgZm9yIElQdjQuCisgICAgX3ZhbGlkX21hc2tfb2N0ZXRz
ID0gc2V0KCgyNTUsIDI1NCwgMjUyLCAyNDgsIDI0MCwgMjI0LCAxOTIsIDEyOCwgMCkpCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcywgc3RyaWN0PUZhbHNlKToKKyAgICAgICAgIiIi
SW5zdGFudGlhdGUgYSBuZXcgSVB2NCBuZXR3b3JrIG9iamVjdC4KKworICAgICAgICBBcmdzOgor
ICAgICAgICAgICAgYWRkcmVzczogQSBzdHJpbmcgb3IgaW50ZWdlciByZXByZXNlbnRpbmcgdGhl
IElQIFsmIG5ldHdvcmtdLgorICAgICAgICAgICAgICAnMTkyLjE2OC4xLjEvMjQnCisgICAgICAg
ICAgICAgICcxOTIuMTY4LjEuMS8yNTUuMjU1LjI1NS4wJworICAgICAgICAgICAgICAnMTkyLjE2
OC4xLjEvMC4wLjAuMjU1JworICAgICAgICAgICAgICBhcmUgYWxsIGZ1bmN0aW9uYWxseSB0aGUg
c2FtZSBpbiBJUHY0LiBTaW1pbGFybHksCisgICAgICAgICAgICAgICcxOTIuMTY4LjEuMScKKyAg
ICAgICAgICAgICAgJzE5Mi4xNjguMS4xLzI1NS4yNTUuMjU1LjI1NScKKyAgICAgICAgICAgICAg
JzE5Mi4xNjguMS4xLzMyJworICAgICAgICAgICAgICBhcmUgYWxzbyBmdW5jdGlvbmFseSBlcXVp
dmFsZW50LiBUaGF0IGlzIHRvIHNheSwgZmFpbGluZyB0bworICAgICAgICAgICAgICBwcm92aWRl
IGEgc3VibmV0bWFzayB3aWxsIGNyZWF0ZSBhbiBvYmplY3Qgd2l0aCBhIG1hc2sgb2YgLzMyLgor
CisgICAgICAgICAgICAgIElmIHRoZSBtYXNrIChwb3J0aW9uIGFmdGVyIHRoZSAvIGluIHRoZSBh
cmd1bWVudCkgaXMgZ2l2ZW4gaW4KKyAgICAgICAgICAgICAgZG90dGVkIHF1YWQgZm9ybSwgaXQg
aXMgdHJlYXRlZCBhcyBhIG5ldG1hc2sgaWYgaXQgc3RhcnRzIHdpdGggYQorICAgICAgICAgICAg
ICBub24temVybyBmaWVsZCAoZS5nLiAvMjU1LjAuMC4wID09IC84KSBhbmQgYXMgYSBob3N0bWFz
ayBpZiBpdAorICAgICAgICAgICAgICBzdGFydHMgd2l0aCBhIHplcm8gZmllbGQgKGUuZy4gMC4y
NTUuMjU1LjI1NSA9PSAvOCksIHdpdGggdGhlCisgICAgICAgICAgICAgIHNpbmdsZSBleGNlcHRp
b24gb2YgYW4gYWxsLXplcm8gbWFzayB3aGljaCBpcyB0cmVhdGVkIGFzIGEKKyAgICAgICAgICAg
ICAgbmV0bWFzayA9PSAvMC4gSWYgbm8gbWFzayBpcyBnaXZlbiwgYSBkZWZhdWx0IG9mIC8zMiBp
cyB1c2VkLgorCisgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgYW4gaW50ZWdlciBjYW4gYmUg
cGFzc2VkLCBzbworICAgICAgICAgICAgICBJUHY0TmV0d29yaygnMTkyLjE2OC4xLjEnKSA9PSBJ
UHY0TmV0d29yaygzMjMyMjM1Nzc3KS4KKyAgICAgICAgICAgICAgb3IsIG1vcmUgZ2VuZXJhbGx5
CisgICAgICAgICAgICAgIElQdjROZXR3b3JrKGludChJUHY0TmV0d29yaygnMTkyLjE2OC4xLjEn
KSkpID09CisgICAgICAgICAgICAgICAgSVB2NE5ldHdvcmsoJzE5Mi4xNjguMS4xJykKKworICAg
ICAgICAgICAgc3RyaWN0OiBBIGJvb2xlYW4uIElmIHRydWUsIGVuc3VyZSB0aGF0IHdlIGhhdmUg
YmVlbiBwYXNzZWQKKyAgICAgICAgICAgICAgQSB0cnVlIG5ldHdvcmsgYWRkcmVzcywgZWcsIDE5
Mi4xNjguMS4wLzI0IGFuZCBub3QgYW4KKyAgICAgICAgICAgICAgSVAgYWRkcmVzcyBvbiBhIG5l
dHdvcmssIGVnLCAxOTIuMTY4LjEuMS8yNC4KKworICAgICAgICBSYWlzZXM6CisgICAgICAgICAg
ICBBZGRyZXNzVmFsdWVFcnJvcjogSWYgaXBhZGRyIGlzbid0IGEgdmFsaWQgSVB2NCBhZGRyZXNz
LgorICAgICAgICAgICAgTmV0bWFza1ZhbHVlRXJyb3I6IElmIHRoZSBuZXRtYXNrIGlzbid0IHZh
bGlkIGZvcgorICAgICAgICAgICAgICBhbiBJUHY0IGFkZHJlc3MuCisgICAgICAgICAgICBWYWx1
ZUVycm9yOiBJZiBzdHJpY3Qgd2FzIFRydWUgYW5kIGEgbmV0d29yayBhZGRyZXNzIHdhcyBub3QK
KyAgICAgICAgICAgICAgc3VwcGxpZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIF9CYXNlTmV0
Ll9faW5pdF9fKHNlbGYsIGFkZHJlc3MpCisgICAgICAgIF9CYXNlVjQuX19pbml0X18oc2VsZiwg
YWRkcmVzcykKKworICAgICAgICAjIENvbnN0cnVjdGluZyBmcm9tIGFuIGludGVnZXIgb3IgcGFj
a2VkIGJ5dGVzLgorICAgICAgICBpZiBpc2luc3RhbmNlKGFkZHJlc3MsIChpbnQsIGxvbmcsIEJ5
dGVzKSk6CisgICAgICAgICAgICBzZWxmLmlwID0gSVB2NEFkZHJlc3MoYWRkcmVzcykKKyAgICAg
ICAgICAgIHNlbGYuX2lwID0gc2VsZi5pcC5faXAKKyAgICAgICAgICAgIHNlbGYuX3ByZWZpeGxl
biA9IHNlbGYuX21heF9wcmVmaXhsZW4KKyAgICAgICAgICAgIHNlbGYubmV0bWFzayA9IElQdjRB
ZGRyZXNzKHNlbGYuX0FMTF9PTkVTKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBB
c3N1bWUgaW5wdXQgYXJndW1lbnQgdG8gYmUgc3RyaW5nIG9yIGFueSBvYmplY3QgcmVwcmVzZW50
YXRpb24KKyAgICAgICAgIyB3aGljaCBjb252ZXJ0cyBpbnRvIGEgZm9ybWF0dGVkIElQIHByZWZp
eCBzdHJpbmcuCisgICAgICAgIGFkZHIgPSBzdHIoYWRkcmVzcykuc3BsaXQoJy8nKQorCisgICAg
ICAgIGlmIGxlbihhZGRyKSA+IDI6CisgICAgICAgICAgICByYWlzZSBBZGRyZXNzVmFsdWVFcnJv
cihhZGRyZXNzKQorCisgICAgICAgIHNlbGYuX2lwID0gc2VsZi5faXBfaW50X2Zyb21fc3RyaW5n
KGFkZHJbMF0pCisgICAgICAgIHNlbGYuaXAgPSBJUHY0QWRkcmVzcyhzZWxmLl9pcCkKKworICAg
ICAgICBpZiBsZW4oYWRkcikgPT0gMjoKKyAgICAgICAgICAgIG1hc2sgPSBhZGRyWzFdLnNwbGl0
KCcuJykKKyAgICAgICAgICAgIGlmIGxlbihtYXNrKSA9PSA0OgorICAgICAgICAgICAgICAgICMg
V2UgaGF2ZSBkb3R0ZWQgZGVjaW1hbCBuZXRtYXNrLgorICAgICAgICAgICAgICAgIGlmIHNlbGYu
X2lzX3ZhbGlkX25ldG1hc2soYWRkclsxXSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubmV0
bWFzayA9IElQdjRBZGRyZXNzKHNlbGYuX2lwX2ludF9mcm9tX3N0cmluZygKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRyWzFdKSkKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX2lz
X2hvc3RtYXNrKGFkZHJbMV0pOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm5ldG1hc2sgPSBJ
UHY0QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lwX2ludF9mcm9tX3N0
cmluZyhhZGRyWzFdKSBeIHNlbGYuX0FMTF9PTkVTKQorICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgIHJhaXNlIE5ldG1hc2tWYWx1ZUVycm9yKCclcyBpcyBub3QgYSB2
YWxpZCBuZXRtYXNrJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAlIGFkZHJbMV0pCisKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmVmaXhsZW4g
PSBzZWxmLl9wcmVmaXhfZnJvbV9pcF9pbnQoaW50KHNlbGYubmV0bWFzaykpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBhIG5ldG1hc2sgaW4gcHJlZml4IGxl
bmd0aCBmb3JtLgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9pc192YWxpZF9uZXRtYXNr
KGFkZHJbMV0pOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBOZXRtYXNrVmFsdWVFcnJvcihh
ZGRyWzFdKQorICAgICAgICAgICAgICAgIHNlbGYuX3ByZWZpeGxlbiA9IGludChhZGRyWzFdKQor
ICAgICAgICAgICAgICAgIHNlbGYubmV0bWFzayA9IElQdjRBZGRyZXNzKHNlbGYuX2lwX2ludF9m
cm9tX3ByZWZpeCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHJlZml4bGVuKSkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3ByZWZpeGxlbiA9IHNlbGYuX21heF9wcmVmaXhs
ZW4KKyAgICAgICAgICAgIHNlbGYubmV0bWFzayA9IElQdjRBZGRyZXNzKHNlbGYuX2lwX2ludF9m
cm9tX3ByZWZpeCgKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmVmaXhsZW4pKQorICAgICAgICBp
ZiBzdHJpY3Q6CisgICAgICAgICAgICBpZiBzZWxmLmlwICE9IHNlbGYubmV0d29yazoKKyAgICAg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCclcyBoYXMgaG9zdCBiaXRzIHNldCcgJQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pcCkKKyAgICAgICAgaWYgc2VsZi5f
cHJlZml4bGVuID09IChzZWxmLl9tYXhfcHJlZml4bGVuIC0gMSk6CisgICAgICAgICAgICBzZWxm
Lml0ZXJob3N0cyA9IHNlbGYuX19pdGVyX18KKworICAgIGRlZiBfaXNfaG9zdG1hc2soc2VsZiwg
aXBfc3RyKToKKyAgICAgICAgIiIiVGVzdCBpZiB0aGUgSVAgc3RyaW5nIGlzIGEgaG9zdG1hc2sg
KHJhdGhlciB0aGFuIGEgbmV0bWFzaykuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGlw
X3N0cjogQSBzdHJpbmcsIHRoZSBwb3RlbnRpYWwgaG9zdG1hc2suCisKKyAgICAgICAgUmV0dXJu
czoKKyAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgSVAgc3RyaW5nIGlzIGEgaG9z
dG1hc2suCisKKyAgICAgICAgIiIiCisgICAgICAgIGJpdHMgPSBpcF9zdHIuc3BsaXQoJy4nKQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJ0cyA9IFtpbnQoeCkgZm9yIHggaW4gYml0cyBp
ZiBpbnQoeCkgaW4gc2VsZi5fdmFsaWRfbWFza19vY3RldHNdCisgICAgICAgIGV4Y2VwdCBWYWx1
ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGxlbihwYXJ0cykg
IT0gbGVuKGJpdHMpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHBhcnRz
WzBdIDwgcGFydHNbLTFdOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICBkZWYgX2lzX3ZhbGlkX25ldG1hc2soc2VsZiwgbmV0bWFzayk6CisgICAg
ICAgICIiIlZlcmlmeSB0aGF0IHRoZSBuZXRtYXNrIGlzIHZhbGlkLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgICBuZXRtYXNrOiBBIHN0cmluZywgZWl0aGVyIGEgcHJlZml4IG9yIGRvdHRl
ZCBkZWNpbWFsCisgICAgICAgICAgICAgIG5ldG1hc2suCisKKyAgICAgICAgUmV0dXJuczoKKyAg
ICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgcHJlZml4IHJlcHJlc2VudHMgYSB2YWxp
ZCBJUHY0CisgICAgICAgICAgICBuZXRtYXNrLgorCisgICAgICAgICIiIgorICAgICAgICBtYXNr
ID0gbmV0bWFzay5zcGxpdCgnLicpCisgICAgICAgIGlmIGxlbihtYXNrKSA9PSA0OgorICAgICAg
ICAgICAgaWYgW3ggZm9yIHggaW4gbWFzayBpZiBpbnQoeCkgbm90IGluIHNlbGYuX3ZhbGlkX21h
c2tfb2N0ZXRzXToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGlm
IFt5IGZvciBpZHgsIHkgaW4gZW51bWVyYXRlKG1hc2spIGlmIGlkeCA+IDAgYW5kCisgICAgICAg
ICAgICAgICAgeSA+IG1hc2tbaWR4IC0gMV1dOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmV0
bWFzayA9IGludChuZXRtYXNrKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gMCA8PSBuZXRtYXNrIDw9IHNlbGYuX21h
eF9wcmVmaXhsZW4KKworICAgICMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgICBJc1JGQzE5
MTggPSBsYW1iZGEgc2VsZjogc2VsZi5pc19wcml2YXRlCisgICAgSXNNdWx0aWNhc3QgPSBsYW1i
ZGEgc2VsZjogc2VsZi5pc19tdWx0aWNhc3QKKyAgICBJc0xvb3BiYWNrID0gbGFtYmRhIHNlbGY6
IHNlbGYuaXNfbG9vcGJhY2sKKyAgICBJc0xpbmtMb2NhbCA9IGxhbWJkYSBzZWxmOiBzZWxmLmlz
X2xpbmtfbG9jYWwKKworCitjbGFzcyBfQmFzZVY2KG9iamVjdCk6CisKKyAgICAiIiJCYXNlIElQ
djYgb2JqZWN0LgorCisgICAgVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIGJ5IElQdjYg
b2JqZWN0cyBpbiBib3RoIHNpbmdsZSBJUAorICAgIGFkZHJlc3NlcyBhbmQgbmV0d29ya3MuCisK
KyAgICAiIiIKKworICAgIF9BTExfT05FUyA9ICgyKipJUFY2TEVOR1RIKSAtIDEKKyAgICBfSEVY
VEVUX0NPVU5UID0gOAorICAgIF9IRVhfRElHSVRTID0gZnJvemVuc2V0KCcwMTIzNDU2Nzg5QUJD
REVGYWJjZGVmJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzKToKKyAgICAgICAg
c2VsZi5fdmVyc2lvbiA9IDYKKyAgICAgICAgc2VsZi5fbWF4X3ByZWZpeGxlbiA9IElQVjZMRU5H
VEgKKworICAgIGRlZiBfaXBfaW50X2Zyb21fc3RyaW5nKHNlbGYsIGlwX3N0cik6CisgICAgICAg
ICIiIlR1cm4gYW4gSVB2NiBpcF9zdHIgaW50byBhbiBpbnRlZ2VyLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgICBpcF9zdHI6IEEgc3RyaW5nLCB0aGUgSVB2NiBpcF9zdHIuCisKKyAgICAg
ICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgbG9uZywgdGhlIElQdjYgaXBfc3RyLgorCisgICAg
ICAgIFJhaXNlczoKKyAgICAgICAgICAgIEFkZHJlc3NWYWx1ZUVycm9yOiBpZiBpcF9zdHIgaXNu
J3QgYSB2YWxpZCBJUHY2IEFkZHJlc3MuCisKKyAgICAgICAgIiIiCisgICAgICAgIHBhcnRzID0g
aXBfc3RyLnNwbGl0KCc6JykKKworICAgICAgICAjIEFuIElQdjYgYWRkcmVzcyBuZWVkcyBhdCBs
ZWFzdCAyIGNvbG9ucyAoMyBwYXJ0cykuCisgICAgICAgIGlmIGxlbihwYXJ0cykgPCAzOgorICAg
ICAgICAgICAgcmFpc2UgQWRkcmVzc1ZhbHVlRXJyb3IoaXBfc3RyKQorCisgICAgICAgICMgSWYg
dGhlIGFkZHJlc3MgaGFzIGFuIElQdjQtc3R5bGUgc3VmZml4LCBjb252ZXJ0IGl0IHRvIGhleGFk
ZWNpbWFsLgorICAgICAgICBpZiAnLicgaW4gcGFydHNbLTFdOgorICAgICAgICAgICAgaXB2NF9p
bnQgPSBJUHY0QWRkcmVzcyhwYXJ0cy5wb3AoKSkuX2lwCisgICAgICAgICAgICBwYXJ0cy5hcHBl
bmQoJyV4JyAlICgoaXB2NF9pbnQgPj4gMTYpICYgMHhGRkZGKSkKKyAgICAgICAgICAgIHBhcnRz
LmFwcGVuZCgnJXgnICUgKGlwdjRfaW50ICYgMHhGRkZGKSkKKworICAgICAgICAjIEFuIElQdjYg
YWRkcmVzcyBjYW4ndCBoYXZlIG1vcmUgdGhhbiA4IGNvbG9ucyAoOSBwYXJ0cykuCisgICAgICAg
IGlmIGxlbihwYXJ0cykgPiBzZWxmLl9IRVhURVRfQ09VTlQgKyAxOgorICAgICAgICAgICAgcmFp
c2UgQWRkcmVzc1ZhbHVlRXJyb3IoaXBfc3RyKQorCisgICAgICAgICMgRGlzcmVnYXJkaW5nIHRo
ZSBlbmRwb2ludHMsIGZpbmQgJzo6JyB3aXRoIG5vdGhpbmcgaW4gYmV0d2Vlbi4KKyAgICAgICAg
IyBUaGlzIGluZGljYXRlcyB0aGF0IGEgcnVuIG9mIHplcm9lcyBoYXMgYmVlbiBza2lwcGVkLgor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBza2lwX2luZGV4LCA9ICgKKyAgICAgICAgICAgICAg
ICBbaSBmb3IgaSBpbiB4cmFuZ2UoMSwgbGVuKHBhcnRzKSAtIDEpIGlmIG5vdCBwYXJ0c1tpXV0g
b3IKKyAgICAgICAgICAgICAgICBbTm9uZV0pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgor
ICAgICAgICAgICAgIyBDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgJzo6JworICAgICAgICAgICAg
cmFpc2UgQWRkcmVzc1ZhbHVlRXJyb3IoaXBfc3RyKQorCisgICAgICAgICMgcGFydHNfaGkgaXMg
dGhlIG51bWJlciBvZiBwYXJ0cyB0byBjb3B5IGZyb20gYWJvdmUvYmVmb3JlIHRoZSAnOjonCisg
ICAgICAgICMgcGFydHNfbG8gaXMgdGhlIG51bWJlciBvZiBwYXJ0cyB0byBjb3B5IGZyb20gYmVs
b3cvYWZ0ZXIgdGhlICc6OicKKyAgICAgICAgaWYgc2tpcF9pbmRleCBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgICMgSWYgd2UgZm91bmQgYSAnOjonLCB0aGVuIGNoZWNrIGlmIGl0IGFsc28gY292
ZXJzIHRoZSBlbmRwb2ludHMuCisgICAgICAgICAgICBwYXJ0c19oaSA9IHNraXBfaW5kZXgKKyAg
ICAgICAgICAgIHBhcnRzX2xvID0gbGVuKHBhcnRzKSAtIHNraXBfaW5kZXggLSAxCisgICAgICAg
ICAgICBpZiBub3QgcGFydHNbMF06CisgICAgICAgICAgICAgICAgcGFydHNfaGkgLT0gMQorICAg
ICAgICAgICAgICAgIGlmIHBhcnRzX2hpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBZGRy
ZXNzVmFsdWVFcnJvcihpcF9zdHIpICAjIF46IHJlcXVpcmVzIF46OgorICAgICAgICAgICAgaWYg
bm90IHBhcnRzWy0xXToKKyAgICAgICAgICAgICAgICBwYXJ0c19sbyAtPSAxCisgICAgICAgICAg
ICAgICAgaWYgcGFydHNfbG86CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFkZHJlc3NWYWx1
ZUVycm9yKGlwX3N0cikgICMgOiQgcmVxdWlyZXMgOjokCisgICAgICAgICAgICBwYXJ0c19za2lw
cGVkID0gc2VsZi5fSEVYVEVUX0NPVU5UIC0gKHBhcnRzX2hpICsgcGFydHNfbG8pCisgICAgICAg
ICAgICBpZiBwYXJ0c19za2lwcGVkIDwgMToKKyAgICAgICAgICAgICAgICByYWlzZSBBZGRyZXNz
VmFsdWVFcnJvcihpcF9zdHIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIE90aGVyd2lz
ZSwgYWxsb2NhdGUgdGhlIGVudGlyZSBhZGRyZXNzIHRvIHBhcnRzX2hpLiAgVGhlIGVuZHBvaW50
cworICAgICAgICAgICAgIyBjb3VsZCBzdGlsbCBiZSBlbXB0eSwgYnV0IF9wYXJzZV9oZXh0ZXQo
KSB3aWxsIGNoZWNrIGZvciB0aGF0LgorICAgICAgICAgICAgaWYgbGVuKHBhcnRzKSAhPSBzZWxm
Ll9IRVhURVRfQ09VTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UgQWRkcmVzc1ZhbHVlRXJyb3Io
aXBfc3RyKQorICAgICAgICAgICAgcGFydHNfaGkgPSBsZW4ocGFydHMpCisgICAgICAgICAgICBw
YXJ0c19sbyA9IDAKKyAgICAgICAgICAgIHBhcnRzX3NraXBwZWQgPSAwCisKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgIyBOb3csIHBhcnNlIHRoZSBoZXh0ZXRzIGludG8gYSAxMjgtYml0IGlu
dGVnZXIuCisgICAgICAgICAgICBpcF9pbnQgPSAwTAorICAgICAgICAgICAgZm9yIGkgaW4geHJh
bmdlKHBhcnRzX2hpKToKKyAgICAgICAgICAgICAgICBpcF9pbnQgPDw9IDE2CisgICAgICAgICAg
ICAgICAgaXBfaW50IHw9IHNlbGYuX3BhcnNlX2hleHRldChwYXJ0c1tpXSkKKyAgICAgICAgICAg
IGlwX2ludCA8PD0gMTYgKiBwYXJ0c19za2lwcGVkCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFu
Z2UoLXBhcnRzX2xvLCAwKToKKyAgICAgICAgICAgICAgICBpcF9pbnQgPDw9IDE2CisgICAgICAg
ICAgICAgICAgaXBfaW50IHw9IHNlbGYuX3BhcnNlX2hleHRldChwYXJ0c1tpXSkKKyAgICAgICAg
ICAgIHJldHVybiBpcF9pbnQKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAg
ICByYWlzZSBBZGRyZXNzVmFsdWVFcnJvcihpcF9zdHIpCisKKyAgICBkZWYgX3BhcnNlX2hleHRl
dChzZWxmLCBoZXh0ZXRfc3RyKToKKyAgICAgICAgIiIiQ29udmVydCBhbiBJUHY2IGhleHRldCBz
dHJpbmcgaW50byBhbiBpbnRlZ2VyLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBoZXh0
ZXRfc3RyOiBBIHN0cmluZywgdGhlIG51bWJlciB0byBwYXJzZS4KKworICAgICAgICBSZXR1cm5z
OgorICAgICAgICAgICAgVGhlIGhleHRldCBhcyBhbiBpbnRlZ2VyLgorCisgICAgICAgIFJhaXNl
czoKKyAgICAgICAgICAgIFZhbHVlRXJyb3I6IGlmIHRoZSBpbnB1dCBpc24ndCBzdHJpY3RseSBh
IGhleCBudW1iZXIgZnJvbSBbMC4uRkZGRl0uCisKKyAgICAgICAgIiIiCisgICAgICAgICMgV2hp
dGVsaXN0IHRoZSBjaGFyYWN0ZXJzLCBzaW5jZSBpbnQoKSBhbGxvd3MgYSBsb3Qgb2YgYml6YXJy
ZSBzdHVmZi4KKyAgICAgICAgaWYgbm90IHNlbGYuX0hFWF9ESUdJVFMuaXNzdXBlcnNldChoZXh0
ZXRfc3RyKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgaGV4dGV0X2lu
dCA9IGludChoZXh0ZXRfc3RyLCAxNikKKyAgICAgICAgaWYgaGV4dGV0X2ludCA+IDB4RkZGRjoK
KyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgcmV0dXJuIGhleHRldF9pbnQK
KworICAgIGRlZiBfY29tcHJlc3NfaGV4dGV0cyhzZWxmLCBoZXh0ZXRzKToKKyAgICAgICAgIiIi
Q29tcHJlc3NlcyBhIGxpc3Qgb2YgaGV4dGV0cy4KKworICAgICAgICBDb21wcmVzc2VzIGEgbGlz
dCBvZiBzdHJpbmdzLCByZXBsYWNpbmcgdGhlIGxvbmdlc3QgY29udGludW91cworICAgICAgICBz
ZXF1ZW5jZSBvZiAiMCIgaW4gdGhlIGxpc3Qgd2l0aCAiIiBhbmQgYWRkaW5nIGVtcHR5IHN0cmlu
Z3MgYXQKKyAgICAgICAgdGhlIGJlZ2lubmluZyBvciBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcg
c3VjaCB0aGF0IHN1YnNlcXVlbnRseQorICAgICAgICBjYWxsaW5nICI6Ii5qb2luKGhleHRldHMp
IHdpbGwgcHJvZHVjZSB0aGUgY29tcHJlc3NlZCB2ZXJzaW9uIG9mCisgICAgICAgIHRoZSBJUHY2
IGFkZHJlc3MuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGhleHRldHM6IEEgbGlzdCBv
ZiBzdHJpbmdzLCB0aGUgaGV4dGV0cyB0byBjb21wcmVzcy4KKworICAgICAgICBSZXR1cm5zOgor
ICAgICAgICAgICAgQSBsaXN0IG9mIHN0cmluZ3MuCisKKyAgICAgICAgIiIiCisgICAgICAgIGJl
c3RfZG91YmxlY29sb25fc3RhcnQgPSAtMQorICAgICAgICBiZXN0X2RvdWJsZWNvbG9uX2xlbiA9
IDAKKyAgICAgICAgZG91YmxlY29sb25fc3RhcnQgPSAtMQorICAgICAgICBkb3VibGVjb2xvbl9s
ZW4gPSAwCisgICAgICAgIGZvciBpbmRleCBpbiByYW5nZShsZW4oaGV4dGV0cykpOgorICAgICAg
ICAgICAgaWYgaGV4dGV0c1tpbmRleF0gPT0gJzAnOgorICAgICAgICAgICAgICAgIGRvdWJsZWNv
bG9uX2xlbiArPSAxCisgICAgICAgICAgICAgICAgaWYgZG91YmxlY29sb25fc3RhcnQgPT0gLTE6
CisgICAgICAgICAgICAgICAgICAgICMgU3RhcnQgb2YgYSBzZXF1ZW5jZSBvZiB6ZXJvcy4KKyAg
ICAgICAgICAgICAgICAgICAgZG91YmxlY29sb25fc3RhcnQgPSBpbmRleAorICAgICAgICAgICAg
ICAgIGlmIGRvdWJsZWNvbG9uX2xlbiA+IGJlc3RfZG91YmxlY29sb25fbGVuOgorICAgICAgICAg
ICAgICAgICAgICAjIFRoaXMgaXMgdGhlIGxvbmdlc3Qgc2VxdWVuY2Ugb2YgemVyb3Mgc28gZmFy
LgorICAgICAgICAgICAgICAgICAgICBiZXN0X2RvdWJsZWNvbG9uX2xlbiA9IGRvdWJsZWNvbG9u
X2xlbgorICAgICAgICAgICAgICAgICAgICBiZXN0X2RvdWJsZWNvbG9uX3N0YXJ0ID0gZG91Ymxl
Y29sb25fc3RhcnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZG91YmxlY29s
b25fbGVuID0gMAorICAgICAgICAgICAgICAgIGRvdWJsZWNvbG9uX3N0YXJ0ID0gLTEKKworICAg
ICAgICBpZiBiZXN0X2RvdWJsZWNvbG9uX2xlbiA+IDE6CisgICAgICAgICAgICBiZXN0X2RvdWJs
ZWNvbG9uX2VuZCA9IChiZXN0X2RvdWJsZWNvbG9uX3N0YXJ0ICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJlc3RfZG91YmxlY29sb25fbGVuKQorICAgICAgICAgICAgIyBG
b3IgemVyb3MgYXQgdGhlIGVuZCBvZiB0aGUgYWRkcmVzcy4KKyAgICAgICAgICAgIGlmIGJlc3Rf
ZG91YmxlY29sb25fZW5kID09IGxlbihoZXh0ZXRzKToKKyAgICAgICAgICAgICAgICBoZXh0ZXRz
ICs9IFsnJ10KKyAgICAgICAgICAgIGhleHRldHNbYmVzdF9kb3VibGVjb2xvbl9zdGFydDpiZXN0
X2RvdWJsZWNvbG9uX2VuZF0gPSBbJyddCisgICAgICAgICAgICAjIEZvciB6ZXJvcyBhdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBhZGRyZXNzLgorICAgICAgICAgICAgaWYgYmVzdF9kb3VibGVjb2xv
bl9zdGFydCA9PSAwOgorICAgICAgICAgICAgICAgIGhleHRldHMgPSBbJyddICsgaGV4dGV0cwor
CisgICAgICAgIHJldHVybiBoZXh0ZXRzCisKKyAgICBkZWYgX3N0cmluZ19mcm9tX2lwX2ludChz
ZWxmLCBpcF9pbnQ9Tm9uZSk6CisgICAgICAgICIiIlR1cm5zIGEgMTI4LWJpdCBpbnRlZ2VyIGlu
dG8gaGV4YWRlY2ltYWwgbm90YXRpb24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGlw
X2ludDogQW4gaW50ZWdlciwgdGhlIElQIGFkZHJlc3MuCisKKyAgICAgICAgUmV0dXJuczoKKyAg
ICAgICAgICAgIEEgc3RyaW5nLCB0aGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhl
IGFkZHJlc3MuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgVmFsdWVFcnJvcjogVGhl
IGFkZHJlc3MgaXMgYmlnZ2VyIHRoYW4gMTI4IGJpdHMgb2YgYWxsIG9uZXMuCisKKyAgICAgICAg
IiIiCisgICAgICAgIGlmIG5vdCBpcF9pbnQgYW5kIGlwX2ludCAhPSAwOgorICAgICAgICAgICAg
aXBfaW50ID0gaW50KHNlbGYuX2lwKQorCisgICAgICAgIGlmIGlwX2ludCA+IHNlbGYuX0FMTF9P
TkVTOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSVB2NiBhZGRyZXNzIGlzIHRvbyBs
YXJnZScpCisKKyAgICAgICAgaGV4X3N0ciA9ICclMDMyeCcgJSBpcF9pbnQKKyAgICAgICAgaGV4
dGV0cyA9IFtdCisgICAgICAgIGZvciB4IGluIHJhbmdlKDAsIDMyLCA0KToKKyAgICAgICAgICAg
IGhleHRldHMuYXBwZW5kKCcleCcgJSBpbnQoaGV4X3N0clt4OngrNF0sIDE2KSkKKworICAgICAg
ICBoZXh0ZXRzID0gc2VsZi5fY29tcHJlc3NfaGV4dGV0cyhoZXh0ZXRzKQorICAgICAgICByZXR1
cm4gJzonLmpvaW4oaGV4dGV0cykKKworICAgIGRlZiBfZXhwbG9kZV9zaG9ydGhhbmRfaXBfc3Ry
aW5nKHNlbGYpOgorICAgICAgICAiIiJFeHBhbmQgYSBzaG9ydGVuZWQgSVB2NiBhZGRyZXNzLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpcF9zdHI6IEEgc3RyaW5nLCB0aGUgSVB2NiBh
ZGRyZXNzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIHN0cmluZywgdGhlIGV4
cGFuZGVkIElQdjYgYWRkcmVzcy4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShzZWxmLCBfQmFzZU5ldCk6CisgICAgICAgICAgICBpcF9zdHIgPSBzdHIoc2VsZi5pcCkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGlwX3N0ciA9IHN0cihzZWxmKQorCisgICAgICAgIGlw
X2ludCA9IHNlbGYuX2lwX2ludF9mcm9tX3N0cmluZyhpcF9zdHIpCisgICAgICAgIHBhcnRzID0g
W10KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuX0hFWFRFVF9DT1VOVCk6CisgICAgICAg
ICAgICBwYXJ0cy5hcHBlbmQoJyUwNHgnICUgKGlwX2ludCAmIDB4RkZGRikpCisgICAgICAgICAg
ICBpcF9pbnQgPj49IDE2CisgICAgICAgIHBhcnRzLnJldmVyc2UoKQorICAgICAgICBpZiBpc2lu
c3RhbmNlKHNlbGYsIF9CYXNlTmV0KToKKyAgICAgICAgICAgIHJldHVybiAnJXMvJWQnICUgKCc6
Jy5qb2luKHBhcnRzKSwgc2VsZi5wcmVmaXhsZW4pCisgICAgICAgIHJldHVybiAnOicuam9pbihw
YXJ0cykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtYXhfcHJlZml4bGVuKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fbWF4X3ByZWZpeGxlbgorCisgICAgQHByb3BlcnR5CisgICAgZGVm
IHBhY2tlZChzZWxmKToKKyAgICAgICAgIiIiVGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0
aGlzIGFkZHJlc3MuIiIiCisgICAgICAgIHJldHVybiB2Nl9pbnRfdG9fcGFja2VkKHNlbGYuX2lw
KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLl92ZXJzaW9uCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfbXVsdGljYXN0KHNl
bGYpOgorICAgICAgICAiIiJUZXN0IGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIGZvciBtdWx0
aWNhc3QgdXNlLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4sIFRy
dWUgaWYgdGhlIGFkZHJlc3MgaXMgYSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgICAgICAgIFNl
ZSBSRkMgMjM3MyAyLjcgZm9yIGRldGFpbHMuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVy
biBzZWxmIGluIElQdjZOZXR3b3JrKCdmZjAwOjovOCcpCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgaXNfcmVzZXJ2ZWQoc2VsZik6CisgICAgICAgICIiIlRlc3QgaWYgdGhlIGFkZHJlc3MgaXMg
b3RoZXJ3aXNlIElFVEYgcmVzZXJ2ZWQuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAg
IEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyB3aXRoaW4gb25lIG9mIHRoZQorICAg
ICAgICAgICAgcmVzZXJ2ZWQgSVB2NiBOZXR3b3JrIHJhbmdlcy4KKworICAgICAgICAiIiIKKyAg
ICAgICAgcmV0dXJuIChzZWxmIGluIElQdjZOZXR3b3JrKCc6Oi84Jykgb3IKKyAgICAgICAgICAg
ICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcxMDA6Oi84Jykgb3IKKyAgICAgICAgICAgICAgICBz
ZWxmIGluIElQdjZOZXR3b3JrKCcyMDA6Oi83Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGlu
IElQdjZOZXR3b3JrKCc0MDA6Oi82Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZO
ZXR3b3JrKCc4MDA6Oi81Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3Jr
KCcxMDAwOjovNCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnNDAw
MDo6LzMnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzYwMDA6Oi8z
Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCc4MDAwOjovMycpIG9y
CisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnQTAwMDo6LzMnKSBvcgorICAg
ICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJ0MwMDA6Oi8zJykgb3IKKyAgICAgICAg
ICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCdFMDAwOjovNCcpIG9yCisgICAgICAgICAgICAg
ICAgc2VsZiBpbiBJUHY2TmV0d29yaygnRjAwMDo6LzUnKSBvcgorICAgICAgICAgICAgICAgIHNl
bGYgaW4gSVB2Nk5ldHdvcmsoJ0Y4MDA6Oi82Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGlu
IElQdjZOZXR3b3JrKCdGRTAwOjovOScpKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX3Vu
c3BlY2lmaWVkKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGlmIHRoZSBhZGRyZXNzIGlzIHVuc3Bl
Y2lmaWVkLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUg
aWYgdGhpcyBpcyB0aGUgdW5zcGVjaWZpZWQgYWRkcmVzcyBhcyBkZWZpbmVkIGluCisgICAgICAg
ICAgICBSRkMgMjM3MyAyLjUuMi4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2lwID09IDAgYW5kIGdldGF0dHIoc2VsZiwgJ19wcmVmaXhsZW4nLCAxMjgpID09IDEyOAorCisg
ICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2xvb3BiYWNrKHNlbGYpOgorICAgICAgICAiIiJUZXN0
IGlmIHRoZSBhZGRyZXNzIGlzIGEgbG9vcGJhY2sgYWRkcmVzcy4KKworICAgICAgICBSZXR1cm5z
OgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIGEgbG9vcGJh
Y2sgYWRkcmVzcyBhcyBkZWZpbmVkIGluCisgICAgICAgICAgICBSRkMgMjM3MyAyLjUuMy4KKwor
ICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lwID09IDEgYW5kIGdldGF0dHIoc2Vs
ZiwgJ19wcmVmaXhsZW4nLCAxMjgpID09IDEyOAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlz
X2xpbmtfbG9jYWwoc2VsZik6CisgICAgICAgICIiIlRlc3QgaWYgdGhlIGFkZHJlc3MgaXMgcmVz
ZXJ2ZWQgZm9yIGxpbmstbG9jYWwuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEg
Ym9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIgUkZDIDQyOTEuCisK
KyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmIGluIElQdjZOZXR3b3JrKCdmZTgwOjov
MTAnKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX3NpdGVfbG9jYWwoc2VsZik6CisgICAg
ICAgICIiIlRlc3QgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgZm9yIHNpdGUtbG9jYWwuCisK
KyAgICAgICAgTm90ZSB0aGF0IHRoZSBzaXRlLWxvY2FsIGFkZHJlc3Mgc3BhY2UgaGFzIGJlZW4g
ZGVwcmVjYXRlZCBieSBSRkMgMzg3OS4KKyAgICAgICAgVXNlIGlzX3ByaXZhdGUgdG8gdGVzdCBp
ZiB0aGlzIGFkZHJlc3MgaXMgaW4gdGhlIHNwYWNlIG9mIHVuaXF1ZSBsb2NhbAorICAgICAgICBh
ZGRyZXNzZXMgYXMgZGVmaW5lZCBieSBSRkMgNDE5My4KKworICAgICAgICBSZXR1cm5zOgorICAg
ICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlciBS
RkMgMzUxMyAyLjUuNi4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYgaW4gSVB2
Nk5ldHdvcmsoJ2ZlYzA6Oi8xMCcpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfcHJpdmF0
ZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZv
ciBwcml2YXRlIG5ldHdvcmtzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGJv
b2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyIFJGQyA0MTkzLgorCisg
ICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZiBpbiBJUHY2TmV0d29yaygnZmMwMDo6Lzcn
KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlwdjRfbWFwcGVkKHNlbGYpOgorICAgICAgICAi
IiJSZXR1cm4gdGhlIElQdjQgbWFwcGVkIGFkZHJlc3MuCisKKyAgICAgICAgUmV0dXJuczoKKyAg
ICAgICAgICAgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgYSB2NCBtYXBwZWQgYWRkcmVzcywgcmV0
dXJuIHRoZQorICAgICAgICAgICAgSVB2NCBtYXBwZWQgYWRkcmVzcy4gUmV0dXJuIE5vbmUgb3Ro
ZXJ3aXNlLgorCisgICAgICAgICIiIgorICAgICAgICBpZiAoc2VsZi5faXAgPj4gMzIpICE9IDB4
RkZGRjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBJUHY0QWRkcmVz
cyhzZWxmLl9pcCAmIDB4RkZGRkZGRkYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdGVyZWRv
KHNlbGYpOgorICAgICAgICAiIiJUdXBsZSBvZiBlbWJlZGRlZCB0ZXJlZG8gSVBzLgorCisgICAg
ICAgIFJldHVybnM6CisgICAgICAgICAgICBUdXBsZSBvZiB0aGUgKHNlcnZlciwgY2xpZW50KSBJ
UHMgb3IgTm9uZSBpZiB0aGUgYWRkcmVzcworICAgICAgICAgICAgZG9lc24ndCBhcHBlYXIgdG8g
YmUgYSB0ZXJlZG8gYWRkcmVzcyAoZG9lc24ndCBzdGFydCB3aXRoCisgICAgICAgICAgICAyMDAx
OjovMzIpCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIChzZWxmLl9pcCA+PiA5NikgIT0gMHgy
MDAxMDAwMDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiAoSVB2NEFk
ZHJlc3MoKHNlbGYuX2lwID4+IDY0KSAmIDB4RkZGRkZGRkYpLAorICAgICAgICAgICAgICAgIElQ
djRBZGRyZXNzKH5zZWxmLl9pcCAmIDB4RkZGRkZGRkYpKQorCisgICAgQHByb3BlcnR5CisgICAg
ZGVmIHNpeHRvZm91cihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBJUHY0IDZ0bzQgZW1i
ZWRkZWQgYWRkcmVzcy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVGhlIElQdjQg
NnRvNC1lbWJlZGRlZCBhZGRyZXNzIGlmIHByZXNlbnQgb3IgTm9uZSBpZiB0aGUKKyAgICAgICAg
ICAgIGFkZHJlc3MgZG9lc24ndCBhcHBlYXIgdG8gY29udGFpbiBhIDZ0bzQgZW1iZWRkZWQgYWRk
cmVzcy4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgKHNlbGYuX2lwID4+IDExMikgIT0gMHgy
MDAyOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIElQdjRBZGRyZXNz
KChzZWxmLl9pcCA+PiA4MCkgJiAweEZGRkZGRkZGKQorCisKK2NsYXNzIElQdjZBZGRyZXNzKF9C
YXNlVjYsIF9CYXNlSVApOgorCisgICAgIiIiUmVwcmVzZW50IGFuZCBtYW5pcHVsYXRlIHNpbmds
ZSBJUHY2IEFkZHJlc3Nlcy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRy
ZXNzKToKKyAgICAgICAgIiIiSW5zdGFudGlhdGUgYSBuZXcgSVB2NiBhZGRyZXNzIG9iamVjdC4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYWRkcmVzczogQSBzdHJpbmcgb3IgaW50ZWdl
ciByZXByZXNlbnRpbmcgdGhlIElQCisKKyAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBhbiBp
bnRlZ2VyIGNhbiBiZSBwYXNzZWQsIHNvCisgICAgICAgICAgICAgIElQdjZBZGRyZXNzKCcyMDAx
OjQ4NjA6OicpID09CisgICAgICAgICAgICAgICAgSVB2NkFkZHJlc3MoNDI1NDE5NTYxMDEzNzA5
MDcwNTAxOTcyODk2MDc2MTIwNzE5MzZMKS4KKyAgICAgICAgICAgICAgb3IsIG1vcmUgZ2VuZXJh
bGx5CisgICAgICAgICAgICAgIElQdjZBZGRyZXNzKElQdjZBZGRyZXNzKCcyMDAxOjQ4NjA6Oicp
Ll9pcCkgPT0KKyAgICAgICAgICAgICAgICBJUHY2QWRkcmVzcygnMjAwMTo0ODYwOjonKQorCisg
ICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIEFkZHJlc3NWYWx1ZUVycm9yOiBJZiBhZGRyZXNz
IGlzbid0IGEgdmFsaWQgSVB2NiBhZGRyZXNzLgorCisgICAgICAgICIiIgorICAgICAgICBfQmFz
ZVY2Ll9faW5pdF9fKHNlbGYsIGFkZHJlc3MpCisKKyAgICAgICAgIyBFZmZpY2llbnQgY29uc3Ry
dWN0b3IgZnJvbSBpbnRlZ2VyLgorICAgICAgICBpZiBpc2luc3RhbmNlKGFkZHJlc3MsIChpbnQs
IGxvbmcpKToKKyAgICAgICAgICAgIHNlbGYuX2lwID0gYWRkcmVzcworICAgICAgICAgICAgaWYg
YWRkcmVzcyA8IDAgb3IgYWRkcmVzcyA+IHNlbGYuX0FMTF9PTkVTOgorICAgICAgICAgICAgICAg
IHJhaXNlIEFkZHJlc3NWYWx1ZUVycm9yKGFkZHJlc3MpCisgICAgICAgICAgICByZXR1cm4KKwor
ICAgICAgICAjIENvbnN0cnVjdGluZyBmcm9tIGEgcGFja2VkIGFkZHJlc3MKKyAgICAgICAgaWYg
aXNpbnN0YW5jZShhZGRyZXNzLCBCeXRlcyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgaGksIGxvID0gc3RydWN0LnVucGFjaygnIVFRJywgYWRkcmVzcykKKyAgICAgICAgICAg
IGV4Y2VwdCBzdHJ1Y3QuZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgQWRkcmVzc1ZhbHVl
RXJyb3IoYWRkcmVzcykgICMgV3JvbmcgbGVuZ3RoLgorICAgICAgICAgICAgc2VsZi5faXAgPSAo
aGkgPDwgNjQpIHwgbG8KKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQXNzdW1lIGlu
cHV0IGFyZ3VtZW50IHRvIGJlIHN0cmluZyBvciBhbnkgb2JqZWN0IHJlcHJlc2VudGF0aW9uCisg
ICAgICAgICMgd2hpY2ggY29udmVydHMgaW50byBhIGZvcm1hdHRlZCBJUCBzdHJpbmcuCisgICAg
ICAgIGFkZHJfc3RyID0gc3RyKGFkZHJlc3MpCisgICAgICAgIGlmIG5vdCBhZGRyX3N0cjoKKyAg
ICAgICAgICAgIHJhaXNlIEFkZHJlc3NWYWx1ZUVycm9yKCcnKQorCisgICAgICAgIHNlbGYuX2lw
ID0gc2VsZi5faXBfaW50X2Zyb21fc3RyaW5nKGFkZHJfc3RyKQorCisKK2NsYXNzIElQdjZOZXR3
b3JrKF9CYXNlVjYsIF9CYXNlTmV0KToKKworICAgICIiIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBh
bmQgbWFuaXB1bGF0ZXMgMTI4LWJpdCBJUHY2IG5ldHdvcmtzLgorCisgICAgQXR0cmlidXRlczog
W2V4YW1wbGVzIGZvciBJUHY2KCcyMDAxOjY1ODoyMkE6Q0FGRToyMDA6OjEvNjQnKV0KKyAgICAg
ICAgLmlwOiBJUHY2QWRkcmVzcygnMjAwMTo2NTg6MjJhOmNhZmU6MjAwOjoxJykKKyAgICAgICAg
Lm5ldHdvcms6IElQdjZBZGRyZXNzKCcyMDAxOjY1ODoyMmE6Y2FmZTo6JykKKyAgICAgICAgLmhv
c3RtYXNrOiBJUHY2QWRkcmVzcygnOjpmZmZmOmZmZmY6ZmZmZjpmZmZmJykKKyAgICAgICAgLmJy
b2FkY2FzdDogSVB2NkFkZHJlc3MoJzIwMDE6NjU4OjIyYTpjYWZlOmZmZmY6ZmZmZjpmZmZmOmZm
ZmYnKQorICAgICAgICAubmV0bWFzazogSVB2NkFkZHJlc3MoJ2ZmZmY6ZmZmZjpmZmZmOmZmZmY6
OicpCisgICAgICAgIC5wcmVmaXhsZW46IDY0CisKKyAgICAiIiIKKworCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGFkZHJlc3MsIHN0cmljdD1GYWxzZSk6CisgICAgICAgICIiIkluc3RhbnRpYXRl
IGEgbmV3IElQdjYgTmV0d29yayBvYmplY3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAg
IGFkZHJlc3M6IEEgc3RyaW5nIG9yIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBJUHY2IG5ldHdv
cmsgb3IgdGhlIElQCisgICAgICAgICAgICAgIGFuZCBwcmVmaXgvbmV0bWFzay4KKyAgICAgICAg
ICAgICAgJzIwMDE6NDg2MDo6LzEyOCcKKyAgICAgICAgICAgICAgJzIwMDE6NDg2MDowMDAwOjAw
MDA6MDAwMDowMDAwOjAwMDA6MDAwMC8xMjgnCisgICAgICAgICAgICAgICcyMDAxOjQ4NjA6OicK
KyAgICAgICAgICAgICAgYXJlIGFsbCBmdW5jdGlvbmFsbHkgdGhlIHNhbWUgaW4gSVB2Ni4gIFRo
YXQgaXMgdG8gc2F5LAorICAgICAgICAgICAgICBmYWlsaW5nIHRvIHByb3ZpZGUgYSBzdWJuZXRt
YXNrIHdpbGwgY3JlYXRlIGFuIG9iamVjdCB3aXRoCisgICAgICAgICAgICAgIGEgbWFzayBvZiAv
MTI4LgorCisgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgYW4gaW50ZWdlciBjYW4gYmUgcGFz
c2VkLCBzbworICAgICAgICAgICAgICBJUHY2TmV0d29yaygnMjAwMTo0ODYwOjonKSA9PQorICAg
ICAgICAgICAgICAgIElQdjZOZXR3b3JrKDQyNTQxOTU2MTAxMzcwOTA3MDUwMTk3Mjg5NjA3NjEy
MDcxOTM2TCkuCisgICAgICAgICAgICAgIG9yLCBtb3JlIGdlbmVyYWxseQorICAgICAgICAgICAg
ICBJUHY2TmV0d29yayhJUHY2TmV0d29yaygnMjAwMTo0ODYwOjonKS5faXApID09CisgICAgICAg
ICAgICAgICAgSVB2Nk5ldHdvcmsoJzIwMDE6NDg2MDo6JykKKworICAgICAgICAgICAgc3RyaWN0
OiBBIGJvb2xlYW4uIElmIHRydWUsIGVuc3VyZSB0aGF0IHdlIGhhdmUgYmVlbiBwYXNzZWQKKyAg
ICAgICAgICAgICAgQSB0cnVlIG5ldHdvcmsgYWRkcmVzcywgZWcsIDE5Mi4xNjguMS4wLzI0IGFu
ZCBub3QgYW4KKyAgICAgICAgICAgICAgSVAgYWRkcmVzcyBvbiBhIG5ldHdvcmssIGVnLCAxOTIu
MTY4LjEuMS8yNC4KKworICAgICAgICBSYWlzZXM6CisgICAgICAgICAgICBBZGRyZXNzVmFsdWVF
cnJvcjogSWYgYWRkcmVzcyBpc24ndCBhIHZhbGlkIElQdjYgYWRkcmVzcy4KKyAgICAgICAgICAg
IE5ldG1hc2tWYWx1ZUVycm9yOiBJZiB0aGUgbmV0bWFzayBpc24ndCB2YWxpZCBmb3IKKyAgICAg
ICAgICAgICAgYW4gSVB2NiBhZGRyZXNzLgorICAgICAgICAgICAgVmFsdWVFcnJvcjogSWYgc3Ry
aWN0IHdhcyBUcnVlIGFuZCBhIG5ldHdvcmsgYWRkcmVzcyB3YXMgbm90CisgICAgICAgICAgICAg
IHN1cHBsaWVkLgorCisgICAgICAgICIiIgorICAgICAgICBfQmFzZU5ldC5fX2luaXRfXyhzZWxm
LCBhZGRyZXNzKQorICAgICAgICBfQmFzZVY2Ll9faW5pdF9fKHNlbGYsIGFkZHJlc3MpCisKKyAg
ICAgICAgIyBDb25zdHJ1Y3RpbmcgZnJvbSBhbiBpbnRlZ2VyIG9yIHBhY2tlZCBieXRlcy4KKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShhZGRyZXNzLCAoaW50LCBsb25nLCBCeXRlcykpOgorICAgICAg
ICAgICAgc2VsZi5pcCA9IElQdjZBZGRyZXNzKGFkZHJlc3MpCisgICAgICAgICAgICBzZWxmLl9p
cCA9IHNlbGYuaXAuX2lwCisgICAgICAgICAgICBzZWxmLl9wcmVmaXhsZW4gPSBzZWxmLl9tYXhf
cHJlZml4bGVuCisgICAgICAgICAgICBzZWxmLm5ldG1hc2sgPSBJUHY2QWRkcmVzcyhzZWxmLl9B
TExfT05FUykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQXNzdW1lIGlucHV0IGFy
Z3VtZW50IHRvIGJlIHN0cmluZyBvciBhbnkgb2JqZWN0IHJlcHJlc2VudGF0aW9uCisgICAgICAg
ICMgd2hpY2ggY29udmVydHMgaW50byBhIGZvcm1hdHRlZCBJUCBwcmVmaXggc3RyaW5nLgorICAg
ICAgICBhZGRyID0gc3RyKGFkZHJlc3MpLnNwbGl0KCcvJykKKworICAgICAgICBpZiBsZW4oYWRk
cikgPiAyOgorICAgICAgICAgICAgcmFpc2UgQWRkcmVzc1ZhbHVlRXJyb3IoYWRkcmVzcykKKwor
ICAgICAgICBzZWxmLl9pcCA9IHNlbGYuX2lwX2ludF9mcm9tX3N0cmluZyhhZGRyWzBdKQorICAg
ICAgICBzZWxmLmlwID0gSVB2NkFkZHJlc3Moc2VsZi5faXApCisKKyAgICAgICAgaWYgbGVuKGFk
ZHIpID09IDI6CisgICAgICAgICAgICBpZiBzZWxmLl9pc192YWxpZF9uZXRtYXNrKGFkZHJbMV0p
OgorICAgICAgICAgICAgICAgIHNlbGYuX3ByZWZpeGxlbiA9IGludChhZGRyWzFdKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBOZXRtYXNrVmFsdWVFcnJvcihhZGRy
WzFdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcHJlZml4bGVuID0gc2VsZi5f
bWF4X3ByZWZpeGxlbgorCisgICAgICAgIHNlbGYubmV0bWFzayA9IElQdjZBZGRyZXNzKHNlbGYu
X2lwX2ludF9mcm9tX3ByZWZpeChzZWxmLl9wcmVmaXhsZW4pKQorCisgICAgICAgIGlmIHN0cmlj
dDoKKyAgICAgICAgICAgIGlmIHNlbGYuaXAgIT0gc2VsZi5uZXR3b3JrOgorICAgICAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoJyVzIGhhcyBob3N0IGJpdHMgc2V0JyAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlwKQorICAgICAgICBpZiBzZWxmLl9wcmVmaXhs
ZW4gPT0gKHNlbGYuX21heF9wcmVmaXhsZW4gLSAxKToKKyAgICAgICAgICAgIHNlbGYuaXRlcmhv
c3RzID0gc2VsZi5fX2l0ZXJfXworCisgICAgZGVmIF9pc192YWxpZF9uZXRtYXNrKHNlbGYsIHBy
ZWZpeGxlbik6CisgICAgICAgICIiIlZlcmlmeSB0aGF0IHRoZSBuZXRtYXNrL3ByZWZpeGxlbiBp
cyB2YWxpZC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcHJlZml4bGVuOiBBIHN0cmlu
ZywgdGhlIG5ldG1hc2sgaW4gcHJlZml4IGxlbmd0aCBmb3JtYXQuCisKKyAgICAgICAgUmV0dXJu
czoKKyAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgcHJlZml4IHJlcHJlc2VudHMg
YSB2YWxpZCBJUHY2CisgICAgICAgICAgICBuZXRtYXNrLgorCisgICAgICAgICIiIgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBwcmVmaXhsZW4gPSBpbnQocHJlZml4bGVuKQorICAgICAgICBl
eGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1
cm4gMCA8PSBwcmVmaXhsZW4gPD0gc2VsZi5fbWF4X3ByZWZpeGxlbgorCisgICAgQHByb3BlcnR5
CisgICAgZGVmIHdpdGhfbmV0bWFzayhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYud2l0aF9w
cmVmaXhsZW4KSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvaXBhZGRyL2lw
YWRkcl90ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvaXBhZGRyL2lwYWRkcl90ZXN0LnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJl
cGxheS90aGlyZF9wYXJ0eS9pcGFkZHIvaXBhZGRyX3Rlc3QucHkJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTEwNSBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMDcgR29v
Z2xlIEluYy4KKyMgIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVu
dC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAo
dGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQu
CisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
ZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyIiIlVu
aXR0ZXN0IGZvciBpcGFkZHIgbW9kdWxlLiIiIgorCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0
IHRpbWUKK2ltcG9ydCBpcGFkZHIKKworIyBDb21wYXRpYmlsaXR5IGZ1bmN0aW9uIHRvIGNhc3Qg
c3RyIHRvIGJ5dGVzIG9iamVjdHMKK2lmIGlzc3ViY2xhc3MoaXBhZGRyLkJ5dGVzLCBzdHIpOgor
ICAgIF9jYiA9IGlwYWRkci5CeXRlcworZWxzZToKKyAgICBfY2IgPSBsYW1iZGEgYnl0ZXN0cjog
Ynl0ZXMoYnl0ZXN0ciwgJ2NoYXJtYXAnKQorCitjbGFzcyBJcGFkZHJVbml0VGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuaXB2NCA9
IGlwYWRkci5JUHY0TmV0d29yaygnMS4yLjMuNC8yNCcpCisgICAgICAgIHNlbGYuaXB2NF9ob3N0
bWFzayA9IGlwYWRkci5JUHY0TmV0d29yaygnMTAuMC4wLjEvMC4yNTUuMjU1LjI1NScpCisgICAg
ICAgIHNlbGYuaXB2NiA9IGlwYWRkci5JUHY2TmV0d29yaygnMjAwMTo2NTg6MjJhOmNhZmU6MjAw
OjA6MDoxLzY0JykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZGVsKHNlbGYu
aXB2NCkKKyAgICAgICAgZGVsKHNlbGYuaXB2NF9ob3N0bWFzaykKKyAgICAgICAgZGVsKHNlbGYu
aXB2NikKKyAgICAgICAgZGVsKHNlbGYpCisKKyAgICBkZWYgdGVzdFJlcHIoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoIklQdjROZXR3b3JrKCcxLjIuMy40LzMyJykiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcHIoaXBhZGRyLklQdjROZXR3b3JrKCcxLjIuMy40JykpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJJUHY2TmV0d29yaygnOjoxLzEyOCcpIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICByZXByKGlwYWRkci5JUHY2TmV0d29yaygnOjoxJykpKQorCisg
ICAgZGVmIHRlc3RBdXRvTWFza2luZyhzZWxmKToKKyAgICAgICAgYWRkcjEgPSBpcGFkZHIuSVB2
NE5ldHdvcmsoJzEuMS4xLjI1NS8yNCcpCisgICAgICAgIGFkZHIxX21hc2tlZCA9IGlwYWRkci5J
UHY0TmV0d29yaygnMS4xLjEuMC8yNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkcjFf
bWFza2VkLCBhZGRyMS5tYXNrZWQoKSkKKworICAgICAgICBhZGRyMiA9IGlwYWRkci5JUHY2TmV0
d29yaygnMjAwMDpjYWZlOjplZmFjOjEwMC85NicpCisgICAgICAgIGFkZHIyX21hc2tlZCA9IGlw
YWRkci5JUHY2TmV0d29yaygnMjAwMDpjYWZlOjovOTYnKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGFkZHIyX21hc2tlZCwgYWRkcjIubWFza2VkKCkpCisKKyAgICAjIGlzc3VlNTcKKyAgICBk
ZWYgdGVzdEFkZHJlc3NJbnRNYXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlw
YWRkci5JUHY0QWRkcmVzcygnMS4xLjEuMScpICsgMjU1LAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGlwYWRkci5JUHY0QWRkcmVzcygnMS4xLjIuMCcpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGlwYWRkci5JUHY0QWRkcmVzcygnMS4xLjEuMScpIC0gMjU2LAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGlwYWRkci5JUHY0QWRkcmVzcygnMS4xLjAuMScpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGlwYWRkci5JUHY2QWRkcmVzcygnOjoxJykgKyAoMioqMTYgLSAyKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVB2NkFkZHJlc3MoJzo6ZmZmZicpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkci5JUHY2QWRkcmVzcygnOjpmZmZmJykgLSAoMioqMTYg
LSAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVB2NkFkZHJlc3MoJzo6MScp
KQorCisgICAgZGVmIHRlc3RJbnZhbGlkU3RyaW5ncyhzZWxmKToKKyAgICAgICAgZGVmIEFzc2Vy
dEludmFsaWRJUChpcF9zdHIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVF
cnJvciwgaXBhZGRyLklQQWRkcmVzcywgaXBfc3RyKQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAo
IiIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgiMDE2LjAxNi4wMTYuMDE2IikKKyAgICAgICAg
QXNzZXJ0SW52YWxpZElQKCIwMTYuMDE2LjAxNiIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgi
MDE2LjAxNiIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgiMDE2IikKKyAgICAgICAgQXNzZXJ0
SW52YWxpZElQKCIwMDAuMDAwLjAwMC4wMDAiKQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAoIjAw
MCIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgiMHgwYS4weDBhLjB4MGEuMHgwYSIpCisgICAg
ICAgIEFzc2VydEludmFsaWRJUCgiMHgwYS4weDBhLjB4MGEiKQorICAgICAgICBBc3NlcnRJbnZh
bGlkSVAoIjB4MGEuMHgwYSIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgiMHgwYSIpCisgICAg
ICAgIEFzc2VydEludmFsaWRJUCgiNDIuNDIuNDIuNDIuNDIiKQorICAgICAgICBBc3NlcnRJbnZh
bGlkSVAoIjQyLjQyLjQyIikKKyAgICAgICAgQXNzZXJ0SW52YWxpZElQKCI0Mi40MiIpCisgICAg
ICAgIEFzc2VydEludmFsaWRJUCgiNDIiKQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAoIjQyLi40
Mi40MiIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgiNDIuLjQyLjQyLjQyIikKKyAgICAgICAg
QXNzZXJ0SW52YWxpZElQKCI0Mi40Mi40Mi40Mi4iKQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAo
IjQyLjQyLjQyLjQyLi4uIikKKyAgICAgICAgQXNzZXJ0SW52YWxpZElQKCIuNDIuNDIuNDIuNDIi
KQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAoIi4uLjQyLjQyLjQyLjQyIikKKyAgICAgICAgQXNz
ZXJ0SW52YWxpZElQKCI0Mi40Mi40Mi4tMCIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgiNDIu
NDIuNDIuKzAiKQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAoIi4iKQorICAgICAgICBBc3NlcnRJ
bnZhbGlkSVAoIi4uLiIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgiYm9ndXMiKQorICAgICAg
ICBBc3NlcnRJbnZhbGlkSVAoImJvZ3VzLmNvbSIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgi
MTkyLjE2OC4wLjEuY29tIikKKyAgICAgICAgQXNzZXJ0SW52YWxpZElQKCIxMjM0NS42Nzg5OS4t
NTQzMjEuLTk4NzY1IikKKyAgICAgICAgQXNzZXJ0SW52YWxpZElQKCIyNTcuMC4wLjAiKQorICAg
ICAgICBBc3NlcnRJbnZhbGlkSVAoIjQyLjQyLjQyLi00MiIpCisgICAgICAgIEFzc2VydEludmFs
aWRJUCgiM2ZmZTo6MS5uZXQiKQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAoIjNmZmU6OjE6OjEi
KQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAoIjE6OjI6OjM6OjQ6NSIpCisgICAgICAgIEFzc2Vy
dEludmFsaWRJUCgiOjo3OjY6NTo0OjM6MjoiKQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAoIjo2
OjU6NDozOjI6MTo6IikKKyAgICAgICAgQXNzZXJ0SW52YWxpZElQKCIyMDAxOjpkYjo6OjEiKQor
ICAgICAgICBBc3NlcnRJbnZhbGlkSVAoIkZFREM6OTg3OCIpCisgICAgICAgIEFzc2VydEludmFs
aWRJUCgiKzEuKzIuKzMuNCIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgiMS4yLjMuNGUwIikK
KyAgICAgICAgQXNzZXJ0SW52YWxpZElQKCI6Ojc6Njo1OjQ6MzoyOjE6MCIpCisgICAgICAgIEFz
c2VydEludmFsaWRJUCgiNzo2OjU6NDozOjI6MTowOjoiKQorICAgICAgICBBc3NlcnRJbnZhbGlk
SVAoIjk6ODo3OjY6NTo0OjM6OjI6MSIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgiMDoxOjI6
Mzo6NDo1OjY6NyIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgiM2ZmZTowOjA6MDowOjA6MDow
OjEiKQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAoIjNmZmU6OjEwMDAwIikKKyAgICAgICAgQXNz
ZXJ0SW52YWxpZElQKCIzZmZlOjpnb29nIikKKyAgICAgICAgQXNzZXJ0SW52YWxpZElQKCIzZmZl
OjotMCIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgiM2ZmZTo6KzAiKQorICAgICAgICBBc3Nl
cnRJbnZhbGlkSVAoIjNmZmU6Oi0xIikKKyAgICAgICAgQXNzZXJ0SW52YWxpZElQKCI6IikKKyAg
ICAgICAgQXNzZXJ0SW52YWxpZElQKCI6OjoiKQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAoIjo6
MS4yLjMiKQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAoIjo6MS4yLjMuNC41IikKKyAgICAgICAg
QXNzZXJ0SW52YWxpZElQKCI6OjEuMi4zLjQ6IikKKyAgICAgICAgQXNzZXJ0SW52YWxpZElQKCIx
LjIuMy40OjoiKQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAoIjIwMDE6ZGI4OjoxOiIpCisgICAg
ICAgIEFzc2VydEludmFsaWRJUCgiOjIwMDE6ZGI4OjoxIikKKyAgICAgICAgQXNzZXJ0SW52YWxp
ZElQKCI6MToyOjM6NDo1OjY6NyIpCisgICAgICAgIEFzc2VydEludmFsaWRJUCgiMToyOjM6NDo1
OjY6NzoiKQorICAgICAgICBBc3NlcnRJbnZhbGlkSVAoIjoxOjI6Mzo0OjU6NjoiKQorICAgICAg
ICBBc3NlcnRJbnZhbGlkSVAoIjE5Mi4wLjIuMS8zMiIpCisgICAgICAgIEFzc2VydEludmFsaWRJ
UCgiMjAwMTpkYjg6OjEvMTI4IikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhpcGFkZHIu
QWRkcmVzc1ZhbHVlRXJyb3IsIGlwYWRkci5JUHY0TmV0d29yaywgJycpCisgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKGlwYWRkci5BZGRyZXNzVmFsdWVFcnJvciwgaXBhZGRyLklQdjROZXR3b3Jr
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAnZ29vZ2xlLmNvbScpCisgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKGlwYWRkci5BZGRyZXNzVmFsdWVFcnJvciwgaXBhZGRyLklQdjROZXR3b3Jr
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAnOjoxLjIuMy40JykKKyAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoaXBhZGRyLkFkZHJlc3NWYWx1ZUVycm9yLCBpcGFkZHIuSVB2Nk5ldHdvcmss
ICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhpcGFkZHIuQWRkcmVzc1ZhbHVlRXJyb3Is
IGlwYWRkci5JUHY2TmV0d29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dvb2dsZS5j
b20nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhpcGFkZHIuQWRkcmVzc1ZhbHVlRXJyb3Is
IGlwYWRkci5JUHY2TmV0d29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJzEuMi4zLjQn
KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhpcGFkZHIuQWRkcmVzc1ZhbHVlRXJyb3IsIGlw
YWRkci5JUHY2TmV0d29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhZmU6Y2FmZTo6
LzEyOC8xOTAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhpcGFkZHIuQWRkcmVzc1ZhbHVl
RXJyb3IsIGlwYWRkci5JUHY2TmV0d29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJzEy
MzQ6YXh5OjpiJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaXBhZGRyLkFkZHJlc3NWYWx1
ZUVycm9yLCBpcGFkZHIuSVB2NkFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICcx
MjM0OmF4eTo6YicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGlwYWRkci5BZGRyZXNzVmFs
dWVFcnJvciwgaXBhZGRyLklQdjZBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAn
MjAwMTpkYjg6OjoxJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaXBhZGRyLkFkZHJlc3NW
YWx1ZUVycm9yLCBpcGFkZHIuSVB2NkFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICcyMDAxOjg4ODg4ODo6MScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGlwYWRkci5BZGRy
ZXNzVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQdjRBZGRy
ZXNzKDEpLl9pcF9pbnRfZnJvbV9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICcx
LmEuMi4zJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyLklQdjROZXR3
b3JrKDEpLl9pc19ob3N0bWFzaygnMS5hLjIuMycpKQorCisgICAgZGVmIHRlc3RHZXROZXR3b3Jr
KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChzZWxmLmlwdjQubmV0d29yayks
IDE2OTA5MDU2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLmlwdjQubmV0d29y
ayksICcxLjIuMy4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi5pcHY0X2hv
c3RtYXNrLm5ldHdvcmspLCAnMTAuMC4wLjAnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
aW50KHNlbGYuaXB2Ni5uZXR3b3JrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICA0MjU0MDYx
NjgyOTE4MjQ2OTQzMzQwMzY0NzI5NDAyMjA5MDc1MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzdHIoc2VsZi5pcHY2Lm5ldHdvcmspLAorICAgICAgICAgICAgICAgICAgICAgICAgICcyMDAx
OjY1ODoyMmE6Y2FmZTo6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi5pcHY2
Lmhvc3RtYXNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnOjpmZmZmOmZmZmY6ZmZmZjpm
ZmZmJykKKworICAgIGRlZiB0ZXN0QmFkVmVyc2lvbkNvbXBhcmlzb24oc2VsZik6CisgICAgICAg
ICMgVGhlc2Ugc2hvdWxkIGFsd2F5cyByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgdjRhZGRyID0g
aXBhZGRyLklQQWRkcmVzcygnMS4xLjEuMScpCisgICAgICAgIHY0bmV0ID0gaXBhZGRyLklQTmV0
d29yaygnMS4xLjEuMScpCisgICAgICAgIHY2YWRkciA9IGlwYWRkci5JUEFkZHJlc3MoJzo6MScp
CisgICAgICAgIHY2bmV0ID0gaXBhZGRyLklQQWRkcmVzcygnOjoxJykKKworICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHY0YWRkci5fX2x0X18sIHY2YWRkcikKKyAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB2NGFkZHIuX19ndF9fLCB2NmFkZHIpCisgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdjRuZXQuX19sdF9fLCB2Nm5ldCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB2NG5ldC5fX2d0X18sIHY2bmV0KQor
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdjZhZGRyLl9fbHRfXywgdjRh
ZGRyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHY2YWRkci5fX2d0X18s
IHY0YWRkcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB2Nm5ldC5fX2x0
X18sIHY0bmV0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHY2bmV0Ll9f
Z3RfXywgdjRuZXQpCisKKyAgICBkZWYgdGVzdE1peGVkVHlwZUNvbXBhcmlzb24oc2VsZik6Cisg
ICAgICAgIHY0YWRkciA9IGlwYWRkci5JUEFkZHJlc3MoJzEuMS4xLjEnKQorICAgICAgICB2NG5l
dCA9IGlwYWRkci5JUE5ldHdvcmsoJzEuMS4xLjEvMzInKQorICAgICAgICB2NmFkZHIgPSBpcGFk
ZHIuSVBBZGRyZXNzKCc6OjEnKQorICAgICAgICB2Nm5ldCA9IGlwYWRkci5JUE5ldHdvcmsoJzo6
MS8xMjgnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodjRuZXQuX19jb250YWluc19fKHY2
bmV0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh2Nm5ldC5fX2NvbnRhaW5zX18odjRuZXQp
KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB2NGFkZHIg
PCB2NG5ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHY0
YWRkciA+IHY0bmV0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJk
YTogdjRuZXQgPCB2NGFkZHIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwg
bGFtYmRhOiB2NG5ldCA+IHY0YWRkcikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBl
RXJyb3IsIGxhbWJkYTogdjZhZGRyIDwgdjZuZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KFR5cGVFcnJvciwgbGFtYmRhOiB2NmFkZHIgPiB2Nm5ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHY2bmV0IDwgdjZhZGRyKQorICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdjZuZXQgPiB2NmFkZHIpCisKKyAgICAgICAg
IyB3aXRoIGdldF9taXhlZF90eXBlX2tleSwgeW91IGNhbiBzb3J0IGFkZHJlc3NlcyBhbmQgbmV0
d29yay4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbdjRhZGRyLCB2NG5ldF0sIHNvcnRlZChb
djRuZXQsIHY0YWRkcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga2V5PWlwYWRkci5nZXRfbWl4ZWRfdHlwZV9rZXkpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKFt2NmFkZHIsIHY2bmV0XSwgc29ydGVkKFt2Nm5ldCwgdjZhZGRyXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9aXBhZGRyLmdl
dF9taXhlZF90eXBlX2tleSkpCisKKyAgICBkZWYgdGVzdElwRnJvbUludChzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmlwdjQuaXAsIGlwYWRkci5JUHY0TmV0d29yaygxNjkw
OTA2MCkuaXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGlwYWRkci5BZGRyZXNzVmFsdWVF
cnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQdjROZXR3b3JrLCAyKioz
MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaXBhZGRyLkFkZHJlc3NWYWx1ZUVycm9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVB2NE5ldHdvcmssIC0xKQorCisgICAg
ICAgIGlwdjQgPSBpcGFkZHIuSVBOZXR3b3JrKCcxLjIuMy40JykKKyAgICAgICAgaXB2NiA9IGlw
YWRkci5JUE5ldHdvcmsoJzIwMDE6NjU4OjIyYTpjYWZlOjIwMDowOjA6MScpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoaXB2NCwgaXBhZGRyLklQTmV0d29yayhpbnQoaXB2NCkpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGlwdjYsIGlwYWRkci5JUE5ldHdvcmsoaW50KGlwdjYpKSkKKwor
ICAgICAgICB2Nl9pbnQgPSA0MjU0MDYxNjgyOTE4MjQ2OTQzMzU0Nzc2MjQ4MjA5Nzk0NjYyNQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaXB2Ni5pcCwgaXBhZGRyLklQdjZOZXR3b3Jr
KHY2X2ludCkuaXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGlwYWRkci5BZGRyZXNzVmFs
dWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQdjZOZXR3b3JrLCAy
KioxMjgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGlwYWRkci5BZGRyZXNzVmFsdWVFcnJv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQdjZOZXR3b3JrLCAtMSkKKwor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkci5JUE5ldHdvcmsoc2VsZi5pcHY0LmlwKS52
ZXJzaW9uLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkci5JUE5ldHdvcmsoc2Vs
Zi5pcHY2LmlwKS52ZXJzaW9uLCA2KQorCisgICAgZGVmIHRlc3RJcEZyb21QYWNrZWQoc2VsZik6
CisgICAgICAgIGlwID0gaXBhZGRyLklQTmV0d29yaworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5pcHY0LmlwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwKF9jYignXHgwMVx4
MDJceDAzXHgwNCcpKS5pcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcCgnMjU1LjI1NC4y
NTMuMjUyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgaXAoX2NiKCdceGZmXHhmZVx4ZmRc
eGZjJykpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpcGFkZHIuSVBO
ZXR3b3JrLCBfY2IoJ1x4MDAnICogMykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVl
RXJyb3IsIGlwYWRkci5JUE5ldHdvcmssIF9jYignXHgwMCcgKiA1KSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWxmLmlwdjYuaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXAoX2Ni
KCdceDIwXHgwMVx4MDZceDU4XHgwMlx4MmFceGNhXHhmZScKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdceDAyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMScpKS5pcCkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChpcCgnZmZmZjoyOjM6NDpmZmZmOjonKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBpcChfY2IoJ1x4ZmZceGZmXHgwMFx4MDJceDAwXHgwM1x4MDBceDA0JyArCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4ZmZceGZmJyArICdceDAwJyAqIDYpKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcCgnOjonKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBpcChfY2IoJ1x4MDAnICogMTYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFs
dWVFcnJvciwgaXAsIF9jYignXHgwMCcgKiAxNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KFZhbHVlRXJyb3IsIGlwLCBfY2IoJ1x4MDAnICogMTcpKQorCisgICAgZGVmIHRlc3RHZXRJcChz
ZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoc2VsZi5pcHY0LmlwKSwgMTY5MDkw
NjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNlbGYuaXB2NC5pcCksICcxLjIuMy40
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi5pcHY0X2hvc3RtYXNrLmlwKSwg
JzEwLjAuMC4xJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChzZWxmLmlwdjYuaXAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgIDQyNTQwNjE2ODI5MTgyNDY5NDMzNTQ3NzYyNDgy
MDk3OTQ2NjI1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLmlwdjYuaXApLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICcyMDAxOjY1ODoyMmE6Y2FmZToyMDA6OjEnKQorCisg
ICAgZGVmIHRlc3RHZXROZXRtYXNrKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlu
dChzZWxmLmlwdjQubmV0bWFzayksIDQyOTQ5NjcwNDBMKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHN0cihzZWxmLmlwdjQubmV0bWFzayksICcyNTUuMjU1LjI1NS4wJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzdHIoc2VsZi5pcHY0X2hvc3RtYXNrLm5ldG1hc2spLCAnMjU1LjAuMC4w
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoc2VsZi5pcHY2Lm5ldG1hc2spLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIDM0MDI4MjM2NjkyMDkzODQ2MzQ0NDkyNzg2MzM1ODA1ODY1
OTg0MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmlwdjYucHJlZml4bGVuLCA2NCkK
KworICAgIGRlZiB0ZXN0WmVyb05ldG1hc2soc2VsZik6CisgICAgICAgIGlwdjRfemVyb19uZXRt
YXNrID0gaXBhZGRyLklQdjROZXR3b3JrKCcxLjIuMy40LzAnKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGludChpcHY0X3plcm9fbmV0bWFzay5uZXRtYXNrKSwgMCkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGlwdjRfemVyb19uZXRtYXNrLl9pc192YWxpZF9uZXRtYXNrKHN0cigwKSkpCisK
KyAgICAgICAgaXB2Nl96ZXJvX25ldG1hc2sgPSBpcGFkZHIuSVB2Nk5ldHdvcmsoJzo6MS8wJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoaXB2Nl96ZXJvX25ldG1hc2submV0bWFzayks
IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpcHY2X3plcm9fbmV0bWFzay5faXNfdmFsaWRf
bmV0bWFzayhzdHIoMCkpKQorCisgICAgZGVmIHRlc3RHZXRCcm9hZGNhc3Qoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHNlbGYuaXB2NC5icm9hZGNhc3QpLCAxNjkwOTMxMUwp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNlbGYuaXB2NC5icm9hZGNhc3QpLCAnMS4y
LjMuMjU1JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChzZWxmLmlwdjYuYnJvYWRj
YXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICA0MjU0MDYxNjgyOTE4MjQ2OTQ1MTg1MDM5
MTM2NzczMTY0MjM2NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi5pcHY2LmJy
b2FkY2FzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzIwMDE6NjU4OjIyYTpjYWZlOmZm
ZmY6ZmZmZjpmZmZmOmZmZmYnKQorCisgICAgZGVmIHRlc3RHZXRQcmVmaXhsZW4oc2VsZik6Cisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pcHY0LnByZWZpeGxlbiwgMjQpCisKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmlwdjYucHJlZml4bGVuLCA2NCkKKworICAgIGRlZiB0
ZXN0R2V0U3VwZXJuZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pcHY0
LnN1cGVybmV0KCkucHJlZml4bGVuLCAyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIo
c2VsZi5pcHY0LnN1cGVybmV0KCkubmV0d29yayksICcxLjIuMi4wJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChpcGFkZHIuSVB2NE5ldHdvcmsoJzAuMC4wLjAvMCcpLnN1cGVybmV0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQdjROZXR3b3JrKCcwLjAuMC4wLzAnKSkK
KworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaXB2Ni5zdXBlcm5ldCgpLnByZWZpeGxl
biwgNjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNlbGYuaXB2Ni5zdXBlcm5ldCgp
Lm5ldHdvcmspLAorICAgICAgICAgICAgICAgICAgICAgICAgICcyMDAxOjY1ODoyMmE6Y2FmZTo6
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHIuSVB2Nk5ldHdvcmsoJzo6MC8wJyku
c3VwZXJuZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVB2Nk5ldHdvcmso
Jzo6MC8wJykpCisKKyAgICBkZWYgdGVzdEdldFN1cGVybmV0MyhzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLmlwdjQuc3VwZXJuZXQoMykucHJlZml4bGVuLCAyMSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi5pcHY0LnN1cGVybmV0KDMpLm5ldHdvcmspLCAn
MS4yLjAuMCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmlwdjYuc3VwZXJuZXQo
MykucHJlZml4bGVuLCA2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi5pcHY2
LnN1cGVybmV0KDMpLm5ldHdvcmspLAorICAgICAgICAgICAgICAgICAgICAgICAgICcyMDAxOjY1
ODoyMmE6Y2FmODo6JykKKworICAgIGRlZiB0ZXN0R2V0U3VwZXJuZXQ0KHNlbGYpOgorICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmlwdjQuc3VwZXJuZXQsIHByZWZp
eGxlbl9kaWZmPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19wcmVmaXg9MSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5pcHY0LnN1cGVybmV0LCBu
ZXdfcHJlZml4PTI1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaXB2NC5zdXBlcm5l
dChwcmVmaXhsZW5fZGlmZj0yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlwdjQu
c3VwZXJuZXQobmV3X3ByZWZpeD0yMikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFs
dWVFcnJvciwgc2VsZi5pcHY2LnN1cGVybmV0LCBwcmVmaXhsZW5fZGlmZj0yLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdfcHJlZml4PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KFZhbHVlRXJyb3IsIHNlbGYuaXB2Ni5zdXBlcm5ldCwgbmV3X3ByZWZpeD02NSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLmlwdjYuc3VwZXJuZXQocHJlZml4bGVuX2RpZmY9MiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pcHY2LnN1cGVybmV0KG5ld19wcmVmaXg9NjIp
KQorCisgICAgZGVmIHRlc3RJdGVyU3VibmV0cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLmlwdjQuc3VibmV0KCksIGxpc3Qoc2VsZi5pcHY0Lml0ZXJfc3VibmV0cygpKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmlwdjYuc3VibmV0KCksIGxpc3Qoc2VsZi5p
cHY2Lml0ZXJfc3VibmV0cygpKSkKKworICAgIGRlZiB0ZXN0SXRlckhvc3RzKHNlbGYpOgorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKFtpcGFkZHIuSVB2NEFkZHJlc3MoJzIuMC4wLjAnKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQdjRBZGRyZXNzKCcyLjAuMC4xJyldLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoaXBhZGRyLklQTmV0d29yaygnMi4wLjAuMC8z
MScpLml0ZXJob3N0cygpKSkKKworICAgIGRlZiB0ZXN0RmFuY3lTdWJuZXR0aW5nKHNlbGYpOgor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzZWxmLmlwdjQuc3VibmV0KHByZWZpeGxl
bl9kaWZmPTMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWQoc2VsZi5pcHY0LnN1
Ym5ldChuZXdfcHJlZml4PTI3KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJy
b3IsIHNlbGYuaXB2NC5zdWJuZXQsIG5ld19wcmVmaXg9MjMpCisgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuaXB2NC5zdWJuZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZWZpeGxlbl9kaWZmPTMsIG5ld19wcmVmaXg9MjcpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc29ydGVkKHNlbGYuaXB2Ni5zdWJuZXQocHJlZml4bGVuX2RpZmY9NCkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZChzZWxmLmlwdjYuc3VibmV0KG5ld19wcmVmaXg9
NjgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5pcHY2LnN1
Ym5ldCwgbmV3X3ByZWZpeD02MykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
ciwgc2VsZi5pcHY2LnN1Ym5ldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4bGVu
X2RpZmY9NCwgbmV3X3ByZWZpeD02OCkKKworICAgIGRlZiB0ZXN0R2V0U3VibmV0KHNlbGYpOgor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaXB2NC5zdWJuZXQoKVswXS5wcmVmaXhsZW4s
IDI1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLmlwdjQuc3VibmV0KClbMF0u
bmV0d29yayksICcxLjIuMy4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi5p
cHY0LnN1Ym5ldCgpWzFdLm5ldHdvcmspLCAnMS4yLjMuMTI4JykKKworICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYuaXB2Ni5zdWJuZXQoKVswXS5wcmVmaXhsZW4sIDY1KQorCisgICAgZGVm
IHRlc3RHZXRTdWJuZXRGb3JTaW5nbGUzMihzZWxmKToKKyAgICAgICAgaXAgPSBpcGFkZHIuSVB2
NE5ldHdvcmsoJzEuMi4zLjQvMzInKQorICAgICAgICBzdWJuZXRzMSA9IFtzdHIoeCkgZm9yIHgg
aW4gaXAuc3VibmV0KCldCisgICAgICAgIHN1Ym5ldHMyID0gW3N0cih4KSBmb3IgeCBpbiBpcC5z
dWJuZXQoMildCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VibmV0czEsIFsnMS4yLjMuNC8z
MiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Ym5ldHMxLCBzdWJuZXRzMikKKworICAg
IGRlZiB0ZXN0R2V0U3VibmV0Rm9yU2luZ2xlMTI4KHNlbGYpOgorICAgICAgICBpcCA9IGlwYWRk
ci5JUHY2TmV0d29yaygnOjoxLzEyOCcpCisgICAgICAgIHN1Ym5ldHMxID0gW3N0cih4KSBmb3Ig
eCBpbiBpcC5zdWJuZXQoKV0KKyAgICAgICAgc3VibmV0czIgPSBbc3RyKHgpIGZvciB4IGluIGlw
LnN1Ym5ldCgyKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJuZXRzMSwgWyc6OjEvMTI4
J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VibmV0czEsIHN1Ym5ldHMyKQorCisgICAg
ZGVmIHRlc3RTdWJuZXQyKHNlbGYpOgorICAgICAgICBpcHMgPSBbc3RyKHgpIGZvciB4IGluIHNl
bGYuaXB2NC5zdWJuZXQoMildCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAg
ICBpcHMsCisgICAgICAgICAgICBbJzEuMi4zLjAvMjYnLCAnMS4yLjMuNjQvMjYnLCAnMS4yLjMu
MTI4LzI2JywgJzEuMi4zLjE5Mi8yNiddKQorCisgICAgICAgIGlwc3Y2ID0gW3N0cih4KSBmb3Ig
eCBpbiBzZWxmLmlwdjYuc3VibmV0KDIpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAg
ICAgICAgICAgaXBzdjYsCisgICAgICAgICAgICBbJzIwMDE6NjU4OjIyYTpjYWZlOjovNjYnLAor
ICAgICAgICAgICAgICcyMDAxOjY1ODoyMmE6Y2FmZTo0MDAwOjovNjYnLAorICAgICAgICAgICAg
ICcyMDAxOjY1ODoyMmE6Y2FmZTo4MDAwOjovNjYnLAorICAgICAgICAgICAgICcyMDAxOjY1ODoy
MmE6Y2FmZTpjMDAwOjovNjYnXSkKKworICAgIGRlZiB0ZXN0U3VibmV0RmFpbHNGb3JMYXJnZUNp
ZHJEaWZmKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxm
LmlwdjQuc3VibmV0LCA5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBz
ZWxmLmlwdjYuc3VibmV0LCA2NSkKKworICAgIGRlZiB0ZXN0U3VwZXJuZXRGYWlsc0Zvckxhcmdl
Q2lkckRpZmYoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNl
bGYuaXB2NC5zdXBlcm5ldCwgMjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJy
b3IsIHNlbGYuaXB2Ni5zdXBlcm5ldCwgNjUpCisKKyAgICBkZWYgdGVzdFN1Ym5ldEZhaWxzRm9y
TmVnYXRpdmVDaWRyRGlmZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVF
cnJvciwgc2VsZi5pcHY0LnN1Ym5ldCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZh
bHVlRXJyb3IsIHNlbGYuaXB2Ni5zdWJuZXQsIC0xKQorCisgICAgZGVmIHRlc3RHZXROdW1Ib3N0
cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmlwdjQubnVtaG9zdHMsIDI1
NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmlwdjQuc3VibmV0KClbMF0ubnVtaG9z
dHMsIDEyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmlwdjQuc3VwZXJuZXQoKS5u
dW1ob3N0cywgNTEyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pcHY2Lm51bWhv
c3RzLCAxODQ0Njc0NDA3MzcwOTU1MTYxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
LmlwdjYuc3VibmV0KClbMF0ubnVtaG9zdHMsIDkyMjMzNzIwMzY4NTQ3NzU4MDgpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pcHY2LnN1cGVybmV0KCkubnVtaG9zdHMsIDM2ODkzNDg4
MTQ3NDE5MTAzMjMyKQorCisgICAgZGVmIHRlc3RDb250YWlucyhzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGlwYWRkci5JUHY0TmV0d29yaygnMS4yLjMuMTI4LzI1JykgaW4gc2VsZi5p
cHY0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlwYWRkci5JUHY0TmV0d29yaygnMS4yLjQu
MS8yNCcpIGluIHNlbGYuaXB2NCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXB2NCBp
biBzZWxmLmlwdjQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlwdjYgaW4gc2VsZi5p
cHY2KQorICAgICAgICAjIFdlIGNhbiB0ZXN0IGFkZHJlc3NlcyBhbmQgc3RyaW5nIGFzIHdlbGwu
CisgICAgICAgIGFkZHIxID0gaXBhZGRyLklQdjRBZGRyZXNzKCcxLjIuMy4zNycpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShhZGRyMSBpbiBzZWxmLmlwdjQpCisgICAgICAgICMgaXNzdWUgNjEs
IGJhZCBuZXR3b3JrIGNvbXBhcmlzb24gb24gbGlrZS1pcCdkIG5ldHdvcmsgb2JqZWN0cworICAg
ICAgICAjIHdpdGggaWRlbnRpY2FsIGJyb2FkY2FzdCBhZGRyZXNzZXMuCisgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoaXBhZGRyLklQdjROZXR3b3JrKCcxLjEuMC4wLzE2JykuX19jb250YWluc19f
KAorICAgICAgICAgICAgICAgIGlwYWRkci5JUHY0TmV0d29yaygnMS4wLjAuMC8xNScpKSkKKwor
ICAgIGRlZiB0ZXN0QmFkQWRkcmVzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
aXBhZGRyLkFkZHJlc3NWYWx1ZUVycm9yLCBpcGFkZHIuSVB2NE5ldHdvcmssCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICdwb29wJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaXBhZGRy
LkFkZHJlc3NWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVB2
NE5ldHdvcmssICcxLjIuMy4yNTYnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGlwYWRk
ci5BZGRyZXNzVmFsdWVFcnJvciwgaXBhZGRyLklQdjZOZXR3b3JrLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAncG9vcHY2JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaXBhZGRyLkFk
ZHJlc3NWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVB2NE5l
dHdvcmssICcxLjIuMy40LzMyLzI0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaXBhZGRy
LkFkZHJlc3NWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVB2
NE5ldHdvcmssICcxMC84JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaXBhZGRyLkFkZHJl
c3NWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVB2Nk5ldHdv
cmssICcxMC84JykKKworCisgICAgZGVmIHRlc3RCYWROZXRNYXNrKHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhpcGFkZHIuTmV0bWFza1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlwYWRkci5JUHY0TmV0d29yaywgJzEuMi4zLjQvJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoaXBhZGRyLk5ldG1hc2tWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBpcGFkZHIuSVB2NE5ldHdvcmssICcxLjIuMy40LzMzJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoaXBhZGRyLk5ldG1hc2tWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBpcGFkZHIuSVB2NE5ldHdvcmssICcxLjIuMy40LzI1NC4yNTQuMjU1LjI1Nicp
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGlwYWRkci5OZXRtYXNrVmFsdWVFcnJvciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQdjROZXR3b3JrLCAnMS4xLjEuMS8yNDAu
MjU1LjAuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGlwYWRkci5OZXRtYXNrVmFsdWVF
cnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQdjZOZXR3b3JrLCAnOjox
LycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGlwYWRkci5OZXRtYXNrVmFsdWVFcnJvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQdjZOZXR3b3JrLCAnOjoxLzEyOScp
CisKKyAgICBkZWYgdGVzdE50aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIo
c2VsZi5pcHY0WzVdKSwgJzEuMi4zLjUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRl
eEVycm9yLCBzZWxmLmlwdjQuX19nZXRpdGVtX18sIDI1NikKKworICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHN0cihzZWxmLmlwdjZbNV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICcyMDAx
OjY1ODoyMmE6Y2FmZTo6NScpCisKKyAgICBkZWYgdGVzdEdldGl0ZW0oc2VsZik6CisgICAgICAg
ICMgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2lwYWRkci1weS9pc3N1ZXMvZGV0YWlsP2lkPTE1
CisgICAgICAgIGFkZHIgPSBpcGFkZHIuSVB2NE5ldHdvcmsoJzE3Mi4zMS4yNTUuMTI4LzI1NS4y
NTUuMjU1LjI0MCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjgsIGFkZHIucHJlZml4bGVu
KQorICAgICAgICBhZGRyX2xpc3QgPSBsaXN0KGFkZHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJzE3Mi4zMS4yNTUuMTI4Jywgc3RyKGFkZHJfbGlzdFswXSkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJzE3Mi4zMS4yNTUuMTI4Jywgc3RyKGFkZHJbMF0pKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCcxNzIuMzEuMjU1LjE0MycsIHN0cihhZGRyX2xpc3RbLTFdKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnMTcyLjMxLjI1NS4xNDMnLCBzdHIoYWRkclstMV0pKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGFkZHJfbGlzdFstMV0sIGFkZHJbLTFdKQorCisgICAgZGVmIHRl
c3RFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXB2NCA9PSBpcGFk
ZHIuSVB2NE5ldHdvcmsoJzEuMi4zLjQvMjQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShz
ZWxmLmlwdjQgPT0gaXBhZGRyLklQdjROZXR3b3JrKCcxLjIuMy40LzIzJykpCisgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2Uoc2VsZi5pcHY0ID09IGlwYWRkci5JUHY2TmV0d29yaygnOjoxLjIuMy40
LzI0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5pcHY0ID09ICcnKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuaXB2NCA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShzZWxmLmlwdjQgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlwYWRkci5JUE5l
dHdvcmsoJzEuMS4xLjEvMzInKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQ
QWRkcmVzcygnMS4xLjEuMScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXBhZGRyLklQTmV0
d29yaygnMS4xLjEuMS8yNCcpID09CisgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVBB
ZGRyZXNzKCcxLjEuMS4xJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXBhZGRyLklQTmV0
d29yaygnMS4xLjEuMC8yNCcpID09CisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQ
QWRkcmVzcygnMS4xLjEuMScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlwdjYg
PT0KKyAgICAgICAgICAgIGlwYWRkci5JUHY2TmV0d29yaygnMjAwMTo2NTg6MjJhOmNhZmU6MjAw
OjoxLzY0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpcGFkZHIuSVBOZXR3b3JrKCc6OjEv
MTI4JykgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkci5JUEFkZHJlc3MoJzo6MScp
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXBhZGRyLklQTmV0d29yaygnOjoxLzEyNycpID09
CisgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVBBZGRyZXNzKCc6OjEnKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShpcGFkZHIuSVBOZXR3b3JrKCc6OjAvMTI3JykgPT0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVBBZGRyZXNzKCc6OjEnKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShzZWxmLmlwdjYgPT0KKyAgICAgICAgICAgIGlwYWRkci5JUHY2TmV0d29y
aygnMjAwMTo2NTg6MjJhOmNhZmU6MjAwOjoxLzYzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2Uoc2VsZi5pcHY2ID09IGlwYWRkci5JUHY0TmV0d29yaygnMS4yLjMuNC8yMycpKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuaXB2NiA9PSAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShzZWxmLmlwdjYgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5pcHY2
ID09IDIpCisKKyAgICBkZWYgdGVzdE5vdEVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKHNlbGYuaXB2NCAhPSBpcGFkZHIuSVB2NE5ldHdvcmsoJzEuMi4zLjQvMjQnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXB2NCAhPSBpcGFkZHIuSVB2NE5ldHdvcmsoJzEu
Mi4zLjQvMjMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXB2NCAhPSBpcGFkZHIu
SVB2Nk5ldHdvcmsoJzo6MS4yLjMuNC8yNCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2Vs
Zi5pcHY0ICE9ICcnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pcHY0ICE9IFtdKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pcHY0ICE9IDIpCisKKyAgICAgICAgYWRkcjIg
PSBpcGFkZHIuSVBBZGRyZXNzKCcyMDAxOjY1ODoyMmE6Y2FmZToyMDA6OjEnKQorICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKHNlbGYuaXB2NiAhPQorICAgICAgICAgICAgaXBhZGRyLklQdjZOZXR3
b3JrKCcyMDAxOjY1ODoyMmE6Y2FmZToyMDA6OjEvNjQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHNlbGYuaXB2NiAhPQorICAgICAgICAgICAgaXBhZGRyLklQdjZOZXR3b3JrKCcyMDAxOjY1
ODoyMmE6Y2FmZToyMDA6OjEvNjMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXB2
NiAhPSBpcGFkZHIuSVB2NE5ldHdvcmsoJzEuMi4zLjQvMjMnKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKHNlbGYuaXB2NiAhPSAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXB2
NiAhPSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXB2NiAhPSAyKQorCisgICAg
ZGVmIHRlc3RTbGFzaDMyQ29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc3RyKGlwYWRkci5JUHY0TmV0d29yaygnMS4yLjMuNC8yNTUuMjU1LjI1NS4yNTUnKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICcxLjIuMy40LzMyJykKKworICAgIGRlZiB0ZXN0U2xh
c2gxMjhDb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaXBh
ZGRyLklQdjZOZXR3b3JrKCc6OjEvMTI4JykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICc6OjEvMTI4JykKKworICAgIGRlZiB0ZXN0U2xhc2gwQ29uc3RydWN0b3Ioc2VsZik6
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGlwYWRkci5JUHY0TmV0d29yaygnMS4yLjMu
NC8wLjAuMC4wJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnMS4yLjMuNC8wJykKKwor
ICAgIGRlZiB0ZXN0Q29sbGFwc2luZyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IG9ubHkgSVAgYWRk
cmVzc2VzIGluY2x1ZGluZyBzb21lIGR1cGxpY2F0ZXMKKyAgICAgICAgaXAxID0gaXBhZGRyLklQ
djRBZGRyZXNzKCcxLjEuMS4wJykKKyAgICAgICAgaXAyID0gaXBhZGRyLklQdjRBZGRyZXNzKCcx
LjEuMS4xJykKKyAgICAgICAgaXAzID0gaXBhZGRyLklQdjRBZGRyZXNzKCcxLjEuMS4yJykKKyAg
ICAgICAgaXA0ID0gaXBhZGRyLklQdjRBZGRyZXNzKCcxLjEuMS4zJykKKyAgICAgICAgaXA1ID0g
aXBhZGRyLklQdjRBZGRyZXNzKCcxLjEuMS40JykKKyAgICAgICAgaXA2ID0gaXBhZGRyLklQdjRB
ZGRyZXNzKCcxLjEuMS4wJykKKyAgICAgICAgIyBjaGVjayB0aGF0IGFkZHJlc2VzIGFyZSBzdWJz
dW1lZCBwcm9wZXJseS4KKyAgICAgICAgY29sbGFwc2VkID0gaXBhZGRyLmNvbGxhcHNlX2FkZHJl
c3NfbGlzdChbaXAxLCBpcDIsIGlwMywgaXA0LCBpcDUsIGlwNl0pCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY29sbGFwc2VkLCBbaXBhZGRyLklQdjROZXR3b3JrKCcxLjEuMS4wLzMwJyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQdjROZXR3b3JrKCcx
LjEuMS40LzMyJyldKQorCisgICAgICAgICMgdGVzdCBhIG1peCBvZiBJUCBhZGRyZXNzZXMgYW5k
IG5ldHdvcmtzIGluY2x1ZGluZyBzb21lIGR1cGxpY2F0ZXMKKyAgICAgICAgaXAxID0gaXBhZGRy
LklQdjRBZGRyZXNzKCcxLjEuMS4wJykKKyAgICAgICAgaXAyID0gaXBhZGRyLklQdjRBZGRyZXNz
KCcxLjEuMS4xJykKKyAgICAgICAgaXAzID0gaXBhZGRyLklQdjRBZGRyZXNzKCcxLjEuMS4yJykK
KyAgICAgICAgaXA0ID0gaXBhZGRyLklQdjRBZGRyZXNzKCcxLjEuMS4zJykKKyAgICAgICAgaXA1
ID0gaXBhZGRyLklQdjROZXR3b3JrKCcxLjEuMS40LzMwJykKKyAgICAgICAgaXA2ID0gaXBhZGRy
LklQdjROZXR3b3JrKCcxLjEuMS40LzMwJykKKyAgICAgICAgIyBjaGVjayB0aGF0IGFkZHJlc2Vz
IGFyZSBzdWJzdW1lZCBwcm9wZXJseS4KKyAgICAgICAgY29sbGFwc2VkID0gaXBhZGRyLmNvbGxh
cHNlX2FkZHJlc3NfbGlzdChbaXA1LCBpcDEsIGlwMiwgaXAzLCBpcDQsIGlwNl0pCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoY29sbGFwc2VkLCBbaXBhZGRyLklQdjROZXR3b3JrKCcxLjEuMS4w
LzI5JyldKQorCisgICAgICAgICMgdGVzdCBvbmx5IElQIG5ldHdvcmtzCisgICAgICAgIGlwMSA9
IGlwYWRkci5JUHY0TmV0d29yaygnMS4xLjAuMC8yNCcpCisgICAgICAgIGlwMiA9IGlwYWRkci5J
UHY0TmV0d29yaygnMS4xLjEuMC8yNCcpCisgICAgICAgIGlwMyA9IGlwYWRkci5JUHY0TmV0d29y
aygnMS4xLjIuMC8yNCcpCisgICAgICAgIGlwNCA9IGlwYWRkci5JUHY0TmV0d29yaygnMS4xLjMu
MC8yNCcpCisgICAgICAgIGlwNSA9IGlwYWRkci5JUHY0TmV0d29yaygnMS4xLjQuMC8yNCcpCisg
ICAgICAgICMgc3RvcmVkIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIgYi9jIHdlIHdhbnQgQ29sbGFw
c2VBZGRyIHRvIGNhbGwgW10uc29ydAorICAgICAgICBpcDYgPSBpcGFkZHIuSVB2NE5ldHdvcmso
JzEuMS4wLjAvMjInKQorICAgICAgICAjIGNoZWNrIHRoYXQgYWRkcmVzZXMgYXJlIHN1YnN1bWVk
IHByb3Blcmx5LgorICAgICAgICBjb2xsYXBzZWQgPSBpcGFkZHIuY29sbGFwc2VfYWRkcmVzc19s
aXN0KFtpcDEsIGlwMiwgaXAzLCBpcDQsIGlwNSwgaXA2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChjb2xsYXBzZWQsIFtpcGFkZHIuSVB2NE5ldHdvcmsoJzEuMS4wLjAvMjInKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVB2NE5ldHdvcmsoJzEuMS40
LjAvMjQnKV0pCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgdHdvIGFkZHJlc3NlcyBhcmUgc3VwZXJu
ZXQnZWQgcHJvcGVybHkKKyAgICAgICAgY29sbGFwc2VkID0gaXBhZGRyLmNvbGxhcHNlX2FkZHJl
c3NfbGlzdChbaXAxLCBpcDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxhcHNlZCwg
W2lwYWRkci5JUHY0TmV0d29yaygnMS4xLjAuMC8yMycpXSkKKworICAgICAgICAjIHRlc3Qgc2Ft
ZSBJUCBuZXR3b3JrcworICAgICAgICBpcF9zYW1lMSA9IGlwX3NhbWUyID0gaXBhZGRyLklQdjRO
ZXR3b3JrKCcxLjEuMS4xLzMyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHIuY29s
bGFwc2VfYWRkcmVzc19saXN0KFtpcF9zYW1lMSwgaXBfc2FtZTJdKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBbaXBfc2FtZTFdKQorCisgICAgICAgICMgdGVzdCBzYW1lIElQIGFkZHJlc3Nl
cworICAgICAgICBpcF9zYW1lMSA9IGlwX3NhbWUyID0gaXBhZGRyLklQdjRBZGRyZXNzKCcxLjEu
MS4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHIuY29sbGFwc2VfYWRkcmVzc19s
aXN0KFtpcF9zYW1lMSwgaXBfc2FtZTJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbaXBh
ZGRyLklQTmV0d29yaygnMS4xLjEuMS8zMicpXSkKKyAgICAgICAgaXAxID0gaXBhZGRyLklQdjZO
ZXR3b3JrKCc6OjIwMDE6MS8xMDAnKQorICAgICAgICBpcDIgPSBpcGFkZHIuSVB2Nk5ldHdvcmso
Jzo6MjAwMjoxLzEyMCcpCisgICAgICAgIGlwMyA9IGlwYWRkci5JUHY2TmV0d29yaygnOjoyMDAx
OjEvOTYnKQorICAgICAgICAjIHRlc3QgdGhhdCBpcHY2IGFkZHJlc3NlcyBhcmUgc3Vic3VtZWQg
cHJvcGVybHkuCisgICAgICAgIGNvbGxhcHNlZCA9IGlwYWRkci5jb2xsYXBzZV9hZGRyZXNzX2xp
c3QoW2lwMSwgaXAyLCBpcDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxhcHNlZCwg
W2lwM10pCisKKyAgICAgICAgIyB0aGUgdG9lamFtIHRlc3QKKyAgICAgICAgaXAxID0gaXBhZGRy
LklQQWRkcmVzcygnMS4xLjEuMScpCisgICAgICAgIGlwMiA9IGlwYWRkci5JUEFkZHJlc3MoJzo6
MScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXBhZGRyLmNvbGxhcHNl
X2FkZHJlc3NfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW2lwMSwgaXAyXSkKKwor
ICAgIGRlZiB0ZXN0U3VtbWFyaXppbmcoc2VsZik6CisgICAgICAgICNpcCA9IGlwYWRkci5JUEFk
ZHJlc3MKKyAgICAgICAgI2lwbmV0ID0gaXBhZGRyLklQTmV0d29yaworICAgICAgICBzdW1tYXJp
emUgPSBpcGFkZHIuc3VtbWFyaXplX2FkZHJlc3NfcmFuZ2UKKyAgICAgICAgaXAxID0gaXBhZGRy
LklQQWRkcmVzcygnMS4xLjEuMCcpCisgICAgICAgIGlwMiA9IGlwYWRkci5JUEFkZHJlc3MoJzEu
MS4xLjI1NScpCisgICAgICAgICMgdGVzdCBhIC8yNCBpcyBzdW1hbXJpemVkIHByb3Blcmx5Cisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtbWFyaXplKGlwMSwgaXAyKVswXSwgaXBhZGRyLklQ
TmV0d29yaygnMS4xLjEuMC8yNCcpKQorICAgICAgICAjIHRlc3QgYW4gIElQdjQgcmFuZ2UgdGhh
dCBpc24ndCBvbiBhIG5ldHdvcmsgYnl0ZSBib3VuZGFyeQorICAgICAgICBpcDIgPSBpcGFkZHIu
SVBBZGRyZXNzKCcxLjEuMS44JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW1tYXJpemUo
aXAxLCBpcDIpLCBbaXBhZGRyLklQTmV0d29yaygnMS4xLjEuMC8yOScpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVBOZXR3b3JrKCcxLjEu
MS44JyldKQorCisgICAgICAgIGlwMSA9IGlwYWRkci5JUEFkZHJlc3MoJzE6OicpCisgICAgICAg
IGlwMiA9IGlwYWRkci5JUEFkZHJlc3MoJzE6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6
ZmZmZicpCisgICAgICAgICMgdGVzdCBhIElQdjYgaXMgc3VtYW1yaXplZCBwcm9wZXJseQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bW1hcml6ZShpcDEsIGlwMilbMF0sIGlwYWRkci5JUE5l
dHdvcmsoJzE6Oi8xNicpKQorICAgICAgICAjIHRlc3QgYW4gSVB2NiByYW5nZSB0aGF0IGlzbid0
IG9uIGEgbmV0d29yayBieXRlIGJvdW5kYXJ5CisgICAgICAgIGlwMiA9IGlwYWRkci5JUEFkZHJl
c3MoJzI6OicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtbWFyaXplKGlwMSwgaXAyKSwg
W2lwYWRkci5JUE5ldHdvcmsoJzE6Oi8xNicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVBOZXR3b3JrKCcyOjovMTI4JyldKQorCisgICAg
ICAgICMgdGVzdCBleGNlcHRpb24gcmFpc2VkIHdoZW4gZmlyc3QgaXMgZ3JlYXRlciB0aGFuIGxh
c3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VtbWFyaXplLCBpcGFk
ZHIuSVBBZGRyZXNzKCcxLjEuMS4wJyksCisgICAgICAgICAgICBpcGFkZHIuSVBBZGRyZXNzKCcx
LjEuMC4wJykpCisgICAgICAgICMgdGVzdCBleGNlcHRpb24gcmFpc2VkIHdoZW4gZmlyc3QgYW5k
IGxhc3QgYXJlbid0IElQIGFkZHJlc3NlcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBl
RXJyb3IsIHN1bW1hcml6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQTmV0
d29yaygnMS4xLjEuMCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVBOZXR3
b3JrKCcxLjEuMC4wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3Vt
bWFyaXplLAorICAgICAgICAgICAgaXBhZGRyLklQTmV0d29yaygnMS4xLjEuMCcpLCBpcGFkZHIu
SVBOZXR3b3JrKCcxLjEuMC4wJykpCisgICAgICAgICMgdGVzdCBleGNlcHRpb24gcmFpc2VkIHdo
ZW4gZmlyc3QgYW5kIGxhc3QgYXJlIG5vdCBzYW1lIHZlcnNpb24KKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoVHlwZUVycm9yLCBzdW1tYXJpemUsIGlwYWRkci5JUEFkZHJlc3MoJzo6JyksCisg
ICAgICAgICAgICBpcGFkZHIuSVBOZXR3b3JrKCcxLjEuMC4wJykpCisKKyAgICBkZWYgdGVzdEFk
ZHJlc3NDb21wYXJpc29uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXBhZGRyLklQ
QWRkcmVzcygnMS4xLjEuMScpIDw9CisgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVBB
ZGRyZXNzKCcxLjEuMS4xJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpcGFkZHIuSVBBZGRy
ZXNzKCcxLjEuMS4xJykgPD0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkci5JUEFkZHJl
c3MoJzEuMS4xLjInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlwYWRkci5JUEFkZHJlc3Mo
Jzo6MScpIDw9IGlwYWRkci5JUEFkZHJlc3MoJzo6MScpKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUoaXBhZGRyLklQQWRkcmVzcygnOjoxJykgPD0gaXBhZGRyLklQQWRkcmVzcygnOjoyJykpCisK
KyAgICBkZWYgdGVzdE5ldHdvcmtDb21wYXJpc29uKHNlbGYpOgorICAgICAgICAjIGlwMSBhbmQg
aXAyIGhhdmUgdGhlIHNhbWUgbmV0d29yayBhZGRyZXNzCisgICAgICAgIGlwMSA9IGlwYWRkci5J
UHY0TmV0d29yaygnMS4xLjEuMC8yNCcpCisgICAgICAgIGlwMiA9IGlwYWRkci5JUHY0TmV0d29y
aygnMS4xLjEuMS8yNCcpCisgICAgICAgIGlwMyA9IGlwYWRkci5JUHY0TmV0d29yaygnMS4xLjIu
MC8yNCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlwMSA8IGlwMykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGlwMyA+IGlwMikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwMS5j
b21wYXJlX25ldHdvcmtzKGlwMiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpcDEuX2dl
dF9uZXR3b3Jrc19rZXkoKSA9PSBpcDIuX2dldF9uZXR3b3Jrc19rZXkoKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChpcDEuY29tcGFyZV9uZXR3b3JrcyhpcDMpLCAtMSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGlwMS5fZ2V0X25ldHdvcmtzX2tleSgpIDwgaXAzLl9nZXRfbmV0d29ya3Nf
a2V5KCkpCisKKyAgICAgICAgaXAxID0gaXBhZGRyLklQdjZOZXR3b3JrKCcyMDAxOjoyMDAwLzk2
JykKKyAgICAgICAgaXAyID0gaXBhZGRyLklQdjZOZXR3b3JrKCcyMDAxOjoyMDAxLzk2JykKKyAg
ICAgICAgaXAzID0gaXBhZGRyLklQdjZOZXR3b3JrKCcyMDAxOmZmZmY6OjIwMDAvOTYnKQorCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpcDEgPCBpcDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShpcDMgPiBpcDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXAxLmNvbXBhcmVfbmV0d29y
a3MoaXAyKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlwMS5fZ2V0X25ldHdvcmtzX2tl
eSgpID09IGlwMi5fZ2V0X25ldHdvcmtzX2tleSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGlwMS5jb21wYXJlX25ldHdvcmtzKGlwMyksIC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
aXAxLl9nZXRfbmV0d29ya3Nfa2V5KCkgPCBpcDMuX2dldF9uZXR3b3Jrc19rZXkoKSkKKworICAg
ICAgICAjIFRlc3QgY29tcGFyaW5nIGRpZmZlcmVudCBwcm90b2NvbHMuCisgICAgICAgICMgU2hv
dWxkIGFsd2F5cyByYWlzZSBhIFR5cGVFcnJvci4KKyAgICAgICAgaXB2NiA9IGlwYWRkci5JUHY2
TmV0d29yaygnOjovMCcpCisgICAgICAgIGlwdjQgPSBpcGFkZHIuSVB2NE5ldHdvcmsoJzAuMC4w
LjAvMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXB2NC5fX2x0X18s
IGlwdjYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXB2NC5fX2d0X18s
IGlwdjYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXB2Ni5fX2x0X18s
IGlwdjQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXB2Ni5fX2d0X18s
IGlwdjQpCisKKyAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGlzc3VlIDE5LgorICAgICAg
ICBpcDEgPSBpcGFkZHIuSVBOZXR3b3JrKCcxMC4xLjIuMTI4LzI1JykKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShpcDEgPCBpcDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXAxID4gaXAx
KQorICAgICAgICBpcDIgPSBpcGFkZHIuSVBOZXR3b3JrKCcxMC4xLjMuMC8yNCcpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShpcDEgPCBpcDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXAy
IDwgaXAxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlwMSA+IGlwMikKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGlwMiA+IGlwMSkKKyAgICAgICAgaXAzID0gaXBhZGRyLklQTmV0d29yaygn
MTAuMS4zLjAvMjUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXAyIDwgaXAzKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKGlwMyA8IGlwMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShp
cDIgPiBpcDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpcDMgPiBpcDIpCisKKyAgICAgICAg
IyBSZWdyZXNzaW9uIHRlc3QgZm9yIGlzc3VlIDI4LgorICAgICAgICBpcDEgPSBpcGFkZHIuSVBO
ZXR3b3JrKCcxMC4xMC4xMC4wLzMxJykKKyAgICAgICAgaXAyID0gaXBhZGRyLklQTmV0d29yaygn
MTAuMTAuMTAuMCcpCisgICAgICAgIGlwMyA9IGlwYWRkci5JUE5ldHdvcmsoJzEwLjEwLjEwLjIv
MzEnKQorICAgICAgICBpcDQgPSBpcGFkZHIuSVBOZXR3b3JrKCcxMC4xMC4xMC4yJykKKyAgICAg
ICAgc29ydGVkID0gW2lwMSwgaXAyLCBpcDMsIGlwNF0KKyAgICAgICAgdW5zb3J0ZWQgPSBbaXAy
LCBpcDQsIGlwMSwgaXAzXQorICAgICAgICB1bnNvcnRlZC5zb3J0KCkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzb3J0ZWQsIHVuc29ydGVkKQorICAgICAgICB1bnNvcnRlZCA9IFtpcDQsIGlw
MSwgaXAzLCBpcDJdCisgICAgICAgIHVuc29ydGVkLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNvcnRlZCwgdW5zb3J0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVF
cnJvciwgaXAxLl9fbHRfXywgaXBhZGRyLklQQWRkcmVzcygnMTAuMTAuMTAuMCcpKQorICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlwMi5fX2x0X18sIGlwYWRkci5JUEFkZHJl
c3MoJzEwLjEwLjEwLjAnKSkKKworICAgICAgICAjIDw9LCA+PQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoaXBhZGRyLklQTmV0d29yaygnMS4xLjEuMScpIDw9CisgICAgICAgICAgICAgICAgICAg
ICAgICBpcGFkZHIuSVBOZXR3b3JrKCcxLjEuMS4xJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShpcGFkZHIuSVBOZXR3b3JrKCcxLjEuMS4xJykgPD0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGlwYWRkci5JUE5ldHdvcmsoJzEuMS4xLjInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShp
cGFkZHIuSVBOZXR3b3JrKCcxLjEuMS4yJykgPD0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlw
YWRkci5JUE5ldHdvcmsoJzEuMS4xLjEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlwYWRk
ci5JUE5ldHdvcmsoJzo6MScpIDw9IGlwYWRkci5JUE5ldHdvcmsoJzo6MScpKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoaXBhZGRyLklQTmV0d29yaygnOjoxJykgPD0gaXBhZGRyLklQTmV0d29y
aygnOjoyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXBhZGRyLklQTmV0d29yaygnOjoy
JykgPD0gaXBhZGRyLklQTmV0d29yaygnOjoxJykpCisKKyAgICBkZWYgdGVzdFN0cmljdE5ldHdv
cmtzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpcGFkZHIu
SVBOZXR3b3JrLCAnMTkyLjE2OC4xLjEvMjQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJpY3Q9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaXBhZGRy
LklQTmV0d29yaywgJzo6MS8xMjAnLCBzdHJpY3Q9VHJ1ZSkKKworICAgIGRlZiB0ZXN0T3Zlcmxh
cHMoc2VsZik6CisgICAgICAgIG90aGVyID0gaXBhZGRyLklQdjROZXR3b3JrKCcxLjIuMy4wLzMw
JykKKyAgICAgICAgb3RoZXIyID0gaXBhZGRyLklQdjROZXR3b3JrKCcxLjIuMi4wLzI0JykKKyAg
ICAgICAgb3RoZXIzID0gaXBhZGRyLklQdjROZXR3b3JrKCcxLjIuMi42NC8yNicpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlwdjQub3ZlcmxhcHMob3RoZXIpKQorICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKHNlbGYuaXB2NC5vdmVybGFwcyhvdGhlcjIpKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUob3RoZXIyLm92ZXJsYXBzKG90aGVyMykpCisKKyAgICBkZWYgdGVzdEVtYmVkZGVk
SXB2NChzZWxmKToKKyAgICAgICAgaXB2NF9zdHJpbmcgPSAnMTkyLjE2OC4wLjEnCisgICAgICAg
IGlwdjQgPSBpcGFkZHIuSVB2NE5ldHdvcmsoaXB2NF9zdHJpbmcpCisgICAgICAgIHY0Y29tcGF0
X2lwdjYgPSBpcGFkZHIuSVB2Nk5ldHdvcmsoJzo6JXMnICUgaXB2NF9zdHJpbmcpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoaW50KHY0Y29tcGF0X2lwdjYuaXApLCBpbnQoaXB2NC5pcCkpCisg
ICAgICAgIHY0bWFwcGVkX2lwdjYgPSBpcGFkZHIuSVB2Nk5ldHdvcmsoJzo6ZmZmZjolcycgJSBp
cHY0X3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2NG1hcHBlZF9pcHY2Lmlw
LCBpcHY0LmlwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhpcGFkZHIuQWRkcmVzc1ZhbHVl
RXJyb3IsIGlwYWRkci5JUHY2TmV0d29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJzIw
MDE6MS4xLjEuMToxLjEuMS4xJykKKworICAgICMgSXNzdWUgNjc6IElQdjYgd2l0aCBlbWJlZGRl
ZCBJUHY0IGFkZHJlc3Mgbm90IHJlY29nbml6ZWQuCisgICAgZGVmIHRlc3RJUHY2QWRkcmVzc1Rv
b0xhcmdlKHNlbGYpOgorICAgICAgICAjIFJGQzQyOTEgMi41LjUuMgorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGlwYWRkci5JUEFkZHJlc3MoJzo6RkZGRjoxOTIuMC4yLjEnKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXBhZGRyLklQQWRkcmVzcygnOjpGRkZGOmMwMDA6MjAxJykpCisg
ICAgICAgICMgUkZDNDI5MSAyLjIgKHBhcnQgMykgeDo6ZC5kLmQuZCAKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChpcGFkZHIuSVBBZGRyZXNzKCdGRkZGOjoxOTIuMC4yLjEnKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXBhZGRyLklQQWRkcmVzcygnRkZGRjo6YzAwMDoyMDEnKSkKKwor
ICAgIGRlZiB0ZXN0SVBWZXJzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYuaXB2NC52ZXJzaW9uLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaXB2Ni52
ZXJzaW9uLCA2KQorCisgICAgZGVmIHRlc3RNYXhQcmVmaXhMZW5ndGgoc2VsZik6CisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pcHY0Lm1heF9wcmVmaXhsZW4sIDMyKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYuaXB2Ni5tYXhfcHJlZml4bGVuLCAxMjgpCisKKyAgICBkZWYg
dGVzdFBhY2tlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmlwdjQucGFj
a2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jYignXHgwMVx4MDJceDAzXHgwNCcpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkci5JUHY0TmV0d29yaygnMjU1LjI1NC4yNTMu
MjUyJykucGFja2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jYignXHhmZlx4ZmVceGZk
XHhmYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaXB2Ni5wYWNrZWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgX2NiKCdceDIwXHgwMVx4MDZceDU4XHgwMlx4MmFceGNhXHhm
ZScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4MDJceDAwXHgwMFx4MDBceDAwXHgw
MFx4MDBceDAxJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyLklQdjZOZXR3b3Jr
KCdmZmZmOjI6Mzo0OmZmZmY6OicpLnBhY2tlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBf
Y2IoJ1x4ZmZceGZmXHgwMFx4MDJceDAwXHgwM1x4MDBceDA0XHhmZlx4ZmYnCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKyAnXHgwMCcgKiA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChpcGFkZHIuSVB2Nk5ldHdvcmsoJzo6MTowOjA6MDowJykucGFja2VkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIF9jYignXHgwMCcgKiA2ICsgJ1x4MDBceDAxJyArICdceDAwJyAqIDgpKQor
CisgICAgZGVmIHRlc3RJcFN0ckZyb21QcmVmaXhsZW4oc2VsZik6CisgICAgICAgIGlwdjQgPSBp
cGFkZHIuSVB2NE5ldHdvcmsoJzEuMi4zLjQvMjQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGlwdjQuX2lwX3N0cmluZ19mcm9tX3ByZWZpeCgpLCAnMjU1LjI1NS4yNTUuMCcpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoaXB2NC5faXBfc3RyaW5nX2Zyb21fcHJlZml4KDI4KSwgJzI1NS4y
NTUuMjU1LjI0MCcpCisKKyAgICBkZWYgdGVzdElwVHlwZShzZWxmKToKKyAgICAgICAgaXB2NG5l
dCA9IGlwYWRkci5JUE5ldHdvcmsoJzEuMi4zLjQnKQorICAgICAgICBpcHY0YWRkciA9IGlwYWRk
ci5JUEFkZHJlc3MoJzEuMi4zLjQnKQorICAgICAgICBpcHY2bmV0ID0gaXBhZGRyLklQTmV0d29y
aygnOjoxLjIuMy40JykKKyAgICAgICAgaXB2NmFkZHIgPSBpcGFkZHIuSVBBZGRyZXNzKCc6OjEu
Mi4zLjQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkci5JUHY0TmV0d29yaywgdHlw
ZShpcHY0bmV0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHIuSVB2NEFkZHJlc3Ms
IHR5cGUoaXB2NGFkZHIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkci5JUHY2TmV0
d29yaywgdHlwZShpcHY2bmV0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHIuSVB2
NkFkZHJlc3MsIHR5cGUoaXB2NmFkZHIpKQorCisgICAgZGVmIHRlc3RSZXNlcnZlZElwdjQoc2Vs
Zik6CisgICAgICAgICMgdGVzdCBuZXR3b3JrcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRy
dWUsIGlwYWRkci5JUE5ldHdvcmsoJzIyNC4xLjEuMS8zMScpLmlzX211bHRpY2FzdCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyLklQTmV0d29yaygnMjQwLjAuMC4wJyku
aXNfbXVsdGljYXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyLklQ
TmV0d29yaygnMTkyLjE2OC4xLjEvMTcnKS5pc19wcml2YXRlKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKEZhbHNlLCBpcGFkZHIuSVBOZXR3b3JrKCcxOTIuMTY5LjAuMCcpLmlzX3ByaXZhdGUp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyLklQTmV0d29yaygnMTAuMjU1
LjI1NS4yNTUnKS5pc19wcml2YXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBp
cGFkZHIuSVBOZXR3b3JrKCcxMS4wLjAuMCcpLmlzX3ByaXZhdGUpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyLklQTmV0d29yaygnMTcyLjMxLjI1NS4yNTUnKS5pc19wcml2
YXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHIuSVBOZXR3b3JrKCcx
NzIuMzIuMC4wJykuaXNfcHJpdmF0ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkci5JUE5ldHdvcmsoJzE2OS4yNTQuMTAw
LjIwMC8yNCcpLmlzX2xpbmtfbG9jYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkci5JUE5ldHdvcmsoJzE2OS4yNTUuMTAw
LjIwMC8yNCcpLmlzX2xpbmtfbG9jYWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVBOZXR3b3JrKCcxMjcuMTAwLjIw
MC4yNTQvMzInKS5pc19sb29wYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBp
cGFkZHIuSVBOZXR3b3JrKCcxMjcuNDIuMC4wLzE2JykuaXNfbG9vcGJhY2spCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkci5JUE5ldHdvcmsoJzEyOC4wLjAuMCcpLmlzX2xv
b3BiYWNrKQorCisgICAgICAgICMgdGVzdCBhZGRyZXNzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChUcnVlLCBpcGFkZHIuSVBBZGRyZXNzKCcyMjQuMS4xLjEnKS5pc19tdWx0aWNhc3QpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkci5JUEFkZHJlc3MoJzI0MC4wLjAu
MCcpLmlzX211bHRpY2FzdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRk
ci5JUEFkZHJlc3MoJzE5Mi4xNjguMS4xJykuaXNfcHJpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChGYWxzZSwgaXBhZGRyLklQQWRkcmVzcygnMTkyLjE2OS4wLjAnKS5pc19wcml2YXRl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkci5JUEFkZHJlc3MoJzEwLjI1
NS4yNTUuMjU1JykuaXNfcHJpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwg
aXBhZGRyLklQQWRkcmVzcygnMTEuMC4wLjAnKS5pc19wcml2YXRlKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKFRydWUsIGlwYWRkci5JUEFkZHJlc3MoJzE3Mi4zMS4yNTUuMjU1JykuaXNfcHJp
dmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyLklQQWRkcmVzcygn
MTcyLjMyLjAuMCcpLmlzX3ByaXZhdGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVBBZGRyZXNzKCcxNjkuMjU0LjEw
MC4yMDAnKS5pc19saW5rX2xvY2FsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHIuSVBBZGRyZXNzKCcxNjkuMjU1LjEwMC4y
MDAnKS5pc19saW5rX2xvY2FsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQQWRkcmVzcygnMTI3LjEwMC4yMDAuMjU0
JykuaXNfbG9vcGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyLklQ
QWRkcmVzcygnMTI3LjQyLjAuMCcpLmlzX2xvb3BiYWNrKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKEZhbHNlLCBpcGFkZHIuSVBBZGRyZXNzKCcxMjguMC4wLjAnKS5pc19sb29wYmFjaykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHIuSVBOZXR3b3JrKCcwLjAuMC4wJyku
aXNfdW5zcGVjaWZpZWQpCisKKyAgICBkZWYgdGVzdFJlc2VydmVkSXB2NihzZWxmKToKKworICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkci5JUE5ldHdvcmsoJ2ZmZmY6OicpLmlz
X211bHRpY2FzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHIuSVBOZXR3
b3JrKDIqKjEyOC0xKS5pc19tdWx0aWNhc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1
ZSwgaXBhZGRyLklQTmV0d29yaygnZmYwMDo6JykuaXNfbXVsdGljYXN0KQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHIuSVBOZXR3b3JrKCdmZGZmOjonKS5pc19tdWx0aWNh
c3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHIuSVBOZXR3b3JrKCdm
ZWNmOjonKS5pc19zaXRlX2xvY2FsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlw
YWRkci5JUE5ldHdvcmsoCisgICAgICAgICAgICAgICAgJ2ZlZmY6ZmZmZjpmZmZmOmZmZmY6Oicp
LmlzX3NpdGVfbG9jYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkci5J
UE5ldHdvcmsoJ2ZiZjpmZmZmOjonKS5pc19zaXRlX2xvY2FsKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKEZhbHNlLCBpcGFkZHIuSVBOZXR3b3JrKCdmZjAwOjonKS5pc19zaXRlX2xvY2FsKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyLklQTmV0d29yaygnZmMwMDo6
JykuaXNfcHJpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHIuSVBO
ZXR3b3JrKAorICAgICAgICAgICAgICAgICdmYzAwOmZmZmY6ZmZmZjpmZmZmOjonKS5pc19wcml2
YXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHIuSVBOZXR3b3JrKCdm
YmZmOmZmZmY6OicpLmlzX3ByaXZhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2Us
IGlwYWRkci5JUE5ldHdvcmsoJ2ZlMDA6OicpLmlzX3ByaXZhdGUpCisKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChUcnVlLCBpcGFkZHIuSVBOZXR3b3JrKCdmZWEwOjonKS5pc19saW5rX2xvY2Fs
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkci5JUE5ldHdvcmsoJ2ZlYmY6
ZmZmZjo6JykuaXNfbGlua19sb2NhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwg
aXBhZGRyLklQTmV0d29yaygnZmU3ZjpmZmZmOjonKS5pc19saW5rX2xvY2FsKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHIuSVBOZXR3b3JrKCdmZWMwOjonKS5pc19saW5r
X2xvY2FsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyLklQTmV0d29y
aygnMDowOjowOjAxJykuaXNfbG9vcGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFs
c2UsIGlwYWRkci5JUE5ldHdvcmsoJzo6MS8xMjcnKS5pc19sb29wYmFjaykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyLklQTmV0d29yaygnOjonKS5pc19sb29wYmFjaykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyLklQTmV0d29yaygnOjoyJyku
aXNfbG9vcGJhY2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHIuSVBO
ZXR3b3JrKCcwOjowJykuaXNfdW5zcGVjaWZpZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
RmFsc2UsIGlwYWRkci5JUE5ldHdvcmsoJzo6MScpLmlzX3Vuc3BlY2lmaWVkKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHIuSVBOZXR3b3JrKCc6Oi8xMjcnKS5pc191bnNw
ZWNpZmllZCkKKworICAgICAgICAjIHRlc3QgYWRkcmVzc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoVHJ1ZSwgaXBhZGRyLklQQWRkcmVzcygnZmZmZjo6JykuaXNfbXVsdGljYXN0KQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkci5JUEFkZHJlc3MoMioqMTI4LTEpLmlz
X211bHRpY2FzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHIuSVBBZGRy
ZXNzKCdmZjAwOjonKS5pc19tdWx0aWNhc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFs
c2UsIGlwYWRkci5JUEFkZHJlc3MoJ2ZkZmY6OicpLmlzX211bHRpY2FzdCkKKworICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkci5JUEFkZHJlc3MoJ2ZlY2Y6OicpLmlzX3NpdGVf
bG9jYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyLklQQWRkcmVzcygK
KyAgICAgICAgICAgICAgICAnZmVmZjpmZmZmOmZmZmY6ZmZmZjo6JykuaXNfc2l0ZV9sb2NhbCkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyLklQQWRkcmVzcygnZmJmOmZm
ZmY6OicpLmlzX3NpdGVfbG9jYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlw
YWRkci5JUEFkZHJlc3MoJ2ZmMDA6OicpLmlzX3NpdGVfbG9jYWwpCisKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChUcnVlLCBpcGFkZHIuSVBBZGRyZXNzKCdmYzAwOjonKS5pc19wcml2YXRlKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkci5JUEFkZHJlc3MoCisgICAgICAg
ICAgICAgICAgJ2ZjMDA6ZmZmZjpmZmZmOmZmZmY6OicpLmlzX3ByaXZhdGUpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkci5JUEFkZHJlc3MoJ2ZiZmY6ZmZmZjo6JykuaXNf
cHJpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyLklQQWRkcmVz
cygnZmUwMDo6JykuaXNfcHJpdmF0ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUs
IGlwYWRkci5JUEFkZHJlc3MoJ2ZlYTA6OicpLmlzX2xpbmtfbG9jYWwpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyLklQQWRkcmVzcygnZmViZjpmZmZmOjonKS5pc19saW5r
X2xvY2FsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHIuSVBBZGRyZXNz
KCdmZTdmOmZmZmY6OicpLmlzX2xpbmtfbG9jYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
RmFsc2UsIGlwYWRkci5JUEFkZHJlc3MoJ2ZlYzA6OicpLmlzX2xpbmtfbG9jYWwpCisKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHIuSVBBZGRyZXNzKCcwOjA6OjA6MDEnKS5p
c19sb29wYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHIuSVBBZGRy
ZXNzKCc6OjEnKS5pc19sb29wYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwg
aXBhZGRyLklQQWRkcmVzcygnOjoyJykuaXNfbG9vcGJhY2spCisKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChUcnVlLCBpcGFkZHIuSVBBZGRyZXNzKCcwOjowJykuaXNfdW5zcGVjaWZpZWQpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkci5JUEFkZHJlc3MoJzo6MScpLmlz
X3Vuc3BlY2lmaWVkKQorCisgICAgICAgICMgc29tZSBnZW5lcmljIElFVEYgcmVzZXJ2ZWQgYWRk
cmVzc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyLklQQWRkcmVzcygn
MTAwOjonKS5pc19yZXNlcnZlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFk
ZHIuSVBOZXR3b3JrKCc0MDAwOjoxLzEyOCcpLmlzX3Jlc2VydmVkKQorCisgICAgZGVmIHRlc3RJ
cHY0TWFwcGVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkci5JUEFkZHJl
c3MoJzo6ZmZmZjoxOTIuMTY4LjEuMScpLmlwdjRfbWFwcGVkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGlwYWRkci5JUEFkZHJlc3MoJzE5Mi4xNjguMS4xJykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoaXBhZGRyLklQQWRkcmVzcygnOjpjMGE4OjEwMScpLmlwdjRfbWFwcGVkLCBOb25l
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkci5JUEFkZHJlc3MoJzo6ZmZmZjpjMGE4
OjEwMScpLmlwdjRfbWFwcGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkci5JUEFk
ZHJlc3MoJzE5Mi4xNjguMS4xJykpCisKKyAgICBkZWYgdGVzdEFkZHJFeGNsdWRlKHNlbGYpOgor
ICAgICAgICBhZGRyMSA9IGlwYWRkci5JUE5ldHdvcmsoJzEwLjEuMS4wLzI0JykKKyAgICAgICAg
YWRkcjIgPSBpcGFkZHIuSVBOZXR3b3JrKCcxMC4xLjEuMC8yNicpCisgICAgICAgIGFkZHIzID0g
aXBhZGRyLklQTmV0d29yaygnMTAuMi4xLjAvMjQnKQorICAgICAgICBhZGRyNCA9IGlwYWRkci5J
UEFkZHJlc3MoJzEwLjEuMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyMS5hZGRy
ZXNzX2V4Y2x1ZGUoYWRkcjIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtpcGFkZHIuSVBO
ZXR3b3JrKCcxMC4xLjEuNjQvMjYnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRy
LklQTmV0d29yaygnMTAuMS4xLjEyOC8yNScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
VmFsdWVFcnJvciwgYWRkcjEuYWRkcmVzc19leGNsdWRlLCBhZGRyMykKKyAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhZGRyMS5hZGRyZXNzX2V4Y2x1ZGUsIGFkZHI0KQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZHIxLmFkZHJlc3NfZXhjbHVkZShhZGRyMSksIFtdKQor
CisgICAgZGVmIHRlc3RIYXNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2go
aXBhZGRyLklQTmV0d29yaygnMTAuMS4xLjAvMjQnKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhhc2goaXBhZGRyLklQTmV0d29yaygnMTAuMS4xLjAvMjQnKSkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoaGFzaChpcGFkZHIuSVBBZGRyZXNzKCcxMC4xLjEuMCcpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGFzaChpcGFkZHIuSVBBZGRyZXNzKCcxMC4xLjEuMCcpKSkKKyAg
ICAgICAgIyBpNzAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGlwYWRkci5JUEFkZHJl
c3MoJzEuMi4zLjQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2goaXBhZGRyLklQ
QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgbG9uZyhpcGFkZHIuSVBBZGRyZXNzKCcxLjIu
My40JykuX2lwKSkpKQorICAgICAgICBpcDEgPSBpcGFkZHIuSVBBZGRyZXNzKCcxMC4xLjEuMCcp
CisgICAgICAgIGlwMiA9IGlwYWRkci5JUEFkZHJlc3MoJzE6OicpCisgICAgICAgIGR1bW15ID0g
e30KKyAgICAgICAgZHVtbXlbc2VsZi5pcHY0XSA9IE5vbmUKKyAgICAgICAgZHVtbXlbc2VsZi5p
cHY2XSA9IE5vbmUKKyAgICAgICAgZHVtbXlbaXAxXSA9IE5vbmUKKyAgICAgICAgZHVtbXlbaXAy
XSA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXB2NCBpbiBkdW1teSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGlwMiBpbiBkdW1teSkKKworICAgIGRlZiB0ZXN0Q29weUNv
bnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBhZGRyMSA9IGlwYWRkci5JUE5ldHdvcmsoJzEwLjEu
MS4wLzI0JykKKyAgICAgICAgYWRkcjIgPSBpcGFkZHIuSVBOZXR3b3JrKGFkZHIxKQorICAgICAg
ICBhZGRyMyA9IGlwYWRkci5JUE5ldHdvcmsoJzIwMDE6NjU4OjIyYTpjYWZlOjIwMDo6MS82NCcp
CisgICAgICAgIGFkZHI0ID0gaXBhZGRyLklQTmV0d29yayhhZGRyMykKKyAgICAgICAgYWRkcjUg
PSBpcGFkZHIuSVB2NEFkZHJlc3MoJzEuMS4xLjEnKQorICAgICAgICBhZGRyNiA9IGlwYWRkci5J
UHY2QWRkcmVzcygnMjAwMTo2NTg6MjJhOmNhZmU6MjAwOjoxJykKKworICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGFkZHIxLCBhZGRyMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyMywg
YWRkcjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkcjUsIGlwYWRkci5JUHY0QWRkcmVz
cyhhZGRyNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkcjYsIGlwYWRkci5JUHY2QWRk
cmVzcyhhZGRyNikpCisKKyAgICBkZWYgdGVzdENvbXByZXNzSVB2NkFkZHJlc3Moc2VsZik6Cisg
ICAgICAgIHRlc3RfYWRkcmVzc2VzID0geworICAgICAgICAgICAgJzE6MjozOjQ6NTo2Ojc6OCc6
ICcxOjI6Mzo0OjU6Njo3OjgvMTI4JywKKyAgICAgICAgICAgICcyMDAxOjA6MDo0OjA6MDowOjgn
OiAnMjAwMTowOjA6NDo6OC8xMjgnLAorICAgICAgICAgICAgJzIwMDE6MDowOjQ6NTo2Ojc6OCc6
ICcyMDAxOjo0OjU6Njo3OjgvMTI4JywKKyAgICAgICAgICAgICcyMDAxOjA6Mzo0OjU6Njo3Ojgn
OiAnMjAwMTowOjM6NDo1OjY6Nzo4LzEyOCcsCisgICAgICAgICAgICAnMjAwMTowOjM6NDo1OjY6
Nzo4JzogJzIwMDE6MDozOjQ6NTo2Ojc6OC8xMjgnLAorICAgICAgICAgICAgJzA6MDozOjA6MDow
OjA6ZmZmZic6ICcwOjA6Mzo6ZmZmZi8xMjgnLAorICAgICAgICAgICAgJzA6MDowOjQ6MDowOjA6
ZmZmZic6ICc6OjQ6MDowOjA6ZmZmZi8xMjgnLAorICAgICAgICAgICAgJzA6MDowOjA6NTowOjA6
ZmZmZic6ICc6OjU6MDowOmZmZmYvMTI4JywKKyAgICAgICAgICAgICcxOjA6MDo0OjA6MDo3Ojgn
OiAnMTo6NDowOjA6Nzo4LzEyOCcsCisgICAgICAgICAgICAnMDowOjA6MDowOjA6MDowJzogJzo6
LzEyOCcsCisgICAgICAgICAgICAnMDowOjA6MDowOjA6MDowLzAnOiAnOjovMCcsCisgICAgICAg
ICAgICAnMDowOjA6MDowOjA6MDoxJzogJzo6MS8xMjgnLAorICAgICAgICAgICAgJzIwMDE6MDY1
ODowMjJhOmNhZmU6MDAwMDowMDAwOjAwMDA6MDAwMC82Nic6CisgICAgICAgICAgICAnMjAwMTo2
NTg6MjJhOmNhZmU6Oi82NicsCisgICAgICAgICAgICAnOjoxLjIuMy40JzogJzo6MTAyOjMwNC8x
MjgnLAorICAgICAgICAgICAgJzE6MjozOjQ6NTpmZmZmOjEuMi4zLjQnOiAnMToyOjM6NDo1OmZm
ZmY6MTAyOjMwNC8xMjgnLAorICAgICAgICAgICAgJzo6Nzo2OjU6NDozOjI6MSc6ICcwOjc6Njo1
OjQ6MzoyOjEvMTI4JywKKyAgICAgICAgICAgICc6Ojc6Njo1OjQ6MzoyOjAnOiAnMDo3OjY6NTo0
OjM6MjowLzEyOCcsCisgICAgICAgICAgICAnNzo2OjU6NDozOjI6MTo6JzogJzc6Njo1OjQ6Mzoy
OjE6MC8xMjgnLAorICAgICAgICAgICAgJzA6Njo1OjQ6MzoyOjE6Oic6ICcwOjY6NTo0OjM6Mjox
OjAvMTI4JywKKyAgICAgICAgICAgIH0KKyAgICAgICAgZm9yIHVuY29tcHJlc3NlZCwgY29tcHJl
c3NlZCBpbiB0ZXN0X2FkZHJlc3Nlcy5pdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChjb21wcmVzc2VkLCBzdHIoaXBhZGRyLklQdjZOZXR3b3JrKHVuY29tcHJlc3NlZCkpKQor
CisgICAgZGVmIHRlc3RFeHBsb2RlU2hvcnRIYW5kSXBTdHIoc2VsZik6CisgICAgICAgIGFkZHIx
ID0gaXBhZGRyLklQdjZOZXR3b3JrKCcyMDAxOjoxJykKKyAgICAgICAgYWRkcjIgPSBpcGFkZHIu
SVB2NkFkZHJlc3MoJzIwMDE6MDo1ZWY1Ojc5ZmQ6MDo1OWQ6YTBlNTpiYTEnKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCcyMDAxOjAwMDA6MDAwMDowMDAwOjAwMDA6MDAwMDowMDAwOjAwMDEv
MTI4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyMS5leHBsb2RlZCkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnMDAwMDowMDAwOjAwMDA6MDAwMDowMDAwOjAwMDA6MDAwMDowMDAx
LzEyOCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQdjZOZXR3b3JrKCc6OjEv
MTI4JykuZXhwbG9kZWQpCisgICAgICAgICMgaXNzdWUgNzcKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnMjAwMTowMDAwOjVlZjU6NzlmZDowMDAwOjA1OWQ6YTBlNTowYmExJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRyMi5leHBsb2RlZCkKKworICAgIGRlZiB0ZXN0SW50UmVwcmVz
ZW50YXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTY5MDkwNjAsIGludChz
ZWxmLmlwdjQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyNTQwNjE2ODI5MTgyNDY5NDMz
NTQ3NzYyNDgyMDk3OTQ2NjI1LCBpbnQoc2VsZi5pcHY2KSkKKworICAgIGRlZiB0ZXN0SGV4UmVw
cmVzZW50YXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4KDB4MTAyMDMw
NCksCisgICAgICAgICAgICAgICAgICAgICAgICAgaGV4KHNlbGYuaXB2NCkpCisKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChoZXgoMHgyMDAxMDY1ODAyMkFDQUZFMDIwMDAwMDAwMDAwMDAwMSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgaGV4KHNlbGYuaXB2NikpCisKKyAgICAjIGJhY2t3
YXJkcyBjb21wYXRpYmlsaXR5CisgICAgZGVmIHRlc3RCYWNrd2FyZHNDb21wYWJpbGl0eShzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHIuQ29sbGFwc2VBZGRyTGlzdCgKKyAg
ICAgICAgICAgIFtpcGFkZHIuSVBOZXR3b3JrKCcxLjEuMC4wLzI0JyksIGlwYWRkci5JUE5ldHdv
cmsoJzEuMS4xLjAvMjQnKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtpcGFkZHIuSVBO
ZXR3b3JrKCcxLjEuMC4wLzIzJyldKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRy
LklQTmV0d29yaygnOjo0MjowLzExMicpLkFkZHJlc3NFeGNsdWRlKAorICAgICAgICAgICAgaXBh
ZGRyLklQTmV0d29yaygnOjo0Mjo4MDAwLzExMycpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBbaXBhZGRyLklQTmV0d29yaygnOjo0MjowLzExMycpXSkKKworICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoaXBhZGRyLklQTmV0d29yaygnMTo6LzgnKS5Db21wYXJlTmV0d29ya3MoCisgICAgICAg
ICAgICBpcGFkZHIuSVBOZXR3b3JrKCcyOjovOScpKSA8IDApCisKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChpcGFkZHIuSVBOZXR3b3JrKCcxOjovMTYnKS5Db250YWlucygKKyAgICAgICAgICAg
IGlwYWRkci5JUE5ldHdvcmsoJzI6Oi8xNicpKSwgRmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChpcGFkZHIuSVBOZXR3b3JrKCcwLjAuMC4wLzAnKS5TdWJuZXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBbaXBhZGRyLklQTmV0d29yaygnMC4wLjAuMC8xJyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlwYWRkci5JUE5ldHdvcmsoJzEyOC4wLjAuMC8xJyldKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkci5JUE5ldHdvcmsoJzo6LzEyNycpLlN1Ym5ldCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgIFtpcGFkZHIuSVBOZXR3b3JrKCc6Oi8xMjgnKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQTmV0d29yaygnOjoxLzEyOCcpXSkK
KworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkci5JUE5ldHdvcmsoJzEuMC4wLjAvMzIn
KS5TdXBlcm5ldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkci5JUE5ldHdvcmso
JzEuMC4wLjAvMzEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHIuSVBOZXR3b3Jr
KCc6Oi8xMjEnKS5TdXBlcm5ldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkci5J
UE5ldHdvcmsoJzo6LzEyMCcpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyLklQ
TmV0d29yaygnMTAuMC4wLjInKS5Jc1JGQzE5MTgoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChpcGFkZHIuSVBOZXR3b3JrKCcxMC4wLjAuMCcpLklzTXVsdGljYXN0KCksIEZhbHNl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkci5JUE5ldHdvcmsoJzEyNy4yNTUuMjU1
LjI1NScpLklzTG9vcGJhY2soKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFk
ZHIuSVBOZXR3b3JrKCcxNjkuMjU1LjI1NS4yNTUnKS5Jc0xpbmtMb2NhbCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIEZhbHNlKQorCisgICAgZGVmIHRlc3RGb3JjZVZlcnNpb24oc2VsZik6
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyLklQTmV0d29yaygxKS52ZXJzaW9uLCA0
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkci5JUE5ldHdvcmsoMSwgdmVyc2lvbj02
KS52ZXJzaW9uLCA2KQorCisgICAgZGVmIHRlc3RXaXRoU3RhcihzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzdHIoc2VsZi5pcHY0LndpdGhfcHJlZml4bGVuKSwgIjEuMi4zLjQvMjQi
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLmlwdjQud2l0aF9uZXRtYXNrKSwg
IjEuMi4zLjQvMjU1LjI1NS4yNTUuMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNl
bGYuaXB2NC53aXRoX2hvc3RtYXNrKSwgIjEuMi4zLjQvMC4wLjAuMjU1IikKKworICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLmlwdjYud2l0aF9wcmVmaXhsZW4pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICcyMDAxOjY1ODoyMmE6Y2FmZToyMDA6OjEvNjQnKQorICAgICAgICAj
IHJmYzM1MTMgc2VjIDIuMyBzYXlzIHRoYXQgaXB2NiBvbmx5IHVzZXMgY2lkciBub3RhdGlvbiBm
b3IKKyAgICAgICAgIyBzdWJuZXRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNlbGYu
aXB2Ni53aXRoX25ldG1hc2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICcyMDAxOjY1ODoy
MmE6Y2FmZToyMDA6OjEvNjQnKQorICAgICAgICAjIHRoaXMgcHJvYmFibHkgZG9uJ3QgbWFrZSBt
dWNoIHNlbnNlLCBidXQgaXQncyBpbmNsdWRlZCBmb3IKKyAgICAgICAgIyBjb21wYXRpYmlsaXR5
IHdpdGggaXB2NAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLmlwdjYud2l0aF9o
b3N0bWFzayksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzIwMDE6NjU4OjIyYTpjYWZlOjIw
MDo6MS86OmZmZmY6ZmZmZjpmZmZmOmZmZmYnKQorCisgICAgZGVmIHRlc3ROZXR3b3JrRWxlbWVu
dENhY2hpbmcoc2VsZik6CisgICAgICAgICMgVjQgLSBtYWtlIHN1cmUgd2UncmUgZW1wdHkKKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmlwdjQuX2NhY2hlLmhhc19rZXkoJ25ldHdvcmsn
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmlwdjQuX2NhY2hlLmhhc19rZXkoJ2Jy
b2FkY2FzdCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuaXB2NC5fY2FjaGUuaGFz
X2tleSgnaG9zdG1hc2snKSkKKworICAgICAgICAjIFY0IC0gcG9wdWxhdGUgYW5kIHRlc3QKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmlwdjQubmV0d29yaywgaXBhZGRyLklQdjRBZGRy
ZXNzKCcxLjIuMy4wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pcHY0LmJyb2Fk
Y2FzdCwgaXBhZGRyLklQdjRBZGRyZXNzKCcxLjIuMy4yNTUnKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLmlwdjQuaG9zdG1hc2ssIGlwYWRkci5JUHY0QWRkcmVzcygnMC4wLjAuMjU1
JykpCisKKyAgICAgICAgIyBWNCAtIGNoZWNrIHdlJ3JlIGNhY2hlZAorICAgICAgICBzZWxmLmFz
c2VydFRydWUoc2VsZi5pcHY0Ll9jYWNoZS5oYXNfa2V5KCduZXR3b3JrJykpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShzZWxmLmlwdjQuX2NhY2hlLmhhc19rZXkoJ2Jyb2FkY2FzdCcpKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pcHY0Ll9jYWNoZS5oYXNfa2V5KCdob3N0bWFzaycp
KQorCisgICAgICAgICMgVjYgLSBtYWtlIHN1cmUgd2UncmUgZW1wdHkKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShzZWxmLmlwdjYuX2NhY2hlLmhhc19rZXkoJ25ldHdvcmsnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZShzZWxmLmlwdjYuX2NhY2hlLmhhc19rZXkoJ2Jyb2FkY2FzdCcpKQor
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuaXB2Ni5fY2FjaGUuaGFzX2tleSgnaG9zdG1h
c2snKSkKKworICAgICAgICAjIFY2IC0gcG9wdWxhdGUgYW5kIHRlc3QKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWxmLmlwdjYubmV0d29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICBp
cGFkZHIuSVB2NkFkZHJlc3MoJzIwMDE6NjU4OjIyYTpjYWZlOjonKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWxmLmlwdjYuYnJvYWRjYXN0LCBpcGFkZHIuSVB2NkFkZHJlc3MoCisgICAg
ICAgICAgICAnMjAwMTo2NTg6MjJhOmNhZmU6ZmZmZjpmZmZmOmZmZmY6ZmZmZicpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaXB2Ni5ob3N0bWFzaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBpcGFkZHIuSVB2NkFkZHJlc3MoJzo6ZmZmZjpmZmZmOmZmZmY6ZmZmZicpKQorCisg
ICAgICAgICMgVjYgLSBjaGVjayB3ZSdyZSBjYWNoZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHNlbGYuaXB2Ni5fY2FjaGUuaGFzX2tleSgnbmV0d29yaycpKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoc2VsZi5pcHY2Ll9jYWNoZS5oYXNfa2V5KCdicm9hZGNhc3QnKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKHNlbGYuaXB2Ni5fY2FjaGUuaGFzX2tleSgnaG9zdG1hc2snKSkKKworICAg
IGRlZiB0ZXN0VGVyZWRvKHNlbGYpOgorICAgICAgICAjIHN0b2xlbiBmcm9tIHdpa2lwZWRpYQor
ICAgICAgICBzZXJ2ZXIgPSBpcGFkZHIuSVB2NEFkZHJlc3MoJzY1LjU0LjIyNy4xMjAnKQorICAg
ICAgICBjbGllbnQgPSBpcGFkZHIuSVB2NEFkZHJlc3MoJzE5Mi4wLjIuNDUnKQorICAgICAgICB0
ZXJlZG9fYWRkciA9ICcyMDAxOjAwMDA6NDEzNjplMzc4OjgwMDA6NjNiZjozZmZmOmZkZDInCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHNlcnZlciwgY2xpZW50KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBpcGFkZHIuSVBBZGRyZXNzKHRlcmVkb19hZGRyKS50ZXJlZG8pCisgICAgICAg
IGJhZF9hZGRyID0gJzIwMDA6OjQxMzY6ZTM3ODo4MDAwOjYzYmY6M2ZmZjpmZGQyJworICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKGlwYWRkci5JUEFkZHJlc3MoYmFkX2FkZHIpLnRlcmVkbykKKyAg
ICAgICAgYmFkX2FkZHIgPSAnMjAwMTowMDAxOjQxMzY6ZTM3ODo4MDAwOjYzYmY6M2ZmZjpmZGQy
JworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlwYWRkci5JUEFkZHJlc3MoYmFkX2FkZHIpLnRl
cmVkbykKKworICAgICAgICAjIGk3NworICAgICAgICB0ZXJlZG9fYWRkciA9IGlwYWRkci5JUHY2
QWRkcmVzcygnMjAwMTowOjVlZjU6NzlmZDowOjU5ZDphMGU1OmJhMScpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoKGlwYWRkci5JUHY0QWRkcmVzcygnOTQuMjQ1LjEyMS4yNTMnKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLklQdjRBZGRyZXNzKCc5NS4yNi4yNDQuOTQnKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgdGVyZWRvX2FkZHIudGVyZWRvKQorCisKKyAgICBk
ZWYgdGVzdHNpeHRvZm91cihzZWxmKToKKyAgICAgICAgc2l4dG9mb3VyYWRkciA9IGlwYWRkci5J
UEFkZHJlc3MoJzIwMDI6YWMxZDoyZDY0OjoxJykKKyAgICAgICAgYmFkX2FkZHIgPSBpcGFkZHIu
SVBBZGRyZXNzKCcyMDAwOmFjMWQ6MmQ2NDo6MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
aXBhZGRyLklQdjRBZGRyZXNzKCcxNzIuMjkuNDUuMTAwJyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l4dG9mb3VyYWRkci5zaXh0b2ZvdXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
YmFkX2FkZHIuc2l4dG9mb3VyKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
dW5pdHRlc3QubWFpbigpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9XZWJQYWdlUmVwbGF5
L3RoaXJkX3BhcnR5L2lwYWRkci9pcGFkZHJfdGVzdC5weQpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5
L2lwYWRkci9zZXR1cC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJk
X3BhcnR5L2lwYWRkci9zZXR1cC5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBs
YXkvdGhpcmRfcGFydHkvaXBhZGRyL3NldHVwLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2
IEBACisjIS91c3IvYmluL3B5dGhvbgorIworIyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLgor
IworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T
RS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp
cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMg
U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
c3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworZnJvbSBkaXN0
dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKKworaW1wb3J0IGlwYWRkcgorCisKK3NldHVwKG5hbWU9
J2lwYWRkcicsCisgICAgICBtYWludGFpbmVyPSdHb29nbGUnLAorICAgICAgbWFpbnRhaW5lcl9l
bWFpbD0naXBhZGRyLXB5LWRldkBnb29nbGVncm91cHMuY29tJywKKyAgICAgIHZlcnNpb249aXBh
ZGRyLl9fdmVyc2lvbl9fLAorICAgICAgdXJsPSdodHRwOi8vY29kZS5nb29nbGUuY29tL3AvaXBh
ZGRyLXB5LycsCisgICAgICBsaWNlbnNlPSdBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAnLAor
ICAgICAgY2xhc3NpZmllcnM9WworICAgICAgICAgICdEZXZlbG9wbWVudCBTdGF0dXMgOjogNSAt
IFByb2R1Y3Rpb24vU3RhYmxlJywKKyAgICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2
ZWxvcGVycycsCisgICAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEFwYWNoZSBT
b2Z0d2FyZSBMaWNlbnNlJywKKyAgICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRl
cGVuZGVudCcsCisgICAgICAgICAgJ1RvcGljIDo6IEludGVybmV0JywKKyAgICAgICAgICAnVG9w
aWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzJywKKyAgICAgICAgICAnVG9w
aWMgOjogU3lzdGVtIDo6IE5ldHdvcmtpbmcnXSwKKyAgICAgIHB5X21vZHVsZXM9WydpcGFkZHIn
XSkKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkv
aXBhZGRyL3NldHVwLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoK
SW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvaXBhZGRyL3Rlc3QtMnRvMy5z
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2lwYWRkci90
ZXN0LTJ0bzMuc2gJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3Bh
cnR5L2lwYWRkci90ZXN0LTJ0bzMuc2gJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKyMh
L2Jpbi9zaAorCisjIENvbnZlcnRzIHRoZSBweXRob24yIGlwYWRkciBmaWxlcyB0byBweXRob24z
IGFuZCBydW5zIHRoZSB1bml0IHRlc3RzCisjIHdpdGggYm90aCBweXRob24gdmVyc2lvbnMuCisK
K21rZGlyIC1wIDJ0bzNvdXRwdXQgJiYgXAorY3AgLWYgKi5weSAydG8zb3V0cHV0ICYmIFwKKygg
Y2QgMnRvM291dHB1dCAmJiAydG8zIC4gfCBwYXRjaCAtcDAgKSAmJiBcCitweTN2ZXJzaW9uPSQo
cHl0aG9uMyAtLXZlcnNpb24gMj4mMSkgJiYgXAorZWNobyAtZSAiXG5UZXN0aW5nIHdpdGggJHtw
eTN2ZXJzaW9ufSIgJiYgXAorcHl0aG9uMyAydG8zb3V0cHV0L2lwYWRkcl90ZXN0LnB5ICYmIFwK
K3JtIC1yIDJ0bzNvdXRwdXQgJiYgXAorcHl2ZXJzaW9uPSQocHl0aG9uIC0tdmVyc2lvbiAyPiYx
KSAmJiBcCitlY2hvIC1lICJcblRlc3Rpbmcgd2l0aCAke3B5dmVyc2lvbn0iICYmIFwKKy4vaXBh
ZGRyX3Rlc3QucHkKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhp
cmRfcGFydHkvaXBhZGRyL3Rlc3QtMnRvMy5zaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQogICArICoKCkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0
cC9MSUNFTlNFCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkv
bmJodHRwL0xJQ0VOU0UJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJk
X3BhcnR5L25iaHR0cC9MSUNFTlNFCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5IEBACitDb3B5
cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJrIE5vdHRpbmdoYW0KKworUGVybWlzc2lvbiBpcyBoZXJl
YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29w
eQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0
aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0
aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29w
eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29y
IHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3
aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo
aXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Ig
c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMg
UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP
UgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg
Tk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJ
R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJ
QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX
SVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU
V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCkluZGV4
OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0cC9SRUFETUUud2ViLXBhZ2Ut
cmVwbGF5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJo
dHRwL1JFQURNRS53ZWItcGFnZS1yZXBsYXkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdl
UmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0cC9SRUFETUUud2ViLXBhZ2UtcmVwbGF5CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUgQEAKK1NvdXJjZSBjb2RlIGhvbWU6IGh0dHBzOi8vZ2l0aHViLmNv
bS9tbm90L25iaHR0cC5naXQKKyAgY29tbWl0ICAzZjVkOWI0ZjM4YzY1NzkxOTljYgorICB0cmVl
ICAgIDQ3YjNlOTkwOWJmNjMzYTA5OGZiCisgIHBhcmVudCAgNTliNzc5M2VmNzBmNGZjZjQ2YWQK
K1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGZpbGVzIG9ubHkgZnJvbSBuYmh0dHAvc3JjIGRpcmVj
dG9yeS4gUGxlYXNlIHNlZSBlYWNoIGZpbGUgaGVhZGVyIG9yIExJQ0VOU0UgZmlsZSAod2hpY2gg
aXMgZXh0cmFjdGVkIGZyb20gZmlsZSBoZWFkZXJzKSBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4K
SW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJodHRwL19faW5pdF9fLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJodHRwL19f
aW5pdF9fLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0
eS9uYmh0dHAvX19pbml0X18ucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorCisiIiIKK05vbi1ibG9ja2luZyBIVFRQIGNvbXBvbmVudHMuCisi
IiIKKworZnJvbSBjbGllbnQgaW1wb3J0IENsaWVudAorZnJvbSBzZXJ2ZXIgaW1wb3J0IFNlcnZl
cgorZnJvbSBwdXNoX3RjcCBpbXBvcnQgcnVuLCBzdG9wLCBzY2hlZHVsZQorZnJvbSBodHRwX2Nv
bW1vbiBpbXBvcnQgZHVtbXksIGhlYWRlcl9kaWN0LCBnZXRfaGRyLCBcCisgICAgc2FmZV9tZXRo
b2RzLCBpZGVtcG90ZW50X21ldGhvZHMsIGhvcF9ieV9ob3BfaGRycwpJbmRleDogVG9vbHMvV2Vi
UGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvY196bGliLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJodHRwL2NfemxpYi5weQkocmV2aXNpb24g
MCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJodHRwL2NfemxpYi5weQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisi
IiIKK2NfemxpYiAtIHpsaWIgZm9yIFB5dGhvbiB1c2luZyBjdHlwZXMuCisKK1RoaXMgaXMgYSBx
dWljayBhbmQgbmFzdHkgaW1wbGVtZW50YXRpb24gb2YgemxpYiB1c2luZyBQeXRob24gY3R5cGVz
LCBpbiBvcmRlcgordG8gZXhwb3NlIHRoZSBhYmlsaXR5IHRvIHNldCBhIGNvbXByZXNzaW9uIGRp
Y3Rpb25hcnkgKHdoaWNoIGlzbid0IGF2YWlsYWJsZQoraW4gdGhlIHpsaWIgbW9kdWxlKS4KKyIi
IgorCitfX2xpY2Vuc2VfXyA9ICIiIgorQ29weXJpZ2h0IChjKSAyMDA5IE1hcmsgTm90dGluZ2hh
bSA8bW5vdEBwb2JveC5jb20+CisgCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl
IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3
YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwg
dG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3
aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl
LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9m
IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJl
IGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zOgorIAorVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu
b3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y
dGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIAorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ
UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElO
Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO
VC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF
IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBG
Uk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT
RSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKK1NPRlRXQVJFLgorIiIiCisKKworaW1wb3J0IGN0
eXBlcyBhcyBDCitmcm9tIGN0eXBlcyBpbXBvcnQgdXRpbAorCitfemxpYiA9IEMuY2RsbC5Mb2Fk
TGlicmFyeSh1dGlsLmZpbmRfbGlicmFyeSgnbGlieicpKQorCitjbGFzcyBfel9zdHJlYW0oQy5T
dHJ1Y3R1cmUpOgorICAgIF9maWVsZHNfID0gWworICAgICAgICAoIm5leHRfaW4iLCBDLlBPSU5U
RVIoQy5jX3VieXRlKSksCisgICAgICAgICgiYXZhaWxfaW4iLCBDLmNfdWludCksCisgICAgICAg
ICgidG90YWxfaW4iLCBDLmNfdWxvbmcpLAorICAgICAgICAoIm5leHRfb3V0IiwgQy5QT0lOVEVS
KEMuY191Ynl0ZSkpLAorICAgICAgICAoImF2YWlsX291dCIsIEMuY191aW50KSwKKyAgICAgICAg
KCJ0b3RhbF9vdXQiLCBDLmNfdWxvbmcpLAorICAgICAgICAoIm1zZyIsIEMuY19jaGFyX3ApLAor
ICAgICAgICAoInN0YXRlIiwgQy5jX3ZvaWRfcCksCisgICAgICAgICgiemFsbG9jIiwgQy5jX3Zv
aWRfcCksCisgICAgICAgICgiemZyZWUiLCBDLmNfdm9pZF9wKSwKKyAgICAgICAgKCJvcGFxdWUi
LCBDLmNfdm9pZF9wKSwKKyAgICAgICAgKCJkYXRhX3R5cGUiLCBDLmNfaW50KSwKKyAgICAgICAg
KCJhZGxlciIsIEMuY191bG9uZyksCisgICAgICAgICgicmVzZXJ2ZWQiLCBDLmNfdWxvbmcpLAor
ICAgICAgICAKKyAgICBdCisKKyMgVE9ETzogZ2V0IHpsaWIgdmVyc2lvbiB3aXRoIGN0eXBlcwor
WkxJQl9WRVJTSU9OID0gQy5jX2NoYXJfcCgiMS4yLjMiKQorWl9OVUxMID0gMHgwMAorWl9PSyA9
IDB4MDAKK1pfU1RSRUFNX0VORCA9IDB4MDEKK1pfTkVFRF9ESUNUID0gMHgwMgorWl9CVUZfRVJS
ID0gLTB4MDUKKworWl9OT19GTFVTSCA9IDB4MDAKK1pfU1lOQ19GTFVTSCA9IDB4MDIKK1pfRklO
SVNIID0gMHgwNAorCitDSFVOSyA9IDEwMjQgKiAxMjggICMgRklYTUU6IG5lZWQgdG8gYmUgc21h
cnRlciB0aGFuIHRoaXMuCisKK2NsYXNzIENvbXByZXNzb3I6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGxldmVsPS0xLCBkaWN0aW9uYXJ5PU5vbmUpOgorICAgICAgICBzZWxmLmxldmVsID0gbGV2
ZWwKKyAgICAgICAgc2VsZi5zdCA9IF96X3N0cmVhbSgpCisgICAgICAgIGVyciA9IF96bGliLmRl
ZmxhdGVJbml0XyhDLmJ5cmVmKHNlbGYuc3QpLCBzZWxmLmxldmVsLCBaTElCX1ZFUlNJT04sIEMu
c2l6ZW9mKHNlbGYuc3QpKQorICAgICAgICBhc3NlcnQgZXJyID09IFpfT0ssIGVyciAjIEZJWE1F
OiBzcGVjaWZpYyBlcnJvcgorICAgICAgICBpZiBkaWN0aW9uYXJ5OgorICAgICAgICAgICAgZXJy
ID0gX3psaWIuZGVmbGF0ZVNldERpY3Rpb25hcnkoCisgICAgICAgICAgICAgICAgQy5ieXJlZihz
ZWxmLnN0KSwKKyAgICAgICAgICAgICAgICBDLmNhc3QoQy5jX2NoYXJfcChkaWN0aW9uYXJ5KSwg
Qy5QT0lOVEVSKEMuY191Ynl0ZSkpLAorICAgICAgICAgICAgICAgIGxlbihkaWN0aW9uYXJ5KQor
ICAgICAgICAgICAgKQorICAgICAgICAgICAgYXNzZXJ0IGVyciA9PSBaX09LLCBlcnIgIyBGSVhN
RTogbW9yZSBzcGVjaWZpYyBlcnJvcgorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGlucHV0KToK
KyAgICAgICAgb3V0YnVmID0gQy5jcmVhdGVfc3RyaW5nX2J1ZmZlcihDSFVOSykKKyAgICAgICAg
c2VsZi5zdC5hdmFpbF9pbiAgPSBsZW4oaW5wdXQpCisgICAgICAgIHNlbGYuc3QubmV4dF9pbiAg
ID0gQy5jYXN0KEMuY19jaGFyX3AoaW5wdXQpLCBDLlBPSU5URVIoQy5jX3VieXRlKSkKKyAgICAg
ICAgc2VsZi5zdC5uZXh0X291dCAgPSBDLmNhc3Qob3V0YnVmLCBDLlBPSU5URVIoQy5jX3VieXRl
KSkKKyAgICAgICAgc2VsZi5zdC5hdmFpbF9vdXQgPSBDSFVOSworICAgICAgICBlcnIgPSBfemxp
Yi5kZWZsYXRlKEMuYnlyZWYoc2VsZi5zdCksIFpfU1lOQ19GTFVTSCkKKyAgICAgICAgaWYgZXJy
IGluIFtaX09LLCBaX1NUUkVBTV9FTkRdOgorICAgICAgICAgICAgcmV0dXJuIG91dGJ1Zls6Q0hV
Tkstc2VsZi5zdC5hdmFpbF9vdXRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBB
c3NlcnRpb25FcnJvciwgZXJyICMgRklYTUU6IG1vcmUgc3BlY2lmaWMgZXJyb3JzPworCisgICAg
ZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIGVyciA9IF96bGliLmRlZmxhdGVFbmQoQy5ieXJl
ZihzZWxmLnN0KSkKKyAgICAgICAgI2Fzc2VydCBlcnIgPT0gWl9PSywgZXJyICMgRklYTUU6IG1v
cmUgc3BlY2lmaWMgZXJyb3IKKworICAgIAorY2xhc3MgRGVjb21wcmVzc29yOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBkaWN0aW9uYXJ5PU5vbmUpOgorICAgICAgICBzZWxmLmRpY3Rpb25hcnkg
PSBkaWN0aW9uYXJ5CisgICAgICAgIHNlbGYuc3QgPSBfel9zdHJlYW0oKQorICAgICAgICBlcnIg
PSBfemxpYi5pbmZsYXRlSW5pdDJfKEMuYnlyZWYoc2VsZi5zdCksIDE1LCBaTElCX1ZFUlNJT04s
IEMuc2l6ZW9mKHNlbGYuc3QpKQorICAgICAgICBhc3NlcnQgZXJyID09IFpfT0ssIGVyciAjIEZJ
WE1FOiBtb3JlIHNwZWNpZmljIGVycm9yCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgaW5wdXQp
OgorICAgICAgICBvdXRidWYgPSBDLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKENIVU5LKQorICAgICAg
ICBzZWxmLnN0LmF2YWlsX2luICA9IGxlbihpbnB1dCkKKyAgICAgICAgc2VsZi5zdC5uZXh0X2lu
ICAgPSBDLmNhc3QoQy5jX2NoYXJfcChpbnB1dCksIEMuUE9JTlRFUihDLmNfdWJ5dGUpKQorICAg
ICAgICBzZWxmLnN0LmF2YWlsX291dCA9IENIVU5LCisgICAgICAgIHNlbGYuc3QubmV4dF9vdXQg
ID0gQy5jYXN0KG91dGJ1ZiwgQy5QT0lOVEVSKEMuY191Ynl0ZSkpCisgICAgICAgIGVyciA9IF96
bGliLmluZmxhdGUoQy5ieXJlZihzZWxmLnN0KSwgWl9TWU5DX0ZMVVNIKQorICAgICAgICBpZiBl
cnIgPT0gWl9ORUVEX0RJQ1Q6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5kaWN0aW9uYXJ5LCAi
bm8gZGljdGlvbmFyeSBwcm92aWRlZCIgICMgRklYTUU6IG1vcmUgc3BlY2lmaWMgZXJyb3IKKyAg
ICAgICAgICAgIGRpY3RfaWQgPSBfemxpYi5hZGxlcjMyKAorICAgICAgICAgICAgICAgIDBMLAor
ICAgICAgICAgICAgICAgIEMuY2FzdChDLmNfY2hhcl9wKHNlbGYuZGljdGlvbmFyeSksIEMuUE9J
TlRFUihDLmNfdWJ5dGUpKSwKKyAgICAgICAgICAgICAgICBsZW4oc2VsZi5kaWN0aW9uYXJ5KQor
ICAgICAgICAgICAgKQorIyAgICAgICAgICAgIGFzc2VydCBkaWN0X2lkID09IHNlbGYuc3QuYWRs
ZXIsICdpbmNvcnJlY3QgZGljdGlvbmFyeSAoJXMgIT0gJXMpJyAlIChkaWN0X2lkLCBzZWxmLnN0
LmFkbGVyKQorICAgICAgICAgICAgZXJyID0gX3psaWIuaW5mbGF0ZVNldERpY3Rpb25hcnkoCisg
ICAgICAgICAgICAgICAgQy5ieXJlZihzZWxmLnN0KSwKKyAgICAgICAgICAgICAgICBDLmNhc3Qo
Qy5jX2NoYXJfcChzZWxmLmRpY3Rpb25hcnkpLCBDLlBPSU5URVIoQy5jX3VieXRlKSksCisgICAg
ICAgICAgICAgICAgbGVuKHNlbGYuZGljdGlvbmFyeSkKKyAgICAgICAgICAgICkKKyAgICAgICAg
ICAgIGFzc2VydCBlcnIgPT0gWl9PSywgZXJyICMgRklYTUU6IG1vcmUgc3BlY2lmaWMgZXJyb3IK
KyAgICAgICAgICAgIGVyciA9IF96bGliLmluZmxhdGUoQy5ieXJlZihzZWxmLnN0KSwgWl9TWU5D
X0ZMVVNIKQorICAgICAgICBpZiBlcnIgaW4gW1pfT0ssIFpfU1RSRUFNX0VORF06CisgICAgICAg
ICAgICByZXR1cm4gb3V0YnVmWzpDSFVOSy1zZWxmLnN0LmF2YWlsX291dF0KKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yLCBlcnIgIyBGSVhNRTogbW9yZSBz
cGVjaWZpYyBlcnJvcgorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIGVyciA9IF96
bGliLmluZmxhdGVFbmQoQy5ieXJlZihzZWxmLnN0KSkKKyAgICAgICAgYXNzZXJ0IGVyciA9PSBa
X09LLCBlcnIgIyBGSVhNRTogbW9yZSBzcGVjaWZpYyBlcnJvcgorICAgIApJbmRleDogVG9vbHMv
V2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvY2xpZW50LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJodHRwL2NsaWVudC5weQkocmV2aXNp
b24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJodHRwL2NsaWVudC5w
eQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
CisiIiIKK05vbi1CbG9ja2luZyBIVFRQIENsaWVudAorCitUaGlzIGxpYnJhcnkgYWxsb3cgaW1w
bGVtZW50YXRpb24gb2YgYW4gSFRUUC8xLjEgY2xpZW50IHRoYXQgaXMgIm5vbi1ibG9ja2luZywi
CisiYXN5bmNocm9ub3VzIiBhbmQgImV2ZW50LWRyaXZlbiIgLS0gaS5lLiwgaXQgYWNoaWV2ZXMg
dmVyeSBoaWdoIHBlcmZvcm1hbmNlCithbmQgY29uY3VycmVuY3ksIHNvIGxvbmcgYXMgdGhlIGFw
cGxpY2F0aW9uIGNvZGUgZG9lcyBub3QgYmxvY2sgKGUuZy4sCit1cG9uIG5ldHdvcmssIGRpc2sg
b3IgZGF0YWJhc2UgYWNjZXNzKS4gQmxvY2tpbmcgb24gb25lIHJlc3BvbnNlIHdpbGwgYmxvY2sK
K3RoZSBlbnRpcmUgY2xpZW50LgorCitJbnN0YW50aWF0ZSBhIENsaWVudCB3aXRoIHRoZSBmb2xs
b3dpbmcgcGFyYW1ldGVyOgorICAtIHJlc19zdGFydCAoY2FsbGFibGUpCisgIAorQ2FsbCByZXFf
c3RhcnQgb24gdGhlIENsaWVudCBpbnN0YW5jZSB0byBiZWdpbiBhIHJlcXVlc3QuIEl0IHRha2Vz
IHRoZSBmb2xsb3dpbmcgCithcmd1bWVudHM6CisgIC0gbWV0aG9kIChzdHJpbmcpCisgIC0gdXJp
IChzdHJpbmcpCisgIC0gcmVxX2hkcnMgKGxpc3Qgb2YgKG5hbWUsIHZhbHVlKSB0dXBsZXMpCisg
IC0gcmVxX2JvZHlfcGF1c2UgKGNhbGxhYmxlKQorYW5kIHJldHVybnM6CisgIC0gcmVxX2JvZHkg
KGNhbGxhYmxlKQorICAtIHJlcV9kb25lIChjYWxsYWJsZSkKKyAgICAKK0NhbGwgcmVxX2JvZHkg
dG8gc2VuZCBwYXJ0IG9mIHRoZSByZXF1ZXN0IGJvZHkuIEl0IHRha2VzIHRoZSBmb2xsb3dpbmcg
Cithcmd1bWVudDoKKyAgLSBjaHVuayAoc3RyaW5nKQorCitDYWxsIHJlcV9kb25lIHdoZW4gdGhl
IHJlcXVlc3QgaXMgY29tcGxldGUsIHdoZXRoZXIgb3Igbm90IGl0IGNvbnRhaW5zIGEgCitib2R5
LiBJdCB0YWtlcyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50OgorICAtIGVyciAoZXJyb3IgZGljdGlv
bmFyeSwgb3IgTm9uZSBmb3Igbm8gZXJyb3IpCisKK3JlcV9ib2R5X3BhdXNlIGlzIGNhbGxlZCB3
aGVuIHRoZSBjbGllbnQgbmVlZHMgeW91ICB0byB0ZW1wb3JhcmlseSBzdG9wIHNlbmRpbmcgCit0
aGUgcmVxdWVzdCBib2R5LCBvciByZXN0YXJ0LiBJdCBtdXN0IHRha2UgdGhlIGZvbGxvd2luZyBh
cmd1bWVudDoKKyAgLSBwYXVzZWQgKGJvb2xlYW47IFRydWUgbWVhbnMgcGF1c2UsIEZhbHNlIG1l
YW5zIHVucGF1c2UpCisgICAgCityZXNfc3RhcnQgaXMgY2FsbGVkIHRvIHN0YXJ0IHRoZSByZXNw
b25zZSwgYW5kIG11c3QgdGFrZSB0aGUgZm9sbG93aW5nIAorYXJndW1lbnRzOgorICAtIHN0YXR1
c19jb2RlIChzdHJpbmcpCisgIC0gc3RhdHVzX3BocmFzZSAoc3RyaW5nKQorICAtIHJlc19oZHJz
IChsaXN0IG9mIChuYW1lLCB2YWx1ZSkgdHVwbGVzKQorICAtIHJlc19ib2R5X3BhdXNlCitJdCBt
dXN0IHJldHVybjoKKyAgLSByZXNfYm9keSAoY2FsbGFibGUpCisgIC0gcmVzX2RvbmUgKGNhbGxh
YmxlKQorICAgIAorcmVzX2JvZHkgaXMgY2FsbGVkIHdoZW4gcGFydCBvZiB0aGUgcmVzcG9uc2Ug
Ym9keSBpcyBhdmFpbGFibGUuIEl0IG11c3QgYWNjZXB0Cit0aGUgZm9sbG93aW5nIHBhcmFtZXRl
cjoKKyAgLSBjaHVuayAoc3RyaW5nKQorICAKK3Jlc19kb25lIGlzIGNhbGxlZCB3aGVuIHRoZSBy
ZXNwb25zZSBpcyBmaW5pc2hlZCwgYW5kIG11c3QgYWNjZXB0IHRoZSAKK2ZvbGxvd2luZyBhcmd1
bWVudDoKKyAgLSBlcnIgKGVycm9yIGRpY3Rpb25hcnksIG9yIE5vbmUgaWYgbm8gZXJyb3IpCisg
ICAgCitTZWUgdGhlIGVycm9yIG1vZHVsZSBmb3IgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgdmFsaWQg
ZXJyb3IgZGljdGlvbmFyaWVzLgorCitXaGVyZSBwb3NzaWJsZSwgZXJyb3JzIGluIHRoZSByZXNw
b25zZSB3aWxsIGJlIGluZGljYXRlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZQorNXh4IEhUVFAgc3Rh
dHVzIGNvZGUgKGkuZS4sIGJ5IGNhbGxpbmcgcmVzX3N0YXJ0LCByZXNfYm9keSBhbmQgcmVzX2Rv
bmUgd2l0aAorYW4gZXJyb3IgZGljdGlvbmFyeSkuIEhvd2V2ZXIsIGlmIGEgcmVzcG9uc2UgaGFz
IGFscmVhZHkgYmVlbiBzdGFydGVkLCB0aGUKK2Nvbm5lY3Rpb24gd2lsbCBiZSBkcm9wcGVkIChm
b3IgZXhhbXBsZSwgd2hlbiB0aGUgcmVzcG9uc2UgY2h1bmtpbmcgb3IKK2luZGljYXRlZCBsZW5n
dGggYXJlIGluY29ycmVjdCkuIEluIHRoZXNlIGNhc2VzLCByZXNfZG9uZSB3aWxsIHN0aWxsIGJl
IGNhbGxlZAord2l0aCB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgZGljdGlvbmFyeS4KKyIiIgorCitf
X2F1dGhvcl9fID0gIk1hcmsgTm90dGluZ2hhbSA8bW5vdEBtbm90Lm5ldD4iCitfX2NvcHlyaWdo
dF9fID0gIiIiXAorQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFyayBOb3R0aW5naGFtCisKK1Bl
cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u
IG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l
bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUg
d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmln
aHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1
YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy
bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywg
c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu
CithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKwor
VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z
IEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g
VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitB
VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B
R0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU
LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJ
T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhF
IFNPRlRXQVJFLgorIiIiCisKK2Zyb20gdXJscGFyc2UgaW1wb3J0IHVybHNwbGl0LCB1cmx1bnNw
bGl0CisKK2ltcG9ydCBwdXNoX3RjcAorZnJvbSBodHRwX2NvbW1vbiBpbXBvcnQgSHR0cE1lc3Nh
Z2VIYW5kbGVyLCBcCisgICAgQ0xPU0UsIENPVU5URUQsIE5PQk9EWSwgXAorICAgIFdBSVRJTkcs
IEhFQURFUlNfRE9ORSwgXAorICAgIGlkZW1wb3RlbnRfbWV0aG9kcywgbm9fYm9keV9zdGF0dXMs
IGhvcF9ieV9ob3BfaGRycywgXAorICAgIGR1bW15LCBnZXRfaGRyCitmcm9tIGVycm9yIGltcG9y
dCBFUlJfVVJMLCBFUlJfQ09OTkVDVCwgRVJSX0xFTl9SRVEsIEVSUl9SRUFEX1RJTUVPVVQsIEVS
Ul9IVFRQX1ZFUlNJT04KKworcmVxX3JlbW92ZV9oZHJzID0gaG9wX2J5X2hvcF9oZHJzICsgWydo
b3N0J10KKworIyBUT0RPOiBwcm94eSBzdXBwb3J0CisjIFRPRE86IG5leHQtaG9wIHZlcnNpb24g
Y2FjaGUgZm9yIEV4cGVjdC9Db250aW51ZSwgZXRjLgorCitjbGFzcyBDbGllbnQoSHR0cE1lc3Nh
Z2VIYW5kbGVyKToKKyAgICAiQW4gYXN5bmNocm9ub3VzIEhUVFAgY2xpZW50LiIKKyAgICBjb25u
ZWN0X3RpbWVvdXQgPSBOb25lCisgICAgcmVhZF90aW1lb3V0ID0gTm9uZQorICAgIHJldHJ5X2xp
bWl0ID0gMgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc19zdGFydF9jYik6CisgICAgICAg
IEh0dHBNZXNzYWdlSGFuZGxlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnJlc19zdGFy
dF9jYiA9IHJlc19zdGFydF9jYgorICAgICAgICBzZWxmLnJlc19ib2R5X2NiID0gTm9uZQorICAg
ICAgICBzZWxmLnJlc19kb25lX2NiID0gTm9uZQorICAgICAgICBzZWxmLm1ldGhvZCA9IE5vbmUK
KyAgICAgICAgc2VsZi51cmkgPSBOb25lCisgICAgICAgIHNlbGYucmVxX2hkcnMgPSBbXQorICAg
ICAgICBzZWxmLl90Y3BfY29ubiA9IE5vbmUKKyAgICAgICAgc2VsZi5fY29ubl9yZXVzYWJsZSA9
IEZhbHNlCisgICAgICAgIHNlbGYuX3JlcV9ib2R5X3BhdXNlX2NiID0gTm9uZQorICAgICAgICBz
ZWxmLl9yZXRyaWVzID0gMAorICAgICAgICBzZWxmLl90aW1lb3V0X2V2ID0gTm9uZQorICAgICAg
ICBzZWxmLl9vdXRwdXRfYnVmZmVyID0gW10KKworICAgIGRlZiByZXFfc3RhcnQoc2VsZiwgbWV0
aG9kLCB1cmksIHJlcV9oZHJzLCByZXFfYm9keV9wYXVzZSk6CisgICAgICAgICIiIgorICAgICAg
ICBTdGFydCBhIHJlcXVlc3QgdG8gdXJpIHVzaW5nIG1ldGhvZCwgd2hlcmUgCisgICAgICAgIHJl
cV9oZHJzIGlzIGEgbGlzdCBvZiAoZmllbGRfbmFtZSwgZmllbGRfdmFsdWUpIGZvcgorICAgICAg
ICB0aGUgcmVxdWVzdCBoZWFkZXJzLgorICAgICAgICAKKyAgICAgICAgUmV0dXJucyBhIChyZXFf
Ym9keSwgcmVxX2RvbmUpIHR1cGxlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcmVxX2Jv
ZHlfcGF1c2VfY2IgPSByZXFfYm9keV9wYXVzZQorICAgICAgICByZXFfaGRycyA9IFtpIGZvciBp
IGluIHJlcV9oZHJzIFwKKyAgICAgICAgICAgIGlmIG5vdCBpWzBdLmxvd2VyKCkgaW4gcmVxX3Jl
bW92ZV9oZHJzXQorICAgICAgICAoc2NoZW1lLCBhdXRob3JpdHksIHBhdGgsIHF1ZXJ5LCBmcmFn
bWVudCkgPSB1cmxzcGxpdCh1cmkpCisgICAgICAgIGlmIHNjaGVtZS5sb3dlcigpICE9ICdodHRw
JzoKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9lcnJvcihFUlJfVVJMLCAiT25seSBIVFRQIFVS
THMgYXJlIHN1cHBvcnRlZCIpCisgICAgICAgICAgICByZXR1cm4gZHVtbXksIGR1bW15CisgICAg
ICAgIGlmICJAIiBpbiBhdXRob3JpdHk6CisgICAgICAgICAgICB1c2VyaW5mbywgYXV0aG9yaXR5
ID0gYXV0aG9yaXR5LnNwbGl0KCJAIiwgMSkKKyAgICAgICAgaWYgIjoiIGluIGF1dGhvcml0eToK
KyAgICAgICAgICAgIGhvc3QsIHBvcnQgPSBhdXRob3JpdHkucnNwbGl0KCI6IiwgMSkKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCisgICAgICAgICAg
ICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZXJyb3Io
RVJSX1VSTCwgIk5vbi1pbnRlZ2VyIHBvcnQgaW4gVVJMIikKKyAgICAgICAgICAgICAgICByZXR1
cm4gZHVtbXksIGR1bW15CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBob3N0LCBwb3J0ID0g
YXV0aG9yaXR5LCA4MAorICAgICAgICBpZiBwYXRoID09ICIiOgorICAgICAgICAgICAgcGF0aCA9
ICIvIgorICAgICAgICB1cmkgPSB1cmx1bnNwbGl0KCgnJywgJycsIHBhdGgsIHF1ZXJ5LCAnJykp
CisgICAgICAgIHNlbGYubWV0aG9kLCBzZWxmLnVyaSwgc2VsZi5yZXFfaGRycyA9IG1ldGhvZCwg
dXJpLCByZXFfaGRycworICAgICAgICBzZWxmLnJlcV9oZHJzLmFwcGVuZCgoIkhvc3QiLCBob3N0
KSkgIyBGSVhNRTogcG9ydAorICAgICAgICBzZWxmLnJlcV9oZHJzLmFwcGVuZCgoIkNvbm5lY3Rp
b24iLCAia2VlcC1hbGl2ZSIpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBib2R5X2xlbiA9
IGludChnZXRfaGRyKHJlcV9oZHJzLCAiY29udGVudC1sZW5ndGgiKS5wb3AoMCkpCisgICAgICAg
ICAgICBkZWxpbWl0ID0gQ09VTlRFRAorICAgICAgICBleGNlcHQgKEluZGV4RXJyb3IsIFZhbHVl
RXJyb3IpOgorICAgICAgICAgICAgYm9keV9sZW4gPSBOb25lCisgICAgICAgICAgICBkZWxpbWl0
ID0gTk9CT0RZCisgICAgICAgIHNlbGYuX291dHB1dF9zdGFydCgiJXMgJXMgSFRUUC8xLjEiICUg
KHNlbGYubWV0aG9kLCBzZWxmLnVyaSksIHNlbGYucmVxX2hkcnMsIGRlbGltaXQpCisgICAgICAg
IF9pZGxlX3Bvb2wuYXR0YWNoKGhvc3QsIHBvcnQsIHNlbGYuX2hhbmRsZV9jb25uZWN0LCBzZWxm
Ll9oYW5kbGVfY29ubmVjdF9lcnJvciwgc2VsZi5jb25uZWN0X3RpbWVvdXQpCisgICAgICAgIHJl
dHVybiBzZWxmLnJlcV9ib2R5LCBzZWxmLnJlcV9kb25lCisgICAgIyBUT0RPOiBpZiB3ZSBzZW50
IEV4cGVjdDogMTAwLWNvbnRpbnVlLCBkb24ndCB3YWl0IGZvcmV2ZXIgKGkuZS4sIHNjaGVkdWxl
IHNvbWV0aGluZykKKworICAgIGRlZiByZXFfYm9keShzZWxmLCBjaHVuayk6CisgICAgICAgICJT
ZW5kIHBhcnQgb2YgdGhlIHJlcXVlc3QgYm9keS4gTWF5IGJlIGNhbGxlZCB6ZXJvIHRvIG1hbnkg
dGltZXMuIgorICAgICAgICAjIEZJWE1FOiBzZWxmLl9oYW5kbGVfZXJyb3IoRVJSX0xFTl9SRVEp
CisgICAgICAgIHNlbGYuX291dHB1dF9ib2R5KGNodW5rKQorICAgICAgICAKKyAgICBkZWYgcmVx
X2RvbmUoc2VsZiwgZXJyKToKKyAgICAgICAgIiIiCisgICAgICAgIFNpZ25hbCB0aGUgZW5kIG9m
IHRoZSByZXF1ZXN0LCB3aGV0aGVyIG9yIG5vdCB0aGVyZSB3YXMgYSBib2R5LiBNVVNUIGJlCisg
ICAgICAgIGNhbGxlZCBleGFjdGx5IG9uY2UgZm9yIGVhY2ggcmVxdWVzdC4gCisgICAgICAgIAor
ICAgICAgICBJZiBlcnIgaXMgbm90IE5vbmUsIGl0IGlzIGFuIGVycm9yIGRpY3Rpb25hcnkgKHNl
ZSB0aGUgZXJyb3IgbW9kdWxlKQorICAgICAgICBpbmRpY2F0aW5nIHRoYXQgYW4gSFRUUC1zcGVj
aWZpYyAoaS5lLiwgbm9uLWFwcGxpY2F0aW9uKSBlcnJvciBvY2N1cnJlZAorICAgICAgICB3aGls
ZSBzYXRpc2Z5aW5nIHRoZSByZXF1ZXN0OyB0aGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLgor
ICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fb3V0cHV0X2VuZChlcnIpICAgICAgICAgICAgCisK
KyAgICBkZWYgcmVzX2JvZHlfcGF1c2Uoc2VsZiwgcGF1c2VkKToKKyAgICAgICAgIlRlbXBvcmFy
aWx5IHN0b3AgLyByZXN0YXJ0IHNlbmRpbmcgdGhlIHJlc3BvbnNlIGJvZHkuIgorICAgICAgICBp
ZiBzZWxmLl90Y3BfY29ubiBhbmQgc2VsZi5fdGNwX2Nvbm4udGNwX2Nvbm5lY3RlZDoKKyAgICAg
ICAgICAgIHNlbGYuX3RjcF9jb25uLnBhdXNlKHBhdXNlZCkKKyAgICAgICAgCisgICAgIyBNZXRo
b2RzIGNhbGxlZCBieSBwdXNoX3RjcAorCisgICAgZGVmIF9oYW5kbGVfY29ubmVjdChzZWxmLCB0
Y3BfY29ubik6CisgICAgICAgICJUaGUgY29ubmVjdGlvbiBoYXMgc3VjY2VlZGVkLiIKKyAgICAg
ICAgc2VsZi5fdGNwX2Nvbm4gPSB0Y3BfY29ubgorICAgICAgICBzZWxmLl9vdXRwdXQoIiIpICMg
a2ljayB0aGUgb3V0cHV0IGJ1ZmZlcgorICAgICAgICBpZiBzZWxmLnJlYWRfdGltZW91dDoKKyAg
ICAgICAgICAgIHNlbGYuX3RpbWVvdXRfZXYgPSBwdXNoX3RjcC5zY2hlZHVsZSgKKyAgICAgICAg
ICAgICAgICBzZWxmLnJlYWRfdGltZW91dCwgc2VsZi5faGFuZGxlX2Vycm9yLCBFUlJfUkVBRF9U
SU1FT1VULCAnY29ubmVjdCcpCisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfaW5wdXQsIHNl
bGYuX2Nvbm5fY2xvc2VkLCBzZWxmLl9yZXFfYm9keV9wYXVzZQorCisgICAgZGVmIF9oYW5kbGVf
Y29ubmVjdF9lcnJvcihzZWxmLCBob3N0LCBwb3J0LCBlcnIpOgorICAgICAgICAiVGhlIGNvbm5l
Y3Rpb24gaGFzIGZhaWxlZC4iCisgICAgICAgIGltcG9ydCBvcywgdHlwZXMsIHNvY2tldAorICAg
ICAgICBpZiB0eXBlKGVycikgPT0gdHlwZXMuSW50VHlwZToKKyAgICAgICAgICAgIGVyciA9IG9z
LnN0cmVycm9yKGVycikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGVyciwgc29ja2V0LmVycm9y
KToKKyAgICAgICAgICAgIGVyciA9IGVyclsxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ZXJyID0gc3RyKGVycikKKyAgICAgICAgc2VsZi5faGFuZGxlX2Vycm9yKEVSUl9DT05ORUNULCBl
cnIpCisKKyAgICBkZWYgX2Nvbm5fY2xvc2VkKHNlbGYpOgorICAgICAgICAiVGhlIHNlcnZlciBj
bG9zZWQgdGhlIGNvbm5lY3Rpb24uIgorICAgICAgICBpZiBzZWxmLnJlYWRfdGltZW91dDoKKyAg
ICAgICAgICAgIHNlbGYuX3RpbWVvdXRfZXYuZGVsZXRlKCkKKyAgICAgICAgaWYgc2VsZi5faW5w
dXRfYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5faGFuZGxlX2lucHV0KCIiKQorICAgICAgICBp
ZiBzZWxmLl9pbnB1dF9kZWxpbWl0ID09IENMT1NFOgorICAgICAgICAgICAgc2VsZi5faW5wdXRf
ZW5kKCkKKyAgICAgICAgZWxpZiBzZWxmLl9vdXRwdXRfc3RhdGUgPT0gV0FJVElORzoKKyAgICAg
ICAgICAgICMgbm90aGluZyBoYXMgaGFwcGVuZWQgeWV0LiBUT0RPOiB3aWxsIGdldCBtb3JlIGNv
bXBsZXggd2l0aCBwaXBlbGluaW5nLgorICAgICAgICAgICAgaWYgc2VsZi5fcmV0cmllcyA8IHNl
bGYucmV0cnlfbGltaXQ6CisgICAgICAgICAgICAgICAgc2VsZi5fcmV0cnkoKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZXJyb3IoRVJSX0NPTk5FQ1Qs
ICJTZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uLiIpCisgICAgICAgIGVsaWYgc2VsZi5tZXRo
b2QgaW4gaWRlbXBvdGVudF9tZXRob2RzIGFuZCBcCisgICAgICAgICAgc2VsZi5fcmV0cmllcyA8
IHNlbGYucmV0cnlfbGltaXQgYW5kIFwKKyAgICAgICAgICBzZWxmLl9pbnB1dF9zdGF0ZSA9PSBX
QUlUSU5HOgorICAgICAgICAgICAgc2VsZi5fcmV0cnkoKQorICAgICAgICBlbGlmIHNlbGYuX2lu
cHV0X3N0YXRlID09IFdBSVRJTkc6ICMgaGF2ZW4ndCBjb21wbGV0ZWQgaGVhZGVycyB5ZXQKKyAg
ICAgICAgICAgIHNlbGYuX2hhbmRsZV9lcnJvcihFUlJfQ09OTkVDVCwgIlNlcnZlciBjbG9zZWQg
dGhlIGNvbm5lY3Rpb24uIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2lucHV0
X2Vycm9yKEVSUl9DT05ORUNULCAiU2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbi4iKQorCisg
ICAgZGVmIF9yZXRyeShzZWxmKToKKyAgICAgICAgIlJldHJ5IHRoZSByZXF1ZXN0LiIKKyAgICAg
ICAgaWYgc2VsZi5fdGltZW91dF9ldjoKKyAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfZXYuZGVs
ZXRlKCkKKyAgICAgICAgc2VsZi5fcmV0cmllcyArPSAxCisgICAgICAgIF9pZGxlX3Bvb2wuYXR0
YWNoKHNlbGYuX3RjcF9jb25uLmhvc3QsIHNlbGYuX3RjcF9jb25uLnBvcnQsIAorICAgICAgICAg
ICAgc2VsZi5faGFuZGxlX2Nvbm5lY3QsIHNlbGYuX2hhbmRsZV9jb25uZWN0X2Vycm9yLCBzZWxm
LmNvbm5lY3RfdGltZW91dCkKKworICAgIGRlZiBfcmVxX2JvZHlfcGF1c2Uoc2VsZiwgcGF1c2Vk
KToKKyAgICAgICAgIlRoZSBjbGllbnQgbmVlZHMgdGhlIGFwcGxpY2F0aW9uIHRvIHBhdXNlL3Vu
cGF1c2UgdGhlIHJlcXVlc3QgYm9keS4iCisgICAgICAgIGlmIHNlbGYuX3JlcV9ib2R5X3BhdXNl
X2NiOgorICAgICAgICAgICAgc2VsZi5fcmVxX2JvZHlfcGF1c2VfY2IocGF1c2VkKQorCisgICAg
IyBNZXRob2RzIGNhbGxlZCBieSBjb21tb24uSHR0cE1lc3NhZ2VIYW5kbGVyCisKKyAgICBkZWYg
X2lucHV0X3N0YXJ0KHNlbGYsIHRvcF9saW5lLCBoZHJfdHVwbGVzLCBjb25uX3Rva2VucywgdHJh
bnNmZXJfY29kZXMsIGNvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgIiIiCisgICAgICAgIFRha2Ug
dGhlIHRvcCBzZXQgb2YgaGVhZGVycyBmcm9tIHRoZSBpbnB1dCBzdHJlYW0sIHBhcnNlIHRoZW0K
KyAgICAgICAgYW5kIHF1ZXVlIHRoZSByZXF1ZXN0IHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgYXBw
bGljYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLnJlYWRfdGltZW91dDoKKyAg
ICAgICAgICAgIHNlbGYuX3RpbWVvdXRfZXYuZGVsZXRlKCkKKyAgICAgICAgdHJ5OiAKKyAgICAg
ICAgICAgIHJlc192ZXJzaW9uLCBzdGF0dXNfdHh0ID0gdG9wX2xpbmUuc3BsaXQoTm9uZSwgMSkK
KyAgICAgICAgICAgIHJlc192ZXJzaW9uID0gZmxvYXQocmVzX3ZlcnNpb24ucnNwbGl0KCcvJywg
MSlbMV0pCisgICAgICAgICAgICAjIFRPRE86IGNoZWNrIHRoYXQgdGhlIHByb3RvY29sIGlzIEhU
VFAKKyAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBJbmRleEVycm9yKToKKyAgICAgICAgICAg
IHNlbGYuX2hhbmRsZV9lcnJvcihFUlJfSFRUUF9WRVJTSU9OLCB0b3BfbGluZSkKKyAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzX2NvZGUs
IHJlc19waHJhc2UgPSBzdGF0dXNfdHh0LnNwbGl0KE5vbmUsIDEpCisgICAgICAgIGV4Y2VwdCBW
YWx1ZUVycm9yOgorICAgICAgICAgICAgcmVzX2NvZGUgPSBzdGF0dXNfdHh0LnJzdHJpcCgpCisg
ICAgICAgICAgICByZXNfcGhyYXNlID0gIiIKKyAgICAgICAgaWYgJ2Nsb3NlJyBub3QgaW4gY29u
bl90b2tlbnM6CisgICAgICAgICAgICBpZiAocmVzX3ZlcnNpb24gPT0gMS4wIGFuZCAna2VlcC1h
bGl2ZScgaW4gY29ubl90b2tlbnMpIG9yIFwKKyAgICAgICAgICAgICAgICByZXNfdmVyc2lvbiA+
IDEuMDoKKyAgICAgICAgICAgICAgICBzZWxmLl9jb25uX3JldXNhYmxlID0gVHJ1ZQorICAgICAg
ICBpZiBzZWxmLnJlYWRfdGltZW91dDoKKyAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfZXYgPSBw
dXNoX3RjcC5zY2hlZHVsZSgKKyAgICAgICAgICAgICAgICAgc2VsZi5yZWFkX3RpbWVvdXQsIHNl
bGYuX2lucHV0X2Vycm9yLCBFUlJfUkVBRF9USU1FT1VULCAnc3RhcnQnKQorICAgICAgICBzZWxm
LnJlc19ib2R5X2NiLCBzZWxmLnJlc19kb25lX2NiID0gc2VsZi5yZXNfc3RhcnRfY2IoCisgICAg
ICAgICAgICByZXNfdmVyc2lvbiwgcmVzX2NvZGUsIHJlc19waHJhc2UsIGhkcl90dXBsZXMsIHNl
bGYucmVzX2JvZHlfcGF1c2UpCisgICAgICAgIGFsbG93c19ib2R5ID0gKHJlc19jb2RlIG5vdCBp
biBub19ib2R5X3N0YXR1cykgb3IgKHNlbGYubWV0aG9kID09ICJIRUFEIikKKyAgICAgICAgcmV0
dXJuIGFsbG93c19ib2R5IAorCisgICAgZGVmIF9pbnB1dF9ib2R5KHNlbGYsIGNodW5rKToKKyAg
ICAgICAgIlByb2Nlc3MgYSByZXNwb25zZSBib2R5IGNodW5rIGZyb20gdGhlIHdpcmUuIgorICAg
ICAgICBpZiBzZWxmLnJlYWRfdGltZW91dDoKKyAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfZXYu
ZGVsZXRlKCkKKyAgICAgICAgc2VsZi5yZXNfYm9keV9jYihjaHVuaykKKyAgICAgICAgaWYgc2Vs
Zi5yZWFkX3RpbWVvdXQ6CisgICAgICAgICAgICBzZWxmLl90aW1lb3V0X2V2ID0gcHVzaF90Y3Au
c2NoZWR1bGUoCisgICAgICAgICAgICAgICAgIHNlbGYucmVhZF90aW1lb3V0LCBzZWxmLl9pbnB1
dF9lcnJvciwgRVJSX1JFQURfVElNRU9VVCwgJ2JvZHknKQorCisgICAgZGVmIF9pbnB1dF9lbmQo
c2VsZik6CisgICAgICAgICJJbmRpY2F0ZSB0aGF0IHRoZSByZXNwb25zZSBib2R5IGlzIGNvbXBs
ZXRlLiIKKyAgICAgICAgaWYgc2VsZi5yZWFkX3RpbWVvdXQ6CisgICAgICAgICAgICBzZWxmLl90
aW1lb3V0X2V2LmRlbGV0ZSgpCisgICAgICAgIGlmIHNlbGYuX3RjcF9jb25uOgorICAgICAgICAg
ICAgaWYgc2VsZi5fdGNwX2Nvbm4udGNwX2Nvbm5lY3RlZCBhbmQgc2VsZi5fY29ubl9yZXVzYWJs
ZToKKyAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkb24ndCByZXNldCByZWFkX2NiOyBp
ZiBtb3JlIGJ5dGVzIGNvbWUgaW4gYmVmb3JlCisgICAgICAgICAgICAgICAgIyB0aGUgbmV4dCBy
ZXF1ZXN0LCB3ZSdsbCBzdGlsbCBnZXQgdGhlbS4KKyAgICAgICAgICAgICAgICBfaWRsZV9wb29s
LnJlbGVhc2Uoc2VsZi5fdGNwX2Nvbm4pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHNlbGYuX3RjcF9jb25uLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl90Y3BfY29u
biA9IE5vbmUKKyAgICAgICAgc2VsZi5yZXNfZG9uZV9jYihOb25lKQorCisgICAgZGVmIF9pbnB1
dF9lcnJvcihzZWxmLCBlcnIsIGRldGFpbD1Ob25lKToKKyAgICAgICAgIkluZGljYXRlIGEgcGFy
c2luZyBwcm9ibGVtIHdpdGggdGhlIHJlc3BvbnNlIGJvZHkuIgorICAgICAgICBpZiBzZWxmLnJl
YWRfdGltZW91dDoKKyAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfZXYuZGVsZXRlKCkKKyAgICAg
ICAgaWYgc2VsZi5fdGNwX2Nvbm46CisgICAgICAgICAgICBzZWxmLl90Y3BfY29ubi5jbG9zZSgp
CisgICAgICAgICAgICBzZWxmLl90Y3BfY29ubiA9IE5vbmUKKyAgICAgICAgZXJyWydkZXRhaWwn
XSA9IGRldGFpbAorICAgICAgICBzZWxmLnJlc19kb25lX2NiKGVycikKKworICAgIGRlZiBfb3V0
cHV0KHNlbGYsIGNodW5rKToKKyAgICAgICAgc2VsZi5fb3V0cHV0X2J1ZmZlci5hcHBlbmQoY2h1
bmspCisgICAgICAgIGlmIHNlbGYuX3RjcF9jb25uIGFuZCBzZWxmLl90Y3BfY29ubi50Y3BfY29u
bmVjdGVkOgorICAgICAgICAgICAgc2VsZi5fdGNwX2Nvbm4ud3JpdGUoIiIuam9pbihzZWxmLl9v
dXRwdXRfYnVmZmVyKSkKKyAgICAgICAgICAgIHNlbGYuX291dHB1dF9idWZmZXIgPSBbXQorCisg
ICAgIyBtaXNjCisKKyAgICBkZWYgX2hhbmRsZV9lcnJvcihzZWxmLCBlcnIsIGRldGFpbD1Ob25l
KToKKyAgICAgICAgIkhhbmRsZSBhIHByb2JsZW0gd2l0aCB0aGUgcmVxdWVzdCBieSBnZW5lcmF0
aW5nIGFuIGFwcHJvcHJpYXRlIHJlc3BvbnNlLiIKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2lucHV0
X3N0YXRlID09IFdBSVRJTkcKKyAgICAgICAgaWYgc2VsZi5fdGltZW91dF9ldjoKKyAgICAgICAg
ICAgIHNlbGYuX3RpbWVvdXRfZXYuZGVsZXRlKCkKKyAgICAgICAgaWYgc2VsZi5fdGNwX2Nvbm46
CisgICAgICAgICAgICBzZWxmLl90Y3BfY29ubi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl90
Y3BfY29ubiA9IE5vbmUKKyAgICAgICAgaWYgZGV0YWlsOgorICAgICAgICAgICAgZXJyWydkZXRh
aWwnXSA9IGRldGFpbAorICAgICAgICBzdGF0dXNfY29kZSwgc3RhdHVzX3BocmFzZSA9IGVyci5n
ZXQoJ3N0YXR1cycsICgnNTA0JywgJ0dhdGV3YXkgVGltZW91dCcpKQorICAgICAgICBoZHJzID0g
WworICAgICAgICAgICAgKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpLAorICAgICAgICAg
ICAgKCdDb25uZWN0aW9uJywgJ2Nsb3NlJyksCisgICAgICAgIF0KKyAgICAgICAgYm9keSA9IGVy
clsnZGVzYyddCisgICAgICAgIGlmIGVyci5oYXNfa2V5KCdkZXRhaWwnKToKKyAgICAgICAgICAg
IGJvZHkgKz0gIiAoJXMpIiAlIGVyclsnZGV0YWlsJ10KKyAgICAgICAgcmVzX2JvZHlfY2IsIHJl
c19kb25lX2NiID0gc2VsZi5yZXNfc3RhcnRfY2IoCisgICAgICAgICAgICAgICIxLjEiLCBzdGF0
dXNfY29kZSwgc3RhdHVzX3BocmFzZSwgaGRycywgZHVtbXkpCisgICAgICAgIHJlc19ib2R5X2Ni
KHN0cihib2R5KSkKKyAgICAgICAgcHVzaF90Y3Auc2NoZWR1bGUoMCwgcmVzX2RvbmVfY2IsIGVy
cikKKworCitjbGFzcyBfSHR0cENvbm5lY3Rpb25Qb29sOgorICAgICJBIHBvb2wgb2YgaWRsZSBU
Q1AgY29ubmVjdGlvbnMgZm9yIHVzZSBieSB0aGUgY2xpZW50LiIKKyAgICBfY29ubnMgPSB7fQor
CisgICAgZGVmIGF0dGFjaChzZWxmLCBob3N0LCBwb3J0LCBoYW5kbGVfY29ubmVjdCwgaGFuZGxl
X2Nvbm5lY3RfZXJyb3IsIGNvbm5lY3RfdGltZW91dCk6CisgICAgICAgICJGaW5kIGFuIGlkbGUg
Y29ubmVjdGlvbiBmb3IgKGhvc3QsIHBvcnQpLCBvciBjcmVhdGUgYSBuZXcgb25lLiIKKyAgICAg
ICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0Y3BfY29u
biA9IHNlbGYuX2Nvbm5zWyhob3N0LCBwb3J0KV0ucG9wKCkKKyAgICAgICAgICAgIGV4Y2VwdCAo
SW5kZXhFcnJvciwgS2V5RXJyb3IpOgorICAgICAgICAgICAgICAgIHB1c2hfdGNwLmNyZWF0ZV9j
bGllbnQoaG9zdCwgcG9ydCwgaGFuZGxlX2Nvbm5lY3QsIGhhbmRsZV9jb25uZWN0X2Vycm9yLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RfdGltZW91dCkK
KyAgICAgICAgICAgICAgICBicmVhayAgICAgICAgCisgICAgICAgICAgICBpZiB0Y3BfY29ubi50
Y3BfY29ubmVjdGVkOgorICAgICAgICAgICAgICAgIHRjcF9jb25uLnJlYWRfY2IsIHRjcF9jb25u
LmNsb3NlX2NiLCB0Y3BfY29ubi5wYXVzZV9jYiA9IFwKKyAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlX2Nvbm5lY3QodGNwX2Nvbm4pCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgCisg
ICAgZGVmIHJlbGVhc2Uoc2VsZiwgdGNwX2Nvbm4pOgorICAgICAgICAiQWRkIGFuIGlkbGUgY29u
bmVjdGlvbiBiYWNrIHRvIHRoZSBwb29sLiIKKyAgICAgICAgaWYgdGNwX2Nvbm4udGNwX2Nvbm5l
Y3RlZDoKKyAgICAgICAgICAgIGRlZiBpZGxlX2Nsb3NlKCk6CisgICAgICAgICAgICAgICAgIlJl
bW92ZSB0aGUgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sIHdoZW4gaXQgY2xvc2VzLiIKKyAgICAg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm5zWyh0Y3BfY29u
bi5ob3N0LCB0Y3BfY29ubi5wb3J0KV0ucmVtb3ZlKHRjcF9jb25uKQorICAgICAgICAgICAgICAg
IGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAg
ICB0Y3BfY29ubi5jbG9zZV9jYiA9IGlkbGVfY2xvc2UKKyAgICAgICAgICAgIGlmIG5vdCBzZWxm
Ll9jb25ucy5oYXNfa2V5KCh0Y3BfY29ubi5ob3N0LCB0Y3BfY29ubi5wb3J0KSk6CisgICAgICAg
ICAgICAgICAgc2VsZi5fY29ubnNbKHRjcF9jb25uLmhvc3QsIHRjcF9jb25uLnBvcnQpXSA9IFt0
Y3BfY29ubl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fY29ubnNb
KHRjcF9jb25uLmhvc3QsIHRjcF9jb25uLnBvcnQpXS5hcHBlbmQodGNwX2Nvbm4pCisKK19pZGxl
X3Bvb2wgPSBfSHR0cENvbm5lY3Rpb25Qb29sKCkKKworCitkZWYgdGVzdF9jbGllbnQocmVxdWVz
dF91cmkpOgorICAgICJBIHNpbXBsZSBkZW1vbnN0cmF0aW9uIG9mIGEgY2xpZW50LiIKKyAgICBk
ZWYgcHJpbnRlcih2ZXJzaW9uLCBzdGF0dXMsIHBocmFzZSwgaGVhZGVycywgcmVzX3BhdXNlKToK
KyAgICAgICAgIlByaW50IHRoZSByZXNwb25zZSBoZWFkZXJzLiIKKyAgICAgICAgcHJpbnQgIkhU
VFAvJXMiICUgdmVyc2lvbiwgc3RhdHVzLCBwaHJhc2UKKyAgICAgICAgcHJpbnQgIlxuIi5qb2lu
KFsiJXM6JXMiICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10pCisgICAgICAgIHByaW50
CisgICAgICAgIGRlZiBib2R5KGNodW5rKToKKyAgICAgICAgICAgIHByaW50IGNodW5rCisgICAg
ICAgIGRlZiBkb25lKGVycik6CisgICAgICAgICAgICBpZiBlcnI6CisgICAgICAgICAgICAgICAg
cHJpbnQgIioqKiBFUlJPUjogJXMgKCVzKSIgJSAoZXJyWydkZXNjJ10sIGVyclsnZGV0YWlsJ10p
CisgICAgICAgICAgICBwdXNoX3RjcC5zdG9wKCkKKyAgICAgICAgcmV0dXJuIGJvZHksIGRvbmUK
KyAgICBjID0gQ2xpZW50KHByaW50ZXIpCisgICAgcmVxX2JvZHlfd3JpdGUsIHJlcV9kb25lID0g
Yy5yZXFfc3RhcnQoIkdFVCIsIHJlcXVlc3RfdXJpLCBbXSwgZHVtbXkpCisgICAgcmVxX2RvbmUo
Tm9uZSkKKyAgICBwdXNoX3RjcC5ydW4oKQorICAgICAgICAgICAgCitpZiBfX25hbWVfXyA9PSAi
X19tYWluX18iOgorICAgIGltcG9ydCBzeXMKKyAgICB0ZXN0X2NsaWVudChzeXMuYXJndlsxXSkK
SW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJodHRwL2Vycm9yLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJodHRwL2Vycm9y
LnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0
dHAvZXJyb3IucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorCisiIiIKK2Vycm9ycworIiIiCisKK19fYXV0aG9yX18gPSAiTWFyayBOb3R0aW5n
aGFtIDxtbm90QG1ub3QubmV0PiIKK19fY29weXJpZ2h0X18gPSAiIiJcCitDb3B5cmlnaHQgKGMp
IDIwMDgtMjAwOSBNYXJrIE5vdHRpbmdoYW0KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl
ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhp
cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3
YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs
dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5
LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2Nv
cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBT
b2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz
c2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRp
YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg
IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElF
RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO
R0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF
UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwg
V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT
SU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU
SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisiIiIKKworIyBHZW5l
cmFsIHBhcnNpbmcgZXJyb3JzCisKK0VSUl9DSFVOSyA9IHsKKyAgICAnZGVzYyc6ICJDaHVua2Vk
IGVuY29kaW5nIGVycm9yIiwKK30KK0VSUl9FWFRSQV9EQVRBID0geworICAgICdkZXNjJzogIkV4
dHJhIGRhdGEgcmVjZWl2ZWQiLAorfQorCitFUlJfQk9EWV9GT1JCSURERU4gPSB7CisgICAgJ2Rl
c2MnOiAiVGhpcyBtZXNzYWdlIGRvZXMgbm90IGFsbG93IGEgYm9keSIsCit9CisKK0VSUl9IVFRQ
X1ZFUlNJT04gPSB7CisgICAgJ2Rlc2MnOiAiVW5yZWNvZ25pc2VkIEhUVFAgdmVyc2lvbiIsICAj
IEZJWE1FOiBtb3JlIHNwZWNpZmljIHN0YXR1cworfQorCitFUlJfUkVBRF9USU1FT1VUID0gewor
ICAgICdkZXNjJzogIlJlYWQgdGltZW91dCIsIAorfQorCitFUlJfVFJBTlNGRVJfQ09ERSA9IHsK
KyAgICAnZGVzYyc6ICJVbmtub3duIHJlcXVlc3QgdHJhbnNmZXIgY29kaW5nIiwKKyAgICAnc3Rh
dHVzJzogKCI1MDEiLCAiTm90IEltcGxlbWVudGVkIiksCit9CisKK0VSUl9XSElURVNQQUNFX0hE
UiA9IHsKKyAgICAnZGVzYyc6ICJXaGl0ZXNwYWNlIGJldHdlZW4gcmVxdWVzdC1saW5lIGFuZCBm
aXJzdCBoZWFkZXIiLAorICAgICdzdGF0dXMnOiAoIjQwMCIsICJCYWQgUmVxdWVzdCIpLAorfQor
CisjIGNsaWVudC1zcGVjaWZpYyBlcnJvcnMKKworRVJSX1VSTCA9IHsKKyAgICAnZGVzYyc6ICJV
bnN1cHBvcnRlZCBvciBpbnZhbGlkIFVSSSIsCisgICAgJ3N0YXR1cyc6ICgiNDAwIiwgIkJhZCBS
ZXF1ZXN0IiksCit9CitFUlJfTEVOX1JFUSA9IHsKKyAgICAnZGVzYyc6ICJDb250ZW50LUxlbmd0
aCByZXF1aXJlZCIsCisgICAgJ3N0YXR1cyc6ICgiNDExIiwgIkxlbmd0aCBSZXF1aXJlZCIpLAor
fQorCitFUlJfQ09OTkVDVCA9IHsKKyAgICAnZGVzYyc6ICJDb25uZWN0aW9uIGNsb3NlZCIsCisg
ICAgJ3N0YXR1cyc6ICgiNTA0IiwgIkdhdGV3YXkgVGltZW91dCIpLAorfQorCisjIHNlcnZlci1z
cGVjaWZpYyBlcnJvcnMKKworRVJSX0hPU1RfUkVRID0geworICAgICdkZXNjJzogIkhvc3QgaGVh
ZGVyIHJlcXVpcmVkIiwKK30KSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkv
bmJodHRwL2h0dHBfY29tbW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkv
dGhpcmRfcGFydHkvbmJodHRwL2h0dHBfY29tbW9uLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMv
V2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvaHR0cF9jb21tb24ucHkJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzY0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIiIiCitzaGFy
ZWQgSFRUUCBpbmZyYXN0cnVjdHVyZQorCitUaGlzIG1vZHVsZSBjb250YWlucyB1dGlsaXR5IGZ1
bmN0aW9ucyBmb3IgbmJodHRwIGFuZCBhIGJhc2UgY2xhc3MKK2ZvciB0aGUgcGFyc2luZyBwb3J0
aW9ucyBvZiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIuCisiIiIKKworX19hdXRob3JfXyA9ICJNYXJr
IE5vdHRpbmdoYW0gPG1ub3RAbW5vdC5uZXQ+IgorX19jb3B5cmlnaHRfXyA9ICIiIlwKK0NvcHly
aWdodCAoYykgMjAwOC0yMDA5IE1hcmsgTm90dGluZ2hhbQorCitQZXJtaXNzaW9uIGlzIGhlcmVi
eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5
CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo
ZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp
b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5
LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Ig
c2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo
b20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp
cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBz
dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S
CitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO
T05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklH
SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElB
QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ
U0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX
QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKyIiIgor
CitpbXBvcnQgcmUKK2x3cyA9IHJlLmNvbXBpbGUoIlxyP1xuWyBcdF0rIiwgcmUuTSkKK2hkcl9l
bmQgPSByZS5jb21waWxlKHIiXHI/XG5ccj9cbiIsIHJlLk0pCitsaW5lc2VwID0gIlxyXG4iIAor
CisjIGNvbm5fbW9kZXMKK0NMT1NFLCBDT1VOVEVELCBDSFVOS0VELCBOT0JPRFkgPSAnY2xvc2Un
LCAnY291bnRlZCcsICdjaHVua2VkJywgJ25vYm9keScKKworIyBzdGF0ZXMKK1dBSVRJTkcsIEhF
QURFUlNfRE9ORSA9IDEsIDIKKworaWRlbXBvdGVudF9tZXRob2RzID0gWydHRVQnLCAnSEVBRCcs
ICdQVVQnLCAnREVMRVRFJywgJ09QVElPTlMnLCAnVFJBQ0UnXQorc2FmZV9tZXRob2RzID0gWydH
RVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ10KK25vX2JvZHlfc3RhdHVzID0gWycxMDAn
LCAnMTAxJywgJzIwNCcsICczMDQnXQoraG9wX2J5X2hvcF9oZHJzID0gWydjb25uZWN0aW9uJywg
J2tlZXAtYWxpdmUnLCAncHJveHktYXV0aGVudGljYXRlJywgCisgICAgICAgICAgICAgICAgICAg
J3Byb3h5LWF1dGhvcml6YXRpb24nLCAndGUnLCAndHJhaWxlcnMnLCAndHJhbnNmZXItZW5jb2Rp
bmcnLCAKKyAgICAgICAgICAgICAgICAgICAndXBncmFkZScsICdwcm94eS1jb25uZWN0aW9uJ10K
KworCitmcm9tIGVycm9yIGltcG9ydCBFUlJfRVhUUkFfREFUQSwgRVJSX0NIVU5LLCBFUlJfQk9E
WV9GT1JCSURERU4KKworZGVmIGR1bW15KCphcmdzLCAqKmt3KToKKyAgICAiRHVtbXkgbWV0aG9k
IHRoYXQgZG9lcyBub3RoaW5nOyB1c2VmdWwgdG8gaWdub3JlIGEgY2FsbGJhY2suIgorICAgIHBh
c3MKKworZGVmIGhlYWRlcl9kaWN0KGhlYWRlcl90dXBsZSwgc3RyaXA9Tm9uZSk6CisgICAgIiIi
CisgICAgR2l2ZW4gYSBoZWFkZXIgdHVwbGUsIHJldHVybiBhIGRpY3Rpb25hcnkga2V5ZWQgdXBv
biB0aGUgbG93ZXItY2FzZWQKKyAgICBoZWFkZXIgbmFtZXMuCisgICAgCisgICAgSWYgc3RyaXAg
aXMgZGVmaW5lZCwgZWFjaCBoZWFkZXIgbGlzdGVkIChieSBsb3dlci1jYXNlZCBuYW1lKSB3aWxs
IG5vdCBiZQorICAgIHJldHVybmVkIGluIHRoZSBkaWN0aW9uYXJ5LgorICAgICIiIiAKKyAgICAj
IFRPRE86IHJldHVybiBhIGxpc3Qgb2YgdmFsdWVzOyBjdXJyZW50bHkgZGVzdHJ1Y3RpdmUuCisg
ICAgaWYgc3RyaXAgPT0gTm9uZToKKyAgICAgICAgc3RyaXAgPSBbXQorICAgIHJldHVybiBkaWN0
KFsobi5zdHJpcCgpLmxvd2VyKCksIHYuc3RyaXAoKSkgZm9yIChuLCB2KSBpbiBoZWFkZXJfdHVw
bGVdKQorCitkZWYgZ2V0X2hkcihoZHJfdHVwbGVzLCBuYW1lKToKKyAgICAiIiIKKyAgICBHaXZl
biBhIGxpc3Qgb2YgKG5hbWUsIHZhbHVlKSBoZWFkZXIgdHVwbGVzIGFuZCBhIGhlYWRlciBuYW1l
IChsb3dlcmNhc2UpLAorICAgIHJldHVybiBhIGxpc3Qgb2YgYWxsIHZhbHVlcyBmb3IgdGhhdCBo
ZWFkZXIuCisKKyAgICBUaGlzIGluY2x1ZGVzIGhlYWRlciBsaW5lcyB3aXRoIG11bHRpcGxlIHZh
bHVlcyBzZXBhcmF0ZWQgYnkgYSBjb21tYTsgCisgICAgc3VjaCBoZWFkZXJzIHdpbGwgYmUgc3Bs
aXQgaW50byBzZXBhcmF0ZSB2YWx1ZXMuIEFzIGEgcmVzdWx0LCBpdCBpcyBOT1QKKyAgICBzYWZl
IHRvIHVzZSB0aGlzIG9uIGhlYWRlcnMgd2hvc2UgdmFsdWVzIG1heSBpbmNsdWRlIGEgY29tbWEg
KGUuZy4sCisgICAgU2V0LUNvb2tpZSwgb3IgYW55IHZhbHVlIHdpdGggYSBxdW90ZWQgc3RyaW5n
KS4KKyAgICAiIiIKKyAgICAjIFRPRE86IHN1cHBvcnQgcXVvdGVkIHN0cmluZ3MKKyAgICByZXR1
cm4gW3Yuc3RyaXAoKSBmb3IgdiBpbiBzdW0oCisgICAgICAgICAgICAgICBbbC5zcGxpdCgnLCcp
IGZvciBsIGluIAorICAgICAgICAgICAgICAgICAgICBbaVsxXSBmb3IgaSBpbiBoZHJfdHVwbGVz
IGlmIGlbMF0ubG93ZXIoKSA9PSBuYW1lXQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAg
ICwgW10pXQorCisKK2NsYXNzIEh0dHBNZXNzYWdlSGFuZGxlcjoKKyAgICAiIiIKKyAgICBUaGlz
IGlzIGEgYmFzZSBjbGFzcyBmb3Igc29tZXRoaW5nIHRoYXQgaGFzIHRvIHBhcnNlIGFuZC9vciBz
ZXJpYWxpc2UgCisgICAgSFRUUCBtZXNzYWdlcywgcmVxdWVzdCBvciByZXNwb25zZS4KKworICAg
IEZvciBwYXJzaW5nLCBpdCBleHBlY3RzIHlvdSB0byBvdmVycmlkZSBfaW5wdXRfc3RhcnQsIF9p
bnB1dF9ib2R5IGFuZAorICAgIF9pbnB1dF9lbmQsIGFuZCBjYWxsIF9oYW5kbGVfaW5wdXQgd2hl
biB5b3UgZ2V0IGJ5dGVzIGZyb20gdGhlIG5ldHdvcmsuCisKKyAgICBGb3Igc2VyaWFsaXNpbmcs
IGl0IGV4cGVjdHMgeW91IHRvIG92ZXJyaWRlIF9vdXRwdXQuCisgICAgIiIiCisKKyAgICBkZWYg
X19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2lucHV0X2J1ZmZlciA9ICIiCisgICAgICAg
IHNlbGYuX2lucHV0X3N0YXRlID0gV0FJVElORworICAgICAgICBzZWxmLl9pbnB1dF9kZWxpbWl0
ID0gTm9uZQorICAgICAgICBzZWxmLl9pbnB1dF9ib2R5X2xlZnQgPSAwCisgICAgICAgIHNlbGYu
X291dHB1dF9zdGF0ZSA9IFdBSVRJTkcKKyAgICAgICAgc2VsZi5fb3V0cHV0X2RlbGltaXQgPSBO
b25lCisKKyAgICAjIGlucHV0LXJlbGF0ZWQgbWV0aG9kcworCisgICAgZGVmIF9pbnB1dF9zdGFy
dChzZWxmLCB0b3BfbGluZSwgaGRyX3R1cGxlcywgY29ubl90b2tlbnMsIHRyYW5zZmVyX2NvZGVz
LCBjb250ZW50X2xlbmd0aCk6CisgICAgICAgICIiIgorICAgICAgICBUYWtlIHRoZSB0b3Agc2V0
IG9mIGhlYWRlcnMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCBwYXJzZSB0aGVtCisgICAgICAgIGFu
ZCBxdWV1ZSB0aGUgcmVxdWVzdCB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgor
ICAgICAgICAKKyAgICAgICAgUmV0dXJucyBib29sZWFuIGFsbG93c19ib2R5IHRvIGluZGljYXRl
IHdoZXRoZXIgdGhlIG1lc3NhZ2UgYWxsb3dzIGEgCisgICAgICAgIGJvZHkuCisgICAgICAgICIi
IgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2lucHV0X2Jv
ZHkoc2VsZiwgY2h1bmspOgorICAgICAgICAiUHJvY2VzcyBhIGJvZHkgY2h1bmsgZnJvbSB0aGUg
d2lyZS4iCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfaW5w
dXRfZW5kKHNlbGYpOgorICAgICAgICAiSW5kaWNhdGUgdGhhdCB0aGUgcmVzcG9uc2UgYm9keSBp
cyBjb21wbGV0ZS4iCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAKKyAg
ICBkZWYgX2lucHV0X2Vycm9yKHNlbGYsIGVyciwgZGV0YWlsPU5vbmUpOgorICAgICAgICAiSW5k
aWNhdGUgYSBwYXJzaW5nIHByb2JsZW0gd2l0aCB0aGUgYm9keS4iCisgICAgICAgIHJhaXNlIE5v
dEltcGxlbWVudGVkRXJyb3IKKyAgICAKKyAgICBkZWYgX2hhbmRsZV9pbnB1dChzZWxmLCBpbnN0
cik6CisgICAgICAgICIiIgorICAgICAgICBHaXZlbiBhIGNodW5rIG9mIGlucHV0LCBmaWd1cmUg
b3V0IHdoYXQgc3RhdGUgd2UncmUgaW4gYW5kIGhhbmRsZSBpdCwKKyAgICAgICAgbWFraW5nIHRo
ZSBhcHByb3ByaWF0ZSBjYWxscy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2lucHV0
X2J1ZmZlciAhPSAiIjoKKyAgICAgICAgICAgIGluc3RyID0gc2VsZi5faW5wdXRfYnVmZmVyICsg
aW5zdHIgIyB3aWxsIG5lZWQgdG8gbW92ZSB0byBhIGxpc3QgaWYgd3JpdGV2IGNvbWVzIGFyb3Vu
ZAorICAgICAgICAgICAgc2VsZi5faW5wdXRfYnVmZmVyID0gIiIKKyAgICAgICAgaWYgc2VsZi5f
aW5wdXRfc3RhdGUgPT0gV0FJVElORzoKKyAgICAgICAgICAgIGlmIGhkcl9lbmQuc2VhcmNoKGlu
c3RyKTogIyBmb3VuZCBvbmUKKyAgICAgICAgICAgICAgICByZXN0ID0gc2VsZi5fcGFyc2VfaGVh
ZGVycyhpbnN0cikKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfaW5wdXQocmVzdCkKKyAg
ICAgICAgICAgIGVsc2U6ICMgcGFydGlhbCBoZWFkZXJzOyBzdG9yZSBpdCBhbmQgd2FpdCBmb3Ig
bW9yZQorICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0X2J1ZmZlciA9IGluc3RyCisgICAgICAg
IGVsaWYgc2VsZi5faW5wdXRfc3RhdGUgPT0gSEVBREVSU19ET05FOgorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgIGdldGF0dHIoc2VsZiwgJ19oYW5kbGVfJXMnICUgc2VsZi5faW5w
dXRfZGVsaW1pdCkoaW5zdHIpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uLCAiVW5rbm93biBpbnB1dCBkZWxpbWl0ZXIg
JXMiICUgc2VsZi5faW5wdXRfZGVsaW1pdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFp
c2UgRXhjZXB0aW9uLCAiVW5rbm93biBzdGF0ZSAlcyIgJSBzZWxmLl9pbnB1dF9zdGF0ZQorCisg
ICAgZGVmIF9oYW5kbGVfbm9ib2R5KHNlbGYsIGluc3RyKToKKyAgICAgICAgIkhhbmRsZSBpbnB1
dCB0aGF0IHNob3VsZG4ndCBoYXZlIGEgYm9keS4iCisgICAgICAgIGlmIGluc3RyOgorICAgICAg
ICAgICAgc2VsZi5faW5wdXRfZXJyb3IoRVJSX0JPRFlfRk9SQklEREVOLCBpbnN0cikgIyBGSVhN
RTogd2lsbCBub3Qgd29yayB3aXRoIHBpcGVsaW5pbmcKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHNlbGYuX2lucHV0X2VuZCgpCisgICAgICAgIHNlbGYuX2lucHV0X3N0YXRlID0gV0FJVElO
RworIyAgICAgICBzZWxmLl9oYW5kbGVfaW5wdXQoaW5zdHIpCisKKyAgICBkZWYgX2hhbmRsZV9j
bG9zZShzZWxmLCBpbnN0cik6CisgICAgICAgICJIYW5kbGUgaW5wdXQgd2hlcmUgdGhlIGJvZHkg
aXMgZGVsaW1pdGVkIGJ5IHRoZSBjb25uZWN0aW9uIGNsb3NpbmcuIgorICAgICAgICBzZWxmLl9p
bnB1dF9ib2R5KGluc3RyKQorCisgICAgZGVmIF9oYW5kbGVfY2h1bmtlZChzZWxmLCBpbnN0cik6
CisgICAgICAgICJIYW5kbGUgaW5wdXQgd2hlcmUgdGhlIGJvZHkgaXMgZGVsaW1pdGVkIGJ5IGNo
dW5rZWQgZW5jb2RpbmcuIgorICAgICAgICB3aGlsZSBpbnN0cjoKKyAgICAgICAgICAgIGlmIHNl
bGYuX2lucHV0X2JvZHlfbGVmdCA8IDA6ICMgbmV3IGNodW5rCisgICAgICAgICAgICAgICAgaW5z
dHIgPSBzZWxmLl9oYW5kbGVfY2h1bmtfbmV3KGluc3RyKQorICAgICAgICAgICAgZWxpZiBzZWxm
Ll9pbnB1dF9ib2R5X2xlZnQgPiAwOiAjIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgcmVhZGluZyBh
IGNodW5rCisgICAgICAgICAgICAgICAgaW5zdHIgPSBzZWxmLl9oYW5kbGVfY2h1bmtfYm9keShp
bnN0cikKKyAgICAgICAgICAgIGVsaWYgc2VsZi5faW5wdXRfYm9keV9sZWZ0ID09IDA6ICMgYm9k
eSBpcyBkb25lCisgICAgICAgICAgICAgICAgaW5zdHIgPSBzZWxmLl9oYW5kbGVfY2h1bmtfZG9u
ZShpbnN0cikKKworICAgIGRlZiBfaGFuZGxlX2NodW5rX25ldyhzZWxmLCBpbnN0cik6CisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICMgdGhleSByZWFsbHkgbmVlZCB0byB1c2UgQ1JMRgorICAg
ICAgICAgICAgY2h1bmtfc2l6ZSwgcmVzdCA9IGluc3RyLnNwbGl0KGxpbmVzZXAsIDEpCisgICAg
ICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgIyBnb3QgYSBDUkxGIHdpdGhvdXQg
YW55dGhpbmcgYmVoaW5kIGl0Li4gd2FpdCBhIGJpdAorICAgICAgICAgICAgaWYgbGVuKGluc3Ry
KSA+IDI1NjoKKyAgICAgICAgICAgICAgICAjIE9LLCB0aGlzIGlzIGFic3VyZC4uLgorICAgICAg
ICAgICAgICAgIHNlbGYuX2lucHV0X2Vycm9yKEVSUl9DSFVOSywgaW5zdHIpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0X2J1ZmZlciArPSBpbnN0cgorICAg
ICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGNodW5rX3NpemUuc3RyaXAoKSA9PSAiIjogIyBp
Z25vcmUgYmFyZSBsaW5lcworICAgICAgICAgICAgc2VsZi5faGFuZGxlX2NodW5rZWQocmVzdCkg
IyBGSVhNRTogcmVjdXJzaW9uCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgIjsiIGlu
IGNodW5rX3NpemU6ICMgaWdub3JlIGNodW5rIGV4dGVuc2lvbnMKKyAgICAgICAgICAgIGNodW5r
X3NpemUgPSBjaHVua19zaXplLnNwbGl0KCI7IiwgMSlbMF0KKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgc2VsZi5faW5wdXRfYm9keV9sZWZ0ID0gaW50KGNodW5rX3NpemUsIDE2KQorICAgICAg
ICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX2lucHV0X2Vycm9yKEVSUl9D
SFVOSywgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiAjIGJsb3cgdXAgaWYgd2UgY2Fu
J3QgcHJvY2VzcyBhIGNodW5rLgorICAgICAgICByZXR1cm4gcmVzdAorCisgICAgZGVmIF9oYW5k
bGVfY2h1bmtfYm9keShzZWxmLCBpbnN0cik6CisgICAgICAgIGlmIHNlbGYuX2lucHV0X2JvZHlf
bGVmdCA8IGxlbihpbnN0cik6ICMgZ290IG1vcmUgdGhhbiB0aGUgY2h1bmsKKyAgICAgICAgICAg
IHRoaXNfY2h1bmsgPSBzZWxmLl9pbnB1dF9ib2R5X2xlZnQKKyAgICAgICAgICAgIHNlbGYuX2lu
cHV0X2JvZHkoaW5zdHJbOnRoaXNfY2h1bmtdKQorICAgICAgICAgICAgc2VsZi5faW5wdXRfYm9k
eV9sZWZ0ID0gLTEKKyAgICAgICAgICAgIHJldHVybiBpbnN0clt0aGlzX2NodW5rKzI6XSAjICsy
IGNvbnN1bWVzIHRoZSBDUkxGCisgICAgICAgIGVsaWYgc2VsZi5faW5wdXRfYm9keV9sZWZ0ID09
IGxlbihpbnN0cik6ICMgZ290IHRoZSB3aG9sZSBjaHVuayBleGFjdGx5CisgICAgICAgICAgICBz
ZWxmLl9pbnB1dF9ib2R5KGluc3RyKQorICAgICAgICAgICAgc2VsZi5faW5wdXRfYm9keV9sZWZ0
ID0gLTEKKyAgICAgICAgZWxzZTogIyBnb3QgcGFydGlhbCBjaHVuaworICAgICAgICAgICAgc2Vs
Zi5faW5wdXRfYm9keShpbnN0cikKKyAgICAgICAgICAgIHNlbGYuX2lucHV0X2JvZHlfbGVmdCAt
PSBsZW4oaW5zdHIpCisKKyAgICBkZWYgX2hhbmRsZV9jaHVua19kb25lKHNlbGYsIGluc3RyKToK
KyAgICAgICAgaWYgbGVuKGluc3RyKSA+PSAyIGFuZCBpbnN0cls6Ml0gPT0gbGluZXNlcDoKKyAg
ICAgICAgICAgIHNlbGYuX2lucHV0X3N0YXRlID0gV0FJVElORworICAgICAgICAgICAgc2VsZi5f
aW5wdXRfZW5kKCkKKyMgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2lucHV0KGluc3RyWzI6
XSkgIyBwaXBlbGluaW5nCisgICAgICAgIGVsaWYgaGRyX2VuZC5zZWFyY2goaW5zdHIpOiAjIHRy
YWlsZXJzCisgICAgICAgICAgICBzZWxmLl9pbnB1dF9zdGF0ZSA9IFdBSVRJTkcKKyAgICAgICAg
ICAgIHNlbGYuX2lucHV0X2VuZCgpCisgICAgICAgICAgICB0cmFpbGVycywgcmVzdCA9IGhkcl9l
bmQuc3BsaXQoaW5zdHIsIDEpICMgVE9ETzogcHJvY2VzcyB0cmFpbGVycworIyAgICAgICAgICAg
ICAgICBzZWxmLl9oYW5kbGVfaW5wdXQocmVzdCkgIyBwaXBlbGluaW5nCisgICAgICAgIGVsc2U6
ICMgZG9uJ3QgaGF2ZSBmdWxsIGhlYWRlcnMgeWV0CisgICAgICAgICAgICBzZWxmLl9pbnB1dF9i
dWZmZXIgPSBpbnN0cgorCisgICAgZGVmIF9oYW5kbGVfY291bnRlZChzZWxmLCBpbnN0cik6Cisg
ICAgICAgICJIYW5kbGUgaW5wdXQgd2hlcmUgdGhlIGJvZHkgaXMgZGVsaW1pdGVkIGJ5IHRoZSBD
b250ZW50LUxlbmd0aC4iCisgICAgICAgIGFzc2VydCBzZWxmLl9pbnB1dF9ib2R5X2xlZnQgPj0g
MCwgXAorICAgICAgICAgICAgIm1lc3NhZ2UgY291bnRpbmcgcHJvYmxlbSAoJXMpIiAlIHNlbGYu
X2lucHV0X2JvZHlfbGVmdAorICAgICAgICAjIHByb2Nlc3MgYm9keQorICAgICAgICBpZiBzZWxm
Ll9pbnB1dF9ib2R5X2xlZnQgPD0gbGVuKGluc3RyKTogIyBnb3QgaXQgYWxsIChhbmQgbW9yZT8p
CisgICAgICAgICAgICBzZWxmLl9pbnB1dF9ib2R5KGluc3RyWzpzZWxmLl9pbnB1dF9ib2R5X2xl
ZnRdKQorICAgICAgICAgICAgc2VsZi5faW5wdXRfc3RhdGUgPSBXQUlUSU5HCisgICAgICAgICAg
ICBpZiBpbnN0cltzZWxmLl9pbnB1dF9ib2R5X2xlZnQ6XToKKyAgICAgICAgICAgICAgICAjIFRo
aXMgd2lsbCBjYXRjaCBleHRyYSBpbnB1dCB0aGF0IGlzbid0IG9uIHBhY2tldCBib3VuZGFyaWVz
LgorICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0X2Vycm9yKEVSUl9FWFRSQV9EQVRBLCBpbnN0
cltzZWxmLl9pbnB1dF9ib2R5X2xlZnQ6XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgc2VsZi5faW5wdXRfZW5kKCkKKyAgICAgICAgZWxzZTogIyBnb3Qgc29tZSBvZiBpdAor
ICAgICAgICAgICAgc2VsZi5faW5wdXRfYm9keShpbnN0cikKKyAgICAgICAgICAgIHNlbGYuX2lu
cHV0X2JvZHlfbGVmdCAtPSBsZW4oaW5zdHIpCisKKyAgICBkZWYgX3BhcnNlX2hlYWRlcnMoc2Vs
ZiwgaW5zdHIpOgorICAgICAgICAiIiIKKyAgICAgICAgR2l2ZW4gYSBzdHJpbmcgdGhhdCB3ZSBr
bm93cyBjb250YWlucyBhIGhlYWRlciBibG9jayAocG9zc2libHkgbW9yZSksIAorICAgICAgICBw
YXJzZSB0aGUgaGVhZGVycyBvdXQgYW5kIHJldHVybiB0aGUgcmVzdC4gQ2FsbHMgc2VsZi5faW5w
dXRfc3RhcnQKKyAgICAgICAgdG8ga2ljayBvZmYgcHJvY2Vzc2luZy4KKyAgICAgICAgIiIiCisg
ICAgICAgIHRvcCwgcmVzdCA9IGhkcl9lbmQuc3BsaXQoaW5zdHIsIDEpCisgICAgICAgIGhkcl9s
aW5lcyA9IGx3cy5zdWIoIiAiLCB0b3ApLnNwbGl0bGluZXMoKSAgICMgRm9sZCBMV1MKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgdG9wX2xpbmUgPSBoZHJfbGluZXMucG9wKDApCisgICAgICAg
IGV4Y2VwdCBJbmRleEVycm9yOiAjIGVtcHR5CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAg
ICAgaGRyX3R1cGxlcyA9IFtdCisgICAgICAgIGNvbm5fdG9rZW5zID0gW10KKyAgICAgICAgdHJh
bnNmZXJfY29kZXMgPSBbXQorICAgICAgICBjb250ZW50X2xlbmd0aCA9IE5vbmUKKyAgICAgICAg
Zm9yIGxpbmUgaW4gaGRyX2xpbmVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg
IGZuLCBmdiA9IGxpbmUuc3BsaXQoIjoiLCAxKQorICAgICAgICAgICAgICAgIGhkcl90dXBsZXMu
YXBwZW5kKChmbiwgZnYpKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAg
ICAgICAgICAgY29udGludWUgIyBUT0RPOiBmbGVzaCBvdXQgYmFkIGhlYWRlciBoYW5kbGluZwor
ICAgICAgICAgICAgZl9uYW1lID0gZm4uc3RyaXAoKS5sb3dlcigpCisgICAgICAgICAgICBmX3Zh
bCA9IGZ2LnN0cmlwKCkKKworICAgICAgICAgICAgIyBwYXJzZSBjb25uZWN0aW9uLXJlbGF0ZWQg
aGVhZGVycworICAgICAgICAgICAgaWYgZl9uYW1lID09ICJjb25uZWN0aW9uIjoKKyAgICAgICAg
ICAgICAgICBjb25uX3Rva2VucyArPSBbdi5zdHJpcCgpLmxvd2VyKCkgZm9yIHYgaW4gZl92YWwu
c3BsaXQoJywnKV0KKyAgICAgICAgICAgIGVsaWYgZl9uYW1lID09ICJ0cmFuc2Zlci1lbmNvZGlu
ZyI6ICMgRklYTUU6IHBhcmFtZXRlcnMKKyAgICAgICAgICAgICAgICB0cmFuc2Zlcl9jb2RlcyAr
PSBbdi5zdHJpcCgpLmxvd2VyKCkgZm9yIHYgaW4gZl92YWwuc3BsaXQoJywnKV0KKyAgICAgICAg
ICAgIGVsaWYgZl9uYW1lID09ICJjb250ZW50LWxlbmd0aCI6CisgICAgICAgICAgICAgICAgaWYg
Y29udGVudF9sZW5ndGggIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUgIyBp
Z25vcmUgYW55IEMtTCBwYXN0IHRoZSBmaXJzdC4gCisgICAgICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aCA9IGludChmX3ZhbCkKKyAgICAgICAgICAg
ICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKwor
ICAgICAgICAjIEZJWE1FOiBXU1AgYmV0d2VlbiBuYW1lIGFuZCBjb2xvbjsgcmVxdWVzdCA9IDQw
MCwgcmVzcG9uc2UgPSBkaXNjYXJkCisgICAgICAgICMgVE9ETzogcmVtb3ZlICphbmQqIGlnbm9y
ZSBjb25uIHRva2VucyBpZiB0aGUgbWVzc2FnZSB3YXMgMS4wIAorCisgICAgICAgICMgaWdub3Jl
IGNvbnRlbnQtbGVuZ3RoIGlmIHRyYW5zZmVyLWVuY29kaW5nIGlzIHByZXNlbnQKKyAgICAgICAg
aWYgdHJhbnNmZXJfY29kZXMgIT0gW10gYW5kIGNvbnRlbnRfbGVuZ3RoICE9IE5vbmU6CisgICAg
ICAgICAgICBjb250ZW50X2xlbmd0aCA9IE5vbmUgCisKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgYWxsb3dzX2JvZHkgPSBzZWxmLl9pbnB1dF9zdGFydCh0b3BfbGluZSwgaGRyX3R1cGxlcywg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uX3Rva2VucywgdHJhbnNm
ZXJfY29kZXMsIGNvbnRlbnRfbGVuZ3RoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogIyBw
YXJzaW5nIGVycm9yIG9mIHNvbWUga2luZDsgYWJvcnQuCisgICAgICAgICAgICByZXR1cm4gIiIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHNlbGYuX2lucHV0X3N0
YXRlID0gSEVBREVSU19ET05FCisgICAgICAgIGlmIG5vdCBhbGxvd3NfYm9keToKKyAgICAgICAg
ICAgIHNlbGYuX2lucHV0X2RlbGltaXQgPSBOT0JPRFkKKyAgICAgICAgZWxpZiBsZW4odHJhbnNm
ZXJfY29kZXMpID4gMDoKKyAgICAgICAgICAgIGlmICdjaHVua2VkJyBpbiB0cmFuc2Zlcl9jb2Rl
czoKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9kZWxpbWl0ID0gQ0hVTktFRAorICAgICAg
ICAgICAgICAgIHNlbGYuX2lucHV0X2JvZHlfbGVmdCA9IC0xICMgZmxhZyB0aGF0IHdlIGRvbid0
IGtub3cKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfZGVs
aW1pdCA9IENMT1NFCisgICAgICAgIGVsaWYgY29udGVudF9sZW5ndGggIT0gTm9uZToKKyAgICAg
ICAgICAgIHNlbGYuX2lucHV0X2RlbGltaXQgPSBDT1VOVEVECisgICAgICAgICAgICBzZWxmLl9p
bnB1dF9ib2R5X2xlZnQgPSBjb250ZW50X2xlbmd0aAorICAgICAgICBlbHNlOiAKKyAgICAgICAg
ICAgIHNlbGYuX2lucHV0X2RlbGltaXQgPSBDTE9TRQorICAgICAgICByZXR1cm4gcmVzdAorCisg
ICAgIyMjIG91dHB1dC1yZWxhdGVkIG1ldGhvZHMKKworICAgIGRlZiBfb3V0cHV0KHNlbGYsIG91
dCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfaGFuZGxl
X2Vycm9yKHNlbGYsIGVycik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKwor
ICAgIGRlZiBfb3V0cHV0X3N0YXJ0KHNlbGYsIHRvcF9saW5lLCBoZHJfdHVwbGVzLCBkZWxpbWl0
KToKKyAgICAgICAgIiIiCisgICAgICAgIFN0YXJ0IG91cHV0dGluZyBhIEhUVFAgbWVzc2FnZS4K
KyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX291dHB1dF9kZWxpbWl0ID0gZGVsaW1pdAorICAg
ICAgICAjIFRPRE86IHN0cmlwIHdoaXRlc3BhY2U/CisgICAgICAgIG91dCA9IGxpbmVzZXAuam9p
bigKKyAgICAgICAgICAgICAgICBbdG9wX2xpbmVdICsKKyAgICAgICAgICAgICAgICBbIiVzOiAl
cyIgJSAoaywgdikgZm9yIGssIHYgaW4gaGRyX3R1cGxlc10gKworICAgICAgICAgICAgICAgIFsi
IiwgIiJdCisgICAgICAgICkKKyAgICAgICAgc2VsZi5fb3V0cHV0KG91dCkKKyAgICAgICAgc2Vs
Zi5fb3V0cHV0X3N0YXRlID0gSEVBREVSU19ET05FCisKKyAgICBkZWYgX291dHB1dF9ib2R5KHNl
bGYsIGNodW5rKToKKyAgICAgICAgIiIiCisgICAgICAgIE91dHB1dCBhIHBhcnQgb2YgYSBIVFRQ
IG1lc3NhZ2UuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgY2h1bms6CisgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5fb3V0cHV0X2RlbGltaXQgPT0gQ0hVTktFRDoKKyAg
ICAgICAgICAgIGNodW5rID0gIiVzXHJcbiVzXHJcbiIgJSAoaGV4KGxlbihjaHVuaykpWzI6XSwg
Y2h1bmspCisgICAgICAgIHNlbGYuX291dHB1dChjaHVuaykKKyAgICAgICAgI0ZJWE1FOiBib2R5
IGNvdW50aW5nCisjICAgICAgICBzZWxmLl9vdXRwdXRfYm9keV9zZW50ICs9IGxlbihjaHVuaykK
KyMgICAgICAgIGFzc2VydCBzZWxmLl9vdXRwdXRfYm9keV9zZW50IDw9IHNlbGYuX291dHB1dF9j
b250ZW50X2xlbmd0aCwgXAorIyAgICAgICAgICAgICJUb28gbWFueSBib2R5IGJ5dGVzIHNlbnQi
CisKKyAgICBkZWYgX291dHB1dF9lbmQoc2VsZiwgZXJyKToKKyAgICAgICAgIiIiCisgICAgICAg
IEZpbmlzaCBvdXRwdXR0aW5nIGEgSFRUUCBtZXNzYWdlLgorICAgICAgICAiIiIKKyAgICAgICAg
aWYgZXJyOgorICAgICAgICAgICAgc2VsZi5vdXRwdXRfYm9keV9jYiwgc2VsZi5vdXRwdXRfZG9u
ZV9jYiA9IGR1bW15LCBkdW1teQorICAgICAgICAgICAgc2VsZi5fdGNwX2Nvbm4uY2xvc2UoKQor
ICAgICAgICAgICAgc2VsZi5fdGNwX2Nvbm4gPSBOb25lCisgICAgICAgIGVsaWYgc2VsZi5fb3V0
cHV0X2RlbGltaXQgPT0gTk9CT0RZOgorICAgICAgICAgICAgcGFzcyAjIGRpZG4ndCBoYXZlIGEg
Ym9keSBhdCBhbGwuCisgICAgICAgIGVsaWYgc2VsZi5fb3V0cHV0X2RlbGltaXQgPT0gQ0hVTktF
RDoKKyAgICAgICAgICAgIHNlbGYuX291dHB1dCgiMFxyXG5cclxuIikKKyAgICAgICAgZWxpZiBz
ZWxmLl9vdXRwdXRfZGVsaW1pdCA9PSBDT1VOVEVEOgorICAgICAgICAgICAgcGFzcyAjIFRPRE86
IGRvdWJsZS1jaGVjayB0aGUgbGVuZ3RoCisgICAgICAgIGVsaWYgc2VsZi5fb3V0cHV0X2RlbGlt
aXQgPT0gQ0xPU0U6CisgICAgICAgICAgICBzZWxmLl90Y3BfY29ubi5jbG9zZSgpICMgRklYTUU6
IGFic3RyYWN0IG91dD8KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlv
bkVycm9yLCAiVW5rbm93biByZXF1ZXN0IGRlbGltaXRlciAlcyIgJSBzZWxmLl9vdXRwdXRfZGVs
aW1pdApJbmRleDogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvcHVzaF90
Y3AucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0
dHAvcHVzaF90Y3AucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJk
X3BhcnR5L25iaHR0cC9wdXNoX3RjcC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NTMgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgdHJhY2ViYWNrCisKKyIiIgorcHVzaC1i
YXNlZCBhc3luY2hyb25vdXMgVENQCisKK1RoaXMgaXMgYSBnZW5lcmljIGxpYnJhcnkgZm9yIGJ1
aWxkaW5nIGV2ZW50LWJhc2VkIC8gYXN5bmNocm9ub3VzCitUQ1Agc2VydmVycyBhbmQgY2xpZW50
cy4gCisKK0J5IGRlZmF1bHQsIGl0IHVzZXMgdGhlIGFzeW5jb3JlIGxpYnJhcnkgaW5jbHVkZWQg
d2l0aCBQeXRob24uIAorSG93ZXZlciwgaWYgdGhlIHB5ZXZlbnQgbGlicmFyeSAKKzxodHRwOi8v
d3d3Lm1vbmtleS5vcmcvfmR1Z3NvbmcvcHlldmVudC8+IGlzIGF2YWlsYWJsZSwgaXQgd2lsbCAK
K3VzZSB0aGF0LCBvZmZlcmluZyBoaWdoZXIgY29uY3VycmVuY3kgYW5kLCBwZXJoYXBzLCBwZXJm
b3JtYW5jZS4KKworSXQgdXNlcyBhIHB1c2ggbW9kZWw7IGkuZS4sIHRoZSBuZXR3b3JrIGNvbm5l
Y3Rpb24gcHVzaGVzIGRhdGEgdG8KK3lvdSAodXNpbmcgYSBjYWxsYmFjayksIGFuZCB5b3UgcHVz
aCBkYXRhIHRvIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24KKyh1c2luZyBhIGRpcmVjdCBtZXRob2Qg
aW52b2NhdGlvbikuIAorCisqKiogQnVpbGRpbmcgQ2xpZW50cworCitUbyBjb25uZWN0IHRvIGEg
c2VydmVyLCB1c2UgY3JlYXRlX2NsaWVudDsKKz4gaG9zdCA9ICd3d3cuZXhhbXBsZS5jb20nCis+
IHBvcnQgPSAnODAnCis+IHB1c2hfdGNwLmNyZWF0ZV9jbGllbnQoaG9zdCwgcG9ydCwgY29ubl9o
YW5kbGVyLCBlcnJvcl9oYW5kbGVyKQorCitjb25uX2hhbmRsZXIgd2lsbCBiZSBjYWxsZWQgd2l0
aCB0aGUgdGNwX2Nvbm4gYXMgdGhlIGFyZ3VtZW50IAord2hlbiB0aGUgY29ubmVjdGlvbiBpcyBt
YWRlLiBTZWUgIldvcmtpbmcgd2l0aCBDb25uZWN0aW9ucyIgCitiZWxvdyBmb3IgZGV0YWlscy4K
KworZXJyb3JfaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBpZiB0aGUgY29ubmVjdGlvbiBjYW4ndCBi
ZSBtYWRlIGZvciBzb21lIHJlYXNvbi4KKworPiBkZWYgZXJyb3JfaGFuZGxlcihob3N0LCBwb3J0
LCByZWFzb24pOgorPiAgIHByaW50ICJjYW4ndCBjb25uZWN0IHRvICVzOiVzOiAlcyIgJSAoaG9z
dCwgcG9ydCwgcmVhc29uKQorCisqKiogQnVpbGRpbmcgU2VydmVycworCitUbyBzdGFydCBsaXN0
ZW5pbmcsIHVzZSBjcmVhdGVfc2VydmVyOworCis+IHNlcnZlciA9IHB1c2hfdGNwLmNyZWF0ZV9z
ZXJ2ZXIoaG9zdCwgcG9ydCwgY29ubl9oYW5kbGVyKQorCitjb25uX2hhbmRsZXIgaXMgY2FsbGVk
IGV2ZXJ5IHRpbWUgYSBuZXcgY2xpZW50IGNvbm5lY3RzOyBzZWUKKyJXb3JraW5nIHdpdGggQ29u
bmVjdGlvbnMiIGJlbG93IGZvciBkZXRhaWxzLgorCitUaGUgc2VydmVyIG9iamVjdCBpdHNlbGYg
a2VlcHMgdHJhY2sgb2YgYWxsIG9mIHRoZSBvcGVuIGNvbm5lY3Rpb25zLCBhbmQKK2NhbiBiZSB1
c2VkIHRvIGRvIHRoaW5ncyBsaWtlIGlkbGUgY29ubmVjdGlvbiBtYW5hZ2VtZW50LCBldGMuCisK
KyoqKiBXb3JraW5nIHdpdGggQ29ubmVjdGlvbnMKKworRXZlcnkgdGltZSBhIG5ldyBjb25uZWN0
aW9uIGlzIGVzdGFibGlzaGVkIC0tIHdoZXRoZXIgYXMgYSBjbGllbnQKK29yIGFzIGEgc2VydmVy
IC0tIHRoZSBjb25uX2hhbmRsZXIgZ2l2ZW4gaXMgY2FsbGVkIHdpdGggdGNwX2Nvbm4KK2FzIGl0
cyBhcmd1bWVudDsKKworPiBkZWYgY29ubl9oYW5kbGVyKHRjcF9jb25uKToKKz4gICBwcmludCAi
Y29ubmVjdGVkIHRvICVzOiVzIiAlIHRjcF9jb25uLmhvc3QsIHRjcF9jb25uLnBvcnQKKz4gICBy
ZXR1cm4gcmVhZF9jYiwgY2xvc2VfY2IsIHBhdXNlX2NiCisKK0l0IG11c3QgcmV0dXJuIGEgKHJl
YWRfY2IsIGNsb3NlX2NiLCBwYXVzZV9jYikgdHVwbGUuCisKK3JlYWRfY2Igd2lsbCBiZSBjYWxs
ZWQgZXZlcnkgdGltZSBpbmNvbWluZyBkYXRhIGlzIGF2YWlsYWJsZSBmcm9tCit0aGUgY29ubmVj
dGlvbjsKKworPiBkZWYgcmVhZF9jYihkYXRhKToKKz4gICBwcmludCAiZ290IHNvbWUgZGF0YToi
LCBkYXRhCisKK1doZW4geW91IHdhbnQgdG8gd3JpdGUgdG8gdGhlIGNvbm5lY3Rpb24sIGp1c3Qg
d3JpdGUgdG8gaXQ6CisKKz4gdGNwX2Nvbm4ud3JpdGUoZGF0YSkKKworSWYgeW91IHdhbnQgdG8g
Y2xvc2UgdGhlIGNvbm5lY3Rpb24gZnJvbSB5b3VyIHNpZGUsIGp1c3QgY2FsbCBjbG9zZToKKwor
PiB0Y3BfY29ubi5jbG9zZSgpCisKK05vdGUgdGhhdCB0aGlzIHdpbGwgZmx1c2ggYW55IGRhdGEg
YWxyZWFkeSB3cml0dGVuLgorCitJZiB0aGUgb3RoZXIgc2lkZSBjbG9zZXMgdGhlIGNvbm5lY3Rp
b24sIGNsb3NlX2NiIHdpbGwgYmUgY2FsbGVkOworCis+IGRlZiBjbG9zZV9jYigpOgorPiAgIHBy
aW50ICJvb3BzLCB0aGV5IGRvbid0IGxpa2UgdXMgYW55IG1vcmUuLi4iCisKK0lmIHlvdSB3cml0
ZSB0b28gbXVjaCBkYXRhIHRvIHRoZSBjb25uZWN0aW9uIGFuZCB0aGUgYnVmZmVycyBmaWxsIHVw
LCAKK3BhdXNlX2NiIHdpbGwgYmUgY2FsbGVkIHdpdGggVHJ1ZSB0byB0ZWxsIHlvdSB0byBzdG9w
IHNlbmRpbmcgZGF0YSAKK3RlbXBvcmFyaWx5OworCis+IGRlZiBwYXVzZV9jYihwYXVzZWQpOgor
PiAgIGlmIHBhdXNlZDoKKz4gICAgICAgIyBzdG9wIHNlbmRpbmcgZGF0YQorPiAgIGVsc2U6Cis+
ICAgICAgICMgaXQncyBPSyB0byBzdGFydCBhZ2FpbgorCitOb3RlIHRoYXQgdGhpcyBpcyBhZHZp
c29yeTsgaWYgeW91IGlnbm9yZSBpdCwgdGhlIGRhdGEgd2lsbCBzdGlsbCBiZQorYnVmZmVyZWQs
IGJ1dCB0aGUgYnVmZmVyIHdpbGwgZ3Jvdy4KKworTGlrZXdpc2UsIGlmIHlvdSB3YW50IHRvIHBh
dXNlIHRoZSBjb25uZWN0aW9uIGJlY2F1c2UgeW91ciBidWZmZXJzIAorYXJlIGZ1bGwsIGNhbGwg
cGF1c2U7CisKKz4gdGNwX2Nvbm4ucGF1c2UoVHJ1ZSkKKworYnV0IGRvbid0IGZvcmdldCB0byB0
ZWxsIGl0IHdoZW4gaXQncyBPSyB0byBzZW5kIGRhdGEgYWdhaW47CisKKz4gdGNwX2Nvbm4ucGF1
c2UoRmFsc2UpCisKKyoqKiBUaW1lZCBFdmVudHMKKworSXQncyBvZnRlbiB1c2VmdWwgdG8gc2No
ZWR1bGUgYW4gZXZlbnQgdG8gYmUgcnVuIHNvbWUgdGltZSBpbiB0aGUgZnV0dXJlOworCis+IHB1
c2hfdGNwLnNjaGVkdWxlKDEwLCBjYiwgImZvbyIpCisKK1RoaXMgZXhhbXBsZSB3aWxsIHNjaGVk
dWxlIHRoZSBmdW5jdGlvbiAnY2InIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBhcmd1bWVudAorImZv
byIgdGVuIHNlY29uZHMgaW4gdGhlIGZ1dHVyZS4KKworKioqIFJ1bm5pbmcgdGhlIGxvb3AKKwor
SW4gYWxsIGNhc2VzIChjbGllbnRzLCBzZXJ2ZXJzLCBhbmQgdGltZWQgZXZlbnRzKSwgeW91J2xs
IG5lZWQgdG8gc3RhcnQKK3RoZSBldmVudCBsb29wIGJlZm9yZSBhbnl0aGluZyBhY3R1YWxseSBo
YXBwZW5zOworCis+IHB1c2hfdGNwLnJ1bigpCisKK1RvIHN0b3AgaXQsIGp1c3Qgc3RvcCBpdDsK
KworPiBwdXNoX3RjcC5zdG9wKCkKKyIiIgorCitfX2F1dGhvcl9fID0gIk1hcmsgTm90dGluZ2hh
bSA8bW5vdEBtbm90Lm5ldD4iCitfX2NvcHlyaWdodF9fID0gIiIiXAorQ29weXJpZ2h0IChjKSAy
MDA4LTIwMDkgTWFyayBOb3R0aW5naGFtCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs
IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMg
c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy
ZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk
aW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwg
bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3Bp
ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29m
dHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np
b24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFs
IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB
UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQs
IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF
TUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT
IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO
RyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF
IFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgorIiIiCisKK2ltcG9ydCBz
eXMKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzc2wKK2ltcG9ydCBlcnJubworaW1wb3J0IGFzeW5j
b3JlCitpbXBvcnQgdGltZQoraW1wb3J0IGJpc2VjdAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBz
ZWxlY3QKKwordHJ5OgorICAgIGltcG9ydCBldmVudCAgICAgICMgaHR0cDovL3d3dy5tb25rZXku
b3JnL35kdWdzb25nL3B5ZXZlbnQvCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZXZlbnQgPSBO
b25lCisKK2NsYXNzIF9UY3BDb25uZWN0aW9uKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgorICAgICJC
YXNlIGNsYXNzIGZvciBhIFRDUCBjb25uZWN0aW9uLiIKKyAgICB3cml0ZV9idWZzaXplID0gMTYK
KyAgICByZWFkX2J1ZnNpemUgPSAxMDI0ICogNAorICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAg
ICAgICAgICAgICAgICBzb2NrLAorICAgICAgICAgICAgICAgICBpc19zZXJ2ZXIsCisgICAgICAg
ICAgICAgICAgIGhvc3QsCisgICAgICAgICAgICAgICAgIHBvcnQsCisgICAgICAgICAgICAgICAg
IHVzZV9zc2wsCisgICAgICAgICAgICAgICAgIGNlcnRmaWxlLAorICAgICAgICAgICAgICAgICBr
ZXlmaWxlLAorICAgICAgICAgICAgICAgICBjb25uZWN0X2Vycm9yX2hhbmRsZXI9Tm9uZSk6Cisg
ICAgICAgIHNlbGYudXNlX3NzbCA9IHVzZV9zc2wKKyAgICAgICAgc2VsZi5zb2NrZXQgPSBzb2Nr
CisgICAgICAgIGlmIGlzX3NlcnZlcjoKKyAgICAgICAgICAgIGlmIHNlbGYudXNlX3NzbDogCisg
ICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldCA9IHNz
bC53cmFwX3NvY2tldChzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1rZXlmaWxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5k
c2hha2Vfb25fY29ubmVjdD1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQu
ZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlcnI6
CisgICAgICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfV0FO
VF9SRUFEOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbc2VsZi5zb2Nr
ZXRdLCBbXSwgW10pCisgICAgICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3Ns
LlNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNl
bGVjdChbXSwgW3NlbGYuc29ja2V0XSwgW10pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBzZWxmLmhvc3QgPSBob3N0Cisg
ICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5jb25uZWN0X2Vycm9yX2hhbmRs
ZXIgPSBjb25uZWN0X2Vycm9yX2hhbmRsZXIKKyAgICAgICAgc2VsZi5yZWFkX2NiID0gTm9uZQor
ICAgICAgICBzZWxmLmNsb3NlX2NiID0gTm9uZQorICAgICAgICBzZWxmLl9jbG9zZV9jYl9jYWxs
ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnBhdXNlX2NiID0gTm9uZSAgCisgICAgICAgIHNlbGYu
dGNwX2Nvbm5lY3RlZCA9IFRydWUgIyBhbHdheXMgaGFuZGVkIGEgY29ubmVjdGVkIHNvY2tldCAo
d2UgYXNzdW1lKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZSAjIFRPRE86IHNob3VsZCBi
ZSBwYXVzZWQgYnkgZGVmYXVsdAorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UKKyAgICAg
ICAgc2VsZi5fd3JpdGVfYnVmZmVyID0gW10KKyAgICAgICAgaWYgZXZlbnQ6CisgICAgICAgICAg
ICBzZWxmLl9yZXZlbnQgPSBldmVudC5yZWFkKHNlbGYuc29ja2V0LCBzZWxmLmhhbmRsZV9yZWFk
KQorICAgICAgICAgICAgc2VsZi5fd2V2ZW50ID0gZXZlbnQud3JpdGUoc2VsZi5zb2NrZXQsIHNl
bGYuaGFuZGxlX3dyaXRlKQorICAgICAgICBlbHNlOiAjIGFzeW5jb3JlCisgICAgICAgICAgICBh
c3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIHNlbGYuc29ja2V0KQorICAgIAorICAg
IGRlZiBoYW5kbGVfcmVhZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBjb25uZWN0
aW9uIGhhcyBkYXRhIHJlYWQgZm9yIHJlYWRpbmc7IGNhbGwgcmVhZF9jYgorICAgICAgICBpZiBh
cHByb3ByaWF0ZS4KKyAgICAgICAgIiIiCisgICAgICAgICMgV2Ugd2FudCB0byByZWFkIGFzIG11
Y2ggZGF0YSBhcyB3ZSBjYW4sIGxvb3AgaGVyZSB1bnRpbCB3ZSBnZXQgRUFHQUlOCisgICAgICAg
IHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNl
bGYucmVjdihzZWxmLnJlYWRfYnVmc2l6ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJy
b3IsIHdoeToKKyAgICAgICAgICAgICAgICBpZiB3aHlbMF0gaW4gW2Vycm5vLkVCQURGLCBlcnJu
by5FQ09OTlJFU0VULCBlcnJuby5FUElQRSwgZXJybm8uRVRJTUVET1VUXToKKyAgICAgICAgICAg
ICAgICAgICAgc2VsZi5jb25uX2Nsb3NlZCgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybgor
ICAgICAgICAgICAgICAgIGVsaWYgd2h5WzBdIGluIFtlcnJuby5FQ09OTlJFRlVTRUQsIGVycm5v
LkVORVRVTlJFQUNIXSBhbmQgc2VsZi5jb25uZWN0X2Vycm9yX2hhbmRsZXI6CisgICAgICAgICAg
ICAgICAgICAgIHNlbGYudGNwX2Nvbm5lY3RlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAg
IHNlbGYuY29ubmVjdF9lcnJvcl9oYW5kbGVyKHdoeVswXSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuCisgICAgICAgICAgICAgICAgZWxpZiB3aHlbMF0gaW4gW2Vycm5vLkVBR0FJTl06Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgIGlmIGRhdGEgPT0gIiI6CisgICAgICAg
ICAgICAgICAgc2VsZi5jb25uX2Nsb3NlZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucmVhZF9jYihkYXRhKQorICAgICAg
ICAgICAgICAgIGlmIGV2ZW50OgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnJlYWRfY2Ig
YW5kIHNlbGYudGNwX2Nvbm5lY3RlZCBhbmQgbm90IHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZXZlbnQKKyAgICAgICAgICAgIHJldHVybgorICAg
ICAgICAKKyAgICBkZWYgaGFuZGxlX3dyaXRlKHNlbGYpOgorICAgICAgICAiVGhlIGNvbm5lY3Rp
b24gaXMgcmVhZHkgZm9yIHdyaXRpbmc7IHdyaXRlIGFueSBidWZmZXJlZCBkYXRhLiIKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgIyBUaGlzIHdyaXRlIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50
IGFuZCBjb2FsZXNjZSBtdWx0aXBsZSBlbGVtZW50cworICAgICAgICAgICAgIyBvZiB0aGUgX3dy
aXRlX2J1ZmZlciBpbnRvIGEgc2luZ2xlIHdyaXRlLiAgSG93ZXZlciwgdGhlIHN0b2NrCisgICAg
ICAgICAgICAjIHNzbCBsaWJyYXJ5IHdpdGggcHl0aG9uIG5lZWRzIHVzIHRvIHBhc3MgdGhlIHNh
bWUgYnVmZmVyIGJhY2sKKyAgICAgICAgICAgICMgYWZ0ZXIgYSBzb2NrZXQuc2VuZCgpIHJldHVy
bnMgMCBieXRlcy4gIFRvIGZpeCB0aGlzLCB3ZSBuZWVkCisgICAgICAgICAgICAjIHRvIHVzZSB0
aGUgU1NMX01PREVfQUNDRVBUX01PVklOR19XUklURV9CVUZGRVIsIGJ1dCB0aGlzIGNhbgorICAg
ICAgICAgICAgIyBvbmx5IGJlIGRvbmUgb24gdGhlIGNvbnRleHQgaW4gdGhlIHNzbC5jIGNvZGUu
ICBTbywgd2Ugd29yaworICAgICAgICAgICAgIyBhcm91bmQgdGhpcyBwcm9ibGVtIGJ5IG5vdCBj
b2FsZXNjaW5nIGJ1ZmZlcnMuICBSZXBlYXRlZCBjYWxscworICAgICAgICAgICAgIyB0byBoYW5k
bGVfd3JpdGUgYWZ0ZXIgU1NMIGVycm9ycyBhbHdheXMgaGFuZCB0aGUgc2FtZSBidWZmZXIKKyAg
ICAgICAgICAgICMgdG8gdGhlIFNTTCBsaWJyYXJ5LCBhbmQgaXQgd29ya3MuCisgICAgICAgICAg
ICB3aGlsZSBsZW4oc2VsZi5fd3JpdGVfYnVmZmVyKToKKyAgICAgICAgICAgICAgICBkYXRhID0g
c2VsZi5fd3JpdGVfYnVmZmVyWzBdCisgICAgICAgICAgICAgICAgc2VudCA9IHNlbGYuc29ja2V0
LnNlbmQoc2VsZi5fd3JpdGVfYnVmZmVyWzBdKQorICAgICAgICAgICAgICAgIGlmIHNlbnQgPT0g
bGVuKHNlbGYuX3dyaXRlX2J1ZmZlclswXSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dy
aXRlX2J1ZmZlciA9IHNlbGYuX3dyaXRlX2J1ZmZlclsxOl0KKyAgICAgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgICAgICAjIE9ubHkgZGlkIGEgcGFydGlhbCB3cml0ZS4KKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfYnVmZmVyWzBdID0gc2VsZi5fd3JpdGVfYnVmZmVy
WzBdW3NlbnQ6XQorICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlcnI6CisgICAgICAgICAg
ICBsb2dnaW5nLmVycm9yKHN0cihzZWxmLnNvY2tldCkgKyAiU1NMIFdyaXRlIGVycm9yOiAiICsg
c3RyKGVycikpCisgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX1dB
TlRfUkVBRDoKKyAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtzZWxmLnNvY2tldF0sIFtd
LCBbXSkKKyAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9XQU5U
X1dSSVRFOgorICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW10sIFtzZWxmLnNvY2tldF0s
IFtdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBl
eGNlcHQgc29ja2V0LmVycm9yLCB3aHk6CisgICAgICAgICAgICBpZiB3aHlbMF0gaW4gW2Vycm5v
LkVCQURGLCBlcnJuby5FQ09OTlJFU0VULCBlcnJuby5FUElQRSwgZXJybm8uRVRJTUVET1VUXToK
KyAgICAgICAgICAgICAgICBzZWxmLmNvbm5fY2xvc2VkKCkKKyAgICAgICAgICAgICAgICByZXR1
cm4KKyAgICAgICAgICAgIGVsaWYgd2h5WzBdIGluIFtlcnJuby5FQ09OTlJFRlVTRUQsIGVycm5v
LkVORVRVTlJFQUNIXSBhbmQgXAorICAgICAgICAgICAgICBzZWxmLmNvbm5lY3RfZXJyb3JfaGFu
ZGxlcjoKKyAgICAgICAgICAgICAgICBzZWxmLnRjcF9jb25uZWN0ZWQgPSBGYWxzZQorICAgICAg
ICAgICAgICAgIHNlbGYuY29ubmVjdF9lcnJvcl9oYW5kbGVyKHdoeVswXSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsaWYgd2h5WzBdIGluIFtlcnJuby5FQUdBSU5dOgor
ICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
cmFpc2UKKyAgICAgICAgaWYgc2VsZi5wYXVzZV9jYiBhbmQgbGVuKHNlbGYuX3dyaXRlX2J1ZmZl
cikgPCBzZWxmLndyaXRlX2J1ZnNpemU6CisgICAgICAgICAgICBzZWxmLnBhdXNlX2NiKEZhbHNl
KQorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisg
ICAgICAgIGlmIGV2ZW50OgorICAgICAgICAgICAgaWYgc2VsZi50Y3BfY29ubmVjdGVkIGFuZCAo
bGVuKHNlbGYuX3dyaXRlX2J1ZmZlcikgPiAwIG9yIHNlbGYuX2Nsb3NpbmcpOgorICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxmLl93ZXZlbnQKKworICAgIGRlZiBjb25uX2Nsb3NlZChzZWxmKToK
KyAgICAgICAgIiIiCisgICAgICAgIFRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZCBieSB0
aGUgb3RoZXIgc2lkZS4gRG8gbG9jYWwgY2xlYW51cAorICAgICAgICBhbmQgdGhlbiBjYWxsIGNs
b3NlX2NiLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQorICAgICAg
ICBzZWxmLnRjcF9jb25uZWN0ZWQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9jbG9zZV9jYl9j
YWxsZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxpZiBzZWxmLmNsb3NlX2NiOgor
ICAgICAgICAgICAgc2VsZi5fY2xvc2VfY2JfY2FsbGVkID0gVHJ1ZQorICAgICAgICAgICAgc2Vs
Zi5jbG9zZV9jYigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHVuY29tZm9ydGFibGUg
cmFjZSBjb25kaXRpb24gaGVyZSwgc28gd2UgdHJ5IGFnYWluLgorICAgICAgICAgICAgIyBub3Qg
Z3JlYXQsIGJ1dCBvayBmb3Igbm93LiAKKyAgICAgICAgICAgIHNjaGVkdWxlKDEsIHNlbGYuY29u
bl9jbG9zZWQpCisgICAgaGFuZGxlX2Nsb3NlID0gY29ubl9jbG9zZWQgIyBmb3IgYXN5bmNvcmUK
KworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgIldyaXRlIGRhdGEgdG8gdGhl
IGNvbm5lY3Rpb24uIgorCSMgYXNzZXJ0IG5vdCBzZWxmLl9wYXVzZWQKKworICAgICAgICAjIEZv
ciBTU0wgd2Ugd2FudCB0byB3cml0ZSBzbWFsbCBjaHVua3Mgc28gdGhhdCB3ZSBkb24ndCBlbmQg
dXAgd2l0aAorICAgICAgICAjIG11bHRpLXBhY2tldCBzcGFucyBvZiBkYXRhLiAgTXVsdGktcGFj
a2V0IHNwYW5zIGxlYWRzIHRvIGluY3JlYXNlZAorICAgICAgICAjIGxhdGVuY3kgYmVjYXVzZSBh
bGwgcGFja2V0cyBtdXN0IGJlIHJlY2VpdmVkIGJlZm9yZSBhbnkgb2YgdGhlCisgICAgICAgICMg
cGFja2V0cyBjYW4gYmUgZGVsaXZlcmVkIHRvIHRoZSBhcHBsaWNhdGlvbiBsYXllci4KKyAgICAg
ICAgdXNlX3NtYWxsX2NodW5rcyA9IFRydWUKKyAgICAgICAgaWYgdXNlX3NtYWxsX2NodW5rczoK
KyAgICAgICAgICAgIGRhdGFfbGVuZ3RoID0gbGVuKGRhdGEpCisgICAgICAgICAgICBzdGFydF9w
b3MgPSAwCisgICAgICAgICAgICB3aGlsZSBkYXRhX2xlbmd0aCA+IDA6CisgICAgICAgICAgICAg
ICBjaHVua19sZW5ndGggPSBtaW4oZGF0YV9sZW5ndGgsIDE0NjApCisgICAgICAgICAgICAgICBz
ZWxmLl93cml0ZV9idWZmZXIuYXBwZW5kKGRhdGFbc3RhcnRfcG9zOnN0YXJ0X3BvcyArIGNodW5r
X2xlbmd0aF0pCisgICAgICAgICAgICAgICBzdGFydF9wb3MgKz0gY2h1bmtfbGVuZ3RoCisgICAg
ICAgICAgICAgICBkYXRhX2xlbmd0aCAtPSBjaHVua19sZW5ndGgKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICBzZWxmLl93cml0ZV9idWZmZXIuYXBwZW5kKGRhdGEpCisgICAgICAgIGlmIHNlbGYu
cGF1c2VfY2IgYW5kIGxlbihzZWxmLl93cml0ZV9idWZmZXIpID4gc2VsZi53cml0ZV9idWZzaXpl
OgorICAgICAgICAgICAgc2VsZi5wYXVzZV9jYihUcnVlKQorICAgICAgICBpZiBldmVudDoKKyAg
ICAgICAgICAgIGlmIG5vdCBzZWxmLl93ZXZlbnQucGVuZGluZygpOgorICAgICAgICAgICAgICAg
IHNlbGYuX3dldmVudC5hZGQoKQorCisgICAgZGVmIHBhdXNlKHNlbGYsIHBhdXNlZCk6CisgICAg
ICAgICIiIgorICAgICAgICBUZW1wb3JhcmlseSBzdG9wL3N0YXJ0IHJlYWRpbmcgZnJvbSB0aGUg
Y29ubmVjdGlvbiBhbmQgcHVzaGluZworICAgICAgICBpdCB0byB0aGUgYXBwLgorICAgICAgICAi
IiIKKyAgICAgICAgaWYgZXZlbnQ6CisgICAgICAgICAgICBpZiBwYXVzZWQ6CisgICAgICAgICAg
ICAgICAgaWYgc2VsZi5fcmV2ZW50LnBlbmRpbmcoKToKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fcmV2ZW50LmRlbGV0ZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlm
IG5vdCBzZWxmLl9yZXZlbnQucGVuZGluZygpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9y
ZXZlbnQuYWRkKCkKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gcGF1c2VkCisKKyAgICBkZWYgY2xv
c2Uoc2VsZik6CisgICAgICAgICJGbHVzaCBidWZmZXJlZCBkYXRhIChpZiBhbnkpIGFuZCBjbG9z
ZSB0aGUgY29ubmVjdGlvbi4iCisgICAgICAgIHNlbGYucGF1c2UoVHJ1ZSkKKyAgICAgICAgaWYg
bGVuKHNlbGYuX3dyaXRlX2J1ZmZlcikgPiAwOgorICAgICAgICAgICAgc2VsZi5fY2xvc2luZyA9
IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKKyAg
ICAgICAgICAgIHNlbGYudGNwX2Nvbm5lY3RlZCA9IEZhbHNlCisKKyAgICBkZWYgcmVhZGFibGUo
c2VsZik6CisgICAgICAgICJhc3luY29yZS1zcGVjaWZpYyByZWFkYWJsZSBtZXRob2QiCisgICAg
ICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5zb2NrZXQsIHNzbC5TU0xTb2NrZXQpOgorICAgICAgICAg
ICAgd2hpbGUgc2VsZi5zb2NrZXQucGVuZGluZygpID4gMDoKKyAgICAgICAgICAgICAgICBzZWxm
LmhhbmRsZV9yZWFkX2V2ZW50KCkKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZF9jYiBhbmQgc2Vs
Zi50Y3BfY29ubmVjdGVkIGFuZCBub3Qgc2VsZi5fcGF1c2VkCisgICAgCisgICAgZGVmIHdyaXRh
YmxlKHNlbGYpOgorICAgICAgICAiYXN5bmNvcmUtc3BlY2lmaWMgd3JpdGFibGUgbWV0aG9kIgor
ICAgICAgICByZXR1cm4gc2VsZi50Y3BfY29ubmVjdGVkIGFuZCBcCisgICAgICAgICAgICAobGVu
KHNlbGYuX3dyaXRlX2J1ZmZlcikgPiAwIG9yIHNlbGYuX2Nsb3NpbmcpCisKKyAgICBkZWYgaGFu
ZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICAiYXN5bmNvcmUtc3BlY2lmaWMgZXJyb3IgbWV0aG9k
IgorICAgICAgICBpZiBzZWxmLnVzZV9zc2w6CisgICAgICAgICAgICBlcnIgPSBzeXMuZXhjX2lu
Zm8oKQorICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyhlcnJbMF0sIHNvY2tldC5lcnJvcik6Cisg
ICAgICAgICAgICAgICAgc2VsZi5jb25uZWN0X2Vycm9yX2hhbmRsZXIoZXJyWzBdKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgIyBUcmVhdCB0aGUgZXJyb3IgYXMgYSBjb25uZWN0aW9uIGNsb3NlZC4KKyAgICAgICAg
ICAgIHQsIGVyciwgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgbG9nZ2luZy5lcnJv
cigiVENQIGVycm9yISIgKyBzdHIoZXJyKSkKKyAgICAgICAgICAgIHNlbGYuY29ubl9jbG9zZWQo
KQorCitjbGFzcyBjcmVhdGVfc2VydmVyKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgorICAgICJBbiBh
c3luY2hybm91cyBUQ1Agc2VydmVyLiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9y
dCwgdXNlX3NzbCwgY2VydGZpbGUsIGtleWZpbGUsIGNvbm5faGFuZGxlcik6CisgICAgICAgIHNl
bGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLnVz
ZV9zc2wgPSB1c2Vfc3NsCisgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQorICAgICAg
ICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCisgICAgICAgIHNlbGYuY29ubl9oYW5kbGVyID0gY29u
bl9oYW5kbGVyCisgICAgICAgIGlmIGV2ZW50OgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5z
b2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNv
Y2suc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09M
X1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKyAgICAgICAgICAgIHNvY2suYmluZCgo
aG9zdCwgcG9ydCkpCisgICAgICAgICAgICBzb2NrLmxpc3Rlbihzb2NrZXQuU09NQVhDT05OKQor
ICAgICAgICAgICAgZXZlbnQuZXZlbnQoc2VsZi5oYW5kbGVfYWNjZXB0LCBoYW5kbGU9c29jaywK
KyAgICAgICAgICAgICAgICAgICAgICAgIGV2dHlwZT1ldmVudC5FVl9SRUFEfGV2ZW50LkVWX1BF
UlNJU1QpLmFkZCgpCisgICAgICAgIGVsc2U6ICMgYXN5bmNvcmUKKyAgICAgICAgICAgIGFzeW5j
b3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX3Nv
Y2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc2Vs
Zi5zZXRfcmV1c2VfYWRkcigpCisgICAgICAgICAgICBzZWxmLmJpbmQoKGhvc3QsIHBvcnQpKQor
ICAgICAgICAgICAgc2VsZi5saXN0ZW4oc29ja2V0LlNPTUFYQ09OTikgIyBUT0RPOiBzZXQgU09f
U05EQlVGLCBTT19SQ1ZCVUYKKworICAgIGRlZiBoYW5kbGVfYWNjZXB0KHNlbGYsICphcmdzKToK
KyAgICAgICAgaWYgZXZlbnQ6CisgICAgICAgICAgICBjb25uLCBhZGRyID0gYXJnc1sxXS5hY2Nl
cHQoKQorICAgICAgICBlbHNlOiAjIGFzeW5jb3JlCisgICAgICAgICAgICBjb25uLCBhZGRyID0g
c2VsZi5hY2NlcHQoKQorICAgICAgICB0Y3BfY29ubiA9IF9UY3BDb25uZWN0aW9uKGNvbm4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
dXNlX3NzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNlcnRmaWxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYua2V5ZmlsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9lcnJvcikKKyAgICAgICAg
dGNwX2Nvbm4ucmVhZF9jYiwgdGNwX2Nvbm4uY2xvc2VfY2IsIHRjcF9jb25uLnBhdXNlX2NiID0g
c2VsZi5jb25uX2hhbmRsZXIodGNwX2Nvbm4pCisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYs
IGVycj1Ob25lKToKKyAgICAgICAgI3JhaXNlIEFzc2VydGlvbkVycm9yLCAidGhpcyAoJXMpIHNo
b3VsZCBuZXZlciBoYXBwZW4gZm9yIGEgc2VydmVyLiIgJSBlcnIKKyAgICAgICAgcGFzcworCisK
K2NsYXNzIGNyZWF0ZV9jbGllbnQoYXN5bmNvcmUuZGlzcGF0Y2hlcik6CisgICAgIkFuIGFzeW5j
aHJvbm91cyBUQ1AgY2xpZW50LiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwg
Y29ubl9oYW5kbGVyLCBjb25uZWN0X2Vycm9yX2hhbmRsZXIsIHRpbWVvdXQ9Tm9uZSk6CisgICAg
ICAgIHNlbGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBz
ZWxmLmNvbm5faGFuZGxlciA9IGNvbm5faGFuZGxlcgorICAgICAgICBzZWxmLmNvbm5lY3RfZXJy
b3JfaGFuZGxlciA9IGNvbm5lY3RfZXJyb3JfaGFuZGxlcgorICAgICAgICBzZWxmLl90aW1lb3V0
X2V2ID0gTm9uZQorICAgICAgICBzZWxmLl9jb25uX2hhbmRsZWQgPSBGYWxzZQorICAgICAgICBz
ZWxmLl9lcnJvcl9zZW50ID0gRmFsc2UKKyAgICAgICAgIyBUT0RPOiBzb2NrZXQuZ2V0YWRkcmlu
Zm8oKTsgbmVlZHMgdG8gYmUgbm9uLWJsb2NraW5nLgorICAgICAgICBpZiBldmVudDoKKyAgICAg
ICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19T
VFJFQU0pCisgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKDApCisgICAgICAgICAgICBldmVu
dC53cml0ZShzb2NrLCBzZWxmLmhhbmRsZV9jb25uZWN0LCBzb2NrKS5hZGQoKQorICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIGVyciA9IHNvY2suY29ubmVjdF9leCgoaG9zdCwgcG9y
dCkpICMgRklYTUU6IGNoZWNrIGZvciBETlMgZXJyb3JzLCBldGMuCisgICAgICAgICAgICBleGNl
cHQgc29ja2V0LmVycm9yLCB3aHk6CisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXJyb3Io
d2h5KQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgZXJyICE9IGVycm5v
LkVJTlBST0dSRVNTOiAjIEZJWE1FOiBvdGhlcnM/CisgICAgICAgICAgICAgICAgc2VsZi5oYW5k
bGVfZXJyb3IoZXJyKQorICAgICAgICBlbHNlOiAjIGFzeW5jb3JlCisgICAgICAgICAgICBhc3lu
Y29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICBzZWxmLmNyZWF0ZV9z
b2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbm5lY3QoKGhvc3QsIHBvcnQpKQorICAgICAgICAg
ICAgZXhjZXB0IHNvY2tldC5lcnJvciwgd2h5OgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxl
X2Vycm9yKHdoeVswXSkKKyAgICAgICAgaWYgdGltZW91dDoKKyAgICAgICAgICAgIHRvX2VyciA9
IGVycm5vLkVUSU1FRE9VVAorICAgICAgICAgICAgc2VsZi5fdGltZW91dF9ldiA9IHNjaGVkdWxl
KHRpbWVvdXQsIHNlbGYuaGFuZGxlX2Vycm9yLCB0b19lcnIpCisKKyAgICBkZWYgaGFuZGxlX2Nv
bm5lY3Qoc2VsZiwgc29jaz1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5fdGltZW91dF9ldjoKKyAg
ICAgICAgICAgIHNlbGYuX3RpbWVvdXRfZXYuZGVsZXRlKCkKKyAgICAgICAgaWYgc29jayBpcyBO
b25lOiAjIGFzeW5jb3JlCisgICAgICAgICAgICBzb2NrID0gc2VsZi5zb2NrZXQKKyAgICAgICAg
dGNwX2Nvbm4gPSBfVGNwQ29ubmVjdGlvbihzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
aG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBvcnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UsICAgICAjIHVzZV9zc2wKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYua2V5ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9lcnJvcikKKyAgICAgICAgdGNwX2Nvbm4ucmVhZF9j
YiwgdGNwX2Nvbm4uY2xvc2VfY2IsIHRjcF9jb25uLnBhdXNlX2NiID0gc2VsZi5jb25uX2hhbmRs
ZXIodGNwX2Nvbm4pCisKKyAgICBkZWYgaGFuZGxlX3dyaXRlKHNlbGYpOgorICAgICAgICBwYXNz
CisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYsIGVycj1Ob25lKToKKyAgICAgICAgaWYgc2Vs
Zi5fdGltZW91dF9ldjoKKyAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfZXYuZGVsZXRlKCkKKyAg
ICAgICAgaWYgbm90IHNlbGYuX2Vycm9yX3NlbnQ6CisgICAgICAgICAgICBzZWxmLl9lcnJvcl9z
ZW50ID0gVHJ1ZQorICAgICAgICAgICAgaWYgZXJyID09IE5vbmU6CisgICAgICAgICAgICAgICAg
dCwgZXJyLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBzZWxmLmNvbm5lY3RfZXJy
b3JfaGFuZGxlcihzZWxmLmhvc3QsIHNlbGYucG9ydCwgZXJyKQorCisKKyMgYWRhcHRlZCBmcm9t
IE1lZHVzYQorY2xhc3MgX0FzeW5jb3JlTG9vcDoKKyAgICAiQXN5bmNvcmUgbWFpbiBsb29wICsg
ZXZlbnQgc2NoZWR1bGluZy4iCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxm
LmV2ZW50cyA9IFtdCisgICAgICAgIHNlbGYubnVtX2NoYW5uZWxzID0gMAorICAgICAgICBzZWxm
Lm1heF9jaGFubmVscyA9IDAKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gMC4wMDEgICAgIyAxbXMK
KyAgICAgICAgc2VsZi5ncmFudWxhcml0eSA9IDAuMDAxICAgIyAxbXMKKyAgICAgICAgc2VsZi5z
b2NrZXRfbWFwID0gYXN5bmNvcmUuc29ja2V0X21hcAorCisgICAgZGVmIHJ1bihzZWxmKToKKyAg
ICAgICAgIlN0YXJ0IHRoZSBsb29wLiIKKyAgICAgICAgbGFzdF9ldmVudF9jaGVjayA9IDAKKyAg
ICAgICAgd2hpbGUgc2VsZi5zb2NrZXRfbWFwIG9yIHNlbGYuZXZlbnRzOgorICAgICAgICAgICAg
bm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGlmIChub3cgLSBsYXN0X2V2ZW50X2NoZWNr
KSA+PSBzZWxmLmdyYW51bGFyaXR5OgorICAgICAgICAgICAgICAgIGxhc3RfZXZlbnRfY2hlY2sg
PSBub3cKKyAgICAgICAgICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHM6CisgICAgICAg
ICAgICAgICAgICAgIHdoZW4sIHdoYXQgPSBldmVudAorICAgICAgICAgICAgICAgICAgICBpZiBu
b3cgPj0gd2hlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXZlbnRzLnJlbW92ZShl
dmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQoKQorICAgICAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICMgc2Ft
cGxlIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKKyAgICAgICAgICAgIG4gPSBsZW4oc2VsZi5zb2Nr
ZXRfbWFwKQorICAgICAgICAgICAgc2VsZi5udW1fY2hhbm5lbHMgPSBuCisgICAgICAgICAgICBp
ZiBuID4gc2VsZi5tYXhfY2hhbm5lbHM6CisgICAgICAgICAgICAgICAgc2VsZi5tYXhfY2hhbm5l
bHMgPSBuCisgICAgICAgICAgICBhc3luY29yZS5wb2xsKHNlbGYudGltZW91dCkKKworICAgIGRl
ZiBzdG9wKHNlbGYpOgorICAgICAgICAiU3RvcCB0aGUgbG9vcC4iCisgICAgICAgIHNlbGYuc29j
a2V0X21hcCA9IHt9CisgICAgICAgIHNlbGYuZXZlbnRzID0gW10KKyAgICAgICAgICAgIAorICAg
IGRlZiBzY2hlZHVsZShzZWxmLCBkZWx0YSwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIlNj
aGVkdWxlIGNhbGxhYmxlIGNhbGxiYWNrIHRvIGJlIHJ1biBpbiBkZWx0YSBzZWNvbmRzIHdpdGgg
KmFyZ3MuIgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIGlmIGNhbGxiYWNrOgorICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKCphcmdzKQorICAgICAgICBuZXdfZXZlbnQgPSAodGltZS50
aW1lKCkgKyBkZWx0YSwgY2IpCisgICAgICAgIGV2ZW50cyA9IHNlbGYuZXZlbnRzCisgICAgICAg
IGJpc2VjdC5pbnNvcnQoZXZlbnRzLCBuZXdfZXZlbnQpCisgICAgICAgIGNsYXNzIGV2ZW50X2hv
bGRlcjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBz
ZWxmLl9kZWxldGVkID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBkZWxldGUoc2VsZik6CisgICAg
ICAgICAgICAgICAgaWYgbm90IHNlbGYuX2RlbGV0ZWQ6CisgICAgICAgICAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cy5yZW1vdmUobmV3X2V2ZW50KQorICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVsZXRlZCA9IFRydWUKKyAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6ICMgYWxyZWFkeSBnb25lCisgICAgICAgICAgICAgICAg
ICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBldmVudF9ob2xkZXIoKQorCitpZiBldmVudDoK
KyAgICBzY2hlZHVsZSA9IGV2ZW50LnRpbWVvdXQKKyAgICBydW4gPSBldmVudC5kaXNwYXRjaAor
ICAgIHN0b3AgPSAgZXZlbnQuYWJvcnQKK2Vsc2U6CisgICAgX2xvb3AgPSBfQXN5bmNvcmVMb29w
KCkKKyAgICBzY2hlZHVsZSA9IF9sb29wLnNjaGVkdWxlCisgICAgcnVuID0gX2xvb3AucnVuCisg
ICAgc3RvcCA9IF9sb29wLnN0b3AKSW5kZXg6IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvbmJodHRwL3NlcnZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3Ro
aXJkX3BhcnR5L25iaHR0cC9zZXJ2ZXIucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdl
UmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0cC9zZXJ2ZXIucHkJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjgwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIiIiCitOb24tQmxvY2tpbmcgSFRU
UCBTZXJ2ZXIKKworVGhpcyBsaWJyYXJ5IGFsbG93IGltcGxlbWVudGF0aW9uIG9mIGFuIEhUVFAv
MS4xIHNlcnZlciB0aGF0IGlzICJub24tYmxvY2tpbmcsIgorImFzeW5jaHJvbm91cyIgYW5kICJl
dmVudC1kcml2ZW4iIC0tIGkuZS4sIGl0IGFjaGlldmVzIHZlcnkgaGlnaCBwZXJmb3JtYW5jZQor
YW5kIGNvbmN1cnJlbmN5LCBzbyBsb25nIGFzIHRoZSBhcHBsaWNhdGlvbiBjb2RlIGRvZXMgbm90
IGJsb2NrIChlLmcuLAordXBvbiBuZXR3b3JrLCBkaXNrIG9yIGRhdGFiYXNlIGFjY2VzcykuIEJs
b2NraW5nIG9uIG9uZSByZXF1ZXN0IHdpbGwgYmxvY2sKK3RoZSBlbnRpcmUgc2VydmVyLgorCitJ
bnN0YW50aWF0ZSBhIFNlcnZlciB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAgLSBo
b3N0IChzdHJpbmcpCisgIC0gcG9ydCAoaW50KQorICAtIHJlcV9zdGFydCAoY2FsbGFibGUpCisg
IAorcmVxX3N0YXJ0IGlzIGNhbGxlZCB3aGVuIGEgcmVxdWVzdCBzdGFydHMuIEl0IG11c3QgdGFr
ZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKKyAgLSBtZXRob2QgKHN0cmluZykKKyAgLSB1cmkg
KHN0cmluZykKKyAgLSByZXFfaGRycyAobGlzdCBvZiAobmFtZSwgdmFsdWUpIHR1cGxlcykKKyAg
LSByZXNfc3RhcnQgKGNhbGxhYmxlKQorICAtIHJlcV9ib2R5X3BhdXNlIChjYWxsYWJsZSkKK2Fu
ZCByZXR1cm46CisgIC0gcmVxX2JvZHkgKGNhbGxhYmxlKQorICAtIHJlcV9kb25lIChjYWxsYWJs
ZSkKKyAgICAKK3JlcV9ib2R5IGlzIGNhbGxlZCB3aGVuIHBhcnQgb2YgdGhlIHJlcXVlc3QgYm9k
eSBpcyBhdmFpbGFibGUuIEl0IG11c3QgdGFrZSB0aGUgCitmb2xsb3dpbmcgYXJndW1lbnQ6Cisg
IC0gY2h1bmsgKHN0cmluZykKKworcmVxX2RvbmUgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3Qg
aXMgY29tcGxldGUsIHdoZXRoZXIgb3Igbm90IGl0IGNvbnRhaW5zIGEgCitib2R5LiBJdCBtdXN0
IHRha2UgdGhlIGZvbGxvd2luZyBhcmd1bWVudDoKKyAgLSBlcnIgKGVycm9yIGRpY3Rpb25hcnks
IG9yIE5vbmUgZm9yIG5vIGVycm9yKQorCitDYWxsIHJlcV9ib2R5X3BhdXNlIHdoZW4geW91IHdh
bnQgdGhlIHNlcnZlciB0byB0ZW1wb3JhcmlseSBzdG9wIHNlbmRpbmcgdGhlIAorcmVxdWVzdCBi
b2R5LCBvciByZXN0YXJ0LiBZb3UgbXVzdCBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQ6
CisgIC0gcGF1c2VkIChib29sZWFuOyBUcnVlIG1lYW5zIHBhdXNlLCBGYWxzZSBtZWFucyB1bnBh
dXNlKQorICAgIAorQ2FsbCByZXNfc3RhcnQgd2hlbiB5b3Ugd2FudCB0byBzdGFydCB0aGUgcmVz
cG9uc2UsIGFuZCBwcm92aWRlIHRoZSBmb2xsb3dpbmcgCithcmd1bWVudHM6CisgIC0gc3RhdHVz
X2NvZGUgKHN0cmluZykKKyAgLSBzdGF0dXNfcGhyYXNlIChzdHJpbmcpCisgIC0gcmVzX2hkcnMg
KGxpc3Qgb2YgKG5hbWUsIHZhbHVlKSB0dXBsZXMpCisgIC0gcmVzX2JvZHlfcGF1c2UKK0l0IHJl
dHVybnM6CisgIC0gcmVzX2JvZHkgKGNhbGxhYmxlKQorICAtIHJlc19kb25lIChjYWxsYWJsZSkK
KyAgICAKK0NhbGwgcmVzX2JvZHkgdG8gc2VuZCBwYXJ0IG9mIHRoZSByZXNwb25zZSBib2R5IHRv
IHRoZSBjbGllbnQuIFByb3ZpZGUgdGhlIAorZm9sbG93aW5nIHBhcmFtZXRlcjoKKyAgLSBjaHVu
ayAoc3RyaW5nKQorICAKK0NhbGwgcmVzX2RvbmUgd2hlbiB0aGUgcmVzcG9uc2UgaXMgZmluaXNo
ZWQsIGFuZCBwcm92aWRlIHRoZSAKK2ZvbGxvd2luZyBhcmd1bWVudCBpZiBhcHByb3ByaWF0ZToK
KyAgLSBlcnIgKGVycm9yIGRpY3Rpb25hcnksIG9yIE5vbmUgZm9yIG5vIGVycm9yKQorICAgIAor
U2VlIHRoZSBlcnJvciBtb2R1bGUgZm9yIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHZhbGlkIGVycm9y
IGRpY3Rpb25hcmllcy4KKworV2hlcmUgcG9zc2libGUsIGVycm9ycyBpbiB0aGUgcmVxdWVzdCB3
aWxsIGJlIHJlc3BvbmRlZCB0byB3aXRoIHRoZSBhcHByb3ByaWF0ZQorNHh4IEhUVFAgc3RhdHVz
IGNvZGUuIEhvd2V2ZXIsIGlmIGEgcmVzcG9uc2UgaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkLCB0
aGUKK2Nvbm5lY3Rpb24gd2lsbCBiZSBkcm9wcGVkIChmb3IgZXhhbXBsZSwgd2hlbiB0aGUgcmVx
dWVzdCBjaHVua2luZyBvcgoraW5kaWNhdGVkIGxlbmd0aCBhcmUgaW5jb3JyZWN0KS4KKyIiIgor
CitfX2F1dGhvcl9fID0gIk1hcmsgTm90dGluZ2hhbSA8bW5vdEBtbm90Lm5ldD4iCitfX2NvcHly
aWdodF9fID0gIiIiXAorQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFyayBOb3R0aW5naGFtCisK
K1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy
c29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j
dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdh
cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUg
cmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs
IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g
cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBz
bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk
IGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K
KworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg
VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
CitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE
QU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS
QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5F
Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgor
VEhFIFNPRlRXQVJFLgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dp
bmcKKworaW1wb3J0IHB1c2hfdGNwCitmcm9tIGh0dHBfY29tbW9uIGltcG9ydCBIdHRwTWVzc2Fn
ZUhhbmRsZXIsIFwKKyAgICBDTE9TRSwgQ09VTlRFRCwgQ0hVTktFRCwgXAorICAgIFdBSVRJTkcs
IEhFQURFUlNfRE9ORSwgXAorICAgIGhvcF9ieV9ob3BfaGRycywgXAorICAgIGR1bW15LCBnZXRf
aGRyCisKK2Zyb20gZXJyb3IgaW1wb3J0IEVSUl9IVFRQX1ZFUlNJT04sIEVSUl9IT1NUX1JFUSwg
RVJSX1dISVRFU1BBQ0VfSERSLCBFUlJfVFJBTlNGRVJfQ09ERQorCisjIEZJWE1FOiBhc3N1cmUg
dGhhdCB0aGUgY29ubmVjdGlvbiBpc24ndCBjbG9zZWQgYmVmb3JlIHJlYWRpbmcgdGhlIGVudGly
ZSByZXEgYm9keQorIyBUT0RPOiBmaWx0ZXIgb3V0IDEwMCByZXNwb25zZXMgdG8gSFRUUC8xLjAg
Y2xpZW50cyB0aGF0IGRpZG4ndCBhc2sgZm9yIGl0LgorCitjbGFzcyBTZXJ2ZXI6CisgICAgIkFu
IGFzeW5jaHJvbm91cyBIVFRQIHNlcnZlci4iCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Qs
IHBvcnQsIHJlcXVlc3RfaGFuZGxlcik6CisgICAgICAgIHNlbGYucmVxdWVzdF9oYW5kbGVyID0g
cmVxdWVzdF9oYW5kbGVyCisgICAgICAgIHNlbGYuc2VydmVyID0gcHVzaF90Y3AuY3JlYXRlX3Nl
cnZlcihob3N0LCBwb3J0LCBzZWxmLmhhbmRsZV9jb25uZWN0aW9uKQorICAgICAgICBzZWxmLmxv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdzZXJ2ZXInKQorICAgICAgICBzZWxmLmxvZy5zZXRMZXZl
bChsb2dnaW5nLldBUk5JTkcpCisKKyAgICAgICAgCisgICAgZGVmIGhhbmRsZV9jb25uZWN0aW9u
KHNlbGYsIHRjcF9jb25uKToKKyAgICAgICAgIlByb2Nlc3MgYSBuZXcgcHVzaF90Y3AgY29ubmVj
dGlvbiwgdGNwX2Nvbm4uIgorICAgICAgICBjb25uID0gSHR0cFNlcnZlckNvbm5lY3Rpb24oc2Vs
Zi5yZXF1ZXN0X2hhbmRsZXIsIHRjcF9jb25uKQorICAgICAgICByZXR1cm4gY29ubi5faGFuZGxl
X2lucHV0LCBjb25uLl9jb25uX2Nsb3NlZCwgY29ubi5fcmVzX2JvZHlfcGF1c2UKKworCitjbGFz
cyBIdHRwU2VydmVyQ29ubmVjdGlvbihIdHRwTWVzc2FnZUhhbmRsZXIpOgorICAgICJBIGhhbmRs
ZXIgZm9yIGFuIEhUVFAgc2VydmVyIGNvbm5lY3Rpb24uIgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCByZXF1ZXN0X2hhbmRsZXIsIHRjcF9jb25uKToKKyAgICAgICAgSHR0cE1lc3NhZ2VIYW5kbGVy
Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYucmVxdWVzdF9oYW5kbGVyID0gcmVxdWVzdF9o
YW5kbGVyCisgICAgICAgIHNlbGYuX3RjcF9jb25uID0gdGNwX2Nvbm4KKyAgICAgICAgc2VsZi5y
ZXFfYm9keV9jYiA9IE5vbmUKKyAgICAgICAgc2VsZi5yZXFfZG9uZV9jYiA9IE5vbmUKKyAgICAg
ICAgc2VsZi5tZXRob2QgPSBOb25lCisgICAgICAgIHNlbGYucmVxX3ZlcnNpb24gPSBOb25lCisg
ICAgICAgIHNlbGYuY29ubmVjdGlvbl9oZHIgPSBbXQorICAgICAgICBzZWxmLl9yZXNfYm9keV9w
YXVzZV9jYiA9IE5vbmUKKworICAgIGRlZiByZXNfc3RhcnQoc2VsZiwgc3RhdHVzX2NvZGUsIHN0
YXR1c19waHJhc2UsIHJlc19oZHJzLCByZXNfYm9keV9wYXVzZSk6CisgICAgICAgICJTdGFydCBh
IHJlc3BvbnNlLiBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UgcGVyIHJlc3BvbnNlLiIKKyAgICAg
ICAgc2VsZi5fcmVzX2JvZHlfcGF1c2VfY2IgPSByZXNfYm9keV9wYXVzZQorICAgICAgICByZXNf
aGRycyA9IFtpIGZvciBpIGluIHJlc19oZHJzIFwKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90
IGlbMF0ubG93ZXIoKSBpbiBob3BfYnlfaG9wX2hkcnMgXQorCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIGJvZHlfbGVuID0gaW50KGdldF9oZHIocmVzX2hkcnMsICJjb250ZW50LWxlbmd0aCIp
LnBvcCgwKSkKKyAgICAgICAgZXhjZXB0IChJbmRleEVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAg
ICAgICAgIGJvZHlfbGVuID0gTm9uZQorICAgICAgICBpZiBib2R5X2xlbiBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIGRlbGltaXQgPSBDT1VOVEVECisgICAgICAgICAgICByZXNfaGRycy5hcHBl
bmQoKCJDb25uZWN0aW9uIiwgImtlZXAtYWxpdmUiKSkKKyAgICAgICAgZWxpZiAyLjAgPiBzZWxm
LnJlcV92ZXJzaW9uID49IDEuMToKKyAgICAgICAgICAgIGRlbGltaXQgPSBDSFVOS0VECisgICAg
ICAgICAgICByZXNfaGRycy5hcHBlbmQoKCJUcmFuc2Zlci1FbmNvZGluZyIsICJjaHVua2VkIikp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWxpbWl0ID0gQ0xPU0UKKyAgICAgICAgICAg
IHJlc19oZHJzLmFwcGVuZCgoIkNvbm5lY3Rpb24iLCAiY2xvc2UiKSkKKworICAgICAgICBzZWxm
Ll9vdXRwdXRfc3RhcnQoIkhUVFAvMS4xICVzICVzIiAlIChzdGF0dXNfY29kZSwgc3RhdHVzX3Bo
cmFzZSksIHJlc19oZHJzLCBkZWxpbWl0KQorICAgICAgICByZXR1cm4gc2VsZi5yZXNfYm9keSwg
c2VsZi5yZXNfZG9uZQorCisgICAgZGVmIHJlc19ib2R5KHNlbGYsIGNodW5rKToKKyAgICAgICAg
IlNlbmQgcGFydCBvZiB0aGUgcmVzcG9uc2UgYm9keS4gTWF5IGJlIGNhbGxlZCB6ZXJvIHRvIG1h
bnkgdGltZXMuIgorICAgICAgICBzZWxmLl9vdXRwdXRfYm9keShjaHVuaykKKworICAgIGRlZiBy
ZXNfZG9uZShzZWxmLCBlcnIpOgorICAgICAgICAiIiIKKyAgICAgICAgU2lnbmFsIHRoZSBlbmQg
b2YgdGhlIHJlc3BvbnNlLCB3aGV0aGVyIG9yIG5vdCB0aGVyZSB3YXMgYSBib2R5LiBNVVNUIGJl
CisgICAgICAgIGNhbGxlZCBleGFjdGx5IG9uY2UgZm9yIGVhY2ggcmVzcG9uc2UuCisKKyAgICAg
ICAgSWYgZXJyIGlzIG5vdCBOb25lLCBpdCBpcyBhbiBlcnJvciBkaWN0aW9uYXJ5IChzZWUgdGhl
IGVycm9yIG1vZHVsZSkKKyAgICAgICAgaW5kaWNhdGluZyB0aGF0IGFuIEhUVFAtc3BlY2lmaWMg
KGkuZS4sIG5vbi1hcHBsaWNhdGlvbikgZXJyb3Igb2NjdXJlZAorICAgICAgICBpbiB0aGUgZ2Vu
ZXJhdGlvbiBvZiB0aGUgcmVzcG9uc2U7IHRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCisg
ICAgICAgICIiIgorICAgICAgICBzZWxmLl9vdXRwdXRfZW5kKGVycikKKworICAgIGRlZiByZXFf
Ym9keV9wYXVzZShzZWxmLCBwYXVzZWQpOgorICAgICAgICAiSW5kaWNhdGUgdGhhdCB0aGUgc2Vy
dmVyIHNob3VsZCBwYXVzZSAoVHJ1ZSkgb3IgdW5wYXVzZSAoRmFsc2UpIHRoZSByZXF1ZXN0LiIK
KyAgICAgICAgaWYgc2VsZi5fdGNwX2Nvbm4gYW5kIHNlbGYuX3RjcF9jb25uLnRjcF9jb25uZWN0
ZWQ6CisgICAgICAgICAgICBzZWxmLl90Y3BfY29ubi5wYXVzZShwYXVzZWQpCisKKyAgICAjIE1l
dGhvZHMgY2FsbGVkIGJ5IHB1c2hfdGNwCisKKyAgICBkZWYgX3Jlc19ib2R5X3BhdXNlKHNlbGYs
IHBhdXNlZCk6CisgICAgICAgICJQYXVzZS91bnBhdXNlIHNlbmRpbmcgdGhlIHJlc3BvbnNlIGJv
ZHkuIgorICAgICAgICBpZiBzZWxmLl9yZXNfYm9keV9wYXVzZV9jYjoKKyAgICAgICAgICAgIHNl
bGYuX3Jlc19ib2R5X3BhdXNlX2NiKHBhdXNlZCkKKworICAgIGRlZiBfY29ubl9jbG9zZWQoc2Vs
Zik6CisgICAgICAgICJUaGUgc2VydmVyIGNvbm5lY3Rpb24gaGFzIGNsb3NlZC4iCisgICAgICAg
IGlmIHNlbGYuX291dHB1dF9zdGF0ZSAhPSBXQUlUSU5HOgorICAgICAgICAgICAgcGFzcyAjIEZJ
WE1FOiBhbnkgY2xlYW51cCBuZWNlc3Nhcnk/CisjICAgICAgICBzZWxmLnBhdXNlKCkKKyMgICAg
ICAgIHNlbGYuX3F1ZXVlID0gW10KKyMgICAgICAgIHNlbGYudGNwX2Nvbm4uaGFuZGxlciA9IE5v
bmUKKyMgICAgICAgIHNlbGYudGNwX2Nvbm4gPSBOb25lCisKKyAgICAjIE1ldGhvZHMgY2FsbGVk
IGJ5IGNvbW1vbi5IdHRwUmVxdWVzdEhhbmRsZXIKKworICAgIGRlZiBfb3V0cHV0KHNlbGYsIGNo
dW5rKToKKyAgICAgICAgc2VsZi5fdGNwX2Nvbm4ud3JpdGUoY2h1bmspCisKKyAgICBkZWYgX2lu
cHV0X3N0YXJ0KHNlbGYsIHRvcF9saW5lLCBoZHJfdHVwbGVzLCBjb25uX3Rva2VucywgdHJhbnNm
ZXJfY29kZXMsIGNvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgIiIiCisgICAgICAgIFRha2UgdGhl
IHRvcCBzZXQgb2YgaGVhZGVycyBmcm9tIHRoZSBpbnB1dCBzdHJlYW0sIHBhcnNlIHRoZW0KKyAg
ICAgICAgYW5kIHF1ZXVlIHRoZSByZXF1ZXN0IHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgYXBwbGlj
YXRpb24uCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgc2VsZi5faW5wdXRfc3RhdGUgPT0g
V0FJVElORywgInBpcGVsaW5pbmcgbm90IHN1cHBvcnRlZCIgIyBGSVhNRTogcGlwZWxpbmluZwor
ICAgICAgICB0cnk6IAorICAgICAgICAgICAgbWV0aG9kLCBfcmVxX2xpbmUgPSB0b3BfbGluZS5z
cGxpdChOb25lLCAxKQorICAgICAgICAgICAgdXJpLCByZXFfdmVyc2lvbiA9IF9yZXFfbGluZS5y
c3BsaXQoTm9uZSwgMSkKKyAgICAgICAgICAgIHNlbGYucmVxX3ZlcnNpb24gPSBmbG9hdChyZXFf
dmVyc2lvbi5yc3BsaXQoJy8nLCAxKVsxXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Cisg
ICAgICAgICAgICBzZWxmLl9oYW5kbGVfZXJyb3IoRVJSX0hUVFBfVkVSU0lPTiwgdG9wX2xpbmUp
ICMgRklYTUU6IG1vcmUgZmluZS1ncmFpbmVkCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9y
CisgICAgICAgIGlmIHNlbGYucmVxX3ZlcnNpb24gPT0gMS4xIGFuZCAnaG9zdCcgbm90IGluIFt0
WzBdLmxvd2VyKCkgZm9yIHQgaW4gaGRyX3R1cGxlc106CisgICAgICAgICAgICBzZWxmLl9oYW5k
bGVfZXJyb3IoRVJSX0hPU1RfUkVRKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAg
ICAgICBpZiBoZHJfdHVwbGVzWzoxXVs6MV1bOjFdIGluIFsiICIsICJcdCJdOgorICAgICAgICAg
ICAgc2VsZi5faGFuZGxlX2Vycm9yKEVSUl9XSElURVNQQUNFX0hEUikKKyAgICAgICAgZm9yIGNv
ZGUgaW4gdHJhbnNmZXJfY29kZXM6ICMgd2Ugb25seSBzdXBwb3J0ICdpZGVudGl0eScgYW5kIGNo
dW5rZWQnIGNvZGVzCisgICAgICAgICAgICBpZiBjb2RlIG5vdCBpbiBbJ2lkZW50aXR5JywgJ2No
dW5rZWQnXTogCisgICAgICAgICAgICAgICAgIyBGSVhNRTogU0hPVUxEIGFsc28gY2xvc2UgY29u
bmVjdGlvbgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9lcnJvcihFUlJfVFJBTlNGRVJf
Q09ERSkKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICMgRklYTUU6
IE1VU1QgNDAwIHJlcXVlc3QgbWVzc2FnZXMgd2l0aCB3aGl0ZXNwYWNlIGJldHdlZW4gbmFtZSBh
bmQgY29sb24KKyAgICAgICAgc2VsZi5tZXRob2QgPSBtZXRob2QKKyAgICAgICAgc2VsZi5jb25u
ZWN0aW9uX2hkciA9IGNvbm5fdG9rZW5zCisKKyAgICAgICAgc2VsZi5sb2cuaW5mbygiJXMgc2Vy
dmVyIHJlcV9zdGFydCAlcyAlcyAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgaWQoc2VsZiks
IG1ldGhvZCwgdXJpLCBzZWxmLnJlcV92ZXJzaW9uKQorICAgICAgICBzZWxmLnJlcV9ib2R5X2Ni
LCBzZWxmLnJlcV9kb25lX2NiID0gc2VsZi5yZXF1ZXN0X2hhbmRsZXIoCisgICAgICAgICAgICAg
ICAgbWV0aG9kLCB1cmksIGhkcl90dXBsZXMsIHNlbGYucmVzX3N0YXJ0LCBzZWxmLnJlcV9ib2R5
X3BhdXNlKQorICAgICAgICBhbGxvd3NfYm9keSA9IChjb250ZW50X2xlbmd0aCkgb3IgKHRyYW5z
ZmVyX2NvZGVzICE9IFtdKQorICAgICAgICByZXR1cm4gYWxsb3dzX2JvZHkKKworICAgIGRlZiBf
aW5wdXRfYm9keShzZWxmLCBjaHVuayk6CisgICAgICAgICJQcm9jZXNzIGEgcmVxdWVzdCBib2R5
IGNodW5rIGZyb20gdGhlIHdpcmUuIgorICAgICAgICBzZWxmLnJlcV9ib2R5X2NiKGNodW5rKQor
ICAgIAorICAgIGRlZiBfaW5wdXRfZW5kKHNlbGYpOgorICAgICAgICAiSW5kaWNhdGUgdGhhdCB0
aGUgcmVxdWVzdCBib2R5IGlzIGNvbXBsZXRlLiIKKyAgICAgICAgc2VsZi5yZXFfZG9uZV9jYihO
b25lKQorCisgICAgZGVmIF9pbnB1dF9lcnJvcihzZWxmLCBlcnIsIGRldGFpbD1Ob25lKToKKyAg
ICAgICAgIkluZGljYXRlIGEgcGFyc2luZyBwcm9ibGVtIHdpdGggdGhlIHJlcXVlc3QgYm9keS4i
CisgICAgICAgIGVyclsnZGV0YWlsJ10gPSBkZXRhaWwKKyAgICAgICAgaWYgc2VsZi5fdGNwX2Nv
bm46CisgICAgICAgICAgICBzZWxmLl90Y3BfY29ubi5jbG9zZSgpCisgICAgICAgICAgICBzZWxm
Ll90Y3BfY29ubiA9IE5vbmUKKyAgICAgICAgc2VsZi5yZXFfZG9uZV9jYihlcnIpCisKKyAgICBk
ZWYgX2hhbmRsZV9lcnJvcihzZWxmLCBlcnIsIGRldGFpbD1Ob25lKToKKyAgICAgICAgIkhhbmRs
ZSBhIHByb2JsZW0gd2l0aCB0aGUgcmVxdWVzdCBieSBnZW5lcmF0aW5nIGFuIGFwcHJvcHJpYXRl
IHJlc3BvbnNlLiIKKyMgICAgICAgIHNlbGYuX3F1ZXVlLmFwcGVuZChFcnJvckhhbmRsZXIoc3Rh
dHVzX2NvZGUsIHN0YXR1c19waHJhc2UsIGJvZHksIHNlbGYpKQorICAgICAgICBhc3NlcnQgc2Vs
Zi5fb3V0cHV0X3N0YXRlID09IFdBSVRJTkcKKyAgICAgICAgaWYgZGV0YWlsOgorICAgICAgICAg
ICAgZXJyWydkZXRhaWwnXSA9IGRldGFpbAorICAgICAgICBzdGF0dXNfY29kZSwgc3RhdHVzX3Bo
cmFzZSA9IGVyci5nZXQoJ3N0YXR1cycsICgnNDAwJywgJ0JhZCBSZXF1ZXN0JykpCisgICAgICAg
IGhkcnMgPSBbCisgICAgICAgICAgICAoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyksCisg
ICAgICAgIF0KKyAgICAgICAgYm9keSA9IGVyclsnZGVzYyddCisgICAgICAgIGlmIGVyci5oYXNf
a2V5KCdkZXRhaWwnKToKKyAgICAgICAgICAgIGJvZHkgKz0gIiAoJXMpIiAlIGVyclsnZGV0YWls
J10KKyAgICAgICAgc2VsZi5yZXNfc3RhcnQoc3RhdHVzX2NvZGUsIHN0YXR1c19waHJhc2UsIGhk
cnMsIGR1bW15KQorICAgICAgICBzZWxmLnJlc19ib2R5KGJvZHkpCisgICAgICAgIHNlbGYucmVz
X2RvbmUoKQorCisgICAgCitkZWYgdGVzdF9oYW5kbGVyKG1ldGhvZCwgdXJpLCBoZHJzLCByZXNf
c3RhcnQsIHJlcV9wYXVzZSk6CisgICAgIiIiCisgICAgQW4gZXh0cmVtZWx5IHNpbXBsZSAoYW5k
IGxpbWl0ZWQpIHNlcnZlciByZXF1ZXN0X2hhbmRsZXIuCisgICAgIiIiCisgICAgY29kZSA9ICIy
MDAiCisgICAgcGhyYXNlID0gIk9LIgorICAgIHJlc19oZHJzID0gWygnQ29udGVudC1UeXBlJywg
J3RleHQvcGxhaW4nKV0KKyAgICByZXNfYm9keSwgcmVzX2RvbmUgPSByZXNfc3RhcnQoY29kZSwg
cGhyYXNlLCByZXNfaGRycywgZHVtbXkpCisgICAgcmVzX2JvZHkoJ2ZvbyEnKQorICAgIHJlc19k
b25lKE5vbmUpCisgICAgcmV0dXJuIGR1bW15LCBkdW1teQorICAgIAoraWYgX19uYW1lX18gPT0g
Il9fbWFpbl9fIjoKKyAgICBzeXMuc3RkZXJyLndyaXRlKCJQSUQ6ICVzXG4iICUgb3MuZ2V0cGlk
KCkpCisgICAgaCwgcCA9ICcxMjcuMC4wLjEnLCBpbnQoc3lzLmFyZ3ZbMV0pCisgICAgc2VydmVy
ID0gU2VydmVyKGgsIHAsIHRlc3RfaGFuZGxlcikKKyAgICBwdXNoX3RjcC5ydW4oKQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvc2Vy
dmVyLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFRv
b2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJodHRwL3NwZHlfY2xpZW50LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJodHRwL3NwZHlfY2xp
ZW50LnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9u
Ymh0dHAvc3BkeV9jbGllbnQucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIzIEBACisjIS91
c3IvYmluL2VudiBweXRob24KKworIiIiCitOb24tQmxvY2tpbmcgU1BEWSBDbGllbnQKKworVGhp
cyBsaWJyYXJ5IGFsbG93IGltcGxlbWVudGF0aW9uIG9mIGFuIEhUVFAvMS4xIGNsaWVudCB0aGF0
IGlzICJub24tYmxvY2tpbmcsIgorImFzeW5jaHJvbm91cyIgYW5kICJldmVudC1kcml2ZW4iIC0t
IGkuZS4sIGl0IGFjaGlldmVzIHZlcnkgaGlnaCBwZXJmb3JtYW5jZQorYW5kIGNvbmN1cnJlbmN5
LCBzbyBsb25nIGFzIHRoZSBhcHBsaWNhdGlvbiBjb2RlIGRvZXMgbm90IGJsb2NrIChlLmcuLAor
dXBvbiBuZXR3b3JrLCBkaXNrIG9yIGRhdGFiYXNlIGFjY2VzcykuIEJsb2NraW5nIG9uIG9uZSBy
ZXNwb25zZSB3aWxsIGJsb2NrCit0aGUgZW50aXJlIGNsaWVudC4KKworSW5zdGFudGlhdGUgYSBD
bGllbnQgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcjoKKyAgLSByZXNfc3RhcnQgKGNhbGxh
YmxlKQorICAKK0NhbGwgcmVxX3N0YXJ0IG9uIHRoZSBDbGllbnQgaW5zdGFuY2UgdG8gYmVnaW4g
YSByZXF1ZXN0LiBJdCB0YWtlcyB0aGUgZm9sbG93aW5nIAorYXJndW1lbnRzOgorICAtIG1ldGhv
ZCAoc3RyaW5nKQorICAtIHVyaSAoc3RyaW5nKQorICAtIHJlcV9oZHJzIChsaXN0IG9mIChuYW1l
LCB2YWx1ZSkgdHVwbGVzKQorICAtIHJlcV9ib2R5X3BhdXNlIChjYWxsYWJsZSkKK2FuZCByZXR1
cm5zOgorICAtIHJlcV9ib2R5IChjYWxsYWJsZSkKKyAgLSByZXFfZG9uZSAoY2FsbGFibGUpCisg
ICAgCitDYWxsIHJlcV9ib2R5IHRvIHNlbmQgcGFydCBvZiB0aGUgcmVxdWVzdCBib2R5LiBJdCB0
YWtlcyB0aGUgZm9sbG93aW5nIAorYXJndW1lbnQ6CisgIC0gY2h1bmsgKHN0cmluZykKKworQ2Fs
bCByZXFfZG9uZSB3aGVuIHRoZSByZXF1ZXN0IGlzIGNvbXBsZXRlLCB3aGV0aGVyIG9yIG5vdCBp
dCBjb250YWlucyBhIAorYm9keS4gSXQgdGFrZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudDoKKyAg
LSBlcnIgKGVycm9yIGRpY3Rpb25hcnksIG9yIE5vbmUgZm9yIG5vIGVycm9yKQorCityZXFfYm9k
eV9wYXVzZSBpcyBjYWxsZWQgd2hlbiB0aGUgY2xpZW50IG5lZWRzIHlvdSAgdG8gdGVtcG9yYXJp
bHkgc3RvcCBzZW5kaW5nIAordGhlIHJlcXVlc3QgYm9keSwgb3IgcmVzdGFydC4gSXQgbXVzdCB0
YWtlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQ6CisgIC0gcGF1c2VkIChib29sZWFuOyBUcnVlIG1l
YW5zIHBhdXNlLCBGYWxzZSBtZWFucyB1bnBhdXNlKQorICAgIAorcmVzX3N0YXJ0IGlzIGNhbGxl
ZCB0byBzdGFydCB0aGUgcmVzcG9uc2UsIGFuZCBtdXN0IHRha2UgdGhlIGZvbGxvd2luZyAKK2Fy
Z3VtZW50czoKKyAgLSBzdGF0dXNfY29kZSAoc3RyaW5nKQorICAtIHN0YXR1c19waHJhc2UgKHN0
cmluZykKKyAgLSByZXNfaGRycyAobGlzdCBvZiAobmFtZSwgdmFsdWUpIHR1cGxlcykKKyAgLSBy
ZXNfYm9keV9wYXVzZQorSXQgbXVzdCByZXR1cm46CisgIC0gcmVzX2JvZHkgKGNhbGxhYmxlKQor
ICAtIHJlc19kb25lIChjYWxsYWJsZSkKKyAgICAKK3Jlc19ib2R5IGlzIGNhbGxlZCB3aGVuIHBh
cnQgb2YgdGhlIHJlc3BvbnNlIGJvZHkgaXMgYXZhaWxhYmxlLiBJdCBtdXN0IGFjY2VwdAordGhl
IGZvbGxvd2luZyBwYXJhbWV0ZXI6CisgIC0gY2h1bmsgKHN0cmluZykKKyAgCityZXNfZG9uZSBp
cyBjYWxsZWQgd2hlbiB0aGUgcmVzcG9uc2UgaXMgZmluaXNoZWQsIGFuZCBtdXN0IGFjY2VwdCB0
aGUgCitmb2xsb3dpbmcgYXJndW1lbnQ6CisgIC0gZXJyIChlcnJvciBkaWN0aW9uYXJ5LCBvciBO
b25lIGlmIG5vIGVycm9yKQorICAgIAorU2VlIHRoZSBlcnJvciBtb2R1bGUgZm9yIHRoZSBjb21w
bGV0ZSBsaXN0IG9mIHZhbGlkIGVycm9yIGRpY3Rpb25hcmllcy4KKworV2hlcmUgcG9zc2libGUs
IGVycm9ycyBpbiB0aGUgcmVzcG9uc2Ugd2lsbCBiZSBpbmRpY2F0ZWQgd2l0aCB0aGUgYXBwcm9w
cmlhdGUKKzV4eCBIVFRQIHN0YXR1cyBjb2RlIChpLmUuLCBieSBjYWxsaW5nIHJlc19zdGFydCwg
cmVzX2JvZHkgYW5kIHJlc19kb25lIHdpdGgKK2FuIGVycm9yIGRpY3Rpb25hcnkpLiBIb3dldmVy
LCBpZiBhIHJlc3BvbnNlIGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZCwgdGhlCitjb25uZWN0aW9u
IHdpbGwgYmUgZHJvcHBlZCAoZm9yIGV4YW1wbGUsIHdoZW4gdGhlIHJlc3BvbnNlIGNodW5raW5n
IG9yCitpbmRpY2F0ZWQgbGVuZ3RoIGFyZSBpbmNvcnJlY3QpLiBJbiB0aGVzZSBjYXNlcywgcmVz
X2RvbmUgd2lsbCBzdGlsbCBiZSBjYWxsZWQKK3dpdGggdGhlIGFwcHJvcHJpYXRlIGVycm9yIGRp
Y3Rpb25hcnkuCisiIiIKKworIyBGSVhNRTogdXBkYXRlIGRvY3MgZm9yIEFQSSBjaGFuZ2UgKG1v
dmUgcmVzX3N0YXJ0KQorCitfX2F1dGhvcl9fID0gIk1hcmsgTm90dGluZ2hhbSA8bW5vdEBtbm90
Lm5ldD4iCitfX2NvcHlyaWdodF9fID0gIiIiXAorQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFy
ayBOb3R0aW5naGFtCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh
cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5k
IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFs
CitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg
bGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp
c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNv
ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1
cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisK
K1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo
YWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m
IHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP
VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBC
VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBG
T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g
QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VU
IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF
UiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgorIiIiCisKK2Zyb20gdXJscGFyc2UgaW1wb3J0
IHVybHNwbGl0CisKK2ltcG9ydCBwdXNoX3RjcAorZnJvbSBlcnJvciBpbXBvcnQgRVJSX0NPTk5F
Q1QsIEVSUl9VUkwKK2Zyb20gaHR0cF9jb21tb24gaW1wb3J0IFdBSVRJTkcsIFwKKyAgICBob3Bf
YnlfaG9wX2hkcnMsIGR1bW15LCBnZXRfaGRyCitmcm9tIHNwZHlfY29tbW9uIGltcG9ydCBTcGR5
TWVzc2FnZUhhbmRsZXIsIENUTF9TWU5fU1RSRUFNLCBGTEFHX05PTkUsIEZMQUdfRklOCisKK3Jl
cV9yZW1vdmVfaGRycyA9IGhvcF9ieV9ob3BfaGRycyArIFsnaG9zdCddCisKKyMgVE9ETzogcmVh
ZCB0aW1lb3V0IHN1cHBvcnQgKG5lZWRzIHRvIGJlIGluIHB1c2hfdGNwPykKKworY2xhc3MgU3Bk
eUNsaWVudChTcGR5TWVzc2FnZUhhbmRsZXIpOgorICAgICJBbiBhc3luY2hyb25vdXMgU1BEWSBj
bGllbnQuIgorICAgIHByb3h5ID0gTm9uZQorICAgIGNvbm5lY3RfdGltZW91dCA9IE5vbmUKKwor
ICAgIGRlZiByZXFfc3RhcnQoc2VsZiwgbWV0aG9kLCB1cmksIHJlcV9oZHJzLCByZXNfc3RhcnRf
Y2IsIHJlcV9ib2R5X3BhdXNlKToKKyAgICAgICAgIiIiCisgICAgICAgIFN0YXJ0IGEgcmVxdWVz
dCB0byB1cmkgdXNpbmcgbWV0aG9kLCB3aGVyZQorICAgICAgICByZXFfaGRycyBpcyBhIGxpc3Qg
b2YgKGZpZWxkX25hbWUsIGZpZWxkX3ZhbHVlKSBmb3IKKyAgICAgICAgdGhlIHJlcXVlc3QgaGVh
ZGVycy4KKworICAgICAgICBSZXR1cm5zIGEgKHJlcV9ib2R5LCByZXFfZG9uZSkgdHVwbGUuCisg
ICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLnByb3h5OgorICAgICAgICAgICAgKGhvc3QsIHBv
cnQpID0gc2VsZi5wcm94eQorICAgICAgICBlbHNlOiAjIGZpbmQgb3V0IHdoZXJlIHRvIGNvbm5l
Y3QgdG8gdGhlIGhhcmQgd2F5CisgICAgICAgICAgICAoc2NoZW1lLCBhdXRob3JpdHksIHBhdGgs
IHF1ZXJ5LCBmcmFnbWVudCkgPSB1cmxzcGxpdCh1cmkpCisgICAgICAgICAgICBpZiBzY2hlbWUu
bG93ZXIoKSAhPSAnaHR0cCc6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2Vycm9yKEVS
Ul9VUkwsICJPbmx5IEhUVFAgVVJMcyBhcmUgc3VwcG9ydGVkIikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZHVtbXksIGR1bW15CisgICAgICAgICAgICBpZiAiQCIgaW4gYXV0aG9yaXR5OgorICAg
ICAgICAgICAgICAgIHVzZXJpbmZvLCBhdXRob3JpdHkgPSBhdXRob3JpdHkuc3BsaXQoIkAiLCAx
KQorICAgICAgICAgICAgaWYgIjoiIGluIGF1dGhvcml0eToKKyAgICAgICAgICAgICAgICBob3N0
LCBwb3J0ID0gYXV0aG9yaXR5LnJzcGxpdCgiOiIsIDEpCisgICAgICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCisgICAgICAgICAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9lcnJvcihF
UlJfVVJMLCAiTm9uLWludGVnZXIgcG9ydCBpbiBVUkwiKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZHVtbXksIGR1bW15CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGhv
c3QsIHBvcnQgPSBhdXRob3JpdHksIDgwIAorICAgICAgICBjb25uID0gX2Nvbm5fcG9vbC5nZXQo
aG9zdCwgcG9ydCwgU3BkeUNvbm5lY3Rpb24sIHNlbGYuY29ubmVjdF90aW1lb3V0KQorICAgICAg
ICByZXR1cm4gY29ubi5yZXFfc3RhcnQobWV0aG9kLCB1cmksIHJlcV9oZHJzLCByZXNfc3RhcnRf
Y2IsIHJlcV9ib2R5X3BhdXNlKQorIAorCitjbGFzcyBTcGR5Q29ubmVjdGlvbihTcGR5TWVzc2Fn
ZUhhbmRsZXIpOgorICAgICJBIFNQRFkgY29ubmVjdGlvbi4iCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgbG9nPU5vbmUpOgorICAgICAgICBTcGR5TWVzc2FnZUhhbmRsZXIuX19pbml0X18oc2Vs
ZikKKyAgICAgICAgc2VsZi5sb2cgPSBsb2cgb3IgZHVtbXkKKyAgICAgICAgc2VsZi5fdGNwX2Nv
bm4gPSBOb25lCisgICAgICAgIHNlbGYuX3JlcV9ib2R5X3BhdXNlX2NiID0gTm9uZSAgIyBGSVhN
RTogcmUtdGhpbmsgcGF1c2luZworICAgICAgICBzZWxmLl9zdHJlYW1zID0ge30KKyAgICAgICAg
c2VsZi5fb3V0cHV0X2J1ZmZlciA9IFtdCisgICAgICAgIHNlbGYuX2hpZ2hlc3Rfc3RyZWFtX2lk
ID0gLTEKKworICAgIGRlZiByZXFfc3RhcnQoc2VsZiwgbWV0aG9kLCB1cmksIHJlcV9oZHJzLCBy
ZXNfc3RhcnRfY2IsIHJlcV9ib2R5X3BhdXNlKToKKyAgICAgICAgcmVxX2hkcnMgPSBbaSBmb3Ig
aSBpbiByZXFfaGRycyBpZiBub3QgaVswXS5sb3dlcigpIGluIHJlcV9yZW1vdmVfaGRyc10KKyAg
ICAgICAgcmVxX2hkcnMuYXBwZW5kKCgnbWV0aG9kJywgbWV0aG9kKSkKKyAgICAgICAgcmVxX2hk
cnMuYXBwZW5kKCgndXJsJywgdXJpKSkKKyAgICAgICAgcmVxX2hkcnMuYXBwZW5kKCgndmVyc2lv
bicsICdIVFRQLzEuMScpKQorICAgICAgICBzZWxmLl9oaWdoZXN0X3N0cmVhbV9pZCArPSAyICMg
VE9ETzogY2hlY2sgdG8gbWFrZSBzdXJlIGl0J3Mgbm90IHRvbyBoaWdoLi4gd2hhdCB0aGVuPwor
ICAgICAgICBzdHJlYW1faWQgPSBzZWxmLl9oaWdoZXN0X3N0cmVhbV9pZAorICAgICAgICBzZWxm
Ll9zdHJlYW1zW3N0cmVhbV9pZF0gPSBbcmVzX3N0YXJ0X2NiLCByZXFfYm9keV9wYXVzZSwgTm9u
ZSwgTm9uZV0KKyAgICAgICAgc2VsZi5fb3V0cHV0KHNlbGYuX3Nlcl9zeW5fZnJhbWUoQ1RMX1NZ
Tl9TVFJFQU0sIEZMQUdfTk9ORSwgc3RyZWFtX2lkLCByZXFfaGRycykpCisgICAgICAgIGRlZiBy
ZXFfYm9keSgqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXFfYm9keShzdHJlYW1f
aWQsICphcmdzKQorICAgICAgICBkZWYgcmVxX2RvbmUoKmFyZ3MpOgorICAgICAgICAgICAgcmV0
dXJuIHNlbGYucmVxX2RvbmUoc3RyZWFtX2lkLCAqYXJncykKKyAgICAgICAgcmV0dXJuIHJlcV9i
b2R5LCByZXFfZG9uZQorCisgICAgZGVmIHJlcV9ib2R5KHNlbGYsIHN0cmVhbV9pZCwgY2h1bmsp
OgorICAgICAgICAiU2VuZCBwYXJ0IG9mIHRoZSByZXF1ZXN0IGJvZHkuIE1heSBiZSBjYWxsZWQg
emVybyB0byBtYW55IHRpbWVzLiIKKyAgICAgICAgc2VsZi5fb3V0cHV0KHNlbGYuX3Nlcl9kYXRh
X2ZyYW1lKHN0cmVhbV9pZCwgRkxBR19OT05FLCBjaHVuaykpCisgICAgICAgIAorICAgIGRlZiBy
ZXFfZG9uZShzZWxmLCBzdHJlYW1faWQsIGVycik6CisgICAgICAgICIiIgorICAgICAgICBTaWdu
YWwgdGhlIGVuZCBvZiB0aGUgcmVxdWVzdCwgd2hldGhlciBvciBub3QgdGhlcmUgd2FzIGEgYm9k
eS4gTVVTVCBiZQorICAgICAgICBjYWxsZWQgZXhhY3RseSBvbmNlIGZvciBlYWNoIHJlcXVlc3Qu
IAorICAgICAgICAKKyAgICAgICAgSWYgZXJyIGlzIG5vdCBOb25lLCBpdCBpcyBhbiBlcnJvciBk
aWN0aW9uYXJ5IChzZWUgdGhlIGVycm9yIG1vZHVsZSkKKyAgICAgICAgaW5kaWNhdGluZyB0aGF0
IGFuIEhUVFAtc3BlY2lmaWMgKGkuZS4sIG5vbi1hcHBsaWNhdGlvbikgZXJyb3Igb2NjdXJyZWQK
KyAgICAgICAgd2hpbGUgc2F0aXNmeWluZyB0aGUgcmVxdWVzdDsgdGhpcyBpcyB1c2VmdWwgZm9y
IGRlYnVnZ2luZy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX291dHB1dChzZWxmLl9zZXJf
ZGF0YV9mcmFtZShzdHJlYW1faWQsIEZMQUdfRklOLCAiIikpCisgICAgICAgICMgVE9ETzogZGVs
ZXRlIHN0cmVhbSBhZnRlciBjaGVja2luZyB0aGF0IGlucHV0IHNpZGUgaXMgaGFsZi1jbG9zZWQK
KworICAgIGRlZiByZXNfYm9keV9wYXVzZShzZWxmLCBwYXVzZWQpOgorICAgICAgICAiVGVtcG9y
YXJpbHkgc3RvcCAvIHJlc3RhcnQgc2VuZGluZyB0aGUgcmVzcG9uc2UgYm9keS4iCisgICAgICAg
IGlmIHNlbGYuX3RjcF9jb25uIGFuZCBzZWxmLl90Y3BfY29ubi50Y3BfY29ubmVjdGVkOgorICAg
ICAgICAgICAgc2VsZi5fdGNwX2Nvbm4ucGF1c2UocGF1c2VkKQorICAgICAgICAKKyAgICAjIE1l
dGhvZHMgY2FsbGVkIGJ5IHB1c2hfdGNwCisKKyAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZiwg
dGNwX2Nvbm4pOgorICAgICAgICAiVGhlIGNvbm5lY3Rpb24gaGFzIHN1Y2NlZWRlZC4iCisgICAg
ICAgIHNlbGYuX3RjcF9jb25uID0gdGNwX2Nvbm4KKyAgICAgICAgc2VsZi5fb3V0cHV0KCIiKSAj
IGtpY2sgdGhlIG91dHB1dCBidWZmZXIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZV9pbnB1
dCwgc2VsZi5fY29ubl9jbG9zZWQsIHNlbGYuX3JlcV9ib2R5X3BhdXNlCisKKyAgICBkZWYgaGFu
ZGxlX2Nvbm5lY3RfZXJyb3Ioc2VsZiwgaG9zdCwgcG9ydCwgZXJyKToKKyAgICAgICAgIlRoZSBj
b25uZWN0aW9uIGhhcyBmYWlsZWQuIgorICAgICAgICBpbXBvcnQgb3MsIHR5cGVzLCBzb2NrZXQK
KyAgICAgICAgaWYgdHlwZShlcnIpID09IHR5cGVzLkludFR5cGU6CisgICAgICAgICAgICBlcnIg
PSBvcy5zdHJlcnJvcihlcnIpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShlcnIsIHNvY2tldC5l
cnJvcik6CisgICAgICAgICAgICBlcnIgPSBlcnJbMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIGVyciA9IHN0cihlcnIpCisgICAgICAgIHNlbGYuX2hhbmRsZV9lcnJvcihFUlJfQ09OTkVD
VCwgZXJyKQorCisgICAgZGVmIF9jb25uX2Nsb3NlZChzZWxmKToKKyAgICAgICAgIlRoZSBzZXJ2
ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uLiIKKyAgICAgICAgaWYgc2VsZi5faW5wdXRfYnVmZmVy
OgorICAgICAgICAgICAgc2VsZi5faGFuZGxlX2lucHV0KCIiKQorICAgICAgICAjIFRPRE86IGZp
Z3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGV4aXN0aW5nIGNvbm5zCisKKyAgICBkZWYgX3JlcV9i
b2R5X3BhdXNlKHNlbGYsIHBhdXNlZCk6CisgICAgICAgICJUaGUgY2xpZW50IG5lZWRzIHRoZSBh
cHBsaWNhdGlvbiB0byBwYXVzZS91bnBhdXNlIHRoZSByZXF1ZXN0IGJvZHkuIgorICAgICAgICAj
IEZJWE1FOiBmaWd1cmUgb3V0IGhvdyBwYXVzaW5nIHNob3VsZCB3b3JrLgorICAgICAgICBpZiBz
ZWxmLl9yZXFfYm9keV9wYXVzZV9jYjoKKyAgICAgICAgICAgIHNlbGYuX3JlcV9ib2R5X3BhdXNl
X2NiKHBhdXNlZCkKKworICAgICMgTWV0aG9kcyBjYWxsZWQgYnkgY29tbW9uLlNwZHlNZXNzYWdl
SGFuZGxlcgorCisgICAgZGVmIF9pbnB1dF9zdGFydChzZWxmLCBzdHJlYW1faWQsIHN0cmVhbV9w
cmlvcml0eSwgaGRyX3R1cGxlcyk6CisgICAgICAgICIiIgorICAgICAgICBUYWtlIHRoZSB0b3Ag
c2V0IG9mIGhlYWRlcnMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCBwYXJzZSB0aGVtCisgICAgICAg
IGFuZCBxdWV1ZSB0aGUgcmVxdWVzdCB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9u
LgorICAgICAgICAiIiIKKyAgICAgICAgc3RhdHVzID0gZ2V0X2hkcihoZHJfdHVwbGVzLCAnc3Rh
dHVzJylbMF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzX2NvZGUsIHJlc19waHJhc2Ug
PSBzdGF0dXMuc3BsaXQoTm9uZSwgMSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAg
ICAgICAgICByZXNfY29kZSA9IHN0YXR1cy5yc3RyaXAoKQorICAgICAgICAgICAgcmVzX3BocmFz
ZSA9ICIiCisgICAgICAgIHNlbGYuX3N0cmVhbXNbc3RyZWFtX2lkXVsxOjJdID0gc2VsZi5fc3Ry
ZWFtc1tzdHJlYW1faWRdWzBdKAorICAgICAgICAgICAgIkhUVFAvMS4xIiwgcmVzX2NvZGUsIHJl
c19waHJhc2UsIGhkcl90dXBsZXMsIHNlbGYucmVzX2JvZHlfcGF1c2UpCisKKyAgICBkZWYgX2lu
cHV0X2JvZHkoc2VsZiwgc3RyZWFtX2lkLCBjaHVuayk6CisgICAgICAgICJQcm9jZXNzIGEgcmVz
cG9uc2UgYm9keSBjaHVuayBmcm9tIHRoZSB3aXJlLiIKKyAgICAgICAgc2VsZi5fc3RyZWFtc1tz
dHJlYW1faWRdWzFdKGNodW5rKQorCisgICAgZGVmIF9pbnB1dF9lbmQoc2VsZiwgc3RyZWFtX2lk
KToKKyAgICAgICAgIkluZGljYXRlIHRoYXQgdGhlIHJlc3BvbnNlIGJvZHkgaXMgY29tcGxldGUu
IgorICAgICAgICBzZWxmLl9zdHJlYW1zW3N0cmVhbV9pZF1bMl0oTm9uZSkKKyAgICAgICAgIyBU
T0RPOiBkZWxldGUgc3RyZWFtIGlmIG91dHB1dCBzaWRlIGlzIGhhbGYtY2xvc2VkLgorCisgICAg
ZGVmIF9pbnB1dF9lcnJvcihzZWxmLCBlcnIsIGRldGFpbD1Ob25lKToKKyAgICAgICAgIkluZGlj
YXRlIGEgcGFyc2luZyBwcm9ibGVtIHdpdGggdGhlIHJlc3BvbnNlIGJvZHkuIgorICAgICAgICBp
ZiBzZWxmLl90Y3BfY29ubjoKKyAgICAgICAgICAgIHNlbGYuX3RjcF9jb25uLmNsb3NlKCkKKyAg
ICAgICAgICAgIHNlbGYuX3RjcF9jb25uID0gTm9uZQorICAgICAgICBlcnJbJ2RldGFpbCddID0g
ZGV0YWlsCisgICAgICAgIHNlbGYucmVzX2RvbmVfY2IoZXJyKQorCisgICAgZGVmIF9vdXRwdXQo
c2VsZiwgY2h1bmspOgorICAgICAgICBzZWxmLl9vdXRwdXRfYnVmZmVyLmFwcGVuZChjaHVuaykK
KyAgICAgICAgaWYgc2VsZi5fdGNwX2Nvbm4gYW5kIHNlbGYuX3RjcF9jb25uLnRjcF9jb25uZWN0
ZWQ6CisgICAgICAgICAgICBzZWxmLl90Y3BfY29ubi53cml0ZSgiIi5qb2luKHNlbGYuX291dHB1
dF9idWZmZXIpKQorICAgICAgICAgICAgc2VsZi5fb3V0cHV0X2J1ZmZlciA9IFtdCisKKyAgICAj
IG1pc2MKKworICAgIGRlZiBfaGFuZGxlX2Vycm9yKHNlbGYsIGVyciwgZGV0YWlsPU5vbmUpOgor
ICAgICAgICAiSGFuZGxlIGEgcHJvYmxlbSB3aXRoIHRoZSByZXF1ZXN0IGJ5IGdlbmVyYXRpbmcg
YW4gYXBwcm9wcmlhdGUgcmVzcG9uc2UuIgorICAgICAgICBhc3NlcnQgc2VsZi5faW5wdXRfc3Rh
dGUgPT0gV0FJVElORworICAgICAgICBpZiBzZWxmLl90Y3BfY29ubjoKKyAgICAgICAgICAgIHNl
bGYuX3RjcF9jb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3RjcF9jb25uID0gTm9uZQor
ICAgICAgICBpZiBkZXRhaWw6CisgICAgICAgICAgICBlcnJbJ2RldGFpbCddID0gZGV0YWlsCisg
ICAgICAgIHN0YXR1c19jb2RlLCBzdGF0dXNfcGhyYXNlID0gZXJyLmdldCgnc3RhdHVzJywgKCc1
MDQnLCAnR2F0ZXdheSBUaW1lb3V0JykpCisgICAgICAgIGhkcnMgPSBbCisgICAgICAgICAgICAo
J0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyksCisgICAgICAgICAgICAoJ0Nvbm5lY3Rpb24n
LCAnY2xvc2UnKSwKKyAgICAgICAgXQorICAgICAgICBib2R5ID0gZXJyWydkZXNjJ10KKyAgICAg
ICAgaWYgZXJyLmhhc19rZXkoJ2RldGFpbCcpOgorICAgICAgICAgICAgYm9keSArPSAiICglcyki
ICUgZXJyWydkZXRhaWwnXQorICAgICAgICByZXNfYm9keV9jYiwgcmVzX2RvbmVfY2IgPSBzZWxm
LnJlc19zdGFydF9jYigKKyAgICAgICAgICAgICAgIjEuMSIsIHN0YXR1c19jb2RlLCBzdGF0dXNf
cGhyYXNlLCBoZHJzLCBkdW1teSkKKyAgICAgICAgcmVzX2JvZHlfY2Ioc3RyKGJvZHkpKQorICAg
ICAgICBwdXNoX3RjcC5zY2hlZHVsZSgwLCByZXNfZG9uZV9jYiwgZXJyKQorCisKK2NsYXNzIF9T
cGR5Q29ubmVjdGlvblBvb2w6CisgICAgIkEgcG9vbCBvZiBvcGVuIGNvbm5lY3Rpb25zIGZvciB1
c2UgYnkgdGhlIGNsaWVudC4iCisgICAgX2Nvbm5zID0ge30KKworICAgIGRlZiBnZXQoc2VsZiwg
aG9zdCwgcG9ydCwgY29ubmVjdGlvbl9oYW5kbGVyLCBjb25uZWN0X3RpbWVvdXQpOgorICAgICAg
ICAiRmluZCBhIGNvbm5lY3Rpb24gZm9yIChob3N0LCBwb3J0KSwgb3IgY3JlYXRlIGEgbmV3IG9u
ZS4iCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbm4gPSBzZWxmLl9jb25uc1soaG9zdCwg
cG9ydCldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGNvbm4gPSBjb25u
ZWN0aW9uX2hhbmRsZXIoKQorICAgICAgICAgICAgcHVzaF90Y3AuY3JlYXRlX2NsaWVudCgKKyAg
ICAgICAgICAgICAgICBob3N0LCBwb3J0LAorICAgICAgICAgICAgICAgIGNvbm4uaGFuZGxlX2Nv
bm5lY3QsIGNvbm4uaGFuZGxlX2Nvbm5lY3RfZXJyb3IsCisgICAgICAgICAgICAgICAgY29ubmVj
dF90aW1lb3V0CisgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLl9jb25uc1soaG9zdCwg
cG9ydCldID0gY29ubgorICAgICAgICByZXR1cm4gY29ubgorCisgICAgI1RPRE86IHJlbW92ZSBj
b25ucyBmcm9tIF9jb25ucyB3aGVuIHRoZXkgY2xvc2UKKworX2Nvbm5fcG9vbCA9IF9TcGR5Q29u
bmVjdGlvblBvb2woKQorCisKK2RlZiB0ZXN0X2NsaWVudChyZXF1ZXN0X3VyaSk6CisgICAgIkEg
c2ltcGxlIGRlbW9uc3RyYXRpb24gb2YgYSBjbGllbnQuIgorICAgIGRlZiBwcmludGVyKHZlcnNp
b24sIHN0YXR1cywgcGhyYXNlLCBoZWFkZXJzLCByZXNfcGF1c2UpOgorICAgICAgICAiUHJpbnQg
dGhlIHJlc3BvbnNlIGhlYWRlcnMuIgorICAgICAgICBwcmludCAiSFRUUC8lcyIgJSB2ZXJzaW9u
LCBzdGF0dXMsIHBocmFzZQorICAgICAgICBwcmludCAiXG4iLmpvaW4oWyIlczolcyIgJSBoZWFk
ZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSkKKyAgICAgICAgcHJpbnQKKyAgICAgICAgZGVmIGJv
ZHkoY2h1bmspOgorICAgICAgICAgICAgcHJpbnQgY2h1bmsKKyAgICAgICAgZGVmIGRvbmUoZXJy
KToKKyAgICAgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgICAgICBwcmludCAiKioqIEVSUk9S
OiAlcyAoJXMpIiAlIChlcnJbJ2Rlc2MnXSwgZXJyWydkZXRhaWwnXSkKKyAgICAgICAgICAgIHB1
c2hfdGNwLnN0b3AoKQorICAgICAgICByZXR1cm4gYm9keSwgZG9uZQorICAgIGMgPSBTcGR5Q2xp
ZW50KCkKKyAgICByZXFfYm9keV93cml0ZSwgcmVxX2RvbmUgPSBjLnJlcV9zdGFydCgiR0VUIiwg
cmVxdWVzdF91cmksIFtdLCBwcmludGVyLCBkdW1teSkKKyAgICByZXFfZG9uZShOb25lKQorICAg
IHB1c2hfdGNwLnJ1bigpCisgICAgICAgICAgICAKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6
CisgICAgaW1wb3J0IHN5cworICAgIHRlc3RfY2xpZW50KHN5cy5hcmd2WzFdKQpJbmRleDogVG9v
bHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvc3BkeV9jb21tb24ucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvc3BkeV9jb21t
b24ucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25i
aHR0cC9zcGR5X2NvbW1vbi5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOTggQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IGxvZ2dpbmcKKworIiIiCitzaGFyZWQgU1BEWSBpbmZy
YXN0cnVjdHVyZQorCitUaGlzIG1vZHVsZSBjb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3Ig
bmJodHRwIGFuZCBhIGJhc2UgY2xhc3MKK2ZvciB0aGUgU1BEWS1zcGVjaWZpYyBwb3J0aW9ucyBv
ZiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIuCisiIiIKKworX19hdXRob3JfXyA9ICJNYXJrIE5vdHRp
bmdoYW0gPG1ub3RAbW5vdC5uZXQ+IgorX19jb3B5cmlnaHRfXyA9ICIiIlwKK0NvcHlyaWdodCAo
YykgMjAwOC0yMDA5IE1hcmsgTm90dGluZ2hhbQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu
dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0
aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m
dHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu
Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2Rp
ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAor
Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl
IFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt
aXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFu
dGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURF
RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBM
SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS
SU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M
REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZ
LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS
SVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S
IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKyIiIgorCitpbXBv
cnQgc3RydWN0CisKK2NvbXByZXNzZWRfaGRycyA9IFRydWUKK3RyeToKKyAgaW1wb3J0IGNfemxp
YgorZXhjZXB0IFR5cGVFcnJvcjoKKyAgIyBjX3psaWIgbG9hZHMgImxpYnoiLiBIb3dldmVyLCB0
aGF0IGZhaWxzIG9uIFdpbmRvd3MuCisgIGNvbXByZXNzZWRfaGRycyA9IEZhbHNlCisgIGltcG9y
dCBzeXMKKyAgcHJpbnQgPj5zeXMuc3RkZXJyLCAoCisgICAgICAnV0FSTklORzogc2RweV9jb21t
b246IGltcG9ydCBjX3psaWIgZmFpbGVkLiBVc2luZyB1bmNvbXByZXNzZWQgaGVhZGVycy4nKQor
Citmcm9tIGh0dHBfY29tbW9uIGltcG9ydCBkdW1teQorCisjIFRoZXJlIGlzIGEgbnVsbCBjaGFy
YWN0ZXIgKCdcMCcpIGF0IHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuIFRoZSAnXDAnIG1pZ2h0
CisjIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHNwZHkgdmVyc2lvbnMuCitkaWN0aW9uYXJ5ID0gXAor
Im9wdGlvbnNnZXRoZWFkcG9zdHB1dGRlbGV0ZXRyYWNlYWNjZXB0YWNjZXB0LWNoYXJzZXRhY2Nl
cHQtZW5jb2RpbmdhY2NlcHQtIiBcCisibGFuZ3VhZ2VhdXRob3JpemF0aW9uZXhwZWN0ZnJvbWhv
c3RpZi1tb2RpZmllZC1zaW5jZWlmLW1hdGNoaWYtbm9uZS1tYXRjaGkiIFwKKyJmLXJhbmdlaWYt
dW5tb2RpZmllZHNpbmNlbWF4LWZvcndhcmRzcHJveHktYXV0aG9yaXphdGlvbnJhbmdlcmVmZXJl
cnRldXNlciIgXAorIi1hZ2VudDEwMDEwMTIwMDIwMTIwMjIwMzIwNDIwNTIwNjMwMDMwMTMwMjMw
MzMwNDMwNTMwNjMwNzQwMDQwMTQwMjQwMzQwNDQwIiBcCisiNTQwNjQwNzQwODQwOTQxMDQxMTQx
MjQxMzQxNDQxNTQxNjQxNzUwMDUwMTUwMjUwMzUwNDUwNWFjY2VwdC1yYW5nZXNhZ2VldGEiIFwK
KyJnbG9jYXRpb25wcm94eS1hdXRoZW50aWNhdGVwdWJsaWNyZXRyeS1hZnRlcnNlcnZlcnZhcnl3
YXJuaW5nd3d3LWF1dGhlbnRpYyIgXAorImF0ZWFsbG93Y29udGVudC1iYXNlY29udGVudC1lbmNv
ZGluZ2NhY2hlLWNvbnRyb2xjb25uZWN0aW9uZGF0ZXRyYWlsZXJ0cmFuIiBcCisic2Zlci1lbmNv
ZGluZ3VwZ3JhZGV2aWF3YXJuaW5nY29udGVudC1sYW5ndWFnZWNvbnRlbnQtbGVuZ3RoY29udGVu
dC1sb2NhdGkiIFwKKyJvbmNvbnRlbnQtbWQ1Y29udGVudC1yYW5nZWNvbnRlbnQtdHlwZWV0YWdl
eHBpcmVzbGFzdC1tb2RpZmllZHNldC1jb29raWVNbyIgXAorIm5kYXlUdWVzZGF5V2VkbmVzZGF5
VGh1cnNkYXlGcmlkYXlTYXR1cmRheVN1bmRheUphbkZlYk1hckFwck1heUp1bkp1bEF1Z1NlIiBc
CisicE9jdE5vdkRlY2NodW5rZWR0ZXh0L2h0bWxpbWFnZS9wbmdpbWFnZS9qcGdpbWFnZS9naWZh
cHBsaWNhdGlvbi94bWxhcHBsaWMiIFwKKyJhdGlvbi94aHRtbHRleHQvcGxhaW5wdWJsaWNtYXgt
YWdlY2hhcnNldD1pc28tODg1OS0xdXRmLThnemlwZGVmbGF0ZUhUVFAvMSIgXAorIi4xc3RhdHVz
dmVyc2lvbnVybFwwIgorCisjIHN0YXRlcworV0FJVElORywgUkVBRElOR19GUkFNRV9EQVRBID0g
MSwgMgorCisjIGZyYW1lIHR5cGVzCitEQVRBX0ZSQU1FID0gMHgwMAorIyBDb250cm9sIGZyYW1l
LCB2ZXJzaW9uIG51bWJlciBpcyAyLgorQ1RMX0ZSTSA9IDB4ODAwMgorQ1RMX1NZTl9TVFJFQU0g
PSAweDAxCitDVExfU1lOX1JFUExZID0gMHgwMgorQ1RMX1JTVF9TVFJFQU0gPSAweDAzCitDVExf
U0VUVElOR1MgPSAweDA0CitDVExfTk9PUCA9IDB4MDUKK0NUTF9QSU5HID0gMHgwNgorQ1RMX0dP
QVdBWSA9IDB4MDcKKworIyBmbGFncworRkxBR19OT05FID0gMHgwMAorRkxBR19GSU4gPSAweDAx
CitGTEFHX1VOSURJUkVDVElPTkFMID0gMHgwMgorCitQUklPUklUWV9NQVNLID0gMHhjMAorU1RS
RUFNX01BU0sgPSAweDdmZmZmZmZmCisKK2NsYXNzIFNwZHlNZXNzYWdlSGFuZGxlcjoKKyAgICAi
IiIKKyAgICBUaGlzIGlzIGEgYmFzZSBjbGFzcyBmb3Igc29tZXRoaW5nIHRoYXQgaGFzIHRvIHBh
cnNlIGFuZC9vciBzZXJpYWxpc2UKKyAgICBTUERZIG1lc3NhZ2VzLCByZXF1ZXN0IG9yIHJlc3Bv
bnNlLgorCisgICAgRm9yIHBhcnNpbmcsIGl0IGV4cGVjdHMgeW91IHRvIG92ZXJyaWRlIF9pbnB1
dF9zdGFydCwgX2lucHV0X2JvZHkgYW5kCisgICAgX2lucHV0X2VuZCwgYW5kIGNhbGwgX2hhbmRs
ZV9pbnB1dCB3aGVuIHlvdSBnZXQgYnl0ZXMgZnJvbSB0aGUgbmV0d29yay4KKworICAgIEZvciBz
ZXJpYWxpc2luZywgaXQgZXhwZWN0cyB5b3UgdG8gb3ZlcnJpZGUgX291dHB1dC4KKyAgICAiIiIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5sb2cgPSBsYW1iZGEgYTph
CisgICAgICAgIHNlbGYuX2lucHV0X2J1ZmZlciA9ICIiCisgICAgICAgIHNlbGYuX2lucHV0X3N0
YXRlID0gV0FJVElORworICAgICAgICBzZWxmLl9pbnB1dF9mcmFtZV90eXBlID0gTm9uZQorICAg
ICAgICBzZWxmLl9pbnB1dF9mbGFncyA9IE5vbmUKKyAgICAgICAgc2VsZi5faW5wdXRfc3RyZWFt
X2lkID0gTm9uZQorICAgICAgICBzZWxmLl9pbnB1dF9mcmFtZV9sZW4gPSAwCisgICAgICAgIGlm
IGNvbXByZXNzZWRfaGRyczoKKyAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzID0gY196bGliLkNv
bXByZXNzb3IoLTEsIGRpY3Rpb25hcnkpCisgICAgICAgICAgICBzZWxmLl9kZWNvbXByZXNzID0g
Y196bGliLkRlY29tcHJlc3NvcihkaWN0aW9uYXJ5KQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgc2VsZi5fY29tcHJlc3MgPSBkdW1teQorICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzcyA9
IGR1bW15CisKKyAgICAjIGlucHV0LXJlbGF0ZWQgbWV0aG9kcworICAgIGRlZiBfaW5wdXRfc3Rh
cnQoc2VsZiwgc3RyZWFtX2lkLCBoZHJfdHVwbGVzKToKKyAgICAgICAgIiIiCisgICAgICAgIFRh
a2UgdGhlIHRvcCBzZXQgb2YgaGVhZGVycyBmcm9tIGEgbmV3IHJlcXVlc3QgYW5kIHF1ZXVlIGl0
CisgICAgICAgIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICIi
IgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2lucHV0X2Jv
ZHkoc2VsZiwgc3RyZWFtX2lkLCBjaHVuayk6CisgICAgICAgICJQcm9jZXNzIGEgYm9keSBjaHVu
ayBmcm9tIHRoZSB3aXJlLiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisg
ICAgZGVmIF9pbnB1dF9lbmQoc2VsZiwgc3RyZWFtX2lkKToKKyAgICAgICAgIkluZGljYXRlIHRo
YXQgdGhlIHJlc3BvbnNlIGJvZHkgaXMgY29tcGxldGUuIgorICAgICAgICByYWlzZSBOb3RJbXBs
ZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2lucHV0X2Vycm9yKHNlbGYsIHN0cmVhbV9pZCwgZXJy
LCBkZXRhaWw9Tm9uZSk6CisgICAgICAgICJJbmRpY2F0ZSBhIHBhcnNpbmcgcHJvYmxlbSB3aXRo
IHRoZSBib2R5LiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVm
IF9oYW5kbGVfaW5wdXQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBHaXZlbiBh
IGNodW5rIG9mIGlucHV0LCBmaWd1cmUgb3V0IHdoYXQgc3RhdGUgd2UncmUgaW4gYW5kIGhhbmRs
ZSBpdCwKKyAgICAgICAgbWFraW5nIHRoZSBhcHByb3ByaWF0ZSBjYWxscy4KKyAgICAgICAgIiIi
CisgICAgICAgICMgVE9ETzogbG9vayBpbnRvIHJlYWRpbmcvd3JpdGluZyBkaXJlY3RseSBmcm9t
IHRoZSBzb2NrZXQgYnVmZmVyIHdpdGggc3RydWN0LnBhY2tfaW50byAvIHVucGFja19mcm9tLgor
ICAgICAgICBpZiBzZWxmLl9pbnB1dF9idWZmZXIgIT0gIiI6CisgICAgICAgICAgICBkYXRhID0g
c2VsZi5faW5wdXRfYnVmZmVyICsgZGF0YSAjIHdpbGwgbmVlZCB0byBtb3ZlIHRvIGEgbGlzdCBp
ZiB3cml0ZXYgY29tZXMgYXJvdW5kCisgICAgICAgICAgICBzZWxmLl9pbnB1dF9idWZmZXIgPSAi
IgorICAgICAgICBpZiBzZWxmLl9pbnB1dF9zdGF0ZSA9PSBXQUlUSU5HOiAjIHdhaXRpbmcgZm9y
IGEgY29tcGxldGUgZnJhbWUgaGVhZGVyCisgICAgICAgICAgICBpZiBsZW4oZGF0YSkgPj0gODoK
KyAgICAgICAgICAgICAgICAoZDEsIHNlbGYuX2lucHV0X2ZsYWdzLCBkMiwgZDMpID0gc3RydWN0
LnVucGFjaygiIUlCQkgiLCBkYXRhWzo4XSkKKyAgICAgICAgICAgICAgICBpZiBkMSA+PiAzMSAm
IDB4MDE6ICMgY29udHJvbCBmcmFtZQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gKCBk
MSA+PiAxNiApICYgMHg3ZmZmICMgVE9ETzogY2hlY2sgdmVyc2lvbgorICAgICAgICAgICAgICAg
ICAgICAjIEZJWE1FOiB3ZSB1c2UgMHgwMCBpbnRlcm5hbGx5IHRvIGluZGljYXRlIGRhdGEgZnJh
bWUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfZnJhbWVfdHlwZSA9IGQxICYgMHgw
MDAwZmZmZgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9zdHJlYW1faWQgPSBOb25l
CisgICAgICAgICAgICAgICAgZWxzZTogIyBkYXRhIGZyYW1lCisgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2lucHV0X2ZyYW1lX3R5cGUgPSBEQVRBX0ZSQU1FCisgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2lucHV0X3N0cmVhbV9pZCA9IGQxICYgU1RSRUFNX01BU0sKKyAgICAgICAgICAgICAg
ICBzZWxmLl9pbnB1dF9mcmFtZV9sZW4gPSAoKCBkMiA8PCAxNiApICsgZDMpCisgICAgICAgICAg
ICAgICAgc2VsZi5faW5wdXRfc3RhdGUgPSBSRUFESU5HX0ZSQU1FX0RBVEEKKyAgICAgICAgICAg
ICAgICBzZWxmLl9oYW5kbGVfaW5wdXQoZGF0YVs4Ol0pCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHNlbGYuX2lucHV0X2J1ZmZlciA9IGRhdGEKKyAgICAgICAgZWxpZiBzZWxm
Ll9pbnB1dF9zdGF0ZSA9PSBSRUFESU5HX0ZSQU1FX0RBVEE6CisgICAgICAgICAgICBpZiBsZW4o
ZGF0YSkgPj0gc2VsZi5faW5wdXRfZnJhbWVfbGVuOgorICAgICAgICAgICAgICAgIGZyYW1lX2Rh
dGEgPSBkYXRhWzpzZWxmLl9pbnB1dF9mcmFtZV9sZW5dCisgICAgICAgICAgICAgICAgcmVzdCA9
IGRhdGFbc2VsZi5faW5wdXRfZnJhbWVfbGVuOl0KKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9p
bnB1dF9mcmFtZV90eXBlID09IERBVEFfRlJBTUU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2lucHV0X2JvZHkoc2VsZi5faW5wdXRfc3RyZWFtX2lkLCBmcmFtZV9kYXRhKQorICAgICAgICAg
ICAgICAgICAgICBzdHJlYW1faWQgPSBzZWxmLl9pbnB1dF9zdHJlYW1faWQgIyBmb3IgRkxBR19G
SU4gYmVsb3cKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX2lucHV0X2ZyYW1lX3R5cGUgaW4g
W0NUTF9TWU5fU1RSRUFNLCBDVExfU1lOX1JFUExZXToKKyAgICAgICAgICAgICAgICAgICAgc3Ry
ZWFtX2lkID0gc3RydWN0LnVucGFjaygiIUkiLCBmcmFtZV9kYXRhWzo0XSlbMF0gJiBTVFJFQU1f
TUFTSyAjIEZJWE1FOiB3aGF0IGlmIHRoZXkgbGllZCBhYm91dCB0aGUgZnJhbWUgbGVuPworICAg
ICAgICAgICAgICAgICAgICBzdHJlYW1fcHJpb3JpdHkgPSAoc3RydWN0LnVucGFjaygiIWIiLCBm
cmFtZV9kYXRhWzg6OV0pWzBdICYgUFJJT1JJVFlfTUFTSykgPj4gNgorICAgICAgICAgICAgICAg
ICAgICB0dXBsZV9wb3MgPSA0ICsgMgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbnB1
dF9mcmFtZV90eXBlID09IENUTF9TWU5fU1RSRUFNOgorICAgICAgICAgICAgICAgICAgICAgIGFz
c29jaWF0ZWRfc3RyZWFtX2lkID0gc3RydWN0LnVucGFjaygiIUkiLCBmcmFtZV9kYXRhWzQ6OF0p
WzBdCisgICAgICAgICAgICAgICAgICAgICAgdHVwbGVfcG9zICs9IDQKKyAgICAgICAgICAgICAg
ICAgICAgaGRyX3R1cGxlcyA9IHNlbGYuX3BhcnNlX2hkcnMoZnJhbWVfZGF0YVt0dXBsZV9wb3M6
XSkgb3Igc2VsZi5faW5wdXRfZXJyb3Ioc3RyZWFtX2lkLCAxKSAjIEZJWE1FOiBwcm9wZXIgZXJy
b3IgaGVyZQorICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBleHBvc2UgcHJpCisgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX2lucHV0X3N0YXJ0KHN0cmVhbV9pZCwgc3RyZWFtX3ByaW9yaXR5
LCBoZHJfdHVwbGVzKQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5faW5wdXRfZnJhbWVfdHlw
ZSA9PSBDVExfUlNUX1NUUkVBTToKKyAgICAgICAgICAgICAgICAgICAgc3RyZWFtX2lkID0gc3Ry
dWN0LnVucGFjaygiIUkiLCBmcmFtZV9kYXRhWzo0XSlbMF0gJiBTVFJFQU1fTUFTSworICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9lbmQoc3RyZWFtX2lkKQorICAgICAgICAgICAgICAg
IGVsaWYgc2VsZi5faW5wdXRfZnJhbWVfdHlwZSA9PSBDVExfU0VUVElOR1M6CisgICAgICAgICAg
ICAgICAgICAgIHBhc3MgIyBGSVhNRQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5faW5wdXRf
ZnJhbWVfdHlwZSA9PSBDVExfTk9PUDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAg
ICAgICAgICAgIGVsaWYgc2VsZi5faW5wdXRfZnJhbWVfdHlwZSA9PSBDVExfUElORzoKKyAgICAg
ICAgICAgICAgICAgICAgcGFzcyAjIEZJWE1FCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9p
bnB1dF9mcmFtZV90eXBlID09IENUTF9HT0FXQVk6CisgICAgICAgICAgICAgICAgICAgIHBhc3Mg
IyBGSVhNRQorICAgICAgICAgICAgICAgIGVsc2U6ICMgdW5rbm93biBmcmFtZSB0eXBlCisgICAg
ICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJVbmtub3duIGZyYW1lIHR5cGUiICMg
RklYTUU6IGRvbid0IHB1a2UKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbnB1dF9mbGFncyAm
IEZMQUdfRklOOiAjIEZJWE1FOiBpbnZhbGlkIG9uIENUTF9SU1RfU1RSRUFNCisgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2lucHV0X2VuZChzdHJlYW1faWQpCisgICAgICAgICAgICAgICAgc2Vs
Zi5faW5wdXRfc3RhdGUgPSBXQUlUSU5HCisgICAgICAgICAgICAgICAgaWYgcmVzdDoKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2lucHV0KHJlc3QpCisgICAgICAgICAgICBlbHNl
OiAjIGRvbid0IGhhdmUgY29tcGxldGUgZnJhbWUgeWV0CisgICAgICAgICAgICAgICAgc2VsZi5f
aW5wdXRfYnVmZmVyID0gZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uLCAiVW5rbm93biBpbnB1dCBzdGF0ZSAlcyIgJSBzZWxmLl9pbnB1dF9zdGF0ZQorCisg
ICAgZGVmIF9wYXJzZV9oZHJzKHNlbGYsIGRhdGEpOgorICAgICAgICAiR2l2ZW4gYSBjb250cm9s
IGZyYW1lIGRhdGEgYmxvY2ssIHJldHVybiBhIGxpc3Qgb2YgKG5hbWUsIHZhbHVlKSB0dXBsZXMu
IgorICAgICAgICAjIFRPRE86IHNlcGFyYXRlIG51bGwtZGVsaW1pdGVkIGludG8gc2VwYXJhdGUg
aW5zdGFuY2VzCisgICAgICAgIGlmIHNlbGYuX2RlY29tcHJlc3MgIT0gZHVtbXk6CisgICAgICAg
ICAgZGF0YSA9IHNlbGYuX2RlY29tcHJlc3MoZGF0YSkgIyBGSVhNRTogY2F0Y2ggZXJyb3JzCisg
ICAgICAgIGN1cnNvciA9IDIKKyAgICAgICAgKG51bV9oZHJzLCkgPSBzdHJ1Y3QudW5wYWNrKCIh
aCIsIGRhdGFbOmN1cnNvcl0pICMgRklYTUU6IGNhdGNoIGVycm9ycworICAgICAgICBoZHJzID0g
W10KKyAgICAgICAgd2hpbGUgY3Vyc29yIDwgbGVuKGRhdGEpOgorICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgIChuYW1lX2xlbiwpID0gc3RydWN0LnVucGFjaygiIWgiLCBkYXRhW2N1
cnNvcjpjdXJzb3IrMl0pICMgRklYTUU6IGNhdGNoIGVycm9ycworICAgICAgICAgICAgICAgIGN1
cnNvciArPSAyCisgICAgICAgICAgICAgICAgbmFtZSA9IGRhdGFbY3Vyc29yOmN1cnNvcituYW1l
X2xlbl0gIyBGSVhNRTogY2F0Y2ggZXJyb3JzCisgICAgICAgICAgICAgICAgY3Vyc29yICs9IG5h
bWVfbGVuCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBy
YWlzZQorICAgICAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvcjoKKyAgICAgICAgICAgICAgICBy
YWlzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICh2YWxfbGVuLCkgPSBzdHJ1
Y3QudW5wYWNrKCIhaCIsIGRhdGFbY3Vyc29yOmN1cnNvcisyXSkgIyBGSVhNRTogY2F0Y2ggZXJy
b3JzCisgICAgICAgICAgICAgICAgY3Vyc29yICs9IDIKKyAgICAgICAgICAgICAgICB2YWx1ZSA9
IGRhdGFbY3Vyc29yOmN1cnNvcit2YWxfbGVuXSAjIEZJWE1FOiBjYXRjaCBlcnJvcnMKKyAgICAg
ICAgICAgICAgICBjdXJzb3IgKz0gdmFsX2xlbgorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJy
b3I6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBzdHJ1Y3QuZXJy
b3I6CisgICAgICAgICAgICAgICAgcHJpbnQgbGVuKGRhdGEpLCBjdXJzb3IsIGRhdGEgIyBGSVhN
RQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBoZHJzLmFwcGVuZCgobmFtZSwg
dmFsdWUpKQorICAgICAgICByZXR1cm4gaGRycworCisgICAgIyMjIG91dHB1dC1yZWxhdGVkIG1l
dGhvZHMKKworICAgIGRlZiBfb3V0cHV0KHNlbGYsIG91dCk6CisgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfaGFuZGxlX2Vycm9yKHNlbGYsIGVycik6CisgICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfc2VyX3N5bl9mcmFtZShz
ZWxmLCB0eXBlLCBmbGFncywgc3RyZWFtX2lkLCBoZHJfdHVwbGVzKToKKyAgICAgICAgIlJldHVy
bnMgYSBTUERZIFNZTl9bU1RSRUFNfFJFUExZXSBmcmFtZS4iCisgICAgICAgICNwcmludCAiZnJh
bWU6ICIgKyBzdHIoc2VsZi5fc2VyX2hkcnMoaGRyX3R1cGxlcykpCisgICAgICAgIGhkcnMgPSBz
ZWxmLl9zZXJfaGRycyhoZHJfdHVwbGVzKQorICAgICAgICBpZiBzZWxmLl9jb21wcmVzcyAhPSBk
dW1teToKKyAgICAgICAgICBoZHJzID0gc2VsZi5fY29tcHJlc3MoaGRycykKKyAgICAgICAgaWYg
KHR5cGUgPT0gQ1RMX1NZTl9TVFJFQU0pOgorICAgICAgICAgIGRhdGEgPSBzdHJ1Y3QucGFjaygi
IUlJSCVkcyIgJSBsZW4oaGRycyksCisgICAgICAgICAgICAgIFNUUkVBTV9NQVNLICYgc3RyZWFt
X2lkLAorICAgICAgICAgICAgICAweDAwLCAgIyBhc3NvY2lhdGVkIHN0cmVhbSBpZAorICAgICAg
ICAgICAgICAweDAwLCAgIyB1bnVzZWQKKyAgICAgICAgICAgICAgaGRycworICAgICAgICAgICAp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgZGF0YSA9IHN0cnVjdC5wYWNrKCIhSUglZHMiICUg
bGVuKGhkcnMpLAorICAgICAgICAgICAgICBTVFJFQU1fTUFTSyAmIHN0cmVhbV9pZCwKKyAgICAg
ICAgICAgICAgMHgwMCwgICMgdW51c2VkCisgICAgICAgICAgICAgIGhkcnMKKyAgICAgICAgICAp
CisgICAgICAgIHJldHVybiBzZWxmLl9zZXJfY3RsX2ZyYW1lKHR5cGUsIGZsYWdzLCBkYXRhKQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfc2VyX2N0bF9mcmFtZSh0eXBlLCBmbGFncywg
ZGF0YSk6CisgICAgICAgICJSZXR1cm5zIGEgU1BEWSBjb250cm9sIGZyYW1lLiIKKyAgICAgICAg
IyBUT0RPOiBjaGVjayB0aGF0IGRhdGEgbGVuIGRvZXNuJ3Qgb3ZlcmZsb3cKKyAgICAgICAgcmV0
dXJuIHN0cnVjdC5wYWNrKCIhSEhJJWRzIiAlIGxlbihkYXRhKSwKKyAgICAgICAgICAgIENUTF9G
Uk0sCisgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgKGZsYWdzIDw8IDI0KSArIGxlbihk
YXRhKSwKKyAgICAgICAgICAgIGRhdGEKKyAgICAgICAgKQorCisgICAgQHN0YXRpY21ldGhvZAor
ICAgIGRlZiBfc2VyX2RhdGFfZnJhbWUoc3RyZWFtX2lkLCBmbGFncywgZGF0YSk6CisgICAgICAg
ICJSZXR1cm5zIGEgU1BEWSBkYXRhIGZyYW1lLiIKKyAgICAgICAgIyBUT0RPOiBjaGVjayB0aGF0
IHN0cmVhbV9pZCBhbmQgZGF0YSBsZW4gZG9uJ3Qgb3ZlcmZsb3cKKyAgICAgICAgcmV0dXJuIHN0
cnVjdC5wYWNrKCIhSUklZHMiICUgbGVuKGRhdGEpLAorICAgICAgICAgICAgU1RSRUFNX01BU0sg
JiBzdHJlYW1faWQsCisgICAgICAgICAgICAoZmxhZ3MgPDwgMjQpICsgbGVuKGRhdGEpLAorICAg
ICAgICAgICAgZGF0YQorICAgICAgICApCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9z
ZXJfaGRycyhoZHJfdHVwbGVzKToKKyAgICAgICAgIlJldHVybnMgYSBTUERZIGhlYWRlciBibG9j
ayBmcm9tIGEgbGlzdCBvZiAobmFtZSwgdmFsdWUpIHR1cGxlcy4iCisgICAgICAgICMgVE9ETzog
Y29sbGFwc2UgZHVwcyBpbnRvIG51bGwtZGVsaW1pdGVkCisgICAgICAgIGhkcl90dXBsZXMuc29y
dCgpICMgcmVxdWlyZWQgYnkgQ2hyb21pdW0KKyAgICAgICAgZm10ID0gWyIhSCJdCisgICAgICAg
ICMgZmlsdGVyIGp1bmsgZnJvbSBoZHJfdHVwbGVzCisgICAgICAgIGJyb2tlbiA9IDAKKyAgICAg
ICAgZm9yIChuLHYpIGluIGhkcl90dXBsZXM6CisgICAgICAgICAgICBpZiBsZW4obikgPT0gMCBv
ciBsZW4odikgPT0gMDoKKyAgICAgICAgICAgICAgICBicm9rZW4gKz0gMQorICAgICAgICBhcmdz
ID0gW2xlbihoZHJfdHVwbGVzKSAtIGJyb2tlbl0KKyAgICAgICAgZm9yIChuLHYpIGluIGhkcl90
dXBsZXM6CisgICAgICAgICAgICBpZiBsZW4obikgPT0gMCBvciBsZW4odikgPT0gMDoKKyAgICAg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBUT0RPOiBjaGVjayBmb3Igb3ZlcmZs
b3dpbmcgbiwgdiBsZW5ndGhzCisgICAgICAgICAgICBmbXQuYXBwZW5kKCJIJWRzSCVkcyIgJSAo
bGVuKG4pLCBsZW4odikpKQorICAgICAgICAgICAgYXJncy5leHRlbmQoW2xlbihuKSwgbiwgbGVu
KHYpLCB2XSkKKyAgICAgICAgcmV0dXJuIHN0cnVjdC5wYWNrKCIiLmpvaW4oZm10KSwgKmFyZ3Mp
CkluZGV4OiBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0cC9zcGR5X3NlcnZl
ci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0
cC9zcGR5X3NlcnZlci5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhp
cmRfcGFydHkvbmJodHRwL3NwZHlfc2VydmVyLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMw
MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyIiIgorTm9uLUJsb2NraW5nIFNQRFkgU2Vy
dmVyCisKK1RoaXMgbGlicmFyeSBhbGxvdyBpbXBsZW1lbnRhdGlvbiBvZiBhbiBTUERZIHNlcnZl
ciB0aGF0IGlzICJub24tYmxvY2tpbmcsIgorImFzeW5jaHJvbm91cyIgYW5kICJldmVudC1kcml2
ZW4iIC0tIGkuZS4sIGl0IGFjaGlldmVzIHZlcnkgaGlnaCBwZXJmb3JtYW5jZQorYW5kIGNvbmN1
cnJlbmN5LCBzbyBsb25nIGFzIHRoZSBhcHBsaWNhdGlvbiBjb2RlIGRvZXMgbm90IGJsb2NrIChl
LmcuLAordXBvbiBuZXR3b3JrLCBkaXNrIG9yIGRhdGFiYXNlIGFjY2VzcykuIEJsb2NraW5nIG9u
IG9uZSByZXF1ZXN0IHdpbGwgYmxvY2sKK3RoZSBlbnRpcmUgc2VydmVyLgorCitJbnN0YW50aWF0
ZSBhIFNlcnZlciB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAgLSBob3N0IChzdHJp
bmcpCisgIC0gcG9ydCAoaW50KQorICAtIHJlcV9zdGFydCAoY2FsbGFibGUpCisKK3JlcV9zdGFy
dCBpcyBjYWxsZWQgd2hlbiBhIHJlcXVlc3Qgc3RhcnRzLiBJdCBtdXN0IHRha2UgdGhlIGZvbGxv
d2luZyBhcmd1bWVudHM6CisgIC0gbWV0aG9kIChzdHJpbmcpCisgIC0gdXJpIChzdHJpbmcpCisg
IC0gcmVxX2hkcnMgKGxpc3Qgb2YgKG5hbWUsIHZhbHVlKSB0dXBsZXMpCisgIC0gcmVzX3N0YXJ0
IChjYWxsYWJsZSkKKyAgLSByZXFfYm9keV9wYXVzZSAoY2FsbGFibGUpCithbmQgcmV0dXJuOgor
ICAtIHJlcV9ib2R5IChjYWxsYWJsZSkKKyAgLSByZXFfZG9uZSAoY2FsbGFibGUpCisKK3JlcV9i
b2R5IGlzIGNhbGxlZCB3aGVuIHBhcnQgb2YgdGhlIHJlcXVlc3QgYm9keSBpcyBhdmFpbGFibGUu
IEl0IG11c3QgdGFrZSB0aGUKK2ZvbGxvd2luZyBhcmd1bWVudDoKKyAgLSBjaHVuayAoc3RyaW5n
KQorCityZXFfZG9uZSBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZSwgd2hl
dGhlciBvciBub3QgaXQgY29udGFpbnMgYQorYm9keS4gSXQgbXVzdCB0YWtlIHRoZSBmb2xsb3dp
bmcgYXJndW1lbnQ6CisgIC0gZXJyIChlcnJvciBkaWN0aW9uYXJ5LCBvciBOb25lIGZvciBubyBl
cnJvcikKKworQ2FsbCByZXFfYm9keV9wYXVzZSB3aGVuIHlvdSB3YW50IHRoZSBzZXJ2ZXIgdG8g
dGVtcG9yYXJpbHkgc3RvcCBzZW5kaW5nIHRoZQorcmVxdWVzdCBib2R5LCBvciByZXN0YXJ0LiBZ
b3UgbXVzdCBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQ6CisgIC0gcGF1c2VkIChib29s
ZWFuOyBUcnVlIG1lYW5zIHBhdXNlLCBGYWxzZSBtZWFucyB1bnBhdXNlKQorCitDYWxsIHJlc19z
dGFydCB3aGVuIHlvdSB3YW50IHRvIHN0YXJ0IHRoZSByZXNwb25zZSwgYW5kIHByb3ZpZGUgdGhl
IGZvbGxvd2luZworYXJndW1lbnRzOgorICAtIHN0YXR1c19jb2RlIChzdHJpbmcpCisgIC0gc3Rh
dHVzX3BocmFzZSAoc3RyaW5nKQorICAtIHJlc19oZHJzIChsaXN0IG9mIChuYW1lLCB2YWx1ZSkg
dHVwbGVzKQorICAtIHJlc19ib2R5X3BhdXNlCitJdCByZXR1cm5zOgorICAtIHJlc19ib2R5IChj
YWxsYWJsZSkKKyAgLSByZXNfZG9uZSAoY2FsbGFibGUpCisKK0NhbGwgcmVzX2JvZHkgdG8gc2Vu
ZCBwYXJ0IG9mIHRoZSByZXNwb25zZSBib2R5IHRvIHRoZSBjbGllbnQuIFByb3ZpZGUgdGhlCitm
b2xsb3dpbmcgcGFyYW1ldGVyOgorICAtIGNodW5rIChzdHJpbmcpCisKK0NhbGwgcmVzX2RvbmUg
d2hlbiB0aGUgcmVzcG9uc2UgaXMgZmluaXNoZWQsIGFuZCBwcm92aWRlIHRoZQorZm9sbG93aW5n
IGFyZ3VtZW50IGlmIGFwcHJvcHJpYXRlOgorICAtIGVyciAoZXJyb3IgZGljdGlvbmFyeSwgb3Ig
Tm9uZSBmb3Igbm8gZXJyb3IpCisKK1NlZSB0aGUgZXJyb3IgbW9kdWxlIGZvciB0aGUgY29tcGxl
dGUgbGlzdCBvZiB2YWxpZCBlcnJvciBkaWN0aW9uYXJpZXMuCisKK1doZXJlIHBvc3NpYmxlLCBl
cnJvcnMgaW4gdGhlIHJlcXVlc3Qgd2lsbCBiZSByZXNwb25kZWQgdG8gd2l0aCB0aGUgYXBwcm9w
cmlhdGUKKzR4eCBIVFRQIHN0YXR1cyBjb2RlLiBIb3dldmVyLCBpZiBhIHJlc3BvbnNlIGhhcyBh
bHJlYWR5IGJlZW4gc3RhcnRlZCwgdGhlCitjb25uZWN0aW9uIHdpbGwgYmUgZHJvcHBlZCAoZm9y
IGV4YW1wbGUsIHdoZW4gdGhlIHJlcXVlc3QgY2h1bmtpbmcgb3IKK2luZGljYXRlZCBsZW5ndGgg
YXJlIGluY29ycmVjdCkuCisiIiIKKworX19hdXRob3JfXyA9ICJNYXJrIE5vdHRpbmdoYW0gPG1u
b3RAbW5vdC5uZXQ+IgorX19jb3B5cmlnaHRfXyA9ICIiIlwKK0NvcHlyaWdodCAoYykgMjAwOC0y
MDA5IE1hcmsgTm90dGluZ2hhbQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl
IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3
YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwg
dG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3
aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl
LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9m
IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJl
IGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v
dGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0
aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi
LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNM
VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM
SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVS
IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJP
TSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug
T1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKyIiIgorCitpbXBvcnQgb3MKK2lt
cG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCisKK2ltcG9ydCBwdXNoX3RjcAorZnJvbSBzcGR5X2Nv
bW1vbiBpbXBvcnQgU3BkeU1lc3NhZ2VIYW5kbGVyLCBDVExfU1lOX1JFUExZLCBGTEFHX05PTkUs
IEZMQUdfRklOCitmcm9tIGh0dHBfY29tbW9uIGltcG9ydCBnZXRfaGRyLCBkdW1teQorCisjIEZJ
WE1FOiBhc3N1cmUgdGhhdCB0aGUgY29ubmVjdGlvbiBpc24ndCBjbG9zZWQgYmVmb3JlIHJlYWRp
bmcgdGhlIGVudGlyZSByZXEgYm9keQorCitjbGFzcyBTcGR5U2VydmVyOgorICAgICJBbiBhc3lu
Y2hyb25vdXMgU1BEWSBzZXJ2ZXIuIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAg
ICAgICAgICBob3N0LAorICAgICAgICAgICAgICAgICBwb3J0LAorICAgICAgICAgICAgICAgICB1
c2Vfc3NsLAorICAgICAgICAgICAgICAgICBjZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAga2V5
ZmlsZSwKKyAgICAgICAgICAgICAgICAgcmVxdWVzdF9oYW5kbGVyLAorICAgICAgICAgICAgICAg
ICBsb2c9Tm9uZSk6CisgICAgICAgIHNlbGYucmVxdWVzdF9oYW5kbGVyID0gcmVxdWVzdF9oYW5k
bGVyCisgICAgICAgIHNlbGYudXNlX3NzbCA9IHVzZV9zc2wKKyAgICAgICAgc2VsZi5zZXJ2ZXIg
PSBwdXNoX3RjcC5jcmVhdGVfc2VydmVyKGhvc3QsIHBvcnQsIHVzZV9zc2wsIGNlcnRmaWxlLCBr
ZXlmaWxlLCBzZWxmLmhhbmRsZV9jb25uZWN0aW9uKQorICAgICAgICBzZWxmLmxvZyA9IGxvZwor
CisgICAgZGVmIGhhbmRsZV9jb25uZWN0aW9uKHNlbGYsIHRjcF9jb25uKToKKyAgICAgICAgIlBy
b2Nlc3MgYSBuZXcgcHVzaF90Y3AgY29ubmVjdGlvbiwgdGNwX2Nvbm4uIgorICAgICAgICBjb25u
ID0gU3BkeVNlcnZlckNvbm5lY3Rpb24oc2VsZi5yZXF1ZXN0X2hhbmRsZXIsIHRjcF9jb25uLCBz
ZWxmLmxvZykKKyAgICAgICAgcmV0dXJuIGNvbm4uX2hhbmRsZV9pbnB1dCwgY29ubi5fY29ubl9j
bG9zZWQsIGNvbm4uX3Jlc19ib2R5X3BhdXNlCisKKworY2xhc3MgU3BkeVNlcnZlckNvbm5lY3Rp
b24oU3BkeU1lc3NhZ2VIYW5kbGVyKToKKyAgICAiQSBoYW5kbGVyIGZvciBhIFNQRFkgc2VydmVy
IGNvbm5lY3Rpb24uIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0X2hhbmRsZXIsIHRj
cF9jb25uLCBsb2c9Tm9uZSk6CisgICAgICAgIFNwZHlNZXNzYWdlSGFuZGxlci5fX2luaXRfXyhz
ZWxmKQorICAgICAgICBzZWxmLnJlcXVlc3RfaGFuZGxlciA9IHJlcXVlc3RfaGFuZGxlcgorICAg
ICAgICBzZWxmLl90Y3BfY29ubiA9IHRjcF9jb25uCisgICAgICAgIHNlbGYubG9nID0gbG9nIG9y
IGR1bW15CisgICAgICAgIHNlbGYuX3N0cmVhbXMgPSB7fQorICAgICAgICBzZWxmLl9yZXNfYm9k
eV9wYXVzZV9jYiA9IEZhbHNlCisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJuZXcgY29ubmVjdGlv
biAlcyIgJSBpZChzZWxmKSkKKyAgICAgICAgIyBTUERZIGhhcyA0IHByaW9yaXRpZXMuICB3cml0
ZV9xdWV1ZSBpcyBhbiBhcnJheSBvZiBbMC4uM10sIG9uZSBmb3IgZWFjaCBwcmlvcml0eS4KKyAg
ICAgICAgc2VsZi53cml0ZV9xdWV1ZSA9IFtdCisgICAgICAgIGZvciBpbmRleCBpbiByYW5nZSgw
LDQpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9xdWV1ZS5hcHBlbmQoW10pCisgICAgICAgICMg
V3JpdGUgcGVuZGluZyB3aGVuIGEgd3JpdGUgdG8gdGhlIG91dHB1dCBxdWV1ZSBoYXMgYmVlbiBz
Y2hlZHVsZWQKKyAgICAgICAgc2VsZi53cml0ZV9wZW5kaW5nID0gRmFsc2UKKworICAgIGRlZiBy
ZXNfc3RhcnQoc2VsZiwgc3RyZWFtX2lkLCBzdHJlYW1fcHJpb3JpdHksIHN0YXR1c19jb2RlLCBz
dGF0dXNfcGhyYXNlLCByZXNfaGRycywgcmVzX2JvZHlfcGF1c2UpOgorICAgICAgICAiU3RhcnQg
YSByZXNwb25zZS4gTXVzdCBvbmx5IGJlIGNhbGxlZCBvbmNlIHBlciByZXNwb25zZS4iCisgICAg
ICAgIHNlbGYubG9nLmRlYnVnKCJyZXNfc3RhcnQgJXMiICUgc3RyZWFtX2lkKQorICAgICAgICBz
ZWxmLl9yZXNfYm9keV9wYXVzZV9jYiA9IHJlc19ib2R5X3BhdXNlCisgICAgICAgIHJlc19oZHJz
LmFwcGVuZCgoJ3N0YXR1cycsICIlcyAlcyIgJSAoc3RhdHVzX2NvZGUsIHN0YXR1c19waHJhc2Up
KSkKKyAgICAgICAgIyBUT0RPOiBob3AtYnktaG9wIGhlYWRlcnM/CisgICAgICAgIHNlbGYuX3F1
ZXVlX2ZyYW1lKHN0cmVhbV9wcmlvcml0eSwgc2VsZi5fc2VyX3N5bl9mcmFtZShDVExfU1lOX1JF
UExZLCBGTEFHX05PTkUsIHN0cmVhbV9pZCwgcmVzX2hkcnMpKQorICAgICAgICBkZWYgcmVzX2Jv
ZHkoKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVzX2JvZHkoc3RyZWFtX2lkLCBz
dHJlYW1fcHJpb3JpdHksICphcmdzKQorICAgICAgICBkZWYgcmVzX2RvbmUoKmFyZ3MpOgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYucmVzX2RvbmUoc3RyZWFtX2lkLCBzdHJlYW1fcHJpb3JpdHks
ICphcmdzKQorICAgICAgICByZXR1cm4gcmVzX2JvZHksIHJlc19kb25lCisKKyAgICBkZWYgcmVz
X2JvZHkoc2VsZiwgc3RyZWFtX2lkLCBzdHJlYW1fcHJpb3JpdHksIGNodW5rKToKKyAgICAgICAg
IlNlbmQgcGFydCBvZiB0aGUgcmVzcG9uc2UgYm9keS4gTWF5IGJlIGNhbGxlZCB6ZXJvIHRvIG1h
bnkgdGltZXMuIgorICAgICAgICBpZiBjaHVuazoKKyAgICAgICAgICAgIGRvX2NodW5raW5nID0g
VHJ1ZQorICAgICAgICAgICAgaWYgc3RyZWFtX3ByaW9yaXR5ID09IDA6CisgICAgICAgICAgICAg
ICAgZG9fY2h1bmtpbmcgPSBUcnVlCisgICAgICAgICAgICBpZiBkb19jaHVua2luZzoKKyAgICAg
ICAgICAgICAgICBrTWF4Q2h1bmtTaXplID0gMTQ2MCAqIDQKKyAgICAgICAgICAgICAgICBzdGFy
dF9wb3MgPSAwCisgICAgICAgICAgICAgICAgY2h1bmtfc2l6ZSA9IGxlbihjaHVuaykKKyAgICAg
ICAgICAgICAgICB3aGlsZSBzdGFydF9wb3MgPCBjaHVua19zaXplOgorICAgICAgICAgICAgICAg
ICAgICBzaXplID0gbWluKGNodW5rX3NpemUgLSBzdGFydF9wb3MsIGtNYXhDaHVua1NpemUpCisg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX3F1ZXVlX2ZyYW1lKHN0cmVhbV9wcmlvcml0eSwgc2Vs
Zi5fc2VyX2RhdGFfZnJhbWUoc3RyZWFtX2lkLCBGTEFHX05PTkUsIGNodW5rW3N0YXJ0X3Bvczpz
dGFydF9wb3MgKyBzaXplXSkpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3BvcyArPSBzaXpl
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3F1ZXVlX2ZyYW1lKHN0
cmVhbV9wcmlvcml0eSwgc2VsZi5fc2VyX2RhdGFfZnJhbWUoc3RyZWFtX2lkLCBGTEFHX05PTkUs
IGNodW5rKSkKKworICAgIGRlZiByZXNfZG9uZShzZWxmLCBzdHJlYW1faWQsIHN0cmVhbV9wcmlv
cml0eSwgZXJyKToKKyAgICAgICAgIiIiCisgICAgICAgIFNpZ25hbCB0aGUgZW5kIG9mIHRoZSBy
ZXNwb25zZSwgd2hldGhlciBvciBub3QgdGhlcmUgd2FzIGEgYm9keS4gTVVTVCBiZQorICAgICAg
ICBjYWxsZWQgZXhhY3RseSBvbmNlIGZvciBlYWNoIHJlc3BvbnNlLgorCisgICAgICAgIElmIGVy
ciBpcyBub3QgTm9uZSwgaXQgaXMgYW4gZXJyb3IgZGljdGlvbmFyeSAoc2VlIHRoZSBlcnJvciBt
b2R1bGUpCisgICAgICAgIGluZGljYXRpbmcgdGhhdCBhbiBIVFRQLXNwZWNpZmljIChpLmUuLCBu
b24tYXBwbGljYXRpb24pIGVycm9yIG9jY3VyZWQKKyAgICAgICAgaW4gdGhlIGdlbmVyYXRpb24g
b2YgdGhlIHJlc3BvbnNlOyB0aGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLgorICAgICAgICAi
IiIKKyAgICAgICAgc2VsZi5fcXVldWVfZnJhbWUoc3RyZWFtX3ByaW9yaXR5LCBzZWxmLl9zZXJf
ZGF0YV9mcmFtZShzdHJlYW1faWQsIEZMQUdfRklOLCAiIikpCisgICAgICAgICMgVE9ETzogZGVs
ZXRlIHN0cmVhbSBhZnRlciBjaGVja2luZyB0aGF0IGlucHV0IHNpZGUgaXMgaGFsZi1jbG9zZWQK
KworICAgIGRlZiByZXFfYm9keV9wYXVzZShzZWxmLCBwYXVzZWQpOgorICAgICAgICAiSW5kaWNh
dGUgdGhhdCB0aGUgc2VydmVyIHNob3VsZCBwYXVzZSAoVHJ1ZSkgb3IgdW5wYXVzZSAoRmFsc2Up
IHRoZSByZXF1ZXN0LiIKKyAgICAgICAgaWYgc2VsZi5fdGNwX2Nvbm4gYW5kIHNlbGYuX3RjcF9j
b25uLnRjcF9jb25uZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLl90Y3BfY29ubi5wYXVzZShwYXVz
ZWQpCisKKyAgICAjIE1ldGhvZHMgY2FsbGVkIGJ5IHB1c2hfdGNwCisKKyAgICBkZWYgX3Jlc19i
b2R5X3BhdXNlKHNlbGYsIHBhdXNlZCk6CisgICAgICAgICJQYXVzZS91bnBhdXNlIHNlbmRpbmcg
dGhlIHJlc3BvbnNlIGJvZHkuIgorICAgICAgICBpZiBzZWxmLl9yZXNfYm9keV9wYXVzZV9jYjoK
KyAgICAgICAgICAgIHNlbGYuX3Jlc19ib2R5X3BhdXNlX2NiKHBhdXNlZCkKKworICAgIGRlZiBf
Y29ubl9jbG9zZWQoc2VsZik6CisgICAgICAgICJUaGUgc2VydmVyIGNvbm5lY3Rpb24gaGFzIGNs
b3NlZC4iCisgICAgICAgIHBhc3MgIyBGSVhNRTogYW55IGNsZWFudXAgbmVjZXNzYXJ5PworIyAg
ICAgICAgc2VsZi5wYXVzZSgpCisjICAgICAgICBzZWxmLnRjcF9jb25uLmhhbmRsZXIgPSBOb25l
CisjICAgICAgICBzZWxmLnRjcF9jb25uID0gTm9uZQorCisgICAgZGVmIF9oYXNfd3JpdGVfZGF0
YShzZWxmKToKKyAgICAgICAgZm9yIGluZGV4IGluIHJhbmdlKDAsIDQpOgorICAgICAgICAgICAg
aWYgbGVuKHNlbGYud3JpdGVfcXVldWVbaW5kZXhdKSA+IDA6CisgICAgICAgICAgICAgICAgcmV0
dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3dyaXRlX2ZyYW1lX2Nh
bGxiYWNrKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX3BlbmRpbmcgPSBGYWxzZQorCisgICAg
ICAgICMgRmluZCB0aGUgaGlnaGVzdCBwcmlvcml0eSBkYXRhIGNodW5rIGFuZCBzZW5kIGl0Lgor
ICAgICAgICBmb3IgaW5kZXggaW4gcmFuZ2UoMCwgNCk6CisgICAgICAgICAgICBpZiBsZW4oc2Vs
Zi53cml0ZV9xdWV1ZVtpbmRleF0pID4gMDoKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi53
cml0ZV9xdWV1ZVtpbmRleF1bMF0KKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX3F1ZXVlW2lu
ZGV4XSA9IHNlbGYud3JpdGVfcXVldWVbaW5kZXhdWzE6XQorICAgICAgICAgICAgICAgIHNlbGYu
X291dHB1dChkYXRhKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHNlbGYuX2hh
c193cml0ZV9kYXRhKCk6CisgICAgICAgICAgICBzZWxmLl9zY2hlZHVsZV93cml0ZSgpCisgICAg
ICAgIAorICAgIGRlZiBfc2NoZWR1bGVfd3JpdGUoc2VsZik6CisgICAgICAgICMgV2Ugb25seSBu
ZWVkIG9uZSB3cml0ZSBzY2hlZHVsZWQgYXQgYSB0aW1lLgorICAgICAgICBpZiBub3Qgc2VsZi53
cml0ZV9wZW5kaW5nOgorICAgICAgICAgICAgcHVzaF90Y3Auc2NoZWR1bGUoMCwgc2VsZi5fd3Jp
dGVfZnJhbWVfY2FsbGJhY2spCisgICAgICAgICAgICBzZWxmLndyaXRlX3BlbmRpbmcgPSBUcnVl
CisKKyAgICBkZWYgX3F1ZXVlX2ZyYW1lKHNlbGYsIHByaW9yaXR5LCBjaHVuayk6CisgICAgICAg
IHNlbGYud3JpdGVfcXVldWVbcHJpb3JpdHldLmFwcGVuZChjaHVuaykKKyAgICAgICAgc2VsZi5f
c2NoZWR1bGVfd3JpdGUoKQorCisgICAgIyBNZXRob2RzIGNhbGxlZCBieSBjb21tb24uU3BkeVJl
cXVlc3RIYW5kbGVyCisKKyAgICBkZWYgX291dHB1dChzZWxmLCBjaHVuayk6CisgICAgICAgIGlm
IHNlbGYuX3RjcF9jb25uOgorICAgICAgICAgICAgc2VsZi5fdGNwX2Nvbm4ud3JpdGUoY2h1bmsp
CisKKyAgICBkZWYgX2lucHV0X3N0YXJ0KHNlbGYsIHN0cmVhbV9pZCwgc3RyZWFtX3ByaW9yaXR5
LCBoZHJfdHVwbGVzKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoInJlcXVlc3Qgc3RhcnQgJXMg
JXMiICUgKHN0cmVhbV9pZCwgaGRyX3R1cGxlcykpCisgICAgICAgIG1ldGhvZCA9IGdldF9oZHIo
aGRyX3R1cGxlcywgJ21ldGhvZCcpWzBdICMgRklYTUU6IGVycm9yIGhhbmRsaW5nCisgICAgICAg
IHVyaSA9IGdldF9oZHIoaGRyX3R1cGxlcywgJ3VybCcpWzBdICMgRklYTUU6IGVycm9yIGhhbmRs
aW5nCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fc3RyZWFtcy5oYXNfa2V5KHN0cmVhbV9pZCkg
IyBGSVhNRQorICAgICAgICBkZWYgcmVzX3N0YXJ0KCphcmdzKToKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLnJlc19zdGFydChzdHJlYW1faWQsIHN0cmVhbV9wcmlvcml0eSwgKmFyZ3MpCisgICAg
ICAgICMgVE9ETzogc2FuaXR5IGNoZWNrcyAvIGNhdGNoIGVycm9ycyBmcm9tIHJlcXVzdF9oYW5k
bGVyCisgICAgICAgIHNlbGYuX3N0cmVhbXNbc3RyZWFtX2lkXSA9IHNlbGYucmVxdWVzdF9oYW5k
bGVyKAorICAgICAgICAgICAgbWV0aG9kLCB1cmksIGhkcl90dXBsZXMsIHJlc19zdGFydCwgc2Vs
Zi5yZXFfYm9keV9wYXVzZSkKKworICAgIGRlZiBfaW5wdXRfYm9keShzZWxmLCBzdHJlYW1faWQs
IGNodW5rKToKKyAgICAgICAgIlByb2Nlc3MgYSByZXF1ZXN0IGJvZHkgY2h1bmsgZnJvbSB0aGUg
d2lyZS4iCisgICAgICAgIGlmIHNlbGYuX3N0cmVhbXMuaGFzX2tleShzdHJlYW1faWQpOgorICAg
ICAgICAgICAgc2VsZi5fc3RyZWFtc1tzdHJlYW1faWRdWzBdKGNodW5rKQorCisgICAgZGVmIF9p
bnB1dF9lbmQoc2VsZiwgc3RyZWFtX2lkKToKKyAgICAgICAgIkluZGljYXRlIHRoYXQgdGhlIHJl
cXVlc3QgYm9keSBpcyBjb21wbGV0ZS4iCisgICAgICAgIGlmIHNlbGYuX3N0cmVhbXMuaGFzX2tl
eShzdHJlYW1faWQpOgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtc1tzdHJlYW1faWRdWzFdKE5v
bmUpCisgICAgICAgICMgVE9ETzogZGVsZXRlIHN0cmVhbSBpZiBvdXRwdXQgc2lkZSBpcyBoYWxm
LWNsb3NlZC4KKworICAgIGRlZiBfaW5wdXRfZXJyb3Ioc2VsZiwgc3RyZWFtX2lkLCBlcnIsIGRl
dGFpbD1Ob25lKToKKyAgICAgICAgIkluZGljYXRlIGEgcGFyc2luZyBwcm9ibGVtIHdpdGggdGhl
IHJlcXVlc3QgYm9keS4iCisgICAgICAgICMgRklYTUU6IHJld29yayBhZnRlciBmaXhpbmcgc3Bk
eV9jb21tb24KKyAgICAgICAgZXJyWydkZXRhaWwnXSA9IGRldGFpbAorICAgICAgICBpZiBzZWxm
Ll90Y3BfY29ubjoKKyAgICAgICAgICAgIHNlbGYuX3RjcF9jb25uLmNsb3NlKCkKKyAgICAgICAg
ICAgIHNlbGYuX3RjcF9jb25uID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9zdHJlYW1zLmhhc19r
ZXkoc3RyZWFtX2lkKToKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbXNbc3RyZWFtX2lkXVsxXShl
cnIpCisKKyAgICAjIFRPRE86IHJlLWV2YWx1YXRlIGlmIHRoaXMgaXMgbmVjZXNzYXJ5IGluIFNQ
RFkKKyAgICBkZWYgX2hhbmRsZV9lcnJvcihzZWxmLCBlcnIsIGRldGFpbD1Ob25lKToKKyAgICAg
ICAgIkhhbmRsZSBhIHByb2JsZW0gd2l0aCB0aGUgcmVxdWVzdCBieSBnZW5lcmF0aW5nIGFuIGFw
cHJvcHJpYXRlIHJlc3BvbnNlLiIKKyAgICAgICAgaWYgZGV0YWlsOgorICAgICAgICAgICAgZXJy
WydkZXRhaWwnXSA9IGRldGFpbAorICAgICAgICBzdGF0dXNfY29kZSwgc3RhdHVzX3BocmFzZSA9
IGVyci5nZXQoJ3N0YXR1cycsICgnNDAwJywgJ0JhZCBSZXF1ZXN0JykpCisgICAgICAgIGhkcnMg
PSBbCisgICAgICAgICAgICAoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyksCisgICAgICAg
IF0KKyAgICAgICAgYm9keSA9IGVyclsnZGVzYyddCisgICAgICAgIGlmIGVyci5oYXNfa2V5KCdk
ZXRhaWwnKToKKyAgICAgICAgICAgIGJvZHkgKz0gIiAoJXMpIiAlIGVyclsnZGV0YWlsJ10KKyAg
ICAgICAgc2VsZi5yZXNfc3RhcnQoc3RhdHVzX2NvZGUsIHN0YXR1c19waHJhc2UsIGhkcnMsIGR1
bW15KQorICAgICAgICBzZWxmLnJlc19ib2R5KGJvZHkpCisgICAgICAgIHNlbGYucmVzX2RvbmUo
KQorCisKK2RlZiB0ZXN0X2hhbmRsZXIobWV0aG9kLCB1cmksIGhkcnMsIHJlc19zdGFydCwgcmVx
X3BhdXNlKToKKyAgICAiIiIKKyAgICBBbiBleHRyZW1lbHkgc2ltcGxlIChhbmQgbGltaXRlZCkg
c2VydmVyIHJlcXVlc3RfaGFuZGxlci4KKyAgICAiIiIKKyAgICBjb2RlID0gIjIwMCIKKyAgICBw
aHJhc2UgPSAiT0siCisgICAgcmVzX2hkcnMgPSBbKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFp
bicpLCAoJ3ZlcnNpb24nLCAnSFRUUC8xLjEnKV0KKyAgICByZXNfYm9keSwgcmVzX2RvbmUgPSBy
ZXNfc3RhcnQoY29kZSwgcGhyYXNlLCByZXNfaGRycywgZHVtbXkpCisgICAgcmVzX2JvZHkoJ1Ro
aXMgaXMgU1BEWS4nKQorICAgIHJlc19kb25lKE5vbmUpCisgICAgcmV0dXJuIGR1bW15LCBkdW1t
eQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbG9nZ2luZy5iYXNpY0NvbmZp
ZygpCisgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3NlcnZlcicpCisgICAgbG9nLnNldExl
dmVsKGxvZ2dpbmcuSU5GTykKKyAgICBsb2cuaW5mbygiUElEOiAlc1xuIiAlIG9zLmdldHBpZCgp
KQorICAgIGgsIHAgPSAnMTI3LjAuMC4xJywgaW50KHN5cy5hcmd2WzFdKQorICAgIHNlcnZlciA9
IFNwZHlTZXJ2ZXIoaCwgcCwgdGVzdF9oYW5kbGVyLCBsb2cpCisgICAgcHVzaF90Y3AucnVuKCkK
ClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1dlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJo
dHRwL3NwZHlfc2VydmVyLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsg
KgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>137283</attachid>
            <date>2012-04-15 23:43:13 -0700</date>
            <delta_ts>2012-05-03 16:17:58 -0700</delta_ts>
            <desc>Missing replaytest.py</desc>
            <filename>replaytest.py</filename>
            <type>text/x-python-script</type>
            <size>5105</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiMgbWV0Ogoj
CiMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCiMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQojIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiMgZGlz
dHJpYnV0aW9uLgojICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQojIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiMKIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAojIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAojIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KCgppbXBvcnQgb3MucGF0aCAgIyBVc2VkIG9ubHkgdG8gY29tcHV0ZSB0aGUg
cGF0aCB0byByZXBsYXkucHkKaW1wb3J0IHJlCmltcG9ydCBzaWduYWwKaW1wb3J0IHN1YnByb2Nl
c3MKaW1wb3J0IHRpbWUKCmZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZHJpdmVyIGlt
cG9ydCBEcml2ZXJJbnB1dApmcm9tIHdlYmtpdHB5LnBlcmZvcm1hbmNlX3Rlc3RzLnBlcmZ0ZXN0
IGltcG9ydCBQYWdlTG9hZGluZ1BlcmZUZXN0CgoKY2xhc3MgUmVwbGF5U2VydmVyKG9iamVjdCk6
CiAgICBfc2VydmVyX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9f
KSwgJy4uJywgJy4uJywgJy4uJywgJ1dlYlBhZ2VSZXBsYXknLCAncmVwbGF5LnB5JykKCiAgICBk
ZWYgX19pbml0X18oc2VsZiwgYXJjaGl2ZSwgcmVjb3JkKToKICAgICAgICBzZWxmLl9wcm9jZXNz
ID0gTm9uZQoKICAgICAgICBhcmdzID0gW1JlcGxheVNlcnZlci5fc2VydmVyX3BhdGgsICctLW5v
LWRuc19mb3J3YXJkaW5nJywgJy0tcG9ydCcsICc4MDgwJywgJy0tc3NsX3BvcnQnLCAnODQxMydd
CiAgICAgICAgaWYgcmVjb3JkOgogICAgICAgICAgICBhcmdzLmFwcGVuZCgnLS1yZWNvcmQnKQog
ICAgICAgIGFyZ3MuYXBwZW5kKGFyY2hpdmUpCgogICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzdWJw
cm9jZXNzLlBvcGVuKGFyZ3MsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCgogICAgZGVmIHdhaXRf
dW50aWxfcmVhZHkoc2VsZik6CiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgbGluZSA9
IHNlbGYuX3Byb2Nlc3Muc3RkZXJyLnJlYWRsaW5lKCkKICAgICAgICAgICAgcHJpbnQgbGluZQog
ICAgICAgICAgICBpZiAiU3RhcnRlZCBIVFRQIHNlcnZlciBvbiIgaW4gbGluZSBvciBzZWxmLl9w
cm9jZXNzLnBvbGwoKSAhPSBOb25lOgogICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgcmV0
dXJuCgogICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKICAgICAg
ICAgICAgc2VsZi5fcHJvY2Vzcy5zZW5kX3NpZ25hbChzaWduYWwuU0lHSU5UKQogICAgICAgICAg
ICBzZWxmLl9wcm9jZXNzLndhaXQoKQogICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCgogICAg
ZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgc2VsZi5zdG9wKCkKCgpjbGFzcyBSZXBsYXlQZXJm
VGVzdChQYWdlTG9hZGluZ1BlcmZUZXN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X25h
bWUsIHBhdGhfb3JfdXJsLCBhcmNoaXZlKToKICAgICAgICBzdXBlcihSZXBsYXlQZXJmVGVzdCwg
c2VsZikuX19pbml0X18odGVzdF9uYW1lLCBOb25lLCBwYXRoX29yX3VybCkKICAgICAgICBzZWxm
Ll9hcmNoaXZlID0gYXJjaGl2ZQoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBwYXJzZV9yZXBs
YXlfdGVzdF9saXN0KHBhdGgsIHJlbGF0aXZlX3BhdGgsIGZpbGVzeXN0ZW0pOgogICAgICAgIGRp
cm5hbWUgPSBmaWxlc3lzdGVtLmRpcm5hbWUocGF0aCkKICAgICAgICByZWxhdGl2ZV9kaXJuYW1l
ID0gZmlsZXN5c3RlbS5kaXJuYW1lKHJlbGF0aXZlX3BhdGgpCiAgICAgICAgcmVwbGF5dGVzdF9s
aXN0ID0gZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQoKICAgICAgICB0ZXN0cyA9IFtd
CiAgICAgICAgZm9yIGxpbmUgaW4gcmVwbGF5dGVzdF9saXN0LnNwbGl0KCdcbicpOgogICAgICAg
ICAgICB1cmwgPSBzdHIocmUuc3ViKHInXHMqIy4rJCcsICcnLCBsaW5lKSkKICAgICAgICAgICAg
aWYgdXJsOgogICAgICAgICAgICAgICAgdGVzdF9uYW1lID0gcmVsYXRpdmVfZGlybmFtZS5yZXBs
YWNlKCdcXCcsICcvJykgKyAnOicgKyByZS5zdWIocidodHRwcz9cOi8vJywgJycsIHVybCkucnN0
cmlwKCcvJykKICAgICAgICAgICAgICAgIGFyY2hpdmUgPSBmaWxlc3lzdGVtLmpvaW4oZGlybmFt
ZSwgcmUuc3ViKHInL3xcPycsICctJywgcmUuc3ViKHInaHR0cHM/Oi8vJywgJycsIHVybCkucnN0
cmlwKCcvJykpICsgJy53cHInKQogICAgICAgICAgICAgICAgdGVzdHMuYXBwZW5kKFJlcGxheVBl
cmZUZXN0KHRlc3RfbmFtZSwgdXJsLCBhcmNoaXZlKSkKCiAgICAgICAgcmV0dXJuIHRlc3RzCgog
ICAgZGVmIF9zdGFydF9yZXBsYXlfc2VydmVyKHNlbGYsIGFyY2hpdmUsIHJlY29yZCk6CiAgICAg
ICAgcmV0dXJuIFJlcGxheVNlcnZlcihhcmNoaXZlLCByZWNvcmQpCgogICAgZGVmIHByZXBhcmUo
c2VsZiwgcG9ydCwgdGltZV9vdXRfbXMsIGZpbGVzeXN0ZW0sIHByaW50ZXIpOgogICAgICAgIGlm
IGZpbGVzeXN0ZW0uaXNmaWxlKHNlbGYuX2FyY2hpdmUpOgogICAgICAgICAgICByZXR1cm4gVHJ1
ZQoKICAgICAgICBwcmludGVyLndyaXRlKCJcblByZXBhcmluZyByZXBsYXkgZm9yICVzIiAlIHNl
bGYudGVzdF9uYW1lKCkpCgogICAgICAgIHNlcnZlciA9IHNlbGYuX3N0YXJ0X3JlcGxheV9zZXJ2
ZXIoc2VsZi5fYXJjaGl2ZSwgcmVjb3JkPVRydWUpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBz
ZXJ2ZXIud2FpdF91bnRpbF9yZWFkeSgpCiAgICAgICAgICAgIGRyaXZlciA9IHBvcnQuY3JlYXRl
X2RyaXZlcih3b3JrZXJfbnVtYmVyPTEsIG5vX3RpbWVvdXQ9VHJ1ZSkKICAgICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgICAgb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KERyaXZlcklucHV0KHNl
bGYucGF0aF9vcl91cmwoKSwgdGltZV9vdXRfbXMsIE5vbmUsIEZhbHNlKSkKICAgICAgICAgICAg
ZmluYWxseToKICAgICAgICAgICAgICAgIGRyaXZlci5zdG9wKCkKICAgICAgICBmaW5hbGx5Ogog
ICAgICAgICAgICBzZXJ2ZXIuc3RvcCgpCgogICAgICAgIGlmIG5vdCBmaWxlc3lzdGVtLmlzZmls
ZShzZWxmLl9hcmNoaXZlKToKICAgICAgICAgICAgcHJpbnRlci53cml0ZSgiRmFpbGVkIHRvIHBy
ZXBhcmUgYSByZXBsYXkgZm9yICVzXG4iICUgc2VsZi50ZXN0X25hbWUoKSkKICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCgogICAgICAgIHByaW50ZXIud3JpdGUoIlByZXBhcmVkIHJlcGxheSBmb3Ig
JXNcbiIgJSBzZWxmLnRlc3RfbmFtZSgpKQoKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBy
dW5fc2luZ2xlKHNlbGYsIGRyaXZlciwgdGltZV9vdXRfbXMpOgogICAgICAgIHNlcnZlciA9IHNl
bGYuX3N0YXJ0X3JlcGxheV9zZXJ2ZXIoc2VsZi5fYXJjaGl2ZSwgcmVjb3JkPUZhbHNlKQogICAg
ICAgIHRyeToKICAgICAgICAgICAgc2VydmVyLndhaXRfdW50aWxfcmVhZHkoKQogICAgICAgICAg
ICBkcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQoImFib3V0OmJsYW5rIiwgdGltZV9vdXRfbXMs
IE5vbmUsIEZhbHNlKSkKICAgICAgICAgICAgb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KERyaXZl
cklucHV0KHNlbGYucGF0aF9vcl91cmwoKSwgdGltZV9vdXRfbXMsIE5vbmUsIEZhbHNlKSkKICAg
ICAgICAgICAgcmV0dXJuIG91dHB1dAojICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFJlcGxheVBl
cmZUZXN0LCBzZWxmKS5ydW5fc2luZ2xlKGRyaXZlciwgdGltZV9vdXRfbXMpCiAgICAgICAgZmlu
YWxseToKICAgICAgICAgICAgc2VydmVyLnN0b3AoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140121</attachid>
            <date>2012-05-03 16:17:58 -0700</date>
            <delta_ts>2012-05-03 16:19:13 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>wip84008b</filename>
            <type>text/plain</type>
            <size>73275</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUmVzb3VyY2VMb2FkRGVsZWdh
dGUubW0JKHJldmlzaW9uIDExNDA5MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9SZXNv
dXJjZUxvYWREZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNywxMSBAQAog
ICAgIHJldHVybiBAIjx1bmtub3duPiI7CiB9CiAKK0JPT0wgaXNMb2NhbGhvc3QoY29uc3QgTlNT
dHJpbmcqIGhvc3QpCit7CisgICAgcmV0dXJuIE5TT3JkZXJlZFNhbWUgPT0gW2hvc3QgY29tcGFy
ZTpAIjEyNy4wLjAuMSJdIHx8IE5TT3JkZXJlZFNhbWUgPT0gW2hvc3QgY2FzZUluc2Vuc2l0aXZl
Q29tcGFyZTpAImxvY2FsaG9zdCJdOworfQorCiAtKE5TVVJMUmVxdWVzdCAqKXdlYlZpZXc6IChX
ZWJWaWV3ICopd3YgcmVzb3VyY2U6aWRlbnRpZmllciB3aWxsU2VuZFJlcXVlc3Q6IChOU1VSTFJl
cXVlc3QgKilyZXF1ZXN0IHJlZGlyZWN0UmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZWRpcmVj
dFJlc3BvbnNlIGZyb21EYXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZQogewog
ICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MoKSkgewpAQCAtMTQ5LDEzICsxNTQsMTQgQEAKIAogICAgIE5TVVJMICp1cmwgPSBb
cmVxdWVzdCBVUkxdOwogICAgIE5TU3RyaW5nICpob3N0ID0gW3VybCBob3N0XTsKLSAgICBpZiAo
aG9zdAotICAgICAgICAmJiAoTlNPcmRlcmVkU2FtZSA9PSBbW3VybCBzY2hlbWVdIGNhc2VJbnNl
bnNpdGl2ZUNvbXBhcmU6QCJodHRwIl0gfHwgTlNPcmRlcmVkU2FtZSA9PSBbW3VybCBzY2hlbWVd
IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJodHRwcyJdKQotICAgICAgICAmJiBOU09yZGVyZWRT
YW1lICE9IFtob3N0IGNvbXBhcmU6QCIxMjcuMC4wLjEiXQotICAgICAgICAmJiBOU09yZGVyZWRT
YW1lICE9IFtob3N0IGNvbXBhcmU6QCIyNTUuMjU1LjI1NS4yNTUiXSAvLyB1c2VkIGluIHNvbWUg
dGVzdHMgdGhhdCBleHBlY3QgdG8gZ2V0IGJhY2sgYW4gZXJyb3IKLSAgICAgICAgJiYgTlNPcmRl
cmVkU2FtZSAhPSBbaG9zdCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAibG9jYWxob3N0Il0pIHsK
LSAgICAgICAgcHJpbnRmKCJCbG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgJXNcbiIsIFtb
dXJsIGFic29sdXRlU3RyaW5nXSBjU3RyaW5nVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZ10pOwotICAgICAgICByZXR1cm4gbmlsOworICAgIGlmIChob3N0ICYmIChOU09yZGVyZWRT
YW1lID09IFtbdXJsIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImh0dHAiXSB8fCBO
U09yZGVyZWRTYW1lID09IFtbdXJsIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImh0
dHBzIl0pKSB7CisgICAgICAgIE5TVVJMICp0ZXN0VXJsID0gZG9uZSA/IDAgOiBbW05TVVJMIGFs
bG9jXSBpbml0V2l0aFN0cmluZzogW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPnRlc3RQYXRoT3JVUkwoKS5jX3N0cigpXV07CisgICAgICAgIE5T
U3RyaW5nICp0ZXN0VXJsSG9zdCA9IHRlc3RVcmwgPyBbdGVzdFVybCBob3N0XSA6IDA7CisgICAg
ICAgIGlmICghdGVzdFVybEhvc3QgfHwgKGlzTG9jYWxob3N0KHRlc3RVcmxIb3N0KSAmJiAoIWlz
TG9jYWxob3N0KGhvc3QpCisgICAgICAgICAgICB8fCBbaG9zdCBjb21wYXJlOkAiMjU1LjI1NS4y
NTUuMjU1Il0pKSkgeyAvLyB1c2VkIGluIHNvbWUgdGVzdHMgdGhhdCBleHBlY3QgdG8gZ2V0IGJh
Y2sgYW4gZXJyb3IKKyAgICAgICAgICAgIHByaW50ZigiQmxvY2tlZCBhY2Nlc3MgdG8gZXh0ZXJu
YWwgVVJMICVzXG4iLCBbW3VybCBhYnNvbHV0ZVN0cmluZ10gY1N0cmluZ1VzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAg
IH0KICAgICB9CiAKICAgICBpZiAoZGlzYWxsb3dlZFVSTHMgJiYgQ0ZTZXRDb250YWluc1ZhbHVl
KGRpc2FsbG93ZWRVUkxzLCB1cmwpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC93ZWJraXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkJKHJldmlzaW9uIDExNTg0MSkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC01MTksNiArNTE5LDggQEAKICAgICBkZWYgX2NvbW1hbmRfZnJvbV9kcml2ZXJf
aW5wdXQoc2VsZiwgZHJpdmVyX2lucHV0KToKICAgICAgICAgaWYgc2VsZi5pc19odHRwX3Rlc3Qo
ZHJpdmVyX2lucHV0LnRlc3RfbmFtZSk6CiAgICAgICAgICAgICBjb21tYW5kID0gc2VsZi50ZXN0
X3RvX3VyaShkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQorICAgICAgICBlbGlmIGRyaXZlcl9pbnB1
dC50ZXN0X25hbWUuc3RhcnRzd2l0aCgnaHR0cDovLycpIG9yIGRyaXZlcl9pbnB1dC50ZXN0X25h
bWUuc3RhcnRzd2l0aCgnaHR0cHM6Ly8nKToKKyAgICAgICAgICAgIGNvbW1hbmQgPSBkcml2ZXJf
aW5wdXQudGVzdF9uYW1lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb21tYW5kID0gc2Vs
Zi5fcG9ydC5hYnNwYXRoX2Zvcl90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCiAgICAgICAg
ICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CkBAIC01OTEsNiArNTkzLDggQEAKIAog
ICAgIGRlZiBfcHJvY2Vzc19zdGRvdXRfbGluZShzZWxmLCBibG9jaywgbGluZSk6CiAgICAgICAg
IGlmIChzZWxmLl9yZWFkX2hlYWRlcihibG9jaywgbGluZSwgJ0NvbnRlbnQtVHlwZTogJywgJ2Nv
bnRlbnRfdHlwZScpCisgICAgICAgICAgICBvciBzZWxmLl9yZWFkX2hlYWRlcihibG9jaywgbGlu
ZSwgJ1gtV2ViS2l0VGVzdFJ1bm5lci1TdGFydFRpbWU6ICcsICdzdGFydF90aW1lJywgaW50KQor
ICAgICAgICAgICAgb3Igc2VsZi5fcmVhZF9oZWFkZXIoYmxvY2ssIGxpbmUsICdYLVdlYktpdFRl
c3RSdW5uZXItRW5kVGltZTogJywgJ2VuZF90aW1lJywgaW50KQogICAgICAgICAgICAgb3Igc2Vs
Zi5fcmVhZF9oZWFkZXIoYmxvY2ssIGxpbmUsICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAn
LCAnZW5jb2RpbmcnKQogICAgICAgICAgICAgb3Igc2VsZi5fcmVhZF9oZWFkZXIoYmxvY2ssIGxp
bmUsICdDb250ZW50LUxlbmd0aDogJywgJ19jb250ZW50X2xlbmd0aCcsIGludCkKICAgICAgICAg
ICAgIG9yIHNlbGYuX3JlYWRfaGVhZGVyKGJsb2NrLCBsaW5lLCAnQWN0dWFsSGFzaDogJywgJ2Nv
bnRlbnRfaGFzaCcpKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2Vf
dGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5CShyZXZpc2lvbiAxMTU4
NDEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0
c3J1bm5lci5weQkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogZnJvbSB3ZWJraXRw
eS5jb21tb24ubmV0LmZpbGVfdXBsb2FkZXIgaW1wb3J0IEZpbGVVcGxvYWRlcgogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMudmlld3MgaW1wb3J0IHByaW50aW5nCiBmcm9tIHdlYmtpdHB5LnBl
cmZvcm1hbmNlX3Rlc3RzLnBlcmZ0ZXN0IGltcG9ydCBQZXJmVGVzdEZhY3RvcnkKK2Zyb20gd2Vi
a2l0cHkucGVyZm9ybWFuY2VfdGVzdHMucGVyZnRlc3QgaW1wb3J0IFJlcGxheVBlcmZUZXN0CiAK
IAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtNTEsNiArNTIsNyBAQAog
ICAgIF9FWElUX0NPREVfQkFEX0JVSUxEID0gLTEKICAgICBfRVhJVF9DT0RFX0JBRF9KU09OID0g
LTIKICAgICBfRVhJVF9DT0RFX0ZBSUxFRF9VUExPQURJTkcgPSAtMworICAgIF9FWElUX0NPREVf
QkFEX1BSRVBBUkFUSU9OID0gLTQKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzPU5vbmUs
IHBvcnQ9Tm9uZSk6CiAgICAgICAgIHNlbGYuX29wdGlvbnMsIHNlbGYuX2FyZ3MgPSBQZXJmVGVz
dHNSdW5uZXIuX3BhcnNlX2FyZ3MoYXJncykKQEAgLTEwNCw3ICsxMDYsNyBAQAogICAgICAgICAi
IiJSZXR1cm4gdGhlIGxpc3Qgb2YgdGVzdHMgZm91bmQuIiIiCiAKICAgICAgICAgZGVmIF9pc190
ZXN0X2ZpbGUoZmlsZXN5c3RlbSwgZGlybmFtZSwgZmlsZW5hbWUpOgotICAgICAgICAgICAgcmV0
dXJuIGZpbGVzeXN0ZW0uc3BsaXRleHQoZmlsZW5hbWUpWzFdIGluIFsnLmh0bWwnLCAnLnN2Zydd
CisgICAgICAgICAgICByZXR1cm4gZmlsZXN5c3RlbS5zcGxpdGV4dChmaWxlbmFtZSlbMV0gaW4g
WycuaHRtbCcsICcuc3ZnJywgJy5yZXBsYXknXQogCiAgICAgICAgIGZpbGVzeXN0ZW0gPSBzZWxm
Ll9ob3N0LmZpbGVzeXN0ZW0KIApAQCAtMTIyLDcgKzEyNCw4IEBACiAgICAgICAgICAgICByZWxh
dGl2ZV9wYXRoID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV9wZXJmX3Rlc3RfZmlsZW5hbWUocGF0aCku
cmVwbGFjZSgnXFwnLCAnLycpCiAgICAgICAgICAgICBpZiBzZWxmLl9wb3J0LnNraXBzX3BlcmZf
dGVzdChyZWxhdGl2ZV9wYXRoKToKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAg
ICAgdGVzdHMuYXBwZW5kKFBlcmZUZXN0RmFjdG9yeS5jcmVhdGVfcGVyZl90ZXN0KHJlbGF0aXZl
X3BhdGgsIHBhdGgpKQorICAgICAgICAgICAgdGVzdCA9IFBlcmZUZXN0RmFjdG9yeS5jcmVhdGVf
cGVyZl90ZXN0KHJlbGF0aXZlX3BhdGgsIHBhdGgpCisgICAgICAgICAgICB0ZXN0cy5hcHBlbmQo
dGVzdCkKIAogICAgICAgICByZXR1cm4gdGVzdHMKIApAQCAtMTMxLDEyICsxMzQsMTUgQEAKICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoIkJ1aWxkIG5vdCB1cCB0byBkYXRlIGZvciAlcyIgJSBzZWxm
Ll9wb3J0Ll9wYXRoX3RvX2RyaXZlcigpKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX0VYSVRf
Q09ERV9CQURfQlVJTEQKIAotICAgICAgICAjIFdlIHdyYXAgYW55IHBhcnRzIG9mIHRoZSBydW4g
dGhhdCBhcmUgc2xvdyBvciBsaWtlbHkgdG8gcmFpc2UgZXhjZXB0aW9ucwotICAgICAgICAjIGlu
IGEgdHJ5L2ZpbmFsbHkgdG8gZW5zdXJlIHRoYXQgd2UgY2xlYW4gdXAgdGhlIGxvZ2dpbmcgY29u
ZmlndXJhdGlvbi4KLSAgICAgICAgdW5leHBlY3RlZCA9IC0xCiAgICAgICAgIHRlc3RzID0gc2Vs
Zi5fY29sbGVjdF90ZXN0cygpCi0gICAgICAgIHVuZXhwZWN0ZWQgPSBzZWxmLl9ydW5fdGVzdHNf
c2V0KHNvcnRlZChsaXN0KHRlc3RzKSwga2V5PWxhbWJkYSB0ZXN0OiB0ZXN0LnRlc3RfbmFtZSgp
KSwgc2VsZi5fcG9ydCkKIAorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAg
IGlmIG5vdCB0ZXN0LnByZXBhcmUoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucy50aW1lX291dF9t
cywgc2VsZi5faG9zdC5maWxlc3lzdGVtKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5f
RVhJVF9DT0RFX0JBRF9QUkVQQVJBVElPTgorCisgICAgICAgIHVuZXhwZWN0ZWQgPSAtMQorIyAg
ICAgICAgdW5leHBlY3RlZCA9IHNlbGYuX3J1bl90ZXN0c19zZXQoc29ydGVkKGxpc3QodGVzdHMp
LCBrZXk9bGFtYmRhIHRlc3Q6IHRlc3QudGVzdF9uYW1lKCkpLCBzZWxmLl9wb3J0KQorCiAgICAg
ICAgIG9wdGlvbnMgPSBzZWxmLl9vcHRpb25zCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMub3V0
cHV0X2pzb25fcGF0aDoKICAgICAgICAgICAgICMgRklYTUU6IEFkZCAtLWJyYW5jaCBvciBhdXRv
LWRldGVjdCB0aGUgYnJhbmNoIHdlJ3JlIGluCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3QucHkJKHJldmlzaW9uIDExNTg0
MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxOSBAQAogIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAK
K2ltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBtYXRoCiBpbXBvcnQgcmUKK2lt
cG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKIAorIyBJbXBvcnQgZm9y
IGF1dG8taW5zdGFsbAoraW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC53
ZWJwYWdlcmVwbGF5CisKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZHJpdmVyIGlt
cG9ydCBEcml2ZXJJbnB1dAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5kcml2ZXIg
aW1wb3J0IERyaXZlck91dHB1dAogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKQEAgLTQ5LDE0ICs1NywxNyBAQAogICAgIGRlZiBwYXRoX29yX3VybChzZWxmKToKICAgICAg
ICAgcmV0dXJuIHNlbGYuX3BhdGhfb3JfdXJsCiAKLSAgICBkZWYgcnVuKHNlbGYsIGRyaXZlciwg
dGltZW91dF9tcyk6Ci0gICAgICAgIG91dHB1dCA9IGRyaXZlci5ydW5fdGVzdChEcml2ZXJJbnB1
dChzZWxmLnBhdGhfb3JfdXJsKCksIHRpbWVvdXRfbXMsIE5vbmUsIEZhbHNlKSkKKyAgICBkZWYg
cHJlcGFyZShzZWxmLCBwb3J0LCB0aW1lX291dF9tcywgZmlsZXN5c3RlbSk6CisgICAgICAgIHJl
dHVybiBUcnVlCisKKyAgICBkZWYgcnVuKHNlbGYsIGRyaXZlciwgdGltZV9vdXRfbXMpOgorICAg
ICAgICBvdXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQoc2VsZi5wYXRoX29yX3Vy
bCgpLCB0aW1lX291dF9tcywgTm9uZSwgRmFsc2UpKQogICAgICAgICBpZiBzZWxmLnJ1bl9mYWls
ZWQob3V0cHV0KToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHJldHVybiBzZWxm
LnBhcnNlX291dHB1dChvdXRwdXQpCiAKICAgICBkZWYgcnVuX2ZhaWxlZChzZWxmLCBvdXRwdXQp
OgotICAgICAgICBpZiBvdXRwdXQudGV4dCA9PSBOb25lIG9yIG91dHB1dC5lcnJvcjoKKyAgICAg
ICAgaWYgbm90IG91dHB1dCBvciBvdXRwdXQudGV4dCA9PSBOb25lIG9yIG91dHB1dC5lcnJvcjoK
ICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxpZiBvdXRwdXQudGltZW91dDoKICAgICAgICAg
ICAgIF9sb2cuZXJyb3IoJ3RpbWVvdXQ6ICVzJyAlIHNlbGYudGVzdF9uYW1lKCkpCkBAIC02NSw3
ICs3Niw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAg
ICAgICBpZiBvdXRwdXQuZXJyb3I6CisgICAgICAgIGlmIG91dHB1dCBhbmQgb3V0cHV0LmVycm9y
OgogICAgICAgICAgICAgX2xvZy5lcnJvcignZXJyb3I6ICVzXG4lcycgJSAoc2VsZi50ZXN0X25h
bWUoKSwgb3V0cHV0LmVycm9yKSkKIAogICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtMTUxLDExICsx
NjIsMTQgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9uYW1lLCBwYXRoX29yX3VybCk6
CiAgICAgICAgIHN1cGVyKFBhZ2VMb2FkaW5nUGVyZlRlc3QsIHNlbGYpLl9faW5pdF9fKHRlc3Rf
bmFtZSwgcGF0aF9vcl91cmwpCiAKLSAgICBkZWYgcnVuKHNlbGYsIGRyaXZlciwgdGltZW91dF9t
cyk6CisgICAgZGVmIHJ1bl9zaW5nbGUoc2VsZiwgZHJpdmVyLCB0aW1lX291dF9tcyk6CisgICAg
ICAgIHJldHVybiBkcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQoc2VsZi5wYXRoX29yX3VybCgp
LCB0aW1lX291dF9tcywgTm9uZSwgRmFsc2UpKQorCisgICAgZGVmIHJ1bihzZWxmLCBkcml2ZXIs
IHRpbWVfb3V0X21zKToKICAgICAgICAgdGVzdF90aW1lcyA9IFtdCiAKICAgICAgICAgZm9yIGkg
aW4gcmFuZ2UoMCwgMjApOgotICAgICAgICAgICAgb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KERy
aXZlcklucHV0KHNlbGYucGF0aF9vcl91cmwoKSwgdGltZW91dF9tcywgTm9uZSwgRmFsc2UpKQor
ICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5ydW5fc2luZ2xlKGRyaXZlciwgdGltZV9vdXRfbXMp
CiAgICAgICAgICAgICBpZiBzZWxmLnJ1bl9mYWlsZWQob3V0cHV0KToKICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9uZQogICAgICAgICAgICAgaWYgaSA9PSAwOgpAQCAtMTg1LDExICsxOTksMTEx
IEBACiAgICAgICAgIHJldHVybiB7c2VsZi50ZXN0X25hbWUoKTogcmVzdWx0c30KIAogCitjbGFz
cyBSZXBsYXlTZXJ2ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJjaGl2ZSwg
cmVjb3JkKToKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKworICAgICAgICAjIEZJWE1F
OiBTaG91bGQgZXJyb3IgaWYgbG9jYWwgcHJveHkgaXNuJ3Qgc2V0IHRvIGZvcndhcmQgcmVxdWVz
dHMgdG8gbG9jYWxob3N0OjgwODAgYW5kIGxvY2FsaG9zdDo4NDEzCisKKyAgICAgICAgcmVwbGF5
X3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHdlYmtpdHB5LnRoaXJkcGFydHku
YXV0b2luc3RhbGxlZC53ZWJwYWdlcmVwbGF5Ll9fZmlsZV9fKSwgJ3JlcGxheS5weScpCisgICAg
ICAgIGFyZ3MgPSBbJ3B5dGhvbicsIHJlcGxheV9wYXRoLCAnLS1uby1kbnNfZm9yd2FyZGluZycs
ICctLXBvcnQnLCAnODA4MCcsICctLXNzbF9wb3J0JywgJzg0MTMnXQorICAgICAgICBpZiByZWNv
cmQ6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLS1yZWNvcmQnKQorICAgICAgICBhcmdzLmFw
cGVuZChhcmNoaXZlKQorCisgICAgICAgIHByaW50IGFyZ3MKKyAgICAgICAgc2VsZi5fcHJvY2Vz
cyA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKworICAg
IGRlZiB3YWl0X3VudGlsX3JlYWR5KHNlbGYpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAg
ICAgICAgbGluZSA9IHNlbGYuX3Byb2Nlc3Muc3RkZXJyLnJlYWRsaW5lKCkKKyAgICAgICAgICAg
IHByaW50IGxpbmUKKyAgICAgICAgICAgIGlmICJTdGFydGVkIEhUVFAgc2VydmVyIG9uIiBpbiBs
aW5lIG9yIHNlbGYuX3Byb2Nlc3MucG9sbCgpICE9IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGlmIHNl
bGYuX3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzLnNlbmRfc2lnbmFsKHNpZ25h
bC5TSUdJTlQpCisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQorICAgICAgICBzZWxm
Ll9wcm9jZXNzID0gTm9uZQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYu
c3RvcCgpCisKKworY2xhc3MgUmVwbGF5UGVyZlRlc3QoUGFnZUxvYWRpbmdQZXJmVGVzdCk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfbmFtZSwgcGF0aF9vcl91cmwpOgorICAgICAgICBz
dXBlcihSZXBsYXlQZXJmVGVzdCwgc2VsZikuX19pbml0X18odGVzdF9uYW1lLCBwYXRoX29yX3Vy
bCkKKworICAgIGRlZiBfc3RhcnRfcmVwbGF5X3NlcnZlcihzZWxmLCBhcmNoaXZlLCByZWNvcmQp
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gUmVwbGF5U2VydmVyKGFyY2hpdmUs
IHJlY29yZCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6CisgICAgICAgICAgICBp
ZiBlcnJvci5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgX2xvZy5lcnJv
cigiUmVwbGF5IHRlc3RzIHJlcXVpcmUgd2ViLXBhZ2UtcmVwbGF5LiIpCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yCisKKyAgICBkZWYgcHJlcGFyZShzZWxm
LCBwb3J0LCB0aW1lX291dF9tcywgZmlsZXN5c3RlbSk6CisgICAgICAgIHBhdGhfd2l0aG91dF9l
eHQgPSBmaWxlc3lzdGVtLnNwbGl0ZXh0KHNlbGYucGF0aF9vcl91cmwoKSlbMF0KKworICAgICAg
ICBzZWxmLl9hcmNoaXZlX3BhdGggPSBmaWxlc3lzdGVtLmpvaW4ocGF0aF93aXRob3V0X2V4dCAr
ICcud3ByJykKKyAgICAgICAgc2VsZi5fdXJsID0gZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShz
ZWxmLnBhdGhfb3JfdXJsKCkpLnNwbGl0KCdcbicpWzBdCisgICAgICAgIGlmIGZpbGVzeXN0ZW0u
aXNmaWxlKHNlbGYuX2FyY2hpdmVfcGF0aCk6CisgICAgICAgICAgICBfbG9nLmluZm8oIlJlcGxh
eSByZWFkeSBmb3IgJXMiICUgc2VsZi5fYXJjaGl2ZV9wYXRoKQorICAgICAgICAgICAgcmV0dXJu
IFRydWUKKworICAgICAgICBfbG9nLmluZm8oIlByZXBhcmluZyByZXBsYXkgZm9yICVzIiAlIHNl
bGYudGVzdF9uYW1lKCkpCisKKyAgICAgICAgc2VydmVyID0gc2VsZi5fc3RhcnRfcmVwbGF5X3Nl
cnZlcihzZWxmLl9hcmNoaXZlX3BhdGgsIHJlY29yZD1UcnVlKQorICAgICAgICBpZiBub3Qgc2Vy
dmVyOgorICAgICAgICAgICAgX2xvZy5lcnJvcigiRmFpbGVkIHRvIHN0YXJ0IHJlcGxheSBzZXJ2
ZXIgZm9yICVzIiAlIHNlbGYudGVzdF9uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJ2ZXIud2FpdF91bnRpbF9yZWFkeSgpCisg
ICAgICAgICAgICBkcml2ZXIgPSBwb3J0LmNyZWF0ZV9kcml2ZXIod29ya2VyX251bWJlcj0xLCBu
b190aW1lb3V0PVRydWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHJpbnQg
c2VsZi5fdXJsCisjICAgICAgICAgICAgICAgIG91dHB1dCA9IGRyaXZlci5ydW5fdGVzdChEcml2
ZXJJbnB1dChzZWxmLl91cmwsIHRpbWVfb3V0X21zLCBOb25lLCBGYWxzZSkpCisjICAgICAgICAg
ICAgICAgIGlmIHNlbGYucnVuX2ZhaWxlZChvdXRwdXQpOgorIyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisjICAgICAgICAgICAgICAgIHByaW50IG91dHB1dC50ZXh0CisgICAgICAg
ICAgICAgICAgcG9ydC5ob3N0LnVzZXIuY29uZmlybSgiUmVhZHkgdG8gc3RvcCB0ZXN0PyIpCisg
ICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGRyaXZlci5zdG9wKCkKKyAgICAg
ICAgZmluYWxseToKKyAgICAgICAgICAgIHNlcnZlci5zdG9wKCkKKworICAgICAgICBpZiBub3Qg
ZmlsZXN5c3RlbS5pc2ZpbGUoc2VsZi5fYXJjaGl2ZV9wYXRoKToKKyAgICAgICAgICAgIF9sb2cu
ZXJyb3IoIkZhaWxlZCB0byBwcmVwYXJlIGEgcmVwbGF5IGZvciAlcyIgJSBzZWxmLnRlc3RfbmFt
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgX2xvZy5pbmZvKCJQcmVw
YXJlZCByZXBsYXkgZm9yICVzIiAlIHNlbGYudGVzdF9uYW1lKCkpCisKKyAgICAgICAgcmV0dXJu
IFRydWUKKworICAgIGRlZiBydW5fc2luZ2xlKHNlbGYsIGRyaXZlciwgdGltZV9vdXRfbXMpOgor
ICAgICAgICBzZXJ2ZXIgPSBzZWxmLl9zdGFydF9yZXBsYXlfc2VydmVyKHNlbGYuX2FyY2hpdmVf
cGF0aCwgcmVjb3JkPUZhbHNlKQorICAgICAgICBpZiBub3Qgc2VydmVyOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJ2ZXIud2FpdF91bnRp
bF9yZWFkeSgpCisgICAgICAgICAgICBkcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQoImFib3V0
OmJsYW5rIiwgdGltZV9vdXRfbXMsIE5vbmUsIEZhbHNlKSkKKyAgICAgICAgICAgIG91dHB1dCA9
IGRyaXZlci5ydW5fdGVzdChEcml2ZXJJbnB1dChzZWxmLl91cmwsIHRpbWVfb3V0X21zLCBOb25l
LCBGYWxzZSkpCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0CisgICAgICAgIGZpbmFsbHk6Cisg
ICAgICAgICAgICBzZXJ2ZXIuc3RvcCgpCisKKwogY2xhc3MgUGVyZlRlc3RGYWN0b3J5KG9iamVj
dCk6CiAKICAgICBfcGF0dGVybl9tYXAgPSBbCi0gICAgICAgIChyZS5jb21waWxlKCdeaW5zcGVj
dG9yLycpLCBDaHJvbWl1bVN0eWxlUGVyZlRlc3QpLAotICAgICAgICAocmUuY29tcGlsZSgnXlBh
Z2VMb2FkLycpLCBQYWdlTG9hZGluZ1BlcmZUZXN0KSwKKyAgICAgICAgKHJlLmNvbXBpbGUocide
aW5zcGVjdG9yLycpLCBDaHJvbWl1bVN0eWxlUGVyZlRlc3QpLAorICAgICAgICAocmUuY29tcGls
ZShyJ15QYWdlTG9hZC8nKSwgUGFnZUxvYWRpbmdQZXJmVGVzdCksCisgICAgICAgIChyZS5jb21w
aWxlKHInKC4rKVwucmVwbGF5JCcpLCBSZXBsYXlQZXJmVGVzdCksCiAgICAgXQogCiAgICAgQGNs
YXNzbWV0aG9kCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0
X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19f
aW5pdF9fLnB5CShyZXZpc2lvbiAxMTU4NDEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDggQEAKICAg
ICAgICAgICAgIHNlbGYuX2luc3RhbGxfcHl3ZWJzb2NrZXQoKQogICAgICAgICBlbGlmICcuYnVp
bGRib3QnIGluIGZ1bGxuYW1lOgogICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9idWlsZGJvdCgp
CisgICAgICAgIGVsaWYgJy53ZWJwYWdlcmVwbGF5JyBpbiBmdWxsbmFtZToKKyAgICAgICAgICAg
IHNlbGYuX2luc3RhbGxfd2VicGFnZXJlcGxheSgpCiAKICAgICBkZWYgX2luc3RhbGxfbWVjaGFu
aXplKHNlbGYpOgogICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwOi8vcHlwaS5weXRob24ub3Jn
L3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9tZWNoYW5pemUtMC4yLjUudGFyLmd6IiwKQEAg
LTEzNCw2ICsxMzYsMTUgQEAKICAgICAgICAgaW5zdGFsbGVyLmluc3RhbGwodXJsPSJodHRwOi8v
cHl3ZWJzb2NrZXQuZ29vZ2xlY29kZS5jb20vZmlsZXMvbW9kX3B5d2Vic29ja2V0LTAuNy40LnRh
ci5neiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPSJweXdlYnNvY2tl
dC0wLjcuNC9zcmMvbW9kX3B5d2Vic29ja2V0IikKIAorICAgIGRlZiBfaW5zdGFsbF93ZWJwYWdl
cmVwbGF5KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fZnMuZXhpc3RzKHNlbGYuX2ZzLmpv
aW4oX0FVVE9JTlNUQUxMRURfRElSLCAid2VicGFnZXJlcGxheSIpKToKKyAgICAgICAgICAgIHNl
bGYuX2luc3RhbGwoImh0dHA6Ly93ZWItcGFnZS1yZXBsYXkuZ29vZ2xlY29kZS5jb20vZmlsZXMv
d2VicGFnZXJlcGxheS0xLjAuMS50YXIuZ3oiLCAid2VicGFnZXJlcGxheS0xLjAuMSIpCisgICAg
ICAgICAgICBzZWxmLl9mcy5tb3ZlKHNlbGYuX2ZzLmpvaW4oX0FVVE9JTlNUQUxMRURfRElSLCAi
d2VicGFnZXJlcGxheS0xLjAuMSIpLCBzZWxmLl9mcy5qb2luKF9BVVRPSU5TVEFMTEVEX0RJUiwg
IndlYnBhZ2VyZXBsYXkiKSkKKworICAgICAgICBpbml0X3BhdGggPSBzZWxmLl9mcy5qb2luKF9B
VVRPSU5TVEFMTEVEX0RJUiwgIndlYnBhZ2VyZXBsYXkiLCAiX19pbml0X18ucHkiKQorICAgICAg
ICBpZiBub3Qgc2VsZi5fZnMuZXhpc3RzKGluaXRfcGF0aCk6CisgICAgICAgICAgICBzZWxmLl9m
cy53cml0ZV90ZXh0X2ZpbGUoaW5pdF9wYXRoLCAiIikKKwogICAgIGRlZiBfaW5zdGFsbChzZWxm
LCB1cmwsIHVybF9zdWJwYXRoKToKICAgICAgICAgaW5zdGFsbGVyID0gQXV0b0luc3RhbGxlcih0
YXJnZXRfZGlyPV9BVVRPSU5TVEFMTEVEX0RJUikKICAgICAgICAgaW5zdGFsbGVyLmluc3RhbGwo
dXJsPXVybCwgdXJsX3N1YnBhdGg9dXJsX3N1YnBhdGgpCkluZGV4OiBUb29scy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTQyMjUpCisrKyBUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNjkxIEBACisyMDEyLTA0LTE1
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBwdWJsaWMg
cGFnZSBsb2FkaW5nIHBlcmZvcm1hbmNlIHRlc3RzIHVzaW5nIHdlYi1wYWdlLXJlcGxheQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQwMDgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbToKKyAgICAgICAgKGlzTG9jYWxob3N0KToK
KyAgICAgICAgKC1bUmVzb3VyY2VMb2FkRGVsZWdhdGUgd2ViVmlldzpyZXNvdXJjZTp3aWxsU2Vu
ZFJlcXVlc3Q6cmVkaXJlY3RSZXNwb25zZTpmcm9tRGF0YVNvdXJjZTpdKToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weToKKyAgICAgICAgKFdl
YktpdERyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dCk6CisgICAgICAgIChXZWJLaXRE
cml2ZXIuX3Byb2Nlc3Nfc3Rkb3V0X2xpbmUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
cGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3QucHk6CisgICAgICAgIChQZXJmVGVzdC5wcmVwYXJl
KToKKyAgICAgICAgKFBlcmZUZXN0KToKKyAgICAgICAgKFBlcmZUZXN0LnJ1bik6CisgICAgICAg
IChQYWdlTG9hZGluZ1BlcmZUZXN0LnJ1bl9zaW5nbGUpOgorICAgICAgICAoUGFnZUxvYWRpbmdQ
ZXJmVGVzdCk6CisgICAgICAgIChQYWdlTG9hZGluZ1BlcmZUZXN0LnJ1bik6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHk6Cisg
ICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX2NvbGxlY3RfdGVzdHMuX2lzX3Rlc3RfZmlsZV9vcl9s
aXN0KToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fY29sbGVjdF90ZXN0cyk6CisgICAgICAg
IChQZXJmVGVzdHNSdW5uZXIuX3J1bl90ZXN0c19zZXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAodGVzdF9ydW5fdGVzdF9zZXRfa2lsbHNfZHJ0X3Blcl9ydW4pOgorICAgICAgICAqIFdl
YlBhZ2VSZXBsYXk6IEFkZGVkLgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvQ09QWUlORzogQWRk
ZWQuCisgICAgICAgICogV2ViUGFnZVJlcGxheS9jYWNoZW1pc3NhcmNoaXZlLnB5OiBBZGRlZC4K
KyAgICAgICAgKGZvcm1hdF9yZXF1ZXN0KToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmUpOgor
ICAgICAgICAoQ2FjaGVNaXNzQXJjaGl2ZS5fX2luaXRfXyk6CisgICAgICAgIChDYWNoZU1pc3NB
cmNoaXZlLnJlY29yZF9jYWNoZV9taXNzKToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmUuc2V0
X3VybHNfbGlzdCk6CisgICAgICAgIChDYWNoZU1pc3NBcmNoaXZlLnJlY29yZF9yZXF1ZXN0KToK
KyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmUuX3JlY29yZF9yZXF1ZXN0KToKKyAgICAgICAgKENh
Y2hlTWlzc0FyY2hpdmUucmVxdWVzdF9kaWZmKToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmUu
X21hdGNoX3VybHMpOgorICAgICAgICAoQ2FjaGVNaXNzQXJjaGl2ZS5fYXBwZW5kX2FyY2hpdmUp
OgorICAgICAgICAoQ2FjaGVNaXNzQXJjaGl2ZS5fX3JlcHJfXyk6CisgICAgICAgIChDYWNoZU1p
c3NBcmNoaXZlLlBlcnNpc3QpOgorICAgICAgICAoQ2FjaGVNaXNzQXJjaGl2ZS5nZXRfdG90YWxf
cmVmZXJlcnMpOgorICAgICAgICAoQ2FjaGVNaXNzQXJjaGl2ZS5nZXRfdG90YWxfY2FjaGVfbWlz
c2VzKToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmUuZ2V0X3RvdGFsX3JlZmVyZXJfY2FjaGVf
bWlzc2VzKToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmUuZ2V0X2NhY2hlX21pc3Nlcyk6Cisg
ICAgICAgIChDYWNoZU1pc3NBcmNoaXZlLmdldF9hbGxfY2FjaGVfbWlzc2VzKToKKyAgICAgICAg
KiBXZWJQYWdlUmVwbGF5L2NhY2hlbWlzc2FyY2hpdmVfdGVzdC5weTogQWRkZWQuCisgICAgICAg
IChDYWNoZU1pc3NBcmNoaXZlVGVzdCk6CisgICAgICAgIChDYWNoZU1pc3NBcmNoaXZlVGVzdC5z
ZXRVcCk6CisgICAgICAgIChDYWNoZU1pc3NBcmNoaXZlVGVzdC5sb2FkX21vY2tfYXJjaGl2ZSk6
CisgICAgICAgIChDYWNoZU1pc3NBcmNoaXZlVGVzdC50ZXN0X2luaXQpOgorICAgICAgICAoQ2Fj
aGVNaXNzQXJjaGl2ZVRlc3QudGVzdF9yZWNvcmRfY2FjaGVfbWlzcyk6CisgICAgICAgIChDYWNo
ZU1pc3NBcmNoaXZlVGVzdC50ZXN0X19tYXRjaF91cmxzKToKKyAgICAgICAgKENhY2hlTWlzc0Fy
Y2hpdmVUZXN0LnRlc3RfZ2V0X3RvdGFsX3JlZmVyZXJzX3NtYWxsKToKKyAgICAgICAgKENhY2hl
TWlzc0FyY2hpdmVUZXN0LnRlc3RfZ2V0X3RvdGFsX3JlZmVyZXJzX2xhcmdlKToKKyAgICAgICAg
KENhY2hlTWlzc0FyY2hpdmVUZXN0LnRlc3RfZ2V0X3RvdGFsX2NhY2hlX21pc3Nlcyk6CisgICAg
ICAgIChDYWNoZU1pc3NBcmNoaXZlVGVzdC50ZXN0X2dldF90b3RhbF9yZWZlcmVyX2NhY2hlX21p
c3Nlcyk6CisgICAgICAgIChDYWNoZU1pc3NBcmNoaXZlVGVzdC50ZXN0X3JlY29yZF9yZXF1ZXN0
KToKKyAgICAgICAgKENhY2hlTWlzc0FyY2hpdmVUZXN0LnRlc3RfZ2V0X2NhY2hlX21pc3Nlcyk6
CisgICAgICAgICogV2ViUGFnZVJlcGxheS9jdXN0b21oYW5kbGVycy5weTogQWRkZWQuCisgICAg
ICAgIChTaW1wbGVSZXNwb25zZSk6CisgICAgICAgIChKc29uUmVzcG9uc2UpOgorICAgICAgICAo
Q3VzdG9tSGFuZGxlcnMpOgorICAgICAgICAoQ3VzdG9tSGFuZGxlcnMuX19pbml0X18pOgorICAg
ICAgICAoQ3VzdG9tSGFuZGxlcnMuaGFuZGxlKToKKyAgICAgICAgKEN1c3RvbUhhbmRsZXJzLmdl
dF9nZW5lcmF0b3JfdXJsX3Jlc3BvbnNlX2NvZGUpOgorICAgICAgICAoQ3VzdG9tSGFuZGxlcnMu
aGFuZGxlX3Bvc3NpYmxlX3Bvc3RfaW1hZ2UpOgorICAgICAgICAoQ3VzdG9tSGFuZGxlcnMuYWRk
X3NlcnZlcl9tYW5hZ2VyX2hhbmRsZXIpOgorICAgICAgICAoQ3VzdG9tSGFuZGxlcnMuaGFuZGxl
X3NlcnZlcl9tYW5hZ2VyX2NvbW1hbmQpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvZGFlbW9u
c2VydmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKERhZW1vblNlcnZlcik6CisgICAgICAgIChEYWVt
b25TZXJ2ZXIud2hpY2gpOgorICAgICAgICAoRGFlbW9uU2VydmVyLl9fZW50ZXJfXyk6CisgICAg
ICAgIChEYWVtb25TZXJ2ZXIuX19leGl0X18pOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvZGV0
ZXJtaW5pc3RpYy5qczogQWRkZWQuCisgICAgICAgICogV2ViUGFnZVJlcGxheS9kbnNwcm94eS5w
eTogQWRkZWQuCisgICAgICAgIChEbnNQcm94eUV4Y2VwdGlvbik6CisgICAgICAgIChSZWFsRG5z
TG9va3VwKToKKyAgICAgICAgKFJlYWxEbnNMb29rdXAuX19pbml0X18pOgorICAgICAgICAoUmVh
bERuc0xvb2t1cC5fX2NhbGxfXyk6CisgICAgICAgIChSZWFsRG5zTG9va3VwLkNsZWFyQ2FjaGUp
OgorICAgICAgICAoUHJpdmF0ZUlwRG5zTG9va3VwKToKKyAgICAgICAgKFByaXZhdGVJcERuc0xv
b2t1cC5fX2luaXRfXyk6CisgICAgICAgIChQcml2YXRlSXBEbnNMb29rdXAuX19jYWxsX18pOgor
ICAgICAgICAoUHJpdmF0ZUlwRG5zTG9va3VwLkluaXRpYWxpemVBcmNoaXZlSG9zdHMpOgorICAg
ICAgICAoVWRwRG5zSGFuZGxlcik6CisgICAgICAgIChVZHBEbnNIYW5kbGVyLmhhbmRsZSk6Cisg
ICAgICAgIChVZHBEbnNIYW5kbGVyLl9kb21haW4pOgorICAgICAgICAoVWRwRG5zSGFuZGxlci5n
ZXRfZG5zX3Jlc3BvbnNlKToKKyAgICAgICAgKFVkcERuc0hhbmRsZXIuZ2V0X2Ruc19yZXNwb25z
ZS5vZik6CisgICAgICAgIChVZHBEbnNIYW5kbGVyLmdldF9kbnNfbm9fc3VjaF9uYW1lX3Jlc3Bv
bnNlKToKKyAgICAgICAgKERuc1Byb3h5U2VydmVyKToKKyAgICAgICAgKERuc1Byb3h5U2VydmVy
Ll9faW5pdF9fKToKKyAgICAgICAgKERuc1Byb3h5U2VydmVyLmNsZWFudXApOgorICAgICAgICAq
IFdlYlBhZ2VSZXBsYXkvaHR0cGFyY2hpdmUucHk6IEFkZGVkLgorICAgICAgICAoSHR0cEFyY2hp
dmVFeGNlcHRpb24pOgorICAgICAgICAoSHR0cEFyY2hpdmVFeGNlcHRpb24uZm9yKToKKyAgICAg
ICAgKEh0dHBBcmNoaXZlKToKKyAgICAgICAgKEh0dHBBcmNoaXZlLl9faW5pdF9fKToKKyAgICAg
ICAgKEh0dHBBcmNoaXZlLmdldF9zZXJ2ZXJfcnR0KToKKyAgICAgICAgKEh0dHBBcmNoaXZlLmdl
dCk6CisgICAgICAgIChIdHRwQXJjaGl2ZS5nZXRfY29uZGl0aW9uYWxfcmVzcG9uc2UpOgorICAg
ICAgICAoSHR0cEFyY2hpdmUuZ2V0X2NvbmRpdGlvbmFsX3N0YXR1cyk6CisgICAgICAgIChIdHRw
QXJjaGl2ZS5pc19ldGFnX21hdGNoKToKKyAgICAgICAgKEh0dHBBcmNoaXZlLmdldF9yZXF1ZXN0
cyk6CisgICAgICAgIChIdHRwQXJjaGl2ZS5scyk6CisgICAgICAgIChIdHRwQXJjaGl2ZS5jYXQp
OgorICAgICAgICAoSHR0cEFyY2hpdmUuZWRpdCk6CisgICAgICAgIChIdHRwQXJjaGl2ZS5fZm9y
bWF0X3JlcXVlc3RfbGluZXMpOgorICAgICAgICAoSHR0cEFyY2hpdmUuZmluZF9jbG9zZXN0X3Jl
cXVlc3QpOgorICAgICAgICAoSHR0cEFyY2hpdmUuZGlmZik6CisgICAgICAgIChBcmNoaXZlZEh0
dHBSZXF1ZXN0KToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJlcXVlc3QuX19pbml0X18pOgorICAg
ICAgICAoQXJjaGl2ZWRIdHRwUmVxdWVzdC5fX3N0cl9fKToKKyAgICAgICAgKEFyY2hpdmVkSHR0
cFJlcXVlc3QudmVyYm9zZSk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXF1ZXN0Ll9fcmVwcl9f
KToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJlcXVlc3QuX19oYXNoX18pOgorICAgICAgICAoQXJj
aGl2ZWRIdHRwUmVxdWVzdC5fX2VxX18pOgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVxdWVzdC5f
X3NldHN0YXRlX18pOgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVxdWVzdC5fX2dldHN0YXRlX18p
OgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVxdWVzdC5tYXRjaGVzKToKKyAgICAgICAgKEFyY2hp
dmVkSHR0cFJlcXVlc3QuX1RyaW1IZWFkZXJzKToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJlcXVl
c3QuaXNfY29uZGl0aW9uYWwpOgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVxdWVzdC5jcmVhdGVf
cmVxdWVzdF93aXRob3V0X2NvbmRpdGlvbnMpOgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVzcG9u
c2UpOgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVzcG9uc2UuX19pbml0X18pOgorICAgICAgICAo
QXJjaGl2ZWRIdHRwUmVzcG9uc2UuZml4X2NodW5rX2RlbGF5cyk6CisgICAgICAgIChBcmNoaXZl
ZEh0dHBSZXNwb25zZS5fX3JlcHJfXyk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXNwb25zZS5f
X2hhc2hfXyk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXNwb25zZS5fX2VxX18pOgorICAgICAg
ICAoQXJjaGl2ZWRIdHRwUmVzcG9uc2UuX19zZXRzdGF0ZV9fKToKKyAgICAgICAgKEFyY2hpdmVk
SHR0cFJlc3BvbnNlLmdldF9oZWFkZXIpOgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVzcG9uc2Uu
Z2V0X2hlYWRlcl9jYXNlX2luc2Vuc2l0aXZlKToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJlc3Bv
bnNlLnNldF9oZWFkZXIpOgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVzcG9uc2UucmVtb3ZlX2hl
YWRlcik6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXNwb25zZS5pc19nemlwKToKKyAgICAgICAg
KEFyY2hpdmVkSHR0cFJlc3BvbnNlLmlzX2NvbXByZXNzZWQpOgorICAgICAgICAoQXJjaGl2ZWRI
dHRwUmVzcG9uc2UuZ2V0X2RhdGFfYXNfdGV4dCk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXNw
b25zZS5nZXRfc2VydmVyX2RlbGF5c19hc190ZXh0KToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJl
c3BvbnNlLmdldF9yZXNwb25zZV9hc190ZXh0KToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJlc3Bv
bnNlLnNldF9kYXRhKToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJlc3BvbnNlLnNldF9zZXJ2ZXJf
ZGVsYXlzKToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJlc3BvbnNlLnNldF9yZXNwb25zZV9mcm9t
X3RleHQpOgorICAgICAgICAoY3JlYXRlX3Jlc3BvbnNlKToKKyAgICAgICAgKFBsYWluSGVscEZv
cm1hdHRlcik6CisgICAgICAgIChQbGFpbkhlbHBGb3JtYXR0ZXIuZm9ybWF0X2Rlc2NyaXB0aW9u
KToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L2h0dHBhcmNoaXZlX3Rlc3QucHk6IEFkZGVkLgor
ICAgICAgICAoY3JlYXRlX3JlcXVlc3QpOgorICAgICAgICAoY3JlYXRlX3Jlc3BvbnNlKToKKyAg
ICAgICAgKEh0dHBBcmNoaXZlVGVzdCk6CisgICAgICAgIChIdHRwQXJjaGl2ZVRlc3Quc2V0VXAp
OgorICAgICAgICAoSHR0cEFyY2hpdmVUZXN0LnRlYXJEb3duKToKKyAgICAgICAgKEh0dHBBcmNo
aXZlVGVzdC50ZXN0X2luaXQpOgorICAgICAgICAoSHR0cEFyY2hpdmVUZXN0LnRlc3RfX1RyaW1I
ZWFkZXJzKToKKyAgICAgICAgKEh0dHBBcmNoaXZlVGVzdC50ZXN0X21hdGNoZXMpOgorICAgICAg
ICAoSHR0cEFyY2hpdmVUZXN0LnNldHVwX2ZpbmRfY2xvc2VzdF9yZXF1ZXN0KToKKyAgICAgICAg
KEh0dHBBcmNoaXZlVGVzdC50ZXN0X2ZpbmRfY2xvc2VzdF9yZXF1ZXN0KToKKyAgICAgICAgKEh0
dHBBcmNoaXZlVGVzdC50ZXN0X2ZpbmRfY2xvc2VzdF9yZXF1ZXN0X2RlbGV0ZV9zaW1wbGUpOgor
ICAgICAgICAoSHR0cEFyY2hpdmVUZXN0LnRlc3RfZmluZF9jbG9zZXN0X3JlcXVlc3RfZGVsZXRl
X2NvbXBsZXgpOgorICAgICAgICAoSHR0cEFyY2hpdmVUZXN0LnRlc3RfZ2V0X3NpbXBsZSk6Cisg
ICAgICAgIChIdHRwQXJjaGl2ZVRlc3QudGVzdF9nZXRfbW9kaWZpZWRfaGVhZGVycyk6CisgICAg
ICAgIChIdHRwQXJjaGl2ZVRlc3QudGVzdF9nZXRfdW5tb2RpZmllZF9oZWFkZXJzKToKKyAgICAg
ICAgKEh0dHBBcmNoaXZlVGVzdC50ZXN0X2dldF9ldGFncyk6CisgICAgICAgIChIdHRwQXJjaGl2
ZVRlc3QudGVzdF9nZXRfbXVsdGlwbGVfbWF0Y2hfaGVhZGVycyk6CisgICAgICAgIChIdHRwQXJj
aGl2ZVRlc3QudGVzdF9nZXRfbXVsdGlwbGVfbm9uZV9tYXRjaF9oZWFkZXJzKToKKyAgICAgICAg
KiBXZWJQYWdlUmVwbGF5L2h0dHBjbGllbnQucHk6IEFkZGVkLgorICAgICAgICAoR2V0SW5qZWN0
U2NyaXB0KToKKyAgICAgICAgKF9JbmplY3RTY3JpcHRzKToKKyAgICAgICAgKF9JbmplY3RTY3Jp
cHRzLkluc2VydFNjcmlwdEFmdGVyKToKKyAgICAgICAgKERldGFpbGVkSFRUUFJlc3BvbnNlKToK
KyAgICAgICAgKERldGFpbGVkSFRUUFJlc3BvbnNlLnJlYWRfY2h1bmtzKToKKyAgICAgICAgKERl
dGFpbGVkSFRUUFJlc3BvbnNlLl9yZWFkX2NodW5rX3NpemUpOgorICAgICAgICAoRGV0YWlsZWRI
VFRQQ29ubmVjdGlvbik6CisgICAgICAgIChEZXRhaWxlZEhUVFBTUmVzcG9uc2UpOgorICAgICAg
ICAoRGV0YWlsZWRIVFRQU0Nvbm5lY3Rpb24pOgorICAgICAgICAoUmVhbEh0dHBGZXRjaCk6Cisg
ICAgICAgIChSZWFsSHR0cEZldGNoLl9faW5pdF9fKToKKyAgICAgICAgKFJlYWxIdHRwRmV0Y2gu
X19jYWxsX18pOgorICAgICAgICAoUmVjb3JkSHR0cEFyY2hpdmVGZXRjaCk6CisgICAgICAgIChS
ZWNvcmRIdHRwQXJjaGl2ZUZldGNoLl9faW5pdF9fKToKKyAgICAgICAgKFJlY29yZEh0dHBBcmNo
aXZlRmV0Y2guX19jYWxsX18pOgorICAgICAgICAoUmVwbGF5SHR0cEFyY2hpdmVGZXRjaCk6Cisg
ICAgICAgIChSZXBsYXlIdHRwQXJjaGl2ZUZldGNoLl9faW5pdF9fKToKKyAgICAgICAgKFJlcGxh
eUh0dHBBcmNoaXZlRmV0Y2guX19jYWxsX18pOgorICAgICAgICAoQ29udHJvbGxhYmxlSHR0cEFy
Y2hpdmVGZXRjaCk6CisgICAgICAgIChDb250cm9sbGFibGVIdHRwQXJjaGl2ZUZldGNoLl9faW5p
dF9fKToKKyAgICAgICAgKENvbnRyb2xsYWJsZUh0dHBBcmNoaXZlRmV0Y2guU2V0UmVjb3JkTW9k
ZSk6CisgICAgICAgIChDb250cm9sbGFibGVIdHRwQXJjaGl2ZUZldGNoLlNldFJlcGxheU1vZGUp
OgorICAgICAgICAoQ29udHJvbGxhYmxlSHR0cEFyY2hpdmVGZXRjaC5fX2NhbGxfXyk6CisgICAg
ICAgICogV2ViUGFnZVJlcGxheS9odHRwcHJveHkucHk6IEFkZGVkLgorICAgICAgICAoSHR0cFBy
b3h5RXJyb3IpOgorICAgICAgICAoSHR0cFByb3h5U2VydmVyRXJyb3IpOgorICAgICAgICAoSHR0
cEFyY2hpdmVIYW5kbGVyKToKKyAgICAgICAgKEh0dHBBcmNoaXZlSGFuZGxlci5sb2dfcmVxdWVz
dCk6CisgICAgICAgIChIdHRwQXJjaGl2ZUhhbmRsZXIubG9nX2Vycm9yKToKKyAgICAgICAgKEh0
dHBBcmNoaXZlSGFuZGxlci5sb2dfbWVzc2FnZSk6CisgICAgICAgIChIdHRwQXJjaGl2ZUhhbmRs
ZXIucmVhZF9yZXF1ZXN0X2JvZHkpOgorICAgICAgICAoSHR0cEFyY2hpdmVIYW5kbGVyLmdldF9o
ZWFkZXJfZGljdCk6CisgICAgICAgIChIdHRwQXJjaGl2ZUhhbmRsZXIuZ2V0X2FyY2hpdmVkX2h0
dHBfcmVxdWVzdCk6CisgICAgICAgIChIdHRwQXJjaGl2ZUhhbmRsZXIuc2VuZF9hcmNoaXZlZF9o
dHRwX3Jlc3BvbnNlKToKKyAgICAgICAgKEh0dHBBcmNoaXZlSGFuZGxlci5kb19QT1NUKToKKyAg
ICAgICAgKEh0dHBBcmNoaXZlSGFuZGxlci5kb19IRUFEKToKKyAgICAgICAgKEh0dHBBcmNoaXZl
SGFuZGxlci5zZW5kX2Vycm9yKToKKyAgICAgICAgKEh0dHBBcmNoaXZlSGFuZGxlci5kb19HRVQp
OgorICAgICAgICAoSHR0cFByb3h5U2VydmVyKToKKyAgICAgICAgKEh0dHBQcm94eVNlcnZlci5f
X2luaXRfXyk6CisgICAgICAgIChIdHRwUHJveHlTZXJ2ZXIuY2xlYW51cCk6CisgICAgICAgIChI
dHRwc0FyY2hpdmVIYW5kbGVyKToKKyAgICAgICAgKEh0dHBzQXJjaGl2ZUhhbmRsZXIuZ2V0X2Fy
Y2hpdmVkX2h0dHBfcmVxdWVzdCk6CisgICAgICAgIChIdHRwc1Byb3h5U2VydmVyKToKKyAgICAg
ICAgKEh0dHBzUHJveHlTZXJ2ZXIuX19pbml0X18pOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkv
aHR0cHpsaWIucHk6IEFkZGVkLgorICAgICAgICAoY29tcHJlc3NfY2h1bmtzKToKKyAgICAgICAg
KHVuY29tcHJlc3NfY2h1bmtzKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L21vY2stYXJjaGl2
ZS50eHQ6IEFkZGVkLgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvbW9ja2h0dHByZXF1ZXN0LnB5
OiBBZGRlZC4KKyAgICAgICAgKEFyY2hpdmVkSHR0cFJlcXVlc3QpOgorICAgICAgICAoQXJjaGl2
ZWRIdHRwUmVxdWVzdC5fX2luaXRfXyk6CisgICAgICAgIChBcmNoaXZlZEh0dHBSZXF1ZXN0Ll9f
c3RyX18pOgorICAgICAgICAoQXJjaGl2ZWRIdHRwUmVxdWVzdC5fX3JlcHJfXyk6CisgICAgICAg
IChBcmNoaXZlZEh0dHBSZXF1ZXN0Ll9faGFzaF9fKToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJl
cXVlc3QuX19lcV9fKToKKyAgICAgICAgKEFyY2hpdmVkSHR0cFJlcXVlc3QubWF0Y2hlcyk6Cisg
ICAgICAgICogV2ViUGFnZVJlcGxheS9wZXJzaXN0ZW50bWl4aW4ucHk6IEFkZGVkLgorICAgICAg
ICAoUGVyc2lzdGVudE1peGluKToKKyAgICAgICAgKFBlcnNpc3RlbnRNaXhpbi53aGljaCk6Cisg
ICAgICAgIChQZXJzaXN0ZW50TWl4aW4uQXNzZXJ0V3JpdGFibGUpOgorICAgICAgICAoUGVyc2lz
dGVudE1peGluLkxvYWQpOgorICAgICAgICAoUGVyc2lzdGVudE1peGluLlBlcnNpc3QpOgorICAg
ICAgICAqIFdlYlBhZ2VSZXBsYXkvcGxhdGZvcm1zZXR0aW5ncy5weTogQWRkZWQuCisgICAgICAg
IChQbGF0Zm9ybVNldHRpbmdzRXJyb3IpOgorICAgICAgICAoRG5zUmVhZEVycm9yKToKKyAgICAg
ICAgKERuc1VwZGF0ZUVycm9yKToKKyAgICAgICAgKE5vdEFkbWluaXN0cmF0b3JFcnJvcik6Cisg
ICAgICAgIChfY2hlY2tfb3V0cHV0KToKKyAgICAgICAgKFBsYXRmb3JtU2V0dGluZ3MpOgorICAg
ICAgICAoUGxhdGZvcm1TZXR0aW5ncy5fX2luaXRfXyk6CisgICAgICAgIChQbGF0Zm9ybVNldHRp
bmdzLmdldF9wcmltYXJ5X2Rucyk6CisgICAgICAgIChQbGF0Zm9ybVNldHRpbmdzLl9zZXRfcHJp
bWFyeV9kbnMpOgorICAgICAgICAoUGxhdGZvcm1TZXR0aW5ncy5nZXRfb3JpZ2luYWxfcHJpbWFy
eV9kbnMpOgorICAgICAgICAoUGxhdGZvcm1TZXR0aW5ncy5zZXRfcHJpbWFyeV9kbnMpOgorICAg
ICAgICAoUGxhdGZvcm1TZXR0aW5ncy5yZXN0b3JlX3ByaW1hcnlfZG5zKToKKyAgICAgICAgKFBs
YXRmb3JtU2V0dGluZ3MuZ2V0X2N3bmQpOgorICAgICAgICAoUGxhdGZvcm1TZXR0aW5ncy5fc2V0
X2N3bmQpOgorICAgICAgICAoUGxhdGZvcm1TZXR0aW5ncy5nZXRfb3JpZ2luYWxfY3duZCk6Cisg
ICAgICAgIChQbGF0Zm9ybVNldHRpbmdzLnNldF9jd25kKToKKyAgICAgICAgKFBsYXRmb3JtU2V0
dGluZ3MucmVzdG9yZV9jd25kKToKKyAgICAgICAgKFBsYXRmb3JtU2V0dGluZ3MuX2lwZndfYmlu
KToKKyAgICAgICAgKFBsYXRmb3JtU2V0dGluZ3MuaXBmdyk6CisgICAgICAgIChQbGF0Zm9ybVNl
dHRpbmdzLmdldF9pcGZ3X3F1ZXVlX3Nsb3RzKToKKyAgICAgICAgKFBsYXRmb3JtU2V0dGluZ3Mu
Z2V0X3NlcnZlcl9pcF9hZGRyZXNzKToKKyAgICAgICAgKFBsYXRmb3JtU2V0dGluZ3MuY29uZmln
dXJlX2xvb3BiYWNrKToKKyAgICAgICAgKFBsYXRmb3JtU2V0dGluZ3MudW5jb25maWd1cmVfbG9v
cGJhY2spOgorICAgICAgICAoUGxhdGZvcm1TZXR0aW5ncy5nZXRfc3lzdGVtX2xvZ2dpbmdfaGFu
ZGxlcik6CisgICAgICAgIChQbGF0Zm9ybVNldHRpbmdzLnBpbmcpOgorICAgICAgICAoUGxhdGZv
cm1TZXR0aW5ncy5yZXJ1bl9hc19hZG1pbmlzdHJhdG9yKToKKyAgICAgICAgKFBsYXRmb3JtU2V0
dGluZ3MuY3JlYXRlX2NlcnRmaWxlKToKKyAgICAgICAgKFBvc2l4UGxhdGZvcm1TZXR0aW5ncyk6
CisgICAgICAgIChQb3NpeFBsYXRmb3JtU2V0dGluZ3MuX2dldF9kbnNfdXBkYXRlX2Vycm9yKToK
KyAgICAgICAgKFBvc2l4UGxhdGZvcm1TZXR0aW5ncy5fc3lzY3RsKToKKyAgICAgICAgKFBvc2l4
UGxhdGZvcm1TZXR0aW5ncy5oYXNfc3lzY3RsKToKKyAgICAgICAgKFBvc2l4UGxhdGZvcm1TZXR0
aW5ncy5zZXRfc3lzY3RsKToKKyAgICAgICAgKFBvc2l4UGxhdGZvcm1TZXR0aW5ncy5nZXRfc3lz
Y3RsKToKKyAgICAgICAgKFBvc2l4UGxhdGZvcm1TZXR0aW5ncy5waW5nKToKKyAgICAgICAgKFBv
c2l4UGxhdGZvcm1TZXR0aW5ncy5yZXJ1bl9hc19hZG1pbmlzdHJhdG9yKToKKyAgICAgICAgKFBv
c2l4UGxhdGZvcm1TZXR0aW5ncy5jcmVhdGVfY2VydGZpbGUpOgorICAgICAgICAoUG9zaXhQbGF0
Zm9ybVNldHRpbmdzLl9pcGZ3X2Jpbik6CisgICAgICAgIChPc3hQbGF0Zm9ybVNldHRpbmdzKToK
KyAgICAgICAgKE9zeFBsYXRmb3JtU2V0dGluZ3MuX3NjdXRpbCk6CisgICAgICAgIChPc3hQbGF0
Zm9ybVNldHRpbmdzLl9pZmNvbmZpZyk6CisgICAgICAgIChPc3hQbGF0Zm9ybVNldHRpbmdzLnNl
dF9zeXNjdGwpOgorICAgICAgICAoT3N4UGxhdGZvcm1TZXR0aW5ncy5fZ2V0X2Ruc19zZXJ2aWNl
X2tleSk6CisgICAgICAgIChPc3hQbGF0Zm9ybVNldHRpbmdzLmdldF9wcmltYXJ5X2Rucyk6Cisg
ICAgICAgIChPc3hQbGF0Zm9ybVNldHRpbmdzLl9zZXRfcHJpbWFyeV9kbnMpOgorICAgICAgICAo
T3N4UGxhdGZvcm1TZXR0aW5ncy5nZXRfY3duZCk6CisgICAgICAgIChPc3hQbGF0Zm9ybVNldHRp
bmdzLl9zZXRfY3duZCk6CisgICAgICAgIChPc3hQbGF0Zm9ybVNldHRpbmdzLmdldF9sb29wYmFj
a19tdHUpOgorICAgICAgICAoT3N4UGxhdGZvcm1TZXR0aW5ncy5jb25maWd1cmVfbG9vcGJhY2sp
OgorICAgICAgICAoT3N4UGxhdGZvcm1TZXR0aW5ncy51bmNvbmZpZ3VyZV9sb29wYmFjayk6Cisg
ICAgICAgIChMaW51eFBsYXRmb3JtU2V0dGluZ3MpOgorICAgICAgICAoTGludXhQbGF0Zm9ybVNl
dHRpbmdzLmdldF9wcmltYXJ5X2Rucyk6CisgICAgICAgIChMaW51eFBsYXRmb3JtU2V0dGluZ3Mu
X3NldF9wcmltYXJ5X2Rucyk6CisgICAgICAgIChMaW51eFBsYXRmb3JtU2V0dGluZ3MuX3dyaXRl
X3Jlc29sdmVfY29uZik6CisgICAgICAgIChMaW51eFBsYXRmb3JtU2V0dGluZ3MuZ2V0X2N3bmQp
OgorICAgICAgICAoTGludXhQbGF0Zm9ybVNldHRpbmdzLl9zZXRfY3duZCk6CisgICAgICAgIChM
aW51eFBsYXRmb3JtU2V0dGluZ3MuY29uZmlndXJlX2xvb3BiYWNrKToKKyAgICAgICAgKExpbnV4
UGxhdGZvcm1TZXR0aW5ncy51bmNvbmZpZ3VyZV9sb29wYmFjayk6CisgICAgICAgIChXaW5kb3dz
UGxhdGZvcm1TZXR0aW5ncyk6CisgICAgICAgIChXaW5kb3dzUGxhdGZvcm1TZXR0aW5ncy5fZ2V0
X2Ruc191cGRhdGVfZXJyb3IpOgorICAgICAgICAoV2luZG93c1BsYXRmb3JtU2V0dGluZ3MuX25l
dHNoX3Nob3dfZG5zKToKKyAgICAgICAgKFdpbmRvd3NQbGF0Zm9ybVNldHRpbmdzLmdldF9wcmlt
YXJ5X2Rucyk6CisgICAgICAgIChXaW5kb3dzUGxhdGZvcm1TZXR0aW5ncy5fc2V0X3ByaW1hcnlf
ZG5zKToKKyAgICAgICAgKF9hcnApOgorICAgICAgICAoX3JvdXRlKToKKyAgICAgICAgKF9pcGNv
bmZpZyk6CisgICAgICAgIChnZXRfbWFjX2FkZHJlc3MpOgorICAgICAgICAoY29uZmlndXJlX2xv
b3BiYWNrKToKKyAgICAgICAgKHVuY29uZmlndXJlX2xvb3BiYWNrKToKKyAgICAgICAgKGdldF9z
eXN0ZW1fbG9nZ2luZ19oYW5kbGVyKToKKyAgICAgICAgKGdldF9zeXN0ZW1fbG9nZ2luZ19oYW5k
bGVyLkRlYnVnVmlld0hhbmRsZXIpOgorICAgICAgICAoZ2V0X3N5c3RlbV9sb2dnaW5nX2hhbmRs
ZXIuRGVidWdWaWV3SGFuZGxlci5lbWl0KToKKyAgICAgICAgKHJlcnVuX2FzX2FkbWluaXN0cmF0
b3IpOgorICAgICAgICAoY3JlYXRlX2NlcnRmaWxlKToKKyAgICAgICAgKFdpbmRvd3NYcFBsYXRm
b3JtU2V0dGluZ3MpOgorICAgICAgICAoV2luZG93c1hwUGxhdGZvcm1TZXR0aW5ncy5faXBmd19i
aW4pOgorICAgICAgICAoX25ld19wbGF0Zm9ybV9zZXR0aW5ncyk6CisgICAgICAgIChnZXRfcGxh
dGZvcm1fc2V0dGluZ3MpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvcGxhdGZvcm1zZXR0aW5n
c190ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFdpbjdTZXR0aW5ncyk6CisgICAgICAgIChXaW43
U2V0dGluZ3MuX2lwY29uZmlnKToKKyAgICAgICAgKFdpblhwU2V0dGluZ3MpOgorICAgICAgICAo
V2luWHBTZXR0aW5ncy5faXBjb25maWcpOgorICAgICAgICAoV2luZG93c1BsYXRmb3JtU2V0dGlu
Z3NUZXN0KToKKyAgICAgICAgKFdpbmRvd3NQbGF0Zm9ybVNldHRpbmdzVGVzdC50ZXN0X2dldF9t
YWNfYWRkcmVzc194cCk6CisgICAgICAgICh0ZXN0X2dldF9tYWNfYWRkcmVzc183KToKKyAgICAg
ICAgKiBXZWJQYWdlUmVwbGF5L3JlcGxheS5weTogQWRkZWQuCisgICAgICAgIChjb25maWd1cmVf
bG9nZ2luZyk6CisgICAgICAgIChBZGREbnNGb3J3YXJkKToKKyAgICAgICAgKEFkZERuc0Zvcndh
cmQuRG5zRm9yd2FyZENvbnRleHQpOgorICAgICAgICAoQWRkRG5zUHJveHkpOgorICAgICAgICAo
QWRkVGVtcG9yYXJ5Q2VydEZpbGUpOgorICAgICAgICAoQWRkVGVtcG9yYXJ5Q2VydEZpbGUuVGVt
cG9yYXJ5Q2VydEZpbGVDb250ZXh0KToKKyAgICAgICAgKEFkZFdlYlByb3h5KToKKyAgICAgICAg
KEFkZFRyYWZmaWNTaGFwZXIpOgorICAgICAgICAoT3B0aW9uc1dyYXBwZXIpOgorICAgICAgICAo
T3B0aW9uc1dyYXBwZXIuX19pbml0X18pOgorICAgICAgICAoT3B0aW9uc1dyYXBwZXIuX0NoZWNr
Q29uZmxpY3RzKToKKyAgICAgICAgKE9wdGlvbnNXcmFwcGVyLl9NYXNzYWdlVmFsdWVzKToKKyAg
ICAgICAgKE9wdGlvbnNXcmFwcGVyLl9fZ2V0YXR0cl9fKToKKyAgICAgICAgKE9wdGlvbnNXcmFw
cGVyLkhhc1RyYWZmaWNTaGFwaW5nKToKKyAgICAgICAgKE9wdGlvbnNXcmFwcGVyLklzUm9vdFJl
cXVpcmVkKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAoUGxhaW5IZWxwRm9ybWF0dGVyKToK
KyAgICAgICAgKFBsYWluSGVscEZvcm1hdHRlci5mb3JtYXRfZGVzY3JpcHRpb24pOgorICAgICAg
ICAqIFdlYlBhZ2VSZXBsYXkvcmVwbGF5c3BkeXNlcnZlci5weTogQWRkZWQuCisgICAgICAgIChS
ZXBsYXlTcGR5U2VydmVyKToKKyAgICAgICAgKFJlcGxheVNwZHlTZXJ2ZXIuX19pbml0X18pOgor
ICAgICAgICAoUmVwbGF5U3BkeVNlcnZlci5zZXJ2ZV9mb3JldmVyKToKKyAgICAgICAgKFJlcGxh
eVNwZHlTZXJ2ZXIuY2xlYW51cCk6CisgICAgICAgIChSZXBsYXlTcGR5U2VydmVyLnJlcXVlc3Rf
aGFuZGxlcik6CisgICAgICAgIChSZXBsYXlTcGR5U2VydmVyLnJlcXVlc3RfaGFuZGxlci5zaW1w
bGVfcmVzcG9uZGVyKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3NlcnZlcm1hbmFnZXIucHk6
IEFkZGVkLgorICAgICAgICAoU2VydmVyTWFuYWdlcik6CisgICAgICAgIChTZXJ2ZXJNYW5hZ2Vy
Ll9faW5pdF9fKToKKyAgICAgICAgKFNlcnZlck1hbmFnZXIuQXBwZW5kKToKKyAgICAgICAgKFNl
cnZlck1hbmFnZXIuQXBwZW5kUmVjb3JkQ2FsbGJhY2spOgorICAgICAgICAoU2VydmVyTWFuYWdl
ci5BcHBlbmRSZXBsYXlDYWxsYmFjayk6CisgICAgICAgIChTZXJ2ZXJNYW5hZ2VyLklzUmVjb3Jk
TW9kZSk6CisgICAgICAgIChTZXJ2ZXJNYW5hZ2VyLlNldFJlY29yZE1vZGUpOgorICAgICAgICAo
U2VydmVyTWFuYWdlci5TZXRSZXBsYXlNb2RlKToKKyAgICAgICAgKFNlcnZlck1hbmFnZXIuUnVu
KToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5OiBBZGRlZC4KKyAgICAgICAg
KiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2RuczogQWRkZWQuCisgICAgICAgICogV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvTElDRU5TRTogQWRkZWQuCisgICAgICAgICogV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFdl
YlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL2Ruc3NlYy5weTogQWRkZWQuCisgICAgICAgIChV
bmtub3duQWxnb3JpdGhtKToKKyAgICAgICAgKGFsZ29yaXRobV9mcm9tX3RleHQpOgorICAgICAg
ICAoYWxnb3JpdGhtX3RvX3RleHQpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvZG5zL2UxNjQucHk6IEFkZGVkLgorICAgICAgICAoZnJvbV9lMTY0KToKKyAgICAgICAgKHRv
X2UxNjQpOgorICAgICAgICAocXVlcnkpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRf
cGFydHkvZG5zL2VkbnMucHk6IEFkZGVkLgorICAgICAgICAoT3B0aW9uKToKKyAgICAgICAgKE9w
dGlvbi5mb3IpOgorICAgICAgICAoT3B0aW9uLl9faW5pdF9fKToKKyAgICAgICAgKE9wdGlvbi50
b193aXJlKToKKyAgICAgICAgKE9wdGlvbi5mcm9tX3dpcmUpOgorICAgICAgICAoT3B0aW9uLl9j
bXApOgorICAgICAgICAoT3B0aW9uLl9fZXFfXyk6CisgICAgICAgIChPcHRpb24uX19uZV9fKToK
KyAgICAgICAgKE9wdGlvbi5fX2x0X18pOgorICAgICAgICAoT3B0aW9uLl9fbGVfXyk6CisgICAg
ICAgIChPcHRpb24uX19nZV9fKToKKyAgICAgICAgKE9wdGlvbi5fX2d0X18pOgorICAgICAgICAo
R2VuZXJpY09wdGlvbik6CisgICAgICAgIChHZW5lcmljT3B0aW9uLmlzKToKKyAgICAgICAgKEdl
bmVyaWNPcHRpb24uX19pbml0X18pOgorICAgICAgICAoR2VuZXJpY09wdGlvbi50b193aXJlKToK
KyAgICAgICAgKEdlbmVyaWNPcHRpb24uZnJvbV93aXJlKToKKyAgICAgICAgKEdlbmVyaWNPcHRp
b24uX2NtcCk6CisgICAgICAgIChnZXRfb3B0aW9uX2NsYXNzKToKKyAgICAgICAgKG9wdGlvbl9m
cm9tX3dpcmUpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL2VudHJv
cHkucHk6IEFkZGVkLgorICAgICAgICAoRW50cm9weVBvb2wpOgorICAgICAgICAoRW50cm9weVBv
b2wuX19pbml0X18pOgorICAgICAgICAoRW50cm9weVBvb2wuc3Rpcik6CisgICAgICAgIChFbnRy
b3B5UG9vbC5fbWF5YmVfc2VlZCk6CisgICAgICAgIChFbnRyb3B5UG9vbC5yYW5kb21fOCk6Cisg
ICAgICAgIChFbnRyb3B5UG9vbC5yYW5kb21fMTYpOgorICAgICAgICAoRW50cm9weVBvb2wucmFu
ZG9tXzMyKToKKyAgICAgICAgKEVudHJvcHlQb29sLnJhbmRvbV9iZXR3ZWVuKToKKyAgICAgICAg
KHJhbmRvbV8xNik6CisgICAgICAgIChiZXR3ZWVuKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5
L3RoaXJkX3BhcnR5L2Rucy9leGNlcHRpb24ucHk6IEFkZGVkLgorICAgICAgICAoRE5TRXhjZXB0
aW9uKToKKyAgICAgICAgKEROU0V4Y2VwdGlvbi5zaGFyZWQpOgorICAgICAgICAoRm9ybUVycm9y
KToKKyAgICAgICAgKFN5bnRheEVycm9yKToKKyAgICAgICAgKFVuZXhwZWN0ZWRFbmQpOgorICAg
ICAgICAoVG9vQmlnKToKKyAgICAgICAgKFRpbWVvdXQpOgorICAgICAgICAqIFdlYlBhZ2VSZXBs
YXkvdGhpcmRfcGFydHkvZG5zL2ZsYWdzLnB5OiBBZGRlZC4KKyAgICAgICAgKF9vcmRlcl9mbGFn
cyk6CisgICAgICAgIChfZnJvbV90ZXh0KToKKyAgICAgICAgKF90b190ZXh0KToKKyAgICAgICAg
KGZyb21fdGV4dCk6CisgICAgICAgICh0b190ZXh0KToKKyAgICAgICAgKGVkbnNfZnJvbV90ZXh0
KToKKyAgICAgICAgKGVkbnNfdG9fdGV4dCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGly
ZF9wYXJ0eS9kbnMvaW5ldC5weTogQWRkZWQuCisgICAgICAgIChpbmV0X3B0b24pOgorICAgICAg
ICAoaW5ldF9udG9wKToKKyAgICAgICAgKGFmX2Zvcl9hZGRyZXNzKToKKyAgICAgICAgKGlzX211
bHRpY2FzdCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvaXB2NC5w
eTogQWRkZWQuCisgICAgICAgIChpbmV0X2F0b24pOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkv
dGhpcmRfcGFydHkvZG5zL2lwdjYucHk6IEFkZGVkLgorICAgICAgICAoaW5ldF9udG9hKToKKyAg
ICAgICAgKGluZXRfYXRvbik6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9k
bnMvbWVzc2FnZS5weTogQWRkZWQuCisgICAgICAgIChTaG9ydEhlYWRlcik6CisgICAgICAgIChU
cmFpbGluZ0p1bmspOgorICAgICAgICAoVW5rbm93bkhlYWRlckZpZWxkKToKKyAgICAgICAgKEJh
ZEVETlMpOgorICAgICAgICAoQmFkVFNJRyk6CisgICAgICAgIChVbmtub3duVFNJR0tleSk6Cisg
ICAgICAgIChNZXNzYWdlKToKKyAgICAgICAgKE1lc3NhZ2UuX19pbml0X18pOgorICAgICAgICAo
TWVzc2FnZS5fX3JlcHJfXyk6CisgICAgICAgIChNZXNzYWdlLl9fc3RyX18pOgorICAgICAgICAo
TWVzc2FnZS50b190ZXh0KToKKyAgICAgICAgKE1lc3NhZ2UuX19lcV9fKToKKyAgICAgICAgKE1l
c3NhZ2UuX19uZV9fKToKKyAgICAgICAgKE1lc3NhZ2UuaXNfcmVzcG9uc2UpOgorICAgICAgICAo
TWVzc2FnZS5zZWN0aW9uX251bWJlcik6CisgICAgICAgIChNZXNzYWdlLmZpbmRfcnJzZXQpOgor
ICAgICAgICAoTWVzc2FnZS5maW5kX3Jyc2V0Lm9mKToKKyAgICAgICAgKE1lc3NhZ2UuZ2V0X3Jy
c2V0KToKKyAgICAgICAgKE1lc3NhZ2UuZ2V0X3Jyc2V0Lm9mKToKKyAgICAgICAgKE1lc3NhZ2Uu
dG9fd2lyZSk6CisgICAgICAgIChNZXNzYWdlLnVzZV90c2lnKToKKyAgICAgICAgKE1lc3NhZ2Uu
dXNlX2VkbnMpOgorICAgICAgICAoTWVzc2FnZS53YW50X2Ruc3NlYyk6CisgICAgICAgIChNZXNz
YWdlLnJjb2RlKToKKyAgICAgICAgKE1lc3NhZ2Uuc2V0X3Jjb2RlKToKKyAgICAgICAgKE1lc3Nh
Z2Uub3Bjb2RlKToKKyAgICAgICAgKE1lc3NhZ2Uuc2V0X29wY29kZSk6CisgICAgICAgIChfV2ly
ZVJlYWRlcik6CisgICAgICAgIChfV2lyZVJlYWRlci5vZik6CisgICAgICAgIChfV2lyZVJlYWRl
ci5fX2luaXRfXyk6CisgICAgICAgIChfV2lyZVJlYWRlci5fZ2V0X3F1ZXN0aW9uKToKKyAgICAg
ICAgKF9XaXJlUmVhZGVyLl9nZXRfc2VjdGlvbik6CisgICAgICAgIChfV2lyZVJlYWRlci5yZWFk
KToKKyAgICAgICAgKGZyb21fd2lyZSk6CisgICAgICAgIChfVGV4dFJlYWRlcik6CisgICAgICAg
IChfVGV4dFJlYWRlci5vZik6CisgICAgICAgIChfVGV4dFJlYWRlci5fX2luaXRfXyk6CisgICAg
ICAgIChfVGV4dFJlYWRlci5faGVhZGVyX2xpbmUpOgorICAgICAgICAoX1RleHRSZWFkZXIuX3F1
ZXN0aW9uX2xpbmUpOgorICAgICAgICAoX1RleHRSZWFkZXIuX3JyX2xpbmUpOgorICAgICAgICAo
X1RleHRSZWFkZXIucmVhZCk6CisgICAgICAgIChmcm9tX3RleHQpOgorICAgICAgICAoZnJvbV9m
aWxlKToKKyAgICAgICAgKG1ha2VfcXVlcnkpOgorICAgICAgICAobWFrZV9xdWVyeS5tYXkpOgor
ICAgICAgICAobWFrZV9xdWVyeS5JTik6CisgICAgICAgIChtYWtlX3Jlc3BvbnNlKToKKyAgICAg
ICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9uYW1lLnB5OiBBZGRlZC4KKyAgICAg
ICAgKEVtcHR5TGFiZWwpOgorICAgICAgICAoQmFkRXNjYXBlKToKKyAgICAgICAgKEJhZFBvaW50
ZXIpOgorICAgICAgICAoQmFkTGFiZWxUeXBlKToKKyAgICAgICAgKE5lZWRBYnNvbHV0ZU5hbWVP
ck9yaWdpbik6CisgICAgICAgIChOYW1lVG9vTG9uZyk6CisgICAgICAgIChMYWJlbFRvb0xvbmcp
OgorICAgICAgICAoQWJzb2x1dGVDb25jYXRlbmF0aW9uKToKKyAgICAgICAgKE5vUGFyZW50KToK
KyAgICAgICAgKF9lc2NhcGlmeSk6CisgICAgICAgIChfdmFsaWRhdGVfbGFiZWxzKToKKyAgICAg
ICAgKE5hbWUpOgorICAgICAgICAoTmFtZS5yZXByZXNlbnRzKToKKyAgICAgICAgKE5hbWUuYXJl
KToKKyAgICAgICAgKE5hbWUuX19pbml0X18pOgorICAgICAgICAoTmFtZS5fX3NldGF0dHJfXyk6
CisgICAgICAgIChOYW1lLmlzX2Fic29sdXRlKToKKyAgICAgICAgKE5hbWUuaXNfd2lsZCk6Cisg
ICAgICAgIChOYW1lLl9faGFzaF9fKToKKyAgICAgICAgKE5hbWUuZnVsbGNvbXBhcmUpOgorICAg
ICAgICAoTmFtZS5pc19zdWJkb21haW4pOgorICAgICAgICAoTmFtZS5pc19zdXBlcmRvbWFpbik6
CisgICAgICAgIChOYW1lLmNhbm9uaWNhbGl6ZSk6CisgICAgICAgIChOYW1lLl9fZXFfXyk6Cisg
ICAgICAgIChOYW1lLl9fbmVfXyk6CisgICAgICAgIChOYW1lLl9fbHRfXyk6CisgICAgICAgIChO
YW1lLl9fbGVfXyk6CisgICAgICAgIChOYW1lLl9fZ2VfXyk6CisgICAgICAgIChOYW1lLl9fZ3Rf
Xyk6CisgICAgICAgIChOYW1lLl9fcmVwcl9fKToKKyAgICAgICAgKE5hbWUuX19zdHJfXyk6Cisg
ICAgICAgIChOYW1lLnRvX3RleHQpOgorICAgICAgICAoTmFtZS50b191bmljb2RlKToKKyAgICAg
ICAgKE5hbWUudG9fZGlnZXN0YWJsZSk6CisgICAgICAgIChOYW1lLnRvX3dpcmUpOgorICAgICAg
ICAoTmFtZS5fX2xlbl9fKToKKyAgICAgICAgKE5hbWUuX19nZXRpdGVtX18pOgorICAgICAgICAo
TmFtZS5fX2dldHNsaWNlX18pOgorICAgICAgICAoTmFtZS5fX2FkZF9fKToKKyAgICAgICAgKE5h
bWUuX19zdWJfXyk6CisgICAgICAgIChOYW1lLnNwbGl0KToKKyAgICAgICAgKE5hbWUuY29uY2F0
ZW5hdGUpOgorICAgICAgICAoTmFtZS5yZWxhdGl2aXplKToKKyAgICAgICAgKE5hbWUuZGVyZWxh
dGl2aXplKToKKyAgICAgICAgKE5hbWUuY2hvb3NlX3JlbGF0aXZpdHkpOgorICAgICAgICAoTmFt
ZS5wYXJlbnQpOgorICAgICAgICAoZnJvbV91bmljb2RlKToKKyAgICAgICAgKGZyb21fdGV4dCk6
CisgICAgICAgIChmcm9tX3dpcmUpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvZG5zL25hbWVkaWN0LnB5OiBBZGRlZC4KKyAgICAgICAgKE5hbWVEaWN0KToKKyAgICAgICAg
KE5hbWVEaWN0Ll9faW5pdF9fKToKKyAgICAgICAgKE5hbWVEaWN0Ll9fc2V0aXRlbV9fKToKKyAg
ICAgICAgKE5hbWVEaWN0LmdldF9kZWVwZXN0X21hdGNoKToKKyAgICAgICAgKiBXZWJQYWdlUmVw
bGF5L3RoaXJkX3BhcnR5L2Rucy9ub2RlLnB5OiBBZGRlZC4KKyAgICAgICAgKE5vZGUpOgorICAg
ICAgICAoTm9kZS5fX2luaXRfXyk6CisgICAgICAgIChOb2RlLnRvX3RleHQpOgorICAgICAgICAo
Tm9kZS5fX3JlcHJfXyk6CisgICAgICAgIChOb2RlLl9fZXFfXyk6CisgICAgICAgIChOb2RlLl9f
bmVfXyk6CisgICAgICAgIChOb2RlLl9fbGVuX18pOgorICAgICAgICAoTm9kZS5fX2l0ZXJfXyk6
CisgICAgICAgIChOb2RlLmZpbmRfcmRhdGFzZXQpOgorICAgICAgICAoTm9kZS5maW5kX3JkYXRh
c2V0Lm9mKToKKyAgICAgICAgKE5vZGUuZmluZF9yZGF0YXNldC5kb2VzKToKKyAgICAgICAgKE5v
ZGUuZ2V0X3JkYXRhc2V0KToKKyAgICAgICAgKE5vZGUuZ2V0X3JkYXRhc2V0LmRvZXMpOgorICAg
ICAgICAoTm9kZS5nZXRfcmRhdGFzZXQub2YpOgorICAgICAgICAoTm9kZS5kZWxldGVfcmRhdGFz
ZXQpOgorICAgICAgICAoTm9kZS5kZWxldGVfcmRhdGFzZXQub2YpOgorICAgICAgICAoTm9kZS5y
ZXBsYWNlX3JkYXRhc2V0KToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Ru
cy9vcGNvZGUucHk6IEFkZGVkLgorICAgICAgICAoVW5rbm93bk9wY29kZSk6CisgICAgICAgIChm
cm9tX3RleHQpOgorICAgICAgICAoZnJvbV9mbGFncyk6CisgICAgICAgICh0b19mbGFncyk6Cisg
ICAgICAgICh0b190ZXh0KToKKyAgICAgICAgKGlzX3VwZGF0ZSk6CisgICAgICAgICogV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcXVlcnkucHk6IEFkZGVkLgorICAgICAgICAoVW5leHBl
Y3RlZFNvdXJjZSk6CisgICAgICAgIChCYWRSZXNwb25zZSk6CisgICAgICAgIChfY29tcHV0ZV9l
eHBpcmF0aW9uKToKKyAgICAgICAgKF93YWl0X2Zvcik6CisgICAgICAgIChfd2FpdF9mb3JfcmVh
ZGFibGUpOgorICAgICAgICAoX3dhaXRfZm9yX3dyaXRhYmxlKToKKyAgICAgICAgKF9hZGRyZXNz
ZXNfZXF1YWwpOgorICAgICAgICAodWRwKToKKyAgICAgICAgKF9uZXRfcmVhZCk6CisgICAgICAg
IChfbmV0X3dyaXRlKToKKyAgICAgICAgKF9jb25uZWN0KToKKyAgICAgICAgKHRjcCk6CisgICAg
ICAgICh4ZnIpOgorICAgICAgICAoeGZyLm9mKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3Ro
aXJkX3BhcnR5L2Rucy9yY29kZS5weTogQWRkZWQuCisgICAgICAgIChVbmtub3duUmNvZGUpOgor
ICAgICAgICAoZnJvbV90ZXh0KToKKyAgICAgICAgKGZyb21fZmxhZ3MpOgorICAgICAgICAodG9f
ZmxhZ3MpOgorICAgICAgICAodG9fdGV4dCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGly
ZF9wYXJ0eS9kbnMvcmRhdGEucHk6IEFkZGVkLgorICAgICAgICAoX2hleGlmeSk6CisgICAgICAg
IChfYmFzZTY0aWZ5KToKKyAgICAgICAgKF9lc2NhcGlmeSk6CisgICAgICAgIChfdHJ1bmNhdGVf
Yml0bWFwKToKKyAgICAgICAgKFJkYXRhKToKKyAgICAgICAgKFJkYXRhLmZvcik6CisgICAgICAg
IChSZGF0YS5fX2luaXRfXyk6CisgICAgICAgIChSZGF0YS5jb3ZlcnMpOgorICAgICAgICAoUmRh
dGEuZXh0ZW5kZWRfcmRhdGF0eXBlKToKKyAgICAgICAgKFJkYXRhLnRvX3RleHQpOgorICAgICAg
ICAoUmRhdGEudG9fd2lyZSk6CisgICAgICAgIChSZGF0YS50b19kaWdlc3RhYmxlKToKKyAgICAg
ICAgKFJkYXRhLnZhbGlkYXRlKToKKyAgICAgICAgKFJkYXRhLl9fcmVwcl9fKToKKyAgICAgICAg
KFJkYXRhLl9fc3RyX18pOgorICAgICAgICAoUmRhdGEuX2NtcCk6CisgICAgICAgIChSZGF0YS5f
X2VxX18pOgorICAgICAgICAoUmRhdGEuX19lcV9fLm9yKToKKyAgICAgICAgKFJkYXRhLl9fbmVf
Xyk6CisgICAgICAgIChSZGF0YS5fX25lX18ub3IpOgorICAgICAgICAoUmRhdGEuX19sdF9fKToK
KyAgICAgICAgKFJkYXRhLl9fbHRfXy5vcik6CisgICAgICAgIChSZGF0YS5fX2xlX18pOgorICAg
ICAgICAoUmRhdGEuX19sZV9fLm9yKToKKyAgICAgICAgKFJkYXRhLl9fZ2VfXyk6CisgICAgICAg
IChSZGF0YS5fX2dlX18ub3IpOgorICAgICAgICAoUmRhdGEuX19ndF9fKToKKyAgICAgICAgKFJk
YXRhLl9fZ3RfXy5vcik6CisgICAgICAgIChSZGF0YS5mcm9tX3RleHQpOgorICAgICAgICAoUmRh
dGEuZnJvbV93aXJlKToKKyAgICAgICAgKFJkYXRhLmNob29zZV9yZWxhdGl2aXR5KToKKyAgICAg
ICAgKEdlbmVyaWNSZGF0YSk6CisgICAgICAgIChHZW5lcmljUmRhdGEuaXMpOgorICAgICAgICAo
R2VuZXJpY1JkYXRhLl9faW5pdF9fKToKKyAgICAgICAgKEdlbmVyaWNSZGF0YS50b190ZXh0KToK
KyAgICAgICAgKEdlbmVyaWNSZGF0YS5mcm9tX3RleHQpOgorICAgICAgICAoR2VuZXJpY1JkYXRh
LnRvX3dpcmUpOgorICAgICAgICAoR2VuZXJpY1JkYXRhLmZyb21fd2lyZSk6CisgICAgICAgIChH
ZW5lcmljUmRhdGEuX2NtcCk6CisgICAgICAgIChnZXRfcmRhdGFfY2xhc3MpOgorICAgICAgICAo
Z2V0X3JkYXRhX2NsYXNzLmltcG9ydF9tb2R1bGUpOgorICAgICAgICAoZnJvbV90ZXh0KToKKyAg
ICAgICAgKGZyb21fdGV4dC53aGljaCk6CisgICAgICAgIChmcm9tX3RleHQuYW5kKToKKyAgICAg
ICAgKGZyb21fdGV4dC5pcyk6CisgICAgICAgIChmcm9tX3dpcmUpOgorICAgICAgICAoZnJvbV93
aXJlLndoaWNoKToKKyAgICAgICAgKGZyb21fd2lyZS5hbmQpOgorICAgICAgICAoZnJvbV93aXJl
LmlzKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZGF0YWNsYXNz
LnB5OiBBZGRlZC4KKyAgICAgICAgKHRleHR1YWwpOgorICAgICAgICAodmFsdWUpOgorICAgICAg
ICAoaXMpOgorICAgICAgICAoVW5rbm93blJkYXRhY2xhc3MpOgorICAgICAgICAoVW5rbm93blJk
YXRhY2xhc3MuaXMpOgorICAgICAgICAoZnJvbV90ZXh0KToKKyAgICAgICAgKGZyb21fdGV4dC52
YWx1ZSk6CisgICAgICAgIChmcm9tX3RleHQuaXMpOgorICAgICAgICAoZnJvbV90ZXh0Lm11c3Qp
OgorICAgICAgICAodG9fdGV4dCk6CisgICAgICAgICh0b190ZXh0LnRvKToKKyAgICAgICAgKHRv
X3RleHQudmFsdWUpOgorICAgICAgICAodG9fdGV4dC5tdXN0KToKKyAgICAgICAgKGlzX21ldGFj
bGFzcyk6CisgICAgICAgIChpc19tZXRhY2xhc3MuaXMpOgorICAgICAgICAqIFdlYlBhZ2VSZXBs
YXkvdGhpcmRfcGFydHkvZG5zL3JkYXRhc2V0LnB5OiBBZGRlZC4KKyAgICAgICAgKERpZmZlcmlu
Z0NvdmVycyk6CisgICAgICAgIChJbmNvbXBhdGlibGVUeXBlcyk6CisgICAgICAgIChSZGF0YXNl
dCk6CisgICAgICAgIChSZGF0YXNldC5vZik6CisgICAgICAgIChSZGF0YXNldC5fX2luaXRfXyk6
CisgICAgICAgIChSZGF0YXNldC5fX2luaXRfXy5hbmQpOgorICAgICAgICAoUmRhdGFzZXQuX19p
bml0X18uaW5zdGFuY2UpOgorICAgICAgICAoUmRhdGFzZXQuX2Nsb25lKToKKyAgICAgICAgKFJk
YXRhc2V0LnVwZGF0ZV90dGwpOgorICAgICAgICAoUmRhdGFzZXQuYWRkKToKKyAgICAgICAgKFJk
YXRhc2V0LmFkZC5vcik6CisgICAgICAgIChSZGF0YXNldC51bmlvbl91cGRhdGUpOgorICAgICAg
ICAoUmRhdGFzZXQuaW50ZXJzZWN0aW9uX3VwZGF0ZSk6CisgICAgICAgIChSZGF0YXNldC51cGRh
dGUpOgorICAgICAgICAoUmRhdGFzZXQuX19yZXByX18pOgorICAgICAgICAoUmRhdGFzZXQuX19z
dHJfXyk6CisgICAgICAgIChSZGF0YXNldC5fX2VxX18pOgorICAgICAgICAoUmRhdGFzZXQuX19l
cV9fLm9yKToKKyAgICAgICAgKFJkYXRhc2V0Ll9fbmVfXyk6CisgICAgICAgIChSZGF0YXNldC50
b190ZXh0KToKKyAgICAgICAgKFJkYXRhc2V0LnRvX3RleHQuaXMpOgorICAgICAgICAoUmRhdGFz
ZXQudG9fd2lyZSk6CisgICAgICAgIChSZGF0YXNldC50b193aXJlLmlzKToKKyAgICAgICAgKFJk
YXRhc2V0Lm1hdGNoKToKKyAgICAgICAgKFJkYXRhc2V0Lm1hdGNoLmFuZCk6CisgICAgICAgIChm
cm9tX3RleHRfbGlzdCk6CisgICAgICAgIChmcm9tX3RleHQpOgorICAgICAgICAoZnJvbV9yZGF0
YV9saXN0KToKKyAgICAgICAgKGZyb21fcmRhdGEpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkv
dGhpcmRfcGFydHkvZG5zL3JkYXRhdHlwZS5weTogQWRkZWQuCisgICAgICAgIChVbmtub3duUmRh
dGF0eXBlKToKKyAgICAgICAgKGZyb21fdGV4dCk6CisgICAgICAgICh0b190ZXh0KToKKyAgICAg
ICAgKGlzX21ldGF0eXBlKToKKyAgICAgICAgKGlzX3NpbmdsZXRvbik6CisgICAgICAgICogV2Vi
UGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlczogQWRkZWQuCisgICAgICAgICogV2Vi
UGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlk6IEFkZGVkLgorICAgICAgICAq
IFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0FGU0RCLnB5OiBBZGRl
ZC4KKyAgICAgICAgKEFGU0RCKToKKyAgICAgICAgKEFGU0RCLmdldF9zdWJ0eXBlKToKKyAgICAg
ICAgKEFGU0RCLnNldF9zdWJ0eXBlKToKKyAgICAgICAgKEFGU0RCLmdldF9ob3N0bmFtZSk6Cisg
ICAgICAgIChBRlNEQi5zZXRfaG9zdG5hbWUpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhp
cmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0NFUlQucHk6IEFkZGVkLgorICAgICAgICAoX2N0eXBl
X2Zyb21fdGV4dCk6CisgICAgICAgIChfY3R5cGVfdG9fdGV4dCk6CisgICAgICAgIChDRVJUKToK
KyAgICAgICAgKENFUlQuX19pbml0X18pOgorICAgICAgICAoQ0VSVC50b190ZXh0KToKKyAgICAg
ICAgKENFUlQuZnJvbV90ZXh0KToKKyAgICAgICAgKENFUlQudG9fd2lyZSk6CisgICAgICAgIChD
RVJULmZyb21fd2lyZSk6CisgICAgICAgIChDRVJULl9jbXApOgorICAgICAgICAqIFdlYlBhZ2VS
ZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL0NOQU1FLnB5OiBBZGRlZC4KKyAgICAg
ICAgKENOQU1FKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5
cGVzL0FOWS9ETFYucHk6IEFkZGVkLgorICAgICAgICAoRExWKToKKyAgICAgICAgKiBXZWJQYWdl
UmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9ETkFNRS5weTogQWRkZWQuCisgICAg
ICAgIChETkFNRSk6CisgICAgICAgIChETkFNRS50b19kaWdlc3RhYmxlKToKKyAgICAgICAgKiBX
ZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9ETlNLRVkucHk6IEFkZGVk
LgorICAgICAgICAoRE5TS0VZKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5
L2Rucy9yZHR5cGVzL0FOWS9EUy5weTogQWRkZWQuCisgICAgICAgIChEUyk6CisgICAgICAgICog
V2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvR1BPUy5weTogQWRkZWQu
CisgICAgICAgIChfdmFsaWRhdGVfZmxvYXRfc3RyaW5nKToKKyAgICAgICAgKEdQT1MpOgorICAg
ICAgICAoR1BPUy5fX2luaXRfXyk6CisgICAgICAgIChHUE9TLnRvX3RleHQpOgorICAgICAgICAo
R1BPUy5mcm9tX3RleHQpOgorICAgICAgICAoR1BPUy50b193aXJlKToKKyAgICAgICAgKEdQT1Mu
ZnJvbV93aXJlKToKKyAgICAgICAgKEdQT1MuX2NtcCk6CisgICAgICAgIChHUE9TLl9nZXRfZmxv
YXRfbGF0aXR1ZGUpOgorICAgICAgICAoR1BPUy5fc2V0X2Zsb2F0X2xhdGl0dWRlKToKKyAgICAg
ICAgKEdQT1MuX2dldF9mbG9hdF9sb25naXR1ZGUpOgorICAgICAgICAoR1BPUy5fc2V0X2Zsb2F0
X2xvbmdpdHVkZSk6CisgICAgICAgIChHUE9TLl9nZXRfZmxvYXRfYWx0aXR1ZGUpOgorICAgICAg
ICAoR1BPUy5fc2V0X2Zsb2F0X2FsdGl0dWRlKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3Ro
aXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9ISU5GTy5weTogQWRkZWQuCisgICAgICAgIChISU5G
Tyk6CisgICAgICAgIChISU5GTy5fX2luaXRfXyk6CisgICAgICAgIChISU5GTy50b190ZXh0KToK
KyAgICAgICAgKEhJTkZPLmZyb21fdGV4dCk6CisgICAgICAgIChISU5GTy50b193aXJlKToKKyAg
ICAgICAgKEhJTkZPLmZyb21fd2lyZSk6CisgICAgICAgIChISU5GTy5fY21wKToKKyAgICAgICAg
KiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9ISVAucHk6IEFkZGVk
LgorICAgICAgICAoSElQKToKKyAgICAgICAgKEhJUC5fX2luaXRfXyk6CisgICAgICAgIChISVAu
dG9fdGV4dCk6CisgICAgICAgIChISVAuZnJvbV90ZXh0KToKKyAgICAgICAgKEhJUC50b193aXJl
KToKKyAgICAgICAgKEhJUC5mcm9tX3dpcmUpOgorICAgICAgICAoSElQLmNob29zZV9yZWxhdGl2
aXR5KToKKyAgICAgICAgKEhJUC5fY21wKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJk
X3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9JU0ROLnB5OiBBZGRlZC4KKyAgICAgICAgKElTRE4pOgor
ICAgICAgICAoSVNETi5fX2luaXRfXyk6CisgICAgICAgIChJU0ROLnRvX3RleHQpOgorICAgICAg
ICAoSVNETi5mcm9tX3RleHQpOgorICAgICAgICAoSVNETi50b193aXJlKToKKyAgICAgICAgKElT
RE4uZnJvbV93aXJlKToKKyAgICAgICAgKElTRE4uX2NtcCk6CisgICAgICAgICogV2ViUGFnZVJl
cGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvS0VZLnB5OiBBZGRlZC4KKyAgICAgICAg
KEtFWSk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9B
TlkvTE9DLnB5OiBBZGRlZC4KKyAgICAgICAgKF9leHBvbmVudF9vZik6CisgICAgICAgIChfZmxv
YXRfdG9fdHVwbGUpOgorICAgICAgICAoX3R1cGxlX3RvX2Zsb2F0KToKKyAgICAgICAgKF9lbmNv
ZGVfc2l6ZSk6CisgICAgICAgIChfZGVjb2RlX3NpemUpOgorICAgICAgICAoTE9DKToKKyAgICAg
ICAgKExPQy5fX2luaXRfXyk6CisgICAgICAgIChMT0MudG9fdGV4dCk6CisgICAgICAgIChMT0Mu
ZnJvbV90ZXh0KToKKyAgICAgICAgKExPQy50b193aXJlKToKKyAgICAgICAgKExPQy5mcm9tX3dp
cmUpOgorICAgICAgICAoTE9DLl9jbXApOgorICAgICAgICAoTE9DLl9nZXRfZmxvYXRfbGF0aXR1
ZGUpOgorICAgICAgICAoTE9DLl9zZXRfZmxvYXRfbGF0aXR1ZGUpOgorICAgICAgICAoTE9DLl9n
ZXRfZmxvYXRfbG9uZ2l0dWRlKToKKyAgICAgICAgKExPQy5fc2V0X2Zsb2F0X2xvbmdpdHVkZSk6
CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvTVgu
cHk6IEFkZGVkLgorICAgICAgICAoTVgpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRf
cGFydHkvZG5zL3JkdHlwZXMvQU5ZL05TLnB5OiBBZGRlZC4KKyAgICAgICAgKE5TKToKKyAgICAg
ICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9OU0VDLnB5OiBB
ZGRlZC4KKyAgICAgICAgKE5TRUMpOgorICAgICAgICAoTlNFQy5fX2luaXRfXyk6CisgICAgICAg
IChOU0VDLnRvX3RleHQpOgorICAgICAgICAoTlNFQy5mcm9tX3RleHQpOgorICAgICAgICAoTlNF
Qy50b193aXJlKToKKyAgICAgICAgKE5TRUMuZnJvbV93aXJlKToKKyAgICAgICAgKE5TRUMuY2hv
b3NlX3JlbGF0aXZpdHkpOgorICAgICAgICAoTlNFQy5fY21wKToKKyAgICAgICAgKiBXZWJQYWdl
UmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9OU0VDMy5weTogQWRkZWQuCisgICAg
ICAgIChOU0VDMyk6CisgICAgICAgIChOU0VDMy5fX2luaXRfXyk6CisgICAgICAgIChOU0VDMy50
b190ZXh0KToKKyAgICAgICAgKE5TRUMzLmZyb21fdGV4dCk6CisgICAgICAgIChOU0VDMy50b193
aXJlKToKKyAgICAgICAgKE5TRUMzLmZyb21fd2lyZSk6CisgICAgICAgIChOU0VDMy5fY21wKToK
KyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9OU0VD
M1BBUkFNLnB5OiBBZGRlZC4KKyAgICAgICAgKE5TRUMzUEFSQU0pOgorICAgICAgICAoTlNFQzNQ
QVJBTS5fX2luaXRfXyk6CisgICAgICAgIChOU0VDM1BBUkFNLnRvX3RleHQpOgorICAgICAgICAo
TlNFQzNQQVJBTS5mcm9tX3RleHQpOgorICAgICAgICAoTlNFQzNQQVJBTS50b193aXJlKToKKyAg
ICAgICAgKE5TRUMzUEFSQU0uZnJvbV93aXJlKToKKyAgICAgICAgKE5TRUMzUEFSQU0uX2NtcCk6
CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvTlhU
LnB5OiBBZGRlZC4KKyAgICAgICAgKE5YVCk6CisgICAgICAgIChOWFQuX19pbml0X18pOgorICAg
ICAgICAoTlhULnRvX3RleHQpOgorICAgICAgICAoTlhULmZyb21fdGV4dCk6CisgICAgICAgIChO
WFQudG9fd2lyZSk6CisgICAgICAgIChOWFQudG9fZGlnZXN0YWJsZSk6CisgICAgICAgIChOWFQu
ZnJvbV93aXJlKToKKyAgICAgICAgKE5YVC5jaG9vc2VfcmVsYXRpdml0eSk6CisgICAgICAgIChO
WFQuX2NtcCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBl
cy9BTlkvUFRSLnB5OiBBZGRlZC4KKyAgICAgICAgKFBUUik6CisgICAgICAgICogV2ViUGFnZVJl
cGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkvUlAucHk6IEFkZGVkLgorICAgICAgICAo
UlApOgorICAgICAgICAoUlAuX19pbml0X18pOgorICAgICAgICAoUlAudG9fdGV4dCk6CisgICAg
ICAgIChSUC5mcm9tX3RleHQpOgorICAgICAgICAoUlAudG9fd2lyZSk6CisgICAgICAgIChSUC50
b19kaWdlc3RhYmxlKToKKyAgICAgICAgKFJQLmZyb21fd2lyZSk6CisgICAgICAgIChSUC5jaG9v
c2VfcmVsYXRpdml0eSk6CisgICAgICAgIChSUC5fY21wKToKKyAgICAgICAgKiBXZWJQYWdlUmVw
bGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0FOWS9SUlNJRy5weTogQWRkZWQuCisgICAgICAg
IChSUlNJRyk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBl
cy9BTlkvUlQucHk6IEFkZGVkLgorICAgICAgICAoUlQpOgorICAgICAgICAqIFdlYlBhZ2VSZXBs
YXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL1NJRy5weTogQWRkZWQuCisgICAgICAgIChT
SUcpOgorICAgICAgICAoU0lHLnRvX2RpZ2VzdGFibGUpOgorICAgICAgICAqIFdlYlBhZ2VSZXBs
YXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL1NPQS5weTogQWRkZWQuCisgICAgICAgIChT
T0EpOgorICAgICAgICAoU09BLl9faW5pdF9fKToKKyAgICAgICAgKFNPQS50b190ZXh0KToKKyAg
ICAgICAgKFNPQS5mcm9tX3RleHQpOgorICAgICAgICAoU09BLnRvX3dpcmUpOgorICAgICAgICAo
U09BLnRvX2RpZ2VzdGFibGUpOgorICAgICAgICAoU09BLmZyb21fd2lyZSk6CisgICAgICAgIChT
T0EuY2hvb3NlX3JlbGF0aXZpdHkpOgorICAgICAgICAoU09BLl9jbXApOgorICAgICAgICAqIFdl
YlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL1NQRi5weTogQWRkZWQuCisg
ICAgICAgIChTUEYpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3Jk
dHlwZXMvQU5ZL1NTSEZQLnB5OiBBZGRlZC4KKyAgICAgICAgKFNTSEZQKToKKyAgICAgICAgKFNT
SEZQLl9faW5pdF9fKToKKyAgICAgICAgKFNTSEZQLnRvX3RleHQpOgorICAgICAgICAoU1NIRlAu
ZnJvbV90ZXh0KToKKyAgICAgICAgKFNTSEZQLnRvX3dpcmUpOgorICAgICAgICAoU1NIRlAuZnJv
bV93aXJlKToKKyAgICAgICAgKFNTSEZQLl9jbXApOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkv
dGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL1RYVC5weTogQWRkZWQuCisgICAgICAgIChUWFQp
OgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvQU5ZL1gy
NS5weTogQWRkZWQuCisgICAgICAgIChYMjUpOgorICAgICAgICAoWDI1Ll9faW5pdF9fKToKKyAg
ICAgICAgKFgyNS50b190ZXh0KToKKyAgICAgICAgKFgyNS5mcm9tX3RleHQpOgorICAgICAgICAo
WDI1LnRvX3dpcmUpOgorICAgICAgICAoWDI1LmZyb21fd2lyZSk6CisgICAgICAgIChYMjUuX2Nt
cCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9BTlkv
X19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkv
ZG5zL3JkdHlwZXMvSU46IEFkZGVkLgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFy
dHkvZG5zL3JkdHlwZXMvSU4vQS5weTogQWRkZWQuCisgICAgICAgIChBKToKKyAgICAgICAgKEEu
X19pbml0X18pOgorICAgICAgICAoQS50b190ZXh0KToKKyAgICAgICAgKEEuZnJvbV90ZXh0KToK
KyAgICAgICAgKEEudG9fd2lyZSk6CisgICAgICAgIChBLmZyb21fd2lyZSk6CisgICAgICAgIChB
Ll9jbXApOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMv
SU4vQUFBQS5weTogQWRkZWQuCisgICAgICAgIChBQUFBKToKKyAgICAgICAgKEFBQUEuX19pbml0
X18pOgorICAgICAgICAoQUFBQS50b190ZXh0KToKKyAgICAgICAgKEFBQUEuZnJvbV90ZXh0KToK
KyAgICAgICAgKEFBQUEudG9fd2lyZSk6CisgICAgICAgIChBQUFBLmZyb21fd2lyZSk6CisgICAg
ICAgIChBQUFBLl9jbXApOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5z
L3JkdHlwZXMvSU4vQVBMLnB5OiBBZGRlZC4KKyAgICAgICAgKEFQTEl0ZW0pOgorICAgICAgICAo
QVBMSXRlbS5fX2luaXRfXyk6CisgICAgICAgIChBUExJdGVtLl9fc3RyX18pOgorICAgICAgICAo
QVBMSXRlbS50b193aXJlKToKKyAgICAgICAgKEFQTCk6CisgICAgICAgIChBUEwuX19pbml0X18p
OgorICAgICAgICAoQVBMLnRvX3RleHQpOgorICAgICAgICAoQVBMLmZyb21fdGV4dCk6CisgICAg
ICAgIChBUEwudG9fd2lyZSk6CisgICAgICAgIChBUEwuZnJvbV93aXJlKToKKyAgICAgICAgKEFQ
TC5fY21wKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVz
L0lOL0RIQ0lELnB5OiBBZGRlZC4KKyAgICAgICAgKERIQ0lEKToKKyAgICAgICAgKERIQ0lELl9f
aW5pdF9fKToKKyAgICAgICAgKERIQ0lELnRvX3RleHQpOgorICAgICAgICAoREhDSUQuZnJvbV90
ZXh0KToKKyAgICAgICAgKERIQ0lELnRvX3dpcmUpOgorICAgICAgICAoREhDSUQuZnJvbV93aXJl
KToKKyAgICAgICAgKERIQ0lELl9jbXApOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRf
cGFydHkvZG5zL3JkdHlwZXMvSU4vSVBTRUNLRVkucHk6IEFkZGVkLgorICAgICAgICAoSVBTRUNL
RVkpOgorICAgICAgICAoSVBTRUNLRVkuX19pbml0X18pOgorICAgICAgICAoSVBTRUNLRVkudG9f
dGV4dCk6CisgICAgICAgIChJUFNFQ0tFWS5mcm9tX3RleHQpOgorICAgICAgICAoSVBTRUNLRVku
dG9fd2lyZSk6CisgICAgICAgIChJUFNFQ0tFWS5mcm9tX3dpcmUpOgorICAgICAgICAoSVBTRUNL
RVkuX2NtcCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBl
cy9JTi9LWC5weTogQWRkZWQuCisgICAgICAgIChLWCk6CisgICAgICAgICogV2ViUGFnZVJlcGxh
eS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9OQVBUUi5weTogQWRkZWQuCisgICAgICAgIChf
d3JpdGVfc3RyaW5nKToKKyAgICAgICAgKE5BUFRSKToKKyAgICAgICAgKE5BUFRSLl9faW5pdF9f
KToKKyAgICAgICAgKE5BUFRSLnRvX3RleHQpOgorICAgICAgICAoTkFQVFIuZnJvbV90ZXh0KToK
KyAgICAgICAgKE5BUFRSLnRvX3dpcmUpOgorICAgICAgICAoTkFQVFIuZnJvbV93aXJlKToKKyAg
ICAgICAgKE5BUFRSLmNob29zZV9yZWxhdGl2aXR5KToKKyAgICAgICAgKE5BUFRSLl9jbXApOgor
ICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvSU4vTlNBUC5w
eTogQWRkZWQuCisgICAgICAgIChOU0FQKToKKyAgICAgICAgKE5TQVAuX19pbml0X18pOgorICAg
ICAgICAoTlNBUC50b190ZXh0KToKKyAgICAgICAgKE5TQVAuZnJvbV90ZXh0KToKKyAgICAgICAg
KE5TQVAudG9fd2lyZSk6CisgICAgICAgIChOU0FQLmZyb21fd2lyZSk6CisgICAgICAgIChOU0FQ
Ll9jbXApOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMv
SU4vTlNBUF9QVFIucHk6IEFkZGVkLgorICAgICAgICAoTlNBUF9QVFIpOgorICAgICAgICAqIFdl
YlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvSU4vUFgucHk6IEFkZGVkLgorICAg
ICAgICAoUFgpOgorICAgICAgICAoUFguX19pbml0X18pOgorICAgICAgICAoUFgudG9fdGV4dCk6
CisgICAgICAgIChQWC5mcm9tX3RleHQpOgorICAgICAgICAoUFgudG9fd2lyZSk6CisgICAgICAg
IChQWC5mcm9tX3dpcmUpOgorICAgICAgICAoUFguY2hvb3NlX3JlbGF0aXZpdHkpOgorICAgICAg
ICAoUFguX2NtcCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0
eXBlcy9JTi9TUlYucHk6IEFkZGVkLgorICAgICAgICAoU1JWKToKKyAgICAgICAgKFNSVi5fX2lu
aXRfXyk6CisgICAgICAgIChTUlYudG9fdGV4dCk6CisgICAgICAgIChTUlYuZnJvbV90ZXh0KToK
KyAgICAgICAgKFNSVi50b193aXJlKToKKyAgICAgICAgKFNSVi5mcm9tX3dpcmUpOgorICAgICAg
ICAoU1JWLmNob29zZV9yZWxhdGl2aXR5KToKKyAgICAgICAgKFNSVi5fY21wKToKKyAgICAgICAg
KiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy9yZHR5cGVzL0lOL1dLUy5weTogQWRkZWQu
CisgICAgICAgIChXS1MpOgorICAgICAgICAoV0tTLl9faW5pdF9fKToKKyAgICAgICAgKFdLUy50
b190ZXh0KToKKyAgICAgICAgKFdLUy5mcm9tX3RleHQpOgorICAgICAgICAoV0tTLnRvX3dpcmUp
OgorICAgICAgICAoV0tTLmZyb21fd2lyZSk6CisgICAgICAgIChXS1MuX2NtcCk6CisgICAgICAg
ICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9JTi9fX2luaXRfXy5weTog
QWRkZWQuCisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9f
X2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9k
bnMvcmR0eXBlcy9kc2Jhc2UucHk6IEFkZGVkLgorICAgICAgICAoRFNCYXNlKToKKyAgICAgICAg
KERTQmFzZS5mb3IpOgorICAgICAgICAoRFNCYXNlLl9faW5pdF9fKToKKyAgICAgICAgKERTQmFz
ZS50b190ZXh0KToKKyAgICAgICAgKERTQmFzZS5mcm9tX3RleHQpOgorICAgICAgICAoRFNCYXNl
LnRvX3dpcmUpOgorICAgICAgICAoRFNCYXNlLmZyb21fd2lyZSk6CisgICAgICAgIChEU0Jhc2Uu
X2NtcCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9r
ZXliYXNlLnB5OiBBZGRlZC4KKyAgICAgICAgKEtFWUJhc2UpOgorICAgICAgICAoS0VZQmFzZS5f
X2luaXRfXyk6CisgICAgICAgIChLRVlCYXNlLnRvX3RleHQpOgorICAgICAgICAoS0VZQmFzZS5m
cm9tX3RleHQpOgorICAgICAgICAoS0VZQmFzZS50b193aXJlKToKKyAgICAgICAgKEtFWUJhc2Uu
ZnJvbV93aXJlKToKKyAgICAgICAgKEtFWUJhc2UuX2NtcCk6CisgICAgICAgICogV2ViUGFnZVJl
cGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9teGJhc2UucHk6IEFkZGVkLgorICAgICAgICAo
TVhCYXNlKToKKyAgICAgICAgKE1YQmFzZS5mb3IpOgorICAgICAgICAoTVhCYXNlLl9faW5pdF9f
KToKKyAgICAgICAgKE1YQmFzZS50b190ZXh0KToKKyAgICAgICAgKE1YQmFzZS5mcm9tX3RleHQp
OgorICAgICAgICAoTVhCYXNlLnRvX3dpcmUpOgorICAgICAgICAoTVhCYXNlLnRvX2RpZ2VzdGFi
bGUpOgorICAgICAgICAoTVhCYXNlLmZyb21fd2lyZSk6CisgICAgICAgIChNWEJhc2UuY2hvb3Nl
X3JlbGF0aXZpdHkpOgorICAgICAgICAoTVhCYXNlLl9jbXApOgorICAgICAgICAoVW5jb21wcmVz
c2VkTVgpOgorICAgICAgICAoVW5jb21wcmVzc2VkTVguZm9yKToKKyAgICAgICAgKFVuY29tcHJl
c3NlZE1YLnRvX3dpcmUpOgorICAgICAgICAoVW5jb21wcmVzc2VkTVgudG9fZGlnZXN0YWJsZSk6
CisgICAgICAgIChVbmNvbXByZXNzZWREb3duY2FzaW5nTVgpOgorICAgICAgICAoVW5jb21wcmVz
c2VkRG93bmNhc2luZ01YLmZvcik6CisgICAgICAgIChVbmNvbXByZXNzZWREb3duY2FzaW5nTVgu
dG9fd2lyZSk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvcmR0eXBl
cy9uc2Jhc2UucHk6IEFkZGVkLgorICAgICAgICAoTlNCYXNlKToKKyAgICAgICAgKE5TQmFzZS5m
b3IpOgorICAgICAgICAoTlNCYXNlLl9faW5pdF9fKToKKyAgICAgICAgKE5TQmFzZS50b190ZXh0
KToKKyAgICAgICAgKE5TQmFzZS5mcm9tX3RleHQpOgorICAgICAgICAoTlNCYXNlLnRvX3dpcmUp
OgorICAgICAgICAoTlNCYXNlLnRvX2RpZ2VzdGFibGUpOgorICAgICAgICAoTlNCYXNlLmZyb21f
d2lyZSk6CisgICAgICAgIChOU0Jhc2UuY2hvb3NlX3JlbGF0aXZpdHkpOgorICAgICAgICAoTlNC
YXNlLl9jbXApOgorICAgICAgICAoVW5jb21wcmVzc2VkTlMpOgorICAgICAgICAoVW5jb21wcmVz
c2VkTlMuZm9yKToKKyAgICAgICAgKFVuY29tcHJlc3NlZE5TLnRvX3dpcmUpOgorICAgICAgICAo
VW5jb21wcmVzc2VkTlMudG9fZGlnZXN0YWJsZSk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90
aGlyZF9wYXJ0eS9kbnMvcmR0eXBlcy9zaWdiYXNlLnB5OiBBZGRlZC4KKyAgICAgICAgKEJhZFNp
Z1RpbWUpOgorICAgICAgICAoc2lndGltZV90b19wb3NpeHRpbWUpOgorICAgICAgICAocG9zaXh0
aW1lX3RvX3NpZ3RpbWUpOgorICAgICAgICAoU0lHQmFzZSk6CisgICAgICAgIChTSUdCYXNlLl9f
aW5pdF9fKToKKyAgICAgICAgKFNJR0Jhc2UuY292ZXJzKToKKyAgICAgICAgKFNJR0Jhc2UudG9f
dGV4dCk6CisgICAgICAgIChTSUdCYXNlLmZyb21fdGV4dCk6CisgICAgICAgIChTSUdCYXNlLnRv
X3dpcmUpOgorICAgICAgICAoU0lHQmFzZS5mcm9tX3dpcmUpOgorICAgICAgICAoU0lHQmFzZS5j
aG9vc2VfcmVsYXRpdml0eSk6CisgICAgICAgIChTSUdCYXNlLl9jbXApOgorICAgICAgICAqIFdl
YlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JkdHlwZXMvdHh0YmFzZS5weTogQWRkZWQuCisg
ICAgICAgIChUWFRCYXNlKToKKyAgICAgICAgKFRYVEJhc2UuZm9yKToKKyAgICAgICAgKFRYVEJh
c2UuX19pbml0X18pOgorICAgICAgICAoVFhUQmFzZS50b190ZXh0KToKKyAgICAgICAgKFRYVEJh
c2UuZnJvbV90ZXh0KToKKyAgICAgICAgKFRYVEJhc2UudG9fd2lyZSk6CisgICAgICAgIChUWFRC
YXNlLmZyb21fd2lyZSk6CisgICAgICAgIChUWFRCYXNlLl9jbXApOgorICAgICAgICAqIFdlYlBh
Z2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3JlbmRlcmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKFJl
bmRlcmVyKToKKyAgICAgICAgKFJlbmRlcmVyLmZvcik6CisgICAgICAgIChSZW5kZXJlci5hbmQp
OgorICAgICAgICAoUmVuZGVyZXIuaXMpOgorICAgICAgICAoUmVuZGVyZXIuX19pbml0X18pOgor
ICAgICAgICAoUmVuZGVyZXIuX3JvbGxiYWNrKToKKyAgICAgICAgKFJlbmRlcmVyLl9zZXRfc2Vj
dGlvbik6CisgICAgICAgIChSZW5kZXJlci5hZGRfcXVlc3Rpb24pOgorICAgICAgICAoUmVuZGVy
ZXIuYWRkX3Jyc2V0KToKKyAgICAgICAgKFJlbmRlcmVyLmFkZF9yZGF0YXNldCk6CisgICAgICAg
IChSZW5kZXJlci5hZGRfZWRucyk6CisgICAgICAgIChSZW5kZXJlci5hZGRfdHNpZyk6CisgICAg
ICAgIChSZW5kZXJlci53cml0ZV9oZWFkZXIpOgorICAgICAgICAoUmVuZGVyZXIuZ2V0X3dpcmUp
OgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvZG5zL3Jlc29sdmVyLnB5OiBB
ZGRlZC4KKyAgICAgICAgKE5YRE9NQUlOKToKKyAgICAgICAgKE5vQW5zd2VyKToKKyAgICAgICAg
KE5vTmFtZXNlcnZlcnMpOgorICAgICAgICAoTm90QWJzb2x1dGUpOgorICAgICAgICAoTm9Sb290
U09BKToKKyAgICAgICAgKEFuc3dlcik6CisgICAgICAgIChBbnN3ZXIuYnVuZGxlKToKKyAgICAg
ICAgKEFuc3dlci5fX2luaXRfXyk6CisgICAgICAgIChBbnN3ZXIuX19nZXRhdHRyX18pOgorICAg
ICAgICAoQW5zd2VyLl9fbGVuX18pOgorICAgICAgICAoQW5zd2VyLl9faXRlcl9fKToKKyAgICAg
ICAgKEFuc3dlci5fX2dldGl0ZW1fXyk6CisgICAgICAgIChBbnN3ZXIuX19kZWxpdGVtX18pOgor
ICAgICAgICAoQW5zd2VyLl9fZ2V0c2xpY2VfXyk6CisgICAgICAgIChBbnN3ZXIuX19kZWxzbGlj
ZV9fKToKKyAgICAgICAgKENhY2hlKToKKyAgICAgICAgKENhY2hlLl9faW5pdF9fKToKKyAgICAg
ICAgKENhY2hlLm1heWJlX2NsZWFuKToKKyAgICAgICAgKENhY2hlLmdldCk6CisgICAgICAgIChD
YWNoZS5wdXQpOgorICAgICAgICAoQ2FjaGUuZmx1c2gpOgorICAgICAgICAoUmVzb2x2ZXIpOgor
ICAgICAgICAoUmVzb2x2ZXIuX19pbml0X18pOgorICAgICAgICAoUmVzb2x2ZXIucmVzZXQpOgor
ICAgICAgICAoUmVzb2x2ZXIucmVhZF9yZXNvbHZfY29uZik6CisgICAgICAgIChSZXNvbHZlci5f
ZGV0ZXJtaW5lX3NwbGl0X2NoYXIpOgorICAgICAgICAoUmVzb2x2ZXIuX2NvbmZpZ193aW4zMl9u
YW1lc2VydmVycyk6CisgICAgICAgIChSZXNvbHZlci5fY29uZmlnX3dpbjMyX2RvbWFpbik6Cisg
ICAgICAgIChSZXNvbHZlci5fY29uZmlnX3dpbjMyX3NlYXJjaCk6CisgICAgICAgIChSZXNvbHZl
ci5fY29uZmlnX3dpbjMyX2Zyb21rZXkpOgorICAgICAgICAoUmVzb2x2ZXIucmVhZF9yZWdpc3Ry
eSk6CisgICAgICAgIChSZXNvbHZlci5fd2luMzJfaXNfbmljX2VuYWJsZWQpOgorICAgICAgICAo
UmVzb2x2ZXIuX2NvbXB1dGVfdGltZW91dCk6CisgICAgICAgIChSZXNvbHZlci5xdWVyeSk6Cisg
ICAgICAgIChSZXNvbHZlci51c2VfdHNpZyk6CisgICAgICAgIChSZXNvbHZlci51c2VfZWRucyk6
CisgICAgICAgIChnZXRfZGVmYXVsdF9yZXNvbHZlcik6CisgICAgICAgIChxdWVyeSk6CisgICAg
ICAgICh6b25lX2Zvcl9uYW1lKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5
L2Rucy9yZXZlcnNlbmFtZS5weTogQWRkZWQuCisgICAgICAgIChmcm9tX2FkZHJlc3MpOgorICAg
ICAgICAodG9fYWRkcmVzcyk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9k
bnMvcnJzZXQucHk6IEFkZGVkLgorICAgICAgICAoUlJzZXQpOgorICAgICAgICAoUlJzZXQuX19p
bml0X18pOgorICAgICAgICAoUlJzZXQuX2Nsb25lKToKKyAgICAgICAgKFJSc2V0Ll9fcmVwcl9f
KToKKyAgICAgICAgKFJSc2V0Ll9fc3RyX18pOgorICAgICAgICAoUlJzZXQuX19lcV9fKToKKyAg
ICAgICAgKFJSc2V0Lm1hdGNoKToKKyAgICAgICAgKFJSc2V0LnRvX3RleHQpOgorICAgICAgICAo
UlJzZXQudG9fd2lyZSk6CisgICAgICAgIChSUnNldC50b19yZGF0YXNldCk6CisgICAgICAgIChm
cm9tX3RleHRfbGlzdCk6CisgICAgICAgIChmcm9tX3RleHQpOgorICAgICAgICAoZnJvbV9yZGF0
YV9saXN0KToKKyAgICAgICAgKGZyb21fcmRhdGEpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkv
dGhpcmRfcGFydHkvZG5zL3NldC5weTogQWRkZWQuCisgICAgICAgIChTZXQpOgorICAgICAgICAo
U2V0LmltcGxlbWVudHMpOgorICAgICAgICAoU2V0Ll9faW5pdF9fKToKKyAgICAgICAgKFNldC5f
X3JlcHJfXyk6CisgICAgICAgIChTZXQuYWRkKToKKyAgICAgICAgKFNldC5yZW1vdmUpOgorICAg
ICAgICAoU2V0LmRpc2NhcmQpOgorICAgICAgICAoU2V0Ll9jbG9uZSk6CisgICAgICAgIChTZXQu
X19jb3B5X18pOgorICAgICAgICAoU2V0LmNvcHkpOgorICAgICAgICAoU2V0LnVuaW9uX3VwZGF0
ZSk6CisgICAgICAgIChTZXQuaW50ZXJzZWN0aW9uX3VwZGF0ZSk6CisgICAgICAgIChTZXQuZGlm
ZmVyZW5jZV91cGRhdGUpOgorICAgICAgICAoU2V0LnVuaW9uKToKKyAgICAgICAgKFNldC5pbnRl
cnNlY3Rpb24pOgorICAgICAgICAoU2V0LmRpZmZlcmVuY2UpOgorICAgICAgICAoU2V0Ll9fb3Jf
Xyk6CisgICAgICAgIChTZXQuX19hbmRfXyk6CisgICAgICAgIChTZXQuX19hZGRfXyk6CisgICAg
ICAgIChTZXQuX19zdWJfXyk6CisgICAgICAgIChTZXQuX19pb3JfXyk6CisgICAgICAgIChTZXQu
X19pYW5kX18pOgorICAgICAgICAoU2V0Ll9faWFkZF9fKToKKyAgICAgICAgKFNldC5fX2lzdWJf
Xyk6CisgICAgICAgIChTZXQudXBkYXRlKToKKyAgICAgICAgKFNldC5jbGVhcik6CisgICAgICAg
IChTZXQuX19lcV9fKToKKyAgICAgICAgKFNldC5fX25lX18pOgorICAgICAgICAoU2V0Ll9fbGVu
X18pOgorICAgICAgICAoU2V0Ll9faXRlcl9fKToKKyAgICAgICAgKFNldC5fX2dldGl0ZW1fXyk6
CisgICAgICAgIChTZXQuX19kZWxpdGVtX18pOgorICAgICAgICAoU2V0Ll9fZ2V0c2xpY2VfXyk6
CisgICAgICAgIChTZXQuX19kZWxzbGljZV9fKToKKyAgICAgICAgKFNldC5pc3N1YnNldCk6Cisg
ICAgICAgIChTZXQuaXNzdXBlcnNldCk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9w
YXJ0eS9kbnMvdG9rZW5pemVyLnB5OiBBZGRlZC4KKyAgICAgICAgKFVuZ2V0QnVmZmVyRnVsbCk6
CisgICAgICAgIChUb2tlbik6CisgICAgICAgIChUb2tlbi5fX2luaXRfXyk6CisgICAgICAgIChU
b2tlbi5pc19lb2YpOgorICAgICAgICAoVG9rZW4uaXNfZW9sKToKKyAgICAgICAgKFRva2VuLmlz
X3doaXRlc3BhY2UpOgorICAgICAgICAoVG9rZW4uaXNfaWRlbnRpZmllcik6CisgICAgICAgIChU
b2tlbi5pc19xdW90ZWRfc3RyaW5nKToKKyAgICAgICAgKFRva2VuLmlzX2NvbW1lbnQpOgorICAg
ICAgICAoVG9rZW4uaXNfZGVsaW1pdGVyKToKKyAgICAgICAgKFRva2VuLmlzX2VvbF9vcl9lb2Yp
OgorICAgICAgICAoVG9rZW4uX19lcV9fKToKKyAgICAgICAgKFRva2VuLl9fbmVfXyk6CisgICAg
ICAgIChUb2tlbi5fX3N0cl9fKToKKyAgICAgICAgKFRva2VuLnVuZXNjYXBlKToKKyAgICAgICAg
KFRva2VuLl9fbGVuX18pOgorICAgICAgICAoVG9rZW4uX19pdGVyX18pOgorICAgICAgICAoVG9r
ZW4uX19nZXRpdGVtX18pOgorICAgICAgICAoVG9rZW5pemVyKToKKyAgICAgICAgKFRva2VuaXpl
ci5fX2luaXRfXyk6CisgICAgICAgIChUb2tlbml6ZXIuX2dldF9jaGFyKToKKyAgICAgICAgKFRv
a2VuaXplci53aGVyZSk6CisgICAgICAgIChUb2tlbml6ZXIuX3VuZ2V0X2NoYXIpOgorICAgICAg
ICAoVG9rZW5pemVyLnNraXBfd2hpdGVzcGFjZSk6CisgICAgICAgIChUb2tlbml6ZXIuZ2V0KToK
KyAgICAgICAgKFRva2VuaXplci51bmdldCk6CisgICAgICAgIChUb2tlbml6ZXIubmV4dCk6Cisg
ICAgICAgIChUb2tlbml6ZXIuX19pdGVyX18pOgorICAgICAgICAoVG9rZW5pemVyLmdldF9pbnQp
OgorICAgICAgICAoVG9rZW5pemVyLmdldF91aW50OCk6CisgICAgICAgIChUb2tlbml6ZXIuZ2V0
X3VpbnQxNik6CisgICAgICAgIChUb2tlbml6ZXIuZ2V0X3VpbnQzMik6CisgICAgICAgIChUb2tl
bml6ZXIuZ2V0X3N0cmluZyk6CisgICAgICAgIChUb2tlbml6ZXIuZ2V0X2lkZW50aWZpZXIpOgor
ICAgICAgICAoVG9rZW5pemVyLmdldF9uYW1lKToKKyAgICAgICAgKFRva2VuaXplci5nZXRfZW9s
KToKKyAgICAgICAgKFRva2VuaXplci5nZXRfdHRsKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5
L3RoaXJkX3BhcnR5L2Rucy90c2lnLnB5OiBBZGRlZC4KKyAgICAgICAgKEJhZFRpbWUpOgorICAg
ICAgICAoQmFkU2lnbmF0dXJlKToKKyAgICAgICAgKFBlZXJFcnJvcik6CisgICAgICAgIChQZWVy
RXJyb3IuZm9yKToKKyAgICAgICAgKFBlZXJCYWRLZXkpOgorICAgICAgICAoUGVlckJhZFNpZ25h
dHVyZSk6CisgICAgICAgIChQZWVyQmFkVGltZSk6CisgICAgICAgIChQZWVyQmFkVHJ1bmNhdGlv
bik6CisgICAgICAgIChzaWduKToKKyAgICAgICAgKGhtYWNfbWQ1KToKKyAgICAgICAgKHZhbGlk
YXRlKToKKyAgICAgICAgKGdldF9hbGdvcml0aG0pOgorICAgICAgICAoZ2V0X2FsZ29yaXRobS5I
YXNobGliV3JhcHBlcik6CisgICAgICAgIChnZXRfYWxnb3JpdGhtLkhhc2hsaWJXcmFwcGVyLl9f
aW5pdF9fKToKKyAgICAgICAgKGdldF9hbGdvcml0aG0uSGFzaGxpYldyYXBwZXIubmV3KToKKyAg
ICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2Rucy90c2lna2V5cmluZy5weTogQWRk
ZWQuCisgICAgICAgIChmcm9tX3RleHQpOgorICAgICAgICAodG9fdGV4dCk6CisgICAgICAgICog
V2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9kbnMvdHRsLnB5OiBBZGRlZC4KKyAgICAgICAgKEJh
ZFRUTCk6CisgICAgICAgIChmcm9tX3RleHQpOgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhp
cmRfcGFydHkvZG5zL3VwZGF0ZS5weTogQWRkZWQuCisgICAgICAgIChVcGRhdGUpOgorICAgICAg
ICAoVXBkYXRlLl9faW5pdF9fKToKKyAgICAgICAgKFVwZGF0ZS5fX2luaXRfXy5vZik6CisgICAg
ICAgIChVcGRhdGUuX2FkZF9ycik6CisgICAgICAgIChVcGRhdGUuX2FkZCk6CisgICAgICAgIChV
cGRhdGUuYWRkKToKKyAgICAgICAgKFVwZGF0ZS5kZWxldGUpOgorICAgICAgICAoVXBkYXRlLnJl
cGxhY2UpOgorICAgICAgICAoVXBkYXRlLnByZXNlbnQpOgorICAgICAgICAoVXBkYXRlLmFic2Vu
dCk6CisgICAgICAgIChVcGRhdGUudG9fd2lyZSk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90
aGlyZF9wYXJ0eS9kbnMvdmVyc2lvbi5weTogQWRkZWQuCisgICAgICAgICogV2ViUGFnZVJlcGxh
eS90aGlyZF9wYXJ0eS9kbnMvem9uZS5weTogQWRkZWQuCisgICAgICAgIChCYWRab25lKToKKyAg
ICAgICAgKE5vU09BKToKKyAgICAgICAgKE5vTlMpOgorICAgICAgICAoVW5rbm93bk9yaWdpbik6
CisgICAgICAgIChab25lKToKKyAgICAgICAgKFpvbmUuSU4pOgorICAgICAgICAoWm9uZS5vcik6
CisgICAgICAgIChab25lLl9faW5pdF9fKToKKyAgICAgICAgKFpvbmUuX19pbml0X18uSU4pOgor
ICAgICAgICAoWm9uZS5fX2VxX18pOgorICAgICAgICAoWm9uZS5fX2VxX18ub3IpOgorICAgICAg
ICAoWm9uZS5fX25lX18pOgorICAgICAgICAoWm9uZS5fdmFsaWRhdGVfbmFtZSk6CisgICAgICAg
IChab25lLl9fZ2V0aXRlbV9fKToKKyAgICAgICAgKFpvbmUuX19zZXRpdGVtX18pOgorICAgICAg
ICAoWm9uZS5fX2RlbGl0ZW1fXyk6CisgICAgICAgIChab25lLl9faXRlcl9fKToKKyAgICAgICAg
KFpvbmUuaXRlcmtleXMpOgorICAgICAgICAoWm9uZS5rZXlzKToKKyAgICAgICAgKFpvbmUuaXRl
cnZhbHVlcyk6CisgICAgICAgIChab25lLnZhbHVlcyk6CisgICAgICAgIChab25lLml0ZXJpdGVt
cyk6CisgICAgICAgIChab25lLml0ZW1zKToKKyAgICAgICAgKFpvbmUuZ2V0KToKKyAgICAgICAg
KFpvbmUuX19jb250YWluc19fKToKKyAgICAgICAgKFpvbmUuZmluZF9ub2RlKToKKyAgICAgICAg
KFpvbmUuZ2V0X25vZGUpOgorICAgICAgICAoWm9uZS5kZWxldGVfbm9kZSk6CisgICAgICAgICha
b25lLmZpbmRfcmRhdGFzZXQpOgorICAgICAgICAoWm9uZS5nZXRfcmRhdGFzZXQpOgorICAgICAg
ICAoWm9uZS5kZWxldGVfcmRhdGFzZXQpOgorICAgICAgICAoWm9uZS5yZXBsYWNlX3JkYXRhc2V0
KToKKyAgICAgICAgKFpvbmUuZmluZF9ycnNldCk6CisgICAgICAgIChab25lLmdldF9ycnNldCk6
CisgICAgICAgIChab25lLml0ZXJhdGVfcmRhdGFzZXRzKToKKyAgICAgICAgKFpvbmUuaXRlcmF0
ZV9yZGF0YXMpOgorICAgICAgICAoWm9uZS50b19maWxlKToKKyAgICAgICAgKFpvbmUuY2hlY2tf
b3JpZ2luKToKKyAgICAgICAgKF9NYXN0ZXJSZWFkZXIpOgorICAgICAgICAoX01hc3RlclJlYWRl
ci5fX2luaXRfXyk6CisgICAgICAgIChfTWFzdGVyUmVhZGVyLl9lYXRfbGluZSk6CisgICAgICAg
IChfTWFzdGVyUmVhZGVyLl9ycl9saW5lKToKKyAgICAgICAgKF9NYXN0ZXJSZWFkZXIuX3JyX2xp
bmUuaXMpOgorICAgICAgICAoX01hc3RlclJlYWRlci5yZWFkKToKKyAgICAgICAgKGZyb21fdGV4
dCk6CisgICAgICAgIChmcm9tX3RleHQuSU4pOgorICAgICAgICAoZnJvbV9maWxlKToKKyAgICAg
ICAgKGZyb21fZmlsZS5JTik6CisgICAgICAgIChmcm9tX3hmcik6CisgICAgICAgICogV2ViUGFn
ZVJlcGxheS90aGlyZF9wYXJ0eS9pcGFkZHI6IEFkZGVkLgorICAgICAgICAqIFdlYlBhZ2VSZXBs
YXkvdGhpcmRfcGFydHkvaXBhZGRyL0NPUFlJTkc6IEFkZGVkLgorICAgICAgICAqIFdlYlBhZ2VS
ZXBsYXkvdGhpcmRfcGFydHkvaXBhZGRyL01BTklGRVNULmluOiBBZGRlZC4KKyAgICAgICAgKiBX
ZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2lwYWRkci9PV05FUlM6IEFkZGVkLgorICAgICAgICAq
IFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvaXBhZGRyL1JFQURNRTogQWRkZWQuCisgICAgICAg
ICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9pcGFkZHIvaXBhZGRyLnB5OiBBZGRlZC4KKyAg
ICAgICAgKEFkZHJlc3NWYWx1ZUVycm9yKToKKyAgICAgICAgKE5ldG1hc2tWYWx1ZUVycm9yKToK
KyAgICAgICAgKElQQWRkcmVzcyk6CisgICAgICAgIChJUE5ldHdvcmspOgorICAgICAgICAodjRf
aW50X3RvX3BhY2tlZCk6CisgICAgICAgICh2Nl9pbnRfdG9fcGFja2VkKToKKyAgICAgICAgKF9m
aW5kX2FkZHJlc3NfcmFuZ2UpOgorICAgICAgICAoX2dldF9wcmVmaXhfbGVuZ3RoKToKKyAgICAg
ICAgKF9jb3VudF9yaWdodGhhbmRfemVyb19iaXRzKToKKyAgICAgICAgKHN1bW1hcml6ZV9hZGRy
ZXNzX3JhbmdlKToKKyAgICAgICAgKF9jb2xsYXBzZV9hZGRyZXNzX2xpc3RfcmVjdXJzaXZlKToK
KyAgICAgICAgKGNvbGxhcHNlX2FkZHJlc3NfbGlzdCk6CisgICAgICAgIChCeXRlcyk6CisgICAg
ICAgIChCeXRlcy5fX3JlcHJfXyk6CisgICAgICAgIChnZXRfbWl4ZWRfdHlwZV9rZXkpOgorICAg
ICAgICAoX0lQQWRkckJhc2UpOgorICAgICAgICAoX0lQQWRkckJhc2UuX19pbmRleF9fKToKKyAg
ICAgICAgKF9JUEFkZHJCYXNlLl9faW50X18pOgorICAgICAgICAoX0lQQWRkckJhc2UuX19oZXhf
Xyk6CisgICAgICAgIChfSVBBZGRyQmFzZS5leHBsb2RlZCk6CisgICAgICAgIChfSVBBZGRyQmFz
ZS5jb21wcmVzc2VkKToKKyAgICAgICAgKF9CYXNlSVApOgorICAgICAgICAoX0Jhc2VJUC5jb250
YWlucyk6CisgICAgICAgIChfQmFzZUlQLl9fZXFfXyk6CisgICAgICAgIChfQmFzZUlQLl9fbmVf
Xyk6CisgICAgICAgIChfQmFzZUlQLl9fbGVfXyk6CisgICAgICAgIChfQmFzZUlQLl9fZ2VfXyk6
CisgICAgICAgIChfQmFzZUlQLl9fbHRfXyk6CisgICAgICAgIChfQmFzZUlQLl9fZ3RfXyk6Cisg
ICAgICAgIChfQmFzZUlQLl9fYWRkX18pOgorICAgICAgICAoX0Jhc2VJUC5fX3N1Yl9fKToKKyAg
ICAgICAgKF9CYXNlSVAuX19yZXByX18pOgorICAgICAgICAoX0Jhc2VJUC5fX3N0cl9fKToKKyAg
ICAgICAgKF9CYXNlSVAuX19oYXNoX18pOgorICAgICAgICAoX0Jhc2VJUC5fZ2V0X2FkZHJlc3Nf
a2V5KToKKyAgICAgICAgKF9CYXNlSVAudmVyc2lvbik6CisgICAgICAgIChfQmFzZU5ldCk6Cisg
ICAgICAgIChfQmFzZU5ldC5jb250YWlucyk6CisgICAgICAgIChfQmFzZU5ldC5fX2luaXRfXyk6
CisgICAgICAgIChfQmFzZU5ldC5fX3JlcHJfXyk6CisgICAgICAgIChfQmFzZU5ldC5pdGVyaG9z
dHMpOgorICAgICAgICAoX0Jhc2VOZXQuX19pdGVyX18pOgorICAgICAgICAoX0Jhc2VOZXQuX19n
ZXRpdGVtX18pOgorICAgICAgICAoX0Jhc2VOZXQuX19sdF9fKToKKyAgICAgICAgKF9CYXNlTmV0
Ll9fZ3RfXyk6CisgICAgICAgIChfQmFzZU5ldC5fX2xlX18pOgorICAgICAgICAoX0Jhc2VOZXQu
X19nZV9fKToKKyAgICAgICAgKF9CYXNlTmV0Ll9fZXFfXyk6CisgICAgICAgIChfQmFzZU5ldC5f
X25lX18pOgorICAgICAgICAoX0Jhc2VOZXQuX19zdHJfXyk6CisgICAgICAgIChfQmFzZU5ldC5f
X2hhc2hfXyk6CisgICAgICAgIChfQmFzZU5ldC5fX2NvbnRhaW5zX18pOgorICAgICAgICAoX0Jh
c2VOZXQub3ZlcmxhcHMpOgorICAgICAgICAoX0Jhc2VOZXQubmV0d29yayk6CisgICAgICAgIChf
QmFzZU5ldC5icm9hZGNhc3QpOgorICAgICAgICAoX0Jhc2VOZXQuaG9zdG1hc2spOgorICAgICAg
ICAoX0Jhc2VOZXQud2l0aF9wcmVmaXhsZW4pOgorICAgICAgICAoX0Jhc2VOZXQud2l0aF9uZXRt
YXNrKToKKyAgICAgICAgKF9CYXNlTmV0LndpdGhfaG9zdG1hc2spOgorICAgICAgICAoX0Jhc2VO
ZXQubnVtaG9zdHMpOgorICAgICAgICAoX0Jhc2VOZXQudmVyc2lvbik6CisgICAgICAgIChfQmFz
ZU5ldC5wcmVmaXhsZW4pOgorICAgICAgICAoX0Jhc2VOZXQuYWRkcmVzc19leGNsdWRlKToKKyAg
ICAgICAgKF9CYXNlTmV0LmNvbXBhcmVfbmV0d29ya3MpOgorICAgICAgICAoX0Jhc2VOZXQuX2dl
dF9uZXR3b3Jrc19rZXkpOgorICAgICAgICAoX0Jhc2VOZXQuX2lwX2ludF9mcm9tX3ByZWZpeCk6
CisgICAgICAgIChfQmFzZU5ldC5fcHJlZml4X2Zyb21faXBfaW50KToKKyAgICAgICAgKF9CYXNl
TmV0Ll9pcF9zdHJpbmdfZnJvbV9wcmVmaXgpOgorICAgICAgICAoX0Jhc2VOZXQuaXRlcl9zdWJu
ZXRzKToKKyAgICAgICAgKF9CYXNlTmV0Lm1hc2tlZCk6CisgICAgICAgIChfQmFzZU5ldC5zdWJu
ZXQpOgorICAgICAgICAoX0Jhc2VOZXQuc3VwZXJuZXQpOgorICAgICAgICAoX0Jhc2VWNCk6Cisg
ICAgICAgIChfQmFzZVY0Ll9faW5pdF9fKToKKyAgICAgICAgKF9CYXNlVjQuX2V4cGxvZGVfc2hv
cnRoYW5kX2lwX3N0cmluZyk6CisgICAgICAgIChfQmFzZVY0Ll9pcF9pbnRfZnJvbV9zdHJpbmcp
OgorICAgICAgICAoX0Jhc2VWNC5fcGFyc2Vfb2N0ZXQpOgorICAgICAgICAoX0Jhc2VWNC5fc3Ry
aW5nX2Zyb21faXBfaW50KToKKyAgICAgICAgKF9CYXNlVjQubWF4X3ByZWZpeGxlbik6CisgICAg
ICAgIChfQmFzZVY0LnBhY2tlZCk6CisgICAgICAgIChfQmFzZVY0LnZlcnNpb24pOgorICAgICAg
ICAoX0Jhc2VWNC5pc19yZXNlcnZlZCk6CisgICAgICAgIChfQmFzZVY0LmlzX3ByaXZhdGUpOgor
ICAgICAgICAoX0Jhc2VWNC5pc19tdWx0aWNhc3QpOgorICAgICAgICAoX0Jhc2VWNC5pc191bnNw
ZWNpZmllZCk6CisgICAgICAgIChfQmFzZVY0LmlzX2xvb3BiYWNrKToKKyAgICAgICAgKF9CYXNl
VjQuaXNfbGlua19sb2NhbCk6CisgICAgICAgIChJUHY0QWRkcmVzcyk6CisgICAgICAgIChJUHY0
QWRkcmVzcy5fX2luaXRfXyk6CisgICAgICAgIChJUHY0TmV0d29yayk6CisgICAgICAgIChJUHY0
TmV0d29yay5yZXByZXNlbnRzKToKKyAgICAgICAgKElQdjROZXR3b3JrLl9faW5pdF9fKToKKyAg
ICAgICAgKElQdjROZXR3b3JrLl9pc19ob3N0bWFzayk6CisgICAgICAgIChJUHY0TmV0d29yay5f
aXNfdmFsaWRfbmV0bWFzayk6CisgICAgICAgIChfQmFzZVY2KToKKyAgICAgICAgKF9CYXNlVjYu
X19pbml0X18pOgorICAgICAgICAoX0Jhc2VWNi5faXBfaW50X2Zyb21fc3RyaW5nKToKKyAgICAg
ICAgKF9CYXNlVjYuX3BhcnNlX2hleHRldCk6CisgICAgICAgIChfQmFzZVY2Ll9jb21wcmVzc19o
ZXh0ZXRzKToKKyAgICAgICAgKF9CYXNlVjYuX3N0cmluZ19mcm9tX2lwX2ludCk6CisgICAgICAg
IChfQmFzZVY2Ll9leHBsb2RlX3Nob3J0aGFuZF9pcF9zdHJpbmcpOgorICAgICAgICAoX0Jhc2VW
Ni5tYXhfcHJlZml4bGVuKToKKyAgICAgICAgKF9CYXNlVjYucGFja2VkKToKKyAgICAgICAgKF9C
YXNlVjYudmVyc2lvbik6CisgICAgICAgIChfQmFzZVY2LmlzX211bHRpY2FzdCk6CisgICAgICAg
IChfQmFzZVY2LmlzX3Jlc2VydmVkKToKKyAgICAgICAgKF9CYXNlVjYuaXNfdW5zcGVjaWZpZWQp
OgorICAgICAgICAoX0Jhc2VWNi5pc19sb29wYmFjayk6CisgICAgICAgIChfQmFzZVY2LmlzX2xp
bmtfbG9jYWwpOgorICAgICAgICAoX0Jhc2VWNi5pc19zaXRlX2xvY2FsKToKKyAgICAgICAgKF9C
YXNlVjYuaXNfcHJpdmF0ZSk6CisgICAgICAgIChfQmFzZVY2LmlwdjRfbWFwcGVkKToKKyAgICAg
ICAgKF9CYXNlVjYudGVyZWRvKToKKyAgICAgICAgKF9CYXNlVjYuc2l4dG9mb3VyKToKKyAgICAg
ICAgKElQdjZBZGRyZXNzKToKKyAgICAgICAgKElQdjZBZGRyZXNzLl9faW5pdF9fKToKKyAgICAg
ICAgKElQdjZOZXR3b3JrKToKKyAgICAgICAgKElQdjZOZXR3b3JrLnJlcHJlc2VudHMpOgorICAg
ICAgICAoSVB2Nk5ldHdvcmsuX19pbml0X18pOgorICAgICAgICAoSVB2Nk5ldHdvcmsuX2lzX3Zh
bGlkX25ldG1hc2spOgorICAgICAgICAoSVB2Nk5ldHdvcmsud2l0aF9uZXRtYXNrKToKKyAgICAg
ICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L2lwYWRkci9pcGFkZHJfdGVzdC5weTogQWRk
ZWQuCisgICAgICAgIChJcGFkZHJVbml0VGVzdCk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC5z
ZXRVcCk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZWFyRG93bik6CisgICAgICAgIChJcGFk
ZHJVbml0VGVzdC50ZXN0UmVwcik6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0QXV0b01h
c2tpbmcpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEFkZHJlc3NJbnRNYXRoKToKKyAg
ICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RJbnZhbGlkU3RyaW5ncyk6CisgICAgICAgIChJcGFk
ZHJVbml0VGVzdC50ZXN0SW52YWxpZFN0cmluZ3MuQXNzZXJ0SW52YWxpZElQKToKKyAgICAgICAg
KElwYWRkclVuaXRUZXN0LnRlc3RHZXROZXR3b3JrKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0
LnRlc3RCYWRWZXJzaW9uQ29tcGFyaXNvbik6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0
TWl4ZWRUeXBlQ29tcGFyaXNvbik6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0SXBGcm9t
SW50KToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RJcEZyb21QYWNrZWQpOgorICAgICAg
ICAoSXBhZGRyVW5pdFRlc3QudGVzdEdldElwKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRl
c3RHZXROZXRtYXNrKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RaZXJvTmV0bWFzayk6
CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0R2V0QnJvYWRjYXN0KToKKyAgICAgICAgKElw
YWRkclVuaXRUZXN0LnRlc3RHZXRQcmVmaXhsZW4pOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3Qu
dGVzdEdldFN1cGVybmV0KToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RHZXRTdXBlcm5l
dDMpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEdldFN1cGVybmV0NCk6CisgICAgICAg
IChJcGFkZHJVbml0VGVzdC50ZXN0SXRlclN1Ym5ldHMpOgorICAgICAgICAoSXBhZGRyVW5pdFRl
c3QudGVzdEl0ZXJIb3N0cyk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0RmFuY3lTdWJu
ZXR0aW5nKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RHZXRTdWJuZXQpOgorICAgICAg
ICAoSXBhZGRyVW5pdFRlc3QudGVzdEdldFN1Ym5ldEZvclNpbmdsZTMyKToKKyAgICAgICAgKElw
YWRkclVuaXRUZXN0LnRlc3RHZXRTdWJuZXRGb3JTaW5nbGUxMjgpOgorICAgICAgICAoSXBhZGRy
VW5pdFRlc3QudGVzdFN1Ym5ldDIpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdFN1Ym5l
dEZhaWxzRm9yTGFyZ2VDaWRyRGlmZik6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0U3Vw
ZXJuZXRGYWlsc0ZvckxhcmdlQ2lkckRpZmYpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVz
dFN1Ym5ldEZhaWxzRm9yTmVnYXRpdmVDaWRyRGlmZik6CisgICAgICAgIChJcGFkZHJVbml0VGVz
dC50ZXN0R2V0TnVtSG9zdHMpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdENvbnRhaW5z
KToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RCYWRBZGRyZXNzKToKKyAgICAgICAgKElw
YWRkclVuaXRUZXN0LnRlc3RCYWROZXRNYXNrKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRl
c3ROdGgpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEdldGl0ZW0pOgorICAgICAgICAo
SXBhZGRyVW5pdFRlc3QudGVzdEVxdWFsKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RO
b3RFcXVhbCk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0U2xhc2gzMkNvbnN0cnVjdG9y
KToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RTbGFzaDEyOENvbnN0cnVjdG9yKToKKyAg
ICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RTbGFzaDBDb25zdHJ1Y3Rvcik6CisgICAgICAgIChJ
cGFkZHJVbml0VGVzdC50ZXN0Q29sbGFwc2luZyk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50
ZXN0U3VtbWFyaXppbmcpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEFkZHJlc3NDb21w
YXJpc29uKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3ROZXR3b3JrQ29tcGFyaXNvbik6
CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0U3RyaWN0TmV0d29ya3MpOgorICAgICAgICAo
SXBhZGRyVW5pdFRlc3QudGVzdE92ZXJsYXBzKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRl
c3RFbWJlZGRlZElwdjQpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdElQdjZBZGRyZXNz
VG9vTGFyZ2UpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdElQVmVyc2lvbik6CisgICAg
ICAgIChJcGFkZHJVbml0VGVzdC50ZXN0TWF4UHJlZml4TGVuZ3RoKToKKyAgICAgICAgKElwYWRk
clVuaXRUZXN0LnRlc3RQYWNrZWQpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdElwU3Ry
RnJvbVByZWZpeGxlbik6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0SXBUeXBlKToKKyAg
ICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RSZXNlcnZlZElwdjQpOgorICAgICAgICAoSXBhZGRy
VW5pdFRlc3QudGVzdFJlc2VydmVkSXB2Nik6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0
SXB2NE1hcHBlZCk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0QWRkckV4Y2x1ZGUpOgor
ICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEhhc2gpOgorICAgICAgICAoSXBhZGRyVW5pdFRl
c3QudGVzdENvcHlDb25zdHJ1Y3Rvcik6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0Q29t
cHJlc3NJUHY2QWRkcmVzcyk6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0RXhwbG9kZVNo
b3J0SGFuZElwU3RyKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3RJbnRSZXByZXNlbnRh
dGlvbik6CisgICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0SGV4UmVwcmVzZW50YXRpb24pOgor
ICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdEJhY2t3YXJkc0NvbXBhYmlsaXR5KToKKyAgICAg
ICAgKElwYWRkclVuaXRUZXN0LnRlc3RGb3JjZVZlcnNpb24pOgorICAgICAgICAoSXBhZGRyVW5p
dFRlc3QudGVzdFdpdGhTdGFyKToKKyAgICAgICAgKElwYWRkclVuaXRUZXN0LnRlc3ROZXR3b3Jr
RWxlbWVudENhY2hpbmcpOgorICAgICAgICAoSXBhZGRyVW5pdFRlc3QudGVzdFRlcmVkbyk6Cisg
ICAgICAgIChJcGFkZHJVbml0VGVzdC50ZXN0c2l4dG9mb3VyKToKKyAgICAgICAgKiBXZWJQYWdl
UmVwbGF5L3RoaXJkX3BhcnR5L2lwYWRkci9zZXR1cC5weTogQWRkZWQuCisgICAgICAgICogV2Vi
UGFnZVJlcGxheS90aGlyZF9wYXJ0eS9pcGFkZHIvdGVzdC0ydG8zLnNoOiBBZGRlZC4KKyAgICAg
ICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0cDogQWRkZWQuCisgICAgICAgICog
V2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvTElDRU5TRTogQWRkZWQuCisgICAgICAg
ICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvUkVBRE1FLndlYi1wYWdlLXJlcGxh
eTogQWRkZWQuCisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvX19p
bml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRfcGFydHkvbmJo
dHRwL2NfemxpYi5weTogQWRkZWQuCisgICAgICAgIChfel9zdHJlYW0pOgorICAgICAgICAoQ29t
cHJlc3Nvcik6CisgICAgICAgIChDb21wcmVzc29yLl9faW5pdF9fKToKKyAgICAgICAgKENvbXBy
ZXNzb3IuX19jYWxsX18pOgorICAgICAgICAoQ29tcHJlc3Nvci5fX2RlbF9fKToKKyAgICAgICAg
KERlY29tcHJlc3Nvcik6CisgICAgICAgIChEZWNvbXByZXNzb3IuX19pbml0X18pOgorICAgICAg
ICAoRGVjb21wcmVzc29yLl9fY2FsbF9fKToKKyAgICAgICAgKERlY29tcHJlc3Nvci5fX2RlbF9f
KToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0cC9jbGllbnQucHk6
IEFkZGVkLgorICAgICAgICAoQ2xpZW50KToKKyAgICAgICAgKENsaWVudC5fX2luaXRfXyk6Cisg
ICAgICAgIChDbGllbnQucmVxX3N0YXJ0KToKKyAgICAgICAgKENsaWVudC5yZXFfYm9keSk6Cisg
ICAgICAgIChDbGllbnQucmVxX2RvbmUpOgorICAgICAgICAoQ2xpZW50LnJlc19ib2R5X3BhdXNl
KToKKyAgICAgICAgKENsaWVudC5faGFuZGxlX2Nvbm5lY3QpOgorICAgICAgICAoQ2xpZW50Ll9o
YW5kbGVfY29ubmVjdF9lcnJvcik6CisgICAgICAgIChDbGllbnQuX2Nvbm5fY2xvc2VkKToKKyAg
ICAgICAgKENsaWVudC5fcmV0cnkpOgorICAgICAgICAoQ2xpZW50Ll9yZXFfYm9keV9wYXVzZSk6
CisgICAgICAgIChDbGllbnQuX2lucHV0X3N0YXJ0KToKKyAgICAgICAgKENsaWVudC5faW5wdXRf
Ym9keSk6CisgICAgICAgIChDbGllbnQuX2lucHV0X2VuZCk6CisgICAgICAgIChDbGllbnQuX2lu
cHV0X2Vycm9yKToKKyAgICAgICAgKENsaWVudC5fb3V0cHV0KToKKyAgICAgICAgKENsaWVudC5f
aGFuZGxlX2Vycm9yKToKKyAgICAgICAgKF9IdHRwQ29ubmVjdGlvblBvb2wpOgorICAgICAgICAo
X0h0dHBDb25uZWN0aW9uUG9vbC5hdHRhY2gpOgorICAgICAgICAoX0h0dHBDb25uZWN0aW9uUG9v
bC5yZWxlYXNlKToKKyAgICAgICAgKF9IdHRwQ29ubmVjdGlvblBvb2wucmVsZWFzZS5pZGxlX2Ns
b3NlKToKKyAgICAgICAgKHRlc3RfY2xpZW50KToKKyAgICAgICAgKHRlc3RfY2xpZW50LnByaW50
ZXIpOgorICAgICAgICAodGVzdF9jbGllbnQucHJpbnRlci5ib2R5KToKKyAgICAgICAgKHRlc3Rf
Y2xpZW50LnByaW50ZXIuZG9uZSk6CisgICAgICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0
eS9uYmh0dHAvZXJyb3IucHk6IEFkZGVkLgorICAgICAgICAqIFdlYlBhZ2VSZXBsYXkvdGhpcmRf
cGFydHkvbmJodHRwL2h0dHBfY29tbW9uLnB5OiBBZGRlZC4KKyAgICAgICAgKGR1bW15KToKKyAg
ICAgICAgKGhlYWRlcl9kaWN0KToKKyAgICAgICAgKGdldF9oZHIpOgorICAgICAgICAoSHR0cE1l
c3NhZ2VIYW5kbGVyKToKKyAgICAgICAgKEh0dHBNZXNzYWdlSGFuZGxlci5mb3IpOgorICAgICAg
ICAoSHR0cE1lc3NhZ2VIYW5kbGVyLl9faW5pdF9fKToKKyAgICAgICAgKEh0dHBNZXNzYWdlSGFu
ZGxlci5faW5wdXRfc3RhcnQpOgorICAgICAgICAoSHR0cE1lc3NhZ2VIYW5kbGVyLl9pbnB1dF9i
b2R5KToKKyAgICAgICAgKEh0dHBNZXNzYWdlSGFuZGxlci5faW5wdXRfZW5kKToKKyAgICAgICAg
KEh0dHBNZXNzYWdlSGFuZGxlci5faW5wdXRfZXJyb3IpOgorICAgICAgICAoSHR0cE1lc3NhZ2VI
YW5kbGVyLl9oYW5kbGVfaW5wdXQpOgorICAgICAgICAoSHR0cE1lc3NhZ2VIYW5kbGVyLl9oYW5k
bGVfbm9ib2R5KToKKyAgICAgICAgKEh0dHBNZXNzYWdlSGFuZGxlci5faGFuZGxlX2Nsb3NlKToK
KyAgICAgICAgKEh0dHBNZXNzYWdlSGFuZGxlci5faGFuZGxlX2NodW5rZWQpOgorICAgICAgICAo
SHR0cE1lc3NhZ2VIYW5kbGVyLl9oYW5kbGVfY2h1bmtfbmV3KToKKyAgICAgICAgKEh0dHBNZXNz
YWdlSGFuZGxlci5faGFuZGxlX2NodW5rX2JvZHkpOgorICAgICAgICAoSHR0cE1lc3NhZ2VIYW5k
bGVyLl9oYW5kbGVfY2h1bmtfZG9uZSk6CisgICAgICAgIChIdHRwTWVzc2FnZUhhbmRsZXIuX2hh
bmRsZV9jb3VudGVkKToKKyAgICAgICAgKEh0dHBNZXNzYWdlSGFuZGxlci5fcGFyc2VfaGVhZGVy
cyk6CisgICAgICAgIChIdHRwTWVzc2FnZUhhbmRsZXIuX291dHB1dCk6CisgICAgICAgIChIdHRw
TWVzc2FnZUhhbmRsZXIuX2hhbmRsZV9lcnJvcik6CisgICAgICAgIChIdHRwTWVzc2FnZUhhbmRs
ZXIuX291dHB1dF9zdGFydCk6CisgICAgICAgIChIdHRwTWVzc2FnZUhhbmRsZXIuX291dHB1dF9i
b2R5KToKKyAgICAgICAgKEh0dHBNZXNzYWdlSGFuZGxlci5fb3V0cHV0X2VuZCk6CisgICAgICAg
ICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvcHVzaF90Y3AucHk6IEFkZGVkLgor
ICAgICAgICAoZXJyb3JfaGFuZGxlcik6CisgICAgICAgIChjb25uX2hhbmRsZXIpOgorICAgICAg
ICAocmVhZF9jYik6CisgICAgICAgIChjbG9zZV9jYik6CisgICAgICAgIChwYXVzZV9jYik6Cisg
ICAgICAgIChfVGNwQ29ubmVjdGlvbik6CisgICAgICAgIChfVGNwQ29ubmVjdGlvbi5mb3IpOgor
ICAgICAgICAoX1RjcENvbm5lY3Rpb24uX19pbml0X18pOgorICAgICAgICAoX1RjcENvbm5lY3Rp
b24uaGFuZGxlX3JlYWQpOgorICAgICAgICAoX1RjcENvbm5lY3Rpb24uaGFuZGxlX3dyaXRlKToK
KyAgICAgICAgKF9UY3BDb25uZWN0aW9uLmNvbm5fY2xvc2VkKToKKyAgICAgICAgKF9UY3BDb25u
ZWN0aW9uLndyaXRlKToKKyAgICAgICAgKHBhdXNlKToKKyAgICAgICAgKGNsb3NlKToKKyAgICAg
ICAgKHJlYWRhYmxlKToKKyAgICAgICAgKHdyaXRhYmxlKToKKyAgICAgICAgKGhhbmRsZV9lcnJv
cik6CisgICAgICAgIChjcmVhdGVfc2VydmVyKToKKyAgICAgICAgKGNyZWF0ZV9zZXJ2ZXIuX19p
bml0X18pOgorICAgICAgICAoY3JlYXRlX3NlcnZlci5oYW5kbGVfYWNjZXB0KToKKyAgICAgICAg
KGNyZWF0ZV9zZXJ2ZXIuaGFuZGxlX2Vycm9yKToKKyAgICAgICAgKGNyZWF0ZV9jbGllbnQpOgor
ICAgICAgICAoY3JlYXRlX2NsaWVudC5fX2luaXRfXyk6CisgICAgICAgIChjcmVhdGVfY2xpZW50
LmhhbmRsZV9jb25uZWN0KToKKyAgICAgICAgKGNyZWF0ZV9jbGllbnQuaGFuZGxlX3dyaXRlKToK
KyAgICAgICAgKGNyZWF0ZV9jbGllbnQuaGFuZGxlX2Vycm9yKToKKyAgICAgICAgKF9Bc3luY29y
ZUxvb3ApOgorICAgICAgICAoX0FzeW5jb3JlTG9vcC5fX2luaXRfXyk6CisgICAgICAgIChfQXN5
bmNvcmVMb29wLnJ1bik6CisgICAgICAgIChfQXN5bmNvcmVMb29wLnN0b3ApOgorICAgICAgICAo
X0FzeW5jb3JlTG9vcC5zY2hlZHVsZSk6CisgICAgICAgIChfQXN5bmNvcmVMb29wLnNjaGVkdWxl
LmNiKToKKyAgICAgICAgKF9Bc3luY29yZUxvb3Auc2NoZWR1bGUuZXZlbnRfaG9sZGVyKToKKyAg
ICAgICAgKF9Bc3luY29yZUxvb3Auc2NoZWR1bGUuZXZlbnRfaG9sZGVyLl9faW5pdF9fKToKKyAg
ICAgICAgKF9Bc3luY29yZUxvb3Auc2NoZWR1bGUuZXZlbnRfaG9sZGVyLmRlbGV0ZSk6CisgICAg
ICAgICogV2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvc2VydmVyLnB5OiBBZGRlZC4K
KyAgICAgICAgKFNlcnZlcik6CisgICAgICAgIChTZXJ2ZXIuX19pbml0X18pOgorICAgICAgICAo
U2VydmVyLmhhbmRsZV9jb25uZWN0aW9uKToKKyAgICAgICAgKEh0dHBTZXJ2ZXJDb25uZWN0aW9u
KToKKyAgICAgICAgKEh0dHBTZXJ2ZXJDb25uZWN0aW9uLl9faW5pdF9fKToKKyAgICAgICAgKEh0
dHBTZXJ2ZXJDb25uZWN0aW9uLnJlc19zdGFydCk6CisgICAgICAgIChIdHRwU2VydmVyQ29ubmVj
dGlvbi5yZXNfYm9keSk6CisgICAgICAgIChIdHRwU2VydmVyQ29ubmVjdGlvbi5yZXNfZG9uZSk6
CisgICAgICAgIChIdHRwU2VydmVyQ29ubmVjdGlvbi5yZXFfYm9keV9wYXVzZSk6CisgICAgICAg
IChIdHRwU2VydmVyQ29ubmVjdGlvbi5fcmVzX2JvZHlfcGF1c2UpOgorICAgICAgICAoSHR0cFNl
cnZlckNvbm5lY3Rpb24uX2Nvbm5fY2xvc2VkKToKKyAgICAgICAgKEh0dHBTZXJ2ZXJDb25uZWN0
aW9uLl9vdXRwdXQpOgorICAgICAgICAoSHR0cFNlcnZlckNvbm5lY3Rpb24uX2lucHV0X3N0YXJ0
KToKKyAgICAgICAgKEh0dHBTZXJ2ZXJDb25uZWN0aW9uLl9pbnB1dF9ib2R5KToKKyAgICAgICAg
KEh0dHBTZXJ2ZXJDb25uZWN0aW9uLl9pbnB1dF9lbmQpOgorICAgICAgICAoSHR0cFNlcnZlckNv
bm5lY3Rpb24uX2lucHV0X2Vycm9yKToKKyAgICAgICAgKEh0dHBTZXJ2ZXJDb25uZWN0aW9uLl9o
YW5kbGVfZXJyb3IpOgorICAgICAgICAodGVzdF9oYW5kbGVyKToKKyAgICAgICAgKiBXZWJQYWdl
UmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0cC9zcGR5X2NsaWVudC5weTogQWRkZWQuCisgICAgICAg
IChTcGR5Q2xpZW50KToKKyAgICAgICAgKFNwZHlDbGllbnQucmVxX3N0YXJ0KToKKyAgICAgICAg
KFNwZHlDb25uZWN0aW9uKToKKyAgICAgICAgKFNwZHlDb25uZWN0aW9uLl9faW5pdF9fKToKKyAg
ICAgICAgKFNwZHlDb25uZWN0aW9uLnJlcV9zdGFydCk6CisgICAgICAgIChTcGR5Q29ubmVjdGlv
bi5yZXFfc3RhcnQucmVxX2JvZHkpOgorICAgICAgICAoU3BkeUNvbm5lY3Rpb24ucmVxX3N0YXJ0
LnJlcV9kb25lKToKKyAgICAgICAgKFNwZHlDb25uZWN0aW9uLnJlcV9ib2R5KToKKyAgICAgICAg
KFNwZHlDb25uZWN0aW9uLnJlcV9kb25lKToKKyAgICAgICAgKFNwZHlDb25uZWN0aW9uLnJlc19i
b2R5X3BhdXNlKToKKyAgICAgICAgKFNwZHlDb25uZWN0aW9uLmhhbmRsZV9jb25uZWN0KToKKyAg
ICAgICAgKFNwZHlDb25uZWN0aW9uLmhhbmRsZV9jb25uZWN0X2Vycm9yKToKKyAgICAgICAgKFNw
ZHlDb25uZWN0aW9uLl9jb25uX2Nsb3NlZCk6CisgICAgICAgIChTcGR5Q29ubmVjdGlvbi5fcmVx
X2JvZHlfcGF1c2UpOgorICAgICAgICAoU3BkeUNvbm5lY3Rpb24uX2lucHV0X3N0YXJ0KToKKyAg
ICAgICAgKFNwZHlDb25uZWN0aW9uLl9pbnB1dF9ib2R5KToKKyAgICAgICAgKFNwZHlDb25uZWN0
aW9uLl9pbnB1dF9lbmQpOgorICAgICAgICAoU3BkeUNvbm5lY3Rpb24uX2lucHV0X2Vycm9yKToK
KyAgICAgICAgKFNwZHlDb25uZWN0aW9uLl9vdXRwdXQpOgorICAgICAgICAoU3BkeUNvbm5lY3Rp
b24uX2hhbmRsZV9lcnJvcik6CisgICAgICAgIChfU3BkeUNvbm5lY3Rpb25Qb29sKToKKyAgICAg
ICAgKF9TcGR5Q29ubmVjdGlvblBvb2wuZ2V0KToKKyAgICAgICAgKHRlc3RfY2xpZW50KToKKyAg
ICAgICAgKHRlc3RfY2xpZW50LnByaW50ZXIpOgorICAgICAgICAodGVzdF9jbGllbnQucHJpbnRl
ci5ib2R5KToKKyAgICAgICAgKHRlc3RfY2xpZW50LnByaW50ZXIuZG9uZSk6CisgICAgICAgICog
V2ViUGFnZVJlcGxheS90aGlyZF9wYXJ0eS9uYmh0dHAvc3BkeV9jb21tb24ucHk6IEFkZGVkLgor
ICAgICAgICAoU3BkeU1lc3NhZ2VIYW5kbGVyKToKKyAgICAgICAgKFNwZHlNZXNzYWdlSGFuZGxl
ci5mb3IpOgorICAgICAgICAoU3BkeU1lc3NhZ2VIYW5kbGVyLl9faW5pdF9fKToKKyAgICAgICAg
KFNwZHlNZXNzYWdlSGFuZGxlci5faW5wdXRfc3RhcnQpOgorICAgICAgICAoU3BkeU1lc3NhZ2VI
YW5kbGVyLl9pbnB1dF9ib2R5KToKKyAgICAgICAgKFNwZHlNZXNzYWdlSGFuZGxlci5faW5wdXRf
ZW5kKToKKyAgICAgICAgKFNwZHlNZXNzYWdlSGFuZGxlci5faW5wdXRfZXJyb3IpOgorICAgICAg
ICAoU3BkeU1lc3NhZ2VIYW5kbGVyLl9oYW5kbGVfaW5wdXQpOgorICAgICAgICAoU3BkeU1lc3Nh
Z2VIYW5kbGVyLl9wYXJzZV9oZHJzKToKKyAgICAgICAgKFNwZHlNZXNzYWdlSGFuZGxlci5fb3V0
cHV0KToKKyAgICAgICAgKFNwZHlNZXNzYWdlSGFuZGxlci5faGFuZGxlX2Vycm9yKToKKyAgICAg
ICAgKFNwZHlNZXNzYWdlSGFuZGxlci5fc2VyX3N5bl9mcmFtZSk6CisgICAgICAgIChTcGR5TWVz
c2FnZUhhbmRsZXIuX3Nlcl9jdGxfZnJhbWUpOgorICAgICAgICAoU3BkeU1lc3NhZ2VIYW5kbGVy
Ll9zZXJfZGF0YV9mcmFtZSk6CisgICAgICAgIChTcGR5TWVzc2FnZUhhbmRsZXIuX3Nlcl9oZHJz
KToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RoaXJkX3BhcnR5L25iaHR0cC9zcGR5X3NlcnZl
ci5weTogQWRkZWQuCisgICAgICAgIChTcGR5U2VydmVyKToKKyAgICAgICAgKFNwZHlTZXJ2ZXIu
X19pbml0X18pOgorICAgICAgICAoU3BkeVNlcnZlci5oYW5kbGVfY29ubmVjdGlvbik6CisgICAg
ICAgIChTcGR5U2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgIChTcGR5U2VydmVyQ29ubmVjdGlv
bi5fX2luaXRfXyk6CisgICAgICAgIChTcGR5U2VydmVyQ29ubmVjdGlvbi5yZXNfc3RhcnQpOgor
ICAgICAgICAoU3BkeVNlcnZlckNvbm5lY3Rpb24ucmVzX3N0YXJ0LnJlc19ib2R5KToKKyAgICAg
ICAgKFNwZHlTZXJ2ZXJDb25uZWN0aW9uLnJlc19zdGFydC5yZXNfZG9uZSk6CisgICAgICAgIChT
cGR5U2VydmVyQ29ubmVjdGlvbi5yZXNfYm9keSk6CisgICAgICAgIChTcGR5U2VydmVyQ29ubmVj
dGlvbi5yZXNfZG9uZSk6CisgICAgICAgIChTcGR5U2VydmVyQ29ubmVjdGlvbi5yZXFfYm9keV9w
YXVzZSk6CisgICAgICAgIChTcGR5U2VydmVyQ29ubmVjdGlvbi5fcmVzX2JvZHlfcGF1c2UpOgor
ICAgICAgICAoU3BkeVNlcnZlckNvbm5lY3Rpb24uX2Nvbm5fY2xvc2VkKToKKyAgICAgICAgKFNw
ZHlTZXJ2ZXJDb25uZWN0aW9uLl9oYXNfd3JpdGVfZGF0YSk6CisgICAgICAgIChTcGR5U2VydmVy
Q29ubmVjdGlvbi5fd3JpdGVfZnJhbWVfY2FsbGJhY2spOgorICAgICAgICAoU3BkeVNlcnZlckNv
bm5lY3Rpb24uX3NjaGVkdWxlX3dyaXRlKToKKyAgICAgICAgKFNwZHlTZXJ2ZXJDb25uZWN0aW9u
Ll9xdWV1ZV9mcmFtZSk6CisgICAgICAgIChTcGR5U2VydmVyQ29ubmVjdGlvbi5fb3V0cHV0KToK
KyAgICAgICAgKFNwZHlTZXJ2ZXJDb25uZWN0aW9uLl9pbnB1dF9zdGFydCk6CisgICAgICAgIChT
cGR5U2VydmVyQ29ubmVjdGlvbi5faW5wdXRfc3RhcnQucmVzX3N0YXJ0KToKKyAgICAgICAgKFNw
ZHlTZXJ2ZXJDb25uZWN0aW9uLl9pbnB1dF9ib2R5KToKKyAgICAgICAgKFNwZHlTZXJ2ZXJDb25u
ZWN0aW9uLl9pbnB1dF9lbmQpOgorICAgICAgICAoU3BkeVNlcnZlckNvbm5lY3Rpb24uX2lucHV0
X2Vycm9yKToKKyAgICAgICAgKFNwZHlTZXJ2ZXJDb25uZWN0aW9uLl9oYW5kbGVfZXJyb3IpOgor
ICAgICAgICAodGVzdF9oYW5kbGVyKToKKyAgICAgICAgKiBXZWJQYWdlUmVwbGF5L3RyYWZmaWNz
aGFwZXIucHk6IEFkZGVkLgorICAgICAgICAoVHJhZmZpY1NoYXBlckV4Y2VwdGlvbik6CisgICAg
ICAgIChCYW5kd2lkdGhWYWx1ZUVycm9yKToKKyAgICAgICAgKEJhbmR3aWR0aFZhbHVlRXJyb3Iu
X19pbml0X18pOgorICAgICAgICAoQmFuZHdpZHRoVmFsdWVFcnJvci5fX3N0cl9fKToKKyAgICAg
ICAgKFRyYWZmaWNTaGFwZXIpOgorICAgICAgICAoVHJhZmZpY1NoYXBlci5fX2luaXRfXyk6Cisg
ICAgICAgIChUcmFmZmljU2hhcGVyLl9fZW50ZXJfXyk6CisgICAgICAgIChUcmFmZmljU2hhcGVy
Ll9fZXhpdF9fKToKKyAgICAgICAgKFRyYWZmaWNTaGFwZXIuX2RlbGV0ZV9ydWxlcyk6CisgICAg
ICAgICogV2ViUGFnZVJlcGxheS90cmFmZmljc2hhcGVyX3Rlc3QucHk6IEFkZGVkLgorICAgICAg
ICAoR2V0RWxhcHNlZE1zKToKKyAgICAgICAgKFRyYWZmaWNTaGFwZXJUZXN0KToKKyAgICAgICAg
KFRyYWZmaWNTaGFwZXJUZXN0LnRlc3RCYWRCYW5kd2lkdGhSYWlzZXMpOgorICAgICAgICAoVGlt
ZWRVZHBIYW5kbGVyKToKKyAgICAgICAgKFRpbWVkVWRwSGFuZGxlci5oYW5kbGUpOgorICAgICAg
ICAoVGltZWRUY3BIYW5kbGVyKToKKyAgICAgICAgKFRpbWVkVGNwSGFuZGxlci5oYW5kbGUpOgor
ICAgICAgICAoVGltZWRVZHBTZXJ2ZXIpOgorICAgICAgICAoVGltZWRVZHBTZXJ2ZXIuX19pbml0
X18pOgorICAgICAgICAoVGltZWRVZHBTZXJ2ZXIuY2xlYW51cCk6CisgICAgICAgIChUaW1lZFRj
cFNlcnZlcik6CisgICAgICAgIChUaW1lZFRjcFNlcnZlci5fX2luaXRfXyk6CisgICAgICAgIChU
aW1lZFRjcFNlcnZlci5jbGVhbnVwKToKKyAgICAgICAgKFRjcFRlc3RTb2NrZXRDcmVhdG9yKToK
KyAgICAgICAgKFRjcFRlc3RTb2NrZXRDcmVhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKFRjcFRl
c3RTb2NrZXRDcmVhdG9yLl9fZW50ZXJfXyk6CisgICAgICAgIChUY3BUZXN0U29ja2V0Q3JlYXRv
ci5fX2V4aXRfXyk6CisgICAgICAgIChUaW1lZFRlc3RDYXNlKToKKyAgICAgICAgKFRpbWVkVGVz
dENhc2UuYXNzZXJ0QWxtb3N0RXF1YWwpOgorICAgICAgICAoVGNwVHJhZmZpY1NoYXBlclRlc3Qp
OgorICAgICAgICAoVGNwVHJhZmZpY1NoYXBlclRlc3Quc2V0VXApOgorICAgICAgICAoVGNwVHJh
ZmZpY1NoYXBlclRlc3QuVHJhZmZpY1NoYXBlcik6CisgICAgICAgIChUY3BUcmFmZmljU2hhcGVy
VGVzdC5HZXRUY3BTZW5kVGltZU1zKToKKyAgICAgICAgKFRjcFRyYWZmaWNTaGFwZXJUZXN0Lkdl
dFRjcFJlY2VpdmVUaW1lTXMpOgorICAgICAgICAoVGNwVHJhZmZpY1NoYXBlclRlc3QudGVzdFRj
cENvbm5lY3RUb0lwKToKKyAgICAgICAgKFRjcFRyYWZmaWNTaGFwZXJUZXN0LnRlc3RUY3BVcGxv
YWRTaGFwaW5nKToKKyAgICAgICAgKFRjcFRyYWZmaWNTaGFwZXJUZXN0LnRlc3RUY3BEb3dubG9h
ZFNoYXBpbmcpOgorICAgICAgICAoVGNwVHJhZmZpY1NoYXBlclRlc3QudGVzdFRjcEludGVybGVh
dmVkRG93bmxvYWRzKToKKyAgICAgICAgKFVkcFRyYWZmaWNTaGFwZXJUZXN0KToKKyAgICAgICAg
KFVkcFRyYWZmaWNTaGFwZXJUZXN0LnNldFVwKToKKyAgICAgICAgKFVkcFRyYWZmaWNTaGFwZXJU
ZXN0LlRyYWZmaWNTaGFwZXIpOgorICAgICAgICAoVWRwVHJhZmZpY1NoYXBlclRlc3QuR2V0VWRw
U2VuZFJlY2VpdmVUaW1lc01zKToKKyAgICAgICAgKFVkcFRyYWZmaWNTaGFwZXJUZXN0LnRlc3RV
ZHBEZWxheSk6CisgICAgICAgIChVZHBUcmFmZmljU2hhcGVyVGVzdC50ZXN0VWRwSW50ZXJsZWF2
ZWREZWxheSk6CisgICAgICAgIChUY3BBbmRVZHBUcmFmZmljU2hhcGVyVGVzdCk6CisKIDIwMTIt
MDQtMTMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ2hyb21p
dW0gcGVyZiBib3RzIHNob3VsZCBub3QgYnVpbGQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140122</attachid>
            <date>2012-05-03 16:19:13 -0700</date>
            <delta_ts>2012-05-10 15:13:50 -0700</delta_ts>
            <desc>work in progress (got rid of the useless change log entry)</desc>
            <filename>wip84008c</filename>
            <type>text/plain</type>
            <size>14113</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUmVzb3VyY2VMb2FkRGVsZWdh
dGUubW0JKHJldmlzaW9uIDExNDA5MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9SZXNv
dXJjZUxvYWREZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNywxMSBAQAog
ICAgIHJldHVybiBAIjx1bmtub3duPiI7CiB9CiAKK0JPT0wgaXNMb2NhbGhvc3QoY29uc3QgTlNT
dHJpbmcqIGhvc3QpCit7CisgICAgcmV0dXJuIE5TT3JkZXJlZFNhbWUgPT0gW2hvc3QgY29tcGFy
ZTpAIjEyNy4wLjAuMSJdIHx8IE5TT3JkZXJlZFNhbWUgPT0gW2hvc3QgY2FzZUluc2Vuc2l0aXZl
Q29tcGFyZTpAImxvY2FsaG9zdCJdOworfQorCiAtKE5TVVJMUmVxdWVzdCAqKXdlYlZpZXc6IChX
ZWJWaWV3ICopd3YgcmVzb3VyY2U6aWRlbnRpZmllciB3aWxsU2VuZFJlcXVlc3Q6IChOU1VSTFJl
cXVlc3QgKilyZXF1ZXN0IHJlZGlyZWN0UmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZWRpcmVj
dFJlc3BvbnNlIGZyb21EYXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZQogewog
ICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MoKSkgewpAQCAtMTQ5LDEzICsxNTQsMTQgQEAKIAogICAgIE5TVVJMICp1cmwgPSBb
cmVxdWVzdCBVUkxdOwogICAgIE5TU3RyaW5nICpob3N0ID0gW3VybCBob3N0XTsKLSAgICBpZiAo
aG9zdAotICAgICAgICAmJiAoTlNPcmRlcmVkU2FtZSA9PSBbW3VybCBzY2hlbWVdIGNhc2VJbnNl
bnNpdGl2ZUNvbXBhcmU6QCJodHRwIl0gfHwgTlNPcmRlcmVkU2FtZSA9PSBbW3VybCBzY2hlbWVd
IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJodHRwcyJdKQotICAgICAgICAmJiBOU09yZGVyZWRT
YW1lICE9IFtob3N0IGNvbXBhcmU6QCIxMjcuMC4wLjEiXQotICAgICAgICAmJiBOU09yZGVyZWRT
YW1lICE9IFtob3N0IGNvbXBhcmU6QCIyNTUuMjU1LjI1NS4yNTUiXSAvLyB1c2VkIGluIHNvbWUg
dGVzdHMgdGhhdCBleHBlY3QgdG8gZ2V0IGJhY2sgYW4gZXJyb3IKLSAgICAgICAgJiYgTlNPcmRl
cmVkU2FtZSAhPSBbaG9zdCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAibG9jYWxob3N0Il0pIHsK
LSAgICAgICAgcHJpbnRmKCJCbG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgJXNcbiIsIFtb
dXJsIGFic29sdXRlU3RyaW5nXSBjU3RyaW5nVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZ10pOwotICAgICAgICByZXR1cm4gbmlsOworICAgIGlmIChob3N0ICYmIChOU09yZGVyZWRT
YW1lID09IFtbdXJsIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImh0dHAiXSB8fCBO
U09yZGVyZWRTYW1lID09IFtbdXJsIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImh0
dHBzIl0pKSB7CisgICAgICAgIE5TVVJMICp0ZXN0VXJsID0gZG9uZSA/IDAgOiBbW05TVVJMIGFs
bG9jXSBpbml0V2l0aFN0cmluZzogW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPnRlc3RQYXRoT3JVUkwoKS5jX3N0cigpXV07CisgICAgICAgIE5T
U3RyaW5nICp0ZXN0VXJsSG9zdCA9IHRlc3RVcmwgPyBbdGVzdFVybCBob3N0XSA6IDA7CisgICAg
ICAgIGlmICghdGVzdFVybEhvc3QgfHwgKGlzTG9jYWxob3N0KHRlc3RVcmxIb3N0KSAmJiAoIWlz
TG9jYWxob3N0KGhvc3QpCisgICAgICAgICAgICB8fCBbaG9zdCBjb21wYXJlOkAiMjU1LjI1NS4y
NTUuMjU1Il0pKSkgeyAvLyB1c2VkIGluIHNvbWUgdGVzdHMgdGhhdCBleHBlY3QgdG8gZ2V0IGJh
Y2sgYW4gZXJyb3IKKyAgICAgICAgICAgIHByaW50ZigiQmxvY2tlZCBhY2Nlc3MgdG8gZXh0ZXJu
YWwgVVJMICVzXG4iLCBbW3VybCBhYnNvbHV0ZVN0cmluZ10gY1N0cmluZ1VzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAg
IH0KICAgICB9CiAKICAgICBpZiAoZGlzYWxsb3dlZFVSTHMgJiYgQ0ZTZXRDb250YWluc1ZhbHVl
KGRpc2FsbG93ZWRVUkxzLCB1cmwpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC93ZWJraXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkJKHJldmlzaW9uIDExNTg0MSkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC01MTksNiArNTE5LDggQEAKICAgICBkZWYgX2NvbW1hbmRfZnJvbV9kcml2ZXJf
aW5wdXQoc2VsZiwgZHJpdmVyX2lucHV0KToKICAgICAgICAgaWYgc2VsZi5pc19odHRwX3Rlc3Qo
ZHJpdmVyX2lucHV0LnRlc3RfbmFtZSk6CiAgICAgICAgICAgICBjb21tYW5kID0gc2VsZi50ZXN0
X3RvX3VyaShkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQorICAgICAgICBlbGlmIGRyaXZlcl9pbnB1
dC50ZXN0X25hbWUuc3RhcnRzd2l0aCgnaHR0cDovLycpIG9yIGRyaXZlcl9pbnB1dC50ZXN0X25h
bWUuc3RhcnRzd2l0aCgnaHR0cHM6Ly8nKToKKyAgICAgICAgICAgIGNvbW1hbmQgPSBkcml2ZXJf
aW5wdXQudGVzdF9uYW1lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb21tYW5kID0gc2Vs
Zi5fcG9ydC5hYnNwYXRoX2Zvcl90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCiAgICAgICAg
ICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CkBAIC01OTEsNiArNTkzLDggQEAKIAog
ICAgIGRlZiBfcHJvY2Vzc19zdGRvdXRfbGluZShzZWxmLCBibG9jaywgbGluZSk6CiAgICAgICAg
IGlmIChzZWxmLl9yZWFkX2hlYWRlcihibG9jaywgbGluZSwgJ0NvbnRlbnQtVHlwZTogJywgJ2Nv
bnRlbnRfdHlwZScpCisgICAgICAgICAgICBvciBzZWxmLl9yZWFkX2hlYWRlcihibG9jaywgbGlu
ZSwgJ1gtV2ViS2l0VGVzdFJ1bm5lci1TdGFydFRpbWU6ICcsICdzdGFydF90aW1lJywgaW50KQor
ICAgICAgICAgICAgb3Igc2VsZi5fcmVhZF9oZWFkZXIoYmxvY2ssIGxpbmUsICdYLVdlYktpdFRl
c3RSdW5uZXItRW5kVGltZTogJywgJ2VuZF90aW1lJywgaW50KQogICAgICAgICAgICAgb3Igc2Vs
Zi5fcmVhZF9oZWFkZXIoYmxvY2ssIGxpbmUsICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAn
LCAnZW5jb2RpbmcnKQogICAgICAgICAgICAgb3Igc2VsZi5fcmVhZF9oZWFkZXIoYmxvY2ssIGxp
bmUsICdDb250ZW50LUxlbmd0aDogJywgJ19jb250ZW50X2xlbmd0aCcsIGludCkKICAgICAgICAg
ICAgIG9yIHNlbGYuX3JlYWRfaGVhZGVyKGJsb2NrLCBsaW5lLCAnQWN0dWFsSGFzaDogJywgJ2Nv
bnRlbnRfaGFzaCcpKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2Vf
dGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5CShyZXZpc2lvbiAxMTU4
NDEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0
c3J1bm5lci5weQkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogZnJvbSB3ZWJraXRw
eS5jb21tb24ubmV0LmZpbGVfdXBsb2FkZXIgaW1wb3J0IEZpbGVVcGxvYWRlcgogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMudmlld3MgaW1wb3J0IHByaW50aW5nCiBmcm9tIHdlYmtpdHB5LnBl
cmZvcm1hbmNlX3Rlc3RzLnBlcmZ0ZXN0IGltcG9ydCBQZXJmVGVzdEZhY3RvcnkKK2Zyb20gd2Vi
a2l0cHkucGVyZm9ybWFuY2VfdGVzdHMucGVyZnRlc3QgaW1wb3J0IFJlcGxheVBlcmZUZXN0CiAK
IAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtNTEsNiArNTIsNyBAQAog
ICAgIF9FWElUX0NPREVfQkFEX0JVSUxEID0gLTEKICAgICBfRVhJVF9DT0RFX0JBRF9KU09OID0g
LTIKICAgICBfRVhJVF9DT0RFX0ZBSUxFRF9VUExPQURJTkcgPSAtMworICAgIF9FWElUX0NPREVf
QkFEX1BSRVBBUkFUSU9OID0gLTQKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzPU5vbmUs
IHBvcnQ9Tm9uZSk6CiAgICAgICAgIHNlbGYuX29wdGlvbnMsIHNlbGYuX2FyZ3MgPSBQZXJmVGVz
dHNSdW5uZXIuX3BhcnNlX2FyZ3MoYXJncykKQEAgLTEwNCw3ICsxMDYsNyBAQAogICAgICAgICAi
IiJSZXR1cm4gdGhlIGxpc3Qgb2YgdGVzdHMgZm91bmQuIiIiCiAKICAgICAgICAgZGVmIF9pc190
ZXN0X2ZpbGUoZmlsZXN5c3RlbSwgZGlybmFtZSwgZmlsZW5hbWUpOgotICAgICAgICAgICAgcmV0
dXJuIGZpbGVzeXN0ZW0uc3BsaXRleHQoZmlsZW5hbWUpWzFdIGluIFsnLmh0bWwnLCAnLnN2Zydd
CisgICAgICAgICAgICByZXR1cm4gZmlsZXN5c3RlbS5zcGxpdGV4dChmaWxlbmFtZSlbMV0gaW4g
WycuaHRtbCcsICcuc3ZnJywgJy5yZXBsYXknXQogCiAgICAgICAgIGZpbGVzeXN0ZW0gPSBzZWxm
Ll9ob3N0LmZpbGVzeXN0ZW0KIApAQCAtMTIyLDcgKzEyNCw4IEBACiAgICAgICAgICAgICByZWxh
dGl2ZV9wYXRoID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV9wZXJmX3Rlc3RfZmlsZW5hbWUocGF0aCku
cmVwbGFjZSgnXFwnLCAnLycpCiAgICAgICAgICAgICBpZiBzZWxmLl9wb3J0LnNraXBzX3BlcmZf
dGVzdChyZWxhdGl2ZV9wYXRoKToKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAg
ICAgdGVzdHMuYXBwZW5kKFBlcmZUZXN0RmFjdG9yeS5jcmVhdGVfcGVyZl90ZXN0KHJlbGF0aXZl
X3BhdGgsIHBhdGgpKQorICAgICAgICAgICAgdGVzdCA9IFBlcmZUZXN0RmFjdG9yeS5jcmVhdGVf
cGVyZl90ZXN0KHJlbGF0aXZlX3BhdGgsIHBhdGgpCisgICAgICAgICAgICB0ZXN0cy5hcHBlbmQo
dGVzdCkKIAogICAgICAgICByZXR1cm4gdGVzdHMKIApAQCAtMTMxLDEyICsxMzQsMTUgQEAKICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoIkJ1aWxkIG5vdCB1cCB0byBkYXRlIGZvciAlcyIgJSBzZWxm
Ll9wb3J0Ll9wYXRoX3RvX2RyaXZlcigpKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX0VYSVRf
Q09ERV9CQURfQlVJTEQKIAotICAgICAgICAjIFdlIHdyYXAgYW55IHBhcnRzIG9mIHRoZSBydW4g
dGhhdCBhcmUgc2xvdyBvciBsaWtlbHkgdG8gcmFpc2UgZXhjZXB0aW9ucwotICAgICAgICAjIGlu
IGEgdHJ5L2ZpbmFsbHkgdG8gZW5zdXJlIHRoYXQgd2UgY2xlYW4gdXAgdGhlIGxvZ2dpbmcgY29u
ZmlndXJhdGlvbi4KLSAgICAgICAgdW5leHBlY3RlZCA9IC0xCiAgICAgICAgIHRlc3RzID0gc2Vs
Zi5fY29sbGVjdF90ZXN0cygpCi0gICAgICAgIHVuZXhwZWN0ZWQgPSBzZWxmLl9ydW5fdGVzdHNf
c2V0KHNvcnRlZChsaXN0KHRlc3RzKSwga2V5PWxhbWJkYSB0ZXN0OiB0ZXN0LnRlc3RfbmFtZSgp
KSwgc2VsZi5fcG9ydCkKIAorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAg
IGlmIG5vdCB0ZXN0LnByZXBhcmUoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucy50aW1lX291dF9t
cywgc2VsZi5faG9zdC5maWxlc3lzdGVtKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5f
RVhJVF9DT0RFX0JBRF9QUkVQQVJBVElPTgorCisgICAgICAgIHVuZXhwZWN0ZWQgPSAtMQorIyAg
ICAgICAgdW5leHBlY3RlZCA9IHNlbGYuX3J1bl90ZXN0c19zZXQoc29ydGVkKGxpc3QodGVzdHMp
LCBrZXk9bGFtYmRhIHRlc3Q6IHRlc3QudGVzdF9uYW1lKCkpLCBzZWxmLl9wb3J0KQorCiAgICAg
ICAgIG9wdGlvbnMgPSBzZWxmLl9vcHRpb25zCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMub3V0
cHV0X2pzb25fcGF0aDoKICAgICAgICAgICAgICMgRklYTUU6IEFkZCAtLWJyYW5jaCBvciBhdXRv
LWRldGVjdCB0aGUgYnJhbmNoIHdlJ3JlIGluCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3QucHkJKHJldmlzaW9uIDExNTg0
MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxOSBAQAogIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAK
K2ltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBtYXRoCiBpbXBvcnQgcmUKK2lt
cG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKIAorIyBJbXBvcnQgZm9y
IGF1dG8taW5zdGFsbAoraW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC53
ZWJwYWdlcmVwbGF5CisKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZHJpdmVyIGlt
cG9ydCBEcml2ZXJJbnB1dAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5kcml2ZXIg
aW1wb3J0IERyaXZlck91dHB1dAogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKQEAgLTQ5LDE0ICs1NywxNyBAQAogICAgIGRlZiBwYXRoX29yX3VybChzZWxmKToKICAgICAg
ICAgcmV0dXJuIHNlbGYuX3BhdGhfb3JfdXJsCiAKLSAgICBkZWYgcnVuKHNlbGYsIGRyaXZlciwg
dGltZW91dF9tcyk6Ci0gICAgICAgIG91dHB1dCA9IGRyaXZlci5ydW5fdGVzdChEcml2ZXJJbnB1
dChzZWxmLnBhdGhfb3JfdXJsKCksIHRpbWVvdXRfbXMsIE5vbmUsIEZhbHNlKSkKKyAgICBkZWYg
cHJlcGFyZShzZWxmLCBwb3J0LCB0aW1lX291dF9tcywgZmlsZXN5c3RlbSk6CisgICAgICAgIHJl
dHVybiBUcnVlCisKKyAgICBkZWYgcnVuKHNlbGYsIGRyaXZlciwgdGltZV9vdXRfbXMpOgorICAg
ICAgICBvdXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQoc2VsZi5wYXRoX29yX3Vy
bCgpLCB0aW1lX291dF9tcywgTm9uZSwgRmFsc2UpKQogICAgICAgICBpZiBzZWxmLnJ1bl9mYWls
ZWQob3V0cHV0KToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHJldHVybiBzZWxm
LnBhcnNlX291dHB1dChvdXRwdXQpCiAKICAgICBkZWYgcnVuX2ZhaWxlZChzZWxmLCBvdXRwdXQp
OgotICAgICAgICBpZiBvdXRwdXQudGV4dCA9PSBOb25lIG9yIG91dHB1dC5lcnJvcjoKKyAgICAg
ICAgaWYgbm90IG91dHB1dCBvciBvdXRwdXQudGV4dCA9PSBOb25lIG9yIG91dHB1dC5lcnJvcjoK
ICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxpZiBvdXRwdXQudGltZW91dDoKICAgICAgICAg
ICAgIF9sb2cuZXJyb3IoJ3RpbWVvdXQ6ICVzJyAlIHNlbGYudGVzdF9uYW1lKCkpCkBAIC02NSw3
ICs3Niw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAg
ICAgICBpZiBvdXRwdXQuZXJyb3I6CisgICAgICAgIGlmIG91dHB1dCBhbmQgb3V0cHV0LmVycm9y
OgogICAgICAgICAgICAgX2xvZy5lcnJvcignZXJyb3I6ICVzXG4lcycgJSAoc2VsZi50ZXN0X25h
bWUoKSwgb3V0cHV0LmVycm9yKSkKIAogICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtMTUxLDExICsx
NjIsMTQgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9uYW1lLCBwYXRoX29yX3VybCk6
CiAgICAgICAgIHN1cGVyKFBhZ2VMb2FkaW5nUGVyZlRlc3QsIHNlbGYpLl9faW5pdF9fKHRlc3Rf
bmFtZSwgcGF0aF9vcl91cmwpCiAKLSAgICBkZWYgcnVuKHNlbGYsIGRyaXZlciwgdGltZW91dF9t
cyk6CisgICAgZGVmIHJ1bl9zaW5nbGUoc2VsZiwgZHJpdmVyLCB0aW1lX291dF9tcyk6CisgICAg
ICAgIHJldHVybiBkcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQoc2VsZi5wYXRoX29yX3VybCgp
LCB0aW1lX291dF9tcywgTm9uZSwgRmFsc2UpKQorCisgICAgZGVmIHJ1bihzZWxmLCBkcml2ZXIs
IHRpbWVfb3V0X21zKToKICAgICAgICAgdGVzdF90aW1lcyA9IFtdCiAKICAgICAgICAgZm9yIGkg
aW4gcmFuZ2UoMCwgMjApOgotICAgICAgICAgICAgb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KERy
aXZlcklucHV0KHNlbGYucGF0aF9vcl91cmwoKSwgdGltZW91dF9tcywgTm9uZSwgRmFsc2UpKQor
ICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5ydW5fc2luZ2xlKGRyaXZlciwgdGltZV9vdXRfbXMp
CiAgICAgICAgICAgICBpZiBzZWxmLnJ1bl9mYWlsZWQob3V0cHV0KToKICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9uZQogICAgICAgICAgICAgaWYgaSA9PSAwOgpAQCAtMTg1LDExICsxOTksMTEx
IEBACiAgICAgICAgIHJldHVybiB7c2VsZi50ZXN0X25hbWUoKTogcmVzdWx0c30KIAogCitjbGFz
cyBSZXBsYXlTZXJ2ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJjaGl2ZSwg
cmVjb3JkKToKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKworICAgICAgICAjIEZJWE1F
OiBTaG91bGQgZXJyb3IgaWYgbG9jYWwgcHJveHkgaXNuJ3Qgc2V0IHRvIGZvcndhcmQgcmVxdWVz
dHMgdG8gbG9jYWxob3N0OjgwODAgYW5kIGxvY2FsaG9zdDo4NDEzCisKKyAgICAgICAgcmVwbGF5
X3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHdlYmtpdHB5LnRoaXJkcGFydHku
YXV0b2luc3RhbGxlZC53ZWJwYWdlcmVwbGF5Ll9fZmlsZV9fKSwgJ3JlcGxheS5weScpCisgICAg
ICAgIGFyZ3MgPSBbJ3B5dGhvbicsIHJlcGxheV9wYXRoLCAnLS1uby1kbnNfZm9yd2FyZGluZycs
ICctLXBvcnQnLCAnODA4MCcsICctLXNzbF9wb3J0JywgJzg0MTMnXQorICAgICAgICBpZiByZWNv
cmQ6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLS1yZWNvcmQnKQorICAgICAgICBhcmdzLmFw
cGVuZChhcmNoaXZlKQorCisgICAgICAgIHByaW50IGFyZ3MKKyAgICAgICAgc2VsZi5fcHJvY2Vz
cyA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKworICAg
IGRlZiB3YWl0X3VudGlsX3JlYWR5KHNlbGYpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAg
ICAgICAgbGluZSA9IHNlbGYuX3Byb2Nlc3Muc3RkZXJyLnJlYWRsaW5lKCkKKyAgICAgICAgICAg
IHByaW50IGxpbmUKKyAgICAgICAgICAgIGlmICJTdGFydGVkIEhUVFAgc2VydmVyIG9uIiBpbiBs
aW5lIG9yIHNlbGYuX3Byb2Nlc3MucG9sbCgpICE9IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGlmIHNl
bGYuX3Byb2Nlc3M6CisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzLnNlbmRfc2lnbmFsKHNpZ25h
bC5TSUdJTlQpCisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQorICAgICAgICBzZWxm
Ll9wcm9jZXNzID0gTm9uZQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYu
c3RvcCgpCisKKworY2xhc3MgUmVwbGF5UGVyZlRlc3QoUGFnZUxvYWRpbmdQZXJmVGVzdCk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfbmFtZSwgcGF0aF9vcl91cmwpOgorICAgICAgICBz
dXBlcihSZXBsYXlQZXJmVGVzdCwgc2VsZikuX19pbml0X18odGVzdF9uYW1lLCBwYXRoX29yX3Vy
bCkKKworICAgIGRlZiBfc3RhcnRfcmVwbGF5X3NlcnZlcihzZWxmLCBhcmNoaXZlLCByZWNvcmQp
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gUmVwbGF5U2VydmVyKGFyY2hpdmUs
IHJlY29yZCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6CisgICAgICAgICAgICBp
ZiBlcnJvci5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgX2xvZy5lcnJv
cigiUmVwbGF5IHRlc3RzIHJlcXVpcmUgd2ViLXBhZ2UtcmVwbGF5LiIpCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yCisKKyAgICBkZWYgcHJlcGFyZShzZWxm
LCBwb3J0LCB0aW1lX291dF9tcywgZmlsZXN5c3RlbSk6CisgICAgICAgIHBhdGhfd2l0aG91dF9l
eHQgPSBmaWxlc3lzdGVtLnNwbGl0ZXh0KHNlbGYucGF0aF9vcl91cmwoKSlbMF0KKworICAgICAg
ICBzZWxmLl9hcmNoaXZlX3BhdGggPSBmaWxlc3lzdGVtLmpvaW4ocGF0aF93aXRob3V0X2V4dCAr
ICcud3ByJykKKyAgICAgICAgc2VsZi5fdXJsID0gZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShz
ZWxmLnBhdGhfb3JfdXJsKCkpLnNwbGl0KCdcbicpWzBdCisgICAgICAgIGlmIGZpbGVzeXN0ZW0u
aXNmaWxlKHNlbGYuX2FyY2hpdmVfcGF0aCk6CisgICAgICAgICAgICBfbG9nLmluZm8oIlJlcGxh
eSByZWFkeSBmb3IgJXMiICUgc2VsZi5fYXJjaGl2ZV9wYXRoKQorICAgICAgICAgICAgcmV0dXJu
IFRydWUKKworICAgICAgICBfbG9nLmluZm8oIlByZXBhcmluZyByZXBsYXkgZm9yICVzIiAlIHNl
bGYudGVzdF9uYW1lKCkpCisKKyAgICAgICAgc2VydmVyID0gc2VsZi5fc3RhcnRfcmVwbGF5X3Nl
cnZlcihzZWxmLl9hcmNoaXZlX3BhdGgsIHJlY29yZD1UcnVlKQorICAgICAgICBpZiBub3Qgc2Vy
dmVyOgorICAgICAgICAgICAgX2xvZy5lcnJvcigiRmFpbGVkIHRvIHN0YXJ0IHJlcGxheSBzZXJ2
ZXIgZm9yICVzIiAlIHNlbGYudGVzdF9uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJ2ZXIud2FpdF91bnRpbF9yZWFkeSgpCisg
ICAgICAgICAgICBkcml2ZXIgPSBwb3J0LmNyZWF0ZV9kcml2ZXIod29ya2VyX251bWJlcj0xLCBu
b190aW1lb3V0PVRydWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHJpbnQg
c2VsZi5fdXJsCisjICAgICAgICAgICAgICAgIG91dHB1dCA9IGRyaXZlci5ydW5fdGVzdChEcml2
ZXJJbnB1dChzZWxmLl91cmwsIHRpbWVfb3V0X21zLCBOb25lLCBGYWxzZSkpCisjICAgICAgICAg
ICAgICAgIGlmIHNlbGYucnVuX2ZhaWxlZChvdXRwdXQpOgorIyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisjICAgICAgICAgICAgICAgIHByaW50IG91dHB1dC50ZXh0CisgICAgICAg
ICAgICAgICAgcG9ydC5ob3N0LnVzZXIuY29uZmlybSgiUmVhZHkgdG8gc3RvcCB0ZXN0PyIpCisg
ICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGRyaXZlci5zdG9wKCkKKyAgICAg
ICAgZmluYWxseToKKyAgICAgICAgICAgIHNlcnZlci5zdG9wKCkKKworICAgICAgICBpZiBub3Qg
ZmlsZXN5c3RlbS5pc2ZpbGUoc2VsZi5fYXJjaGl2ZV9wYXRoKToKKyAgICAgICAgICAgIF9sb2cu
ZXJyb3IoIkZhaWxlZCB0byBwcmVwYXJlIGEgcmVwbGF5IGZvciAlcyIgJSBzZWxmLnRlc3RfbmFt
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgX2xvZy5pbmZvKCJQcmVw
YXJlZCByZXBsYXkgZm9yICVzIiAlIHNlbGYudGVzdF9uYW1lKCkpCisKKyAgICAgICAgcmV0dXJu
IFRydWUKKworICAgIGRlZiBydW5fc2luZ2xlKHNlbGYsIGRyaXZlciwgdGltZV9vdXRfbXMpOgor
ICAgICAgICBzZXJ2ZXIgPSBzZWxmLl9zdGFydF9yZXBsYXlfc2VydmVyKHNlbGYuX2FyY2hpdmVf
cGF0aCwgcmVjb3JkPUZhbHNlKQorICAgICAgICBpZiBub3Qgc2VydmVyOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJ2ZXIud2FpdF91bnRp
bF9yZWFkeSgpCisgICAgICAgICAgICBkcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQoImFib3V0
OmJsYW5rIiwgdGltZV9vdXRfbXMsIE5vbmUsIEZhbHNlKSkKKyAgICAgICAgICAgIG91dHB1dCA9
IGRyaXZlci5ydW5fdGVzdChEcml2ZXJJbnB1dChzZWxmLl91cmwsIHRpbWVfb3V0X21zLCBOb25l
LCBGYWxzZSkpCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0CisgICAgICAgIGZpbmFsbHk6Cisg
ICAgICAgICAgICBzZXJ2ZXIuc3RvcCgpCisKKwogY2xhc3MgUGVyZlRlc3RGYWN0b3J5KG9iamVj
dCk6CiAKICAgICBfcGF0dGVybl9tYXAgPSBbCi0gICAgICAgIChyZS5jb21waWxlKCdeaW5zcGVj
dG9yLycpLCBDaHJvbWl1bVN0eWxlUGVyZlRlc3QpLAotICAgICAgICAocmUuY29tcGlsZSgnXlBh
Z2VMb2FkLycpLCBQYWdlTG9hZGluZ1BlcmZUZXN0KSwKKyAgICAgICAgKHJlLmNvbXBpbGUocide
aW5zcGVjdG9yLycpLCBDaHJvbWl1bVN0eWxlUGVyZlRlc3QpLAorICAgICAgICAocmUuY29tcGls
ZShyJ15QYWdlTG9hZC8nKSwgUGFnZUxvYWRpbmdQZXJmVGVzdCksCisgICAgICAgIChyZS5jb21w
aWxlKHInKC4rKVwucmVwbGF5JCcpLCBSZXBsYXlQZXJmVGVzdCksCiAgICAgXQogCiAgICAgQGNs
YXNzbWV0aG9kCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0
X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19f
aW5pdF9fLnB5CShyZXZpc2lvbiAxMTU4NDEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDggQEAKICAg
ICAgICAgICAgIHNlbGYuX2luc3RhbGxfcHl3ZWJzb2NrZXQoKQogICAgICAgICBlbGlmICcuYnVp
bGRib3QnIGluIGZ1bGxuYW1lOgogICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9idWlsZGJvdCgp
CisgICAgICAgIGVsaWYgJy53ZWJwYWdlcmVwbGF5JyBpbiBmdWxsbmFtZToKKyAgICAgICAgICAg
IHNlbGYuX2luc3RhbGxfd2VicGFnZXJlcGxheSgpCiAKICAgICBkZWYgX2luc3RhbGxfbWVjaGFu
aXplKHNlbGYpOgogICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwOi8vcHlwaS5weXRob24ub3Jn
L3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9tZWNoYW5pemUtMC4yLjUudGFyLmd6IiwKQEAg
LTEzNCw2ICsxMzYsMTUgQEAKICAgICAgICAgaW5zdGFsbGVyLmluc3RhbGwodXJsPSJodHRwOi8v
cHl3ZWJzb2NrZXQuZ29vZ2xlY29kZS5jb20vZmlsZXMvbW9kX3B5d2Vic29ja2V0LTAuNy40LnRh
ci5neiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPSJweXdlYnNvY2tl
dC0wLjcuNC9zcmMvbW9kX3B5d2Vic29ja2V0IikKIAorICAgIGRlZiBfaW5zdGFsbF93ZWJwYWdl
cmVwbGF5KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fZnMuZXhpc3RzKHNlbGYuX2ZzLmpv
aW4oX0FVVE9JTlNUQUxMRURfRElSLCAid2VicGFnZXJlcGxheSIpKToKKyAgICAgICAgICAgIHNl
bGYuX2luc3RhbGwoImh0dHA6Ly93ZWItcGFnZS1yZXBsYXkuZ29vZ2xlY29kZS5jb20vZmlsZXMv
d2VicGFnZXJlcGxheS0xLjAuMS50YXIuZ3oiLCAid2VicGFnZXJlcGxheS0xLjAuMSIpCisgICAg
ICAgICAgICBzZWxmLl9mcy5tb3ZlKHNlbGYuX2ZzLmpvaW4oX0FVVE9JTlNUQUxMRURfRElSLCAi
d2VicGFnZXJlcGxheS0xLjAuMSIpLCBzZWxmLl9mcy5qb2luKF9BVVRPSU5TVEFMTEVEX0RJUiwg
IndlYnBhZ2VyZXBsYXkiKSkKKworICAgICAgICBpbml0X3BhdGggPSBzZWxmLl9mcy5qb2luKF9B
VVRPSU5TVEFMTEVEX0RJUiwgIndlYnBhZ2VyZXBsYXkiLCAiX19pbml0X18ucHkiKQorICAgICAg
ICBpZiBub3Qgc2VsZi5fZnMuZXhpc3RzKGluaXRfcGF0aCk6CisgICAgICAgICAgICBzZWxmLl9m
cy53cml0ZV90ZXh0X2ZpbGUoaW5pdF9wYXRoLCAiIikKKwogICAgIGRlZiBfaW5zdGFsbChzZWxm
LCB1cmwsIHVybF9zdWJwYXRoKToKICAgICAgICAgaW5zdGFsbGVyID0gQXV0b0luc3RhbGxlcih0
YXJnZXRfZGlyPV9BVVRPSU5TVEFMTEVEX0RJUikKICAgICAgICAgaW5zdGFsbGVyLmluc3RhbGwo
dXJsPXVybCwgdXJsX3N1YnBhdGg9dXJsX3N1YnBhdGgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141276</attachid>
            <date>2012-05-10 15:13:50 -0700</date>
            <delta_ts>2012-05-25 18:40:23 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>wip84008d</filename>
            <type>text/plain</type>
            <size>15665</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvUmVzb3VyY2VMb2FkRGVsZWdh
dGUubW0JKHJldmlzaW9uIDExNjY5MikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9SZXNv
dXJjZUxvYWREZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNywxMSBAQAog
ICAgIHJldHVybiBAIjx1bmtub3duPiI7CiB9CiAKK0JPT0wgaXNMb2NhbGhvc3QoY29uc3QgTlNT
dHJpbmcqIGhvc3QpCit7CisgICAgcmV0dXJuIE5TT3JkZXJlZFNhbWUgPT0gW2hvc3QgY29tcGFy
ZTpAIjEyNy4wLjAuMSJdIHx8IE5TT3JkZXJlZFNhbWUgPT0gW2hvc3QgY2FzZUluc2Vuc2l0aXZl
Q29tcGFyZTpAImxvY2FsaG9zdCJdOworfQorCiAtKE5TVVJMUmVxdWVzdCAqKXdlYlZpZXc6IChX
ZWJWaWV3ICopd3YgcmVzb3VyY2U6aWRlbnRpZmllciB3aWxsU2VuZFJlcXVlc3Q6IChOU1VSTFJl
cXVlc3QgKilyZXF1ZXN0IHJlZGlyZWN0UmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZWRpcmVj
dFJlc3BvbnNlIGZyb21EYXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZQogewog
ICAgIGlmICghZG9uZSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MoKSkgewpAQCAtMTQ5LDEzICsxNTQsMTQgQEAKIAogICAgIE5TVVJMICp1cmwgPSBb
cmVxdWVzdCBVUkxdOwogICAgIE5TU3RyaW5nICpob3N0ID0gW3VybCBob3N0XTsKLSAgICBpZiAo
aG9zdAotICAgICAgICAmJiAoTlNPcmRlcmVkU2FtZSA9PSBbW3VybCBzY2hlbWVdIGNhc2VJbnNl
bnNpdGl2ZUNvbXBhcmU6QCJodHRwIl0gfHwgTlNPcmRlcmVkU2FtZSA9PSBbW3VybCBzY2hlbWVd
IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJodHRwcyJdKQotICAgICAgICAmJiBOU09yZGVyZWRT
YW1lICE9IFtob3N0IGNvbXBhcmU6QCIxMjcuMC4wLjEiXQotICAgICAgICAmJiBOU09yZGVyZWRT
YW1lICE9IFtob3N0IGNvbXBhcmU6QCIyNTUuMjU1LjI1NS4yNTUiXSAvLyB1c2VkIGluIHNvbWUg
dGVzdHMgdGhhdCBleHBlY3QgdG8gZ2V0IGJhY2sgYW4gZXJyb3IKLSAgICAgICAgJiYgTlNPcmRl
cmVkU2FtZSAhPSBbaG9zdCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAibG9jYWxob3N0Il0pIHsK
LSAgICAgICAgcHJpbnRmKCJCbG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgJXNcbiIsIFtb
dXJsIGFic29sdXRlU3RyaW5nXSBjU3RyaW5nVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZ10pOwotICAgICAgICByZXR1cm4gbmlsOworICAgIGlmIChob3N0ICYmIChOU09yZGVyZWRT
YW1lID09IFtbdXJsIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImh0dHAiXSB8fCBO
U09yZGVyZWRTYW1lID09IFtbdXJsIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImh0
dHBzIl0pKSB7CisgICAgICAgIE5TVVJMICp0ZXN0VXJsID0gZG9uZSA/IDAgOiBbW05TVVJMIGFs
bG9jXSBpbml0V2l0aFN0cmluZzogW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPnRlc3RQYXRoT3JVUkwoKS5jX3N0cigpXV07CisgICAgICAgIE5T
U3RyaW5nICp0ZXN0VXJsSG9zdCA9IHRlc3RVcmwgPyBbdGVzdFVybCBob3N0XSA6IDA7CisgICAg
ICAgIGlmICghdGVzdFVybEhvc3QgfHwgKGlzTG9jYWxob3N0KHRlc3RVcmxIb3N0KSAmJiAoIWlz
TG9jYWxob3N0KGhvc3QpCisgICAgICAgICAgICB8fCBbaG9zdCBjb21wYXJlOkAiMjU1LjI1NS4y
NTUuMjU1Il0pKSkgeyAvLyB1c2VkIGluIHNvbWUgdGVzdHMgdGhhdCBleHBlY3QgdG8gZ2V0IGJh
Y2sgYW4gZXJyb3IKKyAgICAgICAgICAgIHByaW50ZigiQmxvY2tlZCBhY2Nlc3MgdG8gZXh0ZXJu
YWwgVVJMICVzXG4iLCBbW3VybCBhYnNvbHV0ZVN0cmluZ10gY1N0cmluZ1VzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAg
IH0KICAgICB9CiAKICAgICBpZiAoZGlzYWxsb3dlZFVSTHMgJiYgQ0ZTZXRDb250YWluc1ZhbHVl
KGRpc2FsbG93ZWRVUkxzLCB1cmwpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC93ZWJraXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkJKHJldmlzaW9uIDExNjY5MikKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC01MjUsNiArNTI1LDggQEAKICAgICBkZWYgX2NvbW1hbmRfZnJvbV9kcml2ZXJf
aW5wdXQoc2VsZiwgZHJpdmVyX2lucHV0KToKICAgICAgICAgaWYgc2VsZi5pc19odHRwX3Rlc3Qo
ZHJpdmVyX2lucHV0LnRlc3RfbmFtZSk6CiAgICAgICAgICAgICBjb21tYW5kID0gc2VsZi50ZXN0
X3RvX3VyaShkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQorICAgICAgICBlbGlmIGRyaXZlcl9pbnB1
dC50ZXN0X25hbWUuc3RhcnRzd2l0aCgnaHR0cDovLycpIG9yIGRyaXZlcl9pbnB1dC50ZXN0X25h
bWUuc3RhcnRzd2l0aCgnaHR0cHM6Ly8nKToKKyAgICAgICAgICAgIGNvbW1hbmQgPSBkcml2ZXJf
aW5wdXQudGVzdF9uYW1lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb21tYW5kID0gc2Vs
Zi5fcG9ydC5hYnNwYXRoX2Zvcl90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCiAgICAgICAg
ICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CkBAIC01OTcsNiArNTk5LDggQEAKIAog
ICAgIGRlZiBfcHJvY2Vzc19zdGRvdXRfbGluZShzZWxmLCBibG9jaywgbGluZSk6CiAgICAgICAg
IGlmIChzZWxmLl9yZWFkX2hlYWRlcihibG9jaywgbGluZSwgJ0NvbnRlbnQtVHlwZTogJywgJ2Nv
bnRlbnRfdHlwZScpCisgICAgICAgICAgICBvciBzZWxmLl9yZWFkX2hlYWRlcihibG9jaywgbGlu
ZSwgJ1gtV2ViS2l0VGVzdFJ1bm5lci1TdGFydFRpbWU6ICcsICdzdGFydF90aW1lJywgaW50KQor
ICAgICAgICAgICAgb3Igc2VsZi5fcmVhZF9oZWFkZXIoYmxvY2ssIGxpbmUsICdYLVdlYktpdFRl
c3RSdW5uZXItRW5kVGltZTogJywgJ2VuZF90aW1lJywgaW50KQogICAgICAgICAgICAgb3Igc2Vs
Zi5fcmVhZF9oZWFkZXIoYmxvY2ssIGxpbmUsICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAn
LCAnZW5jb2RpbmcnKQogICAgICAgICAgICAgb3Igc2VsZi5fcmVhZF9oZWFkZXIoYmxvY2ssIGxp
bmUsICdDb250ZW50LUxlbmd0aDogJywgJ19jb250ZW50X2xlbmd0aCcsIGludCkKICAgICAgICAg
ICAgIG9yIHNlbGYuX3JlYWRfaGVhZGVyKGJsb2NrLCBsaW5lLCAnQWN0dWFsSGFzaDogJywgJ2Nv
bnRlbnRfaGFzaCcpKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2Vf
dGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5CShyZXZpc2lvbiAxMTY2
OTIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0
c3J1bm5lci5weQkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogZnJvbSB3ZWJraXRw
eS5jb21tb24ubmV0LmZpbGVfdXBsb2FkZXIgaW1wb3J0IEZpbGVVcGxvYWRlcgogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMudmlld3MgaW1wb3J0IHByaW50aW5nCiBmcm9tIHdlYmtpdHB5LnBl
cmZvcm1hbmNlX3Rlc3RzLnBlcmZ0ZXN0IGltcG9ydCBQZXJmVGVzdEZhY3RvcnkKK2Zyb20gd2Vi
a2l0cHkucGVyZm9ybWFuY2VfdGVzdHMucGVyZnRlc3QgaW1wb3J0IFJlcGxheVBlcmZUZXN0CiAK
IAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtNTEsNiArNTIsNyBAQAog
ICAgIF9FWElUX0NPREVfQkFEX0JVSUxEID0gLTEKICAgICBfRVhJVF9DT0RFX0JBRF9KU09OID0g
LTIKICAgICBfRVhJVF9DT0RFX0ZBSUxFRF9VUExPQURJTkcgPSAtMworICAgIF9FWElUX0NPREVf
QkFEX1BSRVBBUkFUSU9OID0gLTQKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzPU5vbmUs
IHBvcnQ9Tm9uZSk6CiAgICAgICAgIHNlbGYuX29wdGlvbnMsIHNlbGYuX2FyZ3MgPSBQZXJmVGVz
dHNSdW5uZXIuX3BhcnNlX2FyZ3MoYXJncykKQEAgLTEwNCw3ICsxMDYsNyBAQAogICAgICAgICAi
IiJSZXR1cm4gdGhlIGxpc3Qgb2YgdGVzdHMgZm91bmQuIiIiCiAKICAgICAgICAgZGVmIF9pc190
ZXN0X2ZpbGUoZmlsZXN5c3RlbSwgZGlybmFtZSwgZmlsZW5hbWUpOgotICAgICAgICAgICAgcmV0
dXJuIGZpbGVzeXN0ZW0uc3BsaXRleHQoZmlsZW5hbWUpWzFdIGluIFsnLmh0bWwnLCAnLnN2Zydd
CisgICAgICAgICAgICByZXR1cm4gZmlsZXN5c3RlbS5zcGxpdGV4dChmaWxlbmFtZSlbMV0gaW4g
WycuaHRtbCcsICcuc3ZnJywgJy5yZXBsYXknXQogCiAgICAgICAgIGZpbGVzeXN0ZW0gPSBzZWxm
Ll9ob3N0LmZpbGVzeXN0ZW0KIApAQCAtMTIyLDcgKzEyNCw4IEBACiAgICAgICAgICAgICByZWxh
dGl2ZV9wYXRoID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV9wZXJmX3Rlc3RfZmlsZW5hbWUocGF0aCku
cmVwbGFjZSgnXFwnLCAnLycpCiAgICAgICAgICAgICBpZiBzZWxmLl9wb3J0LnNraXBzX3BlcmZf
dGVzdChyZWxhdGl2ZV9wYXRoKToKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAg
ICAgdGVzdHMuYXBwZW5kKFBlcmZUZXN0RmFjdG9yeS5jcmVhdGVfcGVyZl90ZXN0KHJlbGF0aXZl
X3BhdGgsIHBhdGgpKQorICAgICAgICAgICAgdGVzdCA9IFBlcmZUZXN0RmFjdG9yeS5jcmVhdGVf
cGVyZl90ZXN0KHJlbGF0aXZlX3BhdGgsIHBhdGgpCisgICAgICAgICAgICB0ZXN0cy5hcHBlbmQo
dGVzdCkKIAogICAgICAgICByZXR1cm4gdGVzdHMKIApAQCAtMTMxLDEwICsxMzQsMTIgQEAKICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoIkJ1aWxkIG5vdCB1cCB0byBkYXRlIGZvciAlcyIgJSBzZWxm
Ll9wb3J0Ll9wYXRoX3RvX2RyaXZlcigpKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX0VYSVRf
Q09ERV9CQURfQlVJTEQKIAotICAgICAgICAjIFdlIHdyYXAgYW55IHBhcnRzIG9mIHRoZSBydW4g
dGhhdCBhcmUgc2xvdyBvciBsaWtlbHkgdG8gcmFpc2UgZXhjZXB0aW9ucwotICAgICAgICAjIGlu
IGEgdHJ5L2ZpbmFsbHkgdG8gZW5zdXJlIHRoYXQgd2UgY2xlYW4gdXAgdGhlIGxvZ2dpbmcgY29u
ZmlndXJhdGlvbi4KLSAgICAgICAgdW5leHBlY3RlZCA9IC0xCiAgICAgICAgIHRlc3RzID0gc2Vs
Zi5fY29sbGVjdF90ZXN0cygpCisKKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAg
ICAgICBpZiBub3QgdGVzdC5wcmVwYXJlKHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMudGltZV9v
dXRfbXMsIHNlbGYuX2hvc3QuZmlsZXN5c3RlbSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNl
bGYuX0VYSVRfQ09ERV9CQURfUFJFUEFSQVRJT04KKwogICAgICAgICB1bmV4cGVjdGVkID0gc2Vs
Zi5fcnVuX3Rlc3RzX3NldChzb3J0ZWQobGlzdCh0ZXN0cyksIGtleT1sYW1iZGEgdGVzdDogdGVz
dC50ZXN0X25hbWUoKSksIHNlbGYuX3BvcnQpCiAKICAgICAgICAgb3B0aW9ucyA9IHNlbGYuX29w
dGlvbnMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVy
ZnRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5j
ZV90ZXN0cy9wZXJmdGVzdC5weQkocmV2aXNpb24gMTE2NjkyKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MjgsMTEgKzI4LDIwIEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIAoraW1wb3J0IGVycm5vCiBpbXBvcnQg
bG9nZ2luZwogaW1wb3J0IG1hdGgKIGltcG9ydCByZQoraW1wb3J0IG9zCitpbXBvcnQgc2lnbmFs
CitpbXBvcnQgc3VicHJvY2VzcwogCisjIEltcG9ydCBmb3IgYXV0by1pbnN0YWxsCitpbXBvcnQg
d2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLndlYnBhZ2VyZXBsYXkKKworZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMudGVzdF9yZXN1bHRfd3JpdGVyIGltcG9y
dCBUZXN0UmVzdWx0V3JpdGVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmRyaXZl
ciBpbXBvcnQgRHJpdmVySW5wdXQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZHJp
dmVyIGltcG9ydCBEcml2ZXJPdXRwdXQKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCkBAIC00OSwxNCArNTgsMTcgQEAKICAgICBkZWYgcGF0aF9vcl91cmwoc2VsZik6CiAg
ICAgICAgIHJldHVybiBzZWxmLl9wYXRoX29yX3VybAogCi0gICAgZGVmIHJ1bihzZWxmLCBkcml2
ZXIsIHRpbWVvdXRfbXMpOgotICAgICAgICBvdXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QoRHJpdmVy
SW5wdXQoc2VsZi5wYXRoX29yX3VybCgpLCB0aW1lb3V0X21zLCBOb25lLCBGYWxzZSkpCisgICAg
ZGVmIHByZXBhcmUoc2VsZiwgcG9ydCwgdGltZV9vdXRfbXMsIGZpbGVzeXN0ZW0pOgorICAgICAg
ICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJ1bihzZWxmLCBkcml2ZXIsIHRpbWVfb3V0X21zKToK
KyAgICAgICAgb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KERyaXZlcklucHV0KHNlbGYucGF0aF9v
cl91cmwoKSwgdGltZV9vdXRfbXMsIE5vbmUsIEZhbHNlKSkKICAgICAgICAgaWYgc2VsZi5ydW5f
ZmFpbGVkKG91dHB1dCk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICByZXR1cm4g
c2VsZi5wYXJzZV9vdXRwdXQob3V0cHV0KQogCiAgICAgZGVmIHJ1bl9mYWlsZWQoc2VsZiwgb3V0
cHV0KToKLSAgICAgICAgaWYgb3V0cHV0LnRleHQgPT0gTm9uZSBvciBvdXRwdXQuZXJyb3I6Cisg
ICAgICAgIGlmIG5vdCBvdXRwdXQgb3Igb3V0cHV0LnRleHQgPT0gTm9uZSBvciBvdXRwdXQuZXJy
b3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsaWYgb3V0cHV0LnRpbWVvdXQ6CiAgICAg
ICAgICAgICBfbG9nLmVycm9yKCd0aW1lb3V0OiAlcycgJSBzZWxmLnRlc3RfbmFtZSgpKQpAQCAt
NjUsNyArNzcsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAK
LSAgICAgICAgaWYgb3V0cHV0LmVycm9yOgorICAgICAgICBpZiBvdXRwdXQgYW5kIG91dHB1dC5l
cnJvcjoKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ2Vycm9yOiAlc1xuJXMnICUgKHNlbGYudGVz
dF9uYW1lKCksIG91dHB1dC5lcnJvcikpCiAKICAgICAgICAgcmV0dXJuIFRydWUKQEAgLTE1MSwx
MSArMTYzLDE0IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfbmFtZSwgcGF0aF9vcl91
cmwpOgogICAgICAgICBzdXBlcihQYWdlTG9hZGluZ1BlcmZUZXN0LCBzZWxmKS5fX2luaXRfXyh0
ZXN0X25hbWUsIHBhdGhfb3JfdXJsKQogCi0gICAgZGVmIHJ1bihzZWxmLCBkcml2ZXIsIHRpbWVv
dXRfbXMpOgorICAgIGRlZiBydW5fc2luZ2xlKHNlbGYsIGRyaXZlciwgdGltZV9vdXRfbXMpOgor
ICAgICAgICByZXR1cm4gZHJpdmVyLnJ1bl90ZXN0KERyaXZlcklucHV0KHNlbGYucGF0aF9vcl91
cmwoKSwgdGltZV9vdXRfbXMsIE5vbmUsIEZhbHNlKSkKKworICAgIGRlZiBydW4oc2VsZiwgZHJp
dmVyLCB0aW1lX291dF9tcyk6CiAgICAgICAgIHRlc3RfdGltZXMgPSBbXQogCiAgICAgICAgIGZv
ciBpIGluIHJhbmdlKDAsIDIwKToKLSAgICAgICAgICAgIG91dHB1dCA9IGRyaXZlci5ydW5fdGVz
dChEcml2ZXJJbnB1dChzZWxmLnBhdGhfb3JfdXJsKCksIHRpbWVvdXRfbXMsIE5vbmUsIEZhbHNl
KSkKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYucnVuX3NpbmdsZShkcml2ZXIsIHRpbWVfb3V0
X21zKQogICAgICAgICAgICAgaWYgc2VsZi5ydW5fZmFpbGVkKG91dHB1dCk6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIGlmIGkgPT0gMDoKQEAgLTE4NSwxMSArMjAw
LDEzOSBAQAogICAgICAgICByZXR1cm4ge3NlbGYudGVzdF9uYW1lKCk6IHJlc3VsdHN9CiAKIAor
Y2xhc3MgUmVwbGF5U2VydmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyY2hp
dmUsIHJlY29yZCk6CisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisKKyAgICAgICAgIyBG
SVhNRTogU2hvdWxkIGVycm9yIGlmIGxvY2FsIHByb3h5IGlzbid0IHNldCB0byBmb3J3YXJkIHJl
cXVlc3RzIHRvIGxvY2FsaG9zdDo4MDgwIGFuZCBsb2NhbGhvc3Q6ODQxMworCisgICAgICAgIHJl
cGxheV9wYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZSh3ZWJraXRweS50aGlyZHBh
cnR5LmF1dG9pbnN0YWxsZWQud2VicGFnZXJlcGxheS5fX2ZpbGVfXyksICdyZXBsYXkucHknKQor
ICAgICAgICBhcmdzID0gWydweXRob24nLCByZXBsYXlfcGF0aCwgJy0tbm8tZG5zX2ZvcndhcmRp
bmcnLCAnLS1wb3J0JywgJzgwODAnLCAnLS1zc2xfcG9ydCcsICc4NDEzJywgJy0tdXNlX2Nsb3Nl
c3RfbWF0Y2gnXQorICAgICAgICBpZiByZWNvcmQ6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgn
LS1yZWNvcmQnKQorICAgICAgICBhcmdzLmFwcGVuZChhcmNoaXZlKQorCisgICAgICAgIHNlbGYu
X3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUs
IHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisKKyAgICBkZWYgd2FpdF91bnRpbF9yZWFkeShzZWxm
KToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9wcm9jZXNz
LnN0ZGVyci5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiAiU3RhcnRlZCBIVFRQUyBzZXJ2ZXIg
b24iIGluIGxpbmUgb3Igc2VsZi5fcHJvY2Vzcy5wb2xsKCkgIT0gTm9uZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAg
ICAgaWYgc2VsZi5fcHJvY2VzczoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Muc2VuZF9zaWdu
YWwoc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mud2FpdCgpCisgICAg
ICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAg
ICAgc2VsZi5zdG9wKCkKKworCitjbGFzcyBSZXBsYXlQZXJmVGVzdChQYWdlTG9hZGluZ1BlcmZU
ZXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9uYW1lLCBwYXRoX29yX3VybCk6Cisg
ICAgICAgIHN1cGVyKFJlcGxheVBlcmZUZXN0LCBzZWxmKS5fX2luaXRfXyh0ZXN0X25hbWUsIHBh
dGhfb3JfdXJsKQorCisgICAgZGVmIF9zdGFydF9yZXBsYXlfc2VydmVyKHNlbGYsIGFyY2hpdmUs
IHJlY29yZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBSZXBsYXlTZXJ2ZXIo
YXJjaGl2ZSwgcmVjb3JkKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKKyAgICAg
ICAgICAgIGlmIGVycm9yLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICBf
bG9nLmVycm9yKCJSZXBsYXkgdGVzdHMgcmVxdWlyZSB3ZWItcGFnZS1yZXBsYXkuIikKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IKKworICAgIGRlZiBwcmVw
YXJlKHNlbGYsIHBvcnQsIHRpbWVfb3V0X21zLCBmaWxlc3lzdGVtKToKKyAgICAgICAgcGF0aF93
aXRob3V0X2V4dCA9IGZpbGVzeXN0ZW0uc3BsaXRleHQoc2VsZi5wYXRoX29yX3VybCgpKVswXQor
CisgICAgICAgIHNlbGYuX2FyY2hpdmVfcGF0aCA9IGZpbGVzeXN0ZW0uam9pbihwYXRoX3dpdGhv
dXRfZXh0ICsgJy53cHInKQorICAgICAgICBzZWxmLl9leHBlY3RlZF9pbWFnZV9wYXRoID0gZmls
ZXN5c3RlbS5qb2luKHBhdGhfd2l0aG91dF9leHQgKyAnLWV4cGVjdGVkLnBuZycpCisgICAgICAg
IHNlbGYuX3VybCA9IGZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoc2VsZi5wYXRoX29yX3VybCgp
KS5zcGxpdCgnXG4nKVswXQorICAgICAgICBpZiBmaWxlc3lzdGVtLmlzZmlsZShzZWxmLl9hcmNo
aXZlX3BhdGgpIGFuZCBmaWxlc3lzdGVtLmlzZmlsZShzZWxmLl9leHBlY3RlZF9pbWFnZV9wYXRo
KToKKyAgICAgICAgICAgIF9sb2cuaW5mbygiUmVwbGF5IHJlYWR5IGZvciAlcyIgJSBzZWxmLl9h
cmNoaXZlX3BhdGgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIF9sb2cuaW5m
bygiUHJlcGFyaW5nIHJlcGxheSBmb3IgJXMiICUgc2VsZi50ZXN0X25hbWUoKSkKKworICAgICAg
ICBzZXJ2ZXIgPSBzZWxmLl9zdGFydF9yZXBsYXlfc2VydmVyKHNlbGYuX2FyY2hpdmVfcGF0aCwg
cmVjb3JkPVRydWUpCisgICAgICAgIGlmIG5vdCBzZXJ2ZXI6CisgICAgICAgICAgICBfbG9nLmVy
cm9yKCJGYWlsZWQgdG8gc3RhcnQgcmVwbGF5IHNlcnZlciBmb3IgJXMiICUgc2VsZi50ZXN0X25h
bWUoKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHNlcnZlci53YWl0X3VudGlsX3JlYWR5KCkKKyAgICAgICAgICAgIGRyaXZlciA9IHBvcnQu
Y3JlYXRlX2RyaXZlcih3b3JrZXJfbnVtYmVyPTEsIG5vX3RpbWVvdXQ9VHJ1ZSkKKyAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICBkcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQoImFi
b3V0OmJsYW5rIiwgdGltZV9vdXRfbXMsIE5vbmUsIEZhbHNlKSkKKyAgICAgICAgICAgICAgICBv
dXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQoc2VsZi5fdXJsLCB0aW1lX291dF9t
cywgaW1hZ2VfaGFzaD1Ob25lLCBzaG91bGRfcnVuX3BpeGVsX3Rlc3Q9VHJ1ZSkpCisgICAgICAg
ICAgICAgICAgaWYgc2VsZi5ydW5fZmFpbGVkKG91dHB1dCk6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBGYWxzZQorICAgICAgICAgICAgICAgIGRpcm5hbWUgPSBmaWxlc3lzdGVtLmRpcm5h
bWUoc2VsZi5wYXRoX29yX3VybCgpKQorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZXN5
c3RlbS5zcGxpdChzZWxmLnBhdGhfb3JfdXJsKCkpWzFdCisgICAgICAgICAgICAgICAgd3JpdGVy
ID0gVGVzdFJlc3VsdFdyaXRlcihmaWxlc3lzdGVtLCBwb3J0LCBkaXJuYW1lLCBmaWxlbmFtZSkK
KyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVfaW1hZ2VfZmlsZXMoYWN0dWFsX2ltYWdlPU5v
bmUsIGV4cGVjdGVkX2ltYWdlPW91dHB1dC5pbWFnZSkKKyAgICAgICAgICAgIGZpbmFsbHk6Cisg
ICAgICAgICAgICAgICAgZHJpdmVyLnN0b3AoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAg
ICAgc2VydmVyLnN0b3AoKQorCisgICAgICAgIGlmIG5vdCBmaWxlc3lzdGVtLmlzZmlsZShzZWxm
Ll9hcmNoaXZlX3BhdGgpOgorICAgICAgICAgICAgX2xvZy5lcnJvcigiRmFpbGVkIHRvIHByZXBh
cmUgYSByZXBsYXkgZm9yICVzIiAlIHNlbGYudGVzdF9uYW1lKCkpCisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgICAgICBfbG9nLmluZm8oIlByZXBhcmVkIHJlcGxheSBmb3IgJXMiICUg
c2VsZi50ZXN0X25hbWUoKSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJ1bl9z
aW5nbGUoc2VsZiwgZHJpdmVyLCB0aW1lX291dF9tcyk6CisgICAgICAgIHNlcnZlciA9IHNlbGYu
X3N0YXJ0X3JlcGxheV9zZXJ2ZXIoc2VsZi5fYXJjaGl2ZV9wYXRoLCByZWNvcmQ9RmFsc2UpCisg
ICAgICAgIGlmIG5vdCBzZXJ2ZXI6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHNlcnZlci53YWl0X3VudGlsX3JlYWR5KCkKKyAgICAgICAgICAg
IGRyaXZlci5ydW5fdGVzdChEcml2ZXJJbnB1dCgiYWJvdXQ6YmxhbmsiLCB0aW1lX291dF9tcywg
Tm9uZSwgRmFsc2UpKQorICAgICAgICAgICAgb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KERyaXZl
cklucHV0KHNlbGYuX3VybCwgdGltZV9vdXRfbXMsIGltYWdlX2hhc2g9Tm9uZSwgc2hvdWxkX3J1
bl9waXhlbF90ZXN0PVRydWUpKQorICAgICAgICAgICAgZXhwZWN0ZWRfaW1hZ2UgPSBkcml2ZXIu
X3BvcnQuaG9zdC5maWxlc3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUoc2VsZi5fZXhwZWN0ZWRfaW1h
Z2VfcGF0aCkKKworICAgICAgICAgICAgaWYgbm90IG91dHB1dC5pbWFnZToKKyAgICAgICAgICAg
ICAgICBfbG9nLmVycm9yKCJGYWlsZWQgdG8gcnVuIHRoZSB0ZXN0IikKKyAgICAgICAgICAgICAg
ICBfbG9nLmVycm9yKG91dHB1dC50ZXh0KQorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1dl
YlBhZ2VSZXBsYXkgZXJyb3JzOicpCisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAg
ICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuX3Byb2Nlc3Muc3RkZXJyLnJlYWRsaW5lKCkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKGxpbmUuc3RyaXAoJ1xyJykpCisg
ICAgICAgICAgICAgICAgICAgIHByaW50IGxpbmUKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVl
OgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5fcHJvY2Vzcy5zdGRvdXQucmVhZGxp
bmUoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIHByaW50IGxpbmUKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICBpZiBvdXRwdXQuaW1hZ2UgIT0gZXhwZWN0
ZWRfaW1hZ2U6CisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcigiQWN0dWFsIHJlc3VsdCBkaWRu
J3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHJlc3VsdCIpCisgICAgICAgICAgICAgICAgZGlybmFtZSA9
IGRyaXZlci5fcG9ydC5ob3N0LmZpbGVzeXN0ZW0uZGlybmFtZShzZWxmLl9hcmNoaXZlX3BhdGgp
CisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBkcml2ZXIuX3BvcnQuaG9zdC5maWxlc3lzdGVt
LnNwbGl0KHNlbGYuX2FyY2hpdmVfcGF0aClbMV0KKyAgICAgICAgICAgICAgICB3cml0ZXIgPSBU
ZXN0UmVzdWx0V3JpdGVyKGRyaXZlci5fcG9ydC5ob3N0LmZpbGVzeXN0ZW0sIGRyaXZlci5fcG9y
dCwgZGlybmFtZSwgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlX2ltYWdl
X2ZpbGVzKGFjdHVhbF9pbWFnZT1vdXRwdXQuaW1hZ2UsIGV4cGVjdGVkX2ltYWdlPU5vbmUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgcmV0dXJuIG91dHB1dAor
ICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VydmVyLnN0b3AoKQorCisKIGNsYXNzIFBl
cmZUZXN0RmFjdG9yeShvYmplY3QpOgogCiAgICAgX3BhdHRlcm5fbWFwID0gWwotICAgICAgICAo
cmUuY29tcGlsZSgnXmluc3BlY3Rvci8nKSwgQ2hyb21pdW1TdHlsZVBlcmZUZXN0KSwKLSAgICAg
ICAgKHJlLmNvbXBpbGUoJ15QYWdlTG9hZC8nKSwgUGFnZUxvYWRpbmdQZXJmVGVzdCksCisgICAg
ICAgIChyZS5jb21waWxlKHInXmluc3BlY3Rvci8nKSwgQ2hyb21pdW1TdHlsZVBlcmZUZXN0KSwK
KyAgICAgICAgKHJlLmNvbXBpbGUocideUGFnZUxvYWQvJyksIFBhZ2VMb2FkaW5nUGVyZlRlc3Qp
LAorICAgICAgICAocmUuY29tcGlsZShyJyguKylcLnJlcGxheSQnKSwgUmVwbGF5UGVyZlRlc3Qp
LAogICAgIF0KIAogICAgIEBjbGFzc21ldGhvZApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQkocmV2aXNpb24gMTE2NjkyKQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC04Miw2ICs4Miw4IEBACiAgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX2lyYygpCiAgICAgICAg
IGVsaWYgJy5idWlsZGJvdCcgaW4gZnVsbG5hbWU6CiAgICAgICAgICAgICBzZWxmLl9pbnN0YWxs
X2J1aWxkYm90KCkKKyAgICAgICAgZWxpZiAnLndlYnBhZ2VyZXBsYXknIGluIGZ1bGxuYW1lOgor
ICAgICAgICAgICAgc2VsZi5faW5zdGFsbF93ZWJwYWdlcmVwbGF5KCkKIAogICAgIGRlZiBfaW5z
dGFsbF9tZWNoYW5pemUoc2VsZik6CiAgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHA6Ly9weXBp
LnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL20vbWVjaGFuaXplL21lY2hhbml6ZS0wLjIuNS50
YXIuZ3oiLApAQCAtMTI2LDYgKzEyOCwxNSBAQAogICAgICAgICBpbnN0YWxsZXIuaW5zdGFsbCh1
cmw9Imh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvcHl0aG9uLWlyY2xp
Yi9weXRob24taXJjbGliLzAuNC44L3B5dGhvbi1pcmNsaWItMC40LjguemlwIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9ImlyY2JvdC5weSIpCiAKKyAgICBkZWYgX2lu
c3RhbGxfd2VicGFnZXJlcGxheShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZzLmV4aXN0
cyhzZWxmLl9mcy5qb2luKF9BVVRPSU5TVEFMTEVEX0RJUiwgIndlYnBhZ2VyZXBsYXkiKSk6Cisg
ICAgICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwOi8vd2ViLXBhZ2UtcmVwbGF5Lmdvb2dsZWNv
ZGUuY29tL2ZpbGVzL3dlYnBhZ2VyZXBsYXktMS4xLjEudGFyLmd6IiwgIndlYnBhZ2VyZXBsYXkt
MS4xLjEiKQorICAgICAgICAgICAgc2VsZi5fZnMubW92ZShzZWxmLl9mcy5qb2luKF9BVVRPSU5T
VEFMTEVEX0RJUiwgIndlYnBhZ2VyZXBsYXktMS4xLjEiKSwgc2VsZi5fZnMuam9pbihfQVVUT0lO
U1RBTExFRF9ESVIsICJ3ZWJwYWdlcmVwbGF5IikpCisKKyAgICAgICAgaW5pdF9wYXRoID0gc2Vs
Zi5fZnMuam9pbihfQVVUT0lOU1RBTExFRF9ESVIsICJ3ZWJwYWdlcmVwbGF5IiwgIl9faW5pdF9f
LnB5IikKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZzLmV4aXN0cyhpbml0X3BhdGgpOgorICAgICAg
ICAgICAgc2VsZi5fZnMud3JpdGVfdGV4dF9maWxlKGluaXRfcGF0aCwgIiIpCisKICAgICBkZWYg
X2luc3RhbGwoc2VsZiwgdXJsLCB1cmxfc3VicGF0aCk6CiAgICAgICAgIGluc3RhbGxlciA9IEF1
dG9JbnN0YWxsZXIodGFyZ2V0X2Rpcj1fQVVUT0lOU1RBTExFRF9ESVIpCiAgICAgICAgIGluc3Rh
bGxlci5pbnN0YWxsKHVybD11cmwsIHVybF9zdWJwYXRoPXVybF9zdWJwYXRoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144180</attachid>
            <date>2012-05-25 18:40:23 -0700</date>
            <delta_ts>2012-05-30 17:44:41 -0700</delta_ts>
            <desc>work in progress 4</desc>
            <filename>wip84008d</filename>
            <type>text/plain</type>
            <size>12515</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
d2Via2l0LnB5CShyZXZpc2lvbiAxMTgzOTUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weQkod29ya2luZyBjb3B5KQpAQCAtNTI2LDYgKzUyNiw4
IEBACiAgICAgZGVmIF9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KHNlbGYsIGRyaXZlcl9pbnB1
dCk6CiAgICAgICAgIGlmIHNlbGYuaXNfaHR0cF90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUp
OgogICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYudGVzdF90b191cmkoZHJpdmVyX2lucHV0LnRl
c3RfbmFtZSkKKyAgICAgICAgZWxpZiBkcml2ZXJfaW5wdXQudGVzdF9uYW1lLnN0YXJ0c3dpdGgo
J2h0dHA6Ly8nKSBvciBkcml2ZXJfaW5wdXQudGVzdF9uYW1lLnN0YXJ0c3dpdGgoJ2h0dHBzOi8v
Jyk6CisgICAgICAgICAgICBjb21tYW5kID0gZHJpdmVyX2lucHV0LnRlc3RfbmFtZQogICAgICAg
ICBlbHNlOgogICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYuX3BvcnQuYWJzcGF0aF9mb3JfdGVz
dChkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09
ICdjeWd3aW4nOgpAQCAtNTk4LDYgKzYwMCw4IEBACiAKICAgICBkZWYgX3Byb2Nlc3Nfc3Rkb3V0
X2xpbmUoc2VsZiwgYmxvY2ssIGxpbmUpOgogICAgICAgICBpZiAoc2VsZi5fcmVhZF9oZWFkZXIo
YmxvY2ssIGxpbmUsICdDb250ZW50LVR5cGU6ICcsICdjb250ZW50X3R5cGUnKQorICAgICAgICAg
ICAgb3Igc2VsZi5fcmVhZF9oZWFkZXIoYmxvY2ssIGxpbmUsICdYLVdlYktpdFRlc3RSdW5uZXIt
U3RhcnRUaW1lOiAnLCAnc3RhcnRfdGltZScsIGludCkKKyAgICAgICAgICAgIG9yIHNlbGYuX3Jl
YWRfaGVhZGVyKGJsb2NrLCBsaW5lLCAnWC1XZWJLaXRUZXN0UnVubmVyLUVuZFRpbWU6ICcsICdl
bmRfdGltZScsIGludCkKICAgICAgICAgICAgIG9yIHNlbGYuX3JlYWRfaGVhZGVyKGJsb2NrLCBs
aW5lLCAnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogJywgJ2VuY29kaW5nJykKICAgICAgICAg
ICAgIG9yIHNlbGYuX3JlYWRfaGVhZGVyKGJsb2NrLCBsaW5lLCAnQ29udGVudC1MZW5ndGg6ICcs
ICdfY29udGVudF9sZW5ndGgnLCBpbnQpCiAgICAgICAgICAgICBvciBzZWxmLl9yZWFkX2hlYWRl
cihibG9jaywgbGluZSwgJ0FjdHVhbEhhc2g6ICcsICdjb250ZW50X2hhc2gnKSk6CkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3Rz
L3BlcmZ0ZXN0c3J1bm5lci5weQkocmV2aXNpb24gMTE4Mzk1KQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDYgKzQxLDcgQEAKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5maWxlX3VwbG9h
ZGVyIGltcG9ydCBGaWxlVXBsb2FkZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdz
IGltcG9ydCBwcmludGluZwogZnJvbSB3ZWJraXRweS5wZXJmb3JtYW5jZV90ZXN0cy5wZXJmdGVz
dCBpbXBvcnQgUGVyZlRlc3RGYWN0b3J5Citmcm9tIHdlYmtpdHB5LnBlcmZvcm1hbmNlX3Rlc3Rz
LnBlcmZ0ZXN0IGltcG9ydCBSZXBsYXlQZXJmVGVzdAogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKQEAgLTUxLDYgKzUyLDcgQEAKICAgICBfRVhJVF9DT0RFX0JBRF9CVUlM
RCA9IC0xCiAgICAgX0VYSVRfQ09ERV9CQURfSlNPTiA9IC0yCiAgICAgX0VYSVRfQ09ERV9GQUlM
RURfVVBMT0FESU5HID0gLTMKKyAgICBfRVhJVF9DT0RFX0JBRF9QUkVQQVJBVElPTiA9IC00CiAK
ICAgICBkZWYgX19pbml0X18oc2VsZiwgYXJncz1Ob25lLCBwb3J0PU5vbmUpOgogICAgICAgICBz
ZWxmLl9vcHRpb25zLCBzZWxmLl9hcmdzID0gUGVyZlRlc3RzUnVubmVyLl9wYXJzZV9hcmdzKGFy
Z3MpCkBAIC0xMDQsNyArMTA2LDcgQEAKICAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIHRl
c3RzIGZvdW5kLiIiIgogCiAgICAgICAgIGRlZiBfaXNfdGVzdF9maWxlKGZpbGVzeXN0ZW0sIGRp
cm5hbWUsIGZpbGVuYW1lKToKLSAgICAgICAgICAgIHJldHVybiBmaWxlc3lzdGVtLnNwbGl0ZXh0
KGZpbGVuYW1lKVsxXSBpbiBbJy5odG1sJywgJy5zdmcnXQorICAgICAgICAgICAgcmV0dXJuIGZp
bGVzeXN0ZW0uc3BsaXRleHQoZmlsZW5hbWUpWzFdIGluIFsnLmh0bWwnLCAnLnN2ZycsICcucmVw
bGF5J10KIAogICAgICAgICBmaWxlc3lzdGVtID0gc2VsZi5faG9zdC5maWxlc3lzdGVtCiAKQEAg
LTEyMiw3ICsxMjQsOCBAQAogICAgICAgICAgICAgcmVsYXRpdmVfcGF0aCA9IHNlbGYuX3BvcnQu
cmVsYXRpdmVfcGVyZl90ZXN0X2ZpbGVuYW1lKHBhdGgpLnJlcGxhY2UoJ1xcJywgJy8nKQogICAg
ICAgICAgICAgaWYgc2VsZi5fcG9ydC5za2lwc19wZXJmX3Rlc3QocmVsYXRpdmVfcGF0aCk6CiAg
ICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHRlc3RzLmFwcGVuZChQZXJmVGVz
dEZhY3RvcnkuY3JlYXRlX3BlcmZfdGVzdChyZWxhdGl2ZV9wYXRoLCBwYXRoKSkKKyAgICAgICAg
ICAgIHRlc3QgPSBQZXJmVGVzdEZhY3RvcnkuY3JlYXRlX3BlcmZfdGVzdChyZWxhdGl2ZV9wYXRo
LCBwYXRoKQorICAgICAgICAgICAgdGVzdHMuYXBwZW5kKHRlc3QpCiAKICAgICAgICAgcmV0dXJu
IHRlc3RzCiAKQEAgLTEzMSwxMCArMTM0LDEyIEBACiAgICAgICAgICAgICBfbG9nLmVycm9yKCJC
dWlsZCBub3QgdXAgdG8gZGF0ZSBmb3IgJXMiICUgc2VsZi5fcG9ydC5fcGF0aF90b19kcml2ZXIo
KSkKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9FWElUX0NPREVfQkFEX0JVSUxECiAKLSAgICAg
ICAgIyBXZSB3cmFwIGFueSBwYXJ0cyBvZiB0aGUgcnVuIHRoYXQgYXJlIHNsb3cgb3IgbGlrZWx5
IHRvIHJhaXNlIGV4Y2VwdGlvbnMKLSAgICAgICAgIyBpbiBhIHRyeS9maW5hbGx5IHRvIGVuc3Vy
ZSB0aGF0IHdlIGNsZWFuIHVwIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgIHVu
ZXhwZWN0ZWQgPSAtMQogICAgICAgICB0ZXN0cyA9IHNlbGYuX2NvbGxlY3RfdGVzdHMoKQorCisg
ICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgaWYgbm90IHRlc3QucHJlcGFy
ZShzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLnRpbWVfb3V0X21zLCBzZWxmLl9ob3N0LmZpbGVz
eXN0ZW0pOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9FWElUX0NPREVfQkFEX1BSRVBB
UkFUSU9OCisKICAgICAgICAgdW5leHBlY3RlZCA9IHNlbGYuX3J1bl90ZXN0c19zZXQoc29ydGVk
KGxpc3QodGVzdHMpLCBrZXk9bGFtYmRhIHRlc3Q6IHRlc3QudGVzdF9uYW1lKCkpLCBzZWxmLl9w
b3J0KQogCiAgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9vcHRpb25zCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3QucHkJKHJl
dmlzaW9uIDExODM5NSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVz
dHMvcGVyZnRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwyMCBAQAogIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogCiAKK2ltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBtYXRoCiBp
bXBvcnQgcmUKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKIAor
IyBJbXBvcnQgZm9yIGF1dG8taW5zdGFsbAoraW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0
b2luc3RhbGxlZC53ZWJwYWdlcmVwbGF5CisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNv
bnRyb2xsZXJzLnRlc3RfcmVzdWx0X3dyaXRlciBpbXBvcnQgVGVzdFJlc3VsdFdyaXRlcgogZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5kcml2ZXIgaW1wb3J0IERyaXZlcklucHV0Citm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmRyaXZlciBpbXBvcnQgRHJpdmVyT3V0cHV0
CiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtNDksMTQgKzU4LDE3
IEBACiAgICAgZGVmIHBhdGhfb3JfdXJsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fcGF0
aF9vcl91cmwKIAotICAgIGRlZiBydW4oc2VsZiwgZHJpdmVyLCB0aW1lb3V0X21zKToKLSAgICAg
ICAgb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KERyaXZlcklucHV0KHNlbGYucGF0aF9vcl91cmwo
KSwgdGltZW91dF9tcywgTm9uZSwgRmFsc2UpKQorICAgIGRlZiBwcmVwYXJlKHNlbGYsIHBvcnQs
IHRpbWVfb3V0X21zLCBmaWxlc3lzdGVtKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRl
ZiBydW4oc2VsZiwgZHJpdmVyLCB0aW1lX291dF9tcyk6CisgICAgICAgIG91dHB1dCA9IGRyaXZl
ci5ydW5fdGVzdChEcml2ZXJJbnB1dChzZWxmLnBhdGhfb3JfdXJsKCksIHRpbWVfb3V0X21zLCBO
b25lLCBGYWxzZSkpCiAgICAgICAgIGlmIHNlbGYucnVuX2ZhaWxlZChvdXRwdXQpOgogICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2Vfb3V0cHV0KG91dHB1
dCkKIAogICAgIGRlZiBydW5fZmFpbGVkKHNlbGYsIG91dHB1dCk6Ci0gICAgICAgIGlmIG91dHB1
dC50ZXh0ID09IE5vbmUgb3Igb3V0cHV0LmVycm9yOgorICAgICAgICBpZiBub3Qgb3V0cHV0IG9y
IG91dHB1dC50ZXh0ID09IE5vbmUgb3Igb3V0cHV0LmVycm9yOgogICAgICAgICAgICAgcGFzcwog
ICAgICAgICBlbGlmIG91dHB1dC50aW1lb3V0OgogICAgICAgICAgICAgX2xvZy5lcnJvcigndGlt
ZW91dDogJXMnICUgc2VsZi50ZXN0X25hbWUoKSkKQEAgLTY1LDcgKzc3LDcgQEAKICAgICAgICAg
ZWxzZToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgICAgIGlmIG91dHB1dC5lcnJv
cjoKKyAgICAgICAgaWYgb3V0cHV0IGFuZCBvdXRwdXQuZXJyb3I6CiAgICAgICAgICAgICBfbG9n
LmVycm9yKCdlcnJvcjogJXNcbiVzJyAlIChzZWxmLnRlc3RfbmFtZSgpLCBvdXRwdXQuZXJyb3Ip
KQogCiAgICAgICAgIHJldHVybiBUcnVlCkBAIC0xNjAsMTEgKzE3MiwxNCBAQAogICAgIGRlZiBf
X2luaXRfXyhzZWxmLCB0ZXN0X25hbWUsIHBhdGhfb3JfdXJsKToKICAgICAgICAgc3VwZXIoUGFn
ZUxvYWRpbmdQZXJmVGVzdCwgc2VsZikuX19pbml0X18odGVzdF9uYW1lLCBwYXRoX29yX3VybCkK
IAotICAgIGRlZiBydW4oc2VsZiwgZHJpdmVyLCB0aW1lb3V0X21zKToKKyAgICBkZWYgcnVuX3Np
bmdsZShzZWxmLCBkcml2ZXIsIHRpbWVfb3V0X21zKToKKyAgICAgICAgcmV0dXJuIGRyaXZlci5y
dW5fdGVzdChEcml2ZXJJbnB1dChzZWxmLnBhdGhfb3JfdXJsKCksIHRpbWVfb3V0X21zLCBOb25l
LCBGYWxzZSkpCisKKyAgICBkZWYgcnVuKHNlbGYsIGRyaXZlciwgdGltZV9vdXRfbXMpOgogICAg
ICAgICB0ZXN0X3RpbWVzID0gW10KIAogICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCAyMCk6Ci0g
ICAgICAgICAgICBvdXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQoc2VsZi5wYXRo
X29yX3VybCgpLCB0aW1lb3V0X21zLCBOb25lLCBGYWxzZSkpCisgICAgICAgICAgICBvdXRwdXQg
PSBzZWxmLnJ1bl9zaW5nbGUoZHJpdmVyLCB0aW1lX291dF9tcykKICAgICAgICAgICAgIGlmIHNl
bGYucnVuX2ZhaWxlZChvdXRwdXQpOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAg
ICAgICAgICBpZiBpID09IDA6CkBAIC0xOTQsMTEgKzIwOSwxMjcgQEAKICAgICAgICAgcmV0dXJu
IHtzZWxmLnRlc3RfbmFtZSgpOiByZXN1bHRzfQogCiAKK2NsYXNzIFJlcGxheVNlcnZlcihvYmpl
Y3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmNoaXZlLCByZWNvcmQpOgorICAgICAgICBz
ZWxmLl9wcm9jZXNzID0gTm9uZQorCisgICAgICAgICMgRklYTUU6IFNob3VsZCBlcnJvciBpZiBs
b2NhbCBwcm94eSBpc24ndCBzZXQgdG8gZm9yd2FyZCByZXF1ZXN0cyB0byBsb2NhbGhvc3Q6ODA4
MCBhbmQgbG9jYWxob3N0Ojg0MTMKKworICAgICAgICByZXBsYXlfcGF0aCA9IG9zLnBhdGguam9p
bihvcy5wYXRoLmRpcm5hbWUod2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLndlYnBh
Z2VyZXBsYXkuX19maWxlX18pLCAncmVwbGF5LnB5JykKKyAgICAgICAgYXJncyA9IFsncHl0aG9u
JywgcmVwbGF5X3BhdGgsICctLW5vLWRuc19mb3J3YXJkaW5nJywgJy0tcG9ydCcsICc4MDgwJywg
Jy0tc3NsX3BvcnQnLCAnODQxMycsICctLXVzZV9jbG9zZXN0X21hdGNoJ10KKyAgICAgICAgaWYg
cmVjb3JkOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoJy0tcmVjb3JkJykKKyAgICAgICAgYXJn
cy5hcHBlbmQoYXJjaGl2ZSkKKworICAgICAgICBzZWxmLl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Q
b3BlbihhcmdzLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBF
KQorCisgICAgZGVmIHdhaXRfdW50aWxfcmVhZHkoc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6
CisgICAgICAgICAgICBsaW5lID0gc2VsZi5fcHJvY2Vzcy5zdGRlcnIucmVhZGxpbmUoKQorICAg
ICAgICAgICAgaWYgIlN0YXJ0ZWQgSFRUUFMgc2VydmVyIG9uIiBpbiBsaW5lIG9yIHNlbGYuX3By
b2Nlc3MucG9sbCgpICE9IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHJl
dHVybgorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Cisg
ICAgICAgICAgICBzZWxmLl9wcm9jZXNzLnNlbmRfc2lnbmFsKHNpZ25hbC5TSUdJTlQpCisgICAg
ICAgICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQorCisgICAgICAgICAgICBfbG9nLmRlYnVnKCdX
ZWJQYWdlUmVwbGF5IGVycm9yczonKQorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAg
ICAgICAgICBsaW5lID0gc2VsZi5fcHJvY2Vzcy5zdGRlcnIucmVhZGxpbmUoKQorICAgICAgICAg
ICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAg
ICAgICAgIF9sb2cuZGVidWcobGluZS5zdHJpcCgnXHInKSkKKworICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnV2ViUGFnZVJlcGxheSBvdXRwdXQ6JykKKyAgICAgICAgICAgIHdoaWxlIFRydWU6Cisg
ICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuX3Byb2Nlc3Muc3Rkb3V0LnJlYWRsaW5lKCkKKyAg
ICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgICAgICAgICBfbG9nLmRlYnVnKGxpbmUuc3RyaXAoJ1xyJykpCisKKyAgICAgICAgc2Vs
Zi5fcHJvY2VzcyA9IE5vbmUKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBzZWxm
LnN0b3AoKQorCisKK2NsYXNzIFJlcGxheVBlcmZUZXN0KFBhZ2VMb2FkaW5nUGVyZlRlc3QpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X25hbWUsIHBhdGhfb3JfdXJsKToKKyAgICAgICAg
c3VwZXIoUmVwbGF5UGVyZlRlc3QsIHNlbGYpLl9faW5pdF9fKHRlc3RfbmFtZSwgcGF0aF9vcl91
cmwpCisKKyAgICBkZWYgX3N0YXJ0X3JlcGxheV9zZXJ2ZXIoc2VsZiwgYXJjaGl2ZSwgcmVjb3Jk
KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFJlcGxheVNlcnZlcihhcmNoaXZl
LCByZWNvcmQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgorICAgICAgICAgICAg
aWYgZXJyb3IuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIF9sb2cuZXJy
b3IoIlJlcGxheSB0ZXN0cyByZXF1aXJlIHdlYi1wYWdlLXJlcGxheS4iKQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBlcnJvcgorCisgICAgZGVmIHByZXBhcmUoc2Vs
ZiwgcG9ydCwgdGltZV9vdXRfbXMsIGZpbGVzeXN0ZW0pOgorICAgICAgICBwYXRoX3dpdGhvdXRf
ZXh0ID0gZmlsZXN5c3RlbS5zcGxpdGV4dChzZWxmLnBhdGhfb3JfdXJsKCkpWzBdCisKKyAgICAg
ICAgc2VsZi5fYXJjaGl2ZV9wYXRoID0gZmlsZXN5c3RlbS5qb2luKHBhdGhfd2l0aG91dF9leHQg
KyAnLndwcicpCisgICAgICAgIHNlbGYuX2V4cGVjdGVkX2ltYWdlX3BhdGggPSBmaWxlc3lzdGVt
LmpvaW4ocGF0aF93aXRob3V0X2V4dCArICctZXhwZWN0ZWQucG5nJykKKyAgICAgICAgc2VsZi5f
dXJsID0gZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShzZWxmLnBhdGhfb3JfdXJsKCkpLnNwbGl0
KCdcbicpWzBdCisKKyAgICAgICAgaWYgZmlsZXN5c3RlbS5pc2ZpbGUoc2VsZi5fYXJjaGl2ZV9w
YXRoKSBhbmQgZmlsZXN5c3RlbS5pc2ZpbGUoc2VsZi5fZXhwZWN0ZWRfaW1hZ2VfcGF0aCk6Cisg
ICAgICAgICAgICBfbG9nLmluZm8oIlJlcGxheSByZWFkeSBmb3IgJXMiICUgc2VsZi5fYXJjaGl2
ZV9wYXRoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBfbG9nLmluZm8oIlBy
ZXBhcmluZyByZXBsYXkgZm9yICVzIiAlIHNlbGYudGVzdF9uYW1lKCkpCisKKyAgICAgICAgZHJp
dmVyID0gcG9ydC5jcmVhdGVfZHJpdmVyKHdvcmtlcl9udW1iZXI9MSwgbm9fdGltZW91dD1UcnVl
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLnJ1bl9zaW5nbGUoZHJp
dmVyLCB0aW1lX291dF9tcywgcmVjb3JkPVRydWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBkcml2ZXIuc3RvcCgpCisKKyAgICAgICAgaWYgbm90IG91dHB1dCBvciBub3QgZmlsZXN5
c3RlbS5pc2ZpbGUoc2VsZi5fYXJjaGl2ZV9wYXRoKToKKyAgICAgICAgICAgIF9sb2cuZXJyb3Io
IkZhaWxlZCB0byBwcmVwYXJlIGEgcmVwbGF5IGZvciAlcyIgJSBzZWxmLnRlc3RfbmFtZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgX2xvZy5pbmZvKCJQcmVwYXJlZCBy
ZXBsYXkgZm9yICVzIiAlIHNlbGYudGVzdF9uYW1lKCkpCisKKyAgICAgICAgcmV0dXJuIFRydWUK
KworICAgIGRlZiBydW5fc2luZ2xlKHNlbGYsIGRyaXZlciwgdGltZV9vdXRfbXMsIHJlY29yZD1G
YWxzZSk6CisgICAgICAgIHNlcnZlciA9IHNlbGYuX3N0YXJ0X3JlcGxheV9zZXJ2ZXIoc2VsZi5f
YXJjaGl2ZV9wYXRoLCByZWNvcmQpCisgICAgICAgIGlmIG5vdCBzZXJ2ZXI6CisgICAgICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcnZlci53YWl0X3Vu
dGlsX3JlYWR5KCkKKyAgICAgICAgICAgIGRyaXZlci5ydW5fdGVzdChEcml2ZXJJbnB1dCgiYWJv
dXQ6YmxhbmsiLCB0aW1lX291dF9tcywgTm9uZSwgRmFsc2UpKQorICAgICAgICAgICAgb3V0cHV0
ID0gZHJpdmVyLnJ1bl90ZXN0KERyaXZlcklucHV0KHNlbGYuX3VybCwgdGltZV9vdXRfbXMsIGlt
YWdlX2hhc2g9Tm9uZSwgc2hvdWxkX3J1bl9waXhlbF90ZXN0PVRydWUpKQorCisgICAgICAgICAg
ICBpZiBub3Qgb3V0cHV0LmltYWdlOgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxl
ZCB0byBsb2FkIHRoZSBwYWdlOiIpCisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcihvdXRwdXQu
dGV4dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICBmaWxlc3lz
dGVtID0gZHJpdmVyLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbQorICAgICAgICAgICAgZGlybmFtZSA9
IGZpbGVzeXN0ZW0uZGlybmFtZShzZWxmLnBhdGhfb3JfdXJsKCkpCisgICAgICAgICAgICBmaWxl
bmFtZSA9IGZpbGVzeXN0ZW0uc3BsaXQoc2VsZi5wYXRoX29yX3VybCgpKVsxXQorICAgICAgICAg
ICAgd3JpdGVyID0gVGVzdFJlc3VsdFdyaXRlcihmaWxlc3lzdGVtLCBkcml2ZXIuX3BvcnQsIGRp
cm5hbWUsIGZpbGVuYW1lKQorICAgICAgICAgICAgaWYgcmVjb3JkOgorICAgICAgICAgICAgICAg
IHdyaXRlci53cml0ZV9pbWFnZV9maWxlcyhhY3R1YWxfaW1hZ2U9Tm9uZSwgZXhwZWN0ZWRfaW1h
Z2U9b3V0cHV0LmltYWdlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3cml0
ZXIud3JpdGVfaW1hZ2VfZmlsZXMoYWN0dWFsX2ltYWdlPW91dHB1dC5pbWFnZSwgZXhwZWN0ZWRf
aW1hZ2U9Tm9uZSkKKworICAgICAgICAgICAgcmV0dXJuIG91dHB1dAorICAgICAgICBmaW5hbGx5
OgorICAgICAgICAgICAgc2VydmVyLnN0b3AoKQorCisKIGNsYXNzIFBlcmZUZXN0RmFjdG9yeShv
YmplY3QpOgogCiAgICAgX3BhdHRlcm5fbWFwID0gWwotICAgICAgICAocmUuY29tcGlsZSgnXmlu
c3BlY3Rvci8nKSwgQ2hyb21pdW1TdHlsZVBlcmZUZXN0KSwKLSAgICAgICAgKHJlLmNvbXBpbGUo
J15QYWdlTG9hZC8nKSwgUGFnZUxvYWRpbmdQZXJmVGVzdCksCisgICAgICAgIChyZS5jb21waWxl
KHInXmluc3BlY3Rvci8nKSwgQ2hyb21pdW1TdHlsZVBlcmZUZXN0KSwKKyAgICAgICAgKHJlLmNv
bXBpbGUocideUGFnZUxvYWQvJyksIFBhZ2VMb2FkaW5nUGVyZlRlc3QpLAorICAgICAgICAocmUu
Y29tcGlsZShyJyguKylcLnJlcGxheSQnKSwgUmVwbGF5UGVyZlRlc3QpLAogICAgIF0KIAogICAg
IEBjbGFzc21ldGhvZApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19f
aW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9fX2luaXRfXy5weQkocmV2aXNpb24gMTE4Mzk1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBA
CiAgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX2lyYygpCiAgICAgICAgIGVsaWYgJy5idWlsZGJv
dCcgaW4gZnVsbG5hbWU6CiAgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX2J1aWxkYm90KCkKKyAg
ICAgICAgZWxpZiAnLndlYnBhZ2VyZXBsYXknIGluIGZ1bGxuYW1lOgorICAgICAgICAgICAgc2Vs
Zi5faW5zdGFsbF93ZWJwYWdlcmVwbGF5KCkKIAogICAgIGRlZiBfaW5zdGFsbF9tZWNoYW5pemUo
c2VsZik6CiAgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFj
a2FnZXMvc291cmNlL20vbWVjaGFuaXplL21lY2hhbml6ZS0wLjIuNS50YXIuZ3oiLApAQCAtMTI2
LDYgKzEyOCwxNSBAQAogICAgICAgICBpbnN0YWxsZXIuaW5zdGFsbCh1cmw9Imh0dHA6Ly9kb3du
bG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvcHl0aG9uLWlyY2xpYi9weXRob24taXJjbGli
LzAuNC44L3B5dGhvbi1pcmNsaWItMC40LjguemlwIiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXJsX3N1YnBhdGg9ImlyY2JvdC5weSIpCiAKKyAgICBkZWYgX2luc3RhbGxfd2VicGFnZXJl
cGxheShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZzLmV4aXN0cyhzZWxmLl9mcy5qb2lu
KF9BVVRPSU5TVEFMTEVEX0RJUiwgIndlYnBhZ2VyZXBsYXkiKSk6CisgICAgICAgICAgICBzZWxm
Ll9pbnN0YWxsKCJodHRwOi8vd2ViLXBhZ2UtcmVwbGF5Lmdvb2dsZWNvZGUuY29tL2ZpbGVzL3dl
YnBhZ2VyZXBsYXktMS4xLjEudGFyLmd6IiwgIndlYnBhZ2VyZXBsYXktMS4xLjEiKQorICAgICAg
ICAgICAgc2VsZi5fZnMubW92ZShzZWxmLl9mcy5qb2luKF9BVVRPSU5TVEFMTEVEX0RJUiwgIndl
YnBhZ2VyZXBsYXktMS4xLjEiKSwgc2VsZi5fZnMuam9pbihfQVVUT0lOU1RBTExFRF9ESVIsICJ3
ZWJwYWdlcmVwbGF5IikpCisKKyAgICAgICAgaW5pdF9wYXRoID0gc2VsZi5fZnMuam9pbihfQVVU
T0lOU1RBTExFRF9ESVIsICJ3ZWJwYWdlcmVwbGF5IiwgIl9faW5pdF9fLnB5IikKKyAgICAgICAg
aWYgbm90IHNlbGYuX2ZzLmV4aXN0cyhpbml0X3BhdGgpOgorICAgICAgICAgICAgc2VsZi5fZnMu
d3JpdGVfdGV4dF9maWxlKGluaXRfcGF0aCwgIiIpCisKICAgICBkZWYgX2luc3RhbGwoc2VsZiwg
dXJsLCB1cmxfc3VicGF0aCk6CiAgICAgICAgIGluc3RhbGxlciA9IEF1dG9JbnN0YWxsZXIodGFy
Z2V0X2Rpcj1fQVVUT0lOU1RBTExFRF9ESVIpCiAgICAgICAgIGluc3RhbGxlci5pbnN0YWxsKHVy
bD11cmwsIHVybF9zdWJwYXRoPXVybF9zdWJwYXRoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144957</attachid>
            <date>2012-05-30 17:44:46 -0700</date>
            <delta_ts>2012-05-31 18:21:33 -0700</delta_ts>
            <desc>Initial implementation</desc>
            <filename>bug-84008-20120530174842.patch</filename>
            <type>text/plain</type>
            <size>47464</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExOTAwNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDk0IEBACisyMDEyLTA1LTMwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIEFkZCBwdWJsaWMgcGFnZSBsb2FkaW5nIHBlcmZvcm1hbmNlIHRlc3RzIHVzaW5n
IHdlYi1wYWdlLXJlcGxheQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODQwMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdGhlIHByaW1pdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiByZXBsYXkgcGVyZm9y
bWFuY2UgdGVzdHMuIFdlIHVzZSB3ZWItcGFnZS1yZXBsYXkgKGh0dHA6Ly9jb2RlLmdvb2dsZS5j
b20vcC93ZWItcGFnZS1yZXBsYXkvKQorICAgICAgICB0byBjYWNoZSBkYXRhIGxvY2FsbHkuIEVh
Y2ggcmVwbGF5IHRlc3QgaXMgcmVwcmVzZW50ZWQgYnkgYSB0ZXh0IGZpbGUgd2l0aCAucmVwbGF5
IGV4dGVuc2lvbiBjb250YWluaW5nIGEgc2luZ2xlIFVSTC4KKyAgICAgICAgVG8gaGFzaCBvdXQg
YnVncyBhbmQgaXNvbGF0ZSB0aGVtIGZyb20gdGhlIHJlc3Qgb2YgcGVyZm9ybWFuY2UgdGVzdHMs
IHJlcGxheSB0ZXN0cyBhcmUgaGlkZGVuIGJlaGluZCAtLXJlcGxheSBmbGFnLgorICAgICAgICBU
byBydW4gbG9jYWxseSwgdXNlICJydW4tcGVyZi10ZXN0cyAtLXJlcGxheSIuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weToKKyAgICAgICAg
KFdlYktpdERyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dCk6IEFsbG93IHRlc3QgbmFt
ZXMgdGhhdCBzdGFydHMgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3QucHk6CisgICAgICAgIChQZXJm
VGVzdC5wcmVwYXJlKTogQWRkZWQuIE92ZXJyaWRlbiBieSBSZXBsYXlQZXJmVGVzdC4KKyAgICAg
ICAgKFBlcmZUZXN0LnJ1bik6CisgICAgICAgIChQZXJmVGVzdC5ydW5fZmFpbGVkKTogQ2hlY2sg
aWYgb3V0cHV0IGlzIGEgdmFsaWQgb2JqZWN0IHNpbmNlIFJlcGxheVBlcmZUZXN0IG1heSBjYWxs
IHRoaXMgZnVuY3Rpb24gd2l0aCBOb25lLgorICAgICAgICAoUGFnZUxvYWRpbmdQZXJmVGVzdC5y
dW4pOgorICAgICAgICAoUGFnZUxvYWRpbmdQZXJmVGVzdC5ydW5fc2luZ2xlKTogRXh0cmFjdGVk
IHRvIGJlIG92ZXJyaWRlbiBieSBSZXBsYXlQZXJmVGVzdC4KKyAgICAgICAgKFJlcGxheVNlcnZl
cik6IEFkZGVkLiBSZXBvbnNpYmxlIGZvciBzdGFydGluZyBhbmQgc3RvcHBpbmcgcmVwbGF5LnB5
IGluIHRoZSB3ZWItcGFnZS1yZXBsYXkuCisgICAgICAgIChSZXBsYXlTZXJ2ZXIuX19pbml0X18p
OgorICAgICAgICAoUmVwbGF5U2VydmVyLndhaXRfdW50aWxfcmVhZHkpOiBXYWl0IHVudGlsIHBv
cnQgODA4MCBpcyByZWFkeS4gSSBoYXZlIHRyaWVkIGxvb2tpbmcgYXQgdGhlIHBpcGVkIG91dHB1
dCBmcm9tIHdlYi1wYWdlLXJlcGxheQorICAgICAgICBidXQgaXQgY2F1c2VkIGEgZGVhZCBsb2Nr
IG9uIHNvbWUgd2ViIHBhZ2VzLgorICAgICAgICAoUmVwbGF5U2VydmVyLnN0b3ApOgorICAgICAg
ICAoUmVwbGF5U2VydmVyLl9fZGVsX18pOgorICAgICAgICAoUmVwbGF5UGVyZlRlc3QpOiBBZGRl
ZC4KKyAgICAgICAgKFJlcGxheVBlcmZUZXN0Ll9faW5pdF9fKToKKyAgICAgICAgKFJlcGxheVBl
cmZUZXN0Ll9zdGFydF9yZXBsYXlfc2VydmVyKToKKyAgICAgICAgKFJlcGxheVBlcmZUZXN0LnBy
ZXBhcmUpOiBDcmVhdGVzIHRlc3Qud3ByIGFuZCB0ZXN0LWV4cGVjdGVkLnBuZyB0byBjYWNoZSB0
aGUgcGFnZSB3aGVuIGEgcmVwbGF5IHRlc3QgaXMgcmFuIGZvciB0aGUgZmlyc3QgdGltZS4KKyAg
ICAgICAgVGhlIHN1YnNlcXVlbnQgcnVucyBvZiB0aGUgc2FtZSB0ZXN0IHdpbGwganVzdCB1c2Ug
dGVzdC53cHIuCisgICAgICAgIChSZXBsYXlQZXJmVGVzdC5ydW5fc2luZ2xlKToKKyAgICAgICAg
KFBlcmZUZXN0RmFjdG9yeSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5j
ZV90ZXN0cy9wZXJmdGVzdF91bml0dGVzdC5weToKKyAgICAgICAgKFRlc3RQYWdlTG9hZGluZ1Bl
cmZUZXN0LnRlc3RfcnVuKToKKyAgICAgICAgKFRlc3RQYWdlTG9hZGluZ1BlcmZUZXN0LnRlc3Rf
cnVuX3dpdGhfYmFkX291dHB1dCk6CisgICAgICAgIChUZXN0UmVwbGF5UGVyZlRlc3QpOgorICAg
ICAgICAoVGVzdFJlcGxheVBlcmZUZXN0LlJlcGxheVRlc3RQb3J0KToKKyAgICAgICAgKFRlc3RS
ZXBsYXlQZXJmVGVzdC5SZXBsYXlUZXN0UG9ydC5fX2luaXRfXyk6CisgICAgICAgIChUZXN0UmVw
bGF5UGVyZlRlc3QuUmVwbGF5VGVzdFBvcnQuX19pbml0X18uUmVwbGF5VGVzdERyaXZlcik6Cisg
ICAgICAgIChUZXN0UmVwbGF5UGVyZlRlc3QuUmVwbGF5VGVzdFBvcnQuX19pbml0X18uUmVwbGF5
VGVzdERyaXZlci5ydW5fdGVzdCk6CisgICAgICAgIChUZXN0UmVwbGF5UGVyZlRlc3QuUmVwbGF5
VGVzdFBvcnQuX2RyaXZlcl9jbGFzcyk6CisgICAgICAgIChUZXN0UmVwbGF5UGVyZlRlc3QuTW9j
a1JlcGxheVNlcnZlcik6CisgICAgICAgIChUZXN0UmVwbGF5UGVyZlRlc3QuTW9ja1JlcGxheVNl
cnZlci5fX2luaXRfXyk6CisgICAgICAgIChUZXN0UmVwbGF5UGVyZlRlc3QuTW9ja1JlcGxheVNl
cnZlci5zdG9wKToKKyAgICAgICAgKFRlc3RSZXBsYXlQZXJmVGVzdC5fYWRkX2ZpbGUpOgorICAg
ICAgICAoVGVzdFJlcGxheVBlcmZUZXN0Ll9zZXR1cF90ZXN0KToKKyAgICAgICAgKFRlc3RSZXBs
YXlQZXJmVGVzdC50ZXN0X3J1bl9zaW5nbGUpOgorICAgICAgICAoVGVzdFJlcGxheVBlcmZUZXN0
LnRlc3RfcnVuX3NpbmdsZS5ydW5fdGVzdCk6CisgICAgICAgIChUZXN0UmVwbGF5UGVyZlRlc3Qu
dGVzdF9ydW5fc2luZ2xlX2ZhaWxzX3dpdGhvdXRfd2VicGFnZXJlcGxheSk6CisgICAgICAgIChU
ZXN0UmVwbGF5UGVyZlRlc3QudGVzdF9wcmVwYXJlX2ZhaWxzX3doZW5fd2FpdF91bnRpbF9yZWFk
eV9mYWlscyk6CisgICAgICAgIChUZXN0UmVwbGF5UGVyZlRlc3QudGVzdF9ydW5fc2luZ2xlX2Zh
aWxzX3doZW5fb3V0cHV0X2hhc19lcnJvcik6CisgICAgICAgIChUZXN0UmVwbGF5UGVyZlRlc3Qu
dGVzdF9ydW5fc2luZ2xlX2ZhaWxzX3doZW5fb3V0cHV0X2hhc19lcnJvci5ydW5fdGVzdCk6Cisg
ICAgICAgIChUZXN0UmVwbGF5UGVyZlRlc3QudGVzdF9wcmVwYXJlKToKKyAgICAgICAgKFRlc3RS
ZXBsYXlQZXJmVGVzdC50ZXN0X3ByZXBhcmUucnVuX3Rlc3QpOgorICAgICAgICAoVGVzdFJlcGxh
eVBlcmZUZXN0LnRlc3RfcHJlcGFyZV9jYWxsc19ydW5fc2luZ2xlKToKKyAgICAgICAgKFRlc3RS
ZXBsYXlQZXJmVGVzdC50ZXN0X3ByZXBhcmVfY2FsbHNfcnVuX3NpbmdsZS5ydW5fc2luZ2xlKToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1
bm5lci5weToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lcik6CisgICAgICAgIChQZXJmVGVzdHNS
dW5uZXIuX3BhcnNlX2FyZ3MpOiBBZGRlZCAtLXJlcGxheSBmbGFnIHRvIGVuYWJsZSByZXBsYXkg
dGVzdHMuCisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX2NvbGxlY3RfdGVzdHMpOiBDb2xsZWN0
IC5yZXBsYXkgZmlsZXMgd2hlbiByZXBsYXkgdGVzdHMgYXJlIGVuYWJsZWQuCisgICAgICAgIChQ
ZXJmVGVzdHNSdW5uZXIuX2NvbGxlY3RfdGVzdHMuX2lzX3Rlc3RfZmlsZSk6CisgICAgICAgIChQ
ZXJmVGVzdHNSdW5uZXIucnVuKTogRXhpdCBlYXJseSBpZiBvbmUgb2YgY2FsbHMgdG8gcHJlcGFy
ZSgpIGZhaWxzLgorICAgICAgICAoUGVyZlRlc3RzUnVubmVyLl9ydW5fdGVzdHNfc2V0KToKKyAg
ICAgICAgKFBlcmZUZXN0c1J1bm5lci5fcnVuX3NpbmdsZV90ZXN0KToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl91bml0dGVzdC5w
eToKKyAgICAgICAgKGNyZWF0ZV9ydW5uZXIpOgorICAgICAgICAocnVuX3Rlc3QpOgorICAgICAg
ICAodGVzdF9ydW5fdGVzdF9zZXQpOgorICAgICAgICAodGVzdF9ydW5fdGVzdF9zZXRfa2lsbHNf
ZHJ0X3Blcl9ydW4pOgorICAgICAgICAodGVzdF9ydW5fdGVzdF9wYXVzZV9iZWZvcmVfdGVzdGlu
Zyk6CisgICAgICAgICh0ZXN0X3J1bl90ZXN0X3NldF9mb3JfcGFyc2VyX3Rlc3RzKToKKyAgICAg
ICAgKHRlc3RfcnVuX3Rlc3Rfc2V0X3dpdGhfanNvbl9vdXRwdXQpOgorICAgICAgICAodGVzdF9y
dW5fdGVzdF9zZXRfd2l0aF9qc29uX3NvdXJjZSk6CisgICAgICAgICh0ZXN0X3J1bl90ZXN0X3Nl
dF93aXRoX211bHRpcGxlX3JlcG9zaXRvcmllcyk6CisgICAgICAgICh0ZXN0X3J1bl93aXRoX3Vw
bG9hZF9qc29uKToKKyAgICAgICAgKHRlc3RfdXBsb2FkX2pzb24pOgorICAgICAgICAodGVzdF91
cGxvYWRfanNvbi5Nb2NrRmlsZVVwbG9hZGVyLnVwbG9hZF9zaW5nbGVfdGV4dF9maWxlKToKKyAg
ICAgICAgKF9hZGRfZmlsZSk6CisgICAgICAgICh0ZXN0X2NvbGxlY3RfdGVzdHMpOgorICAgICAg
ICAodGVzdF9jb2xsZWN0X3Rlc3RzX3dpdGhfbXVsdGlsZV9maWxlcyk6CisgICAgICAgICh0ZXN0
X2NvbGxlY3RfdGVzdHNfd2l0aF9tdWx0aWxlX2ZpbGVzLmFkZF9maWxlKToKKyAgICAgICAgKHRl
c3RfY29sbGVjdF90ZXN0c193aXRoX3NraXBwZWRfbGlzdCk6CisgICAgICAgICh0ZXN0X2NvbGxl
Y3RfdGVzdHNfd2l0aF9wYWdlX2xvYWRfc3ZnKToKKyAgICAgICAgKHRlc3RfY29sbGVjdF90ZXN0
c19zaG91bGRfaWdub3JlX3JlcGxheV90ZXN0c19ieV9kZWZhdWx0KToKKyAgICAgICAgKHRlc3Rf
Y29sbGVjdF90ZXN0c193aXRoX3JlcGxheV90ZXN0cyk6CisgICAgICAgICh0ZXN0X3BhcnNlX2Fy
Z3MpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weTog
QWRkZWQgdGhlIGRlcGVuZGVuY3kgZm9yIHdlYi1wYWdlLXJlcGxheSB2ZXJzaW9uIDEuMS4xLgor
ICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLmZpbmRfbW9kdWxlKToKKyAgICAgICAgKEF1
dG9pbnN0YWxsSW1wb3J0SG9vay5faW5zdGFsbF93ZWJwYWdlcmVwbGF5KToKKwogMjAxMi0wNS0z
MCAgT2phbiBWYWZhaSAgPG9qYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE9ubHkgZ2l2ZSBs
aW50IGVycm9ycyBmb3IgLWV4cGVjdGVkLnBuZyBwbmcgZmlsZXMgdGhhdCBsYWNrIGEgY2hlY2tz
dW0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvd2Via2l0LnB5CShyZXZpc2lvbiAxMTg4MTYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weQkod29ya2luZyBjb3B5KQpAQCAtNTI5LDYgKzUy
OSw4IEBAIGNsYXNzIFdlYktpdERyaXZlcihEcml2ZXIpOgogICAgIGRlZiBfY29tbWFuZF9mcm9t
X2RyaXZlcl9pbnB1dChzZWxmLCBkcml2ZXJfaW5wdXQpOgogICAgICAgICBpZiBzZWxmLmlzX2h0
dHBfdGVzdChkcml2ZXJfaW5wdXQudGVzdF9uYW1lKToKICAgICAgICAgICAgIGNvbW1hbmQgPSBz
ZWxmLnRlc3RfdG9fdXJpKGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCisgICAgICAgIGVsaWYgZHJp
dmVyX2lucHV0LnRlc3RfbmFtZS5zdGFydHN3aXRoKCdodHRwOi8vJykgb3IgZHJpdmVyX2lucHV0
LnRlc3RfbmFtZS5zdGFydHN3aXRoKCdodHRwczovLycpOgorICAgICAgICAgICAgY29tbWFuZCA9
IGRyaXZlcl9pbnB1dC50ZXN0X25hbWUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvbW1h
bmQgPSBzZWxmLl9wb3J0LmFic3BhdGhfZm9yX3Rlc3QoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkK
ICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3QucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdC5weQko
cmV2aXNpb24gMTE4ODE2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90
ZXN0cy9wZXJmdGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDIxIEBACiAjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAKIAoraW1wb3J0IGVycm5vCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG1hdGgK
IGltcG9ydCByZQoraW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc29ja2V0CitpbXBv
cnQgc3VicHJvY2VzcwogCisjIEltcG9ydCBmb3IgYXV0by1pbnN0YWxsCitpbXBvcnQgd2Via2l0
cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLndlYnBhZ2VyZXBsYXkKKworZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMudGVzdF9yZXN1bHRfd3JpdGVyIGltcG9ydCBUZXN0
UmVzdWx0V3JpdGVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmRyaXZlciBpbXBv
cnQgRHJpdmVySW5wdXQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZHJpdmVyIGlt
cG9ydCBEcml2ZXJPdXRwdXQKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18p
CkBAIC00OSwxNCArNTksMTcgQEAgY2xhc3MgUGVyZlRlc3Qob2JqZWN0KToKICAgICBkZWYgcGF0
aF9vcl91cmwoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9wYXRoX29yX3VybAogCi0gICAg
ZGVmIHJ1bihzZWxmLCBkcml2ZXIsIHRpbWVvdXRfbXMpOgotICAgICAgICBvdXRwdXQgPSBkcml2
ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQoc2VsZi5wYXRoX29yX3VybCgpLCB0aW1lb3V0X21zLCBO
b25lLCBGYWxzZSkpCisgICAgZGVmIHByZXBhcmUoc2VsZiwgcG9ydCwgdGltZV9vdXRfbXMpOgor
ICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJ1bihzZWxmLCBwb3J0LCBkcml2ZXIsIHRp
bWVfb3V0X21zKToKKyAgICAgICAgb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KERyaXZlcklucHV0
KHNlbGYucGF0aF9vcl91cmwoKSwgdGltZV9vdXRfbXMsIE5vbmUsIEZhbHNlKSkKICAgICAgICAg
aWYgc2VsZi5ydW5fZmFpbGVkKG91dHB1dCk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAg
ICAgICByZXR1cm4gc2VsZi5wYXJzZV9vdXRwdXQob3V0cHV0KQogCiAgICAgZGVmIHJ1bl9mYWls
ZWQoc2VsZiwgb3V0cHV0KToKLSAgICAgICAgaWYgb3V0cHV0LnRleHQgPT0gTm9uZSBvciBvdXRw
dXQuZXJyb3I6CisgICAgICAgIGlmIG5vdCBvdXRwdXQgb3Igb3V0cHV0LnRleHQgPT0gTm9uZSBv
ciBvdXRwdXQuZXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsaWYgb3V0cHV0LnRp
bWVvdXQ6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCd0aW1lb3V0OiAlcycgJSBzZWxmLnRlc3Rf
bmFtZSgpKQpAQCAtNjUsNyArNzgsNyBAQCBjbGFzcyBQZXJmVGVzdChvYmplY3QpOgogICAgICAg
ICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgaWYgb3V0cHV0LmVy
cm9yOgorICAgICAgICBpZiBvdXRwdXQgYW5kIG91dHB1dC5lcnJvcjoKICAgICAgICAgICAgIF9s
b2cuZXJyb3IoJ2Vycm9yOiAlc1xuJXMnICUgKHNlbGYudGVzdF9uYW1lKCksIG91dHB1dC5lcnJv
cikpCiAKICAgICAgICAgcmV0dXJuIFRydWUKQEAgLTE2MCwxMSArMTczLDExIEBAIGNsYXNzIFBh
Z2VMb2FkaW5nUGVyZlRlc3QoUGVyZlRlc3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0
X25hbWUsIHBhdGhfb3JfdXJsKToKICAgICAgICAgc3VwZXIoUGFnZUxvYWRpbmdQZXJmVGVzdCwg
c2VsZikuX19pbml0X18odGVzdF9uYW1lLCBwYXRoX29yX3VybCkKIAotICAgIGRlZiBydW4oc2Vs
ZiwgZHJpdmVyLCB0aW1lb3V0X21zKToKKyAgICBkZWYgcnVuKHNlbGYsIHBvcnQsIGRyaXZlciwg
dGltZV9vdXRfbXMpOgogICAgICAgICB0ZXN0X3RpbWVzID0gW10KIAogICAgICAgICBmb3IgaSBp
biByYW5nZSgwLCAyMCk6Ci0gICAgICAgICAgICBvdXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QoRHJp
dmVySW5wdXQoc2VsZi5wYXRoX29yX3VybCgpLCB0aW1lb3V0X21zLCBOb25lLCBGYWxzZSkpCisg
ICAgICAgICAgICBvdXRwdXQgPSBzZWxmLnJ1bl9zaW5nbGUocG9ydCwgZHJpdmVyLCB0aW1lX291
dF9tcykKICAgICAgICAgICAgIGlmIHNlbGYucnVuX2ZhaWxlZChvdXRwdXQpOgogICAgICAgICAg
ICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICBpZiBpID09IDA6CkBAIC0xOTMsMTIgKzIw
NiwxMjggQEAgY2xhc3MgUGFnZUxvYWRpbmdQZXJmVGVzdChQZXJmVGVzdCk6CiAgICAgICAgIHNl
bGYub3V0cHV0X3N0YXRpc3RpY3Moc2VsZi50ZXN0X25hbWUoKSwgcmVzdWx0cywgJycpCiAgICAg
ICAgIHJldHVybiB7c2VsZi50ZXN0X25hbWUoKTogcmVzdWx0c30KIAorICAgIGRlZiBydW5fc2lu
Z2xlKHNlbGYsIHBvcnQsIGRyaXZlciwgdGltZV9vdXRfbXMpOgorICAgICAgICByZXR1cm4gZHJp
dmVyLnJ1bl90ZXN0KERyaXZlcklucHV0KHNlbGYucGF0aF9vcl91cmwoKSwgdGltZV9vdXRfbXMs
IE5vbmUsIEZhbHNlKSkKKworCitjbGFzcyBSZXBsYXlTZXJ2ZXIob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgYXJjaGl2ZSwgcmVjb3JkKToKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9
IE5vbmUKKworICAgICAgICAjIEZJWE1FOiBTaG91bGQgZXJyb3IgaWYgbG9jYWwgcHJveHkgaXNu
J3Qgc2V0IHRvIGZvcndhcmQgcmVxdWVzdHMgdG8gbG9jYWxob3N0OjgwODAgYW5kIGxvY2FsaG9z
dDo4NDEzCisKKyAgICAgICAgcmVwbGF5X3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJu
YW1lKHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC53ZWJwYWdlcmVwbGF5Ll9fZmls
ZV9fKSwgJ3JlcGxheS5weScpCisgICAgICAgIGFyZ3MgPSBbJ3B5dGhvbicsIHJlcGxheV9wYXRo
LCAnLS1uby1kbnNfZm9yd2FyZGluZycsICctLXBvcnQnLCAnODA4MCcsICctLXNzbF9wb3J0Jywg
Jzg0MTMnLCAnLS11c2VfY2xvc2VzdF9tYXRjaCcsICctLWxvZ19sZXZlbCcsICd3YXJuaW5nJ10K
KyAgICAgICAgaWYgcmVjb3JkOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoJy0tcmVjb3JkJykK
KyAgICAgICAgYXJncy5hcHBlbmQoYXJjaGl2ZSkKKworICAgICAgICBzZWxmLl9wcm9jZXNzID0g
c3VicHJvY2Vzcy5Qb3BlbihhcmdzKQorCisgICAgZGVmIHdhaXRfdW50aWxfcmVhZHkoc2VsZik6
CisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIDEwMCk6CisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgY29ubmVjdGlvbiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoJ2xvY2Fs
aG9zdCcsICc4MDgwJyksIHRpbWVvdXQ9MTAwKQorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24u
Y2xvc2UoKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBleGNlcHQg
c29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJldHVybiBG
YWxzZQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Cisg
ICAgICAgICAgICBzZWxmLl9wcm9jZXNzLnNlbmRfc2lnbmFsKHNpZ25hbC5TSUdJTlQpCisgICAg
ICAgICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQorICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9u
ZQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuc3RvcCgpCisKKworY2xh
c3MgUmVwbGF5UGVyZlRlc3QoUGFnZUxvYWRpbmdQZXJmVGVzdCk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHRlc3RfbmFtZSwgcGF0aF9vcl91cmwpOgorICAgICAgICBzdXBlcihSZXBsYXlQZXJm
VGVzdCwgc2VsZikuX19pbml0X18odGVzdF9uYW1lLCBwYXRoX29yX3VybCkKKworICAgIGRlZiBf
c3RhcnRfcmVwbGF5X3NlcnZlcihzZWxmLCBhcmNoaXZlLCByZWNvcmQpOgorICAgICAgICB0cnk6
CisgICAgICAgICAgICByZXR1cm4gUmVwbGF5U2VydmVyKGFyY2hpdmUsIHJlY29yZCkKKyAgICAg
ICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6CisgICAgICAgICAgICBpZiBlcnJvci5lcnJubyA9
PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcigiUmVwbGF5IHRlc3Rz
IHJlcXVpcmUgd2ViLXBhZ2UtcmVwbGF5LiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHJhaXNlIGVycm9yCisKKyAgICBkZWYgcHJlcGFyZShzZWxmLCBwb3J0LCB0aW1lX291
dF9tcyk6CisgICAgICAgIGZpbGVzeXN0ZW0gPSBwb3J0Lmhvc3QuZmlsZXN5c3RlbQorICAgICAg
ICBwYXRoX3dpdGhvdXRfZXh0ID0gZmlsZXN5c3RlbS5zcGxpdGV4dChzZWxmLnBhdGhfb3JfdXJs
KCkpWzBdCisKKyAgICAgICAgc2VsZi5fYXJjaGl2ZV9wYXRoID0gZmlsZXN5c3RlbS5qb2luKHBh
dGhfd2l0aG91dF9leHQgKyAnLndwcicpCisgICAgICAgIHNlbGYuX2V4cGVjdGVkX2ltYWdlX3Bh
dGggPSBmaWxlc3lzdGVtLmpvaW4ocGF0aF93aXRob3V0X2V4dCArICctZXhwZWN0ZWQucG5nJykK
KyAgICAgICAgc2VsZi5fdXJsID0gZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShzZWxmLnBhdGhf
b3JfdXJsKCkpLnNwbGl0KCdcbicpWzBdCisKKyAgICAgICAgaWYgZmlsZXN5c3RlbS5pc2ZpbGUo
c2VsZi5fYXJjaGl2ZV9wYXRoKSBhbmQgZmlsZXN5c3RlbS5pc2ZpbGUoc2VsZi5fZXhwZWN0ZWRf
aW1hZ2VfcGF0aCk6CisgICAgICAgICAgICBfbG9nLmluZm8oIlJlcGxheSByZWFkeSBmb3IgJXMi
ICUgc2VsZi5fYXJjaGl2ZV9wYXRoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAg
ICBfbG9nLmluZm8oIlByZXBhcmluZyByZXBsYXkgZm9yICVzIiAlIHNlbGYudGVzdF9uYW1lKCkp
CisKKyAgICAgICAgZHJpdmVyID0gcG9ydC5jcmVhdGVfZHJpdmVyKHdvcmtlcl9udW1iZXI9MSwg
bm9fdGltZW91dD1UcnVlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzZWxm
LnJ1bl9zaW5nbGUocG9ydCwgZHJpdmVyLCB0aW1lX291dF9tcywgcmVjb3JkPVRydWUpCisgICAg
ICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkcml2ZXIuc3RvcCgpCisKKyAgICAgICAgaWYgbm90
IG91dHB1dCBvciBub3QgZmlsZXN5c3RlbS5pc2ZpbGUoc2VsZi5fYXJjaGl2ZV9wYXRoKToKKyAg
ICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBwcmVwYXJlIGEgcmVwbGF5IGZvciAlcyIg
JSBzZWxmLnRlc3RfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAg
X2xvZy5pbmZvKCJQcmVwYXJlZCByZXBsYXkgZm9yICVzIiAlIHNlbGYudGVzdF9uYW1lKCkpCisK
KyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBydW5fc2luZ2xlKHNlbGYsIHBvcnQsIGRy
aXZlciwgdGltZV9vdXRfbXMsIHJlY29yZD1GYWxzZSk6CisgICAgICAgIHNlcnZlciA9IHNlbGYu
X3N0YXJ0X3JlcGxheV9zZXJ2ZXIoc2VsZi5fYXJjaGl2ZV9wYXRoLCByZWNvcmQpCisgICAgICAg
IGlmIG5vdCBzZXJ2ZXI6CisgICAgICAgICAgICBfbG9nLmVycm9yKCJXZWIgcGFnZSByZXBsYXkg
ZGlkbid0IHN0YXJ0LiIpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGlmIG5vdCBzZXJ2ZXIud2FpdF91bnRpbF9yZWFkeSgpOgorICAgICAgICAg
ICAgICAgIF9sb2cuZXJyb3IoIldlYiBwYWdlIHJlcGxheSBkaWRuJ3Qgc3RhcnQuIikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICBkcml2ZXIucnVuX3Rlc3QoRHJp
dmVySW5wdXQoImFib3V0OmJsYW5rIiwgdGltZV9vdXRfbXMsIE5vbmUsIEZhbHNlKSkKKyAgICAg
ICAgICAgIF9sb2cuZGVidWcoIkxvYWRpbmcgdGhlIHBhZ2UiKQorCisgICAgICAgICAgICBvdXRw
dXQgPSBkcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5wdXQoc2VsZi5fdXJsLCB0aW1lX291dF9tcywg
aW1hZ2VfaGFzaD1Ob25lLCBzaG91bGRfcnVuX3BpeGVsX3Rlc3Q9VHJ1ZSkpCisgICAgICAgICAg
ICBpZiBzZWxmLnJ1bl9mYWlsZWQob3V0cHV0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgICAgICAgICBpZiBub3Qgb3V0cHV0LmltYWdlOgorICAgICAgICAgICAgICAgIF9s
b2cuZXJyb3IoIkxvYWRpbmcgdGhlIHBhZ2UgZGlkIG5vdCBnZW5lcmF0ZSBpbWFnZSByZXN1bHRz
IikKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKG91dHB1dC50ZXh0KQorICAgICAgICAgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGZpbGVzeXN0ZW0gPSBkcml2ZXIuX3BvcnQu
aG9zdC5maWxlc3lzdGVtCisgICAgICAgICAgICBkaXJuYW1lID0gZmlsZXN5c3RlbS5kaXJuYW1l
KHNlbGYucGF0aF9vcl91cmwoKSkKKyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZXN5c3RlbS5z
cGxpdChzZWxmLnBhdGhfb3JfdXJsKCkpWzFdCisgICAgICAgICAgICB3cml0ZXIgPSBUZXN0UmVz
dWx0V3JpdGVyKGZpbGVzeXN0ZW0sIGRyaXZlci5fcG9ydCwgZGlybmFtZSwgZmlsZW5hbWUpCisg
ICAgICAgICAgICBpZiByZWNvcmQ6CisgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlX2ltYWdl
X2ZpbGVzKGFjdHVhbF9pbWFnZT1Ob25lLCBleHBlY3RlZF9pbWFnZT1vdXRwdXQuaW1hZ2UpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZV9pbWFnZV9maWxl
cyhhY3R1YWxfaW1hZ2U9b3V0cHV0LmltYWdlLCBleHBlY3RlZF9pbWFnZT1Ob25lKQorCisgICAg
ICAgICAgICByZXR1cm4gb3V0cHV0CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZXJ2
ZXIuc3RvcCgpCisKIAogY2xhc3MgUGVyZlRlc3RGYWN0b3J5KG9iamVjdCk6CiAKICAgICBfcGF0
dGVybl9tYXAgPSBbCi0gICAgICAgIChyZS5jb21waWxlKCdeaW5zcGVjdG9yLycpLCBDaHJvbWl1
bVN0eWxlUGVyZlRlc3QpLAotICAgICAgICAocmUuY29tcGlsZSgnXlBhZ2VMb2FkLycpLCBQYWdl
TG9hZGluZ1BlcmZUZXN0KSwKKyAgICAgICAgKHJlLmNvbXBpbGUocideaW5zcGVjdG9yLycpLCBD
aHJvbWl1bVN0eWxlUGVyZlRlc3QpLAorICAgICAgICAocmUuY29tcGlsZShyJ15QYWdlTG9hZC8n
KSwgUGFnZUxvYWRpbmdQZXJmVGVzdCksCisgICAgICAgIChyZS5jb21waWxlKHInKC4rKVwucmVw
bGF5JCcpLCBSZXBsYXlQZXJmVGVzdCksCiAgICAgXQogCiAgICAgQGNsYXNzbWV0aG9kCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0X3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2Vf
dGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHkJKHJldmlzaW9uIDExODgxNikKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEyICszMSwxNiBAQCBpbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBt
YXRoCiBpbXBvcnQgdW5pdHRlc3QKIAorZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdF9tb2NrIGlt
cG9ydCBNb2NrSG9zdAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUg
aW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuZHJp
dmVyIGltcG9ydCBEcml2ZXJPdXRwdXQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQu
dGVzdCBpbXBvcnQgVGVzdERyaXZlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC50
ZXN0IGltcG9ydCBUZXN0UG9ydAogZnJvbSB3ZWJraXRweS5wZXJmb3JtYW5jZV90ZXN0cy5wZXJm
dGVzdCBpbXBvcnQgQ2hyb21pdW1TdHlsZVBlcmZUZXN0CiBmcm9tIHdlYmtpdHB5LnBlcmZvcm1h
bmNlX3Rlc3RzLnBlcmZ0ZXN0IGltcG9ydCBQYWdlTG9hZGluZ1BlcmZUZXN0CiBmcm9tIHdlYmtp
dHB5LnBlcmZvcm1hbmNlX3Rlc3RzLnBlcmZ0ZXN0IGltcG9ydCBQZXJmVGVzdAogZnJvbSB3ZWJr
aXRweS5wZXJmb3JtYW5jZV90ZXN0cy5wZXJmdGVzdCBpbXBvcnQgUGVyZlRlc3RGYWN0b3J5Citm
cm9tIHdlYmtpdHB5LnBlcmZvcm1hbmNlX3Rlc3RzLnBlcmZ0ZXN0IGltcG9ydCBSZXBsYXlQZXJm
VGVzdAogCiAKIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTEwNiw3ICsx
MTAsNyBAQCBjbGFzcyBUZXN0UGFnZUxvYWRpbmdQZXJmVGVzdCh1bml0dGVzdC5UCiAgICAgICAg
IG91dHB1dF9jYXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG91dHB1dF9jYXB0dXJl
LmNhcHR1cmVfb3V0cHV0KCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCh0ZXN0LnJ1bihkcml2ZXIsIE5vbmUpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCh0ZXN0LnJ1bihOb25lLCBkcml2ZXIsIE5vbmUpLAogICAgICAgICAgICAgICAgIHsnc29tZS10
ZXN0JzogeydtYXgnOiAyMDAwMCwgJ2F2Zyc6IDExMDAwLjAsICdtZWRpYW4nOiAxMTAwMCwgJ3N0
ZGV2JzogbWF0aC5zcXJ0KDU3MCAqIDEwMDAgKiAxMDAwKSwgJ21pbic6IDIwMDAsICd1bml0Jzog
J21zJ319KQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgYWN0dWFsX3N0ZG91dCwgYWN0
dWFsX3N0ZGVyciwgYWN0dWFsX2xvZ3MgPSBvdXRwdXRfY2FwdHVyZS5yZXN0b3JlX291dHB1dCgp
CkBAIC0xMjAsNyArMTI0LDcgQEAgY2xhc3MgVGVzdFBhZ2VMb2FkaW5nUGVyZlRlc3QodW5pdHRl
c3QuVAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ZXN0ID0gUGFnZUxvYWRpbmdQZXJmVGVz
dCgnc29tZS10ZXN0JywgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcpCiAgICAgICAgICAgICBk
cml2ZXIgPSBUZXN0UGFnZUxvYWRpbmdQZXJmVGVzdC5Nb2NrRHJpdmVyKFsxLCAyLCAzLCA0LCA1
LCA2LCA3LCAnc29tZSBlcnJvcicsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywg
MTgsIDE5LCAyMF0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QucnVuKGRyaXZl
ciwgTm9uZSksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QucnVuKE5v
bmUsIGRyaXZlciwgTm9uZSksIE5vbmUpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBh
Y3R1YWxfc3Rkb3V0LCBhY3R1YWxfc3RkZXJyLCBhY3R1YWxfbG9ncyA9IG91dHB1dF9jYXB0dXJl
LnJlc3RvcmVfb3V0cHV0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfc3Rkb3V0
LCAnJykKQEAgLTEyOCw2ICsxMzIsMTc4IEBAIGNsYXNzIFRlc3RQYWdlTG9hZGluZ1BlcmZUZXN0
KHVuaXR0ZXN0LlQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfbG9ncywgJ2Vycm9y
OiBzb21lLXRlc3RcbnNvbWUgZXJyb3JcbicpCiAKIAorY2xhc3MgVGVzdFJlcGxheVBlcmZUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGNsYXNzIFJlcGxheVRlc3RQb3J0KFRlc3RQb3J0
KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN1c3RvbV9ydW5fdGVzdD1Ob25lKToKKwor
ICAgICAgICAgICAgY2xhc3MgUmVwbGF5VGVzdERyaXZlcihUZXN0RHJpdmVyKToKKyAgICAgICAg
ICAgICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGV4dF9pbnB1dCk6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjdXN0b21fcnVuX3Rlc3QodGV4dF9pbnB1dCkgaWYgY3VzdG9tX3J1bl90ZXN0
IGVsc2UgTm9uZQorCisgICAgICAgICAgICBzZWxmLl9jdXN0b21fZHJpdmVyX2NsYXNzID0gUmVw
bGF5VGVzdERyaXZlcgorICAgICAgICAgICAgc3VwZXIoc2VsZi5fX2NsYXNzX18sIHNlbGYpLl9f
aW5pdF9fKGhvc3Q9TW9ja0hvc3QoKSkKKworICAgICAgICBkZWYgX2RyaXZlcl9jbGFzcyhzZWxm
KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jdXN0b21fZHJpdmVyX2NsYXNzCisKKyAgICBj
bGFzcyBNb2NrUmVwbGF5U2VydmVyKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB3YWl0X3VudGlsX3JlYWR5PVRydWUpOgorICAgICAgICAgICAgc2VsZi53YWl0X3VudGlsX3Jl
YWR5ID0gbGFtYmRhOiB3YWl0X3VudGlsX3JlYWR5CisKKyAgICAgICAgZGVmIHN0b3Aoc2VsZik6
CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX2FkZF9maWxlKHNlbGYsIHBvcnQsIGRpcm5h
bWUsIGZpbGVuYW1lLCBjb250ZW50PVRydWUpOgorICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5c3Rl
bS5tYXliZV9tYWtlX2RpcmVjdG9yeShkaXJuYW1lKQorICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5
c3RlbS5maWxlc1twb3J0Lmhvc3QuZmlsZXN5c3RlbS5qb2luKGRpcm5hbWUsIGZpbGVuYW1lKV0g
PSBjb250ZW50CisKKyAgICBkZWYgX3NldHVwX3Rlc3Qoc2VsZiwgcnVuX3Rlc3Q9Tm9uZSk6Cisg
ICAgICAgIHRlc3RfcG9ydCA9IHNlbGYuUmVwbGF5VGVzdFBvcnQocnVuX3Rlc3QpCisgICAgICAg
IHNlbGYuX2FkZF9maWxlKHRlc3RfcG9ydCwgJy9wYXRoL3NvbWUtZGlyJywgJ3NvbWUtdGVzdC5y
ZXBsYXknLCAnaHR0cDovL3NvbWUtdGVzdC8nKQorICAgICAgICB0ZXN0ID0gUmVwbGF5UGVyZlRl
c3QoJ3NvbWUtdGVzdC5yZXBsYXknLCAnL3BhdGgvc29tZS1kaXIvc29tZS10ZXN0LnJlcGxheScp
CisgICAgICAgIHRlc3QuX3N0YXJ0X3JlcGxheV9zZXJ2ZXIgPSBsYW1iZGEgYXJjaGl2ZSwgcmVj
b3JkOiBzZWxmLl9fY2xhc3NfXy5Nb2NrUmVwbGF5U2VydmVyKCkKKyAgICAgICAgcmV0dXJuIHRl
c3QsIHRlc3RfcG9ydAorCisgICAgZGVmIHRlc3RfcnVuX3NpbmdsZShzZWxmKToKKyAgICAgICAg
b3V0cHV0X2NhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb3V0cHV0X2NhcHR1cmUu
Y2FwdHVyZV9vdXRwdXQoKQorCisgICAgICAgIGxvYWRlZF9wYWdlcyA9IFtdCisKKyAgICAgICAg
ZGVmIHJ1bl90ZXN0KHRlc3RfaW5wdXQpOgorICAgICAgICAgICAgbG9hZGVkX3BhZ2VzLmFwcGVu
ZCh0ZXN0X2lucHV0KQorICAgICAgICAgICAgc2VsZi5fYWRkX2ZpbGUocG9ydCwgJy9wYXRoL3Nv
bWUtZGlyJywgJ3NvbWUtdGVzdC53cHInLCAnd3ByIGNvbnRlbnQnKQorICAgICAgICAgICAgcmV0
dXJuIERyaXZlck91dHB1dCgnYWN0dWFsIHRleHQnLCAnYWN0dWFsIGltYWdlJywgJ2FjdHVhbCBj
aGVja3N1bScsCisgICAgICAgICAgICAgICAgYXVkaW89Tm9uZSwgY3Jhc2g9RmFsc2UsIHRpbWVv
dXQ9RmFsc2UsIGVycm9yPUZhbHNlKQorCisgICAgICAgIHRlc3QsIHBvcnQgPSBzZWxmLl9zZXR1
cF90ZXN0KHJ1bl90ZXN0KQorICAgICAgICB0ZXN0Ll9hcmNoaXZlX3BhdGggPSAnL3BhdGgvc29t
ZS1kaXIud3ByJworICAgICAgICB0ZXN0Ll91cmwgPSAnaHR0cDovL3NvbWUtdGVzdC8nCisKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgZHJpdmVyID0gcG9ydC5jcmVhdGVfZHJpdmVyKHdvcmtl
cl9udW1iZXI9MSwgbm9fdGltZW91dD1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHRlc3QucnVuX3NpbmdsZShwb3J0LCBkcml2ZXIsIHRpbWVfb3V0X21zPTEwMCkpCisgICAgICAg
IGZpbmFsbHk6CisgICAgICAgICAgICBhY3R1YWxfc3Rkb3V0LCBhY3R1YWxfc3RkZXJyLCBhY3R1
YWxfbG9ncyA9IG91dHB1dF9jYXB0dXJlLnJlc3RvcmVfb3V0cHV0KCkKKworICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGxlbihsb2FkZWRfcGFnZXMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGxvYWRlZF9wYWdlc1swXS50ZXN0X25hbWUsICdhYm91dDpibGFuaycpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwobG9hZGVkX3BhZ2VzWzFdLnRlc3RfbmFtZSwgJ2h0dHA6Ly9zb21lLXRl
c3QvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfc3Rkb3V0LCAnJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfc3RkZXJyLCAnJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChhY3R1YWxfbG9ncywgJycpCisKKyAgICBkZWYgdGVzdF9ydW5fc2luZ2xlX2ZhaWxz
X3dpdGhvdXRfd2VicGFnZXJlcGxheShzZWxmKToKKyAgICAgICAgb3V0cHV0X2NhcHR1cmUgPSBP
dXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb3V0cHV0X2NhcHR1cmUuY2FwdHVyZV9vdXRwdXQoKQor
CisgICAgICAgIHRlc3QsIHBvcnQgPSBzZWxmLl9zZXR1cF90ZXN0KCkKKyAgICAgICAgdGVzdC5f
c3RhcnRfcmVwbGF5X3NlcnZlciA9IGxhbWJkYSBhcmNoaXZlLCByZWNvcmQ6IE5vbmUKKyAgICAg
ICAgdGVzdC5fYXJjaGl2ZV9wYXRoID0gJy9wYXRoL3NvbWUtZGlyLndwcicKKyAgICAgICAgdGVz
dC5fdXJsID0gJ2h0dHA6Ly9zb21lLXRlc3QvJworCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IGRyaXZlciA9IHBvcnQuY3JlYXRlX2RyaXZlcih3b3JrZXJfbnVtYmVyPTEsIG5vX3RpbWVvdXQ9
VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5ydW5fc2luZ2xlKHBvcnQs
IGRyaXZlciwgdGltZV9vdXRfbXM9MTAwKSwgTm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgIGFjdHVhbF9zdGRvdXQsIGFjdHVhbF9zdGRlcnIsIGFjdHVhbF9sb2dzID0gb3V0cHV0
X2NhcHR1cmUucmVzdG9yZV9vdXRwdXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVh
bF9zdGRvdXQsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9zdGRlcnIsICcn
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9sb2dzLCAiV2ViIHBhZ2UgcmVwbGF5
IGRpZG4ndCBzdGFydC5cbiIpCisKKyAgICBkZWYgdGVzdF9wcmVwYXJlX2ZhaWxzX3doZW5fd2Fp
dF91bnRpbF9yZWFkeV9mYWlscyhzZWxmKToKKyAgICAgICAgb3V0cHV0X2NhcHR1cmUgPSBPdXRw
dXRDYXB0dXJlKCkKKyAgICAgICAgb3V0cHV0X2NhcHR1cmUuY2FwdHVyZV9vdXRwdXQoKQorCisg
ICAgICAgIHRlc3QsIHBvcnQgPSBzZWxmLl9zZXR1cF90ZXN0KCkKKyAgICAgICAgdGVzdC5fc3Rh
cnRfcmVwbGF5X3NlcnZlciA9IGxhbWJkYSBhcmNoaXZlLCByZWNvcmQ6IHNlbGYuX19jbGFzc19f
Lk1vY2tSZXBsYXlTZXJ2ZXIod2FpdF91bnRpbF9yZWFkeT1GYWxzZSkKKyAgICAgICAgdGVzdC5f
YXJjaGl2ZV9wYXRoID0gJy9wYXRoL3NvbWUtZGlyLndwcicKKyAgICAgICAgdGVzdC5fdXJsID0g
J2h0dHA6Ly9zb21lLXRlc3QvJworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRyaXZlciA9
IHBvcnQuY3JlYXRlX2RyaXZlcih3b3JrZXJfbnVtYmVyPTEsIG5vX3RpbWVvdXQ9VHJ1ZSkKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5ydW5fc2luZ2xlKHBvcnQsIGRyaXZlciwg
dGltZV9vdXRfbXM9MTAwKSwgTm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFj
dHVhbF9zdGRvdXQsIGFjdHVhbF9zdGRlcnIsIGFjdHVhbF9sb2dzID0gb3V0cHV0X2NhcHR1cmUu
cmVzdG9yZV9vdXRwdXQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX3N0ZG91
dCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX3N0ZGVyciwgJycpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX2xvZ3MsICJXZWIgcGFnZSByZXBsYXkgZGlkbid0
IHN0YXJ0LlxuIikKKworICAgIGRlZiB0ZXN0X3J1bl9zaW5nbGVfZmFpbHNfd2hlbl9vdXRwdXRf
aGFzX2Vycm9yKHNlbGYpOgorICAgICAgICBvdXRwdXRfY2FwdHVyZSA9IE91dHB1dENhcHR1cmUo
KQorICAgICAgICBvdXRwdXRfY2FwdHVyZS5jYXB0dXJlX291dHB1dCgpCisKKyAgICAgICAgbG9h
ZGVkX3BhZ2VzID0gW10KKworICAgICAgICBkZWYgcnVuX3Rlc3QodGVzdF9pbnB1dCk6CisgICAg
ICAgICAgICBsb2FkZWRfcGFnZXMuYXBwZW5kKHRlc3RfaW5wdXQpCisgICAgICAgICAgICBzZWxm
Ll9hZGRfZmlsZShwb3J0LCAnL3BhdGgvc29tZS1kaXInLCAnc29tZS10ZXN0LndwcicsICd3cHIg
Y29udGVudCcpCisgICAgICAgICAgICByZXR1cm4gRHJpdmVyT3V0cHV0KCdhY3R1YWwgdGV4dCcs
ICdhY3R1YWwgaW1hZ2UnLCAnYWN0dWFsIGNoZWNrc3VtJywKKyAgICAgICAgICAgICAgICBhdWRp
bz1Ob25lLCBjcmFzaD1GYWxzZSwgdGltZW91dD1GYWxzZSwgZXJyb3I9J3NvbWUgZXJyb3InKQor
CisgICAgICAgIHRlc3QsIHBvcnQgPSBzZWxmLl9zZXR1cF90ZXN0KHJ1bl90ZXN0KQorICAgICAg
ICB0ZXN0Ll9hcmNoaXZlX3BhdGggPSAnL3BhdGgvc29tZS1kaXIud3ByJworICAgICAgICB0ZXN0
Ll91cmwgPSAnaHR0cDovL3NvbWUtdGVzdC8nCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ZHJpdmVyID0gcG9ydC5jcmVhdGVfZHJpdmVyKHdvcmtlcl9udW1iZXI9MSwgbm9fdGltZW91dD1U
cnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnJ1bl9zaW5nbGUocG9ydCwg
ZHJpdmVyLCB0aW1lX291dF9tcz0xMDApLCBOb25lKQorICAgICAgICBmaW5hbGx5OgorICAgICAg
ICAgICAgYWN0dWFsX3N0ZG91dCwgYWN0dWFsX3N0ZGVyciwgYWN0dWFsX2xvZ3MgPSBvdXRwdXRf
Y2FwdHVyZS5yZXN0b3JlX291dHB1dCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4o
bG9hZGVkX3BhZ2VzKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWRfcGFnZXNb
MF0udGVzdF9uYW1lLCAnYWJvdXQ6YmxhbmsnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxv
YWRlZF9wYWdlc1sxXS50ZXN0X25hbWUsICdodHRwOi8vc29tZS10ZXN0LycpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoYWN0dWFsX3N0ZG91dCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoYWN0dWFsX3N0ZGVyciwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX2xv
Z3MsICdlcnJvcjogc29tZS10ZXN0LnJlcGxheVxuc29tZSBlcnJvclxuJykKKworICAgIGRlZiB0
ZXN0X3ByZXBhcmUoc2VsZik6CisgICAgICAgIG91dHB1dF9jYXB0dXJlID0gT3V0cHV0Q2FwdHVy
ZSgpCisgICAgICAgIG91dHB1dF9jYXB0dXJlLmNhcHR1cmVfb3V0cHV0KCkKKworICAgICAgICBk
ZWYgcnVuX3Rlc3QodGVzdF9pbnB1dCk6CisgICAgICAgICAgICBzZWxmLl9hZGRfZmlsZShwb3J0
LCAnL3BhdGgvc29tZS1kaXInLCAnc29tZS10ZXN0LndwcicsICd3cHIgY29udGVudCcpCisgICAg
ICAgICAgICByZXR1cm4gRHJpdmVyT3V0cHV0KCdhY3R1YWwgdGV4dCcsICdhY3R1YWwgaW1hZ2Un
LCAnYWN0dWFsIGNoZWNrc3VtJywKKyAgICAgICAgICAgICAgICBhdWRpbz1Ob25lLCBjcmFzaD1G
YWxzZSwgdGltZW91dD1GYWxzZSwgZXJyb3I9RmFsc2UpCisKKyAgICAgICAgdGVzdCwgcG9ydCA9
IHNlbGYuX3NldHVwX3Rlc3QocnVuX3Rlc3QpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnByZXBhcmUocG9ydCwgdGltZV9vdXRfbXM9MTAwKSwgVHJ1
ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFjdHVhbF9zdGRvdXQsIGFjdHVhbF9z
dGRlcnIsIGFjdHVhbF9sb2dzID0gb3V0cHV0X2NhcHR1cmUucmVzdG9yZV9vdXRwdXQoKQorCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX3N0ZG91dCwgJycpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoYWN0dWFsX3N0ZGVyciwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
YWN0dWFsX2xvZ3MsICdQcmVwYXJpbmcgcmVwbGF5IGZvciBzb21lLXRlc3QucmVwbGF5XG5QcmVw
YXJlZCByZXBsYXkgZm9yIHNvbWUtdGVzdC5yZXBsYXlcbicpCisKKyAgICBkZWYgdGVzdF9wcmVw
YXJlX2NhbGxzX3J1bl9zaW5nbGUoc2VsZik6CisgICAgICAgIG91dHB1dF9jYXB0dXJlID0gT3V0
cHV0Q2FwdHVyZSgpCisgICAgICAgIG91dHB1dF9jYXB0dXJlLmNhcHR1cmVfb3V0cHV0KCkKKyAg
ICAgICAgY2FsbGVkID0gW0ZhbHNlXQorCisgICAgICAgIGRlZiBydW5fc2luZ2xlKHBvcnQsIGRy
aXZlciwgdGltZV9vdXRfbXMsIHJlY29yZCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUo
cmVjb3JkKQorICAgICAgICAgICAgY2FsbGVkWzBdID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICAgICAgdGVzdCwgcG9ydCA9IHNlbGYuX3NldHVwX3Rlc3QoKQorICAgICAg
ICB0ZXN0LnJ1bl9zaW5nbGUgPSBydW5fc2luZ2xlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnByZXBhcmUocG9ydCwgdGltZV9vdXRfbXM9MTAwKSwg
RmFsc2UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhY3R1YWxfc3Rkb3V0LCBhY3R1
YWxfc3RkZXJyLCBhY3R1YWxfbG9ncyA9IG91dHB1dF9jYXB0dXJlLnJlc3RvcmVfb3V0cHV0KCkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxlZFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCh0ZXN0Ll9hcmNoaXZlX3BhdGgsICcvcGF0aC9zb21lLWRpci9zb21lLXRlc3Qud3ByJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0Ll91cmwsICdodHRwOi8vc29tZS10ZXN0Lycp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX3N0ZG91dCwgJycpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoYWN0dWFsX3N0ZGVyciwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoYWN0dWFsX2xvZ3MsICJQcmVwYXJpbmcgcmVwbGF5IGZvciBzb21lLXRlc3QucmVwbGF5XG5G
YWlsZWQgdG8gcHJlcGFyZSBhIHJlcGxheSBmb3Igc29tZS10ZXN0LnJlcGxheVxuIikKKwogY2xh
c3MgVGVzdFBlcmZUZXN0RmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rf
cmVndWxhcl90ZXN0KHNlbGYpOgogICAgICAgICB0ZXN0ID0gUGVyZlRlc3RGYWN0b3J5LmNyZWF0
ZV9wZXJmX3Rlc3QoJ3NvbWUtZGlyL3NvbWUtdGVzdCcsICcvcGF0aC9zb21lLWRpci9zb21lLXRl
c3QnKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJm
dGVzdHNydW5uZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJm
b3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkJKHJldmlzaW9uIDExODgxNikKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLmhv
c3QgaW1wb3J0IEhvc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5maWxlX3VwbG9hZGVyIGlt
cG9ydCBGaWxlVXBsb2FkZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdzIGltcG9y
dCBwcmludGluZwogZnJvbSB3ZWJraXRweS5wZXJmb3JtYW5jZV90ZXN0cy5wZXJmdGVzdCBpbXBv
cnQgUGVyZlRlc3RGYWN0b3J5Citmcm9tIHdlYmtpdHB5LnBlcmZvcm1hbmNlX3Rlc3RzLnBlcmZ0
ZXN0IGltcG9ydCBSZXBsYXlQZXJmVGVzdAogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihf
X25hbWVfXykKQEAgLTUxLDYgKzUyLDcgQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6
CiAgICAgX0VYSVRfQ09ERV9CQURfQlVJTEQgPSAtMQogICAgIF9FWElUX0NPREVfQkFEX0pTT04g
PSAtMgogICAgIF9FWElUX0NPREVfRkFJTEVEX1VQTE9BRElORyA9IC0zCisgICAgX0VYSVRfQ09E
RV9CQURfUFJFUEFSQVRJT04gPSAtNAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3M9Tm9u
ZSwgcG9ydD1Ob25lKToKICAgICAgICAgc2VsZi5fb3B0aW9ucywgc2VsZi5fYXJncyA9IFBlcmZU
ZXN0c1J1bm5lci5fcGFyc2VfYXJncyhhcmdzKQpAQCAtOTAsMjEgKzkyLDI3IEBAIGNsYXNzIFBl
cmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Ii0tcGF1c2UtYmVmb3JlLXRlc3RpbmciLCBkZXN0PSJwYXVzZV9iZWZvcmVfdGVzdGluZyIsIGFj
dGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgaGVscD0i
UGF1c2UgYmVmb3JlIHJ1bm5pbmcgdGhlIHRlc3RzIHRvIGxldCB1c2VyIGF0dGFjaCBhIHBlcmZv
cm1hbmNlIG1vbml0b3IuIiksCiAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1v
dXRwdXQtanNvbi1wYXRoIiwKLSAgICAgICAgICAgICAgICBoZWxwPSJGaWxlbmFtZSBvZiB0aGUg
SlNPTiBmaWxlIHRoYXQgc3VtbWFyaWVzIHRoZSByZXN1bHRzIiksCisgICAgICAgICAgICAgICAg
aGVscD0iRmlsZW5hbWUgb2YgdGhlIEpTT04gZmlsZSB0aGF0IHN1bW1hcmllcyB0aGUgcmVzdWx0
cy4iKSwKICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNvdXJjZS1qc29uLXBh
dGgiLAotICAgICAgICAgICAgICAgIGhlbHA9IlBhdGggdG8gYSBKU09OIGZpbGUgdG8gYmUgbWVy
Z2VkIGludG8gdGhlIEpTT04gZmlsZSB3aGVuIC0tb3V0cHV0LWpzb24tcGF0aCBpcyBwcmVzZW50
IiksCisgICAgICAgICAgICAgICAgaGVscD0iUGF0aCB0byBhIEpTT04gZmlsZSB0byBiZSBtZXJn
ZWQgaW50byB0aGUgSlNPTiBmaWxlIHdoZW4gLS1vdXRwdXQtanNvbi1wYXRoIGlzIHByZXNlbnQu
IiksCiAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS10ZXN0LXJlc3VsdHMtc2Vy
dmVyIiwKLSAgICAgICAgICAgICAgICBoZWxwPSJVcGxvYWQgdGhlIGdlbmVyYXRlZCBKU09OIGZp
bGUgdG8gdGhlIHNwZWNpZmllZCBzZXJ2ZXIgd2hlbiAtLW91dHB1dC1qc29uLXBhdGggaXMgcHJl
c2VudCIpLAorICAgICAgICAgICAgICAgIGhlbHA9IlVwbG9hZCB0aGUgZ2VuZXJhdGVkIEpTT04g
ZmlsZSB0byB0aGUgc3BlY2lmaWVkIHNlcnZlciB3aGVuIC0tb3V0cHV0LWpzb24tcGF0aCBpcyBw
cmVzZW50LiIpLAogICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0td2Via2l0LXRl
c3QtcnVubmVyIiwgIi0yIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKICAgICAgICAgICAgICAgICBo
ZWxwPSJVc2UgV2ViS2l0VGVzdFJ1bm5lciByYXRoZXIgdGhhbiBEdW1wUmVuZGVyVHJlZS4iKSwK
KyAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXJlcGxheSIsIGRlc3Q9InJlcGxh
eSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAg
aGVscD0iUnVuIHJlcGxheSB0ZXN0cy4iKSwKICAgICAgICAgICAgIF0KICAgICAgICAgcmV0dXJu
IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD0ocGVyZl9vcHRpb25fbGlzdCkpLnBh
cnNlX2FyZ3MoYXJncykKIAogICAgIGRlZiBfY29sbGVjdF90ZXN0cyhzZWxmKToKICAgICAgICAg
IiIiUmV0dXJuIHRoZSBsaXN0IG9mIHRlc3RzIGZvdW5kLiIiIgogCisgICAgICAgIHRlc3RfZXh0
ZW5zaW9ucyA9IFsnLmh0bWwnLCAnLnN2ZyddCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmVw
bGF5OgorICAgICAgICAgICAgdGVzdF9leHRlbnNpb25zLmFwcGVuZCgnLnJlcGxheScpCisKICAg
ICAgICAgZGVmIF9pc190ZXN0X2ZpbGUoZmlsZXN5c3RlbSwgZGlybmFtZSwgZmlsZW5hbWUpOgot
ICAgICAgICAgICAgcmV0dXJuIGZpbGVzeXN0ZW0uc3BsaXRleHQoZmlsZW5hbWUpWzFdIGluIFsn
Lmh0bWwnLCAnLnN2ZyddCisgICAgICAgICAgICByZXR1cm4gZmlsZXN5c3RlbS5zcGxpdGV4dChm
aWxlbmFtZSlbMV0gaW4gdGVzdF9leHRlbnNpb25zCiAKICAgICAgICAgZmlsZXN5c3RlbSA9IHNl
bGYuX2hvc3QuZmlsZXN5c3RlbQogCkBAIC0xMjIsNyArMTMwLDggQEAgY2xhc3MgUGVyZlRlc3Rz
UnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICByZWxhdGl2ZV9wYXRoID0gc2VsZi5fcG9ydC5y
ZWxhdGl2ZV9wZXJmX3Rlc3RfZmlsZW5hbWUocGF0aCkucmVwbGFjZSgnXFwnLCAnLycpCiAgICAg
ICAgICAgICBpZiBzZWxmLl9wb3J0LnNraXBzX3BlcmZfdGVzdChyZWxhdGl2ZV9wYXRoKToKICAg
ICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgdGVzdHMuYXBwZW5kKFBlcmZUZXN0
RmFjdG9yeS5jcmVhdGVfcGVyZl90ZXN0KHJlbGF0aXZlX3BhdGgsIHBhdGgpKQorICAgICAgICAg
ICAgdGVzdCA9IFBlcmZUZXN0RmFjdG9yeS5jcmVhdGVfcGVyZl90ZXN0KHJlbGF0aXZlX3BhdGgs
IHBhdGgpCisgICAgICAgICAgICB0ZXN0cy5hcHBlbmQodGVzdCkKIAogICAgICAgICByZXR1cm4g
dGVzdHMKIApAQCAtMTMxLDEwICsxNDAsMTMgQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVj
dCk6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCJCdWlsZCBub3QgdXAgdG8gZGF0ZSBmb3IgJXMi
ICUgc2VsZi5fcG9ydC5fcGF0aF90b19kcml2ZXIoKSkKICAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9FWElUX0NPREVfQkFEX0JVSUxECiAKLSAgICAgICAgIyBXZSB3cmFwIGFueSBwYXJ0cyBvZiB0
aGUgcnVuIHRoYXQgYXJlIHNsb3cgb3IgbGlrZWx5IHRvIHJhaXNlIGV4Y2VwdGlvbnMKLSAgICAg
ICAgIyBpbiBhIHRyeS9maW5hbGx5IHRvIGVuc3VyZSB0aGF0IHdlIGNsZWFuIHVwIHRoZSBsb2dn
aW5nIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgIHVuZXhwZWN0ZWQgPSAtMQogICAgICAgICB0ZXN0
cyA9IHNlbGYuX2NvbGxlY3RfdGVzdHMoKQorICAgICAgICBfbG9nLmluZm8oIlJ1bm5pbmcgJWQg
dGVzdHMiICUgbGVuKHRlc3RzKSkKKworICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAg
ICAgICAgIGlmIG5vdCB0ZXN0LnByZXBhcmUoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucy50aW1l
X291dF9tcyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX0VYSVRfQ09ERV9CQURfUFJF
UEFSQVRJT04KKwogICAgICAgICB1bmV4cGVjdGVkID0gc2VsZi5fcnVuX3Rlc3RzX3NldChzb3J0
ZWQobGlzdCh0ZXN0cyksIGtleT1sYW1iZGEgdGVzdDogdGVzdC50ZXN0X25hbWUoKSksIHNlbGYu
X3BvcnQpCiAKICAgICAgICAgb3B0aW9ucyA9IHNlbGYuX29wdGlvbnMKQEAgLTIyMyw3ICsyMzUs
NyBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHVuZXhwZWN0ZWQKIAogICAgICAgICAgICAgX2xvZy5pbmZvKCdSdW5uaW5nICVzICgl
ZCBvZiAlZCknICUgKHRlc3QudGVzdF9uYW1lKCksIGV4cGVjdGVkICsgdW5leHBlY3RlZCArIDEs
IGxlbih0ZXN0cykpKQotICAgICAgICAgICAgaWYgc2VsZi5fcnVuX3NpbmdsZV90ZXN0KHRlc3Qs
IGRyaXZlcik6CisgICAgICAgICAgICBpZiBzZWxmLl9ydW5fc2luZ2xlX3Rlc3QodGVzdCwgcG9y
dCwgZHJpdmVyKToKICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkICsgMQogICAg
ICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkID0gdW5leHBlY3RlZCAr
IDEKQEAgLTIzNCwxMCArMjQ2LDEwIEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgog
CiAgICAgICAgIHJldHVybiB1bmV4cGVjdGVkCiAKLSAgICBkZWYgX3J1bl9zaW5nbGVfdGVzdChz
ZWxmLCB0ZXN0LCBkcml2ZXIpOgorICAgIGRlZiBfcnVuX3NpbmdsZV90ZXN0KHNlbGYsIHRlc3Qs
IHBvcnQsIGRyaXZlcik6CiAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogCi0gICAg
ICAgIG5ld19yZXN1bHRzID0gdGVzdC5ydW4oZHJpdmVyLCBzZWxmLl9vcHRpb25zLnRpbWVfb3V0
X21zKQorICAgICAgICBuZXdfcmVzdWx0cyA9IHRlc3QucnVuKHBvcnQsIGRyaXZlciwgc2VsZi5f
b3B0aW9ucy50aW1lX291dF9tcykKICAgICAgICAgaWYgbmV3X3Jlc3VsdHM6CiAgICAgICAgICAg
ICBzZWxmLl9yZXN1bHRzLnVwZGF0ZShuZXdfcmVzdWx0cykKICAgICAgICAgZWxzZToKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVy
X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9y
bWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxMTg4MTYp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1
bm5lcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMTIwLDEyICsxMjAsMTIgQEAgbWF4
IDExMjAKICAgICAgICAgcnVubmVyLl9ob3N0LmZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rv
cnkocnVubmVyLl9iYXNlX3BhdGgsICdpbnNwZWN0b3InKQogICAgICAgICBydW5uZXIuX2hvc3Qu
ZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShydW5uZXIuX2Jhc2VfcGF0aCwgJ0JpbmRp
bmdzJykKICAgICAgICAgcnVubmVyLl9ob3N0LmZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rv
cnkocnVubmVyLl9iYXNlX3BhdGgsICdQYXJzZXInKQotICAgICAgICByZXR1cm4gcnVubmVyCisg
ICAgICAgIHJldHVybiBydW5uZXIsIHRlc3RfcG9ydAogCiAgICAgZGVmIHJ1bl90ZXN0KHNlbGYs
IHRlc3RfbmFtZSk6Ci0gICAgICAgIHJ1bm5lciA9IHNlbGYuY3JlYXRlX3J1bm5lcigpCisgICAg
ICAgIHJ1bm5lciwgcG9ydCA9IHNlbGYuY3JlYXRlX3J1bm5lcigpCiAgICAgICAgIGRyaXZlciA9
IE1haW5UZXN0LlRlc3REcml2ZXIoKQotICAgICAgICByZXR1cm4gcnVubmVyLl9ydW5fc2luZ2xl
X3Rlc3QoQ2hyb21pdW1TdHlsZVBlcmZUZXN0KHRlc3RfbmFtZSwgcnVubmVyLl9ob3N0LmZpbGVz
eXN0ZW0uam9pbignc29tZS1kaXInLCB0ZXN0X25hbWUpKSwgZHJpdmVyKQorICAgICAgICByZXR1
cm4gcnVubmVyLl9ydW5fc2luZ2xlX3Rlc3QoQ2hyb21pdW1TdHlsZVBlcmZUZXN0KHRlc3RfbmFt
ZSwgcnVubmVyLl9ob3N0LmZpbGVzeXN0ZW0uam9pbignc29tZS1kaXInLCB0ZXN0X25hbWUpKSwg
cG9ydCwgZHJpdmVyKQogCiAgICAgZGVmIHRlc3RfcnVuX3Bhc3NpbmdfdGVzdChzZWxmKToKICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucnVuX3Rlc3QoJ3Bhc3MuaHRtbCcpKQpAQCAtMTU4
LDEzICsxNTgsMTMgQEAgbWF4IDExMjAKICAgICAgICAgcmV0dXJuIHRlc3RzCiAKICAgICBkZWYg
dGVzdF9ydW5fdGVzdF9zZXQoc2VsZik6Ci0gICAgICAgIHJ1bm5lciA9IHNlbGYuY3JlYXRlX3J1
bm5lcigpCisgICAgICAgIHJ1bm5lciwgcG9ydCA9IHNlbGYuY3JlYXRlX3J1bm5lcigpCiAgICAg
ICAgIHRlc3RzID0gc2VsZi5fdGVzdHNfZm9yX3J1bm5lcihydW5uZXIsIFsnaW5zcGVjdG9yL3Bh
c3MuaHRtbCcsICdpbnNwZWN0b3Ivc2lsZW50Lmh0bWwnLCAnaW5zcGVjdG9yL2ZhaWxlZC5odG1s
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvdG9uZ3VleS5odG1sJywgJ2luc3BlY3Rvci90aW1l
b3V0Lmh0bWwnLCAnaW5zcGVjdG9yL2NyYXNoLmh0bWwnXSkKICAgICAgICAgb3V0cHV0ID0gT3V0
cHV0Q2FwdHVyZSgpCiAgICAgICAgIG91dHB1dC5jYXB0dXJlX291dHB1dCgpCiAgICAgICAgIHRy
eToKLSAgICAgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0X2NvdW50ID0gcnVubmVyLl9ydW5fdGVz
dHNfc2V0KHRlc3RzLCBydW5uZXIuX3BvcnQpCisgICAgICAgICAgICB1bmV4cGVjdGVkX3Jlc3Vs
dF9jb3VudCA9IHJ1bm5lci5fcnVuX3Rlc3RzX3NldCh0ZXN0cywgcG9ydCkKICAgICAgICAgZmlu
YWxseToKICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyLCBsb2cgPSBvdXRwdXQucmVzdG9yZV9v
dXRwdXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuZXhwZWN0ZWRfcmVzdWx0X2NvdW50
LCBsZW4odGVzdHMpIC0gMSkKQEAgLTE3OCwxMSArMTc4LDExIEBAIG1heCAxMTIwCiAgICAgICAg
ICAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICAgICAgICAgICBUZXN0RHJpdmVyV2l0aFN0b3BD
b3VudC5zdG9wX2NvdW50ICs9IDEKIAotICAgICAgICBydW5uZXIgPSBzZWxmLmNyZWF0ZV9ydW5u
ZXIoZHJpdmVyX2NsYXNzPVRlc3REcml2ZXJXaXRoU3RvcENvdW50KQorICAgICAgICBydW5uZXIs
IHBvcnQgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoZHJpdmVyX2NsYXNzPVRlc3REcml2ZXJXaXRoU3Rv
cENvdW50KQogCiAgICAgICAgIHRlc3RzID0gc2VsZi5fdGVzdHNfZm9yX3J1bm5lcihydW5uZXIs
IFsnaW5zcGVjdG9yL3Bhc3MuaHRtbCcsICdpbnNwZWN0b3Ivc2lsZW50Lmh0bWwnLCAnaW5zcGVj
dG9yL2ZhaWxlZC5odG1sJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvdG9uZ3VleS5odG1sJywg
J2luc3BlY3Rvci90aW1lb3V0Lmh0bWwnLCAnaW5zcGVjdG9yL2NyYXNoLmh0bWwnXSkKLSAgICAg
ICAgdW5leHBlY3RlZF9yZXN1bHRfY291bnQgPSBydW5uZXIuX3J1bl90ZXN0c19zZXQodGVzdHMs
IHJ1bm5lci5fcG9ydCkKKyAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRfY291bnQgPSBydW5uZXIu
X3J1bl90ZXN0c19zZXQodGVzdHMsIHBvcnQpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChU
ZXN0RHJpdmVyV2l0aFN0b3BDb3VudC5zdG9wX2NvdW50LCA2KQogCkBAIC0xOTMsMTMgKzE5Mywx
MyBAQCBtYXggMTEyMAogICAgICAgICAgICAgZGVmIHN0YXJ0KHNlbGYpOgogICAgICAgICAgICAg
ICAgIFRlc3REcml2ZXJXaXRoU3RhcnRDb3VudC5zdGFydF9jb3VudCArPSAxCiAKLSAgICAgICAg
cnVubmVyID0gc2VsZi5jcmVhdGVfcnVubmVyKGFyZ3M9WyItLXBhdXNlLWJlZm9yZS10ZXN0aW5n
Il0sIGRyaXZlcl9jbGFzcz1UZXN0RHJpdmVyV2l0aFN0YXJ0Q291bnQpCisgICAgICAgIHJ1bm5l
ciwgcG9ydCA9IHNlbGYuY3JlYXRlX3J1bm5lcihhcmdzPVsiLS1wYXVzZS1iZWZvcmUtdGVzdGlu
ZyJdLCBkcml2ZXJfY2xhc3M9VGVzdERyaXZlcldpdGhTdGFydENvdW50KQogICAgICAgICB0ZXN0
cyA9IHNlbGYuX3Rlc3RzX2Zvcl9ydW5uZXIocnVubmVyLCBbJ2luc3BlY3Rvci9wYXNzLmh0bWwn
XSkKIAogICAgICAgICBvdXRwdXQgPSBPdXRwdXRDYXB0dXJlKCkKICAgICAgICAgb3V0cHV0LmNh
cHR1cmVfb3V0cHV0KCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdW5leHBlY3RlZF9yZXN1
bHRfY291bnQgPSBydW5uZXIuX3J1bl90ZXN0c19zZXQodGVzdHMsIHJ1bm5lci5fcG9ydCkKKyAg
ICAgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0X2NvdW50ID0gcnVubmVyLl9ydW5fdGVzdHNfc2V0
KHRlc3RzLCBwb3J0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0RHJpdmVyV2l0
aFN0YXJ0Q291bnQuc3RhcnRfY291bnQsIDEpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAg
ICBzdGRvdXQsIHN0ZGVyciwgbG9nID0gb3V0cHV0LnJlc3RvcmVfb3V0cHV0KCkKQEAgLTIwNywx
MiArMjA3LDEyIEBAIG1heCAxMTIwCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLCAiUnVu
bmluZyBpbnNwZWN0b3IvcGFzcy5odG1sICgxIG9mIDEpXG5SRVNVTFQgZ3JvdXBfbmFtZTogdGVz
dF9uYW1lPSA0MiBtc1xuXG4iKQogCiAgICAgZGVmIHRlc3RfcnVuX3Rlc3Rfc2V0X2Zvcl9wYXJz
ZXJfdGVzdHMoc2VsZik6Ci0gICAgICAgIHJ1bm5lciA9IHNlbGYuY3JlYXRlX3J1bm5lcigpCisg
ICAgICAgIHJ1bm5lciwgcG9ydCA9IHNlbGYuY3JlYXRlX3J1bm5lcigpCiAgICAgICAgIHRlc3Rz
ID0gc2VsZi5fdGVzdHNfZm9yX3J1bm5lcihydW5uZXIsIFsnQmluZGluZ3MvZXZlbnQtdGFyZ2V0
LXdyYXBwZXIuaHRtbCcsICdQYXJzZXIvc29tZS1wYXJzZXIuaHRtbCddKQogICAgICAgICBvdXRw
dXQgPSBPdXRwdXRDYXB0dXJlKCkKICAgICAgICAgb3V0cHV0LmNhcHR1cmVfb3V0cHV0KCkKICAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRfY291bnQgPSBydW5uZXIu
X3J1bl90ZXN0c19zZXQodGVzdHMsIHJ1bm5lci5fcG9ydCkKKyAgICAgICAgICAgIHVuZXhwZWN0
ZWRfcmVzdWx0X2NvdW50ID0gcnVubmVyLl9ydW5fdGVzdHNfc2V0KHRlc3RzLCBwb3J0KQogICAg
ICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIsIGxvZyA9IG91dHB1dC5y
ZXN0b3JlX291dHB1dCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5leHBlY3RlZF9yZXN1
bHRfY291bnQsIDApCkBAIC0yMjYsOSArMjI2LDkgQEAgbWF4IDExMjAKICAgICAgICAgJycsICcn
XSkpCiAKICAgICBkZWYgdGVzdF9ydW5fdGVzdF9zZXRfd2l0aF9qc29uX291dHB1dChzZWxmKToK
LSAgICAgICAgcnVubmVyID0gc2VsZi5jcmVhdGVfcnVubmVyKGFyZ3M9WyctLW91dHB1dC1qc29u
LXBhdGg9L21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nXSkKLSAgICAgICAgcnVubmVyLl9ob3N0
LmZpbGVzeXN0ZW0uZmlsZXNbcnVubmVyLl9iYXNlX3BhdGggKyAnL2luc3BlY3Rvci9wYXNzLmh0
bWwnXSA9IFRydWUKLSAgICAgICAgcnVubmVyLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbcnVubmVy
Ll9iYXNlX3BhdGggKyAnL0JpbmRpbmdzL2V2ZW50LXRhcmdldC13cmFwcGVyLmh0bWwnXSA9IFRy
dWUKKyAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5jcmVhdGVfcnVubmVyKGFyZ3M9WyctLW91
dHB1dC1qc29uLXBhdGg9L21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nXSkKKyAgICAgICAgcG9y
dC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbcnVubmVyLl9iYXNlX3BhdGggKyAnL2luc3BlY3Rvci9w
YXNzLmh0bWwnXSA9IFRydWUKKyAgICAgICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbcnVu
bmVyLl9iYXNlX3BhdGggKyAnL0JpbmRpbmdzL2V2ZW50LXRhcmdldC13cmFwcGVyLmh0bWwnXSA9
IFRydWUKICAgICAgICAgcnVubmVyLl90aW1lc3RhbXAgPSAxMjM0NTY3ODkKICAgICAgICAgb3V0
cHV0X2NhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKICAgICAgICAgb3V0cHV0X2NhcHR1cmUuY2Fw
dHVyZV9vdXRwdXQoKQpAQCAtMjM4LDcgKzIzOCw4IEBAIG1heCAxMTIwCiAgICAgICAgICAgICBz
dGRvdXQsIHN0ZGVyciwgbG9ncyA9IG91dHB1dF9jYXB0dXJlLnJlc3RvcmVfb3V0cHV0KCkKIAog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ3MsCi0gICAgICAgICAgICAnXG4nLmpvaW4oWydS
dW5uaW5nIEJpbmRpbmdzL2V2ZW50LXRhcmdldC13cmFwcGVyLmh0bWwgKDEgb2YgMiknLAorICAg
ICAgICAgICAgJ1xuJy5qb2luKFsnUnVubmluZyAyIHRlc3RzJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgJ1J1bm5pbmcgQmluZGluZ3MvZXZlbnQtdGFyZ2V0LXdyYXBwZXIuaHRtbCAoMSBvZiAy
KScsCiAgICAgICAgICAgICAgICAgICAgICAgICdSRVNVTFQgQmluZGluZ3M6IGV2ZW50LXRhcmdl
dC13cmFwcGVyPSAxNDg5LjA1IG1zJywKICAgICAgICAgICAgICAgICAgICAgICAgJ21lZGlhbj0g
MTQ4Ny4wIG1zLCBzdGRldj0gMTQuNDYgbXMsIG1pbj0gMTQ3MS4wIG1zLCBtYXg9IDE1MTAuMCBt
cycsCiAgICAgICAgICAgICAgICAgICAgICAgICcnLApAQCAtMjQ2LDE3ICsyNDcsMTcgQEAgbWF4
IDExMjAKICAgICAgICAgICAgICAgICAgICAgICAgJ1JFU1VMVCBncm91cF9uYW1lOiB0ZXN0X25h
bWU9IDQyIG1zJywKICAgICAgICAgICAgICAgICAgICAgICAgJycsICcnXSkpCiAKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKHJ1bm5lci5faG9zdC5maWxlc3lzdGVtLmZpbGVz
WycvbW9jay1jaGVja291dC9vdXRwdXQuanNvbiddKSwgeworICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGpzb24ubG9hZHMocG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNrb3V0
L291dHB1dC5qc29uJ10pLCB7CiAgICAgICAgICAgICAidGltZXN0YW1wIjogMTIzNDU2Nzg5LCAi
cmVzdWx0cyI6CiAgICAgICAgICAgICB7IkJpbmRpbmdzL2V2ZW50LXRhcmdldC13cmFwcGVyIjog
eyJtYXgiOiAxNTEwLCAiYXZnIjogMTQ4OS4wNSwgIm1lZGlhbiI6IDE0ODcsICJtaW4iOiAxNDcx
LCAic3RkZXYiOiAxNC40NiwgInVuaXQiOiAibXMifSwKICAgICAgICAgICAgICJpbnNwZWN0b3Iv
cGFzcy5odG1sOmdyb3VwX25hbWU6dGVzdF9uYW1lIjogNDJ9LAogICAgICAgICAgICAgIndlYmtp
dC1yZXZpc2lvbiI6IDU2Nzh9KQogCiAgICAgZGVmIHRlc3RfcnVuX3Rlc3Rfc2V0X3dpdGhfanNv
bl9zb3VyY2Uoc2VsZik6Ci0gICAgICAgIHJ1bm5lciA9IHNlbGYuY3JlYXRlX3J1bm5lcihhcmdz
PVsnLS1vdXRwdXQtanNvbi1wYXRoPS9tb2NrLWNoZWNrb3V0L291dHB1dC5qc29uJywgJy0tc291
cmNlLWpzb24tcGF0aD0vbW9jay1jaGVja291dC9zb3VyY2UuanNvbiddKQotICAgICAgICBydW5u
ZXIuX2hvc3QuZmlsZXN5c3RlbS5maWxlc1snL21vY2stY2hlY2tvdXQvc291cmNlLmpzb24nXSA9
ICd7ImtleSI6ICJ2YWx1ZSJ9JwotICAgICAgICBydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5maWxl
c1tydW5uZXIuX2Jhc2VfcGF0aCArICcvaW5zcGVjdG9yL3Bhc3MuaHRtbCddID0gVHJ1ZQotICAg
ICAgICBydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5maWxlc1tydW5uZXIuX2Jhc2VfcGF0aCArICcv
QmluZGluZ3MvZXZlbnQtdGFyZ2V0LXdyYXBwZXIuaHRtbCddID0gVHJ1ZQorICAgICAgICBydW5u
ZXIsIHBvcnQgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoYXJncz1bJy0tb3V0cHV0LWpzb24tcGF0aD0v
bW9jay1jaGVja291dC9vdXRwdXQuanNvbicsICctLXNvdXJjZS1qc29uLXBhdGg9L21vY2stY2hl
Y2tvdXQvc291cmNlLmpzb24nXSkKKyAgICAgICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNb
Jy9tb2NrLWNoZWNrb3V0L3NvdXJjZS5qc29uJ10gPSAneyJrZXkiOiAidmFsdWUifScKKyAgICAg
ICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbcnVubmVyLl9iYXNlX3BhdGggKyAnL2luc3Bl
Y3Rvci9wYXNzLmh0bWwnXSA9IFRydWUKKyAgICAgICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmls
ZXNbcnVubmVyLl9iYXNlX3BhdGggKyAnL0JpbmRpbmdzL2V2ZW50LXRhcmdldC13cmFwcGVyLmh0
bWwnXSA9IFRydWUKICAgICAgICAgcnVubmVyLl90aW1lc3RhbXAgPSAxMjM0NTY3ODkKICAgICAg
ICAgb3V0cHV0X2NhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKICAgICAgICAgb3V0cHV0X2NhcHR1
cmUuY2FwdHVyZV9vdXRwdXQoKQpAQCAtMjY1LDcgKzI2Niw4IEBAIG1heCAxMTIwCiAgICAgICAg
IGZpbmFsbHk6CiAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciwgbG9ncyA9IG91dHB1dF9jYXB0
dXJlLnJlc3RvcmVfb3V0cHV0KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ3MsICdc
bicuam9pbihbJ1J1bm5pbmcgQmluZGluZ3MvZXZlbnQtdGFyZ2V0LXdyYXBwZXIuaHRtbCAoMSBv
ZiAyKScsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9ncywgJ1xuJy5qb2luKFsnUnVubmlu
ZyAyIHRlc3RzJywKKyAgICAgICAgICAgICdSdW5uaW5nIEJpbmRpbmdzL2V2ZW50LXRhcmdldC13
cmFwcGVyLmh0bWwgKDEgb2YgMiknLAogICAgICAgICAgICAgJ1JFU1VMVCBCaW5kaW5nczogZXZl
bnQtdGFyZ2V0LXdyYXBwZXI9IDE0ODkuMDUgbXMnLAogICAgICAgICAgICAgJ21lZGlhbj0gMTQ4
Ny4wIG1zLCBzdGRldj0gMTQuNDYgbXMsIG1pbj0gMTQ3MS4wIG1zLCBtYXg9IDE1MTAuMCBtcycs
CiAgICAgICAgICAgICAnJywKQEAgLTI3Myw3ICsyNzUsNyBAQCBtYXggMTEyMAogICAgICAgICAg
ICAgJ1JFU1VMVCBncm91cF9uYW1lOiB0ZXN0X25hbWU9IDQyIG1zJywKICAgICAgICAgICAgICcn
LCAnJ10pKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcyhydW5uZXIuX2hv
c3QuZmlsZXN5c3RlbS5maWxlc1snL21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nXSksIHsKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKHBvcnQuaG9zdC5maWxlc3lzdGVtLmZp
bGVzWycvbW9jay1jaGVja291dC9vdXRwdXQuanNvbiddKSwgewogICAgICAgICAgICAgInRpbWVz
dGFtcCI6IDEyMzQ1Njc4OSwgInJlc3VsdHMiOgogICAgICAgICAgICAgeyJCaW5kaW5ncy9ldmVu
dC10YXJnZXQtd3JhcHBlciI6IHsibWF4IjogMTUxMCwgImF2ZyI6IDE0ODkuMDUsICJtZWRpYW4i
OiAxNDg3LCAibWluIjogMTQ3MSwgInN0ZGV2IjogMTQuNDYsICJ1bml0IjogIm1zIn0sCiAgICAg
ICAgICAgICAiaW5zcGVjdG9yL3Bhc3MuaHRtbDpncm91cF9uYW1lOnRlc3RfbmFtZSI6IDQyfSwK
QEAgLTI4MSwxNiArMjgzLDE2IEBAIG1heCAxMTIwCiAgICAgICAgICAgICAia2V5IjogInZhbHVl
In0pCiAKICAgICBkZWYgdGVzdF9ydW5fdGVzdF9zZXRfd2l0aF9tdWx0aXBsZV9yZXBvc2l0b3Jp
ZXMoc2VsZik6Ci0gICAgICAgIHJ1bm5lciA9IHNlbGYuY3JlYXRlX3J1bm5lcihhcmdzPVsnLS1v
dXRwdXQtanNvbi1wYXRoPS9tb2NrLWNoZWNrb3V0L291dHB1dC5qc29uJ10pCi0gICAgICAgIHJ1
bm5lci5faG9zdC5maWxlc3lzdGVtLmZpbGVzW3J1bm5lci5fYmFzZV9wYXRoICsgJy9pbnNwZWN0
b3IvcGFzcy5odG1sJ10gPSBUcnVlCisgICAgICAgIHJ1bm5lciwgcG9ydCA9IHNlbGYuY3JlYXRl
X3J1bm5lcihhcmdzPVsnLS1vdXRwdXQtanNvbi1wYXRoPS9tb2NrLWNoZWNrb3V0L291dHB1dC5q
c29uJ10pCisgICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzW3J1bm5lci5fYmFzZV9w
YXRoICsgJy9pbnNwZWN0b3IvcGFzcy5odG1sJ10gPSBUcnVlCiAgICAgICAgIHJ1bm5lci5fdGlt
ZXN0YW1wID0gMTIzNDU2Nzg5Ci0gICAgICAgIHJ1bm5lci5fcG9ydC5yZXBvc2l0b3J5X3BhdGhz
ID0gbGFtYmRhOiBbKCd3ZWJraXQnLCAnL21vY2stY2hlY2tvdXQnKSwgKCdzb21lJywgJy9tb2Nr
LWNoZWNrb3V0L3NvbWUnKV0KKyAgICAgICAgcG9ydC5yZXBvc2l0b3J5X3BhdGhzID0gbGFtYmRh
OiBbKCd3ZWJraXQnLCAnL21vY2stY2hlY2tvdXQnKSwgKCdzb21lJywgJy9tb2NrLWNoZWNrb3V0
L3NvbWUnKV0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5uZXIucnVuKCksIDApCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcyhydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5m
aWxlc1snL21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nXSksIHsKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChqc29uLmxvYWRzKHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzWycvbW9jay1jaGVj
a291dC9vdXRwdXQuanNvbiddKSwgewogICAgICAgICAgICAgInRpbWVzdGFtcCI6IDEyMzQ1Njc4
OSwgInJlc3VsdHMiOiB7Imluc3BlY3Rvci9wYXNzLmh0bWw6Z3JvdXBfbmFtZTp0ZXN0X25hbWUi
OiA0Mi4wfSwgIndlYmtpdC1yZXZpc2lvbiI6IDU2NzgsICJzb21lLXJldmlzaW9uIjogNTY3OH0p
CiAKICAgICBkZWYgdGVzdF9ydW5fd2l0aF91cGxvYWRfanNvbihzZWxmKToKLSAgICAgICAgcnVu
bmVyID0gc2VsZi5jcmVhdGVfcnVubmVyKGFyZ3M9WyctLW91dHB1dC1qc29uLXBhdGg9L21vY2st
Y2hlY2tvdXQvb3V0cHV0Lmpzb24nLAorICAgICAgICBydW5uZXIsIHBvcnQgPSBzZWxmLmNyZWF0
ZV9ydW5uZXIoYXJncz1bJy0tb3V0cHV0LWpzb24tcGF0aD0vbW9jay1jaGVja291dC9vdXRwdXQu
anNvbicsCiAgICAgICAgICAgICAnLS10ZXN0LXJlc3VsdHMtc2VydmVyJywgJ3NvbWUuaG9zdCcs
ICctLXBsYXRmb3JtJywgJ3BsYXRmb3JtMScsICctLWJ1aWxkZXItbmFtZScsICdidWlsZGVyMScs
ICctLWJ1aWxkLW51bWJlcicsICcxMjMnXSkKICAgICAgICAgdXBsb2FkX2pzb25faXNfY2FsbGVk
ID0gW0ZhbHNlXQogICAgICAgICB1cGxvYWRfanNvbl9yZXR1cm5zX3RydWUgPSBUcnVlCkBAIC0z
MDIsMjYgKzMwNCwyNiBAQCBtYXggMTEyMAogICAgICAgICAgICAgcmV0dXJuIHVwbG9hZF9qc29u
X3JldHVybnNfdHJ1ZQogCiAgICAgICAgIHJ1bm5lci5fdXBsb2FkX2pzb24gPSBtb2NrX3VwbG9h
ZF9qc29uCi0gICAgICAgIHJ1bm5lci5faG9zdC5maWxlc3lzdGVtLmZpbGVzWycvbW9jay1jaGVj
a291dC9zb3VyY2UuanNvbiddID0gJ3sia2V5IjogInZhbHVlIn0nCi0gICAgICAgIHJ1bm5lci5f
aG9zdC5maWxlc3lzdGVtLmZpbGVzW3J1bm5lci5fYmFzZV9wYXRoICsgJy9pbnNwZWN0b3IvcGFz
cy5odG1sJ10gPSBUcnVlCi0gICAgICAgIHJ1bm5lci5faG9zdC5maWxlc3lzdGVtLmZpbGVzW3J1
bm5lci5fYmFzZV9wYXRoICsgJy9CaW5kaW5ncy9ldmVudC10YXJnZXQtd3JhcHBlci5odG1sJ10g
PSBUcnVlCisgICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzWycvbW9jay1jaGVja291
dC9zb3VyY2UuanNvbiddID0gJ3sia2V5IjogInZhbHVlIn0nCisgICAgICAgIHBvcnQuaG9zdC5m
aWxlc3lzdGVtLmZpbGVzW3J1bm5lci5fYmFzZV9wYXRoICsgJy9pbnNwZWN0b3IvcGFzcy5odG1s
J10gPSBUcnVlCisgICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzW3J1bm5lci5fYmFz
ZV9wYXRoICsgJy9CaW5kaW5ncy9ldmVudC10YXJnZXQtd3JhcHBlci5odG1sJ10gPSBUcnVlCiAg
ICAgICAgIHJ1bm5lci5fdGltZXN0YW1wID0gMTIzNDU2Nzg5CiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwocnVubmVyLnJ1bigpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVwbG9hZF9q
c29uX2lzX2NhbGxlZFswXSwgVHJ1ZSkKLSAgICAgICAgZ2VuZXJhdGVkX2pzb24gPSBqc29uLmxv
YWRzKHJ1bm5lci5faG9zdC5maWxlc3lzdGVtLmZpbGVzWycvbW9jay1jaGVja291dC9vdXRwdXQu
anNvbiddKQorICAgICAgICBnZW5lcmF0ZWRfanNvbiA9IGpzb24ubG9hZHMocG9ydC5ob3N0LmZp
bGVzeXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNrb3V0L291dHB1dC5qc29uJ10pCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2pzb25bJ3BsYXRmb3JtJ10sICdwbGF0Zm9ybTEnKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9qc29uWydidWlsZGVyLW5hbWUnXSwg
J2J1aWxkZXIxJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfanNvblsnYnVp
bGQtbnVtYmVyJ10sIDEyMykKICAgICAgICAgdXBsb2FkX2pzb25fcmV0dXJuc190cnVlID0gRmFs
c2UKIAotICAgICAgICBydW5uZXIgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoYXJncz1bJy0tb3V0cHV0
LWpzb24tcGF0aD0vbW9jay1jaGVja291dC9vdXRwdXQuanNvbicsCisgICAgICAgIHJ1bm5lciwg
cG9ydCA9IHNlbGYuY3JlYXRlX3J1bm5lcihhcmdzPVsnLS1vdXRwdXQtanNvbi1wYXRoPS9tb2Nr
LWNoZWNrb3V0L291dHB1dC5qc29uJywKICAgICAgICAgICAgICctLXRlc3QtcmVzdWx0cy1zZXJ2
ZXInLCAnc29tZS5ob3N0JywgJy0tcGxhdGZvcm0nLCAncGxhdGZvcm0xJywgJy0tYnVpbGRlci1u
YW1lJywgJ2J1aWxkZXIxJywgJy0tYnVpbGQtbnVtYmVyJywgJzEyMyddKQogICAgICAgICBydW5u
ZXIuX3VwbG9hZF9qc29uID0gbW9ja191cGxvYWRfanNvbgogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHJ1bm5lci5ydW4oKSwgLTMpCiAKICAgICBkZWYgdGVzdF91cGxvYWRfanNvbihzZWxmKToK
LSAgICAgICAgcnVubmVyID0gc2VsZi5jcmVhdGVfcnVubmVyKCkKLSAgICAgICAgcnVubmVyLl9o
b3N0LmZpbGVzeXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNrb3V0L3NvbWUuanNvbiddID0gJ3NvbWUg
Y29udGVudCcKKyAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5jcmVhdGVfcnVubmVyKCkKKyAg
ICAgICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNrb3V0L3NvbWUuanNv
biddID0gJ3NvbWUgY29udGVudCcKIAogICAgICAgICBjYWxsZWQgPSBbXQogICAgICAgICB1cGxv
YWRfc2luZ2xlX3RleHRfZmlsZV90aHJvd3MgPSBGYWxzZQpAQCAtMzM0LDcgKzMzNiw3IEBAIG1h
eCAxMTIwCiAgICAgICAgICAgICAgICAgY2FsbGVkLmFwcGVuZCgnRmlsZVVwbG9hZGVyJykKIAog
ICAgICAgICAgICAgZGVmIHVwbG9hZF9zaW5nbGVfdGV4dF9maWxlKG1vY2ssIGZpbGVzeXN0ZW0s
IGNvbnRlbnRfdHlwZSwgZmlsZW5hbWUpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZmlsZXN5c3RlbSwgcnVubmVyLl9ob3N0LmZpbGVzeXN0ZW0pCisgICAgICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSkKICAgICAg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRfdHlwZSwgJ2FwcGxpY2F0aW9uL2pz
b24nKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW5hbWUsICdzb21lLmpz
b24nKQogICAgICAgICAgICAgICAgIGNhbGxlZC5hcHBlbmQoJ3VwbG9hZF9zaW5nbGVfdGV4dF9m
aWxlJykKQEAgLTM1OCw1OSArMzYwLDY0IEBAIG1heCAxMTIwCiAgICAgICAgIHJ1bm5lci5fdXBs
b2FkX2pzb24oJ3NvbWUuaG9zdCcsICdzb21lLmpzb24nLCBNb2NrRmlsZVVwbG9hZGVyKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxlZCwgWydGaWxlVXBsb2FkZXInLCAndXBsb2FkX3Np
bmdsZV90ZXh0X2ZpbGUnXSkKIAorICAgIGRlZiBfYWRkX2ZpbGUoc2VsZiwgcnVubmVyLCBkaXJu
YW1lLCBmaWxlbmFtZSwgY29udGVudD1UcnVlKToKKyAgICAgICAgZGlybmFtZSA9IHJ1bm5lci5f
aG9zdC5maWxlc3lzdGVtLmpvaW4ocnVubmVyLl9iYXNlX3BhdGgsIGRpcm5hbWUpIGlmIGRpcm5h
bWUgZWxzZSBydW5uZXIuX2Jhc2VfcGF0aAorICAgICAgICBydW5uZXIuX2hvc3QuZmlsZXN5c3Rl
bS5tYXliZV9tYWtlX2RpcmVjdG9yeShkaXJuYW1lKQorICAgICAgICBydW5uZXIuX2hvc3QuZmls
ZXN5c3RlbS5maWxlc1tydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5qb2luKGRpcm5hbWUsIGZpbGVu
YW1lKV0gPSBjb250ZW50CisKICAgICBkZWYgdGVzdF9jb2xsZWN0X3Rlc3RzKHNlbGYpOgotICAg
ICAgICBydW5uZXIgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoKQotICAgICAgICBmaWxlbmFtZSA9IHJ1
bm5lci5faG9zdC5maWxlc3lzdGVtLmpvaW4ocnVubmVyLl9iYXNlX3BhdGgsICdpbnNwZWN0b3In
LCAnYV9maWxlLmh0bWwnKQotICAgICAgICBydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5maWxlc1tm
aWxlbmFtZV0gPSAnYSBjb250ZW50JworICAgICAgICBydW5uZXIsIHBvcnQgPSBzZWxmLmNyZWF0
ZV9ydW5uZXIoKQorICAgICAgICBzZWxmLl9hZGRfZmlsZShydW5uZXIsICdpbnNwZWN0b3InLCAn
YV9maWxlLmh0bWwnLCAnYSBjb250ZW50JykKICAgICAgICAgdGVzdHMgPSBydW5uZXIuX2NvbGxl
Y3RfdGVzdHMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0cyksIDEpCiAKICAg
ICBkZWYgX2NvbGxlY3RfdGVzdHNfYW5kX3NvcnRfdGVzdF9uYW1lKHNlbGYsIHJ1bm5lcik6CiAg
ICAgICAgIHJldHVybiBzb3J0ZWQoW3Rlc3QudGVzdF9uYW1lKCkgZm9yIHRlc3QgaW4gcnVubmVy
Ll9jb2xsZWN0X3Rlc3RzKCldKQogCi0gICAgZGVmIHRlc3RfY29sbGVjdF90ZXN0cyhzZWxmKToK
LSAgICAgICAgcnVubmVyID0gc2VsZi5jcmVhdGVfcnVubmVyKGFyZ3M9WydQZXJmb3JtYW5jZVRl
c3RzL3Rlc3QxLmh0bWwnLCAndGVzdDIuaHRtbCddKQorICAgIGRlZiB0ZXN0X2NvbGxlY3RfdGVz
dHNfd2l0aF9tdWx0aWxlX2ZpbGVzKHNlbGYpOgorICAgICAgICBydW5uZXIsIHBvcnQgPSBzZWxm
LmNyZWF0ZV9ydW5uZXIoYXJncz1bJ1BlcmZvcm1hbmNlVGVzdHMvdGVzdDEuaHRtbCcsICd0ZXN0
Mi5odG1sJ10pCiAKICAgICAgICAgZGVmIGFkZF9maWxlKGZpbGVuYW1lKToKLSAgICAgICAgICAg
IHJ1bm5lci5faG9zdC5maWxlc3lzdGVtLmZpbGVzW3J1bm5lci5faG9zdC5maWxlc3lzdGVtLmpv
aW4ocnVubmVyLl9iYXNlX3BhdGgsIGZpbGVuYW1lKV0gPSAnc29tZSBjb250ZW50JworICAgICAg
ICAgICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbcnVubmVyLl9ob3N0LmZpbGVzeXN0ZW0u
am9pbihydW5uZXIuX2Jhc2VfcGF0aCwgZmlsZW5hbWUpXSA9ICdzb21lIGNvbnRlbnQnCiAKICAg
ICAgICAgYWRkX2ZpbGUoJ3Rlc3QxLmh0bWwnKQogICAgICAgICBhZGRfZmlsZSgndGVzdDIuaHRt
bCcpCiAgICAgICAgIGFkZF9maWxlKCd0ZXN0My5odG1sJykKLSAgICAgICAgcnVubmVyLl9ob3N0
LmZpbGVzeXN0ZW0uY2hkaXIocnVubmVyLl9wb3J0LnBlcmZfdGVzdHNfZGlyKClbOnJ1bm5lci5f
cG9ydC5wZXJmX3Rlc3RzX2RpcigpLnJmaW5kKHJ1bm5lci5faG9zdC5maWxlc3lzdGVtLnNlcCld
KQorICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5c3RlbS5jaGRpcihydW5uZXIuX3BvcnQucGVyZl90
ZXN0c19kaXIoKVs6cnVubmVyLl9wb3J0LnBlcmZfdGVzdHNfZGlyKCkucmZpbmQocnVubmVyLl9o
b3N0LmZpbGVzeXN0ZW0uc2VwKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fY29s
bGVjdF90ZXN0c19hbmRfc29ydF90ZXN0X25hbWUocnVubmVyKSwgWyd0ZXN0MS5odG1sJywgJ3Rl
c3QyLmh0bWwnXSkKIAogICAgIGRlZiB0ZXN0X2NvbGxlY3RfdGVzdHNfd2l0aF9za2lwcGVkX2xp
c3Qoc2VsZik6Ci0gICAgICAgIHJ1bm5lciA9IHNlbGYuY3JlYXRlX3J1bm5lcigpCisgICAgICAg
IHJ1bm5lciwgcG9ydCA9IHNlbGYuY3JlYXRlX3J1bm5lcigpCiAKLSAgICAgICAgZGVmIGFkZF9m
aWxlKGRpcm5hbWUsIGZpbGVuYW1lLCBjb250ZW50PVRydWUpOgotICAgICAgICAgICAgZGlybmFt
ZSA9IHJ1bm5lci5faG9zdC5maWxlc3lzdGVtLmpvaW4ocnVubmVyLl9iYXNlX3BhdGgsIGRpcm5h
bWUpIGlmIGRpcm5hbWUgZWxzZSBydW5uZXIuX2Jhc2VfcGF0aAotICAgICAgICAgICAgcnVubmVy
Ll9ob3N0LmZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3RvcnkoZGlybmFtZSkKLSAgICAgICAg
ICAgIHJ1bm5lci5faG9zdC5maWxlc3lzdGVtLmZpbGVzW3J1bm5lci5faG9zdC5maWxlc3lzdGVt
LmpvaW4oZGlybmFtZSwgZmlsZW5hbWUpXSA9IGNvbnRlbnQKLQotICAgICAgICBhZGRfZmlsZSgn
aW5zcGVjdG9yJywgJ3Rlc3QxLmh0bWwnKQotICAgICAgICBhZGRfZmlsZSgnaW5zcGVjdG9yJywg
J3Vuc3VwcG9ydGVkX3Rlc3QxLmh0bWwnKQotICAgICAgICBhZGRfZmlsZSgnaW5zcGVjdG9yJywg
J3Rlc3QyLmh0bWwnKQotICAgICAgICBhZGRfZmlsZSgnaW5zcGVjdG9yL3Jlc291cmNlcycsICdy
ZXNvdXJjZV9maWxlLmh0bWwnKQotICAgICAgICBhZGRfZmlsZSgndW5zdXBwb3J0ZWQnLCAndW5z
dXBwb3J0ZWRfdGVzdDIuaHRtbCcpCi0gICAgICAgIHJ1bm5lci5fcG9ydC5za2lwcGVkX3BlcmZf
dGVzdHMgPSBsYW1iZGE6IFsnaW5zcGVjdG9yL3Vuc3VwcG9ydGVkX3Rlc3QxLmh0bWwnLCAndW5z
dXBwb3J0ZWQnXQorICAgICAgICBzZWxmLl9hZGRfZmlsZShydW5uZXIsICdpbnNwZWN0b3InLCAn
dGVzdDEuaHRtbCcpCisgICAgICAgIHNlbGYuX2FkZF9maWxlKHJ1bm5lciwgJ2luc3BlY3Rvcics
ICd1bnN1cHBvcnRlZF90ZXN0MS5odG1sJykKKyAgICAgICAgc2VsZi5fYWRkX2ZpbGUocnVubmVy
LCAnaW5zcGVjdG9yJywgJ3Rlc3QyLmh0bWwnKQorICAgICAgICBzZWxmLl9hZGRfZmlsZShydW5u
ZXIsICdpbnNwZWN0b3IvcmVzb3VyY2VzJywgJ3Jlc291cmNlX2ZpbGUuaHRtbCcpCisgICAgICAg
IHNlbGYuX2FkZF9maWxlKHJ1bm5lciwgJ3Vuc3VwcG9ydGVkJywgJ3Vuc3VwcG9ydGVkX3Rlc3Qy
Lmh0bWwnKQorICAgICAgICBwb3J0LnNraXBwZWRfcGVyZl90ZXN0cyA9IGxhbWJkYTogWydpbnNw
ZWN0b3IvdW5zdXBwb3J0ZWRfdGVzdDEuaHRtbCcsICd1bnN1cHBvcnRlZCddCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi5fY29sbGVjdF90ZXN0c19hbmRfc29ydF90ZXN0X25hbWUocnVu
bmVyKSwgWydpbnNwZWN0b3IvdGVzdDEuaHRtbCcsICdpbnNwZWN0b3IvdGVzdDIuaHRtbCddKQog
CiAgICAgZGVmIHRlc3RfY29sbGVjdF90ZXN0c193aXRoX3BhZ2VfbG9hZF9zdmcoc2VsZik6Ci0g
ICAgICAgIHJ1bm5lciA9IHNlbGYuY3JlYXRlX3J1bm5lcigpCi0KLSAgICAgICAgZGVmIGFkZF9m
aWxlKGRpcm5hbWUsIGZpbGVuYW1lLCBjb250ZW50PVRydWUpOgotICAgICAgICAgICAgZGlybmFt
ZSA9IHJ1bm5lci5faG9zdC5maWxlc3lzdGVtLmpvaW4ocnVubmVyLl9iYXNlX3BhdGgsIGRpcm5h
bWUpIGlmIGRpcm5hbWUgZWxzZSBydW5uZXIuX2Jhc2VfcGF0aAotICAgICAgICAgICAgcnVubmVy
Ll9ob3N0LmZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3RvcnkoZGlybmFtZSkKLSAgICAgICAg
ICAgIHJ1bm5lci5faG9zdC5maWxlc3lzdGVtLmZpbGVzW3J1bm5lci5faG9zdC5maWxlc3lzdGVt
LmpvaW4oZGlybmFtZSwgZmlsZW5hbWUpXSA9IGNvbnRlbnQKLQotICAgICAgICBhZGRfZmlsZSgn
UGFnZUxvYWQnLCAnc29tZS1zdmctdGVzdC5zdmcnKQorICAgICAgICBydW5uZXIsIHBvcnQgPSBz
ZWxmLmNyZWF0ZV9ydW5uZXIoKQorICAgICAgICBzZWxmLl9hZGRfZmlsZShydW5uZXIsICdQYWdl
TG9hZCcsICdzb21lLXN2Zy10ZXN0LnN2ZycpCiAgICAgICAgIHRlc3RzID0gcnVubmVyLl9jb2xs
ZWN0X3Rlc3RzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdHMpLCAxKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RzWzBdLl9fY2xhc3NfXy5fX25hbWVfXywgJ1BhZ2VM
b2FkaW5nUGVyZlRlc3QnKQogCisgICAgZGVmIHRlc3RfY29sbGVjdF90ZXN0c19zaG91bGRfaWdu
b3JlX3JlcGxheV90ZXN0c19ieV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBydW5uZXIsIHBvcnQg
PSBzZWxmLmNyZWF0ZV9ydW5uZXIoKQorICAgICAgICBzZWxmLl9hZGRfZmlsZShydW5uZXIsICdS
ZXBsYXknLCAnd3d3LndlYmtpdC5vcmcucmVwbGF5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChydW5uZXIuX2NvbGxlY3RfdGVzdHMoKSwgW10pCisKKyAgICBkZWYgdGVzdF9jb2xsZWN0X3Rl
c3RzX3dpdGhfcmVwbGF5X3Rlc3RzKHNlbGYpOgorICAgICAgICBydW5uZXIsIHBvcnQgPSBzZWxm
LmNyZWF0ZV9ydW5uZXIoYXJncz1bJy0tcmVwbGF5J10pCisgICAgICAgIHNlbGYuX2FkZF9maWxl
KHJ1bm5lciwgJ1JlcGxheScsICd3d3cud2Via2l0Lm9yZy5yZXBsYXknKQorICAgICAgICB0ZXN0
cyA9IHJ1bm5lci5fY29sbGVjdF90ZXN0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVu
KHRlc3RzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0c1swXS5fX2NsYXNzX18u
X19uYW1lX18sICdSZXBsYXlQZXJmVGVzdCcpCisKICAgICBkZWYgdGVzdF9wYXJzZV9hcmdzKHNl
bGYpOgotICAgICAgICBydW5uZXIgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoKQorICAgICAgICBydW5u
ZXIsIHBvcnQgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoKQogICAgICAgICBvcHRpb25zLCBhcmdzID0g
UGVyZlRlc3RzUnVubmVyLl9wYXJzZV9hcmdzKFsKICAgICAgICAgICAgICAgICAnLS1idWlsZC1k
aXJlY3Rvcnk9Zm9sZGVyNDInLAogICAgICAgICAgICAgICAgICctLXBsYXRmb3JtPXBsYXRmb3Jt
NDInLApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRf
Xy5weQkocmV2aXNpb24gMTE4ODE2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIGNsYXNzIEF1
dG9pbnN0YWxsSW1wb3J0SG9vayhvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9p
cmMoKQogICAgICAgICBlbGlmICcuYnVpbGRib3QnIGluIGZ1bGxuYW1lOgogICAgICAgICAgICAg
c2VsZi5faW5zdGFsbF9idWlsZGJvdCgpCisgICAgICAgIGVsaWYgJy53ZWJwYWdlcmVwbGF5JyBp
biBmdWxsbmFtZToKKyAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfd2VicGFnZXJlcGxheSgpCiAK
ICAgICBkZWYgX2luc3RhbGxfbWVjaGFuaXplKHNlbGYpOgogICAgICAgICBzZWxmLl9pbnN0YWxs
KCJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9tZWNo
YW5pemUtMC4yLjUudGFyLmd6IiwKQEAgLTEyNiw2ICsxMjgsMTUgQEAgY2xhc3MgQXV0b2luc3Rh
bGxJbXBvcnRIb29rKG9iamVjdCk6CiAgICAgICAgIGluc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0
cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9weXRob24taXJjbGliL3B5dGhv
bi1pcmNsaWIvMC40LjgvcHl0aG9uLWlyY2xpYi0wLjQuOC56aXAiLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cmxfc3VicGF0aD0iaXJjYm90LnB5IikKIAorICAgIGRlZiBfaW5zdGFsbF93
ZWJwYWdlcmVwbGF5KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fZnMuZXhpc3RzKHNlbGYu
X2ZzLmpvaW4oX0FVVE9JTlNUQUxMRURfRElSLCAid2VicGFnZXJlcGxheSIpKToKKyAgICAgICAg
ICAgIHNlbGYuX2luc3RhbGwoImh0dHA6Ly93ZWItcGFnZS1yZXBsYXkuZ29vZ2xlY29kZS5jb20v
ZmlsZXMvd2VicGFnZXJlcGxheS0xLjEuMS50YXIuZ3oiLCAid2VicGFnZXJlcGxheS0xLjEuMSIp
CisgICAgICAgICAgICBzZWxmLl9mcy5tb3ZlKHNlbGYuX2ZzLmpvaW4oX0FVVE9JTlNUQUxMRURf
RElSLCAid2VicGFnZXJlcGxheS0xLjEuMSIpLCBzZWxmLl9mcy5qb2luKF9BVVRPSU5TVEFMTEVE
X0RJUiwgIndlYnBhZ2VyZXBsYXkiKSkKKworICAgICAgICBpbml0X3BhdGggPSBzZWxmLl9mcy5q
b2luKF9BVVRPSU5TVEFMTEVEX0RJUiwgIndlYnBhZ2VyZXBsYXkiLCAiX19pbml0X18ucHkiKQor
ICAgICAgICBpZiBub3Qgc2VsZi5fZnMuZXhpc3RzKGluaXRfcGF0aCk6CisgICAgICAgICAgICBz
ZWxmLl9mcy53cml0ZV90ZXh0X2ZpbGUoaW5pdF9wYXRoLCAiIikKKwogICAgIGRlZiBfaW5zdGFs
bChzZWxmLCB1cmwsIHVybF9zdWJwYXRoKToKICAgICAgICAgaW5zdGFsbGVyID0gQXV0b0luc3Rh
bGxlcih0YXJnZXRfZGlyPV9BVVRPSU5TVEFMTEVEX0RJUikKICAgICAgICAgaW5zdGFsbGVyLmlu
c3RhbGwodXJsPXVybCwgdXJsX3N1YnBhdGg9dXJsX3N1YnBhdGgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145188</attachid>
            <date>2012-05-31 18:21:38 -0700</date>
            <delta_ts>2012-05-31 19:43:23 -0700</delta_ts>
            <desc>Addressed Dirk&apos;s comments.</desc>
            <filename>bug-84008-20120531182529.patch</filename>
            <type>text/plain</type>
            <size>53099</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTkxNzcpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA2LTAxICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBwdWJsaWMgcGFn
ZSBsb2FkaW5nIHBlcmZvcm1hbmNlIHRlc3RzIHVzaW5nIHdlYi1wYWdlLXJlcGxheQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQwMDgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgcmVwbGF5IHRlc3Rz
IGZvciBnb29nbGUuY29tIGFuZCB5b3V0dWJlLmNvbSBhcyBleGFtcGxlcy4KKworICAgICAgICAq
IFJlcGxheTogQWRkZWQuCisgICAgICAgICogUmVwbGF5L3d3dy5nb29nbGUuY29tLnJlcGxheTog
QWRkZWQuCisgICAgICAgICogUmVwbGF5L3d3dy55b3V0dWJlLmNvbS5yZXBsYXk6IEFkZGVkLgor
CiAyMDEyLTA1LTMwICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbcGVyZi10ZXN0XSBBZGQgYSBiZW5jaG1hcmsgZm9yIHF1ZXJ5U2VsZWN0b3IoKQpJbmRl
eDogUGVyZm9ybWFuY2VUZXN0cy9SZXBsYXkvd3d3Lmdvb2dsZS5jb20ucmVwbGF5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvUmVwbGF5L3d3dy5nb29nbGUuY29tLnJlcGxheQkocmV2
aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvUmVwbGF5L3d3dy5nb29nbGUuY29tLnJlcGxh
eQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAoraHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIv
MjAxMTA3MjkwMTM0MzYvaHR0cDovL3d3dy5nb29nbGUuY29tLwpJbmRleDogUGVyZm9ybWFuY2VU
ZXN0cy9SZXBsYXkvd3d3LnlvdXR1YmUuY29tLnJlcGxheQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3Jt
YW5jZVRlc3RzL1JlcGxheS93d3cueW91dHViZS5jb20ucmVwbGF5CShyZXZpc2lvbiAwKQorKysg
UGVyZm9ybWFuY2VUZXN0cy9SZXBsYXkvd3d3LnlvdXR1YmUuY29tLnJlcGxheQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSBAQAoraHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMTAxMDEwNDUw
MjcvaHR0cDovL3d3dy55b3V0dWJlLmNvbS8KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExOTE3NykKKysrIFRvb2xzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBAQAorMjAxMi0wNi0wMSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgcHVibGljIHBhZ2UgbG9h
ZGluZyBwZXJmb3JtYW5jZSB0ZXN0cyB1c2luZyB3ZWItcGFnZS1yZXBsYXkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MDA4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBwcmltaXRpdmUgaW1w
bGVtZW50YXRpb24gb2YgcmVwbGF5IHBlcmZvcm1hbmNlIHRlc3RzLiBXZSB1c2Ugd2ViLXBhZ2Ut
cmVwbGF5IChodHRwOi8vY29kZS5nb29nbGUuY29tL3Avd2ViLXBhZ2UtcmVwbGF5LykKKyAgICAg
ICAgdG8gY2FjaGUgZGF0YSBsb2NhbGx5LiBFYWNoIHJlcGxheSB0ZXN0IGlzIHJlcHJlc2VudGVk
IGJ5IGEgdGV4dCBmaWxlIHdpdGggLnJlcGxheSBleHRlbnNpb24gY29udGFpbmluZyBhIHNpbmds
ZSBVUkwuCisgICAgICAgIFRvIGhhc2ggb3V0IGJ1Z3MgYW5kIGlzb2xhdGUgdGhlbSBmcm9tIHRo
ZSByZXN0IG9mIHBlcmZvcm1hbmNlIHRlc3RzLCByZXBsYXkgdGVzdHMgYXJlIGhpZGRlbiBiZWhp
bmQgLS1yZXBsYXkgZmxhZy4KKworICAgICAgICBSdW4gInJ1bi1wZXJmLXRlc3RzIC0tcmVwbGF5
IFBlcmZvcm1hbmNlVGVzdHMvUmVwbGF5IiBhZnRlciBjaGFuZ2luZyB0aGUgc3lzdGVtIG5ldHdv
cmsgcHJlZmVyZW5jZSB0byBmb3J3YXJkIEhUVFAgYW5kIEhUVFBTIHJlcXVlc3RzCisgICAgICAg
IHRvIGxvY2FsaG9zdDo4MDgwIGFuZCBsb2NhbGhvc3Q6ODQ0MyByZXNwZWN0aXZlbHkgKGkuZS4g
Y29uZmlndXJlIHRoZSBzeXN0ZW0gYXMgaWYgdGhlcmUgYXJlIEhUVFAgcHJveGllcyBhdCBwb3J0
cyA4MDgwIGFuZCA4NDQzKQorICAgICAgICBleGNsdWRpbmc6ICoud2Via2l0Lm9yZywgKi5nb29n
bGVjb2RlLmNvbSwgKi5zb3VyY2Vmb3JnZS5uZXQsIHB5cGkucHl0aG9uLm9yZywgYW5kIHd3dy5h
ZGFtYmFydGguY29tIGZvciB0aGlyZHBhcnR5IFB5dGhvbiBkZXBlbmRlbmNpZXMuCisgICAgICAg
IHJ1bi1wZXJmLXRlc3RzIHN0YXJ0cyB3ZWItcGFnZS1yZXBsYXksIHdoaWNoIHByb3ZpZGVzIEhU
VFAgcHJveGllcyBhdCBwb3J0cyA4MDgwIGFuZCA4NDQzIHRvIHJlcGxheSBwYWdlcy4KKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5OgorICAg
ICAgICAoRHJpdmVyLmlzX2V4dGVybmFsX2h0dHBfdGVzdCk6IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5OgorICAgICAgICAoV2Vi
S2l0RHJpdmVyLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KTogQWxsb3cgdGVzdCBuYW1lcyB0
aGF0IHN0YXJ0cyB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdC5weToKKyAgICAgICAgKFBlcmZUZXN0
Ll9faW5pdF9fKTogVGFrZXMgcG9ydC4KKyAgICAgICAgKFBlcmZUZXN0LnByZXBhcmUpOiBBZGRl
ZC4gT3ZlcnJpZGRlbiBieSBSZXBsYXlQZXJmVGVzdC4KKyAgICAgICAgKFBlcmZUZXN0KToKKyAg
ICAgICAgKFBlcmZUZXN0LnJ1bik6IENhbGxzIHJ1bl9zaW5nbGUuCisgICAgICAgIChQZXJmVGVz
dC5ydW5fc2luZ2xlKTogRXh0cmFjdGVkIGZyb20gUGFnZUxvYWRpbmdQZXJmVGVzdC5ydW4uCisg
ICAgICAgIChDaHJvbWl1bVN0eWxlUGVyZlRlc3QuX19pbml0X18pOgorICAgICAgICAoUGFnZUxv
YWRpbmdQZXJmVGVzdC5fX2luaXRfXyk6CisgICAgICAgIChQYWdlTG9hZGluZ1BlcmZUZXN0LnJ1
bik6CisgICAgICAgIChSZXBsYXlTZXJ2ZXIpOiBBZGRlZC4gUmVzcG9uc2libGUgZm9yIHN0YXJ0
aW5nIGFuZCBzdG9wcGluZyByZXBsYXkucHkgaW4gdGhlIHdlYi1wYWdlLXJlcGxheS4KKyAgICAg
ICAgKFJlcGxheVNlcnZlci5fX2luaXRfXyk6CisgICAgICAgIChSZXBsYXlTZXJ2ZXIud2FpdF91
bnRpbF9yZWFkeSk6IFdhaXQgdW50aWwgcG9ydCA4MDgwIGlzIHJlYWR5LiBJIGhhdmUgdHJpZWQg
bG9va2luZyBhdCB0aGUgcGlwZWQgb3V0cHV0IGZyb20gd2ViLXBhZ2UtcmVwbGF5CisgICAgICAg
IGJ1dCBpdCBjYXVzZWQgYSBkZWFkIGxvY2sgb24gc29tZSB3ZWIgcGFnZXMuCisgICAgICAgIChS
ZXBsYXlTZXJ2ZXIuc3RvcCk6CisgICAgICAgIChSZXBsYXlTZXJ2ZXIuX19kZWxfXyk6CisgICAg
ICAgIChSZXBsYXlQZXJmVGVzdCk6CisgICAgICAgIChSZXBsYXlQZXJmVGVzdC5fX2luaXRfXyk6
CisgICAgICAgIChSZXBsYXlQZXJmVGVzdC5fc3RhcnRfcmVwbGF5X3NlcnZlcik6CisgICAgICAg
IChSZXBsYXlQZXJmVGVzdC5wcmVwYXJlKTogQ3JlYXRlcyB0ZXN0LndwciBhbmQgdGVzdC1leHBl
Y3RlZC5wbmcgdG8gY2FjaGUgdGhlIHBhZ2Ugd2hlbiBhIHJlcGxheSB0ZXN0IGlzIHJhbiBmb3Ig
dGhlIGZpcnN0IHRpbWUuCisgICAgICAgIFRoZSBzdWJzZXF1ZW50IHJ1bnMgb2YgdGhlIHNhbWUg
dGVzdCB3aWxsIGp1c3QgdXNlIHRlc3Qud3ByLgorICAgICAgICAoUmVwbGF5UGVyZlRlc3QucnVu
X3NpbmdsZSk6CisgICAgICAgIChQZXJmVGVzdEZhY3RvcnkpOgorICAgICAgICAoUGVyZlRlc3RG
YWN0b3J5LmNyZWF0ZV9wZXJmX3Rlc3QpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcGVy
Zm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHk6CisgICAgICAgIChNYWluVGVzdC50
ZXN0X3BhcnNlX291dHB1dCk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3BhcnNlX291dHB1dF93
aXRoX2ZhaWxpbmdfbGluZSk6CisgICAgICAgIChUZXN0UGFnZUxvYWRpbmdQZXJmVGVzdC50ZXN0
X3J1bik6CisgICAgICAgIChUZXN0UGFnZUxvYWRpbmdQZXJmVGVzdC50ZXN0X3J1bl93aXRoX2Jh
ZF9vdXRwdXQpOgorICAgICAgICAoVGVzdFJlcGxheVBlcmZUZXN0KToKKyAgICAgICAgKFRlc3RS
ZXBsYXlQZXJmVGVzdC5SZXBsYXlUZXN0UG9ydCk6CisgICAgICAgIChUZXN0UmVwbGF5UGVyZlRl
c3QuUmVwbGF5VGVzdFBvcnQuX19pbml0X18pOgorICAgICAgICAoVGVzdFJlcGxheVBlcmZUZXN0
LlJlcGxheVRlc3RQb3J0Ll9faW5pdF9fLlJlcGxheVRlc3REcml2ZXIpOgorICAgICAgICAoVGVz
dFJlcGxheVBlcmZUZXN0LlJlcGxheVRlc3RQb3J0Ll9faW5pdF9fLlJlcGxheVRlc3REcml2ZXIu
cnVuX3Rlc3QpOgorICAgICAgICAoVGVzdFJlcGxheVBlcmZUZXN0LlJlcGxheVRlc3RQb3J0Ll9k
cml2ZXJfY2xhc3MpOgorICAgICAgICAoVGVzdFJlcGxheVBlcmZUZXN0Lk1vY2tSZXBsYXlTZXJ2
ZXIpOgorICAgICAgICAoVGVzdFJlcGxheVBlcmZUZXN0Lk1vY2tSZXBsYXlTZXJ2ZXIuX19pbml0
X18pOgorICAgICAgICAoVGVzdFJlcGxheVBlcmZUZXN0Lk1vY2tSZXBsYXlTZXJ2ZXIuc3RvcCk6
CisgICAgICAgIChUZXN0UmVwbGF5UGVyZlRlc3QuX2FkZF9maWxlKToKKyAgICAgICAgKFRlc3RS
ZXBsYXlQZXJmVGVzdC5fc2V0dXBfdGVzdCk6CisgICAgICAgIChUZXN0UmVwbGF5UGVyZlRlc3Qu
dGVzdF9ydW5fc2luZ2xlKToKKyAgICAgICAgKFRlc3RSZXBsYXlQZXJmVGVzdC50ZXN0X3J1bl9z
aW5nbGUucnVuX3Rlc3QpOgorICAgICAgICAoVGVzdFJlcGxheVBlcmZUZXN0LnRlc3RfcnVuX3Np
bmdsZV9mYWlsc193aXRob3V0X3dlYnBhZ2VyZXBsYXkpOgorICAgICAgICAoVGVzdFJlcGxheVBl
cmZUZXN0LnRlc3RfcHJlcGFyZV9mYWlsc193aGVuX3dhaXRfdW50aWxfcmVhZHlfZmFpbHMpOgor
ICAgICAgICAoVGVzdFJlcGxheVBlcmZUZXN0LnRlc3RfcnVuX3NpbmdsZV9mYWlsc193aGVuX291
dHB1dF9oYXNfZXJyb3IpOgorICAgICAgICAoVGVzdFJlcGxheVBlcmZUZXN0LnRlc3RfcnVuX3Np
bmdsZV9mYWlsc193aGVuX291dHB1dF9oYXNfZXJyb3IucnVuX3Rlc3QpOgorICAgICAgICAoVGVz
dFJlcGxheVBlcmZUZXN0LnRlc3RfcHJlcGFyZSk6CisgICAgICAgIChUZXN0UmVwbGF5UGVyZlRl
c3QudGVzdF9wcmVwYXJlLnJ1bl90ZXN0KToKKyAgICAgICAgKFRlc3RSZXBsYXlQZXJmVGVzdC50
ZXN0X3ByZXBhcmVfY2FsbHNfcnVuX3NpbmdsZSk6CisgICAgICAgIChUZXN0UmVwbGF5UGVyZlRl
c3QudGVzdF9wcmVwYXJlX2NhbGxzX3J1bl9zaW5nbGUucnVuX3NpbmdsZSk6CisgICAgICAgIChU
ZXN0UGVyZlRlc3RGYWN0b3J5LnRlc3RfcmVndWxhcl90ZXN0KToKKyAgICAgICAgKFRlc3RQZXJm
VGVzdEZhY3RvcnkudGVzdF9pbnNwZWN0b3JfdGVzdCk6CisgICAgICAgIChUZXN0UGVyZlRlc3RG
YWN0b3J5LnRlc3RfcGFnZV9sb2FkaW5nX3Rlc3QpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5OgorICAgICAgICAoUGVyZlRl
c3RzUnVubmVyKToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fcGFyc2VfYXJncyk6IEFkZGVk
IC0tcmVwbGF5IGZsYWcgdG8gZW5hYmxlIHJlcGxheSB0ZXN0cy4KKyAgICAgICAgKFBlcmZUZXN0
c1J1bm5lci5fY29sbGVjdF90ZXN0cyk6IENvbGxlY3QgLnJlcGxheSBmaWxlcyB3aGVuIHJlcGxh
eSB0ZXN0cyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fY29sbGVjdF90
ZXN0cy5faXNfdGVzdF9maWxlKToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5ydW4pOiBFeGl0
IGVhcmx5IGlmIG9uZSBvZiBjYWxscyB0byBwcmVwYXJlKCkgZmFpbHMuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfdW5pdHRlc3Qu
cHk6CisgICAgICAgIChjcmVhdGVfcnVubmVyKToKKyAgICAgICAgKHJ1bl90ZXN0KToKKyAgICAg
ICAgKF90ZXN0c19mb3JfcnVubmVyKToKKyAgICAgICAgKHRlc3RfcnVuX3Rlc3Rfc2V0KToKKyAg
ICAgICAgKHRlc3RfcnVuX3Rlc3Rfc2V0X2tpbGxzX2RydF9wZXJfcnVuKToKKyAgICAgICAgKHRl
c3RfcnVuX3Rlc3RfcGF1c2VfYmVmb3JlX3Rlc3RpbmcpOgorICAgICAgICAodGVzdF9ydW5fdGVz
dF9zZXRfZm9yX3BhcnNlcl90ZXN0cyk6CisgICAgICAgICh0ZXN0X3J1bl90ZXN0X3NldF93aXRo
X2pzb25fb3V0cHV0KToKKyAgICAgICAgKHRlc3RfcnVuX3Rlc3Rfc2V0X3dpdGhfanNvbl9zb3Vy
Y2UpOgorICAgICAgICAodGVzdF9ydW5fdGVzdF9zZXRfd2l0aF9tdWx0aXBsZV9yZXBvc2l0b3Jp
ZXMpOgorICAgICAgICAodGVzdF9ydW5fd2l0aF91cGxvYWRfanNvbik6CisgICAgICAgICh0ZXN0
X3VwbG9hZF9qc29uKToKKyAgICAgICAgKHRlc3RfdXBsb2FkX2pzb24uTW9ja0ZpbGVVcGxvYWRl
ci51cGxvYWRfc2luZ2xlX3RleHRfZmlsZSk6CisgICAgICAgIChfYWRkX2ZpbGUpOgorICAgICAg
ICAodGVzdF9jb2xsZWN0X3Rlc3RzKToKKyAgICAgICAgKHRlc3RfY29sbGVjdF90ZXN0c193aXRo
X211bHRpbGVfZmlsZXMpOgorICAgICAgICAodGVzdF9jb2xsZWN0X3Rlc3RzX3dpdGhfbXVsdGls
ZV9maWxlcy5hZGRfZmlsZSk6CisgICAgICAgICh0ZXN0X2NvbGxlY3RfdGVzdHNfd2l0aF9za2lw
cGVkX2xpc3QpOgorICAgICAgICAodGVzdF9jb2xsZWN0X3Rlc3RzX3dpdGhfcGFnZV9sb2FkX3N2
Zyk6CisgICAgICAgICh0ZXN0X2NvbGxlY3RfdGVzdHNfc2hvdWxkX2lnbm9yZV9yZXBsYXlfdGVz
dHNfYnlfZGVmYXVsdCk6CisgICAgICAgICh0ZXN0X2NvbGxlY3RfdGVzdHNfd2l0aF9yZXBsYXlf
dGVzdHMpOgorICAgICAgICAodGVzdF9wYXJzZV9hcmdzKToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6IEFkZGVkIHRoZSBkZXBlbmRlbmN5IGZvciB3
ZWItcGFnZS1yZXBsYXkgdmVyc2lvbiAxLjEuMS4KKyAgICAgICAgKEF1dG9pbnN0YWxsSW1wb3J0
SG9vay5maW5kX21vZHVsZSk6CisgICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suX2luc3Rh
bGxfd2VicGFnZXJlcGxheSk6CisKIDIwMTItMDUtMzEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBDaHJvbWl1bSBEUlQgc2hvdWxkIGJlIGFi
bGUgdG8gbG9hZCBleHRlcm5hbCByZXNvdXJjZXMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CShyZXZpc2lvbiAxMTg4MTYp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQko
d29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSw5IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgog
ICAgIGRlZiBpc19odHRwX3Rlc3Qoc2VsZiwgdGVzdF9uYW1lKToKICAgICAgICAgcmV0dXJuIHRl
c3RfbmFtZS5zdGFydHN3aXRoKHNlbGYuSFRUUF9ESVIpIGFuZCBub3QgdGVzdF9uYW1lLnN0YXJ0
c3dpdGgoc2VsZi5IVFRQX0xPQ0FMX0RJUikKIAorICAgIGRlZiBpc19leHRlcm5hbF9odHRwX3Rl
c3Qoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgcmV0dXJuIHRlc3RfbmFtZS5zdGFydHN3aXRo
KCdodHRwOi8vJykgb3IgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoJ2h0dHBzOi8vJykKKwogICAgIGRl
ZiB0ZXN0X3RvX3VyaShzZWxmLCB0ZXN0X25hbWUpOgogICAgICAgICAiIiJDb252ZXJ0IGEgdGVz
dCBuYW1lIHRvIGEgVVJJLiIiIgogICAgICAgICBpZiBub3Qgc2VsZi5pc19odHRwX3Rlc3QodGVz
dF9uYW1lKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
d2Via2l0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvd2Via2l0LnB5CShyZXZpc2lvbiAxMTg4MTYpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weQkod29ya2luZyBjb3B5KQpAQCAtNTI5
LDYgKzUyOSw4IEBAIGNsYXNzIFdlYktpdERyaXZlcihEcml2ZXIpOgogICAgIGRlZiBfY29tbWFu
ZF9mcm9tX2RyaXZlcl9pbnB1dChzZWxmLCBkcml2ZXJfaW5wdXQpOgogICAgICAgICBpZiBzZWxm
LmlzX2h0dHBfdGVzdChkcml2ZXJfaW5wdXQudGVzdF9uYW1lKToKICAgICAgICAgICAgIGNvbW1h
bmQgPSBzZWxmLnRlc3RfdG9fdXJpKGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCisgICAgICAgIGVs
aWYgc2VsZi5pc19leHRlcm5hbF9odHRwX3Rlc3QoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSk6Cisg
ICAgICAgICAgICBjb21tYW5kID0gZHJpdmVyX2lucHV0LnRlc3RfbmFtZQogICAgICAgICBlbHNl
OgogICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYuX3BvcnQuYWJzcGF0aF9mb3JfdGVzdChkcml2
ZXJfaW5wdXQudGVzdF9uYW1lKQogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdjeWd3
aW4nOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJm
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNl
X3Rlc3RzL3BlcmZ0ZXN0LnB5CShyZXZpc2lvbiAxMTg4MTYpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwxOCArMjgsMzAgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogCitpbXBvcnQgZXJybm8KIGltcG9ydCBs
b2dnaW5nCiBpbXBvcnQgbWF0aAogaW1wb3J0IHJlCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwK
K2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQogCisjIEltcG9y
dCBmb3IgYXV0by1pbnN0YWxsCitpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFs
bGVkLndlYnBhZ2VyZXBsYXkucmVwbGF5CisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNv
bnRyb2xsZXJzLnRlc3RfcmVzdWx0X3dyaXRlciBpbXBvcnQgVGVzdFJlc3VsdFdyaXRlcgogZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5kcml2ZXIgaW1wb3J0IERyaXZlcklucHV0Citm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmRyaXZlciBpbXBvcnQgRHJpdmVyT3V0cHV0
CiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKIGNsYXNzIFBlcmZU
ZXN0KG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfbmFtZSwgcGF0aF9vcl91
cmwpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCB0ZXN0X25hbWUsIHBhdGhfb3JfdXJs
KToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fdGVzdF9uYW1lID0g
dGVzdF9uYW1lCiAgICAgICAgIHNlbGYuX3BhdGhfb3JfdXJsID0gcGF0aF9vcl91cmwKIApAQCAt
NDksMTIgKzYxLDE4IEBAIGNsYXNzIFBlcmZUZXN0KG9iamVjdCk6CiAgICAgZGVmIHBhdGhfb3Jf
dXJsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fcGF0aF9vcl91cmwKIAotICAgIGRlZiBy
dW4oc2VsZiwgZHJpdmVyLCB0aW1lb3V0X21zKToKLSAgICAgICAgb3V0cHV0ID0gZHJpdmVyLnJ1
bl90ZXN0KERyaXZlcklucHV0KHNlbGYucGF0aF9vcl91cmwoKSwgdGltZW91dF9tcywgTm9uZSwg
RmFsc2UpKQorICAgIGRlZiBwcmVwYXJlKHNlbGYsIHRpbWVfb3V0X21zKToKKyAgICAgICAgcmV0
dXJuIFRydWUKKworICAgIGRlZiBydW4oc2VsZiwgZHJpdmVyLCB0aW1lX291dF9tcyk6CisgICAg
ICAgIG91dHB1dCA9IHNlbGYucnVuX3NpbmdsZShkcml2ZXIsIHNlbGYucGF0aF9vcl91cmwoKSwg
dGltZV9vdXRfbXMpCiAgICAgICAgIGlmIHNlbGYucnVuX2ZhaWxlZChvdXRwdXQpOgogICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2Vfb3V0cHV0KG91dHB1
dCkKIAorICAgIGRlZiBydW5fc2luZ2xlKHNlbGYsIGRyaXZlciwgcGF0aF9vcl91cmwsIHRpbWVf
b3V0X21zLCBzaG91bGRfcnVuX3BpeGVsX3Rlc3Q9RmFsc2UpOgorICAgICAgICByZXR1cm4gZHJp
dmVyLnJ1bl90ZXN0KERyaXZlcklucHV0KHBhdGhfb3JfdXJsLCB0aW1lX291dF9tcywgaW1hZ2Vf
aGFzaD1Ob25lLCBzaG91bGRfcnVuX3BpeGVsX3Rlc3Q9c2hvdWxkX3J1bl9waXhlbF90ZXN0KSkK
KwogICAgIGRlZiBydW5fZmFpbGVkKHNlbGYsIG91dHB1dCk6CiAgICAgICAgIGlmIG91dHB1dC50
ZXh0ID09IE5vbmUgb3Igb3V0cHV0LmVycm9yOgogICAgICAgICAgICAgcGFzcwpAQCAtMTM3LDgg
KzE1NSw4IEBAIGNsYXNzIFBlcmZUZXN0KG9iamVjdCk6CiBjbGFzcyBDaHJvbWl1bVN0eWxlUGVy
ZlRlc3QoUGVyZlRlc3QpOgogICAgIF9jaHJvbWl1bV9zdHlsZV9yZXN1bHRfcmVnZXggPSByZS5j
b21waWxlKHInXlJFU1VMVFxzKyg/UDxuYW1lPltePV0rKVxzKj1ccysoP1A8dmFsdWU+XGQrKFwu
XGQrKT8pXHMqKD9QPHVuaXQ+XHcrKSQnKQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3Rf
bmFtZSwgcGF0aF9vcl91cmwpOgotICAgICAgICBzdXBlcihDaHJvbWl1bVN0eWxlUGVyZlRlc3Qs
IHNlbGYpLl9faW5pdF9fKHRlc3RfbmFtZSwgcGF0aF9vcl91cmwpCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnQsIHRlc3RfbmFtZSwgcGF0aF9vcl91cmwpOgorICAgICAgICBzdXBlcihDaHJv
bWl1bVN0eWxlUGVyZlRlc3QsIHNlbGYpLl9faW5pdF9fKHBvcnQsIHRlc3RfbmFtZSwgcGF0aF9v
cl91cmwpCiAKICAgICBkZWYgcGFyc2Vfb3V0cHV0KHNlbGYsIG91dHB1dCk6CiAgICAgICAgIHRl
c3RfZmFpbGVkID0gRmFsc2UKQEAgLTE1NywxNSArMTc1LDE1IEBAIGNsYXNzIENocm9taXVtU3R5
bGVQZXJmVGVzdChQZXJmVGVzdCk6CiAKIAogY2xhc3MgUGFnZUxvYWRpbmdQZXJmVGVzdChQZXJm
VGVzdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfbmFtZSwgcGF0aF9vcl91cmwpOgot
ICAgICAgICBzdXBlcihQYWdlTG9hZGluZ1BlcmZUZXN0LCBzZWxmKS5fX2luaXRfXyh0ZXN0X25h
bWUsIHBhdGhfb3JfdXJsKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCB0ZXN0X25hbWUs
IHBhdGhfb3JfdXJsKToKKyAgICAgICAgc3VwZXIoUGFnZUxvYWRpbmdQZXJmVGVzdCwgc2VsZiku
X19pbml0X18ocG9ydCwgdGVzdF9uYW1lLCBwYXRoX29yX3VybCkKIAotICAgIGRlZiBydW4oc2Vs
ZiwgZHJpdmVyLCB0aW1lb3V0X21zKToKKyAgICBkZWYgcnVuKHNlbGYsIGRyaXZlciwgdGltZV9v
dXRfbXMpOgogICAgICAgICB0ZXN0X3RpbWVzID0gW10KIAogICAgICAgICBmb3IgaSBpbiByYW5n
ZSgwLCAyMCk6Ci0gICAgICAgICAgICBvdXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QoRHJpdmVySW5w
dXQoc2VsZi5wYXRoX29yX3VybCgpLCB0aW1lb3V0X21zLCBOb25lLCBGYWxzZSkpCi0gICAgICAg
ICAgICBpZiBzZWxmLnJ1bl9mYWlsZWQob3V0cHV0KToKKyAgICAgICAgICAgIG91dHB1dCA9IHNl
bGYucnVuX3NpbmdsZShkcml2ZXIsIHNlbGYucGF0aF9vcl91cmwoKSwgdGltZV9vdXRfbXMpCisg
ICAgICAgICAgICBpZiBub3Qgb3V0cHV0IG9yIHNlbGYucnVuX2ZhaWxlZChvdXRwdXQpOgogICAg
ICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICBpZiBpID09IDA6CiAgICAgICAg
ICAgICAgICAgY29udGludWUKQEAgLTE5NCwxNiArMjEyLDEzMCBAQCBjbGFzcyBQYWdlTG9hZGlu
Z1BlcmZUZXN0KFBlcmZUZXN0KToKICAgICAgICAgcmV0dXJuIHtzZWxmLnRlc3RfbmFtZSgpOiBy
ZXN1bHRzfQogCiAKK2NsYXNzIFJlcGxheVNlcnZlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBhcmNoaXZlLCByZWNvcmQpOgorICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQor
CisgICAgICAgICMgRklYTUU6IFNob3VsZCBlcnJvciBpZiBsb2NhbCBwcm94eSBpc24ndCBzZXQg
dG8gZm9yd2FyZCByZXF1ZXN0cyB0byBsb2NhbGhvc3Q6ODA4MCBhbmQgbG9jYWxob3N0Ojg0MTMK
KworICAgICAgICByZXBsYXlfcGF0aCA9IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxl
ZC53ZWJwYWdlcmVwbGF5LnJlcGxheS5fX2ZpbGVfXworICAgICAgICBhcmdzID0gWydweXRob24n
LCByZXBsYXlfcGF0aCwgJy0tbm8tZG5zX2ZvcndhcmRpbmcnLCAnLS1wb3J0JywgJzgwODAnLCAn
LS1zc2xfcG9ydCcsICc4NDEzJywgJy0tdXNlX2Nsb3Nlc3RfbWF0Y2gnLCAnLS1sb2dfbGV2ZWwn
LCAnd2FybmluZyddCisgICAgICAgIGlmIHJlY29yZDoKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5k
KCctLXJlY29yZCcpCisgICAgICAgIGFyZ3MuYXBwZW5kKGFyY2hpdmUpCisKKyAgICAgICAgc2Vs
Zi5fcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncykKKworICAgIGRlZiB3YWl0X3VudGls
X3JlYWR5KHNlbGYpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCAxMCk6CisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbiA9IHNvY2tldC5jcmVhdGVfY29ubmVj
dGlvbigoJ2xvY2FsaG9zdCcsICc4MDgwJyksIHRpbWVvdXQ9MSkKKyAgICAgICAgICAgICAgICBj
b25uZWN0aW9uLmNsb3NlKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAg
ICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisg
ICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYg
c3RvcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKKyAgICAgICAgICAgIHNlbGYu
X3Byb2Nlc3Muc2VuZF9zaWduYWwoc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgICAgIHNlbGYuX3By
b2Nlc3Mud2FpdCgpCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisKKyAgICBkZWYgX19k
ZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zdG9wKCkKKworCitjbGFzcyBSZXBsYXlQZXJmVGVz
dChQYWdlTG9hZGluZ1BlcmZUZXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgdGVz
dF9uYW1lLCBwYXRoX29yX3VybCk6CisgICAgICAgIHN1cGVyKFJlcGxheVBlcmZUZXN0LCBzZWxm
KS5fX2luaXRfXyhwb3J0LCB0ZXN0X25hbWUsIHBhdGhfb3JfdXJsKQorCisgICAgZGVmIF9zdGFy
dF9yZXBsYXlfc2VydmVyKHNlbGYsIGFyY2hpdmUsIHJlY29yZCk6CisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIHJldHVybiBSZXBsYXlTZXJ2ZXIoYXJjaGl2ZSwgcmVjb3JkKQorICAgICAgICBl
eGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKKyAgICAgICAgICAgIGlmIGVycm9yLmVycm5vID09IGVy
cm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCJSZXBsYXkgdGVzdHMgcmVx
dWlyZSB3ZWItcGFnZS1yZXBsYXkuIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgcmFpc2UgZXJyb3IKKworICAgIGRlZiBwcmVwYXJlKHNlbGYsIHRpbWVfb3V0X21zKToKKyAg
ICAgICAgZmlsZXN5c3RlbSA9IHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtCisgICAgICAgIHBh
dGhfd2l0aG91dF9leHQgPSBmaWxlc3lzdGVtLnNwbGl0ZXh0KHNlbGYucGF0aF9vcl91cmwoKSlb
MF0KKworICAgICAgICBzZWxmLl9hcmNoaXZlX3BhdGggPSBmaWxlc3lzdGVtLmpvaW4ocGF0aF93
aXRob3V0X2V4dCArICcud3ByJykKKyAgICAgICAgc2VsZi5fZXhwZWN0ZWRfaW1hZ2VfcGF0aCA9
IGZpbGVzeXN0ZW0uam9pbihwYXRoX3dpdGhvdXRfZXh0ICsgJy1leHBlY3RlZC5wbmcnKQorICAg
ICAgICBzZWxmLl91cmwgPSBmaWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHNlbGYucGF0aF9vcl91
cmwoKSkuc3BsaXQoJ1xuJylbMF0KKworICAgICAgICBpZiBmaWxlc3lzdGVtLmlzZmlsZShzZWxm
Ll9hcmNoaXZlX3BhdGgpIGFuZCBmaWxlc3lzdGVtLmlzZmlsZShzZWxmLl9leHBlY3RlZF9pbWFn
ZV9wYXRoKToKKyAgICAgICAgICAgIF9sb2cuaW5mbygiUmVwbGF5IHJlYWR5IGZvciAlcyIgJSBz
ZWxmLl9hcmNoaXZlX3BhdGgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIF9s
b2cuaW5mbygiUHJlcGFyaW5nIHJlcGxheSBmb3IgJXMiICUgc2VsZi50ZXN0X25hbWUoKSkKKwor
ICAgICAgICBkcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIod29ya2VyX251bWJlcj0x
LCBub190aW1lb3V0PVRydWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHNl
bGYucnVuX3NpbmdsZShkcml2ZXIsIHNlbGYuX3VybCwgdGltZV9vdXRfbXMsIHJlY29yZD1UcnVl
KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZHJpdmVyLnN0b3AoKQorCisgICAgICAg
IGlmIG5vdCBvdXRwdXQgb3Igbm90IGZpbGVzeXN0ZW0uaXNmaWxlKHNlbGYuX2FyY2hpdmVfcGF0
aCk6CisgICAgICAgICAgICBfbG9nLmVycm9yKCJGYWlsZWQgdG8gcHJlcGFyZSBhIHJlcGxheSBm
b3IgJXMiICUgc2VsZi50ZXN0X25hbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgICAgIF9sb2cuaW5mbygiUHJlcGFyZWQgcmVwbGF5IGZvciAlcyIgJSBzZWxmLnRlc3RfbmFt
ZSgpKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcnVuX3NpbmdsZShzZWxmLCBk
cml2ZXIsIHVybCwgdGltZV9vdXRfbXMsIHJlY29yZD1GYWxzZSk6CisgICAgICAgIHNlcnZlciA9
IHNlbGYuX3N0YXJ0X3JlcGxheV9zZXJ2ZXIoc2VsZi5fYXJjaGl2ZV9wYXRoLCByZWNvcmQpCisg
ICAgICAgIGlmIG5vdCBzZXJ2ZXI6CisgICAgICAgICAgICBfbG9nLmVycm9yKCJXZWIgcGFnZSBy
ZXBsYXkgZGlkbid0IHN0YXJ0LiIpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBzZXJ2ZXIud2FpdF91bnRpbF9yZWFkeSgpOgorICAg
ICAgICAgICAgICAgIF9sb2cuZXJyb3IoIldlYiBwYWdlIHJlcGxheSBkaWRuJ3Qgc3RhcnQuIikK
KyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICBzdXBlcihSZXBsYXlQ
ZXJmVGVzdCwgc2VsZikucnVuX3NpbmdsZShkcml2ZXIsICJhYm91dDpibGFuayIsIHRpbWVfb3V0
X21zKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiTG9hZGluZyB0aGUgcGFnZSIpCisKKyAgICAg
ICAgICAgIG91dHB1dCA9IHN1cGVyKFJlcGxheVBlcmZUZXN0LCBzZWxmKS5ydW5fc2luZ2xlKGRy
aXZlciwgc2VsZi5fdXJsLCB0aW1lX291dF9tcywgc2hvdWxkX3J1bl9waXhlbF90ZXN0PVRydWUp
CisgICAgICAgICAgICBpZiBzZWxmLnJ1bl9mYWlsZWQob3V0cHV0KToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICBpZiBub3Qgb3V0cHV0LmltYWdlOgorICAgICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoIkxvYWRpbmcgdGhlIHBhZ2UgZGlkIG5vdCBnZW5lcmF0ZSBp
bWFnZSByZXN1bHRzIikKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKG91dHB1dC50ZXh0KQor
ICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGZpbGVzeXN0ZW0gPSBz
ZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbQorICAgICAgICAgICAgZGlybmFtZSA9IGZpbGVzeXN0
ZW0uZGlybmFtZSh1cmwpCisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVzeXN0ZW0uc3BsaXQo
dXJsKVsxXQorICAgICAgICAgICAgd3JpdGVyID0gVGVzdFJlc3VsdFdyaXRlcihmaWxlc3lzdGVt
LCBzZWxmLl9wb3J0LCBkaXJuYW1lLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIGlmIHJlY29yZDoK
KyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVfaW1hZ2VfZmlsZXMoYWN0dWFsX2ltYWdlPU5v
bmUsIGV4cGVjdGVkX2ltYWdlPW91dHB1dC5pbWFnZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgd3JpdGVyLndyaXRlX2ltYWdlX2ZpbGVzKGFjdHVhbF9pbWFnZT1vdXRwdXQu
aW1hZ2UsIGV4cGVjdGVkX2ltYWdlPU5vbmUpCisKKyAgICAgICAgICAgIHJldHVybiBvdXRwdXQK
KyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlcnZlci5zdG9wKCkKKworCiBjbGFzcyBQ
ZXJmVGVzdEZhY3Rvcnkob2JqZWN0KToKIAogICAgIF9wYXR0ZXJuX21hcCA9IFsKLSAgICAgICAg
KHJlLmNvbXBpbGUoJ15pbnNwZWN0b3IvJyksIENocm9taXVtU3R5bGVQZXJmVGVzdCksCi0gICAg
ICAgIChyZS5jb21waWxlKCdeUGFnZUxvYWQvJyksIFBhZ2VMb2FkaW5nUGVyZlRlc3QpLAorICAg
ICAgICAocmUuY29tcGlsZShyJ15pbnNwZWN0b3IvJyksIENocm9taXVtU3R5bGVQZXJmVGVzdCks
CisgICAgICAgIChyZS5jb21waWxlKHInXlBhZ2VMb2FkLycpLCBQYWdlTG9hZGluZ1BlcmZUZXN0
KSwKKyAgICAgICAgKHJlLmNvbXBpbGUocicoLispXC5yZXBsYXkkJyksIFJlcGxheVBlcmZUZXN0
KSwKICAgICBdCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgY3JlYXRlX3BlcmZfdGVzdChj
bHMsIHRlc3RfbmFtZSwgcGF0aCk6CisgICAgZGVmIGNyZWF0ZV9wZXJmX3Rlc3QoY2xzLCBwb3J0
LCB0ZXN0X25hbWUsIHBhdGgpOgogICAgICAgICBmb3IgKHBhdHRlcm4sIHRlc3RfY2xhc3MpIGlu
IGNscy5fcGF0dGVybl9tYXA6CiAgICAgICAgICAgICBpZiBwYXR0ZXJuLm1hdGNoKHRlc3RfbmFt
ZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RfY2xhc3ModGVzdF9uYW1lLCBwYXRoKQot
ICAgICAgICByZXR1cm4gUGVyZlRlc3QodGVzdF9uYW1lLCBwYXRoKQorICAgICAgICAgICAgICAg
IHJldHVybiB0ZXN0X2NsYXNzKHBvcnQsIHRlc3RfbmFtZSwgcGF0aCkKKyAgICAgICAgcmV0dXJu
IFBlcmZUZXN0KHBvcnQsIHRlc3RfbmFtZSwgcGF0aCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RfdW5pdHRlc3QucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdF91bml0
dGVzdC5weQkocmV2aXNpb24gMTE4ODE2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJm
b3JtYW5jZV90ZXN0cy9wZXJmdGVzdF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTIgKzMxLDE2IEBAIGltcG9ydCBTdHJpbmdJTwogaW1wb3J0IG1hdGgKIGltcG9ydCB1bml0dGVz
dAogCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21vY2sgaW1wb3J0IE1vY2tIb3N0CiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVy
ZQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5kcml2ZXIgaW1wb3J0IERyaXZlck91
dHB1dAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC50ZXN0IGltcG9ydCBUZXN0RHJp
dmVyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LnRlc3QgaW1wb3J0IFRlc3RQb3J0
CiBmcm9tIHdlYmtpdHB5LnBlcmZvcm1hbmNlX3Rlc3RzLnBlcmZ0ZXN0IGltcG9ydCBDaHJvbWl1
bVN0eWxlUGVyZlRlc3QKIGZyb20gd2Via2l0cHkucGVyZm9ybWFuY2VfdGVzdHMucGVyZnRlc3Qg
aW1wb3J0IFBhZ2VMb2FkaW5nUGVyZlRlc3QKIGZyb20gd2Via2l0cHkucGVyZm9ybWFuY2VfdGVz
dHMucGVyZnRlc3QgaW1wb3J0IFBlcmZUZXN0CiBmcm9tIHdlYmtpdHB5LnBlcmZvcm1hbmNlX3Rl
c3RzLnBlcmZ0ZXN0IGltcG9ydCBQZXJmVGVzdEZhY3RvcnkKK2Zyb20gd2Via2l0cHkucGVyZm9y
bWFuY2VfdGVzdHMucGVyZnRlc3QgaW1wb3J0IFJlcGxheVBlcmZUZXN0CiAKIAogY2xhc3MgTWFp
blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNTMsNyArNTcsNyBAQCBjbGFzcyBNYWluVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG91dHB1dF9jYXB0dXJlID0gT3V0cHV0Q2Fw
dHVyZSgpCiAgICAgICAgIG91dHB1dF9jYXB0dXJlLmNhcHR1cmVfb3V0cHV0KCkKICAgICAgICAg
dHJ5OgotICAgICAgICAgICAgdGVzdCA9IFBlcmZUZXN0KCdzb21lLXRlc3QnLCAnL3BhdGgvc29t
ZS1kaXIvc29tZS10ZXN0JykKKyAgICAgICAgICAgIHRlc3QgPSBQZXJmVGVzdChOb25lLCAnc29t
ZS10ZXN0JywgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcpCiAgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHRlc3QucGFyc2Vfb3V0cHV0KG91dHB1dCksCiAgICAgICAgICAgICAgICAgeydz
b21lLXRlc3QnOiB7J2F2Zyc6IDExMDAuMCwgJ21lZGlhbic6IDExMDEuMCwgJ21pbic6IDEwODAu
MCwgJ21heCc6IDExMjAuMCwgJ3N0ZGV2JzogMTEuMCwgJ3VuaXQnOiAnbXMnfX0pCiAgICAgICAg
IGZpbmFsbHk6CkBAIC03Nyw3ICs4MSw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICAgICAgb3V0cHV0X2NhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKICAgICAgICAg
b3V0cHV0X2NhcHR1cmUuY2FwdHVyZV9vdXRwdXQoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICB0ZXN0ID0gUGVyZlRlc3QoJ3NvbWUtdGVzdCcsICcvcGF0aC9zb21lLWRpci9zb21lLXRlc3Qn
KQorICAgICAgICAgICAgdGVzdCA9IFBlcmZUZXN0KE5vbmUsICdzb21lLXRlc3QnLCAnL3BhdGgv
c29tZS1kaXIvc29tZS10ZXN0JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5w
YXJzZV9vdXRwdXQob3V0cHV0KSwgTm9uZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAg
IGFjdHVhbF9zdGRvdXQsIGFjdHVhbF9zdGRlcnIsIGFjdHVhbF9sb2dzID0gb3V0cHV0X2NhcHR1
cmUucmVzdG9yZV9vdXRwdXQoKQpAQCAtMTAxLDcgKzEwNSw3IEBAIGNsYXNzIFRlc3RQYWdlTG9h
ZGluZ1BlcmZUZXN0KHVuaXR0ZXN0LlQKICAgICAgICAgICAgICAgICByZXR1cm4gRHJpdmVyT3V0
cHV0KCdzb21lIG91dHB1dCcsIGltYWdlPU5vbmUsIGltYWdlX2hhc2g9Tm9uZSwgYXVkaW89Tm9u
ZSwgdGVzdF90aW1lPXNlbGYuX3ZhbHVlc1tzZWxmLl9pbmRleCAtIDFdKQogCiAgICAgZGVmIHRl
c3RfcnVuKHNlbGYpOgotICAgICAgICB0ZXN0ID0gUGFnZUxvYWRpbmdQZXJmVGVzdCgnc29tZS10
ZXN0JywgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcpCisgICAgICAgIHRlc3QgPSBQYWdlTG9h
ZGluZ1BlcmZUZXN0KE5vbmUsICdzb21lLXRlc3QnLCAnL3BhdGgvc29tZS1kaXIvc29tZS10ZXN0
JykKICAgICAgICAgZHJpdmVyID0gVGVzdFBhZ2VMb2FkaW5nUGVyZlRlc3QuTW9ja0RyaXZlcihb
MSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3
LCAxOCwgMTksIDIwXSkKICAgICAgICAgb3V0cHV0X2NhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkK
ICAgICAgICAgb3V0cHV0X2NhcHR1cmUuY2FwdHVyZV9vdXRwdXQoKQpAQCAtMTE4LDcgKzEyMiw3
IEBAIGNsYXNzIFRlc3RQYWdlTG9hZGluZ1BlcmZUZXN0KHVuaXR0ZXN0LlQKICAgICAgICAgb3V0
cHV0X2NhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKICAgICAgICAgb3V0cHV0X2NhcHR1cmUuY2Fw
dHVyZV9vdXRwdXQoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0ZXN0ID0gUGFnZUxvYWRp
bmdQZXJmVGVzdCgnc29tZS10ZXN0JywgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcpCisgICAg
ICAgICAgICB0ZXN0ID0gUGFnZUxvYWRpbmdQZXJmVGVzdChOb25lLCAnc29tZS10ZXN0JywgJy9w
YXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcpCiAgICAgICAgICAgICBkcml2ZXIgPSBUZXN0UGFnZUxv
YWRpbmdQZXJmVGVzdC5Nb2NrRHJpdmVyKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCAnc29tZSBlcnJv
cicsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMF0pCiAgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QucnVuKGRyaXZlciwgTm9uZSksIE5vbmUpCiAg
ICAgICAgIGZpbmFsbHk6CkBAIC0xMjgsMTcgKzEzMiwxOTIgQEAgY2xhc3MgVGVzdFBhZ2VMb2Fk
aW5nUGVyZlRlc3QodW5pdHRlc3QuVAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9s
b2dzLCAnZXJyb3I6IHNvbWUtdGVzdFxuc29tZSBlcnJvclxuJykKIAogCitjbGFzcyBUZXN0UmVw
bGF5UGVyZlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgUmVwbGF5VGVzdFBv
cnQoVGVzdFBvcnQpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY3VzdG9tX3J1bl90ZXN0
PU5vbmUpOgorCisgICAgICAgICAgICBjbGFzcyBSZXBsYXlUZXN0RHJpdmVyKFRlc3REcml2ZXIp
OgorICAgICAgICAgICAgICAgIGRlZiBydW5fdGVzdChzZWxmLCB0ZXh0X2lucHV0KToKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbV9ydW5fdGVzdCh0ZXh0X2lucHV0KSBpZiBjdXN0
b21fcnVuX3Rlc3QgZWxzZSBOb25lCisKKyAgICAgICAgICAgIHNlbGYuX2N1c3RvbV9kcml2ZXJf
Y2xhc3MgPSBSZXBsYXlUZXN0RHJpdmVyCisgICAgICAgICAgICBzdXBlcihzZWxmLl9fY2xhc3Nf
Xywgc2VsZikuX19pbml0X18oaG9zdD1Nb2NrSG9zdCgpKQorCisgICAgICAgIGRlZiBfZHJpdmVy
X2NsYXNzKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2N1c3RvbV9kcml2ZXJfY2xh
c3MKKworICAgIGNsYXNzIE1vY2tSZXBsYXlTZXJ2ZXIob2JqZWN0KToKKyAgICAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHdhaXRfdW50aWxfcmVhZHk9VHJ1ZSk6CisgICAgICAgICAgICBzZWxmLndh
aXRfdW50aWxfcmVhZHkgPSBsYW1iZGE6IHdhaXRfdW50aWxfcmVhZHkKKworICAgICAgICBkZWYg
c3RvcChzZWxmKToKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfYWRkX2ZpbGUoc2VsZiwg
cG9ydCwgZGlybmFtZSwgZmlsZW5hbWUsIGNvbnRlbnQ9VHJ1ZSk6CisgICAgICAgIHBvcnQuaG9z
dC5maWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KGRpcm5hbWUpCisgICAgICAgIHBvcnQu
aG9zdC5maWxlc3lzdGVtLmZpbGVzW3BvcnQuaG9zdC5maWxlc3lzdGVtLmpvaW4oZGlybmFtZSwg
ZmlsZW5hbWUpXSA9IGNvbnRlbnQKKworICAgIGRlZiBfc2V0dXBfdGVzdChzZWxmLCBydW5fdGVz
dD1Ob25lKToKKyAgICAgICAgdGVzdF9wb3J0ID0gc2VsZi5SZXBsYXlUZXN0UG9ydChydW5fdGVz
dCkKKyAgICAgICAgc2VsZi5fYWRkX2ZpbGUodGVzdF9wb3J0LCAnL3BhdGgvc29tZS1kaXInLCAn
c29tZS10ZXN0LnJlcGxheScsICdodHRwOi8vc29tZS10ZXN0LycpCisgICAgICAgIHRlc3QgPSBS
ZXBsYXlQZXJmVGVzdCh0ZXN0X3BvcnQsICdzb21lLXRlc3QucmVwbGF5JywgJy9wYXRoL3NvbWUt
ZGlyL3NvbWUtdGVzdC5yZXBsYXknKQorICAgICAgICB0ZXN0Ll9zdGFydF9yZXBsYXlfc2VydmVy
ID0gbGFtYmRhIGFyY2hpdmUsIHJlY29yZDogc2VsZi5fX2NsYXNzX18uTW9ja1JlcGxheVNlcnZl
cigpCisgICAgICAgIHJldHVybiB0ZXN0LCB0ZXN0X3BvcnQKKworICAgIGRlZiB0ZXN0X3J1bl9z
aW5nbGUoc2VsZik6CisgICAgICAgIG91dHB1dF9jYXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCisg
ICAgICAgIG91dHB1dF9jYXB0dXJlLmNhcHR1cmVfb3V0cHV0KCkKKworICAgICAgICBsb2FkZWRf
cGFnZXMgPSBbXQorCisgICAgICAgIGRlZiBydW5fdGVzdCh0ZXN0X2lucHV0KToKKyAgICAgICAg
ICAgIGlmIHRlc3RfaW5wdXQudGVzdF9uYW1lICE9ICJhYm91dDpibGFuayI6CisgICAgICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X2lucHV0LnRlc3RfbmFtZSwgJ2h0dHA6Ly9zb21l
LXRlc3QvJykKKyAgICAgICAgICAgIGxvYWRlZF9wYWdlcy5hcHBlbmQodGVzdF9pbnB1dCkKKyAg
ICAgICAgICAgIHNlbGYuX2FkZF9maWxlKHBvcnQsICcvcGF0aC9zb21lLWRpcicsICdzb21lLXRl
c3Qud3ByJywgJ3dwciBjb250ZW50JykKKyAgICAgICAgICAgIHJldHVybiBEcml2ZXJPdXRwdXQo
J2FjdHVhbCB0ZXh0JywgJ2FjdHVhbCBpbWFnZScsICdhY3R1YWwgY2hlY2tzdW0nLAorICAgICAg
ICAgICAgICAgIGF1ZGlvPU5vbmUsIGNyYXNoPUZhbHNlLCB0aW1lb3V0PUZhbHNlLCBlcnJvcj1G
YWxzZSkKKworICAgICAgICB0ZXN0LCBwb3J0ID0gc2VsZi5fc2V0dXBfdGVzdChydW5fdGVzdCkK
KyAgICAgICAgdGVzdC5fYXJjaGl2ZV9wYXRoID0gJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdC53
cHInCisgICAgICAgIHRlc3QuX3VybCA9ICdodHRwOi8vc29tZS10ZXN0LycKKworICAgICAgICB0
cnk6CisgICAgICAgICAgICBkcml2ZXIgPSBwb3J0LmNyZWF0ZV9kcml2ZXIod29ya2VyX251bWJl
cj0xLCBub190aW1lb3V0PVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdC5y
dW5fc2luZ2xlKGRyaXZlciwgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdC5yZXBsYXknLCB0aW1l
X291dF9tcz0xMDApKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYWN0dWFsX3N0ZG91
dCwgYWN0dWFsX3N0ZGVyciwgYWN0dWFsX2xvZ3MgPSBvdXRwdXRfY2FwdHVyZS5yZXN0b3JlX291
dHB1dCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9hZGVkX3BhZ2VzKSwgMikK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWRfcGFnZXNbMF0udGVzdF9uYW1lLCAnYWJv
dXQ6YmxhbmsnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZF9wYWdlc1sxXS50ZXN0
X25hbWUsICdodHRwOi8vc29tZS10ZXN0LycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0
dWFsX3N0ZG91dCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX3N0ZGVyciwg
JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX2xvZ3MsICcnKQorCisgICAgZGVm
IHRlc3RfcnVuX3NpbmdsZV9mYWlsc193aXRob3V0X3dlYnBhZ2VyZXBsYXkoc2VsZik6CisgICAg
ICAgIG91dHB1dF9jYXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG91dHB1dF9jYXB0
dXJlLmNhcHR1cmVfb3V0cHV0KCkKKworICAgICAgICB0ZXN0LCBwb3J0ID0gc2VsZi5fc2V0dXBf
dGVzdCgpCisgICAgICAgIHRlc3QuX3N0YXJ0X3JlcGxheV9zZXJ2ZXIgPSBsYW1iZGEgYXJjaGl2
ZSwgcmVjb3JkOiBOb25lCisgICAgICAgIHRlc3QuX2FyY2hpdmVfcGF0aCA9ICcvcGF0aC9zb21l
LWRpci53cHInCisgICAgICAgIHRlc3QuX3VybCA9ICdodHRwOi8vc29tZS10ZXN0LycKKworICAg
ICAgICB0cnk6CisgICAgICAgICAgICBkcml2ZXIgPSBwb3J0LmNyZWF0ZV9kcml2ZXIod29ya2Vy
X251bWJlcj0xLCBub190aW1lb3V0PVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHRlc3QucnVuX3NpbmdsZShkcml2ZXIsICcvcGF0aC9zb21lLWRpci9zb21lLXRlc3QucmVwbGF5
JywgdGltZV9vdXRfbXM9MTAwKSwgTm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IGFjdHVhbF9zdGRvdXQsIGFjdHVhbF9zdGRlcnIsIGFjdHVhbF9sb2dzID0gb3V0cHV0X2NhcHR1
cmUucmVzdG9yZV9vdXRwdXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9zdGRv
dXQsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9zdGRlcnIsICcnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9sb2dzLCAiV2ViIHBhZ2UgcmVwbGF5IGRpZG4n
dCBzdGFydC5cbiIpCisKKyAgICBkZWYgdGVzdF9wcmVwYXJlX2ZhaWxzX3doZW5fd2FpdF91bnRp
bF9yZWFkeV9mYWlscyhzZWxmKToKKyAgICAgICAgb3V0cHV0X2NhcHR1cmUgPSBPdXRwdXRDYXB0
dXJlKCkKKyAgICAgICAgb3V0cHV0X2NhcHR1cmUuY2FwdHVyZV9vdXRwdXQoKQorCisgICAgICAg
IHRlc3QsIHBvcnQgPSBzZWxmLl9zZXR1cF90ZXN0KCkKKyAgICAgICAgdGVzdC5fc3RhcnRfcmVw
bGF5X3NlcnZlciA9IGxhbWJkYSBhcmNoaXZlLCByZWNvcmQ6IHNlbGYuX19jbGFzc19fLk1vY2tS
ZXBsYXlTZXJ2ZXIod2FpdF91bnRpbF9yZWFkeT1GYWxzZSkKKyAgICAgICAgdGVzdC5fYXJjaGl2
ZV9wYXRoID0gJy9wYXRoL3NvbWUtZGlyLndwcicKKyAgICAgICAgdGVzdC5fdXJsID0gJ2h0dHA6
Ly9zb21lLXRlc3QvJworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRyaXZlciA9IHBvcnQu
Y3JlYXRlX2RyaXZlcih3b3JrZXJfbnVtYmVyPTEsIG5vX3RpbWVvdXQ9VHJ1ZSkKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5ydW5fc2luZ2xlKGRyaXZlciwgJy9wYXRoL3NvbWUt
ZGlyL3NvbWUtdGVzdC5yZXBsYXknLCB0aW1lX291dF9tcz0xMDApLCBOb25lKQorICAgICAgICBm
aW5hbGx5OgorICAgICAgICAgICAgYWN0dWFsX3N0ZG91dCwgYWN0dWFsX3N0ZGVyciwgYWN0dWFs
X2xvZ3MgPSBvdXRwdXRfY2FwdHVyZS5yZXN0b3JlX291dHB1dCgpCisKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChhY3R1YWxfc3Rkb3V0LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChh
Y3R1YWxfc3RkZXJyLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfbG9ncywg
IldlYiBwYWdlIHJlcGxheSBkaWRuJ3Qgc3RhcnQuXG4iKQorCisgICAgZGVmIHRlc3RfcnVuX3Np
bmdsZV9mYWlsc193aGVuX291dHB1dF9oYXNfZXJyb3Ioc2VsZik6CisgICAgICAgIG91dHB1dF9j
YXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG91dHB1dF9jYXB0dXJlLmNhcHR1cmVf
b3V0cHV0KCkKKworICAgICAgICBsb2FkZWRfcGFnZXMgPSBbXQorCisgICAgICAgIGRlZiBydW5f
dGVzdCh0ZXN0X2lucHV0KToKKyAgICAgICAgICAgIGxvYWRlZF9wYWdlcy5hcHBlbmQodGVzdF9p
bnB1dCkKKyAgICAgICAgICAgIHNlbGYuX2FkZF9maWxlKHBvcnQsICcvcGF0aC9zb21lLWRpcics
ICdzb21lLXRlc3Qud3ByJywgJ3dwciBjb250ZW50JykKKyAgICAgICAgICAgIHJldHVybiBEcml2
ZXJPdXRwdXQoJ2FjdHVhbCB0ZXh0JywgJ2FjdHVhbCBpbWFnZScsICdhY3R1YWwgY2hlY2tzdW0n
LAorICAgICAgICAgICAgICAgIGF1ZGlvPU5vbmUsIGNyYXNoPUZhbHNlLCB0aW1lb3V0PUZhbHNl
LCBlcnJvcj0nc29tZSBlcnJvcicpCisKKyAgICAgICAgdGVzdCwgcG9ydCA9IHNlbGYuX3NldHVw
X3Rlc3QocnVuX3Rlc3QpCisgICAgICAgIHRlc3QuX2FyY2hpdmVfcGF0aCA9ICcvcGF0aC9zb21l
LWRpci53cHInCisgICAgICAgIHRlc3QuX3VybCA9ICdodHRwOi8vc29tZS10ZXN0LycKKworICAg
ICAgICB0cnk6CisgICAgICAgICAgICBkcml2ZXIgPSBwb3J0LmNyZWF0ZV9kcml2ZXIod29ya2Vy
X251bWJlcj0xLCBub190aW1lb3V0PVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHRlc3QucnVuX3NpbmdsZShkcml2ZXIsICcvcGF0aC9zb21lLWRpci9zb21lLXRlc3QucmVwbGF5
JywgdGltZV9vdXRfbXM9MTAwKSwgTm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IGFjdHVhbF9zdGRvdXQsIGFjdHVhbF9zdGRlcnIsIGFjdHVhbF9sb2dzID0gb3V0cHV0X2NhcHR1
cmUucmVzdG9yZV9vdXRwdXQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvYWRl
ZF9wYWdlcyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkX3BhZ2VzWzBdLnRl
c3RfbmFtZSwgJ2Fib3V0OmJsYW5rJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWRf
cGFnZXNbMV0udGVzdF9uYW1lLCAnaHR0cDovL3NvbWUtdGVzdC8nKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGFjdHVhbF9zdGRvdXQsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFj
dHVhbF9zdGRlcnIsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9sb2dzLCAn
ZXJyb3I6IHNvbWUtdGVzdC5yZXBsYXlcbnNvbWUgZXJyb3JcbicpCisKKyAgICBkZWYgdGVzdF9w
cmVwYXJlKHNlbGYpOgorICAgICAgICBvdXRwdXRfY2FwdHVyZSA9IE91dHB1dENhcHR1cmUoKQor
ICAgICAgICBvdXRwdXRfY2FwdHVyZS5jYXB0dXJlX291dHB1dCgpCisKKyAgICAgICAgZGVmIHJ1
bl90ZXN0KHRlc3RfaW5wdXQpOgorICAgICAgICAgICAgc2VsZi5fYWRkX2ZpbGUocG9ydCwgJy9w
YXRoL3NvbWUtZGlyJywgJ3NvbWUtdGVzdC53cHInLCAnd3ByIGNvbnRlbnQnKQorICAgICAgICAg
ICAgcmV0dXJuIERyaXZlck91dHB1dCgnYWN0dWFsIHRleHQnLCAnYWN0dWFsIGltYWdlJywgJ2Fj
dHVhbCBjaGVja3N1bScsCisgICAgICAgICAgICAgICAgYXVkaW89Tm9uZSwgY3Jhc2g9RmFsc2Us
IHRpbWVvdXQ9RmFsc2UsIGVycm9yPUZhbHNlKQorCisgICAgICAgIHRlc3QsIHBvcnQgPSBzZWxm
Ll9zZXR1cF90ZXN0KHJ1bl90ZXN0KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwodGVzdC5wcmVwYXJlKHRpbWVfb3V0X21zPTEwMCksIFRydWUpCisgICAgICAg
IGZpbmFsbHk6CisgICAgICAgICAgICBhY3R1YWxfc3Rkb3V0LCBhY3R1YWxfc3RkZXJyLCBhY3R1
YWxfbG9ncyA9IG91dHB1dF9jYXB0dXJlLnJlc3RvcmVfb3V0cHV0KCkKKworICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGFjdHVhbF9zdGRvdXQsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGFjdHVhbF9zdGRlcnIsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9sb2dz
LCAnUHJlcGFyaW5nIHJlcGxheSBmb3Igc29tZS10ZXN0LnJlcGxheVxuUHJlcGFyZWQgcmVwbGF5
IGZvciBzb21lLXRlc3QucmVwbGF5XG4nKQorCisgICAgZGVmIHRlc3RfcHJlcGFyZV9jYWxsc19y
dW5fc2luZ2xlKHNlbGYpOgorICAgICAgICBvdXRwdXRfY2FwdHVyZSA9IE91dHB1dENhcHR1cmUo
KQorICAgICAgICBvdXRwdXRfY2FwdHVyZS5jYXB0dXJlX291dHB1dCgpCisgICAgICAgIGNhbGxl
ZCA9IFtGYWxzZV0KKworICAgICAgICBkZWYgcnVuX3NpbmdsZShkcml2ZXIsIHVybCwgdGltZV9v
dXRfbXMsIHJlY29yZCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVjb3JkKQorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmwsICdodHRwOi8vc29tZS10ZXN0LycpCisgICAg
ICAgICAgICBjYWxsZWRbMF0gPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
ICAgICB0ZXN0LCBwb3J0ID0gc2VsZi5fc2V0dXBfdGVzdCgpCisgICAgICAgIHRlc3QucnVuX3Np
bmdsZSA9IHJ1bl9zaW5nbGUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHRlc3QucHJlcGFyZSh0aW1lX291dF9tcz0xMDApLCBGYWxzZSkKKyAgICAgICAgZmlu
YWxseToKKyAgICAgICAgICAgIGFjdHVhbF9zdGRvdXQsIGFjdHVhbF9zdGRlcnIsIGFjdHVhbF9s
b2dzID0gb3V0cHV0X2NhcHR1cmUucmVzdG9yZV9vdXRwdXQoKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoY2FsbGVkWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuX2FyY2hpdmVf
cGF0aCwgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdC53cHInKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHRlc3QuX3VybCwgJ2h0dHA6Ly9zb21lLXRlc3QvJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChhY3R1YWxfc3Rkb3V0LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1
YWxfc3RkZXJyLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfbG9ncywgIlBy
ZXBhcmluZyByZXBsYXkgZm9yIHNvbWUtdGVzdC5yZXBsYXlcbkZhaWxlZCB0byBwcmVwYXJlIGEg
cmVwbGF5IGZvciBzb21lLXRlc3QucmVwbGF5XG4iKQorCiBjbGFzcyBUZXN0UGVyZlRlc3RGYWN0
b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZWd1bGFyX3Rlc3Qoc2VsZik6
Ci0gICAgICAgIHRlc3QgPSBQZXJmVGVzdEZhY3RvcnkuY3JlYXRlX3BlcmZfdGVzdCgnc29tZS1k
aXIvc29tZS10ZXN0JywgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcpCisgICAgICAgIHRlc3Qg
PSBQZXJmVGVzdEZhY3RvcnkuY3JlYXRlX3BlcmZfdGVzdChOb25lLCAnc29tZS1kaXIvc29tZS10
ZXN0JywgJy9wYXRoL3NvbWUtZGlyL3NvbWUtdGVzdCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodGVzdC5fX2NsYXNzX18sIFBlcmZUZXN0KQogCiAgICAgZGVmIHRlc3RfaW5zcGVjdG9yX3Rl
c3Qoc2VsZik6Ci0gICAgICAgIHRlc3QgPSBQZXJmVGVzdEZhY3RvcnkuY3JlYXRlX3BlcmZfdGVz
dCgnaW5zcGVjdG9yL3NvbWUtdGVzdCcsICcvcGF0aC9pbnNwZWN0b3Ivc29tZS10ZXN0JykKKyAg
ICAgICAgdGVzdCA9IFBlcmZUZXN0RmFjdG9yeS5jcmVhdGVfcGVyZl90ZXN0KE5vbmUsICdpbnNw
ZWN0b3Ivc29tZS10ZXN0JywgJy9wYXRoL2luc3BlY3Rvci9zb21lLXRlc3QnKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHRlc3QuX19jbGFzc19fLCBDaHJvbWl1bVN0eWxlUGVyZlRlc3QpCiAK
ICAgICBkZWYgdGVzdF9wYWdlX2xvYWRpbmdfdGVzdChzZWxmKToKLSAgICAgICAgdGVzdCA9IFBl
cmZUZXN0RmFjdG9yeS5jcmVhdGVfcGVyZl90ZXN0KCdQYWdlTG9hZC9zb21lLXRlc3QnLCAnL3Bh
dGgvUGFnZUxvYWQvc29tZS10ZXN0JykKKyAgICAgICAgdGVzdCA9IFBlcmZUZXN0RmFjdG9yeS5j
cmVhdGVfcGVyZl90ZXN0KE5vbmUsICdQYWdlTG9hZC9zb21lLXRlc3QnLCAnL3BhdGgvUGFnZUxv
YWQvc29tZS10ZXN0JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0Ll9fY2xhc3NfXywg
UGFnZUxvYWRpbmdQZXJmVGVzdCkKIAogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bl
cmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weQkocmV2
aXNpb24gMTE4ODE2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0
cy9wZXJmdGVzdHNydW5uZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgZnJv
bSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAogZnJvbSB3ZWJraXRweS5jb21tb24u
bmV0LmZpbGVfdXBsb2FkZXIgaW1wb3J0IEZpbGVVcGxvYWRlcgogZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMudmlld3MgaW1wb3J0IHByaW50aW5nCiBmcm9tIHdlYmtpdHB5LnBlcmZvcm1hbmNl
X3Rlc3RzLnBlcmZ0ZXN0IGltcG9ydCBQZXJmVGVzdEZhY3RvcnkKK2Zyb20gd2Via2l0cHkucGVy
Zm9ybWFuY2VfdGVzdHMucGVyZnRlc3QgaW1wb3J0IFJlcGxheVBlcmZUZXN0CiAKIAogX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtNTEsNiArNTIsNyBAQCBjbGFzcyBQZXJm
VGVzdHNSdW5uZXIob2JqZWN0KToKICAgICBfRVhJVF9DT0RFX0JBRF9CVUlMRCA9IC0xCiAgICAg
X0VYSVRfQ09ERV9CQURfSlNPTiA9IC0yCiAgICAgX0VYSVRfQ09ERV9GQUlMRURfVVBMT0FESU5H
ID0gLTMKKyAgICBfRVhJVF9DT0RFX0JBRF9QUkVQQVJBVElPTiA9IC00CiAKICAgICBkZWYgX19p
bml0X18oc2VsZiwgYXJncz1Ob25lLCBwb3J0PU5vbmUpOgogICAgICAgICBzZWxmLl9vcHRpb25z
LCBzZWxmLl9hcmdzID0gUGVyZlRlc3RzUnVubmVyLl9wYXJzZV9hcmdzKGFyZ3MpCkBAIC05MCwy
MSArOTIsMjcgQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICBv
cHRwYXJzZS5tYWtlX29wdGlvbigiLS1wYXVzZS1iZWZvcmUtdGVzdGluZyIsIGRlc3Q9InBhdXNl
X2JlZm9yZV90ZXN0aW5nIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKICAg
ICAgICAgICAgICAgICBoZWxwPSJQYXVzZSBiZWZvcmUgcnVubmluZyB0aGUgdGVzdHMgdG8gbGV0
IHVzZXIgYXR0YWNoIGEgcGVyZm9ybWFuY2UgbW9uaXRvci4iKSwKICAgICAgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCItLW91dHB1dC1qc29uLXBhdGgiLAotICAgICAgICAgICAgICAgIGhl
bHA9IkZpbGVuYW1lIG9mIHRoZSBKU09OIGZpbGUgdGhhdCBzdW1tYXJpZXMgdGhlIHJlc3VsdHMi
KSwKKyAgICAgICAgICAgICAgICBoZWxwPSJGaWxlbmFtZSBvZiB0aGUgSlNPTiBmaWxlIHRoYXQg
c3VtbWFyaWVzIHRoZSByZXN1bHRzLiIpLAogICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oIi0tc291cmNlLWpzb24tcGF0aCIsCi0gICAgICAgICAgICAgICAgaGVscD0iUGF0aCB0byBh
IEpTT04gZmlsZSB0byBiZSBtZXJnZWQgaW50byB0aGUgSlNPTiBmaWxlIHdoZW4gLS1vdXRwdXQt
anNvbi1wYXRoIGlzIHByZXNlbnQiKSwKKyAgICAgICAgICAgICAgICBoZWxwPSJQYXRoIHRvIGEg
SlNPTiBmaWxlIHRvIGJlIG1lcmdlZCBpbnRvIHRoZSBKU09OIGZpbGUgd2hlbiAtLW91dHB1dC1q
c29uLXBhdGggaXMgcHJlc2VudC4iKSwKICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9u
KCItLXRlc3QtcmVzdWx0cy1zZXJ2ZXIiLAotICAgICAgICAgICAgICAgIGhlbHA9IlVwbG9hZCB0
aGUgZ2VuZXJhdGVkIEpTT04gZmlsZSB0byB0aGUgc3BlY2lmaWVkIHNlcnZlciB3aGVuIC0tb3V0
cHV0LWpzb24tcGF0aCBpcyBwcmVzZW50IiksCisgICAgICAgICAgICAgICAgaGVscD0iVXBsb2Fk
IHRoZSBnZW5lcmF0ZWQgSlNPTiBmaWxlIHRvIHRoZSBzcGVjaWZpZWQgc2VydmVyIHdoZW4gLS1v
dXRwdXQtanNvbi1wYXRoIGlzIHByZXNlbnQuIiksCiAgICAgICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbigiLS13ZWJraXQtdGVzdC1ydW5uZXIiLCAiLTIiLCBhY3Rpb249InN0b3JlX3RydWUi
LAogICAgICAgICAgICAgICAgIGhlbHA9IlVzZSBXZWJLaXRUZXN0UnVubmVyIHJhdGhlciB0aGFu
IER1bXBSZW5kZXJUcmVlLiIpLAorICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0t
cmVwbGF5IiwgZGVzdD0icmVwbGF5IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxz
ZSwKKyAgICAgICAgICAgICAgICBoZWxwPSJSdW4gcmVwbGF5IHRlc3RzLiIpLAogICAgICAgICAg
ICAgXQogICAgICAgICByZXR1cm4gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PShw
ZXJmX29wdGlvbl9saXN0KSkucGFyc2VfYXJncyhhcmdzKQogCiAgICAgZGVmIF9jb2xsZWN0X3Rl
c3RzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2YgdGVzdHMgZm91bmQuIiIi
CiAKKyAgICAgICAgdGVzdF9leHRlbnNpb25zID0gWycuaHRtbCcsICcuc3ZnJ10KKyAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy5yZXBsYXk6CisgICAgICAgICAgICB0ZXN0X2V4dGVuc2lvbnMuYXBw
ZW5kKCcucmVwbGF5JykKKwogICAgICAgICBkZWYgX2lzX3Rlc3RfZmlsZShmaWxlc3lzdGVtLCBk
aXJuYW1lLCBmaWxlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gZmlsZXN5c3RlbS5zcGxpdGV4
dChmaWxlbmFtZSlbMV0gaW4gWycuaHRtbCcsICcuc3ZnJ10KKyAgICAgICAgICAgIHJldHVybiBm
aWxlc3lzdGVtLnNwbGl0ZXh0KGZpbGVuYW1lKVsxXSBpbiB0ZXN0X2V4dGVuc2lvbnMKIAogICAg
ICAgICBmaWxlc3lzdGVtID0gc2VsZi5faG9zdC5maWxlc3lzdGVtCiAKQEAgLTEyMiw3ICsxMzAs
OCBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAgICAgICAgIHJlbGF0aXZl
X3BhdGggPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3BlcmZfdGVzdF9maWxlbmFtZShwYXRoKS5yZXBs
YWNlKCdcXCcsICcvJykKICAgICAgICAgICAgIGlmIHNlbGYuX3BvcnQuc2tpcHNfcGVyZl90ZXN0
KHJlbGF0aXZlX3BhdGgpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICB0
ZXN0cy5hcHBlbmQoUGVyZlRlc3RGYWN0b3J5LmNyZWF0ZV9wZXJmX3Rlc3QocmVsYXRpdmVfcGF0
aCwgcGF0aCkpCisgICAgICAgICAgICB0ZXN0ID0gUGVyZlRlc3RGYWN0b3J5LmNyZWF0ZV9wZXJm
X3Rlc3Qoc2VsZi5fcG9ydCwgcmVsYXRpdmVfcGF0aCwgcGF0aCkKKyAgICAgICAgICAgIHRlc3Rz
LmFwcGVuZCh0ZXN0KQogCiAgICAgICAgIHJldHVybiB0ZXN0cwogCkBAIC0xMzEsMTAgKzE0MCwx
MyBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAgICAgICAgICAgIF9sb2cuZXJy
b3IoIkJ1aWxkIG5vdCB1cCB0byBkYXRlIGZvciAlcyIgJSBzZWxmLl9wb3J0Ll9wYXRoX3RvX2Ry
aXZlcigpKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX0VYSVRfQ09ERV9CQURfQlVJTEQKIAot
ICAgICAgICAjIFdlIHdyYXAgYW55IHBhcnRzIG9mIHRoZSBydW4gdGhhdCBhcmUgc2xvdyBvciBs
aWtlbHkgdG8gcmFpc2UgZXhjZXB0aW9ucwotICAgICAgICAjIGluIGEgdHJ5L2ZpbmFsbHkgdG8g
ZW5zdXJlIHRoYXQgd2UgY2xlYW4gdXAgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4KLSAgICAg
ICAgdW5leHBlY3RlZCA9IC0xCiAgICAgICAgIHRlc3RzID0gc2VsZi5fY29sbGVjdF90ZXN0cygp
CisgICAgICAgIF9sb2cuaW5mbygiUnVubmluZyAlZCB0ZXN0cyIgJSBsZW4odGVzdHMpKQorCisg
ICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgaWYgbm90IHRlc3QucHJlcGFy
ZShzZWxmLl9vcHRpb25zLnRpbWVfb3V0X21zKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5fRVhJVF9DT0RFX0JBRF9QUkVQQVJBVElPTgorCiAgICAgICAgIHVuZXhwZWN0ZWQgPSBzZWxm
Ll9ydW5fdGVzdHNfc2V0KHNvcnRlZChsaXN0KHRlc3RzKSwga2V5PWxhbWJkYSB0ZXN0OiB0ZXN0
LnRlc3RfbmFtZSgpKSwgc2VsZi5fcG9ydCkKIAogICAgICAgICBvcHRpb25zID0gc2VsZi5fb3B0
aW9ucwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJm
dGVzdHNydW5uZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfdW5pdHRlc3QucHkJKHJldmlz
aW9uIDExODgxNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMv
cGVyZnRlc3RzcnVubmVyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMTIgKzEy
MCwxMiBAQCBtYXggMTEyMAogICAgICAgICBydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5tYXliZV9t
YWtlX2RpcmVjdG9yeShydW5uZXIuX2Jhc2VfcGF0aCwgJ2luc3BlY3RvcicpCiAgICAgICAgIHJ1
bm5lci5faG9zdC5maWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KHJ1bm5lci5fYmFzZV9w
YXRoLCAnQmluZGluZ3MnKQogICAgICAgICBydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5tYXliZV9t
YWtlX2RpcmVjdG9yeShydW5uZXIuX2Jhc2VfcGF0aCwgJ1BhcnNlcicpCi0gICAgICAgIHJldHVy
biBydW5uZXIKKyAgICAgICAgcmV0dXJuIHJ1bm5lciwgdGVzdF9wb3J0CiAKICAgICBkZWYgcnVu
X3Rlc3Qoc2VsZiwgdGVzdF9uYW1lKToKLSAgICAgICAgcnVubmVyID0gc2VsZi5jcmVhdGVfcnVu
bmVyKCkKKyAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5jcmVhdGVfcnVubmVyKCkKICAgICAg
ICAgZHJpdmVyID0gTWFpblRlc3QuVGVzdERyaXZlcigpCi0gICAgICAgIHJldHVybiBydW5uZXIu
X3J1bl9zaW5nbGVfdGVzdChDaHJvbWl1bVN0eWxlUGVyZlRlc3QodGVzdF9uYW1lLCBydW5uZXIu
X2hvc3QuZmlsZXN5c3RlbS5qb2luKCdzb21lLWRpcicsIHRlc3RfbmFtZSkpLCBkcml2ZXIpCisg
ICAgICAgIHJldHVybiBydW5uZXIuX3J1bl9zaW5nbGVfdGVzdChDaHJvbWl1bVN0eWxlUGVyZlRl
c3QocG9ydCwgdGVzdF9uYW1lLCBydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5qb2luKCdzb21lLWRp
cicsIHRlc3RfbmFtZSkpLCBkcml2ZXIpCiAKICAgICBkZWYgdGVzdF9ydW5fcGFzc2luZ190ZXN0
KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ydW5fdGVzdCgncGFzcy5odG1s
JykpCkBAIC0xNTIsMTkgKzE1MiwxOSBAQCBtYXggMTEyMAogICAgICAgICAgICAgcGF0aCA9IGZp
bGVzeXN0ZW0uam9pbihydW5uZXIuX2Jhc2VfcGF0aCwgdGVzdCkKICAgICAgICAgICAgIGRpcm5h
bWUgPSBmaWxlc3lzdGVtLmRpcm5hbWUocGF0aCkKICAgICAgICAgICAgIGlmIHRlc3Quc3RhcnRz
d2l0aCgnaW5zcGVjdG9yLycpOgotICAgICAgICAgICAgICAgIHRlc3RzLmFwcGVuZChDaHJvbWl1
bVN0eWxlUGVyZlRlc3QodGVzdCwgcGF0aCkpCisgICAgICAgICAgICAgICAgdGVzdHMuYXBwZW5k
KENocm9taXVtU3R5bGVQZXJmVGVzdChydW5uZXIuX3BvcnQsIHRlc3QsIHBhdGgpKQogICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0ZXN0cy5hcHBlbmQoUGVyZlRlc3QodGVzdCwg
cGF0aCkpCisgICAgICAgICAgICAgICAgdGVzdHMuYXBwZW5kKFBlcmZUZXN0KHJ1bm5lci5fcG9y
dCwgdGVzdCwgcGF0aCkpCiAgICAgICAgIHJldHVybiB0ZXN0cwogCiAgICAgZGVmIHRlc3RfcnVu
X3Rlc3Rfc2V0KHNlbGYpOgotICAgICAgICBydW5uZXIgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoKQor
ICAgICAgICBydW5uZXIsIHBvcnQgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoKQogICAgICAgICB0ZXN0
cyA9IHNlbGYuX3Rlc3RzX2Zvcl9ydW5uZXIocnVubmVyLCBbJ2luc3BlY3Rvci9wYXNzLmh0bWwn
LCAnaW5zcGVjdG9yL3NpbGVudC5odG1sJywgJ2luc3BlY3Rvci9mYWlsZWQuaHRtbCcsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL3Rvbmd1ZXkuaHRtbCcsICdpbnNwZWN0b3IvdGltZW91dC5odG1s
JywgJ2luc3BlY3Rvci9jcmFzaC5odG1sJ10pCiAgICAgICAgIG91dHB1dCA9IE91dHB1dENhcHR1
cmUoKQogICAgICAgICBvdXRwdXQuY2FwdHVyZV9vdXRwdXQoKQogICAgICAgICB0cnk6Ci0gICAg
ICAgICAgICB1bmV4cGVjdGVkX3Jlc3VsdF9jb3VudCA9IHJ1bm5lci5fcnVuX3Rlc3RzX3NldCh0
ZXN0cywgcnVubmVyLl9wb3J0KQorICAgICAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRfY291bnQg
PSBydW5uZXIuX3J1bl90ZXN0c19zZXQodGVzdHMsIHBvcnQpCiAgICAgICAgIGZpbmFsbHk6CiAg
ICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciwgbG9nID0gb3V0cHV0LnJlc3RvcmVfb3V0cHV0KCkK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmV4cGVjdGVkX3Jlc3VsdF9jb3VudCwgbGVuKHRl
c3RzKSAtIDEpCkBAIC0xNzgsMTEgKzE3OCwxMSBAQCBtYXggMTEyMAogICAgICAgICAgICAgZGVm
IHN0b3Aoc2VsZik6CiAgICAgICAgICAgICAgICAgVGVzdERyaXZlcldpdGhTdG9wQ291bnQuc3Rv
cF9jb3VudCArPSAxCiAKLSAgICAgICAgcnVubmVyID0gc2VsZi5jcmVhdGVfcnVubmVyKGRyaXZl
cl9jbGFzcz1UZXN0RHJpdmVyV2l0aFN0b3BDb3VudCkKKyAgICAgICAgcnVubmVyLCBwb3J0ID0g
c2VsZi5jcmVhdGVfcnVubmVyKGRyaXZlcl9jbGFzcz1UZXN0RHJpdmVyV2l0aFN0b3BDb3VudCkK
IAogICAgICAgICB0ZXN0cyA9IHNlbGYuX3Rlc3RzX2Zvcl9ydW5uZXIocnVubmVyLCBbJ2luc3Bl
Y3Rvci9wYXNzLmh0bWwnLCAnaW5zcGVjdG9yL3NpbGVudC5odG1sJywgJ2luc3BlY3Rvci9mYWls
ZWQuaHRtbCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL3Rvbmd1ZXkuaHRtbCcsICdpbnNwZWN0
b3IvdGltZW91dC5odG1sJywgJ2luc3BlY3Rvci9jcmFzaC5odG1sJ10pCi0gICAgICAgIHVuZXhw
ZWN0ZWRfcmVzdWx0X2NvdW50ID0gcnVubmVyLl9ydW5fdGVzdHNfc2V0KHRlc3RzLCBydW5uZXIu
X3BvcnQpCisgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0X2NvdW50ID0gcnVubmVyLl9ydW5fdGVz
dHNfc2V0KHRlc3RzLCBwb3J0KQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdERyaXZl
cldpdGhTdG9wQ291bnQuc3RvcF9jb3VudCwgNikKIApAQCAtMTkzLDEzICsxOTMsMTMgQEAgbWF4
IDExMjAKICAgICAgICAgICAgIGRlZiBzdGFydChzZWxmKToKICAgICAgICAgICAgICAgICBUZXN0
RHJpdmVyV2l0aFN0YXJ0Q291bnQuc3RhcnRfY291bnQgKz0gMQogCi0gICAgICAgIHJ1bm5lciA9
IHNlbGYuY3JlYXRlX3J1bm5lcihhcmdzPVsiLS1wYXVzZS1iZWZvcmUtdGVzdGluZyJdLCBkcml2
ZXJfY2xhc3M9VGVzdERyaXZlcldpdGhTdGFydENvdW50KQorICAgICAgICBydW5uZXIsIHBvcnQg
PSBzZWxmLmNyZWF0ZV9ydW5uZXIoYXJncz1bIi0tcGF1c2UtYmVmb3JlLXRlc3RpbmciXSwgZHJp
dmVyX2NsYXNzPVRlc3REcml2ZXJXaXRoU3RhcnRDb3VudCkKICAgICAgICAgdGVzdHMgPSBzZWxm
Ll90ZXN0c19mb3JfcnVubmVyKHJ1bm5lciwgWydpbnNwZWN0b3IvcGFzcy5odG1sJ10pCiAKICAg
ICAgICAgb3V0cHV0ID0gT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG91dHB1dC5jYXB0dXJlX291
dHB1dCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0X2NvdW50
ID0gcnVubmVyLl9ydW5fdGVzdHNfc2V0KHRlc3RzLCBydW5uZXIuX3BvcnQpCisgICAgICAgICAg
ICB1bmV4cGVjdGVkX3Jlc3VsdF9jb3VudCA9IHJ1bm5lci5fcnVuX3Rlc3RzX3NldCh0ZXN0cywg
cG9ydCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdERyaXZlcldpdGhTdGFydENv
dW50LnN0YXJ0X2NvdW50LCAxKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc3Rkb3V0
LCBzdGRlcnIsIGxvZyA9IG91dHB1dC5yZXN0b3JlX291dHB1dCgpCkBAIC0yMDcsMTIgKzIwNywx
MiBAQCBtYXggMTEyMAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZywgIlJ1bm5pbmcgaW5z
cGVjdG9yL3Bhc3MuaHRtbCAoMSBvZiAxKVxuUkVTVUxUIGdyb3VwX25hbWU6IHRlc3RfbmFtZT0g
NDIgbXNcblxuIikKIAogICAgIGRlZiB0ZXN0X3J1bl90ZXN0X3NldF9mb3JfcGFyc2VyX3Rlc3Rz
KHNlbGYpOgotICAgICAgICBydW5uZXIgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoKQorICAgICAgICBy
dW5uZXIsIHBvcnQgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoKQogICAgICAgICB0ZXN0cyA9IHNlbGYu
X3Rlc3RzX2Zvcl9ydW5uZXIocnVubmVyLCBbJ0JpbmRpbmdzL2V2ZW50LXRhcmdldC13cmFwcGVy
Lmh0bWwnLCAnUGFyc2VyL3NvbWUtcGFyc2VyLmh0bWwnXSkKICAgICAgICAgb3V0cHV0ID0gT3V0
cHV0Q2FwdHVyZSgpCiAgICAgICAgIG91dHB1dC5jYXB0dXJlX291dHB1dCgpCiAgICAgICAgIHRy
eToKLSAgICAgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0X2NvdW50ID0gcnVubmVyLl9ydW5fdGVz
dHNfc2V0KHRlc3RzLCBydW5uZXIuX3BvcnQpCisgICAgICAgICAgICB1bmV4cGVjdGVkX3Jlc3Vs
dF9jb3VudCA9IHJ1bm5lci5fcnVuX3Rlc3RzX3NldCh0ZXN0cywgcG9ydCkKICAgICAgICAgZmlu
YWxseToKICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyLCBsb2cgPSBvdXRwdXQucmVzdG9yZV9v
dXRwdXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuZXhwZWN0ZWRfcmVzdWx0X2NvdW50
LCAwKQpAQCAtMjI2LDkgKzIyNiw5IEBAIG1heCAxMTIwCiAgICAgICAgICcnLCAnJ10pKQogCiAg
ICAgZGVmIHRlc3RfcnVuX3Rlc3Rfc2V0X3dpdGhfanNvbl9vdXRwdXQoc2VsZik6Ci0gICAgICAg
IHJ1bm5lciA9IHNlbGYuY3JlYXRlX3J1bm5lcihhcmdzPVsnLS1vdXRwdXQtanNvbi1wYXRoPS9t
b2NrLWNoZWNrb3V0L291dHB1dC5qc29uJ10pCi0gICAgICAgIHJ1bm5lci5faG9zdC5maWxlc3lz
dGVtLmZpbGVzW3J1bm5lci5fYmFzZV9wYXRoICsgJy9pbnNwZWN0b3IvcGFzcy5odG1sJ10gPSBU
cnVlCi0gICAgICAgIHJ1bm5lci5faG9zdC5maWxlc3lzdGVtLmZpbGVzW3J1bm5lci5fYmFzZV9w
YXRoICsgJy9CaW5kaW5ncy9ldmVudC10YXJnZXQtd3JhcHBlci5odG1sJ10gPSBUcnVlCisgICAg
ICAgIHJ1bm5lciwgcG9ydCA9IHNlbGYuY3JlYXRlX3J1bm5lcihhcmdzPVsnLS1vdXRwdXQtanNv
bi1wYXRoPS9tb2NrLWNoZWNrb3V0L291dHB1dC5qc29uJ10pCisgICAgICAgIHBvcnQuaG9zdC5m
aWxlc3lzdGVtLmZpbGVzW3J1bm5lci5fYmFzZV9wYXRoICsgJy9pbnNwZWN0b3IvcGFzcy5odG1s
J10gPSBUcnVlCisgICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzW3J1bm5lci5fYmFz
ZV9wYXRoICsgJy9CaW5kaW5ncy9ldmVudC10YXJnZXQtd3JhcHBlci5odG1sJ10gPSBUcnVlCiAg
ICAgICAgIHJ1bm5lci5fdGltZXN0YW1wID0gMTIzNDU2Nzg5CiAgICAgICAgIG91dHB1dF9jYXB0
dXJlID0gT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG91dHB1dF9jYXB0dXJlLmNhcHR1cmVfb3V0
cHV0KCkKQEAgLTIzOCw3ICsyMzgsOCBAQCBtYXggMTEyMAogICAgICAgICAgICAgc3Rkb3V0LCBz
dGRlcnIsIGxvZ3MgPSBvdXRwdXRfY2FwdHVyZS5yZXN0b3JlX291dHB1dCgpCiAKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChsb2dzLAotICAgICAgICAgICAgJ1xuJy5qb2luKFsnUnVubmluZyBC
aW5kaW5ncy9ldmVudC10YXJnZXQtd3JhcHBlci5odG1sICgxIG9mIDIpJywKKyAgICAgICAgICAg
ICdcbicuam9pbihbJ1J1bm5pbmcgMiB0ZXN0cycsCisgICAgICAgICAgICAgICAgICAgICAgICdS
dW5uaW5nIEJpbmRpbmdzL2V2ZW50LXRhcmdldC13cmFwcGVyLmh0bWwgKDEgb2YgMiknLAogICAg
ICAgICAgICAgICAgICAgICAgICAnUkVTVUxUIEJpbmRpbmdzOiBldmVudC10YXJnZXQtd3JhcHBl
cj0gMTQ4OS4wNSBtcycsCiAgICAgICAgICAgICAgICAgICAgICAgICdtZWRpYW49IDE0ODcuMCBt
cywgc3RkZXY9IDE0LjQ2IG1zLCBtaW49IDE0NzEuMCBtcywgbWF4PSAxNTEwLjAgbXMnLAogICAg
ICAgICAgICAgICAgICAgICAgICAnJywKQEAgLTI0NiwxNyArMjQ3LDE3IEBAIG1heCAxMTIwCiAg
ICAgICAgICAgICAgICAgICAgICAgICdSRVNVTFQgZ3JvdXBfbmFtZTogdGVzdF9uYW1lPSA0MiBt
cycsCiAgICAgICAgICAgICAgICAgICAgICAgICcnLCAnJ10pKQogCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoanNvbi5sb2FkcyhydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5maWxlc1snL21vY2st
Y2hlY2tvdXQvb3V0cHV0Lmpzb24nXSksIHsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29u
LmxvYWRzKHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzWycvbW9jay1jaGVja291dC9vdXRwdXQu
anNvbiddKSwgewogICAgICAgICAgICAgInRpbWVzdGFtcCI6IDEyMzQ1Njc4OSwgInJlc3VsdHMi
OgogICAgICAgICAgICAgeyJCaW5kaW5ncy9ldmVudC10YXJnZXQtd3JhcHBlciI6IHsibWF4Ijog
MTUxMCwgImF2ZyI6IDE0ODkuMDUsICJtZWRpYW4iOiAxNDg3LCAibWluIjogMTQ3MSwgInN0ZGV2
IjogMTQuNDYsICJ1bml0IjogIm1zIn0sCiAgICAgICAgICAgICAiaW5zcGVjdG9yL3Bhc3MuaHRt
bDpncm91cF9uYW1lOnRlc3RfbmFtZSI6IDQyfSwKICAgICAgICAgICAgICJ3ZWJraXQtcmV2aXNp
b24iOiA1Njc4fSkKIAogICAgIGRlZiB0ZXN0X3J1bl90ZXN0X3NldF93aXRoX2pzb25fc291cmNl
KHNlbGYpOgotICAgICAgICBydW5uZXIgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoYXJncz1bJy0tb3V0
cHV0LWpzb24tcGF0aD0vbW9jay1jaGVja291dC9vdXRwdXQuanNvbicsICctLXNvdXJjZS1qc29u
LXBhdGg9L21vY2stY2hlY2tvdXQvc291cmNlLmpzb24nXSkKLSAgICAgICAgcnVubmVyLl9ob3N0
LmZpbGVzeXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNrb3V0L3NvdXJjZS5qc29uJ10gPSAneyJrZXki
OiAidmFsdWUifScKLSAgICAgICAgcnVubmVyLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbcnVubmVy
Ll9iYXNlX3BhdGggKyAnL2luc3BlY3Rvci9wYXNzLmh0bWwnXSA9IFRydWUKLSAgICAgICAgcnVu
bmVyLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbcnVubmVyLl9iYXNlX3BhdGggKyAnL0JpbmRpbmdz
L2V2ZW50LXRhcmdldC13cmFwcGVyLmh0bWwnXSA9IFRydWUKKyAgICAgICAgcnVubmVyLCBwb3J0
ID0gc2VsZi5jcmVhdGVfcnVubmVyKGFyZ3M9WyctLW91dHB1dC1qc29uLXBhdGg9L21vY2stY2hl
Y2tvdXQvb3V0cHV0Lmpzb24nLCAnLS1zb3VyY2UtanNvbi1wYXRoPS9tb2NrLWNoZWNrb3V0L3Nv
dXJjZS5qc29uJ10pCisgICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzWycvbW9jay1j
aGVja291dC9zb3VyY2UuanNvbiddID0gJ3sia2V5IjogInZhbHVlIn0nCisgICAgICAgIHBvcnQu
aG9zdC5maWxlc3lzdGVtLmZpbGVzW3J1bm5lci5fYmFzZV9wYXRoICsgJy9pbnNwZWN0b3IvcGFz
cy5odG1sJ10gPSBUcnVlCisgICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzW3J1bm5l
ci5fYmFzZV9wYXRoICsgJy9CaW5kaW5ncy9ldmVudC10YXJnZXQtd3JhcHBlci5odG1sJ10gPSBU
cnVlCiAgICAgICAgIHJ1bm5lci5fdGltZXN0YW1wID0gMTIzNDU2Nzg5CiAgICAgICAgIG91dHB1
dF9jYXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG91dHB1dF9jYXB0dXJlLmNhcHR1
cmVfb3V0cHV0KCkKQEAgLTI2NSw3ICsyNjYsOCBAQCBtYXggMTEyMAogICAgICAgICBmaW5hbGx5
OgogICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIsIGxvZ3MgPSBvdXRwdXRfY2FwdHVyZS5yZXN0
b3JlX291dHB1dCgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dzLCAnXG4nLmpvaW4o
WydSdW5uaW5nIEJpbmRpbmdzL2V2ZW50LXRhcmdldC13cmFwcGVyLmh0bWwgKDEgb2YgMiknLAor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ3MsICdcbicuam9pbihbJ1J1bm5pbmcgMiB0ZXN0
cycsCisgICAgICAgICAgICAnUnVubmluZyBCaW5kaW5ncy9ldmVudC10YXJnZXQtd3JhcHBlci5o
dG1sICgxIG9mIDIpJywKICAgICAgICAgICAgICdSRVNVTFQgQmluZGluZ3M6IGV2ZW50LXRhcmdl
dC13cmFwcGVyPSAxNDg5LjA1IG1zJywKICAgICAgICAgICAgICdtZWRpYW49IDE0ODcuMCBtcywg
c3RkZXY9IDE0LjQ2IG1zLCBtaW49IDE0NzEuMCBtcywgbWF4PSAxNTEwLjAgbXMnLAogICAgICAg
ICAgICAgJycsCkBAIC0yNzMsNyArMjc1LDcgQEAgbWF4IDExMjAKICAgICAgICAgICAgICdSRVNV
TFQgZ3JvdXBfbmFtZTogdGVzdF9uYW1lPSA0MiBtcycsCiAgICAgICAgICAgICAnJywgJyddKSkK
IAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24ubG9hZHMocnVubmVyLl9ob3N0LmZpbGVz
eXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNrb3V0L291dHB1dC5qc29uJ10pLCB7CisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoanNvbi5sb2Fkcyhwb3J0Lmhvc3QuZmlsZXN5c3RlbS5maWxlc1snL21v
Y2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nXSksIHsKICAgICAgICAgICAgICJ0aW1lc3RhbXAiOiAx
MjM0NTY3ODksICJyZXN1bHRzIjoKICAgICAgICAgICAgIHsiQmluZGluZ3MvZXZlbnQtdGFyZ2V0
LXdyYXBwZXIiOiB7Im1heCI6IDE1MTAsICJhdmciOiAxNDg5LjA1LCAibWVkaWFuIjogMTQ4Nywg
Im1pbiI6IDE0NzEsICJzdGRldiI6IDE0LjQ2LCAidW5pdCI6ICJtcyJ9LAogICAgICAgICAgICAg
Imluc3BlY3Rvci9wYXNzLmh0bWw6Z3JvdXBfbmFtZTp0ZXN0X25hbWUiOiA0Mn0sCkBAIC0yODEs
MTYgKzI4MywxNiBAQCBtYXggMTEyMAogICAgICAgICAgICAgImtleSI6ICJ2YWx1ZSJ9KQogCiAg
ICAgZGVmIHRlc3RfcnVuX3Rlc3Rfc2V0X3dpdGhfbXVsdGlwbGVfcmVwb3NpdG9yaWVzKHNlbGYp
OgotICAgICAgICBydW5uZXIgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoYXJncz1bJy0tb3V0cHV0LWpz
b24tcGF0aD0vbW9jay1jaGVja291dC9vdXRwdXQuanNvbiddKQotICAgICAgICBydW5uZXIuX2hv
c3QuZmlsZXN5c3RlbS5maWxlc1tydW5uZXIuX2Jhc2VfcGF0aCArICcvaW5zcGVjdG9yL3Bhc3Mu
aHRtbCddID0gVHJ1ZQorICAgICAgICBydW5uZXIsIHBvcnQgPSBzZWxmLmNyZWF0ZV9ydW5uZXIo
YXJncz1bJy0tb3V0cHV0LWpzb24tcGF0aD0vbW9jay1jaGVja291dC9vdXRwdXQuanNvbiddKQor
ICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5c3RlbS5maWxlc1tydW5uZXIuX2Jhc2VfcGF0aCArICcv
aW5zcGVjdG9yL3Bhc3MuaHRtbCddID0gVHJ1ZQogICAgICAgICBydW5uZXIuX3RpbWVzdGFtcCA9
IDEyMzQ1Njc4OQotICAgICAgICBydW5uZXIuX3BvcnQucmVwb3NpdG9yeV9wYXRocyA9IGxhbWJk
YTogWygnd2Via2l0JywgJy9tb2NrLWNoZWNrb3V0JyksICgnc29tZScsICcvbW9jay1jaGVja291
dC9zb21lJyldCisgICAgICAgIHBvcnQucmVwb3NpdG9yeV9wYXRocyA9IGxhbWJkYTogWygnd2Vi
a2l0JywgJy9tb2NrLWNoZWNrb3V0JyksICgnc29tZScsICcvbW9jay1jaGVja291dC9zb21lJyld
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVubmVyLnJ1bigpLCAwKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGpzb24ubG9hZHMocnVubmVyLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbJy9t
b2NrLWNoZWNrb3V0L291dHB1dC5qc29uJ10pLCB7CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
anNvbi5sb2Fkcyhwb3J0Lmhvc3QuZmlsZXN5c3RlbS5maWxlc1snL21vY2stY2hlY2tvdXQvb3V0
cHV0Lmpzb24nXSksIHsKICAgICAgICAgICAgICJ0aW1lc3RhbXAiOiAxMjM0NTY3ODksICJyZXN1
bHRzIjogeyJpbnNwZWN0b3IvcGFzcy5odG1sOmdyb3VwX25hbWU6dGVzdF9uYW1lIjogNDIuMH0s
ICJ3ZWJraXQtcmV2aXNpb24iOiA1Njc4LCAic29tZS1yZXZpc2lvbiI6IDU2Nzh9KQogCiAgICAg
ZGVmIHRlc3RfcnVuX3dpdGhfdXBsb2FkX2pzb24oc2VsZik6Ci0gICAgICAgIHJ1bm5lciA9IHNl
bGYuY3JlYXRlX3J1bm5lcihhcmdzPVsnLS1vdXRwdXQtanNvbi1wYXRoPS9tb2NrLWNoZWNrb3V0
L291dHB1dC5qc29uJywKKyAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5jcmVhdGVfcnVubmVy
KGFyZ3M9WyctLW91dHB1dC1qc29uLXBhdGg9L21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nLAog
ICAgICAgICAgICAgJy0tdGVzdC1yZXN1bHRzLXNlcnZlcicsICdzb21lLmhvc3QnLCAnLS1wbGF0
Zm9ybScsICdwbGF0Zm9ybTEnLCAnLS1idWlsZGVyLW5hbWUnLCAnYnVpbGRlcjEnLCAnLS1idWls
ZC1udW1iZXInLCAnMTIzJ10pCiAgICAgICAgIHVwbG9hZF9qc29uX2lzX2NhbGxlZCA9IFtGYWxz
ZV0KICAgICAgICAgdXBsb2FkX2pzb25fcmV0dXJuc190cnVlID0gVHJ1ZQpAQCAtMzAyLDI2ICsz
MDQsMjYgQEAgbWF4IDExMjAKICAgICAgICAgICAgIHJldHVybiB1cGxvYWRfanNvbl9yZXR1cm5z
X3RydWUKIAogICAgICAgICBydW5uZXIuX3VwbG9hZF9qc29uID0gbW9ja191cGxvYWRfanNvbgot
ICAgICAgICBydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5maWxlc1snL21vY2stY2hlY2tvdXQvc291
cmNlLmpzb24nXSA9ICd7ImtleSI6ICJ2YWx1ZSJ9JwotICAgICAgICBydW5uZXIuX2hvc3QuZmls
ZXN5c3RlbS5maWxlc1tydW5uZXIuX2Jhc2VfcGF0aCArICcvaW5zcGVjdG9yL3Bhc3MuaHRtbCdd
ID0gVHJ1ZQotICAgICAgICBydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5maWxlc1tydW5uZXIuX2Jh
c2VfcGF0aCArICcvQmluZGluZ3MvZXZlbnQtdGFyZ2V0LXdyYXBwZXIuaHRtbCddID0gVHJ1ZQor
ICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5c3RlbS5maWxlc1snL21vY2stY2hlY2tvdXQvc291cmNl
Lmpzb24nXSA9ICd7ImtleSI6ICJ2YWx1ZSJ9JworICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5c3Rl
bS5maWxlc1tydW5uZXIuX2Jhc2VfcGF0aCArICcvaW5zcGVjdG9yL3Bhc3MuaHRtbCddID0gVHJ1
ZQorICAgICAgICBwb3J0Lmhvc3QuZmlsZXN5c3RlbS5maWxlc1tydW5uZXIuX2Jhc2VfcGF0aCAr
ICcvQmluZGluZ3MvZXZlbnQtdGFyZ2V0LXdyYXBwZXIuaHRtbCddID0gVHJ1ZQogICAgICAgICBy
dW5uZXIuX3RpbWVzdGFtcCA9IDEyMzQ1Njc4OQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1
bm5lci5ydW4oKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cGxvYWRfanNvbl9pc19j
YWxsZWRbMF0sIFRydWUpCi0gICAgICAgIGdlbmVyYXRlZF9qc29uID0ganNvbi5sb2FkcyhydW5u
ZXIuX2hvc3QuZmlsZXN5c3RlbS5maWxlc1snL21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nXSkK
KyAgICAgICAgZ2VuZXJhdGVkX2pzb24gPSBqc29uLmxvYWRzKHBvcnQuaG9zdC5maWxlc3lzdGVt
LmZpbGVzWycvbW9jay1jaGVja291dC9vdXRwdXQuanNvbiddKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGdlbmVyYXRlZF9qc29uWydwbGF0Zm9ybSddLCAncGxhdGZvcm0xJykKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfanNvblsnYnVpbGRlci1uYW1lJ10sICdidWlsZGVy
MScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2pzb25bJ2J1aWxkLW51bWJl
ciddLCAxMjMpCiAgICAgICAgIHVwbG9hZF9qc29uX3JldHVybnNfdHJ1ZSA9IEZhbHNlCiAKLSAg
ICAgICAgcnVubmVyID0gc2VsZi5jcmVhdGVfcnVubmVyKGFyZ3M9WyctLW91dHB1dC1qc29uLXBh
dGg9L21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nLAorICAgICAgICBydW5uZXIsIHBvcnQgPSBz
ZWxmLmNyZWF0ZV9ydW5uZXIoYXJncz1bJy0tb3V0cHV0LWpzb24tcGF0aD0vbW9jay1jaGVja291
dC9vdXRwdXQuanNvbicsCiAgICAgICAgICAgICAnLS10ZXN0LXJlc3VsdHMtc2VydmVyJywgJ3Nv
bWUuaG9zdCcsICctLXBsYXRmb3JtJywgJ3BsYXRmb3JtMScsICctLWJ1aWxkZXItbmFtZScsICdi
dWlsZGVyMScsICctLWJ1aWxkLW51bWJlcicsICcxMjMnXSkKICAgICAgICAgcnVubmVyLl91cGxv
YWRfanNvbiA9IG1vY2tfdXBsb2FkX2pzb24KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5u
ZXIucnVuKCksIC0zKQogCiAgICAgZGVmIHRlc3RfdXBsb2FkX2pzb24oc2VsZik6Ci0gICAgICAg
IHJ1bm5lciA9IHNlbGYuY3JlYXRlX3J1bm5lcigpCi0gICAgICAgIHJ1bm5lci5faG9zdC5maWxl
c3lzdGVtLmZpbGVzWycvbW9jay1jaGVja291dC9zb21lLmpzb24nXSA9ICdzb21lIGNvbnRlbnQn
CisgICAgICAgIHJ1bm5lciwgcG9ydCA9IHNlbGYuY3JlYXRlX3J1bm5lcigpCisgICAgICAgIHBv
cnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzWycvbW9jay1jaGVja291dC9zb21lLmpzb24nXSA9ICdz
b21lIGNvbnRlbnQnCiAKICAgICAgICAgY2FsbGVkID0gW10KICAgICAgICAgdXBsb2FkX3Npbmds
ZV90ZXh0X2ZpbGVfdGhyb3dzID0gRmFsc2UKQEAgLTMzNCw3ICszMzYsNyBAQCBtYXggMTEyMAog
ICAgICAgICAgICAgICAgIGNhbGxlZC5hcHBlbmQoJ0ZpbGVVcGxvYWRlcicpCiAKICAgICAgICAg
ICAgIGRlZiB1cGxvYWRfc2luZ2xlX3RleHRfZmlsZShtb2NrLCBmaWxlc3lzdGVtLCBjb250ZW50
X3R5cGUsIGZpbGVuYW1lKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVz
eXN0ZW0sIHJ1bm5lci5faG9zdC5maWxlc3lzdGVtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZmlsZXN5c3RlbSwgcG9ydC5ob3N0LmZpbGVzeXN0ZW0pCiAgICAgICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50X3R5cGUsICdhcHBsaWNhdGlvbi9qc29uJykKICAg
ICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVuYW1lLCAnc29tZS5qc29uJykKICAg
ICAgICAgICAgICAgICBjYWxsZWQuYXBwZW5kKCd1cGxvYWRfc2luZ2xlX3RleHRfZmlsZScpCkBA
IC0zNTgsNTkgKzM2MCw2NCBAQCBtYXggMTEyMAogICAgICAgICBydW5uZXIuX3VwbG9hZF9qc29u
KCdzb21lLmhvc3QnLCAnc29tZS5qc29uJywgTW9ja0ZpbGVVcGxvYWRlcikKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjYWxsZWQsIFsnRmlsZVVwbG9hZGVyJywgJ3VwbG9hZF9zaW5nbGVfdGV4
dF9maWxlJ10pCiAKKyAgICBkZWYgX2FkZF9maWxlKHNlbGYsIHJ1bm5lciwgZGlybmFtZSwgZmls
ZW5hbWUsIGNvbnRlbnQ9VHJ1ZSk6CisgICAgICAgIGRpcm5hbWUgPSBydW5uZXIuX2hvc3QuZmls
ZXN5c3RlbS5qb2luKHJ1bm5lci5fYmFzZV9wYXRoLCBkaXJuYW1lKSBpZiBkaXJuYW1lIGVsc2Ug
cnVubmVyLl9iYXNlX3BhdGgKKyAgICAgICAgcnVubmVyLl9ob3N0LmZpbGVzeXN0ZW0ubWF5YmVf
bWFrZV9kaXJlY3RvcnkoZGlybmFtZSkKKyAgICAgICAgcnVubmVyLl9ob3N0LmZpbGVzeXN0ZW0u
ZmlsZXNbcnVubmVyLl9ob3N0LmZpbGVzeXN0ZW0uam9pbihkaXJuYW1lLCBmaWxlbmFtZSldID0g
Y29udGVudAorCiAgICAgZGVmIHRlc3RfY29sbGVjdF90ZXN0cyhzZWxmKToKLSAgICAgICAgcnVu
bmVyID0gc2VsZi5jcmVhdGVfcnVubmVyKCkKLSAgICAgICAgZmlsZW5hbWUgPSBydW5uZXIuX2hv
c3QuZmlsZXN5c3RlbS5qb2luKHJ1bm5lci5fYmFzZV9wYXRoLCAnaW5zcGVjdG9yJywgJ2FfZmls
ZS5odG1sJykKLSAgICAgICAgcnVubmVyLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbZmlsZW5hbWVd
ID0gJ2EgY29udGVudCcKKyAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5jcmVhdGVfcnVubmVy
KCkKKyAgICAgICAgc2VsZi5fYWRkX2ZpbGUocnVubmVyLCAnaW5zcGVjdG9yJywgJ2FfZmlsZS5o
dG1sJywgJ2EgY29udGVudCcpCiAgICAgICAgIHRlc3RzID0gcnVubmVyLl9jb2xsZWN0X3Rlc3Rz
KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdHMpLCAxKQogCiAgICAgZGVmIF9j
b2xsZWN0X3Rlc3RzX2FuZF9zb3J0X3Rlc3RfbmFtZShzZWxmLCBydW5uZXIpOgogICAgICAgICBy
ZXR1cm4gc29ydGVkKFt0ZXN0LnRlc3RfbmFtZSgpIGZvciB0ZXN0IGluIHJ1bm5lci5fY29sbGVj
dF90ZXN0cygpXSkKIAotICAgIGRlZiB0ZXN0X2NvbGxlY3RfdGVzdHMoc2VsZik6Ci0gICAgICAg
IHJ1bm5lciA9IHNlbGYuY3JlYXRlX3J1bm5lcihhcmdzPVsnUGVyZm9ybWFuY2VUZXN0cy90ZXN0
MS5odG1sJywgJ3Rlc3QyLmh0bWwnXSkKKyAgICBkZWYgdGVzdF9jb2xsZWN0X3Rlc3RzX3dpdGhf
bXVsdGlsZV9maWxlcyhzZWxmKToKKyAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5jcmVhdGVf
cnVubmVyKGFyZ3M9WydQZXJmb3JtYW5jZVRlc3RzL3Rlc3QxLmh0bWwnLCAndGVzdDIuaHRtbCdd
KQogCiAgICAgICAgIGRlZiBhZGRfZmlsZShmaWxlbmFtZSk6Ci0gICAgICAgICAgICBydW5uZXIu
X2hvc3QuZmlsZXN5c3RlbS5maWxlc1tydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5qb2luKHJ1bm5l
ci5fYmFzZV9wYXRoLCBmaWxlbmFtZSldID0gJ3NvbWUgY29udGVudCcKKyAgICAgICAgICAgIHBv
cnQuaG9zdC5maWxlc3lzdGVtLmZpbGVzW3J1bm5lci5faG9zdC5maWxlc3lzdGVtLmpvaW4ocnVu
bmVyLl9iYXNlX3BhdGgsIGZpbGVuYW1lKV0gPSAnc29tZSBjb250ZW50JwogCiAgICAgICAgIGFk
ZF9maWxlKCd0ZXN0MS5odG1sJykKICAgICAgICAgYWRkX2ZpbGUoJ3Rlc3QyLmh0bWwnKQogICAg
ICAgICBhZGRfZmlsZSgndGVzdDMuaHRtbCcpCi0gICAgICAgIHJ1bm5lci5faG9zdC5maWxlc3lz
dGVtLmNoZGlyKHJ1bm5lci5fcG9ydC5wZXJmX3Rlc3RzX2RpcigpWzpydW5uZXIuX3BvcnQucGVy
Zl90ZXN0c19kaXIoKS5yZmluZChydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5zZXApXSkKKyAgICAg
ICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0uY2hkaXIocnVubmVyLl9wb3J0LnBlcmZfdGVzdHNfZGly
KClbOnJ1bm5lci5fcG9ydC5wZXJmX3Rlc3RzX2RpcigpLnJmaW5kKHJ1bm5lci5faG9zdC5maWxl
c3lzdGVtLnNlcCldKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2NvbGxlY3RfdGVz
dHNfYW5kX3NvcnRfdGVzdF9uYW1lKHJ1bm5lciksIFsndGVzdDEuaHRtbCcsICd0ZXN0Mi5odG1s
J10pCiAKICAgICBkZWYgdGVzdF9jb2xsZWN0X3Rlc3RzX3dpdGhfc2tpcHBlZF9saXN0KHNlbGYp
OgotICAgICAgICBydW5uZXIgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoKQorICAgICAgICBydW5uZXIs
IHBvcnQgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoKQogCi0gICAgICAgIGRlZiBhZGRfZmlsZShkaXJu
YW1lLCBmaWxlbmFtZSwgY29udGVudD1UcnVlKToKLSAgICAgICAgICAgIGRpcm5hbWUgPSBydW5u
ZXIuX2hvc3QuZmlsZXN5c3RlbS5qb2luKHJ1bm5lci5fYmFzZV9wYXRoLCBkaXJuYW1lKSBpZiBk
aXJuYW1lIGVsc2UgcnVubmVyLl9iYXNlX3BhdGgKLSAgICAgICAgICAgIHJ1bm5lci5faG9zdC5m
aWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KGRpcm5hbWUpCi0gICAgICAgICAgICBydW5u
ZXIuX2hvc3QuZmlsZXN5c3RlbS5maWxlc1tydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5qb2luKGRp
cm5hbWUsIGZpbGVuYW1lKV0gPSBjb250ZW50Ci0KLSAgICAgICAgYWRkX2ZpbGUoJ2luc3BlY3Rv
cicsICd0ZXN0MS5odG1sJykKLSAgICAgICAgYWRkX2ZpbGUoJ2luc3BlY3RvcicsICd1bnN1cHBv
cnRlZF90ZXN0MS5odG1sJykKLSAgICAgICAgYWRkX2ZpbGUoJ2luc3BlY3RvcicsICd0ZXN0Mi5o
dG1sJykKLSAgICAgICAgYWRkX2ZpbGUoJ2luc3BlY3Rvci9yZXNvdXJjZXMnLCAncmVzb3VyY2Vf
ZmlsZS5odG1sJykKLSAgICAgICAgYWRkX2ZpbGUoJ3Vuc3VwcG9ydGVkJywgJ3Vuc3VwcG9ydGVk
X3Rlc3QyLmh0bWwnKQotICAgICAgICBydW5uZXIuX3BvcnQuc2tpcHBlZF9wZXJmX3Rlc3RzID0g
bGFtYmRhOiBbJ2luc3BlY3Rvci91bnN1cHBvcnRlZF90ZXN0MS5odG1sJywgJ3Vuc3VwcG9ydGVk
J10KKyAgICAgICAgc2VsZi5fYWRkX2ZpbGUocnVubmVyLCAnaW5zcGVjdG9yJywgJ3Rlc3QxLmh0
bWwnKQorICAgICAgICBzZWxmLl9hZGRfZmlsZShydW5uZXIsICdpbnNwZWN0b3InLCAndW5zdXBw
b3J0ZWRfdGVzdDEuaHRtbCcpCisgICAgICAgIHNlbGYuX2FkZF9maWxlKHJ1bm5lciwgJ2luc3Bl
Y3RvcicsICd0ZXN0Mi5odG1sJykKKyAgICAgICAgc2VsZi5fYWRkX2ZpbGUocnVubmVyLCAnaW5z
cGVjdG9yL3Jlc291cmNlcycsICdyZXNvdXJjZV9maWxlLmh0bWwnKQorICAgICAgICBzZWxmLl9h
ZGRfZmlsZShydW5uZXIsICd1bnN1cHBvcnRlZCcsICd1bnN1cHBvcnRlZF90ZXN0Mi5odG1sJykK
KyAgICAgICAgcG9ydC5za2lwcGVkX3BlcmZfdGVzdHMgPSBsYW1iZGE6IFsnaW5zcGVjdG9yL3Vu
c3VwcG9ydGVkX3Rlc3QxLmh0bWwnLCAndW5zdXBwb3J0ZWQnXQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYuX2NvbGxlY3RfdGVzdHNfYW5kX3NvcnRfdGVzdF9uYW1lKHJ1bm5lciksIFsn
aW5zcGVjdG9yL3Rlc3QxLmh0bWwnLCAnaW5zcGVjdG9yL3Rlc3QyLmh0bWwnXSkKIAogICAgIGRl
ZiB0ZXN0X2NvbGxlY3RfdGVzdHNfd2l0aF9wYWdlX2xvYWRfc3ZnKHNlbGYpOgotICAgICAgICBy
dW5uZXIgPSBzZWxmLmNyZWF0ZV9ydW5uZXIoKQotCi0gICAgICAgIGRlZiBhZGRfZmlsZShkaXJu
YW1lLCBmaWxlbmFtZSwgY29udGVudD1UcnVlKToKLSAgICAgICAgICAgIGRpcm5hbWUgPSBydW5u
ZXIuX2hvc3QuZmlsZXN5c3RlbS5qb2luKHJ1bm5lci5fYmFzZV9wYXRoLCBkaXJuYW1lKSBpZiBk
aXJuYW1lIGVsc2UgcnVubmVyLl9iYXNlX3BhdGgKLSAgICAgICAgICAgIHJ1bm5lci5faG9zdC5m
aWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KGRpcm5hbWUpCi0gICAgICAgICAgICBydW5u
ZXIuX2hvc3QuZmlsZXN5c3RlbS5maWxlc1tydW5uZXIuX2hvc3QuZmlsZXN5c3RlbS5qb2luKGRp
cm5hbWUsIGZpbGVuYW1lKV0gPSBjb250ZW50Ci0KLSAgICAgICAgYWRkX2ZpbGUoJ1BhZ2VMb2Fk
JywgJ3NvbWUtc3ZnLXRlc3Quc3ZnJykKKyAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5jcmVh
dGVfcnVubmVyKCkKKyAgICAgICAgc2VsZi5fYWRkX2ZpbGUocnVubmVyLCAnUGFnZUxvYWQnLCAn
c29tZS1zdmctdGVzdC5zdmcnKQogICAgICAgICB0ZXN0cyA9IHJ1bm5lci5fY29sbGVjdF90ZXN0
cygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RzKSwgMSkKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCh0ZXN0c1swXS5fX2NsYXNzX18uX19uYW1lX18sICdQYWdlTG9hZGluZ1Bl
cmZUZXN0JykKIAorICAgIGRlZiB0ZXN0X2NvbGxlY3RfdGVzdHNfc2hvdWxkX2lnbm9yZV9yZXBs
YXlfdGVzdHNfYnlfZGVmYXVsdChzZWxmKToKKyAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5j
cmVhdGVfcnVubmVyKCkKKyAgICAgICAgc2VsZi5fYWRkX2ZpbGUocnVubmVyLCAnUmVwbGF5Jywg
J3d3dy53ZWJraXQub3JnLnJlcGxheScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVubmVy
Ll9jb2xsZWN0X3Rlc3RzKCksIFtdKQorCisgICAgZGVmIHRlc3RfY29sbGVjdF90ZXN0c193aXRo
X3JlcGxheV90ZXN0cyhzZWxmKToKKyAgICAgICAgcnVubmVyLCBwb3J0ID0gc2VsZi5jcmVhdGVf
cnVubmVyKGFyZ3M9WyctLXJlcGxheSddKQorICAgICAgICBzZWxmLl9hZGRfZmlsZShydW5uZXIs
ICdSZXBsYXknLCAnd3d3LndlYmtpdC5vcmcucmVwbGF5JykKKyAgICAgICAgdGVzdHMgPSBydW5u
ZXIuX2NvbGxlY3RfdGVzdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0cyks
IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHNbMF0uX19jbGFzc19fLl9fbmFtZV9f
LCAnUmVwbGF5UGVyZlRlc3QnKQorCiAgICAgZGVmIHRlc3RfcGFyc2VfYXJncyhzZWxmKToKLSAg
ICAgICAgcnVubmVyID0gc2VsZi5jcmVhdGVfcnVubmVyKCkKKyAgICAgICAgcnVubmVyLCBwb3J0
ID0gc2VsZi5jcmVhdGVfcnVubmVyKCkKICAgICAgICAgb3B0aW9ucywgYXJncyA9IFBlcmZUZXN0
c1J1bm5lci5fcGFyc2VfYXJncyhbCiAgICAgICAgICAgICAgICAgJy0tYnVpbGQtZGlyZWN0b3J5
PWZvbGRlcjQyJywKICAgICAgICAgICAgICAgICAnLS1wbGF0Zm9ybT1wbGF0Zm9ybTQyJywKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkJKHJl
dmlzaW9uIDExODgxNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2lu
aXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsOCBAQCBjbGFzcyBBdXRvaW5zdGFs
bEltcG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfaXJjKCkKICAg
ICAgICAgZWxpZiAnLmJ1aWxkYm90JyBpbiBmdWxsbmFtZToKICAgICAgICAgICAgIHNlbGYuX2lu
c3RhbGxfYnVpbGRib3QoKQorICAgICAgICBlbGlmICcud2VicGFnZXJlcGxheScgaW4gZnVsbG5h
bWU6CisgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX3dlYnBhZ2VyZXBsYXkoKQogCiAgICAgZGVm
IF9pbnN0YWxsX21lY2hhbml6ZShzZWxmKToKICAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cDov
L3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUvbWVjaGFuaXplLTAu
Mi41LnRhci5neiIsCkBAIC0xMjYsNiArMTI4LDE1IEBAIGNsYXNzIEF1dG9pbnN0YWxsSW1wb3J0
SG9vayhvYmplY3QpOgogICAgICAgICBpbnN0YWxsZXIuaW5zdGFsbCh1cmw9Imh0dHA6Ly9kb3du
bG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvcHl0aG9uLWlyY2xpYi9weXRob24taXJjbGli
LzAuNC44L3B5dGhvbi1pcmNsaWItMC40LjguemlwIiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXJsX3N1YnBhdGg9ImlyY2JvdC5weSIpCiAKKyAgICBkZWYgX2luc3RhbGxfd2VicGFnZXJl
cGxheShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZzLmV4aXN0cyhzZWxmLl9mcy5qb2lu
KF9BVVRPSU5TVEFMTEVEX0RJUiwgIndlYnBhZ2VyZXBsYXkiKSk6CisgICAgICAgICAgICBzZWxm
Ll9pbnN0YWxsKCJodHRwOi8vd2ViLXBhZ2UtcmVwbGF5Lmdvb2dsZWNvZGUuY29tL2ZpbGVzL3dl
YnBhZ2VyZXBsYXktMS4xLjEudGFyLmd6IiwgIndlYnBhZ2VyZXBsYXktMS4xLjEiKQorICAgICAg
ICAgICAgc2VsZi5fZnMubW92ZShzZWxmLl9mcy5qb2luKF9BVVRPSU5TVEFMTEVEX0RJUiwgIndl
YnBhZ2VyZXBsYXktMS4xLjEiKSwgc2VsZi5fZnMuam9pbihfQVVUT0lOU1RBTExFRF9ESVIsICJ3
ZWJwYWdlcmVwbGF5IikpCisKKyAgICAgICAgaW5pdF9wYXRoID0gc2VsZi5fZnMuam9pbihfQVVU
T0lOU1RBTExFRF9ESVIsICJ3ZWJwYWdlcmVwbGF5IiwgIl9faW5pdF9fLnB5IikKKyAgICAgICAg
aWYgbm90IHNlbGYuX2ZzLmV4aXN0cyhpbml0X3BhdGgpOgorICAgICAgICAgICAgc2VsZi5fZnMu
d3JpdGVfdGV4dF9maWxlKGluaXRfcGF0aCwgIiIpCisKICAgICBkZWYgX2luc3RhbGwoc2VsZiwg
dXJsLCB1cmxfc3VicGF0aCk6CiAgICAgICAgIGluc3RhbGxlciA9IEF1dG9JbnN0YWxsZXIodGFy
Z2V0X2Rpcj1fQVVUT0lOU1RBTExFRF9ESVIpCiAgICAgICAgIGluc3RhbGxlci5pbnN0YWxsKHVy
bD11cmwsIHVybF9zdWJwYXRoPXVybF9zdWJwYXRoKQo=
</data>
<flag name="review"
          id="152243"
          type_id="1"
          status="+"
          setter="dpranke"
    />
          </attachment>
      

    </bug>

</bugzilla>